diff --git a/cat/tjs/lib/TextDecoder.js b/cat/tjs/lib/TextDecoder.js new file mode 100644 index 0000000..29cd803 --- /dev/null +++ b/cat/tjs/lib/TextDecoder.js @@ -0,0 +1,190 @@ +import Stream, { DEFAULT_ENCODING, getEncoding } from './text_decoder_index.js' +import { end_of_stream, finished, codePointsToString } from './text_decoder_utils.js' +import { decoders } from './table.js' + +// 8.1 Interface TextDecoder + +class TextDecoder { + /** + * @param {string=} label The label of the encoding; defaults to 'utf-8'. + * @param {Object=} options + */ + constructor(label = DEFAULT_ENCODING, options = {}) { + // A TextDecoder object has an associated encoding, decoder, + // stream, ignore BOM flag (initially unset), BOM seen flag + // (initially unset), error mode (initially replacement), and do + // not flush flag (initially unset). + + /** @private */ + this._encoding = null + /** @private @type {?Decoder} */ + this._decoder = null + /** @private @type {boolean} */ + this._ignoreBOM = false + /** @private @type {boolean} */ + this._BOMseen = false + /** @private @type {string} */ + this._error_mode = 'replacement' + /** @private @type {boolean} */ + this._do_not_flush = false + + + // 1. Let encoding be the result of getting an encoding from + // label. + const encoding = getEncoding(label) + + // 2. If encoding is failure or replacement, throw a RangeError. + if (encoding === null || encoding.name == 'replacement') + throw RangeError('Unknown encoding: ' + label) + if (!decoders[encoding.name]) { + throw Error('Decoder not present.' + + ' Did you forget to include encoding-indexes.js first?') + } + + // 4. Set dec's encoding to encoding. + this._encoding = encoding + + // 5. If options's fatal member is true, set dec's error mode to + // fatal. + if (options['fatal']) + this._error_mode = 'fatal' + + // 6. If options's ignoreBOM member is true, set dec's ignore BOM + // flag. + if (options['ignoreBOM']) + this._ignoreBOM = true + } + + get encoding() { + return this._encoding.name.toLowerCase() + } + get fatal() { + return this._error_mode === 'fatal' + } + get ignoreBOM() { + return this._ignoreBOM + } + /** + * @param {BufferSource=} input The buffer of bytes to decode. + * @param {Object=} options + * @return The decoded string. + */ + decode(input, options = {}) { + let bytes + if (typeof input === 'object' && input instanceof ArrayBuffer) { + bytes = new Uint8Array(input) + } else if (typeof input === 'object' && 'buffer' in input && + input.buffer instanceof ArrayBuffer) { + bytes = new Uint8Array(input.buffer, + input.byteOffset, + input.byteLength) + } else { + bytes = new Uint8Array(0) + } + + // 1. If the do not flush flag is unset, set decoder to a new + // encoding's decoder, set stream to a new stream, and unset the + // BOM seen flag. + if (!this._do_not_flush) { + this._decoder = decoders[this._encoding.name]({ + fatal: this._error_mode === 'fatal' }) + this._BOMseen = false + } + + // 2. If options's stream is true, set the do not flush flag, and + // unset the do not flush flag otherwise. + this._do_not_flush = Boolean(options['stream']) + + // 3. If input is given, push a copy of input to stream. + // TODO: Align with spec algorithm - maintain stream on instance. + const input_stream = new Stream(bytes) + + // 4. Let output be a new stream. + const output = [] + + /** @type {?(number|!Array.)} */ + let result + + // 5. While true: + while (true) { + // 1. Let token be the result of reading from stream. + const token = input_stream.read() + + // 2. If token is end-of-stream and the do not flush flag is + // set, return output, serialized. + // TODO: Align with spec algorithm. + if (token === end_of_stream) + break + + // 3. Otherwise, run these subsubsteps: + + // 1. Let result be the result of processing token for decoder, + // stream, output, and error mode. + result = this._decoder.handler(input_stream, token) + + // 2. If result is finished, return output, serialized. + if (result === finished) + break + + if (result !== null) { + if (Array.isArray(result)) + output.push.apply(output, /**@type {!Array.}*/(result)) + else + output.push(result) + } + + // 3. Otherwise, if result is error, throw a TypeError. + // (Thrown in handler) + + // 4. Otherwise, do nothing. + } + // TODO: Align with spec algorithm. + if (!this._do_not_flush) { + do { + result = this._decoder.handler(input_stream, input_stream.read()) + if (result === finished) + break + if (result === null) + continue + if (Array.isArray(result)) + output.push.apply(output, /**@type {!Array.}*/(result)) + else + output.push(result) + } while (!input_stream.endOfStream()) + this._decoder = null + } + + return this.serializeStream(output) + } + // A TextDecoder object also has an associated serialize stream + // algorithm... + /** + * @param {!Array.} stream + */ + serializeStream(stream) { + // 1. Let token be the result of reading from stream. + // (Done in-place on array, rather than as a stream) + + // 2. If encoding is UTF-8, UTF-16BE, or UTF-16LE, and ignore + // BOM flag and BOM seen flag are unset, run these subsubsteps: + if (['UTF-8', 'UTF-16LE', 'UTF-16BE'].includes(this._encoding.name) && + !this._ignoreBOM && !this._BOMseen) { + if (stream.length > 0 && stream[0] === 0xFEFF) { + // 1. If token is U+FEFF, set BOM seen flag. + this._BOMseen = true + stream.shift() + } else if (stream.length > 0) { + // 2. Otherwise, if token is not end-of-stream, set BOM seen + // flag and append token to stream. + this._BOMseen = true + } else { + // 3. Otherwise, if token is not end-of-stream, append token + // to output. + // (no-op) + } + } + // 4. Otherwise, return output. + return codePointsToString(stream) + } +} +export {TextDecoder} \ No newline at end of file diff --git a/cat/tjs/lib/TextEncoder.js b/cat/tjs/lib/TextEncoder.js new file mode 100644 index 0000000..01fa24c --- /dev/null +++ b/cat/tjs/lib/TextEncoder.js @@ -0,0 +1,107 @@ +import Stream, { DEFAULT_ENCODING, getEncoding } from './text_decoder_index.js' +import { end_of_stream, finished, stringToCodePoints } from './text_decoder_utils.js' +import { encoders } from './table.js' + +// 8.2 Interface TextEncoder + +class TextEncoder { + /** + * @param {string=} label The label of the encoding. NONSTANDARD. + * @param {Object=} [options] NONSTANDARD. + */ + constructor(label, options = {}) { + // A TextEncoder object has an associated encoding and encoder. + + /** @private */ + this._encoding = null + /** @private @type {?Encoder} */ + this._encoder = null + + // Non-standard + /** @private @type {boolean} */ + this._do_not_flush = false + /** @private @type {string} */ + this._fatal = options['fatal'] ? 'fatal' : 'replacement' + + // 2. Set enc's encoding to UTF-8's encoder. + if (options['NONSTANDARD_allowLegacyEncoding']) { + // NONSTANDARD behavior. + label = label !== undefined ? String(label) : DEFAULT_ENCODING + var encoding = getEncoding(label) + if (encoding === null || encoding.name === 'replacement') + throw RangeError('Unknown encoding: ' + label) + if (!encoders[encoding.name]) { + throw Error('Encoder not present.' + + ' Did you forget to include encoding-indexes.js first?') + } + this._encoding = encoding + } else { + // Standard behavior. + this._encoding = getEncoding('utf-8') + + if (label !== undefined && 'console' in global) { + console.warn('TextEncoder constructor called with encoding label, ' + + 'which is ignored.') + } + } + } + get encoding() { + return this._encoding.name.toLowerCase() + } + /** + * @param {string=} opt_string The string to encode. + * @param {Object=} options + */ + encode(opt_string = '', options = {}) { + // NOTE: This option is nonstandard. None of the encodings + // permitted for encoding (i.e. UTF-8, UTF-16) are stateful when + // the input is a USVString so streaming is not necessary. + if (!this._do_not_flush) + this._encoder = encoders[this._encoding.name]({ + fatal: this._fatal === 'fatal' }) + this._do_not_flush = Boolean(options['stream']) + + // 1. Convert input to a stream. + const input = new Stream(stringToCodePoints(opt_string)) + + // 2. Let output be a new stream + const output = [] + + /** @type {?(number|!Array.)} */ + var result + // 3. While true, run these substeps: + while (true) { + // 1. Let token be the result of reading from input. + var token = input.read() + if (token === end_of_stream) + break + // 2. Let result be the result of processing token for encoder, + // input, output. + result = this._encoder.handler(input, token) + if (result === finished) + break + if (Array.isArray(result)) + output.push.apply(output, /**@type {!Array.}*/(result)) + else + output.push(result) + } + // TODO: Align with spec algorithm. + if (!this._do_not_flush) { + while (true) { + result = this._encoder.handler(input, input.read()) + if (result === finished) + break + if (Array.isArray(result)) + output.push.apply(output, /**@type {!Array.}*/(result)) + else + output.push(result) + } + this._encoder = null + } + // 3. If result is finished, convert output into a byte sequence, + // and then return a Uint8Array object wrapping an ArrayBuffer + // containing output. + return new Uint8Array(output) + } +} +export {TextEncoder} \ No newline at end of file diff --git a/cat/tjs/lib/ali.js b/cat/tjs/lib/ali.js new file mode 100644 index 0000000..9d6420e --- /dev/null +++ b/cat/tjs/lib/ali.js @@ -0,0 +1,86 @@ +/* + * @Author: samples jadehh@live.com + * @Date: 2023-12-14 11:03:04 + * @LastEditors: samples jadehh@live.com + * @LastEditTime: 2023-12-14 11:03:04 + * @FilePath: lib/ali.js + * @Description: 阿里云盘Spider公共 + */ +import { + initSome, + clearFile, + playerContent, + playerContentByFlag, + setShareId, + setToken, + getFileByShare, getTempFileId +} from './ali_api.js'; +import {JadeLogging} from "./log.js"; +const aliName = "阿里云盘" +const JadeLog = new JadeLogging(aliName) +const aliPlayFormatList = ["原画", "超清", "高清", "标清"] + +async function initAli(token) { + await initSome(); + await setToken(token); + await getTempFileId(); + // await clearFile(); + await JadeLog.info("阿里云盘初始化完成", true) +} + + +function getShareId(share_url) { + let patternAli = /https:\/\/www\.alipan\.com\/s\/([^\\/]+)(\/folder\/([^\\/]+))?|https:\/\/www\.aliyundrive\.com\/s\/([^\\/]+)(\/folder\/([^\\/]+))?/ + let matches = patternAli.exec(share_url) + const filteredArr = matches.filter(item => item !== undefined); + if (filteredArr.length > 1) { + return filteredArr[1] + } else { + return "" + } +} + +async function detailContentAli(share_url_list, type_name = "电影") { + try { + let video_items = [], sub_items = [] + + + for (let i=0;i 0) { + await JadeLog.info(`获取播放链接成功,分享链接为:${share_url_list.join("\t")}`) + } else { + await JadeLog.error(`获取播放链接失败,检查分享链接为:${share_url_list.join("\t")}`) + } + return {"video_items":video_items,"sub_items":sub_items} + } catch (e) { + await JadeLog.error('获取阿里视频失败,失败原因为:' + e.message + ' 行数为:' + e.lineNumber); + } +} + +async function playContentAli(flag, id, flags) { + if (flags.length > 0) { + await JadeLog.info(`准备播放,播放类型为:${flag},播放文件Id为:${id},播放所有类型为:${flags.join("")}`) + } else { + await JadeLog.info(`准备播放,播放类型为:${flag},播放文件Id为:${id},播放所有类型为:${flags.join("")}`) + } + let file_id_list = id.split("+") + let share_id = file_id_list[1] + let file_id = file_id_list[0] + let share_token = file_id_list[2] + return flag === "原画" ? await playerContent(file_id, share_id, share_token) : await playerContentByFlag(file_id, flag, share_id, share_token); +} + +export { + initAli, + detailContentAli, + playContentAli, + aliPlayFormatList, + aliName, +}; \ No newline at end of file diff --git a/cat/tjs/lib/ali_api.js b/cat/tjs/lib/ali_api.js new file mode 100644 index 0000000..2360258 --- /dev/null +++ b/cat/tjs/lib/ali_api.js @@ -0,0 +1,677 @@ +/* + * @Author: samples jadehh@live.com + * @Date: 2023-12-14 11:03:04 + * @LastEditors: samples jadehh@live.com + * @LastEditTime: 2023-12-14 11:03:04 + * @FilePath: /lib/ali_api.js + * @Description: 阿里云盘Api + */ +import {_, jinja2} from "./cat.js"; +import * as Utils from "./utils.js"; +import {JadeLogging} from "./log.js"; +import { + Code, Drive, getHeader, getOAuthCache, getUserCache, Item, OAuth, post, postJson, Sub, User, CLIENT_ID +} from "./ali_object.js"; + +let quality = {}, tempIds = [], shareToken = "", shareId = "", oauth = new OAuth(), user = new User(), + driveInfo = new Drive(), tmpFolderName = "TV", curTmpFolderFileId = "", + JadeLog = new JadeLogging("阿里云盘", "INFO"); + +async function initSome() { + let user_cache_str = await getUserCache(); + user = User.objectFrom(user_cache_str); + if (!_.isEmpty(user.getRefreshToken())) { + await JadeLog.info("读取用户缓存成功", true); + } else { + await JadeLog.error("读取用户缓存失败", true); + } + + let oauth_cache_str = await getOAuthCache(); + oauth = OAuth.objectFrom(oauth_cache_str); + if (!_.isEmpty(oauth.getAccessToken())) { + await JadeLog.info("读取授权成功", true) + } else { + await JadeLog.error("读取授权失败", true) + + } + // quality = { + // "4K": "UHD", "2k": "QHD", "超清": "FHD", "高清": "HD", "标清": "SD", "流畅": "LD" + // }; + quality = { + "4K": "UHD", "2k": "QHD", "超清": "QHD", "高清": "HD", "标清": "SD", "流畅": "LD" + }; + await JadeLog.info("阿里Api初始化完成") +} + +async function getTempFileId() { + curTmpFolderFileId = await createTmpFolder(); +} + +async function clearFile() { + try { + await deleteTmpFolderAndRecreate(); + } catch (e) { + await JadeLog.error("清空缓存文件失败,失败原因为:{}" + e) + } + await cleanRecord() +} + +async function cleanRecord() { + await local.set("file", "file_id", JSON.stringify({})) +} + +async function setShareId(share_id) { + getOAuthCache().length === 0 && (await oauth.clean().save()); + getUserCache().length === 0 && (await user.clean().save()); + shareId = share_id; + return await refreshShareToken(); +} + +function getHeaderAuth(shareToken) { + const params = {}; + params["x-share-token"] = shareToken; + params["X-Canary"] = "client=Android,app=adrive,version=v4.3.1"; + + if (user.isAuthed()) { + params.authorization = user.getAuthorization(); + } + + return params; +} + +function getHeaderShare() { + const params = getHeader(); + params["x-share-token"] = shareToken; + params["X-Canary"] = "client=Android,app=adrive,version=v4.3.1"; + return params; +} + +function getHeaderOpen() { + const params = {}; + params.authorization = oauth.getAuthorization(); + return params; +} + +function aliExpection(data_str) { + if (data_str.indexOf("TooManyRequests") > -1) { + Utils.sleep(1) + return {code: 429, content: data_str} + } else if (data_str.indexOf("AccessTokenInvalid") > -1) { + return {code: 400, content: data_str} + } else if (data_str.indexOf("AccessTokenExpired") > -1) { + return {code: 401, content: data_str} + } else if (data_str.indexOf("BadRequest") > -1) { + return {code: 402, content: data_str} + } else if (data_str.indexOf("NotFound.File") > -1 || data_str.indexOf("ForbiddenFileInTheRecycleBin") > -1) { + return {code: 403, content: data_str} + } else if (data_str.indexOf("user not allowed access drive") > -1){ + return {code: 404, content: data_str} + } else if (data_str.indexOf("ForbiddenNoPermission.File") > -1) { + return {code: 500, content: data_str} + } else if (data_str.indexOf("InvalidParameter.ToParentFileId") > -1) { + return {code: 501, content: data_str} + } else if (data_str.indexOf("NotFound.ParentFileId") > -1) { + return {code: 502, content: data_str} + } else if (data_str.indexOf("The resource drive has exceeded the limit. File size exceeded drive capacity") > -1) { + return {code: 503, content: data_str} + }else if (data_str.indexOf("The resource drive has exceeded the limit. File size exceeded drive capacity") > -1) { + return {code: 503, content: data_str} + } + return {code: 200, content: data_str} +} + +async function alistManyRequest(data_str) { + if (!(data_str.indexOf("Too Many Requests") > -1)) { + return false; + } + await oauth.clean().save(); + return true; +} + +// Alist Token获取 +async function alist(url_param, params) { + let url = "https://api-cf.nn.ci/alist/ali_open/" + url_param; + let response = await postJson(url, params, getHeader()), response_content = response.content; + if (await alistManyRequest(response_content)) { + await JadeLog.error(`Alist授权Token失败,失败原因为:太多请求,失败详情为:${response_content}`) + return false; + } + oauth = await OAuth.objectFrom(response_content).save(); + return true; +} + +// 阿里云盘用户Api +async function auth(url, params, shareToken, retry) { + url = url.startsWith("https") ? url : "https://api.aliyundrive.com/" + url; + let response = await postJson(url, params, getHeaderAuth(shareToken)); + await JadeLog.debug(`正在请求需要阿里登录的url:${url},参数为:${JSON.stringify(params)}`) + response = aliExpection(response.content) + if (retry && (response.code === 400)) { + await JadeLog.error("登录阿里云盘失败,失败原因为:登录Token无效,准备重新授权,失败详情:" + response.content) + await refreshAccessToken("") + return await auth(url, params, shareToken, false); + } + await JadeLog.debug(`完成请求需要阿里登录的url:${url},参数为:${JSON.stringify(params)},请求结果为${response.content}`) + return response.content; + +} + + +// 需要授权的Api +async function oauthFunc(url, params, retry) { + url = url.startsWith("https") ? url : "https://open.aliyundrive.com/adrive/v1.0/" + url; + await JadeLog.debug(`正在请求需要阿里授权的url:${url},参数为:${JSON.stringify(params)}`) + let open_header = getHeaderOpen(); + let response = await postJson(url, params, open_header); + response = aliExpection(response.content) + if (retry && (response.code === 400 || response.code === 401 || response.code === 429 || response.code === 402 || response.code === 403 || response.code === 404)) { + if (response.code === 400) { + await JadeLog.error("阿里授权失败,失败原因为:授权Token无效,准备重新授权,失败详情:" + response.content) + await activateRefreshOpenToken() + } else if (response.code === 401) { + await JadeLog.error("阿里授权失败,失败原因为:授权Token失效,准备重新授权,失败详情:" + response.content) + await activateRefreshOpenToken() + } else if (response.code === 402) { + await JadeLog.error("阿里授权失败,失败原因为:授权Token失效,准备重新授权,失败详情:" + response.content) + return await oauthFunc(url, params, true) + } else if (response.code === 403) { + await JadeLog.error("阿里授权失败,失败原因为:没有找到缓存文件,失败详情:" + response.content) + await cleanRecord() + return "retry" + }else if (response.code === 404) { + await JadeLog.error("阿里授权失败,失败原因为:用户没有权限" + response.content) + return await oauthFunc(url, params, true) + }else if (response.code === 429) { + await JadeLog.error(`正在请求需要阿里授权的url:${url},请求过于频繁,稍后重试,10分钟后再重试`) + Utils.sleep(10 * 60) + return await oauthFunc(url, params, true) + } + return await oauthFunc(url, params, false) + } + await JadeLog.debug(`完成请求需要阿里授权的url:${url},参数为:${JSON.stringify(params)},请求结果为:${JSON.stringify(response)}`) + return response.content; + +} + +async function shareFunc(url, params) { + url = url.startsWith("https") ? url : "https://api.aliyundrive.com/" + url; + let headers = getHeaderShare(), response = await postJson(url, params, headers); + return response.content; +} + +//主动刷新授权Token + +async function activateRefreshOpenToken() { + await oauth.clean().save() + await refreshOpenToken() +} + + +async function refreshShareToken() { + try { + let params = {}; + params.share_id = shareId; + params.share_pwd = ""; + let response_content = await post("v2/share_link/get_share_token", params), + response_json = JSON.parse(response_content); + if (response_json["code"] === "ShareLink.Cancelled") { + await JadeLog.error("分享链接被取消了") + } + shareToken = response_json.share_token; + return shareToken + } catch (e) { + await JadeLog.error("刷新Share Token失败" + e) + } +} + +//支持切换Token +async function refreshAccessToken(token) { + try { + if (_.isEmpty(user.getAccessToken()) || user.getRefreshToken() !== token) { + let refresh_token_params = {}; + refresh_token_params.refresh_token = user.getRefreshToken(); + refresh_token_params.grant_type = "refresh_token"; + await JadeLog.info(`准备登录阿里云盘,登录Token为:${user.getRefreshToken()}`) + let response_conetent = await post("https://auth.aliyundrive.com/v2/account/token", refresh_token_params); + if (response_conetent.indexOf("InvalidParameter.RefreshToken") > 1 || _.isEmpty(response_conetent)) { + if (_.isEmpty(response_conetent)) { + await JadeLog.error(`登录阿里云盘失败,登录Token为:${user.getRefreshToken()},失败原因为:检查Token是否正确`) + } else { + await JadeLog.error(`登录阿里云盘失败,登录Token为:${user.getRefreshToken()},失败原因为:检查Token是否正确,返回结果为:${response_conetent}`) + } + } else { + await JadeLog.info(`登录阿里云盘成功,登录Token为:${user.getRefreshToken()}`) + user = await User.objectFrom(response_conetent).save(); + } + } else { + await JadeLog.info(`阿里云盘已登录,无需重复登录,登录Token为:${user.getRefreshToken()}`) + } + return true; + } catch (e) { + await JadeLog.error(`登录阿里云盘失败,登录Token为:${user.getRefreshToken()},失败原因为:${e}`) + await user.clean().save(); + return true; + } +} + +async function oauthRequest() { + try { + let params = {}; + params.authorize = 1; + params.scope = "user:base,file:all:read,file:all:write"; + let url = "https://open.aliyundrive.com/oauth/users/authorize?client_id=" + CLIENT_ID + "&redirect_uri=https://alist.nn.ci/tool/aliyundrive/callback&scope=user:base,file:all:read,file:all:write&state=" + await JadeLog.debug(`正在请求获取阿里授权码的url:${url},参数为:${params}`) + let response_str = await auth(url, params, shareToken, true); + await JadeLog.debug(`完成请求获取阿里授权码的url:${url},参数为:${params},返回值为:${response_str}`) + if (_.isEmpty(response_str) || response_str.indexOf("AccessTokenInvalid") > -1) { + if (_.isEmpty(response_str)) { + await JadeLog.error(`请求获取阿里授权码失败,失败原因为:还未登录`) + } else { + await JadeLog.error(`请求获取阿里授权码失败,失败原因为:还未登录,失败详情为:${response_str}`) + } + } else { + await JadeLog.info(`请求获取阿里授权码成功,返回值为:${response_str}`) + return await oauthRedirect(Code.objectFrom(response_str).getCode()); + } + } catch (e) { + await JadeLog.error(`请求获取阿里授权失败,失败原因为:${e}`) + return false; + } +} + +async function oauthRedirect(code) { + try { + let params = {}; + params.code = code; + params.grant_type = "authorization_code"; + return await alist("code", params); + } catch (e) { + // // console.debug(_0x114c46); + await oauth.clean().save(); + return false; + } +} + +async function refreshOpenToken() { + try { + // 刷新 Refresh Token + if (_.isEmpty(oauth.getRefreshToken())) { + return await oauthRequest(); + } + // 刷新Access Token + if (_.isEmpty(oauth.getAccessToken())) { + let params = {}; + params.grant_type = "refresh_token"; + params.refresh_token = oauth.getRefreshToken(); + return await alist("token", params); + } + return true; + } catch (e) { + await JadeLog.error("刷新授权Token失败,失败原因为:" + e); + await oauth.clean().save(); + return false; + } +} + +async function getFileByShare(index,share_token, share_url, video_item_list, sub_item_list) { + let params = {}; + params.share_id = shareId; + let file_id = share_url.split("folder/").slice(-1)[0] + if (file_id.length !== 40) { + file_id = "" + } + let response_str = await post("adrive/v3/share_link/get_share_by_anonymous", params), + response_json = JSON.parse(response_str), item_file_id = getParentFileId(file_id, response_json), + item = new Item(item_file_id); + await listFiles(index,item, video_item_list, sub_item_list, share_token); +} + + +async function listFiles(index,item, video_item_list, sub_item_list, share_token) { + return await listFilesMarker(index,item, video_item_list, sub_item_list, "", share_token); +} + +async function listFilesMarker(index,item, video_item_list, sub_item_list, netxt_markers, share_token) { + let new_item = {}, file_list = []; + new_item.limit = 200; + new_item.share_id = shareId; + new_item.share_token = share_token + new_item.parent_file_id = item.getFileId(); + new_item.order_by = "name"; + new_item.order_direction = "ASC"; + new_item.share_index = index + if (netxt_markers.length > 0) { + new_item.marker = netxt_markers; + } + let items = Item.objectFrom(await shareFunc("adrive/v2/file/list_by_share", new_item), shareToken,index); + for (const r_item of items.getItems()) { + if (r_item.getType() === "folder") { + file_list.push(r_item); + } else { + if ((r_item.getCategory() === "video" || r_item.getCategory() === "audio")) { + //判断数组中是否有file_id + // + let is_video_file_exists = false + for (const video_item of video_item_list) { + if (r_item.getFileId() === video_item.getFileId()) { + is_video_file_exists = true + await JadeLog.debug('视频分享文件重复,无需添加') + } + } + if (!is_video_file_exists) { + if (r_item.getCategory() === "video" && r_item.size / 1000000 > 10) { + video_item_list.push(r_item.parentFunc(item.getName())); + } + } + + } else { + if (Utils.isSub(r_item.getExt())) { + let is_sub_file_exists = false + for (const sub_item of sub_item_list) { + if (r_item.getFileId() === sub_item.getFileId()) { + is_sub_file_exists = true + await JadeLog.debug('字幕分享文件重复,无需添加') + } + } + if (!is_sub_file_exists) { + sub_item_list.push(r_item); + } + } + } + } + } + items.getNextMarker().length > 0 && (await listFilesMarker(index,item, video_item_list, sub_item_list, items.getNextMarker())); + for (const file of file_list) { + await listFiles(index,file, video_item_list, sub_item_list); + } +} + +function getParentFileId(file_id, items) { + let file_infos = items.file_infos; + + if (!_.isEmpty(file_id)) { + return file_id; + } + + if (file_infos.length === 0) { + return ""; + } + + let item = file_infos[0]; + + if (item.type === "folder") { + return item.file_id; + } + if (item.type === "file" && item.category === "video") { + return "root"; + } + return ""; +} + + +async function getSubs(sub_list, share_id) { + let sub_url_list = []; + for (const sub_str of sub_list) { + if (!(sub_str.indexOf("@@@") > -1)) { + continue; + } + let sub_split_list = sub_str.split("@@@"), sub_name = sub_split_list[0], sub_ext = sub_split_list[1], + sub_file_id = sub_split_list[2], sub_url = await getDownloadUrl(sub_file_id, share_id); + + sub_url_list.push(Sub.create().setName(sub_name).setExt(sub_ext).setUrl(sub_url)); + } + return sub_url_list; +} + +async function getDriveInfo() { + if (!_.isEmpty(driveInfo) && !_.isEmpty(driveInfo.default_drive_id)) { + return driveInfo; + } + + let _0x3740f3 = await oauthFunc("user/getDriveInfo", {}, true), _0x56fde5 = JSON.parse(_0x3740f3); + + driveInfo = { + default_drive_id: _0x56fde5.default_drive_id, + resource_drive_id: _0x56fde5.resource_drive_id, + backup_drive_id: _0x56fde5.backup_drive_id + }; + return driveInfo; +} + +async function getDriveId() { + if (_.isEmpty(user.getDriveId())) { + let drive = await getDriveInfo(); + return drive.resource_drive_id; + } + return user.getDriveId(); +} + +async function getDownloadUrl(file_id, share_id, share_token) { + let drive_id = await getDriveId(); + tempIds.unshift(await copy(file_id, share_id, share_token)); + let params = {}; + params.file_id = tempIds[0]; + params.drive_id = drive_id; + if (tempIds[0] !== null) { + let response_str = await oauthFunc("openFile/getDownloadUrl", params, true); + if (response_str === "retry") { + await JadeLog.info("尝试重新获取下载链接"); + return await getDownloadUrl(file_id, share_id) + } else { + await JadeLog.info("获取下载链接成功:返回结果为:" + response_str + "请求参数为:" + JSON.stringify(params)); + return JSON.parse(response_str).url; + } + } else { + await JadeLog.error("获取下载链接失败:失败原因:请检查转存文件失败原因") + return null; + } + +} + +async function getVideoPreviewPlayInfo(file_id, share_id, shareToken) { + let drive_id = await getDriveId(); + tempIds.unshift(await copy(file_id, share_id, shareToken)); + let params = {}; + params.file_id = tempIds[0]; + params.drive_id = drive_id; + params.category = "live_transcoding"; + params.url_expire_sec = "14400"; + let response_str = await oauthFunc("openFile/getVideoPreviewPlayInfo", params, true); + return JSON.parse(response_str).video_preview_play_info; +} + +async function playerContent(file_id, share_id, share_token) { + try { + await JadeLog.info("正在获取原画的播放地址和字幕下载链接", true) + let download_url = await getDownloadUrl(file_id, share_id, share_token); + // let sub_list = await getSubs(file_id_list,share_id); + await JadeLog.info("获取原画的播放地址和字幕下载链接成功", true) + await JadeLog.info(`下载地址为:${download_url}`) + return download_url; + } catch (e) { + await JadeLog.error("获取原画的播放地址和字幕下载链接失败:失败原因为:" + e); + } +} + +// 转码头的Url和字幕 +async function playerContentByFlag(file_id, flag, share_id, shareToken) { + try { + await JadeLog.info("正在获取转码后的播放地址和字幕下载链接", true) + let video_preview_play_info = await getVideoPreviewPlayInfo(file_id, share_id, shareToken), + video_preview_url = getPreviewUrl(video_preview_play_info, flag); + // let sub_list = await getSubs(file_id_list,share_id), + // sub_p_list = getSubsByPlayInfo(video_preview_play_info); + + // for (const sub_p of sub_p_list) { + // sub_list.push(sub_p); + // } + + await JadeLog.info("获取转码后的播放地址和字幕下载链接成功", true) + await JadeLog.info(`下载地址为:${video_preview_url}`) + return video_preview_url; + } catch (e) { + await JadeLog.error(`获取转码后的播放地址和字幕下载链接失败,失败原因为:${e}`) + } +} + +function getPreviewUrl(video_preview_play_info, flag) { + if (!video_preview_play_info.hasOwnProperty("live_transcoding_task_list")) { + return ""; + } + let live_transcoding_task_list = video_preview_play_info.live_transcoding_task_list; + for (let index = 0; index < live_transcoding_task_list.length; ++index) { + let live_transcoding_task = live_transcoding_task_list[index]; + + if (live_transcoding_task.template_id === quality[flag]) { + return live_transcoding_task.url; + } + } + return live_transcoding_task_list.slice(-1)[0].url; +} + +function getSubsByPlayInfo(video_preview_play_info) { + if (!video_preview_play_info.hasOwnProperty("live_transcoding_subtitle_task_list")) { + return []; + } + let live_transcoding_subtitle_task_list = video_preview_play_info.live_transcoding_subtitle_task_list, + sub_p_list = []; + for (let index = 0; index < live_transcoding_subtitle_task_list.length; ++index) { + let live_transcoding_subtitle_task = live_transcoding_subtitle_task_list[index], + language = live_transcoding_subtitle_task.language, url = live_transcoding_subtitle_task.url; + sub_p_list.push(Sub.create().setUrl(url).setName(language).setLang(language).setExt("vtt")); + } + return sub_p_list; +} + +async function copy(file_id, shareId, shareToken) { + let copy_file_id + let cache_dic = {} + try { + cache_dic = JSON.parse(await local.get("file", "file_id")) + } catch (e) { + } + copy_file_id = cache_dic[file_id] + if (typeof (copy_file_id) == "string") { + await JadeLog.info(`file id为:${file_id},已经缓存过,copy file id为:${copy_file_id}`) + } else { + let params_str = "{\"requests\":[{\"body\":{\"file_id\":\"{{data.fileId}}\",\"share_id\":\"{{data.shareId}}\",\"auto_rename\":true,\"to_parent_file_id\":\"{{data.tmpFolderFileId}}\",\"to_drive_id\":\"{{data.driveId}}\"},\"headers\":{\"Content-Type\":\"application/json\"},\"id\":\"0\",\"method\":\"POST\",\"url\":\"/file/copy\"}],\"resource\":\"file\"}", + drive_id = await getDriveId(), params = { + fileId: file_id, shareId: shareId, driveId: drive_id, tmpFolderFileId: curTmpFolderFileId + }; + params_str = jinja2(params_str, { + data: params + }); + await JadeLog.debug(`正在转存文件,文件id为:${file_id}`, true) + let response_str = await auth("adrive/v2/batch", JSON.parse(params_str), shareToken, true); + let response = aliExpection(response_str) + if (response.code === 500 || response.code === 501 || response.code === 502 || response.code === 503 || response.code === 403) { + if (response.code === 500) { + await JadeLog.error("转存文件失败,失败详情:" + response.content) + return copy(file_id); + } else if (response.code === 501) { + await JadeLog.error("转存文件失败,失败详情:" + response.content) + return copy(file_id) + } else if (response.code === 502) { + await JadeLog.error("转存文件失败,失败原因为:转存文件夹不存在,失败详情:" + response.content) + return null; + } else if (response.code === 503) { + await JadeLog.error("转存文件失败,失败原因为:转存文件夹大小被限制" + response.content) + await clearFile() + return copy(file_id) + } else if (response.code === 403) { + await JadeLog.error("转存文件失败,失败原因为:没有找到File Id,失败详情:" + response.content) + return null; + } + } + await JadeLog.debug(`转存文件成功,文件id为:${file_id},请求结果为:${response_str}`) + copy_file_id = JSON.parse(response_str).responses[0].body.file_id; + let file_dic = {} + try { + JSON.parse(await local.get("file", "file_id")) + } catch (e) { + } + file_dic[file_id] = copy_file_id + await local.set("file", "file_id", JSON.stringify(file_dic)) + } + return copy_file_id; +} + +async function deleteTmpFolderAndRecreate() { + // 删除缓存文件夹 + let file_id = await tmpFolderExistsFunc(); + file_id && (await trashFile(file_id), await recyclebinClear()); + await getTempFileId(); +} + +//放入回车站 +async function trashFile(file_id) { + let params_str = "{\"requests\":[{\"body\":{\"file_id\":\"{{data.fileId}}\",\"drive_id\":\"{{data.driveId}}\"},\"headers\":{\"Content-Type\":\"application/json\"},\"id\":\"0\",\"method\":\"POST\",\"url\":\"/recyclebin/trash\"}],\"resource\":\"file\"}", + drive_id = await getDriveId(), params = { + fileId: file_id, driveId: drive_id + }; + params_str = jinja2(params_str, { + data: params + }); + await JadeLog.debug(`正在准备删除文件,文件id为:${file_id}`, true) + let response = await auth("v2/batch", JSON.parse(params_str), shareToken, true); + await JadeLog.debug(`删除文件成功,文件id为:${file_id},请求结果为:${response}`) + return true; +} + +//清空回车站 +async function recyclebinClear() { + let drive_id = await getDriveId(), params = { + drive_id: drive_id + }; + await auth("v2/recyclebin/clear", params, shareToken, true); + await JadeLog.info("清空回车站成功", true) + return true; +} + +async function createTmpFolder() { + //创建文件夹 + let file_id = await tmpFolderExistsFunc(); + if (file_id) { + await JadeLog.info("文件夹存在,无需重新创建") + return file_id; + } + await JadeLog.debug("文件夹不存在,重新创建文件夹") + let drive_id = await getDriveId(), params = { + check_name_mode: "refuse", drive_id: drive_id, name: tmpFolderName, parent_file_id: "root", type: "folder" + }, response_str = await oauthFunc("openFile/create", params, true); + let response_json = JSON.parse(response_str); + if (_.isEmpty(response_json.drive_id)) { + await JadeLog.error(`创建文件夹失败,失败原因为:${response_str}`) + return null; + } + await JadeLog.info(`创建文件夹成功`, true) + return response_json.file_id; +} + +async function tmpFolderExistsFunc() { + let drive_id = await getDriveId(), params = { + drive_id: drive_id, parent_file_id: "root", limit: 100, order_by: "updated_at", order_direction: "DESC" + }, response_str = await oauthFunc("openFile/list", params, true); + let response_json = JSON.parse(response_str); + if (_.isEmpty(response_json.items)) { + return false; + } + for (const item of response_json.items) { + if (item.name === tmpFolderName) { + return item.file_id; + } + } + return false; +} + + +async function setToken(token) { + // Token设置 + user.setRefreshToken(token); + await refreshAccessToken(token); + await refreshOpenToken(); +} + +export { + initSome, setToken, clearFile, setShareId, getFileByShare, playerContent, playerContentByFlag, getTempFileId +}; \ No newline at end of file diff --git a/cat/tjs/lib/ali_object.js b/cat/tjs/lib/ali_object.js new file mode 100644 index 0000000..7c0bcfe --- /dev/null +++ b/cat/tjs/lib/ali_object.js @@ -0,0 +1,516 @@ +/* + * @Author: samples jadehh@live.com + * @Date: 2023-12-14 11:03:04 + * @LastEditors: samples jadehh@live.com + * @LastEditTime: 2023-12-14 11:03:04 + * @FilePath: /lib/ali_object.js + * @Description: 阿里云盘基础类 + */ +import {_} from "./cat.js"; + +const UA = "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1" +const CLIENT_ID = "76917ccccd4441c39457a04f6084fb2f"; +import * as Utils from "./utils.js"; +// 引用会导致出错 +// import qs from "qs"; +// import axios from "axios"; +// import https from "https"; + +function getHeader() { + const params = {}; + params["User-Agent"] = UA; + params.Referer = "https://www.aliyundrive.com/"; + return params; +} + +class User { + constructor() { + this.driveId = ""; + this.userId = ""; + this.tokenType = ""; + this.accessToken = ""; + this.refreshToken = ""; + } + + static objectFrom(json_str) { + if (_.isEmpty(json_str)) { + return new User(); + } + + let resonse = JSON.parse(json_str), user = new User(); + user.driveId = resonse.default_drive_id; + user.userId = resonse.user_id; + user.tokenType = resonse.token_type; + user.accessToken = resonse.access_token; + user.refreshToken = resonse.refresh_token; // 刷新Token记录原有的Token + return user; + } + + getDriveId() { + return _.isEmpty(this.driveId) ? "" : this.driveId; + } + + getUserId() { + return _.isEmpty(this.userId) ? "" : this.userId; + } + + getTokenType() { + return _.isEmpty(this.tokenType) ? "" : this.tokenType; + } + + getAccessToken() { + return _.isEmpty(this.accessToken) ? "" : this.accessToken; + } + + getRefreshToken() { + return _.isEmpty(this.refreshToken) ? "" : this.refreshToken; + } + + setRefreshToken(refresh_token) { + this.refreshToken = refresh_token + } + + getAuthorization() { + return this.getTokenType() + " " + this.getAccessToken(); + } + + isAuthed() { + return this.getTokenType().length > 0 && this.getAccessToken().length > 0; + } + + clean() { + this.refreshToken = ""; + this.accessToken = ""; + return this; + } + + async save() { + await local.set("ali", "aliyundrive_user", this.toString()); + + + return this; + } + + toString() { + return JSON.stringify(this.toDict()); + } + + toDict() { + return { + default_drive_id: this.getDriveId(), + user_id: this.getUserId(), + token_type: this.getTokenType(), + access_token: this.getAccessToken(), + refresh_token: this.getRefreshToken() + }; + + } + +} + +class OAuth { + constructor() { + this.tokenType = ""; + this.accessToken = ""; + this.refreshToken = ""; + } + + static objectFrom(json_str) { + if (_.isEmpty(json_str)) { + return new OAuth(); + } + let oauth_json = JSON.parse(json_str), oAuth = new OAuth(); + oAuth.tokenType = oauth_json.token_type; + oAuth.accessToken = oauth_json.access_token; + oAuth.refreshToken = oauth_json.refresh_token; + return oAuth; + } + + getTokenType() { + return _.isEmpty(this.tokenType) ? "" : this.tokenType; + } + + getAccessToken() { + return _.isEmpty(this.accessToken) ? "" : this.accessToken; + } + + getRefreshToken() { + return _.isEmpty(this.refreshToken) ? "" : this.refreshToken; + } + + getAuthorization() { + return this.getTokenType() + " " + this.getAccessToken(); + } + + clean() { + this.refreshToken = ""; + this.accessToken = ""; + return this; + } + + async save() { + await local.set("ali", "aliyundrive_oauth", this.toString()); + + return this; + } + + toString() { + return JSON.stringify(this.toDict()); + } + + toDict() { + return { + token_type: this.getTokenType(), access_token: this.getAccessToken(), refresh_token: this.getRefreshToken() + }; + } +} + +class Drive { + constructor() { + this.defaultDriveId = ""; + this.resourceDriveId = ""; + this.backupDriveId = ""; + } + + static objectFrom(json_str) { + if (_.isEmpty(json_str)) { + return new Drive(); + } + let obj = JSON.parse(json_str), drive = new Drive(); + drive.defaultDriveId = obj.default_drive_id; + drive.resourceDriveId = obj.resource_drive_id; + drive.backupDriveId = obj.backup_drive_id; + return drive; + } + + getDefaultDriveId() { + return _.isEmpty(this.defaultDriveId) ? "" : this.defaultDriveId; + } + + getResourceDriveId() { + return _.isEmpty(this.resourceDriveId) ? "" : this.resourceDriveId; + } + + getBackupDriveId() { + return _.isEmpty(this.backupDriveId) ? "" : this.backupDriveId; + } + + clean() { + this.defaultDriveId = ""; + this.backupDriveId = ""; + this.resourceDriveId = ""; + return this; + } + + async save() { + await local.set("ali", "aliyundrive_drive", this.toString()); + return this; + } + + toString() { + const params = { + default_drive_id: this.getDefaultDriveId(), + resource_drive_id: this.getResourceDriveId(), + backup_drive_id: this.getBackupDriveId() + }; + return JSON.stringify(params); + } + +} + +class Code { + constructor() { + this.redirectUri = ""; + } + + static objectFrom(json_str) { + if (_.isEmpty(json_str)) { + return new Code(); + } + let code_json = JSON.parse(json_str), code = new Code(); + code.redirectUri = code_json.redirectUri; + return code; + } + + getRedirectUri() { + return _.isEmpty(this.redirectUri) ? "" : this.redirectUri; + } + + getCode() { + return this.getRedirectUri().split("code=")[1]; + } +} + +class Item { + constructor(file_id) { + this.items = []; + this.nextMarker = ""; + this.fileId = file_id; + this.shareId = ""; + this.name = ""; + this.type = ""; + this.fileExtension = ""; + this.category = ""; + this.size = ""; + this.parent = ""; + this.shareToken = ""; + this.shareIndex = 0; + } + + static objectFrom(json_str, shareToken,shareIndex) { + if (_.isEmpty(json_str)) { + return new Item(); + } + + let item_json = JSON.parse(json_str), item = new Item(); + + item.nextMarker = typeof item_json.next_marker == "undefined" ? "" : item_json.next_marker; + item.fileId = typeof item_json.file_id == "undefined" ? "" : item_json.file_id; + item.shareId = typeof item_json.share_id == "undefined" ? "" : item_json.share_id; + item.shareToken = shareToken + item.name = typeof item_json.name == "undefined" ? "" : item_json.name; + item.type = typeof item_json.type == "undefined" ? "" : item_json.type; + item.fileExtension = typeof item_json.file_extension == "undefined" ? "" : item_json.file_extension; + item.category = typeof item_json.category == "undefined" ? "" : item_json.category; + item.size = typeof item_json.size == "undefined" ? "" : item_json.size; + item.parent = typeof item_json.parent_file_id == "undefined" ? "" : item_json.parent_file_id; + item.shareIndex = shareIndex + typeof item.items != "undefined" && Array.isArray(item_json.items) && !_.isEmpty(item_json.items) && item_json.items.forEach(function (x) { + let new_item = Item.objectFrom(JSON.stringify((x)), shareToken,shareIndex) + item.items.push(new_item); + }); + return item; + } + + getItems() { + return _.isEmpty(this.items) ? [] : this.items; + } + + getNextMarker() { + return _.isEmpty(this.nextMarker) ? "" : this.nextMarker; + } + + getFileId() { + return _.isEmpty(this.fileId) ? "" : this.fileId; + } + + getShareId() { + return _.isEmpty(this.shareId) ? "" : this.shareId; + } + + getFileExtension() { + return _.isEmpty(this.fileExtension) ? "" : this.fileExtension; + } + + getName() { + return _.isEmpty(this.name) ? "" : this.name; + } + + getType() { + return _.isEmpty(this.type) ? "" : this.type; + } + + getExt() { + return _.isEmpty(this.fileExtension) ? "" : this.fileExtension; + } + + getCategory() { + return _.isEmpty(this.category) ? "" : this.category; + } + + getSize() { + return this.size === 0 ? "" : "[" + Utils.getSize(this.size) + "]"; + } + + getParent() { + return _.isEmpty(this.parent) ? "" : "[" + this.parent + "]"; + } + + getShareIndex(){ + return this.shareIndex + } + + parentFunc(item) { + this.parent = item; + return this; + } + + getDisplayName(type_name) { + let name = this.getName(); + name = name.replaceAll("玩偶哥 q 频道:【神秘的哥哥们】", "") + if (type_name === "电视剧") { + let replaceNameList = ["4k", "4K"] + name = name.replaceAll("." + this.getFileExtension(), "") + name = name.replaceAll(" ", "").replaceAll(" ", "") + for (const replaceName of replaceNameList) { + name = name.replaceAll(replaceName, "") + } + name = Utils.getStrByRegexDefault(/\.S01E(.*?)\./, name) + const numbers = name.match(/\d+/g); + if (!_.isEmpty(numbers) && numbers.length > 0) { + name = numbers[0] + } + } + + return name + " " + this.getParent() + " " + this.getSize(); + } + getEpisodeUrl(type_name){ + return this.getDisplayName(type_name) + "$" + this.getFileId() + "+" + this.shareId + "+" + this.shareToken + } + +} + +class Sub { + constructor() { + this.url = ""; + this.name = ""; + this.lang = ""; + this.format = ""; + } + + static create() { + return new Sub(); + } + + setName(name) { + this.name = name; + return this; + } + + setUrl(url) { + this.url = url; + return this; + } + + setLang(lang) { + this.lang = lang; + return this; + } + + setFormat(format) { + this.format = format; + return this; + } + + setExt(ext) { + switch (ext) { + case "vtt": + return this.setFormat("text/vtt"); + case "ass": + case "ssa": + return this.setFormat("text/x-ssa"); + default: + return this.setFormat("application/x-subrip"); + } + } + +} + + +async function getUserCache() { + return await local.get("ali", "aliyundrive_user"); +} + +async function getOAuthCache() { + return await local.get("ali", "aliyundrive_oauth"); +} + +function getShareId(share_url) { + let patternAli = /https:\/\/www\.alipan\.com\/s\/([^\\/]+)(\/folder\/([^\\/]+))?|https:\/\/www\.aliyundrive\.com\/s\/([^\\/]+)(\/folder\/([^\\/]+))?/ + let matches = patternAli.exec(share_url) + const filteredArr = matches.filter(item => item !== undefined); + if (filteredArr.length > 1) { + return matches[1] + } else { + return "" + } +} + +async function ali_request(url, opt) { + + let resp; + let data; + try { + data = opt ? opt.data || null : null; + const postType = opt ? opt.postType || null : null; + const returnBuffer = opt ? opt.buffer || 0 : 0; + const timeout = opt ? opt.timeout || 5000 : 5000; + + const headers = opt ? opt.headers || {} : {}; + if (postType === 'form') { + headers['Content-Type'] = 'application/x-www-form-urlencoded'; + + if (data != null) { + data = qs.stringify(data, {encode: false}); + } + } + let respType = returnBuffer === 1 || returnBuffer === 2 ? 'arraybuffer' : undefined; + resp = await axios(url, { + responseType: respType, + method: opt ? opt.method || 'get' : 'get', + headers: headers, + data: data, + timeout: timeout, + httpsAgent: https.Agent({ + rejectUnauthorized: false, + }), + }); + data = resp.data; + + const resHeader = {}; + for (const hks of resp.headers) { + const v = hks[1]; + resHeader[hks[0]] = Array.isArray(v) ? (v.length === 1 ? v[0] : v) : v; + } + + if (!returnBuffer) { + if (typeof data === 'object') { + data = JSON.stringify(data); + } + } else if (returnBuffer === 1) { + return {code: resp.status, headers: resHeader, content: data}; + } else if (returnBuffer === 2) { + return {code: resp.status, headers: resHeader, content: data.toString('base64')}; + } + return {code: resp.status, headers: resHeader, content: data}; + } catch (error) { + // await Utils.log(`请求失败,URL为:${url},失败原因为:${error}`) + resp = error.response + try { + return {code: resp.status, headers: resp.headers, content: JSON.stringify(resp.data)}; + } catch (err) { + return {headers: {}, content: ''}; + } + } +} + +async function post(url, params) { + url = url.startsWith("https") ? url : "https://api.aliyundrive.com/" + url; + let response = await postJson(url, params, getHeader()); + return response.content; +} + +async function postJson(url, params, headers) { + params["Content-Type"] = "application/json"; + return await req(url, { + headers: headers, method: "post", data: params + }); +} + + +export { + UA, + CLIENT_ID, + OAuth, + Code, + Sub, + User, + Item, + Drive, + getHeader, + getShareId, + getOAuthCache, + getUserCache, + post, + postJson +}; \ No newline at end of file diff --git a/cat/tjs/lib/big5.js b/cat/tjs/lib/big5.js new file mode 100644 index 0000000..9366f4c --- /dev/null +++ b/cat/tjs/lib/big5.js @@ -0,0 +1,154 @@ +import { inRange, decoderError, encoderError, isASCIICodePoint, + end_of_stream, finished, isASCIIByte, floor } from './text_decoder_utils.js' +import index, { indexBig5PointerFor, indexCodePointFor } from './text_decoder_indexes.js' + +// +// 12. Legacy multi-byte Chinese (traditional) encodings +// + +// 12.1 Big5 + +// 12.1.1 Big5 decoder +/** + * @implements {Decoder} + */ +export class Big5Decoder { + constructor(options) { + const { fatal } = options + this.fatal = fatal + // Big5's decoder has an associated Big5 lead (initially 0x00). + this.Big5_lead = 0x00 + } + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + */ + handler(stream, bite) { + // 1. If byte is end-of-stream and Big5 lead is not 0x00, set + // Big5 lead to 0x00 and return error. + if (bite === end_of_stream && this.Big5_lead !== 0x00) { + this.Big5_lead = 0x00 + return decoderError(this.fatal) + } + + // 2. If byte is end-of-stream and Big5 lead is 0x00, return + // finished. + if (bite === end_of_stream && this.Big5_lead === 0x00) + return finished + + // 3. If Big5 lead is not 0x00, let lead be Big5 lead, let + // pointer be null, set Big5 lead to 0x00, and then run these + // substeps: + if (this.Big5_lead !== 0x00) { + const lead = this.Big5_lead + let pointer = null + this.Big5_lead = 0x00 + + // 1. Let offset be 0x40 if byte is less than 0x7F and 0x62 + // otherwise. + const offset = bite < 0x7F ? 0x40 : 0x62 + + // 2. If byte is in the range 0x40 to 0x7E, inclusive, or 0xA1 + // to 0xFE, inclusive, set pointer to (lead − 0x81) × 157 + + // (byte − offset). + if (inRange(bite, 0x40, 0x7E) || inRange(bite, 0xA1, 0xFE)) + pointer = (lead - 0x81) * 157 + (bite - offset) + + // 3. If there is a row in the table below whose first column + // is pointer, return the two code points listed in its second + // column + // Pointer | Code points + // --------+-------------- + // 1133 | U+00CA U+0304 + // 1135 | U+00CA U+030C + // 1164 | U+00EA U+0304 + // 1166 | U+00EA U+030C + switch (pointer) { + case 1133: return [0x00CA, 0x0304] + case 1135: return [0x00CA, 0x030C] + case 1164: return [0x00EA, 0x0304] + case 1166: return [0x00EA, 0x030C] + } + + // 4. Let code point be null if pointer is null and the index + // code point for pointer in index Big5 otherwise. + const code_point = (pointer === null) ? null : + indexCodePointFor(pointer, index('big5')) + + // 5. If code point is null and byte is an ASCII byte, prepend + // byte to stream. + if (code_point === null && isASCIIByte(bite)) + stream.prepend(bite) + + // 6. If code point is null, return error. + if (code_point === null) + return decoderError(this.fatal) + + // 7. Return a code point whose value is code point. + return code_point + } + + // 4. If byte is an ASCII byte, return a code point whose value + // is byte. + if (isASCIIByte(bite)) + return bite + + // 5. If byte is in the range 0x81 to 0xFE, inclusive, set Big5 + // lead to byte and return continue. + if (inRange(bite, 0x81, 0xFE)) { + this.Big5_lead = bite + return null + } + + // 6. Return error. + return decoderError(this.fatal) + } +} + + +// 12.1.2 Big5 encoder +/** + * @implements {Encoder} + */ +export class Big5Encoder { + constructor() { + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point + + // 3. Let pointer be the index Big5 pointer for code point. + const pointer = indexBig5PointerFor(code_point) + + // 4. If pointer is null, return error with code point. + if (pointer === null) + return encoderError(code_point) + + // 5. Let lead be floor(pointer / 157) + 0x81. + const lead = floor(pointer / 157) + 0x81 + + // 6. If lead is less than 0xA1, return error with code point. + if (lead < 0xA1) + return encoderError(code_point) + + // 7. Let trail be pointer % 157. + const trail = pointer % 157 + + // 8. Let offset be 0x40 if trail is less than 0x3F and 0x62 + // otherwise. + const offset = trail < 0x3F ? 0x40 : 0x62 + + // Return two bytes whose values are lead and trail + offset. + return [lead, trail + offset] + } + } +} \ No newline at end of file diff --git a/cat/tjs/lib/bilibili_ASS_Danmaku_Downloader.js b/cat/tjs/lib/bilibili_ASS_Danmaku_Downloader.js new file mode 100644 index 0000000..889606e --- /dev/null +++ b/cat/tjs/lib/bilibili_ASS_Danmaku_Downloader.js @@ -0,0 +1,31 @@ +/* +* @File : bilibili_ASS_Danmaku_Downloader.js +* @Author : jade +* @Date : 2024/3/14 13:19 +* @Email : jadehh@1ive.com +* @Software : Samples +* @Desc : +*/ +function parseXML(json) { + let list = []; + /** + * + * + * {Text} + * timeΪĻƵʱ --> + * typeΪĻ --> + * sizeΪС --> + * colorΪʮƵRGBɫ16ת10ƣ --> + * timestampΪĻʱunixʱ --> + * poolΪĻ --> + * uid_crc32Ϊuidcrc32 --> + */ + Array.from(json.danmuku).forEach(x => { + let start = Number(x[0]); + let content = x[4]; + list.push(``) + }); + return String.raw`chat.bilibili.com521756020100000k-v` + list.join('') + "" +} +export {parseXML} + diff --git a/cat/tjs/lib/book.js b/cat/tjs/lib/book.js new file mode 100644 index 0000000..3adda03 --- /dev/null +++ b/cat/tjs/lib/book.js @@ -0,0 +1,76 @@ +/* +* @File : book.js +* @Author : jade +* @Date : 2024/1/30 17:01 +* @Email : jadehh@1ive.com +* @Software : Samples +* @Desc : +*/ +export class BookShort { + + constructor() { + this.book_id = "" //id + this.book_name = "" //名称 + this.book_pic = "" //图片 + this.book_remarks = "" //备注 + } + + to_dict() { + return JSON.stringify(this); + } + + load_dic(json_str) { + let obj = JSON.parse(json_str) + for (let propName in obj) { + this[propName] = obj[propName]; + } + + } +} + +export class BookDetail extends BookShort { + /** + * let book = { + * book_name: $('[property$=book_name]')[0].attribs.content, + * book_year: $('[property$=update_time]')[0].attribs.content, + * book_director: $('[property$=author]')[0].attribs.content, + * book_content: $('[property$=description]')[0].attribs.content, + * }; + * $ = await this.getHtml(this.siteUrl + id + `list.html`); + * let urls = []; + * const links = $('dl>dd>a[href*="/html/"]'); + * for (const l of links) { + * const name = $(l).text().trim(); + * const link = l.attribs.href; + * urls.push(name + '$' + link); + * } + * book.volumes = '全卷'; + * book.urls = urls.join('#'); + * return book + * */ + constructor() { + super(); + this.book_year = "" + this.book_director = "" + this.book_content = "" + this.volumes = "" + this.urls = "" + } + + to_short() { + let bookShort = new BookShort() + bookShort.load_dic(this.to_dict()) + return bookShort.to_dict() + } + + load_dic(json_str) { + let obj = JSON.parse(json_str) + for (let propName in obj) { + this[propName] = obj[propName]; + console.log(propName);//打印👉属性名-->name age gender address + } + } +} + + + diff --git a/cat/tjs/lib/cat.js b/cat/tjs/lib/cat.js new file mode 100644 index 0000000..16d981a --- /dev/null +++ b/cat/tjs/lib/cat.js @@ -0,0 +1,15158 @@ +var e, pe, t = function () { + return (t = Object.assign || function (e) { + for (var t, n = 1, r = arguments.length; n < r; n++) for (var i in t = arguments[n]) Object.prototype.hasOwnProperty.call(t, i) && (e[i] = t[i]); + return e + }).apply(this, arguments) +}, n = {xml: !1, decodeEntities: !0}, r = {_useHtmlParser2: !0, xmlMode: !0}; + +function i(e) { + return null != e && e.xml ? "boolean" == typeof e.xml ? r : t(t({}, r), e.xml) : null != e ? e : void 0 +} + +!function (e) { + e.Root = "root", e.Text = "text", e.Directive = "directive", e.Comment = "comment", e.Script = "script", e.Style = "style", e.Tag = "tag", e.CDATA = "cdata", e.Doctype = "doctype" +}(e = e || {}); +const s = e.Root, a = e.Text, o = e.Directive, c = e.Comment, u = e.Script, l = e.Style, h = e.Tag, f = e.CDATA, + p = e.Doctype; + +class d { + constructor() { + this.parent = null, this.prev = null, this.next = null, this.startIndex = null, this.endIndex = null + } + + get parentNode() { + return this.parent + } + + set parentNode(e) { + this.parent = e + } + + get previousSibling() { + return this.prev + } + + set previousSibling(e) { + this.prev = e + } + + get nextSibling() { + return this.next + } + + set nextSibling(e) { + this.next = e + } + + cloneNode(e = !1) { + return L(this, e) + } +} + +class m extends d { + constructor(e) { + super(), this.data = e + } + + get nodeValue() { + return this.data + } + + set nodeValue(e) { + this.data = e + } +} + +class _ extends m { + constructor() { + super(...arguments), this.type = e.Text + } + + get nodeType() { + return 3 + } +} + +class E extends m { + constructor() { + super(...arguments), this.type = e.Comment + } + + get nodeType() { + return 8 + } +} + +class T extends m { + constructor(t, n) { + super(n), this.name = t, this.type = e.Directive + } + + get nodeType() { + return 1 + } +} + +class A extends d { + constructor(e) { + super(), this.children = e + } + + get firstChild() { + var e; + return null != (e = this.children[0]) ? e : null + } + + get lastChild() { + return 0 < this.children.length ? this.children[this.children.length - 1] : null + } + + get childNodes() { + return this.children + } + + set childNodes(e) { + this.children = e + } +} + +class g extends A { + constructor() { + super(...arguments), this.type = e.CDATA + } + + get nodeType() { + return 4 + } +} + +class v extends A { + constructor() { + super(...arguments), this.type = e.Root + } + + get nodeType() { + return 9 + } +} + +class y extends A { + constructor(t, n, r = [], i = "script" === t ? e.Script : "style" === t ? e.Style : e.Tag) { + super(r), this.name = t, this.attribs = n, this.type = i + } + + get nodeType() { + return 1 + } + + get tagName() { + return this.name + } + + set tagName(e) { + this.name = e + } + + get attributes() { + return Object.keys(this.attribs).map(e => { + var t; + return { + name: e, + value: this.attribs[e], + namespace: null == (t = this["x-attribsNamespace"]) ? void 0 : t[e], + prefix: null == (t = this["x-attribsPrefix"]) ? void 0 : t[e] + } + }) + } +} + +function S(t) { + return t.type === e.Tag || t.type === e.Script || t.type === e.Style +} + +function C(t) { + return t.type === e.CDATA +} + +function N(t) { + return t.type === e.Text +} + +function b(t) { + return t.type === e.Comment +} + +function I(t) { + return t.type === e.Directive +} + +function O(t) { + return t.type === e.Root +} + +function k(e) { + return Object.prototype.hasOwnProperty.call(e, "children") +} + +function L(e, t = !1) { + let n; + if (N(e)) n = new _(e.data); else if (b(e)) n = new E(e.data); else if (S(e)) { + const r = t ? D(e.children) : [], i = new y(e.name, {...e.attribs}, r); + r.forEach(e => e.parent = i), null != e.namespace && (i.namespace = e.namespace), e["x-attribsNamespace"] && (i["x-attribsNamespace"] = {...e["x-attribsNamespace"]}), e["x-attribsPrefix"] && (i["x-attribsPrefix"] = {...e["x-attribsPrefix"]}), n = i + } else if (C(e)) { + const r = t ? D(e.children) : [], i = new g(r); + r.forEach(e => e.parent = i), n = i + } else if (O(e)) { + const r = t ? D(e.children) : [], i = new v(r); + r.forEach(e => e.parent = i), e["x-mode"] && (i["x-mode"] = e["x-mode"]), n = i + } else { + if (!I(e)) throw new Error("Not implemented yet: " + e.type); + { + const t = new T(e.name, e.data); + null != e["x-name"] && (t["x-name"] = e["x-name"], t["x-publicId"] = e["x-publicId"], t["x-systemId"] = e["x-systemId"]), n = t + } + } + return n.startIndex = e.startIndex, n.endIndex = e.endIndex, null != e.sourceCodeLocation && (n.sourceCodeLocation = e.sourceCodeLocation), n +} + +function D(e) { + var t = e.map(e => L(e, !0)); + for (let e = 1; e < t.length; e++) t[e].prev = t[e - 1], t[e - 1].next = t[e]; + return t +} + +const R = {withStartIndices: !1, withEndIndices: !1, xmlMode: !1}; + +class w { + constructor(e, t, n) { + this.dom = [], this.root = new v(this.dom), this.done = !1, this.tagStack = [this.root], this.lastNode = null, this.parser = null, "function" == typeof t && (n = t, t = R), "object" == typeof e && (t = e, e = void 0), this.callback = null != e ? e : null, this.options = null != t ? t : R, this.elementCB = null != n ? n : null + } + + onparserinit(e) { + this.parser = e + } + + onreset() { + this.dom = [], this.root = new v(this.dom), this.done = !1, this.tagStack = [this.root], this.lastNode = null, this.parser = null + } + + onend() { + this.done || (this.done = !0, this.parser = null, this.handleCallback(null)) + } + + onerror(e) { + this.handleCallback(e) + } + + onclosetag() { + this.lastNode = null; + var e = this.tagStack.pop(); + this.options.withEndIndices && (e.endIndex = this.parser.endIndex), this.elementCB && this.elementCB(e) + } + + onopentag(t, n) { + var r = this.options.xmlMode ? e.Tag : void 0, t = new y(t, n, void 0, r); + this.addNode(t), this.tagStack.push(t) + } + + ontext(t) { + var n = this.lastNode; + if (n && n.type === e.Text) n.data += t, this.options.withEndIndices && (n.endIndex = this.parser.endIndex); else { + const e = new _(t); + this.addNode(e), this.lastNode = e + } + } + + oncomment(t) { + this.lastNode && this.lastNode.type === e.Comment ? this.lastNode.data += t : (t = new E(t), this.addNode(t), this.lastNode = t) + } + + oncommentend() { + this.lastNode = null + } + + oncdatastart() { + var e = new _(""), t = new g([e]); + this.addNode(t), e.parent = t, this.lastNode = e + } + + oncdataend() { + this.lastNode = null + } + + onprocessinginstruction(e, t) { + e = new T(e, t), this.addNode(e) + } + + handleCallback(e) { + if ("function" == typeof this.callback) this.callback(e, this.dom); else if (e) throw e + } + + addNode(e) { + var t = this.tagStack[this.tagStack.length - 1], n = t.children[t.children.length - 1]; + this.options.withStartIndices && (e.startIndex = this.parser.startIndex), this.options.withEndIndices && (e.endIndex = this.parser.endIndex), t.children.push(e), n && ((e.prev = n).next = e), e.parent = t, this.lastNode = null + } +} + +const x = /["&'<>$\x80-\uFFFF]/g, + M = new Map([[34, """], [38, "&"], [39, "'"], [60, "<"], [62, ">"]]), + P = null != String.prototype.codePointAt ? (e, t) => e.codePointAt(t) : (e, t) => 55296 == (64512 & e.charCodeAt(t)) ? 1024 * (e.charCodeAt(t) - 55296) + e.charCodeAt(t + 1) - 56320 + 65536 : e.charCodeAt(t); + +function B(e) { + let t, n = "", r = 0; + for (; null !== (t = x.exec(e));) { + var i = t.index, s = e.charCodeAt(i), a = M.get(s); + r = void 0 !== a ? (n += e.substring(r, i) + a, i + 1) : (n += `${e.substring(r, i)}&#x${P(e, i).toString(16)};`, x.lastIndex += Number(55296 == (64512 & s))) + } + return n + e.substr(r) +} + +function F(e, t) { + return function (n) { + let r, i = 0, s = ""; + for (; r = e.exec(n);) i !== r.index && (s += n.substring(i, r.index)), s += t.get(r[0].charCodeAt(0)), i = r.index + 1; + return s + n.substring(i) + } +} + +const U = F(/["&\u00A0]/g, new Map([[34, """], [38, "&"], [160, " "]])), + H = F(/[&<>\u00A0]/g, new Map([[38, "&"], [60, "<"], [62, ">"], [160, " "]])), + G = new Map(["altGlyph", "altGlyphDef", "altGlyphItem", "animateColor", "animateMotion", "animateTransform", "clipPath", "feBlend", "feColorMatrix", "feComponentTransfer", "feComposite", "feConvolveMatrix", "feDiffuseLighting", "feDisplacementMap", "feDistantLight", "feDropShadow", "feFlood", "feFuncA", "feFuncB", "feFuncG", "feFuncR", "feGaussianBlur", "feImage", "feMerge", "feMergeNode", "feMorphology", "feOffset", "fePointLight", "feSpecularLighting", "feSpotLight", "feTile", "feTurbulence", "foreignObject", "glyphRef", "linearGradient", "radialGradient", "textPath"].map(e => [e.toLowerCase(), e])), + j = new Map(["definitionURL", "attributeName", "attributeType", "baseFrequency", "baseProfile", "calcMode", "clipPathUnits", "diffuseConstant", "edgeMode", "filterUnits", "glyphRef", "gradientTransform", "gradientUnits", "kernelMatrix", "kernelUnitLength", "keyPoints", "keySplines", "keyTimes", "lengthAdjust", "limitingConeAngle", "markerHeight", "markerUnits", "markerWidth", "maskContentUnits", "maskUnits", "numOctaves", "pathLength", "patternContentUnits", "patternTransform", "patternUnits", "pointsAtX", "pointsAtY", "pointsAtZ", "preserveAlpha", "preserveAspectRatio", "primitiveUnits", "refX", "refY", "repeatCount", "repeatDur", "requiredExtensions", "requiredFeatures", "specularConstant", "specularExponent", "spreadMethod", "startOffset", "stdDeviation", "stitchTiles", "surfaceScale", "systemLanguage", "tableValues", "targetX", "targetY", "textLength", "viewBox", "viewTarget", "xChannelSelector", "yChannelSelector", "zoomAndPan"].map(e => [e.toLowerCase(), e])), + q = new Set(["style", "script", "xmp", "iframe", "noembed", "noframes", "plaintext", "noscript"]); + +function Y(e) { + return e.replace(/"/g, """) +} + +const K = new Set(["area", "base", "basefont", "br", "col", "command", "embed", "frame", "hr", "img", "input", "isindex", "keygen", "link", "meta", "param", "source", "track", "wbr"]); + +function W(e, t = {}) { + var n = "length" in e ? e : [e]; + let r = ""; + for (let e = 0; e < n.length; e++) r += V(n[e], t); + return r +} + +function V(e, t) { + switch (e.type) { + case s: + return W(e.children, t); + case p: + case o: + return `<${e.data}>`; + case c: + return ``; + case f: + return ``; + case u: + case l: + case h: + return function (e, t) { + !(t = "foreign" === t.xmlMode && (e.name = null != (n = G.get(e.name)) ? n : e.name, e.parent) && $.has(e.parent.name) ? { + ...t, + xmlMode: !1 + } : t).xmlMode && Q.has(e.name) && (t = {...t, xmlMode: "foreign"}); + let r = "<" + e.name; + var n = function (e, t) { + var n; + if (e) { + const r = !1 === (null != (n = t.encodeEntities) ? n : t.decodeEntities) ? Y : t.xmlMode || "utf8" !== t.encodeEntities ? B : U; + return Object.keys(e).map(n => { + var s, i = null != (i = e[n]) ? i : ""; + return "foreign" === t.xmlMode && (n = null != (s = j.get(n)) ? s : n), t.emptyAttrs || t.xmlMode || "" !== i ? `${n}="${r(i)}"` : n + }).join(" ") + } + }(e.attribs, t); + return n && (r += " " + n), 0 === e.children.length && (t.xmlMode ? !1 !== t.selfClosingTags : t.selfClosingTags && K.has(e.name)) ? (t.xmlMode || (r += " "), r += "/>") : (r += ">", 0 < e.children.length && (r += W(e.children, t)), !t.xmlMode && K.has(e.name) || (r += ``)), r + }(e, t); + case a: + return function (e, t) { + var n, r = e.data || ""; + return !1 === (null != (n = t.encodeEntities) ? n : t.decodeEntities) || !t.xmlMode && e.parent && q.has(e.parent.name) ? r : (t.xmlMode || "utf8" !== t.encodeEntities ? B : H)(r) + }(e, t) + } +} + +const $ = new Set(["mi", "mo", "mn", "ms", "mtext", "annotation-xml", "foreignObject", "desc", "title"]), + Q = new Set(["svg", "math"]); + +function z(e, t) { + return W(e, t) +} + +function X(e) { + return Array.isArray(e) ? e.map(X).join("") : k(e) && !b(e) ? X(e.children) : N(e) ? e.data : "" +} + +function Z(t) { + return Array.isArray(t) ? t.map(Z).join("") : k(t) && (t.type === e.Tag || C(t)) ? Z(t.children) : N(t) ? t.data : "" +} + +function J(e) { + return k(e) ? e.children : [] +} + +function ee(e) { + return e.parent || null +} + +function te(e) { + var t = ee(e); + if (null != t) return J(t); + var n = [e]; + let {prev: r, next: i} = e; + for (; null != r;) n.unshift(r), {prev: r} = r; + for (; null != i;) n.push(i), {next: i} = i; + return n +} + +function ne(e) { + let t = e.next; + for (; null !== t && !S(t);) ({next: t} = t); + return t +} + +function re(e) { + let t = e.prev; + for (; null !== t && !S(t);) ({prev: t} = t); + return t +} + +function ie(e) { + var t, n; + e.prev && (e.prev.next = e.next), e.next && (e.next.prev = e.prev), e.parent && 0 <= (n = (t = e.parent.children).lastIndexOf(e)) && t.splice(n, 1), e.next = null, e.prev = null, e.parent = null +} + +function se(e, t, n = !0, r = 1 / 0) { + return ae(e, Array.isArray(t) ? t : [t], n, r) +} + +function ae(e, t, n, r) { + for (var i = [], s = [t], a = [0]; ;) if (a[0] >= s[0].length) { + if (1 === a.length) return i; + s.shift(), a.shift() + } else { + const t = s[0][a[0]++]; + if (e(t) && (i.push(t), --r <= 0)) return i; + n && k(t) && 0 < t.children.length && (a.unshift(0), s.unshift(t.children)) + } +} + +function oe(e, t, n = !0) { + let r = null; + for (let i = 0; i < t.length && !r; i++) { + var s = t[i]; + S(s) && (e(s) ? r = s : n && 0 < s.children.length && (r = oe(e, s.children, !0))) + } + return r +} + +const ce = { + tag_name: e => "function" == typeof e ? t => S(t) && e(t.name) : "*" === e ? S : t => S(t) && t.name === e, + tag_type: e => "function" == typeof e ? t => e(t.type) : t => t.type === e, + tag_contains: e => "function" == typeof e ? t => N(t) && e(t.data) : t => N(t) && t.data === e +}; + +function ue(e, t) { + return "function" == typeof t ? n => S(n) && t(n.attribs[e]) : n => S(n) && n.attribs[e] === t +} + +function le(e, t) { + return n => e(n) || t(n) +} + +function he(e) { + var t = Object.keys(e).map(t => { + var n = e[t]; + return Object.prototype.hasOwnProperty.call(ce, t) ? ce[t](n) : ue(t, n) + }); + return 0 === t.length ? null : t.reduce(le) +} + +function fe(e, t, n = !0, r = 1 / 0) { + return se(ce.tag_name(e), t, n, r) +} + +function de(e, t) { + var n = [], r = []; + if (e === t) return 0; + let i = k(e) ? e : e.parent; + for (; i;) n.unshift(i), i = i.parent; + for (i = k(t) ? t : t.parent; i;) r.unshift(i), i = i.parent; + var o, c, u, l, s = Math.min(n.length, r.length); + let a = 0; + for (; a < s && n[a] === r[a];) a++; + return 0 === a ? pe.DISCONNECTED : (c = (o = n[a - 1]).children, u = n[a], l = r[a], c.indexOf(u) > c.indexOf(l) ? o === t ? pe.FOLLOWING | pe.CONTAINED_BY : pe.FOLLOWING : o === e ? pe.PRECEDING | pe.CONTAINS : pe.PRECEDING) +} + +function me(e) { + return (e = e.filter((e, t, n) => !n.includes(e, t + 1))).sort((e, t) => (e = de(e, t)) & pe.PRECEDING ? -1 : e & pe.FOLLOWING ? 1 : 0), e +} + +!function (e) { + e[e.DISCONNECTED = 1] = "DISCONNECTED", e[e.PRECEDING = 2] = "PRECEDING", e[e.FOLLOWING = 4] = "FOLLOWING", e[e.CONTAINS = 8] = "CONTAINS", e[e.CONTAINED_BY = 16] = "CONTAINED_BY" +}(pe = pe || {}); +const _e = ["url", "type", "lang"], + Ee = ["fileSize", "bitrate", "framerate", "samplingrate", "channels", "duration", "height", "width"]; + +function Te(e) { + return fe("media:content", e).map(e => { + var t = e.attribs, n = {medium: t.medium, isDefault: !!t.isDefault}; + for (const e of _e) t[e] && (n[e] = t[e]); + for (const e of Ee) t[e] && (n[e] = parseInt(t[e], 10)); + return t.expression && (n.expression = t.expression), n + }) +} + +function Ae(e, t) { + return fe(e, t, !0, 1)[0] +} + +function ge(e, t, n = !1) { + return X(fe(e, t, n, 1)).trim() +} + +function ve(e, t, n, r, i = !1) { + (n = ge(n, r, i)) && (e[t] = n) +} + +function ye(e) { + return "rss" === e || "feed" === e || "rdf:RDF" === e +} + +var Se = Object.freeze({ + __proto__: null, + isTag: S, + isCDATA: C, + isText: N, + isComment: b, + isDocument: O, + hasChildren: k, + getOuterHTML: z, + getInnerHTML: function (e, t) { + return k(e) ? e.children.map(e => z(e, t)).join("") : "" + }, + getText: function e(t) { + return Array.isArray(t) ? t.map(e).join("") : S(t) ? "br" === t.name ? "\n" : e(t.children) : C(t) ? e(t.children) : N(t) ? t.data : "" + }, + textContent: X, + innerText: Z, + getChildren: J, + getParent: ee, + getSiblings: te, + getAttributeValue: function (e, t) { + return null == (e = e.attribs) ? void 0 : e[t] + }, + hasAttrib: function (e, t) { + return null != e.attribs && Object.prototype.hasOwnProperty.call(e.attribs, t) && null != e.attribs[t] + }, + getName: function (e) { + return e.name + }, + nextElementSibling: ne, + prevElementSibling: re, + removeElement: ie, + replaceElement: function (e, t) { + const n = t.prev = e.prev; + n && (n.next = t); + var r = t.next = e.next; + if (r && (r.prev = t), r = t.parent = e.parent) { + const n = r.children; + n[n.lastIndexOf(e)] = t, e.parent = null + } + }, + appendChild: function (e, t) { + ie(t), t.next = null, 1 < (t.parent = e).children.push(t) ? ((e = e.children[e.children.length - 2]).next = t).prev = e : t.prev = null + }, + append: function (e, t) { + ie(t); + var n = e.parent, r = e.next; + if (t.next = r, ((t.prev = e).next = t).parent = n, r) { + if (r.prev = t, n) { + const e = n.children; + e.splice(e.lastIndexOf(r), 0, t) + } + } else n && n.children.push(t) + }, + prependChild: function (e, t) { + ie(t), t.parent = e, t.prev = null, 1 !== e.children.unshift(t) ? ((e = e.children[1]).prev = t).next = e : t.next = null + }, + prepend: function (e, t) { + ie(t); + var r, n = e.parent; + n && (r = n.children).splice(r.indexOf(e), 0, t), e.prev && (e.prev.next = t), t.parent = n, t.prev = e.prev, (t.next = e).prev = t + }, + filter: se, + find: ae, + findOneChild: function (e, t) { + return t.find(e) + }, + findOne: oe, + existsOne: function e(t, n) { + return n.some(n => S(n) && (t(n) || e(t, n.children))) + }, + findAll: function (e, t) { + for (var n = [], r = [t], i = [0]; ;) if (i[0] >= r[0].length) { + if (1 === r.length) return n; + r.shift(), i.shift() + } else { + const t = r[0][i[0]++]; + S(t) && (e(t) && n.push(t), 0 < t.children.length) && (i.unshift(0), r.unshift(t.children)) + } + }, + testElement: function (e, t) { + return !(e = he(e)) || e(t) + }, + getElements: function (e, t, n, r = 1 / 0) { + return (e = he(e)) ? se(e, t, n, r) : [] + }, + getElementById: function (e, t, n = !0) { + return Array.isArray(t) || (t = [t]), oe(ue("id", e), t, n) + }, + getElementsByTagName: fe, + getElementsByTagType: function (e, t, n = !0, r = 1 / 0) { + return se(ce.tag_type(e), t, n, r) + }, + removeSubsets: function (e) { + let t = e.length; + for (; 0 <= --t;) { + var n = e[t]; + if (0 < t && 0 <= e.lastIndexOf(n, t - 1)) e.splice(t, 1); else for (let r = n.parent; r; r = r.parent) if (e.includes(r)) { + e.splice(t, 1); + break + } + } + return e + }, + get DocumentPosition() { + return pe + }, + compareDocumentPosition: de, + uniqueSort: me, + getFeed: function (e) { + return (e = Ae(ye, e)) ? ("feed" === e.name ? function (e) { + var r = { + type: "atom", items: fe("entry", e = e.children).map(e => { + var r = {media: Te(e = e.children)}, + t = (ve(r, "id", "id", e), ve(r, "title", "title", e), null == (t = Ae("link", e)) ? void 0 : t.attribs.href); + return t && (r.link = t), (t = ge("summary", e) || ge("content", e)) && (r.description = t), (t = ge("updated", e)) && (r.pubDate = new Date(t)), r + }) + }, + t = (ve(r, "id", "id", e), ve(r, "title", "title", e), null == (t = Ae("link", e)) ? void 0 : t.attribs.href); + return t && (r.link = t), ve(r, "description", "subtitle", e), (t = ge("updated", e)) && (r.updated = new Date(t)), ve(r, "author", "email", e, !0), r + } : function (e) { + var t = null != (t = null == (t = Ae("channel", e.children)) ? void 0 : t.children) ? t : [], e = { + type: e.name.substr(0, 3), id: "", items: fe("item", e.children).map(e => { + var n = {media: Te(e = e.children)}; + return ve(n, "id", "guid", e), ve(n, "title", "title", e), ve(n, "link", "link", e), ve(n, "description", "description", e), (e = ge("pubDate", e) || ge("dc:date", e)) && (n.pubDate = new Date(e)), n + }) + }, + s = (ve(e, "title", "title", t), ve(e, "link", "link", t), ve(e, "description", "description", t), ge("lastBuildDate", t)); + return s && (e.updated = new Date(s)), ve(e, "author", "managingEditor", t, !0), e + })(e) : null + } +}), Ce = function () { + return (Ce = Object.assign || function (e) { + for (var t, n = 1, r = arguments.length; n < r; n++) for (var i in t = arguments[n]) Object.prototype.hasOwnProperty.call(t, i) && (e[i] = t[i]); + return e + }).apply(this, arguments) +}; + +function Ne(e, t, n) { + return e ? e(null != t ? t : e._root.children, null, void 0, n).toString() : "" +} + +function be(e, t) { + return Ne(this, function (e) { + return !("object" != typeof e || null == e || "length" in e || "type" in e) + }(e) ? void (t = e) : e, Ce(Ce(Ce({}, n), null == this ? void 0 : this._options), i(null != t ? t : {}))) +} + +function Ie(e) { + return Ne(this, e, Ce(Ce({}, this._options), {xmlMode: !0})) +} + +function Oe(e) { + for (var t = e || (this ? this.root() : []), n = "", r = 0; r < t.length; r++) n += X(t[r]); + return n +} + +function ke(e, t, r) { + return void 0 === r && (r = "boolean" == typeof t && t), e && "string" == typeof e ? ("boolean" == typeof t && (r = t), t = this.load(e, n, !1), r || t("script").remove(), t.root()[0].children.slice()) : null +} + +function Le() { + return this(this._root) +} + +function De(e, t) { + if (t !== e) for (var n = t; n && n !== n.parent;) if ((n = n.parent) === e) return !0; + return !1 +} + +function Re(e, t) { + if (we(e) && we(t)) { + for (var n = e.length, r = +t.length, i = 0; i < r; i++) e[n++] = t[i]; + return e.length = n, e + } +} + +function we(e) { + if (!Array.isArray(e)) { + if ("object" != typeof e || !Object.prototype.hasOwnProperty.call(e, "length") || "number" != typeof e.length || e.length < 0) return !1; + for (var t = 0; t < e.length; t++) if (!(t in e)) return !1 + } + return !0 +} + +var xe, Me = Object.freeze({ + __proto__: null, + html: be, + xml: Ie, + text: Oe, + parseHTML: ke, + root: Le, + contains: De, + merge: Re +}); + +function Pe(e) { + return null != e.cheerio +} + +function Be(e, t) { + for (var n = e.length, r = 0; r < n; r++) t(e[r], r); + return e +} + +function Fe(e) { + var e = "length" in e ? Array.prototype.map.call(e, function (e) { + return L(e, !0) + }) : [L(e, !0)], n = new v(e); + return e.forEach(function (e) { + e.parent = n + }), e +} + +function Ue(e) { + var n, t = e.indexOf("<"); + return !(t < 0 || t > e.length - 3) && ((n = e.charCodeAt(t + 1)) >= xe.LowerA && n <= xe.LowerZ || n >= xe.UpperA && n <= xe.UpperZ || n === xe.Exclamation) && e.includes(">", t + 2) +} + +!function (e) { + e[e.LowerA = 97] = "LowerA", e[e.LowerZ = 122] = "LowerZ", e[e.UpperA = 65] = "UpperA", e[e.UpperZ = 90] = "UpperZ", e[e.Exclamation = 33] = "Exclamation" +}(xe = xe || {}); +var He = Object.prototype.hasOwnProperty, Ge = /\s+/, je = "data-", qe = {null: null, true: !0, false: !1}, + Ye = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, + Ke = /^{[^]*}$|^\[[^]*]$/; + +function We(e, t, n) { + if (e && S(e)) return null == e.attribs && (e.attribs = {}), t ? He.call(e.attribs, t) ? !n && Ye.test(t) ? t : e.attribs[t] : "option" === e.name && "value" === t ? Oe(e.children) : "input" !== e.name || "radio" !== e.attribs.type && "checkbox" !== e.attribs.type || "value" !== t ? void 0 : "on" : e.attribs +} + +function Ve(e, t, n) { + null === n ? Ze(e, t) : e.attribs[t] = "".concat(n) +} + +function $e(e, t, n) { + return t in e ? e[t] : !n && Ye.test(t) ? void 0 !== We(e, t, !1) : We(e, t, n) +} + +function Qe(e, t, n, r) { + t in e ? e[t] = n : Ve(e, t, !r && Ye.test(t) ? n ? "" : null : "".concat(n)) +} + +function ze(e, t, n) { + null == e.data && (e.data = {}), "object" == typeof t ? Object.assign(e.data, t) : "string" == typeof t && void 0 !== n && (e.data[t] = n) +} + +function Xe(e, t) { + for (var n, i, r = null == t ? (n = Object.keys(e.attribs).filter(function (e) { + return e.startsWith(je) + })).map(function (e) { + return e.slice(je.length).replace(/[_.-](\w|$)/g, function (e, t) { + return t.toUpperCase() + }) + }) : (n = [je + t.replace(/[A-Z]/g, "-$&").toLowerCase()], [t]), a = 0; a < n.length; ++a) { + var o = n[a], c = r[a]; + if (He.call(e.attribs, o) && !He.call(e.data, c)) { + if (i = e.attribs[o], He.call(qe, i)) i = qe[i]; else if (i === String(Number(i))) i = Number(i); else if (Ke.test(i)) try { + i = JSON.parse(i) + } catch (e) { + } + e.data[c] = i + } + } + return null == t ? e.data : i +} + +function Ze(e, t) { + e.attribs && He.call(e.attribs, t) && delete e.attribs[t] +} + +function Je(e) { + return e ? e.trim().split(Ge) : [] +} + +var et, tt, nt = Object.freeze({ + __proto__: null, attr: function (e, t) { + if ("object" != typeof e && void 0 === t) return 1 < arguments.length ? this : We(this[0], e, this.options.xmlMode); + if ("function" != typeof t) return Be(this, function (n) { + S(n) && ("object" == typeof e ? Object.keys(e).forEach(function (t) { + var r = e[t]; + Ve(n, t, r) + }) : Ve(n, e, t)) + }); + if ("string" != typeof e) throw new Error("Bad combination of arguments."); + return Be(this, function (n, r) { + S(n) && Ve(n, e, t.call(n, r, n.attribs[e])) + }) + }, prop: function (e, t) { + var r = this; + if ("string" == typeof e && void 0 === t) { + var i = this[0]; + if (!i || !S(i)) return; + switch (e) { + case"style": + var s = this.css(), a = Object.keys(s); + return a.forEach(function (e, t) { + s[t] = e + }), s.length = a.length, s; + case"tagName": + case"nodeName": + return i.name.toUpperCase(); + case"href": + case"src": + return a = null == (a = i.attribs) ? void 0 : a[e], "undefined" == typeof URL || ("href" !== e || "a" !== i.tagName && "link" !== i.name) && ("src" !== e || "img" !== i.tagName && "iframe" !== i.tagName && "audio" !== i.tagName && "video" !== i.tagName && "source" !== i.tagName) || void 0 === a || !this.options.baseURI ? a : new URL(a, this.options.baseURI).href; + case"innerText": + return Z(i); + case"textContent": + return X(i); + case"outerHTML": + return this.clone().wrap("").parent().html(); + case"innerHTML": + return this.html(); + default: + return $e(i, e, this.options.xmlMode) + } + } + if ("object" == typeof e || void 0 !== t) { + if ("function" != typeof t) return Be(this, function (n) { + S(n) && ("object" == typeof e ? Object.keys(e).forEach(function (t) { + var i = e[t]; + Qe(n, t, i, r.options.xmlMode) + }) : Qe(n, e, t, r.options.xmlMode)) + }); + if ("object" == typeof e) throw new Error("Bad combination of arguments."); + return Be(this, function (n, i) { + S(n) && Qe(n, e, t.call(n, i, $e(n, e, r.options.xmlMode)), r.options.xmlMode) + }) + } + }, data: function (e, t) { + var r = this[0]; + if (r && S(r)) return null == r.data && (r.data = {}), e ? "object" == typeof e || void 0 !== t ? (Be(this, function (n) { + S(n) && ("object" == typeof e ? ze(n, e) : ze(n, e, t)) + }), this) : He.call(r.data, e) ? r.data[e] : Xe(r, e) : Xe(r) + }, val: function (e) { + var t = 0 === arguments.length, n = this[0]; + if (!n || !S(n)) return t ? void 0 : this; + switch (n.name) { + case"textarea": + return this.text(e); + case"select": + var r = this.find("option:selected"); + if (t) return this.attr("multiple") ? r.toArray().map(function (e) { + return Oe(e.children) + }) : r.attr("value"); + if (null != this.attr("multiple") || "object" != typeof e) { + this.find("option").removeAttr("selected"); + for (var i = "object" != typeof e ? [e] : e, s = 0; s < i.length; s++) this.find('option[value="'.concat(i[s], '"]')).attr("selected", "") + } + return this; + case"input": + case"option": + return t ? this.attr("value") : this.attr("value", e) + } + }, removeAttr: function (e) { + for (var t = Je(e), r = this, i = 0; i < t.length; i++) !function (e) { + Be(r, function (n) { + S(n) && Ze(n, t[e]) + }) + }(i); + return this + }, hasClass: function (e) { + return this.toArray().some(function (t) { + var n = S(t) && t.attribs.class, r = -1; + if (n && e.length) for (; -1 < (r = n.indexOf(e, r + 1));) { + var i = r + e.length; + if ((0 === r || Ge.test(n[r - 1])) && (i === n.length || Ge.test(n[i]))) return !0 + } + return !1 + }) + }, addClass: function e(t) { + if ("function" == typeof t) return Be(this, function (n, r) { + var i; + S(n) && (i = n.attribs.class || "", e.call([n], t.call(n, r, i))) + }); + if (t && "string" == typeof t) for (var n = t.split(Ge), r = this.length, i = 0; i < r; i++) { + var s = this[i]; + if (S(s)) { + var a = We(s, "class", !1); + if (a) { + for (var o = " ".concat(a, " "), c = 0; c < n.length; c++) { + var u = "".concat(n[c], " "); + o.includes(" ".concat(u)) || (o += u) + } + Ve(s, "class", o.trim()) + } else Ve(s, "class", n.join(" ").trim()) + } + } + return this + }, removeClass: function e(t) { + var n, r, i; + return "function" == typeof t ? Be(this, function (n, r) { + S(n) && e.call([n], t.call(n, r, n.attribs.class || "")) + }) : (n = Je(t), r = n.length, i = 0 === arguments.length, Be(this, function (e) { + if (S(e)) if (i) e.attribs.class = ""; else { + for (var t = Je(e.attribs.class), s = !1, a = 0; a < r; a++) { + var o = t.indexOf(n[a]); + 0 <= o && (t.splice(o, 1), s = !0, a--) + } + s && (e.attribs.class = t.join(" ")) + } + })) + }, toggleClass: function e(t, n) { + if ("function" == typeof t) return Be(this, function (r, i) { + S(r) && e.call([r], t.call(r, i, r.attribs.class || "", n), n) + }); + if (t && "string" == typeof t) for (var r = t.split(Ge), i = r.length, s = "boolean" == typeof n ? n ? 1 : -1 : 0, a = this.length, o = 0; o < a; o++) { + var c = this[o]; + if (S(c)) { + for (var u = Je(c.attribs.class), l = 0; l < i; l++) { + var h = u.indexOf(r[l]); + 0 <= s && h < 0 ? u.push(r[l]) : s <= 0 && 0 <= h && u.splice(h, 1) + } + c.attribs.class = u.join(" ") + } + } + return this + } +}); +!function (e) { + e.Attribute = "attribute", e.Pseudo = "pseudo", e.PseudoElement = "pseudo-element", e.Tag = "tag", e.Universal = "universal", e.Adjacent = "adjacent", e.Child = "child", e.Descendant = "descendant", e.Parent = "parent", e.Sibling = "sibling", e.ColumnCombinator = "column-combinator" +}(et = et || {}), function (e) { + e.Any = "any", e.Element = "element", e.End = "end", e.Equals = "equals", e.Exists = "exists", e.Hyphen = "hyphen", e.Not = "not", e.Start = "start" +}(tt = tt || {}); +const rt = /^[^\\#]?(?:\\(?:[\da-f]{1,6}\s?|.)|[\w\-\u00b0-\uFFFF])+/, it = /\\([\da-f]{1,6}\s?|(\s)|.)/gi, + st = new Map([[126, tt.Element], [94, tt.Start], [36, tt.End], [42, tt.Any], [33, tt.Not], [124, tt.Hyphen]]), + at = new Set(["has", "not", "matches", "is", "where", "host", "host-context"]); + +function ot(e) { + switch (e.type) { + case et.Adjacent: + case et.Child: + case et.Descendant: + case et.Parent: + case et.Sibling: + case et.ColumnCombinator: + return !0; + default: + return !1 + } +} + +const ct = new Set(["contains", "icontains"]); + +function ut(e, t, n) { + var r = parseInt(t, 16) - 65536; + return r != r || n ? t : r < 0 ? String.fromCharCode(65536 + r) : String.fromCharCode(r >> 10 | 55296, 1023 & r | 56320) +} + +function lt(e) { + return e.replace(it, ut) +} + +function ht(e) { + return 39 === e || 34 === e +} + +function ft(e) { + return 32 === e || 9 === e || 10 === e || 12 === e || 13 === e +} + +function pt(e) { + var t = [], n = dt(t, "" + e, 0); + if (n < e.length) throw new Error("Unmatched selector: " + e.slice(n)); + return t +} + +function dt(e, t, n) { + let r = []; + + function i(e) { + var r = t.slice(n + e).match(rt); + if (r) return [r] = r, n += e + r.length, lt(r); + throw new Error("Expected name, found " + t.slice(n)) + } + + function s(e) { + for (n += e; n < t.length && ft(t.charCodeAt(n));) n++ + } + + function a() { + var e = n += 1; + let r = 1; + for (; 0 < r && n < t.length; n++) 40 !== t.charCodeAt(n) || o(n) ? 41 !== t.charCodeAt(n) || o(n) || r-- : r++; + if (r) throw new Error("Parenthesis not matched"); + return lt(t.slice(e, n - 1)) + } + + function o(e) { + let n = 0; + for (; 92 === t.charCodeAt(--e);) n++; + return 1 == (1 & n) + } + + function c() { + if (0 < r.length && ot(r[r.length - 1])) throw new Error("Did not expect successive traversals.") + } + + function u(e) { + 0 < r.length && r[r.length - 1].type === et.Descendant ? r[r.length - 1].type = e : (c(), r.push({type: e})) + } + + function l(e, t) { + r.push({type: et.Attribute, name: e, action: t, value: i(1), namespace: null, ignoreCase: "quirks"}) + } + + function h() { + if (r.length && r[r.length - 1].type === et.Descendant && r.pop(), 0 === r.length) throw new Error("Empty sub-selector"); + e.push(r) + } + + if (s(0), t.length !== n) { + e:for (; n < t.length;) { + const e = t.charCodeAt(n); + switch (e) { + case 32: + case 9: + case 10: + case 12: + case 13: + 0 !== r.length && r[0].type === et.Descendant || (c(), r.push({type: et.Descendant})), s(1); + break; + case 62: + u(et.Child), s(1); + break; + case 60: + u(et.Parent), s(1); + break; + case 126: + u(et.Sibling), s(1); + break; + case 43: + u(et.Adjacent), s(1); + break; + case 46: + l("class", tt.Element); + break; + case 35: + l("id", tt.Equals); + break; + case 91: { + let e, a = (s(1), null), + c = (124 === t.charCodeAt(n) ? e = i(1) : t.startsWith("*|", n) ? (a = "*", e = i(2)) : (e = i(0), 124 === t.charCodeAt(n) && 61 !== t.charCodeAt(n + 1) && (a = e, e = i(1))), s(0), tt.Exists); + const u = st.get(t.charCodeAt(n)); + if (u) { + if (c = u, 61 !== t.charCodeAt(n + 1)) throw new Error("Expected `=`"); + s(2) + } else 61 === t.charCodeAt(n) && (c = tt.Equals, s(1)); + let l = "", h = null; + if ("exists" !== c) { + if (ht(t.charCodeAt(n))) { + const e = t.charCodeAt(n); + let r = n + 1; + for (; r < t.length && (t.charCodeAt(r) !== e || o(r));) r += 1; + if (t.charCodeAt(r) !== e) throw new Error("Attribute value didn't end"); + l = lt(t.slice(n + 1, r)), n = r + 1 + } else { + const e = n; + for (; n < t.length && (!ft(t.charCodeAt(n)) && 93 !== t.charCodeAt(n) || o(n));) n += 1; + l = lt(t.slice(e, n)) + } + s(0); + const e = 32 | t.charCodeAt(n); + 115 == e ? (h = !1, s(1)) : 105 == e && (h = !0, s(1)) + } + if (93 !== t.charCodeAt(n)) throw new Error("Attribute selector didn't terminate"); + n += 1; + var f = {type: et.Attribute, name: e, action: c, value: l, namespace: a, ignoreCase: h}; + r.push(f); + break + } + case 58: { + if (58 === t.charCodeAt(n + 1)) { + r.push({ + type: et.PseudoElement, + name: i(2).toLowerCase(), + data: 40 === t.charCodeAt(n) ? a() : null + }); + continue + } + const e = i(1).toLowerCase(); + let s = null; + if (40 === t.charCodeAt(n)) if (at.has(e)) { + if (ht(t.charCodeAt(n + 1))) throw new Error(`Pseudo-selector ${e} cannot be quoted`); + if (s = [], n = dt(s, t, n + 1), 41 !== t.charCodeAt(n)) throw new Error(`Missing closing parenthesis in :${e} (${t})`); + n += 1 + } else { + if (s = a(), ct.has(e)) { + const e = s.charCodeAt(0); + e === s.charCodeAt(s.length - 1) && ht(e) && (s = s.slice(1, -1)) + } + s = lt(s) + } + r.push({type: et.Pseudo, name: e, data: s}); + break + } + case 44: + h(), r = [], s(1); + break; + default: + if (t.startsWith("/*", n)) { + const e = t.indexOf("*/", n + 2); + if (e < 0) throw new Error("Comment was not terminated"); + n = e + 2, 0 === r.length && s(0) + } else { + let a, o = null; + if (42 === e) n += 1, a = "*"; else if (124 === e) { + if (a = "", 124 === t.charCodeAt(n + 1)) { + u(et.ColumnCombinator), s(2); + break + } + } else { + if (!rt.test(t.slice(n))) break e; + a = i(0) + } + 124 === t.charCodeAt(n) && 124 !== t.charCodeAt(n + 1) && (o = a, 42 === t.charCodeAt(n + 1) ? (a = "*", n += 2) : a = i(1)), r.push("*" === a ? { + type: et.Universal, + namespace: o + } : {type: et.Tag, name: a, namespace: o}) + } + } + } + h() + } + return n +} + +var Jt, mt = { + trueFunc: function () { + return !0 + }, falseFunc: function () { + return !1 + } +}, _t = mt.trueFunc; +const Et = new Map([[et.Universal, 50], [et.Tag, 30], [et.Attribute, 1], [et.Pseudo, 0]]); + +function Tt(e) { + return !Et.has(e.type) +} + +const At = new Map([[tt.Exists, 10], [tt.Equals, 8], [tt.Not, 7], [tt.Start, 6], [tt.End, 6], [tt.Any, 5]]); + +function gt(e) { + var t = e.map(vt); + for (let n = 1; n < e.length; n++) { + var r = t[n]; + if (!(r < 0)) for (let i = n - 1; 0 <= i && r < t[i]; i--) { + const n = e[i + 1]; + e[i + 1] = e[i], e[i] = n, t[i + 1] = t[i], t[i] = r + } + } +} + +function vt(e) { + var t; + let r = null != (t = Et.get(e.type)) ? t : -1; + return e.type === et.Attribute ? (r = null != (t = At.get(e.action)) ? t : 4, e.action === tt.Equals && "id" === e.name && (r = 9), e.ignoreCase && (r >>= 1)) : e.type === et.Pseudo && (e.data ? "has" === e.name || "contains" === e.name ? r = 0 : Array.isArray(e.data) ? (r = Math.min(...e.data.map(e => Math.min(...e.map(vt))))) < 0 && (r = 0) : r = 2 : r = 3), r +} + +const yt = /[-[\]{}()*+?.,\\^$|#\s]/g; + +function St(e) { + return e.replace(yt, "\\$&") +} + +const Ct = new Set(["accept", "accept-charset", "align", "alink", "axis", "bgcolor", "charset", "checked", "clear", "codetype", "color", "compact", "declare", "defer", "dir", "direction", "disabled", "enctype", "face", "frame", "hreflang", "http-equiv", "lang", "language", "link", "media", "method", "multiple", "nohref", "noresize", "noshade", "nowrap", "readonly", "rel", "rev", "rules", "scope", "scrolling", "selected", "shape", "target", "text", "type", "valign", "valuetype", "vlink"]); + +function Nt(e, t) { + return "boolean" == typeof e.ignoreCase ? e.ignoreCase : "quirks" === e.ignoreCase ? !!t.quirksMode : !t.xmlMode && Ct.has(e.name) +} + +const bt = { + equals(e, t, n) { + const r = n.adapter, i = t.name; + let s = t.value; + return Nt(t, n) ? (s = s.toLowerCase(), t => { + var n = r.getAttributeValue(t, i); + return null != n && n.length === s.length && n.toLowerCase() === s && e(t) + }) : t => r.getAttributeValue(t, i) === s && e(t) + }, hyphen(e, t, n) { + const r = n.adapter, i = t.name; + let s = t.value; + const a = s.length; + return Nt(t, n) ? (s = s.toLowerCase(), function (t) { + var n = r.getAttributeValue(t, i); + return null != n && (n.length === a || "-" === n.charAt(a)) && n.substr(0, a).toLowerCase() === s && e(t) + }) : function (t) { + var n = r.getAttributeValue(t, i); + return null != n && (n.length === a || "-" === n.charAt(a)) && n.substr(0, a) === s && e(t) + } + }, element(e, t, n) { + const r = n.adapter, {name: i, value: s} = t; + if (/\s/.test(s)) return mt.falseFunc; + const a = new RegExp(`(?:^|\\s)${St(s)}(?:$|\\s)`, Nt(t, n) ? "i" : ""); + return function (t) { + var n = r.getAttributeValue(t, i); + return null != n && n.length >= s.length && a.test(n) && e(t) + } + }, exists: (e, {name: t}, {adapter: n}) => r => n.hasAttrib(r, t) && e(r), start(e, t, n) { + const r = n.adapter, i = t.name; + let s = t.value; + const a = s.length; + return 0 === a ? mt.falseFunc : Nt(t, n) ? (s = s.toLowerCase(), t => { + var n = r.getAttributeValue(t, i); + return null != n && n.length >= a && n.substr(0, a).toLowerCase() === s && e(t) + }) : t => { + var n; + return !(null == (n = r.getAttributeValue(t, i)) || !n.startsWith(s)) && e(t) + } + }, end(e, t, n) { + const r = n.adapter, i = t.name; + let s = t.value; + const a = -s.length; + return 0 == a ? mt.falseFunc : Nt(t, n) ? (s = s.toLowerCase(), t => { + var n; + return (null == (n = r.getAttributeValue(t, i)) ? void 0 : n.substr(a).toLowerCase()) === s && e(t) + }) : t => { + var n; + return !(null == (n = r.getAttributeValue(t, i)) || !n.endsWith(s)) && e(t) + } + }, any(e, t, n) { + const r = n.adapter, {name: i, value: s} = t; + if ("" === s) return mt.falseFunc; + if (Nt(t, n)) { + const t = new RegExp(St(s), "i"); + return function (n) { + var a = r.getAttributeValue(n, i); + return null != a && a.length >= s.length && t.test(a) && e(n) + } + } + return t => { + var n; + return !(null == (n = r.getAttributeValue(t, i)) || !n.includes(s)) && e(t) + } + }, not(e, t, n) { + const r = n.adapter, i = t.name; + let s = t.value; + return "" === s ? t => !!r.getAttributeValue(t, i) && e(t) : Nt(t, n) ? (s = s.toLowerCase(), t => { + var n = r.getAttributeValue(t, i); + return (null == n || n.length !== s.length || n.toLowerCase() !== s) && e(t) + }) : t => r.getAttributeValue(t, i) !== s && e(t) + } +}, It = new Set([9, 10, 12, 13, 32]), Ot = "0".charCodeAt(0), kt = "9".charCodeAt(0); + +function Lt(e) { + return function (e) { + const t = e[0], n = e[1] - 1; + if (n < 0 && t <= 0) return mt.falseFunc; + if (-1 === t) return e => e <= n; + if (0 === t) return e => e === n; + if (1 === t) return n < 0 ? mt.trueFunc : e => e >= n; + const r = Math.abs(t), i = (n % r + r) % r; + return 1 < t ? e => e >= n && e % r == i : e => e <= n && e % r == i + }(function (e) { + if ("even" === (e = e.trim().toLowerCase())) return [2, 0]; + if ("odd" === e) return [2, 1]; + let t = 0, n = 0, r = s(), i = a(); + if (t < e.length && "n" === e.charAt(t) && (t++, n = r * (null != i ? i : 1), o(), t < e.length ? (r = s(), o(), i = a()) : r = i = 0), null === i || t < e.length) throw new Error(`n-th rule couldn't be parsed ('${e}')`); + return [n, r * i]; + + function s() { + return "-" === e.charAt(t) ? (t++, -1) : ("+" === e.charAt(t) && t++, 1) + } + + function a() { + var n = t; + let r = 0; + for (; t < e.length && e.charCodeAt(t) >= Ot && e.charCodeAt(t) <= kt;) r = 10 * r + (e.charCodeAt(t) - Ot), t++; + return t === n ? null : r + } + + function o() { + for (; t < e.length && It.has(e.charCodeAt(t));) t++ + } + }(e)) +} + +function Dt(e, t) { + return n => { + var r = t.getParent(n); + return null != r && t.isTag(r) && e(n) + } +} + +const Rt = { + contains: (e, t, {adapter: n}) => function (r) { + return e(r) && n.getText(r).includes(t) + }, icontains(e, t, {adapter: n}) { + const r = t.toLowerCase(); + return function (t) { + return e(t) && n.getText(t).toLowerCase().includes(r) + } + }, "nth-child"(e, t, {adapter: n, equals: r}) { + const i = Lt(t); + return i === mt.falseFunc ? mt.falseFunc : i === mt.trueFunc ? Dt(e, n) : function (t) { + var s = n.getSiblings(t); + let a = 0; + for (let e = 0; e < s.length && !r(t, s[e]); e++) n.isTag(s[e]) && a++; + return i(a) && e(t) + } + }, "nth-last-child"(e, t, {adapter: n, equals: r}) { + const i = Lt(t); + return i === mt.falseFunc ? mt.falseFunc : i === mt.trueFunc ? Dt(e, n) : function (t) { + var s = n.getSiblings(t); + let a = 0; + for (let e = s.length - 1; 0 <= e && !r(t, s[e]); e--) n.isTag(s[e]) && a++; + return i(a) && e(t) + } + }, "nth-of-type"(e, t, {adapter: n, equals: r}) { + const i = Lt(t); + return i === mt.falseFunc ? mt.falseFunc : i === mt.trueFunc ? Dt(e, n) : function (t) { + var s = n.getSiblings(t); + let a = 0; + for (let e = 0; e < s.length; e++) { + const i = s[e]; + if (r(t, i)) break; + n.isTag(i) && n.getName(i) === n.getName(t) && a++ + } + return i(a) && e(t) + } + }, "nth-last-of-type"(e, t, {adapter: n, equals: r}) { + const i = Lt(t); + return i === mt.falseFunc ? mt.falseFunc : i === mt.trueFunc ? Dt(e, n) : function (t) { + var s = n.getSiblings(t); + let a = 0; + for (let e = s.length - 1; 0 <= e; e--) { + const i = s[e]; + if (r(t, i)) break; + n.isTag(i) && n.getName(i) === n.getName(t) && a++ + } + return i(a) && e(t) + } + }, root: (e, t, {adapter: n}) => t => { + var r = n.getParent(t); + return (null == r || !n.isTag(r)) && e(t) + }, scope(e, t, n, r) { + const i = n.equals; + return r && 0 !== r.length ? 1 === r.length ? t => i(r[0], t) && e(t) : t => r.includes(t) && e(t) : Rt.root(e, t, n) + }, hover: wt("isHovered"), visited: wt("isVisited"), active: wt("isActive") +}; + +function wt(e) { + return function (t, n, {adapter: r}) { + const i = r[e]; + return "function" != typeof i ? mt.falseFunc : function (e) { + return i(e) && t(e) + } + } +} + +const xt = { + empty: (e, {adapter: t}) => !t.getChildren(e).some(e => t.isTag(e) || "" !== t.getText(e)), + "first-child"(e, {adapter: t, equals: n}) { + var r; + return t.prevElementSibling ? null == t.prevElementSibling(e) : null != (r = t.getSiblings(e).find(e => t.isTag(e))) && n(e, r) + }, + "last-child"(e, {adapter: t, equals: n}) { + var r = t.getSiblings(e); + for (let i = r.length - 1; 0 <= i; i--) { + if (n(e, r[i])) return !0; + if (t.isTag(r[i])) break + } + return !1 + }, + "first-of-type"(e, {adapter: t, equals: n}) { + var r = t.getSiblings(e), i = t.getName(e); + for (let s = 0; s < r.length; s++) { + var a = r[s]; + if (n(e, a)) return !0; + if (t.isTag(a) && t.getName(a) === i) break + } + return !1 + }, + "last-of-type"(e, {adapter: t, equals: n}) { + var r = t.getSiblings(e), i = t.getName(e); + for (let s = r.length - 1; 0 <= s; s--) { + var a = r[s]; + if (n(e, a)) return !0; + if (t.isTag(a) && t.getName(a) === i) break + } + return !1 + }, + "only-of-type"(e, {adapter: t, equals: n}) { + const r = t.getName(e); + return t.getSiblings(e).every(i => n(e, i) || !t.isTag(i) || t.getName(i) !== r) + }, + "only-child": (e, {adapter: t, equals: n}) => t.getSiblings(e).every(r => n(e, r) || !t.isTag(r)) +}; + +function Mt(e, t, n, r) { + if (null === n) { + if (e.length > r) throw new Error(`Pseudo-class :${t} requires an argument`) + } else if (e.length === r) throw new Error(`Pseudo-class :${t} doesn't have any arguments`) +} + +const Pt = { + "any-link": ":is(a, area, link)[href]", + link: ":any-link:not(:visited)", + disabled: ":is(\n :is(button, input, select, textarea, optgroup, option)[disabled],\n optgroup[disabled] > option,\n fieldset[disabled]:not(fieldset[disabled] legend:first-of-type *)\n )", + enabled: ":not(:disabled)", + checked: ":is(:is(input[type=radio], input[type=checkbox])[checked], option:selected)", + required: ":is(input, select, textarea)[required]", + optional: ":is(input, select, textarea):not([required])", + selected: "option:is([selected], select:not([multiple]):not(:has(> option[selected])) > :first-of-type)", + checkbox: "[type=checkbox]", + file: "[type=file]", + password: "[type=password]", + radio: "[type=radio]", + reset: "[type=reset]", + image: "[type=image]", + submit: "[type=submit]", + parent: ":not(:empty)", + header: ":is(h1, h2, h3, h4, h5, h6)", + button: ":is(button, input[type=button])", + input: ":is(input, textarea, select, button)", + text: "input:is(:not([type!='']), [type=text])" +}, Bt = {}; + +function Ft(e, t) { + var n = t.getSiblings(e); + return n.length <= 1 || (e = n.indexOf(e)) < 0 || e === n.length - 1 ? [] : n.slice(e + 1).filter(t.isTag) +} + +function Ut(e) { + return { + xmlMode: !!e.xmlMode, + lowerCaseAttributeNames: !!e.lowerCaseAttributeNames, + lowerCaseTags: !!e.lowerCaseTags, + quirksMode: !!e.quirksMode, + cacheResults: !!e.cacheResults, + pseudos: e.pseudos, + adapter: e.adapter, + equals: e.equals + } +} + +const Ht = (e, t, n, r, i) => { + const s = i(t, Ut(n), r); + return s === mt.trueFunc ? e : s === mt.falseFunc ? mt.falseFunc : t => s(t) && e(t) +}, Gt = { + is: Ht, matches: Ht, where: Ht, not(e, t, n, r, i) { + const s = i(t, Ut(n), r); + return s === mt.falseFunc ? e : s === mt.trueFunc ? mt.falseFunc : t => !s(t) && e(t) + }, has(e, t, n, r, i) { + const s = n.adapter, a = Ut(n), o = (a.relativeSelector = !0, t.some(e => e.some(Tt)) ? [Bt] : void 0), + c = i(t, a, o); + if (c === mt.falseFunc) return mt.falseFunc; + const u = function (e, t) { + return e === mt.falseFunc ? mt.falseFunc : n => t.isTag(n) && e(n) + }(c, s); + if (o && c !== mt.trueFunc) { + const {shouldTestNextSiblings: t = !1} = c; + return n => { + if (!e(n)) return !1; + o[0] = n; + var r = s.getChildren(n), n = t ? [...r, ...Ft(n, s)] : r; + return s.existsOne(u, n) + } + } + return t => e(t) && s.existsOne(u, s.getChildren(t)) + } +}; + +function jt(e, t) { + return (e = t.getParent(e)) && t.isTag(e) ? e : null +} + +function qt(e, t, n, r, i) { + const {adapter: s, equals: a} = n; + switch (t.type) { + case et.PseudoElement: + throw new Error("Pseudo-elements are not supported by css-select"); + case et.ColumnCombinator: + throw new Error("Column combinators are not yet supported by css-select"); + case et.Attribute: + if (null != t.namespace) throw new Error("Namespaced attributes are not yet supported by css-select"); + return n.xmlMode && !n.lowerCaseAttributeNames || (t.name = t.name.toLowerCase()), bt[t.action](e, t, n); + case et.Pseudo: + return function (e, t, n, r, i) { + const {name: a, data: o} = t; + if (Array.isArray(o)) { + if (a in Gt) return Gt[a](e, o, n, r, i); + throw new Error(`Unknown pseudo-class :${a}(${o})`) + } + const c = null == (t = n.pseudos) ? void 0 : t[a], u = "string" == typeof c ? c : Pt[a]; + if ("string" == typeof u) { + if (null != o) throw new Error(`Pseudo ${a} doesn't have any arguments`); + const t = pt(u); + return Gt.is(e, t, n, r, i) + } + if ("function" == typeof c) return Mt(c, a, o, 1), t => c(t, o) && e(t); + if (a in Rt) return Rt[a](e, o, n, r); + if (a in xt) { + const t = xt[a]; + return Mt(t, a, o, 2), r => t(r, n, o) && e(r) + } + throw new Error("Unknown pseudo-class :" + a) + }(e, t, n, r, i); + case et.Tag: { + if (null != t.namespace) throw new Error("Namespaced tag names are not yet supported by css-select"); + let r = t.name; + return n.xmlMode && !n.lowerCaseTags || (r = r.toLowerCase()), function (t) { + return s.getName(t) === r && e(t) + } + } + case et.Descendant: { + if (!1 === n.cacheResults || "undefined" == typeof WeakSet) return function (t) { + let n = t; + for (; n = jt(n, s);) if (e(n)) return !0; + return !1 + }; + const t = new WeakSet; + return function (n) { + let r = n; + for (; r = jt(r, s);) if (!t.has(r)) { + if (s.isTag(r) && e(r)) return !0; + t.add(r) + } + return !1 + } + } + case"_flexibleDescendant": + return function (t) { + let n = t; + do { + if (e(n)) return !0 + } while (n = jt(n, s)); + return !1 + }; + case et.Parent: + return function (t) { + return s.getChildren(t).some(t => s.isTag(t) && e(t)) + }; + case et.Child: + return function (t) { + return null != (t = s.getParent(t)) && s.isTag(t) && e(t) + }; + case et.Sibling: + return function (t) { + var n = s.getSiblings(t); + for (let r = 0; r < n.length; r++) { + var i = n[r]; + if (a(t, i)) break; + if (s.isTag(i) && e(i)) return !0 + } + return !1 + }; + case et.Adjacent: + return s.prevElementSibling ? function (t) { + return null != (t = s.prevElementSibling(t)) && e(t) + } : function (t) { + var n = s.getSiblings(t); + let r; + for (let e = 0; e < n.length; e++) { + var i = n[e]; + if (a(t, i)) break; + s.isTag(i) && (r = i) + } + return !!r && e(r) + }; + case et.Universal: + if (null != t.namespace && "*" !== t.namespace) throw new Error("Namespaced universal selectors are not yet supported by css-select"); + return e + } +} + +function Yt(e) { + return e.type === et.Pseudo && ("scope" === e.name || Array.isArray(e.data) && e.data.some(e => e.some(Yt))) +} + +const Kt = {type: et.Descendant}, Wt = {type: "_flexibleDescendant"}, Vt = {type: et.Pseudo, name: "scope", data: null}; + +function $t(e, t, n) { + e.forEach(gt), n = null != (r = t.context) ? r : n; + const i = Array.isArray(n), s = n && (Array.isArray(n) ? n : [n]); + if (!1 !== t.relativeSelector) !function (e, {adapter: t}, n) { + var r = !(null == n || !n.every(e => { + var n = t.isTag(e) && t.getParent(e); + return e === Bt || n && t.isTag(n) + })); + for (const t of e) { + if (!(0 < t.length && Tt(t[0]) && t[0].type !== et.Descendant)) { + if (!r || t.some(Yt)) continue; + t.unshift(Kt) + } + t.unshift(Vt) + } + }(e, t, s); else if (e.some(e => 0 < e.length && Tt(e[0]))) throw new Error("Relative selectors are not allowed when the `relativeSelector` option is disabled"); + let a = !1; + var r = e.map(e => { + if (2 <= e.length) { + const [t, n] = e; + t.type === et.Pseudo && "scope" === t.name && (i && n.type === et.Descendant ? e[1] = Wt : n.type !== et.Adjacent && n.type !== et.Sibling || (a = !0)) + } + return function (e, t, n) { + return e.reduce((e, r) => e === mt.falseFunc ? mt.falseFunc : qt(e, r, t, n, $t), null != (e = t.rootFunc) ? e : mt.trueFunc) + }(e, t, s) + }).reduce(Qt, mt.falseFunc); + return r.shouldTestNextSiblings = a, r +} + +function Qt(e, t) { + return t === mt.falseFunc || e === mt.trueFunc ? e : e === mt.falseFunc || t === mt.trueFunc ? t : function (n) { + return e(n) || t(n) + } +} + +const zt = (e, t) => e === t, Xt = {adapter: Se, equals: zt}, Zt = (Jt = $t, function (e, t, n) { + return t = function (e) { + var r; + return null == (e = null != e ? e : Xt).adapter && (e.adapter = Se), null == e.equals && (e.equals = null != (r = null == (r = e.adapter) ? void 0 : r.equals) ? r : zt), e + }(t), Jt(e, t, n) +}); + +function en(e, t, n = !1) { + return n && (e = function (e, t) { + const n = Array.isArray(e) ? e.slice(0) : [e], r = n.length; + for (let e = 0; e < r; e++) { + const r = Ft(n[e], t); + n.push(...r) + } + return n + }(e, t)), Array.isArray(e) ? t.removeSubsets(e) : t.getChildren(e) +} + +const tn = new Set(["first", "last", "eq", "gt", "nth", "lt", "even", "odd"]); + +function nn(e) { + return "pseudo" === e.type && (!!tn.has(e.name) || !("not" !== e.name || !Array.isArray(e.data)) && e.data.some(e => e.some(nn))) +} + +function rn(e) { + var t = [], n = []; + for (const r of e) (r.some(nn) ? t : n).push(r); + return [n, t] +} + +const sn = {type: et.Universal, namespace: null}, an = {type: et.Pseudo, name: "scope", data: null}; + +function on(e, t, n = {}) { + return cn([e], t, n) +} + +function cn(e, t, n = {}) { + var i; + return "function" == typeof t ? e.some(t) : ([t, i] = rn(pt(t)), 0 < t.length && e.some(Zt(t, n)) || i.some(t => 0 < hn(t, e, n).length)) +} + +function un(e, t, n = {}) { + return ln(pt(e), t, n) +} + +function ln(e, t, n) { + if (0 === t.length) return []; + const [r, i] = rn(e); + let s; + if (r.length) { + const e = mn(t, r, n); + if (0 === i.length) return e; + e.length && (s = new Set(e)) + } + for (let e = 0; e < i.length && (null == s ? void 0 : s.size) !== t.length; e++) { + const r = i[e], a = s ? t.filter(e => S(e) && !s.has(e)) : t; + if (0 === a.length) break; + var o = hn(r, t, n); + if (o.length) if (s) o.forEach(e => s.add(e)); else { + if (e === i.length - 1) return o; + s = new Set(o) + } + } + return void 0 !== s ? s.size === t.length ? t : t.filter(e => s.has(e)) : [] +} + +function hn(e, t, n) { + var r, s; + return e.some(ot) ? (r = null != (r = n.root) ? r : function (e) { + for (; e.parent;) e = e.parent; + return e + }(t[0]), s = { + ...n, + context: t, + relativeSelector: !1 + }, e.push(an), fn(r, e, s, !0, t.length)) : fn(t, e, n, !1, t.length) +} + +function fn(e, t, n, r, i) { + var s = t.findIndex(nn), a = t.slice(0, s), o = t[s], c = t.length - 1 === s ? i : 1 / 0; + if (0 === (c = function (e, t, n) { + var r = null != t ? parseInt(t, 10) : NaN; + switch (e) { + case"first": + return 1; + case"nth": + case"eq": + return isFinite(r) ? 0 <= r ? r + 1 : 1 / 0 : 0; + case"lt": + return isFinite(r) ? 0 <= r ? Math.min(r, n) : 1 / 0 : 0; + case"gt": + return isFinite(r) ? 1 / 0 : 0; + case"odd": + return 2 * n; + case"even": + return 2 * n - 1; + case"last": + case"not": + return 1 / 0 + } + }(o.name, o.data, c))) return []; + r = (0 !== a.length || Array.isArray(e) ? 0 === a.length ? (Array.isArray(e) ? e : [e]).filter(S) : r || a.some(ot) ? pn(e, [a], n, c) : mn(e, [a], n) : J(e).filter(S)).slice(0, c); + let h = function (e, t, n, r) { + var i = "string" == typeof n ? parseInt(n, 10) : NaN; + switch (e) { + case"first": + case"lt": + return t; + case"last": + return 0 < t.length ? [t[t.length - 1]] : t; + case"nth": + case"eq": + return isFinite(i) && Math.abs(i) < t.length ? [i < 0 ? t[t.length + i] : t[i]] : []; + case"gt": + return isFinite(i) ? t.slice(i + 1) : []; + case"even": + return t.filter((e, t) => t % 2 == 0); + case"odd": + return t.filter((e, t) => t % 2 == 1); + case"not": { + const e = new Set(ln(n, t, r)); + return t.filter(t => !e.has(t)) + } + } + }(o.name, r, o.data, n); + if (0 === h.length || t.length === s + 1) return h; + if (e = (a = t.slice(s + 1)).some(ot)) { + if (ot(a[0])) { + const e = a[0].type; + e !== et.Sibling && e !== et.Adjacent || (h = en(h, Se, !0)), a.unshift(sn) + } + n = {...n, relativeSelector: !1, rootFunc: e => h.includes(e)} + } else n.rootFunc && n.rootFunc !== _t && (n = {...n, rootFunc: _t}); + return a.some(nn) ? fn(h, a, n, !1, i) : e ? pn(h, [a], n, i) : mn(h, [a], n) +} + +function pn(e, t, n, r) { + return dn(e, Zt(t, n, e), r) +} + +function dn(e, t, n = 1 / 0) { + return ae(e => S(e) && t(e), en(e, Se, t.shouldTestNextSiblings), !0, n) +} + +function mn(e, t, n) { + return 0 === (e = (Array.isArray(e) ? e : [e]).filter(S)).length || (t = Zt(t, n)) === _t ? e : e.filter(t) +} + +var _n = function (e, t, n) { + if (n || 2 === arguments.length) for (var r, i = 0, s = t.length; i < s; i++) !r && i in t || ((r = r || Array.prototype.slice.call(t, 0, i))[i] = t[i]); + return e.concat(r || Array.prototype.slice.call(t)) +}, En = /^\s*[~+]/; + +function Tn(e) { + return function (t) { + for (var n = [], r = 1; r < arguments.length; r++) n[r - 1] = arguments[r]; + return function (r) { + var s = e(t, this); + return r && (s = Mn(s, r, this.options.xmlMode, null == (r = this._root) ? void 0 : r[0])), this._make(1 < this.length && 1 < s.length ? n.reduce(function (e, t) { + return t(e) + }, s) : s) + } + } +} + +var An = Tn(function (e, t) { + for (var n, r = [], i = 0; i < t.length; i++) { + var s = e(t[i]); + r.push(s) + } + return (n = new Array).concat.apply(n, r) +}), gn = Tn(function (e, t) { + for (var n = [], r = 0; r < t.length; r++) { + var i = e(t[r]); + null !== i && n.push(i) + } + return n +}); + +function vn(e) { + for (var t = [], n = 1; n < arguments.length; n++) t[n - 1] = arguments[n]; + var r = null, i = Tn(function (e, t) { + var n = []; + return Be(t, function (t) { + for (var i; (i = e(t)) && (null == r || !r(i, n.length)); t = i) n.push(i) + }), n + }).apply(void 0, _n([e], t, !1)); + return function (e, t) { + var n = this, t = (r = "string" == typeof e ? function (t) { + return on(t, e, n.options) + } : e ? xn(e) : null, i.call(this, t)); + return r = null, t + } +} + +function yn(e) { + return Array.from(new Set(e)) +} + +var Sn = gn(function (e) { + return (e = e.parent) && !O(e) ? e : null +}, yn), Cn = An(function (e) { + for (var t = []; e.parent && !O(e.parent);) t.push(e.parent), e = e.parent; + return t +}, me, function (e) { + return e.reverse() +}), Nn = vn(function (e) { + return (e = e.parent) && !O(e) ? e : null +}, me, function (e) { + return e.reverse() +}), bn = gn(function (e) { + return ne(e) +}), In = An(function (e) { + for (var t = []; e.next;) S(e = e.next) && t.push(e); + return t +}, yn), On = vn(function (e) { + return ne(e) +}, yn), kn = gn(function (e) { + return re(e) +}), Ln = An(function (e) { + for (var t = []; e.prev;) S(e = e.prev) && t.push(e); + return t +}, yn), Dn = vn(function (e) { + return re(e) +}, yn), Rn = An(function (e) { + return te(e).filter(function (t) { + return S(t) && t !== e + }) +}, me), wn = An(function (e) { + return J(e).filter(S) +}, yn); + +function xn(e) { + return "function" == typeof e ? function (t, n) { + return e.call(t, n, t) + } : Pe(e) ? function (t) { + return Array.prototype.includes.call(e, t) + } : function (t) { + return e === t + } +} + +function Mn(e, t, n, r) { + return "string" == typeof t ? un(t, e, {xmlMode: n, root: r}) : e.filter(xn(t)) +} + +var Pn = Object.freeze({ + __proto__: null, + find: function (e) { + var n, r, t; + return e ? (n = this.toArray(), "string" != typeof e ? (r = Pe(e) ? e.toArray() : [e], this._make(r.filter(function (e) { + return n.some(function (t) { + return De(t, e) + }) + }))) : (r = En.test(e) ? n : this.children().toArray(), t = { + context: n, + root: null == (t = this._root) ? void 0 : t[0], + xmlMode: this.options.xmlMode, + lowerCaseTags: this.options.lowerCaseTags, + lowerCaseAttributeNames: this.options.lowerCaseAttributeNames, + pseudos: this.options.pseudos, + quirksMode: this.options.quirksMode + }, this._make(function (e, t, n) { + var s; + return "function" == typeof e ? dn(t, e) : ([e, s] = rn(pt(e)), s = s.map(e => fn(t, e, n, !0, 1 / 0)), e.length && s.push(pn(t, e, n, 1 / 0)), 0 === s.length ? [] : 1 === s.length ? s[0] : me(s.reduce((e, t) => [...e, ...t]))) + }(e, r, t)))) : this._make([]) + }, + parent: Sn, + parents: Cn, + parentsUntil: Nn, + closest: function (e) { + var t, r, i, n = []; + return e && (r = { + xmlMode: this.options.xmlMode, + root: null == (t = this._root) ? void 0 : t[0] + }, i = "string" == typeof e ? function (t) { + return on(t, e, r) + } : xn(e), Be(this, function (e) { + for (; e && S(e);) { + if (i(e, 0)) { + n.includes(e) || n.push(e); + break + } + e = e.parent + } + })), this._make(n) + }, + next: bn, + nextAll: In, + nextUntil: On, + prev: kn, + prevAll: Ln, + prevUntil: Dn, + siblings: Rn, + children: wn, + contents: function () { + var e = this.toArray().reduce(function (e, t) { + return k(t) ? e.concat(t.children) : e + }, []); + return this._make(e) + }, + each: function (e) { + for (var t = 0, n = this.length; t < n && !1 !== e.call(this[t], t, this[t]);) ++t; + return this + }, + map: function (e) { + for (var t = [], n = 0; n < this.length; n++) { + var r = this[n]; + null != (r = e.call(r, n, r)) && (t = t.concat(r)) + } + return this._make(t) + }, + filter: function (e) { + return this._make(Mn(this.toArray(), e, this.options.xmlMode, null == (e = this._root) ? void 0 : e[0])) + }, + filterArray: Mn, + is: function (e) { + var t = this.toArray(); + return "string" == typeof e ? cn(t.filter(S), e, this.options) : !!e && t.some(xn(e)) + }, + not: function (e) { + var n, r, t = this.toArray(), + t = "string" == typeof e ? (n = new Set(un(e, t, this.options)), t.filter(function (e) { + return !n.has(e) + })) : (r = xn(e), t.filter(function (e, t) { + return !r(e, t) + })); + return this._make(t) + }, + has: function (e) { + var t = this; + return this.filter("string" == typeof e ? ":has(".concat(e, ")") : function (n, r) { + return 0 < t._make(r).find(e).length + }) + }, + first: function () { + return 1 < this.length ? this._make(this[0]) : this + }, + last: function () { + return 0 < this.length ? this._make(this[this.length - 1]) : this + }, + eq: function (e) { + return 0 == (e = +e) && this.length <= 1 ? this : (e < 0 && (e = this.length + e), this._make(null != (e = this[e]) ? e : [])) + }, + get: function (e) { + return null == e ? this.toArray() : this[e < 0 ? this.length + e : e] + }, + toArray: function () { + return Array.prototype.slice.call(this) + }, + index: function (e) { + var t, + e = null == e ? (t = this.parent().children(), this[0]) : "string" == typeof e ? (t = this._make(e), this[0]) : (t = this, Pe(e) ? e[0] : e); + return Array.prototype.indexOf.call(t, e) + }, + slice: function (e, t) { + return this._make(Array.prototype.slice.call(this, e, t)) + }, + end: function () { + var e; + return null != (e = this.prevObject) ? e : this._make([]) + }, + add: function (e, t) { + return e = this._make(e, t), t = me(_n(_n([], this.get(), !0), e.get(), !0)), this._make(t) + }, + addBack: function (e) { + return this.prevObject ? this.add(e ? this.prevObject.filter(e) : this.prevObject) : this + } +}); + +function Bn(e, t) { + var n = Array.isArray(e) ? e : [e]; + t ? t.children = n : t = null; + for (var r = 0; r < n.length; r++) { + var i = n[r]; + i.parent && i.parent.children !== n && ie(i), t ? (i.prev = n[r - 1] || null, i.next = n[r + 1] || null) : i.prev = i.next = null, i.parent = t + } + return t +} + +var Fn = function (e, t, n) { + if (n || 2 === arguments.length) for (var r, i = 0, s = t.length; i < s; i++) !r && i in t || ((r = r || Array.prototype.slice.call(t, 0, i))[i] = t[i]); + return e.concat(r || Array.prototype.slice.call(t)) +}; + +function Un(e) { + return function () { + for (var t = this, n = [], r = 0; r < arguments.length; r++) n[r] = arguments[r]; + var i = this.length - 1; + return Be(this, function (r, s) { + var a; + k(r) && (a = "function" == typeof n[0] ? n[0].call(r, s, t._render(r.children)) : n, a = t._makeDomArray(a, s < i), e(a, r.children, r)) + }) + } +} + +function Hn(e, t, n, r, i) { + for (var o = Fn([t, n], r, !0), c = 0 === t ? null : e[t - 1], u = t + n >= e.length ? null : e[t + n], l = 0; l < r.length; ++l) { + var p, h = r[l], f = h.parent; + f && -1 < (p = f.children.indexOf(h)) && (f.children.splice(p, 1), i === f) && p < t && o[0]--, h.parent = i, h.prev && (h.prev.next = null != (f = h.next) ? f : null), h.next && (h.next.prev = null != (p = h.prev) ? p : null), h.prev = 0 === l ? c : r[l - 1], h.next = l === r.length - 1 ? u : r[l + 1] + } + return c && (c.next = r[0]), u && (u.prev = r[r.length - 1]), e.splice.apply(e, o) +} + +var Gn = Un(function (e, t, n) { + Hn(t, t.length, 0, e, n) +}), jn = Un(function (e, t, n) { + Hn(t, 0, 0, e, n) +}); + +function qn(e) { + return function (t) { + for (var n = this.length - 1, r = this.parents().last(), i = 0; i < this.length; i++) { + var s = this[i], + a = "function" == typeof t ? t.call(s, i, s) : "string" != typeof t || Ue(t) ? t : r.find(t).clone(); + if ((a = this._makeDomArray(a, i < n)[0]) && k(a)) { + for (var c = a, u = 0; u < c.children.length;) { + var l = c.children[u]; + S(l) ? (c = l, u = 0) : u++ + } + e(s, c, [a]) + } + } + return this + } +} + +var Yn = qn(function (e, t, n) { + var i, s, r = e.parent; + r && (s = (i = r.children).indexOf(e), Bn([e], t), Hn(i, s, 0, n, r)) +}), Kn = qn(function (e, t, n) { + k(e) && (Bn(e.children, t), Bn(n, e)) +}), Wn = Object.freeze({ + __proto__: null, _makeDomArray: function (e, t) { + var n = this; + return null == e ? [] : Pe(e) ? t ? Fe(e.get()) : e.get() : Array.isArray(e) ? e.reduce(function (e, r) { + return e.concat(n._makeDomArray(r, t)) + }, []) : "string" == typeof e ? this._parse(e, this.options, !1, null).children : t ? Fe([e]) : [e] + }, appendTo: function (e) { + return (Pe(e) ? e : this._make(e)).append(this), this + }, prependTo: function (e) { + return (Pe(e) ? e : this._make(e)).prepend(this), this + }, append: Gn, prepend: jn, wrap: Yn, wrapInner: Kn, unwrap: function (e) { + var t = this; + return this.parent(e).not("body").each(function (e, n) { + t._make(n).replaceWith(n.children) + }), this + }, wrapAll: function (e) { + var t = this[0]; + if (t) { + for (var n = this._make("function" == typeof e ? e.call(t, 0, t) : e).insertBefore(t), r = void 0, i = 0; i < n.length; i++) "tag" === n[i].type && (r = n[i]); + for (var s = 0; r && s < r.children.length;) { + var a = r.children[s]; + "tag" === a.type ? (r = a, s = 0) : s++ + } + r && this._make(r).append(this) + } + return this + }, after: function () { + for (var e = this, t = [], n = 0; n < arguments.length; n++) t[n] = arguments[n]; + var r = this.length - 1; + return Be(this, function (n, i) { + var a, o, s = n.parent; + k(n) && s && ((o = (a = s.children).indexOf(n)) < 0 || (n = "function" == typeof t[0] ? t[0].call(n, i, e._render(n.children)) : t, Hn(a, o + 1, 0, e._makeDomArray(n, i < r), s))) + }) + }, insertAfter: function (e) { + var t = this, n = ("string" == typeof e && (e = this._make(e)), this.remove(), []); + return this._makeDomArray(e).forEach(function (e) { + var s, r = t.clone().toArray(), i = e.parent; + !i || (e = (s = i.children).indexOf(e)) < 0 || (Hn(s, e + 1, 0, r, i), n.push.apply(n, r)) + }), this._make(n) + }, before: function () { + for (var e = this, t = [], n = 0; n < arguments.length; n++) t[n] = arguments[n]; + var r = this.length - 1; + return Be(this, function (n, i) { + var a, o, s = n.parent; + k(n) && s && ((o = (a = s.children).indexOf(n)) < 0 || (n = "function" == typeof t[0] ? t[0].call(n, i, e._render(n.children)) : t, Hn(a, o, 0, e._makeDomArray(n, i < r), s))) + }) + }, insertBefore: function (e) { + var t = this, e = this._make(e), r = (this.remove(), []); + return Be(e, function (e) { + var s, n = t.clone().toArray(), i = e.parent; + !i || (e = (s = i.children).indexOf(e)) < 0 || (Hn(s, e, 0, n, i), r.push.apply(r, n)) + }), this._make(r) + }, remove: function (e) { + return Be(e ? this.filter(e) : this, function (e) { + ie(e), e.prev = e.next = e.parent = null + }), this + }, replaceWith: function (e) { + var t = this; + return Be(this, function (n, r) { + var s, c, i = n.parent; + i && (s = i.children, r = "function" == typeof e ? e.call(n, r, n) : e, Bn(r = t._makeDomArray(r), null), c = s.indexOf(n), Hn(s, c, 1, r, i), r.includes(n) || (n.parent = n.prev = n.next = null)) + }) + }, empty: function () { + return Be(this, function (e) { + k(e) && (e.children.forEach(function (e) { + e.next = e.prev = e.parent = null + }), e.children.length = 0) + }) + }, html: function (e) { + var n, t = this; + return void 0 === e ? (n = this[0]) && k(n) ? this._render(n.children) : null : Be(this, function (n) { + k(n) && (n.children.forEach(function (e) { + e.next = e.prev = e.parent = null + }), Bn(Pe(e) ? e.toArray() : t._parse("".concat(e), t.options, !1, n).children, n)) + }) + }, toString: function () { + return this._render(this) + }, text: function (e) { + var t = this; + return void 0 === e ? Oe(this) : Be(this, "function" == typeof e ? function (n, r) { + return t._make(n).text(e.call(n, r, Oe([n]))) + } : function (t) { + k(t) && (t.children.forEach(function (e) { + e.next = e.prev = e.parent = null + }), Bn(new _("".concat(e)), t)) + }) + }, clone: function () { + return this._make(Fe(this.get())) + } +}); + +function Vn(e, t, n, r) { + var i, a; + "string" == typeof t ? (i = $n(e), "" === (r = "function" == typeof n ? n.call(e, r, i[t]) : n) ? delete i[t] : null != r && (i[t] = r), e.attribs.style = (a = i, Object.keys(a).reduce(function (e, t) { + return "".concat(e).concat(e ? " " : "").concat(t, ": ").concat(a[t], ";") + }, ""))) : "object" == typeof t && Object.keys(t).forEach(function (n, r) { + Vn(e, n, t[n], r) + }) +} + +function $n(e, t) { + var n, r; + if (e && S(e)) return n = function (e) { + if (!(e = (e || "").trim())) return {}; + for (var t, n = {}, r = 0, i = e.split(";"); r < i.length; r++) { + var o, s = i[r], a = s.indexOf(":"); + a < 1 || a === s.length - 1 ? 0 < (o = s.trimEnd()).length && void 0 !== t && (n[t] += ";".concat(o)) : n[t = s.slice(0, a).trim()] = s.slice(a + 1).trim() + } + return n + }(e.attribs.style), "string" == typeof t ? n[t] : Array.isArray(t) ? (r = {}, t.forEach(function (e) { + null != n[e] && (r[e] = n[e]) + }), r) : n +} + +var tr, ar, _r, Tr, Qn = Object.freeze({ + __proto__: null, css: function (e, t) { + return null != e && null != t || "object" == typeof e && !Array.isArray(e) ? Be(this, function (n, r) { + S(n) && Vn(n, e, t, r) + }) : 0 !== this.length ? $n(this[0], e) : void 0 + } + }), zn = "input,select,textarea,keygen", Xn = /%20/g, Zn = /\r?\n/g, Jn = Object.freeze({ + __proto__: null, serialize: function () { + return this.serializeArray().map(function (e) { + return "".concat(encodeURIComponent(e.name), "=").concat(encodeURIComponent(e.value)) + }).join("&").replace(Xn, "+") + }, serializeArray: function () { + var e = this; + return this.map(function (t, n) { + var r = e._make(n); + return (S(n) && "form" === n.name ? r.find(zn) : r.filter(zn)).toArray() + }).filter('[name!=""]:enabled:not(:submit, :button, :image, :reset, :file):matches([checked], :not(:checkbox, :radio))').map(function (t, n) { + var s = (n = e._make(n)).attr("name"), n = null != (n = n.val()) ? n : ""; + return Array.isArray(n) ? n.map(function (e) { + return {name: s, value: e.replace(Zn, "\r\n")} + }) : {name: s, value: n.replace(Zn, "\r\n")} + }).toArray() + } + }), er = function (e, t, n) { + if (this.length = 0, this.options = n, this._root = t, e) { + for (var r = 0; r < e.length; r++) this[r] = e[r]; + this.length = e.length + } + }, + tr = (er.prototype.cheerio = "[cheerio object]", er.prototype.splice = Array.prototype.splice, er.prototype[Symbol.iterator] = Array.prototype[Symbol.iterator], Object.assign(er.prototype, nt, Pn, Wn, Qn, Jn), function (e, t) { + return (tr = Object.setPrototypeOf || ({__proto__: []} instanceof Array ? function (e, t) { + e.__proto__ = t + } : function (e, t) { + for (var n in t) Object.prototype.hasOwnProperty.call(t, n) && (e[n] = t[n]) + }))(e, t) + }), nr = function (e, t) { + if ("function" != typeof t && null !== t) throw new TypeError("Class extends value " + String(t) + " is not a constructor or null"); + + function n() { + this.constructor = e + } + + tr(e, t), e.prototype = null === t ? Object.create(t) : (n.prototype = t.prototype, new n) + }, rr = function () { + return (rr = Object.assign || function (e) { + for (var t, n = 1, r = arguments.length; n < r; n++) for (var i in t = arguments[n]) Object.prototype.hasOwnProperty.call(t, i) && (e[i] = t[i]); + return e + }).apply(this, arguments) + }; +const ir = new Set([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, 1048574, 1048575, 1114110, 1114111]), + sr = "�", or = (function (e) { + e[e.EOF = -1] = "EOF", e[e.NULL = 0] = "NULL", e[e.TABULATION = 9] = "TABULATION", e[e.CARRIAGE_RETURN = 13] = "CARRIAGE_RETURN", e[e.LINE_FEED = 10] = "LINE_FEED", e[e.FORM_FEED = 12] = "FORM_FEED", e[e.SPACE = 32] = "SPACE", e[e.EXCLAMATION_MARK = 33] = "EXCLAMATION_MARK", e[e.QUOTATION_MARK = 34] = "QUOTATION_MARK", e[e.NUMBER_SIGN = 35] = "NUMBER_SIGN", e[e.AMPERSAND = 38] = "AMPERSAND", e[e.APOSTROPHE = 39] = "APOSTROPHE", e[e.HYPHEN_MINUS = 45] = "HYPHEN_MINUS", e[e.SOLIDUS = 47] = "SOLIDUS", e[e.DIGIT_0 = 48] = "DIGIT_0", e[e.DIGIT_9 = 57] = "DIGIT_9", e[e.SEMICOLON = 59] = "SEMICOLON", e[e.LESS_THAN_SIGN = 60] = "LESS_THAN_SIGN", e[e.EQUALS_SIGN = 61] = "EQUALS_SIGN", e[e.GREATER_THAN_SIGN = 62] = "GREATER_THAN_SIGN", e[e.QUESTION_MARK = 63] = "QUESTION_MARK", e[e.LATIN_CAPITAL_A = 65] = "LATIN_CAPITAL_A", e[e.LATIN_CAPITAL_F = 70] = "LATIN_CAPITAL_F", e[e.LATIN_CAPITAL_X = 88] = "LATIN_CAPITAL_X", e[e.LATIN_CAPITAL_Z = 90] = "LATIN_CAPITAL_Z", e[e.RIGHT_SQUARE_BRACKET = 93] = "RIGHT_SQUARE_BRACKET", e[e.GRAVE_ACCENT = 96] = "GRAVE_ACCENT", e[e.LATIN_SMALL_A = 97] = "LATIN_SMALL_A", e[e.LATIN_SMALL_F = 102] = "LATIN_SMALL_F", e[e.LATIN_SMALL_X = 120] = "LATIN_SMALL_X", e[e.LATIN_SMALL_Z = 122] = "LATIN_SMALL_Z", e[e.REPLACEMENT_CHARACTER = 65533] = "REPLACEMENT_CHARACTER" + }(ar = ar || {}), "--"), cr = "[CDATA[", ur = "doctype", lr = "script", hr = "public", fr = "system"; + +function pr(e) { + return 55296 <= e && e <= 57343 +} + +function dr(e) { + return 32 !== e && 10 !== e && 13 !== e && 9 !== e && 12 !== e && 1 <= e && e <= 31 || 127 <= e && e <= 159 +} + +function mr(e) { + return 64976 <= e && e <= 65007 || ir.has(e) +} + +!function (e) { + e.controlCharacterInInputStream = "control-character-in-input-stream", e.noncharacterInInputStream = "noncharacter-in-input-stream", e.surrogateInInputStream = "surrogate-in-input-stream", e.nonVoidHtmlElementStartTagWithTrailingSolidus = "non-void-html-element-start-tag-with-trailing-solidus", e.endTagWithAttributes = "end-tag-with-attributes", e.endTagWithTrailingSolidus = "end-tag-with-trailing-solidus", e.unexpectedSolidusInTag = "unexpected-solidus-in-tag", e.unexpectedNullCharacter = "unexpected-null-character", e.unexpectedQuestionMarkInsteadOfTagName = "unexpected-question-mark-instead-of-tag-name", e.invalidFirstCharacterOfTagName = "invalid-first-character-of-tag-name", e.unexpectedEqualsSignBeforeAttributeName = "unexpected-equals-sign-before-attribute-name", e.missingEndTagName = "missing-end-tag-name", e.unexpectedCharacterInAttributeName = "unexpected-character-in-attribute-name", e.unknownNamedCharacterReference = "unknown-named-character-reference", e.missingSemicolonAfterCharacterReference = "missing-semicolon-after-character-reference", e.unexpectedCharacterAfterDoctypeSystemIdentifier = "unexpected-character-after-doctype-system-identifier", e.unexpectedCharacterInUnquotedAttributeValue = "unexpected-character-in-unquoted-attribute-value", e.eofBeforeTagName = "eof-before-tag-name", e.eofInTag = "eof-in-tag", e.missingAttributeValue = "missing-attribute-value", e.missingWhitespaceBetweenAttributes = "missing-whitespace-between-attributes", e.missingWhitespaceAfterDoctypePublicKeyword = "missing-whitespace-after-doctype-public-keyword", e.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers = "missing-whitespace-between-doctype-public-and-system-identifiers", e.missingWhitespaceAfterDoctypeSystemKeyword = "missing-whitespace-after-doctype-system-keyword", e.missingQuoteBeforeDoctypePublicIdentifier = "missing-quote-before-doctype-public-identifier", e.missingQuoteBeforeDoctypeSystemIdentifier = "missing-quote-before-doctype-system-identifier", e.missingDoctypePublicIdentifier = "missing-doctype-public-identifier", e.missingDoctypeSystemIdentifier = "missing-doctype-system-identifier", e.abruptDoctypePublicIdentifier = "abrupt-doctype-public-identifier", e.abruptDoctypeSystemIdentifier = "abrupt-doctype-system-identifier", e.cdataInHtmlContent = "cdata-in-html-content", e.incorrectlyOpenedComment = "incorrectly-opened-comment", e.eofInScriptHtmlCommentLikeText = "eof-in-script-html-comment-like-text", e.eofInDoctype = "eof-in-doctype", e.nestedComment = "nested-comment", e.abruptClosingOfEmptyComment = "abrupt-closing-of-empty-comment", e.eofInComment = "eof-in-comment", e.incorrectlyClosedComment = "incorrectly-closed-comment", e.eofInCdata = "eof-in-cdata", e.absenceOfDigitsInNumericCharacterReference = "absence-of-digits-in-numeric-character-reference", e.nullCharacterReference = "null-character-reference", e.surrogateCharacterReference = "surrogate-character-reference", e.characterReferenceOutsideUnicodeRange = "character-reference-outside-unicode-range", e.controlCharacterReference = "control-character-reference", e.noncharacterCharacterReference = "noncharacter-character-reference", e.missingWhitespaceBeforeDoctypeName = "missing-whitespace-before-doctype-name", e.missingDoctypeName = "missing-doctype-name", e.invalidCharacterSequenceAfterDoctypeName = "invalid-character-sequence-after-doctype-name", e.duplicateAttribute = "duplicate-attribute", e.nonConformingDoctype = "non-conforming-doctype", e.missingDoctype = "missing-doctype", e.misplacedDoctype = "misplaced-doctype", e.endTagWithoutMatchingOpenElement = "end-tag-without-matching-open-element", e.closingOfElementWithOpenChildElements = "closing-of-element-with-open-child-elements", e.disallowedContentInNoscriptInHead = "disallowed-content-in-noscript-in-head", e.openElementsLeftAfterEof = "open-elements-left-after-eof", e.abandonedHeadElementChild = "abandoned-head-element-child", e.misplacedStartTagForHeadElement = "misplaced-start-tag-for-head-element", e.nestedNoscriptInHead = "nested-noscript-in-head", e.eofInElementThatCanContainOnlyText = "eof-in-element-that-can-contain-only-text" +}(_r = _r || {}); + +class Er { + constructor(e) { + this.handler = e, this.html = "", this.pos = -1, this.lastGapPos = -2, this.gapStack = [], this.skipNextNewLine = !1, this.lastChunkWritten = !1, this.endOfChunkHit = !1, this.bufferWaterline = 65536, this.isEol = !1, this.lineStartPos = 0, this.droppedBufferSize = 0, this.line = 1, this.lastErrOffset = -1 + } + + get col() { + return this.pos - this.lineStartPos + Number(this.lastGapPos !== this.pos) + } + + get offset() { + return this.droppedBufferSize + this.pos + } + + getError(e) { + var {line: t, col: n, offset: r} = this; + return {code: e, startLine: t, endLine: t, startCol: n, endCol: n, startOffset: r, endOffset: r} + } + + _err(e) { + this.handler.onParseError && this.lastErrOffset !== this.offset && (this.lastErrOffset = this.offset, this.handler.onParseError(this.getError(e))) + } + + _addGap() { + this.gapStack.push(this.lastGapPos), this.lastGapPos = this.pos + } + + _processSurrogate(e) { + if (this.pos !== this.html.length - 1) { + var t = this.html.charCodeAt(this.pos + 1); + if (56320 <= t && t <= 57343) return this.pos++, this._addGap(), 1024 * (e - 55296) + 9216 + t + } else if (!this.lastChunkWritten) return this.endOfChunkHit = !0, ar.EOF; + return this._err(_r.surrogateInInputStream), e + } + + willDropParsedChunk() { + return this.pos > this.bufferWaterline + } + + dropParsedChunk() { + this.willDropParsedChunk() && (this.html = this.html.substring(this.pos), this.lineStartPos -= this.pos, this.droppedBufferSize += this.pos, this.pos = 0, this.lastGapPos = -2, this.gapStack.length = 0) + } + + write(e, t) { + 0 < this.html.length ? this.html += e : this.html = e, this.endOfChunkHit = !1, this.lastChunkWritten = t + } + + insertHtmlAtCurrentPos(e) { + this.html = this.html.substring(0, this.pos + 1) + e + this.html.substring(this.pos + 1), this.endOfChunkHit = !1 + } + + startsWith(e, t) { + if (this.pos + e.length > this.html.length) return this.endOfChunkHit = !this.lastChunkWritten, !1; + if (t) return this.html.startsWith(e, this.pos); + for (let t = 0; t < e.length; t++) if ((32 | this.html.charCodeAt(this.pos + t)) !== e.charCodeAt(t)) return !1; + return !0 + } + + peek(e) { + return (e = this.pos + e) >= this.html.length ? (this.endOfChunkHit = !this.lastChunkWritten, ar.EOF) : (e = this.html.charCodeAt(e)) === ar.CARRIAGE_RETURN ? ar.LINE_FEED : e + } + + advance() { + if (this.pos++, this.isEol && (this.isEol = !1, this.line++, this.lineStartPos = this.pos), this.pos >= this.html.length) return this.endOfChunkHit = !this.lastChunkWritten, ar.EOF; + let e = this.html.charCodeAt(this.pos); + return e === ar.CARRIAGE_RETURN ? (this.isEol = !0, this.skipNextNewLine = !0, ar.LINE_FEED) : e === ar.LINE_FEED && (this.isEol = !0, this.skipNextNewLine) ? (this.line--, this.skipNextNewLine = !1, this._addGap(), this.advance()) : (this.skipNextNewLine = !1, pr(e) && (e = this._processSurrogate(e)), null === this.handler.onParseError || 31 < e && e < 127 || e === ar.LINE_FEED || e === ar.CARRIAGE_RETURN || 159 < e && e < 64976 || this._checkForProblematicCharacters(e), e) + } + + _checkForProblematicCharacters(e) { + dr(e) ? this._err(_r.controlCharacterInInputStream) : mr(e) && this._err(_r.noncharacterInInputStream) + } + + retreat(e) { + for (this.pos -= e; this.pos < this.lastGapPos;) this.lastGapPos = this.gapStack.pop(), this.pos--; + this.isEol = !1 + } +} + +function Ar(e, t) { + for (let n = e.attrs.length - 1; 0 <= n; n--) if (e.attrs[n].name === t) return e.attrs[n].value; + return null +} + +!function (e) { + e[e.CHARACTER = 0] = "CHARACTER", e[e.NULL_CHARACTER = 1] = "NULL_CHARACTER", e[e.WHITESPACE_CHARACTER = 2] = "WHITESPACE_CHARACTER", e[e.START_TAG = 3] = "START_TAG", e[e.END_TAG = 4] = "END_TAG", e[e.COMMENT = 5] = "COMMENT", e[e.DOCTYPE = 6] = "DOCTYPE", e[e.EOF = 7] = "EOF", e[e.HIBERNATION = 8] = "HIBERNATION" +}(Tr = Tr || {}); +var gr = "undefined" != typeof globalThis ? globalThis : "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : {}; + +function vr() { + throw new Error("Dynamic requires are not currently supported by rollup-plugin-commonjs") +} + +function yr(e) { + return e && e.__esModule && Object.prototype.hasOwnProperty.call(e, "default") ? e.default : e +} + +function Sr(e, t) { + return e(t = {exports: {}}, t.exports), t.exports +} + +var Cr = Sr(function (e, t) { + Object.defineProperty(t, "__esModule", {value: !0}), t.default = new Uint16Array('ᵁ<Õıʊҝջאٵ۞ޢߖࠏ੊ઑඡ๭༉༦჊ረዡᐕᒝᓃᓟᔥ\0\0\0\0\0\0ᕫᛍᦍᰒᷝ὾⁠↰⊍⏀⏻⑂⠤⤒ⴈ⹈⿎〖㊺㘹㞬㣾㨨㩱㫠㬮ࠀEMabcfglmnoprstu\\bfms„‹•˜¦³¹ÈÏlig耻Æ䃆P耻&䀦cute耻Á䃁reve;䄂Āiyx}rc耻Â䃂;䐐r;쀀𝔄rave耻À䃀pha;䎑acr;䄀d;橓Āgp¡on;䄄f;쀀𝔸plyFunction;恡ing耻Å䃅Ācs¾Ãr;쀀𝒜ign;扔ilde耻Ã䃃ml耻Ä䃄ЀaceforsuåûþėĜĢħĪĀcrêòkslash;或Ŷöø;櫧ed;挆y;䐑ƀcrtąċĔause;戵noullis;愬a;䎒r;쀀𝔅pf;쀀𝔹eve;䋘còēmpeq;扎܀HOacdefhilorsuōőŖƀƞƢƵƷƺǜȕɳɸɾcy;䐧PY耻©䂩ƀcpyŝŢźute;䄆Ā;iŧŨ拒talDifferentialD;慅leys;愭ȀaeioƉƎƔƘron;䄌dil耻Ç䃇rc;䄈nint;戰ot;䄊ĀdnƧƭilla;䂸terDot;䂷òſi;䎧rcleȀDMPTLJNjǑǖot;抙inus;抖lus;投imes;抗oĀcsǢǸkwiseContourIntegral;戲eCurlyĀDQȃȏoubleQuote;思uote;怙ȀlnpuȞȨɇɕonĀ;eȥȦ户;橴ƀgitȯȶȺruent;扡nt;戯ourIntegral;戮ĀfrɌɎ;愂oduct;成nterClockwiseContourIntegral;戳oss;樯cr;쀀𝒞pĀ;Cʄʅ拓ap;才րDJSZacefiosʠʬʰʴʸˋ˗ˡ˦̳ҍĀ;oŹʥtrahd;椑cy;䐂cy;䐅cy;䐏ƀgrsʿ˄ˇger;怡r;憡hv;櫤Āayː˕ron;䄎;䐔lĀ;t˝˞戇a;䎔r;쀀𝔇Āaf˫̧Ācm˰̢riticalȀADGT̖̜̀̆cute;䂴oŴ̋̍;䋙bleAcute;䋝rave;䁠ilde;䋜ond;拄ferentialD;慆Ѱ̽\0\0\0͔͂\0Ѕf;쀀𝔻ƀ;DE͈͉͍䂨ot;惜qual;扐blèCDLRUVͣͲ΂ϏϢϸontourIntegraìȹoɴ͹\0\0ͻ»͉nArrow;懓Āeo·ΤftƀARTΐΖΡrrow;懐ightArrow;懔eåˊngĀLRΫτeftĀARγιrrow;柸ightArrow;柺ightArrow;柹ightĀATϘϞrrow;懒ee;抨pɁϩ\0\0ϯrrow;懑ownArrow;懕erticalBar;戥ǹABLRTaВЪаўѿͼrrowƀ;BUНОТ憓ar;椓pArrow;懵reve;䌑eft˒к\0ц\0ѐightVector;楐eeVector;楞ectorĀ;Bљњ憽ar;楖ightǔѧ\0ѱeeVector;楟ectorĀ;BѺѻ懁ar;楗eeĀ;A҆҇护rrow;憧ĀctҒҗr;쀀𝒟rok;䄐ࠀNTacdfglmopqstuxҽӀӄӋӞӢӧӮӵԡԯԶՒ՝ՠեG;䅊H耻Ð䃐cute耻É䃉ƀaiyӒӗӜron;䄚rc耻Ê䃊;䐭ot;䄖r;쀀𝔈rave耻È䃈ement;戈ĀapӺӾcr;䄒tyɓԆ\0\0ԒmallSquare;旻erySmallSquare;斫ĀgpԦԪon;䄘f;쀀𝔼silon;䎕uĀaiԼՉlĀ;TՂՃ橵ilde;扂librium;懌Āci՗՚r;愰m;橳a;䎗ml耻Ë䃋Āipժկsts;戃onentialE;慇ʀcfiosօֈ֍ֲ׌y;䐤r;쀀𝔉lledɓ֗\0\0֣mallSquare;旼erySmallSquare;斪Ͱֺ\0ֿ\0\0ׄf;쀀𝔽All;戀riertrf;愱cò׋؀JTabcdfgorstר׬ׯ׺؀ؒؖ؛؝أ٬ٲcy;䐃耻>䀾mmaĀ;d׷׸䎓;䏜reve;䄞ƀeiy؇،ؐdil;䄢rc;䄜;䐓ot;䄠r;쀀𝔊;拙pf;쀀𝔾eater̀EFGLSTصلَٖٛ٦qualĀ;Lؾؿ扥ess;招ullEqual;执reater;檢ess;扷lantEqual;橾ilde;扳cr;쀀𝒢;扫ЀAacfiosuڅڋږڛڞڪھۊRDcy;䐪Āctڐڔek;䋇;䁞irc;䄤r;愌lbertSpace;愋ǰگ\0ڲf;愍izontalLine;攀Āctۃۅòکrok;䄦mpńېۘownHumðįqual;扏܀EJOacdfgmnostuۺ۾܃܇܎ܚܞܡܨ݄ݸދޏޕcy;䐕lig;䄲cy;䐁cute耻Í䃍Āiyܓܘrc耻Î䃎;䐘ot;䄰r;愑rave耻Ì䃌ƀ;apܠܯܿĀcgܴܷr;䄪inaryI;慈lieóϝǴ݉\0ݢĀ;eݍݎ戬Āgrݓݘral;戫section;拂isibleĀCTݬݲomma;恣imes;恢ƀgptݿރވon;䄮f;쀀𝕀a;䎙cr;愐ilde;䄨ǫޚ\0ޞcy;䐆l耻Ï䃏ʀcfosuެ޷޼߂ߐĀiyޱ޵rc;䄴;䐙r;쀀𝔍pf;쀀𝕁ǣ߇\0ߌr;쀀𝒥rcy;䐈kcy;䐄΀HJacfosߤߨ߽߬߱ࠂࠈcy;䐥cy;䐌ppa;䎚Āey߶߻dil;䄶;䐚r;쀀𝔎pf;쀀𝕂cr;쀀𝒦րJTaceflmostࠥࠩࠬࡐࡣ঳সে্਷ੇcy;䐉耻<䀼ʀcmnpr࠷࠼ࡁࡄࡍute;䄹bda;䎛g;柪lacetrf;愒r;憞ƀaeyࡗ࡜ࡡron;䄽dil;䄻;䐛Āfsࡨ॰tԀACDFRTUVarࡾࢩࢱࣦ࣠ࣼयज़ΐ४Ānrࢃ࢏gleBracket;柨rowƀ;BR࢙࢚࢞憐ar;懤ightArrow;懆eiling;挈oǵࢷ\0ࣃbleBracket;柦nǔࣈ\0࣒eeVector;楡ectorĀ;Bࣛࣜ懃ar;楙loor;挊ightĀAV࣯ࣵrrow;憔ector;楎Āerँगeƀ;AVउऊऐ抣rrow;憤ector;楚iangleƀ;BEतथऩ抲ar;槏qual;抴pƀDTVषूौownVector;楑eeVector;楠ectorĀ;Bॖॗ憿ar;楘ectorĀ;B॥०憼ar;楒ightáΜs̀EFGLSTॾঋকঝঢভqualGreater;拚ullEqual;扦reater;扶ess;檡lantEqual;橽ilde;扲r;쀀𝔏Ā;eঽা拘ftarrow;懚idot;䄿ƀnpw৔ਖਛgȀLRlr৞৷ਂਐeftĀAR০৬rrow;柵ightArrow;柷ightArrow;柶eftĀarγਊightáοightáϊf;쀀𝕃erĀLRਢਬeftArrow;憙ightArrow;憘ƀchtਾੀੂòࡌ;憰rok;䅁;扪Ѐacefiosuਗ਼੝੠੷੼અઋ઎p;椅y;䐜Ādl੥੯iumSpace;恟lintrf;愳r;쀀𝔐nusPlus;戓pf;쀀𝕄cò੶;䎜ҀJacefostuણધભીଔଙඑ඗ඞcy;䐊cute;䅃ƀaey઴હાron;䅇dil;䅅;䐝ƀgswે૰଎ativeƀMTV૓૟૨ediumSpace;怋hiĀcn૦૘ë૙eryThiî૙tedĀGL૸ଆreaterGreateòٳessLesóੈLine;䀊r;쀀𝔑ȀBnptଢନଷ଺reak;恠BreakingSpace;䂠f;愕ڀ;CDEGHLNPRSTV୕ୖ୪୼஡௫ఄ౞಄ದ೘ൡඅ櫬Āou୛୤ngruent;扢pCap;扭oubleVerticalBar;戦ƀlqxஃஊ஛ement;戉ualĀ;Tஒஓ扠ilde;쀀≂̸ists;戄reater΀;EFGLSTஶஷ஽௉௓௘௥扯qual;扱ullEqual;쀀≧̸reater;쀀≫̸ess;批lantEqual;쀀⩾̸ilde;扵umpń௲௽ownHump;쀀≎̸qual;쀀≏̸eĀfsఊధtTriangleƀ;BEచఛడ拪ar;쀀⧏̸qual;括s̀;EGLSTవశ఼ౄోౘ扮qual;扰reater;扸ess;쀀≪̸lantEqual;쀀⩽̸ilde;扴estedĀGL౨౹reaterGreater;쀀⪢̸essLess;쀀⪡̸recedesƀ;ESಒಓಛ技qual;쀀⪯̸lantEqual;拠ĀeiಫಹverseElement;戌ghtTriangleƀ;BEೋೌ೒拫ar;쀀⧐̸qual;拭ĀquೝഌuareSuĀbp೨೹setĀ;E೰ೳ쀀⊏̸qual;拢ersetĀ;Eഃആ쀀⊐̸qual;拣ƀbcpഓതൎsetĀ;Eഛഞ쀀⊂⃒qual;抈ceedsȀ;ESTലള഻െ抁qual;쀀⪰̸lantEqual;拡ilde;쀀≿̸ersetĀ;E൘൛쀀⊃⃒qual;抉ildeȀ;EFT൮൯൵ൿ扁qual;扄ullEqual;扇ilde;扉erticalBar;戤cr;쀀𝒩ilde耻Ñ䃑;䎝܀Eacdfgmoprstuvලෂ෉෕ෛ෠෧෼ขภยา฿ไlig;䅒cute耻Ó䃓Āiy෎ීrc耻Ô䃔;䐞blac;䅐r;쀀𝔒rave耻Ò䃒ƀaei෮ෲ෶cr;䅌ga;䎩cron;䎟pf;쀀𝕆enCurlyĀDQฎบoubleQuote;怜uote;怘;橔Āclวฬr;쀀𝒪ash耻Ø䃘iŬื฼de耻Õ䃕es;樷ml耻Ö䃖erĀBP๋๠Āar๐๓r;怾acĀek๚๜;揞et;掴arenthesis;揜Ҁacfhilors๿ງຊຏຒດຝະ໼rtialD;戂y;䐟r;쀀𝔓i;䎦;䎠usMinus;䂱Āipຢອncareplanåڝf;愙Ȁ;eio຺ູ໠໤檻cedesȀ;EST່້໏໚扺qual;檯lantEqual;扼ilde;找me;怳Ādp໩໮uct;戏ortionĀ;aȥ໹l;戝Āci༁༆r;쀀𝒫;䎨ȀUfos༑༖༛༟OT耻"䀢r;쀀𝔔pf;愚cr;쀀𝒬؀BEacefhiorsu༾གྷཇའཱིྦྷྪྭ႖ႩႴႾarr;椐G耻®䂮ƀcnrཎནབute;䅔g;柫rĀ;tཛྷཝ憠l;椖ƀaeyཧཬཱron;䅘dil;䅖;䐠Ā;vླྀཹ愜erseĀEUྂྙĀlq྇ྎement;戋uilibrium;懋pEquilibrium;楯r»ཹo;䎡ghtЀACDFTUVa࿁࿫࿳ဢဨၛႇϘĀnr࿆࿒gleBracket;柩rowƀ;BL࿜࿝࿡憒ar;懥eftArrow;懄eiling;按oǵ࿹\0စbleBracket;柧nǔည\0နeeVector;楝ectorĀ;Bဝသ懂ar;楕loor;挋Āerိ၃eƀ;AVဵံြ抢rrow;憦ector;楛iangleƀ;BEၐၑၕ抳ar;槐qual;抵pƀDTVၣၮၸownVector;楏eeVector;楜ectorĀ;Bႂႃ憾ar;楔ectorĀ;B႑႒懀ar;楓Āpuႛ႞f;愝ndImplies;楰ightarrow;懛ĀchႹႼr;愛;憱leDelayed;槴ڀHOacfhimoqstuფჱჷჽᄙᄞᅑᅖᅡᅧᆵᆻᆿĀCcჩხHcy;䐩y;䐨FTcy;䐬cute;䅚ʀ;aeiyᄈᄉᄎᄓᄗ檼ron;䅠dil;䅞rc;䅜;䐡r;쀀𝔖ortȀDLRUᄪᄴᄾᅉownArrow»ОeftArrow»࢚ightArrow»࿝pArrow;憑gma;䎣allCircle;战pf;쀀𝕊ɲᅭ\0\0ᅰt;戚areȀ;ISUᅻᅼᆉᆯ斡ntersection;抓uĀbpᆏᆞsetĀ;Eᆗᆘ抏qual;抑ersetĀ;Eᆨᆩ抐qual;抒nion;抔cr;쀀𝒮ar;拆ȀbcmpᇈᇛሉላĀ;sᇍᇎ拐etĀ;Eᇍᇕqual;抆ĀchᇠህeedsȀ;ESTᇭᇮᇴᇿ扻qual;檰lantEqual;扽ilde;承Tháྌ;我ƀ;esሒሓሣ拑rsetĀ;Eሜም抃qual;抇et»ሓրHRSacfhiorsሾቄ቉ቕ቞ቱቶኟዂወዑORN耻Þ䃞ADE;愢ĀHc቎ቒcy;䐋y;䐦Ābuቚቜ;䀉;䎤ƀaeyብቪቯron;䅤dil;䅢;䐢r;쀀𝔗Āeiቻ኉Dzኀ\0ኇefore;戴a;䎘Ācn኎ኘkSpace;쀀  Space;怉ldeȀ;EFTካኬኲኼ戼qual;扃ullEqual;扅ilde;扈pf;쀀𝕋ipleDot;惛Āctዖዛr;쀀𝒯rok;䅦ૡዷጎጚጦ\0ጬጱ\0\0\0\0\0ጸጽ፷ᎅ\0᏿ᐄᐊᐐĀcrዻጁute耻Ú䃚rĀ;oጇገ憟cir;楉rǣጓ\0጖y;䐎ve;䅬Āiyጞጣrc耻Û䃛;䐣blac;䅰r;쀀𝔘rave耻Ù䃙acr;䅪Ādiፁ፩erĀBPፈ፝Āarፍፐr;䁟acĀekፗፙ;揟et;掵arenthesis;揝onĀ;P፰፱拃lus;抎Āgp፻፿on;䅲f;쀀𝕌ЀADETadps᎕ᎮᎸᏄϨᏒᏗᏳrrowƀ;BDᅐᎠᎤar;椒ownArrow;懅ownArrow;憕quilibrium;楮eeĀ;AᏋᏌ报rrow;憥ownáϳerĀLRᏞᏨeftArrow;憖ightArrow;憗iĀ;lᏹᏺ䏒on;䎥ing;䅮cr;쀀𝒰ilde;䅨ml耻Ü䃜ҀDbcdefosvᐧᐬᐰᐳᐾᒅᒊᒐᒖash;披ar;櫫y;䐒ashĀ;lᐻᐼ抩;櫦Āerᑃᑅ;拁ƀbtyᑌᑐᑺar;怖Ā;iᑏᑕcalȀBLSTᑡᑥᑪᑴar;戣ine;䁼eparator;杘ilde;所ThinSpace;怊r;쀀𝔙pf;쀀𝕍cr;쀀𝒱dash;抪ʀcefosᒧᒬᒱᒶᒼirc;䅴dge;拀r;쀀𝔚pf;쀀𝕎cr;쀀𝒲Ȁfiosᓋᓐᓒᓘr;쀀𝔛;䎞pf;쀀𝕏cr;쀀𝒳ҀAIUacfosuᓱᓵᓹᓽᔄᔏᔔᔚᔠcy;䐯cy;䐇cy;䐮cute耻Ý䃝Āiyᔉᔍrc;䅶;䐫r;쀀𝔜pf;쀀𝕐cr;쀀𝒴ml;䅸ЀHacdefosᔵᔹᔿᕋᕏᕝᕠᕤcy;䐖cute;䅹Āayᕄᕉron;䅽;䐗ot;䅻Dzᕔ\0ᕛoWidtè૙a;䎖r;愨pf;愤cr;쀀𝒵௡ᖃᖊᖐ\0ᖰᖶᖿ\0\0\0\0ᗆᗛᗫᙟ᙭\0ᚕ᚛ᚲᚹ\0ᚾcute耻á䃡reve;䄃̀;Ediuyᖜᖝᖡᖣᖨᖭ戾;쀀∾̳;房rc耻â䃢te肻´̆;䐰lig耻æ䃦Ā;r²ᖺ;쀀𝔞rave耻à䃠ĀepᗊᗖĀfpᗏᗔsym;愵èᗓha;䎱ĀapᗟcĀclᗤᗧr;䄁g;樿ɤᗰ\0\0ᘊʀ;adsvᗺᗻᗿᘁᘇ戧nd;橕;橜lope;橘;橚΀;elmrszᘘᘙᘛᘞᘿᙏᙙ戠;榤e»ᘙsdĀ;aᘥᘦ戡ѡᘰᘲᘴᘶᘸᘺᘼᘾ;榨;榩;榪;榫;榬;榭;榮;榯tĀ;vᙅᙆ戟bĀ;dᙌᙍ抾;榝Āptᙔᙗh;戢»¹arr;捼Āgpᙣᙧon;䄅f;쀀𝕒΀;Eaeiop዁ᙻᙽᚂᚄᚇᚊ;橰cir;橯;扊d;手s;䀧roxĀ;e዁ᚒñᚃing耻å䃥ƀctyᚡᚦᚨr;쀀𝒶;䀪mpĀ;e዁ᚯñʈilde耻ã䃣ml耻ä䃤Āciᛂᛈoninôɲnt;樑ࠀNabcdefiklnoprsu᛭ᛱᜰ᜼ᝃᝈ᝸᝽០៦ᠹᡐᜍ᤽᥈ᥰot;櫭Ācrᛶ᜞kȀcepsᜀᜅᜍᜓong;扌psilon;䏶rime;怵imĀ;e᜚᜛戽q;拍Ŷᜢᜦee;抽edĀ;gᜬᜭ挅e»ᜭrkĀ;t፜᜷brk;掶Āoyᜁᝁ;䐱quo;怞ʀcmprtᝓ᝛ᝡᝤᝨausĀ;eĊĉptyv;榰séᜌnoõēƀahwᝯ᝱ᝳ;䎲;愶een;扬r;쀀𝔟g΀costuvwឍឝឳេ៕៛៞ƀaiuបពរðݠrc;旯p»፱ƀdptឤឨឭot;樀lus;樁imes;樂ɱឹ\0\0ើcup;樆ar;昅riangleĀdu៍្own;施p;斳plus;樄eåᑄåᒭarow;植ƀako៭ᠦᠵĀcn៲ᠣkƀlst៺֫᠂ozenge;槫riangleȀ;dlr᠒᠓᠘᠝斴own;斾eft;旂ight;斸k;搣Ʊᠫ\0ᠳƲᠯ\0ᠱ;斒;斑4;斓ck;斈ĀeoᠾᡍĀ;qᡃᡆ쀀=⃥uiv;쀀≡⃥t;挐Ȁptwxᡙᡞᡧᡬf;쀀𝕓Ā;tᏋᡣom»Ꮜtie;拈؀DHUVbdhmptuvᢅᢖᢪᢻᣗᣛᣬ᣿ᤅᤊᤐᤡȀLRlrᢎᢐᢒᢔ;敗;敔;敖;敓ʀ;DUduᢡᢢᢤᢦᢨ敐;敦;敩;敤;敧ȀLRlrᢳᢵᢷᢹ;敝;敚;敜;教΀;HLRhlrᣊᣋᣍᣏᣑᣓᣕ救;敬;散;敠;敫;敢;敟ox;槉ȀLRlrᣤᣦᣨᣪ;敕;敒;攐;攌ʀ;DUduڽ᣷᣹᣻᣽;敥;敨;攬;攴inus;抟lus;択imes;抠ȀLRlrᤙᤛᤝ᤟;敛;敘;攘;攔΀;HLRhlrᤰᤱᤳᤵᤷ᤻᤹攂;敪;敡;敞;攼;攤;攜Āevģ᥂bar耻¦䂦Ȁceioᥑᥖᥚᥠr;쀀𝒷mi;恏mĀ;e᜚᜜lƀ;bhᥨᥩᥫ䁜;槅sub;柈Ŭᥴ᥾lĀ;e᥹᥺怢t»᥺pƀ;Eeįᦅᦇ;檮Ā;qۜۛೡᦧ\0᧨ᨑᨕᨲ\0ᨷᩐ\0\0᪴\0\0᫁\0\0ᬡᬮ᭍᭒\0᯽\0ᰌƀcpr᦭ᦲ᧝ute;䄇̀;abcdsᦿᧀᧄ᧊᧕᧙戩nd;橄rcup;橉Āau᧏᧒p;橋p;橇ot;橀;쀀∩︀Āeo᧢᧥t;恁îړȀaeiu᧰᧻ᨁᨅǰ᧵\0᧸s;橍on;䄍dil耻ç䃧rc;䄉psĀ;sᨌᨍ橌m;橐ot;䄋ƀdmnᨛᨠᨦil肻¸ƭptyv;榲t脀¢;eᨭᨮ䂢räƲr;쀀𝔠ƀceiᨽᩀᩍy;䑇ckĀ;mᩇᩈ朓ark»ᩈ;䏇r΀;Ecefms᩟᩠ᩢᩫ᪤᪪᪮旋;槃ƀ;elᩩᩪᩭ䋆q;扗eɡᩴ\0\0᪈rrowĀlr᩼᪁eft;憺ight;憻ʀRSacd᪒᪔᪖᪚᪟»ཇ;擈st;抛irc;抚ash;抝nint;樐id;櫯cir;槂ubsĀ;u᪻᪼晣it»᪼ˬ᫇᫔᫺\0ᬊonĀ;eᫍᫎ䀺Ā;qÇÆɭ᫙\0\0᫢aĀ;t᫞᫟䀬;䁀ƀ;fl᫨᫩᫫戁îᅠeĀmx᫱᫶ent»᫩eóɍǧ᫾\0ᬇĀ;dኻᬂot;橭nôɆƀfryᬐᬔᬗ;쀀𝕔oäɔ脀©;sŕᬝr;愗Āaoᬥᬩrr;憵ss;朗Ācuᬲᬷr;쀀𝒸Ābpᬼ᭄Ā;eᭁᭂ櫏;櫑Ā;eᭉᭊ櫐;櫒dot;拯΀delprvw᭠᭬᭷ᮂᮬᯔ᯹arrĀlr᭨᭪;椸;椵ɰ᭲\0\0᭵r;拞c;拟arrĀ;p᭿ᮀ憶;椽̀;bcdosᮏᮐᮖᮡᮥᮨ截rcap;橈Āauᮛᮞp;橆p;橊ot;抍r;橅;쀀∪︀Ȁalrv᮵ᮿᯞᯣrrĀ;mᮼᮽ憷;椼yƀevwᯇᯔᯘqɰᯎ\0\0ᯒreã᭳uã᭵ee;拎edge;拏en耻¤䂤earrowĀlrᯮ᯳eft»ᮀight»ᮽeäᯝĀciᰁᰇoninôǷnt;戱lcty;挭ঀAHabcdefhijlorstuwz᰸᰻᰿ᱝᱩᱵᲊᲞᲬᲷ᳻᳿ᴍᵻᶑᶫᶻ᷆᷍rò΁ar;楥Ȁglrs᱈ᱍ᱒᱔ger;怠eth;愸òᄳhĀ;vᱚᱛ怐»ऊūᱡᱧarow;椏aã̕Āayᱮᱳron;䄏;䐴ƀ;ao̲ᱼᲄĀgrʿᲁr;懊tseq;橷ƀglmᲑᲔᲘ耻°䂰ta;䎴ptyv;榱ĀirᲣᲨsht;楿;쀀𝔡arĀlrᲳᲵ»ࣜ»သʀaegsv᳂͸᳖᳜᳠mƀ;oș᳊᳔ndĀ;ș᳑uit;晦amma;䏝in;拲ƀ;io᳧᳨᳸䃷de脀÷;o᳧ᳰntimes;拇nø᳷cy;䑒cɯᴆ\0\0ᴊrn;挞op;挍ʀlptuwᴘᴝᴢᵉᵕlar;䀤f;쀀𝕕ʀ;emps̋ᴭᴷᴽᵂqĀ;d͒ᴳot;扑inus;戸lus;戔quare;抡blebarwedgåúnƀadhᄮᵝᵧownarrowóᲃarpoonĀlrᵲᵶefôᲴighôᲶŢᵿᶅkaro÷གɯᶊ\0\0ᶎrn;挟op;挌ƀcotᶘᶣᶦĀryᶝᶡ;쀀𝒹;䑕l;槶rok;䄑Ādrᶰᶴot;拱iĀ;fᶺ᠖斿Āah᷀᷃ròЩaòྦangle;榦Āci᷒ᷕy;䑟grarr;柿ऀDacdefglmnopqrstuxḁḉḙḸոḼṉṡṾấắẽỡἪἷὄ὎὚ĀDoḆᴴoôᲉĀcsḎḔute耻é䃩ter;橮ȀaioyḢḧḱḶron;䄛rĀ;cḭḮ扖耻ê䃪lon;払;䑍ot;䄗ĀDrṁṅot;扒;쀀𝔢ƀ;rsṐṑṗ檚ave耻è䃨Ā;dṜṝ檖ot;檘Ȁ;ilsṪṫṲṴ檙nters;揧;愓Ā;dṹṺ檕ot;檗ƀapsẅẉẗcr;䄓tyƀ;svẒẓẕ戅et»ẓpĀ1;ẝẤijạả;怄;怅怃ĀgsẪẬ;䅋p;怂ĀgpẴẸon;䄙f;쀀𝕖ƀalsỄỎỒrĀ;sỊị拕l;槣us;橱iƀ;lvỚớở䎵on»ớ;䏵ȀcsuvỪỳἋἣĀioữḱrc»Ḯɩỹ\0\0ỻíՈantĀglἂἆtr»ṝess»Ṻƀaeiἒ἖Ἒls;䀽st;扟vĀ;DȵἠD;橸parsl;槥ĀDaἯἳot;打rr;楱ƀcdiἾὁỸr;愯oô͒ĀahὉὋ;䎷耻ð䃰Āmrὓὗl耻ë䃫o;悬ƀcipὡὤὧl;䀡sôծĀeoὬὴctatioîՙnentialåչৡᾒ\0ᾞ\0ᾡᾧ\0\0ῆῌ\0ΐ\0ῦῪ \0 ⁚llingdotseñṄy;䑄male;晀ƀilrᾭᾳ῁lig;耀ffiɩᾹ\0\0᾽g;耀ffig;耀ffl;쀀𝔣lig;耀filig;쀀fjƀaltῙ῜ῡt;晭ig;耀flns;斱of;䆒ǰ΅\0ῳf;쀀𝕗ĀakֿῷĀ;vῼ´拔;櫙artint;樍Āao‌⁕Ācs‑⁒ႉ‸⁅⁈\0⁐β•‥‧‪‬\0‮耻½䂽;慓耻¼䂼;慕;慙;慛Ƴ‴\0‶;慔;慖ʴ‾⁁\0\0⁃耻¾䂾;慗;慜5;慘ƶ⁌\0⁎;慚;慝8;慞l;恄wn;挢cr;쀀𝒻ࢀEabcdefgijlnorstv₂₉₟₥₰₴⃰⃵⃺⃿℃ℒℸ̗ℾ⅒↞Ā;lٍ₇;檌ƀcmpₐₕ₝ute;䇵maĀ;dₜ᳚䎳;檆reve;䄟Āiy₪₮rc;䄝;䐳ot;䄡Ȁ;lqsؾق₽⃉ƀ;qsؾٌ⃄lanô٥Ȁ;cdl٥⃒⃥⃕c;檩otĀ;o⃜⃝檀Ā;l⃢⃣檂;檄Ā;e⃪⃭쀀⋛︀s;檔r;쀀𝔤Ā;gٳ؛mel;愷cy;䑓Ȁ;Eajٚℌℎℐ;檒;檥;檤ȀEaesℛℝ℩ℴ;扩pĀ;p℣ℤ檊rox»ℤĀ;q℮ℯ檈Ā;q℮ℛim;拧pf;쀀𝕘Āci⅃ⅆr;愊mƀ;el٫ⅎ⅐;檎;檐茀>;cdlqr׮ⅠⅪⅮⅳⅹĀciⅥⅧ;檧r;橺ot;拗Par;榕uest;橼ʀadelsↄⅪ←ٖ↛ǰ↉\0↎proø₞r;楸qĀlqؿ↖lesó₈ií٫Āen↣↭rtneqq;쀀≩︀Å↪ԀAabcefkosy⇄⇇⇱⇵⇺∘∝∯≨≽ròΠȀilmr⇐⇔⇗⇛rsðᒄf»․ilôکĀdr⇠⇤cy;䑊ƀ;cwࣴ⇫⇯ir;楈;憭ar;意irc;䄥ƀalr∁∎∓rtsĀ;u∉∊晥it»∊lip;怦con;抹r;쀀𝔥sĀew∣∩arow;椥arow;椦ʀamopr∺∾≃≞≣rr;懿tht;戻kĀlr≉≓eftarrow;憩ightarrow;憪f;쀀𝕙bar;怕ƀclt≯≴≸r;쀀𝒽asè⇴rok;䄧Ābp⊂⊇ull;恃hen»ᱛૡ⊣\0⊪\0⊸⋅⋎\0⋕⋳\0\0⋸⌢⍧⍢⍿\0⎆⎪⎴cute耻í䃭ƀ;iyݱ⊰⊵rc耻î䃮;䐸Ācx⊼⊿y;䐵cl耻¡䂡ĀfrΟ⋉;쀀𝔦rave耻ì䃬Ȁ;inoܾ⋝⋩⋮Āin⋢⋦nt;樌t;戭fin;槜ta;愩lig;䄳ƀaop⋾⌚⌝ƀcgt⌅⌈⌗r;䄫ƀelpܟ⌏⌓inåގarôܠh;䄱f;抷ed;䆵ʀ;cfotӴ⌬⌱⌽⍁are;愅inĀ;t⌸⌹戞ie;槝doô⌙ʀ;celpݗ⍌⍐⍛⍡al;抺Āgr⍕⍙eróᕣã⍍arhk;樗rod;樼Ȁcgpt⍯⍲⍶⍻y;䑑on;䄯f;쀀𝕚a;䎹uest耻¿䂿Āci⎊⎏r;쀀𝒾nʀ;EdsvӴ⎛⎝⎡ӳ;拹ot;拵Ā;v⎦⎧拴;拳Ā;iݷ⎮lde;䄩ǫ⎸\0⎼cy;䑖l耻ï䃯̀cfmosu⏌⏗⏜⏡⏧⏵Āiy⏑⏕rc;䄵;䐹r;쀀𝔧ath;䈷pf;쀀𝕛ǣ⏬\0⏱r;쀀𝒿rcy;䑘kcy;䑔Ѐacfghjos␋␖␢␧␭␱␵␻ppaĀ;v␓␔䎺;䏰Āey␛␠dil;䄷;䐺r;쀀𝔨reen;䄸cy;䑅cy;䑜pf;쀀𝕜cr;쀀𝓀஀ABEHabcdefghjlmnoprstuv⑰⒁⒆⒍⒑┎┽╚▀♎♞♥♹♽⚚⚲⛘❝❨➋⟀⠁⠒ƀart⑷⑺⑼rò৆òΕail;椛arr;椎Ā;gঔ⒋;檋ar;楢ॣ⒥\0⒪\0⒱\0\0\0\0\0⒵Ⓔ\0ⓆⓈⓍ\0⓹ute;䄺mptyv;榴raîࡌbda;䎻gƀ;dlࢎⓁⓃ;榑åࢎ;檅uo耻«䂫rЀ;bfhlpst࢙ⓞⓦⓩ⓫⓮⓱⓵Ā;f࢝ⓣs;椟s;椝ë≒p;憫l;椹im;楳l;憢ƀ;ae⓿─┄檫il;椙Ā;s┉┊檭;쀀⪭︀ƀabr┕┙┝rr;椌rk;杲Āak┢┬cĀek┨┪;䁻;䁛Āes┱┳;榋lĀdu┹┻;榏;榍Ȁaeuy╆╋╖╘ron;䄾Ādi═╔il;䄼ìࢰâ┩;䐻Ȁcqrs╣╦╭╽a;椶uoĀ;rนᝆĀdu╲╷har;楧shar;楋h;憲ʀ;fgqs▋▌উ◳◿扤tʀahlrt▘▤▷◂◨rrowĀ;t࢙□aé⓶arpoonĀdu▯▴own»њp»०eftarrows;懇ightƀahs◍◖◞rrowĀ;sࣴࢧarpoonó྘quigarro÷⇰hreetimes;拋ƀ;qs▋ও◺lanôবʀ;cdgsব☊☍☝☨c;檨otĀ;o☔☕橿Ā;r☚☛檁;檃Ā;e☢☥쀀⋚︀s;檓ʀadegs☳☹☽♉♋pproøⓆot;拖qĀgq♃♅ôউgtò⒌ôছiíলƀilr♕࣡♚sht;楼;쀀𝔩Ā;Eজ♣;檑š♩♶rĀdu▲♮Ā;l॥♳;楪lk;斄cy;䑙ʀ;achtੈ⚈⚋⚑⚖rò◁orneòᴈard;楫ri;旺Āio⚟⚤dot;䅀ustĀ;a⚬⚭掰che»⚭ȀEaes⚻⚽⛉⛔;扨pĀ;p⛃⛄檉rox»⛄Ā;q⛎⛏檇Ā;q⛎⚻im;拦Ѐabnoptwz⛩⛴⛷✚✯❁❇❐Ānr⛮⛱g;柬r;懽rëࣁgƀlmr⛿✍✔eftĀar০✇ightá৲apsto;柼ightá৽parrowĀlr✥✩efô⓭ight;憬ƀafl✶✹✽r;榅;쀀𝕝us;樭imes;樴š❋❏st;戗áፎƀ;ef❗❘᠀旊nge»❘arĀ;l❤❥䀨t;榓ʀachmt❳❶❼➅➇ròࢨorneòᶌarĀ;d྘➃;業;怎ri;抿̀achiqt➘➝ੀ➢➮➻quo;怹r;쀀𝓁mƀ;egল➪➬;檍;檏Ābu┪➳oĀ;rฟ➹;怚rok;䅂萀<;cdhilqrࠫ⟒☹⟜⟠⟥⟪⟰Āci⟗⟙;檦r;橹reå◲mes;拉arr;楶uest;橻ĀPi⟵⟹ar;榖ƀ;ef⠀भ᠛旃rĀdu⠇⠍shar;楊har;楦Āen⠗⠡rtneqq;쀀≨︀Å⠞܀Dacdefhilnopsu⡀⡅⢂⢎⢓⢠⢥⢨⣚⣢⣤ઃ⣳⤂Dot;戺Ȁclpr⡎⡒⡣⡽r耻¯䂯Āet⡗⡙;時Ā;e⡞⡟朠se»⡟Ā;sျ⡨toȀ;dluျ⡳⡷⡻owîҌefôएðᏑker;斮Āoy⢇⢌mma;権;䐼ash;怔asuredangle»ᘦr;쀀𝔪o;愧ƀcdn⢯⢴⣉ro耻µ䂵Ȁ;acdᑤ⢽⣀⣄sôᚧir;櫰ot肻·Ƶusƀ;bd⣒ᤃ⣓戒Ā;uᴼ⣘;横ţ⣞⣡p;櫛ò−ðઁĀdp⣩⣮els;抧f;쀀𝕞Āct⣸⣽r;쀀𝓂pos»ᖝƀ;lm⤉⤊⤍䎼timap;抸ఀGLRVabcdefghijlmoprstuvw⥂⥓⥾⦉⦘⧚⧩⨕⨚⩘⩝⪃⪕⪤⪨⬄⬇⭄⭿⮮ⰴⱧⱼ⳩Āgt⥇⥋;쀀⋙̸Ā;v⥐௏쀀≫⃒ƀelt⥚⥲⥶ftĀar⥡⥧rrow;懍ightarrow;懎;쀀⋘̸Ā;v⥻ే쀀≪⃒ightarrow;懏ĀDd⦎⦓ash;抯ash;抮ʀbcnpt⦣⦧⦬⦱⧌la»˞ute;䅄g;쀀∠⃒ʀ;Eiop඄⦼⧀⧅⧈;쀀⩰̸d;쀀≋̸s;䅉roø඄urĀ;a⧓⧔普lĀ;s⧓ସdz⧟\0⧣p肻 ଷmpĀ;e௹ఀʀaeouy⧴⧾⨃⨐⨓ǰ⧹\0⧻;橃on;䅈dil;䅆ngĀ;dൾ⨊ot;쀀⩭̸p;橂;䐽ash;怓΀;Aadqsxஒ⨩⨭⨻⩁⩅⩐rr;懗rĀhr⨳⨶k;椤Ā;oᏲᏰot;쀀≐̸uiöୣĀei⩊⩎ar;椨í஘istĀ;s஠டr;쀀𝔫ȀEest௅⩦⩹⩼ƀ;qs஼⩭௡ƀ;qs஼௅⩴lanô௢ií௪Ā;rஶ⪁»ஷƀAap⪊⪍⪑rò⥱rr;憮ar;櫲ƀ;svྍ⪜ྌĀ;d⪡⪢拼;拺cy;䑚΀AEadest⪷⪺⪾⫂⫅⫶⫹rò⥦;쀀≦̸rr;憚r;急Ȁ;fqs఻⫎⫣⫯tĀar⫔⫙rro÷⫁ightarro÷⪐ƀ;qs఻⪺⫪lanôౕĀ;sౕ⫴»శiíౝĀ;rవ⫾iĀ;eచథiäඐĀpt⬌⬑f;쀀𝕟膀¬;in⬙⬚⬶䂬nȀ;Edvஉ⬤⬨⬮;쀀⋹̸ot;쀀⋵̸ǡஉ⬳⬵;拷;拶iĀ;vಸ⬼ǡಸ⭁⭃;拾;拽ƀaor⭋⭣⭩rȀ;ast୻⭕⭚⭟lleì୻l;쀀⫽⃥;쀀∂̸lint;樔ƀ;ceಒ⭰⭳uåಥĀ;cಘ⭸Ā;eಒ⭽ñಘȀAait⮈⮋⮝⮧rò⦈rrƀ;cw⮔⮕⮙憛;쀀⤳̸;쀀↝̸ghtarrow»⮕riĀ;eೋೖ΀chimpqu⮽⯍⯙⬄୸⯤⯯Ȁ;cerല⯆ഷ⯉uå൅;쀀𝓃ortɭ⬅\0\0⯖ará⭖mĀ;e൮⯟Ā;q൴൳suĀbp⯫⯭å೸åഋƀbcp⯶ⰑⰙȀ;Ees⯿ⰀഢⰄ抄;쀀⫅̸etĀ;eഛⰋqĀ;qണⰀcĀ;eലⰗñസȀ;EesⰢⰣൟⰧ抅;쀀⫆̸etĀ;e൘ⰮqĀ;qൠⰣȀgilrⰽⰿⱅⱇìௗlde耻ñ䃱çృiangleĀlrⱒⱜeftĀ;eచⱚñదightĀ;eೋⱥñ೗Ā;mⱬⱭ䎽ƀ;esⱴⱵⱹ䀣ro;愖p;怇ҀDHadgilrsⲏⲔⲙⲞⲣⲰⲶⳓⳣash;抭arr;椄p;쀀≍⃒ash;抬ĀetⲨⲬ;쀀≥⃒;쀀>⃒nfin;槞ƀAetⲽⳁⳅrr;椂;쀀≤⃒Ā;rⳊⳍ쀀<⃒ie;쀀⊴⃒ĀAtⳘⳜrr;椃rie;쀀⊵⃒im;쀀∼⃒ƀAan⳰⳴ⴂrr;懖rĀhr⳺⳽k;椣Ā;oᏧᏥear;椧ቓ᪕\0\0\0\0\0\0\0\0\0\0\0\0\0ⴭ\0ⴸⵈⵠⵥ⵲ⶄᬇ\0\0ⶍⶫ\0ⷈⷎ\0ⷜ⸙⸫⸾⹃Ācsⴱ᪗ute耻ó䃳ĀiyⴼⵅrĀ;c᪞ⵂ耻ô䃴;䐾ʀabios᪠ⵒⵗLjⵚlac;䅑v;樸old;榼lig;䅓Ācr⵩⵭ir;榿;쀀𝔬ͯ⵹\0\0⵼\0ⶂn;䋛ave耻ò䃲;槁Ābmⶈ෴ar;榵Ȁacitⶕ⶘ⶥⶨrò᪀Āir⶝ⶠr;榾oss;榻nå๒;槀ƀaeiⶱⶵⶹcr;䅍ga;䏉ƀcdnⷀⷅǍron;䎿;榶pf;쀀𝕠ƀaelⷔ⷗ǒr;榷rp;榹΀;adiosvⷪⷫⷮ⸈⸍⸐⸖戨rò᪆Ȁ;efmⷷⷸ⸂⸅橝rĀ;oⷾⷿ愴f»ⷿ耻ª䂪耻º䂺gof;抶r;橖lope;橗;橛ƀclo⸟⸡⸧ò⸁ash耻ø䃸l;折iŬⸯ⸴de耻õ䃵esĀ;aǛ⸺s;樶ml耻ö䃶bar;挽ૡ⹞\0⹽\0⺀⺝\0⺢⺹\0\0⻋ຜ\0⼓\0\0⼫⾼\0⿈rȀ;astЃ⹧⹲຅脀¶;l⹭⹮䂶leìЃɩ⹸\0\0⹻m;櫳;櫽y;䐿rʀcimpt⺋⺏⺓ᡥ⺗nt;䀥od;䀮il;怰enk;怱r;쀀𝔭ƀimo⺨⺰⺴Ā;v⺭⺮䏆;䏕maô੶ne;明ƀ;tv⺿⻀⻈䏀chfork»´;䏖Āau⻏⻟nĀck⻕⻝kĀ;h⇴⻛;愎ö⇴sҀ;abcdemst⻳⻴ᤈ⻹⻽⼄⼆⼊⼎䀫cir;樣ir;樢Āouᵀ⼂;樥;橲n肻±ຝim;樦wo;樧ƀipu⼙⼠⼥ntint;樕f;쀀𝕡nd耻£䂣Ԁ;Eaceinosu່⼿⽁⽄⽇⾁⾉⾒⽾⾶;檳p;檷uå໙Ā;c໎⽌̀;acens່⽙⽟⽦⽨⽾pproø⽃urlyeñ໙ñ໎ƀaes⽯⽶⽺pprox;檹qq;檵im;拨iíໟmeĀ;s⾈ຮ怲ƀEas⽸⾐⽺ð⽵ƀdfp໬⾙⾯ƀals⾠⾥⾪lar;挮ine;挒urf;挓Ā;t໻⾴ï໻rel;抰Āci⿀⿅r;쀀𝓅;䏈ncsp;怈̀fiopsu⿚⋢⿟⿥⿫⿱r;쀀𝔮pf;쀀𝕢rime;恗cr;쀀𝓆ƀaeo⿸〉〓tĀei⿾々rnionóڰnt;樖stĀ;e【】䀿ñἙô༔઀ABHabcdefhilmnoprstux぀けさすムㄎㄫㅇㅢㅲㆎ㈆㈕㈤㈩㉘㉮㉲㊐㊰㊷ƀartぇおがròႳòϝail;検aròᱥar;楤΀cdenqrtとふへみわゔヌĀeuねぱ;쀀∽̱te;䅕iãᅮmptyv;榳gȀ;del࿑らるろ;榒;榥å࿑uo耻»䂻rր;abcfhlpstw࿜ガクシスゼゾダッデナp;極Ā;f࿠ゴs;椠;椳s;椞ë≝ð✮l;楅im;楴l;憣;憝Āaiパフil;椚oĀ;nホボ戶aló༞ƀabrョリヮrò៥rk;杳ĀakンヽcĀekヹ・;䁽;䁝Āes㄂㄄;榌lĀduㄊㄌ;榎;榐Ȁaeuyㄗㄜㄧㄩron;䅙Ādiㄡㄥil;䅗ì࿲âヺ;䑀Ȁclqsㄴㄷㄽㅄa;椷dhar;楩uoĀ;rȎȍh;憳ƀacgㅎㅟངlȀ;ipsླྀㅘㅛႜnåႻarôྩt;断ƀilrㅩဣㅮsht;楽;쀀𝔯ĀaoㅷㆆrĀduㅽㅿ»ѻĀ;l႑ㆄ;楬Ā;vㆋㆌ䏁;䏱ƀgns㆕ㇹㇼht̀ahlrstㆤㆰ㇂㇘㇤㇮rrowĀ;t࿜ㆭaéトarpoonĀduㆻㆿowîㅾp»႒eftĀah㇊㇐rrowó࿪arpoonóՑightarrows;應quigarro÷ニhreetimes;拌g;䋚ingdotseñἲƀahm㈍㈐㈓rò࿪aòՑ;怏oustĀ;a㈞㈟掱che»㈟mid;櫮Ȁabpt㈲㈽㉀㉒Ānr㈷㈺g;柭r;懾rëဃƀafl㉇㉊㉎r;榆;쀀𝕣us;樮imes;樵Āap㉝㉧rĀ;g㉣㉤䀩t;榔olint;樒arò㇣Ȁachq㉻㊀Ⴜ㊅quo;怺r;쀀𝓇Ābu・㊊oĀ;rȔȓƀhir㊗㊛㊠reåㇸmes;拊iȀ;efl㊪ၙᠡ㊫方tri;槎luhar;楨;愞ൡ㋕㋛㋟㌬㌸㍱\0㍺㎤\0\0㏬㏰\0㐨㑈㑚㒭㒱㓊㓱\0㘖\0\0㘳cute;䅛quï➺Ԁ;Eaceinpsyᇭ㋳㋵㋿㌂㌋㌏㌟㌦㌩;檴ǰ㋺\0㋼;檸on;䅡uåᇾĀ;dᇳ㌇il;䅟rc;䅝ƀEas㌖㌘㌛;檶p;檺im;择olint;樓iíሄ;䑁otƀ;be㌴ᵇ㌵担;橦΀Aacmstx㍆㍊㍗㍛㍞㍣㍭rr;懘rĀhr㍐㍒ë∨Ā;oਸ਼਴t耻§䂧i;䀻war;椩mĀin㍩ðnuóñt;朶rĀ;o㍶⁕쀀𝔰Ȁacoy㎂㎆㎑㎠rp;景Āhy㎋㎏cy;䑉;䑈rtɭ㎙\0\0㎜iäᑤaraì⹯耻­䂭Āgm㎨㎴maƀ;fv㎱㎲㎲䏃;䏂Ѐ;deglnprካ㏅㏉㏎㏖㏞㏡㏦ot;橪Ā;q኱ኰĀ;E㏓㏔檞;檠Ā;E㏛㏜檝;檟e;扆lus;樤arr;楲aròᄽȀaeit㏸㐈㐏㐗Āls㏽㐄lsetmé㍪hp;樳parsl;槤Ādlᑣ㐔e;挣Ā;e㐜㐝檪Ā;s㐢㐣檬;쀀⪬︀ƀflp㐮㐳㑂tcy;䑌Ā;b㐸㐹䀯Ā;a㐾㐿槄r;挿f;쀀𝕤aĀdr㑍ЂesĀ;u㑔㑕晠it»㑕ƀcsu㑠㑹㒟Āau㑥㑯pĀ;sᆈ㑫;쀀⊓︀pĀ;sᆴ㑵;쀀⊔︀uĀbp㑿㒏ƀ;esᆗᆜ㒆etĀ;eᆗ㒍ñᆝƀ;esᆨᆭ㒖etĀ;eᆨ㒝ñᆮƀ;afᅻ㒦ְrť㒫ֱ»ᅼaròᅈȀcemt㒹㒾㓂㓅r;쀀𝓈tmîñiì㐕aræᆾĀar㓎㓕rĀ;f㓔ឿ昆Āan㓚㓭ightĀep㓣㓪psiloîỠhé⺯s»⡒ʀbcmnp㓻㕞ሉ㖋㖎Ҁ;Edemnprs㔎㔏㔑㔕㔞㔣㔬㔱㔶抂;櫅ot;檽Ā;dᇚ㔚ot;櫃ult;櫁ĀEe㔨㔪;櫋;把lus;檿arr;楹ƀeiu㔽㕒㕕tƀ;en㔎㕅㕋qĀ;qᇚ㔏eqĀ;q㔫㔨m;櫇Ābp㕚㕜;櫕;櫓c̀;acensᇭ㕬㕲㕹㕻㌦pproø㋺urlyeñᇾñᇳƀaes㖂㖈㌛pproø㌚qñ㌗g;晪ڀ123;Edehlmnps㖩㖬㖯ሜ㖲㖴㗀㗉㗕㗚㗟㗨㗭耻¹䂹耻²䂲耻³䂳;櫆Āos㖹㖼t;檾ub;櫘Ā;dሢ㗅ot;櫄sĀou㗏㗒l;柉b;櫗arr;楻ult;櫂ĀEe㗤㗦;櫌;抋lus;櫀ƀeiu㗴㘉㘌tƀ;enሜ㗼㘂qĀ;qሢ㖲eqĀ;q㗧㗤m;櫈Ābp㘑㘓;櫔;櫖ƀAan㘜㘠㘭rr;懙rĀhr㘦㘨ë∮Ā;oਫ਩war;椪lig耻ß䃟௡㙑㙝㙠ዎ㙳㙹\0㙾㛂\0\0\0\0\0㛛㜃\0㜉㝬\0\0\0㞇ɲ㙖\0\0㙛get;挖;䏄rë๟ƀaey㙦㙫㙰ron;䅥dil;䅣;䑂lrec;挕r;쀀𝔱Ȁeiko㚆㚝㚵㚼Dz㚋\0㚑eĀ4fኄኁaƀ;sv㚘㚙㚛䎸ym;䏑Ācn㚢㚲kĀas㚨㚮pproø዁im»ኬsðኞĀas㚺㚮ð዁rn耻þ䃾Ǭ̟㛆⋧es膀×;bd㛏㛐㛘䃗Ā;aᤏ㛕r;樱;樰ƀeps㛡㛣㜀á⩍Ȁ;bcf҆㛬㛰㛴ot;挶ir;櫱Ā;o㛹㛼쀀𝕥rk;櫚á㍢rime;怴ƀaip㜏㜒㝤dåቈ΀adempst㜡㝍㝀㝑㝗㝜㝟ngleʀ;dlqr㜰㜱㜶㝀㝂斵own»ᶻeftĀ;e⠀㜾ñम;扜ightĀ;e㊪㝋ñၚot;旬inus;樺lus;樹b;槍ime;樻ezium;揢ƀcht㝲㝽㞁Āry㝷㝻;쀀𝓉;䑆cy;䑛rok;䅧Āio㞋㞎xô᝷headĀlr㞗㞠eftarro÷ࡏightarrow»ཝऀAHabcdfghlmoprstuw㟐㟓㟗㟤㟰㟼㠎㠜㠣㠴㡑㡝㡫㢩㣌㣒㣪㣶ròϭar;楣Ācr㟜㟢ute耻ú䃺òᅐrǣ㟪\0㟭y;䑞ve;䅭Āiy㟵㟺rc耻û䃻;䑃ƀabh㠃㠆㠋ròᎭlac;䅱aòᏃĀir㠓㠘sht;楾;쀀𝔲rave耻ù䃹š㠧㠱rĀlr㠬㠮»ॗ»ႃlk;斀Āct㠹㡍ɯ㠿\0\0㡊rnĀ;e㡅㡆挜r»㡆op;挏ri;旸Āal㡖㡚cr;䅫肻¨͉Āgp㡢㡦on;䅳f;쀀𝕦̀adhlsuᅋ㡸㡽፲㢑㢠ownáᎳarpoonĀlr㢈㢌efô㠭ighô㠯iƀ;hl㢙㢚㢜䏅»ᏺon»㢚parrows;懈ƀcit㢰㣄㣈ɯ㢶\0\0㣁rnĀ;e㢼㢽挝r»㢽op;挎ng;䅯ri;旹cr;쀀𝓊ƀdir㣙㣝㣢ot;拰lde;䅩iĀ;f㜰㣨»᠓Āam㣯㣲rò㢨l耻ü䃼angle;榧ހABDacdeflnoprsz㤜㤟㤩㤭㦵㦸㦽㧟㧤㧨㧳㧹㧽㨁㨠ròϷarĀ;v㤦㤧櫨;櫩asèϡĀnr㤲㤷grt;榜΀eknprst㓣㥆㥋㥒㥝㥤㦖appá␕othinçẖƀhir㓫⻈㥙opô⾵Ā;hᎷ㥢ïㆍĀiu㥩㥭gmá㎳Ābp㥲㦄setneqĀ;q㥽㦀쀀⊊︀;쀀⫋︀setneqĀ;q㦏㦒쀀⊋︀;쀀⫌︀Āhr㦛㦟etá㚜iangleĀlr㦪㦯eft»थight»ၑy;䐲ash»ံƀelr㧄㧒㧗ƀ;beⷪ㧋㧏ar;抻q;扚lip;拮Ābt㧜ᑨaòᑩr;쀀𝔳tré㦮suĀbp㧯㧱»ജ»൙pf;쀀𝕧roð໻tré㦴Ācu㨆㨋r;쀀𝓋Ābp㨐㨘nĀEe㦀㨖»㥾nĀEe㦒㨞»㦐igzag;榚΀cefoprs㨶㨻㩖㩛㩔㩡㩪irc;䅵Ādi㩀㩑Ābg㩅㩉ar;機eĀ;qᗺ㩏;扙erp;愘r;쀀𝔴pf;쀀𝕨Ā;eᑹ㩦atèᑹcr;쀀𝓌ૣណ㪇\0㪋\0㪐㪛\0\0㪝㪨㪫㪯\0\0㫃㫎\0㫘ៜ៟tré៑r;쀀𝔵ĀAa㪔㪗ròσrò৶;䎾ĀAa㪡㪤ròθrò৫að✓is;拻ƀdptឤ㪵㪾Āfl㪺ឩ;쀀𝕩imåឲĀAa㫇㫊ròώròਁĀcq㫒ីr;쀀𝓍Āpt៖㫜ré។Ѐacefiosu㫰㫽㬈㬌㬑㬕㬛㬡cĀuy㫶㫻te耻ý䃽;䑏Āiy㬂㬆rc;䅷;䑋n耻¥䂥r;쀀𝔶cy;䑗pf;쀀𝕪cr;쀀𝓎Ācm㬦㬩y;䑎l耻ÿ䃿Ԁacdefhiosw㭂㭈㭔㭘㭤㭩㭭㭴㭺㮀cute;䅺Āay㭍㭒ron;䅾;䐷ot;䅼Āet㭝㭡træᕟa;䎶r;쀀𝔷cy;䐶grarr;懝pf;쀀𝕫cr;쀀𝓏Ājn㮅㮇;怍j;怌'.split("").map(function (e) { + return e.charCodeAt(0) + })) + }), Nr = (yr(Cr), Sr(function (e, t) { + Object.defineProperty(t, "__esModule", {value: !0}), t.default = new Uint16Array("Ȁaglq\tɭ\0\0p;䀦os;䀧t;䀾t;䀼uot;䀢".split("").map(function (e) { + return e.charCodeAt(0) + })) + })), br = (yr(Nr), Sr(function (e, t) { + Object.defineProperty(t, "__esModule", {value: !0}), t.replaceCodePoint = t.fromCodePoint = void 0; + var n, + r = new Map([[0, 65533], [128, 8364], [130, 8218], [131, 402], [132, 8222], [133, 8230], [134, 8224], [135, 8225], [136, 710], [137, 8240], [138, 352], [139, 8249], [140, 338], [142, 381], [145, 8216], [146, 8217], [147, 8220], [148, 8221], [149, 8226], [150, 8211], [151, 8212], [152, 732], [153, 8482], [154, 353], [155, 8250], [156, 339], [158, 382], [159, 376]]); + + function i(e) { + var t; + return 55296 <= e && e <= 57343 || 1114111 < e ? 65533 : null != (t = r.get(e)) ? t : e + } + + t.fromCodePoint = null != (n = String.fromCodePoint) ? n : function (e) { + var t = ""; + return 65535 < e && (e -= 65536, t += String.fromCharCode(e >>> 10 & 1023 | 55296), e = 56320 | 1023 & e), t + String.fromCharCode(e) + }, t.replaceCodePoint = i, t.default = function (e) { + return (0, t.fromCodePoint)(i(e)) + } + })), Ir = (yr(br), br.replaceCodePoint, br.fromCodePoint, Cr), Or = Nr, kr = br, Lr = Sr(function (e, t) { + var n = gr && gr.__createBinding || (Object.create ? function (e, t, n, r) { + void 0 === r && (r = n); + var i = Object.getOwnPropertyDescriptor(t, n); + i && !("get" in i ? !t.__esModule : i.writable || i.configurable) || (i = { + enumerable: !0, get: function () { + return t[n] + } + }), Object.defineProperty(e, r, i) + } : function (e, t, n, r) { + e[r = void 0 === r ? n : r] = t[n] + }), r = gr && gr.__setModuleDefault || (Object.create ? function (e, t) { + Object.defineProperty(e, "default", {enumerable: !0, value: t}) + } : function (e, t) { + e.default = t + }), i = gr && gr.__importStar || function (e) { + if (e && e.__esModule) return e; + var t = {}; + if (null != e) for (var i in e) "default" !== i && Object.prototype.hasOwnProperty.call(e, i) && n(t, e, i); + return r(t, e), t + }, s = gr && gr.__importDefault || function (e) { + return e && e.__esModule ? e : {default: e} + }, + a = (Object.defineProperty(t, "__esModule", {value: !0}), t.decodeXML = t.decodeHTMLStrict = t.decodeHTMLAttribute = t.decodeHTML = t.determineBranch = t.EntityDecoder = t.DecodingMode = t.BinTrieFlags = t.fromCodePoint = t.replaceCodePoint = t.decodeCodePoint = t.xmlDecodeTree = t.htmlDecodeTree = void 0, s(Ir)), + s = (t.htmlDecodeTree = a.default, s(Or)), c = (t.xmlDecodeTree = s.default, i(kr)); + t.decodeCodePoint = c.default; + var u, h, f, p, l = kr; + + function d(e) { + return e >= u.ZERO && e <= u.NINE + } + + Object.defineProperty(t, "replaceCodePoint", { + enumerable: !0, get: function () { + return l.replaceCodePoint + } + }), Object.defineProperty(t, "fromCodePoint", { + enumerable: !0, get: function () { + return l.fromCodePoint + } + }), function (e) { + e[e.NUM = 35] = "NUM", e[e.SEMI = 59] = "SEMI", e[e.EQUALS = 61] = "EQUALS", e[e.ZERO = 48] = "ZERO", e[e.NINE = 57] = "NINE", e[e.LOWER_A = 97] = "LOWER_A", e[e.LOWER_F = 102] = "LOWER_F", e[e.LOWER_X = 120] = "LOWER_X", e[e.LOWER_Z = 122] = "LOWER_Z", e[e.UPPER_A = 65] = "UPPER_A", e[e.UPPER_F = 70] = "UPPER_F", e[e.UPPER_Z = 90] = "UPPER_Z" + }(u = {}), function (e) { + e[e.VALUE_LENGTH = 49152] = "VALUE_LENGTH", e[e.BRANCH_LENGTH = 16256] = "BRANCH_LENGTH", e[e.JUMP_TABLE = 127] = "JUMP_TABLE" + }(h = t.BinTrieFlags || (t.BinTrieFlags = {})), function (e) { + e[e.EntityStart = 0] = "EntityStart", e[e.NumericStart = 1] = "NumericStart", e[e.NumericDecimal = 2] = "NumericDecimal", e[e.NumericHex = 3] = "NumericHex", e[e.NamedEntity = 4] = "NamedEntity" + }(f = {}), function (e) { + e[e.Legacy = 0] = "Legacy", e[e.Strict = 1] = "Strict", e[e.Attribute = 2] = "Attribute" + }(p = t.DecodingMode || (t.DecodingMode = {})); + var _ = function () { + function e(e, t, n) { + this.decodeTree = e, this.emitCodePoint = t, this.errors = n, this.state = f.EntityStart, this.consumed = 1, this.result = 0, this.treeIndex = 0, this.excess = 1, this.decodeMode = p.Strict + } + + return e.prototype.startEntity = function (e) { + this.decodeMode = e, this.state = f.EntityStart, this.result = 0, this.treeIndex = 0, this.excess = 1, this.consumed = 1 + }, e.prototype.write = function (e, t) { + switch (this.state) { + case f.EntityStart: + return e.charCodeAt(t) === u.NUM ? (this.state = f.NumericStart, this.consumed += 1, this.stateNumericStart(e, t + 1)) : (this.state = f.NamedEntity, this.stateNamedEntity(e, t)); + case f.NumericStart: + return this.stateNumericStart(e, t); + case f.NumericDecimal: + return this.stateNumericDecimal(e, t); + case f.NumericHex: + return this.stateNumericHex(e, t); + case f.NamedEntity: + return this.stateNamedEntity(e, t) + } + }, e.prototype.stateNumericStart = function (e, t) { + return t >= e.length ? -1 : (32 | e.charCodeAt(t)) === u.LOWER_X ? (this.state = f.NumericHex, this.consumed += 1, this.stateNumericHex(e, t + 1)) : (this.state = f.NumericDecimal, this.stateNumericDecimal(e, t)) + }, e.prototype.addToNumericResult = function (e, t, n, r) { + t !== n && (n -= t, this.result = this.result * Math.pow(r, n) + parseInt(e.substr(t, n), r), this.consumed += n) + }, e.prototype.stateNumericHex = function (e, t) { + for (var r = t; t < e.length;) { + var i = e.charCodeAt(t); + if (!(d(i) || i >= u.UPPER_A && i <= u.UPPER_F || u.LOWER_A <= i && i <= u.LOWER_F)) return this.addToNumericResult(e, r, t, 16), this.emitNumericEntity(i, 3); + t += 1 + } + return this.addToNumericResult(e, r, t, 16), -1 + }, e.prototype.stateNumericDecimal = function (e, t) { + for (var n = t; t < e.length;) { + var r = e.charCodeAt(t); + if (!d(r)) return this.addToNumericResult(e, n, t, 10), this.emitNumericEntity(r, 2); + t += 1 + } + return this.addToNumericResult(e, n, t, 10), -1 + }, e.prototype.emitNumericEntity = function (e, t) { + if (this.consumed <= t) return null != (t = this.errors) && t.absenceOfDigitsInNumericCharacterReference(this.consumed), 0; + if (e === u.SEMI) this.consumed += 1; else if (this.decodeMode === p.Strict) return 0; + return this.emitCodePoint((0, c.replaceCodePoint)(this.result), this.consumed), this.errors && (e !== u.SEMI && this.errors.missingSemicolonAfterCharacterReference(), this.errors.validateNumericCharacterReference(this.result)), this.consumed + }, e.prototype.stateNamedEntity = function (e, t) { + for (var n = this.decodeTree, r = n[this.treeIndex], i = (r & h.VALUE_LENGTH) >> 14; t < e.length; t++, this.excess++) { + var s = e.charCodeAt(t); + if (this.treeIndex = T(n, r, this.treeIndex + Math.max(1, i), s), this.treeIndex < 0) return 0 === this.result || this.decodeMode === p.Attribute && (0 === i || s === u.EQUALS || function (e) { + return u.UPPER_A <= e && e <= u.UPPER_Z || u.LOWER_A <= e && e <= u.LOWER_Z || d(e) + }(s)) ? 0 : this.emitNotTerminatedNamedEntity(); + if (0 != (i = ((r = n[this.treeIndex]) & h.VALUE_LENGTH) >> 14)) { + if (s === u.SEMI) return this.emitNamedEntityData(this.treeIndex, i, this.consumed + this.excess); + this.decodeMode !== p.Strict && (this.result = this.treeIndex, this.consumed += this.excess, this.excess = 0) + } + } + return -1 + }, e.prototype.emitNotTerminatedNamedEntity = function () { + var t = this.result, n = (this.decodeTree[t] & h.VALUE_LENGTH) >> 14; + return this.emitNamedEntityData(t, n, this.consumed), null != (t = this.errors) && t.missingSemicolonAfterCharacterReference(), this.consumed + }, e.prototype.emitNamedEntityData = function (e, t, n) { + var r = this.decodeTree; + return this.emitCodePoint(1 === t ? r[e] & ~h.VALUE_LENGTH : r[e + 1], n), 3 === t && this.emitCodePoint(r[e + 2], n), n + }, e.prototype.end = function () { + var e; + switch (this.state) { + case f.NamedEntity: + return 0 === this.result || this.decodeMode === p.Attribute && this.result !== this.treeIndex ? 0 : this.emitNotTerminatedNamedEntity(); + case f.NumericDecimal: + return this.emitNumericEntity(0, 2); + case f.NumericHex: + return this.emitNumericEntity(0, 3); + case f.NumericStart: + return null != (e = this.errors) && e.absenceOfDigitsInNumericCharacterReference(this.consumed), 0; + case f.EntityStart: + return 0 + } + }, e + }(); + + function E(e) { + var t = "", n = new _(e, function (e) { + return t += (0, c.fromCodePoint)(e) + }); + return function (e, r) { + for (var i = 0, s = 0; 0 <= (s = e.indexOf("&", s));) { + t += e.slice(i, s), n.startEntity(r); + var a = n.write(e, s + 1); + if (a < 0) { + i = s + n.end(); + break + } + i = s + a, s = 0 === a ? i + 1 : i + } + var o = t + e.slice(i); + return t = "", o + } + } + + function T(e, t, n, r) { + var i = (t & h.BRANCH_LENGTH) >> 7, t = t & h.JUMP_TABLE; + if (0 == i) return 0 != t && r === t ? n : -1; + if (t) return (t = r - t) < 0 || i <= t ? -1 : e[n + t] - 1; + for (var o = n, c = o + i - 1; o <= c;) { + var u = o + c >>> 1, l = e[u]; + if (l < r) o = 1 + u; else { + if (!(r < l)) return e[u + i]; + c = u - 1 + } + } + return -1 + } + + t.EntityDecoder = _, t.determineBranch = T; + var A = E(a.default), g = E(s.default); + t.decodeHTML = function (e, t) { + return void 0 === t && (t = p.Legacy), A(e, t) + }, t.decodeHTMLAttribute = function (e) { + return A(e, p.Attribute) + }, t.decodeHTMLStrict = function (e) { + return A(e, p.Strict) + }, t.decodeXML = function (e) { + return g(e, p.Strict) + } + }), Dr = (yr(Lr), Lr.decodeXML, Lr.decodeHTMLStrict, Lr.decodeHTMLAttribute, Lr.decodeHTML, Lr.determineBranch), + Rr = (Lr.EntityDecoder, Lr.DecodingMode, Lr.BinTrieFlags), wr = Lr.fromCodePoint, xr = Lr.replaceCodePoint; +Lr.decodeCodePoint; +var Mr, Pr, Br, Fr, Ur, Qr, _i, Yi, Hr = Lr.xmlDecodeTree, Gr = Lr.htmlDecodeTree; +!function (e) { + e.HTML = "http://www.w3.org/1999/xhtml", e.MATHML = "http://www.w3.org/1998/Math/MathML", e.SVG = "http://www.w3.org/2000/svg", e.XLINK = "http://www.w3.org/1999/xlink", e.XML = "http://www.w3.org/XML/1998/namespace", e.XMLNS = "http://www.w3.org/2000/xmlns/" +}(Mr = Mr || {}), function (e) { + e.TYPE = "type", e.ACTION = "action", e.ENCODING = "encoding", e.PROMPT = "prompt", e.NAME = "name", e.COLOR = "color", e.FACE = "face", e.SIZE = "size" +}(Pr = Pr || {}), function (e) { + e.NO_QUIRKS = "no-quirks", e.QUIRKS = "quirks", e.LIMITED_QUIRKS = "limited-quirks" +}(Br = Br || {}), function (e) { + e.A = "a", e.ADDRESS = "address", e.ANNOTATION_XML = "annotation-xml", e.APPLET = "applet", e.AREA = "area", e.ARTICLE = "article", e.ASIDE = "aside", e.B = "b", e.BASE = "base", e.BASEFONT = "basefont", e.BGSOUND = "bgsound", e.BIG = "big", e.BLOCKQUOTE = "blockquote", e.BODY = "body", e.BR = "br", e.BUTTON = "button", e.CAPTION = "caption", e.CENTER = "center", e.CODE = "code", e.COL = "col", e.COLGROUP = "colgroup", e.DD = "dd", e.DESC = "desc", e.DETAILS = "details", e.DIALOG = "dialog", e.DIR = "dir", e.DIV = "div", e.DL = "dl", e.DT = "dt", e.EM = "em", e.EMBED = "embed", e.FIELDSET = "fieldset", e.FIGCAPTION = "figcaption", e.FIGURE = "figure", e.FONT = "font", e.FOOTER = "footer", e.FOREIGN_OBJECT = "foreignObject", e.FORM = "form", e.FRAME = "frame", e.FRAMESET = "frameset", e.H1 = "h1", e.H2 = "h2", e.H3 = "h3", e.H4 = "h4", e.H5 = "h5", e.H6 = "h6", e.HEAD = "head", e.HEADER = "header", e.HGROUP = "hgroup", e.HR = "hr", e.HTML = "html", e.I = "i", e.IMG = "img", e.IMAGE = "image", e.INPUT = "input", e.IFRAME = "iframe", e.KEYGEN = "keygen", e.LABEL = "label", e.LI = "li", e.LINK = "link", e.LISTING = "listing", e.MAIN = "main", e.MALIGNMARK = "malignmark", e.MARQUEE = "marquee", e.MATH = "math", e.MENU = "menu", e.META = "meta", e.MGLYPH = "mglyph", e.MI = "mi", e.MO = "mo", e.MN = "mn", e.MS = "ms", e.MTEXT = "mtext", e.NAV = "nav", e.NOBR = "nobr", e.NOFRAMES = "noframes", e.NOEMBED = "noembed", e.NOSCRIPT = "noscript", e.OBJECT = "object", e.OL = "ol", e.OPTGROUP = "optgroup", e.OPTION = "option", e.P = "p", e.PARAM = "param", e.PLAINTEXT = "plaintext", e.PRE = "pre", e.RB = "rb", e.RP = "rp", e.RT = "rt", e.RTC = "rtc", e.RUBY = "ruby", e.S = "s", e.SCRIPT = "script", e.SECTION = "section", e.SELECT = "select", e.SOURCE = "source", e.SMALL = "small", e.SPAN = "span", e.STRIKE = "strike", e.STRONG = "strong", e.STYLE = "style",e.SUB = "sub",e.SUMMARY = "summary",e.SUP = "sup",e.TABLE = "table",e.TBODY = "tbody",e.TEMPLATE = "template",e.TEXTAREA = "textarea",e.TFOOT = "tfoot",e.TD = "td",e.TH = "th",e.THEAD = "thead",e.TITLE = "title",e.TR = "tr",e.TRACK = "track",e.TT = "tt",e.U = "u",e.UL = "ul",e.SVG = "svg",e.VAR = "var",e.WBR = "wbr",e.XMP = "xmp" +}(Fr = Fr || {}), function (e) { + e[e.UNKNOWN = 0] = "UNKNOWN", e[e.A = 1] = "A", e[e.ADDRESS = 2] = "ADDRESS", e[e.ANNOTATION_XML = 3] = "ANNOTATION_XML", e[e.APPLET = 4] = "APPLET", e[e.AREA = 5] = "AREA", e[e.ARTICLE = 6] = "ARTICLE", e[e.ASIDE = 7] = "ASIDE", e[e.B = 8] = "B", e[e.BASE = 9] = "BASE", e[e.BASEFONT = 10] = "BASEFONT", e[e.BGSOUND = 11] = "BGSOUND", e[e.BIG = 12] = "BIG", e[e.BLOCKQUOTE = 13] = "BLOCKQUOTE", e[e.BODY = 14] = "BODY", e[e.BR = 15] = "BR", e[e.BUTTON = 16] = "BUTTON", e[e.CAPTION = 17] = "CAPTION", e[e.CENTER = 18] = "CENTER", e[e.CODE = 19] = "CODE", e[e.COL = 20] = "COL", e[e.COLGROUP = 21] = "COLGROUP", e[e.DD = 22] = "DD", e[e.DESC = 23] = "DESC", e[e.DETAILS = 24] = "DETAILS", e[e.DIALOG = 25] = "DIALOG", e[e.DIR = 26] = "DIR", e[e.DIV = 27] = "DIV", e[e.DL = 28] = "DL", e[e.DT = 29] = "DT", e[e.EM = 30] = "EM", e[e.EMBED = 31] = "EMBED", e[e.FIELDSET = 32] = "FIELDSET", e[e.FIGCAPTION = 33] = "FIGCAPTION", e[e.FIGURE = 34] = "FIGURE", e[e.FONT = 35] = "FONT", e[e.FOOTER = 36] = "FOOTER", e[e.FOREIGN_OBJECT = 37] = "FOREIGN_OBJECT", e[e.FORM = 38] = "FORM", e[e.FRAME = 39] = "FRAME", e[e.FRAMESET = 40] = "FRAMESET", e[e.H1 = 41] = "H1", e[e.H2 = 42] = "H2", e[e.H3 = 43] = "H3", e[e.H4 = 44] = "H4", e[e.H5 = 45] = "H5", e[e.H6 = 46] = "H6", e[e.HEAD = 47] = "HEAD", e[e.HEADER = 48] = "HEADER", e[e.HGROUP = 49] = "HGROUP", e[e.HR = 50] = "HR", e[e.HTML = 51] = "HTML", e[e.I = 52] = "I", e[e.IMG = 53] = "IMG", e[e.IMAGE = 54] = "IMAGE", e[e.INPUT = 55] = "INPUT", e[e.IFRAME = 56] = "IFRAME", e[e.KEYGEN = 57] = "KEYGEN", e[e.LABEL = 58] = "LABEL", e[e.LI = 59] = "LI", e[e.LINK = 60] = "LINK", e[e.LISTING = 61] = "LISTING", e[e.MAIN = 62] = "MAIN", e[e.MALIGNMARK = 63] = "MALIGNMARK", e[e.MARQUEE = 64] = "MARQUEE", e[e.MATH = 65] = "MATH", e[e.MENU = 66] = "MENU", e[e.META = 67] = "META", e[e.MGLYPH = 68] = "MGLYPH", e[e.MI = 69] = "MI", e[e.MO = 70] = "MO", e[e.MN = 71] = "MN", e[e.MS = 72] = "MS", e[e.MTEXT = 73] = "MTEXT", e[e.NAV = 74] = "NAV", e[e.NOBR = 75] = "NOBR", e[e.NOFRAMES = 76] = "NOFRAMES", e[e.NOEMBED = 77] = "NOEMBED", e[e.NOSCRIPT = 78] = "NOSCRIPT", e[e.OBJECT = 79] = "OBJECT", e[e.OL = 80] = "OL", e[e.OPTGROUP = 81] = "OPTGROUP", e[e.OPTION = 82] = "OPTION", e[e.P = 83] = "P", e[e.PARAM = 84] = "PARAM", e[e.PLAINTEXT = 85] = "PLAINTEXT", e[e.PRE = 86] = "PRE", e[e.RB = 87] = "RB", e[e.RP = 88] = "RP", e[e.RT = 89] = "RT", e[e.RTC = 90] = "RTC", e[e.RUBY = 91] = "RUBY", e[e.S = 92] = "S", e[e.SCRIPT = 93] = "SCRIPT", e[e.SECTION = 94] = "SECTION", e[e.SELECT = 95] = "SELECT", e[e.SOURCE = 96] = "SOURCE", e[e.SMALL = 97] = "SMALL", e[e.SPAN = 98] = "SPAN", e[e.STRIKE = 99] = "STRIKE", e[e.STRONG = 100] = "STRONG",e[e.STYLE = 101] = "STYLE",e[e.SUB = 102] = "SUB",e[e.SUMMARY = 103] = "SUMMARY",e[e.SUP = 104] = "SUP",e[e.TABLE = 105] = "TABLE",e[e.TBODY = 106] = "TBODY",e[e.TEMPLATE = 107] = "TEMPLATE",e[e.TEXTAREA = 108] = "TEXTAREA",e[e.TFOOT = 109] = "TFOOT",e[e.TD = 110] = "TD",e[e.TH = 111] = "TH",e[e.THEAD = 112] = "THEAD",e[e.TITLE = 113] = "TITLE",e[e.TR = 114] = "TR",e[e.TRACK = 115] = "TRACK",e[e.TT = 116] = "TT",e[e.U = 117] = "U",e[e.UL = 118] = "UL",e[e.SVG = 119] = "SVG",e[e.VAR = 120] = "VAR",e[e.WBR = 121] = "WBR",e[e.XMP = 122] = "XMP" +}(Ur = Ur || {}); +const jr = new Map([[Fr.A, Ur.A], [Fr.ADDRESS, Ur.ADDRESS], [Fr.ANNOTATION_XML, Ur.ANNOTATION_XML], [Fr.APPLET, Ur.APPLET], [Fr.AREA, Ur.AREA], [Fr.ARTICLE, Ur.ARTICLE], [Fr.ASIDE, Ur.ASIDE], [Fr.B, Ur.B], [Fr.BASE, Ur.BASE], [Fr.BASEFONT, Ur.BASEFONT], [Fr.BGSOUND, Ur.BGSOUND], [Fr.BIG, Ur.BIG], [Fr.BLOCKQUOTE, Ur.BLOCKQUOTE], [Fr.BODY, Ur.BODY], [Fr.BR, Ur.BR], [Fr.BUTTON, Ur.BUTTON], [Fr.CAPTION, Ur.CAPTION], [Fr.CENTER, Ur.CENTER], [Fr.CODE, Ur.CODE], [Fr.COL, Ur.COL], [Fr.COLGROUP, Ur.COLGROUP], [Fr.DD, Ur.DD], [Fr.DESC, Ur.DESC], [Fr.DETAILS, Ur.DETAILS], [Fr.DIALOG, Ur.DIALOG], [Fr.DIR, Ur.DIR], [Fr.DIV, Ur.DIV], [Fr.DL, Ur.DL], [Fr.DT, Ur.DT], [Fr.EM, Ur.EM], [Fr.EMBED, Ur.EMBED], [Fr.FIELDSET, Ur.FIELDSET], [Fr.FIGCAPTION, Ur.FIGCAPTION], [Fr.FIGURE, Ur.FIGURE], [Fr.FONT, Ur.FONT], [Fr.FOOTER, Ur.FOOTER], [Fr.FOREIGN_OBJECT, Ur.FOREIGN_OBJECT], [Fr.FORM, Ur.FORM], [Fr.FRAME, Ur.FRAME], [Fr.FRAMESET, Ur.FRAMESET], [Fr.H1, Ur.H1], [Fr.H2, Ur.H2], [Fr.H3, Ur.H3], [Fr.H4, Ur.H4], [Fr.H5, Ur.H5], [Fr.H6, Ur.H6], [Fr.HEAD, Ur.HEAD], [Fr.HEADER, Ur.HEADER], [Fr.HGROUP, Ur.HGROUP], [Fr.HR, Ur.HR], [Fr.HTML, Ur.HTML], [Fr.I, Ur.I], [Fr.IMG, Ur.IMG], [Fr.IMAGE, Ur.IMAGE], [Fr.INPUT, Ur.INPUT], [Fr.IFRAME, Ur.IFRAME], [Fr.KEYGEN, Ur.KEYGEN], [Fr.LABEL, Ur.LABEL], [Fr.LI, Ur.LI], [Fr.LINK, Ur.LINK], [Fr.LISTING, Ur.LISTING], [Fr.MAIN, Ur.MAIN], [Fr.MALIGNMARK, Ur.MALIGNMARK], [Fr.MARQUEE, Ur.MARQUEE], [Fr.MATH, Ur.MATH], [Fr.MENU, Ur.MENU], [Fr.META, Ur.META], [Fr.MGLYPH, Ur.MGLYPH], [Fr.MI, Ur.MI], [Fr.MO, Ur.MO], [Fr.MN, Ur.MN], [Fr.MS, Ur.MS], [Fr.MTEXT, Ur.MTEXT], [Fr.NAV, Ur.NAV], [Fr.NOBR, Ur.NOBR], [Fr.NOFRAMES, Ur.NOFRAMES], [Fr.NOEMBED, Ur.NOEMBED], [Fr.NOSCRIPT, Ur.NOSCRIPT], [Fr.OBJECT, Ur.OBJECT], [Fr.OL, Ur.OL], [Fr.OPTGROUP, Ur.OPTGROUP], [Fr.OPTION, Ur.OPTION], [Fr.P, Ur.P], [Fr.PARAM, Ur.PARAM], [Fr.PLAINTEXT, Ur.PLAINTEXT], [Fr.PRE, Ur.PRE], [Fr.RB, Ur.RB], [Fr.RP, Ur.RP], [Fr.RT, Ur.RT], [Fr.RTC, Ur.RTC], [Fr.RUBY, Ur.RUBY], [Fr.S, Ur.S], [Fr.SCRIPT, Ur.SCRIPT], [Fr.SECTION, Ur.SECTION], [Fr.SELECT, Ur.SELECT], [Fr.SOURCE, Ur.SOURCE], [Fr.SMALL, Ur.SMALL], [Fr.SPAN, Ur.SPAN], [Fr.STRIKE, Ur.STRIKE], [Fr.STRONG, Ur.STRONG], [Fr.STYLE, Ur.STYLE], [Fr.SUB, Ur.SUB], [Fr.SUMMARY, Ur.SUMMARY], [Fr.SUP, Ur.SUP], [Fr.TABLE, Ur.TABLE], [Fr.TBODY, Ur.TBODY], [Fr.TEMPLATE, Ur.TEMPLATE], [Fr.TEXTAREA, Ur.TEXTAREA], [Fr.TFOOT, Ur.TFOOT], [Fr.TD, Ur.TD], [Fr.TH, Ur.TH], [Fr.THEAD, Ur.THEAD], [Fr.TITLE, Ur.TITLE], [Fr.TR, Ur.TR], [Fr.TRACK, Ur.TRACK], [Fr.TT, Ur.TT], [Fr.U, Ur.U], [Fr.UL, Ur.UL], [Fr.SVG, Ur.SVG], [Fr.VAR, Ur.VAR], [Fr.WBR, Ur.WBR], [Fr.XMP, Ur.XMP]]); + +function qr(e) { + return null != (e = jr.get(e)) ? e : Ur.UNKNOWN +} + +const Yr = Ur, Kr = { + [Mr.HTML]: new Set([Yr.ADDRESS, Yr.APPLET, Yr.AREA, Yr.ARTICLE, Yr.ASIDE, Yr.BASE, Yr.BASEFONT, Yr.BGSOUND, Yr.BLOCKQUOTE, Yr.BODY, Yr.BR, Yr.BUTTON, Yr.CAPTION, Yr.CENTER, Yr.COL, Yr.COLGROUP, Yr.DD, Yr.DETAILS, Yr.DIR, Yr.DIV, Yr.DL, Yr.DT, Yr.EMBED, Yr.FIELDSET, Yr.FIGCAPTION, Yr.FIGURE, Yr.FOOTER, Yr.FORM, Yr.FRAME, Yr.FRAMESET, Yr.H1, Yr.H2, Yr.H3, Yr.H4, Yr.H5, Yr.H6, Yr.HEAD, Yr.HEADER, Yr.HGROUP, Yr.HR, Yr.HTML, Yr.IFRAME, Yr.IMG, Yr.INPUT, Yr.LI, Yr.LINK, Yr.LISTING, Yr.MAIN, Yr.MARQUEE, Yr.MENU, Yr.META, Yr.NAV, Yr.NOEMBED, Yr.NOFRAMES, Yr.NOSCRIPT, Yr.OBJECT, Yr.OL, Yr.P, Yr.PARAM, Yr.PLAINTEXT, Yr.PRE, Yr.SCRIPT, Yr.SECTION, Yr.SELECT, Yr.SOURCE, Yr.STYLE, Yr.SUMMARY, Yr.TABLE, Yr.TBODY, Yr.TD, Yr.TEMPLATE, Yr.TEXTAREA, Yr.TFOOT, Yr.TH, Yr.THEAD, Yr.TITLE, Yr.TR, Yr.TRACK, Yr.UL, Yr.WBR, Yr.XMP]), + [Mr.MATHML]: new Set([Yr.MI, Yr.MO, Yr.MN, Yr.MS, Yr.MTEXT, Yr.ANNOTATION_XML]), + [Mr.SVG]: new Set([Yr.TITLE, Yr.FOREIGN_OBJECT, Yr.DESC]), + [Mr.XLINK]: new Set, + [Mr.XML]: new Set, + [Mr.XMLNS]: new Set +}; + +function Wr(e) { + return e === Yr.H1 || e === Yr.H2 || e === Yr.H3 || e === Yr.H4 || e === Yr.H5 || e === Yr.H6 +} + +const Vr = new Set([Fr.STYLE, Fr.SCRIPT, Fr.XMP, Fr.IFRAME, Fr.NOEMBED, Fr.NOFRAMES, Fr.PLAINTEXT]), + $r = new Map([[128, 8364], [130, 8218], [131, 402], [132, 8222], [133, 8230], [134, 8224], [135, 8225], [136, 710], [137, 8240], [138, 352], [139, 8249], [140, 338], [142, 381], [145, 8216], [146, 8217], [147, 8220], [148, 8221], [149, 8226], [150, 8211], [151, 8212], [152, 732], [153, 8482], [154, 353], [155, 8250], [156, 339], [158, 382], [159, 376]]), + zr = (function (e) { + e[e.DATA = 0] = "DATA", e[e.RCDATA = 1] = "RCDATA", e[e.RAWTEXT = 2] = "RAWTEXT", e[e.SCRIPT_DATA = 3] = "SCRIPT_DATA", e[e.PLAINTEXT = 4] = "PLAINTEXT", e[e.TAG_OPEN = 5] = "TAG_OPEN", e[e.END_TAG_OPEN = 6] = "END_TAG_OPEN", e[e.TAG_NAME = 7] = "TAG_NAME", e[e.RCDATA_LESS_THAN_SIGN = 8] = "RCDATA_LESS_THAN_SIGN", e[e.RCDATA_END_TAG_OPEN = 9] = "RCDATA_END_TAG_OPEN", e[e.RCDATA_END_TAG_NAME = 10] = "RCDATA_END_TAG_NAME", e[e.RAWTEXT_LESS_THAN_SIGN = 11] = "RAWTEXT_LESS_THAN_SIGN", e[e.RAWTEXT_END_TAG_OPEN = 12] = "RAWTEXT_END_TAG_OPEN", e[e.RAWTEXT_END_TAG_NAME = 13] = "RAWTEXT_END_TAG_NAME", e[e.SCRIPT_DATA_LESS_THAN_SIGN = 14] = "SCRIPT_DATA_LESS_THAN_SIGN", e[e.SCRIPT_DATA_END_TAG_OPEN = 15] = "SCRIPT_DATA_END_TAG_OPEN", e[e.SCRIPT_DATA_END_TAG_NAME = 16] = "SCRIPT_DATA_END_TAG_NAME", e[e.SCRIPT_DATA_ESCAPE_START = 17] = "SCRIPT_DATA_ESCAPE_START", e[e.SCRIPT_DATA_ESCAPE_START_DASH = 18] = "SCRIPT_DATA_ESCAPE_START_DASH", e[e.SCRIPT_DATA_ESCAPED = 19] = "SCRIPT_DATA_ESCAPED", e[e.SCRIPT_DATA_ESCAPED_DASH = 20] = "SCRIPT_DATA_ESCAPED_DASH", e[e.SCRIPT_DATA_ESCAPED_DASH_DASH = 21] = "SCRIPT_DATA_ESCAPED_DASH_DASH", e[e.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN = 22] = "SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN", e[e.SCRIPT_DATA_ESCAPED_END_TAG_OPEN = 23] = "SCRIPT_DATA_ESCAPED_END_TAG_OPEN", e[e.SCRIPT_DATA_ESCAPED_END_TAG_NAME = 24] = "SCRIPT_DATA_ESCAPED_END_TAG_NAME", e[e.SCRIPT_DATA_DOUBLE_ESCAPE_START = 25] = "SCRIPT_DATA_DOUBLE_ESCAPE_START", e[e.SCRIPT_DATA_DOUBLE_ESCAPED = 26] = "SCRIPT_DATA_DOUBLE_ESCAPED", e[e.SCRIPT_DATA_DOUBLE_ESCAPED_DASH = 27] = "SCRIPT_DATA_DOUBLE_ESCAPED_DASH", e[e.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH = 28] = "SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH", e[e.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN = 29] = "SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN", e[e.SCRIPT_DATA_DOUBLE_ESCAPE_END = 30] = "SCRIPT_DATA_DOUBLE_ESCAPE_END", e[e.BEFORE_ATTRIBUTE_NAME = 31] = "BEFORE_ATTRIBUTE_NAME", e[e.ATTRIBUTE_NAME = 32] = "ATTRIBUTE_NAME", e[e.AFTER_ATTRIBUTE_NAME = 33] = "AFTER_ATTRIBUTE_NAME", e[e.BEFORE_ATTRIBUTE_VALUE = 34] = "BEFORE_ATTRIBUTE_VALUE", e[e.ATTRIBUTE_VALUE_DOUBLE_QUOTED = 35] = "ATTRIBUTE_VALUE_DOUBLE_QUOTED", e[e.ATTRIBUTE_VALUE_SINGLE_QUOTED = 36] = "ATTRIBUTE_VALUE_SINGLE_QUOTED", e[e.ATTRIBUTE_VALUE_UNQUOTED = 37] = "ATTRIBUTE_VALUE_UNQUOTED", e[e.AFTER_ATTRIBUTE_VALUE_QUOTED = 38] = "AFTER_ATTRIBUTE_VALUE_QUOTED", e[e.SELF_CLOSING_START_TAG = 39] = "SELF_CLOSING_START_TAG", e[e.BOGUS_COMMENT = 40] = "BOGUS_COMMENT", e[e.MARKUP_DECLARATION_OPEN = 41] = "MARKUP_DECLARATION_OPEN", e[e.COMMENT_START = 42] = "COMMENT_START", e[e.COMMENT_START_DASH = 43] = "COMMENT_START_DASH", e[e.COMMENT = 44] = "COMMENT", e[e.COMMENT_LESS_THAN_SIGN = 45] = "COMMENT_LESS_THAN_SIGN", e[e.COMMENT_LESS_THAN_SIGN_BANG = 46] = "COMMENT_LESS_THAN_SIGN_BANG", e[e.COMMENT_LESS_THAN_SIGN_BANG_DASH = 47] = "COMMENT_LESS_THAN_SIGN_BANG_DASH", e[e.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH = 48] = "COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH", e[e.COMMENT_END_DASH = 49] = "COMMENT_END_DASH", e[e.COMMENT_END = 50] = "COMMENT_END", e[e.COMMENT_END_BANG = 51] = "COMMENT_END_BANG", e[e.DOCTYPE = 52] = "DOCTYPE", e[e.BEFORE_DOCTYPE_NAME = 53] = "BEFORE_DOCTYPE_NAME", e[e.DOCTYPE_NAME = 54] = "DOCTYPE_NAME", e[e.AFTER_DOCTYPE_NAME = 55] = "AFTER_DOCTYPE_NAME", e[e.AFTER_DOCTYPE_PUBLIC_KEYWORD = 56] = "AFTER_DOCTYPE_PUBLIC_KEYWORD", e[e.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER = 57] = "BEFORE_DOCTYPE_PUBLIC_IDENTIFIER", e[e.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED = 58] = "DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED", e[e.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED = 59] = "DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED", e[e.AFTER_DOCTYPE_PUBLIC_IDENTIFIER = 60] = "AFTER_DOCTYPE_PUBLIC_IDENTIFIER", e[e.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS = 61] = "BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS", e[e.AFTER_DOCTYPE_SYSTEM_KEYWORD = 62] = "AFTER_DOCTYPE_SYSTEM_KEYWORD", e[e.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER = 63] = "BEFORE_DOCTYPE_SYSTEM_IDENTIFIER", e[e.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED = 64] = "DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED", e[e.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED = 65] = "DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED", e[e.AFTER_DOCTYPE_SYSTEM_IDENTIFIER = 66] = "AFTER_DOCTYPE_SYSTEM_IDENTIFIER", e[e.BOGUS_DOCTYPE = 67] = "BOGUS_DOCTYPE", e[e.CDATA_SECTION = 68] = "CDATA_SECTION", e[e.CDATA_SECTION_BRACKET = 69] = "CDATA_SECTION_BRACKET", e[e.CDATA_SECTION_END = 70] = "CDATA_SECTION_END", e[e.CHARACTER_REFERENCE = 71] = "CHARACTER_REFERENCE", e[e.NAMED_CHARACTER_REFERENCE = 72] = "NAMED_CHARACTER_REFERENCE", e[e.AMBIGUOUS_AMPERSAND = 73] = "AMBIGUOUS_AMPERSAND", e[e.NUMERIC_CHARACTER_REFERENCE = 74] = "NUMERIC_CHARACTER_REFERENCE", e[e.HEXADEMICAL_CHARACTER_REFERENCE_START = 75] = "HEXADEMICAL_CHARACTER_REFERENCE_START", e[e.HEXADEMICAL_CHARACTER_REFERENCE = 76] = "HEXADEMICAL_CHARACTER_REFERENCE", e[e.DECIMAL_CHARACTER_REFERENCE = 77] = "DECIMAL_CHARACTER_REFERENCE", e[e.NUMERIC_CHARACTER_REFERENCE_END = 78] = "NUMERIC_CHARACTER_REFERENCE_END" + }(Qr = Qr || {}), { + DATA: Qr.DATA, + RCDATA: Qr.RCDATA, + RAWTEXT: Qr.RAWTEXT, + SCRIPT_DATA: Qr.SCRIPT_DATA, + PLAINTEXT: Qr.PLAINTEXT, + CDATA_SECTION: Qr.CDATA_SECTION + }); + +function Xr(e) { + return e >= ar.DIGIT_0 && e <= ar.DIGIT_9 +} + +function Zr(e) { + return e >= ar.LATIN_CAPITAL_A && e <= ar.LATIN_CAPITAL_Z +} + +function Jr(e) { + return function (e) { + return e >= ar.LATIN_SMALL_A && e <= ar.LATIN_SMALL_Z + }(e) || Zr(e) +} + +function ei(e) { + return Jr(e) || Xr(e) +} + +function ti(e) { + return e >= ar.LATIN_CAPITAL_A && e <= ar.LATIN_CAPITAL_F +} + +function ni(e) { + return e >= ar.LATIN_SMALL_A && e <= ar.LATIN_SMALL_F +} + +function ri(e) { + return e + 32 +} + +function ii(e) { + return e === ar.SPACE || e === ar.LINE_FEED || e === ar.TABULATION || e === ar.FORM_FEED +} + +function si(e) { + return ii(e) || e === ar.SOLIDUS || e === ar.GREATER_THAN_SIGN +} + +class ai { + constructor(e, t) { + this.options = e, this.handler = t, this.paused = !1, this.inLoop = !1, this.inForeignNode = !1, this.lastStartTagName = "", this.active = !1, this.state = Qr.DATA, this.returnState = Qr.DATA, this.charRefCode = -1, this.consumedAfterSnapshot = -1, this.currentCharacterToken = null, this.currentToken = null, this.currentAttr = { + name: "", + value: "" + }, this.preprocessor = new Er(t), this.currentLocation = this.getCurrentLocation(-1) + } + + _err(e) { + var t, n; + null != (n = (t = this.handler).onParseError) && n.call(t, this.preprocessor.getError(e)) + } + + getCurrentLocation(e) { + return this.options.sourceCodeLocationInfo ? { + startLine: this.preprocessor.line, + startCol: this.preprocessor.col - e, + startOffset: this.preprocessor.offset - e, + endLine: -1, + endCol: -1, + endOffset: -1 + } : null + } + + _runParsingLoop() { + if (!this.inLoop) { + for (this.inLoop = !0; this.active && !this.paused;) { + this.consumedAfterSnapshot = 0; + var e = this._consume(); + this._ensureHibernation() || this._callState(e) + } + this.inLoop = !1 + } + } + + pause() { + this.paused = !0 + } + + resume(e) { + if (!this.paused) throw new Error("Parser was already resumed"); + this.paused = !1, this.inLoop || (this._runParsingLoop(), this.paused) || null == e || e() + } + + write(e, t, n) { + this.active = !0, this.preprocessor.write(e, t), this._runParsingLoop(), this.paused || null == n || n() + } + + insertHtmlAtCurrentPos(e) { + this.active = !0, this.preprocessor.insertHtmlAtCurrentPos(e), this._runParsingLoop() + } + + _ensureHibernation() { + return !(!this.preprocessor.endOfChunkHit || (this._unconsume(this.consumedAfterSnapshot), this.active = !1)) + } + + _consume() { + return this.consumedAfterSnapshot++, this.preprocessor.advance() + } + + _unconsume(e) { + this.consumedAfterSnapshot -= e, this.preprocessor.retreat(e) + } + + _reconsumeInState(e, t) { + this.state = e, this._callState(t) + } + + _advanceBy(e) { + this.consumedAfterSnapshot += e; + for (let t = 0; t < e; t++) this.preprocessor.advance() + } + + _consumeSequenceIfMatch(e, t) { + return !!this.preprocessor.startsWith(e, t) && (this._advanceBy(e.length - 1), !0) + } + + _createStartTagToken() { + this.currentToken = { + type: Tr.START_TAG, + tagName: "", + tagID: Ur.UNKNOWN, + selfClosing: !1, + ackSelfClosing: !1, + attrs: [], + location: this.getCurrentLocation(1) + } + } + + _createEndTagToken() { + this.currentToken = { + type: Tr.END_TAG, + tagName: "", + tagID: Ur.UNKNOWN, + selfClosing: !1, + ackSelfClosing: !1, + attrs: [], + location: this.getCurrentLocation(2) + } + } + + _createCommentToken(e) { + this.currentToken = {type: Tr.COMMENT, data: "", location: this.getCurrentLocation(e)} + } + + _createDoctypeToken(e) { + this.currentToken = { + type: Tr.DOCTYPE, + name: e, + forceQuirks: !1, + publicId: null, + systemId: null, + location: this.currentLocation + } + } + + _createCharacterToken(e, t) { + this.currentCharacterToken = {type: e, chars: t, location: this.currentLocation} + } + + _createAttr(e) { + this.currentAttr = {name: e, value: ""}, this.currentLocation = this.getCurrentLocation(0) + } + + _leaveAttrName() { + var e, n = this.currentToken; + null === Ar(n, this.currentAttr.name) ? (n.attrs.push(this.currentAttr), n.location && this.currentLocation && ((null != (e = (n = n.location).attrs) ? e : n.attrs = Object.create(null))[this.currentAttr.name] = this.currentLocation, this._leaveAttrValue())) : this._err(_r.duplicateAttribute) + } + + _leaveAttrValue() { + this.currentLocation && (this.currentLocation.endLine = this.preprocessor.line, this.currentLocation.endCol = this.preprocessor.col, this.currentLocation.endOffset = this.preprocessor.offset) + } + + prepareToken(e) { + this._emitCurrentCharacterToken(e.location), this.currentToken = null, e.location && (e.location.endLine = this.preprocessor.line, e.location.endCol = this.preprocessor.col + 1, e.location.endOffset = this.preprocessor.offset + 1), this.currentLocation = this.getCurrentLocation(-1) + } + + emitCurrentTagToken() { + var e = this.currentToken; + this.prepareToken(e), e.tagID = qr(e.tagName), e.type === Tr.START_TAG ? (this.lastStartTagName = e.tagName, this.handler.onStartTag(e)) : (0 < e.attrs.length && this._err(_r.endTagWithAttributes), e.selfClosing && this._err(_r.endTagWithTrailingSolidus), this.handler.onEndTag(e)), this.preprocessor.dropParsedChunk() + } + + emitCurrentComment(e) { + this.prepareToken(e), this.handler.onComment(e), this.preprocessor.dropParsedChunk() + } + + emitCurrentDoctype(e) { + this.prepareToken(e), this.handler.onDoctype(e), this.preprocessor.dropParsedChunk() + } + + _emitCurrentCharacterToken(e) { + if (this.currentCharacterToken) { + switch (e && this.currentCharacterToken.location && (this.currentCharacterToken.location.endLine = e.startLine, this.currentCharacterToken.location.endCol = e.startCol, this.currentCharacterToken.location.endOffset = e.startOffset), this.currentCharacterToken.type) { + case Tr.CHARACTER: + this.handler.onCharacter(this.currentCharacterToken); + break; + case Tr.NULL_CHARACTER: + this.handler.onNullCharacter(this.currentCharacterToken); + break; + case Tr.WHITESPACE_CHARACTER: + this.handler.onWhitespaceCharacter(this.currentCharacterToken) + } + this.currentCharacterToken = null + } + } + + _emitEOFToken() { + var e = this.getCurrentLocation(0); + e && (e.endLine = e.startLine, e.endCol = e.startCol, e.endOffset = e.startOffset), this._emitCurrentCharacterToken(e), this.handler.onEof({ + type: Tr.EOF, + location: e + }), this.active = !1 + } + + _appendCharToCurrentCharacterToken(e, t) { + if (this.currentCharacterToken) { + if (this.currentCharacterToken.type === e) return void (this.currentCharacterToken.chars += t); + this.currentLocation = this.getCurrentLocation(0), this._emitCurrentCharacterToken(this.currentLocation), this.preprocessor.dropParsedChunk() + } + this._createCharacterToken(e, t) + } + + _emitCodePoint(e) { + var t = ii(e) ? Tr.WHITESPACE_CHARACTER : e === ar.NULL ? Tr.NULL_CHARACTER : Tr.CHARACTER; + this._appendCharToCurrentCharacterToken(t, String.fromCodePoint(e)) + } + + _emitChars(e) { + this._appendCharToCurrentCharacterToken(Tr.CHARACTER, e) + } + + _matchNamedCharacterReference(e) { + let t = null, n = 0, r = !1; + for (let s = 0, a = Gr[0]; 0 <= s && !((s = Dr(Gr, a, s + 1, e)) < 0); e = this._consume()) { + n += 1; + var o = (a = Gr[s]) & Rr.VALUE_LENGTH; + if (o) { + const a = (o >> 14) - 1; + if (e !== ar.SEMICOLON && this._isCharacterReferenceInAttribute() && ((o = this.preprocessor.peek(1)) === ar.EQUALS_SIGN || ei(o)) ? (t = [ar.AMPERSAND], s += a) : (t = 0 == a ? [Gr[s] & ~Rr.VALUE_LENGTH] : 1 == a ? [Gr[++s]] : [Gr[++s], Gr[++s]], n = 0, r = e !== ar.SEMICOLON), 0 == a) { + this._consume(); + break + } + } + } + return this._unconsume(n), r && !this.preprocessor.endOfChunkHit && this._err(_r.missingSemicolonAfterCharacterReference), this._unconsume(1), t + } + + _isCharacterReferenceInAttribute() { + return this.returnState === Qr.ATTRIBUTE_VALUE_DOUBLE_QUOTED || this.returnState === Qr.ATTRIBUTE_VALUE_SINGLE_QUOTED || this.returnState === Qr.ATTRIBUTE_VALUE_UNQUOTED + } + + _flushCodePointConsumedAsCharacterReference(e) { + this._isCharacterReferenceInAttribute() ? this.currentAttr.value += String.fromCodePoint(e) : this._emitCodePoint(e) + } + + _callState(e) { + switch (this.state) { + case Qr.DATA: + this._stateData(e); + break; + case Qr.RCDATA: + this._stateRcdata(e); + break; + case Qr.RAWTEXT: + this._stateRawtext(e); + break; + case Qr.SCRIPT_DATA: + this._stateScriptData(e); + break; + case Qr.PLAINTEXT: + this._statePlaintext(e); + break; + case Qr.TAG_OPEN: + this._stateTagOpen(e); + break; + case Qr.END_TAG_OPEN: + this._stateEndTagOpen(e); + break; + case Qr.TAG_NAME: + this._stateTagName(e); + break; + case Qr.RCDATA_LESS_THAN_SIGN: + this._stateRcdataLessThanSign(e); + break; + case Qr.RCDATA_END_TAG_OPEN: + this._stateRcdataEndTagOpen(e); + break; + case Qr.RCDATA_END_TAG_NAME: + this._stateRcdataEndTagName(e); + break; + case Qr.RAWTEXT_LESS_THAN_SIGN: + this._stateRawtextLessThanSign(e); + break; + case Qr.RAWTEXT_END_TAG_OPEN: + this._stateRawtextEndTagOpen(e); + break; + case Qr.RAWTEXT_END_TAG_NAME: + this._stateRawtextEndTagName(e); + break; + case Qr.SCRIPT_DATA_LESS_THAN_SIGN: + this._stateScriptDataLessThanSign(e); + break; + case Qr.SCRIPT_DATA_END_TAG_OPEN: + this._stateScriptDataEndTagOpen(e); + break; + case Qr.SCRIPT_DATA_END_TAG_NAME: + this._stateScriptDataEndTagName(e); + break; + case Qr.SCRIPT_DATA_ESCAPE_START: + this._stateScriptDataEscapeStart(e); + break; + case Qr.SCRIPT_DATA_ESCAPE_START_DASH: + this._stateScriptDataEscapeStartDash(e); + break; + case Qr.SCRIPT_DATA_ESCAPED: + this._stateScriptDataEscaped(e); + break; + case Qr.SCRIPT_DATA_ESCAPED_DASH: + this._stateScriptDataEscapedDash(e); + break; + case Qr.SCRIPT_DATA_ESCAPED_DASH_DASH: + this._stateScriptDataEscapedDashDash(e); + break; + case Qr.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN: + this._stateScriptDataEscapedLessThanSign(e); + break; + case Qr.SCRIPT_DATA_ESCAPED_END_TAG_OPEN: + this._stateScriptDataEscapedEndTagOpen(e); + break; + case Qr.SCRIPT_DATA_ESCAPED_END_TAG_NAME: + this._stateScriptDataEscapedEndTagName(e); + break; + case Qr.SCRIPT_DATA_DOUBLE_ESCAPE_START: + this._stateScriptDataDoubleEscapeStart(e); + break; + case Qr.SCRIPT_DATA_DOUBLE_ESCAPED: + this._stateScriptDataDoubleEscaped(e); + break; + case Qr.SCRIPT_DATA_DOUBLE_ESCAPED_DASH: + this._stateScriptDataDoubleEscapedDash(e); + break; + case Qr.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH: + this._stateScriptDataDoubleEscapedDashDash(e); + break; + case Qr.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN: + this._stateScriptDataDoubleEscapedLessThanSign(e); + break; + case Qr.SCRIPT_DATA_DOUBLE_ESCAPE_END: + this._stateScriptDataDoubleEscapeEnd(e); + break; + case Qr.BEFORE_ATTRIBUTE_NAME: + this._stateBeforeAttributeName(e); + break; + case Qr.ATTRIBUTE_NAME: + this._stateAttributeName(e); + break; + case Qr.AFTER_ATTRIBUTE_NAME: + this._stateAfterAttributeName(e); + break; + case Qr.BEFORE_ATTRIBUTE_VALUE: + this._stateBeforeAttributeValue(e); + break; + case Qr.ATTRIBUTE_VALUE_DOUBLE_QUOTED: + this._stateAttributeValueDoubleQuoted(e); + break; + case Qr.ATTRIBUTE_VALUE_SINGLE_QUOTED: + this._stateAttributeValueSingleQuoted(e); + break; + case Qr.ATTRIBUTE_VALUE_UNQUOTED: + this._stateAttributeValueUnquoted(e); + break; + case Qr.AFTER_ATTRIBUTE_VALUE_QUOTED: + this._stateAfterAttributeValueQuoted(e); + break; + case Qr.SELF_CLOSING_START_TAG: + this._stateSelfClosingStartTag(e); + break; + case Qr.BOGUS_COMMENT: + this._stateBogusComment(e); + break; + case Qr.MARKUP_DECLARATION_OPEN: + this._stateMarkupDeclarationOpen(e); + break; + case Qr.COMMENT_START: + this._stateCommentStart(e); + break; + case Qr.COMMENT_START_DASH: + this._stateCommentStartDash(e); + break; + case Qr.COMMENT: + this._stateComment(e); + break; + case Qr.COMMENT_LESS_THAN_SIGN: + this._stateCommentLessThanSign(e); + break; + case Qr.COMMENT_LESS_THAN_SIGN_BANG: + this._stateCommentLessThanSignBang(e); + break; + case Qr.COMMENT_LESS_THAN_SIGN_BANG_DASH: + this._stateCommentLessThanSignBangDash(e); + break; + case Qr.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH: + this._stateCommentLessThanSignBangDashDash(e); + break; + case Qr.COMMENT_END_DASH: + this._stateCommentEndDash(e); + break; + case Qr.COMMENT_END: + this._stateCommentEnd(e); + break; + case Qr.COMMENT_END_BANG: + this._stateCommentEndBang(e); + break; + case Qr.DOCTYPE: + this._stateDoctype(e); + break; + case Qr.BEFORE_DOCTYPE_NAME: + this._stateBeforeDoctypeName(e); + break; + case Qr.DOCTYPE_NAME: + this._stateDoctypeName(e); + break; + case Qr.AFTER_DOCTYPE_NAME: + this._stateAfterDoctypeName(e); + break; + case Qr.AFTER_DOCTYPE_PUBLIC_KEYWORD: + this._stateAfterDoctypePublicKeyword(e); + break; + case Qr.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER: + this._stateBeforeDoctypePublicIdentifier(e); + break; + case Qr.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED: + this._stateDoctypePublicIdentifierDoubleQuoted(e); + break; + case Qr.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED: + this._stateDoctypePublicIdentifierSingleQuoted(e); + break; + case Qr.AFTER_DOCTYPE_PUBLIC_IDENTIFIER: + this._stateAfterDoctypePublicIdentifier(e); + break; + case Qr.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS: + this._stateBetweenDoctypePublicAndSystemIdentifiers(e); + break; + case Qr.AFTER_DOCTYPE_SYSTEM_KEYWORD: + this._stateAfterDoctypeSystemKeyword(e); + break; + case Qr.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER: + this._stateBeforeDoctypeSystemIdentifier(e); + break; + case Qr.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED: + this._stateDoctypeSystemIdentifierDoubleQuoted(e); + break; + case Qr.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED: + this._stateDoctypeSystemIdentifierSingleQuoted(e); + break; + case Qr.AFTER_DOCTYPE_SYSTEM_IDENTIFIER: + this._stateAfterDoctypeSystemIdentifier(e); + break; + case Qr.BOGUS_DOCTYPE: + this._stateBogusDoctype(e); + break; + case Qr.CDATA_SECTION: + this._stateCdataSection(e); + break; + case Qr.CDATA_SECTION_BRACKET: + this._stateCdataSectionBracket(e); + break; + case Qr.CDATA_SECTION_END: + this._stateCdataSectionEnd(e); + break; + case Qr.CHARACTER_REFERENCE: + this._stateCharacterReference(e); + break; + case Qr.NAMED_CHARACTER_REFERENCE: + this._stateNamedCharacterReference(e); + break; + case Qr.AMBIGUOUS_AMPERSAND: + this._stateAmbiguousAmpersand(e); + break; + case Qr.NUMERIC_CHARACTER_REFERENCE: + this._stateNumericCharacterReference(e); + break; + case Qr.HEXADEMICAL_CHARACTER_REFERENCE_START: + this._stateHexademicalCharacterReferenceStart(e); + break; + case Qr.HEXADEMICAL_CHARACTER_REFERENCE: + this._stateHexademicalCharacterReference(e); + break; + case Qr.DECIMAL_CHARACTER_REFERENCE: + this._stateDecimalCharacterReference(e); + break; + case Qr.NUMERIC_CHARACTER_REFERENCE_END: + this._stateNumericCharacterReferenceEnd(e); + break; + default: + throw new Error("Unknown state") + } + } + + _stateData(e) { + switch (e) { + case ar.LESS_THAN_SIGN: + this.state = Qr.TAG_OPEN; + break; + case ar.AMPERSAND: + this.returnState = Qr.DATA, this.state = Qr.CHARACTER_REFERENCE; + break; + case ar.NULL: + this._err(_r.unexpectedNullCharacter), this._emitCodePoint(e); + break; + case ar.EOF: + this._emitEOFToken(); + break; + default: + this._emitCodePoint(e) + } + } + + _stateRcdata(e) { + switch (e) { + case ar.AMPERSAND: + this.returnState = Qr.RCDATA, this.state = Qr.CHARACTER_REFERENCE; + break; + case ar.LESS_THAN_SIGN: + this.state = Qr.RCDATA_LESS_THAN_SIGN; + break; + case ar.NULL: + this._err(_r.unexpectedNullCharacter), this._emitChars(sr); + break; + case ar.EOF: + this._emitEOFToken(); + break; + default: + this._emitCodePoint(e) + } + } + + _stateRawtext(e) { + switch (e) { + case ar.LESS_THAN_SIGN: + this.state = Qr.RAWTEXT_LESS_THAN_SIGN; + break; + case ar.NULL: + this._err(_r.unexpectedNullCharacter), this._emitChars(sr); + break; + case ar.EOF: + this._emitEOFToken(); + break; + default: + this._emitCodePoint(e) + } + } + + _stateScriptData(e) { + switch (e) { + case ar.LESS_THAN_SIGN: + this.state = Qr.SCRIPT_DATA_LESS_THAN_SIGN; + break; + case ar.NULL: + this._err(_r.unexpectedNullCharacter), this._emitChars(sr); + break; + case ar.EOF: + this._emitEOFToken(); + break; + default: + this._emitCodePoint(e) + } + } + + _statePlaintext(e) { + switch (e) { + case ar.NULL: + this._err(_r.unexpectedNullCharacter), this._emitChars(sr); + break; + case ar.EOF: + this._emitEOFToken(); + break; + default: + this._emitCodePoint(e) + } + } + + _stateTagOpen(e) { + if (Jr(e)) this._createStartTagToken(), this.state = Qr.TAG_NAME, this._stateTagName(e); else switch (e) { + case ar.EXCLAMATION_MARK: + this.state = Qr.MARKUP_DECLARATION_OPEN; + break; + case ar.SOLIDUS: + this.state = Qr.END_TAG_OPEN; + break; + case ar.QUESTION_MARK: + this._err(_r.unexpectedQuestionMarkInsteadOfTagName), this._createCommentToken(1), this.state = Qr.BOGUS_COMMENT, this._stateBogusComment(e); + break; + case ar.EOF: + this._err(_r.eofBeforeTagName), this._emitChars("<"), this._emitEOFToken(); + break; + default: + this._err(_r.invalidFirstCharacterOfTagName), this._emitChars("<"), this.state = Qr.DATA, this._stateData(e) + } + } + + _stateEndTagOpen(e) { + if (Jr(e)) this._createEndTagToken(), this.state = Qr.TAG_NAME, this._stateTagName(e); else switch (e) { + case ar.GREATER_THAN_SIGN: + this._err(_r.missingEndTagName), this.state = Qr.DATA; + break; + case ar.EOF: + this._err(_r.eofBeforeTagName), this._emitChars(""); + break; + case ar.NULL: + this._err(_r.unexpectedNullCharacter), this.state = Qr.SCRIPT_DATA_ESCAPED, this._emitChars(sr); + break; + case ar.EOF: + this._err(_r.eofInScriptHtmlCommentLikeText), this._emitEOFToken(); + break; + default: + this.state = Qr.SCRIPT_DATA_ESCAPED, this._emitCodePoint(e) + } + } + + _stateScriptDataEscapedLessThanSign(e) { + e === ar.SOLIDUS ? this.state = Qr.SCRIPT_DATA_ESCAPED_END_TAG_OPEN : Jr(e) ? (this._emitChars("<"), this.state = Qr.SCRIPT_DATA_DOUBLE_ESCAPE_START, this._stateScriptDataDoubleEscapeStart(e)) : (this._emitChars("<"), this.state = Qr.SCRIPT_DATA_ESCAPED, this._stateScriptDataEscaped(e)) + } + + _stateScriptDataEscapedEndTagOpen(e) { + Jr(e) ? (this.state = Qr.SCRIPT_DATA_ESCAPED_END_TAG_NAME, this._stateScriptDataEscapedEndTagName(e)) : (this._emitChars(""); + break; + case ar.NULL: + this._err(_r.unexpectedNullCharacter), this.state = Qr.SCRIPT_DATA_DOUBLE_ESCAPED, this._emitChars(sr); + break; + case ar.EOF: + this._err(_r.eofInScriptHtmlCommentLikeText), this._emitEOFToken(); + break; + default: + this.state = Qr.SCRIPT_DATA_DOUBLE_ESCAPED, this._emitCodePoint(e) + } + } + + _stateScriptDataDoubleEscapedLessThanSign(e) { + e === ar.SOLIDUS ? (this.state = Qr.SCRIPT_DATA_DOUBLE_ESCAPE_END, this._emitChars("/")) : (this.state = Qr.SCRIPT_DATA_DOUBLE_ESCAPED, this._stateScriptDataDoubleEscaped(e)) + } + + _stateScriptDataDoubleEscapeEnd(e) { + if (this.preprocessor.startsWith(lr, !1) && si(this.preprocessor.peek(lr.length))) { + this._emitCodePoint(e); + for (let e = 0; e < lr.length; e++) this._emitCodePoint(this._consume()); + this.state = Qr.SCRIPT_DATA_ESCAPED + } else this._ensureHibernation() || (this.state = Qr.SCRIPT_DATA_DOUBLE_ESCAPED, this._stateScriptDataDoubleEscaped(e)) + } + + _stateBeforeAttributeName(e) { + switch (e) { + case ar.SPACE: + case ar.LINE_FEED: + case ar.TABULATION: + case ar.FORM_FEED: + break; + case ar.SOLIDUS: + case ar.GREATER_THAN_SIGN: + case ar.EOF: + this.state = Qr.AFTER_ATTRIBUTE_NAME, this._stateAfterAttributeName(e); + break; + case ar.EQUALS_SIGN: + this._err(_r.unexpectedEqualsSignBeforeAttributeName), this._createAttr("="), this.state = Qr.ATTRIBUTE_NAME; + break; + default: + this._createAttr(""), this.state = Qr.ATTRIBUTE_NAME, this._stateAttributeName(e) + } + } + + _stateAttributeName(e) { + switch (e) { + case ar.SPACE: + case ar.LINE_FEED: + case ar.TABULATION: + case ar.FORM_FEED: + case ar.SOLIDUS: + case ar.GREATER_THAN_SIGN: + case ar.EOF: + this._leaveAttrName(), this.state = Qr.AFTER_ATTRIBUTE_NAME, this._stateAfterAttributeName(e); + break; + case ar.EQUALS_SIGN: + this._leaveAttrName(), this.state = Qr.BEFORE_ATTRIBUTE_VALUE; + break; + case ar.QUOTATION_MARK: + case ar.APOSTROPHE: + case ar.LESS_THAN_SIGN: + this._err(_r.unexpectedCharacterInAttributeName), this.currentAttr.name += String.fromCodePoint(e); + break; + case ar.NULL: + this._err(_r.unexpectedNullCharacter), this.currentAttr.name += sr; + break; + default: + this.currentAttr.name += String.fromCodePoint(Zr(e) ? ri(e) : e) + } + } + + _stateAfterAttributeName(e) { + switch (e) { + case ar.SPACE: + case ar.LINE_FEED: + case ar.TABULATION: + case ar.FORM_FEED: + break; + case ar.SOLIDUS: + this.state = Qr.SELF_CLOSING_START_TAG; + break; + case ar.EQUALS_SIGN: + this.state = Qr.BEFORE_ATTRIBUTE_VALUE; + break; + case ar.GREATER_THAN_SIGN: + this.state = Qr.DATA, this.emitCurrentTagToken(); + break; + case ar.EOF: + this._err(_r.eofInTag), this._emitEOFToken(); + break; + default: + this._createAttr(""), this.state = Qr.ATTRIBUTE_NAME, this._stateAttributeName(e) + } + } + + _stateBeforeAttributeValue(e) { + switch (e) { + case ar.SPACE: + case ar.LINE_FEED: + case ar.TABULATION: + case ar.FORM_FEED: + break; + case ar.QUOTATION_MARK: + this.state = Qr.ATTRIBUTE_VALUE_DOUBLE_QUOTED; + break; + case ar.APOSTROPHE: + this.state = Qr.ATTRIBUTE_VALUE_SINGLE_QUOTED; + break; + case ar.GREATER_THAN_SIGN: + this._err(_r.missingAttributeValue), this.state = Qr.DATA, this.emitCurrentTagToken(); + break; + default: + this.state = Qr.ATTRIBUTE_VALUE_UNQUOTED, this._stateAttributeValueUnquoted(e) + } + } + + _stateAttributeValueDoubleQuoted(e) { + switch (e) { + case ar.QUOTATION_MARK: + this.state = Qr.AFTER_ATTRIBUTE_VALUE_QUOTED; + break; + case ar.AMPERSAND: + this.returnState = Qr.ATTRIBUTE_VALUE_DOUBLE_QUOTED, this.state = Qr.CHARACTER_REFERENCE; + break; + case ar.NULL: + this._err(_r.unexpectedNullCharacter), this.currentAttr.value += sr; + break; + case ar.EOF: + this._err(_r.eofInTag), this._emitEOFToken(); + break; + default: + this.currentAttr.value += String.fromCodePoint(e) + } + } + + _stateAttributeValueSingleQuoted(e) { + switch (e) { + case ar.APOSTROPHE: + this.state = Qr.AFTER_ATTRIBUTE_VALUE_QUOTED; + break; + case ar.AMPERSAND: + this.returnState = Qr.ATTRIBUTE_VALUE_SINGLE_QUOTED, this.state = Qr.CHARACTER_REFERENCE; + break; + case ar.NULL: + this._err(_r.unexpectedNullCharacter), this.currentAttr.value += sr; + break; + case ar.EOF: + this._err(_r.eofInTag), this._emitEOFToken(); + break; + default: + this.currentAttr.value += String.fromCodePoint(e) + } + } + + _stateAttributeValueUnquoted(e) { + switch (e) { + case ar.SPACE: + case ar.LINE_FEED: + case ar.TABULATION: + case ar.FORM_FEED: + this._leaveAttrValue(), this.state = Qr.BEFORE_ATTRIBUTE_NAME; + break; + case ar.AMPERSAND: + this.returnState = Qr.ATTRIBUTE_VALUE_UNQUOTED, this.state = Qr.CHARACTER_REFERENCE; + break; + case ar.GREATER_THAN_SIGN: + this._leaveAttrValue(), this.state = Qr.DATA, this.emitCurrentTagToken(); + break; + case ar.NULL: + this._err(_r.unexpectedNullCharacter), this.currentAttr.value += sr; + break; + case ar.QUOTATION_MARK: + case ar.APOSTROPHE: + case ar.LESS_THAN_SIGN: + case ar.EQUALS_SIGN: + case ar.GRAVE_ACCENT: + this._err(_r.unexpectedCharacterInUnquotedAttributeValue), this.currentAttr.value += String.fromCodePoint(e); + break; + case ar.EOF: + this._err(_r.eofInTag), this._emitEOFToken(); + break; + default: + this.currentAttr.value += String.fromCodePoint(e) + } + } + + _stateAfterAttributeValueQuoted(e) { + switch (e) { + case ar.SPACE: + case ar.LINE_FEED: + case ar.TABULATION: + case ar.FORM_FEED: + this._leaveAttrValue(), this.state = Qr.BEFORE_ATTRIBUTE_NAME; + break; + case ar.SOLIDUS: + this._leaveAttrValue(), this.state = Qr.SELF_CLOSING_START_TAG; + break; + case ar.GREATER_THAN_SIGN: + this._leaveAttrValue(), this.state = Qr.DATA, this.emitCurrentTagToken(); + break; + case ar.EOF: + this._err(_r.eofInTag), this._emitEOFToken(); + break; + default: + this._err(_r.missingWhitespaceBetweenAttributes), this.state = Qr.BEFORE_ATTRIBUTE_NAME, this._stateBeforeAttributeName(e) + } + } + + _stateSelfClosingStartTag(e) { + switch (e) { + case ar.GREATER_THAN_SIGN: + this.currentToken.selfClosing = !0, this.state = Qr.DATA, this.emitCurrentTagToken(); + break; + case ar.EOF: + this._err(_r.eofInTag), this._emitEOFToken(); + break; + default: + this._err(_r.unexpectedSolidusInTag), this.state = Qr.BEFORE_ATTRIBUTE_NAME, this._stateBeforeAttributeName(e) + } + } + + _stateBogusComment(e) { + var t = this.currentToken; + switch (e) { + case ar.GREATER_THAN_SIGN: + this.state = Qr.DATA, this.emitCurrentComment(t); + break; + case ar.EOF: + this.emitCurrentComment(t), this._emitEOFToken(); + break; + case ar.NULL: + this._err(_r.unexpectedNullCharacter), t.data += sr; + break; + default: + t.data += String.fromCodePoint(e) + } + } + + _stateMarkupDeclarationOpen(e) { + this._consumeSequenceIfMatch(or, !0) ? (this._createCommentToken(or.length + 1), this.state = Qr.COMMENT_START) : this._consumeSequenceIfMatch(ur, !1) ? (this.currentLocation = this.getCurrentLocation(ur.length + 1), this.state = Qr.DOCTYPE) : this._consumeSequenceIfMatch(cr, !0) ? this.inForeignNode ? this.state = Qr.CDATA_SECTION : (this._err(_r.cdataInHtmlContent), this._createCommentToken(cr.length + 1), this.currentToken.data = "[CDATA[", this.state = Qr.BOGUS_COMMENT) : this._ensureHibernation() || (this._err(_r.incorrectlyOpenedComment), this._createCommentToken(2), this.state = Qr.BOGUS_COMMENT, this._stateBogusComment(e)) + } + + _stateCommentStart(e) { + switch (e) { + case ar.HYPHEN_MINUS: + this.state = Qr.COMMENT_START_DASH; + break; + case ar.GREATER_THAN_SIGN: { + this._err(_r.abruptClosingOfEmptyComment), this.state = Qr.DATA; + const e = this.currentToken; + this.emitCurrentComment(e); + break + } + default: + this.state = Qr.COMMENT, this._stateComment(e) + } + } + + _stateCommentStartDash(e) { + var t = this.currentToken; + switch (e) { + case ar.HYPHEN_MINUS: + this.state = Qr.COMMENT_END; + break; + case ar.GREATER_THAN_SIGN: + this._err(_r.abruptClosingOfEmptyComment), this.state = Qr.DATA, this.emitCurrentComment(t); + break; + case ar.EOF: + this._err(_r.eofInComment), this.emitCurrentComment(t), this._emitEOFToken(); + break; + default: + t.data += "-", this.state = Qr.COMMENT, this._stateComment(e) + } + } + + _stateComment(e) { + var t = this.currentToken; + switch (e) { + case ar.HYPHEN_MINUS: + this.state = Qr.COMMENT_END_DASH; + break; + case ar.LESS_THAN_SIGN: + t.data += "<", this.state = Qr.COMMENT_LESS_THAN_SIGN; + break; + case ar.NULL: + this._err(_r.unexpectedNullCharacter), t.data += sr; + break; + case ar.EOF: + this._err(_r.eofInComment), this.emitCurrentComment(t), this._emitEOFToken(); + break; + default: + t.data += String.fromCodePoint(e) + } + } + + _stateCommentLessThanSign(e) { + var t = this.currentToken; + switch (e) { + case ar.EXCLAMATION_MARK: + t.data += "!", this.state = Qr.COMMENT_LESS_THAN_SIGN_BANG; + break; + case ar.LESS_THAN_SIGN: + t.data += "<"; + break; + default: + this.state = Qr.COMMENT, this._stateComment(e) + } + } + + _stateCommentLessThanSignBang(e) { + e === ar.HYPHEN_MINUS ? this.state = Qr.COMMENT_LESS_THAN_SIGN_BANG_DASH : (this.state = Qr.COMMENT, this._stateComment(e)) + } + + _stateCommentLessThanSignBangDash(e) { + e === ar.HYPHEN_MINUS ? this.state = Qr.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH : (this.state = Qr.COMMENT_END_DASH, this._stateCommentEndDash(e)) + } + + _stateCommentLessThanSignBangDashDash(e) { + e !== ar.GREATER_THAN_SIGN && e !== ar.EOF && this._err(_r.nestedComment), this.state = Qr.COMMENT_END, this._stateCommentEnd(e) + } + + _stateCommentEndDash(e) { + var t = this.currentToken; + switch (e) { + case ar.HYPHEN_MINUS: + this.state = Qr.COMMENT_END; + break; + case ar.EOF: + this._err(_r.eofInComment), this.emitCurrentComment(t), this._emitEOFToken(); + break; + default: + t.data += "-", this.state = Qr.COMMENT, this._stateComment(e) + } + } + + _stateCommentEnd(e) { + var t = this.currentToken; + switch (e) { + case ar.GREATER_THAN_SIGN: + this.state = Qr.DATA, this.emitCurrentComment(t); + break; + case ar.EXCLAMATION_MARK: + this.state = Qr.COMMENT_END_BANG; + break; + case ar.HYPHEN_MINUS: + t.data += "-"; + break; + case ar.EOF: + this._err(_r.eofInComment), this.emitCurrentComment(t), this._emitEOFToken(); + break; + default: + t.data += "--", this.state = Qr.COMMENT, this._stateComment(e) + } + } + + _stateCommentEndBang(e) { + var t = this.currentToken; + switch (e) { + case ar.HYPHEN_MINUS: + t.data += "--!", this.state = Qr.COMMENT_END_DASH; + break; + case ar.GREATER_THAN_SIGN: + this._err(_r.incorrectlyClosedComment), this.state = Qr.DATA, this.emitCurrentComment(t); + break; + case ar.EOF: + this._err(_r.eofInComment), this.emitCurrentComment(t), this._emitEOFToken(); + break; + default: + t.data += "--!", this.state = Qr.COMMENT, this._stateComment(e) + } + } + + _stateDoctype(e) { + switch (e) { + case ar.SPACE: + case ar.LINE_FEED: + case ar.TABULATION: + case ar.FORM_FEED: + this.state = Qr.BEFORE_DOCTYPE_NAME; + break; + case ar.GREATER_THAN_SIGN: + this.state = Qr.BEFORE_DOCTYPE_NAME, this._stateBeforeDoctypeName(e); + break; + case ar.EOF: { + this._err(_r.eofInDoctype), this._createDoctypeToken(null); + const e = this.currentToken; + e.forceQuirks = !0, this.emitCurrentDoctype(e), this._emitEOFToken(); + break + } + default: + this._err(_r.missingWhitespaceBeforeDoctypeName), this.state = Qr.BEFORE_DOCTYPE_NAME, this._stateBeforeDoctypeName(e) + } + } + + _stateBeforeDoctypeName(e) { + if (Zr(e)) this._createDoctypeToken(String.fromCharCode(ri(e))), this.state = Qr.DOCTYPE_NAME; else switch (e) { + case ar.SPACE: + case ar.LINE_FEED: + case ar.TABULATION: + case ar.FORM_FEED: + break; + case ar.NULL: + this._err(_r.unexpectedNullCharacter), this._createDoctypeToken(sr), this.state = Qr.DOCTYPE_NAME; + break; + case ar.GREATER_THAN_SIGN: { + this._err(_r.missingDoctypeName), this._createDoctypeToken(null); + const e = this.currentToken; + e.forceQuirks = !0, this.emitCurrentDoctype(e), this.state = Qr.DATA; + break + } + case ar.EOF: { + this._err(_r.eofInDoctype), this._createDoctypeToken(null); + const e = this.currentToken; + e.forceQuirks = !0, this.emitCurrentDoctype(e), this._emitEOFToken(); + break + } + default: + this._createDoctypeToken(String.fromCodePoint(e)), this.state = Qr.DOCTYPE_NAME + } + } + + _stateDoctypeName(e) { + var t = this.currentToken; + switch (e) { + case ar.SPACE: + case ar.LINE_FEED: + case ar.TABULATION: + case ar.FORM_FEED: + this.state = Qr.AFTER_DOCTYPE_NAME; + break; + case ar.GREATER_THAN_SIGN: + this.state = Qr.DATA, this.emitCurrentDoctype(t); + break; + case ar.NULL: + this._err(_r.unexpectedNullCharacter), t.name += sr; + break; + case ar.EOF: + this._err(_r.eofInDoctype), t.forceQuirks = !0, this.emitCurrentDoctype(t), this._emitEOFToken(); + break; + default: + t.name += String.fromCodePoint(Zr(e) ? ri(e) : e) + } + } + + _stateAfterDoctypeName(e) { + var t = this.currentToken; + switch (e) { + case ar.SPACE: + case ar.LINE_FEED: + case ar.TABULATION: + case ar.FORM_FEED: + break; + case ar.GREATER_THAN_SIGN: + this.state = Qr.DATA, this.emitCurrentDoctype(t); + break; + case ar.EOF: + this._err(_r.eofInDoctype), t.forceQuirks = !0, this.emitCurrentDoctype(t), this._emitEOFToken(); + break; + default: + this._consumeSequenceIfMatch(hr, !1) ? this.state = Qr.AFTER_DOCTYPE_PUBLIC_KEYWORD : this._consumeSequenceIfMatch(fr, !1) ? this.state = Qr.AFTER_DOCTYPE_SYSTEM_KEYWORD : this._ensureHibernation() || (this._err(_r.invalidCharacterSequenceAfterDoctypeName), t.forceQuirks = !0, this.state = Qr.BOGUS_DOCTYPE, this._stateBogusDoctype(e)) + } + } + + _stateAfterDoctypePublicKeyword(e) { + var t = this.currentToken; + switch (e) { + case ar.SPACE: + case ar.LINE_FEED: + case ar.TABULATION: + case ar.FORM_FEED: + this.state = Qr.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER; + break; + case ar.QUOTATION_MARK: + this._err(_r.missingWhitespaceAfterDoctypePublicKeyword), t.publicId = "", this.state = Qr.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED; + break; + case ar.APOSTROPHE: + this._err(_r.missingWhitespaceAfterDoctypePublicKeyword), t.publicId = "", this.state = Qr.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED; + break; + case ar.GREATER_THAN_SIGN: + this._err(_r.missingDoctypePublicIdentifier), t.forceQuirks = !0, this.state = Qr.DATA, this.emitCurrentDoctype(t); + break; + case ar.EOF: + this._err(_r.eofInDoctype), t.forceQuirks = !0, this.emitCurrentDoctype(t), this._emitEOFToken(); + break; + default: + this._err(_r.missingQuoteBeforeDoctypePublicIdentifier), t.forceQuirks = !0, this.state = Qr.BOGUS_DOCTYPE, this._stateBogusDoctype(e) + } + } + + _stateBeforeDoctypePublicIdentifier(e) { + var t = this.currentToken; + switch (e) { + case ar.SPACE: + case ar.LINE_FEED: + case ar.TABULATION: + case ar.FORM_FEED: + break; + case ar.QUOTATION_MARK: + t.publicId = "", this.state = Qr.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED; + break; + case ar.APOSTROPHE: + t.publicId = "", this.state = Qr.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED; + break; + case ar.GREATER_THAN_SIGN: + this._err(_r.missingDoctypePublicIdentifier), t.forceQuirks = !0, this.state = Qr.DATA, this.emitCurrentDoctype(t); + break; + case ar.EOF: + this._err(_r.eofInDoctype), t.forceQuirks = !0, this.emitCurrentDoctype(t), this._emitEOFToken(); + break; + default: + this._err(_r.missingQuoteBeforeDoctypePublicIdentifier), t.forceQuirks = !0, this.state = Qr.BOGUS_DOCTYPE, this._stateBogusDoctype(e) + } + } + + _stateDoctypePublicIdentifierDoubleQuoted(e) { + var t = this.currentToken; + switch (e) { + case ar.QUOTATION_MARK: + this.state = Qr.AFTER_DOCTYPE_PUBLIC_IDENTIFIER; + break; + case ar.NULL: + this._err(_r.unexpectedNullCharacter), t.publicId += sr; + break; + case ar.GREATER_THAN_SIGN: + this._err(_r.abruptDoctypePublicIdentifier), t.forceQuirks = !0, this.emitCurrentDoctype(t), this.state = Qr.DATA; + break; + case ar.EOF: + this._err(_r.eofInDoctype), t.forceQuirks = !0, this.emitCurrentDoctype(t), this._emitEOFToken(); + break; + default: + t.publicId += String.fromCodePoint(e) + } + } + + _stateDoctypePublicIdentifierSingleQuoted(e) { + var t = this.currentToken; + switch (e) { + case ar.APOSTROPHE: + this.state = Qr.AFTER_DOCTYPE_PUBLIC_IDENTIFIER; + break; + case ar.NULL: + this._err(_r.unexpectedNullCharacter), t.publicId += sr; + break; + case ar.GREATER_THAN_SIGN: + this._err(_r.abruptDoctypePublicIdentifier), t.forceQuirks = !0, this.emitCurrentDoctype(t), this.state = Qr.DATA; + break; + case ar.EOF: + this._err(_r.eofInDoctype), t.forceQuirks = !0, this.emitCurrentDoctype(t), this._emitEOFToken(); + break; + default: + t.publicId += String.fromCodePoint(e) + } + } + + _stateAfterDoctypePublicIdentifier(e) { + var t = this.currentToken; + switch (e) { + case ar.SPACE: + case ar.LINE_FEED: + case ar.TABULATION: + case ar.FORM_FEED: + this.state = Qr.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS; + break; + case ar.GREATER_THAN_SIGN: + this.state = Qr.DATA, this.emitCurrentDoctype(t); + break; + case ar.QUOTATION_MARK: + this._err(_r.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers), t.systemId = "", this.state = Qr.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED; + break; + case ar.APOSTROPHE: + this._err(_r.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers), t.systemId = "", this.state = Qr.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED; + break; + case ar.EOF: + this._err(_r.eofInDoctype), t.forceQuirks = !0, this.emitCurrentDoctype(t), this._emitEOFToken(); + break; + default: + this._err(_r.missingQuoteBeforeDoctypeSystemIdentifier), t.forceQuirks = !0, this.state = Qr.BOGUS_DOCTYPE, this._stateBogusDoctype(e) + } + } + + _stateBetweenDoctypePublicAndSystemIdentifiers(e) { + var t = this.currentToken; + switch (e) { + case ar.SPACE: + case ar.LINE_FEED: + case ar.TABULATION: + case ar.FORM_FEED: + break; + case ar.GREATER_THAN_SIGN: + this.emitCurrentDoctype(t), this.state = Qr.DATA; + break; + case ar.QUOTATION_MARK: + t.systemId = "", this.state = Qr.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED; + break; + case ar.APOSTROPHE: + t.systemId = "", this.state = Qr.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED; + break; + case ar.EOF: + this._err(_r.eofInDoctype), t.forceQuirks = !0, this.emitCurrentDoctype(t), this._emitEOFToken(); + break; + default: + this._err(_r.missingQuoteBeforeDoctypeSystemIdentifier), t.forceQuirks = !0, this.state = Qr.BOGUS_DOCTYPE, this._stateBogusDoctype(e) + } + } + + _stateAfterDoctypeSystemKeyword(e) { + var t = this.currentToken; + switch (e) { + case ar.SPACE: + case ar.LINE_FEED: + case ar.TABULATION: + case ar.FORM_FEED: + this.state = Qr.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER; + break; + case ar.QUOTATION_MARK: + this._err(_r.missingWhitespaceAfterDoctypeSystemKeyword), t.systemId = "", this.state = Qr.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED; + break; + case ar.APOSTROPHE: + this._err(_r.missingWhitespaceAfterDoctypeSystemKeyword), t.systemId = "", this.state = Qr.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED; + break; + case ar.GREATER_THAN_SIGN: + this._err(_r.missingDoctypeSystemIdentifier), t.forceQuirks = !0, this.state = Qr.DATA, this.emitCurrentDoctype(t); + break; + case ar.EOF: + this._err(_r.eofInDoctype), t.forceQuirks = !0, this.emitCurrentDoctype(t), this._emitEOFToken(); + break; + default: + this._err(_r.missingQuoteBeforeDoctypeSystemIdentifier), t.forceQuirks = !0, this.state = Qr.BOGUS_DOCTYPE, this._stateBogusDoctype(e) + } + } + + _stateBeforeDoctypeSystemIdentifier(e) { + var t = this.currentToken; + switch (e) { + case ar.SPACE: + case ar.LINE_FEED: + case ar.TABULATION: + case ar.FORM_FEED: + break; + case ar.QUOTATION_MARK: + t.systemId = "", this.state = Qr.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED; + break; + case ar.APOSTROPHE: + t.systemId = "", this.state = Qr.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED; + break; + case ar.GREATER_THAN_SIGN: + this._err(_r.missingDoctypeSystemIdentifier), t.forceQuirks = !0, this.state = Qr.DATA, this.emitCurrentDoctype(t); + break; + case ar.EOF: + this._err(_r.eofInDoctype), t.forceQuirks = !0, this.emitCurrentDoctype(t), this._emitEOFToken(); + break; + default: + this._err(_r.missingQuoteBeforeDoctypeSystemIdentifier), t.forceQuirks = !0, this.state = Qr.BOGUS_DOCTYPE, this._stateBogusDoctype(e) + } + } + + _stateDoctypeSystemIdentifierDoubleQuoted(e) { + var t = this.currentToken; + switch (e) { + case ar.QUOTATION_MARK: + this.state = Qr.AFTER_DOCTYPE_SYSTEM_IDENTIFIER; + break; + case ar.NULL: + this._err(_r.unexpectedNullCharacter), t.systemId += sr; + break; + case ar.GREATER_THAN_SIGN: + this._err(_r.abruptDoctypeSystemIdentifier), t.forceQuirks = !0, this.emitCurrentDoctype(t), this.state = Qr.DATA; + break; + case ar.EOF: + this._err(_r.eofInDoctype), t.forceQuirks = !0, this.emitCurrentDoctype(t), this._emitEOFToken(); + break; + default: + t.systemId += String.fromCodePoint(e) + } + } + + _stateDoctypeSystemIdentifierSingleQuoted(e) { + var t = this.currentToken; + switch (e) { + case ar.APOSTROPHE: + this.state = Qr.AFTER_DOCTYPE_SYSTEM_IDENTIFIER; + break; + case ar.NULL: + this._err(_r.unexpectedNullCharacter), t.systemId += sr; + break; + case ar.GREATER_THAN_SIGN: + this._err(_r.abruptDoctypeSystemIdentifier), t.forceQuirks = !0, this.emitCurrentDoctype(t), this.state = Qr.DATA; + break; + case ar.EOF: + this._err(_r.eofInDoctype), t.forceQuirks = !0, this.emitCurrentDoctype(t), this._emitEOFToken(); + break; + default: + t.systemId += String.fromCodePoint(e) + } + } + + _stateAfterDoctypeSystemIdentifier(e) { + var t = this.currentToken; + switch (e) { + case ar.SPACE: + case ar.LINE_FEED: + case ar.TABULATION: + case ar.FORM_FEED: + break; + case ar.GREATER_THAN_SIGN: + this.emitCurrentDoctype(t), this.state = Qr.DATA; + break; + case ar.EOF: + this._err(_r.eofInDoctype), t.forceQuirks = !0, this.emitCurrentDoctype(t), this._emitEOFToken(); + break; + default: + this._err(_r.unexpectedCharacterAfterDoctypeSystemIdentifier), this.state = Qr.BOGUS_DOCTYPE, this._stateBogusDoctype(e) + } + } + + _stateBogusDoctype(e) { + var t = this.currentToken; + switch (e) { + case ar.GREATER_THAN_SIGN: + this.emitCurrentDoctype(t), this.state = Qr.DATA; + break; + case ar.NULL: + this._err(_r.unexpectedNullCharacter); + break; + case ar.EOF: + this.emitCurrentDoctype(t), this._emitEOFToken() + } + } + + _stateCdataSection(e) { + switch (e) { + case ar.RIGHT_SQUARE_BRACKET: + this.state = Qr.CDATA_SECTION_BRACKET; + break; + case ar.EOF: + this._err(_r.eofInCdata), this._emitEOFToken(); + break; + default: + this._emitCodePoint(e) + } + } + + _stateCdataSectionBracket(e) { + e === ar.RIGHT_SQUARE_BRACKET ? this.state = Qr.CDATA_SECTION_END : (this._emitChars("]"), this.state = Qr.CDATA_SECTION, this._stateCdataSection(e)) + } + + _stateCdataSectionEnd(e) { + switch (e) { + case ar.GREATER_THAN_SIGN: + this.state = Qr.DATA; + break; + case ar.RIGHT_SQUARE_BRACKET: + this._emitChars("]"); + break; + default: + this._emitChars("]]"), this.state = Qr.CDATA_SECTION, this._stateCdataSection(e) + } + } + + _stateCharacterReference(e) { + e === ar.NUMBER_SIGN ? this.state = Qr.NUMERIC_CHARACTER_REFERENCE : ei(e) ? (this.state = Qr.NAMED_CHARACTER_REFERENCE, this._stateNamedCharacterReference(e)) : (this._flushCodePointConsumedAsCharacterReference(ar.AMPERSAND), this._reconsumeInState(this.returnState, e)) + } + + _stateNamedCharacterReference(e) { + var t = this._matchNamedCharacterReference(e); + if (!this._ensureHibernation()) if (t) { + for (let e = 0; e < t.length; e++) this._flushCodePointConsumedAsCharacterReference(t[e]); + this.state = this.returnState + } else this._flushCodePointConsumedAsCharacterReference(ar.AMPERSAND), this.state = Qr.AMBIGUOUS_AMPERSAND + } + + _stateAmbiguousAmpersand(e) { + ei(e) ? this._flushCodePointConsumedAsCharacterReference(e) : (e === ar.SEMICOLON && this._err(_r.unknownNamedCharacterReference), this._reconsumeInState(this.returnState, e)) + } + + _stateNumericCharacterReference(e) { + this.charRefCode = 0, e === ar.LATIN_SMALL_X || e === ar.LATIN_CAPITAL_X ? this.state = Qr.HEXADEMICAL_CHARACTER_REFERENCE_START : Xr(e) ? (this.state = Qr.DECIMAL_CHARACTER_REFERENCE, this._stateDecimalCharacterReference(e)) : (this._err(_r.absenceOfDigitsInNumericCharacterReference), this._flushCodePointConsumedAsCharacterReference(ar.AMPERSAND), this._flushCodePointConsumedAsCharacterReference(ar.NUMBER_SIGN), this._reconsumeInState(this.returnState, e)) + } + + _stateHexademicalCharacterReferenceStart(e) { + !function (e) { + return Xr(e) || ti(e) || ni(e) + }(e) ? (this._err(_r.absenceOfDigitsInNumericCharacterReference), this._flushCodePointConsumedAsCharacterReference(ar.AMPERSAND), this._flushCodePointConsumedAsCharacterReference(ar.NUMBER_SIGN), this._unconsume(2), this.state = this.returnState) : (this.state = Qr.HEXADEMICAL_CHARACTER_REFERENCE, this._stateHexademicalCharacterReference(e)) + } + + _stateHexademicalCharacterReference(e) { + ti(e) ? this.charRefCode = 16 * this.charRefCode + e - 55 : ni(e) ? this.charRefCode = 16 * this.charRefCode + e - 87 : Xr(e) ? this.charRefCode = 16 * this.charRefCode + e - 48 : e === ar.SEMICOLON ? this.state = Qr.NUMERIC_CHARACTER_REFERENCE_END : (this._err(_r.missingSemicolonAfterCharacterReference), this.state = Qr.NUMERIC_CHARACTER_REFERENCE_END, this._stateNumericCharacterReferenceEnd(e)) + } + + _stateDecimalCharacterReference(e) { + Xr(e) ? this.charRefCode = 10 * this.charRefCode + e - 48 : e === ar.SEMICOLON ? this.state = Qr.NUMERIC_CHARACTER_REFERENCE_END : (this._err(_r.missingSemicolonAfterCharacterReference), this.state = Qr.NUMERIC_CHARACTER_REFERENCE_END, this._stateNumericCharacterReferenceEnd(e)) + } + + _stateNumericCharacterReferenceEnd(e) { + if (this.charRefCode === ar.NULL) this._err(_r.nullCharacterReference), this.charRefCode = ar.REPLACEMENT_CHARACTER; else if (1114111 < this.charRefCode) this._err(_r.characterReferenceOutsideUnicodeRange), this.charRefCode = ar.REPLACEMENT_CHARACTER; else if (pr(this.charRefCode)) this._err(_r.surrogateCharacterReference), this.charRefCode = ar.REPLACEMENT_CHARACTER; else if (mr(this.charRefCode)) this._err(_r.noncharacterCharacterReference); else if (dr(this.charRefCode) || this.charRefCode === ar.CARRIAGE_RETURN) { + this._err(_r.controlCharacterReference); + const e = $r.get(this.charRefCode); + void 0 !== e && (this.charRefCode = e) + } + this._flushCodePointConsumedAsCharacterReference(this.charRefCode), this._reconsumeInState(this.returnState, e) + } +} + +const oi = new Set([Ur.DD, Ur.DT, Ur.LI, Ur.OPTGROUP, Ur.OPTION, Ur.P, Ur.RB, Ur.RP, Ur.RT, Ur.RTC]), + ci = new Set([...oi, Ur.CAPTION, Ur.COLGROUP, Ur.TBODY, Ur.TD, Ur.TFOOT, Ur.TH, Ur.THEAD, Ur.TR]), + ui = new Map([[Ur.APPLET, Mr.HTML], [Ur.CAPTION, Mr.HTML], [Ur.HTML, Mr.HTML], [Ur.MARQUEE, Mr.HTML], [Ur.OBJECT, Mr.HTML], [Ur.TABLE, Mr.HTML], [Ur.TD, Mr.HTML], [Ur.TEMPLATE, Mr.HTML], [Ur.TH, Mr.HTML], [Ur.ANNOTATION_XML, Mr.MATHML], [Ur.MI, Mr.MATHML], [Ur.MN, Mr.MATHML], [Ur.MO, Mr.MATHML], [Ur.MS, Mr.MATHML], [Ur.MTEXT, Mr.MATHML], [Ur.DESC, Mr.SVG], [Ur.FOREIGN_OBJECT, Mr.SVG], [Ur.TITLE, Mr.SVG]]), + li = [Ur.H1, Ur.H2, Ur.H3, Ur.H4, Ur.H5, Ur.H6], hi = [Ur.TR, Ur.TEMPLATE, Ur.HTML], + fi = [Ur.TBODY, Ur.TFOOT, Ur.THEAD, Ur.TEMPLATE, Ur.HTML], pi = [Ur.TABLE, Ur.TEMPLATE, Ur.HTML], + di = [Ur.TD, Ur.TH]; + +class mi { + get currentTmplContentOrNode() { + return this._isInTemplate() ? this.treeAdapter.getTemplateContent(this.current) : this.current + } + + constructor(e, t, n) { + this.treeAdapter = t, this.handler = n, this.items = [], this.tagIDs = [], this.stackTop = -1, this.tmplCount = 0, this.currentTagId = Ur.UNKNOWN, this.current = e + } + + _indexOf(e) { + return this.items.lastIndexOf(e, this.stackTop) + } + + _isInTemplate() { + return this.currentTagId === Ur.TEMPLATE && this.treeAdapter.getNamespaceURI(this.current) === Mr.HTML + } + + _updateCurrentElement() { + this.current = this.items[this.stackTop], this.currentTagId = this.tagIDs[this.stackTop] + } + + push(e, t) { + this.stackTop++, this.items[this.stackTop] = e, this.current = e, this.tagIDs[this.stackTop] = t, this.currentTagId = t, this._isInTemplate() && this.tmplCount++, this.handler.onItemPush(e, t, !0) + } + + pop() { + var e = this.current; + 0 < this.tmplCount && this._isInTemplate() && this.tmplCount--, this.stackTop--, this._updateCurrentElement(), this.handler.onItemPop(e, !0) + } + + replace(e, t) { + e = this._indexOf(e), this.items[e] = t, e === this.stackTop && (this.current = t) + } + + insertAfter(e, t, n) { + e = this._indexOf(e) + 1, this.items.splice(e, 0, t), this.tagIDs.splice(e, 0, n), this.stackTop++, e === this.stackTop && this._updateCurrentElement(), this.handler.onItemPush(this.current, this.currentTagId, e === this.stackTop) + } + + popUntilTagNamePopped(e) { + let t = this.stackTop + 1; + for (; 0 < (t = this.tagIDs.lastIndexOf(e, t - 1)) && this.treeAdapter.getNamespaceURI(this.items[t]) !== Mr.HTML;) ; + this.shortenToLength(t < 0 ? 0 : t) + } + + shortenToLength(e) { + for (; this.stackTop >= e;) { + var t = this.current; + 0 < this.tmplCount && this._isInTemplate() && --this.tmplCount, this.stackTop--, this._updateCurrentElement(), this.handler.onItemPop(t, this.stackTop < e) + } + } + + popUntilElementPopped(e) { + e = this._indexOf(e), this.shortenToLength(e < 0 ? 0 : e) + } + + popUntilPopped(e, t) { + e = this._indexOfTagNames(e, t), this.shortenToLength(e < 0 ? 0 : e) + } + + popUntilNumberedHeaderPopped() { + this.popUntilPopped(li, Mr.HTML) + } + + popUntilTableCellPopped() { + this.popUntilPopped(di, Mr.HTML) + } + + popAllUpToHtmlElement() { + this.tmplCount = 0, this.shortenToLength(1) + } + + _indexOfTagNames(e, t) { + for (let n = this.stackTop; 0 <= n; n--) if (e.includes(this.tagIDs[n]) && this.treeAdapter.getNamespaceURI(this.items[n]) === t) return n; + return -1 + } + + clearBackTo(e, t) { + e = this._indexOfTagNames(e, t), this.shortenToLength(e + 1) + } + + clearBackToTableContext() { + this.clearBackTo(pi, Mr.HTML) + } + + clearBackToTableBodyContext() { + this.clearBackTo(fi, Mr.HTML) + } + + clearBackToTableRowContext() { + this.clearBackTo(hi, Mr.HTML) + } + + remove(e) { + var t = this._indexOf(e); + 0 <= t && (t === this.stackTop ? this.pop() : (this.items.splice(t, 1), this.tagIDs.splice(t, 1), this.stackTop--, this._updateCurrentElement(), this.handler.onItemPop(e, !1))) + } + + tryPeekProperlyNestedBodyElement() { + return 1 <= this.stackTop && this.tagIDs[1] === Ur.BODY ? this.items[1] : null + } + + contains(e) { + return -1 < this._indexOf(e) + } + + getCommonAncestor(e) { + return 0 <= (e = this._indexOf(e) - 1) ? this.items[e] : null + } + + isRootHtmlElementCurrent() { + return 0 === this.stackTop && this.tagIDs[0] === Ur.HTML + } + + hasInScope(e) { + for (let t = this.stackTop; 0 <= t; t--) { + var n = this.tagIDs[t], r = this.treeAdapter.getNamespaceURI(this.items[t]); + if (n === e && r === Mr.HTML) return !0; + if (ui.get(n) === r) return !1 + } + return !0 + } + + hasNumberedHeaderInScope() { + for (let e = this.stackTop; 0 <= e; e--) { + var t = this.tagIDs[e], n = this.treeAdapter.getNamespaceURI(this.items[e]); + if (Wr(t) && n === Mr.HTML) return !0; + if (ui.get(t) === n) return !1 + } + return !0 + } + + hasInListItemScope(e) { + for (let t = this.stackTop; 0 <= t; t--) { + var n = this.tagIDs[t], r = this.treeAdapter.getNamespaceURI(this.items[t]); + if (n === e && r === Mr.HTML) return !0; + if ((n === Ur.UL || n === Ur.OL) && r === Mr.HTML || ui.get(n) === r) return !1 + } + return !0 + } + + hasInButtonScope(e) { + for (let t = this.stackTop; 0 <= t; t--) { + var n = this.tagIDs[t], r = this.treeAdapter.getNamespaceURI(this.items[t]); + if (n === e && r === Mr.HTML) return !0; + if (n === Ur.BUTTON && r === Mr.HTML || ui.get(n) === r) return !1 + } + return !0 + } + + hasInTableScope(e) { + for (let t = this.stackTop; 0 <= t; t--) { + var n = this.tagIDs[t]; + if (this.treeAdapter.getNamespaceURI(this.items[t]) === Mr.HTML) { + if (n === e) return !0; + if (n === Ur.TABLE || n === Ur.TEMPLATE || n === Ur.HTML) return !1 + } + } + return !0 + } + + hasTableBodyContextInTableScope() { + for (let e = this.stackTop; 0 <= e; e--) { + var t = this.tagIDs[e]; + if (this.treeAdapter.getNamespaceURI(this.items[e]) === Mr.HTML) { + if (t === Ur.TBODY || t === Ur.THEAD || t === Ur.TFOOT) return !0; + if (t === Ur.TABLE || t === Ur.HTML) return !1 + } + } + return !0 + } + + hasInSelectScope(e) { + for (let t = this.stackTop; 0 <= t; t--) { + var n = this.tagIDs[t]; + if (this.treeAdapter.getNamespaceURI(this.items[t]) === Mr.HTML) { + if (n === e) return !0; + if (n !== Ur.OPTION && n !== Ur.OPTGROUP) return !1 + } + } + return !0 + } + + generateImpliedEndTags() { + for (; oi.has(this.currentTagId);) this.pop() + } + + generateImpliedEndTagsThoroughly() { + for (; ci.has(this.currentTagId);) this.pop() + } + + generateImpliedEndTagsWithExclusion(e) { + for (; this.currentTagId !== e && ci.has(this.currentTagId);) this.pop() + } +} + +!function (e) { + e[e.Marker = 0] = "Marker", e[e.Element = 1] = "Element" +}(_i = _i || {}); +const Ei = {type: _i.Marker}; + +class Ti { + constructor(e) { + this.treeAdapter = e, this.entries = [], this.bookmark = null + } + + _getNoahArkConditionCandidates(e, t) { + var n = [], r = t.length, i = this.treeAdapter.getTagName(e), s = this.treeAdapter.getNamespaceURI(e); + for (let e = 0; e < this.entries.length; e++) { + const t = this.entries[e]; + if (t.type === _i.Marker) break; + var a = t.element; + if (this.treeAdapter.getTagName(a) === i && this.treeAdapter.getNamespaceURI(a) === s) { + const t = this.treeAdapter.getAttrList(a); + t.length === r && n.push({idx: e, attrs: t}) + } + } + return n + } + + _ensureNoahArkCondition(e) { + if (!(this.entries.length < 3)) { + var t = this.treeAdapter.getAttrList(e), n = this._getNoahArkConditionCandidates(e, t); + if (!(n.length < 3)) { + const r = new Map(t.map(e => [e.name, e.value])); + let i = 0; + for (let e = 0; e < n.length; e++) { + const t = n[e]; + t.attrs.every(e => r.get(e.name) === e.value) && 3 <= (i += 1) && this.entries.splice(t.idx, 1) + } + } + } + } + + insertMarker() { + this.entries.unshift(Ei) + } + + pushElement(e, t) { + this._ensureNoahArkCondition(e), this.entries.unshift({type: _i.Element, element: e, token: t}) + } + + insertElementAfterBookmark(e, t) { + var n = this.entries.indexOf(this.bookmark); + this.entries.splice(n, 0, {type: _i.Element, element: e, token: t}) + } + + removeEntry(e) { + 0 <= (e = this.entries.indexOf(e)) && this.entries.splice(e, 1) + } + + clearToLastMarker() { + var e = this.entries.indexOf(Ei); + 0 <= e ? this.entries.splice(0, e + 1) : this.entries.length = 0 + } + + getElementEntryInScopeWithTagName(e) { + var t = this.entries.find(t => t.type === _i.Marker || this.treeAdapter.getTagName(t.element) === e); + return t && t.type === _i.Element ? t : null + } + + getElementEntry(e) { + return this.entries.find(t => t.type === _i.Element && t.element === e) + } +} + +function Ai(e) { + return {nodeName: "#text", value: e, parentNode: null} +} + +const gi = { + createDocument: () => ({nodeName: "#document", mode: Br.NO_QUIRKS, childNodes: []}), + createDocumentFragment: () => ({nodeName: "#document-fragment", childNodes: []}), + createElement: (e, t, n) => ({ + nodeName: e, + tagName: e, + attrs: n, + namespaceURI: t, + childNodes: [], + parentNode: null + }), + createCommentNode: e => ({nodeName: "#comment", data: e, parentNode: null}), + appendChild(e, t) { + e.childNodes.push(t), t.parentNode = e + }, + insertBefore(e, t, n) { + n = e.childNodes.indexOf(n), e.childNodes.splice(n, 0, t), t.parentNode = e + }, + setTemplateContent(e, t) { + e.content = t + }, + getTemplateContent: e => e.content, + setDocumentType(e, t, n, r) { + const i = e.childNodes.find(e => "#documentType" === e.nodeName); + if (i) i.name = t, i.publicId = n, i.systemId = r; else { + const i = {nodeName: "#documentType", name: t, publicId: n, systemId: r, parentNode: null}; + gi.appendChild(e, i) + } + }, + setDocumentMode(e, t) { + e.mode = t + }, + getDocumentMode: e => e.mode, + detachNode(e) { + var t; + e.parentNode && (t = e.parentNode.childNodes.indexOf(e), e.parentNode.childNodes.splice(t, 1), e.parentNode = null) + }, + insertText(e, t) { + if (0 < e.childNodes.length) { + var n = e.childNodes[e.childNodes.length - 1]; + if (gi.isTextNode(n)) return void (n.value += t) + } + gi.appendChild(e, Ai(t)) + }, + insertTextBefore(e, t, n) { + var r = e.childNodes[e.childNodes.indexOf(n) - 1]; + r && gi.isTextNode(r) ? r.value += t : gi.insertBefore(e, Ai(t), n) + }, + adoptAttributes(e, t) { + var n = new Set(e.attrs.map(e => e.name)); + for (let r = 0; r < t.length; r++) n.has(t[r].name) || e.attrs.push(t[r]) + }, + getFirstChild: e => e.childNodes[0], + getChildNodes: e => e.childNodes, + getParentNode: e => e.parentNode, + getAttrList: e => e.attrs, + getTagName: e => e.tagName, + getNamespaceURI: e => e.namespaceURI, + getTextNodeContent: e => e.value, + getCommentNodeContent: e => e.data, + getDocumentTypeNodeName: e => e.name, + getDocumentTypeNodePublicId: e => e.publicId, + getDocumentTypeNodeSystemId: e => e.systemId, + isTextNode: e => "#text" === e.nodeName, + isCommentNode: e => "#comment" === e.nodeName, + isDocumentTypeNode: e => "#documentType" === e.nodeName, + isElementNode: e => Object.prototype.hasOwnProperty.call(e, "tagName"), + setNodeSourceCodeLocation(e, t) { + e.sourceCodeLocation = t + }, + getNodeSourceCodeLocation: e => e.sourceCodeLocation, + updateNodeSourceCodeLocation(e, t) { + e.sourceCodeLocation = {...e.sourceCodeLocation, ...t} + } + }, vi = "html", yi = "about:legacy-compat", Si = "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd", + Ci = ["+//silmaril//dtd html pro v0r11 19970101//", "-//as//dtd html 3.0 aswedit + extensions//", "-//advasoft ltd//dtd html 3.0 aswedit + extensions//", "-//ietf//dtd html 2.0 level 1//", "-//ietf//dtd html 2.0 level 2//", "-//ietf//dtd html 2.0 strict level 1//", "-//ietf//dtd html 2.0 strict level 2//", "-//ietf//dtd html 2.0 strict//", "-//ietf//dtd html 2.0//", "-//ietf//dtd html 2.1e//", "-//ietf//dtd html 3.0//", "-//ietf//dtd html 3.2 final//", "-//ietf//dtd html 3.2//", "-//ietf//dtd html 3//", "-//ietf//dtd html level 0//", "-//ietf//dtd html level 1//", "-//ietf//dtd html level 2//", "-//ietf//dtd html level 3//", "-//ietf//dtd html strict level 0//", "-//ietf//dtd html strict level 1//", "-//ietf//dtd html strict level 2//", "-//ietf//dtd html strict level 3//", "-//ietf//dtd html strict//", "-//ietf//dtd html//", "-//metrius//dtd metrius presentational//", "-//microsoft//dtd internet explorer 2.0 html strict//", "-//microsoft//dtd internet explorer 2.0 html//", "-//microsoft//dtd internet explorer 2.0 tables//", "-//microsoft//dtd internet explorer 3.0 html strict//", "-//microsoft//dtd internet explorer 3.0 html//", "-//microsoft//dtd internet explorer 3.0 tables//", "-//netscape comm. corp.//dtd html//", "-//netscape comm. corp.//dtd strict html//", "-//o'reilly and associates//dtd html 2.0//", "-//o'reilly and associates//dtd html extended 1.0//", "-//o'reilly and associates//dtd html extended relaxed 1.0//", "-//sq//dtd html 2.0 hotmetal + extensions//", "-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//", "-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//", "-//spyglass//dtd html 2.0 extended//", "-//sun microsystems corp.//dtd hotjava html//", "-//sun microsystems corp.//dtd hotjava strict html//", "-//w3c//dtd html 3 1995-03-24//", "-//w3c//dtd html 3.2 draft//", "-//w3c//dtd html 3.2 final//", "-//w3c//dtd html 3.2//", "-//w3c//dtd html 3.2s draft//", "-//w3c//dtd html 4.0 frameset//", "-//w3c//dtd html 4.0 transitional//", "-//w3c//dtd html experimental 19960712//", "-//w3c//dtd html experimental 970421//", "-//w3c//dtd w3 html//", "-//w3o//dtd w3 html 3.0//", "-//webtechs//dtd mozilla html 2.0//", "-//webtechs//dtd mozilla html//"], + Ni = [...Ci, "-//w3c//dtd html 4.01 frameset//", "-//w3c//dtd html 4.01 transitional//"], + bi = new Set(["-//w3o//dtd w3 html strict 3.0//en//", "-/w3c/dtd html 4.0 transitional/en", "html"]), + Ii = ["-//w3c//dtd xhtml 1.0 frameset//", "-//w3c//dtd xhtml 1.0 transitional//"], + Oi = [...Ii, "-//w3c//dtd html 4.01 frameset//", "-//w3c//dtd html 4.01 transitional//"]; + +function ki(e, t) { + return t.some(t => e.startsWith(t)) +} + +const Li = {TEXT_HTML: "text/html", APPLICATION_XML: "application/xhtml+xml"}, Di = "definitionurl", + Ri = "definitionURL", + wi = new Map(["attributeName", "attributeType", "baseFrequency", "baseProfile", "calcMode", "clipPathUnits", "diffuseConstant", "edgeMode", "filterUnits", "glyphRef", "gradientTransform", "gradientUnits", "kernelMatrix", "kernelUnitLength", "keyPoints", "keySplines", "keyTimes", "lengthAdjust", "limitingConeAngle", "markerHeight", "markerUnits", "markerWidth", "maskContentUnits", "maskUnits", "numOctaves", "pathLength", "patternContentUnits", "patternTransform", "patternUnits", "pointsAtX", "pointsAtY", "pointsAtZ", "preserveAlpha", "preserveAspectRatio", "primitiveUnits", "refX", "refY", "repeatCount", "repeatDur", "requiredExtensions", "requiredFeatures", "specularConstant", "specularExponent", "spreadMethod", "startOffset", "stdDeviation", "stitchTiles", "surfaceScale", "systemLanguage", "tableValues", "targetX", "targetY", "textLength", "viewBox", "viewTarget", "xChannelSelector", "yChannelSelector", "zoomAndPan"].map(e => [e.toLowerCase(), e])), + xi = new Map([["xlink:actuate", { + prefix: "xlink", + name: "actuate", + namespace: Mr.XLINK + }], ["xlink:arcrole", {prefix: "xlink", name: "arcrole", namespace: Mr.XLINK}], ["xlink:href", { + prefix: "xlink", + name: "href", + namespace: Mr.XLINK + }], ["xlink:role", {prefix: "xlink", name: "role", namespace: Mr.XLINK}], ["xlink:show", { + prefix: "xlink", + name: "show", + namespace: Mr.XLINK + }], ["xlink:title", {prefix: "xlink", name: "title", namespace: Mr.XLINK}], ["xlink:type", { + prefix: "xlink", + name: "type", + namespace: Mr.XLINK + }], ["xml:base", {prefix: "xml", name: "base", namespace: Mr.XML}], ["xml:lang", { + prefix: "xml", + name: "lang", + namespace: Mr.XML + }], ["xml:space", {prefix: "xml", name: "space", namespace: Mr.XML}], ["xmlns", { + prefix: "", + name: "xmlns", + namespace: Mr.XMLNS + }], ["xmlns:xlink", {prefix: "xmlns", name: "xlink", namespace: Mr.XMLNS}]]), + Mi = new Map(["altGlyph", "altGlyphDef", "altGlyphItem", "animateColor", "animateMotion", "animateTransform", "clipPath", "feBlend", "feColorMatrix", "feComponentTransfer", "feComposite", "feConvolveMatrix", "feDiffuseLighting", "feDisplacementMap", "feDistantLight", "feFlood", "feFuncA", "feFuncB", "feFuncG", "feFuncR", "feGaussianBlur", "feImage", "feMerge", "feMergeNode", "feMorphology", "feOffset", "fePointLight", "feSpecularLighting", "feSpotLight", "feTile", "feTurbulence", "foreignObject", "glyphRef", "linearGradient", "radialGradient", "textPath"].map(e => [e.toLowerCase(), e])), + Pi = new Set([Ur.B, Ur.BIG, Ur.BLOCKQUOTE, Ur.BODY, Ur.BR, Ur.CENTER, Ur.CODE, Ur.DD, Ur.DIV, Ur.DL, Ur.DT, Ur.EM, Ur.EMBED, Ur.H1, Ur.H2, Ur.H3, Ur.H4, Ur.H5, Ur.H6, Ur.HEAD, Ur.HR, Ur.I, Ur.IMG, Ur.LI, Ur.LISTING, Ur.MENU, Ur.META, Ur.NOBR, Ur.OL, Ur.P, Ur.PRE, Ur.RUBY, Ur.S, Ur.SMALL, Ur.SPAN, Ur.STRONG, Ur.STRIKE, Ur.SUB, Ur.SUP, Ur.TABLE, Ur.TT, Ur.U, Ur.UL, Ur.VAR]); + +function Bi(e) { + for (let t = 0; t < e.attrs.length; t++) if (e.attrs[t].name === Di) { + e.attrs[t].name = Ri; + break + } +} + +function Fi(e) { + for (let t = 0; t < e.attrs.length; t++) { + var n = wi.get(e.attrs[t].name); + null != n && (e.attrs[t].name = n) + } +} + +function Ui(e) { + for (let t = 0; t < e.attrs.length; t++) { + var n = xi.get(e.attrs[t].name); + n && (e.attrs[t].prefix = n.prefix, e.attrs[t].name = n.name, e.attrs[t].namespace = n.namespace) + } +} + +function Hi(e, t, n, r) { + return (!r || r === Mr.HTML) && function (e, t, n) { + if (t === Mr.MATHML && e === Ur.ANNOTATION_XML) for (let e = 0; e < n.length; e++) if (n[e].name === Pr.ENCODING) { + const t = n[e].value.toLowerCase(); + return t === Li.TEXT_HTML || t === Li.APPLICATION_XML + } + return t === Mr.SVG && (e === Ur.FOREIGN_OBJECT || e === Ur.DESC || e === Ur.TITLE) + }(e, t, n) || (!r || r === Mr.MATHML) && function (e, t) { + return t === Mr.MATHML && (e === Ur.MI || e === Ur.MO || e === Ur.MN || e === Ur.MS || e === Ur.MTEXT) + }(e, t) +} + +const Gi = "hidden", ji = 8, qi = 3, Ki = (function (e) { + e[e.INITIAL = 0] = "INITIAL", e[e.BEFORE_HTML = 1] = "BEFORE_HTML", e[e.BEFORE_HEAD = 2] = "BEFORE_HEAD", e[e.IN_HEAD = 3] = "IN_HEAD", e[e.IN_HEAD_NO_SCRIPT = 4] = "IN_HEAD_NO_SCRIPT", e[e.AFTER_HEAD = 5] = "AFTER_HEAD", e[e.IN_BODY = 6] = "IN_BODY", e[e.TEXT = 7] = "TEXT", e[e.IN_TABLE = 8] = "IN_TABLE", e[e.IN_TABLE_TEXT = 9] = "IN_TABLE_TEXT", e[e.IN_CAPTION = 10] = "IN_CAPTION", e[e.IN_COLUMN_GROUP = 11] = "IN_COLUMN_GROUP", e[e.IN_TABLE_BODY = 12] = "IN_TABLE_BODY", e[e.IN_ROW = 13] = "IN_ROW", e[e.IN_CELL = 14] = "IN_CELL", e[e.IN_SELECT = 15] = "IN_SELECT", e[e.IN_SELECT_IN_TABLE = 16] = "IN_SELECT_IN_TABLE", e[e.IN_TEMPLATE = 17] = "IN_TEMPLATE", e[e.AFTER_BODY = 18] = "AFTER_BODY", e[e.IN_FRAMESET = 19] = "IN_FRAMESET", e[e.AFTER_FRAMESET = 20] = "AFTER_FRAMESET", e[e.AFTER_AFTER_BODY = 21] = "AFTER_AFTER_BODY", e[e.AFTER_AFTER_FRAMESET = 22] = "AFTER_AFTER_FRAMESET" + }(Yi = Yi || {}), {startLine: -1, startCol: -1, startOffset: -1, endLine: -1, endCol: -1, endOffset: -1}), + Wi = new Set([Ur.TABLE, Ur.TBODY, Ur.TFOOT, Ur.THEAD, Ur.TR]), + Vi = {scriptingEnabled: !0, sourceCodeLocationInfo: !1, treeAdapter: gi, onParseError: null}; + +class $i { + constructor(e, t, n = null, r = null) { + this.fragmentContext = n, this.scriptHandler = r, this.currentToken = null, this.stopped = !1, this.insertionMode = Yi.INITIAL, this.originalInsertionMode = Yi.INITIAL, this.headElement = null, this.formElement = null, this.currentNotInHTML = !1, this.tmplInsertionModeStack = [], this.pendingCharacterTokens = [], this.hasNonWhitespacePendingCharacterToken = !1, this.framesetOk = !0, this.skipNextNewLine = !1, this.fosterParentingEnabled = !1, this.options = {...Vi, ...e}, this.treeAdapter = this.options.treeAdapter, this.onParseError = this.options.onParseError, this.onParseError && (this.options.sourceCodeLocationInfo = !0), this.document = null != t ? t : this.treeAdapter.createDocument(), this.tokenizer = new ai(this.options, this), this.activeFormattingElements = new Ti(this.treeAdapter), this.fragmentContextID = n ? qr(this.treeAdapter.getTagName(n)) : Ur.UNKNOWN, this._setContextModes(null != n ? n : this.document, this.fragmentContextID), this.openElements = new mi(this.document, this.treeAdapter, this) + } + + static parse(e, t) { + return (t = new this(t)).tokenizer.write(e, !0), t.document + } + + static getFragmentParser(e, t) { + var t = {...Vi, ...t}, + r = (null == e && (e = t.treeAdapter.createElement(Fr.TEMPLATE, Mr.HTML, [])), t.treeAdapter.createElement("documentmock", Mr.HTML, [])); + return (t = new this(t, r, e)).fragmentContextID === Ur.TEMPLATE && t.tmplInsertionModeStack.unshift(Yi.IN_TEMPLATE), t._initTokenizerForFragmentParsing(), t._insertFakeRootElement(), t._resetInsertionMode(), t._findFormInFragmentContext(), t + } + + getFragment() { + var e = this.treeAdapter.getFirstChild(this.document), t = this.treeAdapter.createDocumentFragment(); + return this._adoptNodes(e, t), t + } + + _err(e, t, n) { + this.onParseError && (t = { + code: t, + startLine: (e = null != (t = e.location) ? t : Ki).startLine, + startCol: e.startCol, + startOffset: e.startOffset, + endLine: n ? e.startLine : e.endLine, + endCol: n ? e.startCol : e.endCol, + endOffset: n ? e.startOffset : e.endOffset + }, this.onParseError(t)) + } + + onItemPush(e, t, n) { + var r, i; + null != (i = (r = this.treeAdapter).onItemPush) && i.call(r, e), n && 0 < this.openElements.stackTop && this._setContextModes(e, t) + } + + onItemPop(e, t) { + var n, r; + if (this.options.sourceCodeLocationInfo && this._setEndLocation(e, this.currentToken), null != (r = (n = this.treeAdapter).onItemPop) && r.call(n, e, this.openElements.current), t) { + let e, t; + 0 === this.openElements.stackTop && this.fragmentContext ? (e = this.fragmentContext, t = this.fragmentContextID) : { + current: e, + currentTagId: t + } = this.openElements, this._setContextModes(e, t) + } + } + + _setContextModes(e, t) { + var n = e === this.document || this.treeAdapter.getNamespaceURI(e) === Mr.HTML; + this.currentNotInHTML = !n, this.tokenizer.inForeignNode = !n && !this._isIntegrationPoint(t, e) + } + + _switchToTextParsing(e, t) { + this._insertElement(e, Mr.HTML), this.tokenizer.state = t, this.originalInsertionMode = this.insertionMode, this.insertionMode = Yi.TEXT + } + + switchToPlaintextParsing() { + this.insertionMode = Yi.TEXT, this.originalInsertionMode = Yi.IN_BODY, this.tokenizer.state = zr.PLAINTEXT + } + + _getAdjustedCurrentElement() { + return 0 === this.openElements.stackTop && this.fragmentContext ? this.fragmentContext : this.openElements.current + } + + _findFormInFragmentContext() { + let e = this.fragmentContext; + for (; e;) { + if (this.treeAdapter.getTagName(e) === Fr.FORM) { + this.formElement = e; + break + } + e = this.treeAdapter.getParentNode(e) + } + } + + _initTokenizerForFragmentParsing() { + if (this.fragmentContext && this.treeAdapter.getNamespaceURI(this.fragmentContext) === Mr.HTML) switch (this.fragmentContextID) { + case Ur.TITLE: + case Ur.TEXTAREA: + this.tokenizer.state = zr.RCDATA; + break; + case Ur.STYLE: + case Ur.XMP: + case Ur.IFRAME: + case Ur.NOEMBED: + case Ur.NOFRAMES: + case Ur.NOSCRIPT: + this.tokenizer.state = zr.RAWTEXT; + break; + case Ur.SCRIPT: + this.tokenizer.state = zr.SCRIPT_DATA; + break; + case Ur.PLAINTEXT: + this.tokenizer.state = zr.PLAINTEXT + } + } + + _setDocumentType(e) { + const t = e.name || "", n = e.publicId || "", r = e.systemId || ""; + if (this.treeAdapter.setDocumentType(this.document, t, n, r), e.location) { + const t = this.treeAdapter.getChildNodes(this.document).find(e => this.treeAdapter.isDocumentTypeNode(e)); + t && this.treeAdapter.setNodeSourceCodeLocation(t, e.location) + } + } + + _attachElementToTree(e, t) { + if (this.options.sourceCodeLocationInfo && (t = t && { + ...t, + startTag: t + }, this.treeAdapter.setNodeSourceCodeLocation(e, t)), this._shouldFosterParentOnInsertion()) this._fosterParentElement(e); else { + const t = this.openElements.currentTmplContentOrNode; + this.treeAdapter.appendChild(t, e) + } + } + + _appendElement(e, t) { + t = this.treeAdapter.createElement(e.tagName, t, e.attrs), this._attachElementToTree(t, e.location) + } + + _insertElement(e, t) { + t = this.treeAdapter.createElement(e.tagName, t, e.attrs), this._attachElementToTree(t, e.location), this.openElements.push(t, e.tagID) + } + + _insertFakeElement(e, t) { + e = this.treeAdapter.createElement(e, Mr.HTML, []), this._attachElementToTree(e, null), this.openElements.push(e, t) + } + + _insertTemplate(e) { + var t = this.treeAdapter.createElement(e.tagName, Mr.HTML, e.attrs), + n = this.treeAdapter.createDocumentFragment(); + this.treeAdapter.setTemplateContent(t, n), this._attachElementToTree(t, e.location), this.openElements.push(t, e.tagID), this.options.sourceCodeLocationInfo && this.treeAdapter.setNodeSourceCodeLocation(n, null) + } + + _insertFakeRootElement() { + var e = this.treeAdapter.createElement(Fr.HTML, Mr.HTML, []); + this.options.sourceCodeLocationInfo && this.treeAdapter.setNodeSourceCodeLocation(e, null), this.treeAdapter.appendChild(this.openElements.current, e), this.openElements.push(e, Ur.HTML) + } + + _appendCommentNode(e, t) { + var n = this.treeAdapter.createCommentNode(e.data); + this.treeAdapter.appendChild(t, n), this.options.sourceCodeLocationInfo && this.treeAdapter.setNodeSourceCodeLocation(n, e.location) + } + + _insertCharacters(e) { + let t, n; + if (this._shouldFosterParentOnInsertion() ? ({ + parent: t, + beforeElement: n + } = this._findFosterParentingLocation(), n ? this.treeAdapter.insertTextBefore(t, e.chars, n) : this.treeAdapter.insertText(t, e.chars)) : (t = this.openElements.currentTmplContentOrNode, this.treeAdapter.insertText(t, e.chars)), e.location) { + var r = this.treeAdapter.getChildNodes(t), i = n ? r.lastIndexOf(n) : r.length, i = r[i - 1]; + if (this.treeAdapter.getNodeSourceCodeLocation(i)) { + const {endLine: t, endCol: n, endOffset: r} = e.location; + this.treeAdapter.updateNodeSourceCodeLocation(i, {endLine: t, endCol: n, endOffset: r}) + } else this.options.sourceCodeLocationInfo && this.treeAdapter.setNodeSourceCodeLocation(i, e.location) + } + } + + _adoptNodes(e, t) { + for (let n = this.treeAdapter.getFirstChild(e); n; n = this.treeAdapter.getFirstChild(e)) this.treeAdapter.detachNode(n), this.treeAdapter.appendChild(t, n) + } + + _setEndLocation(e, t) { + var n, r; + this.treeAdapter.getNodeSourceCodeLocation(e) && t.location && (n = t.location, r = this.treeAdapter.getTagName(e), r = t.type === Tr.END_TAG && r === t.tagName ? { + endTag: {...n}, + endLine: n.endLine, + endCol: n.endCol, + endOffset: n.endOffset + } : { + endLine: n.startLine, + endCol: n.startCol, + endOffset: n.startOffset + }, this.treeAdapter.updateNodeSourceCodeLocation(e, r)) + } + + shouldProcessStartTagTokenInForeignContent(e) { + if (!this.currentNotInHTML) return !1; + let t, n; + return 0 === this.openElements.stackTop && this.fragmentContext ? (t = this.fragmentContext, n = this.fragmentContextID) : { + current: t, + currentTagId: n + } = this.openElements, (e.tagID !== Ur.SVG || this.treeAdapter.getTagName(t) !== Fr.ANNOTATION_XML || this.treeAdapter.getNamespaceURI(t) !== Mr.MATHML) && (this.tokenizer.inForeignNode || (e.tagID === Ur.MGLYPH || e.tagID === Ur.MALIGNMARK) && !this._isIntegrationPoint(n, t, Mr.HTML)) + } + + _processToken(e) { + switch (e.type) { + case Tr.CHARACTER: + this.onCharacter(e); + break; + case Tr.NULL_CHARACTER: + this.onNullCharacter(e); + break; + case Tr.COMMENT: + this.onComment(e); + break; + case Tr.DOCTYPE: + this.onDoctype(e); + break; + case Tr.START_TAG: + this._processStartTag(e); + break; + case Tr.END_TAG: + this.onEndTag(e); + break; + case Tr.EOF: + this.onEof(e); + break; + case Tr.WHITESPACE_CHARACTER: + this.onWhitespaceCharacter(e) + } + } + + _isIntegrationPoint(e, t, n) { + return Hi(e, this.treeAdapter.getNamespaceURI(t), this.treeAdapter.getAttrList(t), n) + } + + _reconstructActiveFormattingElements() { + const e = this.activeFormattingElements.entries.length; + if (e) { + var t = this.activeFormattingElements.entries.findIndex(e => e.type === _i.Marker || this.openElements.contains(e.element)); + for (let n = t < 0 ? e - 1 : t - 1; 0 <= n; n--) { + const e = this.activeFormattingElements.entries[n]; + this._insertElement(e.token, this.treeAdapter.getNamespaceURI(e.element)), e.element = this.openElements.current + } + } + } + + _closeTableCell() { + this.openElements.generateImpliedEndTags(), this.openElements.popUntilTableCellPopped(), this.activeFormattingElements.clearToLastMarker(), this.insertionMode = Yi.IN_ROW + } + + _closePElement() { + this.openElements.generateImpliedEndTagsWithExclusion(Ur.P), this.openElements.popUntilTagNamePopped(Ur.P) + } + + _resetInsertionMode() { + for (let e = this.openElements.stackTop; 0 <= e; e--) switch (0 === e && this.fragmentContext ? this.fragmentContextID : this.openElements.tagIDs[e]) { + case Ur.TR: + return void (this.insertionMode = Yi.IN_ROW); + case Ur.TBODY: + case Ur.THEAD: + case Ur.TFOOT: + return void (this.insertionMode = Yi.IN_TABLE_BODY); + case Ur.CAPTION: + return void (this.insertionMode = Yi.IN_CAPTION); + case Ur.COLGROUP: + return void (this.insertionMode = Yi.IN_COLUMN_GROUP); + case Ur.TABLE: + return void (this.insertionMode = Yi.IN_TABLE); + case Ur.BODY: + return void (this.insertionMode = Yi.IN_BODY); + case Ur.FRAMESET: + return void (this.insertionMode = Yi.IN_FRAMESET); + case Ur.SELECT: + return void this._resetInsertionModeForSelect(e); + case Ur.TEMPLATE: + return void (this.insertionMode = this.tmplInsertionModeStack[0]); + case Ur.HTML: + return void (this.insertionMode = this.headElement ? Yi.AFTER_HEAD : Yi.BEFORE_HEAD); + case Ur.TD: + case Ur.TH: + if (0 < e) return void (this.insertionMode = Yi.IN_CELL); + break; + case Ur.HEAD: + if (0 < e) return void (this.insertionMode = Yi.IN_HEAD) + } + this.insertionMode = Yi.IN_BODY + } + + _resetInsertionModeForSelect(e) { + if (0 < e) for (let t = e - 1; 0 < t; t--) { + const e = this.openElements.tagIDs[t]; + if (e === Ur.TEMPLATE) break; + if (e === Ur.TABLE) return void (this.insertionMode = Yi.IN_SELECT_IN_TABLE) + } + this.insertionMode = Yi.IN_SELECT + } + + _isElementCausesFosterParenting(e) { + return Wi.has(e) + } + + _shouldFosterParentOnInsertion() { + return this.fosterParentingEnabled && this._isElementCausesFosterParenting(this.openElements.currentTagId) + } + + _findFosterParentingLocation() { + for (let e = this.openElements.stackTop; 0 <= e; e--) { + var t = this.openElements.items[e]; + switch (this.openElements.tagIDs[e]) { + case Ur.TEMPLATE: + if (this.treeAdapter.getNamespaceURI(t) === Mr.HTML) return { + parent: this.treeAdapter.getTemplateContent(t), + beforeElement: null + }; + break; + case Ur.TABLE: + var n = this.treeAdapter.getParentNode(t); + return n ? {parent: n, beforeElement: t} : { + parent: this.openElements.items[e - 1], + beforeElement: null + } + } + } + return {parent: this.openElements.items[0], beforeElement: null} + } + + _fosterParentElement(e) { + var t = this._findFosterParentingLocation(); + t.beforeElement ? this.treeAdapter.insertBefore(t.parent, e, t.beforeElement) : this.treeAdapter.appendChild(t.parent, e) + } + + _isSpecialElement(e, t) { + return e = this.treeAdapter.getNamespaceURI(e), Kr[e].has(t) + } + + onCharacter(e) { + if (this.skipNextNewLine = !1, this.tokenizer.inForeignNode) !function (e, t) { + e._insertCharacters(t), e.framesetOk = !1 + }(this, e); else switch (this.insertionMode) { + case Yi.INITIAL: + is(this, e); + break; + case Yi.BEFORE_HTML: + ss(this, e); + break; + case Yi.BEFORE_HEAD: + as(this, e); + break; + case Yi.IN_HEAD: + us(this, e); + break; + case Yi.IN_HEAD_NO_SCRIPT: + ls(this, e); + break; + case Yi.AFTER_HEAD: + hs(this, e); + break; + case Yi.IN_BODY: + case Yi.IN_CAPTION: + case Yi.IN_CELL: + case Yi.IN_TEMPLATE: + ds(this, e); + break; + case Yi.TEXT: + case Yi.IN_SELECT: + case Yi.IN_SELECT_IN_TABLE: + this._insertCharacters(e); + break; + case Yi.IN_TABLE: + case Yi.IN_TABLE_BODY: + case Yi.IN_ROW: + Ss(this, e); + break; + case Yi.IN_TABLE_TEXT: + Os(this, e); + break; + case Yi.IN_COLUMN_GROUP: + Rs(this, e); + break; + case Yi.AFTER_BODY: + Gs(this, e); + break; + case Yi.AFTER_AFTER_BODY: + js(this, e) + } + } + + onNullCharacter(e) { + if (this.skipNextNewLine = !1, this.tokenizer.inForeignNode) !function (e, t) { + t.chars = sr, e._insertCharacters(t) + }(this, e); else switch (this.insertionMode) { + case Yi.INITIAL: + is(this, e); + break; + case Yi.BEFORE_HTML: + ss(this, e); + break; + case Yi.BEFORE_HEAD: + as(this, e); + break; + case Yi.IN_HEAD: + us(this, e); + break; + case Yi.IN_HEAD_NO_SCRIPT: + ls(this, e); + break; + case Yi.AFTER_HEAD: + hs(this, e); + break; + case Yi.TEXT: + this._insertCharacters(e); + break; + case Yi.IN_TABLE: + case Yi.IN_TABLE_BODY: + case Yi.IN_ROW: + Ss(this, e); + break; + case Yi.IN_COLUMN_GROUP: + Rs(this, e); + break; + case Yi.AFTER_BODY: + Gs(this, e); + break; + case Yi.AFTER_AFTER_BODY: + js(this, e) + } + } + + onComment(e) { + if (this.skipNextNewLine = !1, this.currentNotInHTML) ns(this, e); else switch (this.insertionMode) { + case Yi.INITIAL: + case Yi.BEFORE_HTML: + case Yi.BEFORE_HEAD: + case Yi.IN_HEAD: + case Yi.IN_HEAD_NO_SCRIPT: + case Yi.AFTER_HEAD: + case Yi.IN_BODY: + case Yi.IN_TABLE: + case Yi.IN_CAPTION: + case Yi.IN_COLUMN_GROUP: + case Yi.IN_TABLE_BODY: + case Yi.IN_ROW: + case Yi.IN_CELL: + case Yi.IN_SELECT: + case Yi.IN_SELECT_IN_TABLE: + case Yi.IN_TEMPLATE: + case Yi.IN_FRAMESET: + case Yi.AFTER_FRAMESET: + ns(this, e); + break; + case Yi.IN_TABLE_TEXT: + ks(this, e); + break; + case Yi.AFTER_BODY: + !function (e, t) { + e._appendCommentNode(t, e.openElements.items[0]) + }(this, e); + break; + case Yi.AFTER_AFTER_BODY: + case Yi.AFTER_AFTER_FRAMESET: + !function (e, t) { + e._appendCommentNode(t, e.document) + }(this, e) + } + } + + onDoctype(e) { + switch (this.skipNextNewLine = !1, this.insertionMode) { + case Yi.INITIAL: + !function (e, t) { + e._setDocumentType(t); + var n = t.forceQuirks ? Br.QUIRKS : function (e) { + if (e.name !== vi) return Br.QUIRKS; + var t = e.systemId; + if (t && t.toLowerCase() === Si) return Br.QUIRKS; + let n = e.publicId; + if (null !== n) { + if (n = n.toLowerCase(), bi.has(n)) return Br.QUIRKS; + let e = null === t ? Ni : Ci; + if (ki(n, e)) return Br.QUIRKS; + if (e = null === t ? Ii : Oi, ki(n, e)) return Br.LIMITED_QUIRKS + } + return Br.NO_QUIRKS + }(t); + !function (e) { + return e.name === vi && null === e.publicId && (null === e.systemId || e.systemId === yi) + }(t) && e._err(t, _r.nonConformingDoctype), e.treeAdapter.setDocumentMode(e.document, n), e.insertionMode = Yi.BEFORE_HTML + }(this, e); + break; + case Yi.BEFORE_HEAD: + case Yi.IN_HEAD: + case Yi.IN_HEAD_NO_SCRIPT: + case Yi.AFTER_HEAD: + this._err(e, _r.misplacedDoctype); + break; + case Yi.IN_TABLE_TEXT: + ks(this, e) + } + } + + onStartTag(e) { + this.skipNextNewLine = !1, this.currentToken = e, this._processStartTag(e), e.selfClosing && !e.ackSelfClosing && this._err(e, _r.nonVoidHtmlElementStartTagWithTrailingSolidus) + } + + _processStartTag(e) { + this.shouldProcessStartTagTokenInForeignContent(e) ? function (e, t) { + var n; + !function (e) { + var t = e.tagID; + return t === Ur.FONT && e.attrs.some(({name: e}) => e === Pr.COLOR || e === Pr.SIZE || e === Pr.FACE) || Pi.has(t) + }(t) ? (n = e._getAdjustedCurrentElement(), (n = e.treeAdapter.getNamespaceURI(n)) === Mr.MATHML ? Bi(t) : n === Mr.SVG && (function (e) { + var t = Mi.get(e.tagName); + null != t && (e.tagName = t, e.tagID = qr(e.tagName)) + }(t), Fi(t)), Ui(t), t.selfClosing ? e._appendElement(t, n) : e._insertElement(t, n), t.ackSelfClosing = !0) : (qs(e), e._startTagOutsideForeignContent(t)) + }(this, e) : this._startTagOutsideForeignContent(e) + } + + _startTagOutsideForeignContent(e) { + switch (this.insertionMode) { + case Yi.INITIAL: + is(this, e); + break; + case Yi.BEFORE_HTML: + !function (e, t) { + t.tagID === Ur.HTML ? (e._insertElement(t, Mr.HTML), e.insertionMode = Yi.BEFORE_HEAD) : ss(e, t) + }(this, e); + break; + case Yi.BEFORE_HEAD: + !function (e, t) { + switch (t.tagID) { + case Ur.HTML: + As(e, t); + break; + case Ur.HEAD: + e._insertElement(t, Mr.HTML), e.headElement = e.openElements.current, e.insertionMode = Yi.IN_HEAD; + break; + default: + as(e, t) + } + }(this, e); + break; + case Yi.IN_HEAD: + os(this, e); + break; + case Yi.IN_HEAD_NO_SCRIPT: + !function (e, t) { + switch (t.tagID) { + case Ur.HTML: + As(e, t); + break; + case Ur.BASEFONT: + case Ur.BGSOUND: + case Ur.HEAD: + case Ur.LINK: + case Ur.META: + case Ur.NOFRAMES: + case Ur.STYLE: + os(e, t); + break; + case Ur.NOSCRIPT: + e._err(t, _r.nestedNoscriptInHead); + break; + default: + ls(e, t) + } + }(this, e); + break; + case Yi.AFTER_HEAD: + !function (e, t) { + switch (t.tagID) { + case Ur.HTML: + As(e, t); + break; + case Ur.BODY: + e._insertElement(t, Mr.HTML), e.framesetOk = !1, e.insertionMode = Yi.IN_BODY; + break; + case Ur.FRAMESET: + e._insertElement(t, Mr.HTML), e.insertionMode = Yi.IN_FRAMESET; + break; + case Ur.BASE: + case Ur.BASEFONT: + case Ur.BGSOUND: + case Ur.LINK: + case Ur.META: + case Ur.NOFRAMES: + case Ur.SCRIPT: + case Ur.STYLE: + case Ur.TEMPLATE: + case Ur.TITLE: + e._err(t, _r.abandonedHeadElementChild), e.openElements.push(e.headElement, Ur.HEAD), os(e, t), e.openElements.remove(e.headElement); + break; + case Ur.HEAD: + e._err(t, _r.misplacedStartTagForHeadElement); + break; + default: + hs(e, t) + } + }(this, e); + break; + case Yi.IN_BODY: + As(this, e); + break; + case Yi.IN_TABLE: + Cs(this, e); + break; + case Yi.IN_TABLE_TEXT: + ks(this, e); + break; + case Yi.IN_CAPTION: + !function (e, t) { + var n = t.tagID; + Ls.has(n) ? e.openElements.hasInTableScope(Ur.CAPTION) && (e.openElements.generateImpliedEndTags(), e.openElements.popUntilTagNamePopped(Ur.CAPTION), e.activeFormattingElements.clearToLastMarker(), e.insertionMode = Yi.IN_TABLE, Cs(e, t)) : As(e, t) + }(this, e); + break; + case Yi.IN_COLUMN_GROUP: + Ds(this, e); + break; + case Yi.IN_TABLE_BODY: + ws(this, e); + break; + case Yi.IN_ROW: + Ms(this, e); + break; + case Yi.IN_CELL: + !function (e, t) { + var n = t.tagID; + Ls.has(n) ? (e.openElements.hasInTableScope(Ur.TD) || e.openElements.hasInTableScope(Ur.TH)) && (e._closeTableCell(), Ms(e, t)) : As(e, t) + }(this, e); + break; + case Yi.IN_SELECT: + Bs(this, e); + break; + case Yi.IN_SELECT_IN_TABLE: + !function (e, t) { + var n = t.tagID; + n === Ur.CAPTION || n === Ur.TABLE || n === Ur.TBODY || n === Ur.TFOOT || n === Ur.THEAD || n === Ur.TR || n === Ur.TD || n === Ur.TH ? (e.openElements.popUntilTagNamePopped(Ur.SELECT), e._resetInsertionMode(), e._processStartTag(t)) : Bs(e, t) + }(this, e); + break; + case Yi.IN_TEMPLATE: + !function (e, t) { + switch (t.tagID) { + case Ur.BASE: + case Ur.BASEFONT: + case Ur.BGSOUND: + case Ur.LINK: + case Ur.META: + case Ur.NOFRAMES: + case Ur.SCRIPT: + case Ur.STYLE: + case Ur.TEMPLATE: + case Ur.TITLE: + os(e, t); + break; + case Ur.CAPTION: + case Ur.COLGROUP: + case Ur.TBODY: + case Ur.TFOOT: + case Ur.THEAD: + e.tmplInsertionModeStack[0] = Yi.IN_TABLE, e.insertionMode = Yi.IN_TABLE, Cs(e, t); + break; + case Ur.COL: + e.tmplInsertionModeStack[0] = Yi.IN_COLUMN_GROUP, e.insertionMode = Yi.IN_COLUMN_GROUP, Ds(e, t); + break; + case Ur.TR: + e.tmplInsertionModeStack[0] = Yi.IN_TABLE_BODY, e.insertionMode = Yi.IN_TABLE_BODY, ws(e, t); + break; + case Ur.TD: + case Ur.TH: + e.tmplInsertionModeStack[0] = Yi.IN_ROW, e.insertionMode = Yi.IN_ROW, Ms(e, t); + break; + default: + e.tmplInsertionModeStack[0] = Yi.IN_BODY, e.insertionMode = Yi.IN_BODY, As(e, t) + } + }(this, e); + break; + case Yi.AFTER_BODY: + !function (e, t) { + (t.tagID === Ur.HTML ? As : Gs)(e, t) + }(this, e); + break; + case Yi.IN_FRAMESET: + !function (e, t) { + switch (t.tagID) { + case Ur.HTML: + As(e, t); + break; + case Ur.FRAMESET: + e._insertElement(t, Mr.HTML); + break; + case Ur.FRAME: + e._appendElement(t, Mr.HTML), t.ackSelfClosing = !0; + break; + case Ur.NOFRAMES: + os(e, t) + } + }(this, e); + break; + case Yi.AFTER_FRAMESET: + !function (e, t) { + switch (t.tagID) { + case Ur.HTML: + As(e, t); + break; + case Ur.NOFRAMES: + os(e, t) + } + }(this, e); + break; + case Yi.AFTER_AFTER_BODY: + !function (e, t) { + (t.tagID === Ur.HTML ? As : js)(e, t) + }(this, e); + break; + case Yi.AFTER_AFTER_FRAMESET: + !function (e, t) { + switch (t.tagID) { + case Ur.HTML: + As(e, t); + break; + case Ur.NOFRAMES: + os(e, t) + } + }(this, e) + } + } + + onEndTag(e) { + this.skipNextNewLine = !1, this.currentToken = e, this.currentNotInHTML ? function (e, t) { + if (t.tagID === Ur.P || t.tagID === Ur.BR) return qs(e), e._endTagOutsideForeignContent(t); + for (let n = e.openElements.stackTop; 0 < n; n--) { + var r = e.openElements.items[n]; + if (e.treeAdapter.getNamespaceURI(r) === Mr.HTML) { + e._endTagOutsideForeignContent(t); + break + } + if ((r = e.treeAdapter.getTagName(r)).toLowerCase() === t.tagName) { + t.tagName = r, e.openElements.shortenToLength(n); + break + } + } + }(this, e) : this._endTagOutsideForeignContent(e) + } + + _endTagOutsideForeignContent(e) { + switch (this.insertionMode) { + case Yi.INITIAL: + is(this, e); + break; + case Yi.BEFORE_HTML: + !function (e, t) { + var n = t.tagID; + n !== Ur.HTML && n !== Ur.HEAD && n !== Ur.BODY && n !== Ur.BR || ss(e, t) + }(this, e); + break; + case Yi.BEFORE_HEAD: + !function (e, t) { + var n = t.tagID; + n === Ur.HEAD || n === Ur.BODY || n === Ur.HTML || n === Ur.BR ? as(e, t) : e._err(t, _r.endTagWithoutMatchingOpenElement) + }(this, e); + break; + case Yi.IN_HEAD: + !function (e, t) { + switch (t.tagID) { + case Ur.HEAD: + e.openElements.pop(), e.insertionMode = Yi.AFTER_HEAD; + break; + case Ur.BODY: + case Ur.BR: + case Ur.HTML: + us(e, t); + break; + case Ur.TEMPLATE: + cs(e, t); + break; + default: + e._err(t, _r.endTagWithoutMatchingOpenElement) + } + }(this, e); + break; + case Yi.IN_HEAD_NO_SCRIPT: + !function (e, t) { + switch (t.tagID) { + case Ur.NOSCRIPT: + e.openElements.pop(), e.insertionMode = Yi.IN_HEAD; + break; + case Ur.BR: + ls(e, t); + break; + default: + e._err(t, _r.endTagWithoutMatchingOpenElement) + } + }(this, e); + break; + case Yi.AFTER_HEAD: + !function (e, t) { + switch (t.tagID) { + case Ur.BODY: + case Ur.HTML: + case Ur.BR: + hs(e, t); + break; + case Ur.TEMPLATE: + cs(e, t); + break; + default: + e._err(t, _r.endTagWithoutMatchingOpenElement) + } + }(this, e); + break; + case Yi.IN_BODY: + vs(this, e); + break; + case Yi.TEXT: + !function (e, t) { + t.tagID === Ur.SCRIPT && null != (t = e.scriptHandler) && t.call(e, e.openElements.current), e.openElements.pop(), e.insertionMode = e.originalInsertionMode + }(this, e); + break; + case Yi.IN_TABLE: + Ns(this, e); + break; + case Yi.IN_TABLE_TEXT: + ks(this, e); + break; + case Yi.IN_CAPTION: + !function (e, t) { + var n = t.tagID; + switch (n) { + case Ur.CAPTION: + case Ur.TABLE: + e.openElements.hasInTableScope(Ur.CAPTION) && (e.openElements.generateImpliedEndTags(), e.openElements.popUntilTagNamePopped(Ur.CAPTION), e.activeFormattingElements.clearToLastMarker(), e.insertionMode = Yi.IN_TABLE, n === Ur.TABLE) && Ns(e, t); + break; + case Ur.BODY: + case Ur.COL: + case Ur.COLGROUP: + case Ur.HTML: + case Ur.TBODY: + case Ur.TD: + case Ur.TFOOT: + case Ur.TH: + case Ur.THEAD: + case Ur.TR: + break; + default: + vs(e, t) + } + }(this, e); + break; + case Yi.IN_COLUMN_GROUP: + !function (e, t) { + switch (t.tagID) { + case Ur.COLGROUP: + e.openElements.currentTagId === Ur.COLGROUP && (e.openElements.pop(), e.insertionMode = Yi.IN_TABLE); + break; + case Ur.TEMPLATE: + cs(e, t); + break; + case Ur.COL: + break; + default: + Rs(e, t) + } + }(this, e); + break; + case Yi.IN_TABLE_BODY: + xs(this, e); + break; + case Yi.IN_ROW: + Ps(this, e); + break; + case Yi.IN_CELL: + !function (e, t) { + var n = t.tagID; + switch (n) { + case Ur.TD: + case Ur.TH: + e.openElements.hasInTableScope(n) && (e.openElements.generateImpliedEndTags(), e.openElements.popUntilTagNamePopped(n), e.activeFormattingElements.clearToLastMarker(), e.insertionMode = Yi.IN_ROW); + break; + case Ur.TABLE: + case Ur.TBODY: + case Ur.TFOOT: + case Ur.THEAD: + case Ur.TR: + e.openElements.hasInTableScope(n) && (e._closeTableCell(), Ps(e, t)); + break; + case Ur.BODY: + case Ur.CAPTION: + case Ur.COL: + case Ur.COLGROUP: + case Ur.HTML: + break; + default: + vs(e, t) + } + }(this, e); + break; + case Yi.IN_SELECT: + Fs(this, e); + break; + case Yi.IN_SELECT_IN_TABLE: + !function (e, t) { + var n = t.tagID; + n === Ur.CAPTION || n === Ur.TABLE || n === Ur.TBODY || n === Ur.TFOOT || n === Ur.THEAD || n === Ur.TR || n === Ur.TD || n === Ur.TH ? e.openElements.hasInTableScope(n) && (e.openElements.popUntilTagNamePopped(Ur.SELECT), e._resetInsertionMode(), e.onEndTag(t)) : Fs(e, t) + }(this, e); + break; + case Yi.IN_TEMPLATE: + !function (e, t) { + t.tagID === Ur.TEMPLATE && cs(e, t) + }(this, e); + break; + case Yi.AFTER_BODY: + Hs(this, e); + break; + case Yi.IN_FRAMESET: + !function (e, t) { + t.tagID !== Ur.FRAMESET || e.openElements.isRootHtmlElementCurrent() || (e.openElements.pop(), e.fragmentContext) || e.openElements.currentTagId === Ur.FRAMESET || (e.insertionMode = Yi.AFTER_FRAMESET) + }(this, e); + break; + case Yi.AFTER_FRAMESET: + !function (e, t) { + t.tagID === Ur.HTML && (e.insertionMode = Yi.AFTER_AFTER_FRAMESET) + }(this, e); + break; + case Yi.AFTER_AFTER_BODY: + js(this, e) + } + } + + onEof(e) { + switch (this.insertionMode) { + case Yi.INITIAL: + is(this, e); + break; + case Yi.BEFORE_HTML: + ss(this, e); + break; + case Yi.BEFORE_HEAD: + as(this, e); + break; + case Yi.IN_HEAD: + us(this, e); + break; + case Yi.IN_HEAD_NO_SCRIPT: + ls(this, e); + break; + case Yi.AFTER_HEAD: + hs(this, e); + break; + case Yi.IN_BODY: + case Yi.IN_TABLE: + case Yi.IN_CAPTION: + case Yi.IN_COLUMN_GROUP: + case Yi.IN_TABLE_BODY: + case Yi.IN_ROW: + case Yi.IN_CELL: + case Yi.IN_SELECT: + case Yi.IN_SELECT_IN_TABLE: + ys(this, e); + break; + case Yi.TEXT: + !function (e, t) { + e._err(t, _r.eofInElementThatCanContainOnlyText), e.openElements.pop(), e.insertionMode = e.originalInsertionMode, e.onEof(t) + }(this, e); + break; + case Yi.IN_TABLE_TEXT: + ks(this, e); + break; + case Yi.IN_TEMPLATE: + Us(this, e); + break; + case Yi.AFTER_BODY: + case Yi.IN_FRAMESET: + case Yi.AFTER_FRAMESET: + case Yi.AFTER_AFTER_BODY: + case Yi.AFTER_AFTER_FRAMESET: + rs(this, e) + } + } + + onWhitespaceCharacter(e) { + if (this.skipNextNewLine && (this.skipNextNewLine = !1, e.chars.charCodeAt(0) === ar.LINE_FEED)) { + if (1 === e.chars.length) return; + e.chars = e.chars.substr(1) + } + if (this.tokenizer.inForeignNode) this._insertCharacters(e); else switch (this.insertionMode) { + case Yi.IN_HEAD: + case Yi.IN_HEAD_NO_SCRIPT: + case Yi.AFTER_HEAD: + case Yi.TEXT: + case Yi.IN_COLUMN_GROUP: + case Yi.IN_SELECT: + case Yi.IN_SELECT_IN_TABLE: + case Yi.IN_FRAMESET: + case Yi.AFTER_FRAMESET: + this._insertCharacters(e); + break; + case Yi.IN_BODY: + case Yi.IN_CAPTION: + case Yi.IN_CELL: + case Yi.IN_TEMPLATE: + case Yi.AFTER_BODY: + case Yi.AFTER_AFTER_BODY: + case Yi.AFTER_AFTER_FRAMESET: + ps(this, e); + break; + case Yi.IN_TABLE: + case Yi.IN_TABLE_BODY: + case Yi.IN_ROW: + Ss(this, e); + break; + case Yi.IN_TABLE_TEXT: + Is(this, e) + } + } +} + +function Qi(e, t) { + let n = e.activeFormattingElements.getElementEntryInScopeWithTagName(t.tagName); + return n ? e.openElements.contains(n.element) ? e.openElements.hasInScope(t.tagID) || (n = null) : (e.activeFormattingElements.removeEntry(n), n = null) : gs(e, t), n +} + +function zi(e, t) { + let n = null, r = e.openElements.stackTop; + for (; 0 <= r; r--) { + var i = e.openElements.items[r]; + if (i === t.element) break; + e._isSpecialElement(i, e.openElements.tagIDs[r]) && (n = i) + } + return n || (e.openElements.shortenToLength(r < 0 ? 0 : r), e.activeFormattingElements.removeEntry(t)), n +} + +function Xi(e, t, n) { + let r = t, i = e.openElements.getCommonAncestor(t); + for (let s = 0, a = i; a !== n; s++, a = i) { + i = e.openElements.getCommonAncestor(a); + const n = e.activeFormattingElements.getElementEntry(a), o = n && s >= qi; + !n || o ? (o && e.activeFormattingElements.removeEntry(n), e.openElements.remove(a)) : (a = Zi(e, n), r === t && (e.activeFormattingElements.bookmark = n), e.treeAdapter.detachNode(r), e.treeAdapter.appendChild(a, r), r = a) + } + return r +} + +function Zi(e, t) { + var n = e.treeAdapter.getNamespaceURI(t.element), + n = e.treeAdapter.createElement(t.token.tagName, n, t.token.attrs); + return e.openElements.replace(t.element, n), t.element = n +} + +function Ji(e, t, n) { + var i, r = qr(e.treeAdapter.getTagName(t)); + e._isElementCausesFosterParenting(r) ? e._fosterParentElement(n) : (i = e.treeAdapter.getNamespaceURI(t), r === Ur.TEMPLATE && i === Mr.HTML && (t = e.treeAdapter.getTemplateContent(t)), e.treeAdapter.appendChild(t, n)) +} + +function es(e, t, n) { + var r = e.treeAdapter.getNamespaceURI(n.element), i = n.token, + r = e.treeAdapter.createElement(i.tagName, r, i.attrs); + e._adoptNodes(t, r), e.treeAdapter.appendChild(t, r), e.activeFormattingElements.insertElementAfterBookmark(r, i), e.activeFormattingElements.removeEntry(n), e.openElements.remove(n.element), e.openElements.insertAfter(t, r, i.tagID) +} + +function ts(e, t) { + for (let n = 0; n < ji; n++) { + const n = Qi(e, t); + if (!n) break; + var r = zi(e, n); + if (!r) break; + e.activeFormattingElements.bookmark = n; + var i = Xi(e, r, n.element), s = e.openElements.getCommonAncestor(n.element); + e.treeAdapter.detachNode(i), s && Ji(e, s, i), es(e, r, n) + } +} + +function ns(e, t) { + e._appendCommentNode(t, e.openElements.currentTmplContentOrNode) +} + +function rs(e, t) { + if (e.stopped = !0, t.location) { + var n = e.fragmentContext ? 0 : 2; + for (let r = e.openElements.stackTop; r >= n; r--) e._setEndLocation(e.openElements.items[r], t); + if (!e.fragmentContext && 0 <= e.openElements.stackTop) { + const n = e.openElements.items[0], r = e.treeAdapter.getNodeSourceCodeLocation(n); + if (r && !r.endTag && (e._setEndLocation(n, t), 1 <= e.openElements.stackTop)) { + const n = e.openElements.items[1], r = e.treeAdapter.getNodeSourceCodeLocation(n); + r && !r.endTag && e._setEndLocation(n, t) + } + } + } +} + +function is(e, t) { + e._err(t, _r.missingDoctype, !0), e.treeAdapter.setDocumentMode(e.document, Br.QUIRKS), e.insertionMode = Yi.BEFORE_HTML, e._processToken(t) +} + +function ss(e, t) { + e._insertFakeRootElement(), e.insertionMode = Yi.BEFORE_HEAD, e._processToken(t) +} + +function as(e, t) { + e._insertFakeElement(Fr.HEAD, Ur.HEAD), e.headElement = e.openElements.current, e.insertionMode = Yi.IN_HEAD, e._processToken(t) +} + +function os(e, t) { + switch (t.tagID) { + case Ur.HTML: + As(e, t); + break; + case Ur.BASE: + case Ur.BASEFONT: + case Ur.BGSOUND: + case Ur.LINK: + case Ur.META: + e._appendElement(t, Mr.HTML), t.ackSelfClosing = !0; + break; + case Ur.TITLE: + e._switchToTextParsing(t, zr.RCDATA); + break; + case Ur.NOSCRIPT: + e.options.scriptingEnabled ? e._switchToTextParsing(t, zr.RAWTEXT) : (e._insertElement(t, Mr.HTML), e.insertionMode = Yi.IN_HEAD_NO_SCRIPT); + break; + case Ur.NOFRAMES: + case Ur.STYLE: + e._switchToTextParsing(t, zr.RAWTEXT); + break; + case Ur.SCRIPT: + e._switchToTextParsing(t, zr.SCRIPT_DATA); + break; + case Ur.TEMPLATE: + e._insertTemplate(t), e.activeFormattingElements.insertMarker(), e.framesetOk = !1, e.insertionMode = Yi.IN_TEMPLATE, e.tmplInsertionModeStack.unshift(Yi.IN_TEMPLATE); + break; + case Ur.HEAD: + e._err(t, _r.misplacedStartTagForHeadElement); + break; + default: + us(e, t) + } +} + +function cs(e, t) { + 0 < e.openElements.tmplCount ? (e.openElements.generateImpliedEndTagsThoroughly(), e.openElements.currentTagId !== Ur.TEMPLATE && e._err(t, _r.closingOfElementWithOpenChildElements), e.openElements.popUntilTagNamePopped(Ur.TEMPLATE), e.activeFormattingElements.clearToLastMarker(), e.tmplInsertionModeStack.shift(), e._resetInsertionMode()) : e._err(t, _r.endTagWithoutMatchingOpenElement) +} + +function us(e, t) { + e.openElements.pop(), e.insertionMode = Yi.AFTER_HEAD, e._processToken(t) +} + +function ls(e, t) { + var n = t.type === Tr.EOF ? _r.openElementsLeftAfterEof : _r.disallowedContentInNoscriptInHead; + e._err(t, n), e.openElements.pop(), e.insertionMode = Yi.IN_HEAD, e._processToken(t) +} + +function hs(e, t) { + e._insertFakeElement(Fr.BODY, Ur.BODY), e.insertionMode = Yi.IN_BODY, fs(e, t) +} + +function fs(e, t) { + switch (t.type) { + case Tr.CHARACTER: + ds(e, t); + break; + case Tr.WHITESPACE_CHARACTER: + ps(e, t); + break; + case Tr.COMMENT: + ns(e, t); + break; + case Tr.START_TAG: + As(e, t); + break; + case Tr.END_TAG: + vs(e, t); + break; + case Tr.EOF: + ys(e, t) + } +} + +function ps(e, t) { + e._reconstructActiveFormattingElements(), e._insertCharacters(t) +} + +function ds(e, t) { + e._reconstructActiveFormattingElements(), e._insertCharacters(t), e.framesetOk = !1 +} + +function ms(e, t) { + e._reconstructActiveFormattingElements(), e._appendElement(t, Mr.HTML), e.framesetOk = !1, t.ackSelfClosing = !0 +} + +function _s(e) { + return null != (e = Ar(e, Pr.TYPE)) && e.toLowerCase() === Gi +} + +function Es(e, t) { + e._switchToTextParsing(t, zr.RAWTEXT) +} + +function Ts(e, t) { + e._reconstructActiveFormattingElements(), e._insertElement(t, Mr.HTML) +} + +function As(e, t) { + switch (t.tagID) { + case Ur.I: + case Ur.S: + case Ur.B: + case Ur.U: + case Ur.EM: + case Ur.TT: + case Ur.BIG: + case Ur.CODE: + case Ur.FONT: + case Ur.SMALL: + case Ur.STRIKE: + case Ur.STRONG: + !function (e, t) { + e._reconstructActiveFormattingElements(), e._insertElement(t, Mr.HTML), e.activeFormattingElements.pushElement(e.openElements.current, t) + }(e, t); + break; + case Ur.A: + !function (e, t) { + var n = e.activeFormattingElements.getElementEntryInScopeWithTagName(Fr.A); + n && (ts(e, t), e.openElements.remove(n.element), e.activeFormattingElements.removeEntry(n)), e._reconstructActiveFormattingElements(), e._insertElement(t, Mr.HTML), e.activeFormattingElements.pushElement(e.openElements.current, t) + }(e, t); + break; + case Ur.H1: + case Ur.H2: + case Ur.H3: + case Ur.H4: + case Ur.H5: + case Ur.H6: + !function (e, t) { + e.openElements.hasInButtonScope(Ur.P) && e._closePElement(), Wr(e.openElements.currentTagId) && e.openElements.pop(), e._insertElement(t, Mr.HTML) + }(e, t); + break; + case Ur.P: + case Ur.DL: + case Ur.OL: + case Ur.UL: + case Ur.DIV: + case Ur.DIR: + case Ur.NAV: + case Ur.MAIN: + case Ur.MENU: + case Ur.ASIDE: + case Ur.CENTER: + case Ur.FIGURE: + case Ur.FOOTER: + case Ur.HEADER: + case Ur.HGROUP: + case Ur.DIALOG: + case Ur.DETAILS: + case Ur.ADDRESS: + case Ur.ARTICLE: + case Ur.SECTION: + case Ur.SUMMARY: + case Ur.FIELDSET: + case Ur.BLOCKQUOTE: + case Ur.FIGCAPTION: + !function (e, t) { + e.openElements.hasInButtonScope(Ur.P) && e._closePElement(), e._insertElement(t, Mr.HTML) + }(e, t); + break; + case Ur.LI: + case Ur.DD: + case Ur.DT: + !function (e, t) { + e.framesetOk = !1; + var n = t.tagID; + for (let t = e.openElements.stackTop; 0 <= t; t--) { + var r = e.openElements.tagIDs[t]; + if (n === Ur.LI && r === Ur.LI || (n === Ur.DD || n === Ur.DT) && (r === Ur.DD || r === Ur.DT)) { + e.openElements.generateImpliedEndTagsWithExclusion(r), e.openElements.popUntilTagNamePopped(r); + break + } + if (r !== Ur.ADDRESS && r !== Ur.DIV && r !== Ur.P && e._isSpecialElement(e.openElements.items[t], r)) break + } + e.openElements.hasInButtonScope(Ur.P) && e._closePElement(), e._insertElement(t, Mr.HTML) + }(e, t); + break; + case Ur.BR: + case Ur.IMG: + case Ur.WBR: + case Ur.AREA: + case Ur.EMBED: + case Ur.KEYGEN: + ms(e, t); + break; + case Ur.HR: + !function (e, t) { + e.openElements.hasInButtonScope(Ur.P) && e._closePElement(), e._appendElement(t, Mr.HTML), e.framesetOk = !1, t.ackSelfClosing = !0 + }(e, t); + break; + case Ur.RB: + case Ur.RTC: + !function (e, t) { + e.openElements.hasInScope(Ur.RUBY) && e.openElements.generateImpliedEndTags(), e._insertElement(t, Mr.HTML) + }(e, t); + break; + case Ur.RT: + case Ur.RP: + !function (e, t) { + e.openElements.hasInScope(Ur.RUBY) && e.openElements.generateImpliedEndTagsWithExclusion(Ur.RTC), e._insertElement(t, Mr.HTML) + }(e, t); + break; + case Ur.PRE: + case Ur.LISTING: + !function (e, t) { + e.openElements.hasInButtonScope(Ur.P) && e._closePElement(), e._insertElement(t, Mr.HTML), e.skipNextNewLine = !0, e.framesetOk = !1 + }(e, t); + break; + case Ur.XMP: + !function (e, t) { + e.openElements.hasInButtonScope(Ur.P) && e._closePElement(), e._reconstructActiveFormattingElements(), e.framesetOk = !1, e._switchToTextParsing(t, zr.RAWTEXT) + }(e, t); + break; + case Ur.SVG: + !function (e, t) { + e._reconstructActiveFormattingElements(), Fi(t), Ui(t), t.selfClosing ? e._appendElement(t, Mr.SVG) : e._insertElement(t, Mr.SVG), t.ackSelfClosing = !0 + }(e, t); + break; + case Ur.HTML: + !function (e, t) { + 0 === e.openElements.tmplCount && e.treeAdapter.adoptAttributes(e.openElements.items[0], t.attrs) + }(e, t); + break; + case Ur.BASE: + case Ur.LINK: + case Ur.META: + case Ur.STYLE: + case Ur.TITLE: + case Ur.SCRIPT: + case Ur.BGSOUND: + case Ur.BASEFONT: + case Ur.TEMPLATE: + os(e, t); + break; + case Ur.BODY: + !function (e, t) { + var n = e.openElements.tryPeekProperlyNestedBodyElement(); + n && 0 === e.openElements.tmplCount && (e.framesetOk = !1, e.treeAdapter.adoptAttributes(n, t.attrs)) + }(e, t); + break; + case Ur.FORM: + !function (e, t) { + var n = 0 < e.openElements.tmplCount; + e.formElement && !n || (e.openElements.hasInButtonScope(Ur.P) && e._closePElement(), e._insertElement(t, Mr.HTML), n) || (e.formElement = e.openElements.current) + }(e, t); + break; + case Ur.NOBR: + !function (e, t) { + e._reconstructActiveFormattingElements(), e.openElements.hasInScope(Ur.NOBR) && (ts(e, t), e._reconstructActiveFormattingElements()), e._insertElement(t, Mr.HTML), e.activeFormattingElements.pushElement(e.openElements.current, t) + }(e, t); + break; + case Ur.MATH: + !function (e, t) { + e._reconstructActiveFormattingElements(), Bi(t), Ui(t), t.selfClosing ? e._appendElement(t, Mr.MATHML) : e._insertElement(t, Mr.MATHML), t.ackSelfClosing = !0 + }(e, t); + break; + case Ur.TABLE: + !function (e, t) { + e.treeAdapter.getDocumentMode(e.document) !== Br.QUIRKS && e.openElements.hasInButtonScope(Ur.P) && e._closePElement(), e._insertElement(t, Mr.HTML), e.framesetOk = !1, e.insertionMode = Yi.IN_TABLE + }(e, t); + break; + case Ur.INPUT: + !function (e, t) { + e._reconstructActiveFormattingElements(), e._appendElement(t, Mr.HTML), _s(t) || (e.framesetOk = !1), t.ackSelfClosing = !0 + }(e, t); + break; + case Ur.PARAM: + case Ur.TRACK: + case Ur.SOURCE: + !function (e, t) { + e._appendElement(t, Mr.HTML), t.ackSelfClosing = !0 + }(e, t); + break; + case Ur.IMAGE: + !function (e, t) { + t.tagName = Fr.IMG, t.tagID = Ur.IMG, ms(e, t) + }(e, t); + break; + case Ur.BUTTON: + !function (e, t) { + e.openElements.hasInScope(Ur.BUTTON) && (e.openElements.generateImpliedEndTags(), e.openElements.popUntilTagNamePopped(Ur.BUTTON)), e._reconstructActiveFormattingElements(), e._insertElement(t, Mr.HTML), e.framesetOk = !1 + }(e, t); + break; + case Ur.APPLET: + case Ur.OBJECT: + case Ur.MARQUEE: + !function (e, t) { + e._reconstructActiveFormattingElements(), e._insertElement(t, Mr.HTML), e.activeFormattingElements.insertMarker(), e.framesetOk = !1 + }(e, t); + break; + case Ur.IFRAME: + !function (e, t) { + e.framesetOk = !1, e._switchToTextParsing(t, zr.RAWTEXT) + }(e, t); + break; + case Ur.SELECT: + !function (e, t) { + e._reconstructActiveFormattingElements(), e._insertElement(t, Mr.HTML), e.framesetOk = !1, e.insertionMode = e.insertionMode === Yi.IN_TABLE || e.insertionMode === Yi.IN_CAPTION || e.insertionMode === Yi.IN_TABLE_BODY || e.insertionMode === Yi.IN_ROW || e.insertionMode === Yi.IN_CELL ? Yi.IN_SELECT_IN_TABLE : Yi.IN_SELECT + }(e, t); + break; + case Ur.OPTION: + case Ur.OPTGROUP: + !function (e, t) { + e.openElements.currentTagId === Ur.OPTION && e.openElements.pop(), e._reconstructActiveFormattingElements(), e._insertElement(t, Mr.HTML) + }(e, t); + break; + case Ur.NOEMBED: + Es(e, t); + break; + case Ur.FRAMESET: + !function (e, t) { + var n = e.openElements.tryPeekProperlyNestedBodyElement(); + e.framesetOk && n && (e.treeAdapter.detachNode(n), e.openElements.popAllUpToHtmlElement(), e._insertElement(t, Mr.HTML), e.insertionMode = Yi.IN_FRAMESET) + }(e, t); + break; + case Ur.TEXTAREA: + !function (e, t) { + e._insertElement(t, Mr.HTML), e.skipNextNewLine = !0, e.tokenizer.state = zr.RCDATA, e.originalInsertionMode = e.insertionMode, e.framesetOk = !1, e.insertionMode = Yi.TEXT + }(e, t); + break; + case Ur.NOSCRIPT: + (e.options.scriptingEnabled ? Es : Ts)(e, t); + break; + case Ur.PLAINTEXT: + !function (e, t) { + e.openElements.hasInButtonScope(Ur.P) && e._closePElement(), e._insertElement(t, Mr.HTML), e.tokenizer.state = zr.PLAINTEXT + }(e, t); + break; + case Ur.COL: + case Ur.TH: + case Ur.TD: + case Ur.TR: + case Ur.HEAD: + case Ur.FRAME: + case Ur.TBODY: + case Ur.TFOOT: + case Ur.THEAD: + case Ur.CAPTION: + case Ur.COLGROUP: + break; + default: + Ts(e, t) + } +} + +function gs(e, t) { + var n = t.tagName, r = t.tagID; + for (let t = e.openElements.stackTop; 0 < t; t--) { + var i = e.openElements.items[t], s = e.openElements.tagIDs[t]; + if (r === s && (r !== Ur.UNKNOWN || e.treeAdapter.getTagName(i) === n)) { + e.openElements.generateImpliedEndTagsWithExclusion(r), e.openElements.stackTop >= t && e.openElements.shortenToLength(t); + break + } + if (e._isSpecialElement(i, s)) break + } +} + +function vs(e, t) { + switch (t.tagID) { + case Ur.A: + case Ur.B: + case Ur.I: + case Ur.S: + case Ur.U: + case Ur.EM: + case Ur.TT: + case Ur.BIG: + case Ur.CODE: + case Ur.FONT: + case Ur.NOBR: + case Ur.SMALL: + case Ur.STRIKE: + case Ur.STRONG: + ts(e, t); + break; + case Ur.P: + !function (e) { + e.openElements.hasInButtonScope(Ur.P) || e._insertFakeElement(Fr.P, Ur.P), e._closePElement() + }(e); + break; + case Ur.DL: + case Ur.UL: + case Ur.OL: + case Ur.DIR: + case Ur.DIV: + case Ur.NAV: + case Ur.PRE: + case Ur.MAIN: + case Ur.MENU: + case Ur.ASIDE: + case Ur.BUTTON: + case Ur.CENTER: + case Ur.FIGURE: + case Ur.FOOTER: + case Ur.HEADER: + case Ur.HGROUP: + case Ur.DIALOG: + case Ur.ADDRESS: + case Ur.ARTICLE: + case Ur.DETAILS: + case Ur.SECTION: + case Ur.SUMMARY: + case Ur.LISTING: + case Ur.FIELDSET: + case Ur.BLOCKQUOTE: + case Ur.FIGCAPTION: + !function (e, t) { + t = t.tagID, e.openElements.hasInScope(t) && (e.openElements.generateImpliedEndTags(), e.openElements.popUntilTagNamePopped(t)) + }(e, t); + break; + case Ur.LI: + !function (e) { + e.openElements.hasInListItemScope(Ur.LI) && (e.openElements.generateImpliedEndTagsWithExclusion(Ur.LI), e.openElements.popUntilTagNamePopped(Ur.LI)) + }(e); + break; + case Ur.DD: + case Ur.DT: + !function (e, t) { + t = t.tagID, e.openElements.hasInScope(t) && (e.openElements.generateImpliedEndTagsWithExclusion(t), e.openElements.popUntilTagNamePopped(t)) + }(e, t); + break; + case Ur.H1: + case Ur.H2: + case Ur.H3: + case Ur.H4: + case Ur.H5: + case Ur.H6: + !function (e) { + e.openElements.hasNumberedHeaderInScope() && (e.openElements.generateImpliedEndTags(), e.openElements.popUntilNumberedHeaderPopped()) + }(e); + break; + case Ur.BR: + !function (e) { + e._reconstructActiveFormattingElements(), e._insertFakeElement(Fr.BR, Ur.BR), e.openElements.pop(), e.framesetOk = !1 + }(e); + break; + case Ur.BODY: + !function (e, t) { + var n; + e.openElements.hasInScope(Ur.BODY) && (e.insertionMode = Yi.AFTER_BODY, e.options.sourceCodeLocationInfo) && ((n = e.openElements.tryPeekProperlyNestedBodyElement()) && e._setEndLocation(n, t)) + }(e, t); + break; + case Ur.HTML: + !function (e, t) { + e.openElements.hasInScope(Ur.BODY) && (e.insertionMode = Yi.AFTER_BODY, Hs(e, t)) + }(e, t); + break; + case Ur.FORM: + !function (e) { + var t = 0 < e.openElements.tmplCount, n = e.formElement; + t || (e.formElement = null), (n || t) && e.openElements.hasInScope(Ur.FORM) && (e.openElements.generateImpliedEndTags(), t ? e.openElements.popUntilTagNamePopped(Ur.FORM) : n && e.openElements.remove(n)) + }(e); + break; + case Ur.APPLET: + case Ur.OBJECT: + case Ur.MARQUEE: + !function (e, t) { + t = t.tagID, e.openElements.hasInScope(t) && (e.openElements.generateImpliedEndTags(), e.openElements.popUntilTagNamePopped(t), e.activeFormattingElements.clearToLastMarker()) + }(e, t); + break; + case Ur.TEMPLATE: + cs(e, t); + break; + default: + gs(e, t) + } +} + +function ys(e, t) { + (0 < e.tmplInsertionModeStack.length ? Us : rs)(e, t) +} + +function Ss(e, t) { + if (Wi.has(e.openElements.currentTagId)) switch (e.pendingCharacterTokens.length = 0, e.hasNonWhitespacePendingCharacterToken = !1, e.originalInsertionMode = e.insertionMode, e.insertionMode = Yi.IN_TABLE_TEXT, t.type) { + case Tr.CHARACTER: + Os(e, t); + break; + case Tr.WHITESPACE_CHARACTER: + Is(e, t) + } else bs(e, t) +} + +function Cs(e, t) { + switch (t.tagID) { + case Ur.TD: + case Ur.TH: + case Ur.TR: + !function (e, t) { + e.openElements.clearBackToTableContext(), e._insertFakeElement(Fr.TBODY, Ur.TBODY), e.insertionMode = Yi.IN_TABLE_BODY, ws(e, t) + }(e, t); + break; + case Ur.STYLE: + case Ur.SCRIPT: + case Ur.TEMPLATE: + os(e, t); + break; + case Ur.COL: + !function (e, t) { + e.openElements.clearBackToTableContext(), e._insertFakeElement(Fr.COLGROUP, Ur.COLGROUP), e.insertionMode = Yi.IN_COLUMN_GROUP, Ds(e, t) + }(e, t); + break; + case Ur.FORM: + !function (e, t) { + e.formElement || 0 !== e.openElements.tmplCount || (e._insertElement(t, Mr.HTML), e.formElement = e.openElements.current, e.openElements.pop()) + }(e, t); + break; + case Ur.TABLE: + !function (e, t) { + e.openElements.hasInTableScope(Ur.TABLE) && (e.openElements.popUntilTagNamePopped(Ur.TABLE), e._resetInsertionMode(), e._processStartTag(t)) + }(e, t); + break; + case Ur.TBODY: + case Ur.TFOOT: + case Ur.THEAD: + !function (e, t) { + e.openElements.clearBackToTableContext(), e._insertElement(t, Mr.HTML), e.insertionMode = Yi.IN_TABLE_BODY + }(e, t); + break; + case Ur.INPUT: + !function (e, t) { + _s(t) ? e._appendElement(t, Mr.HTML) : bs(e, t), t.ackSelfClosing = !0 + }(e, t); + break; + case Ur.CAPTION: + !function (e, t) { + e.openElements.clearBackToTableContext(), e.activeFormattingElements.insertMarker(), e._insertElement(t, Mr.HTML), e.insertionMode = Yi.IN_CAPTION + }(e, t); + break; + case Ur.COLGROUP: + !function (e, t) { + e.openElements.clearBackToTableContext(), e._insertElement(t, Mr.HTML), e.insertionMode = Yi.IN_COLUMN_GROUP + }(e, t); + break; + default: + bs(e, t) + } +} + +function Ns(e, t) { + switch (t.tagID) { + case Ur.TABLE: + e.openElements.hasInTableScope(Ur.TABLE) && (e.openElements.popUntilTagNamePopped(Ur.TABLE), e._resetInsertionMode()); + break; + case Ur.TEMPLATE: + cs(e, t); + break; + case Ur.BODY: + case Ur.CAPTION: + case Ur.COL: + case Ur.COLGROUP: + case Ur.HTML: + case Ur.TBODY: + case Ur.TD: + case Ur.TFOOT: + case Ur.TH: + case Ur.THEAD: + case Ur.TR: + break; + default: + bs(e, t) + } +} + +function bs(e, t) { + var n = e.fosterParentingEnabled; + e.fosterParentingEnabled = !0, fs(e, t), e.fosterParentingEnabled = n +} + +function Is(e, t) { + e.pendingCharacterTokens.push(t) +} + +function Os(e, t) { + e.pendingCharacterTokens.push(t), e.hasNonWhitespacePendingCharacterToken = !0 +} + +function ks(e, t) { + let n = 0; + if (e.hasNonWhitespacePendingCharacterToken) for (; n < e.pendingCharacterTokens.length; n++) bs(e, e.pendingCharacterTokens[n]); else for (; n < e.pendingCharacterTokens.length; n++) e._insertCharacters(e.pendingCharacterTokens[n]); + e.insertionMode = e.originalInsertionMode, e._processToken(t) +} + +const Ls = new Set([Ur.CAPTION, Ur.COL, Ur.COLGROUP, Ur.TBODY, Ur.TD, Ur.TFOOT, Ur.TH, Ur.THEAD, Ur.TR]); + +function Ds(e, t) { + switch (t.tagID) { + case Ur.HTML: + As(e, t); + break; + case Ur.COL: + e._appendElement(t, Mr.HTML), t.ackSelfClosing = !0; + break; + case Ur.TEMPLATE: + os(e, t); + break; + default: + Rs(e, t) + } +} + +function Rs(e, t) { + e.openElements.currentTagId === Ur.COLGROUP && (e.openElements.pop(), e.insertionMode = Yi.IN_TABLE, e._processToken(t)) +} + +function ws(e, t) { + switch (t.tagID) { + case Ur.TR: + e.openElements.clearBackToTableBodyContext(), e._insertElement(t, Mr.HTML), e.insertionMode = Yi.IN_ROW; + break; + case Ur.TH: + case Ur.TD: + e.openElements.clearBackToTableBodyContext(), e._insertFakeElement(Fr.TR, Ur.TR), e.insertionMode = Yi.IN_ROW, Ms(e, t); + break; + case Ur.CAPTION: + case Ur.COL: + case Ur.COLGROUP: + case Ur.TBODY: + case Ur.TFOOT: + case Ur.THEAD: + e.openElements.hasTableBodyContextInTableScope() && (e.openElements.clearBackToTableBodyContext(), e.openElements.pop(), e.insertionMode = Yi.IN_TABLE, Cs(e, t)); + break; + default: + Cs(e, t) + } +} + +function xs(e, t) { + var n = t.tagID; + switch (t.tagID) { + case Ur.TBODY: + case Ur.TFOOT: + case Ur.THEAD: + e.openElements.hasInTableScope(n) && (e.openElements.clearBackToTableBodyContext(), e.openElements.pop(), e.insertionMode = Yi.IN_TABLE); + break; + case Ur.TABLE: + e.openElements.hasTableBodyContextInTableScope() && (e.openElements.clearBackToTableBodyContext(), e.openElements.pop(), e.insertionMode = Yi.IN_TABLE, Ns(e, t)); + break; + case Ur.BODY: + case Ur.CAPTION: + case Ur.COL: + case Ur.COLGROUP: + case Ur.HTML: + case Ur.TD: + case Ur.TH: + case Ur.TR: + break; + default: + Ns(e, t) + } +} + +function Ms(e, t) { + switch (t.tagID) { + case Ur.TH: + case Ur.TD: + e.openElements.clearBackToTableRowContext(), e._insertElement(t, Mr.HTML), e.insertionMode = Yi.IN_CELL, e.activeFormattingElements.insertMarker(); + break; + case Ur.CAPTION: + case Ur.COL: + case Ur.COLGROUP: + case Ur.TBODY: + case Ur.TFOOT: + case Ur.THEAD: + case Ur.TR: + e.openElements.hasInTableScope(Ur.TR) && (e.openElements.clearBackToTableRowContext(), e.openElements.pop(), e.insertionMode = Yi.IN_TABLE_BODY, ws(e, t)); + break; + default: + Cs(e, t) + } +} + +function Ps(e, t) { + switch (t.tagID) { + case Ur.TR: + e.openElements.hasInTableScope(Ur.TR) && (e.openElements.clearBackToTableRowContext(), e.openElements.pop(), e.insertionMode = Yi.IN_TABLE_BODY); + break; + case Ur.TABLE: + e.openElements.hasInTableScope(Ur.TR) && (e.openElements.clearBackToTableRowContext(), e.openElements.pop(), e.insertionMode = Yi.IN_TABLE_BODY, xs(e, t)); + break; + case Ur.TBODY: + case Ur.TFOOT: + case Ur.THEAD: + (e.openElements.hasInTableScope(t.tagID) || e.openElements.hasInTableScope(Ur.TR)) && (e.openElements.clearBackToTableRowContext(), e.openElements.pop(), e.insertionMode = Yi.IN_TABLE_BODY, xs(e, t)); + break; + case Ur.BODY: + case Ur.CAPTION: + case Ur.COL: + case Ur.COLGROUP: + case Ur.HTML: + case Ur.TD: + case Ur.TH: + break; + default: + Ns(e, t) + } +} + +function Bs(e, t) { + switch (t.tagID) { + case Ur.HTML: + As(e, t); + break; + case Ur.OPTION: + e.openElements.currentTagId === Ur.OPTION && e.openElements.pop(), e._insertElement(t, Mr.HTML); + break; + case Ur.OPTGROUP: + e.openElements.currentTagId === Ur.OPTION && e.openElements.pop(), e.openElements.currentTagId === Ur.OPTGROUP && e.openElements.pop(), e._insertElement(t, Mr.HTML); + break; + case Ur.INPUT: + case Ur.KEYGEN: + case Ur.TEXTAREA: + case Ur.SELECT: + e.openElements.hasInSelectScope(Ur.SELECT) && (e.openElements.popUntilTagNamePopped(Ur.SELECT), e._resetInsertionMode(), t.tagID !== Ur.SELECT) && e._processStartTag(t); + break; + case Ur.SCRIPT: + case Ur.TEMPLATE: + os(e, t) + } +} + +function Fs(e, t) { + switch (t.tagID) { + case Ur.OPTGROUP: + 0 < e.openElements.stackTop && e.openElements.currentTagId === Ur.OPTION && e.openElements.tagIDs[e.openElements.stackTop - 1] === Ur.OPTGROUP && e.openElements.pop(), e.openElements.currentTagId === Ur.OPTGROUP && e.openElements.pop(); + break; + case Ur.OPTION: + e.openElements.currentTagId === Ur.OPTION && e.openElements.pop(); + break; + case Ur.SELECT: + e.openElements.hasInSelectScope(Ur.SELECT) && (e.openElements.popUntilTagNamePopped(Ur.SELECT), e._resetInsertionMode()); + break; + case Ur.TEMPLATE: + cs(e, t) + } +} + +function Us(e, t) { + 0 < e.openElements.tmplCount ? (e.openElements.popUntilTagNamePopped(Ur.TEMPLATE), e.activeFormattingElements.clearToLastMarker(), e.tmplInsertionModeStack.shift(), e._resetInsertionMode(), e.onEof(t)) : rs(e, t) +} + +function Hs(e, t) { + var n, r; + t.tagID === Ur.HTML ? (e.fragmentContext || (e.insertionMode = Yi.AFTER_AFTER_BODY), e.options.sourceCodeLocationInfo && e.openElements.tagIDs[0] === Ur.HTML && (e._setEndLocation(e.openElements.items[0], t), !(r = e.openElements.items[1]) || null != (n = e.treeAdapter.getNodeSourceCodeLocation(r)) && n.endTag || e._setEndLocation(r, t))) : Gs(e, t) +} + +function Gs(e, t) { + e.insertionMode = Yi.IN_BODY, fs(e, t) +} + +function js(e, t) { + e.insertionMode = Yi.IN_BODY, fs(e, t) +} + +function qs(e) { + for (; e.treeAdapter.getNamespaceURI(e.openElements.current) !== Mr.HTML && !e._isIntegrationPoint(e.openElements.currentTagId, e.openElements.current);) e.openElements.pop() +} + +var Ys = Sr(function (e, t) { + Object.defineProperty(t, "__esModule", {value: !0}), t.escapeText = t.escapeAttribute = t.escapeUTF8 = t.escape = t.encodeXML = t.getCodePoint = t.xmlReplacer = void 0, t.xmlReplacer = /["&'<>$\x80-\uFFFF]/g; + var n = new Map([[34, """], [38, "&"], [39, "'"], [60, "<"], [62, ">"]]); + + function r(e) { + for (var i = "", s = 0; null !== (r = t.xmlReplacer.exec(e));) var r = r.index, o = e.charCodeAt(r), c = n.get(o), s = void 0 !== c ? (i += e.substring(s, r) + c, r + 1) : (i += "".concat(e.substring(s, r), "&#x").concat((0, t.getCodePoint)(e, r).toString(16), ";"), t.xmlReplacer.lastIndex += Number(55296 == (64512 & o))); + return i + e.substr(s) + } + + function i(e, t) { + return function (n) { + for (var r, i = 0, s = ""; r = e.exec(n);) i !== r.index && (s += n.substring(i, r.index)), s += t.get(r[0].charCodeAt(0)), i = r.index + 1; + return s + n.substring(i) + } + } + + t.getCodePoint = null != String.prototype.codePointAt ? function (e, t) { + return e.codePointAt(t) + } : function (e, t) { + return 55296 == (64512 & e.charCodeAt(t)) ? 1024 * (e.charCodeAt(t) - 55296) + e.charCodeAt(t + 1) - 56320 + 65536 : e.charCodeAt(t) + }, t.encodeXML = r, t.escape = r, t.escapeUTF8 = i(/[&<>'"]/g, n), t.escapeAttribute = i(/["&\u00A0]/g, new Map([[34, """], [38, "&"], [160, " "]])), t.escapeText = i(/[&<>\u00A0]/g, new Map([[38, "&"], [60, "<"], [62, ">"], [160, " "]])) +}), Ks = (yr(Ys), Ys.escapeText), Ws = Ys.escapeAttribute; +Ys.escapeUTF8, Ys.escape, Ys.encodeXML, Ys.getCodePoint, Ys.xmlReplacer; +const Vs = new Set([Fr.AREA, Fr.BASE, Fr.BASEFONT, Fr.BGSOUND, Fr.BR, Fr.COL, Fr.EMBED, Fr.FRAME, Fr.HR, Fr.IMG, Fr.INPUT, Fr.KEYGEN, Fr.LINK, Fr.META, Fr.PARAM, Fr.SOURCE, Fr.TRACK, Fr.WBR]), + $s = {treeAdapter: gi, scriptingEnabled: !0}; + +function Qs(e, t) { + return zs(e, {...$s, ...t}) +} + +function zs(e, t) { + return t.treeAdapter.isElementNode(e) ? function (e, t) { + var n = t.treeAdapter.getTagName(e); + return `<${n}${function (e, {treeAdapter: t}) { + let n = ""; + for (const r of t.getAttrList(e)) { + if (n += " ", r.namespace) switch (r.namespace) { + case Mr.XML: + n += "xml:" + r.name; + break; + case Mr.XMLNS: + "xmlns" !== r.name && (n += "xmlns:"), n += r.name; + break; + case Mr.XLINK: + n += "xlink:" + r.name; + break; + default: + n += r.prefix + ":" + r.name + } else n += r.name; + n += `="${Ws(r.value)}"` + } + return n + }(e, t)}>` + (function (e, t) { + return t.treeAdapter.isElementNode(e) && t.treeAdapter.getNamespaceURI(e) === Mr.HTML && Vs.has(t.treeAdapter.getTagName(e)) + }(e, t) ? "" : function (e, t) { + let n = ""; + var e = t.treeAdapter.isElementNode(e) && t.treeAdapter.getTagName(e) === Fr.TEMPLATE && t.treeAdapter.getNamespaceURI(e) === Mr.HTML ? t.treeAdapter.getTemplateContent(e) : e, + i = t.treeAdapter.getChildNodes(e); + if (i) for (const e of i) n += zs(e, t); + return n + }(e, t) + ``) + }(e, t) : t.treeAdapter.isTextNode(e) ? function (e, t) { + var n = t.treeAdapter, r = n.getTextNodeContent(e), + s = (e = n.getParentNode(e)) && n.isElementNode(e) && n.getTagName(e); + return s && n.getNamespaceURI(e) === Mr.HTML && (n = s, e = t.scriptingEnabled, Vr.has(n) || e && n === Fr.NOSCRIPT) ? r : Ks(r) + }(e, t) : t.treeAdapter.isCommentNode(e) ? function (e, {treeAdapter: t}) { + return `` + }(e, t) : t.treeAdapter.isDocumentTypeNode(e) ? function (e, {treeAdapter: t}) { + return `` + }(e, t) : "" +} + +function Xs(e) { + return new _(e) +} + +function Zs(e) { + var t = e.includes('"') ? "'" : '"'; + return t + e + t +} + +const Js = { + isCommentNode: b, + isElementNode: S, + isTextNode: N, + createDocument() { + var e = new v([]); + return e["x-mode"] = Br.NO_QUIRKS, e + }, + createDocumentFragment: () => new v([]), + createElement(e, t, n) { + var r = Object.create(null), i = Object.create(null), s = Object.create(null); + for (let e = 0; e < n.length; e++) { + const t = n[e].name; + r[t] = n[e].value, i[t] = n[e].namespace, s[t] = n[e].prefix + } + return (e = new y(e, r, [])).namespace = t, e["x-attribsNamespace"] = i, e["x-attribsPrefix"] = s, e + }, + createCommentNode: e => new E(e), + appendChild(e, t) { + var n = e.children[e.children.length - 1]; + n && ((n.next = t).prev = n), e.children.push(t), t.parent = e + }, + insertBefore(e, t, n) { + var r = e.children.indexOf(n), i = n.prev; + i && ((i.next = t).prev = i), (n.prev = t).next = n, e.children.splice(r, 0, t), t.parent = e + }, + setTemplateContent(e, t) { + Js.appendChild(e, t) + }, + getTemplateContent: e => e.children[0], + setDocumentType(e, t, n, r) { + var i = function (e, t, n) { + let r = "!DOCTYPE "; + return e && (r += e), t ? r += " PUBLIC " + Zs(t) : n && (r += " SYSTEM"), n && (r += " " + Zs(n)), r + }(t, n, r); + let s = e.children.find(e => I(e) && "!doctype" === e.name); + s ? s.data = null != i ? i : null : (s = new T("!doctype", i), Js.appendChild(e, s)), s["x-name"] = null != t ? t : void 0, s["x-publicId"] = null != n ? n : void 0, s["x-systemId"] = null != r ? r : void 0 + }, + setDocumentMode(e, t) { + e["x-mode"] = t + }, + getDocumentMode: e => e["x-mode"], + detachNode(e) { + var t, n, r; + e.parent && (t = e.parent.children.indexOf(e), { + prev: n, + next: r + } = e, e.prev = null, e.next = null, n && (n.next = r), r && (r.prev = n), e.parent.children.splice(t, 1), e.parent = null) + }, + insertText(e, t) { + var n = e.children[e.children.length - 1]; + n && N(n) ? n.data += t : Js.appendChild(e, Xs(t)) + }, + insertTextBefore(e, t, n) { + var r = e.children[e.children.indexOf(n) - 1]; + r && N(r) ? r.data += t : Js.insertBefore(e, Xs(t), n) + }, + adoptAttributes(e, t) { + for (let n = 0; n < t.length; n++) { + var r = t[n].name; + void 0 === e.attribs[r] && (e.attribs[r] = t[n].value, e["x-attribsNamespace"][r] = t[n].namespace, e["x-attribsPrefix"][r] = t[n].prefix) + } + }, + getFirstChild: e => e.children[0], + getChildNodes: e => e.children, + getParentNode: e => e.parent, + getAttrList: e => e.attributes, + getTagName: e => e.name, + getNamespaceURI: e => e.namespace, + getTextNodeContent: e => e.data, + getCommentNodeContent: e => e.data, + getDocumentTypeNodeName(e) { + return null != (e = e["x-name"]) ? e : "" + }, + getDocumentTypeNodePublicId(e) { + return null != (e = e["x-publicId"]) ? e : "" + }, + getDocumentTypeNodeSystemId(e) { + return null != (e = e["x-systemId"]) ? e : "" + }, + isDocumentTypeNode: e => I(e) && "!doctype" === e.name, + setNodeSourceCodeLocation(e, t) { + t && (e.startIndex = t.startOffset, e.endIndex = t.endOffset), e.sourceCodeLocation = t + }, + getNodeSourceCodeLocation: e => e.sourceCodeLocation, + updateNodeSourceCodeLocation(e, t) { + null != t.endOffset && (e.endIndex = t.endOffset), e.sourceCodeLocation = {...e.sourceCodeLocation, ...t} + } +}; +var ea = function (e, t, n) { + if (n || 2 === arguments.length) for (var r, i = 0, s = t.length; i < s; i++) !r && i in t || ((r = r || Array.prototype.slice.call(t, 0, i))[i] = t[i]); + return e.concat(r || Array.prototype.slice.call(t)) +}; + +function ta(e, t, n, r) { + return t = { + scriptingEnabled: "boolean" != typeof t.scriptingEnabled || t.scriptingEnabled, + treeAdapter: Js, + sourceCodeLocationInfo: t.sourceCodeLocationInfo + }, n ? function (e, t) { + return $i.parse(e, t) + }(e, t) : function (e, t, n) { + return "string" == typeof e && (n = t, t = e, e = null), (e = $i.getFragmentParser(e, n)).tokenizer.write(t, !0), e.getFragment() + }(r, e, t) +} + +var na, ra, ia, sa = {treeAdapter: Js}; + +function aa(e) { + return e === na.Space || e === na.NewLine || e === na.Tab || e === na.FormFeed || e === na.CarriageReturn +} + +function oa(e) { + return e === na.Slash || e === na.Gt || aa(e) +} + +function ca(e) { + return e >= na.Zero && e <= na.Nine +} + +!function (e) { + e[e.Tab = 9] = "Tab", e[e.NewLine = 10] = "NewLine", e[e.FormFeed = 12] = "FormFeed", e[e.CarriageReturn = 13] = "CarriageReturn", e[e.Space = 32] = "Space", e[e.ExclamationMark = 33] = "ExclamationMark", e[e.Number = 35] = "Number", e[e.Amp = 38] = "Amp", e[e.SingleQuote = 39] = "SingleQuote", e[e.DoubleQuote = 34] = "DoubleQuote", e[e.Dash = 45] = "Dash", e[e.Slash = 47] = "Slash", e[e.Zero = 48] = "Zero", e[e.Nine = 57] = "Nine", e[e.Semi = 59] = "Semi", e[e.Lt = 60] = "Lt", e[e.Eq = 61] = "Eq", e[e.Gt = 62] = "Gt", e[e.Questionmark = 63] = "Questionmark", e[e.UpperA = 65] = "UpperA", e[e.LowerA = 97] = "LowerA", e[e.UpperF = 70] = "UpperF", e[e.LowerF = 102] = "LowerF", e[e.UpperZ = 90] = "UpperZ", e[e.LowerZ = 122] = "LowerZ", e[e.LowerX = 120] = "LowerX", e[e.OpeningSquareBracket = 91] = "OpeningSquareBracket" +}(na = na || {}), function (e) { + e[e.Text = 1] = "Text", e[e.BeforeTagName = 2] = "BeforeTagName", e[e.InTagName = 3] = "InTagName", e[e.InSelfClosingTag = 4] = "InSelfClosingTag", e[e.BeforeClosingTagName = 5] = "BeforeClosingTagName", e[e.InClosingTagName = 6] = "InClosingTagName", e[e.AfterClosingTagName = 7] = "AfterClosingTagName", e[e.BeforeAttributeName = 8] = "BeforeAttributeName", e[e.InAttributeName = 9] = "InAttributeName", e[e.AfterAttributeName = 10] = "AfterAttributeName", e[e.BeforeAttributeValue = 11] = "BeforeAttributeValue", e[e.InAttributeValueDq = 12] = "InAttributeValueDq", e[e.InAttributeValueSq = 13] = "InAttributeValueSq", e[e.InAttributeValueNq = 14] = "InAttributeValueNq", e[e.BeforeDeclaration = 15] = "BeforeDeclaration", e[e.InDeclaration = 16] = "InDeclaration", e[e.InProcessingInstruction = 17] = "InProcessingInstruction", e[e.BeforeComment = 18] = "BeforeComment", e[e.CDATASequence = 19] = "CDATASequence", e[e.InSpecialComment = 20] = "InSpecialComment", e[e.InCommentLike = 21] = "InCommentLike", e[e.BeforeSpecialS = 22] = "BeforeSpecialS", e[e.SpecialStartSequence = 23] = "SpecialStartSequence", e[e.InSpecialTag = 24] = "InSpecialTag", e[e.BeforeEntity = 25] = "BeforeEntity", e[e.BeforeNumericEntity = 26] = "BeforeNumericEntity", e[e.InNamedEntity = 27] = "InNamedEntity", e[e.InNumericEntity = 28] = "InNumericEntity", e[e.InHexEntity = 29] = "InHexEntity" +}(ra = ra || {}), function (e) { + e[e.NoValue = 0] = "NoValue", e[e.Unquoted = 1] = "Unquoted", e[e.Single = 2] = "Single", e[e.Double = 3] = "Double" +}(ia = ia || {}); +const ua = { + Cdata: new Uint8Array([67, 68, 65, 84, 65, 91]), + CdataEnd: new Uint8Array([93, 93, 62]), + CommentEnd: new Uint8Array([45, 45, 62]), + ScriptEnd: new Uint8Array([60, 47, 115, 99, 114, 105, 112, 116]), + StyleEnd: new Uint8Array([60, 47, 115, 116, 121, 108, 101]), + TitleEnd: new Uint8Array([60, 47, 116, 105, 116, 108, 101]) +}; + +class la { + constructor({xmlMode: e = !1, decodeEntities: t = !0}, n) { + this.cbs = n, this.state = ra.Text, this.buffer = "", this.sectionStart = 0, this.index = 0, this.baseState = ra.Text, this.isSpecial = !1, this.running = !0, this.offset = 0, this.currentSequence = void 0, this.sequenceIndex = 0, this.trieIndex = 0, this.trieCurrent = 0, this.entityResult = 0, this.entityExcess = 0, this.xmlMode = e, this.decodeEntities = t, this.entityTrie = e ? Hr : Gr + } + + reset() { + this.state = ra.Text, this.buffer = "", this.sectionStart = 0, this.index = 0, this.baseState = ra.Text, this.currentSequence = void 0, this.running = !0, this.offset = 0 + } + + write(e) { + this.offset += this.buffer.length, this.buffer = e, this.parse() + } + + end() { + this.running && this.finish() + } + + pause() { + this.running = !1 + } + + resume() { + this.running = !0, this.index < this.buffer.length + this.offset && this.parse() + } + + getIndex() { + return this.index + } + + getSectionStart() { + return this.sectionStart + } + + stateText(e) { + e === na.Lt || !this.decodeEntities && this.fastForwardTo(na.Lt) ? (this.index > this.sectionStart && this.cbs.ontext(this.sectionStart, this.index), this.state = ra.BeforeTagName, this.sectionStart = this.index) : this.decodeEntities && e === na.Amp && (this.state = ra.BeforeEntity) + } + + stateSpecialStartSequence(e) { + var t = this.sequenceIndex === this.currentSequence.length; + if (t ? oa(e) : (32 | e) === this.currentSequence[this.sequenceIndex]) { + if (!t) return void this.sequenceIndex++ + } else this.isSpecial = !1; + this.sequenceIndex = 0, this.state = ra.InTagName, this.stateInTagName(e) + } + + stateInSpecialTag(e) { + if (this.sequenceIndex === this.currentSequence.length) { + if (e === na.Gt || aa(e)) { + var t = this.index - this.currentSequence.length; + if (this.sectionStart < t) { + const e = this.index; + this.index = t, this.cbs.ontext(this.sectionStart, t), this.index = e + } + return this.isSpecial = !1, this.sectionStart = 2 + t, void this.stateInClosingTagName(e) + } + this.sequenceIndex = 0 + } + (32 | e) === this.currentSequence[this.sequenceIndex] ? this.sequenceIndex += 1 : 0 === this.sequenceIndex ? this.currentSequence === ua.TitleEnd ? this.decodeEntities && e === na.Amp && (this.state = ra.BeforeEntity) : this.fastForwardTo(na.Lt) && (this.sequenceIndex = 1) : this.sequenceIndex = Number(e === na.Lt) + } + + stateCDATASequence(e) { + e === ua.Cdata[this.sequenceIndex] ? ++this.sequenceIndex === ua.Cdata.length && (this.state = ra.InCommentLike, this.currentSequence = ua.CdataEnd, this.sequenceIndex = 0, this.sectionStart = this.index + 1) : (this.sequenceIndex = 0, this.state = ra.InDeclaration, this.stateInDeclaration(e)) + } + + fastForwardTo(e) { + for (; ++this.index < this.buffer.length + this.offset;) if (this.buffer.charCodeAt(this.index - this.offset) === e) return !0; + return this.index = this.buffer.length + this.offset - 1, !1 + } + + stateInCommentLike(e) { + e === this.currentSequence[this.sequenceIndex] ? ++this.sequenceIndex === this.currentSequence.length && (this.currentSequence === ua.CdataEnd ? this.cbs.oncdata(this.sectionStart, this.index, 2) : this.cbs.oncomment(this.sectionStart, this.index, 2), this.sequenceIndex = 0, this.sectionStart = this.index + 1, this.state = ra.Text) : 0 === this.sequenceIndex ? this.fastForwardTo(this.currentSequence[0]) && (this.sequenceIndex = 1) : e !== this.currentSequence[this.sequenceIndex - 1] && (this.sequenceIndex = 0) + } + + isTagStartChar(e) { + return this.xmlMode ? !oa(e) : function (e) { + return e >= na.LowerA && e <= na.LowerZ || e >= na.UpperA && e <= na.UpperZ + }(e) + } + + startSpecial(e, t) { + this.isSpecial = !0, this.currentSequence = e, this.sequenceIndex = t, this.state = ra.SpecialStartSequence + } + + stateBeforeTagName(e) { + var t; + e === na.ExclamationMark ? (this.state = ra.BeforeDeclaration, this.sectionStart = this.index + 1) : e === na.Questionmark ? (this.state = ra.InProcessingInstruction, this.sectionStart = this.index + 1) : this.isTagStartChar(e) ? (t = 32 | e, this.sectionStart = this.index, this.xmlMode || t !== ua.TitleEnd[2] ? this.state = this.xmlMode || t !== ua.ScriptEnd[2] ? ra.InTagName : ra.BeforeSpecialS : this.startSpecial(ua.TitleEnd, 3)) : e === na.Slash ? this.state = ra.BeforeClosingTagName : (this.state = ra.Text, this.stateText(e)) + } + + stateInTagName(e) { + oa(e) && (this.cbs.onopentagname(this.sectionStart, this.index), this.sectionStart = -1, this.state = ra.BeforeAttributeName, this.stateBeforeAttributeName(e)) + } + + stateBeforeClosingTagName(e) { + aa(e) || (e === na.Gt ? this.state = ra.Text : (this.state = this.isTagStartChar(e) ? ra.InClosingTagName : ra.InSpecialComment, this.sectionStart = this.index)) + } + + stateInClosingTagName(e) { + e !== na.Gt && !aa(e) || (this.cbs.onclosetag(this.sectionStart, this.index), this.sectionStart = -1, this.state = ra.AfterClosingTagName, this.stateAfterClosingTagName(e)) + } + + stateAfterClosingTagName(e) { + e !== na.Gt && !this.fastForwardTo(na.Gt) || (this.state = ra.Text, this.baseState = ra.Text, this.sectionStart = this.index + 1) + } + + stateBeforeAttributeName(e) { + e === na.Gt ? (this.cbs.onopentagend(this.index), this.isSpecial ? (this.state = ra.InSpecialTag, this.sequenceIndex = 0) : this.state = ra.Text, this.baseState = this.state, this.sectionStart = this.index + 1) : e === na.Slash ? this.state = ra.InSelfClosingTag : aa(e) || (this.state = ra.InAttributeName, this.sectionStart = this.index) + } + + stateInSelfClosingTag(e) { + e === na.Gt ? (this.cbs.onselfclosingtag(this.index), this.state = ra.Text, this.baseState = ra.Text, this.sectionStart = this.index + 1, this.isSpecial = !1) : aa(e) || (this.state = ra.BeforeAttributeName, this.stateBeforeAttributeName(e)) + } + + stateInAttributeName(e) { + e !== na.Eq && !oa(e) || (this.cbs.onattribname(this.sectionStart, this.index), this.sectionStart = -1, this.state = ra.AfterAttributeName, this.stateAfterAttributeName(e)) + } + + stateAfterAttributeName(e) { + e === na.Eq ? this.state = ra.BeforeAttributeValue : e === na.Slash || e === na.Gt ? (this.cbs.onattribend(ia.NoValue, this.index), this.state = ra.BeforeAttributeName, this.stateBeforeAttributeName(e)) : aa(e) || (this.cbs.onattribend(ia.NoValue, this.index), this.state = ra.InAttributeName, this.sectionStart = this.index) + } + + stateBeforeAttributeValue(e) { + e === na.DoubleQuote ? (this.state = ra.InAttributeValueDq, this.sectionStart = this.index + 1) : e === na.SingleQuote ? (this.state = ra.InAttributeValueSq, this.sectionStart = this.index + 1) : aa(e) || (this.sectionStart = this.index, this.state = ra.InAttributeValueNq, this.stateInAttributeValueNoQuotes(e)) + } + + handleInAttributeValue(e, t) { + e === t || !this.decodeEntities && this.fastForwardTo(t) ? (this.cbs.onattribdata(this.sectionStart, this.index), this.sectionStart = -1, this.cbs.onattribend(t === na.DoubleQuote ? ia.Double : ia.Single, this.index), this.state = ra.BeforeAttributeName) : this.decodeEntities && e === na.Amp && (this.baseState = this.state, this.state = ra.BeforeEntity) + } + + stateInAttributeValueDoubleQuotes(e) { + this.handleInAttributeValue(e, na.DoubleQuote) + } + + stateInAttributeValueSingleQuotes(e) { + this.handleInAttributeValue(e, na.SingleQuote) + } + + stateInAttributeValueNoQuotes(e) { + aa(e) || e === na.Gt ? (this.cbs.onattribdata(this.sectionStart, this.index), this.sectionStart = -1, this.cbs.onattribend(ia.Unquoted, this.index), this.state = ra.BeforeAttributeName, this.stateBeforeAttributeName(e)) : this.decodeEntities && e === na.Amp && (this.baseState = this.state, this.state = ra.BeforeEntity) + } + + stateBeforeDeclaration(e) { + e === na.OpeningSquareBracket ? (this.state = ra.CDATASequence, this.sequenceIndex = 0) : this.state = e === na.Dash ? ra.BeforeComment : ra.InDeclaration + } + + stateInDeclaration(e) { + e !== na.Gt && !this.fastForwardTo(na.Gt) || (this.cbs.ondeclaration(this.sectionStart, this.index), this.state = ra.Text, this.sectionStart = this.index + 1) + } + + stateInProcessingInstruction(e) { + e !== na.Gt && !this.fastForwardTo(na.Gt) || (this.cbs.onprocessinginstruction(this.sectionStart, this.index), this.state = ra.Text, this.sectionStart = this.index + 1) + } + + stateBeforeComment(e) { + e === na.Dash ? (this.state = ra.InCommentLike, this.currentSequence = ua.CommentEnd, this.sequenceIndex = 2, this.sectionStart = this.index + 1) : this.state = ra.InDeclaration + } + + stateInSpecialComment(e) { + e !== na.Gt && !this.fastForwardTo(na.Gt) || (this.cbs.oncomment(this.sectionStart, this.index, 0), this.state = ra.Text, this.sectionStart = this.index + 1) + } + + stateBeforeSpecialS(e) { + var t = 32 | e; + t === ua.ScriptEnd[3] ? this.startSpecial(ua.ScriptEnd, 4) : t === ua.StyleEnd[3] ? this.startSpecial(ua.StyleEnd, 4) : (this.state = ra.InTagName, this.stateInTagName(e)) + } + + stateBeforeEntity(e) { + this.entityExcess = 1, this.entityResult = 0, e === na.Number ? this.state = ra.BeforeNumericEntity : e !== na.Amp && (this.trieIndex = 0, this.trieCurrent = this.entityTrie[0], this.state = ra.InNamedEntity, this.stateInNamedEntity(e)) + } + + stateInNamedEntity(e) { + if (this.entityExcess += 1, this.trieIndex = Dr(this.entityTrie, this.trieCurrent, this.trieIndex + 1, e), this.trieIndex < 0) this.emitNamedEntity(), this.index--; else { + this.trieCurrent = this.entityTrie[this.trieIndex]; + var t = this.trieCurrent & Rr.VALUE_LENGTH; + if (t) if (t = (t >> 14) - 1, this.allowLegacyEntity() || e === na.Semi) { + const e = this.index - this.entityExcess + 1; + e > this.sectionStart && this.emitPartial(this.sectionStart, e), this.entityResult = this.trieIndex, this.trieIndex += t, this.entityExcess = 0, this.sectionStart = this.index + 1, 0 == t && this.emitNamedEntity() + } else this.trieIndex += t + } + } + + emitNamedEntity() { + if (this.state = this.baseState, 0 !== this.entityResult) switch ((this.entityTrie[this.entityResult] & Rr.VALUE_LENGTH) >> 14) { + case 1: + this.emitCodePoint(this.entityTrie[this.entityResult] & ~Rr.VALUE_LENGTH); + break; + case 2: + this.emitCodePoint(this.entityTrie[this.entityResult + 1]); + break; + case 3: + this.emitCodePoint(this.entityTrie[this.entityResult + 1]), this.emitCodePoint(this.entityTrie[this.entityResult + 2]) + } + } + + stateBeforeNumericEntity(e) { + (32 | e) === na.LowerX ? (this.entityExcess++, this.state = ra.InHexEntity) : (this.state = ra.InNumericEntity, this.stateInNumericEntity(e)) + } + + emitNumericEntity(e) { + var t = this.index - this.entityExcess - 1; + 2 + t + Number(this.state === ra.InHexEntity) !== this.index && (t > this.sectionStart && this.emitPartial(this.sectionStart, t), this.sectionStart = this.index + Number(e), this.emitCodePoint(xr(this.entityResult))), this.state = this.baseState + } + + stateInNumericEntity(e) { + e === na.Semi ? this.emitNumericEntity(!0) : ca(e) ? (this.entityResult = 10 * this.entityResult + (e - na.Zero), this.entityExcess++) : (this.allowLegacyEntity() ? this.emitNumericEntity(!1) : this.state = this.baseState, this.index--) + } + + stateInHexEntity(e) { + e === na.Semi ? this.emitNumericEntity(!0) : ca(e) ? (this.entityResult = 16 * this.entityResult + (e - na.Zero), this.entityExcess++) : function (e) { + return e >= na.UpperA && e <= na.UpperF || e >= na.LowerA && e <= na.LowerF + }(e) ? (this.entityResult = 16 * this.entityResult + ((32 | e) - na.LowerA + 10), this.entityExcess++) : (this.allowLegacyEntity() ? this.emitNumericEntity(!1) : this.state = this.baseState, this.index--) + } + + allowLegacyEntity() { + return !this.xmlMode && (this.baseState === ra.Text || this.baseState === ra.InSpecialTag) + } + + cleanup() { + this.running && this.sectionStart !== this.index && (this.state === ra.Text || this.state === ra.InSpecialTag && 0 === this.sequenceIndex ? (this.cbs.ontext(this.sectionStart, this.index), this.sectionStart = this.index) : this.state !== ra.InAttributeValueDq && this.state !== ra.InAttributeValueSq && this.state !== ra.InAttributeValueNq || (this.cbs.onattribdata(this.sectionStart, this.index), this.sectionStart = this.index)) + } + + shouldContinue() { + return this.index < this.buffer.length + this.offset && this.running + } + + parse() { + for (; this.shouldContinue();) { + var e = this.buffer.charCodeAt(this.index - this.offset); + switch (this.state) { + case ra.Text: + this.stateText(e); + break; + case ra.SpecialStartSequence: + this.stateSpecialStartSequence(e); + break; + case ra.InSpecialTag: + this.stateInSpecialTag(e); + break; + case ra.CDATASequence: + this.stateCDATASequence(e); + break; + case ra.InAttributeValueDq: + this.stateInAttributeValueDoubleQuotes(e); + break; + case ra.InAttributeName: + this.stateInAttributeName(e); + break; + case ra.InCommentLike: + this.stateInCommentLike(e); + break; + case ra.InSpecialComment: + this.stateInSpecialComment(e); + break; + case ra.BeforeAttributeName: + this.stateBeforeAttributeName(e); + break; + case ra.InTagName: + this.stateInTagName(e); + break; + case ra.InClosingTagName: + this.stateInClosingTagName(e); + break; + case ra.BeforeTagName: + this.stateBeforeTagName(e); + break; + case ra.AfterAttributeName: + this.stateAfterAttributeName(e); + break; + case ra.InAttributeValueSq: + this.stateInAttributeValueSingleQuotes(e); + break; + case ra.BeforeAttributeValue: + this.stateBeforeAttributeValue(e); + break; + case ra.BeforeClosingTagName: + this.stateBeforeClosingTagName(e); + break; + case ra.AfterClosingTagName: + this.stateAfterClosingTagName(e); + break; + case ra.BeforeSpecialS: + this.stateBeforeSpecialS(e); + break; + case ra.InAttributeValueNq: + this.stateInAttributeValueNoQuotes(e); + break; + case ra.InSelfClosingTag: + this.stateInSelfClosingTag(e); + break; + case ra.InDeclaration: + this.stateInDeclaration(e); + break; + case ra.BeforeDeclaration: + this.stateBeforeDeclaration(e); + break; + case ra.BeforeComment: + this.stateBeforeComment(e); + break; + case ra.InProcessingInstruction: + this.stateInProcessingInstruction(e); + break; + case ra.InNamedEntity: + this.stateInNamedEntity(e); + break; + case ra.BeforeEntity: + this.stateBeforeEntity(e); + break; + case ra.InHexEntity: + this.stateInHexEntity(e); + break; + case ra.InNumericEntity: + this.stateInNumericEntity(e); + break; + default: + this.stateBeforeNumericEntity(e) + } + this.index++ + } + this.cleanup() + } + + finish() { + this.state === ra.InNamedEntity && this.emitNamedEntity(), this.sectionStart < this.index && this.handleTrailingData(), this.cbs.onend() + } + + handleTrailingData() { + var e = this.buffer.length + this.offset; + this.state === ra.InCommentLike ? this.currentSequence === ua.CdataEnd ? this.cbs.oncdata(this.sectionStart, e, 0) : this.cbs.oncomment(this.sectionStart, e, 0) : this.state === ra.InNumericEntity && this.allowLegacyEntity() || this.state === ra.InHexEntity && this.allowLegacyEntity() ? this.emitNumericEntity(!1) : this.state !== ra.InTagName && this.state !== ra.BeforeAttributeName && this.state !== ra.BeforeAttributeValue && this.state !== ra.AfterAttributeName && this.state !== ra.InAttributeName && this.state !== ra.InAttributeValueSq && this.state !== ra.InAttributeValueDq && this.state !== ra.InAttributeValueNq && this.state !== ra.InClosingTagName && this.cbs.ontext(this.sectionStart, e) + } + + emitPartial(e, t) { + this.baseState !== ra.Text && this.baseState !== ra.InSpecialTag ? this.cbs.onattribdata(e, t) : this.cbs.ontext(e, t) + } + + emitCodePoint(e) { + this.baseState !== ra.Text && this.baseState !== ra.InSpecialTag ? this.cbs.onattribentity(e) : this.cbs.ontextentity(e) + } +} + +const ha = new Set(["input", "option", "optgroup", "select", "button", "datalist", "textarea"]), fa = new Set(["p"]), + pa = new Set(["thead", "tbody"]), da = new Set(["dd", "dt"]), ma = new Set(["rt", "rp"]), + _a = new Map([["tr", new Set(["tr", "th", "td"])], ["th", new Set(["th"])], ["td", new Set(["thead", "th", "td"])], ["body", new Set(["head", "link", "script"])], ["li", new Set(["li"])], ["p", fa], ["h1", fa], ["h2", fa], ["h3", fa], ["h4", fa], ["h5", fa], ["h6", fa], ["select", ha], ["input", ha], ["output", ha], ["button", ha], ["datalist", ha], ["textarea", ha], ["option", new Set(["option"])], ["optgroup", new Set(["optgroup", "option"])], ["dd", da], ["dt", da], ["address", fa], ["article", fa], ["aside", fa], ["blockquote", fa], ["details", fa], ["div", fa], ["dl", fa], ["fieldset", fa], ["figcaption", fa], ["figure", fa], ["footer", fa], ["form", fa], ["header", fa], ["hr", fa], ["main", fa], ["nav", fa], ["ol", fa], ["pre", fa], ["section", fa], ["table", fa], ["ul", fa], ["rt", ma], ["rp", ma], ["tbody", pa], ["tfoot", pa]]), + Ea = new Set(["area", "base", "basefont", "br", "col", "command", "embed", "frame", "hr", "img", "input", "isindex", "keygen", "link", "meta", "param", "source", "track", "wbr"]), + Ta = new Set(["math", "svg"]), + Aa = new Set(["mi", "mo", "mn", "ms", "mtext", "annotation-xml", "foreignobject", "desc", "title"]), ga = /\s|\//; + +class va { + constructor(e, t = {}) { + this.options = t, this.startIndex = 0, this.endIndex = 0, this.openTagStart = 0, this.tagname = "", this.attribname = "", this.attribvalue = "", this.attribs = null, this.stack = [], this.foreignContext = [], this.buffers = [], this.bufferOffset = 0, this.writeIndex = 0, this.ended = !1, this.cbs = null != e ? e : {}, this.lowerCaseTagNames = null != (e = t.lowerCaseTags) ? e : !t.xmlMode, this.lowerCaseAttributeNames = null != (e = t.lowerCaseAttributeNames) ? e : !t.xmlMode, this.tokenizer = new (null != (e = t.Tokenizer) ? e : la)(this.options, this), null != (e = (t = this.cbs).onparserinit) && e.call(t, this) + } + + ontext(e, t) { + var n, r, e = this.getSlice(e, t); + this.endIndex = t - 1, null != (r = (n = this.cbs).ontext) && r.call(n, e), this.startIndex = t + } + + ontextentity(e) { + var t, n, r = this.tokenizer.getSectionStart(); + this.endIndex = r - 1, null != (n = (t = this.cbs).ontext) && n.call(t, wr(e)), this.startIndex = r + } + + isVoidElement(e) { + return !this.options.xmlMode && Ea.has(e) + } + + onopentagname(e, t) { + this.endIndex = t; + let n = this.getSlice(e, t); + this.lowerCaseTagNames && (n = n.toLowerCase()), this.emitOpenTag(n) + } + + emitOpenTag(e) { + this.openTagStart = this.startIndex, this.tagname = e; + var t, n, r, i, s = !this.options.xmlMode && _a.get(e); + if (s) for (; 0 < this.stack.length && s.has(this.stack[this.stack.length - 1]);) { + const e = this.stack.pop(); + null != (n = (t = this.cbs).onclosetag) && n.call(t, e, !0) + } + this.isVoidElement(e) || (this.stack.push(e), Ta.has(e) ? this.foreignContext.push(!0) : Aa.has(e) && this.foreignContext.push(!1)), null != (i = (r = this.cbs).onopentagname) && i.call(r, e), this.cbs.onopentag && (this.attribs = {}) + } + + endOpenTag(e) { + var t, n; + this.startIndex = this.openTagStart, this.attribs && (null != (n = (t = this.cbs).onopentag) && n.call(t, this.tagname, this.attribs, e), this.attribs = null), this.cbs.onclosetag && this.isVoidElement(this.tagname) && this.cbs.onclosetag(this.tagname, !0), this.tagname = "" + } + + onopentagend(e) { + this.endIndex = e, this.endOpenTag(!1), this.startIndex = e + 1 + } + + onclosetag(e, t) { + var r; + this.endIndex = t; + let c = this.getSlice(e, t); + if (this.lowerCaseTagNames && (c = c.toLowerCase()), (Ta.has(c) || Aa.has(c)) && this.foreignContext.pop(), this.isVoidElement(c)) this.options.xmlMode || "br" !== c || (null != (r = (e = this.cbs).onopentagname) && r.call(e, "br"), null != (e = (r = this.cbs).onopentag) && e.call(r, "br", {}, !0), null == (r = (e = this.cbs).onclosetag)) || r.call(e, "br", !1); else { + const e = this.stack.lastIndexOf(c); + if (-1 !== e) if (this.cbs.onclosetag) { + let t = this.stack.length - e; + for (; t--;) this.cbs.onclosetag(this.stack.pop(), 0 !== t) + } else this.stack.length = e; else this.options.xmlMode || "p" !== c || (this.emitOpenTag("p"), this.closeCurrentTag(!0)) + } + this.startIndex = t + 1 + } + + onselfclosingtag(e) { + this.endIndex = e, this.options.xmlMode || this.options.recognizeSelfClosing || this.foreignContext[this.foreignContext.length - 1] ? (this.closeCurrentTag(!1), this.startIndex = e + 1) : this.onopentagend(e) + } + + closeCurrentTag(e) { + var t, n, r = this.tagname; + this.endOpenTag(e), this.stack[this.stack.length - 1] === r && (null != (n = (t = this.cbs).onclosetag) && n.call(t, r, !e), this.stack.pop()) + } + + onattribname(e, t) { + this.startIndex = e, e = this.getSlice(e, t), this.attribname = this.lowerCaseAttributeNames ? e.toLowerCase() : e + } + + onattribdata(e, t) { + this.attribvalue += this.getSlice(e, t) + } + + onattribentity(e) { + this.attribvalue += wr(e) + } + + onattribend(e, t) { + var r; + this.endIndex = t, null != (r = (t = this.cbs).onattribute) && r.call(t, this.attribname, this.attribvalue, e === ia.Double ? '"' : e === ia.Single ? "'" : e === ia.NoValue ? void 0 : null), this.attribs && !Object.prototype.hasOwnProperty.call(this.attribs, this.attribname) && (this.attribs[this.attribname] = this.attribvalue), this.attribvalue = "" + } + + getInstructionName(e) { + var t = e.search(ga); + let n = t < 0 ? e : e.substr(0, t); + return n = this.lowerCaseTagNames ? n.toLowerCase() : n + } + + ondeclaration(e, t) { + this.endIndex = t; + var n = this.getSlice(e, t); + if (this.cbs.onprocessinginstruction) { + const e = this.getInstructionName(n); + this.cbs.onprocessinginstruction("!" + e, "!" + n) + } + this.startIndex = t + 1 + } + + onprocessinginstruction(e, t) { + this.endIndex = t; + var n = this.getSlice(e, t); + if (this.cbs.onprocessinginstruction) { + const e = this.getInstructionName(n); + this.cbs.onprocessinginstruction("?" + e, "?" + n) + } + this.startIndex = t + 1 + } + + oncomment(e, t, n) { + var i, r; + this.endIndex = t, null != (i = (r = this.cbs).oncomment) && i.call(r, this.getSlice(e, t - n)), null != (r = (i = this.cbs).oncommentend) && r.call(i), this.startIndex = t + 1 + } + + oncdata(e, t, n) { + this.endIndex = t; + var i, e = this.getSlice(e, t - n); + this.options.xmlMode || this.options.recognizeCDATA ? (null != (i = (n = this.cbs).oncdatastart) && i.call(n), null != (n = (i = this.cbs).ontext) && n.call(i, e), null != (i = (n = this.cbs).oncdataend) && i.call(n)) : (null != (n = (i = this.cbs).oncomment) && n.call(i, `[CDATA[${e}]]`), null != (i = (n = this.cbs).oncommentend) && i.call(n)), this.startIndex = t + 1 + } + + onend() { + var e, t; + if (this.cbs.onclosetag) { + this.endIndex = this.startIndex; + for (let e = this.stack.length; 0 < e; this.cbs.onclosetag(this.stack[--e], !0)) ; + } + null != (t = (e = this.cbs).onend) && t.call(e) + } + + reset() { + var t, e; + null != (t = (e = this.cbs).onreset) && t.call(e), this.tokenizer.reset(), this.tagname = "", this.attribname = "", this.attribs = null, this.stack.length = 0, this.startIndex = 0, this.endIndex = 0, null != (e = (t = this.cbs).onparserinit) && e.call(t, this), this.buffers.length = 0, this.bufferOffset = 0, this.writeIndex = 0, this.ended = !1 + } + + parseComplete(e) { + this.reset(), this.end(e) + } + + getSlice(e, t) { + for (; e - this.bufferOffset >= this.buffers[0].length;) this.shiftBuffer(); + let n = this.buffers[0].slice(e - this.bufferOffset, t - this.bufferOffset); + for (; t - this.bufferOffset > this.buffers[0].length;) this.shiftBuffer(), n += this.buffers[0].slice(0, t - this.bufferOffset); + return n + } + + shiftBuffer() { + this.bufferOffset += this.buffers[0].length, this.writeIndex--, this.buffers.shift() + } + + write(e) { + var t, n; + this.ended ? null != (n = (t = this.cbs).onerror) && n.call(t, new Error(".write() after done!")) : (this.buffers.push(e), this.tokenizer.running && (this.tokenizer.write(e), this.writeIndex++)) + } + + end(e) { + var t, n; + this.ended ? null != (n = (t = this.cbs).onerror) && n.call(t, new Error(".end() after done!")) : (e && this.write(e), this.ended = !0, this.tokenizer.end()) + } + + pause() { + this.tokenizer.pause() + } + + resume() { + for (this.tokenizer.resume(); this.tokenizer.running && this.writeIndex < this.buffers.length;) this.tokenizer.write(this.buffers[this.writeIndex++]); + this.ended && this.tokenizer.end() + } + + parseChunk(e) { + this.write(e) + } + + done(e) { + this.end(e) + } +} + +var ya, + Sa = "undefined" != typeof global ? global : "undefined" != typeof self ? self : "undefined" != typeof window ? window : {}; + +function Ca(e) { + if (Object.keys) return Object.keys(e); + var n, t = []; + for (n in e) t.push(n); + return t +} + +function Na(e, t) { + if (e.forEach) return e.forEach(t); + for (var n = 0; n < e.length; n++) t(e[n], n, e) +} + +function ba() { + try { + return Object.defineProperty({}, "_", {}), function (e, t, n) { + Object.defineProperty(e, t, {writable: !0, enumerable: !1, configurable: !0, value: n}) + } + } catch (e) { + return function (e, t, n) { + e[t] = n + } + } +} + +var Ia = ["Array", "Boolean", "Date", "Error", "EvalError", "Function", "Infinity", "JSON", "Math", "NaN", "Number", "Object", "RangeError", "ReferenceError", "RegExp", "String", "SyntaxError", "TypeError", "URIError", "decodeURI", "decodeURIComponent", "encodeURI", "encodeURIComponent", "escape", "eval", "isFinite", "isNaN", "parseFloat", "parseInt", "undefined", "unescape"]; + +function Oa() { +} + +function ka(e) { + if (!(this instanceof ka)) return new ka(e); + this.code = e +} + +function La(e) { + var t; + return Da(e) ? e : (t = new Oa, "object" == typeof e && Na(Ca(e), function (n) { + t[n] = e[n] + }), t) +} + +function Da(e) { + return e instanceof Oa +} + +Oa.prototype = {}, ka.prototype.runInContext = function (e) { + var t, n, r, s, i; + if (e instanceof Oa) return Sa.document ? ((t = Sa.document.createElement("iframe")).style || (t.style = {}), t.style.display = "none", Sa.document.body.appendChild(t), r = (n = t.contentWindow).eval, i = n.execScript, !r && i && (i.call(n, "null"), r = n.eval), Na(Ca(e), function (t) { + n[t] = e[t] + }), Na(Ia, function (t) { + e[t] && (n[t] = e[t]) + }), s = Ca(n), i = r.call(n, this.code), Na(Ca(n), function (t) { + (t in e || -1 === function (e, t) { + if (wa) return e.indexOf(t); + for (var n = 0; n < e.length; ++n) if (e[n] === t) return n; + return -1 + }(s, t)) && (e[t] = n[t]) + }), Na(Ia, function (t) { + var s; + t in e || (s = n[t], (ya = "function" != typeof ya ? ba : ya)(e, t, s)) + }), Sa.document.body.removeChild(t), i) : function (e, t) { + var n = Ca(Sa); + return n.push("with (this.__ctx__){return eval(this.__code__)}"), Function.apply(null, n).apply({ + __code__: e, + __ctx__: t + }) + }(this.code, e); + throw new TypeError("needs a 'context' argument.") +}, ka.prototype.runInThisContext = function () { + return new Function("code", "return eval(code);").call(Sa, this.code) +}, ka.prototype.runInNewContext = function (e) { + var t = La(e), n = this.runInContext(t); + return e && Na(Ca(t), function (n) { + e[n] = t[n] + }), n +}; +var Ra = { + runInContext: function (e, t, n) { + return new ka(e).runInContext(t, n) + }, isContext: Da, createContext: La, createScript: function (e) { + return new ka(e) + }, Script: ka, runInThisContext: function (e, t) { + return new ka(e).runInThisContext(t) + }, runInNewContext: function (e, t, n) { + return new ka(e).runInNewContext(t, n) + } +}, wa = [].indexOf; +const xa = Object.prototype.hasOwnProperty; + +function Ma(e, t) { + return (e = e.slice()).push(t), e +} + +function Pa(e, t) { + return (t = t.slice()).unshift(e), t +} + +class Ba extends Error { + constructor(e) { + super('JSONPath should not be called with "new" (it prevents return of (unwrapped) scalar values)'), this.avoidNew = !0, this.value = e, this.name = "NewError" + } +} + +function Fa(e, t, n, r, i) { + if (!(this instanceof Fa)) try { + return new Fa(e, t, n, r, i) + } catch (e) { + if (e.avoidNew) return e.value; + throw e + } + "string" == typeof e && (i = r, r = n, n = t, t = e, e = null); + var s = e && "object" == typeof e; + if (this.json = (e = e || {}).json || n, this.path = e.path || t, this.resultType = e.resultType || "value", this.flatten = e.flatten || !1, this.wrap = !xa.call(e, "wrap") || e.wrap, this.sandbox = e.sandbox || {}, this.preventEval = e.preventEval || !1, this.parent = e.parent || null, this.parentProperty = e.parentProperty || null, this.callback = e.callback || r || null, this.otherTypeCallback = e.otherTypeCallback || i || function () { + throw new TypeError("You must supply an otherTypeCallback callback option with the @other() operator.") + }, !1 !== e.autostart) { + const r = {path: s ? e.path : t}, i = (s ? "json" in e && (r.json = e.json) : r.json = n, this.evaluate(r)); + if (i && "object" == typeof i) return i; + throw new Ba(i) + } +} + +Fa.prototype.evaluate = function (e, t, n, r) { + let i = this.parent, s = this.parentProperty, {flatten: a, wrap: o} = this; + if (this.currResultType = this.resultType, this.currPreventEval = this.preventEval, this.currSandbox = this.sandbox, n = n || this.callback, this.currOtherTypeCallback = r || this.otherTypeCallback, t = t || this.json, (e = e || this.path) && "object" == typeof e && !Array.isArray(e)) { + if (!e.path && "" !== e.path) throw new TypeError('You must supply a "path" property when providing an object argument to JSONPath.evaluate().'); + if (!xa.call(e, "json")) throw new TypeError('You must supply a "json" property when providing an object argument to JSONPath.evaluate().'); + t = e.json, a = xa.call(e, "flatten") ? e.flatten : a, this.currResultType = xa.call(e, "resultType") ? e.resultType : this.currResultType, this.currSandbox = xa.call(e, "sandbox") ? e.sandbox : this.currSandbox, o = xa.call(e, "wrap") ? e.wrap : o, this.currPreventEval = xa.call(e, "preventEval") ? e.preventEval : this.currPreventEval, n = xa.call(e, "callback") ? e.callback : n, this.currOtherTypeCallback = xa.call(e, "otherTypeCallback") ? e.otherTypeCallback : this.currOtherTypeCallback, i = xa.call(e, "parent") ? e.parent : i, s = xa.call(e, "parentProperty") ? e.parentProperty : s, e = e.path + } + if (i = i || null, s = s || null, ((e = Array.isArray(e) ? Fa.toPathString(e) : e) || "" === e) && t) return "$" === (r = Fa.toPathArray(e))[0] && 1 < r.length && r.shift(), this._hasParentSelector = null, (e = this._trace(r, t, ["$"], i, s, n).filter(function (e) { + return e && !e.isParentSelector + })).length ? o || 1 !== e.length || e[0].hasArrExpr ? e.reduce((e, t) => (t = this._getPreferredOutput(t), a && Array.isArray(t) ? e = e.concat(t) : e.push(t), e), []) : this._getPreferredOutput(e[0]) : o ? [] : void 0 +}, Fa.prototype._getPreferredOutput = function (e) { + const t = this.currResultType; + switch (t) { + case"all": { + const t = Array.isArray(e.path) ? e.path : Fa.toPathArray(e.path); + return e.pointer = Fa.toPointer(t), e.path = "string" == typeof e.path ? e.path : Fa.toPathString(e.path), e + } + case"value": + case"parent": + case"parentProperty": + return e[t]; + case"path": + return Fa.toPathString(e[t]); + case"pointer": + return Fa.toPointer(e.path); + default: + throw new TypeError("Unknown result type") + } +}, Fa.prototype._handleCallback = function (e, t, n) { + var r; + t && (r = this._getPreferredOutput(e), e.path = "string" == typeof e.path ? e.path : Fa.toPathString(e.path), t(r, n, e)) +}, Fa.prototype._trace = function (e, t, n, r, i, s, a, o) { + let c; + if (!e.length) return c = { + path: n, + value: t, + parent: r, + parentProperty: i, + hasArrExpr: a + }, this._handleCallback(c, s, "value"), c; + const u = e[0], l = e.slice(1), h = []; + + function f(e) { + Array.isArray(e) ? e.forEach(e => { + h.push(e) + }) : h.push(e) + } + + if (("string" != typeof u || o) && t && xa.call(t, u)) f(this._trace(l, t[u], Ma(n, u), t, u, s, a)); else if ("*" === u) this._walk(t, e => { + f(this._trace(l, t[e], Ma(n, e), t, e, s, !0, !0)) + }); else if (".." === u) f(this._trace(l, t, n, r, i, s, a)), this._walk(t, r => { + "object" == typeof t[r] && f(this._trace(e.slice(), t[r], Ma(n, r), t, r, s, !0)) + }); else { + if ("^" === u) return this._hasParentSelector = !0, {path: n.slice(0, -1), expr: l, isParentSelector: !0}; + if ("~" === u) return c = { + path: Ma(n, u), + value: i, + parent: r, + parentProperty: null + }, this._handleCallback(c, s, "property"), c; + if ("$" === u) f(this._trace(l, t, n, null, null, s, a)); else if (/^(-?\d*):(-?\d*):?(\d*)$/u.test(u)) f(this._slice(u, l, t, n, r, i, s)); else if (0 === u.indexOf("?(")) { + if (this.currPreventEval) throw new Error("Eval [?(expr)] prevented in JSONPath expression."); + const e = u.replace(/^\?\((.*?)\)$/u, "$1"); + this._walk(t, a => { + this._eval(e, t[a], a, n, r, i) && f(this._trace(l, t[a], Ma(n, a), t, a, s, !0)) + }) + } else if ("(" === u[0]) { + if (this.currPreventEval) throw new Error("Eval [(expr)] prevented in JSONPath expression."); + f(this._trace(Pa(this._eval(u, t, n[n.length - 1], n.slice(0, -1), r, i), l), t, n, r, i, s, a)) + } else if ("@" === u[0]) { + let e = !1; + const a = u.slice(1, -2); + switch (a) { + case"scalar": + t && ["object", "function"].includes(typeof t) || (e = !0); + break; + case"boolean": + case"string": + case"undefined": + case"function": + typeof t === a && (e = !0); + break; + case"integer": + !Number.isFinite(t) || t % 1 || (e = !0); + break; + case"number": + Number.isFinite(t) && (e = !0); + break; + case"nonFinite": + "number" != typeof t || Number.isFinite(t) || (e = !0); + break; + case"object": + t && typeof t === a && (e = !0); + break; + case"array": + Array.isArray(t) && (e = !0); + break; + case"other": + e = this.currOtherTypeCallback(t, n, r, i); + break; + case"null": + null === t && (e = !0); + break; + default: + throw new TypeError("Unknown value type " + a) + } + if (e) return c = {path: n, value: t, parent: r, parentProperty: i}, this._handleCallback(c, s, "value"), c + } else if ("`" === u[0] && t && xa.call(t, u.slice(1))) { + const e = u.slice(1); + f(this._trace(l, t[e], Ma(n, e), t, e, s, a, !0)) + } else if (u.includes(",")) { + const e = u.split(","); + for (const a of e) f(this._trace(Pa(a, l), t, n, r, i, s, !0)) + } else !o && t && xa.call(t, u) && f(this._trace(l, t[u], Ma(n, u), t, u, s, a, !0)) + } + if (this._hasParentSelector) for (let e = 0; e < h.length; e++) { + const n = h[e]; + if (n && n.isParentSelector) { + const o = this._trace(n.expr, t, n.path, r, i, s, a); + if (Array.isArray(o)) { + h[e] = o[0]; + const t = o.length; + for (let n = 1; n < t; n++) e++, h.splice(e, 0, o[n]) + } else h[e] = o + } + } + return h +}, Fa.prototype._walk = function (e, t) { + if (Array.isArray(e)) { + var n = e.length; + for (let e = 0; e < n; e++) t(e) + } else e && "object" == typeof e && Object.keys(e).forEach(e => { + t(e) + }) +}, Fa.prototype._slice = function (e, t, n, r, i, s, a) { + if (Array.isArray(n)) { + var o = n.length, u = (e = e.split(":"))[2] && Number.parseInt(e[2]) || 1, + l = e[0] && Number.parseInt(e[0]) || 0, h = e[1] && Number.parseInt(e[1]) || o, + l = l < 0 ? Math.max(0, l + o) : Math.min(o, l), h = h < 0 ? Math.max(0, h + o) : Math.min(o, h); + const f = []; + for (let e = l; e < h; e += u) this._trace(Pa(e, t), n, r, i, s, a, !0).forEach(e => { + f.push(e) + }); + return f + } +}, Fa.prototype._eval = function (e, t, n, r, i, s) { + if (this.currSandbox._$_parentProperty = s, this.currSandbox._$_parent = i, this.currSandbox._$_property = n, this.currSandbox._$_root = this.json, this.currSandbox._$_v = t, (s = e.includes("@path")) && (this.currSandbox._$_path = Fa.toPathString(r.concat([n]))), !Fa.cache[i = "script:" + e]) { + let t = e.replace(/@parentProperty/gu, "_$_parentProperty").replace(/@parent/gu, "_$_parent").replace(/@property/gu, "_$_property").replace(/@root/gu, "_$_root").replace(/@([.\s)[])/gu, "_$_v$1"); + s && (t = t.replace(/@path/gu, "_$_path")), Fa.cache[i] = new this.vm.Script(t) + } + try { + return Fa.cache[i].runInNewContext(this.currSandbox) + } catch (t) { + throw new Error("jsonPath: " + t.message + ": " + e) + } +}, Fa.cache = {}, Fa.toPathString = function (e) { + var t = e, n = t.length; + let r = "$"; + for (let e = 1; e < n; e++) /^(~|\^|@.*?\(\))$/u.test(t[e]) || (r += /^[0-9*]+$/u.test(t[e]) ? "[" + t[e] + "]" : "['" + t[e] + "']"); + return r +}, Fa.toPointer = function (e) { + var t = e, n = t.length; + let r = ""; + for (let e = 1; e < n; e++) /^(~|\^|@.*?\(\))$/u.test(t[e]) || (r += "/" + t[e].toString().replace(/~/gu, "~0").replace(/\//gu, "~1")); + return r +}, Fa.toPathArray = function (e) { + var t = Fa.cache; + if (!t[e]) { + const n = [], + r = e.replace(/@(?:null|boolean|number|string|integer|undefined|nonFinite|scalar|array|object|function|other)\(\)/gu, ";$&;").replace(/[['](\??\(.*?\))[\]']/gu, function (e, t) { + return "[#" + (n.push(t) - 1) + "]" + }).replace(/\[['"]([^'\]]*)['"]\]/gu, function (e, t) { + return "['" + t.replace(/\./gu, "%@%").replace(/~/gu, "%%@@%%") + "']" + }).replace(/~/gu, ";~;").replace(/['"]?\.['"]?(?![^[]*\])|\[['"]?/gu, ";").replace(/%@%/gu, ".").replace(/%%@@%%/gu, "~").replace(/(?:;)?(\^+)(?:;)?/gu, function (e, t) { + return ";" + t.split("").join(";") + ";" + }).replace(/;;;|;;/gu, ";..;").replace(/;$|'?\]|'$/gu, ""), i = r.split(";").map(function (e) { + var t = e.match(/#(\d+)/u); + return t && t[1] ? n[t[1]] : e + }); + t[e] = i + } + return t[e].concat() +}, Fa.prototype.vm = Ra; +var Ua = Sr(function (e) { + var t = Array.prototype, n = Object.prototype, + r = {"&": "&", '"': """, "'": "'", "<": "<", ">": ">"}, i = /[&"'<>]/g, s = e.exports = {}; + + function a(e, t) { + return n.hasOwnProperty.call(e, t) + } + + function o(e) { + return r[e] + } + + function c(e, t, n) { + var r, i, a, s, o; + return e instanceof Error && (e = (i = e).name + ": " + i.message), Object.setPrototypeOf ? (r = new Error(e), Object.setPrototypeOf(r, c.prototype)) : (r = this, Object.defineProperty(r, "message", { + enumerable: !1, + writable: !0, + value: e + })), Object.defineProperty(r, "name", {value: "Template render error"}), Error.captureStackTrace && Error.captureStackTrace(r, this.constructor), s = i ? (a = Object.getOwnPropertyDescriptor(i, "stack")) && (a.get || function () { + return a.value + }) || function () { + return i.stack + } : (o = new Error(e).stack, function () { + return o + }), Object.defineProperty(r, "stack", { + get: function () { + return s.call(r) + } + }), Object.defineProperty(r, "cause", {value: i}), r.lineno = t, r.colno = n, r.firstUpdate = !0, r.Update = function (e) { + return e = "(" + (e || "unknown path") + ")", this.firstUpdate && (this.lineno && this.colno ? e += " [Line " + this.lineno + ", Column " + this.colno + "]" : this.lineno && (e += " [Line " + this.lineno + "]")), e += "\n ", this.firstUpdate && (e += " "), this.message = e + (this.message || ""), this.firstUpdate = !1, this + }, r + } + + function u(e) { + return "[object Function]" === n.toString.call(e) + } + + function l(e) { + return "[object Array]" === n.toString.call(e) + } + + function h(e) { + return "[object String]" === n.toString.call(e) + } + + function f(e) { + return "[object Object]" === n.toString.call(e) + } + + function p(e) { + var t = function (e) { + return e ? "string" == typeof e ? e.split(".") : [e] : [] + }(e); + return function (e) { + for (var n = e, r = 0; r < t.length; r++) { + var i = t[r]; + if (!a(n, i)) return; + n = n[i] + } + return n + } + } + + function d(e) { + return Array.prototype.slice.call(e) + } + + function m(e, t, n) { + return Array.prototype.indexOf.call(e || [], t, n) + } + + function _(e) { + var n, t = []; + for (n in e) a(e, n) && t.push(n); + return t + } + + s.hasOwnProp = a, s._prettifyError = function (e, t, n) { + return (n = n.Update ? n : new s.TemplateError(n)).Update(e), t || (e = n, (n = new Error(e.message)).name = e.name), n + }, Object.setPrototypeOf ? Object.setPrototypeOf(c.prototype, Error.prototype) : c.prototype = Object.create(Error.prototype, {constructor: {value: c}}), s.TemplateError = c, s.escape = function (e) { + return e.replace(i, o) + }, s.isFunction = u, s.isArray = l, s.isString = h, s.isObject = f, s.getAttrGetter = p, s.groupBy = function (e, t, n) { + for (var r = {}, i = u(t) ? t : p(t), s = 0; s < e.length; s++) { + var a = e[s], o = i(a, s); + if (void 0 === o && !0 === n) throw new TypeError('groupby: attribute "' + t + '" resolved to undefined'); + (r[o] || (r[o] = [])).push(a) + } + return r + }, s.toArray = d, s.without = function (e) { + var t = []; + if (e) for (var n = e.length, r = d(arguments).slice(1), i = -1; ++i < n;) -1 === m(r, e[i]) && t.push(e[i]); + return t + }, s.repeat = function (e, t) { + for (var n = "", r = 0; r < t; r++) n += e; + return n + }, s.each = function (e, n, r) { + if (null != e) if (t.forEach && e.forEach === t.forEach) e.forEach(n, r); else if (e.length === +e.length) for (var i = 0, s = e.length; i < s; i++) n.call(r, e[i], i, e) + }, s.map = function (e, n) { + var r = []; + if (null != e) { + if (t.map && e.map === t.map) return e.map(n); + for (var i = 0; i < e.length; i++) r[r.length] = n(e[i], i); + e.length === +e.length && (r.length = e.length) + } + return r + }, s.asyncIter = function (e, t, n) { + var r = -1; + !function i() { + ++r < e.length ? t(e[r], r, i, n) : n() + }() + }, s.asyncFor = function (e, t, n) { + var r = _(e || {}), i = r.length, s = -1; + !function a() { + var o = r[++s]; + s < i ? t(o, e[o], s, i, a) : n() + }() + }, s.indexOf = m, s.keys = _, s._entries = function (e) { + return _(e).map(function (t) { + return [t, e[t]] + }) + }, s._values = function (e) { + return _(e).map(function (t) { + return e[t] + }) + }, s._assign = s.extend = function (e, t) { + return e = e || {}, _(t).forEach(function (n) { + e[n] = t[n] + }), e + }, s.inOperator = function (e, t) { + if (l(t) || h(t)) return -1 !== t.indexOf(e); + if (f(t)) return e in t; + throw new Error('Cannot use "in" operator to search for "' + e + '" in unexpected types.') + } +}); + +function Ha() { + throw new Error("setTimeout has not been defined") +} + +function Ga() { + throw new Error("clearTimeout has not been defined") +} + +var ja = Ha, qa = Ga; + +function Ya(e) { + if (ja === setTimeout) return setTimeout(e, 0); + if ((ja === Ha || !ja) && setTimeout) return (ja = setTimeout)(e, 0); + try { + return ja(e, 0) + } catch (t) { + try { + return ja.call(null, e, 0) + } catch (t) { + return ja.call(this, e, 0) + } + } +} + +"function" == typeof Sa.setTimeout && (ja = setTimeout), "function" == typeof Sa.clearTimeout && (qa = clearTimeout); +var Ka, Wa = [], Va = !1, $a = -1; + +function Qa() { + Va && Ka && (Va = !1, Ka.length ? Wa = Ka.concat(Wa) : $a = -1, Wa.length) && za() +} + +function za() { + if (!Va) { + var e = Ya(Qa); + Va = !0; + for (var t = Wa.length; t;) { + for (Ka = Wa, Wa = []; ++$a < t;) Ka && Ka[$a].run(); + $a = -1, t = Wa.length + } + Ka = null, Va = !1, function (e) { + if (qa === clearTimeout) return clearTimeout(e); + if ((qa === Ga || !qa) && clearTimeout) return (qa = clearTimeout)(e); + try { + qa(e) + } catch (t) { + try { + return qa.call(null, e) + } catch (t) { + return qa.call(this, e) + } + } + }(e) + } +} + +function Xa(e, t) { + this.fun = e, this.array = t +} + +function Za() { +} + +Xa.prototype.run = function () { + this.fun.apply(null, this.array) +}; +var Ja = Za, eo = Za, to = Za, no = Za, ro = Za, io = Za, so = Za, ao = Sa.performance || {}, + oo = ao.now || ao.mozNow || ao.msNow || ao.oNow || ao.webkitNow || function () { + return (new Date).getTime() + }, co = new Date, uo = { + nextTick: function (e) { + var t = new Array(arguments.length - 1); + if (1 < arguments.length) for (var n = 1; n < arguments.length; n++) t[n - 1] = arguments[n]; + Wa.push(new Xa(e, t)), 1 !== Wa.length || Va || Ya(za) + }, + title: "browser", + browser: !0, + env: {}, + argv: [], + version: "", + versions: {}, + on: Ja, + addListener: eo, + once: to, + off: no, + removeListener: ro, + removeAllListeners: io, + emit: so, + binding: function (e) { + throw new Error("process.binding is not supported") + }, + cwd: function () { + return "/" + }, + chdir: function (e) { + throw new Error("process.chdir is not supported") + }, + umask: function () { + return 0 + }, + hrtime: function (e) { + var t = .001 * oo.call(ao), n = Math.floor(t), t = Math.floor(t % 1 * 1e9); + return e && (n -= e[0], (t -= e[1]) < 0) && (n--, t += 1e9), [n, t] + }, + platform: "browser", + release: {}, + config: {}, + uptime: function () { + return (new Date - co) / 1e3 + } + }; + +function lo() { +} + +function ho() { + ho.init.call(this) +} + +function fo(e) { + return void 0 === e._maxListeners ? ho.defaultMaxListeners : e._maxListeners +} + +function po(e, t, n, r) { + var s, a; + if ("function" != typeof n) throw new TypeError('"listener" argument must be a function'); + return (s = e._events) ? (s.newListener && (e.emit("newListener", t, n.listener || n), s = e._events), a = s[t]) : (s = e._events = new lo, e._eventsCount = 0), a ? ("function" == typeof a ? a = s[t] = r ? [n, a] : [a, n] : r ? a.unshift(n) : a.push(n), !a.warned && (r = fo(e)) && 0 < r && a.length > r && (a.warned = !0, (r = new Error("Possible EventEmitter memory leak detected. " + a.length + " " + t + " listeners added. Use emitter.setMaxListeners() to increase limit")).name = "MaxListenersExceededWarning", r.emitter = e, r.type = t, r.count = a.length, function (e) { + "function" == typeof console.warn ? console.warn(e) : console.log(e) + }(r))) : (a = s[t] = n, ++e._eventsCount), e +} + +function mo(e, t, n) { + var r = !1; + + function i() { + e.removeListener(t, i), r || (r = !0, n.apply(e, arguments)) + } + + return i.listener = n, i +} + +function _o(e) { + var t = this._events; + if (t) { + if ("function" == typeof (t = t[e])) return 1; + if (t) return t.length + } + return 0 +} + +function Eo(e, t) { + for (var n = new Array(t); t--;) n[t] = e[t]; + return n +} + +function To() { + var e; + ho.call(this), this.__emitError = (e = this, function (t) { + e.emit("error", t) + }) +} + +function Ao() { + return new To +} + +lo.prototype = Object.create(null), (ho.EventEmitter = ho).usingDomains = !1, ho.prototype.domain = void 0, ho.prototype._events = void 0, ho.prototype._maxListeners = void 0, ho.defaultMaxListeners = 10, ho.init = function () { + this.domain = null, ho.usingDomains && (void 0).active, this._events && this._events !== Object.getPrototypeOf(this)._events || (this._events = new lo, this._eventsCount = 0), this._maxListeners = this._maxListeners || void 0 +}, ho.prototype.setMaxListeners = function (e) { + if ("number" != typeof e || e < 0 || isNaN(e)) throw new TypeError('"n" argument must be a positive number'); + return this._maxListeners = e, this +}, ho.prototype.getMaxListeners = function () { + return fo(this) +}, ho.prototype.emit = function (e) { + var n, r, i, s, a, c = "error" === e; + if (a = this._events) c = c && null == a.error; else if (!c) return !1; + if (o = this.domain, c) { + if (c = arguments[1], o) return (c = c || new Error('Uncaught, unspecified "error" event')).domainEmitter = this, c.domain = o, c.domainThrown = !1, o.emit("error", c), !1; + if (c instanceof Error) throw c; + var o = new Error('Uncaught, unspecified "error" event. (' + c + ")"); + throw o.context = c, o + } + if (!(n = a[e])) return !1; + var l = "function" == typeof n; + switch (r = arguments.length) { + case 1: + !function (e, n) { + if (l) e.call(n); else for (var r = e.length, i = Eo(e, r), s = 0; s < r; ++s) i[s].call(n) + }(n, this); + break; + case 2: + !function (e, t, n, r) { + if (t) e.call(n, r); else for (var i = e.length, s = Eo(e, i), a = 0; a < i; ++a) s[a].call(n, r) + }(n, l, this, arguments[1]); + break; + case 3: + !function (e, t, n, r, i) { + if (t) e.call(n, r, i); else for (var s = e.length, a = Eo(e, s), o = 0; o < s; ++o) a[o].call(n, r, i) + }(n, l, this, arguments[1], arguments[2]); + break; + case 4: + !function (e, t, n, r, i, s) { + if (t) e.call(n, r, i, s); else for (var a = e.length, o = Eo(e, a), c = 0; c < a; ++c) o[c].call(n, r, i, s) + }(n, l, this, arguments[1], arguments[2], arguments[3]); + break; + default: + for (i = new Array(r - 1), s = 1; s < r; s++) i[s - 1] = arguments[s]; + !function (e, n, r) { + if (l) e.apply(n, r); else for (var i = e.length, s = Eo(e, i), a = 0; a < i; ++a) s[a].apply(n, r) + }(n, this, i) + } + return !0 +}, ho.prototype.addListener = function (e, t) { + return po(this, e, t, !1) +}, ho.prototype.on = ho.prototype.addListener, ho.prototype.prependListener = function (e, t) { + return po(this, e, t, !0) +}, ho.prototype.once = function (e, t) { + if ("function" != typeof t) throw new TypeError('"listener" argument must be a function'); + return this.on(e, mo(this, e, t)), this +}, ho.prototype.prependOnceListener = function (e, t) { + if ("function" != typeof t) throw new TypeError('"listener" argument must be a function'); + return this.prependListener(e, mo(this, e, t)), this +}, ho.prototype.removeListener = function (e, t) { + var n, r, i, s, a; + if ("function" != typeof t) throw new TypeError('"listener" argument must be a function'); + if ((r = this._events) && (n = r[e])) if (n === t || n.listener && n.listener === t) 0 == --this._eventsCount ? this._events = new lo : (delete r[e], r.removeListener && this.emit("removeListener", e, n.listener || t)); else if ("function" != typeof n) { + for (i = -1, s = n.length; 0 < s--;) if (n[s] === t || n[s].listener && n[s].listener === t) { + a = n[s].listener, i = s; + break + } + if (i < 0) return this; + if (1 === n.length) { + if (n[0] = void 0, 0 == --this._eventsCount) return this._events = new lo, this; + delete r[e] + } else !function (e, t) { + for (var n = t, r = n + 1, i = e.length; r < i; n += 1, r += 1) e[n] = e[r]; + e.pop() + }(n, i); + r.removeListener && this.emit("removeListener", e, a || t) + } + return this +}, ho.prototype.removeAllListeners = function (e) { + var t, n; + if (n = this._events) if (n.removeListener) { + if (0 === arguments.length) { + for (var r, i = Object.keys(n), s = 0; s < i.length; ++s) "removeListener" !== (r = i[s]) && this.removeAllListeners(r); + this.removeAllListeners("removeListener"), this._events = new lo, this._eventsCount = 0 + } else if ("function" == typeof (t = n[e])) this.removeListener(e, t); else if (t) for (; this.removeListener(e, t[t.length - 1]), t[0];) ; + } else 0 === arguments.length ? (this._events = new lo, this._eventsCount = 0) : n[e] && (0 == --this._eventsCount ? this._events = new lo : delete n[e]); + return this +}, ho.prototype.listeners = function (e) { + var n = this._events; + return (n = n && n[e]) ? "function" == typeof n ? [n.listener || n] : function (e) { + for (var t = new Array(e.length), n = 0; n < t.length; ++n) t[n] = e[n].listener || e[n]; + return t + }(n) : [] +}, ho.listenerCount = function (e, t) { + return "function" == typeof e.listenerCount ? e.listenerCount(t) : _o.call(e, t) +}, ho.prototype.listenerCount = _o, ho.prototype.eventNames = function () { + return 0 < this._eventsCount ? Reflect.ownKeys(this._events) : [] +}, ("function" == typeof Object.create ? function (e, t) { + e.super_ = t, e.prototype = Object.create(t.prototype, { + constructor: { + value: e, + enumerable: !1, + writable: !0, + configurable: !0 + } + }) +} : function (e, t) { + function n() { + } + + e.super_ = t, n.prototype = t.prototype, e.prototype = new n, e.prototype.constructor = e +})(To, ho), To.prototype.add = function (e) { + e.on("error", this.__emitError) +}, To.prototype.remove = function (e) { + e.removeListener("error", this.__emitError) +}, To.prototype.bind = function (e) { + var t = this.__emitError; + return function () { + var n = Array.prototype.slice.call(arguments); + try { + e.apply(null, n) + } catch (e) { + t(e) + } + } +}, To.prototype.intercept = function (e) { + var t = this.__emitError; + return function (n) { + if (n) t(n); else { + var r = Array.prototype.slice.call(arguments, 1); + try { + e.apply(null, r) + } catch (n) { + t(n) + } + } + } +}, To.prototype.run = function (e) { + var t = this.__emitError; + try { + e() + } catch (e) { + t(e) + } + return this +}, To.prototype.dispose = function () { + return this.removeAllListeners(), this +}, To.prototype.enter = To.prototype.exit = function () { + return this +}; +var go, vo = {Domain: To, createDomain: Ao, create: Ao}, yo = "function" == typeof setImmediate, So = Co; + +function Co(e) { + No.length || (Lo(), bo = !0), No[No.length] = e +} + +var No = [], bo = !1, Io = 0, Oo = 1024; + +function ko() { + for (; Io < No.length;) { + var e = Io; + if (Io += 1, No[e].call(), Oo < Io) { + for (var t = 0, n = No.length - Io; t < n; t++) No[t] = No[t + Io]; + No.length -= Io, Io = 0 + } + } + No.length = 0, Io = 0, bo = !1 +} + +function Lo() { + var e = uo.domain; + e && ((go = go || vo).active = uo.domain = null), bo && yo ? setImmediate(ko) : uo.nextTick(ko), e && (go.active = uo.domain = e) +} + +Co.requestFlush = Lo; +var Do = [], Ro = function (e) { + var t = Do.length ? Do.pop() : new wo; + t.task = e, t.domain = uo.domain, So(t) +}; + +function wo() { + this.task = null, this.domain = null +} + +wo.prototype.call = function () { + this.domain && this.domain.enter(); + var e = !0; + try { + this.task.call(), e = !1, this.domain && this.domain.exit() + } finally { + e && So.requestFlush(), this.task = null, this.domain = null, Do.push(this) + } +}; +var xo = Sr(function (e) { + function n() { + var e = Array.prototype.slice.call(arguments); + "function" == typeof e[0] && e[0].apply(null, e.splice(1)) + } + + function r(e) { + "function" == typeof setImmediate ? setImmediate(e) : void 0 !== uo && uo.nextTick ? uo.nextTick(e) : setTimeout(e, 0) + } + + function s(e, t, s) { + var c, a = s ? r : n; + return t = t || function () { + }, i(e) ? e.length ? void (c = function (e) { + return function (n) { + var r, i; + n ? (t.apply(null, arguments), t = function () { + }) : (r = Array.prototype.slice.call(arguments, 1), (i = e.next()) ? r.push(c(i)) : r.push(t), a(function () { + e.apply(null, r) + })) + } + })(function (e) { + var t = function (n) { + function r() { + return e.length && e[n].apply(null, arguments), r.next() + } + + return r.next = function () { + return n < e.length - 1 ? t(n + 1) : null + }, r + }; + return t(0) + }(e))() : t() : (s = new Error("First argument to waterfall must be an array of functions"), t(s)) + } + + var t = gr, i = Array.isArray || function (e) { + return "[object Array]" === Object.prototype.toString.call(e) + }; + e.exports ? e.exports = s : t.waterfall = s + }), Mo = " \n\t\r ", Po = "()[]{}%*-+~/#,:|.<>=!", Bo = "string", Fo = "whitespace", Uo = "data", Ho = "block-start", + Go = "block-end", jo = "variable-start", qo = "variable-end", Yo = "comment", Ko = "left-paren", Wo = "right-paren", + Vo = "left-bracket", $o = "right-bracket", Qo = "left-curly", zo = "right-curly", Xo = "operator", Zo = "comma", + Jo = "colon", ec = "tilde", tc = "pipe", nc = "float", rc = "boolean", ic = "none", sc = "symbol", ac = "regex"; + +function oc(e, t, n, r) { + return {type: e, value: t, lineno: n, colno: r} +} + +var cc = function () { + function e(e, t) { + this.str = e, this.index = 0, this.len = e.length, this.lineno = 0, this.colno = 0, this.in_code = !1, e = (t = t || {}).tags || {}, this.tags = { + BLOCK_START: e.blockStart || "{%", + BLOCK_END: e.blockEnd || "%}", + VARIABLE_START: e.variableStart || "{{", + VARIABLE_END: e.variableEnd || "}}", + COMMENT_START: e.commentStart || "{#", + COMMENT_END: e.commentEnd || "#}" + }, this.trimBlocks = !!t.trimBlocks, this.lstripBlocks = !!t.lstripBlocks + } + + var t = e.prototype; + return t.nextToken = function () { + var t = this.lineno, n = this.colno; + if (this.in_code) { + var r = this.current(); + if (this.isFinished()) return null; + if ('"' === r || "'" === r) return oc(Bo, this._parseString(r), t, n); + if (e = this._extract(Mo)) return oc(Fo, e, t, n); + if (e = (e = this._extractString(this.tags.BLOCK_END)) || this._extractString("-" + this.tags.BLOCK_END)) return this.in_code = !1, this.trimBlocks && ("\n" === (r = this.current()) ? this.forward() : "\r" === r && (this.forward(), "\n" === (r = this.current()) ? this.forward() : this.back())), oc(Go, e, t, n); + if (e = (e = this._extractString(this.tags.VARIABLE_END)) || this._extractString("-" + this.tags.VARIABLE_END)) return this.in_code = !1, oc(qo, e, t, n); + if ("r" === r && "/" === this.str.charAt(this.index + 1)) { + this.forwardN(2); + for (var i = ""; !this.isFinished();) { + if ("/" === this.current() && "\\" !== this.previous()) { + this.forward(); + break + } + i += this.current(), this.forward() + } + for (var s = ["g", "i", "m", "y"], a = ""; !this.isFinished() && -1 !== s.indexOf(this.current());) a += this.current(), this.forward(); + return oc(ac, {body: i, flags: a}, t, n) + } + if (-1 !== Po.indexOf(r)) { + this.forward(); + var o, c = ["==", "===", "!=", "!==", "<=", ">=", "//", "**"], u = r + this.current(); + switch (-1 !== Ua.indexOf(c, u) && (this.forward(), -1 !== Ua.indexOf(c, (r = u) + this.current())) && (r = u + this.current(), this.forward()), r) { + case"(": + o = Ko; + break; + case")": + o = Wo; + break; + case"[": + o = Vo; + break; + case"]": + o = $o; + break; + case"{": + o = Qo; + break; + case"}": + o = zo; + break; + case",": + o = Zo; + break; + case":": + o = Jo; + break; + case"~": + o = ec; + break; + case"|": + o = tc; + break; + default: + o = Xo + } + return oc(o, r, t, n) + } + if ((e = this._extractUntil(Mo + Po)).match(/^[-+]?[0-9]+$/)) return "." === this.current() ? (this.forward(), c = this._extract("0123456789"), oc(nc, e + "." + c, t, n)) : oc("int", e, t, n); + if (e.match(/^(true|false)$/)) return oc(rc, e, t, n); + if ("none" === e) return oc(ic, e, t, n); + if ("null" === e) return oc(ic, e, t, n); + if (e) return oc(sc, e, t, n); + throw new Error("Unexpected value while parsing: " + e) + } + var h, + f = this.tags.BLOCK_START.charAt(0) + this.tags.VARIABLE_START.charAt(0) + this.tags.COMMENT_START.charAt(0) + this.tags.COMMENT_END.charAt(0); + if (this.isFinished()) return null; + if (e = (e = this._extractString(this.tags.BLOCK_START + "-")) || this._extractString(this.tags.BLOCK_START)) return this.in_code = !0, oc(Ho, e, t, n); + if (e = (e = this._extractString(this.tags.VARIABLE_START + "-")) || this._extractString(this.tags.VARIABLE_START)) return this.in_code = !0, oc(jo, e, t, n); + var e = "", p = !1; + for (this._matches(this.tags.COMMENT_START) && (p = !0, e = this._extractString(this.tags.COMMENT_START)); null !== (h = this._extractUntil(f));) { + if (e += h, (this._matches(this.tags.BLOCK_START) || this._matches(this.tags.VARIABLE_START) || this._matches(this.tags.COMMENT_START)) && !p) { + if (this.lstripBlocks && this._matches(this.tags.BLOCK_START) && 0 < this.colno && this.colno <= e.length) { + var d = e.slice(-this.colno); + if (/^\s+$/.test(d) && !(e = e.slice(0, -this.colno)).length) return this.nextToken() + } + break + } + if (this._matches(this.tags.COMMENT_END)) { + if (!p) throw new Error("unexpected end of comment"); + e += this._extractString(this.tags.COMMENT_END); + break + } + e += this.current(), this.forward() + } + if (null === h && p) throw new Error("expected end of comment, got end of file"); + return oc(p ? Yo : Uo, e, t, n) + }, t._parseString = function (e) { + this.forward(); + for (var t = ""; !this.isFinished() && this.current() !== e;) { + var n = this.current(); + if ("\\" === n) switch (this.forward(), this.current()) { + case"n": + t += "\n"; + break; + case"t": + t += "\t"; + break; + case"r": + t += "\r"; + break; + default: + t += this.current() + } else t += n; + this.forward() + } + return this.forward(), t + }, t._matches = function (e) { + return this.index + e.length > this.len ? null : this.str.slice(this.index, this.index + e.length) === e + }, t._extractString = function (e) { + return this._matches(e) ? (this.forwardN(e.length), e) : null + }, t._extractUntil = function (e) { + return this._extractMatching(!0, e || "") + }, t._extract = function (e) { + return this._extractMatching(!1, e) + }, t._extractMatching = function (e, t) { + if (this.isFinished()) return null; + var n = t.indexOf(this.current()); + if (e && -1 === n || !e && -1 !== n) { + var r = this.current(); + this.forward(); + for (var i = t.indexOf(this.current()); (e && -1 === i || !e && -1 !== i) && !this.isFinished();) r += this.current(), this.forward(), i = t.indexOf(this.current()); + return r + } + return "" + }, t._extractRegex = function (e) { + return (e = this.currentStr().match(e)) ? (this.forwardN(e[0].length), e) : null + }, t.isFinished = function () { + return this.index >= this.len + }, t.forwardN = function (e) { + for (var t = 0; t < e; t++) this.forward() + }, t.forward = function () { + this.index++, "\n" === this.previous() ? (this.lineno++, this.colno = 0) : this.colno++ + }, t.backN = function (e) { + for (var t = 0; t < e; t++) this.back() + }, t.back = function () { + var e; + this.index--, "\n" === this.current() ? (this.lineno--, e = this.src.lastIndexOf("\n", this.index - 1), this.colno = -1 === e ? this.index : this.index - e) : this.colno-- + }, t.current = function () { + return this.isFinished() ? "" : this.str.charAt(this.index) + }, t.currentStr = function () { + return this.isFinished() ? "" : this.str.substr(this.index) + }, t.previous = function () { + return this.str.charAt(this.index - 1) + }, e +}(), uc = { + lex: function (e, t) { + return new cc(e, t) + }, + TOKEN_STRING: Bo, + TOKEN_WHITESPACE: Fo, + TOKEN_DATA: Uo, + TOKEN_BLOCK_START: Ho, + TOKEN_BLOCK_END: Go, + TOKEN_VARIABLE_START: jo, + TOKEN_VARIABLE_END: qo, + TOKEN_COMMENT: Yo, + TOKEN_LEFT_PAREN: Ko, + TOKEN_RIGHT_PAREN: Wo, + TOKEN_LEFT_BRACKET: Vo, + TOKEN_RIGHT_BRACKET: $o, + TOKEN_LEFT_CURLY: Qo, + TOKEN_RIGHT_CURLY: zo, + TOKEN_OPERATOR: Xo, + TOKEN_COMMA: Zo, + TOKEN_COLON: Jo, + TOKEN_TILDE: ec, + TOKEN_PIPE: tc, + TOKEN_INT: "int", + TOKEN_FLOAT: nc, + TOKEN_BOOLEAN: rc, + TOKEN_NONE: ic, + TOKEN_SYMBOL: sc, + TOKEN_SPECIAL: "special", + TOKEN_REGEX: ac +}; + +function lc(e, t) { + for (var s, n = 0; n < t.length; n++) { + var r = t[n]; + r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(e, "symbol" == typeof (s = function (e) { + if ("object" != typeof e || null === e) return e; + var n = e[Symbol.toPrimitive]; + if (void 0 === n) return String(e); + if ("object" != typeof (n = n.call(e, "string"))) return n; + throw new TypeError("@@toPrimitive must return a primitive value.") + }(r.key)) ? s : String(s), r) + } +} + +function hc(e, t, n) { + return t && lc(e.prototype, t), n && lc(e, n), Object.defineProperty(e, "prototype", {writable: !1}), e +} + +function fc(e, t) { + e.prototype = Object.create(t.prototype), pc(e.prototype.constructor = e, t) +} + +function pc(e, t) { + return (pc = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (e, t) { + return e.__proto__ = t, e + })(e, t) +} + +function dc(e, t, n) { + n = n || {}, Ua.keys(n).forEach(function (t) { + n[t] = function (e, t) { + return "function" != typeof e || "function" != typeof t ? t : function () { + var n = this.parent, r = (this.parent = e, t.apply(this, arguments)); + return this.parent = n, r + } + }(e.prototype[t], n[t]) + }); + var r = function (e) { + function n() { + return e.apply(this, arguments) || this + } + + return fc(n, e), hc(n, [{ + key: "typename", get: function () { + return t + } + }]), n + }(e); + return Ua._assign(r.prototype, n), r +} + +var mc = function () { + function e() { + this.init.apply(this, arguments) + } + + return e.prototype.init = function () { + }, e.extend = function (e, t) { + return "object" == typeof e && (t = e, e = "anonymous"), dc(this, e, t) + }, hc(e, [{ + key: "typename", get: function () { + return this.constructor.name + } + }]), e +}(), _c = function (e) { + function t() { + var n; + return (n = e.call(this) || this).init.apply(n, arguments), n + } + + return fc(t, e), t.prototype.init = function () { + }, t.extend = function (e, t) { + return "object" == typeof e && (t = e, e = "anonymous"), dc(this, e, t) + }, hc(t, [{ + key: "typename", get: function () { + return this.constructor.name + } + }]), t +}(ho), Ec = {Obj: mc, EmitterObj: _c}; + +function Tc(e, t) { + for (var s, n = 0; n < t.length; n++) { + var r = t[n]; + r.enumerable = r.enumerable || !1, r.configurable = !0, "value" in r && (r.writable = !0), Object.defineProperty(e, "symbol" == typeof (s = function (e) { + if ("object" != typeof e || null === e) return e; + var n = e[Symbol.toPrimitive]; + if (void 0 === n) return String(e); + if ("object" != typeof (n = n.call(e, "string"))) return n; + throw new TypeError("@@toPrimitive must return a primitive value.") + }(r.key)) ? s : String(s), r) + } +} + +function Ac(e, t, n) { + return t && Tc(e.prototype, t), n && Tc(e, n), Object.defineProperty(e, "prototype", {writable: !1}), e +} + +function gc(e, t) { + e.prototype = Object.create(t.prototype), vc(e.prototype.constructor = e, t) +} + +function vc(e, t) { + return (vc = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (e, t) { + return e.__proto__ = t, e + })(e, t) +} + +function yc(e, t, n) { + e instanceof t && n.push(e), e instanceof Sc && e.findAll(t, n) +} + +var Sc = function (e) { + function t() { + return e.apply(this, arguments) || this + } + + gc(t, e); + var n = t.prototype; + return n.init = function (e, t) { + for (var n = arguments, r = this, i = arguments.length, s = new Array(2 < i ? i - 2 : 0), a = 2; a < i; a++) s[a - 2] = arguments[a]; + this.lineno = e, this.colno = t, this.fields.forEach(function (e, t) { + r[e] = t = void 0 === (t = n[t + 2]) ? null : t + }) + }, n.findAll = function (e, t) { + var n = this; + return t = t || [], this instanceof Nc ? this.children.forEach(function (n) { + return yc(n, e, t) + }) : this.fields.forEach(function (r) { + return yc(n[r], e, t) + }), t + }, n.iterFields = function (e) { + var t = this; + this.fields.forEach(function (n) { + e(t[n], n) + }) + }, t + }(Ec.Obj), Cc = function (e) { + function t() { + return e.apply(this, arguments) || this + } + + return gc(t, e), Ac(t, [{ + key: "typename", get: function () { + return "Value" + } + }, { + key: "fields", get: function () { + return ["value"] + } + }]), t + }(Sc), Nc = function (e) { + function t() { + return e.apply(this, arguments) || this + } + + gc(t, e); + var n = t.prototype; + return n.init = function (t, n, r) { + e.prototype.init.call(this, t, n, r || []) + }, n.addChild = function (e) { + this.children.push(e) + }, Ac(t, [{ + key: "typename", get: function () { + return "NodeList" + } + }, { + key: "fields", get: function () { + return ["children"] + } + }]), t + }(Sc), bc = Nc.extend("Root"), Ic = Cc.extend("Literal"), Oc = Cc.extend("Symbol"), kc = Nc.extend("Group"), + Lc = Nc.extend("Array"), Dc = Sc.extend("Pair", {fields: ["key", "value"]}), Rc = Nc.extend("Dict"), + wc = Sc.extend("LookupVal", {fields: ["target", "val"]}), xc = Sc.extend("If", {fields: ["cond", "body", "else_"]}), + Mc = xc.extend("IfAsync"), Pc = Sc.extend("InlineIf", {fields: ["cond", "body", "else_"]}), + Bc = Sc.extend("For", {fields: ["arr", "name", "body", "else_"]}), Fc = Bc.extend("AsyncEach"), + Uc = Bc.extend("AsyncAll"), Hc = Sc.extend("Macro", {fields: ["name", "args", "body"]}), Gc = Hc.extend("Caller"), + jc = Sc.extend("Import", {fields: ["template", "target", "withContext"]}), qc = function (e) { + function t() { + return e.apply(this, arguments) || this + } + + return gc(t, e), t.prototype.init = function (t, n, r, i, s) { + e.prototype.init.call(this, t, n, r, i || new Nc, s) + }, Ac(t, [{ + key: "typename", get: function () { + return "FromImport" + } + }, { + key: "fields", get: function () { + return ["template", "names", "withContext"] + } + }]), t + }(Sc), Yc = Sc.extend("FunCall", {fields: ["name", "args"]}), Kc = Yc.extend("Filter"), + Wc = Kc.extend("FilterAsync", {fields: ["name", "args", "symbol"]}), Vc = Rc.extend("KeywordArgs"), + $c = Sc.extend("Block", {fields: ["name", "body"]}), Qc = Sc.extend("Super", {fields: ["blockName", "symbol"]}), + zc = Sc.extend("TemplateRef", {fields: ["template"]}).extend("Extends"), + Xc = Sc.extend("Include", {fields: ["template", "ignoreMissing"]}), + Zc = Sc.extend("Set", {fields: ["targets", "value"]}), + Jc = Sc.extend("Switch", {fields: ["expr", "cases", "default"]}), + eu = Sc.extend("Case", {fields: ["cond", "body"]}), tu = Nc.extend("Output"), + nu = Sc.extend("Capture", {fields: ["body"]}), ru = Ic.extend("TemplateData"), + iu = Sc.extend("UnaryOp", {fields: ["target"]}), su = Sc.extend("BinOp", {fields: ["left", "right"]}), + au = su.extend("In"), ou = su.extend("Is"), cu = su.extend("Or"), uu = su.extend("And"), lu = iu.extend("Not"), + hu = su.extend("Add"), fu = su.extend("Concat"), pu = su.extend("Sub"), du = su.extend("Mul"), + mu = su.extend("Div"), _u = su.extend("FloorDiv"), Eu = su.extend("Mod"), Tu = su.extend("Pow"), + Au = iu.extend("Neg"), gu = iu.extend("Pos"), vu = Sc.extend("Compare", {fields: ["expr", "ops"]}), + yu = Sc.extend("CompareOperand", {fields: ["expr", "type"]}), Su = Sc.extend("CallExtension", { + init: function (e, t, n, r) { + this.parent(), this.extName = e.__name || e, this.prop = t, this.args = n || new Nc, this.contentArgs = r || [], this.autoescape = e.autoescape + }, fields: ["extName", "prop", "args", "contentArgs"] + }), Cu = Su.extend("CallExtensionAsync"); + +function Nu(e, t, n) { + var r = e.split("\n"); + r.forEach(function (e, i) { + e && (n && 0 < i || !n) && process.stdout.write(" ".repeat(t)), i = i === r.length - 1 ? "" : "\n", process.stdout.write(e + i) + }) +} + +var bu = { + Node: Sc, + Root: bc, + NodeList: Nc, + Value: Cc, + Literal: Ic, + Symbol: Oc, + Group: kc, + Array: Lc, + Pair: Dc, + Dict: Rc, + Output: tu, + Capture: nu, + TemplateData: ru, + If: xc, + IfAsync: Mc, + InlineIf: Pc, + For: Bc, + AsyncEach: Fc, + AsyncAll: Uc, + Macro: Hc, + Caller: Gc, + Import: jc, + FromImport: qc, + FunCall: Yc, + Filter: Kc, + FilterAsync: Wc, + KeywordArgs: Vc, + Block: $c, + Super: Qc, + Extends: zc, + Include: Xc, + Set: Zc, + Switch: Jc, + Case: eu, + LookupVal: wc, + BinOp: su, + In: au, + Is: ou, + Or: cu, + And: uu, + Not: lu, + Add: hu, + Concat: fu, + Sub: pu, + Mul: du, + Div: mu, + FloorDiv: _u, + Mod: Eu, + Pow: Tu, + Neg: Au, + Pos: gu, + Compare: vu, + CompareOperand: yu, + CallExtension: Su, + CallExtensionAsync: Cu, + printNodes: function e(t, n) { + var r, i; + n = n || 0, Nu(t.typename + ": ", n), t instanceof Nc ? (Nu("\n"), t.children.forEach(function (t) { + e(t, n + 2) + })) : t instanceof Su ? (Nu(t.extName + "." + t.prop + "\n"), t.args && e(t.args, n + 2), t.contentArgs && t.contentArgs.forEach(function (t) { + e(t, n + 2) + })) : (r = [], i = null, t.iterFields(function (e, t) { + e instanceof Sc ? r.push([t, e]) : (i = i || {})[t] = e + }), i ? Nu(JSON.stringify(i, null, 2) + "\n", null, !0) : Nu("\n"), r.forEach(function (t) { + var r = t[0], t = t[1]; + Nu("[" + r + "] =>", n + 2), e(t, n + 4) + })) + } +}; + +function Iu(e, t) { + return (Iu = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (e, t) { + return e.__proto__ = t, e + })(e, t) +} + +bu.Node, bu.Root, bu.NodeList, bu.Value, bu.Literal, bu.Group, bu.Pair, bu.Dict, bu.Output, bu.Capture, bu.TemplateData, bu.If, bu.IfAsync, bu.InlineIf, bu.For, bu.AsyncEach, bu.AsyncAll, bu.Macro, bu.Caller, bu.Import, bu.FromImport, bu.FunCall, bu.Filter, bu.FilterAsync, bu.KeywordArgs, bu.Block, bu.Super, bu.Extends, bu.Include, bu.Switch, bu.Case, bu.LookupVal, bu.BinOp, bu.In, bu.Is, bu.Or, bu.And, bu.Not, bu.Add, bu.Concat, bu.Sub, bu.Mul, bu.Div, bu.FloorDiv, bu.Mod, bu.Pow, bu.Neg, bu.Pos, bu.Compare, bu.CompareOperand, bu.CallExtension, bu.CallExtensionAsync, bu.printNodes; +var Ou = function (e) { + var n; + + function r() { + return e.apply(this, arguments) || this + } + + n = e, (t = r).prototype = Object.create(n.prototype), Iu(t.prototype.constructor = t, n); + var t = r.prototype; + return t.init = function (e) { + this.tokens = e, this.peeked = null, this.breakOnBlocks = null, this.dropLeadingWhitespace = !1, this.extensions = [] + }, t.nextToken = function (e) { + var t; + if (this.peeked) { + if (e || this.peeked.type !== uc.TOKEN_WHITESPACE) return t = this.peeked, this.peeked = null, t; + this.peeked = null + } + if (t = this.tokens.nextToken(), !e) for (; t && t.type === uc.TOKEN_WHITESPACE;) t = this.tokens.nextToken(); + return t + }, t.peekToken = function () { + return this.peeked = this.peeked || this.nextToken(), this.peeked + }, t.pushToken = function (e) { + if (this.peeked) throw new Error("pushToken: can only push one token on between reads"); + this.peeked = e + }, t.error = function (e, t, n) { + var r; + return void 0 !== t && void 0 !== n || (t = (r = this.peekToken() || {}).lineno, n = r.colno), void 0 !== t && (t += 1), void 0 !== n && (n += 1), new Ua.TemplateError(e, t, n) + }, t.fail = function (e, t, n) { + throw this.error(e, t, n) + }, t.skip = function (e) { + var t = this.nextToken(); + return !(!t || t.type !== e) || (this.pushToken(t), !1) + }, t.expect = function (e) { + var t = this.nextToken(); + return t.type !== e && this.fail("expected " + e + ", got " + t.type, t.lineno, t.colno), t + }, t.skipValue = function (e, t) { + var n = this.nextToken(); + return !(!n || n.type !== e || n.value !== t) || (this.pushToken(n), !1) + }, t.skipSymbol = function (e) { + return this.skipValue(uc.TOKEN_SYMBOL, e) + }, t.advanceAfterBlockEnd = function (e) { + var t; + return e || ((t = this.peekToken()) || this.fail("unexpected end of file"), t.type !== uc.TOKEN_SYMBOL && this.fail("advanceAfterBlockEnd: expected symbol token or explicit name to be passed"), e = this.nextToken().value), (t = this.nextToken()) && t.type === uc.TOKEN_BLOCK_END ? "-" === t.value.charAt(0) && (this.dropLeadingWhitespace = !0) : this.fail("expected block end in " + e + " statement"), t + }, t.advanceAfterVariableEnd = function () { + var e = this.nextToken(); + e && e.type === uc.TOKEN_VARIABLE_END ? this.dropLeadingWhitespace = "-" === e.value.charAt(e.value.length - this.tokens.tags.VARIABLE_END.length - 1) : (this.pushToken(e), this.fail("expected variable end")) + }, t.parseFor = function () { + var e, t, n = this.peekToken(); + if (this.skipSymbol("for") ? (e = new bu.For(n.lineno, n.colno), t = "endfor") : this.skipSymbol("asyncEach") ? (e = new bu.AsyncEach(n.lineno, n.colno), t = "endeach") : this.skipSymbol("asyncAll") ? (e = new bu.AsyncAll(n.lineno, n.colno), t = "endall") : this.fail("parseFor: expected for{Async}", n.lineno, n.colno), e.name = this.parsePrimary(), e.name instanceof bu.Symbol || this.fail("parseFor: variable name expected for loop"), this.peekToken().type === uc.TOKEN_COMMA) { + var r = e.name; + for (e.name = new bu.Array(r.lineno, r.colno), e.name.addChild(r); this.skip(uc.TOKEN_COMMA);) { + var i = this.parsePrimary(); + e.name.addChild(i) + } + } + return this.skipSymbol("in") || this.fail('parseFor: expected "in" keyword for loop', n.lineno, n.colno), e.arr = this.parseExpression(), this.advanceAfterBlockEnd(n.value), e.body = this.parseUntilBlocks(t, "else"), this.skipSymbol("else") && (this.advanceAfterBlockEnd("else"), e.else_ = this.parseUntilBlocks(t)), this.advanceAfterBlockEnd(), e + }, t.parseMacro = function () { + var e = this.peekToken(), t = (this.skipSymbol("macro") || this.fail("expected macro"), this.parsePrimary(!0)), + n = this.parseSignature(), t = new bu.Macro(e.lineno, e.colno, t, n); + return this.advanceAfterBlockEnd(e.value), t.body = this.parseUntilBlocks("endmacro"), this.advanceAfterBlockEnd(), t + }, t.parseCall = function () { + var e = this.peekToken(), + t = (this.skipSymbol("call") || this.fail("expected call"), this.parseSignature(!0) || new bu.NodeList), + n = this.parsePrimary(), r = (this.advanceAfterBlockEnd(e.value), this.parseUntilBlocks("endcall")), + i = (this.advanceAfterBlockEnd(), new bu.Symbol(e.lineno, e.colno, "caller")), + t = new bu.Caller(e.lineno, e.colno, i, t, r); + return (r = n.args.children)[r.length - 1] instanceof bu.KeywordArgs || r.push(new bu.KeywordArgs), r[r.length - 1].addChild(new bu.Pair(e.lineno, e.colno, i, t)), new bu.Output(e.lineno, e.colno, [n]) + }, t.parseWithContext = function () { + var e = this.peekToken(), t = null; + return this.skipSymbol("with") ? t = !0 : this.skipSymbol("without") && (t = !1), null === t || this.skipSymbol("context") || this.fail("parseFrom: expected context after with/without", e.lineno, e.colno), t + }, t.parseImport = function () { + var e = this.peekToken(), + t = (this.skipSymbol("import") || this.fail("parseImport: expected import", e.lineno, e.colno), this.parseExpression()), + n = (this.skipSymbol("as") || this.fail('parseImport: expected "as" keyword', e.lineno, e.colno), this.parseExpression()), + r = this.parseWithContext(), t = new bu.Import(e.lineno, e.colno, t, n, r); + return this.advanceAfterBlockEnd(e.value), t + }, t.parseFrom = function () { + var e = this.peekToken(), + t = (this.skipSymbol("from") || this.fail("parseFrom: expected from"), this.parseExpression()); + this.skipSymbol("import") || this.fail("parseFrom: expected import", e.lineno, e.colno); + for (var n, r = new bu.NodeList; ;) { + var a, i = this.peekToken(); + if (i.type === uc.TOKEN_BLOCK_END) { + r.children.length || this.fail("parseFrom: Expected at least one import name", e.lineno, e.colno), "-" === i.value.charAt(0) && (this.dropLeadingWhitespace = !0), this.nextToken(); + break + } + 0 < r.children.length && !this.skip(uc.TOKEN_COMMA) && this.fail("parseFrom: expected comma", e.lineno, e.colno), "_" === (i = this.parsePrimary()).value.charAt(0) && this.fail("parseFrom: names starting with an underscore cannot be imported", i.lineno, i.colno), this.skipSymbol("as") ? (a = this.parsePrimary(), r.addChild(new bu.Pair(i.lineno, i.colno, i, a))) : r.addChild(i), n = this.parseWithContext() + } + return new bu.FromImport(e.lineno, e.colno, t, r, n) + }, t.parseBlock = function () { + var e = this.peekToken(), + t = (this.skipSymbol("block") || this.fail("parseBlock: expected block", e.lineno, e.colno), new bu.Block(e.lineno, e.colno)); + return t.name = this.parsePrimary(), t.name instanceof bu.Symbol || this.fail("parseBlock: variable name expected", e.lineno, e.colno), this.advanceAfterBlockEnd(e.value), t.body = this.parseUntilBlocks("endblock"), this.skipSymbol("endblock"), this.skipSymbol(t.name.value), (e = this.peekToken()) || this.fail("parseBlock: expected endblock, got end of file"), this.advanceAfterBlockEnd(e.value), t + }, t.parseExtends = function () { + var e = "extends", t = this.peekToken(); + return this.skipSymbol(e) || this.fail("parseTemplateRef: expected " + e), (e = new bu.Extends(t.lineno, t.colno)).template = this.parseExpression(), this.advanceAfterBlockEnd(t.value), e + }, t.parseInclude = function () { + var e = "include", t = this.peekToken(); + return this.skipSymbol(e) || this.fail("parseInclude: expected " + e), (e = new bu.Include(t.lineno, t.colno)).template = this.parseExpression(), this.skipSymbol("ignore") && this.skipSymbol("missing") && (e.ignoreMissing = !0), this.advanceAfterBlockEnd(t.value), e + }, t.parseIf = function () { + var e, t = this.peekToken(); + switch (this.skipSymbol("if") || this.skipSymbol("elif") || this.skipSymbol("elseif") ? e = new bu.If(t.lineno, t.colno) : this.skipSymbol("ifAsync") ? e = new bu.IfAsync(t.lineno, t.colno) : this.fail("parseIf: expected if, elif, or elseif", t.lineno, t.colno), e.cond = this.parseExpression(), this.advanceAfterBlockEnd(t.value), e.body = this.parseUntilBlocks("elif", "elseif", "else", "endif"), (t = this.peekToken()) && t.value) { + case"elseif": + case"elif": + e.else_ = this.parseIf(); + break; + case"else": + this.advanceAfterBlockEnd(), e.else_ = this.parseUntilBlocks("endif"), this.advanceAfterBlockEnd(); + break; + case"endif": + e.else_ = null, this.advanceAfterBlockEnd(); + break; + default: + this.fail("parseIf: expected elif, else, or endif, got end of file") + } + return e + }, t.parseSet = function () { + var e = this.peekToken(); + this.skipSymbol("set") || this.fail("parseSet: expected set", e.lineno, e.colno); + for (var t, n = new bu.Set(e.lineno, e.colno, []); (t = this.parsePrimary()) && (n.targets.push(t), this.skip(uc.TOKEN_COMMA));) ; + return this.skipValue(uc.TOKEN_OPERATOR, "=") ? (n.value = this.parseExpression(), this.advanceAfterBlockEnd(e.value)) : this.skip(uc.TOKEN_BLOCK_END) ? (n.body = new bu.Capture(e.lineno, e.colno, this.parseUntilBlocks("endset")), n.value = null, this.advanceAfterBlockEnd()) : this.fail("parseSet: expected = or block end in set tag", e.lineno, e.colno), n + }, t.parseSwitch = function () { + var e = "switch", t = "endswitch", n = "case", r = "default", i = this.peekToken(), + s = (this.skipSymbol(e) || this.skipSymbol(n) || this.skipSymbol(r) || this.fail('parseSwitch: expected "switch," "case" or "default"', i.lineno, i.colno), this.parseExpression()); + this.advanceAfterBlockEnd(e), this.parseUntilBlocks(n, r, t); + var a, o = this.peekToken(), c = []; + do { + this.skipSymbol(n); + var u = this.parseExpression(), l = (this.advanceAfterBlockEnd(e), this.parseUntilBlocks(n, r, t)) + } while (c.push(new bu.Case(o.line, o.col, u, l)), (o = this.peekToken()) && o.value === n); + switch (o.value) { + case r: + this.advanceAfterBlockEnd(), a = this.parseUntilBlocks(t), this.advanceAfterBlockEnd(); + break; + case t: + this.advanceAfterBlockEnd(); + break; + default: + this.fail('parseSwitch: expected "case," "default" or "endswitch," got EOF.') + } + return new bu.Switch(i.lineno, i.colno, s, c, a) + }, t.parseStatement = function () { + var e = this.peekToken(); + if (e.type !== uc.TOKEN_SYMBOL && this.fail("tag name expected", e.lineno, e.colno), this.breakOnBlocks && -1 !== Ua.indexOf(this.breakOnBlocks, e.value)) return null; + switch (e.value) { + case"raw": + return this.parseRaw(); + case"verbatim": + return this.parseRaw("verbatim"); + case"if": + case"ifAsync": + return this.parseIf(); + case"for": + case"asyncEach": + case"asyncAll": + return this.parseFor(); + case"block": + return this.parseBlock(); + case"extends": + return this.parseExtends(); + case"include": + return this.parseInclude(); + case"set": + return this.parseSet(); + case"macro": + return this.parseMacro(); + case"call": + return this.parseCall(); + case"import": + return this.parseImport(); + case"from": + return this.parseFrom(); + case"filter": + return this.parseFilterStatement(); + case"switch": + return this.parseSwitch(); + default: + if (this.extensions.length) for (var t = 0; t < this.extensions.length; t++) { + var n = this.extensions[t]; + if (-1 !== Ua.indexOf(n.tags || [], e.value)) return n.parse(this, bu, uc) + } + this.fail("unknown block tag: " + e.value, e.lineno, e.colno) + } + }, t.parseRaw = function (e) { + for (var t = "end" + (e = e || "raw"), n = new RegExp("([\\s\\S]*?){%\\s*(" + e + "|" + t + ")\\s*(?=%})%}"), r = 1, i = "", a = this.advanceAfterBlockEnd(); (s = this.tokens._extractRegex(n)) && 0 < r;) { + var o = s[0], c = s[1], s = s[2]; + s === e ? r += 1 : s === t && --r, 0 === r ? (i += c, this.tokens.backN(o.length - c.length)) : i += o + } + return new bu.Output(a.lineno, a.colno, [new bu.TemplateData(a.lineno, a.colno, i)]) + }, t.parsePostfix = function (e) { + for (var t, n = this.peekToken(); n;) { + if (n.type === uc.TOKEN_LEFT_PAREN) e = new bu.FunCall(n.lineno, n.colno, e, this.parseSignature()); else if (n.type === uc.TOKEN_LEFT_BRACKET) 1 < (t = this.parseAggregate()).children.length && this.fail("invalid index"), e = new bu.LookupVal(n.lineno, n.colno, e, t.children[0]); else { + if (n.type !== uc.TOKEN_OPERATOR || "." !== n.value) break; + this.nextToken(); + var r = this.nextToken(); + r.type !== uc.TOKEN_SYMBOL && this.fail("expected name as lookup value, got " + r.value, r.lineno, r.colno), t = new bu.Literal(r.lineno, r.colno, r.value), e = new bu.LookupVal(n.lineno, n.colno, e, t) + } + n = this.peekToken() + } + return e + }, t.parseExpression = function () { + return this.parseInlineIf() + }, t.parseInlineIf = function () { + var t, n, e = this.parseOr(); + return this.skipSymbol("if") && (t = this.parseOr(), n = e, (e = new bu.InlineIf(e.lineno, e.colno)).body = n, e.cond = t, this.skipSymbol("else") ? e.else_ = this.parseOr() : e.else_ = null), e + }, t.parseOr = function () { + for (var e = this.parseAnd(); this.skipSymbol("or");) var t = this.parseAnd(), e = new bu.Or(e.lineno, e.colno, e, t); + return e + }, t.parseAnd = function () { + for (var e = this.parseNot(); this.skipSymbol("and");) var t = this.parseNot(), e = new bu.And(e.lineno, e.colno, e, t); + return e + }, t.parseNot = function () { + var e = this.peekToken(); + return this.skipSymbol("not") ? new bu.Not(e.lineno, e.colno, this.parseNot()) : this.parseIn() + }, t.parseIn = function () { + for (var e = this.parseIs(); ;) { + var t = this.nextToken(); + if (!t) break; + var n = t.type === uc.TOKEN_SYMBOL && "not" === t.value; + if (n || this.pushToken(t), !this.skipSymbol("in")) { + n && this.pushToken(t); + break + } + t = this.parseIs(), e = new bu.In(e.lineno, e.colno, e, t), n && (e = new bu.Not(e.lineno, e.colno, e)) + } + return e + }, t.parseIs = function () { + var t, n, e = this.parseCompare(); + return this.skipSymbol("is") && (t = this.skipSymbol("not"), n = this.parseCompare(), e = new bu.Is(e.lineno, e.colno, e, n), t) ? new bu.Not(e.lineno, e.colno, e) : e + }, t.parseCompare = function () { + for (var e = ["==", "===", "!=", "!==", "<", ">", "<=", ">="], t = this.parseConcat(), n = []; ;) { + var r = this.nextToken(); + if (!r) break; + if (-1 === e.indexOf(r.value)) { + this.pushToken(r); + break + } + n.push(new bu.CompareOperand(r.lineno, r.colno, this.parseConcat(), r.value)) + } + return n.length ? new bu.Compare(n[0].lineno, n[0].colno, t, n) : t + }, t.parseConcat = function () { + for (var e = this.parseAdd(); this.skipValue(uc.TOKEN_TILDE, "~");) var t = this.parseAdd(), e = new bu.Concat(e.lineno, e.colno, e, t); + return e + }, t.parseAdd = function () { + for (var e = this.parseSub(); this.skipValue(uc.TOKEN_OPERATOR, "+");) var t = this.parseSub(), e = new bu.Add(e.lineno, e.colno, e, t); + return e + }, t.parseSub = function () { + for (var e = this.parseMul(); this.skipValue(uc.TOKEN_OPERATOR, "-");) var t = this.parseMul(), e = new bu.Sub(e.lineno, e.colno, e, t); + return e + }, t.parseMul = function () { + for (var e = this.parseDiv(); this.skipValue(uc.TOKEN_OPERATOR, "*");) var t = this.parseDiv(), e = new bu.Mul(e.lineno, e.colno, e, t); + return e + }, t.parseDiv = function () { + for (var e = this.parseFloorDiv(); this.skipValue(uc.TOKEN_OPERATOR, "/");) var t = this.parseFloorDiv(), e = new bu.Div(e.lineno, e.colno, e, t); + return e + }, t.parseFloorDiv = function () { + for (var e = this.parseMod(); this.skipValue(uc.TOKEN_OPERATOR, "//");) var t = this.parseMod(), e = new bu.FloorDiv(e.lineno, e.colno, e, t); + return e + }, t.parseMod = function () { + for (var e = this.parsePow(); this.skipValue(uc.TOKEN_OPERATOR, "%");) var t = this.parsePow(), e = new bu.Mod(e.lineno, e.colno, e, t); + return e + }, t.parsePow = function () { + for (var e = this.parseUnary(); this.skipValue(uc.TOKEN_OPERATOR, "**");) var t = this.parseUnary(), e = new bu.Pow(e.lineno, e.colno, e, t); + return e + }, t.parseUnary = function (e) { + var n = this.peekToken(), + n = this.skipValue(uc.TOKEN_OPERATOR, "-") ? new bu.Neg(n.lineno, n.colno, this.parseUnary(!0)) : this.skipValue(uc.TOKEN_OPERATOR, "+") ? new bu.Pos(n.lineno, n.colno, this.parseUnary(!0)) : this.parsePrimary(); + return e ? n : this.parseFilter(n) + }, t.parsePrimary = function (e) { + var t, n = this.nextToken(); + if (n ? n.type === uc.TOKEN_STRING ? t = n.value : n.type === uc.TOKEN_INT ? t = parseInt(n.value, 10) : n.type === uc.TOKEN_FLOAT ? t = parseFloat(n.value) : n.type === uc.TOKEN_BOOLEAN ? "true" === n.value ? t = !0 : "false" === n.value ? t = !1 : this.fail("invalid boolean: " + n.value, n.lineno, n.colno) : n.type === uc.TOKEN_NONE ? t = null : n.type === uc.TOKEN_REGEX && (t = new RegExp(n.value.body, n.value.flags)) : this.fail("expected expression, got end of file"), t = void 0 !== t ? new bu.Literal(n.lineno, n.colno, t) : n.type === uc.TOKEN_SYMBOL ? new bu.Symbol(n.lineno, n.colno, n.value) : (this.pushToken(n), this.parseAggregate()), t = e ? t : this.parsePostfix(t)) return t; + throw this.error("unexpected token: " + n.value, n.lineno, n.colno) + }, t.parseFilterName = function () { + for (var e = this.expect(uc.TOKEN_SYMBOL), t = e.value; this.skipValue(uc.TOKEN_OPERATOR, ".");) t += "." + this.expect(uc.TOKEN_SYMBOL).value; + return new bu.Symbol(e.lineno, e.colno, t) + }, t.parseFilterArgs = function (e) { + return this.peekToken().type === uc.TOKEN_LEFT_PAREN ? this.parsePostfix(e).args.children : [] + }, t.parseFilter = function (e) { + for (; this.skip(uc.TOKEN_PIPE);) { + var t = this.parseFilterName(); + e = new bu.Filter(t.lineno, t.colno, t, new bu.NodeList(t.lineno, t.colno, [e].concat(this.parseFilterArgs(e)))) + } + return e + }, t.parseFilterStatement = function () { + var e = this.peekToken(), + t = (this.skipSymbol("filter") || this.fail("parseFilterStatement: expected filter"), this.parseFilterName()), + n = this.parseFilterArgs(t), + e = (this.advanceAfterBlockEnd(e.value), new bu.Capture(t.lineno, t.colno, this.parseUntilBlocks("endfilter"))), + e = (this.advanceAfterBlockEnd(), new bu.Filter(t.lineno, t.colno, t, new bu.NodeList(t.lineno, t.colno, [e].concat(n)))); + return new bu.Output(t.lineno, t.colno, [e]) + }, t.parseAggregate = function () { + var e, t = this.nextToken(); + switch (t.type) { + case uc.TOKEN_LEFT_PAREN: + e = new bu.Group(t.lineno, t.colno); + break; + case uc.TOKEN_LEFT_BRACKET: + e = new bu.Array(t.lineno, t.colno); + break; + case uc.TOKEN_LEFT_CURLY: + e = new bu.Dict(t.lineno, t.colno); + break; + default: + return null + } + for (; ;) { + var i, n = this.peekToken().type; + if (n === uc.TOKEN_RIGHT_PAREN || n === uc.TOKEN_RIGHT_BRACKET || n === uc.TOKEN_RIGHT_CURLY) { + this.nextToken(); + break + } + 0 < e.children.length && (this.skip(uc.TOKEN_COMMA) || this.fail("parseAggregate: expected comma after expression", t.lineno, t.colno)), e instanceof bu.Dict ? (n = this.parsePrimary(), this.skip(uc.TOKEN_COLON) || this.fail("parseAggregate: expected colon after dict key", t.lineno, t.colno), i = this.parseExpression(), e.addChild(new bu.Pair(n.lineno, n.colno, n, i))) : (n = this.parseExpression(), e.addChild(n)) + } + return e + }, t.parseSignature = function (e, t) { + var n = this.peekToken(); + if (!t && n.type !== uc.TOKEN_LEFT_PAREN) { + if (e) return null; + this.fail("expected arguments", n.lineno, n.colno) + } + n.type === uc.TOKEN_LEFT_PAREN && (n = this.nextToken()); + for (var a, r = new bu.NodeList(n.lineno, n.colno), i = new bu.KeywordArgs(n.lineno, n.colno), s = !1; ;) { + if (n = this.peekToken(), !t && n.type === uc.TOKEN_RIGHT_PAREN) { + this.nextToken(); + break + } + if (t && n.type === uc.TOKEN_BLOCK_END) break; + s && !this.skip(uc.TOKEN_COMMA) ? this.fail("parseSignature: expected comma after expression", n.lineno, n.colno) : (a = this.parseExpression(), this.skipValue(uc.TOKEN_OPERATOR, "=") ? i.addChild(new bu.Pair(a.lineno, a.colno, a, this.parseExpression())) : r.addChild(a)), s = !0 + } + return i.children.length && r.addChild(i), r + }, t.parseUntilBlocks = function () { + for (var e = this.breakOnBlocks, t = arguments.length, n = new Array(t), r = 0; r < t; r++) n[r] = arguments[r]; + this.breakOnBlocks = n; + var i = this.parse(); + return this.breakOnBlocks = e, i + }, t.parseNodes = function () { + for (var e, t = []; e = this.nextToken();) if (e.type === uc.TOKEN_DATA) { + var n = e.value, r = this.peekToken(), i = r && r.value; + this.dropLeadingWhitespace && (n = n.replace(/^\s*/, ""), this.dropLeadingWhitespace = !1), r && (r.type === uc.TOKEN_BLOCK_START && "-" === i.charAt(i.length - 1) || r.type === uc.TOKEN_VARIABLE_START && "-" === i.charAt(this.tokens.tags.VARIABLE_START.length) || r.type === uc.TOKEN_COMMENT && "-" === i.charAt(this.tokens.tags.COMMENT_START.length)) && (n = n.replace(/\s*$/, "")), t.push(new bu.Output(e.lineno, e.colno, [new bu.TemplateData(e.lineno, e.colno, n)])) + } else if (e.type === uc.TOKEN_BLOCK_START) { + if (this.dropLeadingWhitespace = !1, !(r = this.parseStatement())) break; + t.push(r) + } else e.type === uc.TOKEN_VARIABLE_START ? (i = this.parseExpression(), this.dropLeadingWhitespace = !1, this.advanceAfterVariableEnd(), t.push(new bu.Output(e.lineno, e.colno, [i]))) : e.type === uc.TOKEN_COMMENT ? this.dropLeadingWhitespace = "-" === e.value.charAt(e.value.length - this.tokens.tags.COMMENT_END.length - 1) : this.fail("Unexpected token at top-level: " + e.type, e.lineno, e.colno); + return t + }, t.parse = function () { + return new bu.NodeList(0, 0, this.parseNodes()) + }, t.parseAsRoot = function () { + return new bu.Root(0, 0, this.parseNodes()) + }, r +}(Ec.Obj), ku = { + parse: function (e, t, n) { + return e = new Ou(uc.lex(e, n)), void 0 !== t && (e.extensions = t), e.parseAsRoot() + }, Parser: Ou +}, Lu = 0; + +function Du() { + return "hole_" + Lu++ +} + +function Ru(e, t) { + for (var n = null, r = 0; r < e.length; r++) { + var i = t(e[r]); + i !== e[r] && ((n = n || e.slice())[r] = i) + } + return n || e +} + +function wu(e, t, n) { + if (!(e instanceof bu.Node)) return e; + if (!n) { + var r = t(e); + if (r && r !== e) return r + } + var a; + return e instanceof bu.NodeList ? (r = Ru(e.children, function (e) { + return wu(e, t, n) + })) !== e.children && (e = new bu[e.typename](e.lineno, e.colno, r)) : e instanceof bu.CallExtension ? (r = wu(e.args, t, n), a = Ru(e.contentArgs, function (e) { + return wu(e, t, n) + }), r === e.args && a === e.contentArgs || (e = new bu[e.typename](e.extName, e.prop, r, a))) : (a = Ru(r = e.fields.map(function (t) { + return e[t] + }), function (e) { + return wu(e, t, n) + })) !== r && (e = new bu[e.typename](e.lineno, e.colno), a.forEach(function (t, n) { + e[e.fields[n]] = t + })), n && t(e) || e +} + +function xu(e, t) { + return wu(e, t, !0) +} + +function Mu(e, t, n) { + var r = [], i = xu(n ? e[n] : e, function (e) { + var n; + return e instanceof bu.Block ? e : ((e instanceof bu.Filter && -1 !== Ua.indexOf(t, e.name.value) || e instanceof bu.CallExtensionAsync) && (n = new bu.Symbol(e.lineno, e.colno, Du()), r.push(new bu.FilterAsync(e.lineno, e.colno, e.name, e.args, n))), n) + }); + return n ? e[n] = i : e = i, r.length ? (r.push(e), new bu.NodeList(e.lineno, e.colno, r)) : e +} + +function Pu(e, t) { + return function (e) { + return xu(e, function (e) { + if (e instanceof bu.If || e instanceof bu.For) { + var t = !1; + if (wu(e, function (e) { + if (e instanceof bu.FilterAsync || e instanceof bu.IfAsync || e instanceof bu.AsyncEach || e instanceof bu.AsyncAll || e instanceof bu.CallExtensionAsync) return t = !0, e + }), t) return e instanceof bu.If ? new bu.IfAsync(e.lineno, e.colno, e.cond, e.body, e.else_) : e instanceof bu.For && !(e instanceof bu.AsyncAll) ? new bu.AsyncEach(e.lineno, e.colno, e.arr, e.name, e.body, e.else_) : void 0 + } + }) + }(function (e) { + return wu(e, function (e) { + var t, n; + e instanceof bu.Block && (t = !1, n = Du(), e.body = wu(e.body, function (e) { + if (e instanceof bu.FunCall && "super" === e.name.value) return t = !0, new bu.Symbol(e.lineno, e.colno, n) + }), t) && e.body.children.unshift(new bu.Super(0, 0, e.name, new bu.Symbol(0, 0, n))) + }) + }(function (e, t) { + return xu(e, function (e) { + return e instanceof bu.Output ? Mu(e, t) : e instanceof bu.Set ? Mu(e, t, "value") : e instanceof bu.For ? Mu(e, t, "arr") : e instanceof bu.If ? Mu(e, t, "cond") : e instanceof bu.CallExtension ? Mu(e, t, "args") : void 0 + }) + }(e, t))) +} + +var Bu = { + transform: function (e, t) { + return Pu(e, t || []) + } +}, Fu = Array.from, Uu = "function" == typeof Symbol && Symbol.iterator && "function" == typeof Fu, Hu = function () { + function e(e, t) { + this.variables = Object.create(null), this.parent = e, this.topLevel = !1, this.isolateWrites = t + } + + var t = e.prototype; + return t.set = function (e, t, n) { + var r = e.split("."), i = this.variables, s = this; + if (n && (s = this.resolve(r[0], !0))) s.set(e, t); else { + for (var a = 0; a < r.length - 1; a++) { + var o = r[a]; + i[o] || (i[o] = {}), i = i[o] + } + i[r[r.length - 1]] = t + } + }, t.get = function (e) { + return void 0 !== (e = this.variables[e]) ? e : null + }, t.lookup = function (e) { + var t = this.parent, n = this.variables[e]; + return void 0 !== n ? n : t && t.lookup(e) + }, t.resolve = function (e, t) { + return t = t && this.isolateWrites ? void 0 : this.parent, void 0 !== this.variables[e] ? this : t && t.resolve(e) + }, t.push = function (t) { + return new e(this, t) + }, t.pop = function () { + return this.parent + }, e +}(); + +function Gu(e) { + return e && Object.prototype.hasOwnProperty.call(e, "__keywords") +} + +function ju(e) { + var t = e.length; + return 0 === t ? 0 : Gu(e[t - 1]) ? t - 1 : t +} + +function qu(e) { + if ("string" != typeof e) return e; + this.val = e, this.val = e, Object.defineProperty(this, "length", {writable: !0, configurable: !0, value: e.length}) +} + +qu.prototype = Object.create(String.prototype, { + length: { + writable: !0, + configurable: !0, + value: 0 + } +}), qu.prototype.valueOf = function () { + return this.val +}, qu.prototype.toString = function () { + return this.val +}; +var Yu = { + Frame: Hu, makeMacro: function (e, t, n) { + return function () { + for (var r = arguments.length, i = new Array(r), s = 0; s < r; s++) i[s] = arguments[s]; + var o = ju(i), c = function () { + var t = i.length; + return t && Gu(t = i[t - 1]) ? t : {} + }(); + if (o > e.length) a = i.slice(0, e.length), i.slice(a.length, o).forEach(function (e, n) { + n < t.length && (c[t[n]] = e) + }), a.push(c); else if (o < e.length) { + for (var a = i.slice(0, o), u = o; u < e.length; u++) { + var l = e[u]; + a.push(c[l]), delete c[l] + } + a.push(c) + } else a = i; + return n.apply(this, a) + } + }, makeKeywordArgs: function (e) { + return e.__keywords = !0, e + }, numArgs: ju, suppressValue: function (e, t) { + return e = null != e ? e : "", !t || e instanceof qu ? e : Ua.escape(e.toString()) + }, ensureDefined: function (e, t, n) { + if (null == e) throw new Ua.TemplateError("attempted to output null or undefined value", t + 1, n + 1); + return e + }, memberLookup: function (e, t) { + if (null != e) return "function" == typeof e[t] ? function () { + for (var n = arguments.length, r = new Array(n), i = 0; i < n; i++) r[i] = arguments[i]; + return e[t].apply(e, r) + } : e[t] + }, contextOrFrameLookup: function (e, t, n) { + return void 0 !== (t = t.lookup(n)) ? t : e.lookup(n) + }, callWrap: function (e, t, n, r) { + if (!e) throw new Error("Unable to call `" + t + "`, which is undefined or falsey"); + if ("function" != typeof e) throw new Error("Unable to call `" + t + "`, which is not a function"); + return e.apply(n, r) + }, handleError: function (e, t, n) { + return e.lineno ? e : new Ua.TemplateError(e, t, n) + }, isArray: Ua.isArray, keys: Ua.keys, SafeString: qu, copySafeness: function (e, t) { + return e instanceof qu ? new qu(t) : t.toString() + }, markSafe: function (e) { + var t = typeof e; + return "string" == t ? new qu(e) : "function" != t ? e : function (t) { + var n = e.apply(this, arguments); + return "string" == typeof n ? new qu(n) : n + } + }, asyncEach: function (e, t, n, r) { + var i; + Ua.isArray(e) ? (i = e.length, Ua.asyncIter(e, function (e, r, s) { + switch (t) { + case 1: + n(e, r, i, s); + break; + case 2: + n(e[0], e[1], r, i, s); + break; + case 3: + n(e[0], e[1], e[2], r, i, s); + break; + default: + e.push(r, i, s), n.apply(this, e) + } + }, r)) : Ua.asyncFor(e, function (e, t, r, i, s) { + n(e, t, r, i, s) + }, r) + }, asyncAll: function (e, t, n, r) { + var a = 0; + + function o(e, t) { + a++, s[e] = t, a === i && r(null, s.join("")) + } + + if (Ua.isArray(e)) if (i = e.length, s = new Array(i), 0 === i) r(null, ""); else for (var c = 0; c < e.length; c++) { + var u = e[c]; + switch (t) { + case 1: + n(u, c, i, o); + break; + case 2: + n(u[0], u[1], c, i, o); + break; + case 3: + n(u[0], u[1], u[2], c, i, o); + break; + default: + u.push(c, i, o), n.apply(this, u) + } + } else { + var l = Ua.keys(e || {}), i = l.length, s = new Array(i); + if (0 === i) r(null, ""); else for (var h = 0; h < l.length; h++) { + var f = l[h]; + n(f, e[f], h, i, o) + } + } + }, inOperator: Ua.inOperator, fromIterator: function (e) { + return "object" == typeof e && null !== e && !Ua.isArray(e) && Uu && Symbol.iterator in e ? Fu(e) : e + } +}; + +function Ku(e, t) { + return (Ku = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (e, t) { + return e.__proto__ = t, e + })(e, t) +} + +Yu.Frame, Yu.makeMacro, Yu.makeKeywordArgs, Yu.numArgs, Yu.suppressValue, Yu.ensureDefined, Yu.memberLookup, Yu.contextOrFrameLookup, Yu.callWrap, Yu.handleError, Yu.isArray, Yu.keys, Yu.SafeString, Yu.copySafeness, Yu.markSafe, Yu.asyncEach, Yu.asyncAll, Yu.inOperator, Yu.fromIterator; +var Wu = Ua.TemplateError, Vu = Yu.Frame, + $u = {"==": "==", "===": "===", "!=": "!=", "!==": "!==", "<": "<", ">": ">", "<=": "<=", ">=": ">="}, + Qu = function (e) { + var n; + + function r() { + return e.apply(this, arguments) || this + } + + n = e, (t = r).prototype = Object.create(n.prototype), Ku(t.prototype.constructor = t, n); + var t = r.prototype; + return t.init = function (e, t) { + this.templateName = e, this.codebuf = [], this.lastId = 0, this.buffer = null, this.bufferStack = [], this._scopeClosers = "", this.inBlock = !1, this.throwOnUndefined = t + }, t.fail = function (e, t, n) { + throw void 0 !== t && (t += 1), void 0 !== n && (n += 1), new Wu(e, t, n) + }, t._pushBuffer = function () { + var e = this._tmpid(); + return this.bufferStack.push(this.buffer), this.buffer = e, this._emit("var " + this.buffer + ' = "";'), e + }, t._popBuffer = function () { + this.buffer = this.bufferStack.pop() + }, t._emit = function (e) { + this.codebuf.push(e) + }, t._emitLine = function (e) { + this._emit(e + "\n") + }, t._emitLines = function () { + for (var e = this, t = arguments.length, n = new Array(t), r = 0; r < t; r++) n[r] = arguments[r]; + n.forEach(function (t) { + return e._emitLine(t) + }) + }, t._emitFuncBegin = function (e, t) { + this.buffer = "output", this._scopeClosers = "", this._emitLine("function " + t + "(env, context, frame, runtime, cb) {"), this._emitLine("var lineno = " + e.lineno + ";"), this._emitLine("var colno = " + e.colno + ";"), this._emitLine("var " + this.buffer + ' = "";'), this._emitLine("try {") + }, t._emitFuncEnd = function (e) { + e || this._emitLine("cb(null, " + this.buffer + ");"), this._closeScopeLevels(), this._emitLine("} catch (e) {"), this._emitLine(" cb(runtime.handleError(e, lineno, colno));"), this._emitLine("}"), this._emitLine("}"), this.buffer = null + }, t._addScopeLevel = function () { + this._scopeClosers += "})" + }, t._closeScopeLevels = function () { + this._emitLine(this._scopeClosers + ";"), this._scopeClosers = "" + }, t._withScopedSyntax = function (e) { + var t = this._scopeClosers; + this._scopeClosers = "", e.call(this), this._closeScopeLevels(), this._scopeClosers = t + }, t._makeCallback = function (e) { + var t = this._tmpid(); + return "function(" + t + (e ? "," + e : "") + ") {\nif(" + t + ") { cb(" + t + "); return; }" + }, t._tmpid = function () { + return this.lastId++, "t_" + this.lastId + }, t._templateName = function () { + return null == this.templateName ? "undefined" : JSON.stringify(this.templateName) + }, t._compileChildren = function (e, t) { + var n = this; + e.children.forEach(function (e) { + n.compile(e, t) + }) + }, t._compileAggregate = function (e, t, n, r) { + var i = this; + n && this._emit(n), e.children.forEach(function (e, n) { + 0 < n && i._emit(","), i.compile(e, t) + }), r && this._emit(r) + }, t._compileExpression = function (e, t) { + this.assertType(e, bu.Literal, bu.Symbol, bu.Group, bu.Array, bu.Dict, bu.FunCall, bu.Caller, bu.Filter, bu.LookupVal, bu.Compare, bu.InlineIf, bu.In, bu.Is, bu.And, bu.Or, bu.Not, bu.Add, bu.Concat, bu.Sub, bu.Mul, bu.Div, bu.FloorDiv, bu.Mod, bu.Pow, bu.Neg, bu.Pos, bu.Compare, bu.NodeList), this.compile(e, t) + }, t.assertType = function (e) { + for (var t = arguments.length, n = new Array(1 < t ? t - 1 : 0), r = 1; r < t; r++) n[r - 1] = arguments[r]; + n.some(function (t) { + return e instanceof t + }) || this.fail("assertType: invalid type: " + e.typename, e.lineno, e.colno) + }, t.compileCallExtension = function (e, t, n) { + var r = this, i = e.args, s = e.contentArgs, a = "boolean" != typeof e.autoescape || e.autoescape; + n || this._emit(this.buffer + " += runtime.suppressValue("), this._emit('env.getExtension("' + e.extName + '")["' + e.prop + '"]('), this._emit("context"), (i || s) && this._emit(","), i && (i instanceof bu.NodeList || this.fail("compileCallExtension: arguments must be a NodeList, use `parser.parseSignature`"), i.children.forEach(function (e, n) { + r._compileExpression(e, t), n === i.children.length - 1 && !s.length || r._emit(",") + })), s.length && s.forEach(function (e, n) { + var i; + 0 < n && r._emit(","), e ? (r._emitLine("function(cb) {"), r._emitLine("if(!cb) { cb = function(err) { if(err) { throw err; }}}"), i = r._pushBuffer(), r._withScopedSyntax(function () { + r.compile(e, t), r._emitLine("cb(null, " + i + ");") + }), r._popBuffer(), r._emitLine("return " + i + ";"), r._emitLine("}")) : r._emit("null") + }), n ? (e = this._tmpid(), this._emitLine(", " + this._makeCallback(e)), this._emitLine(this.buffer + " += runtime.suppressValue(" + e + ", " + a + " && env.opts.autoescape);"), this._addScopeLevel()) : (this._emit(")"), this._emit(", " + a + " && env.opts.autoescape);\n")) + }, t.compileCallExtensionAsync = function (e, t) { + this.compileCallExtension(e, t, !0) + }, t.compileNodeList = function (e, t) { + this._compileChildren(e, t) + }, t.compileLiteral = function (e) { + var t; + "string" == typeof e.value ? (t = (t = (t = (t = (t = (t = e.value.replace(/\\/g, "\\\\")).replace(/"/g, '\\"')).replace(/\n/g, "\\n")).replace(/\r/g, "\\r")).replace(/\t/g, "\\t")).replace(/\u2028/g, "\\u2028"), this._emit('"' + t + '"')) : null === e.value ? this._emit("null") : this._emit(e.value.toString()) + }, t.compileSymbol = function (e, t) { + e = e.value, (t = t.lookup(e)) ? this._emit(t) : this._emit('runtime.contextOrFrameLookup(context, frame, "' + e + '")') + }, t.compileGroup = function (e, t) { + this._compileAggregate(e, t, "(", ")") + }, t.compileArray = function (e, t) { + this._compileAggregate(e, t, "[", "]") + }, t.compileDict = function (e, t) { + this._compileAggregate(e, t, "{", "}") + }, t.compilePair = function (e, t) { + var n = e.key, e = e.value; + n instanceof bu.Symbol ? n = new bu.Literal(n.lineno, n.colno, n.value) : n instanceof bu.Literal && "string" == typeof n.value || this.fail("compilePair: Dict keys must be strings or names", n.lineno, n.colno), this.compile(n, t), this._emit(": "), this._compileExpression(e, t) + }, t.compileInlineIf = function (e, t) { + this._emit("("), this.compile(e.cond, t), this._emit("?"), this.compile(e.body, t), this._emit(":"), null !== e.else_ ? this.compile(e.else_, t) : this._emit('""'), this._emit(")") + }, t.compileIn = function (e, t) { + this._emit("runtime.inOperator("), this.compile(e.left, t), this._emit(","), this.compile(e.right, t), this._emit(")") + }, t.compileIs = function (e, t) { + var n = (e.right.name || e.right).value; + this._emit('env.getTest("' + n + '").call(context, '), this.compile(e.left, t), e.right.args && (this._emit(","), this.compile(e.right.args, t)), this._emit(") === true") + }, t._binOpEmitter = function (e, t, n) { + this.compile(e.left, t), this._emit(n), this.compile(e.right, t) + }, t.compileOr = function (e, t) { + return this._binOpEmitter(e, t, " || ") + }, t.compileAnd = function (e, t) { + return this._binOpEmitter(e, t, " && ") + }, t.compileAdd = function (e, t) { + return this._binOpEmitter(e, t, " + ") + }, t.compileConcat = function (e, t) { + return this._binOpEmitter(e, t, ' + "" + ') + }, t.compileSub = function (e, t) { + return this._binOpEmitter(e, t, " - ") + }, t.compileMul = function (e, t) { + return this._binOpEmitter(e, t, " * ") + }, t.compileDiv = function (e, t) { + return this._binOpEmitter(e, t, " / ") + }, t.compileMod = function (e, t) { + return this._binOpEmitter(e, t, " % ") + }, t.compileNot = function (e, t) { + this._emit("!"), this.compile(e.target, t) + }, t.compileFloorDiv = function (e, t) { + this._emit("Math.floor("), this.compile(e.left, t), this._emit(" / "), this.compile(e.right, t), this._emit(")") + }, t.compilePow = function (e, t) { + this._emit("Math.pow("), this.compile(e.left, t), this._emit(", "), this.compile(e.right, t), this._emit(")") + }, t.compileNeg = function (e, t) { + this._emit("-"), this.compile(e.target, t) + }, t.compilePos = function (e, t) { + this._emit("+"), this.compile(e.target, t) + }, t.compileCompare = function (e, t) { + var n = this; + this.compile(e.expr, t), e.ops.forEach(function (e) { + n._emit(" " + $u[e.type] + " "), n.compile(e.expr, t) + }) + }, t.compileLookupVal = function (e, t) { + this._emit("runtime.memberLookup(("), this._compileExpression(e.target, t), this._emit("),"), this._compileExpression(e.val, t), this._emit(")") + }, t._getNodeName = function (e) { + switch (e.typename) { + case"Symbol": + return e.value; + case"FunCall": + return "the return value of (" + this._getNodeName(e.name) + ")"; + case"LookupVal": + return this._getNodeName(e.target) + '["' + this._getNodeName(e.val) + '"]'; + case"Literal": + return e.value.toString(); + default: + return "--expression--" + } + }, t.compileFunCall = function (e, t) { + this._emit("(lineno = " + e.lineno + ", colno = " + e.colno + ", "), this._emit("runtime.callWrap("), this._compileExpression(e.name, t), this._emit(', "' + this._getNodeName(e.name).replace(/"/g, '\\"') + '", context, '), this._compileAggregate(e.args, t, "[", "])"), this._emit(")") + }, t.compileFilter = function (e, t) { + var n = e.name; + this.assertType(n, bu.Symbol), this._emit('env.getFilter("' + n.value + '").call(context, '), this._compileAggregate(e.args, t), this._emit(")") + }, t.compileFilterAsync = function (e, t) { + var n = e.name, r = e.symbol.value; + this.assertType(n, bu.Symbol), t.set(r, r), this._emit('env.getFilter("' + n.value + '").call(context, '), this._compileAggregate(e.args, t), this._emitLine(", " + this._makeCallback(r)), this._addScopeLevel() + }, t.compileKeywordArgs = function (e, t) { + this._emit("runtime.makeKeywordArgs("), this.compileDict(e, t), this._emit(")") + }, t.compileSet = function (e, t) { + var n = this, r = []; + e.targets.forEach(function (e) { + e = e.value, null == (e = t.lookup(e)) && (e = n._tmpid(), n._emitLine("var " + e + ";")), r.push(e) + }), e.value ? (this._emit(r.join(" = ") + " = "), this._compileExpression(e.value, t)) : (this._emit(r.join(" = ") + " = "), this.compile(e.body, t)), this._emitLine(";"), e.targets.forEach(function (e, t) { + e = e.value, n._emitLine('frame.set("' + e + '", ' + (t = r[t]) + ", true);"), n._emitLine("if(frame.topLevel) {"), n._emitLine('context.setVariable("' + e + '", ' + t + ");"), n._emitLine("}"), "_" !== e.charAt(0) && (n._emitLine("if(frame.topLevel) {"), n._emitLine('context.addExport("' + e + '", ' + t + ");"), n._emitLine("}")) + }) + }, t.compileSwitch = function (e, t) { + var n = this; + this._emit("switch ("), this.compile(e.expr, t), this._emit(") {"), e.cases.forEach(function (e, r) { + n._emit("case "), n.compile(e.cond, t), n._emit(": "), n.compile(e.body, t), e.body.children.length && n._emitLine("break;") + }), e.default && (this._emit("default:"), this.compile(e.default, t)), this._emit("}") + }, t.compileIf = function (e, t, n) { + var r = this; + this._emit("if("), this._compileExpression(e.cond, t), this._emitLine(") {"), this._withScopedSyntax(function () { + r.compile(e.body, t), n && r._emit("cb()") + }), e.else_ ? (this._emitLine("}\nelse {"), this._withScopedSyntax(function () { + r.compile(e.else_, t), n && r._emit("cb()") + })) : n && (this._emitLine("}\nelse {"), this._emit("cb()")), this._emitLine("}") + }, t.compileIfAsync = function (e, t) { + this._emit("(function(cb) {"), this.compileIf(e, t, !0), this._emit("})(" + this._makeCallback()), this._addScopeLevel() + }, t._emitLoopBindings = function (e, t, n, r) { + var i = this; + [{name: "index", val: n + " + 1"}, {name: "index0", val: n}, { + name: "revindex", + val: r + " - " + n + }, {name: "revindex0", val: r + " - " + n + " - 1"}, {name: "first", val: n + " === 0"}, { + name: "last", + val: n + " === " + r + " - 1" + }, {name: "length", val: r}].forEach(function (e) { + i._emitLine('frame.set("loop.' + e.name + '", ' + e.val + ");") + }) + }, t.compileFor = function (e, t) { + var a, u, l, o, n = this, r = this._tmpid(), i = this._tmpid(), s = this._tmpid(); + t = t.push(), this._emitLine("frame = frame.push();"), this._emit("var " + s + " = "), this._compileExpression(e.arr, t), this._emitLine(";"), this._emit("if(" + s + ") {"), this._emitLine(s + " = runtime.fromIterator(" + s + ");"), e.name instanceof bu.Array ? (this._emitLine("var " + r + ";"), this._emitLine("if(runtime.isArray(" + s + ")) {"), this._emitLine("var " + i + " = " + s + ".length;"), this._emitLine("for(" + r + "=0; " + r + " < " + s + ".length; " + r + "++) {"), e.name.children.forEach(function (i, a) { + var o = n._tmpid(); + n._emitLine("var " + o + " = " + s + "[" + r + "][" + a + "];"), n._emitLine('frame.set("' + i + '", ' + s + "[" + r + "][" + a + "]);"), t.set(e.name.children[a].value, o) + }), this._emitLoopBindings(e, s, r, i), this._withScopedSyntax(function () { + n.compile(e.body, t) + }), this._emitLine("}"), this._emitLine("} else {"), o = (a = e.name.children)[0], a = a[1], u = this._tmpid(), l = this._tmpid(), t.set(o.value, u), t.set(a.value, l), this._emitLine(r + " = -1;"), this._emitLine("var " + i + " = runtime.keys(" + s + ").length;"), this._emitLine("for(var " + u + " in " + s + ") {"), this._emitLine(r + "++;"), this._emitLine("var " + l + " = " + s + "[" + u + "];"), this._emitLine('frame.set("' + o.value + '", ' + u + ");"), this._emitLine('frame.set("' + a.value + '", ' + l + ");"), this._emitLoopBindings(e, s, r, i), this._withScopedSyntax(function () { + n.compile(e.body, t) + }), this._emitLine("}")) : (o = this._tmpid(), t.set(e.name.value, o), this._emitLine("var " + i + " = " + s + ".length;"), this._emitLine("for(var " + r + "=0; " + r + " < " + s + ".length; " + r + "++) {"), this._emitLine("var " + o + " = " + s + "[" + r + "];"), this._emitLine('frame.set("' + e.name.value + '", ' + o + ");"), this._emitLoopBindings(e, s, r, i), this._withScopedSyntax(function () { + n.compile(e.body, t) + })), this._emitLine("}"), this._emitLine("}"), e.else_ && (this._emitLine("if (!" + i + ") {"), this.compile(e.else_, t), this._emitLine("}")), this._emitLine("frame = frame.pop();") + }, t._compileAsyncLoop = function (e, t, n) { + var c, r = this, i = this._tmpid(), s = this._tmpid(), a = this._tmpid(), o = n ? "asyncAll" : "asyncEach", + o = (t = t.push(), this._emitLine("frame = frame.push();"), this._emit("var " + a + " = runtime.fromIterator("), this._compileExpression(e.arr, t), this._emitLine(");"), e.name instanceof bu.Array ? (c = e.name.children.length, this._emit("runtime." + o + "(" + a + ", " + c + ", function("), e.name.children.forEach(function (e) { + r._emit(e.value + ",") + }), this._emit(i + "," + s + ",next) {"), e.name.children.forEach(function (e) { + e = e.value, t.set(e, e), r._emitLine('frame.set("' + e + '", ' + e + ");") + })) : (c = e.name.value, this._emitLine("runtime." + o + "(" + a + ", 1, function(" + c + ", " + i + ", " + s + ",next) {"), this._emitLine('frame.set("' + c + '", ' + c + ");"), t.set(c, c)), this._emitLoopBindings(e, a, i, s), this._withScopedSyntax(function () { + var s; + n && (s = r._pushBuffer()), r.compile(e.body, t), r._emitLine("next(" + i + (s ? "," + s : "") + ");"), n && r._popBuffer() + }), this._tmpid()); + this._emitLine("}, " + this._makeCallback(o)), this._addScopeLevel(), n && this._emitLine(this.buffer + " += " + o + ";"), e.else_ && (this._emitLine("if (!" + a + ".length) {"), this.compile(e.else_, t), this._emitLine("}")), this._emitLine("frame = frame.pop();") + }, t.compileAsyncEach = function (e, t) { + this._compileAsyncLoop(e, t) + }, t.compileAsyncAll = function (e, t) { + this._compileAsyncLoop(e, t, !0) + }, t._compileMacro = function (e, t) { + var n = this, r = [], i = null, s = "macro_" + this._tmpid(), a = void 0 !== t, + c = (e.args.children.forEach(function (t, s) { + s === e.args.children.length - 1 && t instanceof bu.Dict ? i = t : (n.assertType(t, bu.Symbol), r.push(t)) + }), [].concat(r.map(function (e) { + return "l_" + e.value + }), ["kwargs"])), u = r.map(function (e) { + return '"' + e.value + '"' + }), l = (i && i.children || []).map(function (e) { + return '"' + e.key.value + '"' + }), o = a ? t.push(!0) : new Vu, + t = (this._emitLines("var " + s + " = runtime.makeMacro(", "[" + u.join(", ") + "], ", "[" + l.join(", ") + "], ", "function (" + c.join(", ") + ") {", "var callerFrame = frame;", "frame = " + (a ? "frame.push(true);" : "new runtime.Frame();"), "kwargs = kwargs || {};", 'if (Object.prototype.hasOwnProperty.call(kwargs, "caller")) {', 'frame.set("caller", kwargs.caller); }'), r.forEach(function (e) { + n._emitLine('frame.set("' + e.value + '", l_' + e.value + ");"), o.set(e.value, "l_" + e.value) + }), i && i.children.forEach(function (e) { + var t = e.key.value; + n._emit('frame.set("' + t + '", '), n._emit('Object.prototype.hasOwnProperty.call(kwargs, "' + t + '")'), n._emit(' ? kwargs["' + t + '"] : '), n._compileExpression(e.value, o), n._emit(");") + }), this._pushBuffer()); + return this._withScopedSyntax(function () { + n.compile(e.body, o) + }), this._emitLine("frame = " + (a ? "frame.pop();" : "callerFrame;")), this._emitLine("return new runtime.SafeString(" + t + ");"), this._emitLine("});"), this._popBuffer(), s + }, t.compileMacro = function (e, t) { + var n = this._compileMacro(e), r = e.name.value; + t.set(r, n), t.parent ? this._emitLine('frame.set("' + r + '", ' + n + ");") : ("_" !== e.name.value.charAt(0) && this._emitLine('context.addExport("' + r + '");'), this._emitLine('context.setVariable("' + r + '", ' + n + ");")) + }, t.compileCaller = function (e, t) { + this._emit("(function (){"), e = this._compileMacro(e, t), this._emit("return " + e + ";})()") + }, t._compileGetTemplate = function (e, t, n, r) { + var i = this._tmpid(), s = this._templateName(), a = this._makeCallback(i), n = n ? "true" : "false", + r = r ? "true" : "false"; + return this._emit("env.getTemplate("), this._compileExpression(e.template, t), this._emitLine(", " + n + ", " + s + ", " + r + ", " + a), i + }, t.compileImport = function (e, t) { + var n = e.target.value, r = this._compileGetTemplate(e, t, !1, !1); + this._addScopeLevel(), this._emitLine(r + ".getExported(" + (e.withContext ? "context.getVariables(), frame, " : "") + this._makeCallback(r)), this._addScopeLevel(), t.set(n, r), t.parent ? this._emitLine('frame.set("' + n + '", ' + r + ");") : this._emitLine('context.setVariable("' + n + '", ' + r + ");") + }, t.compileFromImport = function (e, t) { + var n = this, r = this._compileGetTemplate(e, t, !1, !1); + this._addScopeLevel(), this._emitLine(r + ".getExported(" + (e.withContext ? "context.getVariables(), frame, " : "") + this._makeCallback(r)), this._addScopeLevel(), e.names.children.forEach(function (e) { + var i, a = n._tmpid(), e = e instanceof bu.Pair ? (i = e.key.value, e.value.value) : i = e.value; + n._emitLine("if(Object.prototype.hasOwnProperty.call(" + r + ', "' + i + '")) {'), n._emitLine("var " + a + " = " + r + "." + i + ";"), n._emitLine("} else {"), n._emitLine("cb(new Error(\"cannot import '" + i + "'\")); return;"), n._emitLine("}"), t.set(e, a), t.parent ? n._emitLine('frame.set("' + e + '", ' + a + ");") : n._emitLine('context.setVariable("' + e + '", ' + a + ");") + }) + }, t.compileBlock = function (e) { + var t = this._tmpid(); + this.inBlock || this._emit('(parentTemplate ? function(e, c, f, r, cb) { cb(""); } : '), this._emit('context.getBlock("' + e.name.value + '")'), this.inBlock || this._emit(")"), this._emitLine("(env, context, frame, runtime, " + this._makeCallback(t)), this._emitLine(this.buffer + " += " + t + ";"), this._addScopeLevel() + }, t.compileSuper = function (e, t) { + var n = e.blockName.value, e = e.symbol.value, i = this._makeCallback(e); + this._emitLine('context.getSuper(env, "' + n + '", b_' + n + ", frame, runtime, " + i), this._emitLine(e + " = runtime.markSafe(" + e + ");"), this._addScopeLevel(), t.set(e, e) + }, t.compileExtends = function (e, t) { + var n = this._tmpid(), e = this._compileGetTemplate(e, t, !0, !1); + this._emitLine("parentTemplate = " + e), this._emitLine("for(var " + n + " in parentTemplate.blocks) {"), this._emitLine("context.addBlock(" + n + ", parentTemplate.blocks[" + n + "]);"), this._emitLine("}"), this._addScopeLevel() + }, t.compileInclude = function (e, t) { + this._emitLine("var tasks = [];"), this._emitLine("tasks.push("), this._emitLine("function(callback) {"), t = this._compileGetTemplate(e, t, !1, e.ignoreMissing), this._emitLine("callback(null," + t + ");});"), this._emitLine("});"), e = this._tmpid(), this._emitLine("tasks.push("), this._emitLine("function(template, callback){"), this._emitLine("template.render(context.getVariables(), frame, " + this._makeCallback(e)), this._emitLine("callback(null," + e + ");});"), this._emitLine("});"), this._emitLine("tasks.push("), this._emitLine("function(result, callback){"), this._emitLine(this.buffer + " += result;"), this._emitLine("callback(null);"), this._emitLine("});"), this._emitLine("env.waterfall(tasks, function(){"), this._addScopeLevel() + }, t.compileTemplateData = function (e, t) { + this.compileLiteral(e, t) + }, t.compileCapture = function (e, t) { + var n = this, r = this.buffer; + this.buffer = "output", this._emitLine("(function() {"), this._emitLine('var output = "";'), this._withScopedSyntax(function () { + n.compile(e.body, t) + }), this._emitLine("return output;"), this._emitLine("})()"), this.buffer = r + }, t.compileOutput = function (e, t) { + var n = this; + e.children.forEach(function (r) { + r instanceof bu.TemplateData ? r.value && (n._emit(n.buffer + " += "), n.compileLiteral(r, t), n._emitLine(";")) : (n._emit(n.buffer + " += runtime.suppressValue("), n.throwOnUndefined && n._emit("runtime.ensureDefined("), n.compile(r, t), n.throwOnUndefined && n._emit("," + e.lineno + "," + e.colno + ")"), n._emit(", env.opts.autoescape);\n")) + }) + }, t.compileRoot = function (e, t) { + var n = this, + r = (t && this.fail("compileRoot: root node can't have frame"), t = new Vu, this._emitFuncBegin(e, "root"), this._emitLine("var parentTemplate = null;"), this._compileChildren(e, t), this._emitLine("if(parentTemplate) {"), this._emitLine("parentTemplate.rootRenderFunc(env, context, frame, runtime, cb);"), this._emitLine("} else {"), this._emitLine("cb(null, " + this.buffer + ");"), this._emitLine("}"), this._emitFuncEnd(!0), this.inBlock = !0, []); + (t = e.findAll(bu.Block)).forEach(function (e, t) { + var i = e.name.value; + if (-1 !== r.indexOf(i)) throw new Error('Block "' + i + '" defined more than once.'); + r.push(i), n._emitFuncBegin(e, "b_" + i), i = new Vu, n._emitLine("var frame = frame.push(true);"), n.compile(e.body, i), n._emitFuncEnd() + }), this._emitLine("return {"), t.forEach(function (e, t) { + e = "b_" + e.name.value, n._emitLine(e + ": " + e + ",") + }), this._emitLine("root: root\n};") + }, t.compile = function (e, t) { + var n = this["compile" + e.typename]; + n ? n.call(this, e, t) : this.fail("compile: Cannot compile node: " + e.typename, e.lineno, e.colno) + }, t.getCode = function () { + return this.codebuf.join("") + }, r + }(Ec.Obj), zu = { + compile: function (e, t, n, r, i) { + var s = new Qu(r, (i = void 0 === i ? {} : i).throwOnUndefined), e = (n || []).map(function (e) { + return e.preprocess + }).filter(function (e) { + return !!e + }).reduce(function (e, t) { + return t(e) + }, e); + return s.compile(Bu.transform(ku.parse(e, n, i), t, r)), s.getCode() + }, Compiler: Qu + }, Xu = Sr(function (e) { + function n(e, t) { + return null == e || !1 === e ? t : e + } + + function r(e) { + return e != e + } + + function i(e) { + var t = (e = n(e, "")).toLowerCase(); + return Yu.copySafeness(e, t.charAt(0).toUpperCase() + t.slice(1)) + } + + function s(e) { + if (Ua.isString(e)) return e.split(""); + if (Ua.isObject(e)) return Ua._entries(e || {}).map(function (e) { + return {key: e[0], value: e[1]} + }); + if (Ua.isArray(e)) return e; + throw new Ua.TemplateError("list filter: type not iterable") + } + + function a(e) { + return function (t, n, r) { + var i = this, s = i.env.getTest(n = void 0 === n ? "truthy" : n); + return Ua.toArray(t).filter(function (t) { + return s.call(i, t, r) === e + }) + } + } + + function o(e) { + return Yu.copySafeness(e, e.replace(/^\s*|\s*$/g, "")) + } + + (e = e.exports = {}).abs = Math.abs, e.batch = function (e, t, n) { + for (var i = [], s = [], r = 0; r < e.length; r++) r % t == 0 && s.length && (i.push(s), s = []), s.push(e[r]); + if (s.length) { + if (n) for (r = s.length; r < t; r++) s.push(n); + i.push(s) + } + return i + }, e.capitalize = i, e.center = function (e, t) { + var i; + return (e = n(e, "")).length >= (t = t || 80) ? e : (t -= e.length, i = Ua.repeat(" ", t / 2 - t % 2), t = Ua.repeat(" ", t / 2), Yu.copySafeness(e, i + e + t)) + }, e.default = function (e, t, n) { + return n ? e || t : void 0 !== e ? e : t + }, e.dictsort = function (e, t, n) { + if (!Ua.isObject(e)) throw new Ua.TemplateError("dictsort filter: val must be an object"); + var r, s, i = []; + for (s in e) i.push([s, e[s]]); + if (void 0 === n || "key" === n) r = 0; else { + if ("value" !== n) throw new Ua.TemplateError("dictsort filter: You can only sort by either key or value"); + r = 1 + } + return i.sort(function (e, n) { + return e = e[r], n = n[r], t || (Ua.isString(e) && (e = e.toUpperCase()), Ua.isString(n) && (n = n.toUpperCase())), n < e ? 1 : e === n ? 0 : -1 + }), i + }, e.dump = function (e, t) { + return JSON.stringify(e, null, t) + }, e.escape = function (e) { + return e instanceof Yu.SafeString ? e : Yu.markSafe(Ua.escape((e = null == e ? "" : e).toString())) + }, e.safe = function (e) { + return e instanceof Yu.SafeString ? e : Yu.markSafe((e = null == e ? "" : e).toString()) + }, e.first = function (e) { + return e[0] + }, e.forceescape = function (e) { + return Yu.markSafe(Ua.escape((e = null == e ? "" : e).toString())) + }, e.groupby = function (e, t) { + return Ua.groupBy(e, t, this.env.opts.throwOnUndefined) + }, e.indent = function (e, t, r) { + if ("" === (e = n(e, ""))) return ""; + t = t || 4; + var i = e.split("\n"), s = Ua.repeat(" ", t), t = i.map(function (e, t) { + return 0 !== t || r ? "" + s + e : e + }).join("\n"); + return Yu.copySafeness(e, t) + }, e.join = function (e, t, n) { + return t = t || "", (e = n ? Ua.map(e, function (e) { + return e[n] + }) : e).join(t) + }, e.last = function (e) { + return e[e.length - 1] + }, e.length = function (e) { + return void 0 !== (e = n(e, "")) ? "function" == typeof Map && e instanceof Map || "function" == typeof Set && e instanceof Set ? e.size : (!Ua.isObject(e) || e instanceof Yu.SafeString ? e : Ua.keys(e)).length : 0 + }, e.list = s, e.lower = function (e) { + return (e = n(e, "")).toLowerCase() + }, e.nl2br = function (e) { + return null == e ? "" : Yu.copySafeness(e, e.replace(/\r\n|\n/g, "
\n")) + }, e.random = function (e) { + return e[Math.floor(Math.random() * e.length)] + }, e.reject = a(!1), e.rejectattr = function (e, t) { + return e.filter(function (e) { + return !e[t] + }) + }, e.select = a(!0), e.selectattr = function (e, t) { + return e.filter(function (e) { + return !!e[t] + }) + }, e.replace = function (e, t, n, r) { + var i = e; + if (t instanceof RegExp) return e.replace(t, n); + void 0 === r && (r = -1); + var s = ""; + if ("number" == typeof t) t = "" + t; else if ("string" != typeof t) return e; + if ("string" != typeof (e = "number" == typeof e ? "" + e : e) && !(e instanceof Yu.SafeString)) return e; + if ("" === t) return s = n + e.split("").join(n) + n, Yu.copySafeness(e, s); + var a = e.indexOf(t); + if (0 === r || -1 === a) return e; + for (var o = 0, c = 0; -1 < a && (-1 === r || c < r);) s += e.substring(o, a) + n, o = a + t.length, c++, a = e.indexOf(t, o); + return o < e.length && (s += e.substring(o)), Yu.copySafeness(i, s) + }, e.reverse = function (e) { + var t; + return (t = Ua.isString(e) ? s(e) : Ua.map(e, function (e) { + return e + })).reverse(), Ua.isString(e) ? Yu.copySafeness(e, t.join("")) : t + }, e.round = function (e, t, n) { + return t = t || 0, t = Math.pow(10, t), ("ceil" === n ? Math.ceil : "floor" === n ? Math.floor : Math.round)(e * t) / t + }, e.slice = function (e, t, n) { + for (var r = Math.floor(e.length / t), i = e.length % t, s = [], a = 0, o = 0; o < t; o++) { + var c = a + o * r; + o < i && a++, c = e.slice(c, a + (o + 1) * r), n && i <= o && c.push(n), s.push(c) + } + return s + }, e.sum = function (e, t, n) { + return (n = void 0 === n ? 0 : n) + (e = t ? Ua.map(e, function (e) { + return e[t] + }) : e).reduce(function (e, t) { + return e + t + }, 0) + }, e.sort = Yu.makeMacro(["value", "reverse", "case_sensitive", "attribute"], [], function (e, t, n, r) { + var i = this, e = Ua.map(e, function (e) { + return e + }), a = Ua.getAttrGetter(r); + return e.sort(function (e, s) { + if (e = r ? a(e) : e, s = r ? a(s) : s, i.env.opts.throwOnUndefined && r && (void 0 === e || void 0 === s)) throw new TypeError('sort: attribute "' + r + '" resolved to undefined'); + return !n && Ua.isString(e) && Ua.isString(s) && (e = e.toLowerCase(), s = s.toLowerCase()), e < s ? t ? 1 : -1 : s < e ? t ? -1 : 1 : 0 + }), e + }), e.string = function (e) { + return Yu.copySafeness(e, e) + }, e.striptags = function (e, t) { + var r = o((e = n(e, "")).replace(/<\/?([a-z][a-z0-9]*)\b[^>]*>|/gi, "")), + t = t ? r.replace(/^ +| +$/gm, "").replace(/ +/g, " ").replace(/(\r\n)/g, "\n").replace(/\n\n\n+/g, "\n\n") : r.replace(/\s+/gi, " "); + return Yu.copySafeness(e, t) + }, e.title = function (e) { + var t = (e = n(e, "")).split(" ").map(i); + return Yu.copySafeness(e, t.join(" ")) + }, e.trim = o, e.truncate = function (e, t, r, i) { + var s = e; + return (e = n(e, "")).length <= (t = t || 255) ? e : (e = r ? e.substring(0, t) : (-1 === (r = e.lastIndexOf(" ", t)) && (r = t), e.substring(0, r)), Yu.copySafeness(s, e += null != i ? i : "...")) + }, e.upper = function (e) { + return (e = n(e, "")).toUpperCase() + }, e.urlencode = function (e) { + var t = encodeURIComponent; + return Ua.isString(e) ? t(e) : (Ua.isArray(e) ? e : Ua._entries(e)).map(function (e) { + var n = e[0], e = e[1]; + return t(n) + "=" + t(e) + }).join("&") + }; + var c = /^(?:\(|<|<)?(.*?)(?:\.|,|\)|\n|>)?$/, u = /^[\w.!#$%&'*+\-\/=?\^`{|}~]+@[a-z\d\-]+(\.[a-z\d\-]+)+$/i, + l = /^https?:\/\/.*$/, h = /^www\./, f = /\.(?:org|net|com)(?:\:|\/|$)/, p = (e.urlize = function (e, t, n) { + r(t) && (t = 1 / 0); + var i = !0 === n ? ' rel="nofollow"' : ""; + return e.split(/(\s+)/).filter(function (e) { + return e && e.length + }).map(function (e) { + var n = e.match(c), s = (n = n ? n[1] : e).substr(0, t); + return l.test(n) ? '" + s + "" : h.test(n) ? '" + s + "" : u.test(n) ? '' + n + "" : f.test(n) ? '" + s + "" : e + }).join("") + }, e.wordcount = function (e) { + return (e = (e = n(e, "")) ? e.match(/\w+/g) : null) ? e.length : null + }, e.float = function (e, t) { + return r(e = parseFloat(e)) ? t : e + }, Yu.makeMacro(["value", "default", "base"], [], function (e, t, n) { + return void 0 === n && (n = 10), r(e = parseInt(e, n)) ? t : e + })); + e.int = p, e.d = e.default, e.e = e.escape + }), Zu = {}; + +function Ju(e, t) { + for (var n = 0, r = e.length - 1; 0 <= r; r--) { + var i = e[r]; + "." === i ? e.splice(r, 1) : ".." === i ? (e.splice(r, 1), n++) : n && (e.splice(r, 1), n--) + } + if (t) for (; n--;) e.unshift(".."); + return e +} + +var el = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/, tl = function (e) { + return el.exec(e).slice(1) +}; + +function nl() { + for (var e = "", t = !1, n = arguments.length - 1; -1 <= n && !t; n--) { + var r = 0 <= n ? arguments[n] : "/"; + if ("string" != typeof r) throw new TypeError("Arguments to path.resolve must be strings"); + r && (e = r + "/" + e, t = "/" === r.charAt(0)) + } + return (t ? "/" : "") + Ju(al(e.split("/"), function (e) { + return !!e + }), !t).join("/") || "." +} + +function rl(e) { + var t = il(e), n = "/" === ol(e, -1); + return (e = (e = Ju(al(e.split("/"), function (e) { + return !!e + }), !t).join("/")) || t ? e : ".") && n && (e += "/"), (t ? "/" : "") + e +} + +function il(e) { + return "/" === e.charAt(0) +} + +var sl = { + extname: function (e) { + return tl(e)[3] + }, basename: function (e, t) { + return e = tl(e)[2], t && e.substr(-1 * t.length) === t ? e.substr(0, e.length - t.length) : e + }, dirname: function (e) { + var n = (e = tl(e))[0], e = e[1]; + return n || e ? n + (e && e.substr(0, e.length - 1)) : "." + }, sep: "/", delimiter: ":", relative: function (e, t) { + function n(e) { + for (var t = 0; t < e.length && "" === e[t]; t++) ; + for (var n = e.length - 1; 0 <= n && "" === e[n]; n--) ; + return n < t ? [] : e.slice(t, n - t + 1) + } + + e = nl(e).substr(1), t = nl(t).substr(1); + for (var r = n(e.split("/")), i = n(t.split("/")), s = Math.min(r.length, i.length), a = s, o = 0; o < s; o++) if (r[o] !== i[o]) { + a = o; + break + } + for (var c = [], o = a; o < r.length; o++) c.push(".."); + return (c = c.concat(i.slice(a))).join("/") + }, join: function () { + return rl(al(Array.prototype.slice.call(arguments, 0), function (e, t) { + if ("string" != typeof e) throw new TypeError("Arguments to path.join must be strings"); + return e + }).join("/")) + }, isAbsolute: il, normalize: rl, resolve: nl +}; + +function al(e, t) { + if (e.filter) return e.filter(t); + for (var n = [], r = 0; r < e.length; r++) t(e[r], r, e) && n.push(e[r]); + return n +} + +var ol = "b" === "ab".substr(-1) ? function (e, t, n) { + return e.substr(t, n) +} : function (e, t, n) { + return t < 0 && (t = e.length + t), e.substr(t, n) +}; + +function cl(e, t) { + return (cl = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (e, t) { + return e.__proto__ = t, e + })(e, t) +} + +var ul = function (e) { + var n; + + function r() { + return e.apply(this, arguments) || this + } + + n = e, (t = r).prototype = Object.create(n.prototype), cl(t.prototype.constructor = t, n); + var t = r.prototype; + return t.resolve = function (e, t) { + return sl.resolve(sl.dirname(e), t) + }, t.isRelative = function (e) { + return 0 === e.indexOf("./") || 0 === e.indexOf("../") + }, r +}(Ec.EmitterObj); + +function ll(e, t) { + return (ll = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (e, t) { + return e.__proto__ = t, e + })(e, t) +} + +var hl = function (e) { + var t, n; + + function r(t) { + var n; + return (n = e.call(this) || this).precompiled = t || {}, n + } + + return n = e, (t = r).prototype = Object.create(n.prototype), ll(t.prototype.constructor = t, n), r.prototype.getSource = function (e) { + return this.precompiled[e] ? {src: {type: "code", obj: this.precompiled[e]}, path: e} : null + }, r +}(ul); + +function fl(e, t) { + e.prototype = Object.create(t.prototype), pl(e.prototype.constructor = e, t) +} + +function pl(e, t) { + return (pl = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (e, t) { + return e.__proto__ = t, e + })(e, t) +} + +var dl = hl, ml = function (e) { + function t(t, n) { + var r = e.call(this) || this; + return "boolean" == typeof n && console.log("[nunjucks] Warning: you passed a boolean as the second argument to FileSystemLoader, but it now takes an options object. See http://mozilla.github.io/nunjucks/api.html#filesystemloader"), n = n || {}, r.pathsToNames = {}, r.noCache = !!n.noCache, t ? (t = Array.isArray(t) ? t : [t], r.searchPaths = t.map(sl.normalize)) : r.searchPaths = ["."], n.watch, r + } + + return fl(t, e), t.prototype.getSource = function (e) { + for (var t = null, n = this.searchPaths, r = 0; r < n.length; r++) { + var i = sl.resolve(n[r]), s = sl.resolve(n[r], e); + if (0 === s.indexOf(i) && Zu.existsSync(s)) { + t = s; + break + } + } + if (!t) return null; + this.pathsToNames[t] = e; + var a = {src: Zu.readFileSync(t, "utf-8"), path: t, noCache: this.noCache}; + return this.emit("load", e, a), a + }, t + }(ul), _l = { + FileSystemLoader: ml, PrecompiledLoader: dl, NodeResolveLoader: function (e) { + function t(t) { + var n; + return t = t || {}, (n = e.call(this) || this).pathsToNames = {}, n.noCache = !!t.noCache, t.watch, n + } + + return fl(t, e), t.prototype.getSource = function (e) { + if (/^\.?\.?(\/|\\)/.test(e)) return null; + if (/^[A-Z]:/.test(e)) return null; + try { + t = vr.resolve(e) + } catch (e) { + return null + } + this.pathsToNames[t] = e; + var t = {src: Zu.readFileSync(t, "utf-8"), path: t, noCache: this.noCache}; + return this.emit("load", e, t), t + }, t + }(ul) + }, El = Sr(function (e, t) { + var n = Yu.SafeString; + t.callable = function (e) { + return "function" == typeof e + }, t.defined = function (e) { + return void 0 !== e + }, t.divisibleby = function (e, t) { + return e % t == 0 + }, t.escaped = function (e) { + return e instanceof n + }, t.equalto = function (e, t) { + return e === t + }, t.eq = t.equalto, t.sameas = t.equalto, t.even = function (e) { + return e % 2 == 0 + }, t.falsy = function (e) { + return !e + }, t.ge = function (e, t) { + return t <= e + }, t.greaterthan = function (e, t) { + return t < e + }, t.gt = t.greaterthan, t.le = function (e, t) { + return e <= t + }, t.lessthan = function (e, t) { + return e < t + }, t.lt = t.lessthan, t.lower = function (e) { + return e.toLowerCase() === e + }, t.ne = function (e, t) { + return e !== t + }, t.null = function (e) { + return null === e + }, t.number = function (e) { + return "number" == typeof e + }, t.odd = function (e) { + return e % 2 == 1 + }, t.string = function (e) { + return "string" == typeof e + }, t.truthy = function (e) { + return !!e + }, t.undefined = function (e) { + return void 0 === e + }, t.upper = function (e) { + return e.toUpperCase() === e + }, t.iterable = function (e) { + return "undefined" != typeof Symbol ? !!e[Symbol.iterator] : Array.isArray(e) || "string" == typeof e + }, t.mapping = function (e) { + var t = null != e && "object" == typeof e && !Array.isArray(e); + return Set ? t && !(e instanceof Set) : t + } + }), + Tl = (El.callable, El.defined, El.divisibleby, El.escaped, El.equalto, El.eq, El.sameas, El.even, El.falsy, El.ge, El.greaterthan, El.gt, El.le, El.lessthan, El.lt, El.lower, El.ne, El.number, El.odd, El.string, El.truthy, El.undefined, El.upper, El.iterable, El.mapping, function () { + return { + range: function (e, t, n) { + var r = []; + if (0 < (n = void 0 === t ? (t = e, e = 0, 1) : n || 1)) for (var i = e; i < t; i += n) r.push(i); else for (var s = e; t < s; s += n) r.push(s); + return r + }, cycler: function () { + return e = Array.prototype.slice.call(arguments), t = -1, { + current: null, reset: function () { + t = -1, this.current = null + }, next: function () { + return ++t >= e.length && (t = 0), this.current = e[t], this.current + } + }; + var e, t + }, joiner: function (e) { + e = e || ","; + var t = !0; + return function () { + var n = t ? "" : e; + return t = !1, n + } + } + } + }); + +function Al(e, t) { + e.prototype = Object.create(t.prototype), gl(e.prototype.constructor = e, t) +} + +function gl(e, t) { + return (gl = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (e, t) { + return e.__proto__ = t, e + })(e, t) +} + +var vl = _l.FileSystemLoader, yl = _l.WebLoader, Sl = _l.PrecompiledLoader, Cl = Ec.Obj, Nl = Ec.EmitterObj, + bl = Yu.handleError, Il = Yu.Frame; + +function Ol(e, t, n) { + Ro(function () { + e(t, n) + }) +} + +var kl = { + type: "code", obj: { + root: function (e, t, n, r, i) { + try { + i(null, "") + } catch (e) { + i(bl(e, null, null)) + } + } + } +}, Ll = function (e) { + function t() { + return e.apply(this, arguments) || this + } + + Al(t, e); + var n = t.prototype; + return n.init = function (e, t) { + var n = this; + t = this.opts = t || {}, this.opts.dev = !!t.dev, this.opts.autoescape = null == t.autoescape || t.autoescape, this.opts.throwOnUndefined = !!t.throwOnUndefined, this.opts.trimBlocks = !!t.trimBlocks, this.opts.lstripBlocks = !!t.lstripBlocks, this.loaders = [], e ? this.loaders = Ua.isArray(e) ? e : [e] : vl ? this.loaders = [new vl("views")] : yl && (this.loaders = [new yl("/views")]), "undefined" != typeof window && window.nunjucksPrecompiled && this.loaders.unshift(new Sl(window.nunjucksPrecompiled)), this._initLoaders(), this.globals = Tl(), this.filters = {}, this.tests = {}, this.asyncFilters = [], this.extensions = {}, this.extensionsList = [], Ua._entries(Xu).forEach(function (e) { + var t = e[0], e = e[1]; + return n.addFilter(t, e) + }), Ua._entries(El).forEach(function (e) { + var t = e[0], e = e[1]; + return n.addTest(t, e) + }) + }, n._initLoaders = function () { + var e = this; + this.loaders.forEach(function (t) { + t.cache = {}, "function" == typeof t.on && (t.on("update", function (n, r) { + t.cache[n] = null, e.emit("update", n, r, t) + }), t.on("load", function (n, r) { + e.emit("load", n, r, t) + })) + }) + }, n.invalidateCache = function () { + this.loaders.forEach(function (e) { + e.cache = {} + }) + }, n.addExtension = function (e, t) { + return t.__name = e, this.extensions[e] = t, this.extensionsList.push(t), this + }, n.removeExtension = function (e) { + var t = this.getExtension(e); + t && (this.extensionsList = Ua.without(this.extensionsList, t), delete this.extensions[e]) + }, n.getExtension = function (e) { + return this.extensions[e] + }, n.hasExtension = function (e) { + return !!this.extensions[e] + }, n.addGlobal = function (e, t) { + return this.globals[e] = t, this + }, n.getGlobal = function (e) { + if (void 0 === this.globals[e]) throw new Error("global not found: " + e); + return this.globals[e] + }, n.addFilter = function (e, t, n) { + return n && this.asyncFilters.push(e), this.filters[e] = t, this + }, n.getFilter = function (e) { + if (this.filters[e]) return this.filters[e]; + throw new Error("filter not found: " + e) + }, n.addTest = function (e, t) { + return this.tests[e] = t, this + }, n.getTest = function (e) { + if (this.tests[e]) return this.tests[e]; + throw new Error("test not found: " + e) + }, n.resolveTemplate = function (e, t, n) { + return e.isRelative && t && e.isRelative(n) && e.resolve ? e.resolve(t, n) : n + }, n.getTemplate = function (e, t, n, r, i) { + var s, a = this, o = this, c = null; + if (e && e.raw && (e = e.raw), Ua.isFunction(n) && (i = n, n = null, t = t || !1), Ua.isFunction(t) && (i = t, t = !1), e instanceof Rl) c = e; else { + if ("string" != typeof e) throw new Error("template names must be a string: " + e); + for (var u = 0; u < this.loaders.length; u++) { + var l = this.loaders[u]; + if (c = l.cache[this.resolveTemplate(l, n, e)]) break + } + } + return c ? (t && c.compile(), i ? void i(null, c) : c) : (Ua.asyncIter(this.loaders, function (t, r, i, s) { + function a(e, n) { + e ? s(e) : n ? (n.loader = t, s(null, n)) : i() + } + + e = o.resolveTemplate(t, n, e), t.async ? t.getSource(e, a) : a(null, t.getSource(e)) + }, function (n, o) { + if (n = o || n || r ? n : new Error("template not found: " + e)) { + if (i) return void i(n); + throw n + } + var c; + o ? (c = new Rl(o.src, a, o.path, t), o.noCache || (o.loader.cache[e] = c)) : c = new Rl(kl, a, "", t), i ? i(null, c) : s = c + }), s) + }, n.express = function (e) { + return function (e, t) { + function n(e, t) { + if (this.name = e, this.path = e, this.defaultEngine = t.defaultEngine, this.ext = sl.extname(e), !this.ext && !this.defaultEngine) throw new Error("No default engine was specified and no extension was provided."); + this.ext || (this.name += this.ext = ("." !== this.defaultEngine[0] ? "." : "") + this.defaultEngine) + } + + return n.prototype.render = function (t, n) { + e.render(this.name, t, n) + }, t.set("view", n), t.set("nunjucksEnv", e), e + }(this, e) + }, n.render = function (e, t, n) { + Ua.isFunction(t) && (n = t, t = null); + var r = null; + return this.getTemplate(e, function (e, i) { + if (e && n) Ol(n, e); else { + if (e) throw e; + r = i.render(t, n) + } + }), r + }, n.renderString = function (e, t, n, r) { + return Ua.isFunction(n) && (r = n, n = {}), new Rl(e, this, (n = n || {}).path).render(t, r) + }, n.waterfall = function (e, t, n) { + return xo(e, t, n) + }, t +}(Nl), Dl = function (e) { + function t() { + return e.apply(this, arguments) || this + } + + Al(t, e); + var n = t.prototype; + return n.init = function (e, t, n) { + var r = this; + this.env = n || new Ll, this.ctx = Ua.extend({}, e), this.blocks = {}, this.exported = [], Ua.keys(t).forEach(function (e) { + r.addBlock(e, t[e]) + }) + }, n.lookup = function (e) { + return (e in this.env.globals && !(e in this.ctx) ? this.env.globals : this.ctx)[e] + }, n.setVariable = function (e, t) { + this.ctx[e] = t + }, n.getVariables = function () { + return this.ctx + }, n.addBlock = function (e, t) { + return this.blocks[e] = this.blocks[e] || [], this.blocks[e].push(t), this + }, n.getBlock = function (e) { + if (this.blocks[e]) return this.blocks[e][0]; + throw new Error('unknown block "' + e + '"') + }, n.getSuper = function (e, t, n, r, i, s) { + var n = Ua.indexOf(this.blocks[t] || [], n), o = this.blocks[t][n + 1]; + if (-1 === n || !o) throw new Error('no super block available for "' + t + '"'); + o(e, this, r, i, s) + }, n.addExport = function (e) { + this.exported.push(e) + }, n.getExported = function () { + var e = this, t = {}; + return this.exported.forEach(function (n) { + t[n] = e.ctx[n] + }), t + }, t +}(Cl), Rl = function (e) { + function t() { + return e.apply(this, arguments) || this + } + + Al(t, e); + var n = t.prototype; + return n.init = function (e, t, n, r) { + if (this.env = t || new Ll, Ua.isObject(e)) switch (e.type) { + case"code": + this.tmplProps = e.obj; + break; + case"string": + this.tmplStr = e.obj; + break; + default: + throw new Error("Unexpected template object type " + e.type + "; expected 'code', or 'string'") + } else { + if (!Ua.isString(e)) throw new Error("src must be a string or an object describing the source"); + this.tmplStr = e + } + if (this.path = n, r) try { + this._compile() + } catch (e) { + throw Ua._prettifyError(this.path, this.env.opts.dev, e) + } else this.compiled = !1 + }, n.render = function (e, t, n) { + var r = this, i = ("function" == typeof e ? (n = e, e = {}) : "function" == typeof t && (n = t, t = null), !t); + try { + this.compile() + } catch (e) { + var s = Ua._prettifyError(this.path, this.env.opts.dev, e); + if (n) return Ol(n, s); + throw s + } + var s = new Dl(e || {}, this.blocks, this.env), c = ((t = t ? t.push(!0) : new Il).topLevel = !0, null), u = !1; + return this.rootRenderFunc(this.env, s, t, Yu, function (e, t) { + if (!u || !n || void 0 === t) if (e && (e = Ua._prettifyError(r.path, r.env.opts.dev, e), u = !0), n) i ? Ol(n, e, t) : n(e, t); else { + if (e) throw e; + c = t + } + }), c + }, n.getExported = function (e, t, n) { + "function" == typeof e && (n = e, e = {}), "function" == typeof t && (n = t, t = null); + try { + this.compile() + } catch (e) { + if (n) return n(e); + throw e + } + (t = t ? t.push() : new Il).topLevel = !0; + var i = new Dl(e || {}, this.blocks, this.env); + this.rootRenderFunc(this.env, i, t, Yu, function (e) { + e ? n(e, null) : n(null, i.getExported()) + }) + }, n.compile = function () { + this.compiled || this._compile() + }, n._compile = function () { + var t = this.tmplProps || (t = zu.compile(this.tmplStr, this.env.asyncFilters, this.env.extensionsList, this.path, this.env.opts), new Function(t)()); + this.blocks = this._getBlocks(t), this.rootRenderFunc = t.root, this.compiled = !0 + }, n._getBlocks = function (e) { + var t = {}; + return Ua.keys(e).forEach(function (n) { + "b_" === n.slice(0, 2) && (t[n.slice(2)] = e[n]) + }), t + }, t +}(Cl), wl = {Environment: Ll, Template: Rl}; +Ua._prettifyError; +var xl, Ml = wl.Environment; + +function Pl(e, t) { + var n; + return t = t || {}, Ua.isObject(e) && (t = e, e = null), _l.FileSystemLoader ? n = new _l.FileSystemLoader(e, { + watch: t.watch, + noCache: t.noCache + }) : _l.WebLoader && (n = new _l.WebLoader(e, { + useCache: t.web && t.web.useCache, + async: t.web && t.web.async + })), xl = new Ml(n, t), t && t.express && xl.express(t.express), xl +} + +_l.FileSystemLoader, _l.NodeResolveLoader, _l.PrecompiledLoader, _l.WebLoader; +var Bl = function (e, t, n) { + return xl || Pl(), xl.renderString(e, t, n) +}; +const Fl = 1e3, Ul = 6e4, Hl = 36e5, Gl = "millisecond", jl = "second", ql = "minute", Yl = "hour", Kl = "day", + Wl = "week", Vl = "month", $l = "quarter", Ql = "year", zl = "date", Xl = "Invalid Date", + Zl = /^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/, + Jl = /\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g; +var eh = { + name: "en", + weekdays: "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"), + months: "January_February_March_April_May_June_July_August_September_October_November_December".split("_"), + ordinal: e => { + var t = ["th", "st", "nd", "rd"], n = e % 100; + return `[${e}${t[(n - 20) % 10] || t[n] || t[0]}]` + } +}; +const th = (e, t, n) => { + var r = String(e); + return !r || r.length >= t ? e : "" + Array(t + 1 - r.length).join(n) + e +}, nh = (e, t) => { + var n, r, i; + return e.date() < t.date() ? -nh(t, e) : (n = 12 * (t.year() - e.year()) + (t.month() - e.month()), i = t - (r = e.clone().add(n, Vl)) < 0, e = e.clone().add(n + (i ? -1 : 1), Vl), +(-(n + (t - r) / (i ? r - e : e - r)) || 0)) +}; +var rh = { + s: th, + z: e => { + var e = -e.utcOffset(), n = Math.abs(e), r = Math.floor(n / 60), n = n % 60; + return (e <= 0 ? "+" : "-") + th(r, 2, "0") + ":" + th(n, 2, "0") + }, + m: nh, + a: e => e < 0 ? Math.ceil(e) || 0 : Math.floor(e), + p: e => ({ + M: Vl, + y: Ql, + w: Wl, + d: Kl, + D: zl, + h: Yl, + m: ql, + s: jl, + ms: Gl, + Q: $l + })[e] || String(e || "").toLowerCase().replace(/s$/, ""), + u: e => void 0 === e +}; +let ih = "en"; +const sh = {}, ah = (sh[ih] = eh, e => e instanceof lh), oh = (e, t, n) => { + let r; + if (!e) return ih; + if ("string" == typeof e) { + const n = e.toLowerCase(); + if (sh[n] && (r = n), t && (sh[n] = t, r = n), t = e.split("-"), !r && 1 < t.length) return oh(t[0]) + } else { + const t = e.name; + sh[t] = e, r = t + } + return !n && r && (ih = r), r || !n && ih +}, ch = function (e, t) { + var n; + return ah(e) ? e.clone() : ((n = "object" == typeof t ? t : {}).date = e, n.args = arguments, new lh(n)) +}, uh = rh; +uh.l = oh, uh.i = ah, uh.w = (e, t) => ch(e, {locale: t.$L, utc: t.$u, x: t.$x, $offset: t.$offset}); + +class lh { + constructor(e) { + this.$L = oh(e.locale, null, !0), this.parse(e) + } + + parse(e) { + this.$d = (e => { + const {date: t, utc: n} = e; + if (null === t) return new Date(NaN); + if (uh.u(t)) return new Date; + if (!(t instanceof Date || "string" != typeof t || /Z$/i.test(t))) { + const e = t.match(Zl); + if (e) { + const t = e[2] - 1 || 0, r = (e[7] || "0").substring(0, 3); + return n ? new Date(Date.UTC(e[1], t, e[3] || 1, e[4] || 0, e[5] || 0, e[6] || 0, r)) : new Date(e[1], t, e[3] || 1, e[4] || 0, e[5] || 0, e[6] || 0, r) + } + } + return new Date(t) + })(e), this.$x = e.x || {}, this.init() + } + + init() { + var e = this.$d; + this.$y = e.getFullYear(), this.$M = e.getMonth(), this.$D = e.getDate(), this.$W = e.getDay(), this.$H = e.getHours(), this.$m = e.getMinutes(), this.$s = e.getSeconds(), this.$ms = e.getMilliseconds() + } + + $utils() { + return uh + } + + isValid() { + return !(this.$d.toString() === Xl) + } + + isSame(e, t) { + return e = ch(e), this.startOf(t) <= e && e <= this.endOf(t) + } + + isAfter(e, t) { + return ch(e) < this.startOf(t) + } + + isBefore(e, t) { + return this.endOf(t) < ch(e) + } + + $g(e, t, n) { + return uh.u(e) ? this[t] : this.set(n, e) + } + + unix() { + return Math.floor(this.valueOf() / 1e3) + } + + valueOf() { + return this.$d.getTime() + } + + startOf(e, t) { + const n = !!uh.u(t) || t, r = uh.p(e), + i = (e, t) => (t = uh.w(this.$u ? Date.UTC(this.$y, t, e) : new Date(this.$y, t, e), this), n ? t : t.endOf(Kl)), + s = (e, t) => uh.w(this.toDate()[e].apply(this.toDate("s"), (n ? [0, 0, 0, 0] : [23, 59, 59, 999]).slice(t)), this), { + $W: a, + $M: o, + $D: c + } = this, u = "set" + (this.$u ? "UTC" : ""); + switch (r) { + case Ql: + return n ? i(1, 0) : i(31, 11); + case Vl: + return n ? i(1, o) : i(0, o + 1); + case Wl: { + const e = this.$locale().weekStart || 0, t = (a < e ? a + 7 : a) - e; + return i(n ? c - t : c + (6 - t), o) + } + case Kl: + case zl: + return s(u + "Hours", 0); + case Yl: + return s(u + "Minutes", 1); + case ql: + return s(u + "Seconds", 2); + case jl: + return s(u + "Milliseconds", 3); + default: + return this.clone() + } + } + + endOf(e) { + return this.startOf(e, !1) + } + + $set(e, t) { + var e = uh.p(e), r = "set" + (this.$u ? "UTC" : ""), r = { + [Kl]: r + "Date", + [zl]: r + "Date", + [Vl]: r + "Month", + [Ql]: r + "FullYear", + [Yl]: r + "Hours", + [ql]: r + "Minutes", + [jl]: r + "Seconds", + [Gl]: r + "Milliseconds" + }[e], t = e === Kl ? this.$D + (t - this.$W) : t; + if (e === Vl || e === Ql) { + const e = this.clone().set(zl, 1); + e.$d[r](t), e.init(), this.$d = e.set(zl, Math.min(this.$D, e.daysInMonth())).$d + } else r && this.$d[r](t); + return this.init(), this + } + + set(e, t) { + return this.clone().$set(e, t) + } + + get(e) { + return this[uh.p(e)]() + } + + add(e, t) { + e = Number(e); + var r = t => { + var n = ch(this); + return uh.w(n.date(n.date() + Math.round(t * e)), this) + }; + return (t = uh.p(t)) === Vl ? this.set(Vl, this.$M + e) : t === Ql ? this.set(Ql, this.$y + e) : t === Kl ? r(1) : t === Wl ? r(7) : (r = { + [ql]: Ul, + [Yl]: Hl, + [jl]: Fl + }[t] || 1, t = this.$d.getTime() + e * r, uh.w(t, this)) + } + + subtract(e, t) { + return this.add(-1 * e, t) + } + + format(e) { + var t = this.$locale(); + if (!this.isValid()) return t.invalidDate || Xl; + const n = e || "YYYY-MM-DDTHH:mm:ssZ", r = uh.z(this), {$H: i, $m: s, $M: a} = this, { + weekdays: o, + months: c, + meridiem: u + } = t, l = (e, t, r, i) => e && (e[t] || e(this, n)) || r[t].slice(0, i), h = e => uh.s(i % 12 || 12, e, "0"), + f = u || ((e, t, n) => (e = e < 12 ? "AM" : "PM", n ? e.toLowerCase() : e)), p = { + YY: String(this.$y).slice(-2), + YYYY: this.$y, + M: a + 1, + MM: uh.s(a + 1, 2, "0"), + MMM: l(t.monthsShort, a, c, 3), + MMMM: l(c, a), + D: this.$D, + DD: uh.s(this.$D, 2, "0"), + d: String(this.$W), + dd: l(t.weekdaysMin, this.$W, o, 2), + ddd: l(t.weekdaysShort, this.$W, o, 3), + dddd: o[this.$W], + H: String(i), + HH: uh.s(i, 2, "0"), + h: h(1), + hh: h(2), + a: f(i, s, !0), + A: f(i, s, !1), + m: String(s), + mm: uh.s(s, 2, "0"), + s: String(this.$s), + ss: uh.s(this.$s, 2, "0"), + SSS: uh.s(this.$ms, 3, "0"), + Z: r + }; + return n.replace(Jl, (e, t) => t || p[e] || r.replace(":", "")) + } + + utcOffset() { + return 15 * -Math.round(this.$d.getTimezoneOffset() / 15) + } + + diff(e, t, n) { + var t = uh.p(t), s = ((e = ch(e)).utcOffset() - this.utcOffset()) * Ul, a = this - e, e = uh.m(this, e), e = { + [Ql]: e / 12, + [Vl]: e, + [$l]: e / 3, + [Wl]: (a - s) / 6048e5, + [Kl]: (a - s) / 864e5, + [Yl]: a / Hl, + [ql]: a / Ul, + [jl]: a / Fl + }[t] || a; + return n ? e : uh.a(e) + } + + daysInMonth() { + return this.endOf(Vl).$D + } + + $locale() { + return sh[this.$L] + } + + locale(e, t) { + var n; + return e ? (n = this.clone(), (e = oh(e, t, !0)) && (n.$L = e), n) : this.$L + } + + clone() { + return uh.w(this.$d, this) + } + + toDate() { + return new Date(this.valueOf()) + } + + toJSON() { + return this.isValid() ? this.toISOString() : null + } + + toISOString() { + return this.$d.toISOString() + } + + toString() { + return this.$d.toUTCString() + } +} + +const hh = lh.prototype; +ch.prototype = hh, [["$ms", Gl], ["$s", jl], ["$m", ql], ["$H", Yl], ["$W", Kl], ["$M", Vl], ["$y", Ql], ["$D", zl]].forEach(e => { + hh[e[1]] = function (t) { + return this.$g(t, e[0], e[1]) + } +}), ch.extend = (e, t) => (e.$i || (e(t, lh, ch), e.$i = !0), ch), ch.locale = oh, ch.isDayjs = ah, ch.unix = e => ch(1e3 * e), ch.en = sh[ih], ch.Ls = sh, ch.p = {}; +var fh = Sr(function (e) { + function r(e) { + return e && (e = e.toString().replace(n.pluses, "%20"), e = decodeURIComponent(e)), e + } + + function i(e) { + var t, i, s, a, o, c, u, l = []; + if (null != e && "" !== e) for (u = (i = (e = (t = 0) === e.indexOf("?") ? e.substring(1) : e).toString().split(n.query_separator)).length; t < u; t++) 0 !== (a = (s = i[t]).indexOf("=")) && (o = r(s.substring(0, a)), c = r(s.substring(a + 1)), l.push(-1 === a ? [s, null] : [o, c])); + return l + } + + function s(e) { + this.uriParts = function (e) { + var t = n.uri_parser.exec(e || ""), r = {}; + return ["source", "protocol", "authority", "userInfo", "user", "password", "host", "port", "isColonUri", "relative", "path", "directory", "file", "query", "anchor"].forEach(function (e, n) { + r[e] = t[n] || "" + }), r + }(e), this.queryPairs = i(this.uriParts.query), this.hasAuthorityPrefixUserPref = null + } + + var n = { + starts_with_slashes: /^\/+/, + ends_with_slashes: /\/+$/, + pluses: /\+/g, + query_separator: /[&;]/, + uri_parser: /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@\/]*)(?::([^:@\/]*))?)?@)?(\[[0-9a-fA-F:.]+\]|[^:\/?#]*)(?::(\d+|(?=:)))?(:)?)((((?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/ + }; + Array.prototype.forEach || (Array.prototype.forEach = function (e, t) { + var n, r; + if (null == this) throw new TypeError(" this is null or not defined"); + var a, i = Object(this), s = i.length >>> 0; + if ("function" != typeof e) throw new TypeError(e + " is not a function"); + for (1 < arguments.length && (n = t), r = 0; r < s;) r in i && (a = i[r], e.call(n, a, r, i)), r++ + }), ["protocol", "userInfo", "host", "port", "path", "anchor"].forEach(function (e) { + s.prototype[e] = function (t) { + return void 0 !== t && (this.uriParts[e] = t), this.uriParts[e] + } + }), s.prototype.hasAuthorityPrefix = function (e) { + return void 0 !== e && (this.hasAuthorityPrefixUserPref = e), null === this.hasAuthorityPrefixUserPref ? -1 !== this.uriParts.source.indexOf("//") : this.hasAuthorityPrefixUserPref + }, s.prototype.isColonUri = function (e) { + if (void 0 === e) return !!this.uriParts.isColonUri; + this.uriParts.isColonUri = !!e + }, s.prototype.query = function (e, t) { + var n, r, s, a = "", o = void 0 === t || t; + for (void 0 !== e && (this.queryPairs = i(e)), n = 0, s = this.queryPairs.length; n < s; n++) r = this.queryPairs[n], 0 < a.length && (a += "&"), null === r[1] ? a += r[0] : (a = a + r[0] + "=", void 0 !== r[1] && (a += o ? encodeURIComponent(r[1]) : r[1])); + return 0 < a.length ? "?" + a : a + }, s.prototype.getQueryParamValue = function (e) { + for (var t, n = 0, r = this.queryPairs.length; n < r; n++) if (e === (t = this.queryPairs[n])[0]) return t[1] + }, s.prototype.getQueryParamValues = function (e) { + for (var n, i = [], t = 0, r = this.queryPairs.length; t < r; t++) e === (n = this.queryPairs[t])[0] && i.push(n[1]); + return i + }, s.prototype.deleteQueryParam = function (e, t) { + for (var i, s, a, c = [], n = 0, o = this.queryPairs.length; n < o; n++) s = r((i = this.queryPairs[n])[0]) === r(e), a = i[1] === t, (1 !== arguments.length || s) && (2 !== arguments.length || s && a) || c.push(i); + return this.queryPairs = c, this + }, s.prototype.addQueryParam = function (e, t, n) { + return 3 === arguments.length && -1 !== n ? (n = Math.min(n, this.queryPairs.length), this.queryPairs.splice(n, 0, [e, t])) : 0 < arguments.length && this.queryPairs.push([e, t]), this + }, s.prototype.hasQueryParam = function (e) { + for (var n = this.queryPairs.length, t = 0; t < n; t++) if (this.queryPairs[t][0] == e) return !0; + return !1 + }, s.prototype.replaceQueryParam = function (e, t, n) { + var i, s, a = -1, o = this.queryPairs.length; + if (3 === arguments.length) { + for (i = 0; i < o; i++) if (r((s = this.queryPairs[i])[0]) === r(e) && decodeURIComponent(s[1]) === r(n)) { + a = i; + break + } + 0 <= a && this.deleteQueryParam(e, r(n)).addQueryParam(e, t, a) + } else { + for (i = 0; i < o; i++) if (r((s = this.queryPairs[i])[0]) === r(e)) { + a = i; + break + } + this.deleteQueryParam(e), this.addQueryParam(e, t, a) + } + return this + }, ["protocol", "hasAuthorityPrefix", "isColonUri", "userInfo", "host", "port", "path", "query", "anchor"].forEach(function (e) { + var t = "set" + e.charAt(0).toUpperCase() + e.slice(1); + s.prototype[t] = function (t) { + return this[e](t), this + } + }), s.prototype.scheme = function () { + var e = ""; + return this.protocol() ? (e += this.protocol(), this.protocol().indexOf(":") !== this.protocol().length - 1 && (e += ":"), e += "//") : this.hasAuthorityPrefix() && this.host() && (e += "//"), e + }, s.prototype.origin = function () { + var e = this.scheme(); + return this.userInfo() && this.host() && (e += this.userInfo(), this.userInfo().indexOf("@") !== this.userInfo().length - 1) && (e += "@"), this.host() && (e += this.host(), this.port() || this.path() && this.path().substr(0, 1).match(/[0-9]/)) && (e += ":" + this.port()), e + }, s.prototype.addTrailingSlash = function () { + var e = this.path() || ""; + return "/" !== e.substr(-1) && this.path(e + "/"), this + }, s.prototype.toString = function (e) { + var t, r = this.origin(); + return this.isColonUri() ? this.path() && (r += ":" + this.path()) : this.path() ? (t = this.path(), n.ends_with_slashes.test(r) || n.starts_with_slashes.test(t) ? (r && r.replace(n.ends_with_slashes, "/"), t = t.replace(n.starts_with_slashes, "/")) : r += "/", r += t) : this.host() && (this.query(void 0, e).toString() || this.anchor()) && (r += "/"), this.query(void 0, e).toString() && (r += this.query(void 0, e).toString()), this.anchor() && (0 !== this.anchor().indexOf("#") && (r += "#"), r += this.anchor()), r + }, s.prototype.clone = function () { + return new s(this.toString()) + }, e.exports = s +}), ph = Sr(function (e, t) { + !function () { + var n, r = "Expected a function", i = "__lodash_hash_undefined__", s = "__lodash_placeholder__", o = 32, + u = 128, h = 1 / 0, f = 9007199254740991, p = NaN, d = 4294967295, + m = [["ary", u], ["bind", 1], ["bindKey", 2], ["curry", 8], ["curryRight", 16], ["flip", 512], ["partial", o], ["partialRight", 64], ["rearg", 256]], + _ = "[object Arguments]", E = "[object Array]", T = "[object Boolean]", A = "[object Date]", + g = "[object Error]", v = "[object Function]", y = "[object GeneratorFunction]", S = "[object Map]", + C = "[object Number]", N = "[object Object]", b = "[object Promise]", I = "[object RegExp]", + O = "[object Set]", k = "[object String]", L = "[object Symbol]", D = "[object WeakMap]", + R = "[object ArrayBuffer]", w = "[object DataView]", x = "[object Float32Array]", + M = "[object Float64Array]", P = "[object Int8Array]", B = "[object Int16Array]", F = "[object Int32Array]", + U = "[object Uint8Array]", H = "[object Uint8ClampedArray]", G = "[object Uint16Array]", + j = "[object Uint32Array]", q = /\b__p \+= '';/g, Y = /\b(__p \+=) '' \+/g, + K = /(__e\(.*?\)|\b__t\)) \+\n'';/g, W = /&(?:amp|lt|gt|quot|#39);/g, V = /[&<>"']/g, $ = RegExp(W.source), + Q = RegExp(V.source), z = /<%-([\s\S]+?)%>/g, X = /<%([\s\S]+?)%>/g, Z = /<%=([\s\S]+?)%>/g, + J = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, ee = /^\w*$/, + te = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g, + ne = /[\\^$.*+?()[\]{}|]/g, re = RegExp(ne.source), ie = /^\s+/, se = /\s/, + ae = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, oe = /\{\n\/\* \[wrapped with (.+)\] \*/, ce = /,? & /, + ue = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g, le = /[()=,{}\[\]\/\s]/, he = /\\(\\)?/g, + fe = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g, pe = /\w*$/, de = /^[-+]0x[0-9a-f]+$/i, me = /^0b[01]+$/i, + _e = /^\[object .+?Constructor\]$/, Ee = /^0o[0-7]+$/i, Te = /^(?:0|[1-9]\d*)$/, + Ae = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g, ge = /($^)/, ve = /['\n\r\u2028\u2029\\]/g, + ye = "\\ud800-\\udfff", Se = "\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff", Ce = "\\u2700-\\u27bf", + be = "A-Z\\xc0-\\xd6\\xd8-\\xde", Ie = "\\ufe0e\\ufe0f", Le = "[" + ye + "]", + De = "[" + (Oe = "\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000") + "]", + Re = "[" + Se + "]", xe = "[" + Ce + "]", Me = "[" + (Ne = "a-z\\xdf-\\xf6\\xf8-\\xff") + "]", + He = "[\\ud800-\\udbff][\\udc00-\\udfff]", je = "\\u200d", + qe = "(?:" + Me + "|" + (Oe = "[^" + ye + Oe + "\\d+" + Ce + Ne + be + "]") + ")", + Oe = "(?:" + (be = "[" + be + "]") + "|" + Oe + ")", Ke = "(?:['’](?:d|ll|m|re|s|t|ve))?", + We = "(?:['’](?:D|LL|M|RE|S|T|VE))?", + $e = ($e = "[" + Ie + "]?") + (Ve = "(?:" + Re + "|" + (Ce = "\\ud83c[\\udffb-\\udfff]") + ")?") + "(?:" + je + "(?:" + [Ne = "[^" + ye + "]", Ue = "(?:\\ud83c[\\udde6-\\uddff]){2}", He].join("|") + ")" + $e + Ve + ")*", + Ve = "(?:" + [xe, Ue, He].join("|") + ")" + $e, + xe = "(?:" + [Ne + Re + "?", Re, Ue, He, Le].join("|") + ")", Ze = RegExp("['’]", "g"), + Je = RegExp(Re, "g"), et = RegExp(Ce + "(?=" + Ce + ")|" + xe + $e, "g"), + tt = RegExp([be + "?" + Me + "+" + Ke + "(?=" + [De, be, "$"].join("|") + ")", Oe + "+" + We + "(?=" + [De, be + qe, "$"].join("|") + ")", be + "?" + qe + "+" + Ke, be + "+" + We, "\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])", "\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])", "\\d+", Ve].join("|"), "g"), + nt = RegExp("[" + je + ye + Se + Ie + "]"), + rt = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/, + it = ["Array", "Buffer", "DataView", "Date", "Error", "Float32Array", "Float64Array", "Function", "Int8Array", "Int16Array", "Int32Array", "Map", "Math", "Object", "Promise", "RegExp", "Set", "String", "Symbol", "TypeError", "Uint8Array", "Uint8ClampedArray", "Uint16Array", "Uint32Array", "WeakMap", "_", "clearTimeout", "isFinite", "parseInt", "setTimeout"], + st = -1, at = {}, + ot = (at[x] = at[M] = at[P] = at[B] = at[F] = at[U] = at[H] = at[G] = at[j] = !0, at[_] = at[E] = at[R] = at[T] = at[w] = at[A] = at[g] = at[v] = at[S] = at[C] = at[N] = at[I] = at[O] = at[k] = at[D] = !1, {}), + ct = (ot[_] = ot[E] = ot[R] = ot[w] = ot[T] = ot[A] = ot[x] = ot[M] = ot[P] = ot[B] = ot[F] = ot[S] = ot[C] = ot[N] = ot[I] = ot[O] = ot[k] = ot[L] = ot[U] = ot[H] = ot[G] = ot[j] = !0, ot[g] = ot[v] = ot[D] = !1, { + "\\": "\\", + "'": "'", + "\n": "n", + "\r": "r", + "\u2028": "u2028", + "\u2029": "u2029" + }), ut = parseFloat, lt = parseInt, Ne = "object" == typeof gr && gr && gr.Object === Object && gr, + Ue = "object" == typeof self && self && self.Object === Object && self, + pt = Ne || Ue || Function("return this")(), mt = (He = t && !t.nodeType && t) && e && !e.nodeType && e, + _t = mt && mt.exports === He, Et = _t && Ne.process, At = (Le = function () { + try { + return mt && mt.require && mt.require("util").types || Et && Et.binding && Et.binding("util") + } catch (e) { + } + }()) && Le.isArrayBuffer, gt = Le && Le.isDate, vt = Le && Le.isMap, yt = Le && Le.isRegExp, + St = Le && Le.isSet, Ct = Le && Le.isTypedArray; + + function Nt(e, t, n) { + switch (n.length) { + case 0: + return e.call(t); + case 1: + return e.call(t, n[0]); + case 2: + return e.call(t, n[0], n[1]); + case 3: + return e.call(t, n[0], n[1], n[2]) + } + return e.apply(t, n) + } + + function bt(e, t, n, r) { + for (var i = -1, s = null == e ? 0 : e.length; ++i < s;) { + var a = e[i]; + t(r, a, n(a), e) + } + return r + } + + function It(e, t) { + for (var n = -1, r = null == e ? 0 : e.length; ++n < r && !1 !== t(e[n], n, e);) ; + return e + } + + function kt(e, t) { + for (var n = -1, r = null == e ? 0 : e.length; ++n < r;) if (!t(e[n], n, e)) return !1; + return !0 + } + + function Lt(e, t) { + for (var n = -1, r = null == e ? 0 : e.length, i = 0, s = []; ++n < r;) { + var a = e[n]; + t(a, n, e) && (s[i++] = a) + } + return s + } + + function Dt(e, t) { + return !(null == e || !e.length) && -1 < Gt(e, t, 0) + } + + function Rt(e, t, n) { + for (var r = -1, i = null == e ? 0 : e.length; ++r < i;) if (n(t, e[r])) return !0; + return !1 + } + + function wt(e, t) { + for (var n = -1, r = null == e ? 0 : e.length, i = Array(r); ++n < r;) i[n] = t(e[n], n, e); + return i + } + + function xt(e, t) { + for (var n = -1, r = t.length, i = e.length; ++n < r;) e[i + n] = t[n]; + return e + } + + function Mt(e, t, n, r) { + var i = -1, s = null == e ? 0 : e.length; + for (r && s && (n = e[++i]); ++i < s;) n = t(n, e[i], i, e); + return n + } + + function Pt(e, t, n, r) { + var i = null == e ? 0 : e.length; + for (r && i && (n = e[--i]); i--;) n = t(n, e[i], i, e); + return n + } + + function Bt(e, t) { + for (var n = -1, r = null == e ? 0 : e.length; ++n < r;) if (t(e[n], n, e)) return !0; + return !1 + } + + var Ft = Kt("length"); + + function Ut(e, t, n) { + var r; + return n(e, function (e, n, i) { + if (t(e, n, i)) return r = n, !1 + }), r + } + + function Ht(e, t, n, r) { + for (var i = e.length, s = n + (r ? 1 : -1); r ? s-- : ++s < i;) if (t(e[s], s, e)) return s; + return -1 + } + + function Gt(e, t, n) { + return t == t ? function (e, t, n) { + for (var r = n - 1, i = e.length; ++r < i;) if (e[r] === t) return r; + return -1 + }(e, t, n) : Ht(e, qt, n) + } + + function jt(e, t, n, r) { + for (var i = n - 1, s = e.length; ++i < s;) if (r(e[i], t)) return i; + return -1 + } + + function qt(e) { + return e != e + } + + function Yt(e, t) { + var n = null == e ? 0 : e.length; + return n ? $t(e, t) / n : p + } + + function Kt(e) { + return function (t) { + return null == t ? n : t[e] + } + } + + function Wt(e) { + return function (t) { + return null == e ? n : e[t] + } + } + + function Vt(e, t, n, r, i) { + return i(e, function (e, i, s) { + n = r ? (r = !1, e) : t(n, e, i, s) + }), n + } + + function $t(e, t) { + for (var r, i = -1, s = e.length; ++i < s;) { + var a = t(e[i]); + a !== n && (r = r === n ? a : r + a) + } + return r + } + + function Qt(e, t) { + for (var n = -1, r = Array(e); ++n < e;) r[n] = t(n); + return r + } + + function zt(e) { + return e && e.slice(0, dn(e) + 1).replace(ie, "") + } + + function Xt(e) { + return function (t) { + return e(t) + } + } + + function Zt(e, t) { + return wt(t, function (t) { + return e[t] + }) + } + + function Jt(e, t) { + return e.has(t) + } + + function en(e, t) { + for (var n = -1, r = e.length; ++n < r && -1 < Gt(t, e[n], 0);) ; + return n + } + + function tn(e, t) { + for (var n = e.length; n-- && -1 < Gt(t, e[n], 0);) ; + return n + } + + var nn = Wt({ + "À": "A", + "Á": "A", + "Â": "A", + "Ã": "A", + "Ä": "A", + "Å": "A", + "à": "a", + "á": "a", + "â": "a", + "ã": "a", + "ä": "a", + "å": "a", + "Ç": "C", + "ç": "c", + "Ð": "D", + "ð": "d", + "È": "E", + "É": "E", + "Ê": "E", + "Ë": "E", + "è": "e", + "é": "e", + "ê": "e", + "ë": "e", + "Ì": "I", + "Í": "I", + "Î": "I", + "Ï": "I", + "ì": "i", + "í": "i", + "î": "i", + "ï": "i", + "Ñ": "N", + "ñ": "n", + "Ò": "O", + "Ó": "O", + "Ô": "O", + "Õ": "O", + "Ö": "O", + "Ø": "O", + "ò": "o", + "ó": "o", + "ô": "o", + "õ": "o", + "ö": "o", + "ø": "o", + "Ù": "U", + "Ú": "U", + "Û": "U", + "Ü": "U", + "ù": "u", + "ú": "u", + "û": "u", + "ü": "u", + "Ý": "Y", + "ý": "y", + "ÿ": "y", + "Æ": "Ae", + "æ": "ae", + "Þ": "Th", + "þ": "th", + "ß": "ss", + "Ā": "A", + "Ă": "A", + "Ą": "A", + "ā": "a", + "ă": "a", + "ą": "a", + "Ć": "C", + "Ĉ": "C", + "Ċ": "C", + "Č": "C", + "ć": "c", + "ĉ": "c", + "ċ": "c", + "č": "c", + "Ď": "D", + "Đ": "D", + "ď": "d", + "đ": "d", + "Ē": "E", + "Ĕ": "E", + "Ė": "E", + "Ę": "E", + "Ě": "E", + "ē": "e", + "ĕ": "e", + "ė": "e", + "ę": "e", + "ě": "e", + "Ĝ": "G", + "Ğ": "G", + "Ġ": "G", + "Ģ": "G", + "ĝ": "g", + "ğ": "g", + "ġ": "g", + "ģ": "g", + "Ĥ": "H", + "Ħ": "H", + "ĥ": "h", + "ħ": "h", + "Ĩ": "I", + "Ī": "I", + "Ĭ": "I", + "Į": "I", + "İ": "I", + "ĩ": "i", + "ī": "i", + "ĭ": "i", + "į": "i", + "ı": "i", + "Ĵ": "J", + "ĵ": "j", + "Ķ": "K", + "ķ": "k", + "ĸ": "k", + "Ĺ": "L", + "Ļ": "L", + "Ľ": "L", + "Ŀ": "L", + "Ł": "L", + "ĺ": "l", + "ļ": "l", + "ľ": "l", + "ŀ": "l", + "ł": "l", + "Ń": "N", + "Ņ": "N", + "Ň": "N", + "Ŋ": "N", + "ń": "n", + "ņ": "n", + "ň": "n", + "ŋ": "n", + "Ō": "O", + "Ŏ": "O", + "Ő": "O", + "ō": "o", + "ŏ": "o", + "ő": "o", + "Ŕ": "R", + "Ŗ": "R", + "Ř": "R", + "ŕ": "r", + "ŗ": "r", + "ř": "r", + "Ś": "S", + "Ŝ": "S", + "Ş": "S", + "Š": "S", + "ś": "s", + "ŝ": "s", + "ş": "s", + "š": "s", + "Ţ": "T", + "Ť": "T", + "Ŧ": "T", + "ţ": "t", + "ť": "t", + "ŧ": "t", + "Ũ": "U", + "Ū": "U", + "Ŭ": "U", + "Ů": "U", + "Ű": "U", + "Ų": "U", + "ũ": "u", + "ū": "u", + "ŭ": "u", + "ů": "u", + "ű": "u", + "ų": "u", + "Ŵ": "W", + "ŵ": "w", + "Ŷ": "Y", + "ŷ": "y", + "Ÿ": "Y", + "Ź": "Z", + "Ż": "Z", + "Ž": "Z", + "ź": "z", + "ż": "z", + "ž": "z", + "IJ": "IJ", + "ij": "ij", + "Œ": "Oe", + "œ": "oe", + "ʼn": "'n", + "ſ": "s" + }), rn = Wt({"&": "&", "<": "<", ">": ">", '"': """, "'": "'"}); + + function sn(e) { + return "\\" + ct[e] + } + + function an(e) { + return nt.test(e) + } + + function on(e) { + var t = -1, n = Array(e.size); + return e.forEach(function (e, r) { + n[++t] = [r, e] + }), n + } + + function cn(e, t) { + return function (n) { + return e(t(n)) + } + } + + function un(e, t) { + for (var n = -1, r = e.length, i = 0, a = []; ++n < r;) { + var o = e[n]; + o !== t && o !== s || (e[n] = s, a[i++] = n) + } + return a + } + + function ln(e) { + var t = -1, n = Array(e.size); + return e.forEach(function (e) { + n[++t] = e + }), n + } + + function fn(e) { + return (an(e) ? function (e) { + for (var t = et.lastIndex = 0; et.test(e);) ++t; + return t + } : Ft)(e) + } + + function pn(e) { + return an(e) ? function (e) { + return e.match(et) || [] + }(e) : e.split("") + } + + function dn(e) { + for (var t = e.length; t-- && se.test(e.charAt(t));) ; + return t + } + + var mn = Wt({"&": "&", "<": "<", ">": ">", """: '"', "'": "'"}), _n = function e(t) { + var ye = (t = null == t ? pt : _n.defaults(pt.Object(), t, _n.pick(pt, it))).Array, Se = t.Date, + Ce = t.Error, Ne = t.Function, be = t.Math, Ie = t.Object, Oe = t.RegExp, ke = t.String, + Le = t.TypeError, De = ye.prototype, Re = Ne.prototype, we = Ie.prototype, xe = t["__core-js_shared__"], + Me = Re.toString, Pe = we.hasOwnProperty, Be = 0, + Fe = (Re = /[^.]+$/.exec(xe && xe.keys && xe.keys.IE_PROTO || "")) ? "Symbol(src)_1." + Re : "", + Ue = we.toString, He = Me.call(Ie), Ge = pt._, + je = Oe("^" + Me.call(Pe).replace(ne, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"), + Re = _t ? t.Buffer : n, Ye = t.Symbol, Ke = t.Uint8Array, We = Re ? Re.allocUnsafe : n, + Ve = cn(Ie.getPrototypeOf, Ie), $e = Ie.create, Qe = we.propertyIsEnumerable, ze = De.splice, + Xe = Ye ? Ye.isConcatSpreadable : n, et = Ye ? Ye.iterator : n, nt = Ye ? Ye.toStringTag : n, + ct = function () { + try { + var e = fs(Ie, "defineProperty"); + return e({}, "", {}), e + } catch (e) { + } + }(), ht = t.clearTimeout !== pt.clearTimeout && t.clearTimeout, + ft = Se && Se.now !== pt.Date.now && Se.now, dt = t.setTimeout !== pt.setTimeout && t.setTimeout, + mt = be.ceil, Et = be.floor, Tt = Ie.getOwnPropertySymbols, Re = Re ? Re.isBuffer : n, Wt = t.isFinite, + En = De.join, Tn = cn(Ie.keys, Ie), An = be.max, gn = be.min, vn = Se.now, yn = t.parseInt, + Sn = be.random, Cn = De.reverse, Se = fs(t, "DataView"), bn = fs(t, "Map"), In = fs(t, "Promise"), + On = fs(t, "Set"), t = fs(t, "WeakMap"), Ln = fs(Ie, "create"), Dn = t && new t, Rn = {}, wn = Fs(Se), + xn = Fs(bn), Mn = Fs(In), Pn = Fs(On), Bn = Fs(t), Un = (Ye = Ye ? Ye.prototype : n) ? Ye.valueOf : n, + Hn = Ye ? Ye.toString : n; + + function Gn(e) { + if (to(e) && !Ya(e) && !(e instanceof Kn)) { + if (e instanceof Yn) return e; + if (Pe.call(e, "__wrapped__")) return Us(e) + } + return new Yn(e) + } + + var jn = function () { + function e() { + } + + return function (t) { + return eo(t) ? $e ? $e(t) : (e.prototype = t, t = new e, e.prototype = n, t) : {} + } + }(); + + function qn() { + } + + function Yn(e, t) { + this.__wrapped__ = e, this.__actions__ = [], this.__chain__ = !!t, this.__index__ = 0, this.__values__ = n + } + + function Kn(e) { + this.__wrapped__ = e, this.__actions__ = [], this.__dir__ = 1, this.__filtered__ = !1, this.__iteratees__ = [], this.__takeCount__ = d, this.__views__ = [] + } + + function Wn(e) { + var t = -1, n = null == e ? 0 : e.length; + for (this.clear(); ++t < n;) { + var r = e[t]; + this.set(r[0], r[1]) + } + } + + function Vn(e) { + var t = -1, n = null == e ? 0 : e.length; + for (this.clear(); ++t < n;) { + var r = e[t]; + this.set(r[0], r[1]) + } + } + + function $n(e) { + var t = -1, n = null == e ? 0 : e.length; + for (this.clear(); ++t < n;) { + var r = e[t]; + this.set(r[0], r[1]) + } + } + + function Qn(e) { + var t = -1, n = null == e ? 0 : e.length; + for (this.__data__ = new $n; ++t < n;) this.add(e[t]) + } + + function zn(e) { + e = this.__data__ = new Vn(e), this.size = e.size + } + + function Xn(e, t) { + var u, n = Ya(e), r = !n && qa(e), i = !n && !r && $a(e), s = !n && !r && !i && uo(e), + a = n || r || i || s, o = a ? Qt(e.length, ke) : [], c = o.length; + for (u in e) !t && !Pe.call(e, u) || a && ("length" == u || i && ("offset" == u || "parent" == u) || s && ("buffer" == u || "byteLength" == u || "byteOffset" == u) || As(u, c)) || o.push(u); + return o + } + + function Zn(e) { + var t = e.length; + return t ? e[Qr(0, t - 1)] : n + } + + function tr(e, t, r) { + (r === n || Ha(e[t], r)) && (r !== n || t in e) || ar(e, t, r) + } + + function nr(e, t, r) { + var i = e[t]; + Pe.call(e, t) && Ha(i, r) && (r !== n || t in e) || ar(e, t, r) + } + + function rr(e, t) { + for (var n = e.length; n--;) if (Ha(e[n][0], t)) return n; + return -1 + } + + function ir(e, t, n, r) { + return pr(e, function (e, i, s) { + t(r, e, n(e), s) + }), r + } + + function sr(e, t) { + return e && Di(t, Ro(t), e) + } + + function ar(e, t, n) { + "__proto__" == t && ct ? ct(e, t, {configurable: !0, enumerable: !0, value: n, writable: !0}) : e[t] = n + } + + function or(e, t) { + for (var r = -1, i = t.length, s = ye(i), a = null == e; ++r < i;) s[r] = a ? n : Io(e, t[r]); + return s + } + + function cr(e, t, r) { + return e != e || (r !== n && (e = e <= r ? e : r), t === n) || t <= e ? e : t + } + + function ur(e, t, r, i, s, a) { + var o, c = 1 & t, u = 2 & t, l = 4 & t; + if ((o = r ? s ? r(e, i, s, a) : r(e) : o) === n) { + if (!eo(e)) return e; + if (i = Ya(e)) { + if (o = function (e) { + var t = e.length, n = new e.constructor(t); + return t && "string" == typeof e[0] && Pe.call(e, "index") && (n.index = e.index, n.input = e.input), n + }(e), !c) return Li(e, o) + } else { + var f = ms(e), p = f == v || f == y; + if ($a(e)) return Ci(e, c); + if (f == N || f == _ || p && !s) { + if (o = u || p ? {} : Es(e), !c) return u ? function (e, t) { + return Di(e, ds(e), t) + }(e, function (e, t) { + return e && Di(t, wo(t), e) + }(o, e)) : function (e, t) { + return Di(e, ps(e), t) + }(e, sr(o, e)) + } else { + if (!ot[f]) return s ? e : {}; + o = function (e, n) { + var r = e.constructor; + switch (f) { + case R: + return Ni(e); + case T: + case A: + return new r(+e); + case w: + return function (e, t) { + return t = n ? Ni(e.buffer) : e.buffer, new e.constructor(t, e.byteOffset, e.byteLength) + }(e); + case x: + case M: + case P: + case B: + case F: + case U: + case H: + case G: + case j: + return bi(e, n); + case S: + return new r; + case C: + case k: + return new r(e); + case I: + return function (e) { + var t = new e.constructor(e.source, pe.exec(e)); + return t.lastIndex = e.lastIndex, t + }(e); + case O: + return new r; + case L: + return Un ? Ie(Un.call(e)) : {} + } + }(e, c) + } + } + if (p = (a = a || new zn).get(e)) return p; + a.set(e, o), ao(e) ? e.forEach(function (n) { + o.add(ur(n, t, r, n, e, a)) + }) : no(e) && e.forEach(function (n, i) { + o.set(i, ur(n, t, r, i, e, a)) + }); + var m = i ? n : (l ? u ? ss : is : u ? wo : Ro)(e); + It(m || e, function (n, i) { + m && (n = e[i = n]), nr(o, i, ur(n, t, r, i, e, a)) + }) + } + return o + } + + function lr(e, t, r) { + var i = r.length; + if (null == e) return !i; + for (e = Ie(e); i--;) { + var s = r[i], a = t[s], o = e[s]; + if (o === n && !(s in e) || !a(o)) return !1 + } + return !0 + } + + function hr(e, t, i) { + if ("function" != typeof e) throw new Le(r); + return Ds(function () { + e.apply(n, i) + }, t) + } + + function fr(e, t, n, r) { + var i = -1, s = Dt, a = !0, o = e.length, c = [], u = t.length; + if (o) { + n && (t = wt(t, Xt(n))), r ? (s = Rt, a = !1) : 200 <= t.length && (s = Jt, a = !1, t = new Qn(t)); + e:for (; ++i < o;) { + var l = e[i], h = null == n ? l : n(l), l = r || 0 !== l ? l : 0; + if (a && h == h) { + for (var f = u; f--;) if (t[f] === h) continue e; + c.push(l) + } else s(t, h, r) || c.push(l) + } + } + return c + } + + Gn.templateSettings = { + escape: z, + evaluate: X, + interpolate: Z, + variable: "", + imports: {_: Gn} + }, (Gn.prototype = qn.prototype).constructor = Gn, (Yn.prototype = jn(qn.prototype)).constructor = Yn, (Kn.prototype = jn(qn.prototype)).constructor = Kn, Wn.prototype.clear = function () { + this.__data__ = Ln ? Ln(null) : {}, this.size = 0 + }, Wn.prototype.delete = function (e) { + return e = this.has(e) && delete this.__data__[e], this.size -= e ? 1 : 0, e + }, Wn.prototype.get = function (e) { + var r, t = this.__data__; + return Ln ? (r = t[e]) === i ? n : r : Pe.call(t, e) ? t[e] : n + }, Wn.prototype.has = function (e) { + var t = this.__data__; + return Ln ? t[e] !== n : Pe.call(t, e) + }, Wn.prototype.set = function (e, t) { + var r = this.__data__; + return this.size += this.has(e) ? 0 : 1, r[e] = Ln && t === n ? i : t, this + }, Vn.prototype.clear = function () { + this.__data__ = [], this.size = 0 + }, Vn.prototype.delete = function (e) { + var t = this.__data__; + return !((e = rr(t, e)) < 0 || (e == t.length - 1 ? t.pop() : ze.call(t, e, 1), --this.size, 0)) + }, Vn.prototype.get = function (e) { + var t = this.__data__; + return (e = rr(t, e)) < 0 ? n : t[e][1] + }, Vn.prototype.has = function (e) { + return -1 < rr(this.__data__, e) + }, Vn.prototype.set = function (e, t) { + var n = this.__data__, r = rr(n, e); + return r < 0 ? (++this.size, n.push([e, t])) : n[r][1] = t, this + }, $n.prototype.clear = function () { + this.size = 0, this.__data__ = {hash: new Wn, map: new (bn || Vn), string: new Wn} + }, $n.prototype.delete = function (e) { + return e = ls(this, e).delete(e), this.size -= e ? 1 : 0, e + }, $n.prototype.get = function (e) { + return ls(this, e).get(e) + }, $n.prototype.has = function (e) { + return ls(this, e).has(e) + }, $n.prototype.set = function (e, t) { + var n = ls(this, e), r = n.size; + return n.set(e, t), this.size += n.size == r ? 0 : 1, this + }, Qn.prototype.add = Qn.prototype.push = function (e) { + return this.__data__.set(e, i), this + }, Qn.prototype.has = function (e) { + return this.__data__.has(e) + }, zn.prototype.clear = function () { + this.__data__ = new Vn, this.size = 0 + }, zn.prototype.delete = function (e) { + var t = this.__data__, e = t.delete(e); + return this.size = t.size, e + }, zn.prototype.get = function (e) { + return this.__data__.get(e) + }, zn.prototype.has = function (e) { + return this.__data__.has(e) + }, zn.prototype.set = function (e, t) { + var n = this.__data__; + if (n instanceof Vn) { + var r = n.__data__; + if (!bn || r.length < 199) return r.push([e, t]), this.size = ++n.size, this; + n = this.__data__ = new $n(r) + } + return n.set(e, t), this.size = n.size, this + }; + var pr = xi(vr), dr = xi(yr, !0); + + function _r(e, t, r) { + for (var i = -1, s = e.length; ++i < s;) { + var c, u, a = e[i], o = t(a); + null != o && (c === n ? o == o && !co(o) : r(o, c)) && (c = o, u = a) + } + return u + } + + function Er(e, t) { + var n = []; + return pr(e, function (e, r, i) { + t(e, r, i) && n.push(e) + }), n + } + + function Tr(e, t, n, r, i) { + var s = -1, a = e.length; + for (n = n || Ts, i = i || []; ++s < a;) { + var o = e[s]; + 0 < t && n(o) ? 1 < t ? Tr(o, t - 1, n, r, i) : xt(i, o) : r || (i[i.length] = o) + } + return i + } + + var Ar = Mi(), gr = Mi(!0); + + function vr(e, t) { + return e && Ar(e, t, Ro) + } + + function yr(e, t) { + return e && gr(e, t, Ro) + } + + function Sr(e, t) { + return Lt(t, function (t) { + return Xa(e[t]) + }) + } + + function Cr(e, t) { + for (var r = 0, i = (t = gi(t, e)).length; null != e && r < i;) e = e[Bs(t[r++])]; + return r && r == i ? e : n + } + + function Nr(e, t, n) { + return t = t(e), Ya(e) ? t : xt(t, n(e)) + } + + function br(e) { + return null == e ? e === n ? "[object Undefined]" : "[object Null]" : (nt && nt in Ie(e) ? function (e) { + var t = Pe.call(e, nt), r = e[nt]; + try { + e[nt] = n; + var i = !0 + } catch (e) { + } + var s = Ue.call(e); + return i && (t ? e[nt] = r : delete e[nt]), s + } : function (e) { + return Ue.call(e) + })(e) + } + + function Ir(e, t) { + return t < e + } + + function Or(e, t) { + return null != e && Pe.call(e, t) + } + + function kr(e, t) { + return null != e && t in Ie(e) + } + + function Lr(e, t, r) { + for (var i = r ? Rt : Dt, s = e[0].length, a = e.length, o = a, c = ye(a), u = 1 / 0, l = []; o--;) { + var h = e[o]; + o && t && (h = wt(h, Xt(t))), u = gn(h.length, u), c[o] = !r && (t || 120 <= s && 120 <= h.length) ? new Qn(o && h) : n + } + var h = e[0], f = -1, p = c[0]; + e:for (; ++f < s && l.length < u;) { + var d = h[f], m = t ? t(d) : d, d = r || 0 !== d ? d : 0; + if (!(p ? Jt(p, m) : i(l, m, r))) { + for (o = a; --o;) { + var _ = c[o]; + if (!(_ ? Jt(_, m) : i(e[o], m, r))) continue e + } + p && p.push(m), l.push(d) + } + } + return l + } + + function Dr(e, t, r) { + return null == (t = null == (e = Os(e, t = gi(t, e))) ? e : e[Bs(zs(t))]) ? n : Nt(t, e, r) + } + + function Rr(e) { + return to(e) && br(e) == _ + } + + function wr(e, t, r, i, s) { + return e === t || (null == e || null == t || !to(e) && !to(t) ? e != e && t != t : function (e, t, r, i, s, a) { + var o = Ya(e), c = Ya(t), u = o ? E : ms(e), c = c ? E : ms(t), h = (u = u == _ ? N : u) == N, + f = (c = c == _ ? N : c) == N; + if ((c = u == c) && $a(e)) { + if (!$a(t)) return !1; + h = !(o = !0) + } + return c && !h ? (a = a || new zn, o || uo(e) ? ns(e, t, r, i, s, a) : function (e, t, n, r, i, s, a) { + switch (n) { + case w: + if (e.byteLength != t.byteLength || e.byteOffset != t.byteOffset) return !1; + e = e.buffer, t = t.buffer; + case R: + return !(e.byteLength != t.byteLength || !s(new Ke(e), new Ke(t))); + case T: + case A: + case C: + return Ha(+e, +t); + case g: + return e.name == t.name && e.message == t.message; + case I: + case k: + return e == t + ""; + case S: + var o = on; + case O: + var u, o = o || ln; + return e.size == t.size || 1 & r ? (u = a.get(e)) ? u == t : (r |= 2, a.set(e, t), u = ns(o(e), o(t), r, i, s, a), a.delete(e), u) : !1; + case L: + if (Un) return Un.call(e) == Un.call(t) + } + return !1 + }(e, t, u, r, i, s, a)) : 1 & r || (o = h && Pe.call(e, "__wrapped__"), u = f && Pe.call(t, "__wrapped__"), !o && !u) ? c && function (e, t, r, i, s, a) { + var o = 1 & r, c = is(e), u = c.length; + if (u != is(t).length && !o) return !1; + for (var f = u; f--;) { + var p = c[f]; + if (!(o ? p in t : Pe.call(t, p))) return !1 + } + var d = a.get(e), m = a.get(t); + if (d && m) return d == t && m == e; + for (var _ = !0, E = (a.set(e, t), a.set(t, e), o); ++f < u;) { + var g, T = e[p = c[f]], A = t[p]; + if (!((g = i ? o ? i(A, T, p, t, e, a) : i(T, A, p, e, t, a) : g) === n ? T === A || s(T, A, r, i, a) : g)) { + _ = !1; + break + } + E = E || "constructor" == p + } + return _ && !E && (d = e.constructor) != (m = t.constructor) && "constructor" in e && "constructor" in t && !("function" == typeof d && d instanceof d && "function" == typeof m && m instanceof m) && (_ = !1), a.delete(e), a.delete(t), _ + }(e, t, r, i, s, a = a || new zn) : s(o ? e.value() : e, u ? t.value() : t, r, i, a = a || new zn) + }(e, t, r, i, wr, s)) + } + + function xr(e, t, r, i) { + var s = r.length, a = s, o = !i; + if (null == e) return !a; + for (e = Ie(e); s--;) { + var c = r[s]; + if (o && c[2] ? c[1] !== e[c[0]] : !(c[0] in e)) return !1 + } + for (; ++s < a;) { + var u = (c = r[s])[0], l = e[u], h = c[1]; + if (o && c[2]) { + if (l === n && !(u in e)) return !1 + } else { + var p, f = new zn; + if (!((p = i ? i(l, h, u, e, t, f) : p) === n ? wr(h, l, 3, i, f) : p)) return !1 + } + } + return !0 + } + + function Mr(e) { + return !(!eo(e) || function (e) { + return Fe && Fe in e + }(e)) && (Xa(e) ? je : _e).test(Fs(e)) + } + + function Pr(e) { + return "function" == typeof e ? e : null == e ? ic : "object" == typeof e ? Ya(e) ? jr(e[0], e[1]) : Gr(e) : pc(e) + } + + function Br(e) { + if (!Cs(e)) return Tn(e); + var n, t = []; + for (n in Ie(e)) Pe.call(e, n) && "constructor" != n && t.push(n); + return t + } + + function Ur(e, t) { + return e < t + } + + function Hr(e, t) { + var n = -1, r = Wa(e) ? ye(e.length) : []; + return pr(e, function (e, i, s) { + r[++n] = t(e, i, s) + }), r + } + + function Gr(e) { + var t = hs(e); + return 1 == t.length && t[0][2] ? bs(t[0][0], t[0][1]) : function (n) { + return n === e || xr(n, e, t) + } + } + + function jr(e, t) { + return vs(e) && Ns(t) ? bs(Bs(e), t) : function (r) { + var i = Io(r, e); + return i === n && i === t ? Oo(r, e) : wr(t, i, 3) + } + } + + function qr(e, t, r, i, s) { + e !== t && Ar(t, function (a, o) { + var c; + s = s || new zn, eo(a) ? function (e, t, r, i, s, a, o) { + var p, d, m, c = ks(e, r), u = ks(t, r), l = o.get(u); + l || ((t = (l = a ? a(c, u, r + "", e, t, o) : n) === n) && (d = !(p = Ya(u)) && $a(u), m = !p && !d && uo(u), l = u, p || d || m ? l = Ya(c) ? c : Va(c) ? Li(c) : d ? Ci(u, !(t = !1)) : m ? bi(u, !(t = !1)) : [] : io(u) || qa(u) ? qa(l = c) ? l = To(c) : eo(c) && !Xa(c) || (l = Es(u)) : t = !1), t && (o.set(u, l), s(l, u, i, a, o), o.delete(u))), tr(e, r, l) + }(e, t, o, r, qr, i, s) : (c = i ? i(ks(e, o), a, o + "", e, t, s) : n, tr(e, o, c === n ? a : c)) + }, wo) + } + + function Yr(e, t) { + var r = e.length; + if (r) return As(t += t < 0 ? r : 0, r) ? e[t] : n + } + + function Kr(e, t, n) { + t = t.length ? wt(t, function (e) { + return Ya(e) ? function (t) { + return Cr(t, 1 === e.length ? e[0] : e) + } : e + }) : [ic]; + var r = -1; + return t = wt(t, Xt(us())), function (e, t) { + var n = e.length; + for (e.sort(t); n--;) e[n] = e[n].value; + return e + }(Hr(e, function (e, n, i) { + return { + criteria: wt(t, function (t) { + return t(e) + }), index: ++r, value: e + } + }), function (e, t) { + return function (e, t, n) { + for (var r = -1, i = e.criteria, s = t.criteria, a = i.length, o = n.length; ++r < a;) { + var c = Ii(i[r], s[r]); + if (c) return o <= r ? c : c * ("desc" == n[r] ? -1 : 1) + } + return e.index - t.index + }(e, t, n) + }) + } + + function Wr(e, t, n) { + for (var r = -1, i = t.length, s = {}; ++r < i;) { + var a = t[r], o = Cr(e, a); + n(o, a) && ei(s, gi(a, e), o) + } + return s + } + + function Vr(e, t, n, r) { + var i = r ? jt : Gt, s = -1, a = t.length, o = e; + for (e === t && (t = Li(t)), n && (o = wt(e, Xt(n))); ++s < a;) for (var c = 0, u = t[s], l = n ? n(u) : u; -1 < (c = i(o, l, c, r));) o !== e && ze.call(o, c, 1), ze.call(e, c, 1); + return e + } + + function $r(e, t) { + for (var n = e ? t.length : 0, r = n - 1; n--;) { + var s, i = t[n]; + n != r && i === s || (As(s = i) ? ze.call(e, i, 1) : fi(e, i)) + } + } + + function Qr(e, t) { + return e + Et(Sn() * (t - e + 1)) + } + + function zr(e, t) { + var n = ""; + if (!(!e || t < 1 || f < t)) for (; t % 2 && (n += e), (t = Et(t / 2)) && (e += e), t;) ; + return n + } + + function Xr(e, t) { + return Rs(Is(e, t, ic), e + "") + } + + function ei(e, t, r, i) { + if (eo(e)) for (var s = -1, a = (t = gi(t, e)).length, o = a - 1, c = e; null != c && ++s < a;) { + var h, u = Bs(t[s]), l = r; + if ("__proto__" === u || "constructor" === u || "prototype" === u) return e; + nr(c, u, l = s != o && (h = c[u], (l = i ? i(h, u, c) : n) === n) ? eo(h) ? h : As(t[s + 1]) ? [] : {} : l), c = c[u] + } + return e + } + + var ti = Dn ? function (e, t) { + return Dn.set(e, t), e + } : ic, Ye = ct ? function (e, t) { + return ct(e, "toString", {configurable: !0, enumerable: !1, value: tc(t), writable: !0}) + } : ic; + + function ii(e, t, n) { + var r = -1, i = e.length; + (n = i < n ? i : n) < 0 && (n += i), i = n < (t = t < 0 ? i < -t ? 0 : i + t : t) ? 0 : n - t >>> 0, t >>>= 0; + for (var s = ye(i); ++r < i;) s[r] = e[r + t]; + return s + } + + function ai(e, t, n) { + var r = 0, i = null == e ? r : e.length; + if ("number" == typeof t && t == t && i <= 2147483647) { + for (; r < i;) { + var s = r + i >>> 1, a = e[s]; + null !== a && !co(a) && (n ? a <= t : a < t) ? r = 1 + s : i = s + } + return i + } + return oi(e, t, ic, n) + } + + function oi(e, t, r, i) { + var s = 0, a = null == e ? 0 : e.length; + if (0 === a) return 0; + for (var o = (t = r(t)) != t, c = null === t, u = co(t), l = t === n; s < a;) { + var h = Et((s + a) / 2), f = r(e[h]), p = f !== n, d = null === f, m = f == f, _ = co(f); + (o ? i || m : l ? m && (i || p) : c ? m && p && (i || !d) : u ? m && p && !d && (i || !_) : !d && !_ && (i ? f <= t : f < t)) ? s = h + 1 : a = h + } + return gn(a, 4294967294) + } + + function ci(e, t) { + for (var n = -1, r = e.length, i = 0, s = []; ++n < r;) { + var c, a = e[n], o = t ? t(a) : a; + n && Ha(o, c) || (c = o, s[i++] = 0 === a ? 0 : a) + } + return s + } + + function ui(e) { + return "number" == typeof e ? e : co(e) ? p : +e + } + + function li(e) { + var t; + return "string" == typeof e ? e : Ya(e) ? wt(e, li) + "" : co(e) ? Hn ? Hn.call(e) : "" : "0" == (t = e + "") && 1 / e == -1 / 0 ? "-0" : t + } + + function hi(e, t, n) { + var r = -1, i = Dt, s = e.length, a = !0, o = [], c = o; + if (n) a = !1, i = Rt; else if (200 <= s) { + var u = t ? null : zi(e); + if (u) return ln(u); + a = !1, i = Jt, c = new Qn + } else c = t ? [] : o; + e:for (; ++r < s;) { + var l = e[r], h = t ? t(l) : l, l = n || 0 !== l ? l : 0; + if (a && h == h) { + for (var f = c.length; f--;) if (c[f] === h) continue e; + t && c.push(h), o.push(l) + } else i(c, h, n) || (c !== o && c.push(h), o.push(l)) + } + return o + } + + function fi(e, t) { + return null == (e = Os(e, t = gi(t, e))) || delete e[Bs(zs(t))] + } + + function pi(e, t, n, r) { + return ei(e, t, n(Cr(e, t)), r) + } + + function di(e, t, n, r) { + for (var i = e.length, s = r ? i : -1; (r ? s-- : ++s < i) && t(e[s], s, e);) ; + return n ? ii(e, r ? 0 : s, r ? s + 1 : i) : ii(e, r ? s + 1 : 0, r ? i : s) + } + + function mi(e, t) { + var n = e; + return Mt(t, function (e, t) { + return t.func.apply(t.thisArg, xt([e], t.args)) + }, e instanceof Kn ? e.value() : n) + } + + function _i(e, t, n) { + var r = e.length; + if (r < 2) return r ? hi(e[0]) : []; + for (var i = -1, s = ye(r); ++i < r;) for (var a = e[i], o = -1; ++o < r;) o != i && (s[i] = fr(s[i] || a, e[o], t, n)); + return hi(Tr(s, 1), t, n) + } + + function Ei(e, t, r) { + for (var i = -1, s = e.length, a = t.length, o = {}; ++i < s;) { + var c = i < a ? t[i] : n; + r(o, e[i], c) + } + return o + } + + function Ti(e) { + return Va(e) ? e : [] + } + + function Ai(e) { + return "function" == typeof e ? e : ic + } + + function gi(e, t) { + return Ya(e) ? e : vs(e, t) ? [e] : Ps(Ao(e)) + } + + var vi = Xr; + + function yi(e, t, r) { + var i = e.length; + return r = r === n ? i : r, !t && i <= r ? e : ii(e, t, r) + } + + var Si = ht || function (e) { + return pt.clearTimeout(e) + }; + + function Ci(e, t) { + return t ? e.slice() : (t = e.length, t = We ? We(t) : new e.constructor(t), e.copy(t), t) + } + + function Ni(e) { + var t = new e.constructor(e.byteLength); + return new Ke(t).set(new Ke(e)), t + } + + function bi(e, t) { + return t = t ? Ni(e.buffer) : e.buffer, new e.constructor(t, e.byteOffset, e.length) + } + + function Ii(e, t) { + if (e !== t) { + var r = e !== n, i = null === e, s = e == e, a = co(e), o = t !== n, c = null === t, u = t == t, + l = co(t); + if (!c && !l && !a && t < e || a && o && u && !c && !l || i && o && u || !r && u || !s) return 1; + if (!i && !a && !l && e < t || l && r && s && !i && !a || c && r && s || !o && s || !u) return -1 + } + return 0 + } + + function Oi(e, t, n, r) { + for (var i = -1, s = e.length, a = n.length, o = -1, c = t.length, u = An(s - a, 0), l = ye(c + u), h = !r; ++o < c;) l[o] = t[o]; + for (; ++i < a;) (h || i < s) && (l[n[i]] = e[i]); + for (; u--;) l[o++] = e[i++]; + return l + } + + function ki(e, t, n, r) { + for (var i = -1, s = e.length, a = -1, o = n.length, c = -1, u = t.length, l = An(s - o, 0), h = ye(l + u), f = !r; ++i < l;) h[i] = e[i]; + for (var p = i; ++c < u;) h[p + c] = t[c]; + for (; ++a < o;) (f || i < s) && (h[p + n[a]] = e[i++]); + return h + } + + function Li(e, t) { + var n = -1, r = e.length; + for (t = t || ye(r); ++n < r;) t[n] = e[n]; + return t + } + + function Di(e, t, r, i) { + var s = !r; + r = r || {}; + for (var a = -1, o = t.length; ++a < o;) { + var c = t[a], u = i ? i(r[c], e[c], c, r, e) : n; + (s ? ar : nr)(r, c, u === n ? e[c] : u) + } + return r + } + + function Ri(e, t) { + return function (n, r) { + var i = Ya(n) ? bt : ir, s = t ? t() : {}; + return i(n, e, us(r, 2), s) + } + } + + function wi(e) { + return Xr(function (t, r) { + var i = -1, s = r.length, a = 1 < s ? r[s - 1] : n, o = 2 < s ? r[2] : n, + a = 3 < e.length && "function" == typeof a ? (s--, a) : n; + for (o && gs(r[0], r[1], o) && (a = s < 3 ? n : a, s = 1), t = Ie(t); ++i < s;) { + var c = r[i]; + c && e(t, c, i, a) + } + return t + }) + } + + function xi(e, t) { + return function (n, r) { + if (null != n) { + if (!Wa(n)) return e(n, r); + for (var i = n.length, s = t ? i : -1, a = Ie(n); (t ? s-- : ++s < i) && !1 !== r(a[s], s, a);) ; + } + return n + } + } + + function Mi(e) { + return function (t, n, r) { + for (var i = -1, s = Ie(t), a = r(t), o = a.length; o--;) { + var c = a[e ? o : ++i]; + if (!1 === n(s[c], c, s)) break + } + return t + } + } + + function Pi(e) { + return function (t) { + var i = (r = an(t = Ao(t)) ? pn(t) : n) ? r[0] : t.charAt(0), + r = r ? yi(r, 1).join("") : t.slice(1); + return i[e]() + r + } + } + + function Bi(e) { + return function (t) { + return Mt(Zo(Yo(t).replace(Ze, "")), e, "") + } + } + + function Fi(e) { + return function () { + var t = arguments; + switch (t.length) { + case 0: + return new e; + case 1: + return new e(t[0]); + case 2: + return new e(t[0], t[1]); + case 3: + return new e(t[0], t[1], t[2]); + case 4: + return new e(t[0], t[1], t[2], t[3]); + case 5: + return new e(t[0], t[1], t[2], t[3], t[4]); + case 6: + return new e(t[0], t[1], t[2], t[3], t[4], t[5]); + case 7: + return new e(t[0], t[1], t[2], t[3], t[4], t[5], t[6]) + } + var n = jn(e.prototype), r = e.apply(n, t); + return eo(r) ? r : n + } + } + + function Ui(e) { + return function (t, r, i) { + var a, s = Ie(t); + return Wa(t) || (a = us(r, 3), t = Ro(t), r = function (e) { + return a(s[e], e, s) + }), -1 < (r = e(t, r, i)) ? s[a ? t[r] : r] : n + } + } + + function Hi(e) { + return rs(function (t) { + var i = t.length, s = i, a = Yn.prototype.thru; + for (e && t.reverse(); s--;) { + var o = t[s]; + if ("function" != typeof o) throw new Le(r); + a && !c && "wrapper" == os(o) && (c = new Yn([], !0)) + } + for (s = c ? s : i; ++s < i;) var u = os(o = t[s]), l = "wrapper" == u ? as(o) : n, c = l && ys(l[0]) && 424 == l[1] && !l[4].length && 1 == l[9] ? c[os(l[0])].apply(c, l[3]) : 1 == o.length && ys(o) ? c[u]() : c.thru(o); + return function () { + var e = arguments, n = e[0]; + if (c && 1 == e.length && Ya(n)) return c.plant(n).value(); + for (var r = 0, s = i ? t[r].apply(this, e) : n; ++r < i;) s = t[r].call(this, s); + return s + } + }) + } + + function Gi(e, t, r, i, s, a, o, c, l, h) { + var f = t & u, p = 1 & t, d = 2 & t, m = 24 & t, _ = 512 & t, E = d ? n : Fi(e); + return function u() { + for (var v, y, T = arguments.length, A = ye(T), g = T; g--;) A[g] = arguments[g]; + return m && (y = function (e, t) { + for (var n = e.length, r = 0; n--;) e[n] === t && ++r; + return r + }(A, v = cs(u))), i && (A = Oi(A, i, s, m)), a && (A = ki(A, a, o, m)), T -= y, m && T < h ? (y = un(A, v), $i(e, t, Gi, u.placeholder, r, A, y, c, l, h - T)) : (v = p ? r : this, y = d ? v[e] : e, T = A.length, c ? A = function (e, t) { + for (var r = e.length, i = gn(t.length, r), s = Li(e); i--;) { + var a = t[i]; + e[i] = As(a, r) ? s[a] : n + } + return e + }(A, c) : _ && 1 < T && A.reverse(), f && l < T && (A.length = l), (y = this && this !== pt && this instanceof u ? E || Fi(y) : y).apply(v, A)) + } + } + + function ji(e, t) { + return function (n, r) { + return function (e, t, n, r) { + return vr(e, function (e, i, s) { + t(r, n(e), i, s) + }), r + }(n, e, t(r), {}) + } + } + + function qi(e, t) { + return function (r, i) { + var s; + if (r === n && i === n) return t; + if (r !== n && (s = r), i !== n) { + if (s === n) return i; + i = ("string" == typeof r || "string" == typeof i ? (r = li(r), li) : (r = ui(r), ui))(i), s = e(r, i) + } + return s + } + } + + function Yi(e) { + return rs(function (t) { + return t = wt(t, Xt(us())), Xr(function (n) { + var r = this; + return e(t, function (e) { + return Nt(e, r, n) + }) + }) + }) + } + + function Ki(e, t) { + var r = (t = t === n ? " " : li(t)).length; + return r < 2 ? r ? zr(t, e) : t : (r = zr(t, mt(e / fn(t))), an(t) ? yi(pn(r), 0, e).join("") : r.slice(0, e)) + } + + function Wi(e) { + return function (t, r, i) { + return i && "number" != typeof i && gs(t, r, i) && (r = i = n), t = po(t), r === n ? (r = t, t = 0) : r = po(r), function (e, t, n, r) { + for (var i = -1, s = An(mt((t - e) / (n || 1)), 0), a = ye(s); s--;) a[r ? s : ++i] = e, e += n; + return a + }(t, r, i = i === n ? t < r ? 1 : -1 : po(i), e) + } + } + + function Vi(e) { + return function (t, n) { + return "string" == typeof t && "string" == typeof n || (t = Eo(t), n = Eo(n)), e(t, n) + } + } + + function $i(e, t, r, i, s, a, u, l, h, f) { + var p = 8 & t, + s = (4 & (t = (t | (p ? o : 64)) & ~(p ? 64 : o)) || (t &= -4), [e, t, s, p ? a : n, p ? u : n, p ? n : a, p ? n : u, l, h, f]), + a = r.apply(n, s); + return ys(e) && Ls(a, s), a.placeholder = i, ws(a, e, t) + } + + function Qi(e) { + var t = be[e]; + return function (e, n) { + var r; + return e = Eo(e), (n = null == n ? 0 : gn(mo(n), 292)) && Wt(e) ? (r = (Ao(e) + "e").split("e"), +((r = (Ao(t(r[0] + "e" + (+r[1] + n))) + "e").split("e"))[0] + "e" + (+r[1] - n))) : t(e) + } + } + + var zi = On && 1 / ln(new On([, -0]))[1] == h ? function (e) { + return new On(e) + } : uc; + + function Xi(e) { + return function (t) { + var n = ms(t); + return n == S ? on(t) : n == O ? function (e) { + var t = -1, n = Array(e.size); + return e.forEach(function (e) { + n[++t] = [e, e] + }), n + }(t) : function (e, t) { + return wt(t, function (t) { + return [t, e[t]] + }) + }(t, e(t)) + } + } + + function Zi(e, t, i, h, f, p, d, m) { + var E, A, T, _ = 2 & t; + if (_ || "function" == typeof e) return (E = h ? h.length : 0) || (t &= -97, h = f = n), d = d === n ? d : An(mo(d), 0), m = m === n ? m : mo(m), E -= f ? f.length : 0, 64 & t && (T = h, A = f, h = f = n), T = [e, t, i, h, f, T, A, p, d, m], (A = _ ? n : as(e)) && function (e, t) { + var h, n = e[1], r = t[1], i = n | r, + o = r == u && 8 == n || r == u && 256 == n && e[7].length <= t[8] || 384 == r && t[7].length <= t[8] && 8 == n; + (i < 131 || o) && (1 & r && (e[2] = t[2], i |= 1 & n ? 0 : 4), (o = t[3]) && (h = e[3], e[3] = h ? Oi(h, o, t[4]) : o, e[4] = h ? un(e[3], s) : t[4]), (o = t[5]) && (h = e[5], e[5] = h ? ki(h, o, t[6]) : o, e[6] = h ? un(e[5], s) : t[6]), (o = t[7]) && (e[7] = o), r & u && (e[8] = null == e[8] ? t[8] : gn(e[8], t[8])), null == e[9] && (e[9] = t[9]), e[0] = t[0], e[1] = i) + }(T, A), e = T[0], t = T[1], i = T[2], h = T[3], f = T[4], !(m = T[9] = T[9] === n ? _ ? 0 : e.length : An(T[9] - E, 0)) && 24 & t && (t &= -25), p = t && 1 != t ? 8 == t || 16 == t ? function (e, t, r) { + var i = Fi(e); + return function s() { + for (var a = arguments.length, o = ye(a), c = a, u = cs(s); c--;) o[c] = arguments[c]; + return (a -= (u = a < 3 && o[0] !== u && o[a - 1] !== u ? [] : un(o, u)).length) < r ? $i(e, t, Gi, s.placeholder, n, o, u, n, n, r - a) : Nt(this && this !== pt && this instanceof s ? i : e, this, o) + } + }(e, t, m) : t != o && 33 != t || f.length ? Gi.apply(n, T) : function (e, t, n, r) { + var i = 1 & t, s = Fi(e); + return function t() { + for (var a = -1, o = arguments.length, c = -1, u = r.length, l = ye(u + o), h = this && this !== pt && this instanceof t ? s : e; ++c < u;) l[c] = r[c]; + for (; o--;) l[c++] = arguments[++a]; + return Nt(h, i ? n : this, l) + } + }(e, t, i, h) : function (e, t, n) { + var r = 1 & t, i = Fi(e); + return function t() { + return (this && this !== pt && this instanceof t ? i : e).apply(r ? n : this, arguments) + } + }(e, t, i), ws((A ? ti : Ls)(p, T), e, t); + throw new Le(r) + } + + function Ji(e, t, r, i) { + return e === n || Ha(e, we[r]) && !Pe.call(i, r) ? t : e + } + + function es(e, t, r, i, s, a) { + return eo(e) && eo(t) && (a.set(t, e), qr(e, t, n, es, a), a.delete(t)), e + } + + function ts(e) { + return io(e) ? n : e + } + + function ns(e, t, r, i, s, a) { + var o = 1 & r, c = e.length; + if (c != (u = t.length) && !(o && c < u)) return !1; + var u = a.get(e), h = a.get(t); + if (u && h) return u == t && h == e; + var f = -1, p = !0, d = 2 & r ? new Qn : n; + for (a.set(e, t), a.set(t, e); ++f < c;) { + var E, m = e[f], _ = t[f]; + if ((E = i ? o ? i(_, m, f, t, e, a) : i(m, _, f, e, t, a) : E) !== n) { + if (E) continue; + p = !1; + break + } + if (d) { + if (!Bt(t, function (e, t) { + return !Jt(d, t) && (m === e || s(m, e, r, i, a)) && d.push(t) + })) { + p = !1; + break + } + } else if (m !== _ && !s(m, _, r, i, a)) { + p = !1; + break + } + } + return a.delete(e), a.delete(t), p + } + + function rs(e) { + return Rs(Is(e, n, Ks), e + "") + } + + function is(e) { + return Nr(e, Ro, ps) + } + + function ss(e) { + return Nr(e, wo, ds) + } + + var as = Dn ? function (e) { + return Dn.get(e) + } : uc; + + function os(e) { + for (var t = e.name + "", n = Rn[t], r = Pe.call(Rn, t) ? n.length : 0; r--;) { + var i = n[r], s = i.func; + if (null == s || s == e) return i.name + } + return t + } + + function cs(e) { + return (Pe.call(Gn, "placeholder") ? Gn : e).placeholder + } + + function us() { + var e = (e = Gn.iteratee || sc) === sc ? Pr : e; + return arguments.length ? e(arguments[0], arguments[1]) : e + } + + function ls(e, t) { + var r, e = e.__data__; + return ("string" == (r = typeof t) || "number" == r || "symbol" == r || "boolean" == r ? "__proto__" !== t : null === t) ? e["string" == typeof t ? "string" : "hash"] : e.map + } + + function hs(e) { + for (var t = Ro(e), n = t.length; n--;) { + var r = t[n], i = e[r]; + t[n] = [r, i, Ns(i)] + } + return t + } + + function fs(e, t) { + return Mr(e = function (e, t) { + return null == e ? n : e[t] + }(e, t)) ? e : n + } + + var ps = Tt ? function (e) { + return null == e ? [] : (e = Ie(e), Lt(Tt(e), function (t) { + return Qe.call(e, t) + })) + } : _c, ds = Tt ? function (e) { + for (var t = []; e;) xt(t, ps(e)), e = Ve(e); + return t + } : _c, ms = br; + + function _s(e, t, n) { + for (var r = -1, i = (t = gi(t, e)).length, s = !1; ++r < i;) { + var a = Bs(t[r]); + if (!(s = null != e && n(e, a))) break; + e = e[a] + } + return s || ++r != i ? s : !!(i = null == e ? 0 : e.length) && Ja(i) && As(a, i) && (Ya(e) || qa(e)) + } + + function Es(e) { + return "function" != typeof e.constructor || Cs(e) ? {} : jn(Ve(e)) + } + + function Ts(e) { + return Ya(e) || qa(e) || !!(Xe && e && e[Xe]) + } + + function As(e, t) { + var n = typeof e; + return !!(t = null == t ? f : t) && ("number" == n || "symbol" != n && Te.test(e)) && -1 < e && e % 1 == 0 && e < t + } + + function gs(e, t, n) { + var r; + return !!eo(n) && !!("number" == (r = typeof t) ? Wa(n) && As(t, n.length) : "string" == r && t in n) && Ha(n[t], e) + } + + function vs(e, t) { + var n; + return !Ya(e) && ("number" == (n = typeof e) || "symbol" == n || "boolean" == n || null == e || co(e) || ee.test(e) || !J.test(e) || null != t && e in Ie(t)) + } + + function ys(e) { + var t = os(e), n = Gn[t]; + return "function" == typeof n && t in Kn.prototype && (e === n || (t = as(n)) && e === t[0]) + } + + (Se && ms(new Se(new ArrayBuffer(1))) != w || bn && ms(new bn) != S || In && ms(In.resolve()) != b || On && ms(new On) != O || t && ms(new t) != D) && (ms = function (e) { + var t = br(e); + if (e = (e = t == N ? e.constructor : n) ? Fs(e) : "") switch (e) { + case wn: + return w; + case xn: + return S; + case Mn: + return b; + case Pn: + return O; + case Bn: + return D + } + return t + }); + var Ss = xe ? Xa : Ec; + + function Cs(e) { + var t = e && e.constructor; + return e === ("function" == typeof t && t.prototype || we) + } + + function Ns(e) { + return e == e && !eo(e) + } + + function bs(e, t) { + return function (r) { + return null != r && r[e] === t && (t !== n || e in Ie(r)) + } + } + + function Is(e, t, r) { + return t = An(t === n ? e.length - 1 : t, 0), function () { + for (var n = arguments, i = -1, s = An(n.length - t, 0), a = ye(s); ++i < s;) a[i] = n[t + i]; + for (var i = -1, o = ye(t + 1); ++i < t;) o[i] = n[i]; + return o[t] = r(a), Nt(e, this, o) + } + } + + function Os(e, t) { + return t.length < 2 ? e : Cr(e, ii(t, 0, -1)) + } + + function ks(e, t) { + if (("constructor" !== t || "function" != typeof e[t]) && "__proto__" != t) return e[t] + } + + var Ls = xs(ti), Ds = dt || function (e, t) { + return pt.setTimeout(e, t) + }, Rs = xs(Ye); + + function ws(e, t, n) { + var r = t + ""; + return Rs(e, function (e, t) { + var r, n = t.length; + return n ? (t[r = n - 1] = (1 < n ? "& " : "") + t[r], t = t.join(2 < n ? ", " : " "), e.replace(ae, "{\n/* [wrapped with " + t + "] */\n")) : e + }(r, function (e, t) { + return It(m, function (n) { + var r = "_." + n[0]; + t & n[1] && !Dt(e, r) && e.push(r) + }), e.sort() + }(function () { + var t = r.match(oe); + return t ? t[1].split(ce) : [] + }(), n))) + } + + function xs(e) { + var t = 0, r = 0; + return function () { + var i = vn(), s = 16 - (i - r); + if (r = i, 0 < s) { + if (800 <= ++t) return arguments[0] + } else t = 0; + return e.apply(n, arguments) + } + } + + function Ms(e, t) { + var r = -1, i = e.length, s = i - 1; + for (t = t === n ? i : t; ++r < t;) { + var a = Qr(r, s), o = e[a]; + e[a] = e[r], e[r] = o + } + return e.length = t, e + } + + var Ps = function () { + var t = xa(function (e) { + var t = []; + return 46 === e.charCodeAt(0) && t.push(""), e.replace(te, function (e, n, r, i) { + t.push(r ? i.replace(he, "$1") : n || e) + }), t + }, function (e) { + return 500 === n.size && n.clear(), e + }), n = t.cache; + return t + }(); + + function Bs(e) { + var t; + return "string" == typeof e || co(e) ? e : "0" == (t = e + "") && 1 / e == -1 / 0 ? "-0" : t + } + + function Fs(e) { + if (null != e) { + try { + return Me.call(e) + } catch (e) { + } + try { + return e + "" + } catch (e) { + } + } + return "" + } + + function Us(e) { + var t; + return e instanceof Kn ? e.clone() : ((t = new Yn(e.__wrapped__, e.__chain__)).__actions__ = Li(e.__actions__), t.__index__ = e.__index__, t.__values__ = e.__values__, t) + } + + function qs(e, t, n) { + var r = null == e ? 0 : e.length; + return r ? ((n = null == n ? 0 : mo(n)) < 0 && (n = An(r + n, 0)), Ht(e, us(t, 3), n)) : -1 + } + + function Ys(e, t, r) { + var s, i = null == e ? 0 : e.length; + return i ? (s = i - 1, r !== n && (s = mo(r), s = r < 0 ? An(i + s, 0) : gn(s, i - 1)), Ht(e, us(t, 3), s, !0)) : -1 + } + + function Ks(e) { + return null != e && e.length ? Tr(e, 1) : [] + } + + function Ws(e) { + return e && e.length ? e[0] : n + } + + function zs(e) { + var t = null == e ? 0 : e.length; + return t ? e[t - 1] : n + } + + function Zs(e, t) { + return e && e.length && t && t.length ? Vr(e, t) : e + } + + ht = Xr(function (e, t) { + return Va(e) ? fr(e, Tr(t, 1, Va, !0)) : [] + }), Se = Xr(function (e, t) { + var r = zs(t); + return Va(r) && (r = n), Va(e) ? fr(e, Tr(t, 1, Va, !0), us(r, 2)) : [] + }), In = Xr(function (e, t) { + var r = zs(t); + return Va(r) && (r = n), Va(e) ? fr(e, Tr(t, 1, Va, !0), n, r) : [] + }), t = Xr(function (e) { + var t = wt(e, Ti); + return t.length && t[0] === e[0] ? Lr(t) : [] + }), xe = Xr(function (e) { + var t = zs(e), r = wt(e, Ti); + return t === zs(r) ? t = n : r.pop(), r.length && r[0] === e[0] ? Lr(r, us(t, 2)) : [] + }), dt = Xr(function (e) { + var t = zs(e), r = wt(e, Ti); + return (t = "function" == typeof t ? t : n) && r.pop(), r.length && r[0] === e[0] ? Lr(r, n, t) : [] + }), Ye = Xr(Zs); + var Js = rs(function (e, t) { + var n = null == e ? 0 : e.length, r = or(e, t); + return $r(e, wt(t, function (e) { + return As(e, n) ? +e : e + }).sort(Ii)), r + }); + + function ea(e) { + return null == e ? e : Cn.call(e) + } + + var ta = Xr(function (e) { + return hi(Tr(e, 1, Va, !0)) + }), na = Xr(function (e) { + var t = zs(e); + return Va(t) && (t = n), hi(Tr(e, 1, Va, !0), us(t, 2)) + }), ra = Xr(function (e) { + var t = "function" == typeof (t = zs(e)) ? t : n; + return hi(Tr(e, 1, Va, !0), n, t) + }); + + function ia(e) { + var t; + return e && e.length ? (t = 0, e = Lt(e, function (e) { + if (Va(e)) return t = An(e.length, t), !0 + }), Qt(t, function (t) { + return wt(e, Kt(t)) + })) : [] + } + + function sa(e, t) { + return e && e.length ? (e = ia(e), null == t ? e : wt(e, function (e) { + return Nt(t, n, e) + })) : [] + } + + var aa = Xr(function (e, t) { + return Va(e) ? fr(e, t) : [] + }), oa = Xr(function (e) { + return _i(Lt(e, Va)) + }), ca = Xr(function (e) { + var t = zs(e); + return Va(t) && (t = n), _i(Lt(e, Va), us(t, 2)) + }), ua = Xr(function (e) { + var t = "function" == typeof (t = zs(e)) ? t : n; + return _i(Lt(e, Va), n, t) + }), la = Xr(ia), ha = Xr(function (e) { + var t = "function" == typeof (t = 1 < (t = e.length) ? e[t - 1] : n) ? (e.pop(), t) : n; + return sa(e, t) + }); + + function fa(e) { + return (e = Gn(e)).__chain__ = !0, e + } + + function pa(e, t) { + return t(e) + } + + var da = rs(function (e) { + function s(t) { + return or(t, e) + } + + var t = e.length, r = t ? e[0] : 0, i = this.__wrapped__; + return !(1 < t || this.__actions__.length) && i instanceof Kn && As(r) ? ((i = i.slice(r, +r + (t ? 1 : 0))).__actions__.push({ + func: pa, + args: [s], + thisArg: n + }), new Yn(i, this.__chain__).thru(function (e) { + return t && !e.length && e.push(n), e + })) : this.thru(s) + }), ma = Ri(function (e, t, n) { + Pe.call(e, n) ? ++e[n] : ar(e, n, 1) + }), _a = Ui(qs), Ea = Ui(Ys); + + function Ta(e, t) { + return (Ya(e) ? It : pr)(e, us(t, 3)) + } + + function Aa(e, t) { + return (Ya(e) ? function (e, t) { + for (var n = null == e ? 0 : e.length; n-- && !1 !== t(e[n], n, e);) ; + return e + } : dr)(e, us(t, 3)) + } + + var ga = Ri(function (e, t, n) { + Pe.call(e, n) ? e[n].push(t) : ar(e, n, [t]) + }), va = Xr(function (e, t, n) { + var r = -1, i = "function" == typeof t, s = Wa(e) ? ye(e.length) : []; + return pr(e, function (e) { + s[++r] = i ? Nt(t, e, n) : Dr(e, t, n) + }), s + }), ya = Ri(function (e, t, n) { + ar(e, n, t) + }); + + function Sa(e, t) { + return (Ya(e) ? wt : Hr)(e, us(t, 3)) + } + + var Ca = Ri(function (e, t, n) { + e[n ? 0 : 1].push(t) + }, function () { + return [[], []] + }), Na = Xr(function (e, t) { + var n; + return null == e ? [] : (1 < (n = t.length) && gs(e, t[0], t[1]) ? t = [] : 2 < n && gs(t[0], t[1], t[2]) && (t = [t[0]]), Kr(e, Tr(t, 1), [])) + }), ba = ft || function () { + return pt.Date.now() + }; + + function Ia(e, t, r) { + return t = r ? n : t, t = e && null == t ? e.length : t, Zi(e, u, n, n, n, n, t) + } + + function Oa(e, t) { + var i; + if ("function" != typeof t) throw new Le(r); + return e = mo(e), function () { + return 0 < --e && (i = t.apply(this, arguments)), e <= 1 && (t = n), i + } + } + + var ka = Xr(function (e, t, n) { + var i, r = 1; + return n.length && (i = un(n, cs(ka)), r |= o), Zi(e, r, t, n, i) + }), La = Xr(function (e, t, n) { + var i, r = 3; + return n.length && (i = un(n, cs(La)), r |= o), Zi(t, r, e, n, i) + }); + + function Da(e, t, i) { + var s, a, o, c, u, l, h = 0, f = !1, p = !1, d = !0; + if ("function" != typeof e) throw new Le(r); + + function m(t) { + var r = s, i = a; + return s = a = n, h = t, c = e.apply(i, r) + } + + function _(e) { + var r = e - l; + return l === n || t <= r || r < 0 || p && o <= e - h + } + + function E() { + var e = ba(); + if (_(e)) return T(e); + u = Ds(E, function (e) { + var n = t - (e - l); + return p ? gn(n, o - (e - h)) : n + }(e)) + } + + function T(e) { + return u = n, d && s ? m(e) : (s = a = n, c) + } + + function A() { + var e = ba(), r = _(e); + if (s = arguments, a = this, l = e, r) { + if (u === n) return function (e) { + return h = e, u = Ds(E, t), f ? m(e) : c + }(l); + if (p) return Si(u), u = Ds(E, t), m(l) + } + return u === n && (u = Ds(E, t)), c + } + + return t = Eo(t) || 0, eo(i) && (f = !!i.leading, o = (p = "maxWait" in i) ? An(Eo(i.maxWait) || 0, t) : o, d = "trailing" in i ? !!i.trailing : d), A.cancel = function () { + u !== n && Si(u), h = 0, s = l = a = u = n + }, A.flush = function () { + return u === n ? c : T(ba()) + }, A + } + + var ft = Xr(function (e, t) { + return hr(e, 1, t) + }), wa = Xr(function (e, t, n) { + return hr(e, Eo(t) || 0, n) + }); + + function xa(e, t) { + if ("function" != typeof e || null != t && "function" != typeof t) throw new Le(r); + + function n() { + var r = arguments, i = t ? t.apply(this, r) : r[0], s = n.cache; + return s.has(i) ? s.get(i) : (r = e.apply(this, r), n.cache = s.set(i, r) || s, r) + } + + return n.cache = new (xa.Cache || $n), n + } + + function Ma(e) { + if ("function" != typeof e) throw new Le(r); + return function () { + var t = arguments; + switch (t.length) { + case 0: + return !e.call(this); + case 1: + return !e.call(this, t[0]); + case 2: + return !e.call(this, t[0], t[1]); + case 3: + return !e.call(this, t[0], t[1], t[2]) + } + return !e.apply(this, t) + } + } + + xa.Cache = $n; + var vi = vi(function (e, t) { + var n = (t = 1 == t.length && Ya(t[0]) ? wt(t[0], Xt(us())) : wt(Tr(t, 1), Xt(us()))).length; + return Xr(function (r) { + for (var i = -1, s = gn(r.length, n); ++i < s;) r[i] = t[i].call(this, r[i]); + return Nt(e, this, r) + }) + }), Ba = Xr(function (e, t) { + var r = un(t, cs(Ba)); + return Zi(e, o, n, t, r) + }), Fa = Xr(function (e, t) { + var r = un(t, cs(Fa)); + return Zi(e, 64, n, t, r) + }), Ua = rs(function (e, t) { + return Zi(e, 256, n, n, n, t) + }); + + function Ha(e, t) { + return e === t || e != e && t != t + } + + var Ga = Vi(Ir), ja = Vi(function (e, t) { + return t <= e + }), qa = Rr(function () { + return arguments + }()) ? Rr : function (e) { + return to(e) && Pe.call(e, "callee") && !Qe.call(e, "callee") + }, Ya = ye.isArray, Ka = At ? Xt(At) : function (e) { + return to(e) && br(e) == R + }; + + function Wa(e) { + return null != e && Ja(e.length) && !Xa(e) + } + + function Va(e) { + return to(e) && Wa(e) + } + + var $a = Re || Ec, Re = gt ? Xt(gt) : function (e) { + return to(e) && br(e) == A + }; + + function za(e) { + var t; + return !!to(e) && ((t = br(e)) == g || "[object DOMException]" == t || "string" == typeof e.message && "string" == typeof e.name && !io(e)) + } + + function Xa(e) { + return !!eo(e) && ((e = br(e)) == v || e == y || "[object AsyncFunction]" == e || "[object Proxy]" == e) + } + + function Za(e) { + return "number" == typeof e && e == mo(e) + } + + function Ja(e) { + return "number" == typeof e && -1 < e && e % 1 == 0 && e <= f + } + + function eo(e) { + var t = typeof e; + return null != e && ("object" == t || "function" == t) + } + + function to(e) { + return null != e && "object" == typeof e + } + + var no = vt ? Xt(vt) : function (e) { + return to(e) && ms(e) == S + }; + + function ro(e) { + return "number" == typeof e || to(e) && br(e) == C + } + + function io(e) { + return !(!to(e) || br(e) != N) && (null === (e = Ve(e)) || "function" == typeof (e = Pe.call(e, "constructor") && e.constructor) && e instanceof e && Me.call(e) == He) + } + + var so = yt ? Xt(yt) : function (e) { + return to(e) && br(e) == I + }, ao = St ? Xt(St) : function (e) { + return to(e) && ms(e) == O + }; + + function oo(e) { + return "string" == typeof e || !Ya(e) && to(e) && br(e) == k + } + + function co(e) { + return "symbol" == typeof e || to(e) && br(e) == L + } + + var uo = Ct ? Xt(Ct) : function (e) { + return to(e) && Ja(e.length) && !!at[br(e)] + }, lo = Vi(Ur), ho = Vi(function (e, t) { + return e <= t + }); + + function fo(e) { + var t; + return e ? Wa(e) ? (oo(e) ? pn : Li)(e) : et && e[et] ? function (e) { + for (var t, n = []; !(t = e.next()).done;) n.push(t.value); + return n + }(e[et]()) : ((t = ms(e)) == S ? on : t == O ? ln : Go)(e) : [] + } + + function po(e) { + return e ? (e = Eo(e)) === h || e === -1 / 0 ? 17976931348623157e292 * (e < 0 ? -1 : 1) : e == e ? e : 0 : 0 === e ? e : 0 + } + + function mo(e) { + var n = (e = po(e)) % 1; + return e == e ? n ? e - n : e : 0 + } + + function _o(e) { + return e ? cr(mo(e), 0, d) : 0 + } + + function Eo(e) { + if ("number" == typeof e) return e; + if (co(e)) return p; + if ("string" != typeof (e = eo(e) ? eo(t = "function" == typeof e.valueOf ? e.valueOf() : e) ? t + "" : t : e)) return 0 === e ? e : +e; + e = zt(e); + var t = me.test(e); + return t || Ee.test(e) ? lt(e.slice(2), t ? 2 : 8) : de.test(e) ? p : +e + } + + function To(e) { + return Di(e, wo(e)) + } + + function Ao(e) { + return null == e ? "" : li(e) + } + + var go = wi(function (e, t) { + if (Cs(t) || Wa(t)) Di(t, Ro(t), e); else for (var n in t) Pe.call(t, n) && nr(e, n, t[n]) + }), vo = wi(function (e, t) { + Di(t, wo(t), e) + }), yo = wi(function (e, t, n, r) { + Di(t, wo(t), e, r) + }), So = wi(function (e, t, n, r) { + Di(t, Ro(t), e, r) + }), Co = rs(or), No = Xr(function (e, t) { + e = Ie(e); + var r = -1, i = t.length, s = 2 < i ? t[2] : n; + for (s && gs(t[0], t[1], s) && (i = 1); ++r < i;) for (var a = t[r], o = wo(a), c = -1, u = o.length; ++c < u;) { + var l = o[c], h = e[l]; + (h === n || Ha(h, we[l]) && !Pe.call(e, l)) && (e[l] = a[l]) + } + return e + }), bo = Xr(function (e) { + return e.push(n, es), Nt(Mo, n, e) + }); + + function Io(e, t, r) { + return (e = null == e ? n : Cr(e, t)) === n ? r : e + } + + function Oo(e, t) { + return null != e && _s(e, t, kr) + } + + var ko = ji(function (e, t, n) { + e[t = null != t && "function" != typeof t.toString ? Ue.call(t) : t] = n + }, tc(ic)), Lo = ji(function (e, t, n) { + null != t && "function" != typeof t.toString && (t = Ue.call(t)), Pe.call(e, t) ? e[t].push(n) : e[t] = [n] + }, us), Do = Xr(Dr); + + function Ro(e) { + return (Wa(e) ? Xn : Br)(e) + } + + function wo(e) { + return Wa(e) ? Xn(e, !0) : function (e) { + if (!eo(e)) return function (e) { + var t = []; + if (null != e) for (var n in Ie(e)) t.push(n); + return t + }(e); + var r, t = Cs(e), n = []; + for (r in e) ("constructor" != r || !t && Pe.call(e, r)) && n.push(r); + return n + }(e) + } + + var xo = wi(function (e, t, n) { + qr(e, t, n) + }), Mo = wi(function (e, t, n, r) { + qr(e, t, n, r) + }), Po = rs(function (e, t) { + var n = {}; + if (null != e) { + var r = !1; + t = wt(t, function (t) { + return t = gi(t, e), r = r || 1 < t.length, t + }), Di(e, ss(e), n), r && (n = ur(n, 7, ts)); + for (var i = t.length; i--;) fi(n, t[i]) + } + return n + }), Bo = rs(function (e, t) { + return null == e ? {} : function (e, t) { + return Wr(e, t, function (t, n) { + return Oo(e, n) + }) + }(e, t) + }); + + function Fo(e, t) { + var n; + return null == e ? {} : (n = wt(ss(e), function (e) { + return [e] + }), t = us(t), Wr(e, n, function (e, n) { + return t(e, n[0]) + })) + } + + var Uo = Xi(Ro), Ho = Xi(wo); + + function Go(e) { + return null == e ? [] : Zt(e, Ro(e)) + } + + var jo = Bi(function (e, t, n) { + return t = t.toLowerCase(), e + (n ? qo(t) : t) + }); + + function qo(e) { + return Xo(Ao(e).toLowerCase()) + } + + function Yo(e) { + return (e = Ao(e)) && e.replace(Ae, nn).replace(Je, "") + } + + var Ko = Bi(function (e, t, n) { + return e + (n ? "-" : "") + t.toLowerCase() + }), Wo = Bi(function (e, t, n) { + return e + (n ? " " : "") + t.toLowerCase() + }), Vo = Pi("toLowerCase"), $o = Bi(function (e, t, n) { + return e + (n ? "_" : "") + t.toLowerCase() + }), Qo = Bi(function (e, t, n) { + return e + (n ? " " : "") + Xo(t) + }), zo = Bi(function (e, t, n) { + return e + (n ? " " : "") + t.toUpperCase() + }), Xo = Pi("toUpperCase"); + + function Zo(e, t, r) { + return e = Ao(e), (t = r ? n : t) === n ? (function (e) { + return rt.test(e) + }(e) ? function (e) { + return e.match(tt) || [] + } : function (e) { + return e.match(ue) || [] + })(e) : e.match(t) || [] + } + + var Jo = Xr(function (e, t) { + try { + return Nt(e, n, t) + } catch (e) { + return za(e) ? e : new Ce(e) + } + }), ec = rs(function (e, t) { + return It(t, function (t) { + t = Bs(t), ar(e, t, ka(e[t], e)) + }), e + }); + + function tc(e) { + return function () { + return e + } + } + + var nc = Hi(), rc = Hi(!0); + + function ic(e) { + return e + } + + function sc(e) { + return Pr("function" == typeof e ? e : ur(e, 1)) + } + + var ac = Xr(function (e, t) { + return function (n) { + return Dr(n, e, t) + } + }), oc = Xr(function (e, t) { + return function (n) { + return Dr(e, n, t) + } + }); + + function cc(e, t, n) { + var r = Ro(t), i = Sr(t, r), + s = (null != n || eo(t) && (i.length || !r.length) || (n = t, t = e, e = this, i = Sr(t, Ro(t))), !(eo(n) && "chain" in n && !n.chain)), + a = Xa(e); + return It(i, function (n) { + var r = t[n]; + e[n] = r, a && (e.prototype[n] = function () { + var n, t = this.__chain__; + return s || t ? (((n = e(this.__wrapped__)).__actions__ = Li(this.__actions__)).push({ + func: r, + args: arguments, + thisArg: e + }), n.__chain__ = t, n) : r.apply(e, xt([this.value()], arguments)) + }) + }), e + } + + function uc() { + } + + var lc = Yi(wt), hc = Yi(kt), fc = Yi(Bt); + + function pc(e) { + return vs(e) ? Kt(Bs(e)) : function (e) { + return function (t) { + return Cr(t, e) + } + }(e) + } + + var dc = Wi(), mc = Wi(!0); + + function _c() { + return [] + } + + function Ec() { + return !1 + } + + var yc, Tc = qi(function (e, t) { + return e + t + }, 0), Ac = Qi("ceil"), gc = qi(function (e, t) { + return e / t + }, 1), vc = Qi("floor"), Sc = qi(function (e, t) { + return e * t + }, 1), Cc = Qi("round"), Nc = qi(function (e, t) { + return e - t + }, 0); + return Gn.after = function (e, t) { + if ("function" != typeof t) throw new Le(r); + return e = mo(e), function () { + if (--e < 1) return t.apply(this, arguments) + } + }, Gn.ary = Ia, Gn.assign = go, Gn.assignIn = vo, Gn.assignInWith = yo, Gn.assignWith = So, Gn.at = Co, Gn.before = Oa, Gn.bind = ka, Gn.bindAll = ec, Gn.bindKey = La, Gn.castArray = function () { + var e; + return arguments.length ? Ya(e = arguments[0]) ? e : [e] : [] + }, Gn.chain = fa, Gn.chunk = function (e, t, r) { + t = (r ? gs(e, t, r) : t === n) ? 1 : An(mo(t), 0); + var i = null == e ? 0 : e.length; + if (!i || t < 1) return []; + for (var s = 0, a = 0, o = ye(mt(i / t)); s < i;) o[a++] = ii(e, s, s += t); + return o + }, Gn.compact = function (e) { + for (var t = -1, n = null == e ? 0 : e.length, r = 0, i = []; ++t < n;) { + var s = e[t]; + s && (i[r++] = s) + } + return i + }, Gn.concat = function () { + var e = arguments.length; + if (!e) return []; + for (var t = ye(e - 1), n = arguments[0], r = e; r--;) t[r - 1] = arguments[r]; + return xt(Ya(n) ? Li(n) : [n], Tr(t, 1)) + }, Gn.cond = function (e) { + var t = null == e ? 0 : e.length, n = us(); + return e = t ? wt(e, function (e) { + if ("function" != typeof e[1]) throw new Le(r); + return [n(e[0]), e[1]] + }) : [], Xr(function (n) { + for (var r = -1; ++r < t;) { + var i = e[r]; + if (Nt(i[0], this, n)) return Nt(i[1], this, n) + } + }) + }, Gn.conforms = function (e) { + return function (e) { + var t = Ro(e); + return function (n) { + return lr(n, e, t) + } + }(ur(e, 1)) + }, Gn.constant = tc, Gn.countBy = ma, Gn.create = function (e, t) { + return e = jn(e), null == t ? e : sr(e, t) + }, Gn.curry = function e(t, r, i) { + return (t = Zi(t, 8, n, n, n, n, n, r = i ? n : r)).placeholder = e.placeholder, t + }, Gn.curryRight = function e(t, r, i) { + return (t = Zi(t, 16, n, n, n, n, n, r = i ? n : r)).placeholder = e.placeholder, t + }, Gn.debounce = Da, Gn.defaults = No, Gn.defaultsDeep = bo, Gn.defer = ft, Gn.delay = wa, Gn.difference = ht, Gn.differenceBy = Se, Gn.differenceWith = In, Gn.drop = function (e, t, r) { + var i = null == e ? 0 : e.length; + return i ? ii(e, (t = r || t === n ? 1 : mo(t)) < 0 ? 0 : t, i) : [] + }, Gn.dropRight = function (e, t, r) { + var i = null == e ? 0 : e.length; + return i ? ii(e, 0, (t = i - (r || t === n ? 1 : mo(t))) < 0 ? 0 : t) : [] + }, Gn.dropRightWhile = function (e, t) { + return e && e.length ? di(e, us(t, 3), !0, !0) : [] + }, Gn.dropWhile = function (e, t) { + return e && e.length ? di(e, us(t, 3), !0) : [] + }, Gn.fill = function (e, t, r, i) { + var s = null == e ? 0 : e.length; + return s ? (r && "number" != typeof r && gs(e, t, r) && (r = 0, i = s), function (e, t, r, i) { + var s = e.length; + for ((r = mo(r)) < 0 && (r = s < -r ? 0 : s + r), (i = i === n || s < i ? s : mo(i)) < 0 && (i += s), i = i < r ? 0 : _o(i); r < i;) e[r++] = t; + return e + }(e, t, r, i)) : [] + }, Gn.filter = function (e, t) { + return (Ya(e) ? Lt : Er)(e, us(t, 3)) + }, Gn.flatMap = function (e, t) { + return Tr(Sa(e, t), 1) + }, Gn.flatMapDeep = function (e, t) { + return Tr(Sa(e, t), h) + }, Gn.flatMapDepth = function (e, t, r) { + return r = r === n ? 1 : mo(r), Tr(Sa(e, t), r) + }, Gn.flatten = Ks, Gn.flattenDeep = function (e) { + return null != e && e.length ? Tr(e, h) : [] + }, Gn.flattenDepth = function (e, t) { + return null != e && e.length ? Tr(e, t = t === n ? 1 : mo(t)) : [] + }, Gn.flip = function (e) { + return Zi(e, 512) + }, Gn.flow = nc, Gn.flowRight = rc, Gn.fromPairs = function (e) { + for (var t = -1, n = null == e ? 0 : e.length, r = {}; ++t < n;) { + var i = e[t]; + r[i[0]] = i[1] + } + return r + }, Gn.functions = function (e) { + return null == e ? [] : Sr(e, Ro(e)) + }, Gn.functionsIn = function (e) { + return null == e ? [] : Sr(e, wo(e)) + }, Gn.groupBy = ga, Gn.initial = function (e) { + return null != e && e.length ? ii(e, 0, -1) : [] + }, Gn.intersection = t, Gn.intersectionBy = xe, Gn.intersectionWith = dt, Gn.invert = ko, Gn.invertBy = Lo, Gn.invokeMap = va, Gn.iteratee = sc, Gn.keyBy = ya, Gn.keys = Ro, Gn.keysIn = wo, Gn.map = Sa, Gn.mapKeys = function (e, t) { + var n = {}; + return t = us(t, 3), vr(e, function (e, r, i) { + ar(n, t(e, r, i), e) + }), n + }, Gn.mapValues = function (e, t) { + var n = {}; + return t = us(t, 3), vr(e, function (e, r, i) { + ar(n, r, t(e, r, i)) + }), n + }, Gn.matches = function (e) { + return Gr(ur(e, 1)) + }, Gn.matchesProperty = function (e, t) { + return jr(e, ur(t, 1)) + }, Gn.memoize = xa, Gn.merge = xo, Gn.mergeWith = Mo, Gn.method = ac, Gn.methodOf = oc, Gn.mixin = cc, Gn.negate = Ma, Gn.nthArg = function (e) { + return e = mo(e), Xr(function (t) { + return Yr(t, e) + }) + }, Gn.omit = Po, Gn.omitBy = function (e, t) { + return Fo(e, Ma(us(t))) + }, Gn.once = function (e) { + return Oa(2, e) + }, Gn.orderBy = function (e, t, r, i) { + return null == e ? [] : Kr(e, t = Ya(t) ? t : null == t ? [] : [t], r = Ya(r = i ? n : r) ? r : null == r ? [] : [r]) + }, Gn.over = lc, Gn.overArgs = vi, Gn.overEvery = hc, Gn.overSome = fc, Gn.partial = Ba, Gn.partialRight = Fa, Gn.partition = Ca, Gn.pick = Bo, Gn.pickBy = Fo, Gn.property = pc, Gn.propertyOf = function (e) { + return function (t) { + return null == e ? n : Cr(e, t) + } + }, Gn.pull = Ye, Gn.pullAll = Zs, Gn.pullAllBy = function (e, t, n) { + return e && e.length && t && t.length ? Vr(e, t, us(n, 2)) : e + }, Gn.pullAllWith = function (e, t, r) { + return e && e.length && t && t.length ? Vr(e, t, n, r) : e + }, Gn.pullAt = Js, Gn.range = dc, Gn.rangeRight = mc, Gn.rearg = Ua, Gn.reject = function (e, t) { + return (Ya(e) ? Lt : Er)(e, Ma(us(t, 3))) + }, Gn.remove = function (e, t) { + var n = []; + if (e && e.length) { + var r = -1, i = [], s = e.length; + for (t = us(t, 3); ++r < s;) { + var a = e[r]; + t(a, r, e) && (n.push(a), i.push(r)) + } + $r(e, i) + } + return n + }, Gn.rest = function (e, t) { + if ("function" != typeof e) throw new Le(r); + return Xr(e, t = t === n ? t : mo(t)) + }, Gn.reverse = ea,Gn.sampleSize = function (e, t, r) { + return t = (r ? gs(e, t, r) : t === n) ? 1 : mo(t), (Ya(e) ? function (e, t) { + return Ms(Li(e), cr(t, 0, e.length)) + } : function (e, t) { + return Ms(e = Go(e), cr(t, 0, e.length)) + })(e, t) + },Gn.set = function (e, t, n) { + return null == e ? e : ei(e, t, n) + },Gn.setWith = function (e, t, r, i) { + return i = "function" == typeof i ? i : n, null == e ? e : ei(e, t, r, i) + },Gn.shuffle = function (e) { + return (Ya(e) ? function (e) { + return Ms(Li(e)) + } : function (e) { + return Ms(Go(e)) + })(e) + },Gn.slice = function (e, t, r) { + var i = null == e ? 0 : e.length; + return i ? (r = r && "number" != typeof r && gs(e, t, r) ? (t = 0, i) : (t = null == t ? 0 : mo(t), r === n ? i : mo(r)), ii(e, t, r)) : [] + },Gn.sortBy = Na,Gn.sortedUniq = function (e) { + return e && e.length ? ci(e) : [] + },Gn.sortedUniqBy = function (e, t) { + return e && e.length ? ci(e, us(t, 2)) : [] + },Gn.split = function (e, t, r) { + return r && "number" != typeof r && gs(e, t, r) && (t = r = n), (r = r === n ? d : r >>> 0) ? (e = Ao(e)) && ("string" == typeof t || null != t && !so(t)) && !(t = li(t)) && an(e) ? yi(pn(e), 0, r) : e.split(t, r) : [] + },Gn.spread = function (e, t) { + if ("function" != typeof e) throw new Le(r); + return t = null == t ? 0 : An(mo(t), 0), Xr(function (n) { + var r = n[t], n = yi(n, 0, t); + return r && xt(n, r), Nt(e, this, n) + }) + },Gn.tail = function (e) { + var t = null == e ? 0 : e.length; + return t ? ii(e, 1, t) : [] + },Gn.take = function (e, t, r) { + return e && e.length ? ii(e, 0, (t = r || t === n ? 1 : mo(t)) < 0 ? 0 : t) : [] + },Gn.takeRight = function (e, t, r) { + var i = null == e ? 0 : e.length; + return i ? ii(e, (t = i - (r || t === n ? 1 : mo(t))) < 0 ? 0 : t, i) : [] + },Gn.takeRightWhile = function (e, t) { + return e && e.length ? di(e, us(t, 3), !1, !0) : [] + },Gn.takeWhile = function (e, t) { + return e && e.length ? di(e, us(t, 3)) : [] + },Gn.tap = function (e, t) { + return t(e), e + },Gn.throttle = function (e, t, n) { + var i = !0, s = !0; + if ("function" != typeof e) throw new Le(r); + return eo(n) && (i = "leading" in n ? !!n.leading : i, s = "trailing" in n ? !!n.trailing : s), Da(e, t, { + leading: i, + maxWait: t, + trailing: s + }) + },Gn.thru = pa,Gn.toArray = fo,Gn.toPairs = Uo,Gn.toPairsIn = Ho,Gn.toPath = function (e) { + return Ya(e) ? wt(e, Bs) : co(e) ? [e] : Li(Ps(Ao(e))) + },Gn.toPlainObject = To,Gn.transform = function (e, t, n) { + var s, r = Ya(e), i = r || $a(e) || uo(e); + return t = us(t, 4), null == n && (s = e && e.constructor, n = i ? r ? new s : [] : eo(e) && Xa(s) ? jn(Ve(e)) : {}), (i ? It : vr)(e, function (e, r, i) { + return t(n, e, r, i) + }), n + },Gn.unary = function (e) { + return Ia(e, 1) + },Gn.union = ta,Gn.unionBy = na,Gn.unionWith = ra,Gn.uniq = function (e) { + return e && e.length ? hi(e) : [] + },Gn.uniqBy = function (e, t) { + return e && e.length ? hi(e, us(t, 2)) : [] + },Gn.uniqWith = function (e, t) { + return t = "function" == typeof t ? t : n, e && e.length ? hi(e, n, t) : [] + },Gn.unset = function (e, t) { + return null == e || fi(e, t) + },Gn.unzip = ia,Gn.unzipWith = sa,Gn.update = function (e, t, n) { + return null == e ? e : pi(e, t, Ai(n)) + },Gn.updateWith = function (e, t, r, i) { + return i = "function" == typeof i ? i : n, null == e ? e : pi(e, t, Ai(r), i) + },Gn.values = Go,Gn.valuesIn = function (e) { + return null == e ? [] : Zt(e, wo(e)) + },Gn.without = aa,Gn.words = Zo,Gn.wrap = function (e, t) { + return Ba(Ai(t), e) + },Gn.xor = oa,Gn.xorBy = ca,Gn.xorWith = ua,Gn.zip = la,Gn.zipObject = function (e, t) { + return Ei(e || [], t || [], nr) + },Gn.zipObjectDeep = function (e, t) { + return Ei(e || [], t || [], ei) + },Gn.zipWith = ha,Gn.entries = Uo,Gn.entriesIn = Ho,Gn.extend = vo,Gn.extendWith = yo,cc(Gn, Gn),Gn.add = Tc,Gn.attempt = Jo,Gn.camelCase = jo,Gn.capitalize = qo,Gn.ceil = Ac,Gn.clamp = function (e, t, r) { + return r === n && (r = t, t = n), r !== n && (r = (r = Eo(r)) == r ? r : 0), t !== n && (t = (t = Eo(t)) == t ? t : 0), cr(Eo(e), t, r) + },Gn.clone = function (e) { + return ur(e, 4) + },Gn.cloneDeep = function (e) { + return ur(e, 5) + },Gn.cloneDeepWith = function (e, t) { + return ur(e, 5, t = "function" == typeof t ? t : n) + },Gn.cloneWith = function (e, t) { + return ur(e, 4, t = "function" == typeof t ? t : n) + },Gn.conformsTo = function (e, t) { + return null == t || lr(e, t, Ro(t)) + },Gn.deburr = Yo,Gn.defaultTo = function (e, t) { + return null == e || e != e ? t : e + },Gn.divide = gc,Gn.endsWith = function (e, t, r) { + e = Ao(e), t = li(t); + var i = e.length, i = r = r === n ? i : cr(mo(r), 0, i); + return 0 <= (r -= t.length) && e.slice(r, i) == t + },Gn.eq = Ha,Gn.escape = function (e) { + return (e = Ao(e)) && Q.test(e) ? e.replace(V, rn) : e + },Gn.escapeRegExp = function (e) { + return (e = Ao(e)) && re.test(e) ? e.replace(ne, "\\$&") : e + },Gn.every = function (e, t, r) { + return (Ya(e) ? kt : function (e, t) { + var n = !0; + return pr(e, function (e, r, i) { + return n = !!t(e, r, i) + }), n + })(e, us(t = r && gs(e, t, r) ? n : t, 3)) + },Gn.find = _a,Gn.findIndex = qs,Gn.findKey = function (e, t) { + return Ut(e, us(t, 3), vr) + },Gn.findLast = Ea,Gn.findLastIndex = Ys,Gn.findLastKey = function (e, t) { + return Ut(e, us(t, 3), yr) + },Gn.floor = vc,Gn.forEach = Ta,Gn.forEachRight = Aa,Gn.forIn = function (e, t) { + return null == e ? e : Ar(e, us(t, 3), wo) + },Gn.forInRight = function (e, t) { + return null == e ? e : gr(e, us(t, 3), wo) + },Gn.forOwn = function (e, t) { + return e && vr(e, us(t, 3)) + },Gn.forOwnRight = function (e, t) { + return e && yr(e, us(t, 3)) + },Gn.get = Io,Gn.gt = Ga,Gn.gte = ja,Gn.has = function (e, t) { + return null != e && _s(e, t, Or) + },Gn.hasIn = Oo,Gn.head = Ws,Gn.identity = ic,Gn.includes = function (e, t, n, r) { + return e = Wa(e) ? e : Go(e), n = n && !r ? mo(n) : 0, r = e.length, n < 0 && (n = An(r + n, 0)), oo(e) ? n <= r && -1 < e.indexOf(t, n) : !!r && -1 < Gt(e, t, n) + },Gn.indexOf = function (e, t, n) { + var r = null == e ? 0 : e.length; + return r ? Gt(e, t, e = (e = null == n ? 0 : mo(n)) < 0 ? An(r + e, 0) : e) : -1 + },Gn.inRange = function (e, t, r) { + return t = po(t), r === n ? (r = t, t = 0) : r = po(r), function (e, t, n) { + return e >= gn(t, n) && e < An(t, n) + }(e = Eo(e), t, r) + },Gn.invoke = Do,Gn.isArguments = qa,Gn.isArray = Ya,Gn.isArrayBuffer = Ka,Gn.isArrayLike = Wa,Gn.isArrayLikeObject = Va,Gn.isBoolean = function (e) { + return !0 === e || !1 === e || to(e) && br(e) == T + },Gn.isBuffer = $a,Gn.isDate = Re,Gn.isElement = function (e) { + return to(e) && 1 === e.nodeType && !io(e) + },Gn.isEmpty = function (e) { + if (null != e) { + if (Wa(e) && (Ya(e) || "string" == typeof e || "function" == typeof e.splice || $a(e) || uo(e) || qa(e))) return !e.length; + var n, t = ms(e); + if (t == S || t == O) return !e.size; + if (Cs(e)) return !Br(e).length; + for (n in e) if (Pe.call(e, n)) return !1 + } + return !0 + },Gn.isEqual = function (e, t) { + return wr(e, t) + },Gn.isEqualWith = function (e, t, r) { + var i = (r = "function" == typeof r ? r : n) ? r(e, t) : n; + return i === n ? wr(e, t, n, r) : !!i + },Gn.isError = za,Gn.isFinite = function (e) { + return "number" == typeof e && Wt(e) + },Gn.isFunction = Xa,Gn.isInteger = Za,Gn.isLength = Ja,Gn.isMap = no,Gn.isMatch = function (e, t) { + return e === t || xr(e, t, hs(t)) + },Gn.isMatchWith = function (e, t, r) { + return r = "function" == typeof r ? r : n, xr(e, t, hs(t), r) + },Gn.isNaN = function (e) { + return ro(e) && e != +e + },Gn.isNative = function (e) { + if (Ss(e)) throw new Ce("Unsupported core-js use. Try https://npms.io/search?q=ponyfill."); + return Mr(e) + },Gn.isNil = function (e) { + return null == e + },Gn.isNull = function (e) { + return null === e + },Gn.isNumber = ro,Gn.isObject = eo,Gn.isObjectLike = to,Gn.isPlainObject = io,Gn.isRegExp = so,Gn.isSafeInteger = function (e) { + return Za(e) && -9007199254740991 <= e && e <= f + },Gn.isSet = ao,Gn.isString = oo,Gn.isSymbol = co,Gn.isTypedArray = uo,Gn.isUndefined = function (e) { + return e === n + },Gn.isWeakMap = function (e) { + return to(e) && ms(e) == D + },Gn.isWeakSet = function (e) { + return to(e) && "[object WeakSet]" == br(e) + },Gn.join = function (e, t) { + return null == e ? "" : En.call(e, t) + },Gn.kebabCase = Ko,Gn.last = zs,Gn.lastIndexOf = function (e, t, r) { + var s, i = null == e ? 0 : e.length; + return i ? (s = i, r !== n && (s = (s = mo(r)) < 0 ? An(i + s, 0) : gn(s, i - 1)), t == t ? function (e, t) { + for (var r = s + 1; r--;) if (e[r] === t) return r; + return r + }(e, t) : Ht(e, qt, s, !0)) : -1 + },Gn.lowerCase = Wo,Gn.lowerFirst = Vo,Gn.lt = lo,Gn.lte = ho,Gn.max = function (e) { + return e && e.length ? _r(e, ic, Ir) : n + },Gn.maxBy = function (e, t) { + return e && e.length ? _r(e, us(t, 2), Ir) : n + },Gn.mean = function (e) { + return Yt(e, ic) + },Gn.meanBy = function (e, t) { + return Yt(e, us(t, 2)) + },Gn.min = function (e) { + return e && e.length ? _r(e, ic, Ur) : n + },Gn.minBy = function (e, t) { + return e && e.length ? _r(e, us(t, 2), Ur) : n + },Gn.stubArray = _c,Gn.stubFalse = Ec,Gn.stubObject = function () { + return {} + },Gn.stubString = function () { + return "" + },Gn.stubTrue = function () { + return !0 + },Gn.multiply = Sc,Gn.nth = function (e, t) { + return e && e.length ? Yr(e, mo(t)) : n + },Gn.noConflict = function () { + return pt._ === this && (pt._ = Ge), this + },Gn.noop = uc,Gn.now = ba,Gn.pad = function (e, t, n) { + e = Ao(e); + var r = (t = mo(t)) ? fn(e) : 0; + return !t || t <= r ? e : Ki(Et(t = (t - r) / 2), n) + e + Ki(mt(t), n) + },Gn.padEnd = function (e, t, n) { + e = Ao(e); + var r = (t = mo(t)) ? fn(e) : 0; + return t && r < t ? e + Ki(t - r, n) : e + },Gn.padStart = function (e, t, n) { + e = Ao(e); + var r = (t = mo(t)) ? fn(e) : 0; + return t && r < t ? Ki(t - r, n) + e : e + },Gn.parseInt = function (e, t, n) { + return t = n || null == t ? 0 : t && +t, yn(Ao(e).replace(ie, ""), t || 0) + },Gn.random = function (e, t, r) { + var i; + return r && "boolean" != typeof r && gs(e, t, r) && (t = r = n), r === n && ("boolean" == typeof t ? (r = t, t = n) : "boolean" == typeof e && (r = e, e = n)), e === n && t === n ? (e = 0, t = 1) : (e = po(e), t === n ? (t = e, e = 0) : t = po(t)), t < e && (i = e, e = t, t = i), r || e % 1 || t % 1 ? (i = Sn(), gn(e + i * (t - e + ut("1e-" + ((i + "").length - 1))), t)) : Qr(e, t) + },Gn.reduce = function (e, t, n) { + var r = Ya(e) ? Mt : Vt, i = arguments.length < 3; + return r(e, us(t, 4), n, i, pr) + },Gn.reduceRight = function (e, t, n) { + var r = Ya(e) ? Pt : Vt, i = arguments.length < 3; + return r(e, us(t, 4), n, i, dr) + },Gn.repeat = function (e, t, r) { + return t = (r ? gs(e, t, r) : t === n) ? 1 : mo(t), zr(Ao(e), t) + },Gn.replace = function () { + var e = arguments, t = Ao(e[0]); + return e.length < 3 ? t : t.replace(e[1], e[2]) + },Gn.result = function (e, t, r) { + var i = -1, s = (t = gi(t, e)).length; + for (s || (s = 1, e = n); ++i < s;) { + var a = null == e ? n : e[Bs(t[i])]; + a === n && (i = s, a = r), e = Xa(a) ? a.call(e) : a + } + return e + },Gn.round = Cc,Gn.runInContext = e,Gn.sample = function (e) { + return (Ya(e) ? Zn : function (e) { + return Zn(Go(e)) + })(e) + },Gn.size = function (e) { + var t; + return null == e ? 0 : Wa(e) ? oo(e) ? fn(e) : e.length : (t = ms(e)) == S || t == O ? e.size : Br(e).length + },Gn.snakeCase = $o,Gn.some = function (e, t, r) { + return (Ya(e) ? Bt : function (e, t) { + var n; + return pr(e, function (e, r, i) { + return !(n = t(e, r, i)) + }), !!n + })(e, us(t = r && gs(e, t, r) ? n : t, 3)) + },Gn.sortedIndex = function (e, t) { + return ai(e, t) + },Gn.sortedIndexBy = function (e, t, n) { + return oi(e, t, us(n, 2)) + },Gn.sortedIndexOf = function (e, t) { + var n = null == e ? 0 : e.length; + if (n) { + var r = ai(e, t); + if (r < n && Ha(e[r], t)) return r + } + return -1 + },Gn.sortedLastIndex = function (e, t) { + return ai(e, t, !0) + },Gn.sortedLastIndexBy = function (e, t, n) { + return oi(e, t, us(n, 2), !0) + },Gn.sortedLastIndexOf = function (e, t) { + if (null != e && e.length) { + var n = ai(e, t, !0) - 1; + if (Ha(e[n], t)) return n + } + return -1 + },Gn.startCase = Qo,Gn.startsWith = function (e, t, n) { + return e = Ao(e), n = null == n ? 0 : cr(mo(n), 0, e.length), t = li(t), e.slice(n, n + t.length) == t + },Gn.subtract = Nc,Gn.sum = function (e) { + return e && e.length ? $t(e, ic) : 0 + },Gn.sumBy = function (e, t) { + return e && e.length ? $t(e, us(t, 2)) : 0 + },Gn.template = function (e, t, r) { + var i = Gn.templateSettings; + r && gs(e, t, r) && (t = n), e = Ao(e), t = yo({}, t, i, Ji); + var s, a, c = Ro(r = yo({}, t.imports, i.imports, Ji)), u = Zt(r, c), l = 0, i = t.interpolate || ge, + f = "__p += '", + r = Oe((t.escape || ge).source + "|" + i.source + "|" + (i === Z ? fe : ge).source + "|" + (t.evaluate || ge).source + "|$", "g"), + d = "//# sourceURL=" + (Pe.call(t, "sourceURL") ? (t.sourceURL + "").replace(/\s/g, " ") : "lodash.templateSources[" + ++st + "]") + "\n"; + if (e.replace(r, function (t, n, r, i, o, c) { + return r = r || i, f += e.slice(l, c).replace(ve, sn), n && (s = !0, f += "' +\n__e(" + n + ") +\n'"), o && (a = !0, f += "';\n" + o + ";\n__p += '"), r && (f += "' +\n((__t = (" + r + ")) == null ? '' : __t) +\n'"), l = c + t.length, t + }), f += "';\n", i = Pe.call(t, "variable") && t.variable) { + if (le.test(i)) throw new Ce("Invalid `variable` option passed into `_.template`") + } else f = "with (obj) {\n" + f + "\n}\n"; + if (f = (a ? f.replace(q, "") : f).replace(Y, "$1").replace(K, "$1;"), f = "function(" + (i || "obj") + ") {\n" + (i ? "" : "obj || (obj = {});\n") + "var __t, __p = ''" + (s ? ", __e = _.escape" : "") + (a ? ", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n" : ";\n") + f + "return __p\n}", (r = Jo(function () { + return Ne(c, d + "return " + f).apply(n, u) + })).source = f, za(r)) throw r; + return r + },Gn.times = function (e, t) { + if ((e = mo(e)) < 1 || f < e) return []; + var n = d, r = gn(e, d); + for (t = us(t), e -= d, r = Qt(r, t); ++n < e;) t(n); + return r + },Gn.toFinite = po,Gn.toInteger = mo,Gn.toLength = _o,Gn.toLower = function (e) { + return Ao(e).toLowerCase() + },Gn.toNumber = Eo,Gn.toSafeInteger = function (e) { + return e ? cr(mo(e), -9007199254740991, f) : 0 === e ? e : 0 + },Gn.toString = Ao,Gn.toUpper = function (e) { + return Ao(e).toUpperCase() + },Gn.trim = function (e, t, r) { + return (e = Ao(e)) && (r || t === n) ? zt(e) : e && (t = li(t)) ? yi(r = pn(e), en(r, t = pn(t)), tn(r, t) + 1).join("") : e + },Gn.trimEnd = function (e, t, r) { + return (e = Ao(e)) && (r || t === n) ? e.slice(0, dn(e) + 1) : e && (t = li(t)) ? yi(r = pn(e), 0, tn(r, pn(t)) + 1).join("") : e + },Gn.trimStart = function (e, t, r) { + return (e = Ao(e)) && (r || t === n) ? e.replace(ie, "") : e && (t = li(t)) ? yi(r = pn(e), en(r, pn(t))).join("") : e + },Gn.truncate = function (e, t) { + var s, r = 30, i = "...", + t = (eo(t) && (s = "separator" in t ? t.separator : s, r = "length" in t ? mo(t.length) : r, i = "omission" in t ? li(t.omission) : i), (e = Ao(e)).length); + if ((t = an(e) ? (o = pn(e)).length : t) <= r) return e; + if ((t = r - fn(i)) < 1) return i; + var o, r = o ? yi(o, 0, t).join("") : e.slice(0, t); + if (s !== n) if (o && (t += r.length - t), so(s)) { + if (e.slice(t).search(s)) { + var l, h = r; + for ((s = s.global ? s : Oe(s.source, Ao(pe.exec(s)) + "g")).lastIndex = 0; l = s.exec(h);) var f = l.index; + r = r.slice(0, f === n ? t : f) + } + } else e.indexOf(li(s), t) != t && -1 < (o = r.lastIndexOf(s)) && (r = r.slice(0, o)); + return r + i + },Gn.unescape = function (e) { + return (e = Ao(e)) && $.test(e) ? e.replace(W, mn) : e + },Gn.uniqueId = function (e) { + var t = ++Be; + return Ao(e) + t + },Gn.upperCase = zo,Gn.upperFirst = Xo,Gn.each = Ta,Gn.eachRight = Aa,Gn.first = Ws,cc(Gn, (yc = {}, vr(Gn, function (e, t) { + Pe.call(Gn.prototype, t) || (yc[t] = e) + }), yc), {chain: !1}),Gn.VERSION = "4.17.21",It(["bind", "bindKey", "curry", "curryRight", "partial", "partialRight"], function (e) { + Gn[e].placeholder = Gn + }),It(["drop", "take"], function (e, t) { + Kn.prototype[e] = function (r) { + r = r === n ? 1 : An(mo(r), 0); + var i = this.__filtered__ && !t ? new Kn(this) : this.clone(); + return i.__filtered__ ? i.__takeCount__ = gn(r, i.__takeCount__) : i.__views__.push({ + size: gn(r, d), + type: e + (i.__dir__ < 0 ? "Right" : "") + }), i + }, Kn.prototype[e + "Right"] = function (t) { + return this.reverse()[e](t).reverse() + } + }),It(["filter", "map", "takeWhile"], function (e, t) { + var n = t + 1, r = 1 == n || 3 == n; + Kn.prototype[e] = function (e) { + var t = this.clone(); + return t.__iteratees__.push({iteratee: us(e, 3), type: n}), t.__filtered__ = t.__filtered__ || r, t + } + }),It(["head", "last"], function (e, t) { + var n = "take" + (t ? "Right" : ""); + Kn.prototype[e] = function () { + return this[n](1).value()[0] + } + }),It(["initial", "tail"], function (e, t) { + var n = "drop" + (t ? "" : "Right"); + Kn.prototype[e] = function () { + return this.__filtered__ ? new Kn(this) : this[n](1) + } + }),Kn.prototype.compact = function () { + return this.filter(ic) + },Kn.prototype.find = function (e) { + return this.filter(e).head() + },Kn.prototype.findLast = function (e) { + return this.reverse().find(e) + },Kn.prototype.invokeMap = Xr(function (e, t) { + return "function" == typeof e ? new Kn(this) : this.map(function (n) { + return Dr(n, e, t) + }) + }),Kn.prototype.reject = function (e) { + return this.filter(Ma(us(e))) + },Kn.prototype.slice = function (e, t) { + e = mo(e); + var r = this; + return r.__filtered__ && (0 < e || t < 0) ? new Kn(r) : (e < 0 ? r = r.takeRight(-e) : e && (r = r.drop(e)), t !== n ? (t = mo(t)) < 0 ? r.dropRight(-t) : r.take(t - e) : r) + },Kn.prototype.takeRightWhile = function (e) { + return this.reverse().takeWhile(e).reverse() + },Kn.prototype.toArray = function () { + return this.take(d) + },vr(Kn.prototype, function (e, t) { + var r = /^(?:filter|find|map|reject)|While$/.test(t), i = /^(?:head|last)$/.test(t), + s = Gn[i ? "take" + ("last" == t ? "Right" : "") : t], a = i || /^find/.test(t); + s && (Gn.prototype[t] = function () { + function h(e) { + return e = s.apply(Gn, xt([e], o)), i && f ? e[0] : e + } + + var _, t = this.__wrapped__, o = i ? [1] : arguments, c = t instanceof Kn, u = o[0], l = c || Ya(t), + f = (l && r && "function" == typeof u && 1 != u.length && (c = l = !1), this.__chain__), + u = !!this.__actions__.length, d = a && !f, c = c && !u; + return !a && l ? (t = c ? t : new Kn(this), (_ = e.apply(t, o)).__actions__.push({ + func: pa, + args: [h], + thisArg: n + }), new Yn(_, f)) : d && c ? e.apply(this, o) : (_ = this.thru(h), d ? i ? _.value()[0] : _.value() : _) + }) + }),It(["pop", "push", "shift", "sort", "splice", "unshift"], function (e) { + var t = De[e], n = /^(?:push|sort|unshift)$/.test(e) ? "tap" : "thru", r = /^(?:pop|shift)$/.test(e); + Gn.prototype[e] = function () { + var i, e = arguments; + return r && !this.__chain__ ? (i = this.value(), t.apply(Ya(i) ? i : [], e)) : this[n](function (n) { + return t.apply(Ya(n) ? n : [], e) + }) + } + }),vr(Kn.prototype, function (e, t) { + var r, n = Gn[t]; + n && (r = n.name + "", Pe.call(Rn, r) || (Rn[r] = []), Rn[r].push({name: t, func: n})) + }),Rn[Gi(n, 2).name] = [{name: "wrapper", func: n}],Kn.prototype.clone = function () { + var e = new Kn(this.__wrapped__); + return e.__actions__ = Li(this.__actions__), e.__dir__ = this.__dir__, e.__filtered__ = this.__filtered__, e.__iteratees__ = Li(this.__iteratees__), e.__takeCount__ = this.__takeCount__, e.__views__ = Li(this.__views__), e + },Kn.prototype.reverse = function () { + var e; + return this.__filtered__ ? ((e = new Kn(this)).__dir__ = -1, e.__filtered__ = !0) : (e = this.clone()).__dir__ *= -1, e + },Kn.prototype.value = function () { + var e = this.__wrapped__.value(), t = this.__dir__, n = Ya(e), r = t < 0, i = n ? e.length : 0, + s = function (e, t, n) { + for (var r = -1, i = n.length; ++r < i;) { + var s = n[r], a = s.size; + switch (s.type) { + case"drop": + e += a; + break; + case"dropRight": + t -= a; + break; + case"take": + t = gn(t, e + a); + break; + case"takeRight": + e = An(e, t - a) + } + } + return {start: e, end: t} + }(0, i, this.__views__), a = s.start, c = (s = s.end) - a, u = r ? s : a - 1, + l = this.__iteratees__, h = l.length, f = 0, p = gn(c, this.__takeCount__); + if (!n || !r && i == c && p == c) return mi(e, this.__actions__); + var d = []; + e:for (; c-- && f < p;) { + for (var m = -1, _ = e[u += t]; ++m < h;) { + var T = (E = l[m]).iteratee, E = E.type, T = T(_); + if (2 == E) _ = T; else if (!T) { + if (1 == E) continue e; + break e + } + } + d[f++] = _ + } + return d + },Gn.prototype.at = da,Gn.prototype.chain = function () { + return fa(this) + },Gn.prototype.commit = function () { + return new Yn(this.value(), this.__chain__) + },Gn.prototype.next = function () { + this.__values__ === n && (this.__values__ = fo(this.value())); + var e = this.__index__ >= this.__values__.length; + return {done: e, value: e ? n : this.__values__[this.__index__++]} + },Gn.prototype.plant = function (e) { + for (var t, r = this; r instanceof qn;) var i = Us(r), s = (i.__index__ = 0, i.__values__ = n, t ? s.__wrapped__ = i : t = i, i), r = r.__wrapped__; + return s.__wrapped__ = e, t + },Gn.prototype.reverse = function () { + var e = this.__wrapped__; + return e instanceof Kn ? ((e = (e = this.__actions__.length ? new Kn(this) : e).reverse()).__actions__.push({ + func: pa, + args: [ea], + thisArg: n + }), new Yn(e, this.__chain__)) : this.thru(ea) + },Gn.prototype.toJSON = Gn.prototype.valueOf = Gn.prototype.value = function () { + return mi(this.__wrapped__, this.__actions__) + },Gn.prototype.first = Gn.prototype.head,et && (Gn.prototype[et] = function () { + return this + }),Gn + }(); + mt ? ((mt.exports = _n)._ = _n, He._ = _n) : pt._ = _n + }.call(gr) +}), dh = Sr(function (e, t) { + e.exports = function (e) { + var n; + if ("undefined" != typeof window && window.crypto && (n = window.crypto), "undefined" != typeof self && self.crypto && (n = self.crypto), !(n = !(n = !(n = "undefined" != typeof globalThis && globalThis.crypto ? globalThis.crypto : n) && "undefined" != typeof window && window.msCrypto ? window.msCrypto : n) && void 0 !== gr && gr.crypto ? gr.crypto : n)) try { + n = Zu + } catch (e) { + } + + function r() { + if (n) { + if ("function" == typeof n.getRandomValues) try { + return n.getRandomValues(new Uint32Array(1))[0] + } catch (e) { + } + if ("function" == typeof n.randomBytes) try { + return n.randomBytes(4).readInt32LE() + } catch (e) { + } + } + throw new Error("Native crypto module could not be used to get secure random number.") + } + + var i = Object.create || function () { + function e() { + } + + return function (t) { + return e.prototype = t, t = new e, e.prototype = null, t + } + }(), s = {}, a = s.lib = {}, o = a.Base = { + extend: function (e) { + var t = i(this); + return e && t.mixIn(e), t.hasOwnProperty("init") && this.init !== t.init || (t.init = function () { + t.$super.init.apply(this, arguments) + }), (t.init.prototype = t).$super = this, t + }, create: function () { + var e = this.extend(); + return e.init.apply(e, arguments), e + }, init: function () { + }, mixIn: function (e) { + for (var t in e) e.hasOwnProperty(t) && (this[t] = e[t]); + e.hasOwnProperty("toString") && (this.toString = e.toString) + }, clone: function () { + return this.init.prototype.extend(this) + } + }, c = a.WordArray = o.extend({ + init: function (e, n) { + e = this.words = e || [], this.sigBytes = null != n ? n : 4 * e.length + }, toString: function (e) { + return (e || l).stringify(this) + }, concat: function (e) { + var t = this.words, n = e.words, r = this.sigBytes, i = e.sigBytes; + if (this.clamp(), r % 4) for (var s = 0; s < i; s++) { + var a = n[s >>> 2] >>> 24 - s % 4 * 8 & 255; + t[r + s >>> 2] |= a << 24 - (r + s) % 4 * 8 + } else for (var o = 0; o < i; o += 4) t[r + o >>> 2] = n[o >>> 2]; + return this.sigBytes += i, this + }, clamp: function () { + var t = this.words, n = this.sigBytes; + t[n >>> 2] &= 4294967295 << 32 - n % 4 * 8, t.length = e.ceil(n / 4) + }, clone: function () { + var e = o.clone.call(this); + return e.words = this.words.slice(0), e + }, random: function (e) { + for (var t = [], n = 0; n < e; n += 4) t.push(r()); + return new c.init(t, e) + } + }), u = s.enc = {}, l = u.Hex = { + stringify: function (e) { + for (var t = e.words, n = e.sigBytes, r = [], i = 0; i < n; i++) { + var s = t[i >>> 2] >>> 24 - i % 4 * 8 & 255; + r.push((s >>> 4).toString(16)), r.push((15 & s).toString(16)) + } + return r.join("") + }, parse: function (e) { + for (var t = e.length, n = [], r = 0; r < t; r += 2) n[r >>> 3] |= parseInt(e.substr(r, 2), 16) << 24 - r % 8 * 4; + return new c.init(n, t / 2) + } + }, h = u.Latin1 = { + stringify: function (e) { + for (var t = e.words, n = e.sigBytes, r = [], i = 0; i < n; i++) { + var s = t[i >>> 2] >>> 24 - i % 4 * 8 & 255; + r.push(String.fromCharCode(s)) + } + return r.join("") + }, parse: function (e) { + for (var t = e.length, n = [], r = 0; r < t; r++) n[r >>> 2] |= (255 & e.charCodeAt(r)) << 24 - r % 4 * 8; + return new c.init(n, t) + } + }, f = u.Utf8 = { + stringify: function (e) { + try { + return decodeURIComponent(escape(h.stringify(e))) + } catch (e) { + throw new Error("Malformed UTF-8 data") + } + }, parse: function (e) { + return h.parse(unescape(encodeURIComponent(e))) + } + }, p = a.BufferedBlockAlgorithm = o.extend({ + reset: function () { + this._data = new c.init, this._nDataBytes = 0 + }, _append: function (e) { + "string" == typeof e && (e = f.parse(e)), this._data.concat(e), this._nDataBytes += e.sigBytes + }, _process: function (t) { + var n, r = this._data, i = r.words, s = r.sigBytes, a = this.blockSize, o = s / (4 * a), + u = (t ? e.ceil(o) : e.max((0 | o) - this._minBufferSize, 0)) * a, t = e.min(4 * u, s); + if (u) { + for (var h = 0; h < u; h += a) this._doProcessBlock(i, h); + n = i.splice(0, u), r.sigBytes -= t + } + return new c.init(n, t) + }, clone: function () { + var e = o.clone.call(this); + return e._data = this._data.clone(), e + }, _minBufferSize: 0 + }), d = (a.Hasher = p.extend({ + cfg: o.extend(), init: function (e) { + this.cfg = this.cfg.extend(e), this.reset() + }, reset: function () { + p.reset.call(this), this._doReset() + }, update: function (e) { + return this._append(e), this._process(), this + }, finalize: function (e) { + return e && this._append(e), this._doFinalize() + }, blockSize: 16, _createHelper: function (e) { + return function (t, n) { + return new e.init(n).finalize(t) + } + }, _createHmacHelper: function (e) { + return function (t, n) { + return new d.HMAC.init(e, n).finalize(t) + } + } + }), s.algo = {}); + return s + }(Math) +}), mh = (Sr(function (e, t) { + var s, a, i; + e.exports = (i = (e = dh).lib, s = i.Base, a = i.WordArray, (i = e.x64 = {}).Word = s.extend({ + init: function (e, t) { + this.high = e, this.low = t + } + }), i.WordArray = s.extend({ + init: function (e, t) { + e = this.words = e || [], this.sigBytes = null != t ? t : 8 * e.length + }, toX32: function () { + for (var e = this.words, t = e.length, n = [], r = 0; r < t; r++) { + var i = e[r]; + n.push(i.high), n.push(i.low) + } + return a.create(n, this.sigBytes) + }, clone: function () { + for (var e = s.clone.call(this), t = e.words = this.words.slice(0), n = t.length, r = 0; r < n; r++) t[r] = t[r].clone(); + return e + } + }), e) +}), Sr(function (e, t) { + var n; + e.exports = (n = dh, function () { + var e, t; + "function" == typeof ArrayBuffer && (e = n.lib.WordArray, t = e.init, (e.init = function (e) { + if ((e = (e = e instanceof ArrayBuffer ? new Uint8Array(e) : e) instanceof Int8Array || "undefined" != typeof Uint8ClampedArray && e instanceof Uint8ClampedArray || e instanceof Int16Array || e instanceof Uint16Array || e instanceof Int32Array || e instanceof Uint32Array || e instanceof Float32Array || e instanceof Float64Array ? new Uint8Array(e.buffer, e.byteOffset, e.byteLength) : e) instanceof Uint8Array) { + for (var n = e.byteLength, r = [], i = 0; i < n; i++) r[i >>> 2] |= e[i] << 24 - i % 4 * 8; + t.call(this, r, n) + } else t.apply(this, arguments) + }).prototype = e) + }(), n.lib.WordArray) +}), Sr(function (e, t) { + var n; + e.exports = (n = dh, function () { + var t = n.lib.WordArray, r = n.enc; + + function i(e) { + return e << 8 & 4278255360 | e >>> 8 & 16711935 + } + + r.Utf16 = r.Utf16BE = { + stringify: function (e) { + for (var t = e.words, n = e.sigBytes, r = [], i = 0; i < n; i += 2) { + var s = t[i >>> 2] >>> 16 - i % 4 * 8 & 65535; + r.push(String.fromCharCode(s)) + } + return r.join("") + }, parse: function (e) { + for (var n = e.length, r = [], i = 0; i < n; i++) r[i >>> 1] |= e.charCodeAt(i) << 16 - i % 2 * 16; + return t.create(r, 2 * n) + } + }, r.Utf16LE = { + stringify: function (e) { + for (var t = e.words, n = e.sigBytes, r = [], s = 0; s < n; s += 2) { + var a = i(t[s >>> 2] >>> 16 - s % 4 * 8 & 65535); + r.push(String.fromCharCode(a)) + } + return r.join("") + }, parse: function (e) { + for (var n = e.length, r = [], s = 0; s < n; s++) r[s >>> 1] |= i(e.charCodeAt(s) << 16 - s % 2 * 16); + return t.create(r, 2 * n) + } + } + }(), n.enc.Utf16) +}), Sr(function (e, t) { + var n; + e.exports = (n = dh, function () { + var e = n, t = e.lib.WordArray; + + function r(e, n, r) { + for (var o, i = [], s = 0, a = 0; a < n; a++) a % 4 && (o = r[e.charCodeAt(a - 1)] << a % 4 * 2 | r[e.charCodeAt(a)] >>> 6 - a % 4 * 2, i[s >>> 2] |= o << 24 - s % 4 * 8, s++); + return t.create(i, s) + } + + e.enc.Base64 = { + stringify: function (e) { + var t = e.words, n = e.sigBytes, r = this._map; + e.clamp(); + for (var i = [], s = 0; s < n; s += 3) for (var a = (t[s >>> 2] >>> 24 - s % 4 * 8 & 255) << 16 | (t[s + 1 >>> 2] >>> 24 - (s + 1) % 4 * 8 & 255) << 8 | t[s + 2 >>> 2] >>> 24 - (s + 2) % 4 * 8 & 255, o = 0; o < 4 && s + .75 * o < n; o++) i.push(r.charAt(a >>> 6 * (3 - o) & 63)); + var c = r.charAt(64); + if (c) for (; i.length % 4;) i.push(c); + return i.join("") + }, parse: function (e) { + var t = e.length, n = this._map; + if (!(i = this._reverseMap)) for (var i = this._reverseMap = [], s = 0; s < n.length; s++) i[n.charCodeAt(s)] = s; + var a = n.charAt(64); + return a && -1 !== (a = e.indexOf(a)) && (t = a), r(e, t, i) + }, _map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" + } + }(), n.enc.Base64) +}), Sr(function (e, t) { + var n; + e.exports = (n = dh, function () { + var e = n, t = e.lib.WordArray; + + function r(e, n, r) { + for (var o, i = [], s = 0, a = 0; a < n; a++) a % 4 && (o = r[e.charCodeAt(a - 1)] << a % 4 * 2 | r[e.charCodeAt(a)] >>> 6 - a % 4 * 2, i[s >>> 2] |= o << 24 - s % 4 * 8, s++); + return t.create(i, s) + } + + e.enc.Base64url = { + stringify: function (e, t = !0) { + var n = e.words, r = e.sigBytes, i = t ? this._safe_map : this._map; + e.clamp(); + for (var s = [], a = 0; a < r; a += 3) for (var o = (n[a >>> 2] >>> 24 - a % 4 * 8 & 255) << 16 | (n[a + 1 >>> 2] >>> 24 - (a + 1) % 4 * 8 & 255) << 8 | n[a + 2 >>> 2] >>> 24 - (a + 2) % 4 * 8 & 255, c = 0; c < 4 && a + .75 * c < r; c++) s.push(i.charAt(o >>> 6 * (3 - c) & 63)); + var u = i.charAt(64); + if (u) for (; s.length % 4;) s.push(u); + return s.join("") + }, + parse: function (e, t = !0) { + var n = e.length, i = t ? this._safe_map : this._map; + if (!(s = this._reverseMap)) for (var s = this._reverseMap = [], a = 0; a < i.length; a++) s[i.charCodeAt(a)] = a; + return (t = i.charAt(64)) && -1 !== (t = e.indexOf(t)) && (n = t), r(e, n, s) + }, + _map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", + _safe_map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_" + } + }(), n.enc.Base64url) +}), Sr(function (e, t) { + var n; + e.exports = (n = dh, function (e) { + var t = n, i = (r = t.lib).WordArray, s = r.Hasher, r = t.algo, o = [], r = (function () { + for (var t = 0; t < 64; t++) o[t] = 4294967296 * e.abs(e.sin(t + 1)) | 0 + }(), r.MD5 = s.extend({ + _doReset: function () { + this._hash = new i.init([1732584193, 4023233417, 2562383102, 271733878]) + }, _doProcessBlock: function (e, t) { + for (var n = 0; n < 16; n++) { + var r = t + n, i = e[r]; + e[r] = 16711935 & (i << 8 | i >>> 24) | 4278255360 & (i << 24 | i >>> 8) + } + var s = this._hash.words, a = e[t + 0], c = e[t + 1], p = e[t + 2], d = e[t + 3], m = e[t + 4], + _ = e[t + 5], E = e[t + 6], T = e[t + 7], A = e[t + 8], g = e[t + 9], v = e[t + 10], y = e[t + 11], + S = e[t + 12], C = e[t + 13], N = e[t + 14], b = e[t + 15], + I = u(s[0], O = s[1], k = s[2], L = s[3], a, 7, o[0]), L = u(L, I, O, k, c, 12, o[1]), + k = u(k, L, I, O, p, 17, o[2]), O = u(O, k, L, I, d, 22, o[3]), I = u(I, O, k, L, m, 7, o[4]), + L = u(L, I, O, k, _, 12, o[5]), k = u(k, L, I, O, E, 17, o[6]), O = u(O, k, L, I, T, 22, o[7]); + I = u(I, O, k, L, A, 7, o[8]), L = u(L, I, O, k, g, 12, o[9]), k = u(k, L, I, O, v, 17, o[10]), O = u(O, k, L, I, y, 22, o[11]), I = u(I, O, k, L, S, 7, o[12]), L = u(L, I, O, k, C, 12, o[13]), k = u(k, L, I, O, N, 17, o[14]), I = l(I, O = u(O, k, L, I, b, 22, o[15]), k, L, c, 5, o[16]), L = l(L, I, O, k, E, 9, o[17]), k = l(k, L, I, O, y, 14, o[18]), O = l(O, k, L, I, a, 20, o[19]), I = l(I, O, k, L, _, 5, o[20]), L = l(L, I, O, k, v, 9, o[21]), k = l(k, L, I, O, b, 14, o[22]), O = l(O, k, L, I, m, 20, o[23]), I = l(I, O, k, L, g, 5, o[24]), L = l(L, I, O, k, N, 9, o[25]), k = l(k, L, I, O, d, 14, o[26]), O = l(O, k, L, I, A, 20, o[27]), I = l(I, O, k, L, C, 5, o[28]), L = l(L, I, O, k, p, 9, o[29]), k = l(k, L, I, O, T, 14, o[30]), I = h(I, O = l(O, k, L, I, S, 20, o[31]), k, L, _, 4, o[32]), L = h(L, I, O, k, A, 11, o[33]), k = h(k, L, I, O, y, 16, o[34]), O = h(O, k, L, I, N, 23, o[35]), I = h(I, O, k, L, c, 4, o[36]), L = h(L, I, O, k, m, 11, o[37]), k = h(k, L, I, O, T, 16, o[38]), O = h(O, k, L, I, v, 23, o[39]), I = h(I, O, k, L, C, 4, o[40]), L = h(L, I, O, k, a, 11, o[41]), k = h(k, L, I, O, d, 16, o[42]), O = h(O, k, L, I, E, 23, o[43]), I = h(I, O, k, L, g, 4, o[44]), L = h(L, I, O, k, S, 11, o[45]), k = h(k, L, I, O, b, 16, o[46]), I = f(I, O = h(O, k, L, I, p, 23, o[47]), k, L, a, 6, o[48]), L = f(L, I, O, k, T, 10, o[49]), k = f(k, L, I, O, N, 15, o[50]), O = f(O, k, L, I, _, 21, o[51]), I = f(I, O, k, L, S, 6, o[52]), L = f(L, I, O, k, d, 10, o[53]), k = f(k, L, I, O, v, 15, o[54]), O = f(O, k, L, I, c, 21, o[55]), I = f(I, O, k, L, A, 6, o[56]), L = f(L, I, O, k, b, 10, o[57]), k = f(k, L, I, O, E, 15, o[58]), O = f(O, k, L, I, C, 21, o[59]), I = f(I, O, k, L, m, 6, o[60]), L = f(L, I, O, k, y, 10, o[61]), k = f(k, L, I, O, p, 15, o[62]), O = f(O, k, L, I, g, 21, o[63]), s[0] = s[0] + I | 0, s[1] = s[1] + O | 0, s[2] = s[2] + k | 0, s[3] = s[3] + L | 0 + }, _doFinalize: function () { + var t = this._data, n = t.words, r = 8 * this._nDataBytes, i = 8 * t.sigBytes, + s = (n[i >>> 5] |= 128 << 24 - i % 32, e.floor(r / 4294967296)); + n[15 + (64 + i >>> 9 << 4)] = 16711935 & (s << 8 | s >>> 24) | 4278255360 & (s << 24 | s >>> 8), n[14 + (64 + i >>> 9 << 4)] = 16711935 & (r << 8 | r >>> 24) | 4278255360 & (r << 24 | r >>> 8), t.sigBytes = 4 * (n.length + 1), this._process(); + for (var c = (s = this._hash).words, u = 0; u < 4; u++) { + var l = c[u]; + c[u] = 16711935 & (l << 8 | l >>> 24) | 4278255360 & (l << 24 | l >>> 8) + } + return s + }, clone: function () { + var e = s.clone.call(this); + return e._hash = this._hash.clone(), e + } + })); + + function u(e, t, n, r, i, s, a) { + return ((e = e + (t & n | ~t & r) + i + a) << s | e >>> 32 - s) + t + } + + function l(e, t, n, r, i, s, a) { + return ((e = e + (t & r | n & ~r) + i + a) << s | e >>> 32 - s) + t + } + + function h(e, t, n, r, i, s, a) { + return ((e = e + (t ^ n ^ r) + i + a) << s | e >>> 32 - s) + t + } + + function f(e, t, n, r, i, s, a) { + return ((e = e + (n ^ (t | ~r)) + i + a) << s | e >>> 32 - s) + t + } + + t.MD5 = s._createHelper(r), t.HmacMD5 = s._createHmacHelper(r) + }(Math), n.MD5) +}), Sr(function (e, t) { + var n; + e.exports = (n = dh, function () { + var e = n, r = (t = e.lib).WordArray, i = t.Hasher, t = e.algo, a = [], t = t.SHA1 = i.extend({ + _doReset: function () { + this._hash = new r.init([1732584193, 4023233417, 2562383102, 271733878, 3285377520]) + }, _doProcessBlock: function (e, t) { + for (var n = this._hash.words, r = n[0], i = n[1], s = n[2], o = n[3], c = n[4], u = 0; u < 80; u++) { + a[u] = u < 16 ? 0 | e[t + u] : (l = a[u - 3] ^ a[u - 8] ^ a[u - 14] ^ a[u - 16]) << 1 | l >>> 31; + var l = (r << 5 | r >>> 27) + c + a[u]; + l += u < 20 ? 1518500249 + (i & s | ~i & o) : u < 40 ? 1859775393 + (i ^ s ^ o) : u < 60 ? (i & s | i & o | s & o) - 1894007588 : (i ^ s ^ o) - 899497514, c = o, o = s, s = i << 30 | i >>> 2, i = r, r = l + } + n[0] = n[0] + r | 0, n[1] = n[1] + i | 0, n[2] = n[2] + s | 0, n[3] = n[3] + o | 0, n[4] = n[4] + c | 0 + }, _doFinalize: function () { + var e = this._data, t = e.words, n = 8 * this._nDataBytes, r = 8 * e.sigBytes; + return t[r >>> 5] |= 128 << 24 - r % 32, t[14 + (64 + r >>> 9 << 4)] = Math.floor(n / 4294967296), t[15 + (64 + r >>> 9 << 4)] = n, e.sigBytes = 4 * t.length, this._process(), this._hash + }, clone: function () { + var e = i.clone.call(this); + return e._hash = this._hash.clone(), e + } + }); + e.SHA1 = i._createHelper(t), e.HmacSHA1 = i._createHmacHelper(t) + }(), n.SHA1) +}), Sr(function (e, t) { + var n; + e.exports = (n = dh, function (e) { + var t = n, i = (r = t.lib).WordArray, s = r.Hasher, r = t.algo, o = [], c = [], u = (function () { + function n(e) { + return 4294967296 * (e - (0 | e)) | 0 + } + + for (var r = 2, i = 0; i < 64;) !function (t) { + for (var n = e.sqrt(t), r = 2; r <= n; r++) if (!(t % r)) return; + return 1 + }(r) || (i < 8 && (o[i] = n(e.pow(r, .5))), c[i] = n(e.pow(r, 1 / 3)), i++), r++ + }(), []), r = r.SHA256 = s.extend({ + _doReset: function () { + this._hash = new i.init(o.slice(0)) + }, _doProcessBlock: function (e, t) { + for (var n = this._hash.words, r = n[0], i = n[1], s = n[2], a = n[3], o = n[4], l = n[5], h = n[6], f = n[7], p = 0; p < 64; p++) { + u[p] = p < 16 ? 0 | e[t + p] : (((d = u[p - 15]) << 25 | d >>> 7) ^ (d << 14 | d >>> 18) ^ d >>> 3) + u[p - 7] + (((d = u[p - 2]) << 15 | d >>> 17) ^ (d << 13 | d >>> 19) ^ d >>> 10) + u[p - 16]; + var d = r & i ^ r & s ^ i & s, + g = f + ((o << 26 | o >>> 6) ^ (o << 21 | o >>> 11) ^ (o << 7 | o >>> 25)) + (o & l ^ ~o & h) + c[p] + u[p], + f = h, h = l, l = o, o = a + g | 0, a = s, s = i, i = r, + r = g + (((r << 30 | r >>> 2) ^ (r << 19 | r >>> 13) ^ (r << 10 | r >>> 22)) + d) | 0 + } + n[0] = n[0] + r | 0, n[1] = n[1] + i | 0, n[2] = n[2] + s | 0, n[3] = n[3] + a | 0, n[4] = n[4] + o | 0, n[5] = n[5] + l | 0, n[6] = n[6] + h | 0, n[7] = n[7] + f | 0 + }, _doFinalize: function () { + var t = this._data, n = t.words, r = 8 * this._nDataBytes, i = 8 * t.sigBytes; + return n[i >>> 5] |= 128 << 24 - i % 32, n[14 + (64 + i >>> 9 << 4)] = e.floor(r / 4294967296), n[15 + (64 + i >>> 9 << 4)] = r, t.sigBytes = 4 * n.length, this._process(), this._hash + }, clone: function () { + var e = s.clone.call(this); + return e._hash = this._hash.clone(), e + } + }); + t.SHA256 = s._createHelper(r), t.HmacSHA256 = s._createHmacHelper(r) + }(Math), n.SHA256) +}), Sr(function (e, t) { + var n, r, s, i; + e.exports = (r = (n = e = dh).lib.WordArray, i = n.algo, s = i.SHA256, i = i.SHA224 = s.extend({ + _doReset: function () { + this._hash = new r.init([3238371032, 914150663, 812702999, 4144912697, 4290775857, 1750603025, 1694076839, 3204075428]) + }, _doFinalize: function () { + var e = s._doFinalize.call(this); + return e.sigBytes -= 4, e + } + }), n.SHA224 = s._createHelper(i), n.HmacSHA224 = s._createHmacHelper(i), e.SHA224) +}), Sr(function (e, t) { + var n; + e.exports = (n = dh, function () { + var e = n, t = e.lib.Hasher, i = (r = e.x64).Word, s = r.WordArray, r = e.algo; + + function o() { + return i.create.apply(i, arguments) + } + + var c = [o(1116352408, 3609767458), o(1899447441, 602891725), o(3049323471, 3964484399), o(3921009573, 2173295548), o(961987163, 4081628472), o(1508970993, 3053834265), o(2453635748, 2937671579), o(2870763221, 3664609560), o(3624381080, 2734883394), o(310598401, 1164996542), o(607225278, 1323610764), o(1426881987, 3590304994), o(1925078388, 4068182383), o(2162078206, 991336113), o(2614888103, 633803317), o(3248222580, 3479774868), o(3835390401, 2666613458), o(4022224774, 944711139), o(264347078, 2341262773), o(604807628, 2007800933), o(770255983, 1495990901), o(1249150122, 1856431235), o(1555081692, 3175218132), o(1996064986, 2198950837), o(2554220882, 3999719339), o(2821834349, 766784016), o(2952996808, 2566594879), o(3210313671, 3203337956), o(3336571891, 1034457026), o(3584528711, 2466948901), o(113926993, 3758326383), o(338241895, 168717936), o(666307205, 1188179964), o(773529912, 1546045734), o(1294757372, 1522805485), o(1396182291, 2643833823), o(1695183700, 2343527390), o(1986661051, 1014477480), o(2177026350, 1206759142), o(2456956037, 344077627), o(2730485921, 1290863460), o(2820302411, 3158454273), o(3259730800, 3505952657), o(3345764771, 106217008), o(3516065817, 3606008344), o(3600352804, 1432725776), o(4094571909, 1467031594), o(275423344, 851169720), o(430227734, 3100823752), o(506948616, 1363258195), o(659060556, 3750685593), o(883997877, 3785050280), o(958139571, 3318307427), o(1322822218, 3812723403), o(1537002063, 2003034995), o(1747873779, 3602036899), o(1955562222, 1575990012), o(2024104815, 1125592928), o(2227730452, 2716904306), o(2361852424, 442776044), o(2428436474, 593698344), o(2756734187, 3733110249), o(3204031479, 2999351573), o(3329325298, 3815920427), o(3391569614, 3928383900), o(3515267271, 566280711), o(3940187606, 3454069534), o(4118630271, 4000239992), o(116418474, 1914138554), o(174292421, 2731055270), o(289380356, 3203993006), o(460393269, 320620315), o(685471733, 587496836), o(852142971, 1086792851), o(1017036298, 365543100), o(1126000580, 2618297676), o(1288033470, 3409855158), o(1501505948, 4234509866), o(1607167915, 987167468), o(1816402316, 1246189591)], + u = [], r = (function () { + for (var e = 0; e < 80; e++) u[e] = o() + }(), r.SHA512 = t.extend({ + _doReset: function () { + this._hash = new s.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 (e, t) { + for (var r = (n = this._hash.words)[0], i = n[1], s = n[2], a = n[3], o = n[4], l = n[5], h = n[6], n = n[7], p = r.high, d = r.low, m = i.high, _ = i.low, E = s.high, T = s.low, A = a.high, g = a.low, v = o.high, y = o.low, S = l.high, C = l.low, N = h.high, b = h.low, I = n.high, O = n.low, k = p, L = d, D = m, R = _, w = E, x = T, M = A, P = g, B = v, F = y, U = S, H = C, G = N, j = b, q = I, Y = O, K = 0; K < 80; K++) { + var W, V, $ = u[K]; + K < 16 ? (V = $.high = 0 | e[t + 2 * K], W = $.low = 0 | e[t + 2 * K + 1]) : (z = (Q = u[K - 15]).high, Q = Q.low, te = (ee = u[K - 2]).high, ee = ee.low, V = (V = (V = ((z >>> 1 | Q << 31) ^ (z >>> 8 | Q << 24) ^ z >>> 7) + (se = u[K - 7]).high + ((W = (Q = (Q >>> 1 | z << 31) ^ (Q >>> 8 | z << 24) ^ (Q >>> 7 | z << 25)) + se.low) >>> 0 < Q >>> 0 ? 1 : 0)) + ((te >>> 19 | ee << 13) ^ (te << 3 | ee >>> 29) ^ te >>> 6) + ((W += z = (ee >>> 19 | te << 13) ^ (ee << 3 | te >>> 29) ^ (ee >>> 6 | te << 26)) >>> 0 < z >>> 0 ? 1 : 0)) + (se = u[K - 16]).high + ((W += Q = se.low) >>> 0 < Q >>> 0 ? 1 : 0), $.high = V, $.low = W); + var he, ee = B & U ^ ~B & G, te = F & H ^ ~F & j, z = k & D ^ k & w ^ D & w, + se = (L >>> 28 | k << 4) ^ (L << 30 | k >>> 2) ^ (L << 25 | k >>> 7), Q = c[K], $ = Q.high, + ye = Q.low, + Se = q + ((B >>> 14 | F << 18) ^ (B >>> 18 | F << 14) ^ (B << 23 | F >>> 9)) + ((he = Y + ((F >>> 14 | B << 18) ^ (F >>> 18 | B << 14) ^ (F << 23 | B >>> 9))) >>> 0 < Y >>> 0 ? 1 : 0), + Ce = se + (L & R ^ L & x ^ R & x), q = G, Y = j, G = U, j = H, U = B, H = F, + B = M + (Se = Se + ee + ((he += te) >>> 0 < te >>> 0 ? 1 : 0) + $ + ((he += ye) >>> 0 < ye >>> 0 ? 1 : 0) + V + ((he += W) >>> 0 < W >>> 0 ? 1 : 0)) + ((F = P + he | 0) >>> 0 < P >>> 0 ? 1 : 0) | 0, + M = w, P = x, w = D, x = R, D = k, R = L, + k = Se + (((k >>> 28 | L << 4) ^ (k << 30 | L >>> 2) ^ (k << 25 | L >>> 7)) + z + (Ce >>> 0 < se >>> 0 ? 1 : 0)) + ((L = he + Ce | 0) >>> 0 < he >>> 0 ? 1 : 0) | 0 + } + d = r.low = d + L, r.high = p + k + (d >>> 0 < L >>> 0 ? 1 : 0), _ = i.low = _ + R, i.high = m + D + (_ >>> 0 < R >>> 0 ? 1 : 0), T = s.low = T + x, s.high = E + w + (T >>> 0 < x >>> 0 ? 1 : 0), g = a.low = g + P, a.high = A + M + (g >>> 0 < P >>> 0 ? 1 : 0), y = o.low = y + F, o.high = v + B + (y >>> 0 < F >>> 0 ? 1 : 0), C = l.low = C + H, l.high = S + U + (C >>> 0 < H >>> 0 ? 1 : 0), b = h.low = b + j, h.high = N + G + (b >>> 0 < j >>> 0 ? 1 : 0), O = n.low = O + Y, n.high = I + q + (O >>> 0 < Y >>> 0 ? 1 : 0) + }, _doFinalize: function () { + var e = this._data, t = e.words, n = 8 * this._nDataBytes, r = 8 * e.sigBytes; + return t[r >>> 5] |= 128 << 24 - r % 32, t[30 + (128 + r >>> 10 << 5)] = Math.floor(n / 4294967296), t[31 + (128 + r >>> 10 << 5)] = n, e.sigBytes = 4 * t.length, this._process(), this._hash.toX32() + }, clone: function () { + var e = t.clone.call(this); + return e._hash = this._hash.clone(), e + }, blockSize: 32 + })); + e.SHA512 = t._createHelper(r), e.HmacSHA512 = t._createHmacHelper(r) + }(), n.SHA512) +}), Sr(function (e, t) { + var n, i, s, o, r; + e.exports = (r = (n = e = dh).x64, i = r.Word, s = r.WordArray, r = n.algo, o = r.SHA512, r = r.SHA384 = o.extend({ + _doReset: function () { + this._hash = new s.init([new i.init(3418070365, 3238371032), new i.init(1654270250, 914150663), new i.init(2438529370, 812702999), new i.init(355462360, 4144912697), new i.init(1731405415, 4290775857), new i.init(2394180231, 1750603025), new i.init(3675008525, 1694076839), new i.init(1203062813, 3204075428)]) + }, _doFinalize: function () { + var e = o._doFinalize.call(this); + return e.sigBytes -= 16, e + } + }), n.SHA384 = o._createHelper(r), n.HmacSHA384 = o._createHmacHelper(r), e.SHA384) +}), Sr(function (e, t) { + var n; + e.exports = (n = dh, function (e) { + var t = n, i = (r = t.lib).WordArray, s = r.Hasher, a = t.x64.Word, r = t.algo, c = [], u = [], l = [], + h = (function () { + for (var e = 1, t = 0, n = 0; n < 24; n++) { + c[e + 5 * t] = (n + 1) * (n + 2) / 2 % 64; + var r = (2 * e + 3 * t) % 5, e = t % 5, t = r + } + for (e = 0; e < 5; e++) for (t = 0; t < 5; t++) u[e + 5 * t] = t + (2 * e + 3 * t) % 5 * 5; + for (var i = 1, s = 0; s < 24; s++) { + for (var p, o = 0, h = 0, f = 0; f < 7; f++) 1 & i && ((p = (1 << f) - 1) < 32 ? h ^= 1 << p : o ^= 1 << p - 32), 128 & i ? i = i << 1 ^ 113 : i <<= 1; + l[s] = a.create(o, h) + } + }(), []), r = (function () { + for (var e = 0; e < 25; e++) h[e] = a.create() + }(), r.SHA3 = s.extend({ + cfg: s.cfg.extend({outputLength: 512}), _doReset: function () { + for (var e = this._state = [], t = 0; t < 25; t++) e[t] = new a.init; + this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32 + }, _doProcessBlock: function (e, t) { + for (var n = this._state, r = this.blockSize / 2, i = 0; i < r; i++) { + var s = e[t + 2 * i], a = e[t + 2 * i + 1], + s = 16711935 & (s << 8 | s >>> 24) | 4278255360 & (s << 24 | s >>> 8); + (O = n[i]).high ^= 16711935 & (a << 8 | a >>> 24) | 4278255360 & (a << 24 | a >>> 8), O.low ^= s + } + for (var o = 0; o < 24; o++) { + for (var f = 0; f < 5; f++) { + for (var p = 0, d = 0, m = 0; m < 5; m++) p ^= (O = n[f + 5 * m]).high, d ^= O.low; + var _ = h[f]; + _.high = p, _.low = d + } + for (f = 0; f < 5; f++) for (var E = h[(f + 4) % 5], A = (T = h[(f + 1) % 5]).high, T = T.low, p = E.high ^ (A << 1 | T >>> 31), d = E.low ^ (T << 1 | A >>> 31), m = 0; m < 5; m++) (O = n[f + 5 * m]).high ^= p, O.low ^= d; + for (var v = 1; v < 25; v++) { + var y = (O = n[v]).high, S = O.low, C = c[v]; + d = C < 32 ? (p = y << C | S >>> 32 - C, S << C | y >>> 32 - C) : (p = S << C - 32 | y >>> 64 - C, y << C - 32 | S >>> 64 - C), (y = h[u[v]]).high = p, y.low = d + } + var b = h[0], I = n[0]; + for (b.high = I.high, b.low = I.low, f = 0; f < 5; f++) for (m = 0; m < 5; m++) { + var O = n[v = f + 5 * m], k = h[v], L = h[(f + 1) % 5 + 5 * m], D = h[(f + 2) % 5 + 5 * m]; + O.high = k.high ^ ~L.high & D.high, O.low = k.low ^ ~L.low & D.low + } + (O = n[0]).high ^= (b = l[o]).high, O.low ^= b.low + } + }, _doFinalize: function () { + var t = this._data, n = t.words, r = (this._nDataBytes, 8 * t.sigBytes), s = 32 * this.blockSize; + n[r >>> 5] |= 1 << 24 - r % 32, n[(e.ceil((1 + r) / s) * s >>> 5) - 1] |= 128, t.sigBytes = 4 * n.length, this._process(); + for (var a = this._state, c = (r = this.cfg.outputLength / 8) / 8, u = [], l = 0; l < c; l++) { + var f = (h = a[l]).high, h = h.low, + f = 16711935 & (f << 8 | f >>> 24) | 4278255360 & (f << 24 | f >>> 8); + u.push(16711935 & (h << 8 | h >>> 24) | 4278255360 & (h << 24 | h >>> 8)), u.push(f) + } + return new i.init(u, r) + }, clone: function () { + for (var e = s.clone.call(this), t = e._state = this._state.slice(0), n = 0; n < 25; n++) t[n] = t[n].clone(); + return e + } + })); + t.SHA3 = s._createHelper(r), t.HmacSHA3 = s._createHmacHelper(r) + }(Math), n.SHA3) +}), Sr(function (e, t) { + var n; + e.exports = (n = dh, function () { + var t = n, i = (r = t.lib).WordArray, s = r.Hasher, r = t.algo, + o = 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]), + c = 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]), + u = 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]), + l = 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]), + h = i.create([0, 1518500249, 1859775393, 2400959708, 2840853838]), + f = i.create([1352829926, 1548603684, 1836072691, 2053994217, 0]), r = r.RIPEMD160 = s.extend({ + _doReset: function () { + this._hash = i.create([1732584193, 4023233417, 2562383102, 271733878, 3285377520]) + }, _doProcessBlock: function (e, t) { + for (var n = 0; n < 16; n++) { + var r = t + n, i = e[r]; + e[r] = 16711935 & (i << 8 | i >>> 24) | 4278255360 & (i << 24 | i >>> 8) + } + for (var s, a, p, g, v, I, O = this._hash.words, k = h.words, L = f.words, D = o.words, R = c.words, w = u.words, x = l.words, y = s = O[0], S = a = O[1], C = p = O[2], N = g = O[3], b = v = O[4], n = 0; n < 80; n += 1) I = (I = A(I = (I = s + e[t + D[n]] | 0) + (n < 16 ? (a ^ p ^ g) + k[0] : n < 32 ? m(a, p, g) + k[1] : n < 48 ? ((a | ~p) ^ g) + k[2] : n < 64 ? E(a, p, g) + k[3] : (a ^ (p | ~g)) + k[4]) | 0, w[n])) + v | 0, s = v, v = g, g = A(p, 10), p = a, a = I, I = (I = A(I = (I = y + e[t + R[n]] | 0) + (n < 16 ? (S ^ (C | ~N)) + L[0] : n < 32 ? E(S, C, N) + L[1] : n < 48 ? ((S | ~C) ^ N) + L[2] : n < 64 ? m(S, C, N) + L[3] : (S ^ C ^ N) + L[4]) | 0, x[n])) + b | 0, y = b, b = N, N = A(C, 10), C = S, S = I; + I = O[1] + p + N | 0, O[1] = O[2] + g + b | 0, O[2] = O[3] + v + y | 0, O[3] = O[4] + s + S | 0, O[4] = O[0] + a + C | 0, O[0] = I + }, _doFinalize: function () { + var e = this._data, t = e.words, n = 8 * this._nDataBytes, r = 8 * e.sigBytes; + t[r >>> 5] |= 128 << 24 - r % 32, t[14 + (64 + r >>> 9 << 4)] = 16711935 & (n << 8 | n >>> 24) | 4278255360 & (n << 24 | n >>> 8), e.sigBytes = 4 * (t.length + 1), this._process(); + for (var s = (r = this._hash).words, a = 0; a < 5; a++) { + var o = s[a]; + s[a] = 16711935 & (o << 8 | o >>> 24) | 4278255360 & (o << 24 | o >>> 8) + } + return r + }, clone: function () { + var e = s.clone.call(this); + return e._hash = this._hash.clone(), e + } + }); + + function m(e, t, n) { + return e & t | ~e & n + } + + function E(e, t, n) { + return e & n | t & ~n + } + + function A(e, t) { + return e << t | e >>> 32 - t + } + + t.RIPEMD160 = s._createHelper(r), t.HmacRIPEMD160 = s._createHmacHelper(r) + }(), n.RIPEMD160) +}), Sr(function (e, t) { + var i; + e.exports = (e = dh.lib.Base, i = dh.enc.Utf8, void (dh.algo.HMAC = e.extend({ + init: function (e, t) { + e = this._hasher = new e.init, "string" == typeof t && (t = i.parse(t)); + var n = e.blockSize, r = 4 * n; + (t = t.sigBytes > r ? e.finalize(t) : t).clamp(); + for (var e = this._oKey = t.clone(), t = this._iKey = t.clone(), o = e.words, c = t.words, u = 0; u < n; u++) o[u] ^= 1549556828, c[u] ^= 909522486; + e.sigBytes = t.sigBytes = r, this.reset() + }, reset: function () { + var e = this._hasher; + e.reset(), e.update(this._iKey) + }, update: function (e) { + return this._hasher.update(e), this + }, finalize: function (e) { + var t = this._hasher, e = t.finalize(e); + return t.reset(), t.finalize(this._oKey.clone().concat(e)) + } + }))) +}), Sr(function (e, t) { + var n, i, s, r, o, c, u; + e.exports = (i = (r = (n = e = dh).lib).Base, s = r.WordArray, o = (r = n.algo).SHA1, c = r.HMAC, u = r.PBKDF2 = i.extend({ + cfg: i.extend({ + keySize: 4, + hasher: o, + iterations: 1 + }), init: function (e) { + this.cfg = this.cfg.extend(e) + }, compute: function (e, t) { + for (var n = this.cfg, r = c.create(n.hasher, e), i = s.create(), a = s.create([1]), o = i.words, u = a.words, l = n.keySize, h = n.iterations; o.length < l;) { + var f = r.update(t).finalize(a); + r.reset(); + for (var p = f.words, d = p.length, m = f, _ = 1; _ < h; _++) { + m = r.finalize(m), r.reset(); + for (var E = m.words, T = 0; T < d; T++) p[T] ^= E[T] + } + i.concat(f), u[0]++ + } + return i.sigBytes = 4 * l, i + } + }), n.PBKDF2 = function (e, t, n) { + return u.create(n).compute(e, t) + }, e.PBKDF2) +}), Sr(function (e, t) { + var n, i, s, r, o, c; + e.exports = (i = (r = (n = e = dh).lib).Base, s = r.WordArray, o = (r = n.algo).MD5, c = r.EvpKDF = i.extend({ + cfg: i.extend({ + keySize: 4, + hasher: o, + iterations: 1 + }), init: function (e) { + this.cfg = this.cfg.extend(e) + }, compute: function (e, t) { + for (var n, r = this.cfg, i = r.hasher.create(), a = s.create(), o = a.words, c = r.keySize, u = r.iterations; o.length < c;) { + n && i.update(n), n = i.update(e).finalize(t), i.reset(); + for (var l = 1; l < u; l++) n = i.finalize(n), i.reset(); + a.concat(n) + } + return a.sigBytes = 4 * c, a + } + }), n.EvpKDF = function (e, t, n) { + return c.create(n).compute(e, t) + }, e.EvpKDF) +}), Sr(function (e, t) { + var n; + e.exports = void ((n = dh).lib.Cipher || function () { + var t = n, r = t.lib, i = r.Base, s = r.WordArray, a = r.BufferedBlockAlgorithm, + c = ((o = t.enc).Utf8, o.Base64), u = t.algo.EvpKDF, l = r.Cipher = a.extend({ + cfg: i.extend(), createEncryptor: function (e, t) { + return this.create(this._ENC_XFORM_MODE, e, t) + }, createDecryptor: function (e, t) { + return this.create(this._DEC_XFORM_MODE, e, t) + }, init: function (e, t, n) { + this.cfg = this.cfg.extend(n), this._xformMode = e, this._key = t, this.reset() + }, reset: function () { + a.reset.call(this), this._doReset() + }, process: function (e) { + return this._append(e), this._process() + }, finalize: function (e) { + return e && this._append(e), this._doFinalize() + }, keySize: 4, ivSize: 4, _ENC_XFORM_MODE: 1, _DEC_XFORM_MODE: 2, _createHelper: function (t) { + return { + encrypt: function (n, r, i) { + return e(r).encrypt(t, n, r, i) + }, decrypt: function (n, r, i) { + return e(r).decrypt(t, n, r, i) + } + } + } + }), o = (r.StreamCipher = l.extend({ + _doFinalize: function () { + return this._process(!0) + }, blockSize: 1 + }), t.mode = {}), f = r.BlockCipherMode = i.extend({ + createEncryptor: function (e, t) { + return this.Encryptor.create(e, t) + }, createDecryptor: function (e, t) { + return this.Decryptor.create(e, t) + }, init: function (e, t) { + this._cipher = e, this._iv = t + } + }), o = o.CBC = function () { + var t = f.extend(); + + function n(t, n, r) { + var i, s = this._iv; + s ? (i = s, this._iv = void 0) : i = this._prevBlock; + for (var a = 0; a < r; a++) t[n + a] ^= i[a] + } + + return t.Encryptor = t.extend({ + processBlock: function (e, t) { + var r = this._cipher, i = r.blockSize; + n.call(this, e, t, i), r.encryptBlock(e, t), this._prevBlock = e.slice(t, t + i) + } + }), t.Decryptor = t.extend({ + processBlock: function (e, t) { + var r = this._cipher, i = r.blockSize, s = e.slice(t, t + i); + r.decryptBlock(e, t), n.call(this, e, t, i), this._prevBlock = s + } + }), t + }(), d = (t.pad = {}).Pkcs7 = { + pad: function (e, t) { + for (var r = (t = 4 * t) - e.sigBytes % t, i = r << 24 | r << 16 | r << 8 | r, a = [], o = 0; o < r; o += 4) a.push(i); + t = s.create(a, r), e.concat(t) + }, unpad: function (e) { + var t = 255 & e.words[e.sigBytes - 1 >>> 2]; + e.sigBytes -= t + } + }, m = (r.BlockCipher = l.extend({ + cfg: l.cfg.extend({mode: o, padding: d}), reset: function () { + l.reset.call(this); + var e, n = (t = this.cfg).iv, t = t.mode; + this._xformMode == this._ENC_XFORM_MODE ? e = t.createEncryptor : (e = t.createDecryptor, this._minBufferSize = 1), this._mode && this._mode.__creator == e ? this._mode.init(this, n && n.words) : (this._mode = e.call(t, this, n && n.words), this._mode.__creator = e) + }, _doProcessBlock: function (e, t) { + this._mode.processBlock(e, t) + }, _doFinalize: function () { + var e, t = this.cfg.padding; + return this._xformMode == this._ENC_XFORM_MODE ? (t.pad(this._data, this.blockSize), e = this._process(!0)) : (e = this._process(!0), t.unpad(e)), e + }, blockSize: 4 + }), r.CipherParams = i.extend({ + init: function (e) { + this.mixIn(e) + }, toString: function (e) { + return (e || this.formatter).stringify(this) + } + })), o = (t.format = {}).OpenSSL = { + stringify: function (e) { + var t = e.ciphertext; + return ((e = e.salt) ? s.create([1398893684, 1701076831]).concat(e).concat(t) : t).toString(c) + }, parse: function (e) { + var t, r = (e = c.parse(e)).words; + return 1398893684 == r[0] && 1701076831 == r[1] && (t = s.create(r.slice(2, 4)), r.splice(0, 4), e.sigBytes -= 16), m.create({ + ciphertext: e, + salt: t + }) + } + }, E = r.SerializableCipher = i.extend({ + cfg: i.extend({format: o}), encrypt: function (e, t, n, r) { + r = this.cfg.extend(r); + var t = (i = e.createEncryptor(n, r)).finalize(t), i = i.cfg; + return m.create({ + ciphertext: t, + key: n, + iv: i.iv, + algorithm: e, + mode: i.mode, + padding: i.padding, + blockSize: e.blockSize, + formatter: r.format + }) + }, decrypt: function (e, t, n, r) { + return r = this.cfg.extend(r), t = this._parse(t, r.format), e.createDecryptor(n, r).finalize(t.ciphertext) + }, _parse: function (e, t) { + return "string" == typeof e ? t.parse(e, this) : e + } + }), d = (t.kdf = {}).OpenSSL = { + execute: function (e, t, n, r) { + return r = r || s.random(8), e = u.create({keySize: t + n}).compute(e, r), n = s.create(e.words.slice(t), 4 * n), e.sigBytes = 4 * t, m.create({ + key: e, + iv: n, + salt: r + }) + } + }, A = r.PasswordBasedCipher = E.extend({ + cfg: E.cfg.extend({kdf: d}), encrypt: function (e, t, n, r) { + return n = (r = this.cfg.extend(r)).kdf.execute(n, e.keySize, e.ivSize), r.iv = n.iv, (e = E.encrypt.call(this, e, t, n.key, r)).mixIn(n), e + }, decrypt: function (e, t, n, r) { + return r = this.cfg.extend(r), t = this._parse(t, r.format), n = r.kdf.execute(n, e.keySize, e.ivSize, t.salt), r.iv = n.iv, E.decrypt.call(this, e, t, n.key, r) + } + }); + + function e(e) { + return "string" == typeof e ? A : E + } + }()) +}), Sr(function (e, t) { + var n; + e.exports = ((n = dh).mode.CFB = function () { + var e = n.lib.BlockCipherMode.extend(); + + function t(e, t, n, r) { + var i, s = this._iv; + s ? (i = s.slice(0), this._iv = void 0) : i = this._prevBlock, r.encryptBlock(i, 0); + for (var a = 0; a < n; a++) e[t + a] ^= i[a] + } + + return e.Encryptor = e.extend({ + processBlock: function (e, n) { + var r = this._cipher, i = r.blockSize; + t.call(this, e, n, i, r), this._prevBlock = e.slice(n, n + i) + } + }), e.Decryptor = e.extend({ + processBlock: function (e, n) { + var r = this._cipher, i = r.blockSize, s = e.slice(n, n + i); + t.call(this, e, n, i, r), this._prevBlock = s + } + }), e + }(), n.mode.CFB) +}), Sr(function (e, t) { + var n, r; + e.exports = ((e = dh).mode.CTR = (r = (n = e.lib.BlockCipherMode.extend()).Encryptor = n.extend({ + processBlock: function (e, t) { + var n = this._cipher, r = n.blockSize, i = this._iv, s = this._counter, + a = (i && (s = this._counter = i.slice(0), this._iv = void 0), s.slice(0)); + n.encryptBlock(a, 0), s[r - 1] = s[r - 1] + 1 | 0; + for (var o = 0; o < r; o++) e[t + o] ^= a[o] + } + }), n.Decryptor = r, n), e.mode.CTR) +}), Sr(function (e, t) { + var n; + e.exports = ((n = dh).mode.CTRGladman = function () { + var e = n.lib.BlockCipherMode.extend(); + + function t(e) { + var t, n, r; + return 255 == (e >> 24 & 255) ? (n = e >> 8 & 255, r = 255 & e, 255 == (t = e >> 16 & 255) ? (t = 0, 255 === n ? (n = 0, 255 === r ? r = 0 : ++r) : ++n) : ++t, e = 0, e = (e += t << 16) + (n << 8) + r) : e += 1 << 24, e + } + + function r(e) { + 0 === (e[0] = t(e[0])) && (e[1] = t(e[1])) + } + + var i = e.Encryptor = e.extend({ + processBlock: function (e, t) { + var n = this._cipher, i = n.blockSize, s = this._iv, a = this._counter, + o = (s && (a = this._counter = s.slice(0), this._iv = void 0), r(a), a.slice(0)); + n.encryptBlock(o, 0); + for (var c = 0; c < i; c++) e[t + c] ^= o[c] + } + }); + return e.Decryptor = i, e + }(), n.mode.CTRGladman) +}), Sr(function (e, t) { + var n, r; + e.exports = ((e = dh).mode.OFB = (r = (n = e.lib.BlockCipherMode.extend()).Encryptor = n.extend({ + processBlock: function (e, t) { + var n = this._cipher, r = n.blockSize, i = this._iv, s = this._keystream; + i && (s = this._keystream = i.slice(0), this._iv = void 0), n.encryptBlock(s, 0); + for (var a = 0; a < r; a++) e[t + a] ^= s[a] + } + }), n.Decryptor = r, n), e.mode.OFB) +}), Sr(function (e, t) { + var n; + e.exports = ((e = dh).mode.ECB = ((n = e.lib.BlockCipherMode.extend()).Encryptor = n.extend({ + processBlock: function (e, t) { + this._cipher.encryptBlock(e, t) + } + }), n.Decryptor = n.extend({ + processBlock: function (e, t) { + this._cipher.decryptBlock(e, t) + } + }), n), e.mode.ECB) +}), Sr(function (e, t) { + e.exports = (dh.pad.AnsiX923 = { + pad: function (e, t) { + var n = (n = e.sigBytes) + (t = (t = 4 * t) - n % t) - 1; + e.clamp(), e.words[n >>> 2] |= t << 24 - n % 4 * 8, e.sigBytes += t + }, unpad: function (e) { + var t = 255 & e.words[e.sigBytes - 1 >>> 2]; + e.sigBytes -= t + } + }, dh.pad.Ansix923) +}), Sr(function (e, t) { + var n; + e.exports = ((n = dh).pad.Iso10126 = { + pad: function (e, t) { + t = (t *= 4) - e.sigBytes % t, e.concat(n.lib.WordArray.random(t - 1)).concat(n.lib.WordArray.create([t << 24], 1)) + }, unpad: function (e) { + var t = 255 & e.words[e.sigBytes - 1 >>> 2]; + e.sigBytes -= t + } + }, n.pad.Iso10126) +}), Sr(function (e, t) { + var n; + e.exports = ((n = dh).pad.Iso97971 = { + pad: function (e, t) { + e.concat(n.lib.WordArray.create([2147483648], 1)), n.pad.ZeroPadding.pad(e, t) + }, unpad: function (e) { + n.pad.ZeroPadding.unpad(e), e.sigBytes-- + } + }, n.pad.Iso97971) +}), Sr(function (e, t) { + e.exports = (dh.pad.ZeroPadding = { + pad: function (e, t) { + t *= 4, e.clamp(), e.sigBytes += t - (e.sigBytes % t || t) + }, unpad: function (e) { + for (var t = e.words, n = e.sigBytes - 1, n = e.sigBytes - 1; 0 <= n; n--) if (t[n >>> 2] >>> 24 - n % 4 * 8 & 255) { + e.sigBytes = n + 1; + break + } + } + }, dh.pad.ZeroPadding) +}), Sr(function (e, t) { + e.exports = (dh.pad.NoPadding = { + pad: function () { + }, unpad: function () { + } + }, dh.pad.NoPadding) +}), Sr(function (e, t) { + var r, i; + e.exports = (r = (e = dh).lib.CipherParams, i = e.enc.Hex, e.format.Hex = { + stringify: function (e) { + return e.ciphertext.toString(i) + }, parse: function (e) { + return e = i.parse(e), r.create({ciphertext: e}) + } + }, e.format.Hex) +}), Sr(function (e, t) { + var n; + e.exports = (n = dh, function () { + var e = n, t = e.lib.BlockCipher, r = e.algo, i = [], s = [], a = [], o = [], c = [], u = [], l = [], h = [], + f = [], p = [], d = (function () { + for (var e = [], t = 0; t < 256; t++) e[t] = t < 128 ? t << 1 : t << 1 ^ 283; + for (var n = 0, r = 0, t = 0; t < 256; t++) { + var d = r ^ r << 1 ^ r << 2 ^ r << 3 ^ r << 4, m = (i[n] = d = d >>> 8 ^ 255 & d ^ 99, e[s[d] = n]), + _ = e[m], E = e[_], T = 257 * e[d] ^ 16843008 * d; + a[n] = T << 24 | T >>> 8, o[n] = T << 16 | T >>> 16, c[n] = T << 8 | T >>> 24, u[n] = T, l[d] = (T = 16843009 * E ^ 65537 * _ ^ 257 * m ^ 16843008 * n) << 24 | T >>> 8, h[d] = T << 16 | T >>> 16, f[d] = T << 8 | T >>> 24, p[d] = T, n ? (n = m ^ e[e[e[E ^ m]]], r ^= e[e[r]]) : n = r = 1 + } + }(), [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54]), r = r.AES = t.extend({ + _doReset: function () { + if (!this._nRounds || this._keyPriorReset !== this._key) { + for (var e = this._keyPriorReset = this._key, t = e.words, n = e.sigBytes / 4, r = 4 * (1 + (this._nRounds = 6 + n)), s = this._keySchedule = [], a = 0; a < r; a++) a < n ? s[a] = t[a] : (u = s[a - 1], a % n ? 6 < n && a % n == 4 && (u = i[u >>> 24] << 24 | i[u >>> 16 & 255] << 16 | i[u >>> 8 & 255] << 8 | i[255 & u]) : (u = i[(u = u << 8 | u >>> 24) >>> 24] << 24 | i[u >>> 16 & 255] << 16 | i[u >>> 8 & 255] << 8 | i[255 & u], u ^= d[a / n | 0] << 24), s[a] = s[a - n] ^ u); + for (var o = this._invKeySchedule = [], c = 0; c < r; c++) { + var a = r - c, u = c % 4 ? s[a] : s[a - 4]; + o[c] = c < 4 || a <= 4 ? u : l[i[u >>> 24]] ^ h[i[u >>> 16 & 255]] ^ f[i[u >>> 8 & 255]] ^ p[i[255 & u]] + } + } + }, encryptBlock: function (e, t) { + this._doCryptBlock(e, t, this._keySchedule, a, o, c, u, i) + }, decryptBlock: function (e, t) { + var n = e[t + 1]; + e[t + 1] = e[t + 3], e[t + 3] = n, this._doCryptBlock(e, t, this._invKeySchedule, l, h, f, p, s), n = e[t + 1], e[t + 1] = e[t + 3], e[t + 3] = n + }, _doCryptBlock: function (e, t, n, r, i, s, a, o) { + for (var c = this._nRounds, u = e[t] ^ n[0], l = e[t + 1] ^ n[1], h = e[t + 2] ^ n[2], f = e[t + 3] ^ n[3], p = 4, d = 1; d < c; d++) var m = r[u >>> 24] ^ i[l >>> 16 & 255] ^ s[h >>> 8 & 255] ^ a[255 & f] ^ n[p++], _ = r[l >>> 24] ^ i[h >>> 16 & 255] ^ s[f >>> 8 & 255] ^ a[255 & u] ^ n[p++], E = r[h >>> 24] ^ i[f >>> 16 & 255] ^ s[u >>> 8 & 255] ^ a[255 & l] ^ n[p++], T = r[f >>> 24] ^ i[u >>> 16 & 255] ^ s[l >>> 8 & 255] ^ a[255 & h] ^ n[p++], u = m, l = _, h = E, f = T; + m = (o[u >>> 24] << 24 | o[l >>> 16 & 255] << 16 | o[h >>> 8 & 255] << 8 | o[255 & f]) ^ n[p++], _ = (o[l >>> 24] << 24 | o[h >>> 16 & 255] << 16 | o[f >>> 8 & 255] << 8 | o[255 & u]) ^ n[p++], E = (o[h >>> 24] << 24 | o[f >>> 16 & 255] << 16 | o[u >>> 8 & 255] << 8 | o[255 & l]) ^ n[p++], T = (o[f >>> 24] << 24 | o[u >>> 16 & 255] << 16 | o[l >>> 8 & 255] << 8 | o[255 & h]) ^ n[p++], e[t] = m, e[t + 1] = _, e[t + 2] = E, e[t + 3] = T + }, keySize: 8 + }); + e.AES = t._createHelper(r) + }(), n.AES) +}), Sr(function (e, t) { + var n; + e.exports = (n = dh, function () { + var e = n, r = (t = e.lib).WordArray, t = t.BlockCipher, s = e.algo, + a = [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], + o = [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], + c = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28], u = [{ + 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 + }], l = [4160749569, 528482304, 33030144, 2064384, 129024, 8064, 504, 2147483679], h = s.DES = t.extend({ + _doReset: function () { + for (var e = this._key.words, t = [], n = 0; n < 56; n++) { + var r = a[n] - 1; + t[n] = e[r >>> 5] >>> 31 - r % 32 & 1 + } + for (var i = this._subKeys = [], s = 0; s < 16; s++) { + for (var u = i[s] = [], l = c[s], n = 0; n < 24; n++) u[n / 6 | 0] |= t[(o[n] - 1 + l) % 28] << 31 - n % 6, u[4 + (n / 6 | 0)] |= t[28 + (o[n + 24] - 1 + l) % 28] << 31 - n % 6; + for (u[0] = u[0] << 1 | u[0] >>> 31, n = 1; n < 7; n++) u[n] = u[n] >>> 4 * (n - 1) + 3; + u[7] = u[7] << 5 | u[7] >>> 27 + } + var h = this._invSubKeys = []; + for (n = 0; n < 16; n++) h[n] = i[15 - n] + }, encryptBlock: function (e, t) { + this._doCryptBlock(e, t, this._subKeys) + }, decryptBlock: function (e, t) { + this._doCryptBlock(e, t, this._invSubKeys) + }, _doCryptBlock: function (e, t, n) { + this._lBlock = e[t], this._rBlock = e[t + 1], f.call(this, 4, 252645135), f.call(this, 16, 65535), p.call(this, 2, 858993459), p.call(this, 8, 16711935), f.call(this, 1, 1431655765); + for (var r = 0; r < 16; r++) { + for (var i = n[r], s = this._lBlock, a = this._rBlock, o = 0, c = 0; c < 8; c++) o |= u[c][((a ^ i[c]) & l[c]) >>> 0]; + this._lBlock = a, this._rBlock = s ^ o + } + var h = this._lBlock; + this._lBlock = this._rBlock, this._rBlock = h, f.call(this, 1, 1431655765), p.call(this, 8, 16711935), p.call(this, 2, 858993459), f.call(this, 16, 65535), f.call(this, 4, 252645135), e[t] = this._lBlock, e[t + 1] = this._rBlock + }, keySize: 2, ivSize: 2, blockSize: 2 + }); + + function f(e, t) { + t = (this._lBlock >>> e ^ this._rBlock) & t, this._rBlock ^= t, this._lBlock ^= t << e + } + + function p(e, t) { + t = (this._rBlock >>> e ^ this._lBlock) & t, this._lBlock ^= t, this._rBlock ^= t << e + } + + e.DES = t._createHelper(h), s = s.TripleDES = t.extend({ + _doReset: function () { + if (2 !== (e = this._key.words).length && 4 !== e.length && e.length < 6) throw new Error("Invalid key length - 3DES requires the key length to be 64, 128, 192 or >192."); + var t = e.slice(0, 2), n = e.length < 4 ? e.slice(0, 2) : e.slice(2, 4), + e = e.length < 6 ? e.slice(0, 2) : e.slice(4, 6); + this._des1 = h.createEncryptor(r.create(t)), this._des2 = h.createEncryptor(r.create(n)), this._des3 = h.createEncryptor(r.create(e)) + }, encryptBlock: function (e, t) { + this._des1.encryptBlock(e, t), this._des2.decryptBlock(e, t), this._des3.encryptBlock(e, t) + }, decryptBlock: function (e, t) { + this._des3.decryptBlock(e, t), this._des2.encryptBlock(e, t), this._des1.decryptBlock(e, t) + }, keySize: 6, ivSize: 2, blockSize: 2 + }), e.TripleDES = t._createHelper(s) + }(), n.TripleDES) +}), Sr(function (e, t) { + var n; + e.exports = (n = dh, function () { + var e = n, t = e.lib.StreamCipher, r = e.algo, i = r.RC4 = t.extend({ + _doReset: function () { + for (var e = this._key, t = e.words, n = e.sigBytes, r = this._S = [], i = 0; i < 256; i++) r[i] = i; + for (var i = 0, s = 0; i < 256; i++) { + var a = t[(a = i % n) >>> 2] >>> 24 - a % 4 * 8 & 255, s = (s + r[i] + a) % 256, a = r[i]; + r[i] = r[s], r[s] = a + } + this._i = this._j = 0 + }, _doProcessBlock: function (e, t) { + e[t] ^= s.call(this) + }, keySize: 8, ivSize: 0 + }); + + function s() { + for (var e = this._S, t = this._i, n = this._j, r = 0, i = 0; i < 4; i++) { + var n = (n + e[t = (t + 1) % 256]) % 256, s = e[t]; + e[t] = e[n], e[n] = s, r |= e[(e[t] + e[n]) % 256] << 24 - 8 * i + } + return this._i = t, this._j = n, r + } + + e.RC4 = t._createHelper(i), r = r.RC4Drop = i.extend({ + cfg: i.cfg.extend({drop: 192}), _doReset: function () { + i._doReset.call(this); + for (var e = this.cfg.drop; 0 < e; e--) s.call(this) + } + }), e.RC4Drop = t._createHelper(r) + }(), n.RC4) +}), Sr(function (e, t) { + var n; + e.exports = (n = dh, function () { + var e = n, t = e.lib.StreamCipher, r = e.algo, i = [], s = [], a = [], r = r.Rabbit = t.extend({ + _doReset: function () { + for (var e = this._key.words, t = this.cfg.iv, n = 0; n < 4; n++) e[n] = 16711935 & (e[n] << 8 | e[n] >>> 24) | 4278255360 & (e[n] << 24 | e[n] >>> 8); + for (var r = this._X = [e[0], e[3] << 16 | e[2] >>> 16, e[1], e[0] << 16 | e[3] >>> 16, e[2], e[1] << 16 | e[0] >>> 16, e[3], e[2] << 16 | e[1] >>> 16], i = this._C = [e[2] << 16 | e[2] >>> 16, 4294901760 & e[0] | 65535 & e[1], e[3] << 16 | e[3] >>> 16, 4294901760 & e[1] | 65535 & e[2], e[0] << 16 | e[0] >>> 16, 4294901760 & e[2] | 65535 & e[3], e[1] << 16 | e[1] >>> 16, 4294901760 & e[3] | 65535 & e[0]], n = this._b = 0; n < 4; n++) c.call(this); + for (n = 0; n < 8; n++) i[n] ^= r[n + 4 & 7]; + if (t) { + var a = (t = t.words)[0], + h = (a = 16711935 & (a << 8 | a >>> 24) | 4278255360 & (a << 24 | a >>> 8)) >>> 16 | 4294901760 & (t = 16711935 & ((t = t[1]) << 8 | t >>> 24) | 4278255360 & (t << 24 | t >>> 8)), + f = t << 16 | 65535 & a; + for (i[0] ^= a, i[1] ^= h, i[2] ^= t, i[3] ^= f, i[4] ^= a, i[5] ^= h, i[6] ^= t, i[7] ^= f, n = 0; n < 4; n++) c.call(this) + } + }, _doProcessBlock: function (e, t) { + var n = this._X; + c.call(this), i[0] = n[0] ^ n[5] >>> 16 ^ n[3] << 16, i[1] = n[2] ^ n[7] >>> 16 ^ n[5] << 16, i[2] = n[4] ^ n[1] >>> 16 ^ n[7] << 16, i[3] = n[6] ^ n[3] >>> 16 ^ n[1] << 16; + for (var r = 0; r < 4; r++) i[r] = 16711935 & (i[r] << 8 | i[r] >>> 24) | 4278255360 & (i[r] << 24 | i[r] >>> 8), e[t + r] ^= i[r] + }, blockSize: 4, ivSize: 2 + }); + + function c() { + for (var e = this._X, t = this._C, n = 0; n < 8; n++) s[n] = t[n]; + for (t[0] = t[0] + 1295307597 + this._b | 0, t[1] = t[1] + 3545052371 + (t[0] >>> 0 < s[0] >>> 0 ? 1 : 0) | 0, t[2] = t[2] + 886263092 + (t[1] >>> 0 < s[1] >>> 0 ? 1 : 0) | 0, t[3] = t[3] + 1295307597 + (t[2] >>> 0 < s[2] >>> 0 ? 1 : 0) | 0, t[4] = t[4] + 3545052371 + (t[3] >>> 0 < s[3] >>> 0 ? 1 : 0) | 0, t[5] = t[5] + 886263092 + (t[4] >>> 0 < s[4] >>> 0 ? 1 : 0) | 0, t[6] = t[6] + 1295307597 + (t[5] >>> 0 < s[5] >>> 0 ? 1 : 0) | 0, t[7] = t[7] + 3545052371 + (t[6] >>> 0 < s[6] >>> 0 ? 1 : 0) | 0, this._b = t[7] >>> 0 < s[7] >>> 0 ? 1 : 0, n = 0; n < 8; n++) { + var r = e[n] + t[n], i = 65535 & r, o = r >>> 16; + a[n] = ((i * i >>> 17) + i * o >>> 15) + o * o ^ ((4294901760 & r) * r | 0) + ((65535 & r) * r | 0) + } + e[0] = a[0] + (a[7] << 16 | a[7] >>> 16) + (a[6] << 16 | a[6] >>> 16) | 0, e[1] = a[1] + (a[0] << 8 | a[0] >>> 24) + a[7] | 0, e[2] = a[2] + (a[1] << 16 | a[1] >>> 16) + (a[0] << 16 | a[0] >>> 16) | 0, e[3] = a[3] + (a[2] << 8 | a[2] >>> 24) + a[1] | 0, e[4] = a[4] + (a[3] << 16 | a[3] >>> 16) + (a[2] << 16 | a[2] >>> 16) | 0, e[5] = a[5] + (a[4] << 8 | a[4] >>> 24) + a[3] | 0, e[6] = a[6] + (a[5] << 16 | a[5] >>> 16) + (a[4] << 16 | a[4] >>> 16) | 0, e[7] = a[7] + (a[6] << 8 | a[6] >>> 24) + a[5] | 0 + } + + e.Rabbit = t._createHelper(r) + }(), n.Rabbit) +}), Sr(function (e, t) { + var n; + e.exports = (n = dh, function () { + var e = n, t = e.lib.StreamCipher, r = e.algo, i = [], s = [], a = [], r = r.RabbitLegacy = t.extend({ + _doReset: function () { + for (var e = this._key.words, t = this.cfg.iv, n = this._X = [e[0], e[3] << 16 | e[2] >>> 16, e[1], e[0] << 16 | e[3] >>> 16, e[2], e[1] << 16 | e[0] >>> 16, e[3], e[2] << 16 | e[1] >>> 16], r = this._C = [e[2] << 16 | e[2] >>> 16, 4294901760 & e[0] | 65535 & e[1], e[3] << 16 | e[3] >>> 16, 4294901760 & e[1] | 65535 & e[2], e[0] << 16 | e[0] >>> 16, 4294901760 & e[2] | 65535 & e[3], e[1] << 16 | e[1] >>> 16, 4294901760 & e[3] | 65535 & e[0]], i = this._b = 0; i < 4; i++) c.call(this); + for (i = 0; i < 8; i++) r[i] ^= n[i + 4 & 7]; + if (t) { + var h = (t = 16711935 & ((t = (e = t.words)[0]) << 8 | t >>> 24) | 4278255360 & (t << 24 | t >>> 8)) >>> 16 | 4294901760 & (e = 16711935 & ((e = e[1]) << 8 | e >>> 24) | 4278255360 & (e << 24 | e >>> 8)), + f = e << 16 | 65535 & t; + for (r[0] ^= t, r[1] ^= h, r[2] ^= e, r[3] ^= f, r[4] ^= t, r[5] ^= h, r[6] ^= e, r[7] ^= f, i = 0; i < 4; i++) c.call(this) + } + }, _doProcessBlock: function (e, t) { + var n = this._X; + c.call(this), i[0] = n[0] ^ n[5] >>> 16 ^ n[3] << 16, i[1] = n[2] ^ n[7] >>> 16 ^ n[5] << 16, i[2] = n[4] ^ n[1] >>> 16 ^ n[7] << 16, i[3] = n[6] ^ n[3] >>> 16 ^ n[1] << 16; + for (var r = 0; r < 4; r++) i[r] = 16711935 & (i[r] << 8 | i[r] >>> 24) | 4278255360 & (i[r] << 24 | i[r] >>> 8), e[t + r] ^= i[r] + }, blockSize: 4, ivSize: 2 + }); + + function c() { + for (var e = this._X, t = this._C, n = 0; n < 8; n++) s[n] = t[n]; + for (t[0] = t[0] + 1295307597 + this._b | 0, t[1] = t[1] + 3545052371 + (t[0] >>> 0 < s[0] >>> 0 ? 1 : 0) | 0, t[2] = t[2] + 886263092 + (t[1] >>> 0 < s[1] >>> 0 ? 1 : 0) | 0, t[3] = t[3] + 1295307597 + (t[2] >>> 0 < s[2] >>> 0 ? 1 : 0) | 0, t[4] = t[4] + 3545052371 + (t[3] >>> 0 < s[3] >>> 0 ? 1 : 0) | 0, t[5] = t[5] + 886263092 + (t[4] >>> 0 < s[4] >>> 0 ? 1 : 0) | 0, t[6] = t[6] + 1295307597 + (t[5] >>> 0 < s[5] >>> 0 ? 1 : 0) | 0, t[7] = t[7] + 3545052371 + (t[6] >>> 0 < s[6] >>> 0 ? 1 : 0) | 0, this._b = t[7] >>> 0 < s[7] >>> 0 ? 1 : 0, n = 0; n < 8; n++) { + var r = e[n] + t[n], i = 65535 & r, o = r >>> 16; + a[n] = ((i * i >>> 17) + i * o >>> 15) + o * o ^ ((4294901760 & r) * r | 0) + ((65535 & r) * r | 0) + } + e[0] = a[0] + (a[7] << 16 | a[7] >>> 16) + (a[6] << 16 | a[6] >>> 16) | 0, e[1] = a[1] + (a[0] << 8 | a[0] >>> 24) + a[7] | 0, e[2] = a[2] + (a[1] << 16 | a[1] >>> 16) + (a[0] << 16 | a[0] >>> 16) | 0, e[3] = a[3] + (a[2] << 8 | a[2] >>> 24) + a[1] | 0, e[4] = a[4] + (a[3] << 16 | a[3] >>> 16) + (a[2] << 16 | a[2] >>> 16) | 0, e[5] = a[5] + (a[4] << 8 | a[4] >>> 24) + a[3] | 0, e[6] = a[6] + (a[5] << 16 | a[5] >>> 16) + (a[4] << 16 | a[4] >>> 16) | 0, e[7] = a[7] + (a[6] << 8 | a[6] >>> 24) + a[5] | 0 + } + + e.RabbitLegacy = t._createHelper(r) + }(), n.RabbitLegacy) +}), Sr(function (e, t) { + e.exports = dh +})), _h = function (t, n, r, i) { + return "string" == typeof (t = "undefined" != typeof Buffer && Buffer.isBuffer(t) ? t.toString() : t) ? function (e, t, n, r) { + return t.xmlMode || t._useHtmlParser2 ? function (e, t) { + var n = new w(void 0, t); + return new va(n, t).end(e), n.root + }(e, t) : ta(e, t, n, r) + }(t, n, r, i) : (n = t, !Array.isArray(n) && O(n) ? n : (Bn(n, r = new v([])), r)) +}, Eh = function (e) { + return function r(s, a, o) { + if (void 0 === o && (o = !0), null == s) throw new Error("cheerio.load() expects a string"); + var c = rr(rr({}, n), i(a)), u = e(s, c, o, null), l = function (n) { + function r() { + return null !== n && n.apply(this, arguments) || this + } + + return nr(r, n), r.prototype._make = function (e, t) { + return (e = h(e, t)).prevObject = this, e + }, r.prototype._parse = function (t, n, r, i) { + return e(t, n, r, i) + }, r.prototype._render = function (e) { + return function (e, t) { + return t.xmlMode || t._useHtmlParser2 ? W(e, t) : function (e) { + for (var t, n = ("length" in e ? e : [e]), r = 0; r < n.length; r += 1) O(s = n[r]) && (t = Array.prototype.splice).call.apply(t, ea([n, r, 1], s.children, !1)); + for (var s, i = "", r = 0; r < n.length; r += 1) i += Qs(s = n[r], sa); + return i + }(e) + }(e, this.options) + }, r + }(er); + + function h(t, n, r, s) { + if (void 0 === r && (r = u), t && Pe(t)) return t; + if (s = rr(rr({}, c), i(s)), (r = Pe(r = "string" == typeof r ? [e(r, s, !1, null)] : "length" in r ? r : [r]) ? r : new l(r, null, s))._root = r, !t) return new l(void 0, r, s); + var p = "string" == typeof t && Ue(t) ? e(t, s, !1, null).children : t.name || "root" === t.type || "text" === t.type || "comment" === t.type ? [t] : Array.isArray(t) ? t : void 0, + d = new l(p, r, s); + if (p) return d; + if ("string" != typeof t) throw new Error("Unexpected type of selector"); + return p = t, (t = n ? "string" == typeof n ? Ue(n) ? new l([e(n, s, !1, null)], r, s) : (p = "".concat(n, " ").concat(p), r) : Pe(n) ? n : new l(Array.isArray(n) ? n : [n], r, s) : r) ? t.find(p) : d + } + + return Object.assign(h, Me, {load: r, _root: u, _options: c, fn: l.prototype, prototype: l.prototype}), h + } +}(_h); + +function Th(e, t) { + return Fa({path: e, json: t}) +} + +function Ah(e) { + return Fa(e) +} + +function gh(e, t) { + return Bl(e, t) +} + +var vh = ch, yh = fh, Sh = ph, Ch = mh, Nh = Eh([]), bh = De, Ih = Re, Oh = ke, kh = Le; +export { + Ch as Crypto, + yh as Uri, + Sh as _, + Nh as cheerio, + bh as contains, + vh as dayjs, + be as html, + gh as jinja2, + Th as jp, + Ah as jpo, + Eh as load, + Ih as merge, + Oh as parseHTML, + kh as root, + Oe as text, + Ie as xml +}; \ No newline at end of file diff --git a/cat/tjs/lib/cloud.js b/cat/tjs/lib/cloud.js new file mode 100644 index 0000000..1811709 --- /dev/null +++ b/cat/tjs/lib/cloud.js @@ -0,0 +1,107 @@ +/** + * File: h:\PycharmProjects\Github\TVSpider\lib\cloud.js + * Project: h:\PycharmProjects\Github\TVSpider + * Created Date: Tuesday, May 21st 2024, 2:01:09 pm + * Author: jade + * ----- + * Last Modified: Tue May 21 2024 + * Modified By: jade + * ----- + * Copyright (c) 2024 samples + * ------------------------------------ + * Javascript will save your soul! + */ + +import {initAli,detailContentAli,playContentAli, aliPlayFormatList,aliName} from "./ali.js" +import { initQuark,detailContentQuark,playContentQuark,getQuarkPlayFormatList,quarkName,getQuarkHeaders} from "./quark.js" +import * as Utils from "./utils.js"; +import {_} from "../lib/cat.js"; + + +async function initCloud(cfg){ + initAli(cfg["aliToken"]) + initQuark(cfg["quarkCookie"]) +} + +async function detailContent(share_url_list,type_name="电影"){ + let ali_share_url_list = [],quark_share_url_list = [] + const playVod = {} + for (const shareUrl of share_url_list){ + let aliMatches = shareUrl.match(Utils.patternAli); + if (!_.isEmpty(aliMatches)) { + ali_share_url_list.push(aliMatches[1]) + } + let quarkMatches = shareUrl.match(Utils.patternQuark); + if (!_.isEmpty(quarkMatches)){ + quark_share_url_list.push(quarkMatches[1]) + } + } + let aliItems = await detailContentAli(ali_share_url_list) + let quarkItems = await detailContentQuark(quark_share_url_list) + let quarkPlayFormatList = getQuarkPlayFormatList(); + await getVod(aliPlayFormatList,aliName,playVod,aliItems.video_items,aliItems.sub_items,type_name) + await getVod(quarkPlayFormatList,quarkName,playVod,quarkItems.video_items,quarkItems.sub_items,type_name) + + return playVod +} + + +async function getVod(play_foramt_list,cloud_name,playVod,video_item_list, sub_item_list, type_name) { + if (video_item_list.length ==0){ + return + } + for (let i=0; i -1 || sub_name.indexOf(name) > -1) { + sub_item_list.push(item); + } + } +} + +//找出所有字幕 +function findSubs(name, item_list) { + let sub_item_list = []; + pair(Utils.removeExt(name).toLowerCase(), item_list, sub_item_list); + if (sub_item_list.length === 0) { + for (const item of item_list) { + sub_item_list.push(item); + } + } + let sub_str = ""; + for (const item of sub_item_list) { + sub_str += "+" + Utils.removeExt(item.getName()) + "@@@" + item.getExt() + "@@@" + item.getFileId(); + } + return sub_str; +} +async function playContent(flag,id,flags){ + if (flag.indexOf(aliName) > -1) { + return await playContentAli(flag, id, flags) + }else if (flag.indexOf(quarkName) > -1){ + return await playContentQuark(flag,id,flags) + } +} + +function getHeaders(flag){ + if (flag.indexOf(aliName) > -1) { + return {} + }else if (flag.indexOf(quarkName) > -1){ + return getQuarkHeaders() + } +} + + +export {initCloud,detailContent,playContent,getHeaders,aliName,quarkName} \ No newline at end of file diff --git a/cat/tjs/lib/danmuSpider.js b/cat/tjs/lib/danmuSpider.js new file mode 100644 index 0000000..d70ff26 --- /dev/null +++ b/cat/tjs/lib/danmuSpider.js @@ -0,0 +1,188 @@ +/* +* @File : danmuSpider.js +* @Author : jade +* @Date : 2024/3/13 13:39 +* @Email : jadehh@1ive.com +* @Software : Samples +* @Desc : +*/ + +import {_, load, Uri} from "./cat.js"; +import * as Utils from "./utils.js"; +import {JadeLogging} from "./log.js"; +import {VodDetail, VodShort} from "./vod.js"; +import {parseXML} from "./bilibili_ASS_Danmaku_Downloader.js"; + +class DanmuSpider { + constructor() { + this.siteUrl = "https://search.youku.com" + this.reconnectTimes = 0 + this.maxReconnectTimes = 5 + this.jadeLog = new JadeLogging(this.getAppName(), "DEBUG") + } + + getAppName() { + return "弹幕" + } + + getHeader() { + return {"User-Agent": Utils.CHROME, "Referer": this.siteUrl + "/"}; + } + + async reconnnect(reqUrl, params, headers, redirect_url, return_cookie, buffer) { + await this.jadeLog.error("请求失败,请检查url:" + reqUrl + ",两秒后重试") + Utils.sleep(2) + if (this.reconnectTimes < this.maxReconnectTimes) { + this.reconnectTimes = this.reconnectTimes + 1 + return await this.fetch(reqUrl, params, headers, redirect_url, return_cookie, buffer) + } else { + await this.jadeLog.error("请求失败,重连失败") + return null + } + } + + async getResponse(reqUrl, params, headers, redirect_url, return_cookie, buffer, response) { + { + if (response.headers["location"] !== undefined) { + if (redirect_url) { + await this.jadeLog.debug(`返回重定向连接:${response.headers["location"]}`) + return response.headers["location"] + } else { + return this.fetch(response.headers["location"], params, headers, redirect_url, return_cookie, buffer) + } + } else if (response.content.length > 0) { + this.reconnectTimes = 0 + if (return_cookie) { + return {"cookie": response.headers["set-cookie"], "content": response.content} + } else { + return response.content + } + } else if (buffer === 1) { + this.reconnectTimes = 0 + return response.content + } else { + await this.jadeLog.error(`请求失败,请求url为:${reqUrl},回复内容为:${JSON.stringify(response)}`) + return await this.reconnnect(reqUrl, params, headers, redirect_url, return_cookie, buffer) + } + } + } + + + async fetch(reqUrl, params, headers, redirect_url = false, return_cookie = false, buffer = 0) { + let data = Utils.objectToStr(params) + let url = reqUrl + if (!_.isEmpty(data)) { + url = reqUrl + "?" + data + } + let uri = new Uri(url); + let response; + response = await req(uri.toString(), {method: "get", headers: headers, buffer: buffer, data: null}) + if (response.code === 201 || response.code === 200 || response.code === 302 || response.code === 301 || return_cookie) { + return await this.getResponse(reqUrl, params, headers, redirect_url, return_cookie, buffer, response) + } else { + await this.jadeLog.error(`请求失败,失败原因为:状态码出错,请求url为:${uri},回复内容为:${JSON.stringify(response)}`) + return await this.reconnnect(reqUrl, params, headers, redirect_url, return_cookie, buffer) + } + } + + async getHtml(url = this.siteUrl, headers = this.getHeader()) { + let html = await this.fetch(url, null, headers) + if (!_.isEmpty(html)) { + return load(html) + } else { + await this.jadeLog.error(`html获取失败`, true) + } + } + + async parseVodShortListFromJson(obj, vodDetail) { + for (const componentObj of obj["pageComponentList"]) { + if (componentObj["commonData"] !== undefined) { + let searchVodDetail = new VodDetail() + let commonData = componentObj["commonData"] + searchVodDetail.type_name = commonData["feature"] + if (commonData["notice"] !== undefined) { + searchVodDetail.vod_actor = commonData["notice"].replaceAll("演员:", "").replaceAll(" ", "") + } + if (commonData["director"] !== undefined) { + searchVodDetail.vod_director = commonData["director"].replaceAll("导演:", "").replaceAll(" ", "") + } + if (vodDetail.type_name === "电影") { + searchVodDetail.vod_id = commonData["leftButtonDTO"]["action"]["value"] + } else { + searchVodDetail.vod_id = commonData["showId"] + } + searchVodDetail.vod_name = commonData["titleDTO"]["displayName"] + if ( searchVodDetail.vod_name === vodDetail.vod_name || searchVodDetail.type_name.indexOf(vodDetail.vod_year) > -1 || searchVodDetail.type_name.indexOf(vodDetail.type_name) > -1 || searchVodDetail.vod_director === vodDetail.vod_director) { + await this.jadeLog.debug(`匹配视频网站成功,名称为:${searchVodDetail.vod_name},类型为:${searchVodDetail.type_name},导演为:${searchVodDetail.vod_director}`, true) + return searchVodDetail + } + } + } + await this.jadeLog.warning("没有匹配到弹幕网站") + return null + } + + async parseVodUrlFromJsonByEpisodeId(obj, episodeId) { + for (const serises of obj["serisesList"]) { + if (Utils.isNumeric(episodeId["episodeId"])) { + if (parseInt(episodeId["episodeId"]).toString() === serises["displayName"]) { + return serises["action"]["value"] + } + } + } + await this.jadeLog.error("没有找到匹配的集数") + return "" + } + + async downloadDanmu(url) { + // 如果没有找到弹幕的话,容易导致卡在这一步,从而导致结果加载不出来 + let response = await req(url,{headers:this.getHeader()}) + if (response.code === 200){ + let xml = parseXML(JSON.parse(response.content)) + let params = {"do": "set", "key": "danmu", "value": xml} + await req("http://127.0.0.1:9978/cache", {method: "post", data: params, postType: "form-data"}); + return "http://127.0.0.1:9978/cache?do=get&key=danmu" + } + else{ + this.jadeLog.error(`弹幕请求失败,返回结果为:${JSON.stringify(response)}`) + return "" + } + } + + async search(vodDetail, episodeId) { + let params = {"pg": "1", "keyword": vodDetail.vod_name} + let searchObj = JSON.parse(await this.fetch(this.siteUrl + "/api/search", params, this.getHeader())) + let searchDetail = await this.parseVodShortListFromJson(searchObj, vodDetail) + if (!_.isEmpty(searchDetail)){ + return await this.getVideoUrl(searchDetail.vod_id, episodeId) + }else{ + return "" + } + } + + async getVideoUrl(showId, episodeId) { + let url = ""; + if (!_.isEmpty(showId)) { + if (showId.startsWith("http")) { + url = showId + } else { + let params = {"appScene": "show_episode", "showIds": showId} + let matchObj = JSON.parse(await this.fetch(this.siteUrl + "/api/search", params, this.getHeader())) + url = await this.parseVodUrlFromJsonByEpisodeId(matchObj, episodeId) + } + if (!_.isEmpty(url)) { + await this.jadeLog.debug(`弹幕视频播放连接为:${url}`) + return await this.downloadDanmu("https://dmku.thefilehosting.com/?ac=dm&url=" + url) + } + } + return url + + } + + + async getDammu(voddetail, episodeId) { + return await this.search(voddetail, episodeId) + } +} + +export {DanmuSpider} \ No newline at end of file diff --git a/cat/tjs/lib/encoding-indexes.js b/cat/tjs/lib/encoding-indexes.js new file mode 100644 index 0000000..ae241fe --- /dev/null +++ b/cat/tjs/lib/encoding-indexes.js @@ -0,0 +1,37 @@ +const Indexes = { + 'big5': [null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,17392,19506,17923,17830,17784,160359,19831,17843,162993,19682,163013,15253,18230,18244,19527,19520,148159,144919,160594,159371,159954,19543,172881,18255,17882,19589,162924,19719,19108,18081,158499,29221,154196,137827,146950,147297,26189,22267,null,32149,22813,166841,15860,38708,162799,23515,138590,23204,13861,171696,23249,23479,23804,26478,34195,170309,29793,29853,14453,138579,145054,155681,16108,153822,15093,31484,40855,147809,166157,143850,133770,143966,17162,33924,40854,37935,18736,34323,22678,38730,37400,31184,31282,26208,27177,34973,29772,31685,26498,31276,21071,36934,13542,29636,155065,29894,40903,22451,18735,21580,16689,145038,22552,31346,162661,35727,18094,159368,16769,155033,31662,140476,40904,140481,140489,140492,40905,34052,144827,16564,40906,17633,175615,25281,28782,40907,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,12736,12737,12738,12739,12740,131340,12741,131281,131277,12742,12743,131275,139240,12744,131274,12745,12746,12747,12748,131342,12749,12750,256,193,461,192,274,201,282,200,332,211,465,210,null,7870,null,7872,202,257,225,462,224,593,275,233,283,232,299,237,464,236,333,243,466,242,363,250,468,249,470,472,474,476,252,null,7871,null,7873,234,609,9178,9179,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,172969,135493,null,25866,null,null,20029,28381,40270,37343,null,null,161589,25745,20250,20264,20392,20822,20852,20892,20964,21153,21160,21307,21326,21457,21464,22242,22768,22788,22791,22834,22836,23398,23454,23455,23706,24198,24635,25993,26622,26628,26725,27982,28860,30005,32420,32428,32442,32455,32463,32479,32518,32567,33402,33487,33647,35270,35774,35810,36710,36711,36718,29713,31996,32205,26950,31433,21031,null,null,null,null,37260,30904,37214,32956,null,36107,33014,133607,null,null,32927,40647,19661,40393,40460,19518,171510,159758,40458,172339,13761,null,28314,33342,29977,null,18705,39532,39567,40857,31111,164972,138698,132560,142054,20004,20097,20096,20103,20159,20203,20279,13388,20413,15944,20483,20616,13437,13459,13477,20870,22789,20955,20988,20997,20105,21113,21136,21287,13767,21417,13649,21424,13651,21442,21539,13677,13682,13953,21651,21667,21684,21689,21712,21743,21784,21795,21800,13720,21823,13733,13759,21975,13765,163204,21797,null,134210,134421,151851,21904,142534,14828,131905,36422,150968,169189,16467,164030,30586,142392,14900,18389,164189,158194,151018,25821,134524,135092,134357,135412,25741,36478,134806,134155,135012,142505,164438,148691,null,134470,170573,164073,18420,151207,142530,39602,14951,169460,16365,13574,152263,169940,161992,142660,40302,38933,null,17369,155813,25780,21731,142668,142282,135287,14843,135279,157402,157462,162208,25834,151634,134211,36456,139681,166732,132913,null,18443,131497,16378,22643,142733,null,148936,132348,155799,134988,134550,21881,16571,17338,null,19124,141926,135325,33194,39157,134556,25465,14846,141173,36288,22177,25724,15939,null,173569,134665,142031,142537,null,135368,145858,14738,14854,164507,13688,155209,139463,22098,134961,142514,169760,13500,27709,151099,null,null,161140,142987,139784,173659,167117,134778,134196,157724,32659,135375,141315,141625,13819,152035,134796,135053,134826,16275,134960,134471,135503,134732,null,134827,134057,134472,135360,135485,16377,140950,25650,135085,144372,161337,142286,134526,134527,142417,142421,14872,134808,135367,134958,173618,158544,167122,167321,167114,38314,21708,33476,21945,null,171715,39974,39606,161630,142830,28992,33133,33004,23580,157042,33076,14231,21343,164029,37302,134906,134671,134775,134907,13789,151019,13833,134358,22191,141237,135369,134672,134776,135288,135496,164359,136277,134777,151120,142756,23124,135197,135198,135413,135414,22428,134673,161428,164557,135093,134779,151934,14083,135094,135552,152280,172733,149978,137274,147831,164476,22681,21096,13850,153405,31666,23400,18432,19244,40743,18919,39967,39821,154484,143677,22011,13810,22153,20008,22786,138177,194680,38737,131206,20059,20155,13630,23587,24401,24516,14586,25164,25909,27514,27701,27706,28780,29227,20012,29357,149737,32594,31035,31993,32595,156266,13505,null,156491,32770,32896,157202,158033,21341,34916,35265,161970,35744,36125,38021,38264,38271,38376,167439,38886,39029,39118,39134,39267,170000,40060,40479,40644,27503,63751,20023,131207,38429,25143,38050,null,20539,28158,171123,40870,15817,34959,147790,28791,23797,19232,152013,13657,154928,24866,166450,36775,37366,29073,26393,29626,144001,172295,15499,137600,19216,30948,29698,20910,165647,16393,27235,172730,16931,34319,133743,31274,170311,166634,38741,28749,21284,139390,37876,30425,166371,40871,30685,20131,20464,20668,20015,20247,40872,21556,32139,22674,22736,138678,24210,24217,24514,141074,25995,144377,26905,27203,146531,27903,null,29184,148741,29580,16091,150035,23317,29881,35715,154788,153237,31379,31724,31939,32364,33528,34199,40873,34960,40874,36537,40875,36815,34143,39392,37409,40876,167353,136255,16497,17058,23066,null,null,null,39016,26475,17014,22333,null,34262,149883,33471,160013,19585,159092,23931,158485,159678,40877,40878,23446,40879,26343,32347,28247,31178,15752,17603,143958,141206,17306,17718,null,23765,146202,35577,23672,15634,144721,23928,40882,29015,17752,147692,138787,19575,14712,13386,131492,158785,35532,20404,131641,22975,33132,38998,170234,24379,134047,null,139713,166253,16642,18107,168057,16135,40883,172469,16632,14294,18167,158790,16764,165554,160767,17773,14548,152730,17761,17691,19849,19579,19830,17898,16328,150287,13921,17630,17597,16877,23870,23880,23894,15868,14351,23972,23993,14368,14392,24130,24253,24357,24451,14600,14612,14655,14669,24791,24893,23781,14729,25015,25017,25039,14776,25132,25232,25317,25368,14840,22193,14851,25570,25595,25607,25690,14923,25792,23829,22049,40863,14999,25990,15037,26111,26195,15090,26258,15138,26390,15170,26532,26624,15192,26698,26756,15218,15217,15227,26889,26947,29276,26980,27039,27013,15292,27094,15325,27237,27252,27249,27266,15340,27289,15346,27307,27317,27348,27382,27521,27585,27626,27765,27818,15563,27906,27910,27942,28033,15599,28068,28081,28181,28184,28201,28294,166336,28347,28386,28378,40831,28392,28393,28452,28468,15686,147265,28545,28606,15722,15733,29111,23705,15754,28716,15761,28752,28756,28783,28799,28809,131877,17345,13809,134872,147159,22462,159443,28990,153568,13902,27042,166889,23412,31305,153825,169177,31333,31357,154028,31419,31408,31426,31427,29137,156813,16842,31450,31453,31466,16879,21682,154625,31499,31573,31529,152334,154878,31650,31599,33692,154548,158847,31696,33825,31634,31672,154912,15789,154725,33938,31738,31750,31797,154817,31812,31875,149634,31910,26237,148856,31945,31943,31974,31860,31987,31989,31950,32359,17693,159300,32093,159446,29837,32137,32171,28981,32179,32210,147543,155689,32228,15635,32245,137209,32229,164717,32285,155937,155994,32366,32402,17195,37996,32295,32576,32577,32583,31030,156368,39393,32663,156497,32675,136801,131176,17756,145254,17667,164666,32762,156809,32773,32776,32797,32808,32815,172167,158915,32827,32828,32865,141076,18825,157222,146915,157416,26405,32935,166472,33031,33050,22704,141046,27775,156824,151480,25831,136330,33304,137310,27219,150117,150165,17530,33321,133901,158290,146814,20473,136445,34018,33634,158474,149927,144688,137075,146936,33450,26907,194964,16859,34123,33488,33562,134678,137140,14017,143741,144730,33403,33506,33560,147083,159139,158469,158615,144846,15807,33565,21996,33669,17675,159141,33708,33729,33747,13438,159444,27223,34138,13462,159298,143087,33880,154596,33905,15827,17636,27303,33866,146613,31064,33960,158614,159351,159299,34014,33807,33681,17568,33939,34020,154769,16960,154816,17731,34100,23282,159385,17703,34163,17686,26559,34326,165413,165435,34241,159880,34306,136578,159949,194994,17770,34344,13896,137378,21495,160666,34430,34673,172280,34798,142375,34737,34778,34831,22113,34412,26710,17935,34885,34886,161248,146873,161252,34910,34972,18011,34996,34997,25537,35013,30583,161551,35207,35210,35238,35241,35239,35260,166437,35303,162084,162493,35484,30611,37374,35472,162393,31465,162618,147343,18195,162616,29052,35596,35615,152624,152933,35647,35660,35661,35497,150138,35728,35739,35503,136927,17941,34895,35995,163156,163215,195028,14117,163155,36054,163224,163261,36114,36099,137488,36059,28764,36113,150729,16080,36215,36265,163842,135188,149898,15228,164284,160012,31463,36525,36534,36547,37588,36633,36653,164709,164882,36773,37635,172703,133712,36787,18730,166366,165181,146875,24312,143970,36857,172052,165564,165121,140069,14720,159447,36919,165180,162494,36961,165228,165387,37032,165651,37060,165606,37038,37117,37223,15088,37289,37316,31916,166195,138889,37390,27807,37441,37474,153017,37561,166598,146587,166668,153051,134449,37676,37739,166625,166891,28815,23235,166626,166629,18789,37444,166892,166969,166911,37747,37979,36540,38277,38310,37926,38304,28662,17081,140922,165592,135804,146990,18911,27676,38523,38550,16748,38563,159445,25050,38582,30965,166624,38589,21452,18849,158904,131700,156688,168111,168165,150225,137493,144138,38705,34370,38710,18959,17725,17797,150249,28789,23361,38683,38748,168405,38743,23370,168427,38751,37925,20688,143543,143548,38793,38815,38833,38846,38848,38866,38880,152684,38894,29724,169011,38911,38901,168989,162170,19153,38964,38963,38987,39014,15118,160117,15697,132656,147804,153350,39114,39095,39112,39111,19199,159015,136915,21936,39137,39142,39148,37752,39225,150057,19314,170071,170245,39413,39436,39483,39440,39512,153381,14020,168113,170965,39648,39650,170757,39668,19470,39700,39725,165376,20532,39732,158120,14531,143485,39760,39744,171326,23109,137315,39822,148043,39938,39935,39948,171624,40404,171959,172434,172459,172257,172323,172511,40318,40323,172340,40462,26760,40388,139611,172435,172576,137531,172595,40249,172217,172724,40592,40597,40606,40610,19764,40618,40623,148324,40641,15200,14821,15645,20274,14270,166955,40706,40712,19350,37924,159138,40727,40726,40761,22175,22154,40773,39352,168075,38898,33919,40802,40809,31452,40846,29206,19390,149877,149947,29047,150008,148296,150097,29598,166874,137466,31135,166270,167478,37737,37875,166468,37612,37761,37835,166252,148665,29207,16107,30578,31299,28880,148595,148472,29054,137199,28835,137406,144793,16071,137349,152623,137208,14114,136955,137273,14049,137076,137425,155467,14115,136896,22363,150053,136190,135848,136134,136374,34051,145062,34051,33877,149908,160101,146993,152924,147195,159826,17652,145134,170397,159526,26617,14131,15381,15847,22636,137506,26640,16471,145215,147681,147595,147727,158753,21707,22174,157361,22162,135135,134056,134669,37830,166675,37788,20216,20779,14361,148534,20156,132197,131967,20299,20362,153169,23144,131499,132043,14745,131850,132116,13365,20265,131776,167603,131701,35546,131596,20120,20685,20749,20386,20227,150030,147082,20290,20526,20588,20609,20428,20453,20568,20732,20825,20827,20829,20830,28278,144789,147001,147135,28018,137348,147081,20904,20931,132576,17629,132259,132242,132241,36218,166556,132878,21081,21156,133235,21217,37742,18042,29068,148364,134176,149932,135396,27089,134685,29817,16094,29849,29716,29782,29592,19342,150204,147597,21456,13700,29199,147657,21940,131909,21709,134086,22301,37469,38644,37734,22493,22413,22399,13886,22731,23193,166470,136954,137071,136976,23084,22968,37519,23166,23247,23058,153926,137715,137313,148117,14069,27909,29763,23073,155267,23169,166871,132115,37856,29836,135939,28933,18802,37896,166395,37821,14240,23582,23710,24158,24136,137622,137596,146158,24269,23375,137475,137476,14081,137376,14045,136958,14035,33066,166471,138682,144498,166312,24332,24334,137511,137131,23147,137019,23364,34324,161277,34912,24702,141408,140843,24539,16056,140719,140734,168072,159603,25024,131134,131142,140827,24985,24984,24693,142491,142599,149204,168269,25713,149093,142186,14889,142114,144464,170218,142968,25399,173147,25782,25393,25553,149987,142695,25252,142497,25659,25963,26994,15348,143502,144045,149897,144043,21773,144096,137433,169023,26318,144009,143795,15072,16784,152964,166690,152975,136956,152923,152613,30958,143619,137258,143924,13412,143887,143746,148169,26254,159012,26219,19347,26160,161904,138731,26211,144082,144097,26142,153714,14545,145466,145340,15257,145314,144382,29904,15254,26511,149034,26806,26654,15300,27326,14435,145365,148615,27187,27218,27337,27397,137490,25873,26776,27212,15319,27258,27479,147392,146586,37792,37618,166890,166603,37513,163870,166364,37991,28069,28427,149996,28007,147327,15759,28164,147516,23101,28170,22599,27940,30786,28987,148250,148086,28913,29264,29319,29332,149391,149285,20857,150180,132587,29818,147192,144991,150090,149783,155617,16134,16049,150239,166947,147253,24743,16115,29900,29756,37767,29751,17567,159210,17745,30083,16227,150745,150790,16216,30037,30323,173510,15129,29800,166604,149931,149902,15099,15821,150094,16127,149957,149747,37370,22322,37698,166627,137316,20703,152097,152039,30584,143922,30478,30479,30587,149143,145281,14942,149744,29752,29851,16063,150202,150215,16584,150166,156078,37639,152961,30750,30861,30856,30930,29648,31065,161601,153315,16654,31131,33942,31141,27181,147194,31290,31220,16750,136934,16690,37429,31217,134476,149900,131737,146874,137070,13719,21867,13680,13994,131540,134157,31458,23129,141045,154287,154268,23053,131675,30960,23082,154566,31486,16889,31837,31853,16913,154547,155324,155302,31949,150009,137136,31886,31868,31918,27314,32220,32263,32211,32590,156257,155996,162632,32151,155266,17002,158581,133398,26582,131150,144847,22468,156690,156664,149858,32733,31527,133164,154345,154947,31500,155150,39398,34373,39523,27164,144447,14818,150007,157101,39455,157088,33920,160039,158929,17642,33079,17410,32966,33033,33090,157620,39107,158274,33378,33381,158289,33875,159143,34320,160283,23174,16767,137280,23339,137377,23268,137432,34464,195004,146831,34861,160802,23042,34926,20293,34951,35007,35046,35173,35149,153219,35156,161669,161668,166901,166873,166812,166393,16045,33955,18165,18127,14322,35389,35356,169032,24397,37419,148100,26068,28969,28868,137285,40301,35999,36073,163292,22938,30659,23024,17262,14036,36394,36519,150537,36656,36682,17140,27736,28603,140065,18587,28537,28299,137178,39913,14005,149807,37051,37015,21873,18694,37307,37892,166475,16482,166652,37927,166941,166971,34021,35371,38297,38311,38295,38294,167220,29765,16066,149759,150082,148458,16103,143909,38543,167655,167526,167525,16076,149997,150136,147438,29714,29803,16124,38721,168112,26695,18973,168083,153567,38749,37736,166281,166950,166703,156606,37562,23313,35689,18748,29689,147995,38811,38769,39224,134950,24001,166853,150194,38943,169178,37622,169431,37349,17600,166736,150119,166756,39132,166469,16128,37418,18725,33812,39227,39245,162566,15869,39323,19311,39338,39516,166757,153800,27279,39457,23294,39471,170225,19344,170312,39356,19389,19351,37757,22642,135938,22562,149944,136424,30788,141087,146872,26821,15741,37976,14631,24912,141185,141675,24839,40015,40019,40059,39989,39952,39807,39887,171565,39839,172533,172286,40225,19630,147716,40472,19632,40204,172468,172269,172275,170287,40357,33981,159250,159711,158594,34300,17715,159140,159364,159216,33824,34286,159232,145367,155748,31202,144796,144960,18733,149982,15714,37851,37566,37704,131775,30905,37495,37965,20452,13376,36964,152925,30781,30804,30902,30795,137047,143817,149825,13978,20338,28634,28633,28702,28702,21524,147893,22459,22771,22410,40214,22487,28980,13487,147884,29163,158784,151447,23336,137141,166473,24844,23246,23051,17084,148616,14124,19323,166396,37819,37816,137430,134941,33906,158912,136211,148218,142374,148417,22932,146871,157505,32168,155995,155812,149945,149899,166394,37605,29666,16105,29876,166755,137375,16097,150195,27352,29683,29691,16086,150078,150164,137177,150118,132007,136228,149989,29768,149782,28837,149878,37508,29670,37727,132350,37681,166606,166422,37766,166887,153045,18741,166530,29035,149827,134399,22180,132634,134123,134328,21762,31172,137210,32254,136898,150096,137298,17710,37889,14090,166592,149933,22960,137407,137347,160900,23201,14050,146779,14000,37471,23161,166529,137314,37748,15565,133812,19094,14730,20724,15721,15692,136092,29045,17147,164376,28175,168164,17643,27991,163407,28775,27823,15574,147437,146989,28162,28428,15727,132085,30033,14012,13512,18048,16090,18545,22980,37486,18750,36673,166940,158656,22546,22472,14038,136274,28926,148322,150129,143331,135856,140221,26809,26983,136088,144613,162804,145119,166531,145366,144378,150687,27162,145069,158903,33854,17631,17614,159014,159057,158850,159710,28439,160009,33597,137018,33773,158848,159827,137179,22921,23170,137139,23137,23153,137477,147964,14125,23023,137020,14023,29070,37776,26266,148133,23150,23083,148115,27179,147193,161590,148571,148170,28957,148057,166369,20400,159016,23746,148686,163405,148413,27148,148054,135940,28838,28979,148457,15781,27871,194597,150095,32357,23019,23855,15859,24412,150109,137183,32164,33830,21637,146170,144128,131604,22398,133333,132633,16357,139166,172726,28675,168283,23920,29583,31955,166489,168992,20424,32743,29389,29456,162548,29496,29497,153334,29505,29512,16041,162584,36972,29173,149746,29665,33270,16074,30476,16081,27810,22269,29721,29726,29727,16098,16112,16116,16122,29907,16142,16211,30018,30061,30066,30093,16252,30152,30172,16320,30285,16343,30324,16348,30330,151388,29064,22051,35200,22633,16413,30531,16441,26465,16453,13787,30616,16490,16495,23646,30654,30667,22770,30744,28857,30748,16552,30777,30791,30801,30822,33864,152885,31027,26627,31026,16643,16649,31121,31129,36795,31238,36796,16743,31377,16818,31420,33401,16836,31439,31451,16847,20001,31586,31596,31611,31762,31771,16992,17018,31867,31900,17036,31928,17044,31981,36755,28864,134351,32207,32212,32208,32253,32686,32692,29343,17303,32800,32805,31545,32814,32817,32852,15820,22452,28832,32951,33001,17389,33036,29482,33038,33042,30048,33044,17409,15161,33110,33113,33114,17427,22586,33148,33156,17445,33171,17453,33189,22511,33217,33252,33364,17551,33446,33398,33482,33496,33535,17584,33623,38505,27018,33797,28917,33892,24803,33928,17668,33982,34017,34040,34064,34104,34130,17723,34159,34160,34272,17783,34418,34450,34482,34543,38469,34699,17926,17943,34990,35071,35108,35143,35217,162151,35369,35384,35476,35508,35921,36052,36082,36124,18328,22623,36291,18413,20206,36410,21976,22356,36465,22005,36528,18487,36558,36578,36580,36589,36594,36791,36801,36810,36812,36915,39364,18605,39136,37395,18718,37416,37464,37483,37553,37550,37567,37603,37611,37619,37620,37629,37699,37764,37805,18757,18769,40639,37911,21249,37917,37933,37950,18794,37972,38009,38189,38306,18855,38388,38451,18917,26528,18980,38720,18997,38834,38850,22100,19172,24808,39097,19225,39153,22596,39182,39193,20916,39196,39223,39234,39261,39266,19312,39365,19357,39484,39695,31363,39785,39809,39901,39921,39924,19565,39968,14191,138178,40265,39994,40702,22096,40339,40381,40384,40444,38134,36790,40571,40620,40625,40637,40646,38108,40674,40689,40696,31432,40772,131220,131767,132000,26906,38083,22956,132311,22592,38081,14265,132565,132629,132726,136890,22359,29043,133826,133837,134079,21610,194619,134091,21662,134139,134203,134227,134245,134268,24807,134285,22138,134325,134365,134381,134511,134578,134600,26965,39983,34725,134660,134670,134871,135056,134957,134771,23584,135100,24075,135260,135247,135286,26398,135291,135304,135318,13895,135359,135379,135471,135483,21348,33965,135907,136053,135990,35713,136567,136729,137155,137159,20088,28859,137261,137578,137773,137797,138282,138352,138412,138952,25283,138965,139029,29080,26709,139333,27113,14024,139900,140247,140282,141098,141425,141647,33533,141671,141715,142037,35237,142056,36768,142094,38840,142143,38983,39613,142412,null,142472,142519,154600,142600,142610,142775,142741,142914,143220,143308,143411,143462,144159,144350,24497,26184,26303,162425,144743,144883,29185,149946,30679,144922,145174,32391,131910,22709,26382,26904,146087,161367,155618,146961,147129,161278,139418,18640,19128,147737,166554,148206,148237,147515,148276,148374,150085,132554,20946,132625,22943,138920,15294,146687,148484,148694,22408,149108,14747,149295,165352,170441,14178,139715,35678,166734,39382,149522,149755,150037,29193,150208,134264,22885,151205,151430,132985,36570,151596,21135,22335,29041,152217,152601,147274,150183,21948,152646,152686,158546,37332,13427,152895,161330,152926,18200,152930,152934,153543,149823,153693,20582,13563,144332,24798,153859,18300,166216,154286,154505,154630,138640,22433,29009,28598,155906,162834,36950,156082,151450,35682,156674,156746,23899,158711,36662,156804,137500,35562,150006,156808,147439,156946,19392,157119,157365,141083,37989,153569,24981,23079,194765,20411,22201,148769,157436,20074,149812,38486,28047,158909,13848,35191,157593,157806,156689,157790,29151,157895,31554,168128,133649,157990,37124,158009,31301,40432,158202,39462,158253,13919,156777,131105,31107,158260,158555,23852,144665,33743,158621,18128,158884,30011,34917,159150,22710,14108,140685,159819,160205,15444,160384,160389,37505,139642,160395,37680,160486,149968,27705,38047,160848,134904,34855,35061,141606,164979,137137,28344,150058,137248,14756,14009,23568,31203,17727,26294,171181,170148,35139,161740,161880,22230,16607,136714,14753,145199,164072,136133,29101,33638,162269,168360,23143,19639,159919,166315,162301,162314,162571,163174,147834,31555,31102,163849,28597,172767,27139,164632,21410,159239,37823,26678,38749,164207,163875,158133,136173,143919,163912,23941,166960,163971,22293,38947,166217,23979,149896,26046,27093,21458,150181,147329,15377,26422,163984,164084,164142,139169,164175,164233,164271,164378,164614,164655,164746,13770,164968,165546,18682,25574,166230,30728,37461,166328,17394,166375,17375,166376,166726,166868,23032,166921,36619,167877,168172,31569,168208,168252,15863,168286,150218,36816,29327,22155,169191,169449,169392,169400,169778,170193,170313,170346,170435,170536,170766,171354,171419,32415,171768,171811,19620,38215,172691,29090,172799,19857,36882,173515,19868,134300,36798,21953,36794,140464,36793,150163,17673,32383,28502,27313,20202,13540,166700,161949,14138,36480,137205,163876,166764,166809,162366,157359,15851,161365,146615,153141,153942,20122,155265,156248,22207,134765,36366,23405,147080,150686,25566,25296,137206,137339,25904,22061,154698,21530,152337,15814,171416,19581,22050,22046,32585,155352,22901,146752,34672,19996,135146,134473,145082,33047,40286,36120,30267,40005,30286,30649,37701,21554,33096,33527,22053,33074,33816,32957,21994,31074,22083,21526,134813,13774,22021,22001,26353,164578,13869,30004,22000,21946,21655,21874,134209,134294,24272,151880,134774,142434,134818,40619,32090,21982,135285,25245,38765,21652,36045,29174,37238,25596,25529,25598,21865,142147,40050,143027,20890,13535,134567,20903,21581,21790,21779,30310,36397,157834,30129,32950,34820,34694,35015,33206,33820,135361,17644,29444,149254,23440,33547,157843,22139,141044,163119,147875,163187,159440,160438,37232,135641,37384,146684,173737,134828,134905,29286,138402,18254,151490,163833,135147,16634,40029,25887,142752,18675,149472,171388,135148,134666,24674,161187,135149,null,155720,135559,29091,32398,40272,19994,19972,13687,23309,27826,21351,13996,14812,21373,13989,149016,22682,150382,33325,21579,22442,154261,133497,null,14930,140389,29556,171692,19721,39917,146686,171824,19547,151465,169374,171998,33884,146870,160434,157619,145184,25390,32037,147191,146988,14890,36872,21196,15988,13946,17897,132238,30272,23280,134838,30842,163630,22695,16575,22140,39819,23924,30292,173108,40581,19681,30201,14331,24857,143578,148466,null,22109,135849,22439,149859,171526,21044,159918,13741,27722,40316,31830,39737,22494,137068,23635,25811,169168,156469,160100,34477,134440,159010,150242,134513,null,20990,139023,23950,38659,138705,40577,36940,31519,39682,23761,31651,25192,25397,39679,31695,39722,31870,39726,31810,31878,39957,31740,39689,40727,39963,149822,40794,21875,23491,20477,40600,20466,21088,15878,21201,22375,20566,22967,24082,38856,40363,36700,21609,38836,39232,38842,21292,24880,26924,21466,39946,40194,19515,38465,27008,20646,30022,137069,39386,21107,null,37209,38529,37212,null,37201,167575,25471,159011,27338,22033,37262,30074,25221,132092,29519,31856,154657,146685,null,149785,30422,39837,20010,134356,33726,34882,null,23626,27072,20717,22394,21023,24053,20174,27697,131570,20281,21660,21722,21146,36226,13822,24332,13811,null,27474,37244,40869,39831,38958,39092,39610,40616,40580,29050,31508,null,27642,34840,32632,null,22048,173642,36471,40787,null,36308,36431,40476,36353,25218,164733,36392,36469,31443,150135,31294,30936,27882,35431,30215,166490,40742,27854,34774,30147,172722,30803,194624,36108,29410,29553,35629,29442,29937,36075,150203,34351,24506,34976,17591,null,137275,159237,null,35454,140571,null,24829,30311,39639,40260,37742,39823,34805,null,34831,36087,29484,38689,39856,13782,29362,19463,31825,39242,155993,24921,19460,40598,24957,null,22367,24943,25254,25145,25294,14940,25058,21418,144373,25444,26626,13778,23895,166850,36826,167481,null,20697,138566,30982,21298,38456,134971,16485,null,30718,null,31938,155418,31962,31277,32870,32867,32077,29957,29938,35220,33306,26380,32866,160902,32859,29936,33027,30500,35209,157644,30035,159441,34729,34766,33224,34700,35401,36013,35651,30507,29944,34010,13877,27058,36262,null,35241,29800,28089,34753,147473,29927,15835,29046,24740,24988,15569,29026,24695,null,32625,166701,29264,24809,19326,21024,15384,146631,155351,161366,152881,137540,135934,170243,159196,159917,23745,156077,166415,145015,131310,157766,151310,17762,23327,156492,40784,40614,156267,12288,65292,12289,12290,65294,8231,65307,65306,65311,65281,65072,8230,8229,65104,65105,65106,183,65108,65109,65110,65111,65372,8211,65073,8212,65075,9588,65076,65103,65288,65289,65077,65078,65371,65373,65079,65080,12308,12309,65081,65082,12304,12305,65083,65084,12298,12299,65085,65086,12296,12297,65087,65088,12300,12301,65089,65090,12302,12303,65091,65092,65113,65114,65115,65116,65117,65118,8216,8217,8220,8221,12317,12318,8245,8242,65283,65286,65290,8251,167,12291,9675,9679,9651,9650,9678,9734,9733,9671,9670,9633,9632,9661,9660,12963,8453,175,65507,65343,717,65097,65098,65101,65102,65099,65100,65119,65120,65121,65291,65293,215,247,177,8730,65308,65310,65309,8806,8807,8800,8734,8786,8801,65122,65123,65124,65125,65126,65374,8745,8746,8869,8736,8735,8895,13266,13265,8747,8750,8757,8756,9792,9794,8853,8857,8593,8595,8592,8594,8598,8599,8601,8600,8741,8739,65295,65340,8725,65128,65284,65509,12306,65504,65505,65285,65312,8451,8457,65129,65130,65131,13269,13212,13213,13214,13262,13217,13198,13199,13252,176,20825,20827,20830,20829,20833,20835,21991,29929,31950,9601,9602,9603,9604,9605,9606,9607,9608,9615,9614,9613,9612,9611,9610,9609,9532,9524,9516,9508,9500,9620,9472,9474,9621,9484,9488,9492,9496,9581,9582,9584,9583,9552,9566,9578,9569,9698,9699,9701,9700,9585,9586,9587,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,12321,12322,12323,12324,12325,12326,12327,12328,12329,21313,21316,21317,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,12549,12550,12551,12552,12553,12554,12555,12556,12557,12558,12559,12560,12561,12562,12563,12564,12565,12566,12567,12568,12569,12570,12571,12572,12573,12574,12575,12576,12577,12578,12579,12580,12581,12582,12583,12584,12585,729,713,714,711,715,9216,9217,9218,9219,9220,9221,9222,9223,9224,9225,9226,9227,9228,9229,9230,9231,9232,9233,9234,9235,9236,9237,9238,9239,9240,9241,9242,9243,9244,9245,9246,9247,9249,8364,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,19968,20057,19969,19971,20035,20061,20102,20108,20154,20799,20837,20843,20960,20992,20993,21147,21269,21313,21340,21448,19977,19979,19976,19978,20011,20024,20961,20037,20040,20063,20062,20110,20129,20800,20995,21242,21315,21449,21475,22303,22763,22805,22823,22899,23376,23377,23379,23544,23567,23586,23608,23665,24029,24037,24049,24050,24051,24062,24178,24318,24331,24339,25165,19985,19984,19981,20013,20016,20025,20043,23609,20104,20113,20117,20114,20116,20130,20161,20160,20163,20166,20167,20173,20170,20171,20164,20803,20801,20839,20845,20846,20844,20887,20982,20998,20999,21000,21243,21246,21247,21270,21305,21320,21319,21317,21342,21380,21451,21450,21453,22764,22825,22827,22826,22829,23380,23569,23588,23610,23663,24052,24187,24319,24340,24341,24515,25096,25142,25163,25166,25903,25991,26007,26020,26041,26085,26352,26376,26408,27424,27490,27513,27595,27604,27611,27663,27700,28779,29226,29238,29243,29255,29273,29275,29356,29579,19993,19990,19989,19988,19992,20027,20045,20047,20046,20197,20184,20180,20181,20182,20183,20195,20196,20185,20190,20805,20804,20873,20874,20908,20985,20986,20984,21002,21152,21151,21253,21254,21271,21277,20191,21322,21321,21345,21344,21359,21358,21435,21487,21476,21491,21484,21486,21481,21480,21500,21496,21493,21483,21478,21482,21490,21489,21488,21477,21485,21499,22235,22234,22806,22830,22833,22900,22902,23381,23427,23612,24040,24039,24038,24066,24067,24179,24188,24321,24344,24343,24517,25098,25171,25172,25170,25169,26021,26086,26414,26412,26410,26411,26413,27491,27597,27665,27664,27704,27713,27712,27710,29359,29572,29577,29916,29926,29976,29983,29992,29993,30000,30001,30002,30003,30091,30333,30382,30399,30446,30683,30690,30707,31034,31166,31348,31435,19998,19999,20050,20051,20073,20121,20132,20134,20133,20223,20233,20249,20234,20245,20237,20240,20241,20239,20210,20214,20219,20208,20211,20221,20225,20235,20809,20807,20806,20808,20840,20849,20877,20912,21015,21009,21010,21006,21014,21155,21256,21281,21280,21360,21361,21513,21519,21516,21514,21520,21505,21515,21508,21521,21517,21512,21507,21518,21510,21522,22240,22238,22237,22323,22320,22312,22317,22316,22319,22313,22809,22810,22839,22840,22916,22904,22915,22909,22905,22914,22913,23383,23384,23431,23432,23429,23433,23546,23574,23673,24030,24070,24182,24180,24335,24347,24537,24534,25102,25100,25101,25104,25187,25179,25176,25910,26089,26088,26092,26093,26354,26355,26377,26429,26420,26417,26421,27425,27492,27515,27670,27741,27735,27737,27743,27744,27728,27733,27745,27739,27725,27726,28784,29279,29277,30334,31481,31859,31992,32566,32650,32701,32769,32771,32780,32786,32819,32895,32905,32907,32908,33251,33258,33267,33276,33292,33307,33311,33390,33394,33406,34411,34880,34892,34915,35199,38433,20018,20136,20301,20303,20295,20311,20318,20276,20315,20309,20272,20304,20305,20285,20282,20280,20291,20308,20284,20294,20323,20316,20320,20271,20302,20278,20313,20317,20296,20314,20812,20811,20813,20853,20918,20919,21029,21028,21033,21034,21032,21163,21161,21162,21164,21283,21363,21365,21533,21549,21534,21566,21542,21582,21543,21574,21571,21555,21576,21570,21531,21545,21578,21561,21563,21560,21550,21557,21558,21536,21564,21568,21553,21547,21535,21548,22250,22256,22244,22251,22346,22353,22336,22349,22343,22350,22334,22352,22351,22331,22767,22846,22941,22930,22952,22942,22947,22937,22934,22925,22948,22931,22922,22949,23389,23388,23386,23387,23436,23435,23439,23596,23616,23617,23615,23614,23696,23697,23700,23692,24043,24076,24207,24199,24202,24311,24324,24351,24420,24418,24439,24441,24536,24524,24535,24525,24561,24555,24568,24554,25106,25105,25220,25239,25238,25216,25206,25225,25197,25226,25212,25214,25209,25203,25234,25199,25240,25198,25237,25235,25233,25222,25913,25915,25912,26097,26356,26463,26446,26447,26448,26449,26460,26454,26462,26441,26438,26464,26451,26455,27493,27599,27714,27742,27801,27777,27784,27785,27781,27803,27754,27770,27792,27760,27788,27752,27798,27794,27773,27779,27762,27774,27764,27782,27766,27789,27796,27800,27778,28790,28796,28797,28792,29282,29281,29280,29380,29378,29590,29996,29995,30007,30008,30338,30447,30691,31169,31168,31167,31350,31995,32597,32918,32915,32925,32920,32923,32922,32946,33391,33426,33419,33421,35211,35282,35328,35895,35910,35925,35997,36196,36208,36275,36523,36554,36763,36784,36802,36806,36805,36804,24033,37009,37026,37034,37030,37027,37193,37318,37324,38450,38446,38449,38442,38444,20006,20054,20083,20107,20123,20126,20139,20140,20335,20381,20365,20339,20351,20332,20379,20363,20358,20355,20336,20341,20360,20329,20347,20374,20350,20367,20369,20346,20820,20818,20821,20841,20855,20854,20856,20925,20989,21051,21048,21047,21050,21040,21038,21046,21057,21182,21179,21330,21332,21331,21329,21350,21367,21368,21369,21462,21460,21463,21619,21621,21654,21624,21653,21632,21627,21623,21636,21650,21638,21628,21648,21617,21622,21644,21658,21602,21608,21643,21629,21646,22266,22403,22391,22378,22377,22369,22374,22372,22396,22812,22857,22855,22856,22852,22868,22974,22971,22996,22969,22958,22993,22982,22992,22989,22987,22995,22986,22959,22963,22994,22981,23391,23396,23395,23447,23450,23448,23452,23449,23451,23578,23624,23621,23622,23735,23713,23736,23721,23723,23729,23731,24088,24090,24086,24085,24091,24081,24184,24218,24215,24220,24213,24214,24310,24358,24359,24361,24448,24449,24447,24444,24541,24544,24573,24565,24575,24591,24596,24623,24629,24598,24618,24597,24609,24615,24617,24619,24603,25110,25109,25151,25150,25152,25215,25289,25292,25284,25279,25282,25273,25298,25307,25259,25299,25300,25291,25288,25256,25277,25276,25296,25305,25287,25293,25269,25306,25265,25304,25302,25303,25286,25260,25294,25918,26023,26044,26106,26132,26131,26124,26118,26114,26126,26112,26127,26133,26122,26119,26381,26379,26477,26507,26517,26481,26524,26483,26487,26503,26525,26519,26479,26480,26495,26505,26494,26512,26485,26522,26515,26492,26474,26482,27427,27494,27495,27519,27667,27675,27875,27880,27891,27825,27852,27877,27827,27837,27838,27836,27874,27819,27861,27859,27832,27844,27833,27841,27822,27863,27845,27889,27839,27835,27873,27867,27850,27820,27887,27868,27862,27872,28821,28814,28818,28810,28825,29228,29229,29240,29256,29287,29289,29376,29390,29401,29399,29392,29609,29608,29599,29611,29605,30013,30109,30105,30106,30340,30402,30450,30452,30693,30717,31038,31040,31041,31177,31176,31354,31353,31482,31998,32596,32652,32651,32773,32954,32933,32930,32945,32929,32939,32937,32948,32938,32943,33253,33278,33293,33459,33437,33433,33453,33469,33439,33465,33457,33452,33445,33455,33464,33443,33456,33470,33463,34382,34417,21021,34920,36555,36814,36820,36817,37045,37048,37041,37046,37319,37329,38263,38272,38428,38464,38463,38459,38468,38466,38585,38632,38738,38750,20127,20141,20142,20449,20405,20399,20415,20448,20433,20431,20445,20419,20406,20440,20447,20426,20439,20398,20432,20420,20418,20442,20430,20446,20407,20823,20882,20881,20896,21070,21059,21066,21069,21068,21067,21063,21191,21193,21187,21185,21261,21335,21371,21402,21467,21676,21696,21672,21710,21705,21688,21670,21683,21703,21698,21693,21674,21697,21700,21704,21679,21675,21681,21691,21673,21671,21695,22271,22402,22411,22432,22435,22434,22478,22446,22419,22869,22865,22863,22862,22864,23004,23000,23039,23011,23016,23043,23013,23018,23002,23014,23041,23035,23401,23459,23462,23460,23458,23461,23553,23630,23631,23629,23627,23769,23762,24055,24093,24101,24095,24189,24224,24230,24314,24328,24365,24421,24456,24453,24458,24459,24455,24460,24457,24594,24605,24608,24613,24590,24616,24653,24688,24680,24674,24646,24643,24684,24683,24682,24676,25153,25308,25366,25353,25340,25325,25345,25326,25341,25351,25329,25335,25327,25324,25342,25332,25361,25346,25919,25925,26027,26045,26082,26149,26157,26144,26151,26159,26143,26152,26161,26148,26359,26623,26579,26609,26580,26576,26604,26550,26543,26613,26601,26607,26564,26577,26548,26586,26597,26552,26575,26590,26611,26544,26585,26594,26589,26578,27498,27523,27526,27573,27602,27607,27679,27849,27915,27954,27946,27969,27941,27916,27953,27934,27927,27963,27965,27966,27958,27931,27893,27961,27943,27960,27945,27950,27957,27918,27947,28843,28858,28851,28844,28847,28845,28856,28846,28836,29232,29298,29295,29300,29417,29408,29409,29623,29642,29627,29618,29645,29632,29619,29978,29997,30031,30028,30030,30027,30123,30116,30117,30114,30115,30328,30342,30343,30344,30408,30406,30403,30405,30465,30457,30456,30473,30475,30462,30460,30471,30684,30722,30740,30732,30733,31046,31049,31048,31047,31161,31162,31185,31186,31179,31359,31361,31487,31485,31869,32002,32005,32000,32009,32007,32004,32006,32568,32654,32703,32772,32784,32781,32785,32822,32982,32997,32986,32963,32964,32972,32993,32987,32974,32990,32996,32989,33268,33314,33511,33539,33541,33507,33499,33510,33540,33509,33538,33545,33490,33495,33521,33537,33500,33492,33489,33502,33491,33503,33519,33542,34384,34425,34427,34426,34893,34923,35201,35284,35336,35330,35331,35998,36000,36212,36211,36276,36557,36556,36848,36838,36834,36842,36837,36845,36843,36836,36840,37066,37070,37057,37059,37195,37194,37325,38274,38480,38475,38476,38477,38754,38761,38859,38893,38899,38913,39080,39131,39135,39318,39321,20056,20147,20492,20493,20515,20463,20518,20517,20472,20521,20502,20486,20540,20511,20506,20498,20497,20474,20480,20500,20520,20465,20513,20491,20505,20504,20467,20462,20525,20522,20478,20523,20489,20860,20900,20901,20898,20941,20940,20934,20939,21078,21084,21076,21083,21085,21290,21375,21407,21405,21471,21736,21776,21761,21815,21756,21733,21746,21766,21754,21780,21737,21741,21729,21769,21742,21738,21734,21799,21767,21757,21775,22275,22276,22466,22484,22475,22467,22537,22799,22871,22872,22874,23057,23064,23068,23071,23067,23059,23020,23072,23075,23081,23077,23052,23049,23403,23640,23472,23475,23478,23476,23470,23477,23481,23480,23556,23633,23637,23632,23789,23805,23803,23786,23784,23792,23798,23809,23796,24046,24109,24107,24235,24237,24231,24369,24466,24465,24464,24665,24675,24677,24656,24661,24685,24681,24687,24708,24735,24730,24717,24724,24716,24709,24726,25159,25331,25352,25343,25422,25406,25391,25429,25410,25414,25423,25417,25402,25424,25405,25386,25387,25384,25421,25420,25928,25929,26009,26049,26053,26178,26185,26191,26179,26194,26188,26181,26177,26360,26388,26389,26391,26657,26680,26696,26694,26707,26681,26690,26708,26665,26803,26647,26700,26705,26685,26612,26704,26688,26684,26691,26666,26693,26643,26648,26689,27530,27529,27575,27683,27687,27688,27686,27684,27888,28010,28053,28040,28039,28006,28024,28023,27993,28051,28012,28041,28014,27994,28020,28009,28044,28042,28025,28037,28005,28052,28874,28888,28900,28889,28872,28879,29241,29305,29436,29433,29437,29432,29431,29574,29677,29705,29678,29664,29674,29662,30036,30045,30044,30042,30041,30142,30149,30151,30130,30131,30141,30140,30137,30146,30136,30347,30384,30410,30413,30414,30505,30495,30496,30504,30697,30768,30759,30776,30749,30772,30775,30757,30765,30752,30751,30770,31061,31056,31072,31071,31062,31070,31069,31063,31066,31204,31203,31207,31199,31206,31209,31192,31364,31368,31449,31494,31505,31881,32033,32023,32011,32010,32032,32034,32020,32016,32021,32026,32028,32013,32025,32027,32570,32607,32660,32709,32705,32774,32792,32789,32793,32791,32829,32831,33009,33026,33008,33029,33005,33012,33030,33016,33011,33032,33021,33034,33020,33007,33261,33260,33280,33296,33322,33323,33320,33324,33467,33579,33618,33620,33610,33592,33616,33609,33589,33588,33615,33586,33593,33590,33559,33600,33585,33576,33603,34388,34442,34474,34451,34468,34473,34444,34467,34460,34928,34935,34945,34946,34941,34937,35352,35344,35342,35340,35349,35338,35351,35347,35350,35343,35345,35912,35962,35961,36001,36002,36215,36524,36562,36564,36559,36785,36865,36870,36855,36864,36858,36852,36867,36861,36869,36856,37013,37089,37085,37090,37202,37197,37196,37336,37341,37335,37340,37337,38275,38498,38499,38497,38491,38493,38500,38488,38494,38587,39138,39340,39592,39640,39717,39730,39740,20094,20602,20605,20572,20551,20547,20556,20570,20553,20581,20598,20558,20565,20597,20596,20599,20559,20495,20591,20589,20828,20885,20976,21098,21103,21202,21209,21208,21205,21264,21263,21273,21311,21312,21310,21443,26364,21830,21866,21862,21828,21854,21857,21827,21834,21809,21846,21839,21845,21807,21860,21816,21806,21852,21804,21859,21811,21825,21847,22280,22283,22281,22495,22533,22538,22534,22496,22500,22522,22530,22581,22519,22521,22816,22882,23094,23105,23113,23142,23146,23104,23100,23138,23130,23110,23114,23408,23495,23493,23492,23490,23487,23494,23561,23560,23559,23648,23644,23645,23815,23814,23822,23835,23830,23842,23825,23849,23828,23833,23844,23847,23831,24034,24120,24118,24115,24119,24247,24248,24246,24245,24254,24373,24375,24407,24428,24425,24427,24471,24473,24478,24472,24481,24480,24476,24703,24739,24713,24736,24744,24779,24756,24806,24765,24773,24763,24757,24796,24764,24792,24789,24774,24799,24760,24794,24775,25114,25115,25160,25504,25511,25458,25494,25506,25509,25463,25447,25496,25514,25457,25513,25481,25475,25499,25451,25512,25476,25480,25497,25505,25516,25490,25487,25472,25467,25449,25448,25466,25949,25942,25937,25945,25943,21855,25935,25944,25941,25940,26012,26011,26028,26063,26059,26060,26062,26205,26202,26212,26216,26214,26206,26361,21207,26395,26753,26799,26786,26771,26805,26751,26742,26801,26791,26775,26800,26755,26820,26797,26758,26757,26772,26781,26792,26783,26785,26754,27442,27578,27627,27628,27691,28046,28092,28147,28121,28082,28129,28108,28132,28155,28154,28165,28103,28107,28079,28113,28078,28126,28153,28088,28151,28149,28101,28114,28186,28085,28122,28139,28120,28138,28145,28142,28136,28102,28100,28074,28140,28095,28134,28921,28937,28938,28925,28911,29245,29309,29313,29468,29467,29462,29459,29465,29575,29701,29706,29699,29702,29694,29709,29920,29942,29943,29980,29986,30053,30054,30050,30064,30095,30164,30165,30133,30154,30157,30350,30420,30418,30427,30519,30526,30524,30518,30520,30522,30827,30787,30798,31077,31080,31085,31227,31378,31381,31520,31528,31515,31532,31526,31513,31518,31534,31890,31895,31893,32070,32067,32113,32046,32057,32060,32064,32048,32051,32068,32047,32066,32050,32049,32573,32670,32666,32716,32718,32722,32796,32842,32838,33071,33046,33059,33067,33065,33072,33060,33282,33333,33335,33334,33337,33678,33694,33688,33656,33698,33686,33725,33707,33682,33674,33683,33673,33696,33655,33659,33660,33670,33703,34389,24426,34503,34496,34486,34500,34485,34502,34507,34481,34479,34505,34899,34974,34952,34987,34962,34966,34957,34955,35219,35215,35370,35357,35363,35365,35377,35373,35359,35355,35362,35913,35930,36009,36012,36011,36008,36010,36007,36199,36198,36286,36282,36571,36575,36889,36877,36890,36887,36899,36895,36893,36880,36885,36894,36896,36879,36898,36886,36891,36884,37096,37101,37117,37207,37326,37365,37350,37347,37351,37357,37353,38281,38506,38517,38515,38520,38512,38516,38518,38519,38508,38592,38634,38633,31456,31455,38914,38915,39770,40165,40565,40575,40613,40635,20642,20621,20613,20633,20625,20608,20630,20632,20634,26368,20977,21106,21108,21109,21097,21214,21213,21211,21338,21413,21883,21888,21927,21884,21898,21917,21912,21890,21916,21930,21908,21895,21899,21891,21939,21934,21919,21822,21938,21914,21947,21932,21937,21886,21897,21931,21913,22285,22575,22570,22580,22564,22576,22577,22561,22557,22560,22777,22778,22880,23159,23194,23167,23186,23195,23207,23411,23409,23506,23500,23507,23504,23562,23563,23601,23884,23888,23860,23879,24061,24133,24125,24128,24131,24190,24266,24257,24258,24260,24380,24429,24489,24490,24488,24785,24801,24754,24758,24800,24860,24867,24826,24853,24816,24827,24820,24936,24817,24846,24822,24841,24832,24850,25119,25161,25507,25484,25551,25536,25577,25545,25542,25549,25554,25571,25552,25569,25558,25581,25582,25462,25588,25578,25563,25682,25562,25593,25950,25958,25954,25955,26001,26000,26031,26222,26224,26228,26230,26223,26257,26234,26238,26231,26366,26367,26399,26397,26874,26837,26848,26840,26839,26885,26847,26869,26862,26855,26873,26834,26866,26851,26827,26829,26893,26898,26894,26825,26842,26990,26875,27454,27450,27453,27544,27542,27580,27631,27694,27695,27692,28207,28216,28244,28193,28210,28263,28234,28192,28197,28195,28187,28251,28248,28196,28246,28270,28205,28198,28271,28212,28237,28218,28204,28227,28189,28222,28363,28297,28185,28238,28259,28228,28274,28265,28255,28953,28954,28966,28976,28961,28982,29038,28956,29260,29316,29312,29494,29477,29492,29481,29754,29738,29747,29730,29733,29749,29750,29748,29743,29723,29734,29736,29989,29990,30059,30058,30178,30171,30179,30169,30168,30174,30176,30331,30332,30358,30355,30388,30428,30543,30701,30813,30828,30831,31245,31240,31243,31237,31232,31384,31383,31382,31461,31459,31561,31574,31558,31568,31570,31572,31565,31563,31567,31569,31903,31909,32094,32080,32104,32085,32043,32110,32114,32097,32102,32098,32112,32115,21892,32724,32725,32779,32850,32901,33109,33108,33099,33105,33102,33081,33094,33086,33100,33107,33140,33298,33308,33769,33795,33784,33805,33760,33733,33803,33729,33775,33777,33780,33879,33802,33776,33804,33740,33789,33778,33738,33848,33806,33796,33756,33799,33748,33759,34395,34527,34521,34541,34516,34523,34532,34512,34526,34903,35009,35010,34993,35203,35222,35387,35424,35413,35422,35388,35393,35412,35419,35408,35398,35380,35386,35382,35414,35937,35970,36015,36028,36019,36029,36033,36027,36032,36020,36023,36022,36031,36024,36234,36229,36225,36302,36317,36299,36314,36305,36300,36315,36294,36603,36600,36604,36764,36910,36917,36913,36920,36914,36918,37122,37109,37129,37118,37219,37221,37327,37396,37397,37411,37385,37406,37389,37392,37383,37393,38292,38287,38283,38289,38291,38290,38286,38538,38542,38539,38525,38533,38534,38541,38514,38532,38593,38597,38596,38598,38599,38639,38642,38860,38917,38918,38920,39143,39146,39151,39145,39154,39149,39342,39341,40643,40653,40657,20098,20653,20661,20658,20659,20677,20670,20652,20663,20667,20655,20679,21119,21111,21117,21215,21222,21220,21218,21219,21295,21983,21992,21971,21990,21966,21980,21959,21969,21987,21988,21999,21978,21985,21957,21958,21989,21961,22290,22291,22622,22609,22616,22615,22618,22612,22635,22604,22637,22602,22626,22610,22603,22887,23233,23241,23244,23230,23229,23228,23219,23234,23218,23913,23919,24140,24185,24265,24264,24338,24409,24492,24494,24858,24847,24904,24863,24819,24859,24825,24833,24840,24910,24908,24900,24909,24894,24884,24871,24845,24838,24887,25121,25122,25619,25662,25630,25642,25645,25661,25644,25615,25628,25620,25613,25654,25622,25623,25606,25964,26015,26032,26263,26249,26247,26248,26262,26244,26264,26253,26371,27028,26989,26970,26999,26976,26964,26997,26928,27010,26954,26984,26987,26974,26963,27001,27014,26973,26979,26971,27463,27506,27584,27583,27603,27645,28322,28335,28371,28342,28354,28304,28317,28359,28357,28325,28312,28348,28346,28331,28369,28310,28316,28356,28372,28330,28327,28340,29006,29017,29033,29028,29001,29031,29020,29036,29030,29004,29029,29022,28998,29032,29014,29242,29266,29495,29509,29503,29502,29807,29786,29781,29791,29790,29761,29759,29785,29787,29788,30070,30072,30208,30192,30209,30194,30193,30202,30207,30196,30195,30430,30431,30555,30571,30566,30558,30563,30585,30570,30572,30556,30565,30568,30562,30702,30862,30896,30871,30872,30860,30857,30844,30865,30867,30847,31098,31103,31105,33836,31165,31260,31258,31264,31252,31263,31262,31391,31392,31607,31680,31584,31598,31591,31921,31923,31925,32147,32121,32145,32129,32143,32091,32622,32617,32618,32626,32681,32680,32676,32854,32856,32902,32900,33137,33136,33144,33125,33134,33139,33131,33145,33146,33126,33285,33351,33922,33911,33853,33841,33909,33894,33899,33865,33900,33883,33852,33845,33889,33891,33897,33901,33862,34398,34396,34399,34553,34579,34568,34567,34560,34558,34555,34562,34563,34566,34570,34905,35039,35028,35033,35036,35032,35037,35041,35018,35029,35026,35228,35299,35435,35442,35443,35430,35433,35440,35463,35452,35427,35488,35441,35461,35437,35426,35438,35436,35449,35451,35390,35432,35938,35978,35977,36042,36039,36040,36036,36018,36035,36034,36037,36321,36319,36328,36335,36339,36346,36330,36324,36326,36530,36611,36617,36606,36618,36767,36786,36939,36938,36947,36930,36948,36924,36949,36944,36935,36943,36942,36941,36945,36926,36929,37138,37143,37228,37226,37225,37321,37431,37463,37432,37437,37440,37438,37467,37451,37476,37457,37428,37449,37453,37445,37433,37439,37466,38296,38552,38548,38549,38605,38603,38601,38602,38647,38651,38649,38646,38742,38772,38774,38928,38929,38931,38922,38930,38924,39164,39156,39165,39166,39347,39345,39348,39649,40169,40578,40718,40723,40736,20711,20718,20709,20694,20717,20698,20693,20687,20689,20721,20686,20713,20834,20979,21123,21122,21297,21421,22014,22016,22043,22039,22013,22036,22022,22025,22029,22030,22007,22038,22047,22024,22032,22006,22296,22294,22645,22654,22659,22675,22666,22649,22661,22653,22781,22821,22818,22820,22890,22889,23265,23270,23273,23255,23254,23256,23267,23413,23518,23527,23521,23525,23526,23528,23522,23524,23519,23565,23650,23940,23943,24155,24163,24149,24151,24148,24275,24278,24330,24390,24432,24505,24903,24895,24907,24951,24930,24931,24927,24922,24920,24949,25130,25735,25688,25684,25764,25720,25695,25722,25681,25703,25652,25709,25723,25970,26017,26071,26070,26274,26280,26269,27036,27048,27029,27073,27054,27091,27083,27035,27063,27067,27051,27060,27088,27085,27053,27084,27046,27075,27043,27465,27468,27699,28467,28436,28414,28435,28404,28457,28478,28448,28460,28431,28418,28450,28415,28399,28422,28465,28472,28466,28451,28437,28459,28463,28552,28458,28396,28417,28402,28364,28407,29076,29081,29053,29066,29060,29074,29246,29330,29334,29508,29520,29796,29795,29802,29808,29805,29956,30097,30247,30221,30219,30217,30227,30433,30435,30596,30589,30591,30561,30913,30879,30887,30899,30889,30883,31118,31119,31117,31278,31281,31402,31401,31469,31471,31649,31637,31627,31605,31639,31645,31636,31631,31672,31623,31620,31929,31933,31934,32187,32176,32156,32189,32190,32160,32202,32180,32178,32177,32186,32162,32191,32181,32184,32173,32210,32199,32172,32624,32736,32737,32735,32862,32858,32903,33104,33152,33167,33160,33162,33151,33154,33255,33274,33287,33300,33310,33355,33993,33983,33990,33988,33945,33950,33970,33948,33995,33976,33984,34003,33936,33980,34001,33994,34623,34588,34619,34594,34597,34612,34584,34645,34615,34601,35059,35074,35060,35065,35064,35069,35048,35098,35055,35494,35468,35486,35491,35469,35489,35475,35492,35498,35493,35496,35480,35473,35482,35495,35946,35981,35980,36051,36049,36050,36203,36249,36245,36348,36628,36626,36629,36627,36771,36960,36952,36956,36963,36953,36958,36962,36957,36955,37145,37144,37150,37237,37240,37239,37236,37496,37504,37509,37528,37526,37499,37523,37532,37544,37500,37521,38305,38312,38313,38307,38309,38308,38553,38556,38555,38604,38610,38656,38780,38789,38902,38935,38936,39087,39089,39171,39173,39180,39177,39361,39599,39600,39654,39745,39746,40180,40182,40179,40636,40763,40778,20740,20736,20731,20725,20729,20738,20744,20745,20741,20956,21127,21128,21129,21133,21130,21232,21426,22062,22075,22073,22066,22079,22068,22057,22099,22094,22103,22132,22070,22063,22064,22656,22687,22686,22707,22684,22702,22697,22694,22893,23305,23291,23307,23285,23308,23304,23534,23532,23529,23531,23652,23653,23965,23956,24162,24159,24161,24290,24282,24287,24285,24291,24288,24392,24433,24503,24501,24950,24935,24942,24925,24917,24962,24956,24944,24939,24958,24999,24976,25003,24974,25004,24986,24996,24980,25006,25134,25705,25711,25721,25758,25778,25736,25744,25776,25765,25747,25749,25769,25746,25774,25773,25771,25754,25772,25753,25762,25779,25973,25975,25976,26286,26283,26292,26289,27171,27167,27112,27137,27166,27161,27133,27169,27155,27146,27123,27138,27141,27117,27153,27472,27470,27556,27589,27590,28479,28540,28548,28497,28518,28500,28550,28525,28507,28536,28526,28558,28538,28528,28516,28567,28504,28373,28527,28512,28511,29087,29100,29105,29096,29270,29339,29518,29527,29801,29835,29827,29822,29824,30079,30240,30249,30239,30244,30246,30241,30242,30362,30394,30436,30606,30599,30604,30609,30603,30923,30917,30906,30922,30910,30933,30908,30928,31295,31292,31296,31293,31287,31291,31407,31406,31661,31665,31684,31668,31686,31687,31681,31648,31692,31946,32224,32244,32239,32251,32216,32236,32221,32232,32227,32218,32222,32233,32158,32217,32242,32249,32629,32631,32687,32745,32806,33179,33180,33181,33184,33178,33176,34071,34109,34074,34030,34092,34093,34067,34065,34083,34081,34068,34028,34085,34047,34054,34690,34676,34678,34656,34662,34680,34664,34649,34647,34636,34643,34907,34909,35088,35079,35090,35091,35093,35082,35516,35538,35527,35524,35477,35531,35576,35506,35529,35522,35519,35504,35542,35533,35510,35513,35547,35916,35918,35948,36064,36062,36070,36068,36076,36077,36066,36067,36060,36074,36065,36205,36255,36259,36395,36368,36381,36386,36367,36393,36383,36385,36382,36538,36637,36635,36639,36649,36646,36650,36636,36638,36645,36969,36974,36968,36973,36983,37168,37165,37159,37169,37255,37257,37259,37251,37573,37563,37559,37610,37548,37604,37569,37555,37564,37586,37575,37616,37554,38317,38321,38660,38662,38663,38665,38752,38797,38795,38799,38945,38955,38940,39091,39178,39187,39186,39192,39389,39376,39391,39387,39377,39381,39378,39385,39607,39662,39663,39719,39749,39748,39799,39791,40198,40201,40195,40617,40638,40654,22696,40786,20754,20760,20756,20752,20757,20864,20906,20957,21137,21139,21235,22105,22123,22137,22121,22116,22136,22122,22120,22117,22129,22127,22124,22114,22134,22721,22718,22727,22725,22894,23325,23348,23416,23536,23566,24394,25010,24977,25001,24970,25037,25014,25022,25034,25032,25136,25797,25793,25803,25787,25788,25818,25796,25799,25794,25805,25791,25810,25812,25790,25972,26310,26313,26297,26308,26311,26296,27197,27192,27194,27225,27243,27224,27193,27204,27234,27233,27211,27207,27189,27231,27208,27481,27511,27653,28610,28593,28577,28611,28580,28609,28583,28595,28608,28601,28598,28582,28576,28596,29118,29129,29136,29138,29128,29141,29113,29134,29145,29148,29123,29124,29544,29852,29859,29848,29855,29854,29922,29964,29965,30260,30264,30266,30439,30437,30624,30622,30623,30629,30952,30938,30956,30951,31142,31309,31310,31302,31308,31307,31418,31705,31761,31689,31716,31707,31713,31721,31718,31957,31958,32266,32273,32264,32283,32291,32286,32285,32265,32272,32633,32690,32752,32753,32750,32808,33203,33193,33192,33275,33288,33368,33369,34122,34137,34120,34152,34153,34115,34121,34157,34154,34142,34691,34719,34718,34722,34701,34913,35114,35122,35109,35115,35105,35242,35238,35558,35578,35563,35569,35584,35548,35559,35566,35582,35585,35586,35575,35565,35571,35574,35580,35947,35949,35987,36084,36420,36401,36404,36418,36409,36405,36667,36655,36664,36659,36776,36774,36981,36980,36984,36978,36988,36986,37172,37266,37664,37686,37624,37683,37679,37666,37628,37675,37636,37658,37648,37670,37665,37653,37678,37657,38331,38567,38568,38570,38613,38670,38673,38678,38669,38675,38671,38747,38748,38758,38808,38960,38968,38971,38967,38957,38969,38948,39184,39208,39198,39195,39201,39194,39405,39394,39409,39608,39612,39675,39661,39720,39825,40213,40227,40230,40232,40210,40219,40664,40660,40845,40860,20778,20767,20769,20786,21237,22158,22144,22160,22149,22151,22159,22741,22739,22737,22734,23344,23338,23332,23418,23607,23656,23996,23994,23997,23992,24171,24396,24509,25033,25026,25031,25062,25035,25138,25140,25806,25802,25816,25824,25840,25830,25836,25841,25826,25837,25986,25987,26329,26326,27264,27284,27268,27298,27292,27355,27299,27262,27287,27280,27296,27484,27566,27610,27656,28632,28657,28639,28640,28635,28644,28651,28655,28544,28652,28641,28649,28629,28654,28656,29159,29151,29166,29158,29157,29165,29164,29172,29152,29237,29254,29552,29554,29865,29872,29862,29864,30278,30274,30284,30442,30643,30634,30640,30636,30631,30637,30703,30967,30970,30964,30959,30977,31143,31146,31319,31423,31751,31757,31742,31735,31756,31712,31968,31964,31966,31970,31967,31961,31965,32302,32318,32326,32311,32306,32323,32299,32317,32305,32325,32321,32308,32313,32328,32309,32319,32303,32580,32755,32764,32881,32882,32880,32879,32883,33222,33219,33210,33218,33216,33215,33213,33225,33214,33256,33289,33393,34218,34180,34174,34204,34193,34196,34223,34203,34183,34216,34186,34407,34752,34769,34739,34770,34758,34731,34747,34746,34760,34763,35131,35126,35140,35128,35133,35244,35598,35607,35609,35611,35594,35616,35613,35588,35600,35905,35903,35955,36090,36093,36092,36088,36091,36264,36425,36427,36424,36426,36676,36670,36674,36677,36671,36991,36989,36996,36993,36994,36992,37177,37283,37278,37276,37709,37762,37672,37749,37706,37733,37707,37656,37758,37740,37723,37744,37722,37716,38346,38347,38348,38344,38342,38577,38584,38614,38684,38686,38816,38867,38982,39094,39221,39425,39423,39854,39851,39850,39853,40251,40255,40587,40655,40670,40668,40669,40667,40766,40779,21474,22165,22190,22745,22744,23352,24413,25059,25139,25844,25842,25854,25862,25850,25851,25847,26039,26332,26406,27315,27308,27331,27323,27320,27330,27310,27311,27487,27512,27567,28681,28683,28670,28678,28666,28689,28687,29179,29180,29182,29176,29559,29557,29863,29887,29973,30294,30296,30290,30653,30655,30651,30652,30990,31150,31329,31330,31328,31428,31429,31787,31783,31786,31774,31779,31777,31975,32340,32341,32350,32346,32353,32338,32345,32584,32761,32763,32887,32886,33229,33231,33290,34255,34217,34253,34256,34249,34224,34234,34233,34214,34799,34796,34802,34784,35206,35250,35316,35624,35641,35628,35627,35920,36101,36441,36451,36454,36452,36447,36437,36544,36681,36685,36999,36995,37000,37291,37292,37328,37780,37770,37782,37794,37811,37806,37804,37808,37784,37786,37783,38356,38358,38352,38357,38626,38620,38617,38619,38622,38692,38819,38822,38829,38905,38989,38991,38988,38990,38995,39098,39230,39231,39229,39214,39333,39438,39617,39683,39686,39759,39758,39757,39882,39881,39933,39880,39872,40273,40285,40288,40672,40725,40748,20787,22181,22750,22751,22754,23541,40848,24300,25074,25079,25078,25077,25856,25871,26336,26333,27365,27357,27354,27347,28699,28703,28712,28698,28701,28693,28696,29190,29197,29272,29346,29560,29562,29885,29898,29923,30087,30086,30303,30305,30663,31001,31153,31339,31337,31806,31807,31800,31805,31799,31808,32363,32365,32377,32361,32362,32645,32371,32694,32697,32696,33240,34281,34269,34282,34261,34276,34277,34295,34811,34821,34829,34809,34814,35168,35167,35158,35166,35649,35676,35672,35657,35674,35662,35663,35654,35673,36104,36106,36476,36466,36487,36470,36460,36474,36468,36692,36686,36781,37002,37003,37297,37294,37857,37841,37855,37827,37832,37852,37853,37846,37858,37837,37848,37860,37847,37864,38364,38580,38627,38698,38695,38753,38876,38907,39006,39000,39003,39100,39237,39241,39446,39449,39693,39912,39911,39894,39899,40329,40289,40306,40298,40300,40594,40599,40595,40628,21240,22184,22199,22198,22196,22204,22756,23360,23363,23421,23542,24009,25080,25082,25880,25876,25881,26342,26407,27372,28734,28720,28722,29200,29563,29903,30306,30309,31014,31018,31020,31019,31431,31478,31820,31811,31821,31983,31984,36782,32381,32380,32386,32588,32768,33242,33382,34299,34297,34321,34298,34310,34315,34311,34314,34836,34837,35172,35258,35320,35696,35692,35686,35695,35679,35691,36111,36109,36489,36481,36485,36482,37300,37323,37912,37891,37885,38369,38704,39108,39250,39249,39336,39467,39472,39479,39477,39955,39949,40569,40629,40680,40751,40799,40803,40801,20791,20792,22209,22208,22210,22804,23660,24013,25084,25086,25885,25884,26005,26345,27387,27396,27386,27570,28748,29211,29351,29910,29908,30313,30675,31824,32399,32396,32700,34327,34349,34330,34851,34850,34849,34847,35178,35180,35261,35700,35703,35709,36115,36490,36493,36491,36703,36783,37306,37934,37939,37941,37946,37944,37938,37931,38370,38712,38713,38706,38911,39015,39013,39255,39493,39491,39488,39486,39631,39764,39761,39981,39973,40367,40372,40386,40376,40605,40687,40729,40796,40806,40807,20796,20795,22216,22218,22217,23423,24020,24018,24398,25087,25892,27402,27489,28753,28760,29568,29924,30090,30318,30316,31155,31840,31839,32894,32893,33247,35186,35183,35324,35712,36118,36119,36497,36499,36705,37192,37956,37969,37970,38717,38718,38851,38849,39019,39253,39509,39501,39634,39706,40009,39985,39998,39995,40403,40407,40756,40812,40810,40852,22220,24022,25088,25891,25899,25898,26348,27408,29914,31434,31844,31843,31845,32403,32406,32404,33250,34360,34367,34865,35722,37008,37007,37987,37984,37988,38760,39023,39260,39514,39515,39511,39635,39636,39633,40020,40023,40022,40421,40607,40692,22225,22761,25900,28766,30321,30322,30679,32592,32648,34870,34873,34914,35731,35730,35734,33399,36123,37312,37994,38722,38728,38724,38854,39024,39519,39714,39768,40031,40441,40442,40572,40573,40711,40823,40818,24307,27414,28771,31852,31854,34875,35264,36513,37313,38002,38000,39025,39262,39638,39715,40652,28772,30682,35738,38007,38857,39522,39525,32412,35740,36522,37317,38013,38014,38012,40055,40056,40695,35924,38015,40474,29224,39530,39729,40475,40478,31858,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,20022,20031,20101,20128,20866,20886,20907,21241,21304,21353,21430,22794,23424,24027,12083,24191,24308,24400,24417,25908,26080,30098,30326,36789,38582,168,710,12541,12542,12445,12446,12291,20189,12293,12294,12295,12540,65339,65341,10045,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,8679,8632,8633,12751,131276,20058,131210,20994,17553,40880,20872,40881,161287,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,65506,65508,65287,65282,12849,8470,8481,12443,12444,11904,11908,11910,11911,11912,11914,11916,11917,11925,11932,11933,11941,11943,11946,11948,11950,11958,11964,11966,11974,11978,11980,11981,11983,11990,11991,11998,12003,null,null,null,643,592,603,596,629,339,248,331,650,618,20034,20060,20981,21274,21378,19975,19980,20039,20109,22231,64012,23662,24435,19983,20871,19982,20014,20115,20162,20169,20168,20888,21244,21356,21433,22304,22787,22828,23568,24063,26081,27571,27596,27668,29247,20017,20028,20200,20188,20201,20193,20189,20186,21004,21276,21324,22306,22307,22807,22831,23425,23428,23570,23611,23668,23667,24068,24192,24194,24521,25097,25168,27669,27702,27715,27711,27707,29358,29360,29578,31160,32906,38430,20238,20248,20268,20213,20244,20209,20224,20215,20232,20253,20226,20229,20258,20243,20228,20212,20242,20913,21011,21001,21008,21158,21282,21279,21325,21386,21511,22241,22239,22318,22314,22324,22844,22912,22908,22917,22907,22910,22903,22911,23382,23573,23589,23676,23674,23675,23678,24031,24181,24196,24322,24346,24436,24533,24532,24527,25180,25182,25188,25185,25190,25186,25177,25184,25178,25189,26095,26094,26430,26425,26424,26427,26426,26431,26428,26419,27672,27718,27730,27740,27727,27722,27732,27723,27724,28785,29278,29364,29365,29582,29994,30335,31349,32593,33400,33404,33408,33405,33407,34381,35198,37017,37015,37016,37019,37012,38434,38436,38432,38435,20310,20283,20322,20297,20307,20324,20286,20327,20306,20319,20289,20312,20269,20275,20287,20321,20879,20921,21020,21022,21025,21165,21166,21257,21347,21362,21390,21391,21552,21559,21546,21588,21573,21529,21532,21541,21528,21565,21583,21569,21544,21540,21575,22254,22247,22245,22337,22341,22348,22345,22347,22354,22790,22848,22950,22936,22944,22935,22926,22946,22928,22927,22951,22945,23438,23442,23592,23594,23693,23695,23688,23691,23689,23698,23690,23686,23699,23701,24032,24074,24078,24203,24201,24204,24200,24205,24325,24349,24440,24438,24530,24529,24528,24557,24552,24558,24563,24545,24548,24547,24570,24559,24567,24571,24576,24564,25146,25219,25228,25230,25231,25236,25223,25201,25211,25210,25200,25217,25224,25207,25213,25202,25204,25911,26096,26100,26099,26098,26101,26437,26439,26457,26453,26444,26440,26461,26445,26458,26443,27600,27673,27674,27768,27751,27755,27780,27787,27791,27761,27759,27753,27802,27757,27783,27797,27804,27750,27763,27749,27771,27790,28788,28794,29283,29375,29373,29379,29382,29377,29370,29381,29589,29591,29587,29588,29586,30010,30009,30100,30101,30337,31037,32820,32917,32921,32912,32914,32924,33424,33423,33413,33422,33425,33427,33418,33411,33412,35960,36809,36799,37023,37025,37029,37022,37031,37024,38448,38440,38447,38445,20019,20376,20348,20357,20349,20352,20359,20342,20340,20361,20356,20343,20300,20375,20330,20378,20345,20353,20344,20368,20380,20372,20382,20370,20354,20373,20331,20334,20894,20924,20926,21045,21042,21043,21062,21041,21180,21258,21259,21308,21394,21396,21639,21631,21633,21649,21634,21640,21611,21626,21630,21605,21612,21620,21606,21645,21615,21601,21600,21656,21603,21607,21604,22263,22265,22383,22386,22381,22379,22385,22384,22390,22400,22389,22395,22387,22388,22370,22376,22397,22796,22853,22965,22970,22991,22990,22962,22988,22977,22966,22972,22979,22998,22961,22973,22976,22984,22964,22983,23394,23397,23443,23445,23620,23623,23726,23716,23712,23733,23727,23720,23724,23711,23715,23725,23714,23722,23719,23709,23717,23734,23728,23718,24087,24084,24089,24360,24354,24355,24356,24404,24450,24446,24445,24542,24549,24621,24614,24601,24626,24587,24628,24586,24599,24627,24602,24606,24620,24610,24589,24592,24622,24595,24593,24588,24585,24604,25108,25149,25261,25268,25297,25278,25258,25270,25290,25262,25267,25263,25275,25257,25264,25272,25917,26024,26043,26121,26108,26116,26130,26120,26107,26115,26123,26125,26117,26109,26129,26128,26358,26378,26501,26476,26510,26514,26486,26491,26520,26502,26500,26484,26509,26508,26490,26527,26513,26521,26499,26493,26497,26488,26489,26516,27429,27520,27518,27614,27677,27795,27884,27883,27886,27865,27830,27860,27821,27879,27831,27856,27842,27834,27843,27846,27885,27890,27858,27869,27828,27786,27805,27776,27870,27840,27952,27853,27847,27824,27897,27855,27881,27857,28820,28824,28805,28819,28806,28804,28817,28822,28802,28826,28803,29290,29398,29387,29400,29385,29404,29394,29396,29402,29388,29393,29604,29601,29613,29606,29602,29600,29612,29597,29917,29928,30015,30016,30014,30092,30104,30383,30451,30449,30448,30453,30712,30716,30713,30715,30714,30711,31042,31039,31173,31352,31355,31483,31861,31997,32821,32911,32942,32931,32952,32949,32941,33312,33440,33472,33451,33434,33432,33435,33461,33447,33454,33468,33438,33466,33460,33448,33441,33449,33474,33444,33475,33462,33442,34416,34415,34413,34414,35926,36818,36811,36819,36813,36822,36821,36823,37042,37044,37039,37043,37040,38457,38461,38460,38458,38467,20429,20421,20435,20402,20425,20427,20417,20436,20444,20441,20411,20403,20443,20423,20438,20410,20416,20409,20460,21060,21065,21184,21186,21309,21372,21399,21398,21401,21400,21690,21665,21677,21669,21711,21699,33549,21687,21678,21718,21686,21701,21702,21664,21616,21692,21666,21694,21618,21726,21680,22453,22430,22431,22436,22412,22423,22429,22427,22420,22424,22415,22425,22437,22426,22421,22772,22797,22867,23009,23006,23022,23040,23025,23005,23034,23037,23036,23030,23012,23026,23031,23003,23017,23027,23029,23008,23038,23028,23021,23464,23628,23760,23768,23756,23767,23755,23771,23774,23770,23753,23751,23754,23766,23763,23764,23759,23752,23750,23758,23775,23800,24057,24097,24098,24099,24096,24100,24240,24228,24226,24219,24227,24229,24327,24366,24406,24454,24631,24633,24660,24690,24670,24645,24659,24647,24649,24667,24652,24640,24642,24671,24612,24644,24664,24678,24686,25154,25155,25295,25357,25355,25333,25358,25347,25323,25337,25359,25356,25336,25334,25344,25363,25364,25338,25365,25339,25328,25921,25923,26026,26047,26166,26145,26162,26165,26140,26150,26146,26163,26155,26170,26141,26164,26169,26158,26383,26384,26561,26610,26568,26554,26588,26555,26616,26584,26560,26551,26565,26603,26596,26591,26549,26573,26547,26615,26614,26606,26595,26562,26553,26574,26599,26608,26546,26620,26566,26605,26572,26542,26598,26587,26618,26569,26570,26563,26602,26571,27432,27522,27524,27574,27606,27608,27616,27680,27681,27944,27956,27949,27935,27964,27967,27922,27914,27866,27955,27908,27929,27962,27930,27921,27904,27933,27970,27905,27928,27959,27907,27919,27968,27911,27936,27948,27912,27938,27913,27920,28855,28831,28862,28849,28848,28833,28852,28853,28841,29249,29257,29258,29292,29296,29299,29294,29386,29412,29416,29419,29407,29418,29414,29411,29573,29644,29634,29640,29637,29625,29622,29621,29620,29675,29631,29639,29630,29635,29638,29624,29643,29932,29934,29998,30023,30024,30119,30122,30329,30404,30472,30467,30468,30469,30474,30455,30459,30458,30695,30696,30726,30737,30738,30725,30736,30735,30734,30729,30723,30739,31050,31052,31051,31045,31044,31189,31181,31183,31190,31182,31360,31358,31441,31488,31489,31866,31864,31865,31871,31872,31873,32003,32008,32001,32600,32657,32653,32702,32775,32782,32783,32788,32823,32984,32967,32992,32977,32968,32962,32976,32965,32995,32985,32988,32970,32981,32969,32975,32983,32998,32973,33279,33313,33428,33497,33534,33529,33543,33512,33536,33493,33594,33515,33494,33524,33516,33505,33522,33525,33548,33531,33526,33520,33514,33508,33504,33530,33523,33517,34423,34420,34428,34419,34881,34894,34919,34922,34921,35283,35332,35335,36210,36835,36833,36846,36832,37105,37053,37055,37077,37061,37054,37063,37067,37064,37332,37331,38484,38479,38481,38483,38474,38478,20510,20485,20487,20499,20514,20528,20507,20469,20468,20531,20535,20524,20470,20471,20503,20508,20512,20519,20533,20527,20529,20494,20826,20884,20883,20938,20932,20933,20936,20942,21089,21082,21074,21086,21087,21077,21090,21197,21262,21406,21798,21730,21783,21778,21735,21747,21732,21786,21759,21764,21768,21739,21777,21765,21745,21770,21755,21751,21752,21728,21774,21763,21771,22273,22274,22476,22578,22485,22482,22458,22470,22461,22460,22456,22454,22463,22471,22480,22457,22465,22798,22858,23065,23062,23085,23086,23061,23055,23063,23050,23070,23091,23404,23463,23469,23468,23555,23638,23636,23788,23807,23790,23793,23799,23808,23801,24105,24104,24232,24238,24234,24236,24371,24368,24423,24669,24666,24679,24641,24738,24712,24704,24722,24705,24733,24707,24725,24731,24727,24711,24732,24718,25113,25158,25330,25360,25430,25388,25412,25413,25398,25411,25572,25401,25419,25418,25404,25385,25409,25396,25432,25428,25433,25389,25415,25395,25434,25425,25400,25431,25408,25416,25930,25926,26054,26051,26052,26050,26186,26207,26183,26193,26386,26387,26655,26650,26697,26674,26675,26683,26699,26703,26646,26673,26652,26677,26667,26669,26671,26702,26692,26676,26653,26642,26644,26662,26664,26670,26701,26682,26661,26656,27436,27439,27437,27441,27444,27501,32898,27528,27622,27620,27624,27619,27618,27623,27685,28026,28003,28004,28022,27917,28001,28050,27992,28002,28013,28015,28049,28045,28143,28031,28038,27998,28007,28000,28055,28016,28028,27999,28034,28056,27951,28008,28043,28030,28032,28036,27926,28035,28027,28029,28021,28048,28892,28883,28881,28893,28875,32569,28898,28887,28882,28894,28896,28884,28877,28869,28870,28871,28890,28878,28897,29250,29304,29303,29302,29440,29434,29428,29438,29430,29427,29435,29441,29651,29657,29669,29654,29628,29671,29667,29673,29660,29650,29659,29652,29661,29658,29655,29656,29672,29918,29919,29940,29941,29985,30043,30047,30128,30145,30139,30148,30144,30143,30134,30138,30346,30409,30493,30491,30480,30483,30482,30499,30481,30485,30489,30490,30498,30503,30755,30764,30754,30773,30767,30760,30766,30763,30753,30761,30771,30762,30769,31060,31067,31055,31068,31059,31058,31057,31211,31212,31200,31214,31213,31210,31196,31198,31197,31366,31369,31365,31371,31372,31370,31367,31448,31504,31492,31507,31493,31503,31496,31498,31502,31497,31506,31876,31889,31882,31884,31880,31885,31877,32030,32029,32017,32014,32024,32022,32019,32031,32018,32015,32012,32604,32609,32606,32608,32605,32603,32662,32658,32707,32706,32704,32790,32830,32825,33018,33010,33017,33013,33025,33019,33024,33281,33327,33317,33587,33581,33604,33561,33617,33573,33622,33599,33601,33574,33564,33570,33602,33614,33563,33578,33544,33596,33613,33558,33572,33568,33591,33583,33577,33607,33605,33612,33619,33566,33580,33611,33575,33608,34387,34386,34466,34472,34454,34445,34449,34462,34439,34455,34438,34443,34458,34437,34469,34457,34465,34471,34453,34456,34446,34461,34448,34452,34883,34884,34925,34933,34934,34930,34944,34929,34943,34927,34947,34942,34932,34940,35346,35911,35927,35963,36004,36003,36214,36216,36277,36279,36278,36561,36563,36862,36853,36866,36863,36859,36868,36860,36854,37078,37088,37081,37082,37091,37087,37093,37080,37083,37079,37084,37092,37200,37198,37199,37333,37346,37338,38492,38495,38588,39139,39647,39727,20095,20592,20586,20577,20574,20576,20563,20555,20573,20594,20552,20557,20545,20571,20554,20578,20501,20549,20575,20585,20587,20579,20580,20550,20544,20590,20595,20567,20561,20944,21099,21101,21100,21102,21206,21203,21293,21404,21877,21878,21820,21837,21840,21812,21802,21841,21858,21814,21813,21808,21842,21829,21772,21810,21861,21838,21817,21832,21805,21819,21824,21835,22282,22279,22523,22548,22498,22518,22492,22516,22528,22509,22525,22536,22520,22539,22515,22479,22535,22510,22499,22514,22501,22508,22497,22542,22524,22544,22503,22529,22540,22513,22505,22512,22541,22532,22876,23136,23128,23125,23143,23134,23096,23093,23149,23120,23135,23141,23148,23123,23140,23127,23107,23133,23122,23108,23131,23112,23182,23102,23117,23097,23116,23152,23145,23111,23121,23126,23106,23132,23410,23406,23489,23488,23641,23838,23819,23837,23834,23840,23820,23848,23821,23846,23845,23823,23856,23826,23843,23839,23854,24126,24116,24241,24244,24249,24242,24243,24374,24376,24475,24470,24479,24714,24720,24710,24766,24752,24762,24787,24788,24783,24804,24793,24797,24776,24753,24795,24759,24778,24767,24771,24781,24768,25394,25445,25482,25474,25469,25533,25502,25517,25501,25495,25515,25486,25455,25479,25488,25454,25519,25461,25500,25453,25518,25468,25508,25403,25503,25464,25477,25473,25489,25485,25456,25939,26061,26213,26209,26203,26201,26204,26210,26392,26745,26759,26768,26780,26733,26734,26798,26795,26966,26735,26787,26796,26793,26741,26740,26802,26767,26743,26770,26748,26731,26738,26794,26752,26737,26750,26779,26774,26763,26784,26761,26788,26744,26747,26769,26764,26762,26749,27446,27443,27447,27448,27537,27535,27533,27534,27532,27690,28096,28075,28084,28083,28276,28076,28137,28130,28087,28150,28116,28160,28104,28128,28127,28118,28094,28133,28124,28125,28123,28148,28106,28093,28141,28144,28090,28117,28098,28111,28105,28112,28146,28115,28157,28119,28109,28131,28091,28922,28941,28919,28951,28916,28940,28912,28932,28915,28944,28924,28927,28934,28947,28928,28920,28918,28939,28930,28942,29310,29307,29308,29311,29469,29463,29447,29457,29464,29450,29448,29439,29455,29470,29576,29686,29688,29685,29700,29697,29693,29703,29696,29690,29692,29695,29708,29707,29684,29704,30052,30051,30158,30162,30159,30155,30156,30161,30160,30351,30345,30419,30521,30511,30509,30513,30514,30516,30515,30525,30501,30523,30517,30792,30802,30793,30797,30794,30796,30758,30789,30800,31076,31079,31081,31082,31075,31083,31073,31163,31226,31224,31222,31223,31375,31380,31376,31541,31559,31540,31525,31536,31522,31524,31539,31512,31530,31517,31537,31531,31533,31535,31538,31544,31514,31523,31892,31896,31894,31907,32053,32061,32056,32054,32058,32069,32044,32041,32065,32071,32062,32063,32074,32059,32040,32611,32661,32668,32669,32667,32714,32715,32717,32720,32721,32711,32719,32713,32799,32798,32795,32839,32835,32840,33048,33061,33049,33051,33069,33055,33068,33054,33057,33045,33063,33053,33058,33297,33336,33331,33338,33332,33330,33396,33680,33699,33704,33677,33658,33651,33700,33652,33679,33665,33685,33689,33653,33684,33705,33661,33667,33676,33693,33691,33706,33675,33662,33701,33711,33672,33687,33712,33663,33702,33671,33710,33654,33690,34393,34390,34495,34487,34498,34497,34501,34490,34480,34504,34489,34483,34488,34508,34484,34491,34492,34499,34493,34494,34898,34953,34965,34984,34978,34986,34970,34961,34977,34975,34968,34983,34969,34971,34967,34980,34988,34956,34963,34958,35202,35286,35289,35285,35376,35367,35372,35358,35897,35899,35932,35933,35965,36005,36221,36219,36217,36284,36290,36281,36287,36289,36568,36574,36573,36572,36567,36576,36577,36900,36875,36881,36892,36876,36897,37103,37098,37104,37108,37106,37107,37076,37099,37100,37097,37206,37208,37210,37203,37205,37356,37364,37361,37363,37368,37348,37369,37354,37355,37367,37352,37358,38266,38278,38280,38524,38509,38507,38513,38511,38591,38762,38916,39141,39319,20635,20629,20628,20638,20619,20643,20611,20620,20622,20637,20584,20636,20626,20610,20615,20831,20948,21266,21265,21412,21415,21905,21928,21925,21933,21879,22085,21922,21907,21896,21903,21941,21889,21923,21906,21924,21885,21900,21926,21887,21909,21921,21902,22284,22569,22583,22553,22558,22567,22563,22568,22517,22600,22565,22556,22555,22579,22591,22582,22574,22585,22584,22573,22572,22587,22881,23215,23188,23199,23162,23202,23198,23160,23206,23164,23205,23212,23189,23214,23095,23172,23178,23191,23171,23179,23209,23163,23165,23180,23196,23183,23187,23197,23530,23501,23499,23508,23505,23498,23502,23564,23600,23863,23875,23915,23873,23883,23871,23861,23889,23886,23893,23859,23866,23890,23869,23857,23897,23874,23865,23881,23864,23868,23858,23862,23872,23877,24132,24129,24408,24486,24485,24491,24777,24761,24780,24802,24782,24772,24852,24818,24842,24854,24837,24821,24851,24824,24828,24830,24769,24835,24856,24861,24848,24831,24836,24843,25162,25492,25521,25520,25550,25573,25576,25583,25539,25757,25587,25546,25568,25590,25557,25586,25589,25697,25567,25534,25565,25564,25540,25560,25555,25538,25543,25548,25547,25544,25584,25559,25561,25906,25959,25962,25956,25948,25960,25957,25996,26013,26014,26030,26064,26066,26236,26220,26235,26240,26225,26233,26218,26226,26369,26892,26835,26884,26844,26922,26860,26858,26865,26895,26838,26871,26859,26852,26870,26899,26896,26867,26849,26887,26828,26888,26992,26804,26897,26863,26822,26900,26872,26832,26877,26876,26856,26891,26890,26903,26830,26824,26845,26846,26854,26868,26833,26886,26836,26857,26901,26917,26823,27449,27451,27455,27452,27540,27543,27545,27541,27581,27632,27634,27635,27696,28156,28230,28231,28191,28233,28296,28220,28221,28229,28258,28203,28223,28225,28253,28275,28188,28211,28235,28224,28241,28219,28163,28206,28254,28264,28252,28257,28209,28200,28256,28273,28267,28217,28194,28208,28243,28261,28199,28280,28260,28279,28245,28281,28242,28262,28213,28214,28250,28960,28958,28975,28923,28974,28977,28963,28965,28962,28978,28959,28968,28986,28955,29259,29274,29320,29321,29318,29317,29323,29458,29451,29488,29474,29489,29491,29479,29490,29485,29478,29475,29493,29452,29742,29740,29744,29739,29718,29722,29729,29741,29745,29732,29731,29725,29737,29728,29746,29947,29999,30063,30060,30183,30170,30177,30182,30173,30175,30180,30167,30357,30354,30426,30534,30535,30532,30541,30533,30538,30542,30539,30540,30686,30700,30816,30820,30821,30812,30829,30833,30826,30830,30832,30825,30824,30814,30818,31092,31091,31090,31088,31234,31242,31235,31244,31236,31385,31462,31460,31562,31547,31556,31560,31564,31566,31552,31576,31557,31906,31902,31912,31905,32088,32111,32099,32083,32086,32103,32106,32079,32109,32092,32107,32082,32084,32105,32081,32095,32078,32574,32575,32613,32614,32674,32672,32673,32727,32849,32847,32848,33022,32980,33091,33098,33106,33103,33095,33085,33101,33082,33254,33262,33271,33272,33273,33284,33340,33341,33343,33397,33595,33743,33785,33827,33728,33768,33810,33767,33764,33788,33782,33808,33734,33736,33771,33763,33727,33793,33757,33765,33752,33791,33761,33739,33742,33750,33781,33737,33801,33807,33758,33809,33798,33730,33779,33749,33786,33735,33745,33770,33811,33731,33772,33774,33732,33787,33751,33762,33819,33755,33790,34520,34530,34534,34515,34531,34522,34538,34525,34539,34524,34540,34537,34519,34536,34513,34888,34902,34901,35002,35031,35001,35000,35008,35006,34998,35004,34999,35005,34994,35073,35017,35221,35224,35223,35293,35290,35291,35406,35405,35385,35417,35392,35415,35416,35396,35397,35410,35400,35409,35402,35404,35407,35935,35969,35968,36026,36030,36016,36025,36021,36228,36224,36233,36312,36307,36301,36295,36310,36316,36303,36309,36313,36296,36311,36293,36591,36599,36602,36601,36582,36590,36581,36597,36583,36584,36598,36587,36593,36588,36596,36585,36909,36916,36911,37126,37164,37124,37119,37116,37128,37113,37115,37121,37120,37127,37125,37123,37217,37220,37215,37218,37216,37377,37386,37413,37379,37402,37414,37391,37388,37376,37394,37375,37373,37382,37380,37415,37378,37404,37412,37401,37399,37381,37398,38267,38285,38284,38288,38535,38526,38536,38537,38531,38528,38594,38600,38595,38641,38640,38764,38768,38766,38919,39081,39147,40166,40697,20099,20100,20150,20669,20671,20678,20654,20676,20682,20660,20680,20674,20656,20673,20666,20657,20683,20681,20662,20664,20951,21114,21112,21115,21116,21955,21979,21964,21968,21963,21962,21981,21952,21972,21956,21993,21951,21970,21901,21967,21973,21986,21974,21960,22002,21965,21977,21954,22292,22611,22632,22628,22607,22605,22601,22639,22613,22606,22621,22617,22629,22619,22589,22627,22641,22780,23239,23236,23243,23226,23224,23217,23221,23216,23231,23240,23227,23238,23223,23232,23242,23220,23222,23245,23225,23184,23510,23512,23513,23583,23603,23921,23907,23882,23909,23922,23916,23902,23912,23911,23906,24048,24143,24142,24138,24141,24139,24261,24268,24262,24267,24263,24384,24495,24493,24823,24905,24906,24875,24901,24886,24882,24878,24902,24879,24911,24873,24896,25120,37224,25123,25125,25124,25541,25585,25579,25616,25618,25609,25632,25636,25651,25667,25631,25621,25624,25657,25655,25634,25635,25612,25638,25648,25640,25665,25653,25647,25610,25626,25664,25637,25639,25611,25575,25627,25646,25633,25614,25967,26002,26067,26246,26252,26261,26256,26251,26250,26265,26260,26232,26400,26982,26975,26936,26958,26978,26993,26943,26949,26986,26937,26946,26967,26969,27002,26952,26953,26933,26988,26931,26941,26981,26864,27000,26932,26985,26944,26991,26948,26998,26968,26945,26996,26956,26939,26955,26935,26972,26959,26961,26930,26962,26927,27003,26940,27462,27461,27459,27458,27464,27457,27547,64013,27643,27644,27641,27639,27640,28315,28374,28360,28303,28352,28319,28307,28308,28320,28337,28345,28358,28370,28349,28353,28318,28361,28343,28336,28365,28326,28367,28338,28350,28355,28380,28376,28313,28306,28302,28301,28324,28321,28351,28339,28368,28362,28311,28334,28323,28999,29012,29010,29027,29024,28993,29021,29026,29042,29048,29034,29025,28994,29016,28995,29003,29040,29023,29008,29011,28996,29005,29018,29263,29325,29324,29329,29328,29326,29500,29506,29499,29498,29504,29514,29513,29764,29770,29771,29778,29777,29783,29760,29775,29776,29774,29762,29766,29773,29780,29921,29951,29950,29949,29981,30073,30071,27011,30191,30223,30211,30199,30206,30204,30201,30200,30224,30203,30198,30189,30197,30205,30361,30389,30429,30549,30559,30560,30546,30550,30554,30569,30567,30548,30553,30573,30688,30855,30874,30868,30863,30852,30869,30853,30854,30881,30851,30841,30873,30848,30870,30843,31100,31106,31101,31097,31249,31256,31257,31250,31255,31253,31266,31251,31259,31248,31395,31394,31390,31467,31590,31588,31597,31604,31593,31602,31589,31603,31601,31600,31585,31608,31606,31587,31922,31924,31919,32136,32134,32128,32141,32127,32133,32122,32142,32123,32131,32124,32140,32148,32132,32125,32146,32621,32619,32615,32616,32620,32678,32677,32679,32731,32732,32801,33124,33120,33143,33116,33129,33115,33122,33138,26401,33118,33142,33127,33135,33092,33121,33309,33353,33348,33344,33346,33349,34033,33855,33878,33910,33913,33935,33933,33893,33873,33856,33926,33895,33840,33869,33917,33882,33881,33908,33907,33885,34055,33886,33847,33850,33844,33914,33859,33912,33842,33861,33833,33753,33867,33839,33858,33837,33887,33904,33849,33870,33868,33874,33903,33989,33934,33851,33863,33846,33843,33896,33918,33860,33835,33888,33876,33902,33872,34571,34564,34551,34572,34554,34518,34549,34637,34552,34574,34569,34561,34550,34573,34565,35030,35019,35021,35022,35038,35035,35034,35020,35024,35205,35227,35295,35301,35300,35297,35296,35298,35292,35302,35446,35462,35455,35425,35391,35447,35458,35460,35445,35459,35457,35444,35450,35900,35915,35914,35941,35940,35942,35974,35972,35973,36044,36200,36201,36241,36236,36238,36239,36237,36243,36244,36240,36242,36336,36320,36332,36337,36334,36304,36329,36323,36322,36327,36338,36331,36340,36614,36607,36609,36608,36613,36615,36616,36610,36619,36946,36927,36932,36937,36925,37136,37133,37135,37137,37142,37140,37131,37134,37230,37231,37448,37458,37424,37434,37478,37427,37477,37470,37507,37422,37450,37446,37485,37484,37455,37472,37479,37487,37430,37473,37488,37425,37460,37475,37456,37490,37454,37459,37452,37462,37426,38303,38300,38302,38299,38546,38547,38545,38551,38606,38650,38653,38648,38645,38771,38775,38776,38770,38927,38925,38926,39084,39158,39161,39343,39346,39344,39349,39597,39595,39771,40170,40173,40167,40576,40701,20710,20692,20695,20712,20723,20699,20714,20701,20708,20691,20716,20720,20719,20707,20704,20952,21120,21121,21225,21227,21296,21420,22055,22037,22028,22034,22012,22031,22044,22017,22035,22018,22010,22045,22020,22015,22009,22665,22652,22672,22680,22662,22657,22655,22644,22667,22650,22663,22673,22670,22646,22658,22664,22651,22676,22671,22782,22891,23260,23278,23269,23253,23274,23258,23277,23275,23283,23266,23264,23259,23276,23262,23261,23257,23272,23263,23415,23520,23523,23651,23938,23936,23933,23942,23930,23937,23927,23946,23945,23944,23934,23932,23949,23929,23935,24152,24153,24147,24280,24273,24279,24270,24284,24277,24281,24274,24276,24388,24387,24431,24502,24876,24872,24897,24926,24945,24947,24914,24915,24946,24940,24960,24948,24916,24954,24923,24933,24891,24938,24929,24918,25129,25127,25131,25643,25677,25691,25693,25716,25718,25714,25715,25725,25717,25702,25766,25678,25730,25694,25692,25675,25683,25696,25680,25727,25663,25708,25707,25689,25701,25719,25971,26016,26273,26272,26271,26373,26372,26402,27057,27062,27081,27040,27086,27030,27056,27052,27068,27025,27033,27022,27047,27021,27049,27070,27055,27071,27076,27069,27044,27092,27065,27082,27034,27087,27059,27027,27050,27041,27038,27097,27031,27024,27074,27061,27045,27078,27466,27469,27467,27550,27551,27552,27587,27588,27646,28366,28405,28401,28419,28453,28408,28471,28411,28462,28425,28494,28441,28442,28455,28440,28475,28434,28397,28426,28470,28531,28409,28398,28461,28480,28464,28476,28469,28395,28423,28430,28483,28421,28413,28406,28473,28444,28412,28474,28447,28429,28446,28424,28449,29063,29072,29065,29056,29061,29058,29071,29051,29062,29057,29079,29252,29267,29335,29333,29331,29507,29517,29521,29516,29794,29811,29809,29813,29810,29799,29806,29952,29954,29955,30077,30096,30230,30216,30220,30229,30225,30218,30228,30392,30593,30588,30597,30594,30574,30592,30575,30590,30595,30898,30890,30900,30893,30888,30846,30891,30878,30885,30880,30892,30882,30884,31128,31114,31115,31126,31125,31124,31123,31127,31112,31122,31120,31275,31306,31280,31279,31272,31270,31400,31403,31404,31470,31624,31644,31626,31633,31632,31638,31629,31628,31643,31630,31621,31640,21124,31641,31652,31618,31931,31935,31932,31930,32167,32183,32194,32163,32170,32193,32192,32197,32157,32206,32196,32198,32203,32204,32175,32185,32150,32188,32159,32166,32174,32169,32161,32201,32627,32738,32739,32741,32734,32804,32861,32860,33161,33158,33155,33159,33165,33164,33163,33301,33943,33956,33953,33951,33978,33998,33986,33964,33966,33963,33977,33972,33985,33997,33962,33946,33969,34000,33949,33959,33979,33954,33940,33991,33996,33947,33961,33967,33960,34006,33944,33974,33999,33952,34007,34004,34002,34011,33968,33937,34401,34611,34595,34600,34667,34624,34606,34590,34593,34585,34587,34627,34604,34625,34622,34630,34592,34610,34602,34605,34620,34578,34618,34609,34613,34626,34598,34599,34616,34596,34586,34608,34577,35063,35047,35057,35058,35066,35070,35054,35068,35062,35067,35056,35052,35051,35229,35233,35231,35230,35305,35307,35304,35499,35481,35467,35474,35471,35478,35901,35944,35945,36053,36047,36055,36246,36361,36354,36351,36365,36349,36362,36355,36359,36358,36357,36350,36352,36356,36624,36625,36622,36621,37155,37148,37152,37154,37151,37149,37146,37156,37153,37147,37242,37234,37241,37235,37541,37540,37494,37531,37498,37536,37524,37546,37517,37542,37530,37547,37497,37527,37503,37539,37614,37518,37506,37525,37538,37501,37512,37537,37514,37510,37516,37529,37543,37502,37511,37545,37533,37515,37421,38558,38561,38655,38744,38781,38778,38782,38787,38784,38786,38779,38788,38785,38783,38862,38861,38934,39085,39086,39170,39168,39175,39325,39324,39363,39353,39355,39354,39362,39357,39367,39601,39651,39655,39742,39743,39776,39777,39775,40177,40178,40181,40615,20735,20739,20784,20728,20742,20743,20726,20734,20747,20748,20733,20746,21131,21132,21233,21231,22088,22082,22092,22069,22081,22090,22089,22086,22104,22106,22080,22067,22077,22060,22078,22072,22058,22074,22298,22699,22685,22705,22688,22691,22703,22700,22693,22689,22783,23295,23284,23293,23287,23286,23299,23288,23298,23289,23297,23303,23301,23311,23655,23961,23959,23967,23954,23970,23955,23957,23968,23964,23969,23962,23966,24169,24157,24160,24156,32243,24283,24286,24289,24393,24498,24971,24963,24953,25009,25008,24994,24969,24987,24979,25007,25005,24991,24978,25002,24993,24973,24934,25011,25133,25710,25712,25750,25760,25733,25751,25756,25743,25739,25738,25740,25763,25759,25704,25777,25752,25974,25978,25977,25979,26034,26035,26293,26288,26281,26290,26295,26282,26287,27136,27142,27159,27109,27128,27157,27121,27108,27168,27135,27116,27106,27163,27165,27134,27175,27122,27118,27156,27127,27111,27200,27144,27110,27131,27149,27132,27115,27145,27140,27160,27173,27151,27126,27174,27143,27124,27158,27473,27557,27555,27554,27558,27649,27648,27647,27650,28481,28454,28542,28551,28614,28562,28557,28553,28556,28514,28495,28549,28506,28566,28534,28524,28546,28501,28530,28498,28496,28503,28564,28563,28509,28416,28513,28523,28541,28519,28560,28499,28555,28521,28543,28565,28515,28535,28522,28539,29106,29103,29083,29104,29088,29082,29097,29109,29085,29093,29086,29092,29089,29098,29084,29095,29107,29336,29338,29528,29522,29534,29535,29536,29533,29531,29537,29530,29529,29538,29831,29833,29834,29830,29825,29821,29829,29832,29820,29817,29960,29959,30078,30245,30238,30233,30237,30236,30243,30234,30248,30235,30364,30365,30366,30363,30605,30607,30601,30600,30925,30907,30927,30924,30929,30926,30932,30920,30915,30916,30921,31130,31137,31136,31132,31138,31131,27510,31289,31410,31412,31411,31671,31691,31678,31660,31694,31663,31673,31690,31669,31941,31944,31948,31947,32247,32219,32234,32231,32215,32225,32259,32250,32230,32246,32241,32240,32238,32223,32630,32684,32688,32685,32749,32747,32746,32748,32742,32744,32868,32871,33187,33183,33182,33173,33186,33177,33175,33302,33359,33363,33362,33360,33358,33361,34084,34107,34063,34048,34089,34062,34057,34061,34079,34058,34087,34076,34043,34091,34042,34056,34060,34036,34090,34034,34069,34039,34027,34035,34044,34066,34026,34025,34070,34046,34088,34077,34094,34050,34045,34078,34038,34097,34086,34023,34024,34032,34031,34041,34072,34080,34096,34059,34073,34095,34402,34646,34659,34660,34679,34785,34675,34648,34644,34651,34642,34657,34650,34641,34654,34669,34666,34640,34638,34655,34653,34671,34668,34682,34670,34652,34661,34639,34683,34677,34658,34663,34665,34906,35077,35084,35092,35083,35095,35096,35097,35078,35094,35089,35086,35081,35234,35236,35235,35309,35312,35308,35535,35526,35512,35539,35537,35540,35541,35515,35543,35518,35520,35525,35544,35523,35514,35517,35545,35902,35917,35983,36069,36063,36057,36072,36058,36061,36071,36256,36252,36257,36251,36384,36387,36389,36388,36398,36373,36379,36374,36369,36377,36390,36391,36372,36370,36376,36371,36380,36375,36378,36652,36644,36632,36634,36640,36643,36630,36631,36979,36976,36975,36967,36971,37167,37163,37161,37162,37170,37158,37166,37253,37254,37258,37249,37250,37252,37248,37584,37571,37572,37568,37593,37558,37583,37617,37599,37592,37609,37591,37597,37580,37615,37570,37608,37578,37576,37582,37606,37581,37589,37577,37600,37598,37607,37585,37587,37557,37601,37574,37556,38268,38316,38315,38318,38320,38564,38562,38611,38661,38664,38658,38746,38794,38798,38792,38864,38863,38942,38941,38950,38953,38952,38944,38939,38951,39090,39176,39162,39185,39188,39190,39191,39189,39388,39373,39375,39379,39380,39374,39369,39382,39384,39371,39383,39372,39603,39660,39659,39667,39666,39665,39750,39747,39783,39796,39793,39782,39798,39797,39792,39784,39780,39788,40188,40186,40189,40191,40183,40199,40192,40185,40187,40200,40197,40196,40579,40659,40719,40720,20764,20755,20759,20762,20753,20958,21300,21473,22128,22112,22126,22131,22118,22115,22125,22130,22110,22135,22300,22299,22728,22717,22729,22719,22714,22722,22716,22726,23319,23321,23323,23329,23316,23315,23312,23318,23336,23322,23328,23326,23535,23980,23985,23977,23975,23989,23984,23982,23978,23976,23986,23981,23983,23988,24167,24168,24166,24175,24297,24295,24294,24296,24293,24395,24508,24989,25000,24982,25029,25012,25030,25025,25036,25018,25023,25016,24972,25815,25814,25808,25807,25801,25789,25737,25795,25819,25843,25817,25907,25983,25980,26018,26312,26302,26304,26314,26315,26319,26301,26299,26298,26316,26403,27188,27238,27209,27239,27186,27240,27198,27229,27245,27254,27227,27217,27176,27226,27195,27199,27201,27242,27236,27216,27215,27220,27247,27241,27232,27196,27230,27222,27221,27213,27214,27206,27477,27476,27478,27559,27562,27563,27592,27591,27652,27651,27654,28589,28619,28579,28615,28604,28622,28616,28510,28612,28605,28574,28618,28584,28676,28581,28590,28602,28588,28586,28623,28607,28600,28578,28617,28587,28621,28591,28594,28592,29125,29122,29119,29112,29142,29120,29121,29131,29140,29130,29127,29135,29117,29144,29116,29126,29146,29147,29341,29342,29545,29542,29543,29548,29541,29547,29546,29823,29850,29856,29844,29842,29845,29857,29963,30080,30255,30253,30257,30269,30259,30268,30261,30258,30256,30395,30438,30618,30621,30625,30620,30619,30626,30627,30613,30617,30615,30941,30953,30949,30954,30942,30947,30939,30945,30946,30957,30943,30944,31140,31300,31304,31303,31414,31416,31413,31409,31415,31710,31715,31719,31709,31701,31717,31706,31720,31737,31700,31722,31714,31708,31723,31704,31711,31954,31956,31959,31952,31953,32274,32289,32279,32268,32287,32288,32275,32270,32284,32277,32282,32290,32267,32271,32278,32269,32276,32293,32292,32579,32635,32636,32634,32689,32751,32810,32809,32876,33201,33190,33198,33209,33205,33195,33200,33196,33204,33202,33207,33191,33266,33365,33366,33367,34134,34117,34155,34125,34131,34145,34136,34112,34118,34148,34113,34146,34116,34129,34119,34147,34110,34139,34161,34126,34158,34165,34133,34151,34144,34188,34150,34141,34132,34149,34156,34403,34405,34404,34715,34703,34711,34707,34706,34696,34689,34710,34712,34681,34695,34723,34693,34704,34705,34717,34692,34708,34716,34714,34697,35102,35110,35120,35117,35118,35111,35121,35106,35113,35107,35119,35116,35103,35313,35552,35554,35570,35572,35573,35549,35604,35556,35551,35568,35528,35550,35553,35560,35583,35567,35579,35985,35986,35984,36085,36078,36081,36080,36083,36204,36206,36261,36263,36403,36414,36408,36416,36421,36406,36412,36413,36417,36400,36415,36541,36662,36654,36661,36658,36665,36663,36660,36982,36985,36987,36998,37114,37171,37173,37174,37267,37264,37265,37261,37263,37671,37662,37640,37663,37638,37647,37754,37688,37692,37659,37667,37650,37633,37702,37677,37646,37645,37579,37661,37626,37669,37651,37625,37623,37684,37634,37668,37631,37673,37689,37685,37674,37652,37644,37643,37630,37641,37632,37627,37654,38332,38349,38334,38329,38330,38326,38335,38325,38333,38569,38612,38667,38674,38672,38809,38807,38804,38896,38904,38965,38959,38962,39204,39199,39207,39209,39326,39406,39404,39397,39396,39408,39395,39402,39401,39399,39609,39615,39604,39611,39670,39674,39673,39671,39731,39808,39813,39815,39804,39806,39803,39810,39827,39826,39824,39802,39829,39805,39816,40229,40215,40224,40222,40212,40233,40221,40216,40226,40208,40217,40223,40584,40582,40583,40622,40621,40661,40662,40698,40722,40765,20774,20773,20770,20772,20768,20777,21236,22163,22156,22157,22150,22148,22147,22142,22146,22143,22145,22742,22740,22735,22738,23341,23333,23346,23331,23340,23335,23334,23343,23342,23419,23537,23538,23991,24172,24170,24510,24507,25027,25013,25020,25063,25056,25061,25060,25064,25054,25839,25833,25827,25835,25828,25832,25985,25984,26038,26074,26322,27277,27286,27265,27301,27273,27295,27291,27297,27294,27271,27283,27278,27285,27267,27304,27300,27281,27263,27302,27290,27269,27276,27282,27483,27565,27657,28620,28585,28660,28628,28643,28636,28653,28647,28646,28638,28658,28637,28642,28648,29153,29169,29160,29170,29156,29168,29154,29555,29550,29551,29847,29874,29867,29840,29866,29869,29873,29861,29871,29968,29969,29970,29967,30084,30275,30280,30281,30279,30372,30441,30645,30635,30642,30647,30646,30644,30641,30632,30704,30963,30973,30978,30971,30972,30962,30981,30969,30974,30980,31147,31144,31324,31323,31318,31320,31316,31322,31422,31424,31425,31749,31759,31730,31744,31743,31739,31758,31732,31755,31731,31746,31753,31747,31745,31736,31741,31750,31728,31729,31760,31754,31976,32301,32316,32322,32307,38984,32312,32298,32329,32320,32327,32297,32332,32304,32315,32310,32324,32314,32581,32639,32638,32637,32756,32754,32812,33211,33220,33228,33226,33221,33223,33212,33257,33371,33370,33372,34179,34176,34191,34215,34197,34208,34187,34211,34171,34212,34202,34206,34167,34172,34185,34209,34170,34168,34135,34190,34198,34182,34189,34201,34205,34177,34210,34178,34184,34181,34169,34166,34200,34192,34207,34408,34750,34730,34733,34757,34736,34732,34745,34741,34748,34734,34761,34755,34754,34764,34743,34735,34756,34762,34740,34742,34751,34744,34749,34782,34738,35125,35123,35132,35134,35137,35154,35127,35138,35245,35247,35246,35314,35315,35614,35608,35606,35601,35589,35595,35618,35599,35602,35605,35591,35597,35592,35590,35612,35603,35610,35919,35952,35954,35953,35951,35989,35988,36089,36207,36430,36429,36435,36432,36428,36423,36675,36672,36997,36990,37176,37274,37282,37275,37273,37279,37281,37277,37280,37793,37763,37807,37732,37718,37703,37756,37720,37724,37750,37705,37712,37713,37728,37741,37775,37708,37738,37753,37719,37717,37714,37711,37745,37751,37755,37729,37726,37731,37735,37760,37710,37721,38343,38336,38345,38339,38341,38327,38574,38576,38572,38688,38687,38680,38685,38681,38810,38817,38812,38814,38813,38869,38868,38897,38977,38980,38986,38985,38981,38979,39205,39211,39212,39210,39219,39218,39215,39213,39217,39216,39320,39331,39329,39426,39418,39412,39415,39417,39416,39414,39419,39421,39422,39420,39427,39614,39678,39677,39681,39676,39752,39834,39848,39838,39835,39846,39841,39845,39844,39814,39842,39840,39855,40243,40257,40295,40246,40238,40239,40241,40248,40240,40261,40258,40259,40254,40247,40256,40253,32757,40237,40586,40585,40589,40624,40648,40666,40699,40703,40740,40739,40738,40788,40864,20785,20781,20782,22168,22172,22167,22170,22173,22169,22896,23356,23657,23658,24000,24173,24174,25048,25055,25069,25070,25073,25066,25072,25067,25046,25065,25855,25860,25853,25848,25857,25859,25852,26004,26075,26330,26331,26328,27333,27321,27325,27361,27334,27322,27318,27319,27335,27316,27309,27486,27593,27659,28679,28684,28685,28673,28677,28692,28686,28671,28672,28667,28710,28668,28663,28682,29185,29183,29177,29187,29181,29558,29880,29888,29877,29889,29886,29878,29883,29890,29972,29971,30300,30308,30297,30288,30291,30295,30298,30374,30397,30444,30658,30650,30975,30988,30995,30996,30985,30992,30994,30993,31149,31148,31327,31772,31785,31769,31776,31775,31789,31773,31782,31784,31778,31781,31792,32348,32336,32342,32355,32344,32354,32351,32337,32352,32343,32339,32693,32691,32759,32760,32885,33233,33234,33232,33375,33374,34228,34246,34240,34243,34242,34227,34229,34237,34247,34244,34239,34251,34254,34248,34245,34225,34230,34258,34340,34232,34231,34238,34409,34791,34790,34786,34779,34795,34794,34789,34783,34803,34788,34772,34780,34771,34797,34776,34787,34724,34775,34777,34817,34804,34792,34781,35155,35147,35151,35148,35142,35152,35153,35145,35626,35623,35619,35635,35632,35637,35655,35631,35644,35646,35633,35621,35639,35622,35638,35630,35620,35643,35645,35642,35906,35957,35993,35992,35991,36094,36100,36098,36096,36444,36450,36448,36439,36438,36446,36453,36455,36443,36442,36449,36445,36457,36436,36678,36679,36680,36683,37160,37178,37179,37182,37288,37285,37287,37295,37290,37813,37772,37778,37815,37787,37789,37769,37799,37774,37802,37790,37798,37781,37768,37785,37791,37773,37809,37777,37810,37796,37800,37812,37795,37797,38354,38355,38353,38579,38615,38618,24002,38623,38616,38621,38691,38690,38693,38828,38830,38824,38827,38820,38826,38818,38821,38871,38873,38870,38872,38906,38992,38993,38994,39096,39233,39228,39226,39439,39435,39433,39437,39428,39441,39434,39429,39431,39430,39616,39644,39688,39684,39685,39721,39733,39754,39756,39755,39879,39878,39875,39871,39873,39861,39864,39891,39862,39876,39865,39869,40284,40275,40271,40266,40283,40267,40281,40278,40268,40279,40274,40276,40287,40280,40282,40590,40588,40671,40705,40704,40726,40741,40747,40746,40745,40744,40780,40789,20788,20789,21142,21239,21428,22187,22189,22182,22183,22186,22188,22746,22749,22747,22802,23357,23358,23359,24003,24176,24511,25083,25863,25872,25869,25865,25868,25870,25988,26078,26077,26334,27367,27360,27340,27345,27353,27339,27359,27356,27344,27371,27343,27341,27358,27488,27568,27660,28697,28711,28704,28694,28715,28705,28706,28707,28713,28695,28708,28700,28714,29196,29194,29191,29186,29189,29349,29350,29348,29347,29345,29899,29893,29879,29891,29974,30304,30665,30666,30660,30705,31005,31003,31009,31004,30999,31006,31152,31335,31336,31795,31804,31801,31788,31803,31980,31978,32374,32373,32376,32368,32375,32367,32378,32370,32372,32360,32587,32586,32643,32646,32695,32765,32766,32888,33239,33237,33380,33377,33379,34283,34289,34285,34265,34273,34280,34266,34263,34284,34290,34296,34264,34271,34275,34268,34257,34288,34278,34287,34270,34274,34816,34810,34819,34806,34807,34825,34828,34827,34822,34812,34824,34815,34826,34818,35170,35162,35163,35159,35169,35164,35160,35165,35161,35208,35255,35254,35318,35664,35656,35658,35648,35667,35670,35668,35659,35669,35665,35650,35666,35671,35907,35959,35958,35994,36102,36103,36105,36268,36266,36269,36267,36461,36472,36467,36458,36463,36475,36546,36690,36689,36687,36688,36691,36788,37184,37183,37296,37293,37854,37831,37839,37826,37850,37840,37881,37868,37836,37849,37801,37862,37834,37844,37870,37859,37845,37828,37838,37824,37842,37863,38269,38362,38363,38625,38697,38699,38700,38696,38694,38835,38839,38838,38877,38878,38879,39004,39001,39005,38999,39103,39101,39099,39102,39240,39239,39235,39334,39335,39450,39445,39461,39453,39460,39451,39458,39456,39463,39459,39454,39452,39444,39618,39691,39690,39694,39692,39735,39914,39915,39904,39902,39908,39910,39906,39920,39892,39895,39916,39900,39897,39909,39893,39905,39898,40311,40321,40330,40324,40328,40305,40320,40312,40326,40331,40332,40317,40299,40308,40309,40304,40297,40325,40307,40315,40322,40303,40313,40319,40327,40296,40596,40593,40640,40700,40749,40768,40769,40781,40790,40791,40792,21303,22194,22197,22195,22755,23365,24006,24007,24302,24303,24512,24513,25081,25879,25878,25877,25875,26079,26344,26339,26340,27379,27376,27370,27368,27385,27377,27374,27375,28732,28725,28719,28727,28724,28721,28738,28728,28735,28730,28729,28736,28731,28723,28737,29203,29204,29352,29565,29564,29882,30379,30378,30398,30445,30668,30670,30671,30669,30706,31013,31011,31015,31016,31012,31017,31154,31342,31340,31341,31479,31817,31816,31818,31815,31813,31982,32379,32382,32385,32384,32698,32767,32889,33243,33241,33291,33384,33385,34338,34303,34305,34302,34331,34304,34294,34308,34313,34309,34316,34301,34841,34832,34833,34839,34835,34838,35171,35174,35257,35319,35680,35690,35677,35688,35683,35685,35687,35693,36270,36486,36488,36484,36697,36694,36695,36693,36696,36698,37005,37187,37185,37303,37301,37298,37299,37899,37907,37883,37920,37903,37908,37886,37909,37904,37928,37913,37901,37877,37888,37879,37895,37902,37910,37906,37882,37897,37880,37898,37887,37884,37900,37878,37905,37894,38366,38368,38367,38702,38703,38841,38843,38909,38910,39008,39010,39011,39007,39105,39106,39248,39246,39257,39244,39243,39251,39474,39476,39473,39468,39466,39478,39465,39470,39480,39469,39623,39626,39622,39696,39698,39697,39947,39944,39927,39941,39954,39928,40000,39943,39950,39942,39959,39956,39945,40351,40345,40356,40349,40338,40344,40336,40347,40352,40340,40348,40362,40343,40353,40346,40354,40360,40350,40355,40383,40361,40342,40358,40359,40601,40603,40602,40677,40676,40679,40678,40752,40750,40795,40800,40798,40797,40793,40849,20794,20793,21144,21143,22211,22205,22206,23368,23367,24011,24015,24305,25085,25883,27394,27388,27395,27384,27392,28739,28740,28746,28744,28745,28741,28742,29213,29210,29209,29566,29975,30314,30672,31021,31025,31023,31828,31827,31986,32394,32391,32392,32395,32390,32397,32589,32699,32816,33245,34328,34346,34342,34335,34339,34332,34329,34343,34350,34337,34336,34345,34334,34341,34857,34845,34843,34848,34852,34844,34859,34890,35181,35177,35182,35179,35322,35705,35704,35653,35706,35707,36112,36116,36271,36494,36492,36702,36699,36701,37190,37188,37189,37305,37951,37947,37942,37929,37949,37948,37936,37945,37930,37943,37932,37952,37937,38373,38372,38371,38709,38714,38847,38881,39012,39113,39110,39104,39256,39254,39481,39485,39494,39492,39490,39489,39482,39487,39629,39701,39703,39704,39702,39738,39762,39979,39965,39964,39980,39971,39976,39977,39972,39969,40375,40374,40380,40385,40391,40394,40399,40382,40389,40387,40379,40373,40398,40377,40378,40364,40392,40369,40365,40396,40371,40397,40370,40570,40604,40683,40686,40685,40731,40728,40730,40753,40782,40805,40804,40850,20153,22214,22213,22219,22897,23371,23372,24021,24017,24306,25889,25888,25894,25890,27403,27400,27401,27661,28757,28758,28759,28754,29214,29215,29353,29567,29912,29909,29913,29911,30317,30381,31029,31156,31344,31345,31831,31836,31833,31835,31834,31988,31985,32401,32591,32647,33246,33387,34356,34357,34355,34348,34354,34358,34860,34856,34854,34858,34853,35185,35263,35262,35323,35710,35716,35714,35718,35717,35711,36117,36501,36500,36506,36498,36496,36502,36503,36704,36706,37191,37964,37968,37962,37963,37967,37959,37957,37960,37961,37958,38719,38883,39018,39017,39115,39252,39259,39502,39507,39508,39500,39503,39496,39498,39497,39506,39504,39632,39705,39723,39739,39766,39765,40006,40008,39999,40004,39993,39987,40001,39996,39991,39988,39986,39997,39990,40411,40402,40414,40410,40395,40400,40412,40401,40415,40425,40409,40408,40406,40437,40405,40413,40630,40688,40757,40755,40754,40770,40811,40853,40866,20797,21145,22760,22759,22898,23373,24024,34863,24399,25089,25091,25092,25897,25893,26006,26347,27409,27410,27407,27594,28763,28762,29218,29570,29569,29571,30320,30676,31847,31846,32405,33388,34362,34368,34361,34364,34353,34363,34366,34864,34866,34862,34867,35190,35188,35187,35326,35724,35726,35723,35720,35909,36121,36504,36708,36707,37308,37986,37973,37981,37975,37982,38852,38853,38912,39510,39513,39710,39711,39712,40018,40024,40016,40010,40013,40011,40021,40025,40012,40014,40443,40439,40431,40419,40427,40440,40420,40438,40417,40430,40422,40434,40432,40418,40428,40436,40435,40424,40429,40642,40656,40690,40691,40710,40732,40760,40759,40758,40771,40783,40817,40816,40814,40815,22227,22221,23374,23661,25901,26349,26350,27411,28767,28769,28765,28768,29219,29915,29925,30677,31032,31159,31158,31850,32407,32649,33389,34371,34872,34871,34869,34891,35732,35733,36510,36511,36512,36509,37310,37309,37314,37995,37992,37993,38629,38726,38723,38727,38855,38885,39518,39637,39769,40035,40039,40038,40034,40030,40032,40450,40446,40455,40451,40454,40453,40448,40449,40457,40447,40445,40452,40608,40734,40774,40820,40821,40822,22228,25902,26040,27416,27417,27415,27418,28770,29222,29354,30680,30681,31033,31849,31851,31990,32410,32408,32411,32409,33248,33249,34374,34375,34376,35193,35194,35196,35195,35327,35736,35737,36517,36516,36515,37998,37997,37999,38001,38003,38729,39026,39263,40040,40046,40045,40459,40461,40464,40463,40466,40465,40609,40693,40713,40775,40824,40827,40826,40825,22302,28774,31855,34876,36274,36518,37315,38004,38008,38006,38005,39520,40052,40051,40049,40053,40468,40467,40694,40714,40868,28776,28773,31991,34410,34878,34877,34879,35742,35996,36521,36553,38731,39027,39028,39116,39265,39339,39524,39526,39527,39716,40469,40471,40776,25095,27422,29223,34380,36520,38018,38016,38017,39529,39528,39726,40473,29225,34379,35743,38019,40057,40631,30325,39531,40058,40477,28777,28778,40612,40830,40777,40856,30849,37561,35023,22715,24658,31911,23290,9556,9574,9559,9568,9580,9571,9562,9577,9565,9554,9572,9557,9566,9578,9569,9560,9575,9563,9555,9573,9558,9567,9579,9570,9561,9576,9564,9553,9552,9581,9582,9584,9583,65517,132423,37595,132575,147397,34124,17077,29679,20917,13897,149826,166372,37700,137691,33518,146632,30780,26436,25311,149811,166314,131744,158643,135941,20395,140525,20488,159017,162436,144896,150193,140563,20521,131966,24484,131968,131911,28379,132127,20605,20737,13434,20750,39020,14147,33814,149924,132231,20832,144308,20842,134143,139516,131813,140592,132494,143923,137603,23426,34685,132531,146585,20914,20920,40244,20937,20943,20945,15580,20947,150182,20915,20962,21314,20973,33741,26942,145197,24443,21003,21030,21052,21173,21079,21140,21177,21189,31765,34114,21216,34317,158483,21253,166622,21833,28377,147328,133460,147436,21299,21316,134114,27851,136998,26651,29653,24650,16042,14540,136936,29149,17570,21357,21364,165547,21374,21375,136598,136723,30694,21395,166555,21408,21419,21422,29607,153458,16217,29596,21441,21445,27721,20041,22526,21465,15019,134031,21472,147435,142755,21494,134263,21523,28793,21803,26199,27995,21613,158547,134516,21853,21647,21668,18342,136973,134877,15796,134477,166332,140952,21831,19693,21551,29719,21894,21929,22021,137431,147514,17746,148533,26291,135348,22071,26317,144010,26276,26285,22093,22095,30961,22257,38791,21502,22272,22255,22253,166758,13859,135759,22342,147877,27758,28811,22338,14001,158846,22502,136214,22531,136276,148323,22566,150517,22620,22698,13665,22752,22748,135740,22779,23551,22339,172368,148088,37843,13729,22815,26790,14019,28249,136766,23076,21843,136850,34053,22985,134478,158849,159018,137180,23001,137211,137138,159142,28017,137256,136917,23033,159301,23211,23139,14054,149929,23159,14088,23190,29797,23251,159649,140628,15749,137489,14130,136888,24195,21200,23414,25992,23420,162318,16388,18525,131588,23509,24928,137780,154060,132517,23539,23453,19728,23557,138052,23571,29646,23572,138405,158504,23625,18653,23685,23785,23791,23947,138745,138807,23824,23832,23878,138916,23738,24023,33532,14381,149761,139337,139635,33415,14390,15298,24110,27274,24181,24186,148668,134355,21414,20151,24272,21416,137073,24073,24308,164994,24313,24315,14496,24316,26686,37915,24333,131521,194708,15070,18606,135994,24378,157832,140240,24408,140401,24419,38845,159342,24434,37696,166454,24487,23990,15711,152144,139114,159992,140904,37334,131742,166441,24625,26245,137335,14691,15815,13881,22416,141236,31089,15936,24734,24740,24755,149890,149903,162387,29860,20705,23200,24932,33828,24898,194726,159442,24961,20980,132694,24967,23466,147383,141407,25043,166813,170333,25040,14642,141696,141505,24611,24924,25886,25483,131352,25285,137072,25301,142861,25452,149983,14871,25656,25592,136078,137212,25744,28554,142902,38932,147596,153373,25825,25829,38011,14950,25658,14935,25933,28438,150056,150051,25989,25965,25951,143486,26037,149824,19255,26065,16600,137257,26080,26083,24543,144384,26136,143863,143864,26180,143780,143781,26187,134773,26215,152038,26227,26228,138813,143921,165364,143816,152339,30661,141559,39332,26370,148380,150049,15147,27130,145346,26462,26471,26466,147917,168173,26583,17641,26658,28240,37436,26625,144358,159136,26717,144495,27105,27147,166623,26995,26819,144845,26881,26880,15666,14849,144956,15232,26540,26977,166474,17148,26934,27032,15265,132041,33635,20624,27129,144985,139562,27205,145155,27293,15347,26545,27336,168348,15373,27421,133411,24798,27445,27508,141261,28341,146139,132021,137560,14144,21537,146266,27617,147196,27612,27703,140427,149745,158545,27738,33318,27769,146876,17605,146877,147876,149772,149760,146633,14053,15595,134450,39811,143865,140433,32655,26679,159013,159137,159211,28054,27996,28284,28420,149887,147589,159346,34099,159604,20935,27804,28189,33838,166689,28207,146991,29779,147330,31180,28239,23185,143435,28664,14093,28573,146992,28410,136343,147517,17749,37872,28484,28508,15694,28532,168304,15675,28575,147780,28627,147601,147797,147513,147440,147380,147775,20959,147798,147799,147776,156125,28747,28798,28839,28801,28876,28885,28886,28895,16644,15848,29108,29078,148087,28971,28997,23176,29002,29038,23708,148325,29007,37730,148161,28972,148570,150055,150050,29114,166888,28861,29198,37954,29205,22801,37955,29220,37697,153093,29230,29248,149876,26813,29269,29271,15957,143428,26637,28477,29314,29482,29483,149539,165931,18669,165892,29480,29486,29647,29610,134202,158254,29641,29769,147938,136935,150052,26147,14021,149943,149901,150011,29687,29717,26883,150054,29753,132547,16087,29788,141485,29792,167602,29767,29668,29814,33721,29804,14128,29812,37873,27180,29826,18771,150156,147807,150137,166799,23366,166915,137374,29896,137608,29966,29929,29982,167641,137803,23511,167596,37765,30029,30026,30055,30062,151426,16132,150803,30094,29789,30110,30132,30210,30252,30289,30287,30319,30326,156661,30352,33263,14328,157969,157966,30369,30373,30391,30412,159647,33890,151709,151933,138780,30494,30502,30528,25775,152096,30552,144044,30639,166244,166248,136897,30708,30729,136054,150034,26826,30895,30919,30931,38565,31022,153056,30935,31028,30897,161292,36792,34948,166699,155779,140828,31110,35072,26882,31104,153687,31133,162617,31036,31145,28202,160038,16040,31174,168205,31188], + 'euc-kr': [44034,44035,44037,44038,44043,44044,44045,44046,44047,44056,44062,44063,44065,44066,44067,44069,44070,44071,44072,44073,44074,44075,44078,44082,44083,44084,null,null,null,null,null,null,44085,44086,44087,44090,44091,44093,44094,44095,44097,44098,44099,44100,44101,44102,44103,44104,44105,44106,44108,44110,44111,44112,44113,44114,44115,44117,null,null,null,null,null,null,44118,44119,44121,44122,44123,44125,44126,44127,44128,44129,44130,44131,44132,44133,44134,44135,44136,44137,44138,44139,44140,44141,44142,44143,44146,44147,44149,44150,44153,44155,44156,44157,44158,44159,44162,44167,44168,44173,44174,44175,44177,44178,44179,44181,44182,44183,44184,44185,44186,44187,44190,44194,44195,44196,44197,44198,44199,44203,44205,44206,44209,44210,44211,44212,44213,44214,44215,44218,44222,44223,44224,44226,44227,44229,44230,44231,44233,44234,44235,44237,44238,44239,44240,44241,44242,44243,44244,44246,44248,44249,44250,44251,44252,44253,44254,44255,44258,44259,44261,44262,44265,44267,44269,44270,44274,44276,44279,44280,44281,44282,44283,44286,44287,44289,44290,44291,44293,44295,44296,44297,44298,44299,44302,44304,44306,44307,44308,44309,44310,44311,44313,44314,44315,44317,44318,44319,44321,44322,44323,44324,44325,44326,44327,44328,44330,44331,44334,44335,44336,44337,44338,44339,null,null,null,null,null,null,44342,44343,44345,44346,44347,44349,44350,44351,44352,44353,44354,44355,44358,44360,44362,44363,44364,44365,44366,44367,44369,44370,44371,44373,44374,44375,null,null,null,null,null,null,44377,44378,44379,44380,44381,44382,44383,44384,44386,44388,44389,44390,44391,44392,44393,44394,44395,44398,44399,44401,44402,44407,44408,44409,44410,44414,44416,44419,44420,44421,44422,44423,44426,44427,44429,44430,44431,44433,44434,44435,44436,44437,44438,44439,44440,44441,44442,44443,44446,44447,44448,44449,44450,44451,44453,44454,44455,44456,44457,44458,44459,44460,44461,44462,44463,44464,44465,44466,44467,44468,44469,44470,44472,44473,44474,44475,44476,44477,44478,44479,44482,44483,44485,44486,44487,44489,44490,44491,44492,44493,44494,44495,44498,44500,44501,44502,44503,44504,44505,44506,44507,44509,44510,44511,44513,44514,44515,44517,44518,44519,44520,44521,44522,44523,44524,44525,44526,44527,44528,44529,44530,44531,44532,44533,44534,44535,44538,44539,44541,44542,44546,44547,44548,44549,44550,44551,44554,44556,44558,44559,44560,44561,44562,44563,44565,44566,44567,44568,44569,44570,44571,44572,null,null,null,null,null,null,44573,44574,44575,44576,44577,44578,44579,44580,44581,44582,44583,44584,44585,44586,44587,44588,44589,44590,44591,44594,44595,44597,44598,44601,44603,44604,null,null,null,null,null,null,44605,44606,44607,44610,44612,44615,44616,44617,44619,44623,44625,44626,44627,44629,44631,44632,44633,44634,44635,44638,44642,44643,44644,44646,44647,44650,44651,44653,44654,44655,44657,44658,44659,44660,44661,44662,44663,44666,44670,44671,44672,44673,44674,44675,44678,44679,44680,44681,44682,44683,44685,44686,44687,44688,44689,44690,44691,44692,44693,44694,44695,44696,44697,44698,44699,44700,44701,44702,44703,44704,44705,44706,44707,44708,44709,44710,44711,44712,44713,44714,44715,44716,44717,44718,44719,44720,44721,44722,44723,44724,44725,44726,44727,44728,44729,44730,44731,44735,44737,44738,44739,44741,44742,44743,44744,44745,44746,44747,44750,44754,44755,44756,44757,44758,44759,44762,44763,44765,44766,44767,44768,44769,44770,44771,44772,44773,44774,44775,44777,44778,44780,44782,44783,44784,44785,44786,44787,44789,44790,44791,44793,44794,44795,44797,44798,44799,44800,44801,44802,44803,44804,44805,null,null,null,null,null,null,44806,44809,44810,44811,44812,44814,44815,44817,44818,44819,44820,44821,44822,44823,44824,44825,44826,44827,44828,44829,44830,44831,44832,44833,44834,44835,null,null,null,null,null,null,44836,44837,44838,44839,44840,44841,44842,44843,44846,44847,44849,44851,44853,44854,44855,44856,44857,44858,44859,44862,44864,44868,44869,44870,44871,44874,44875,44876,44877,44878,44879,44881,44882,44883,44884,44885,44886,44887,44888,44889,44890,44891,44894,44895,44896,44897,44898,44899,44902,44903,44904,44905,44906,44907,44908,44909,44910,44911,44912,44913,44914,44915,44916,44917,44918,44919,44920,44922,44923,44924,44925,44926,44927,44929,44930,44931,44933,44934,44935,44937,44938,44939,44940,44941,44942,44943,44946,44947,44948,44950,44951,44952,44953,44954,44955,44957,44958,44959,44960,44961,44962,44963,44964,44965,44966,44967,44968,44969,44970,44971,44972,44973,44974,44975,44976,44977,44978,44979,44980,44981,44982,44983,44986,44987,44989,44990,44991,44993,44994,44995,44996,44997,44998,45002,45004,45007,45008,45009,45010,45011,45013,45014,45015,45016,45017,45018,45019,45021,45022,45023,45024,45025,null,null,null,null,null,null,45026,45027,45028,45029,45030,45031,45034,45035,45036,45037,45038,45039,45042,45043,45045,45046,45047,45049,45050,45051,45052,45053,45054,45055,45058,45059,null,null,null,null,null,null,45061,45062,45063,45064,45065,45066,45067,45069,45070,45071,45073,45074,45075,45077,45078,45079,45080,45081,45082,45083,45086,45087,45088,45089,45090,45091,45092,45093,45094,45095,45097,45098,45099,45100,45101,45102,45103,45104,45105,45106,45107,45108,45109,45110,45111,45112,45113,45114,45115,45116,45117,45118,45119,45120,45121,45122,45123,45126,45127,45129,45131,45133,45135,45136,45137,45138,45142,45144,45146,45147,45148,45150,45151,45152,45153,45154,45155,45156,45157,45158,45159,45160,45161,45162,45163,45164,45165,45166,45167,45168,45169,45170,45171,45172,45173,45174,45175,45176,45177,45178,45179,45182,45183,45185,45186,45187,45189,45190,45191,45192,45193,45194,45195,45198,45200,45202,45203,45204,45205,45206,45207,45211,45213,45214,45219,45220,45221,45222,45223,45226,45232,45234,45238,45239,45241,45242,45243,45245,45246,45247,45248,45249,45250,45251,45254,45258,45259,45260,45261,45262,45263,45266,null,null,null,null,null,null,45267,45269,45270,45271,45273,45274,45275,45276,45277,45278,45279,45281,45282,45283,45284,45286,45287,45288,45289,45290,45291,45292,45293,45294,45295,45296,null,null,null,null,null,null,45297,45298,45299,45300,45301,45302,45303,45304,45305,45306,45307,45308,45309,45310,45311,45312,45313,45314,45315,45316,45317,45318,45319,45322,45325,45326,45327,45329,45332,45333,45334,45335,45338,45342,45343,45344,45345,45346,45350,45351,45353,45354,45355,45357,45358,45359,45360,45361,45362,45363,45366,45370,45371,45372,45373,45374,45375,45378,45379,45381,45382,45383,45385,45386,45387,45388,45389,45390,45391,45394,45395,45398,45399,45401,45402,45403,45405,45406,45407,45409,45410,45411,45412,45413,45414,45415,45416,45417,45418,45419,45420,45421,45422,45423,45424,45425,45426,45427,45428,45429,45430,45431,45434,45435,45437,45438,45439,45441,45443,45444,45445,45446,45447,45450,45452,45454,45455,45456,45457,45461,45462,45463,45465,45466,45467,45469,45470,45471,45472,45473,45474,45475,45476,45477,45478,45479,45481,45482,45483,45484,45485,45486,45487,45488,45489,45490,45491,45492,45493,45494,45495,45496,null,null,null,null,null,null,45497,45498,45499,45500,45501,45502,45503,45504,45505,45506,45507,45508,45509,45510,45511,45512,45513,45514,45515,45517,45518,45519,45521,45522,45523,45525,null,null,null,null,null,null,45526,45527,45528,45529,45530,45531,45534,45536,45537,45538,45539,45540,45541,45542,45543,45546,45547,45549,45550,45551,45553,45554,45555,45556,45557,45558,45559,45560,45562,45564,45566,45567,45568,45569,45570,45571,45574,45575,45577,45578,45581,45582,45583,45584,45585,45586,45587,45590,45592,45594,45595,45596,45597,45598,45599,45601,45602,45603,45604,45605,45606,45607,45608,45609,45610,45611,45612,45613,45614,45615,45616,45617,45618,45619,45621,45622,45623,45624,45625,45626,45627,45629,45630,45631,45632,45633,45634,45635,45636,45637,45638,45639,45640,45641,45642,45643,45644,45645,45646,45647,45648,45649,45650,45651,45652,45653,45654,45655,45657,45658,45659,45661,45662,45663,45665,45666,45667,45668,45669,45670,45671,45674,45675,45676,45677,45678,45679,45680,45681,45682,45683,45686,45687,45688,45689,45690,45691,45693,45694,45695,45696,45697,45698,45699,45702,45703,45704,45706,45707,45708,45709,45710,null,null,null,null,null,null,45711,45714,45715,45717,45718,45719,45723,45724,45725,45726,45727,45730,45732,45735,45736,45737,45739,45741,45742,45743,45745,45746,45747,45749,45750,45751,null,null,null,null,null,null,45752,45753,45754,45755,45756,45757,45758,45759,45760,45761,45762,45763,45764,45765,45766,45767,45770,45771,45773,45774,45775,45777,45779,45780,45781,45782,45783,45786,45788,45790,45791,45792,45793,45795,45799,45801,45802,45808,45809,45810,45814,45820,45821,45822,45826,45827,45829,45830,45831,45833,45834,45835,45836,45837,45838,45839,45842,45846,45847,45848,45849,45850,45851,45853,45854,45855,45856,45857,45858,45859,45860,45861,45862,45863,45864,45865,45866,45867,45868,45869,45870,45871,45872,45873,45874,45875,45876,45877,45878,45879,45880,45881,45882,45883,45884,45885,45886,45887,45888,45889,45890,45891,45892,45893,45894,45895,45896,45897,45898,45899,45900,45901,45902,45903,45904,45905,45906,45907,45911,45913,45914,45917,45920,45921,45922,45923,45926,45928,45930,45932,45933,45935,45938,45939,45941,45942,45943,45945,45946,45947,45948,45949,45950,45951,45954,45958,45959,45960,45961,45962,45963,45965,null,null,null,null,null,null,45966,45967,45969,45970,45971,45973,45974,45975,45976,45977,45978,45979,45980,45981,45982,45983,45986,45987,45988,45989,45990,45991,45993,45994,45995,45997,null,null,null,null,null,null,45998,45999,46000,46001,46002,46003,46004,46005,46006,46007,46008,46009,46010,46011,46012,46013,46014,46015,46016,46017,46018,46019,46022,46023,46025,46026,46029,46031,46033,46034,46035,46038,46040,46042,46044,46046,46047,46049,46050,46051,46053,46054,46055,46057,46058,46059,46060,46061,46062,46063,46064,46065,46066,46067,46068,46069,46070,46071,46072,46073,46074,46075,46077,46078,46079,46080,46081,46082,46083,46084,46085,46086,46087,46088,46089,46090,46091,46092,46093,46094,46095,46097,46098,46099,46100,46101,46102,46103,46105,46106,46107,46109,46110,46111,46113,46114,46115,46116,46117,46118,46119,46122,46124,46125,46126,46127,46128,46129,46130,46131,46133,46134,46135,46136,46137,46138,46139,46140,46141,46142,46143,46144,46145,46146,46147,46148,46149,46150,46151,46152,46153,46154,46155,46156,46157,46158,46159,46162,46163,46165,46166,46167,46169,46170,46171,46172,46173,46174,46175,46178,46180,46182,null,null,null,null,null,null,46183,46184,46185,46186,46187,46189,46190,46191,46192,46193,46194,46195,46196,46197,46198,46199,46200,46201,46202,46203,46204,46205,46206,46207,46209,46210,null,null,null,null,null,null,46211,46212,46213,46214,46215,46217,46218,46219,46220,46221,46222,46223,46224,46225,46226,46227,46228,46229,46230,46231,46232,46233,46234,46235,46236,46238,46239,46240,46241,46242,46243,46245,46246,46247,46249,46250,46251,46253,46254,46255,46256,46257,46258,46259,46260,46262,46264,46266,46267,46268,46269,46270,46271,46273,46274,46275,46277,46278,46279,46281,46282,46283,46284,46285,46286,46287,46289,46290,46291,46292,46294,46295,46296,46297,46298,46299,46302,46303,46305,46306,46309,46311,46312,46313,46314,46315,46318,46320,46322,46323,46324,46325,46326,46327,46329,46330,46331,46332,46333,46334,46335,46336,46337,46338,46339,46340,46341,46342,46343,46344,46345,46346,46347,46348,46349,46350,46351,46352,46353,46354,46355,46358,46359,46361,46362,46365,46366,46367,46368,46369,46370,46371,46374,46379,46380,46381,46382,46383,46386,46387,46389,46390,46391,46393,46394,46395,46396,46397,46398,46399,46402,46406,null,null,null,null,null,null,46407,46408,46409,46410,46414,46415,46417,46418,46419,46421,46422,46423,46424,46425,46426,46427,46430,46434,46435,46436,46437,46438,46439,46440,46441,46442,null,null,null,null,null,null,46443,46444,46445,46446,46447,46448,46449,46450,46451,46452,46453,46454,46455,46456,46457,46458,46459,46460,46461,46462,46463,46464,46465,46466,46467,46468,46469,46470,46471,46472,46473,46474,46475,46476,46477,46478,46479,46480,46481,46482,46483,46484,46485,46486,46487,46488,46489,46490,46491,46492,46493,46494,46495,46498,46499,46501,46502,46503,46505,46508,46509,46510,46511,46514,46518,46519,46520,46521,46522,46526,46527,46529,46530,46531,46533,46534,46535,46536,46537,46538,46539,46542,46546,46547,46548,46549,46550,46551,46553,46554,46555,46556,46557,46558,46559,46560,46561,46562,46563,46564,46565,46566,46567,46568,46569,46570,46571,46573,46574,46575,46576,46577,46578,46579,46580,46581,46582,46583,46584,46585,46586,46587,46588,46589,46590,46591,46592,46593,46594,46595,46596,46597,46598,46599,46600,46601,46602,46603,46604,46605,46606,46607,46610,46611,46613,46614,46615,46617,46618,46619,46620,46621,null,null,null,null,null,null,46622,46623,46624,46625,46626,46627,46628,46630,46631,46632,46633,46634,46635,46637,46638,46639,46640,46641,46642,46643,46645,46646,46647,46648,46649,46650,null,null,null,null,null,null,46651,46652,46653,46654,46655,46656,46657,46658,46659,46660,46661,46662,46663,46665,46666,46667,46668,46669,46670,46671,46672,46673,46674,46675,46676,46677,46678,46679,46680,46681,46682,46683,46684,46685,46686,46687,46688,46689,46690,46691,46693,46694,46695,46697,46698,46699,46700,46701,46702,46703,46704,46705,46706,46707,46708,46709,46710,46711,46712,46713,46714,46715,46716,46717,46718,46719,46720,46721,46722,46723,46724,46725,46726,46727,46728,46729,46730,46731,46732,46733,46734,46735,46736,46737,46738,46739,46740,46741,46742,46743,46744,46745,46746,46747,46750,46751,46753,46754,46755,46757,46758,46759,46760,46761,46762,46765,46766,46767,46768,46770,46771,46772,46773,46774,46775,46776,46777,46778,46779,46780,46781,46782,46783,46784,46785,46786,46787,46788,46789,46790,46791,46792,46793,46794,46795,46796,46797,46798,46799,46800,46801,46802,46803,46805,46806,46807,46808,46809,46810,46811,46812,46813,null,null,null,null,null,null,46814,46815,46816,46817,46818,46819,46820,46821,46822,46823,46824,46825,46826,46827,46828,46829,46830,46831,46833,46834,46835,46837,46838,46839,46841,46842,null,null,null,null,null,null,46843,46844,46845,46846,46847,46850,46851,46852,46854,46855,46856,46857,46858,46859,46860,46861,46862,46863,46864,46865,46866,46867,46868,46869,46870,46871,46872,46873,46874,46875,46876,46877,46878,46879,46880,46881,46882,46883,46884,46885,46886,46887,46890,46891,46893,46894,46897,46898,46899,46900,46901,46902,46903,46906,46908,46909,46910,46911,46912,46913,46914,46915,46917,46918,46919,46921,46922,46923,46925,46926,46927,46928,46929,46930,46931,46934,46935,46936,46937,46938,46939,46940,46941,46942,46943,46945,46946,46947,46949,46950,46951,46953,46954,46955,46956,46957,46958,46959,46962,46964,46966,46967,46968,46969,46970,46971,46974,46975,46977,46978,46979,46981,46982,46983,46984,46985,46986,46987,46990,46995,46996,46997,47002,47003,47005,47006,47007,47009,47010,47011,47012,47013,47014,47015,47018,47022,47023,47024,47025,47026,47027,47030,47031,47033,47034,47035,47036,47037,47038,47039,47040,47041,null,null,null,null,null,null,47042,47043,47044,47045,47046,47048,47050,47051,47052,47053,47054,47055,47056,47057,47058,47059,47060,47061,47062,47063,47064,47065,47066,47067,47068,47069,null,null,null,null,null,null,47070,47071,47072,47073,47074,47075,47076,47077,47078,47079,47080,47081,47082,47083,47086,47087,47089,47090,47091,47093,47094,47095,47096,47097,47098,47099,47102,47106,47107,47108,47109,47110,47114,47115,47117,47118,47119,47121,47122,47123,47124,47125,47126,47127,47130,47132,47134,47135,47136,47137,47138,47139,47142,47143,47145,47146,47147,47149,47150,47151,47152,47153,47154,47155,47158,47162,47163,47164,47165,47166,47167,47169,47170,47171,47173,47174,47175,47176,47177,47178,47179,47180,47181,47182,47183,47184,47186,47188,47189,47190,47191,47192,47193,47194,47195,47198,47199,47201,47202,47203,47205,47206,47207,47208,47209,47210,47211,47214,47216,47218,47219,47220,47221,47222,47223,47225,47226,47227,47229,47230,47231,47232,47233,47234,47235,47236,47237,47238,47239,47240,47241,47242,47243,47244,47246,47247,47248,47249,47250,47251,47252,47253,47254,47255,47256,47257,47258,47259,47260,47261,47262,47263,null,null,null,null,null,null,47264,47265,47266,47267,47268,47269,47270,47271,47273,47274,47275,47276,47277,47278,47279,47281,47282,47283,47285,47286,47287,47289,47290,47291,47292,47293,null,null,null,null,null,null,47294,47295,47298,47300,47302,47303,47304,47305,47306,47307,47309,47310,47311,47313,47314,47315,47317,47318,47319,47320,47321,47322,47323,47324,47326,47328,47330,47331,47332,47333,47334,47335,47338,47339,47341,47342,47343,47345,47346,47347,47348,47349,47350,47351,47354,47356,47358,47359,47360,47361,47362,47363,47365,47366,47367,47368,47369,47370,47371,47372,47373,47374,47375,47376,47377,47378,47379,47380,47381,47382,47383,47385,47386,47387,47388,47389,47390,47391,47393,47394,47395,47396,47397,47398,47399,47400,47401,47402,47403,47404,47405,47406,47407,47408,47409,47410,47411,47412,47413,47414,47415,47416,47417,47418,47419,47422,47423,47425,47426,47427,47429,47430,47431,47432,47433,47434,47435,47437,47438,47440,47442,47443,47444,47445,47446,47447,47450,47451,47453,47454,47455,47457,47458,47459,47460,47461,47462,47463,47466,47468,47470,47471,47472,47473,47474,47475,47478,47479,47481,47482,47483,47485,null,null,null,null,null,null,47486,47487,47488,47489,47490,47491,47494,47496,47499,47500,47503,47504,47505,47506,47507,47508,47509,47510,47511,47512,47513,47514,47515,47516,47517,47518,null,null,null,null,null,null,47519,47520,47521,47522,47523,47524,47525,47526,47527,47528,47529,47530,47531,47534,47535,47537,47538,47539,47541,47542,47543,47544,47545,47546,47547,47550,47552,47554,47555,47556,47557,47558,47559,47562,47563,47565,47571,47572,47573,47574,47575,47578,47580,47583,47584,47586,47590,47591,47593,47594,47595,47597,47598,47599,47600,47601,47602,47603,47606,47611,47612,47613,47614,47615,47618,47619,47620,47621,47622,47623,47625,47626,47627,47628,47629,47630,47631,47632,47633,47634,47635,47636,47638,47639,47640,47641,47642,47643,47644,47645,47646,47647,47648,47649,47650,47651,47652,47653,47654,47655,47656,47657,47658,47659,47660,47661,47662,47663,47664,47665,47666,47667,47668,47669,47670,47671,47674,47675,47677,47678,47679,47681,47683,47684,47685,47686,47687,47690,47692,47695,47696,47697,47698,47702,47703,47705,47706,47707,47709,47710,47711,47712,47713,47714,47715,47718,47722,47723,47724,47725,47726,47727,null,null,null,null,null,null,47730,47731,47733,47734,47735,47737,47738,47739,47740,47741,47742,47743,47744,47745,47746,47750,47752,47753,47754,47755,47757,47758,47759,47760,47761,47762,null,null,null,null,null,null,47763,47764,47765,47766,47767,47768,47769,47770,47771,47772,47773,47774,47775,47776,47777,47778,47779,47780,47781,47782,47783,47786,47789,47790,47791,47793,47795,47796,47797,47798,47799,47802,47804,47806,47807,47808,47809,47810,47811,47813,47814,47815,47817,47818,47819,47820,47821,47822,47823,47824,47825,47826,47827,47828,47829,47830,47831,47834,47835,47836,47837,47838,47839,47840,47841,47842,47843,47844,47845,47846,47847,47848,47849,47850,47851,47852,47853,47854,47855,47856,47857,47858,47859,47860,47861,47862,47863,47864,47865,47866,47867,47869,47870,47871,47873,47874,47875,47877,47878,47879,47880,47881,47882,47883,47884,47886,47888,47890,47891,47892,47893,47894,47895,47897,47898,47899,47901,47902,47903,47905,47906,47907,47908,47909,47910,47911,47912,47914,47916,47917,47918,47919,47920,47921,47922,47923,47927,47929,47930,47935,47936,47937,47938,47939,47942,47944,47946,47947,47948,47950,47953,47954,null,null,null,null,null,null,47955,47957,47958,47959,47961,47962,47963,47964,47965,47966,47967,47968,47970,47972,47973,47974,47975,47976,47977,47978,47979,47981,47982,47983,47984,47985,null,null,null,null,null,null,47986,47987,47988,47989,47990,47991,47992,47993,47994,47995,47996,47997,47998,47999,48000,48001,48002,48003,48004,48005,48006,48007,48009,48010,48011,48013,48014,48015,48017,48018,48019,48020,48021,48022,48023,48024,48025,48026,48027,48028,48029,48030,48031,48032,48033,48034,48035,48037,48038,48039,48041,48042,48043,48045,48046,48047,48048,48049,48050,48051,48053,48054,48056,48057,48058,48059,48060,48061,48062,48063,48065,48066,48067,48069,48070,48071,48073,48074,48075,48076,48077,48078,48079,48081,48082,48084,48085,48086,48087,48088,48089,48090,48091,48092,48093,48094,48095,48096,48097,48098,48099,48100,48101,48102,48103,48104,48105,48106,48107,48108,48109,48110,48111,48112,48113,48114,48115,48116,48117,48118,48119,48122,48123,48125,48126,48129,48131,48132,48133,48134,48135,48138,48142,48144,48146,48147,48153,48154,48160,48161,48162,48163,48166,48168,48170,48171,48172,48174,48175,48178,48179,48181,null,null,null,null,null,null,48182,48183,48185,48186,48187,48188,48189,48190,48191,48194,48198,48199,48200,48202,48203,48206,48207,48209,48210,48211,48212,48213,48214,48215,48216,48217,null,null,null,null,null,null,48218,48219,48220,48222,48223,48224,48225,48226,48227,48228,48229,48230,48231,48232,48233,48234,48235,48236,48237,48238,48239,48240,48241,48242,48243,48244,48245,48246,48247,48248,48249,48250,48251,48252,48253,48254,48255,48256,48257,48258,48259,48262,48263,48265,48266,48269,48271,48272,48273,48274,48275,48278,48280,48283,48284,48285,48286,48287,48290,48291,48293,48294,48297,48298,48299,48300,48301,48302,48303,48306,48310,48311,48312,48313,48314,48315,48318,48319,48321,48322,48323,48325,48326,48327,48328,48329,48330,48331,48332,48334,48338,48339,48340,48342,48343,48345,48346,48347,48349,48350,48351,48352,48353,48354,48355,48356,48357,48358,48359,48360,48361,48362,48363,48364,48365,48366,48367,48368,48369,48370,48371,48375,48377,48378,48379,48381,48382,48383,48384,48385,48386,48387,48390,48392,48394,48395,48396,48397,48398,48399,48401,48402,48403,48405,48406,48407,48408,48409,48410,48411,48412,48413,null,null,null,null,null,null,48414,48415,48416,48417,48418,48419,48421,48422,48423,48424,48425,48426,48427,48429,48430,48431,48432,48433,48434,48435,48436,48437,48438,48439,48440,48441,null,null,null,null,null,null,48442,48443,48444,48445,48446,48447,48449,48450,48451,48452,48453,48454,48455,48458,48459,48461,48462,48463,48465,48466,48467,48468,48469,48470,48471,48474,48475,48476,48477,48478,48479,48480,48481,48482,48483,48485,48486,48487,48489,48490,48491,48492,48493,48494,48495,48496,48497,48498,48499,48500,48501,48502,48503,48504,48505,48506,48507,48508,48509,48510,48511,48514,48515,48517,48518,48523,48524,48525,48526,48527,48530,48532,48534,48535,48536,48539,48541,48542,48543,48544,48545,48546,48547,48549,48550,48551,48552,48553,48554,48555,48556,48557,48558,48559,48561,48562,48563,48564,48565,48566,48567,48569,48570,48571,48572,48573,48574,48575,48576,48577,48578,48579,48580,48581,48582,48583,48584,48585,48586,48587,48588,48589,48590,48591,48592,48593,48594,48595,48598,48599,48601,48602,48603,48605,48606,48607,48608,48609,48610,48611,48612,48613,48614,48615,48616,48618,48619,48620,48621,48622,48623,48625,null,null,null,null,null,null,48626,48627,48629,48630,48631,48633,48634,48635,48636,48637,48638,48639,48641,48642,48644,48646,48647,48648,48649,48650,48651,48654,48655,48657,48658,48659,null,null,null,null,null,null,48661,48662,48663,48664,48665,48666,48667,48670,48672,48673,48674,48675,48676,48677,48678,48679,48680,48681,48682,48683,48684,48685,48686,48687,48688,48689,48690,48691,48692,48693,48694,48695,48696,48697,48698,48699,48700,48701,48702,48703,48704,48705,48706,48707,48710,48711,48713,48714,48715,48717,48719,48720,48721,48722,48723,48726,48728,48732,48733,48734,48735,48738,48739,48741,48742,48743,48745,48747,48748,48749,48750,48751,48754,48758,48759,48760,48761,48762,48766,48767,48769,48770,48771,48773,48774,48775,48776,48777,48778,48779,48782,48786,48787,48788,48789,48790,48791,48794,48795,48796,48797,48798,48799,48800,48801,48802,48803,48804,48805,48806,48807,48809,48810,48811,48812,48813,48814,48815,48816,48817,48818,48819,48820,48821,48822,48823,48824,48825,48826,48827,48828,48829,48830,48831,48832,48833,48834,48835,48836,48837,48838,48839,48840,48841,48842,48843,48844,48845,48846,48847,48850,48851,null,null,null,null,null,null,48853,48854,48857,48858,48859,48860,48861,48862,48863,48865,48866,48870,48871,48872,48873,48874,48875,48877,48878,48879,48880,48881,48882,48883,48884,48885,null,null,null,null,null,null,48886,48887,48888,48889,48890,48891,48892,48893,48894,48895,48896,48898,48899,48900,48901,48902,48903,48906,48907,48908,48909,48910,48911,48912,48913,48914,48915,48916,48917,48918,48919,48922,48926,48927,48928,48929,48930,48931,48932,48933,48934,48935,48936,48937,48938,48939,48940,48941,48942,48943,48944,48945,48946,48947,48948,48949,48950,48951,48952,48953,48954,48955,48956,48957,48958,48959,48962,48963,48965,48966,48967,48969,48970,48971,48972,48973,48974,48975,48978,48979,48980,48982,48983,48984,48985,48986,48987,48988,48989,48990,48991,48992,48993,48994,48995,48996,48997,48998,48999,49000,49001,49002,49003,49004,49005,49006,49007,49008,49009,49010,49011,49012,49013,49014,49015,49016,49017,49018,49019,49020,49021,49022,49023,49024,49025,49026,49027,49028,49029,49030,49031,49032,49033,49034,49035,49036,49037,49038,49039,49040,49041,49042,49043,49045,49046,49047,49048,49049,49050,49051,49052,49053,null,null,null,null,null,null,49054,49055,49056,49057,49058,49059,49060,49061,49062,49063,49064,49065,49066,49067,49068,49069,49070,49071,49073,49074,49075,49076,49077,49078,49079,49080,null,null,null,null,null,null,49081,49082,49083,49084,49085,49086,49087,49088,49089,49090,49091,49092,49094,49095,49096,49097,49098,49099,49102,49103,49105,49106,49107,49109,49110,49111,49112,49113,49114,49115,49117,49118,49120,49122,49123,49124,49125,49126,49127,49128,49129,49130,49131,49132,49133,49134,49135,49136,49137,49138,49139,49140,49141,49142,49143,49144,49145,49146,49147,49148,49149,49150,49151,49152,49153,49154,49155,49156,49157,49158,49159,49160,49161,49162,49163,49164,49165,49166,49167,49168,49169,49170,49171,49172,49173,49174,49175,49176,49177,49178,49179,49180,49181,49182,49183,49184,49185,49186,49187,49188,49189,49190,49191,49192,49193,49194,49195,49196,49197,49198,49199,49200,49201,49202,49203,49204,49205,49206,49207,49208,49209,49210,49211,49213,49214,49215,49216,49217,49218,49219,49220,49221,49222,49223,49224,49225,49226,49227,49228,49229,49230,49231,49232,49234,49235,49236,49237,49238,49239,49241,49242,49243,null,null,null,null,null,null,49245,49246,49247,49249,49250,49251,49252,49253,49254,49255,49258,49259,49260,49261,49262,49263,49264,49265,49266,49267,49268,49269,49270,49271,49272,49273,null,null,null,null,null,null,49274,49275,49276,49277,49278,49279,49280,49281,49282,49283,49284,49285,49286,49287,49288,49289,49290,49291,49292,49293,49294,49295,49298,49299,49301,49302,49303,49305,49306,49307,49308,49309,49310,49311,49314,49316,49318,49319,49320,49321,49322,49323,49326,49329,49330,49335,49336,49337,49338,49339,49342,49346,49347,49348,49350,49351,49354,49355,49357,49358,49359,49361,49362,49363,49364,49365,49366,49367,49370,49374,49375,49376,49377,49378,49379,49382,49383,49385,49386,49387,49389,49390,49391,49392,49393,49394,49395,49398,49400,49402,49403,49404,49405,49406,49407,49409,49410,49411,49413,49414,49415,49417,49418,49419,49420,49421,49422,49423,49425,49426,49427,49428,49430,49431,49432,49433,49434,49435,49441,49442,49445,49448,49449,49450,49451,49454,49458,49459,49460,49461,49463,49466,49467,49469,49470,49471,49473,49474,49475,49476,49477,49478,49479,49482,49486,49487,49488,49489,49490,49491,49494,49495,null,null,null,null,null,null,49497,49498,49499,49501,49502,49503,49504,49505,49506,49507,49510,49514,49515,49516,49517,49518,49519,49521,49522,49523,49525,49526,49527,49529,49530,49531,null,null,null,null,null,null,49532,49533,49534,49535,49536,49537,49538,49539,49540,49542,49543,49544,49545,49546,49547,49551,49553,49554,49555,49557,49559,49560,49561,49562,49563,49566,49568,49570,49571,49572,49574,49575,49578,49579,49581,49582,49583,49585,49586,49587,49588,49589,49590,49591,49592,49593,49594,49595,49596,49598,49599,49600,49601,49602,49603,49605,49606,49607,49609,49610,49611,49613,49614,49615,49616,49617,49618,49619,49621,49622,49625,49626,49627,49628,49629,49630,49631,49633,49634,49635,49637,49638,49639,49641,49642,49643,49644,49645,49646,49647,49650,49652,49653,49654,49655,49656,49657,49658,49659,49662,49663,49665,49666,49667,49669,49670,49671,49672,49673,49674,49675,49678,49680,49682,49683,49684,49685,49686,49687,49690,49691,49693,49694,49697,49698,49699,49700,49701,49702,49703,49706,49708,49710,49712,49715,49717,49718,49719,49720,49721,49722,49723,49724,49725,49726,49727,49728,49729,49730,49731,49732,49733,null,null,null,null,null,null,49734,49735,49737,49738,49739,49740,49741,49742,49743,49746,49747,49749,49750,49751,49753,49754,49755,49756,49757,49758,49759,49761,49762,49763,49764,49766,null,null,null,null,null,null,49767,49768,49769,49770,49771,49774,49775,49777,49778,49779,49781,49782,49783,49784,49785,49786,49787,49790,49792,49794,49795,49796,49797,49798,49799,49802,49803,49804,49805,49806,49807,49809,49810,49811,49812,49813,49814,49815,49817,49818,49820,49822,49823,49824,49825,49826,49827,49830,49831,49833,49834,49835,49838,49839,49840,49841,49842,49843,49846,49848,49850,49851,49852,49853,49854,49855,49856,49857,49858,49859,49860,49861,49862,49863,49864,49865,49866,49867,49868,49869,49870,49871,49872,49873,49874,49875,49876,49877,49878,49879,49880,49881,49882,49883,49886,49887,49889,49890,49893,49894,49895,49896,49897,49898,49902,49904,49906,49907,49908,49909,49911,49914,49917,49918,49919,49921,49922,49923,49924,49925,49926,49927,49930,49931,49934,49935,49936,49937,49938,49942,49943,49945,49946,49947,49949,49950,49951,49952,49953,49954,49955,49958,49959,49962,49963,49964,49965,49966,49967,49968,49969,49970,null,null,null,null,null,null,49971,49972,49973,49974,49975,49976,49977,49978,49979,49980,49981,49982,49983,49984,49985,49986,49987,49988,49990,49991,49992,49993,49994,49995,49996,49997,null,null,null,null,null,null,49998,49999,50000,50001,50002,50003,50004,50005,50006,50007,50008,50009,50010,50011,50012,50013,50014,50015,50016,50017,50018,50019,50020,50021,50022,50023,50026,50027,50029,50030,50031,50033,50035,50036,50037,50038,50039,50042,50043,50046,50047,50048,50049,50050,50051,50053,50054,50055,50057,50058,50059,50061,50062,50063,50064,50065,50066,50067,50068,50069,50070,50071,50072,50073,50074,50075,50076,50077,50078,50079,50080,50081,50082,50083,50084,50085,50086,50087,50088,50089,50090,50091,50092,50093,50094,50095,50096,50097,50098,50099,50100,50101,50102,50103,50104,50105,50106,50107,50108,50109,50110,50111,50113,50114,50115,50116,50117,50118,50119,50120,50121,50122,50123,50124,50125,50126,50127,50128,50129,50130,50131,50132,50133,50134,50135,50138,50139,50141,50142,50145,50147,50148,50149,50150,50151,50154,50155,50156,50158,50159,50160,50161,50162,50163,50166,50167,50169,50170,50171,50172,50173,50174,null,null,null,null,null,null,50175,50176,50177,50178,50179,50180,50181,50182,50183,50185,50186,50187,50188,50189,50190,50191,50193,50194,50195,50196,50197,50198,50199,50200,50201,50202,null,null,null,null,null,null,50203,50204,50205,50206,50207,50208,50209,50210,50211,50213,50214,50215,50216,50217,50218,50219,50221,50222,50223,50225,50226,50227,50229,50230,50231,50232,50233,50234,50235,50238,50239,50240,50241,50242,50243,50244,50245,50246,50247,50249,50250,50251,50252,50253,50254,50255,50256,50257,50258,50259,50260,50261,50262,50263,50264,50265,50266,50267,50268,50269,50270,50271,50272,50273,50274,50275,50278,50279,50281,50282,50283,50285,50286,50287,50288,50289,50290,50291,50294,50295,50296,50298,50299,50300,50301,50302,50303,50305,50306,50307,50308,50309,50310,50311,50312,50313,50314,50315,50316,50317,50318,50319,50320,50321,50322,50323,50325,50326,50327,50328,50329,50330,50331,50333,50334,50335,50336,50337,50338,50339,50340,50341,50342,50343,50344,50345,50346,50347,50348,50349,50350,50351,50352,50353,50354,50355,50356,50357,50358,50359,50361,50362,50363,50365,50366,50367,50368,50369,50370,50371,50372,50373,null,null,null,null,null,null,50374,50375,50376,50377,50378,50379,50380,50381,50382,50383,50384,50385,50386,50387,50388,50389,50390,50391,50392,50393,50394,50395,50396,50397,50398,50399,null,null,null,null,null,null,50400,50401,50402,50403,50404,50405,50406,50407,50408,50410,50411,50412,50413,50414,50415,50418,50419,50421,50422,50423,50425,50427,50428,50429,50430,50434,50435,50436,50437,50438,50439,50440,50441,50442,50443,50445,50446,50447,50449,50450,50451,50453,50454,50455,50456,50457,50458,50459,50461,50462,50463,50464,50465,50466,50467,50468,50469,50470,50471,50474,50475,50477,50478,50479,50481,50482,50483,50484,50485,50486,50487,50490,50492,50494,50495,50496,50497,50498,50499,50502,50503,50507,50511,50512,50513,50514,50518,50522,50523,50524,50527,50530,50531,50533,50534,50535,50537,50538,50539,50540,50541,50542,50543,50546,50550,50551,50552,50553,50554,50555,50558,50559,50561,50562,50563,50565,50566,50568,50569,50570,50571,50574,50576,50578,50579,50580,50582,50585,50586,50587,50589,50590,50591,50593,50594,50595,50596,50597,50598,50599,50600,50602,50603,50604,50605,50606,50607,50608,50609,50610,50611,50614,null,null,null,null,null,null,50615,50618,50623,50624,50625,50626,50627,50635,50637,50639,50642,50643,50645,50646,50647,50649,50650,50651,50652,50653,50654,50655,50658,50660,50662,50663,null,null,null,null,null,null,50664,50665,50666,50667,50671,50673,50674,50675,50677,50680,50681,50682,50683,50690,50691,50692,50697,50698,50699,50701,50702,50703,50705,50706,50707,50708,50709,50710,50711,50714,50717,50718,50719,50720,50721,50722,50723,50726,50727,50729,50730,50731,50735,50737,50738,50742,50744,50746,50748,50749,50750,50751,50754,50755,50757,50758,50759,50761,50762,50763,50764,50765,50766,50767,50770,50774,50775,50776,50777,50778,50779,50782,50783,50785,50786,50787,50788,50789,50790,50791,50792,50793,50794,50795,50797,50798,50800,50802,50803,50804,50805,50806,50807,50810,50811,50813,50814,50815,50817,50818,50819,50820,50821,50822,50823,50826,50828,50830,50831,50832,50833,50834,50835,50838,50839,50841,50842,50843,50845,50846,50847,50848,50849,50850,50851,50854,50856,50858,50859,50860,50861,50862,50863,50866,50867,50869,50870,50871,50875,50876,50877,50878,50879,50882,50884,50886,50887,50888,50889,50890,50891,50894,null,null,null,null,null,null,50895,50897,50898,50899,50901,50902,50903,50904,50905,50906,50907,50910,50911,50914,50915,50916,50917,50918,50919,50922,50923,50925,50926,50927,50929,50930,null,null,null,null,null,null,50931,50932,50933,50934,50935,50938,50939,50940,50942,50943,50944,50945,50946,50947,50950,50951,50953,50954,50955,50957,50958,50959,50960,50961,50962,50963,50966,50968,50970,50971,50972,50973,50974,50975,50978,50979,50981,50982,50983,50985,50986,50987,50988,50989,50990,50991,50994,50996,50998,51000,51001,51002,51003,51006,51007,51009,51010,51011,51013,51014,51015,51016,51017,51019,51022,51024,51033,51034,51035,51037,51038,51039,51041,51042,51043,51044,51045,51046,51047,51049,51050,51052,51053,51054,51055,51056,51057,51058,51059,51062,51063,51065,51066,51067,51071,51072,51073,51074,51078,51083,51084,51085,51087,51090,51091,51093,51097,51099,51100,51101,51102,51103,51106,51111,51112,51113,51114,51115,51118,51119,51121,51122,51123,51125,51126,51127,51128,51129,51130,51131,51134,51138,51139,51140,51141,51142,51143,51146,51147,51149,51151,51153,51154,51155,51156,51157,51158,51159,51161,51162,51163,51164,null,null,null,null,null,null,51166,51167,51168,51169,51170,51171,51173,51174,51175,51177,51178,51179,51181,51182,51183,51184,51185,51186,51187,51188,51189,51190,51191,51192,51193,51194,null,null,null,null,null,null,51195,51196,51197,51198,51199,51202,51203,51205,51206,51207,51209,51211,51212,51213,51214,51215,51218,51220,51223,51224,51225,51226,51227,51230,51231,51233,51234,51235,51237,51238,51239,51240,51241,51242,51243,51246,51248,51250,51251,51252,51253,51254,51255,51257,51258,51259,51261,51262,51263,51265,51266,51267,51268,51269,51270,51271,51274,51275,51278,51279,51280,51281,51282,51283,51285,51286,51287,51288,51289,51290,51291,51292,51293,51294,51295,51296,51297,51298,51299,51300,51301,51302,51303,51304,51305,51306,51307,51308,51309,51310,51311,51314,51315,51317,51318,51319,51321,51323,51324,51325,51326,51327,51330,51332,51336,51337,51338,51342,51343,51344,51345,51346,51347,51349,51350,51351,51352,51353,51354,51355,51356,51358,51360,51362,51363,51364,51365,51366,51367,51369,51370,51371,51372,51373,51374,51375,51376,51377,51378,51379,51380,51381,51382,51383,51384,51385,51386,51387,51390,51391,51392,51393,null,null,null,null,null,null,51394,51395,51397,51398,51399,51401,51402,51403,51405,51406,51407,51408,51409,51410,51411,51414,51416,51418,51419,51420,51421,51422,51423,51426,51427,51429,null,null,null,null,null,null,51430,51431,51432,51433,51434,51435,51436,51437,51438,51439,51440,51441,51442,51443,51444,51446,51447,51448,51449,51450,51451,51454,51455,51457,51458,51459,51463,51464,51465,51466,51467,51470,12288,12289,12290,183,8229,8230,168,12291,173,8213,8741,65340,8764,8216,8217,8220,8221,12308,12309,12296,12297,12298,12299,12300,12301,12302,12303,12304,12305,177,215,247,8800,8804,8805,8734,8756,176,8242,8243,8451,8491,65504,65505,65509,9794,9792,8736,8869,8978,8706,8711,8801,8786,167,8251,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,9661,9660,8594,8592,8593,8595,8596,12307,8810,8811,8730,8765,8733,8757,8747,8748,8712,8715,8838,8839,8834,8835,8746,8745,8743,8744,65506,51472,51474,51475,51476,51477,51478,51479,51481,51482,51483,51484,51485,51486,51487,51488,51489,51490,51491,51492,51493,51494,51495,51496,51497,51498,51499,null,null,null,null,null,null,51501,51502,51503,51504,51505,51506,51507,51509,51510,51511,51512,51513,51514,51515,51516,51517,51518,51519,51520,51521,51522,51523,51524,51525,51526,51527,null,null,null,null,null,null,51528,51529,51530,51531,51532,51533,51534,51535,51538,51539,51541,51542,51543,51545,51546,51547,51548,51549,51550,51551,51554,51556,51557,51558,51559,51560,51561,51562,51563,51565,51566,51567,8658,8660,8704,8707,180,65374,711,728,733,730,729,184,731,161,191,720,8750,8721,8719,164,8457,8240,9665,9664,9655,9654,9828,9824,9825,9829,9831,9827,8857,9672,9635,9680,9681,9618,9636,9637,9640,9639,9638,9641,9832,9743,9742,9756,9758,182,8224,8225,8597,8599,8601,8598,8600,9837,9833,9834,9836,12927,12828,8470,13255,8482,13250,13272,8481,8364,174,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,51569,51570,51571,51573,51574,51575,51576,51577,51578,51579,51581,51582,51583,51584,51585,51586,51587,51588,51589,51590,51591,51594,51595,51597,51598,51599,null,null,null,null,null,null,51601,51602,51603,51604,51605,51606,51607,51610,51612,51614,51615,51616,51617,51618,51619,51620,51621,51622,51623,51624,51625,51626,51627,51628,51629,51630,null,null,null,null,null,null,51631,51632,51633,51634,51635,51636,51637,51638,51639,51640,51641,51642,51643,51644,51645,51646,51647,51650,51651,51653,51654,51657,51659,51660,51661,51662,51663,51666,51668,51671,51672,51675,65281,65282,65283,65284,65285,65286,65287,65288,65289,65290,65291,65292,65293,65294,65295,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,65306,65307,65308,65309,65310,65311,65312,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65339,65510,65341,65342,65343,65344,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,65371,65372,65373,65507,51678,51679,51681,51683,51685,51686,51688,51689,51690,51691,51694,51698,51699,51700,51701,51702,51703,51706,51707,51709,51710,51711,51713,51714,51715,51716,null,null,null,null,null,null,51717,51718,51719,51722,51726,51727,51728,51729,51730,51731,51733,51734,51735,51737,51738,51739,51740,51741,51742,51743,51744,51745,51746,51747,51748,51749,null,null,null,null,null,null,51750,51751,51752,51754,51755,51756,51757,51758,51759,51760,51761,51762,51763,51764,51765,51766,51767,51768,51769,51770,51771,51772,51773,51774,51775,51776,51777,51778,51779,51780,51781,51782,12593,12594,12595,12596,12597,12598,12599,12600,12601,12602,12603,12604,12605,12606,12607,12608,12609,12610,12611,12612,12613,12614,12615,12616,12617,12618,12619,12620,12621,12622,12623,12624,12625,12626,12627,12628,12629,12630,12631,12632,12633,12634,12635,12636,12637,12638,12639,12640,12641,12642,12643,12644,12645,12646,12647,12648,12649,12650,12651,12652,12653,12654,12655,12656,12657,12658,12659,12660,12661,12662,12663,12664,12665,12666,12667,12668,12669,12670,12671,12672,12673,12674,12675,12676,12677,12678,12679,12680,12681,12682,12683,12684,12685,12686,51783,51784,51785,51786,51787,51790,51791,51793,51794,51795,51797,51798,51799,51800,51801,51802,51803,51806,51810,51811,51812,51813,51814,51815,51817,51818,null,null,null,null,null,null,51819,51820,51821,51822,51823,51824,51825,51826,51827,51828,51829,51830,51831,51832,51833,51834,51835,51836,51838,51839,51840,51841,51842,51843,51845,51846,null,null,null,null,null,null,51847,51848,51849,51850,51851,51852,51853,51854,51855,51856,51857,51858,51859,51860,51861,51862,51863,51865,51866,51867,51868,51869,51870,51871,51872,51873,51874,51875,51876,51877,51878,51879,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,null,null,null,null,null,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,null,null,null,null,null,null,null,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,null,null,null,null,null,null,null,null,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,null,null,null,null,null,null,51880,51881,51882,51883,51884,51885,51886,51887,51888,51889,51890,51891,51892,51893,51894,51895,51896,51897,51898,51899,51902,51903,51905,51906,51907,51909,null,null,null,null,null,null,51910,51911,51912,51913,51914,51915,51918,51920,51922,51924,51925,51926,51927,51930,51931,51932,51933,51934,51935,51937,51938,51939,51940,51941,51942,51943,null,null,null,null,null,null,51944,51945,51946,51947,51949,51950,51951,51952,51953,51954,51955,51957,51958,51959,51960,51961,51962,51963,51964,51965,51966,51967,51968,51969,51970,51971,51972,51973,51974,51975,51977,51978,9472,9474,9484,9488,9496,9492,9500,9516,9508,9524,9532,9473,9475,9487,9491,9499,9495,9507,9523,9515,9531,9547,9504,9519,9512,9527,9535,9501,9520,9509,9528,9538,9490,9489,9498,9497,9494,9493,9486,9485,9502,9503,9505,9506,9510,9511,9513,9514,9517,9518,9521,9522,9525,9526,9529,9530,9533,9534,9536,9537,9539,9540,9541,9542,9543,9544,9545,9546,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,51979,51980,51981,51982,51983,51985,51986,51987,51989,51990,51991,51993,51994,51995,51996,51997,51998,51999,52002,52003,52004,52005,52006,52007,52008,52009,null,null,null,null,null,null,52010,52011,52012,52013,52014,52015,52016,52017,52018,52019,52020,52021,52022,52023,52024,52025,52026,52027,52028,52029,52030,52031,52032,52034,52035,52036,null,null,null,null,null,null,52037,52038,52039,52042,52043,52045,52046,52047,52049,52050,52051,52052,52053,52054,52055,52058,52059,52060,52062,52063,52064,52065,52066,52067,52069,52070,52071,52072,52073,52074,52075,52076,13205,13206,13207,8467,13208,13252,13219,13220,13221,13222,13209,13210,13211,13212,13213,13214,13215,13216,13217,13218,13258,13197,13198,13199,13263,13192,13193,13256,13223,13224,13232,13233,13234,13235,13236,13237,13238,13239,13240,13241,13184,13185,13186,13187,13188,13242,13243,13244,13245,13246,13247,13200,13201,13202,13203,13204,8486,13248,13249,13194,13195,13196,13270,13253,13229,13230,13231,13275,13225,13226,13227,13228,13277,13264,13267,13251,13257,13276,13254,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52077,52078,52079,52080,52081,52082,52083,52084,52085,52086,52087,52090,52091,52092,52093,52094,52095,52096,52097,52098,52099,52100,52101,52102,52103,52104,null,null,null,null,null,null,52105,52106,52107,52108,52109,52110,52111,52112,52113,52114,52115,52116,52117,52118,52119,52120,52121,52122,52123,52125,52126,52127,52128,52129,52130,52131,null,null,null,null,null,null,52132,52133,52134,52135,52136,52137,52138,52139,52140,52141,52142,52143,52144,52145,52146,52147,52148,52149,52150,52151,52153,52154,52155,52156,52157,52158,52159,52160,52161,52162,52163,52164,198,208,170,294,null,306,null,319,321,216,338,186,222,358,330,null,12896,12897,12898,12899,12900,12901,12902,12903,12904,12905,12906,12907,12908,12909,12910,12911,12912,12913,12914,12915,12916,12917,12918,12919,12920,12921,12922,12923,9424,9425,9426,9427,9428,9429,9430,9431,9432,9433,9434,9435,9436,9437,9438,9439,9440,9441,9442,9443,9444,9445,9446,9447,9448,9449,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,189,8531,8532,188,190,8539,8540,8541,8542,52165,52166,52167,52168,52169,52170,52171,52172,52173,52174,52175,52176,52177,52178,52179,52181,52182,52183,52184,52185,52186,52187,52188,52189,52190,52191,null,null,null,null,null,null,52192,52193,52194,52195,52197,52198,52200,52202,52203,52204,52205,52206,52207,52208,52209,52210,52211,52212,52213,52214,52215,52216,52217,52218,52219,52220,null,null,null,null,null,null,52221,52222,52223,52224,52225,52226,52227,52228,52229,52230,52231,52232,52233,52234,52235,52238,52239,52241,52242,52243,52245,52246,52247,52248,52249,52250,52251,52254,52255,52256,52259,52260,230,273,240,295,305,307,312,320,322,248,339,223,254,359,331,329,12800,12801,12802,12803,12804,12805,12806,12807,12808,12809,12810,12811,12812,12813,12814,12815,12816,12817,12818,12819,12820,12821,12822,12823,12824,12825,12826,12827,9372,9373,9374,9375,9376,9377,9378,9379,9380,9381,9382,9383,9384,9385,9386,9387,9388,9389,9390,9391,9392,9393,9394,9395,9396,9397,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345,9346,185,178,179,8308,8319,8321,8322,8323,8324,52261,52262,52266,52267,52269,52271,52273,52274,52275,52276,52277,52278,52279,52282,52287,52288,52289,52290,52291,52294,52295,52297,52298,52299,52301,52302,null,null,null,null,null,null,52303,52304,52305,52306,52307,52310,52314,52315,52316,52317,52318,52319,52321,52322,52323,52325,52327,52329,52330,52331,52332,52333,52334,52335,52337,52338,null,null,null,null,null,null,52339,52340,52342,52343,52344,52345,52346,52347,52348,52349,52350,52351,52352,52353,52354,52355,52356,52357,52358,52359,52360,52361,52362,52363,52364,52365,52366,52367,52368,52369,52370,52371,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,null,null,null,null,null,null,null,null,null,null,null,52372,52373,52374,52375,52378,52379,52381,52382,52383,52385,52386,52387,52388,52389,52390,52391,52394,52398,52399,52400,52401,52402,52403,52406,52407,52409,null,null,null,null,null,null,52410,52411,52413,52414,52415,52416,52417,52418,52419,52422,52424,52426,52427,52428,52429,52430,52431,52433,52434,52435,52437,52438,52439,52440,52441,52442,null,null,null,null,null,null,52443,52444,52445,52446,52447,52448,52449,52450,52451,52453,52454,52455,52456,52457,52458,52459,52461,52462,52463,52465,52466,52467,52468,52469,52470,52471,52472,52473,52474,52475,52476,52477,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,null,null,null,null,null,null,null,null,52478,52479,52480,52482,52483,52484,52485,52486,52487,52490,52491,52493,52494,52495,52497,52498,52499,52500,52501,52502,52503,52506,52508,52510,52511,52512,null,null,null,null,null,null,52513,52514,52515,52517,52518,52519,52521,52522,52523,52525,52526,52527,52528,52529,52530,52531,52532,52533,52534,52535,52536,52538,52539,52540,52541,52542,null,null,null,null,null,null,52543,52544,52545,52546,52547,52548,52549,52550,52551,52552,52553,52554,52555,52556,52557,52558,52559,52560,52561,52562,52563,52564,52565,52566,52567,52568,52569,52570,52571,52573,52574,52575,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,null,null,null,null,null,null,null,null,null,null,null,null,null,52577,52578,52579,52581,52582,52583,52584,52585,52586,52587,52590,52592,52594,52595,52596,52597,52598,52599,52601,52602,52603,52604,52605,52606,52607,52608,null,null,null,null,null,null,52609,52610,52611,52612,52613,52614,52615,52617,52618,52619,52620,52621,52622,52623,52624,52625,52626,52627,52630,52631,52633,52634,52635,52637,52638,52639,null,null,null,null,null,null,52640,52641,52642,52643,52646,52648,52650,52651,52652,52653,52654,52655,52657,52658,52659,52660,52661,52662,52663,52664,52665,52666,52667,52668,52669,52670,52671,52672,52673,52674,52675,52677,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52678,52679,52680,52681,52682,52683,52685,52686,52687,52689,52690,52691,52692,52693,52694,52695,52696,52697,52698,52699,52700,52701,52702,52703,52704,52705,null,null,null,null,null,null,52706,52707,52708,52709,52710,52711,52713,52714,52715,52717,52718,52719,52721,52722,52723,52724,52725,52726,52727,52730,52732,52734,52735,52736,52737,52738,null,null,null,null,null,null,52739,52741,52742,52743,52745,52746,52747,52749,52750,52751,52752,52753,52754,52755,52757,52758,52759,52760,52762,52763,52764,52765,52766,52767,52770,52771,52773,52774,52775,52777,52778,52779,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52780,52781,52782,52783,52786,52788,52790,52791,52792,52793,52794,52795,52796,52797,52798,52799,52800,52801,52802,52803,52804,52805,52806,52807,52808,52809,null,null,null,null,null,null,52810,52811,52812,52813,52814,52815,52816,52817,52818,52819,52820,52821,52822,52823,52826,52827,52829,52830,52834,52835,52836,52837,52838,52839,52842,52844,null,null,null,null,null,null,52846,52847,52848,52849,52850,52851,52854,52855,52857,52858,52859,52861,52862,52863,52864,52865,52866,52867,52870,52872,52874,52875,52876,52877,52878,52879,52882,52883,52885,52886,52887,52889,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,52890,52891,52892,52893,52894,52895,52898,52902,52903,52904,52905,52906,52907,52910,52911,52912,52913,52914,52915,52916,52917,52918,52919,52920,52921,52922,null,null,null,null,null,null,52923,52924,52925,52926,52927,52928,52930,52931,52932,52933,52934,52935,52936,52937,52938,52939,52940,52941,52942,52943,52944,52945,52946,52947,52948,52949,null,null,null,null,null,null,52950,52951,52952,52953,52954,52955,52956,52957,52958,52959,52960,52961,52962,52963,52966,52967,52969,52970,52973,52974,52975,52976,52977,52978,52979,52982,52986,52987,52988,52989,52990,52991,44032,44033,44036,44039,44040,44041,44042,44048,44049,44050,44051,44052,44053,44054,44055,44057,44058,44059,44060,44061,44064,44068,44076,44077,44079,44080,44081,44088,44089,44092,44096,44107,44109,44116,44120,44124,44144,44145,44148,44151,44152,44154,44160,44161,44163,44164,44165,44166,44169,44170,44171,44172,44176,44180,44188,44189,44191,44192,44193,44200,44201,44202,44204,44207,44208,44216,44217,44219,44220,44221,44225,44228,44232,44236,44245,44247,44256,44257,44260,44263,44264,44266,44268,44271,44272,44273,44275,44277,44278,44284,44285,44288,44292,44294,52994,52995,52997,52998,52999,53001,53002,53003,53004,53005,53006,53007,53010,53012,53014,53015,53016,53017,53018,53019,53021,53022,53023,53025,53026,53027,null,null,null,null,null,null,53029,53030,53031,53032,53033,53034,53035,53038,53042,53043,53044,53045,53046,53047,53049,53050,53051,53052,53053,53054,53055,53056,53057,53058,53059,53060,null,null,null,null,null,null,53061,53062,53063,53064,53065,53066,53067,53068,53069,53070,53071,53072,53073,53074,53075,53078,53079,53081,53082,53083,53085,53086,53087,53088,53089,53090,53091,53094,53096,53098,53099,53100,44300,44301,44303,44305,44312,44316,44320,44329,44332,44333,44340,44341,44344,44348,44356,44357,44359,44361,44368,44372,44376,44385,44387,44396,44397,44400,44403,44404,44405,44406,44411,44412,44413,44415,44417,44418,44424,44425,44428,44432,44444,44445,44452,44471,44480,44481,44484,44488,44496,44497,44499,44508,44512,44516,44536,44537,44540,44543,44544,44545,44552,44553,44555,44557,44564,44592,44593,44596,44599,44600,44602,44608,44609,44611,44613,44614,44618,44620,44621,44622,44624,44628,44630,44636,44637,44639,44640,44641,44645,44648,44649,44652,44656,44664,53101,53102,53103,53106,53107,53109,53110,53111,53113,53114,53115,53116,53117,53118,53119,53121,53122,53123,53124,53126,53127,53128,53129,53130,53131,53133,null,null,null,null,null,null,53134,53135,53136,53137,53138,53139,53140,53141,53142,53143,53144,53145,53146,53147,53148,53149,53150,53151,53152,53154,53155,53156,53157,53158,53159,53161,null,null,null,null,null,null,53162,53163,53164,53165,53166,53167,53169,53170,53171,53172,53173,53174,53175,53176,53177,53178,53179,53180,53181,53182,53183,53184,53185,53186,53187,53189,53190,53191,53192,53193,53194,53195,44665,44667,44668,44669,44676,44677,44684,44732,44733,44734,44736,44740,44748,44749,44751,44752,44753,44760,44761,44764,44776,44779,44781,44788,44792,44796,44807,44808,44813,44816,44844,44845,44848,44850,44852,44860,44861,44863,44865,44866,44867,44872,44873,44880,44892,44893,44900,44901,44921,44928,44932,44936,44944,44945,44949,44956,44984,44985,44988,44992,44999,45000,45001,45003,45005,45006,45012,45020,45032,45033,45040,45041,45044,45048,45056,45057,45060,45068,45072,45076,45084,45085,45096,45124,45125,45128,45130,45132,45134,45139,45140,45141,45143,45145,53196,53197,53198,53199,53200,53201,53202,53203,53204,53205,53206,53207,53208,53209,53210,53211,53212,53213,53214,53215,53218,53219,53221,53222,53223,53225,null,null,null,null,null,null,53226,53227,53228,53229,53230,53231,53234,53236,53238,53239,53240,53241,53242,53243,53245,53246,53247,53249,53250,53251,53253,53254,53255,53256,53257,53258,null,null,null,null,null,null,53259,53260,53261,53262,53263,53264,53266,53267,53268,53269,53270,53271,53273,53274,53275,53276,53277,53278,53279,53280,53281,53282,53283,53284,53285,53286,53287,53288,53289,53290,53291,53292,45149,45180,45181,45184,45188,45196,45197,45199,45201,45208,45209,45210,45212,45215,45216,45217,45218,45224,45225,45227,45228,45229,45230,45231,45233,45235,45236,45237,45240,45244,45252,45253,45255,45256,45257,45264,45265,45268,45272,45280,45285,45320,45321,45323,45324,45328,45330,45331,45336,45337,45339,45340,45341,45347,45348,45349,45352,45356,45364,45365,45367,45368,45369,45376,45377,45380,45384,45392,45393,45396,45397,45400,45404,45408,45432,45433,45436,45440,45442,45448,45449,45451,45453,45458,45459,45460,45464,45468,45480,45516,45520,45524,45532,45533,53294,53295,53296,53297,53298,53299,53302,53303,53305,53306,53307,53309,53310,53311,53312,53313,53314,53315,53318,53320,53322,53323,53324,53325,53326,53327,null,null,null,null,null,null,53329,53330,53331,53333,53334,53335,53337,53338,53339,53340,53341,53342,53343,53345,53346,53347,53348,53349,53350,53351,53352,53353,53354,53355,53358,53359,null,null,null,null,null,null,53361,53362,53363,53365,53366,53367,53368,53369,53370,53371,53374,53375,53376,53378,53379,53380,53381,53382,53383,53384,53385,53386,53387,53388,53389,53390,53391,53392,53393,53394,53395,53396,45535,45544,45545,45548,45552,45561,45563,45565,45572,45573,45576,45579,45580,45588,45589,45591,45593,45600,45620,45628,45656,45660,45664,45672,45673,45684,45685,45692,45700,45701,45705,45712,45713,45716,45720,45721,45722,45728,45729,45731,45733,45734,45738,45740,45744,45748,45768,45769,45772,45776,45778,45784,45785,45787,45789,45794,45796,45797,45798,45800,45803,45804,45805,45806,45807,45811,45812,45813,45815,45816,45817,45818,45819,45823,45824,45825,45828,45832,45840,45841,45843,45844,45845,45852,45908,45909,45910,45912,45915,45916,45918,45919,45924,45925,53397,53398,53399,53400,53401,53402,53403,53404,53405,53406,53407,53408,53409,53410,53411,53414,53415,53417,53418,53419,53421,53422,53423,53424,53425,53426,null,null,null,null,null,null,53427,53430,53432,53434,53435,53436,53437,53438,53439,53442,53443,53445,53446,53447,53450,53451,53452,53453,53454,53455,53458,53462,53463,53464,53465,53466,null,null,null,null,null,null,53467,53470,53471,53473,53474,53475,53477,53478,53479,53480,53481,53482,53483,53486,53490,53491,53492,53493,53494,53495,53497,53498,53499,53500,53501,53502,53503,53504,53505,53506,53507,53508,45927,45929,45931,45934,45936,45937,45940,45944,45952,45953,45955,45956,45957,45964,45968,45972,45984,45985,45992,45996,46020,46021,46024,46027,46028,46030,46032,46036,46037,46039,46041,46043,46045,46048,46052,46056,46076,46096,46104,46108,46112,46120,46121,46123,46132,46160,46161,46164,46168,46176,46177,46179,46181,46188,46208,46216,46237,46244,46248,46252,46261,46263,46265,46272,46276,46280,46288,46293,46300,46301,46304,46307,46308,46310,46316,46317,46319,46321,46328,46356,46357,46360,46363,46364,46372,46373,46375,46376,46377,46378,46384,46385,46388,46392,53509,53510,53511,53512,53513,53514,53515,53516,53518,53519,53520,53521,53522,53523,53524,53525,53526,53527,53528,53529,53530,53531,53532,53533,53534,53535,null,null,null,null,null,null,53536,53537,53538,53539,53540,53541,53542,53543,53544,53545,53546,53547,53548,53549,53550,53551,53554,53555,53557,53558,53559,53561,53563,53564,53565,53566,null,null,null,null,null,null,53567,53570,53574,53575,53576,53577,53578,53579,53582,53583,53585,53586,53587,53589,53590,53591,53592,53593,53594,53595,53598,53600,53602,53603,53604,53605,53606,53607,53609,53610,53611,53613,46400,46401,46403,46404,46405,46411,46412,46413,46416,46420,46428,46429,46431,46432,46433,46496,46497,46500,46504,46506,46507,46512,46513,46515,46516,46517,46523,46524,46525,46528,46532,46540,46541,46543,46544,46545,46552,46572,46608,46609,46612,46616,46629,46636,46644,46664,46692,46696,46748,46749,46752,46756,46763,46764,46769,46804,46832,46836,46840,46848,46849,46853,46888,46889,46892,46895,46896,46904,46905,46907,46916,46920,46924,46932,46933,46944,46948,46952,46960,46961,46963,46965,46972,46973,46976,46980,46988,46989,46991,46992,46993,46994,46998,46999,53614,53615,53616,53617,53618,53619,53620,53621,53622,53623,53624,53625,53626,53627,53629,53630,53631,53632,53633,53634,53635,53637,53638,53639,53641,53642,null,null,null,null,null,null,53643,53644,53645,53646,53647,53648,53649,53650,53651,53652,53653,53654,53655,53656,53657,53658,53659,53660,53661,53662,53663,53666,53667,53669,53670,53671,null,null,null,null,null,null,53673,53674,53675,53676,53677,53678,53679,53682,53684,53686,53687,53688,53689,53691,53693,53694,53695,53697,53698,53699,53700,53701,53702,53703,53704,53705,53706,53707,53708,53709,53710,53711,47000,47001,47004,47008,47016,47017,47019,47020,47021,47028,47029,47032,47047,47049,47084,47085,47088,47092,47100,47101,47103,47104,47105,47111,47112,47113,47116,47120,47128,47129,47131,47133,47140,47141,47144,47148,47156,47157,47159,47160,47161,47168,47172,47185,47187,47196,47197,47200,47204,47212,47213,47215,47217,47224,47228,47245,47272,47280,47284,47288,47296,47297,47299,47301,47308,47312,47316,47325,47327,47329,47336,47337,47340,47344,47352,47353,47355,47357,47364,47384,47392,47420,47421,47424,47428,47436,47439,47441,47448,47449,47452,47456,47464,47465,53712,53713,53714,53715,53716,53717,53718,53719,53721,53722,53723,53724,53725,53726,53727,53728,53729,53730,53731,53732,53733,53734,53735,53736,53737,53738,null,null,null,null,null,null,53739,53740,53741,53742,53743,53744,53745,53746,53747,53749,53750,53751,53753,53754,53755,53756,53757,53758,53759,53760,53761,53762,53763,53764,53765,53766,null,null,null,null,null,null,53768,53770,53771,53772,53773,53774,53775,53777,53778,53779,53780,53781,53782,53783,53784,53785,53786,53787,53788,53789,53790,53791,53792,53793,53794,53795,53796,53797,53798,53799,53800,53801,47467,47469,47476,47477,47480,47484,47492,47493,47495,47497,47498,47501,47502,47532,47533,47536,47540,47548,47549,47551,47553,47560,47561,47564,47566,47567,47568,47569,47570,47576,47577,47579,47581,47582,47585,47587,47588,47589,47592,47596,47604,47605,47607,47608,47609,47610,47616,47617,47624,47637,47672,47673,47676,47680,47682,47688,47689,47691,47693,47694,47699,47700,47701,47704,47708,47716,47717,47719,47720,47721,47728,47729,47732,47736,47747,47748,47749,47751,47756,47784,47785,47787,47788,47792,47794,47800,47801,47803,47805,47812,47816,47832,47833,47868,53802,53803,53806,53807,53809,53810,53811,53813,53814,53815,53816,53817,53818,53819,53822,53824,53826,53827,53828,53829,53830,53831,53833,53834,53835,53836,null,null,null,null,null,null,53837,53838,53839,53840,53841,53842,53843,53844,53845,53846,53847,53848,53849,53850,53851,53853,53854,53855,53856,53857,53858,53859,53861,53862,53863,53864,null,null,null,null,null,null,53865,53866,53867,53868,53869,53870,53871,53872,53873,53874,53875,53876,53877,53878,53879,53880,53881,53882,53883,53884,53885,53886,53887,53890,53891,53893,53894,53895,53897,53898,53899,53900,47872,47876,47885,47887,47889,47896,47900,47904,47913,47915,47924,47925,47926,47928,47931,47932,47933,47934,47940,47941,47943,47945,47949,47951,47952,47956,47960,47969,47971,47980,48008,48012,48016,48036,48040,48044,48052,48055,48064,48068,48072,48080,48083,48120,48121,48124,48127,48128,48130,48136,48137,48139,48140,48141,48143,48145,48148,48149,48150,48151,48152,48155,48156,48157,48158,48159,48164,48165,48167,48169,48173,48176,48177,48180,48184,48192,48193,48195,48196,48197,48201,48204,48205,48208,48221,48260,48261,48264,48267,48268,48270,48276,48277,48279,53901,53902,53903,53906,53907,53908,53910,53911,53912,53913,53914,53915,53917,53918,53919,53921,53922,53923,53925,53926,53927,53928,53929,53930,53931,53933,null,null,null,null,null,null,53934,53935,53936,53938,53939,53940,53941,53942,53943,53946,53947,53949,53950,53953,53955,53956,53957,53958,53959,53962,53964,53965,53966,53967,53968,53969,null,null,null,null,null,null,53970,53971,53973,53974,53975,53977,53978,53979,53981,53982,53983,53984,53985,53986,53987,53990,53991,53992,53993,53994,53995,53996,53997,53998,53999,54002,54003,54005,54006,54007,54009,54010,48281,48282,48288,48289,48292,48295,48296,48304,48305,48307,48308,48309,48316,48317,48320,48324,48333,48335,48336,48337,48341,48344,48348,48372,48373,48374,48376,48380,48388,48389,48391,48393,48400,48404,48420,48428,48448,48456,48457,48460,48464,48472,48473,48484,48488,48512,48513,48516,48519,48520,48521,48522,48528,48529,48531,48533,48537,48538,48540,48548,48560,48568,48596,48597,48600,48604,48617,48624,48628,48632,48640,48643,48645,48652,48653,48656,48660,48668,48669,48671,48708,48709,48712,48716,48718,48724,48725,48727,48729,48730,48731,48736,48737,48740,54011,54012,54013,54014,54015,54018,54020,54022,54023,54024,54025,54026,54027,54031,54033,54034,54035,54037,54039,54040,54041,54042,54043,54046,54050,54051,null,null,null,null,null,null,54052,54054,54055,54058,54059,54061,54062,54063,54065,54066,54067,54068,54069,54070,54071,54074,54078,54079,54080,54081,54082,54083,54086,54087,54088,54089,null,null,null,null,null,null,54090,54091,54092,54093,54094,54095,54096,54097,54098,54099,54100,54101,54102,54103,54104,54105,54106,54107,54108,54109,54110,54111,54112,54113,54114,54115,54116,54117,54118,54119,54120,54121,48744,48746,48752,48753,48755,48756,48757,48763,48764,48765,48768,48772,48780,48781,48783,48784,48785,48792,48793,48808,48848,48849,48852,48855,48856,48864,48867,48868,48869,48876,48897,48904,48905,48920,48921,48923,48924,48925,48960,48961,48964,48968,48976,48977,48981,49044,49072,49093,49100,49101,49104,49108,49116,49119,49121,49212,49233,49240,49244,49248,49256,49257,49296,49297,49300,49304,49312,49313,49315,49317,49324,49325,49327,49328,49331,49332,49333,49334,49340,49341,49343,49344,49345,49349,49352,49353,49356,49360,49368,49369,49371,49372,49373,49380,54122,54123,54124,54125,54126,54127,54128,54129,54130,54131,54132,54133,54134,54135,54136,54137,54138,54139,54142,54143,54145,54146,54147,54149,54150,54151,null,null,null,null,null,null,54152,54153,54154,54155,54158,54162,54163,54164,54165,54166,54167,54170,54171,54173,54174,54175,54177,54178,54179,54180,54181,54182,54183,54186,54188,54190,null,null,null,null,null,null,54191,54192,54193,54194,54195,54197,54198,54199,54201,54202,54203,54205,54206,54207,54208,54209,54210,54211,54214,54215,54218,54219,54220,54221,54222,54223,54225,54226,54227,54228,54229,54230,49381,49384,49388,49396,49397,49399,49401,49408,49412,49416,49424,49429,49436,49437,49438,49439,49440,49443,49444,49446,49447,49452,49453,49455,49456,49457,49462,49464,49465,49468,49472,49480,49481,49483,49484,49485,49492,49493,49496,49500,49508,49509,49511,49512,49513,49520,49524,49528,49541,49548,49549,49550,49552,49556,49558,49564,49565,49567,49569,49573,49576,49577,49580,49584,49597,49604,49608,49612,49620,49623,49624,49632,49636,49640,49648,49649,49651,49660,49661,49664,49668,49676,49677,49679,49681,49688,49689,49692,49695,49696,49704,49705,49707,49709,54231,54233,54234,54235,54236,54237,54238,54239,54240,54242,54244,54245,54246,54247,54248,54249,54250,54251,54254,54255,54257,54258,54259,54261,54262,54263,null,null,null,null,null,null,54264,54265,54266,54267,54270,54272,54274,54275,54276,54277,54278,54279,54281,54282,54283,54284,54285,54286,54287,54288,54289,54290,54291,54292,54293,54294,null,null,null,null,null,null,54295,54296,54297,54298,54299,54300,54302,54303,54304,54305,54306,54307,54308,54309,54310,54311,54312,54313,54314,54315,54316,54317,54318,54319,54320,54321,54322,54323,54324,54325,54326,54327,49711,49713,49714,49716,49736,49744,49745,49748,49752,49760,49765,49772,49773,49776,49780,49788,49789,49791,49793,49800,49801,49808,49816,49819,49821,49828,49829,49832,49836,49837,49844,49845,49847,49849,49884,49885,49888,49891,49892,49899,49900,49901,49903,49905,49910,49912,49913,49915,49916,49920,49928,49929,49932,49933,49939,49940,49941,49944,49948,49956,49957,49960,49961,49989,50024,50025,50028,50032,50034,50040,50041,50044,50045,50052,50056,50060,50112,50136,50137,50140,50143,50144,50146,50152,50153,50157,50164,50165,50168,50184,50192,50212,50220,50224,54328,54329,54330,54331,54332,54333,54334,54335,54337,54338,54339,54341,54342,54343,54344,54345,54346,54347,54348,54349,54350,54351,54352,54353,54354,54355,null,null,null,null,null,null,54356,54357,54358,54359,54360,54361,54362,54363,54365,54366,54367,54369,54370,54371,54373,54374,54375,54376,54377,54378,54379,54380,54382,54384,54385,54386,null,null,null,null,null,null,54387,54388,54389,54390,54391,54394,54395,54397,54398,54401,54403,54404,54405,54406,54407,54410,54412,54414,54415,54416,54417,54418,54419,54421,54422,54423,54424,54425,54426,54427,54428,54429,50228,50236,50237,50248,50276,50277,50280,50284,50292,50293,50297,50304,50324,50332,50360,50364,50409,50416,50417,50420,50424,50426,50431,50432,50433,50444,50448,50452,50460,50472,50473,50476,50480,50488,50489,50491,50493,50500,50501,50504,50505,50506,50508,50509,50510,50515,50516,50517,50519,50520,50521,50525,50526,50528,50529,50532,50536,50544,50545,50547,50548,50549,50556,50557,50560,50564,50567,50572,50573,50575,50577,50581,50583,50584,50588,50592,50601,50612,50613,50616,50617,50619,50620,50621,50622,50628,50629,50630,50631,50632,50633,50634,50636,50638,54430,54431,54432,54433,54434,54435,54436,54437,54438,54439,54440,54442,54443,54444,54445,54446,54447,54448,54449,54450,54451,54452,54453,54454,54455,54456,null,null,null,null,null,null,54457,54458,54459,54460,54461,54462,54463,54464,54465,54466,54467,54468,54469,54470,54471,54472,54473,54474,54475,54477,54478,54479,54481,54482,54483,54485,null,null,null,null,null,null,54486,54487,54488,54489,54490,54491,54493,54494,54496,54497,54498,54499,54500,54501,54502,54503,54505,54506,54507,54509,54510,54511,54513,54514,54515,54516,54517,54518,54519,54521,54522,54524,50640,50641,50644,50648,50656,50657,50659,50661,50668,50669,50670,50672,50676,50678,50679,50684,50685,50686,50687,50688,50689,50693,50694,50695,50696,50700,50704,50712,50713,50715,50716,50724,50725,50728,50732,50733,50734,50736,50739,50740,50741,50743,50745,50747,50752,50753,50756,50760,50768,50769,50771,50772,50773,50780,50781,50784,50796,50799,50801,50808,50809,50812,50816,50824,50825,50827,50829,50836,50837,50840,50844,50852,50853,50855,50857,50864,50865,50868,50872,50873,50874,50880,50881,50883,50885,50892,50893,50896,50900,50908,50909,50912,50913,50920,54526,54527,54528,54529,54530,54531,54533,54534,54535,54537,54538,54539,54541,54542,54543,54544,54545,54546,54547,54550,54552,54553,54554,54555,54556,54557,null,null,null,null,null,null,54558,54559,54560,54561,54562,54563,54564,54565,54566,54567,54568,54569,54570,54571,54572,54573,54574,54575,54576,54577,54578,54579,54580,54581,54582,54583,null,null,null,null,null,null,54584,54585,54586,54587,54590,54591,54593,54594,54595,54597,54598,54599,54600,54601,54602,54603,54606,54608,54610,54611,54612,54613,54614,54615,54618,54619,54621,54622,54623,54625,54626,54627,50921,50924,50928,50936,50937,50941,50948,50949,50952,50956,50964,50965,50967,50969,50976,50977,50980,50984,50992,50993,50995,50997,50999,51004,51005,51008,51012,51018,51020,51021,51023,51025,51026,51027,51028,51029,51030,51031,51032,51036,51040,51048,51051,51060,51061,51064,51068,51069,51070,51075,51076,51077,51079,51080,51081,51082,51086,51088,51089,51092,51094,51095,51096,51098,51104,51105,51107,51108,51109,51110,51116,51117,51120,51124,51132,51133,51135,51136,51137,51144,51145,51148,51150,51152,51160,51165,51172,51176,51180,51200,51201,51204,51208,51210,54628,54630,54631,54634,54636,54638,54639,54640,54641,54642,54643,54646,54647,54649,54650,54651,54653,54654,54655,54656,54657,54658,54659,54662,54666,54667,null,null,null,null,null,null,54668,54669,54670,54671,54673,54674,54675,54676,54677,54678,54679,54680,54681,54682,54683,54684,54685,54686,54687,54688,54689,54690,54691,54692,54694,54695,null,null,null,null,null,null,54696,54697,54698,54699,54700,54701,54702,54703,54704,54705,54706,54707,54708,54709,54710,54711,54712,54713,54714,54715,54716,54717,54718,54719,54720,54721,54722,54723,54724,54725,54726,54727,51216,51217,51219,51221,51222,51228,51229,51232,51236,51244,51245,51247,51249,51256,51260,51264,51272,51273,51276,51277,51284,51312,51313,51316,51320,51322,51328,51329,51331,51333,51334,51335,51339,51340,51341,51348,51357,51359,51361,51368,51388,51389,51396,51400,51404,51412,51413,51415,51417,51424,51425,51428,51445,51452,51453,51456,51460,51461,51462,51468,51469,51471,51473,51480,51500,51508,51536,51537,51540,51544,51552,51553,51555,51564,51568,51572,51580,51592,51593,51596,51600,51608,51609,51611,51613,51648,51649,51652,51655,51656,51658,51664,51665,51667,54730,54731,54733,54734,54735,54737,54739,54740,54741,54742,54743,54746,54748,54750,54751,54752,54753,54754,54755,54758,54759,54761,54762,54763,54765,54766,null,null,null,null,null,null,54767,54768,54769,54770,54771,54774,54776,54778,54779,54780,54781,54782,54783,54786,54787,54789,54790,54791,54793,54794,54795,54796,54797,54798,54799,54802,null,null,null,null,null,null,54806,54807,54808,54809,54810,54811,54813,54814,54815,54817,54818,54819,54821,54822,54823,54824,54825,54826,54827,54828,54830,54831,54832,54833,54834,54835,54836,54837,54838,54839,54842,54843,51669,51670,51673,51674,51676,51677,51680,51682,51684,51687,51692,51693,51695,51696,51697,51704,51705,51708,51712,51720,51721,51723,51724,51725,51732,51736,51753,51788,51789,51792,51796,51804,51805,51807,51808,51809,51816,51837,51844,51864,51900,51901,51904,51908,51916,51917,51919,51921,51923,51928,51929,51936,51948,51956,51976,51984,51988,51992,52000,52001,52033,52040,52041,52044,52048,52056,52057,52061,52068,52088,52089,52124,52152,52180,52196,52199,52201,52236,52237,52240,52244,52252,52253,52257,52258,52263,52264,52265,52268,52270,52272,52280,52281,52283,54845,54846,54847,54849,54850,54851,54852,54854,54855,54858,54860,54862,54863,54864,54866,54867,54870,54871,54873,54874,54875,54877,54878,54879,54880,54881,null,null,null,null,null,null,54882,54883,54884,54885,54886,54888,54890,54891,54892,54893,54894,54895,54898,54899,54901,54902,54903,54904,54905,54906,54907,54908,54909,54910,54911,54912,null,null,null,null,null,null,54913,54914,54916,54918,54919,54920,54921,54922,54923,54926,54927,54929,54930,54931,54933,54934,54935,54936,54937,54938,54939,54940,54942,54944,54946,54947,54948,54949,54950,54951,54953,54954,52284,52285,52286,52292,52293,52296,52300,52308,52309,52311,52312,52313,52320,52324,52326,52328,52336,52341,52376,52377,52380,52384,52392,52393,52395,52396,52397,52404,52405,52408,52412,52420,52421,52423,52425,52432,52436,52452,52460,52464,52481,52488,52489,52492,52496,52504,52505,52507,52509,52516,52520,52524,52537,52572,52576,52580,52588,52589,52591,52593,52600,52616,52628,52629,52632,52636,52644,52645,52647,52649,52656,52676,52684,52688,52712,52716,52720,52728,52729,52731,52733,52740,52744,52748,52756,52761,52768,52769,52772,52776,52784,52785,52787,52789,54955,54957,54958,54959,54961,54962,54963,54964,54965,54966,54967,54968,54970,54972,54973,54974,54975,54976,54977,54978,54979,54982,54983,54985,54986,54987,null,null,null,null,null,null,54989,54990,54991,54992,54994,54995,54997,54998,55000,55002,55003,55004,55005,55006,55007,55009,55010,55011,55013,55014,55015,55017,55018,55019,55020,55021,null,null,null,null,null,null,55022,55023,55025,55026,55027,55028,55030,55031,55032,55033,55034,55035,55038,55039,55041,55042,55043,55045,55046,55047,55048,55049,55050,55051,55052,55053,55054,55055,55056,55058,55059,55060,52824,52825,52828,52831,52832,52833,52840,52841,52843,52845,52852,52853,52856,52860,52868,52869,52871,52873,52880,52881,52884,52888,52896,52897,52899,52900,52901,52908,52909,52929,52964,52965,52968,52971,52972,52980,52981,52983,52984,52985,52992,52993,52996,53000,53008,53009,53011,53013,53020,53024,53028,53036,53037,53039,53040,53041,53048,53076,53077,53080,53084,53092,53093,53095,53097,53104,53105,53108,53112,53120,53125,53132,53153,53160,53168,53188,53216,53217,53220,53224,53232,53233,53235,53237,53244,53248,53252,53265,53272,53293,53300,53301,53304,53308,55061,55062,55063,55066,55067,55069,55070,55071,55073,55074,55075,55076,55077,55078,55079,55082,55084,55086,55087,55088,55089,55090,55091,55094,55095,55097,null,null,null,null,null,null,55098,55099,55101,55102,55103,55104,55105,55106,55107,55109,55110,55112,55114,55115,55116,55117,55118,55119,55122,55123,55125,55130,55131,55132,55133,55134,null,null,null,null,null,null,55135,55138,55140,55142,55143,55144,55146,55147,55149,55150,55151,55153,55154,55155,55157,55158,55159,55160,55161,55162,55163,55166,55167,55168,55170,55171,55172,55173,55174,55175,55178,55179,53316,53317,53319,53321,53328,53332,53336,53344,53356,53357,53360,53364,53372,53373,53377,53412,53413,53416,53420,53428,53429,53431,53433,53440,53441,53444,53448,53449,53456,53457,53459,53460,53461,53468,53469,53472,53476,53484,53485,53487,53488,53489,53496,53517,53552,53553,53556,53560,53562,53568,53569,53571,53572,53573,53580,53581,53584,53588,53596,53597,53599,53601,53608,53612,53628,53636,53640,53664,53665,53668,53672,53680,53681,53683,53685,53690,53692,53696,53720,53748,53752,53767,53769,53776,53804,53805,53808,53812,53820,53821,53823,53825,53832,53852,55181,55182,55183,55185,55186,55187,55188,55189,55190,55191,55194,55196,55198,55199,55200,55201,55202,55203,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,53860,53888,53889,53892,53896,53904,53905,53909,53916,53920,53924,53932,53937,53944,53945,53948,53951,53952,53954,53960,53961,53963,53972,53976,53980,53988,53989,54000,54001,54004,54008,54016,54017,54019,54021,54028,54029,54030,54032,54036,54038,54044,54045,54047,54048,54049,54053,54056,54057,54060,54064,54072,54073,54075,54076,54077,54084,54085,54140,54141,54144,54148,54156,54157,54159,54160,54161,54168,54169,54172,54176,54184,54185,54187,54189,54196,54200,54204,54212,54213,54216,54217,54224,54232,54241,54243,54252,54253,54256,54260,54268,54269,54271,54273,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,54280,54301,54336,54340,54364,54368,54372,54381,54383,54392,54393,54396,54399,54400,54402,54408,54409,54411,54413,54420,54441,54476,54480,54484,54492,54495,54504,54508,54512,54520,54523,54525,54532,54536,54540,54548,54549,54551,54588,54589,54592,54596,54604,54605,54607,54609,54616,54617,54620,54624,54629,54632,54633,54635,54637,54644,54645,54648,54652,54660,54661,54663,54664,54665,54672,54693,54728,54729,54732,54736,54738,54744,54745,54747,54749,54756,54757,54760,54764,54772,54773,54775,54777,54784,54785,54788,54792,54800,54801,54803,54804,54805,54812,54816,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,54820,54829,54840,54841,54844,54848,54853,54856,54857,54859,54861,54865,54868,54869,54872,54876,54887,54889,54896,54897,54900,54915,54917,54924,54925,54928,54932,54941,54943,54945,54952,54956,54960,54969,54971,54980,54981,54984,54988,54993,54996,54999,55001,55008,55012,55016,55024,55029,55036,55037,55040,55044,55057,55064,55065,55068,55072,55080,55081,55083,55085,55092,55093,55096,55100,55108,55111,55113,55120,55121,55124,55126,55127,55128,55129,55136,55137,55139,55141,55145,55148,55152,55156,55164,55165,55169,55176,55177,55180,55184,55192,55193,55195,55197,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20285,20339,20551,20729,21152,21487,21621,21733,22025,23233,23478,26247,26550,26551,26607,27468,29634,30146,31292,33499,33540,34903,34952,35382,36040,36303,36603,36838,39381,21051,21364,21508,24682,24932,27580,29647,33050,35258,35282,38307,20355,21002,22718,22904,23014,24178,24185,25031,25536,26438,26604,26751,28567,30286,30475,30965,31240,31487,31777,32925,33390,33393,35563,38291,20075,21917,26359,28212,30883,31469,33883,35088,34638,38824,21208,22350,22570,23884,24863,25022,25121,25954,26577,27204,28187,29976,30131,30435,30640,32058,37039,37969,37970,40853,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21283,23724,30002,32987,37440,38296,21083,22536,23004,23713,23831,24247,24378,24394,24951,27743,30074,30086,31968,32115,32177,32652,33108,33313,34193,35137,35611,37628,38477,40007,20171,20215,20491,20977,22607,24887,24894,24936,25913,27114,28433,30117,30342,30422,31623,33445,33995,63744,37799,38283,21888,23458,22353,63745,31923,32697,37301,20520,21435,23621,24040,25298,25454,25818,25831,28192,28844,31067,36317,36382,63746,36989,37445,37624,20094,20214,20581,24062,24314,24838,26967,33137,34388,36423,37749,39467,20062,20625,26480,26688,20745,21133,21138,27298,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,30652,37392,40660,21163,24623,36850,20552,25001,25581,25802,26684,27268,28608,33160,35233,38548,22533,29309,29356,29956,32121,32365,32937,35211,35700,36963,40273,25225,27770,28500,32080,32570,35363,20860,24906,31645,35609,37463,37772,20140,20435,20510,20670,20742,21185,21197,21375,22384,22659,24218,24465,24950,25004,25806,25964,26223,26299,26356,26775,28039,28805,28913,29855,29861,29898,30169,30828,30956,31455,31478,32069,32147,32789,32831,33051,33686,35686,36629,36885,37857,38915,38968,39514,39912,20418,21843,22586,22865,23395,23622,24760,25106,26690,26800,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26856,28330,30028,30328,30926,31293,31995,32363,32380,35336,35489,35903,38542,40388,21476,21481,21578,21617,22266,22993,23396,23611,24235,25335,25911,25925,25970,26272,26543,27073,27837,30204,30352,30590,31295,32660,32771,32929,33167,33510,33533,33776,34241,34865,34996,35493,63747,36764,37678,38599,39015,39640,40723,21741,26011,26354,26767,31296,35895,40288,22256,22372,23825,26118,26801,26829,28414,29736,34974,39908,27752,63748,39592,20379,20844,20849,21151,23380,24037,24656,24685,25329,25511,25915,29657,31354,34467,36002,38799,20018,23521,25096,26524,29916,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31185,33747,35463,35506,36328,36942,37707,38982,24275,27112,34303,37101,63749,20896,23448,23532,24931,26874,27454,28748,29743,29912,31649,32592,33733,35264,36011,38364,39208,21038,24669,25324,36866,20362,20809,21281,22745,24291,26336,27960,28826,29378,29654,31568,33009,37979,21350,25499,32619,20054,20608,22602,22750,24618,24871,25296,27088,39745,23439,32024,32945,36703,20132,20689,21676,21932,23308,23968,24039,25898,25934,26657,27211,29409,30350,30703,32094,32761,33184,34126,34527,36611,36686,37066,39171,39509,39851,19992,20037,20061,20167,20465,20855,21246,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21312,21475,21477,21646,22036,22389,22434,23495,23943,24272,25084,25304,25937,26552,26601,27083,27472,27590,27628,27714,28317,28792,29399,29590,29699,30655,30697,31350,32127,32777,33276,33285,33290,33503,34914,35635,36092,36544,36881,37041,37476,37558,39378,39493,40169,40407,40860,22283,23616,33738,38816,38827,40628,21531,31384,32676,35033,36557,37089,22528,23624,25496,31391,23470,24339,31353,31406,33422,36524,20518,21048,21240,21367,22280,25331,25458,27402,28099,30519,21413,29527,34152,36470,38357,26426,27331,28528,35437,36556,39243,63750,26231,27512,36020,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,39740,63751,21483,22317,22862,25542,27131,29674,30789,31418,31429,31998,33909,35215,36211,36917,38312,21243,22343,30023,31584,33740,37406,63752,27224,20811,21067,21127,25119,26840,26997,38553,20677,21156,21220,25027,26020,26681,27135,29822,31563,33465,33771,35250,35641,36817,39241,63753,20170,22935,25810,26129,27278,29748,31105,31165,33449,34942,34943,35167,63754,37670,20235,21450,24613,25201,27762,32026,32102,20120,20834,30684,32943,20225,20238,20854,20864,21980,22120,22331,22522,22524,22804,22855,22931,23492,23696,23822,24049,24190,24524,25216,26071,26083,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26398,26399,26462,26827,26820,27231,27450,27683,27773,27778,28103,29592,29734,29738,29826,29859,30072,30079,30849,30959,31041,31047,31048,31098,31637,32000,32186,32648,32774,32813,32908,35352,35663,35912,36215,37665,37668,39138,39249,39438,39439,39525,40594,32202,20342,21513,25326,26708,37329,21931,20794,63755,63756,23068,25062,63757,25295,25343,63758,63759,63760,63761,63762,63763,37027,63764,63765,63766,63767,63768,35582,63769,63770,63771,63772,26262,63773,29014,63774,63775,38627,63776,25423,25466,21335,63777,26511,26976,28275,63778,30007,63779,63780,63781,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32013,63782,63783,34930,22218,23064,63784,63785,63786,63787,63788,20035,63789,20839,22856,26608,32784,63790,22899,24180,25754,31178,24565,24684,25288,25467,23527,23511,21162,63791,22900,24361,24594,63792,63793,63794,29785,63795,63796,63797,63798,63799,63800,39377,63801,63802,63803,63804,63805,63806,63807,63808,63809,63810,63811,28611,63812,63813,33215,36786,24817,63814,63815,33126,63816,63817,23615,63818,63819,63820,63821,63822,63823,63824,63825,23273,35365,26491,32016,63826,63827,63828,63829,63830,63831,33021,63832,63833,23612,27877,21311,28346,22810,33590,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20025,20150,20294,21934,22296,22727,24406,26039,26086,27264,27573,28237,30701,31471,31774,32222,34507,34962,37170,37723,25787,28606,29562,30136,36948,21846,22349,25018,25812,26311,28129,28251,28525,28601,30192,32835,33213,34113,35203,35527,35674,37663,27795,30035,31572,36367,36957,21776,22530,22616,24162,25095,25758,26848,30070,31958,34739,40680,20195,22408,22382,22823,23565,23729,24118,24453,25140,25825,29619,33274,34955,36024,38538,40667,23429,24503,24755,20498,20992,21040,22294,22581,22615,23566,23648,23798,23947,24230,24466,24764,25361,25481,25623,26691,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26873,27330,28120,28193,28372,28644,29182,30428,30585,31153,31291,33796,35241,36077,36339,36424,36867,36884,36947,37117,37709,38518,38876,27602,28678,29272,29346,29544,30563,31167,31716,32411,35712,22697,24775,25958,26109,26302,27788,28958,29129,35930,38931,20077,31361,20189,20908,20941,21205,21516,24999,26481,26704,26847,27934,28540,30140,30643,31461,33012,33891,37509,20828,26007,26460,26515,30168,31431,33651,63834,35910,36887,38957,23663,33216,33434,36929,36975,37389,24471,23965,27225,29128,30331,31561,34276,35588,37159,39472,21895,25078,63835,30313,32645,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,34367,34746,35064,37007,63836,27931,28889,29662,32097,33853,63837,37226,39409,63838,20098,21365,27396,27410,28734,29211,34349,40478,21068,36771,23888,25829,25900,27414,28651,31811,32412,34253,35172,35261,25289,33240,34847,24266,26391,28010,29436,29701,29807,34690,37086,20358,23821,24480,33802,20919,25504,30053,20142,20486,20841,20937,26753,27153,31918,31921,31975,33391,35538,36635,37327,20406,20791,21237,21570,24300,24942,25150,26053,27354,28670,31018,34268,34851,38317,39522,39530,40599,40654,21147,26310,27511,28701,31019,36706,38722,24976,25088,25891,28451,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,29001,29833,32244,32879,34030,36646,36899,37706,20925,21015,21155,27916,28872,35010,24265,25986,27566,28610,31806,29557,20196,20278,22265,63839,23738,23994,24604,29618,31533,32666,32718,32838,36894,37428,38646,38728,38936,40801,20363,28583,31150,37300,38583,21214,63840,25736,25796,27347,28510,28696,29200,30439,32769,34310,34396,36335,36613,38706,39791,40442,40565,30860,31103,32160,33737,37636,40575,40595,35542,22751,24324,26407,28711,29903,31840,32894,20769,28712,29282,30922,36034,36058,36084,38647,20102,20698,23534,24278,26009,29134,30274,30637,32842,34044,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36988,39719,40845,22744,23105,23650,27155,28122,28431,30267,32047,32311,34078,35128,37860,38475,21129,26066,26611,27060,27969,28316,28687,29705,29792,30041,30244,30827,35628,39006,20845,25134,38520,20374,20523,23833,28138,32184,36650,24459,24900,26647,63841,38534,21202,32907,20956,20940,26974,31260,32190,33777,38517,20442,21033,21400,21519,21774,23653,24743,26446,26792,28012,29313,29432,29702,29827,63842,30178,31852,32633,32696,33673,35023,35041,37324,37328,38626,39881,21533,28542,29136,29848,34298,36522,38563,40023,40607,26519,28107,29747,33256,38678,30764,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31435,31520,31890,25705,29802,30194,30908,30952,39340,39764,40635,23518,24149,28448,33180,33707,37000,19975,21325,23081,24018,24398,24930,25405,26217,26364,28415,28459,28771,30622,33836,34067,34875,36627,39237,39995,21788,25273,26411,27819,33545,35178,38778,20129,22916,24536,24537,26395,32178,32596,33426,33579,33725,36638,37017,22475,22969,23186,23504,26151,26522,26757,27599,29028,32629,36023,36067,36993,39749,33032,35978,38476,39488,40613,23391,27667,29467,30450,30431,33804,20906,35219,20813,20885,21193,26825,27796,30468,30496,32191,32236,38754,40629,28357,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,34065,20901,21517,21629,26126,26269,26919,28319,30399,30609,33559,33986,34719,37225,37528,40180,34946,20398,20882,21215,22982,24125,24917,25720,25721,26286,26576,27169,27597,27611,29279,29281,29761,30520,30683,32791,33468,33541,35584,35624,35980,26408,27792,29287,30446,30566,31302,40361,27519,27794,22818,26406,33945,21359,22675,22937,24287,25551,26164,26483,28218,29483,31447,33495,37672,21209,24043,25006,25035,25098,25287,25771,26080,26969,27494,27595,28961,29687,30045,32326,33310,33538,34154,35491,36031,38695,40289,22696,40664,20497,21006,21563,21839,25991,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,27766,32010,32011,32862,34442,38272,38639,21247,27797,29289,21619,23194,23614,23883,24396,24494,26410,26806,26979,28220,28228,30473,31859,32654,34183,35598,36855,38753,40692,23735,24758,24845,25003,25935,26107,26108,27665,27887,29599,29641,32225,38292,23494,34588,35600,21085,21338,25293,25615,25778,26420,27192,27850,29632,29854,31636,31893,32283,33162,33334,34180,36843,38649,39361,20276,21322,21453,21467,25292,25644,25856,26001,27075,27886,28504,29677,30036,30242,30436,30460,30928,30971,31020,32070,33324,34784,36820,38930,39151,21187,25300,25765,28196,28497,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,30332,36299,37297,37474,39662,39747,20515,20621,22346,22952,23592,24135,24439,25151,25918,26041,26049,26121,26507,27036,28354,30917,32033,32938,33152,33323,33459,33953,34444,35370,35607,37030,38450,40848,20493,20467,63843,22521,24472,25308,25490,26479,28227,28953,30403,32972,32986,35060,35061,35097,36064,36649,37197,38506,20271,20336,24091,26575,26658,30333,30334,39748,24161,27146,29033,29140,30058,63844,32321,34115,34281,39132,20240,31567,32624,38309,20961,24070,26805,27710,27726,27867,29359,31684,33539,27861,29754,20731,21128,22721,25816,27287,29863,30294,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,30887,34327,38370,38713,63845,21342,24321,35722,36776,36783,37002,21029,30629,40009,40712,19993,20482,20853,23643,24183,26142,26170,26564,26821,28851,29953,30149,31177,31453,36647,39200,39432,20445,22561,22577,23542,26222,27493,27921,28282,28541,29668,29995,33769,35036,35091,35676,36628,20239,20693,21264,21340,23443,24489,26381,31119,33145,33583,34068,35079,35206,36665,36667,39333,39954,26412,20086,20472,22857,23553,23791,23792,25447,26834,28925,29090,29739,32299,34028,34562,36898,37586,40179,19981,20184,20463,20613,21078,21103,21542,21648,22496,22827,23142,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,23386,23413,23500,24220,63846,25206,25975,26023,28014,28325,29238,31526,31807,32566,33104,33105,33178,33344,33433,33705,35331,36000,36070,36091,36212,36282,37096,37340,38428,38468,39385,40167,21271,20998,21545,22132,22707,22868,22894,24575,24996,25198,26128,27774,28954,30406,31881,31966,32027,33452,36033,38640,63847,20315,24343,24447,25282,23849,26379,26842,30844,32323,40300,19989,20633,21269,21290,21329,22915,23138,24199,24754,24970,25161,25209,26000,26503,27047,27604,27606,27607,27608,27832,63848,29749,30202,30738,30865,31189,31192,31875,32203,32737,32933,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,33086,33218,33778,34586,35048,35513,35692,36027,37145,38750,39131,40763,22188,23338,24428,25996,27315,27567,27996,28657,28693,29277,29613,36007,36051,38971,24977,27703,32856,39425,20045,20107,20123,20181,20282,20284,20351,20447,20735,21490,21496,21766,21987,22235,22763,22882,23057,23531,23546,23556,24051,24107,24473,24605,25448,26012,26031,26614,26619,26797,27515,27801,27863,28195,28681,29509,30722,31038,31040,31072,31169,31721,32023,32114,32902,33293,33678,34001,34503,35039,35408,35422,35613,36060,36198,36781,37034,39164,39391,40605,21066,63849,26388,63850,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20632,21034,23665,25955,27733,29642,29987,30109,31639,33948,37240,38704,20087,25746,27578,29022,34217,19977,63851,26441,26862,28183,33439,34072,34923,25591,28545,37394,39087,19978,20663,20687,20767,21830,21930,22039,23360,23577,23776,24120,24202,24224,24258,24819,26705,27233,28248,29245,29248,29376,30456,31077,31665,32724,35059,35316,35443,35937,36062,38684,22622,29885,36093,21959,63852,31329,32034,33394,29298,29983,29989,63853,31513,22661,22779,23996,24207,24246,24464,24661,25234,25471,25933,26257,26329,26360,26646,26866,29312,29790,31598,32110,32214,32626,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32997,33298,34223,35199,35475,36893,37604,40653,40736,22805,22893,24109,24796,26132,26227,26512,27728,28101,28511,30707,30889,33990,37323,37675,20185,20682,20808,21892,23307,23459,25159,25982,26059,28210,29053,29697,29764,29831,29887,30316,31146,32218,32341,32680,33146,33203,33337,34330,34796,35445,36323,36984,37521,37925,39245,39854,21352,23633,26964,27844,27945,28203,33292,34203,35131,35373,35498,38634,40807,21089,26297,27570,32406,34814,36109,38275,38493,25885,28041,29166,63854,22478,22995,23468,24615,24826,25104,26143,26207,29481,29689,30427,30465,31596,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32854,32882,33125,35488,37266,19990,21218,27506,27927,31237,31545,32048,63855,36016,21484,22063,22609,23477,23567,23569,24034,25152,25475,25620,26157,26803,27836,28040,28335,28703,28836,29138,29990,30095,30094,30233,31505,31712,31787,32032,32057,34092,34157,34311,35380,36877,36961,37045,37559,38902,39479,20439,23660,26463,28049,31903,32396,35606,36118,36895,23403,24061,25613,33984,36956,39137,29575,23435,24730,26494,28126,35359,35494,36865,38924,21047,63856,28753,30862,37782,34928,37335,20462,21463,22013,22234,22402,22781,23234,23432,23723,23744,24101,24833,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,25101,25163,25480,25628,25910,25976,27193,27530,27700,27929,28465,29159,29417,29560,29703,29874,30246,30561,31168,31319,31466,31929,32143,32172,32353,32670,33065,33585,33936,34010,34282,34966,35504,35728,36664,36930,36995,37228,37526,37561,38539,38567,38568,38614,38656,38920,39318,39635,39706,21460,22654,22809,23408,23487,28113,28506,29087,29729,29881,32901,33789,24033,24455,24490,24642,26092,26642,26991,27219,27529,27957,28147,29667,30462,30636,31565,32020,33059,33308,33600,34036,34147,35426,35524,37255,37662,38918,39348,25100,34899,36848,37477,23815,23847,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,23913,29791,33181,34664,28629,25342,32722,35126,35186,19998,20056,20711,21213,21319,25215,26119,32361,34821,38494,20365,21273,22070,22987,23204,23608,23630,23629,24066,24337,24643,26045,26159,26178,26558,26612,29468,30690,31034,32709,33940,33997,35222,35430,35433,35553,35925,35962,22516,23508,24335,24687,25325,26893,27542,28252,29060,31698,34645,35672,36606,39135,39166,20280,20353,20449,21627,23072,23480,24892,26032,26216,29180,30003,31070,32051,33102,33251,33688,34218,34254,34563,35338,36523,36763,63857,36805,22833,23460,23526,24713,23529,23563,24515,27777,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63858,28145,28683,29978,33455,35574,20160,21313,63859,38617,27663,20126,20420,20818,21854,23077,23784,25105,29273,33469,33706,34558,34905,35357,38463,38597,39187,40201,40285,22538,23731,23997,24132,24801,24853,25569,27138,28197,37122,37716,38990,39952,40823,23433,23736,25353,26191,26696,30524,38593,38797,38996,39839,26017,35585,36555,38332,21813,23721,24022,24245,26263,30284,33780,38343,22739,25276,29390,40232,20208,22830,24591,26171,27523,31207,40230,21395,21696,22467,23830,24859,26326,28079,30861,33406,38552,38724,21380,25212,25494,28082,32266,33099,38989,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,27387,32588,40367,40474,20063,20539,20918,22812,24825,25590,26928,29242,32822,63860,37326,24369,63861,63862,32004,33509,33903,33979,34277,36493,63863,20335,63864,63865,22756,23363,24665,25562,25880,25965,26264,63866,26954,27171,27915,28673,29036,30162,30221,31155,31344,63867,32650,63868,35140,63869,35731,37312,38525,63870,39178,22276,24481,26044,28417,30208,31142,35486,39341,39770,40812,20740,25014,25233,27277,33222,20547,22576,24422,28937,35328,35578,23420,34326,20474,20796,22196,22852,25513,28153,23978,26989,20870,20104,20313,63871,63872,63873,22914,63874,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63875,27487,27741,63876,29877,30998,63877,33287,33349,33593,36671,36701,63878,39192,63879,63880,63881,20134,63882,22495,24441,26131,63883,63884,30123,32377,35695,63885,36870,39515,22181,22567,23032,23071,23476,63886,24310,63887,63888,25424,25403,63889,26941,27783,27839,28046,28051,28149,28436,63890,28895,28982,29017,63891,29123,29141,63892,30799,30831,63893,31605,32227,63894,32303,63895,34893,36575,63896,63897,63898,37467,63899,40182,63900,63901,63902,24709,28037,63903,29105,63904,63905,38321,21421,63906,63907,63908,26579,63909,28814,28976,29744,33398,33490,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63910,38331,39653,40573,26308,63911,29121,33865,63912,63913,22603,63914,63915,23992,24433,63916,26144,26254,27001,27054,27704,27891,28214,28481,28634,28699,28719,29008,29151,29552,63917,29787,63918,29908,30408,31310,32403,63919,63920,33521,35424,36814,63921,37704,63922,38681,63923,63924,20034,20522,63925,21000,21473,26355,27757,28618,29450,30591,31330,33454,34269,34306,63926,35028,35427,35709,35947,63927,37555,63928,38675,38928,20116,20237,20425,20658,21320,21566,21555,21978,22626,22714,22887,23067,23524,24735,63929,25034,25942,26111,26212,26791,27738,28595,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,28879,29100,29522,31613,34568,35492,39986,40711,23627,27779,29508,29577,37434,28331,29797,30239,31337,32277,34314,20800,22725,25793,29934,29973,30320,32705,37013,38605,39252,28198,29926,31401,31402,33253,34521,34680,35355,23113,23436,23451,26785,26880,28003,29609,29715,29740,30871,32233,32747,33048,33109,33694,35916,38446,38929,26352,24448,26106,26505,27754,29579,20525,23043,27498,30702,22806,23916,24013,29477,30031,63930,63931,20709,20985,22575,22829,22934,23002,23525,63932,63933,23970,25303,25622,25747,25854,63934,26332,63935,27208,63936,29183,29796,63937,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31368,31407,32327,32350,32768,33136,63938,34799,35201,35616,36953,63939,36992,39250,24958,27442,28020,32287,35109,36785,20433,20653,20887,21191,22471,22665,23481,24248,24898,27029,28044,28263,28342,29076,29794,29992,29996,32883,33592,33993,36362,37780,37854,63940,20110,20305,20598,20778,21448,21451,21491,23431,23507,23588,24858,24962,26100,29275,29591,29760,30402,31056,31121,31161,32006,32701,33419,34261,34398,36802,36935,37109,37354,38533,38632,38633,21206,24423,26093,26161,26671,29020,31286,37057,38922,20113,63941,27218,27550,28560,29065,32792,33464,34131,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36939,38549,38642,38907,34074,39729,20112,29066,38596,20803,21407,21729,22291,22290,22435,23195,23236,23491,24616,24895,25588,27781,27961,28274,28304,29232,29503,29783,33489,34945,36677,36960,63942,38498,39000,40219,26376,36234,37470,20301,20553,20702,21361,22285,22996,23041,23561,24944,26256,28205,29234,29771,32239,32963,33806,33894,34111,34655,34907,35096,35586,36949,38859,39759,20083,20369,20754,20842,63943,21807,21929,23418,23461,24188,24189,24254,24736,24799,24840,24841,25540,25912,26377,63944,26580,26586,63945,26977,26978,27833,27943,63946,28216,63947,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,28641,29494,29495,63948,29788,30001,63949,30290,63950,63951,32173,33278,33848,35029,35480,35547,35565,36400,36418,36938,36926,36986,37193,37321,37742,63952,63953,22537,63954,27603,32905,32946,63955,63956,20801,22891,23609,63957,63958,28516,29607,32996,36103,63959,37399,38287,63960,63961,63962,63963,32895,25102,28700,32104,34701,63964,22432,24681,24903,27575,35518,37504,38577,20057,21535,28139,34093,38512,38899,39150,25558,27875,37009,20957,25033,33210,40441,20381,20506,20736,23452,24847,25087,25836,26885,27589,30097,30691,32681,33380,34191,34811,34915,35516,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,35696,37291,20108,20197,20234,63965,63966,22839,23016,63967,24050,24347,24411,24609,63968,63969,63970,63971,29246,29669,63972,30064,30157,63973,31227,63974,32780,32819,32900,33505,33617,63975,63976,36029,36019,36999,63977,63978,39156,39180,63979,63980,28727,30410,32714,32716,32764,35610,20154,20161,20995,21360,63981,21693,22240,23035,23493,24341,24525,28270,63982,63983,32106,33589,63984,34451,35469,63985,38765,38775,63986,63987,19968,20314,20350,22777,26085,28322,36920,37808,39353,20219,22764,22922,23001,24641,63988,63989,31252,63990,33615,36035,20837,21316,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,63991,63992,63993,20173,21097,23381,33471,20180,21050,21672,22985,23039,23376,23383,23388,24675,24904,28363,28825,29038,29574,29943,30133,30913,32043,32773,33258,33576,34071,34249,35566,36039,38604,20316,21242,22204,26027,26152,28796,28856,29237,32189,33421,37196,38592,40306,23409,26855,27544,28538,30430,23697,26283,28507,31668,31786,34870,38620,19976,20183,21280,22580,22715,22767,22892,23559,24115,24196,24373,25484,26290,26454,27167,27299,27404,28479,29254,63994,29520,29835,31456,31911,33144,33247,33255,33674,33900,34083,34196,34255,35037,36115,37292,38263,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,38556,20877,21705,22312,23472,25165,26448,26685,26771,28221,28371,28797,32289,35009,36001,36617,40779,40782,29229,31631,35533,37658,20295,20302,20786,21632,22992,24213,25269,26485,26990,27159,27822,28186,29401,29482,30141,31672,32053,33511,33785,33879,34295,35419,36015,36487,36889,37048,38606,40799,21219,21514,23265,23490,25688,25973,28404,29380,63995,30340,31309,31515,31821,32318,32735,33659,35627,36042,36196,36321,36447,36842,36857,36969,37841,20291,20346,20659,20840,20856,21069,21098,22625,22652,22880,23560,23637,24283,24731,25136,26643,27583,27656,28593,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,29006,29728,30000,30008,30033,30322,31564,31627,31661,31686,32399,35438,36670,36681,37439,37523,37666,37931,38651,39002,39019,39198,20999,25130,25240,27993,30308,31434,31680,32118,21344,23742,24215,28472,28857,31896,38673,39822,40670,25509,25722,34678,19969,20117,20141,20572,20597,21576,22979,23450,24128,24237,24311,24449,24773,25402,25919,25972,26060,26230,26232,26622,26984,27273,27491,27712,28096,28136,28191,28254,28702,28833,29582,29693,30010,30555,30855,31118,31243,31357,31934,32142,33351,35330,35562,35998,37165,37194,37336,37478,37580,37664,38662,38742,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,38748,38914,40718,21046,21137,21884,22564,24093,24351,24716,25552,26799,28639,31085,31532,33229,34234,35069,35576,36420,37261,38500,38555,38717,38988,40778,20430,20806,20939,21161,22066,24340,24427,25514,25805,26089,26177,26362,26361,26397,26781,26839,27133,28437,28526,29031,29157,29226,29866,30522,31062,31066,31199,31264,31381,31895,31967,32068,32368,32903,34299,34468,35412,35519,36249,36481,36896,36973,37347,38459,38613,40165,26063,31751,36275,37827,23384,23562,21330,25305,29469,20519,23447,24478,24752,24939,26837,28121,29742,31278,32066,32156,32305,33131,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36394,36405,37758,37912,20304,22352,24038,24231,25387,32618,20027,20303,20367,20570,23005,32964,21610,21608,22014,22863,23449,24030,24282,26205,26417,26609,26666,27880,27954,28234,28557,28855,29664,30087,31820,32002,32044,32162,33311,34523,35387,35461,36208,36490,36659,36913,37198,37202,37956,39376,31481,31909,20426,20737,20934,22472,23535,23803,26201,27197,27994,28310,28652,28940,30063,31459,34850,36897,36981,38603,39423,33537,20013,20210,34886,37325,21373,27355,26987,27713,33914,22686,24974,26366,25327,28893,29969,30151,32338,33976,35657,36104,20043,21482,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21675,22320,22336,24535,25345,25351,25711,25903,26088,26234,26525,26547,27490,27744,27802,28460,30693,30757,31049,31063,32025,32930,33026,33267,33437,33463,34584,35468,63996,36100,36286,36978,30452,31257,31287,32340,32887,21767,21972,22645,25391,25634,26185,26187,26733,27035,27524,27941,28337,29645,29800,29857,30043,30137,30433,30494,30603,31206,32265,32285,33275,34095,34967,35386,36049,36587,36784,36914,37805,38499,38515,38663,20356,21489,23018,23241,24089,26702,29894,30142,31209,31378,33187,34541,36074,36300,36845,26015,26389,63997,22519,28503,32221,36655,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,37878,38598,24501,25074,28548,19988,20376,20511,21449,21983,23919,24046,27425,27492,30923,31642,63998,36425,36554,36974,25417,25662,30528,31364,37679,38015,40810,25776,28591,29158,29864,29914,31428,31762,32386,31922,32408,35738,36106,38013,39184,39244,21049,23519,25830,26413,32046,20717,21443,22649,24920,24921,25082,26028,31449,35730,35734,20489,20513,21109,21809,23100,24288,24432,24884,25950,26124,26166,26274,27085,28356,28466,29462,30241,31379,33081,33369,33750,33980,20661,22512,23488,23528,24425,25505,30758,32181,33756,34081,37319,37365,20874,26613,31574,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36012,20932,22971,24765,34389,20508,63999,21076,23610,24957,25114,25299,25842,26021,28364,30240,33034,36448,38495,38587,20191,21315,21912,22825,24029,25797,27849,28154,29588,31359,33307,34214,36068,36368,36983,37351,38369,38433,38854,20984,21746,21894,24505,25764,28552,32180,36639,36685,37941,20681,23574,27838,28155,29979,30651,31805,31844,35449,35522,22558,22974,24086,25463,29266,30090,30571,35548,36028,36626,24307,26228,28152,32893,33729,35531,38737,39894,64000,21059,26367,28053,28399,32224,35558,36910,36958,39636,21021,21119,21736,24980,25220,25307,26786,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,26898,26970,27189,28818,28966,30813,30977,30990,31186,31245,32918,33400,33493,33609,34121,35970,36229,37218,37259,37294,20419,22225,29165,30679,34560,35320,23544,24534,26449,37032,21474,22618,23541,24740,24961,25696,32317,32880,34085,37507,25774,20652,23828,26368,22684,25277,25512,26894,27000,27166,28267,30394,31179,33467,33833,35535,36264,36861,37138,37195,37276,37648,37656,37786,38619,39478,39949,19985,30044,31069,31482,31569,31689,32302,33988,36441,36468,36600,36880,26149,26943,29763,20986,26414,40668,20805,24544,27798,34802,34909,34935,24756,33205,33795,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,36101,21462,21561,22068,23094,23601,28810,32736,32858,33030,33261,36259,37257,39519,40434,20596,20164,21408,24827,28204,23652,20360,20516,21988,23769,24159,24677,26772,27835,28100,29118,30164,30196,30305,31258,31305,32199,32251,32622,33268,34473,36636,38601,39347,40786,21063,21189,39149,35242,19971,26578,28422,20405,23522,26517,27784,28024,29723,30759,37341,37756,34756,31204,31281,24555,20182,21668,21822,22702,22949,24816,25171,25302,26422,26965,33333,38464,39345,39389,20524,21331,21828,22396,64001,25176,64002,25826,26219,26589,28609,28655,29730,29752,35351,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,37944,21585,22022,22374,24392,24986,27470,28760,28845,32187,35477,22890,33067,25506,30472,32829,36010,22612,25645,27067,23445,24081,28271,64003,34153,20812,21488,22826,24608,24907,27526,27760,27888,31518,32974,33492,36294,37040,39089,64004,25799,28580,25745,25860,20814,21520,22303,35342,24927,26742,64005,30171,31570,32113,36890,22534,27084,33151,35114,36864,38969,20600,22871,22956,25237,36879,39722,24925,29305,38358,22369,23110,24052,25226,25773,25850,26487,27874,27966,29228,29750,30772,32631,33453,36315,38935,21028,22338,26495,29256,29923,36009,36774,37393,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,38442,20843,21485,25420,20329,21764,24726,25943,27803,28031,29260,29437,31255,35207,35997,24429,28558,28921,33192,24846,20415,20559,25153,29255,31687,32232,32745,36941,38829,39449,36022,22378,24179,26544,33805,35413,21536,23318,24163,24290,24330,25987,32954,34109,38281,38491,20296,21253,21261,21263,21638,21754,22275,24067,24598,25243,25265,25429,64006,27873,28006,30129,30770,32990,33071,33502,33889,33970,34957,35090,36875,37610,39165,39825,24133,26292,26333,28689,29190,64007,20469,21117,24426,24915,26451,27161,28418,29922,31080,34920,35961,39111,39108,39491,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,21697,31263,26963,35575,35914,39080,39342,24444,25259,30130,30382,34987,36991,38466,21305,24380,24517,27852,29644,30050,30091,31558,33534,39325,20047,36924,19979,20309,21414,22799,24264,26160,27827,29781,33655,34662,36032,36944,38686,39957,22737,23416,34384,35604,40372,23506,24680,24717,26097,27735,28450,28579,28698,32597,32752,38289,38290,38480,38867,21106,36676,20989,21547,21688,21859,21898,27323,28085,32216,33382,37532,38519,40569,21512,21704,30418,34532,38308,38356,38492,20130,20233,23022,23270,24055,24658,25239,26477,26689,27782,28207,32568,32923,33322,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,64008,64009,38917,20133,20565,21683,22419,22874,23401,23475,25032,26999,28023,28707,34809,35299,35442,35559,36994,39405,39608,21182,26680,20502,24184,26447,33607,34892,20139,21521,22190,29670,37141,38911,39177,39255,39321,22099,22687,34395,35377,25010,27382,29563,36562,27463,38570,39511,22869,29184,36203,38761,20436,23796,24358,25080,26203,27883,28843,29572,29625,29694,30505,30541,32067,32098,32291,33335,34898,64010,36066,37449,39023,23377,31348,34880,38913,23244,20448,21332,22846,23805,25406,28025,29433,33029,33031,33698,37583,38960,20136,20804,21009,22411,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,24418,27842,28366,28677,28752,28847,29074,29673,29801,33610,34722,34913,36872,37026,37795,39336,20846,24407,24800,24935,26291,34137,36426,37295,38795,20046,20114,21628,22741,22778,22909,23733,24359,25142,25160,26122,26215,27627,28009,28111,28246,28408,28564,28640,28649,28765,29392,29733,29786,29920,30355,31068,31946,32286,32993,33446,33899,33983,34382,34399,34676,35703,35946,37804,38912,39013,24785,25110,37239,23130,26127,28151,28222,29759,39746,24573,24794,31503,21700,24344,27742,27859,27946,28888,32005,34425,35340,40251,21270,21644,23301,27194,28779,30069,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,31117,31166,33457,33775,35441,35649,36008,38772,64011,25844,25899,30906,30907,31339,20024,21914,22864,23462,24187,24739,25563,27489,26213,26707,28185,29029,29872,32008,36996,39529,39973,27963,28369,29502,35905,38346,20976,24140,24488,24653,24822,24880,24908,26179,26180,27045,27841,28255,28361,28514,29004,29852,30343,31681,31783,33618,34647,36945,38541,40643,21295,22238,24315,24458,24674,24724,25079,26214,26371,27292,28142,28590,28784,29546,32362,33214,33588,34516,35496,36036,21123,29554,23446,27243,37892,21742,22150,23389,25928,25989,26313,26783,28045,28102,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,29243,32948,37237,39501,20399,20505,21402,21518,21564,21897,21957,24127,24460,26429,29030,29661,36869,21211,21235,22628,22734,28932,29071,29179,34224,35347,26248,34216,21927,26244,29002,33841,21321,21913,27585,24409,24509,25582,26249,28999,35569,36637,40638,20241,25658,28875,30054,34407,24676,35662,40440,20807,20982,21256,27958,33016,40657,26133,27427,28824,30165,21507,23673,32007,35350,27424,27453,27462,21560,24688,27965,32725,33288,20694,20958,21916,22123,22221,23020,23305,24076,24985,24984,25137,26206,26342,29081,29113,29114,29351,31143,31232,32690,35440,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null], + 'gb18030': [19970,19972,19973,19974,19983,19986,19991,19999,20000,20001,20003,20006,20009,20014,20015,20017,20019,20021,20023,20028,20032,20033,20034,20036,20038,20042,20049,20053,20055,20058,20059,20066,20067,20068,20069,20071,20072,20074,20075,20076,20077,20078,20079,20082,20084,20085,20086,20087,20088,20089,20090,20091,20092,20093,20095,20096,20097,20098,20099,20100,20101,20103,20106,20112,20118,20119,20121,20124,20125,20126,20131,20138,20143,20144,20145,20148,20150,20151,20152,20153,20156,20157,20158,20168,20172,20175,20176,20178,20186,20187,20188,20192,20194,20198,20199,20201,20205,20206,20207,20209,20212,20216,20217,20218,20220,20222,20224,20226,20227,20228,20229,20230,20231,20232,20235,20236,20242,20243,20244,20245,20246,20252,20253,20257,20259,20264,20265,20268,20269,20270,20273,20275,20277,20279,20281,20283,20286,20287,20288,20289,20290,20292,20293,20295,20296,20297,20298,20299,20300,20306,20308,20310,20321,20322,20326,20328,20330,20331,20333,20334,20337,20338,20341,20343,20344,20345,20346,20349,20352,20353,20354,20357,20358,20359,20362,20364,20366,20368,20370,20371,20373,20374,20376,20377,20378,20380,20382,20383,20385,20386,20388,20395,20397,20400,20401,20402,20403,20404,20406,20407,20408,20409,20410,20411,20412,20413,20414,20416,20417,20418,20422,20423,20424,20425,20427,20428,20429,20434,20435,20436,20437,20438,20441,20443,20448,20450,20452,20453,20455,20459,20460,20464,20466,20468,20469,20470,20471,20473,20475,20476,20477,20479,20480,20481,20482,20483,20484,20485,20486,20487,20488,20489,20490,20491,20494,20496,20497,20499,20501,20502,20503,20507,20509,20510,20512,20514,20515,20516,20519,20523,20527,20528,20529,20530,20531,20532,20533,20534,20535,20536,20537,20539,20541,20543,20544,20545,20546,20548,20549,20550,20553,20554,20555,20557,20560,20561,20562,20563,20564,20566,20567,20568,20569,20571,20573,20574,20575,20576,20577,20578,20579,20580,20582,20583,20584,20585,20586,20587,20589,20590,20591,20592,20593,20594,20595,20596,20597,20600,20601,20602,20604,20605,20609,20610,20611,20612,20614,20615,20617,20618,20619,20620,20622,20623,20624,20625,20626,20627,20628,20629,20630,20631,20632,20633,20634,20635,20636,20637,20638,20639,20640,20641,20642,20644,20646,20650,20651,20653,20654,20655,20656,20657,20659,20660,20661,20662,20663,20664,20665,20668,20669,20670,20671,20672,20673,20674,20675,20676,20677,20678,20679,20680,20681,20682,20683,20684,20685,20686,20688,20689,20690,20691,20692,20693,20695,20696,20697,20699,20700,20701,20702,20703,20704,20705,20706,20707,20708,20709,20712,20713,20714,20715,20719,20720,20721,20722,20724,20726,20727,20728,20729,20730,20732,20733,20734,20735,20736,20737,20738,20739,20740,20741,20744,20745,20746,20748,20749,20750,20751,20752,20753,20755,20756,20757,20758,20759,20760,20761,20762,20763,20764,20765,20766,20767,20768,20770,20771,20772,20773,20774,20775,20776,20777,20778,20779,20780,20781,20782,20783,20784,20785,20786,20787,20788,20789,20790,20791,20792,20793,20794,20795,20796,20797,20798,20802,20807,20810,20812,20814,20815,20816,20818,20819,20823,20824,20825,20827,20829,20830,20831,20832,20833,20835,20836,20838,20839,20841,20842,20847,20850,20858,20862,20863,20867,20868,20870,20871,20874,20875,20878,20879,20880,20881,20883,20884,20888,20890,20893,20894,20895,20897,20899,20902,20903,20904,20905,20906,20909,20910,20916,20920,20921,20922,20926,20927,20929,20930,20931,20933,20936,20938,20941,20942,20944,20946,20947,20948,20949,20950,20951,20952,20953,20954,20956,20958,20959,20962,20963,20965,20966,20967,20968,20969,20970,20972,20974,20977,20978,20980,20983,20990,20996,20997,21001,21003,21004,21007,21008,21011,21012,21013,21020,21022,21023,21025,21026,21027,21029,21030,21031,21034,21036,21039,21041,21042,21044,21045,21052,21054,21060,21061,21062,21063,21064,21065,21067,21070,21071,21074,21075,21077,21079,21080,21081,21082,21083,21085,21087,21088,21090,21091,21092,21094,21096,21099,21100,21101,21102,21104,21105,21107,21108,21109,21110,21111,21112,21113,21114,21115,21116,21118,21120,21123,21124,21125,21126,21127,21129,21130,21131,21132,21133,21134,21135,21137,21138,21140,21141,21142,21143,21144,21145,21146,21148,21156,21157,21158,21159,21166,21167,21168,21172,21173,21174,21175,21176,21177,21178,21179,21180,21181,21184,21185,21186,21188,21189,21190,21192,21194,21196,21197,21198,21199,21201,21203,21204,21205,21207,21209,21210,21211,21212,21213,21214,21216,21217,21218,21219,21221,21222,21223,21224,21225,21226,21227,21228,21229,21230,21231,21233,21234,21235,21236,21237,21238,21239,21240,21243,21244,21245,21249,21250,21251,21252,21255,21257,21258,21259,21260,21262,21265,21266,21267,21268,21272,21275,21276,21278,21279,21282,21284,21285,21287,21288,21289,21291,21292,21293,21295,21296,21297,21298,21299,21300,21301,21302,21303,21304,21308,21309,21312,21314,21316,21318,21323,21324,21325,21328,21332,21336,21337,21339,21341,21349,21352,21354,21356,21357,21362,21366,21369,21371,21372,21373,21374,21376,21377,21379,21383,21384,21386,21390,21391,21392,21393,21394,21395,21396,21398,21399,21401,21403,21404,21406,21408,21409,21412,21415,21418,21419,21420,21421,21423,21424,21425,21426,21427,21428,21429,21431,21432,21433,21434,21436,21437,21438,21440,21443,21444,21445,21446,21447,21454,21455,21456,21458,21459,21461,21466,21468,21469,21470,21473,21474,21479,21492,21498,21502,21503,21504,21506,21509,21511,21515,21524,21528,21529,21530,21532,21538,21540,21541,21546,21552,21555,21558,21559,21562,21565,21567,21569,21570,21572,21573,21575,21577,21580,21581,21582,21583,21585,21594,21597,21598,21599,21600,21601,21603,21605,21607,21609,21610,21611,21612,21613,21614,21615,21616,21620,21625,21626,21630,21631,21633,21635,21637,21639,21640,21641,21642,21645,21649,21651,21655,21656,21660,21662,21663,21664,21665,21666,21669,21678,21680,21682,21685,21686,21687,21689,21690,21692,21694,21699,21701,21706,21707,21718,21720,21723,21728,21729,21730,21731,21732,21739,21740,21743,21744,21745,21748,21749,21750,21751,21752,21753,21755,21758,21760,21762,21763,21764,21765,21768,21770,21771,21772,21773,21774,21778,21779,21781,21782,21783,21784,21785,21786,21788,21789,21790,21791,21793,21797,21798,21800,21801,21803,21805,21810,21812,21813,21814,21816,21817,21818,21819,21821,21824,21826,21829,21831,21832,21835,21836,21837,21838,21839,21841,21842,21843,21844,21847,21848,21849,21850,21851,21853,21854,21855,21856,21858,21859,21864,21865,21867,21871,21872,21873,21874,21875,21876,21881,21882,21885,21887,21893,21894,21900,21901,21902,21904,21906,21907,21909,21910,21911,21914,21915,21918,21920,21921,21922,21923,21924,21925,21926,21928,21929,21930,21931,21932,21933,21934,21935,21936,21938,21940,21942,21944,21946,21948,21951,21952,21953,21954,21955,21958,21959,21960,21962,21963,21966,21967,21968,21973,21975,21976,21977,21978,21979,21982,21984,21986,21991,21993,21997,21998,22000,22001,22004,22006,22008,22009,22010,22011,22012,22015,22018,22019,22020,22021,22022,22023,22026,22027,22029,22032,22033,22034,22035,22036,22037,22038,22039,22041,22042,22044,22045,22048,22049,22050,22053,22054,22056,22057,22058,22059,22062,22063,22064,22067,22069,22071,22072,22074,22076,22077,22078,22080,22081,22082,22083,22084,22085,22086,22087,22088,22089,22090,22091,22095,22096,22097,22098,22099,22101,22102,22106,22107,22109,22110,22111,22112,22113,22115,22117,22118,22119,22125,22126,22127,22128,22130,22131,22132,22133,22135,22136,22137,22138,22141,22142,22143,22144,22145,22146,22147,22148,22151,22152,22153,22154,22155,22156,22157,22160,22161,22162,22164,22165,22166,22167,22168,22169,22170,22171,22172,22173,22174,22175,22176,22177,22178,22180,22181,22182,22183,22184,22185,22186,22187,22188,22189,22190,22192,22193,22194,22195,22196,22197,22198,22200,22201,22202,22203,22205,22206,22207,22208,22209,22210,22211,22212,22213,22214,22215,22216,22217,22219,22220,22221,22222,22223,22224,22225,22226,22227,22229,22230,22232,22233,22236,22243,22245,22246,22247,22248,22249,22250,22252,22254,22255,22258,22259,22262,22263,22264,22267,22268,22272,22273,22274,22277,22279,22283,22284,22285,22286,22287,22288,22289,22290,22291,22292,22293,22294,22295,22296,22297,22298,22299,22301,22302,22304,22305,22306,22308,22309,22310,22311,22315,22321,22322,22324,22325,22326,22327,22328,22332,22333,22335,22337,22339,22340,22341,22342,22344,22345,22347,22354,22355,22356,22357,22358,22360,22361,22370,22371,22373,22375,22380,22382,22384,22385,22386,22388,22389,22392,22393,22394,22397,22398,22399,22400,22401,22407,22408,22409,22410,22413,22414,22415,22416,22417,22420,22421,22422,22423,22424,22425,22426,22428,22429,22430,22431,22437,22440,22442,22444,22447,22448,22449,22451,22453,22454,22455,22457,22458,22459,22460,22461,22462,22463,22464,22465,22468,22469,22470,22471,22472,22473,22474,22476,22477,22480,22481,22483,22486,22487,22491,22492,22494,22497,22498,22499,22501,22502,22503,22504,22505,22506,22507,22508,22510,22512,22513,22514,22515,22517,22518,22519,22523,22524,22526,22527,22529,22531,22532,22533,22536,22537,22538,22540,22542,22543,22544,22546,22547,22548,22550,22551,22552,22554,22555,22556,22557,22559,22562,22563,22565,22566,22567,22568,22569,22571,22572,22573,22574,22575,22577,22578,22579,22580,22582,22583,22584,22585,22586,22587,22588,22589,22590,22591,22592,22593,22594,22595,22597,22598,22599,22600,22601,22602,22603,22606,22607,22608,22610,22611,22613,22614,22615,22617,22618,22619,22620,22621,22623,22624,22625,22626,22627,22628,22630,22631,22632,22633,22634,22637,22638,22639,22640,22641,22642,22643,22644,22645,22646,22647,22648,22649,22650,22651,22652,22653,22655,22658,22660,22662,22663,22664,22666,22667,22668,22669,22670,22671,22672,22673,22676,22677,22678,22679,22680,22683,22684,22685,22688,22689,22690,22691,22692,22693,22694,22695,22698,22699,22700,22701,22702,22703,22704,22705,22706,22707,22708,22709,22710,22711,22712,22713,22714,22715,22717,22718,22719,22720,22722,22723,22724,22726,22727,22728,22729,22730,22731,22732,22733,22734,22735,22736,22738,22739,22740,22742,22743,22744,22745,22746,22747,22748,22749,22750,22751,22752,22753,22754,22755,22757,22758,22759,22760,22761,22762,22765,22767,22769,22770,22772,22773,22775,22776,22778,22779,22780,22781,22782,22783,22784,22785,22787,22789,22790,22792,22793,22794,22795,22796,22798,22800,22801,22802,22803,22807,22808,22811,22813,22814,22816,22817,22818,22819,22822,22824,22828,22832,22834,22835,22837,22838,22843,22845,22846,22847,22848,22851,22853,22854,22858,22860,22861,22864,22866,22867,22873,22875,22876,22877,22878,22879,22881,22883,22884,22886,22887,22888,22889,22890,22891,22892,22893,22894,22895,22896,22897,22898,22901,22903,22906,22907,22908,22910,22911,22912,22917,22921,22923,22924,22926,22927,22928,22929,22932,22933,22936,22938,22939,22940,22941,22943,22944,22945,22946,22950,22951,22956,22957,22960,22961,22963,22964,22965,22966,22967,22968,22970,22972,22973,22975,22976,22977,22978,22979,22980,22981,22983,22984,22985,22988,22989,22990,22991,22997,22998,23001,23003,23006,23007,23008,23009,23010,23012,23014,23015,23017,23018,23019,23021,23022,23023,23024,23025,23026,23027,23028,23029,23030,23031,23032,23034,23036,23037,23038,23040,23042,23050,23051,23053,23054,23055,23056,23058,23060,23061,23062,23063,23065,23066,23067,23069,23070,23073,23074,23076,23078,23079,23080,23082,23083,23084,23085,23086,23087,23088,23091,23093,23095,23096,23097,23098,23099,23101,23102,23103,23105,23106,23107,23108,23109,23111,23112,23115,23116,23117,23118,23119,23120,23121,23122,23123,23124,23126,23127,23128,23129,23131,23132,23133,23134,23135,23136,23137,23139,23140,23141,23142,23144,23145,23147,23148,23149,23150,23151,23152,23153,23154,23155,23160,23161,23163,23164,23165,23166,23168,23169,23170,23171,23172,23173,23174,23175,23176,23177,23178,23179,23180,23181,23182,23183,23184,23185,23187,23188,23189,23190,23191,23192,23193,23196,23197,23198,23199,23200,23201,23202,23203,23204,23205,23206,23207,23208,23209,23211,23212,23213,23214,23215,23216,23217,23220,23222,23223,23225,23226,23227,23228,23229,23231,23232,23235,23236,23237,23238,23239,23240,23242,23243,23245,23246,23247,23248,23249,23251,23253,23255,23257,23258,23259,23261,23262,23263,23266,23268,23269,23271,23272,23274,23276,23277,23278,23279,23280,23282,23283,23284,23285,23286,23287,23288,23289,23290,23291,23292,23293,23294,23295,23296,23297,23298,23299,23300,23301,23302,23303,23304,23306,23307,23308,23309,23310,23311,23312,23313,23314,23315,23316,23317,23320,23321,23322,23323,23324,23325,23326,23327,23328,23329,23330,23331,23332,23333,23334,23335,23336,23337,23338,23339,23340,23341,23342,23343,23344,23345,23347,23349,23350,23352,23353,23354,23355,23356,23357,23358,23359,23361,23362,23363,23364,23365,23366,23367,23368,23369,23370,23371,23372,23373,23374,23375,23378,23382,23390,23392,23393,23399,23400,23403,23405,23406,23407,23410,23412,23414,23415,23416,23417,23419,23420,23422,23423,23426,23430,23434,23437,23438,23440,23441,23442,23444,23446,23455,23463,23464,23465,23468,23469,23470,23471,23473,23474,23479,23482,23483,23484,23488,23489,23491,23496,23497,23498,23499,23501,23502,23503,23505,23508,23509,23510,23511,23512,23513,23514,23515,23516,23520,23522,23523,23526,23527,23529,23530,23531,23532,23533,23535,23537,23538,23539,23540,23541,23542,23543,23549,23550,23552,23554,23555,23557,23559,23560,23563,23564,23565,23566,23568,23570,23571,23575,23577,23579,23582,23583,23584,23585,23587,23590,23592,23593,23594,23595,23597,23598,23599,23600,23602,23603,23605,23606,23607,23619,23620,23622,23623,23628,23629,23634,23635,23636,23638,23639,23640,23642,23643,23644,23645,23647,23650,23652,23655,23656,23657,23658,23659,23660,23661,23664,23666,23667,23668,23669,23670,23671,23672,23675,23676,23677,23678,23680,23683,23684,23685,23686,23687,23689,23690,23691,23694,23695,23698,23699,23701,23709,23710,23711,23712,23713,23716,23717,23718,23719,23720,23722,23726,23727,23728,23730,23732,23734,23737,23738,23739,23740,23742,23744,23746,23747,23749,23750,23751,23752,23753,23754,23756,23757,23758,23759,23760,23761,23763,23764,23765,23766,23767,23768,23770,23771,23772,23773,23774,23775,23776,23778,23779,23783,23785,23787,23788,23790,23791,23793,23794,23795,23796,23797,23798,23799,23800,23801,23802,23804,23805,23806,23807,23808,23809,23812,23813,23816,23817,23818,23819,23820,23821,23823,23824,23825,23826,23827,23829,23831,23832,23833,23834,23836,23837,23839,23840,23841,23842,23843,23845,23848,23850,23851,23852,23855,23856,23857,23858,23859,23861,23862,23863,23864,23865,23866,23867,23868,23871,23872,23873,23874,23875,23876,23877,23878,23880,23881,23885,23886,23887,23888,23889,23890,23891,23892,23893,23894,23895,23897,23898,23900,23902,23903,23904,23905,23906,23907,23908,23909,23910,23911,23912,23914,23917,23918,23920,23921,23922,23923,23925,23926,23927,23928,23929,23930,23931,23932,23933,23934,23935,23936,23937,23939,23940,23941,23942,23943,23944,23945,23946,23947,23948,23949,23950,23951,23952,23953,23954,23955,23956,23957,23958,23959,23960,23962,23963,23964,23966,23967,23968,23969,23970,23971,23972,23973,23974,23975,23976,23977,23978,23979,23980,23981,23982,23983,23984,23985,23986,23987,23988,23989,23990,23992,23993,23994,23995,23996,23997,23998,23999,24000,24001,24002,24003,24004,24006,24007,24008,24009,24010,24011,24012,24014,24015,24016,24017,24018,24019,24020,24021,24022,24023,24024,24025,24026,24028,24031,24032,24035,24036,24042,24044,24045,24048,24053,24054,24056,24057,24058,24059,24060,24063,24064,24068,24071,24073,24074,24075,24077,24078,24082,24083,24087,24094,24095,24096,24097,24098,24099,24100,24101,24104,24105,24106,24107,24108,24111,24112,24114,24115,24116,24117,24118,24121,24122,24126,24127,24128,24129,24131,24134,24135,24136,24137,24138,24139,24141,24142,24143,24144,24145,24146,24147,24150,24151,24152,24153,24154,24156,24157,24159,24160,24163,24164,24165,24166,24167,24168,24169,24170,24171,24172,24173,24174,24175,24176,24177,24181,24183,24185,24190,24193,24194,24195,24197,24200,24201,24204,24205,24206,24210,24216,24219,24221,24225,24226,24227,24228,24232,24233,24234,24235,24236,24238,24239,24240,24241,24242,24244,24250,24251,24252,24253,24255,24256,24257,24258,24259,24260,24261,24262,24263,24264,24267,24268,24269,24270,24271,24272,24276,24277,24279,24280,24281,24282,24284,24285,24286,24287,24288,24289,24290,24291,24292,24293,24294,24295,24297,24299,24300,24301,24302,24303,24304,24305,24306,24307,24309,24312,24313,24315,24316,24317,24325,24326,24327,24329,24332,24333,24334,24336,24338,24340,24342,24345,24346,24348,24349,24350,24353,24354,24355,24356,24360,24363,24364,24366,24368,24370,24371,24372,24373,24374,24375,24376,24379,24381,24382,24383,24385,24386,24387,24388,24389,24390,24391,24392,24393,24394,24395,24396,24397,24398,24399,24401,24404,24409,24410,24411,24412,24414,24415,24416,24419,24421,24423,24424,24427,24430,24431,24434,24436,24437,24438,24440,24442,24445,24446,24447,24451,24454,24461,24462,24463,24465,24467,24468,24470,24474,24475,24477,24478,24479,24480,24482,24483,24484,24485,24486,24487,24489,24491,24492,24495,24496,24497,24498,24499,24500,24502,24504,24505,24506,24507,24510,24511,24512,24513,24514,24519,24520,24522,24523,24526,24531,24532,24533,24538,24539,24540,24542,24543,24546,24547,24549,24550,24552,24553,24556,24559,24560,24562,24563,24564,24566,24567,24569,24570,24572,24583,24584,24585,24587,24588,24592,24593,24595,24599,24600,24602,24606,24607,24610,24611,24612,24620,24621,24622,24624,24625,24626,24627,24628,24630,24631,24632,24633,24634,24637,24638,24640,24644,24645,24646,24647,24648,24649,24650,24652,24654,24655,24657,24659,24660,24662,24663,24664,24667,24668,24670,24671,24672,24673,24677,24678,24686,24689,24690,24692,24693,24695,24702,24704,24705,24706,24709,24710,24711,24712,24714,24715,24718,24719,24720,24721,24723,24725,24727,24728,24729,24732,24734,24737,24738,24740,24741,24743,24745,24746,24750,24752,24755,24757,24758,24759,24761,24762,24765,24766,24767,24768,24769,24770,24771,24772,24775,24776,24777,24780,24781,24782,24783,24784,24786,24787,24788,24790,24791,24793,24795,24798,24801,24802,24803,24804,24805,24810,24817,24818,24821,24823,24824,24827,24828,24829,24830,24831,24834,24835,24836,24837,24839,24842,24843,24844,24848,24849,24850,24851,24852,24854,24855,24856,24857,24859,24860,24861,24862,24865,24866,24869,24872,24873,24874,24876,24877,24878,24879,24880,24881,24882,24883,24884,24885,24886,24887,24888,24889,24890,24891,24892,24893,24894,24896,24897,24898,24899,24900,24901,24902,24903,24905,24907,24909,24911,24912,24914,24915,24916,24918,24919,24920,24921,24922,24923,24924,24926,24927,24928,24929,24931,24932,24933,24934,24937,24938,24939,24940,24941,24942,24943,24945,24946,24947,24948,24950,24952,24953,24954,24955,24956,24957,24958,24959,24960,24961,24962,24963,24964,24965,24966,24967,24968,24969,24970,24972,24973,24975,24976,24977,24978,24979,24981,24982,24983,24984,24985,24986,24987,24988,24990,24991,24992,24993,24994,24995,24996,24997,24998,25002,25003,25005,25006,25007,25008,25009,25010,25011,25012,25013,25014,25016,25017,25018,25019,25020,25021,25023,25024,25025,25027,25028,25029,25030,25031,25033,25036,25037,25038,25039,25040,25043,25045,25046,25047,25048,25049,25050,25051,25052,25053,25054,25055,25056,25057,25058,25059,25060,25061,25063,25064,25065,25066,25067,25068,25069,25070,25071,25072,25073,25074,25075,25076,25078,25079,25080,25081,25082,25083,25084,25085,25086,25088,25089,25090,25091,25092,25093,25095,25097,25107,25108,25113,25116,25117,25118,25120,25123,25126,25127,25128,25129,25131,25133,25135,25136,25137,25138,25141,25142,25144,25145,25146,25147,25148,25154,25156,25157,25158,25162,25167,25168,25173,25174,25175,25177,25178,25180,25181,25182,25183,25184,25185,25186,25188,25189,25192,25201,25202,25204,25205,25207,25208,25210,25211,25213,25217,25218,25219,25221,25222,25223,25224,25227,25228,25229,25230,25231,25232,25236,25241,25244,25245,25246,25251,25254,25255,25257,25258,25261,25262,25263,25264,25266,25267,25268,25270,25271,25272,25274,25278,25280,25281,25283,25291,25295,25297,25301,25309,25310,25312,25313,25316,25322,25323,25328,25330,25333,25336,25337,25338,25339,25344,25347,25348,25349,25350,25354,25355,25356,25357,25359,25360,25362,25363,25364,25365,25367,25368,25369,25372,25382,25383,25385,25388,25389,25390,25392,25393,25395,25396,25397,25398,25399,25400,25403,25404,25406,25407,25408,25409,25412,25415,25416,25418,25425,25426,25427,25428,25430,25431,25432,25433,25434,25435,25436,25437,25440,25444,25445,25446,25448,25450,25451,25452,25455,25456,25458,25459,25460,25461,25464,25465,25468,25469,25470,25471,25473,25475,25476,25477,25478,25483,25485,25489,25491,25492,25493,25495,25497,25498,25499,25500,25501,25502,25503,25505,25508,25510,25515,25519,25521,25522,25525,25526,25529,25531,25533,25535,25536,25537,25538,25539,25541,25543,25544,25546,25547,25548,25553,25555,25556,25557,25559,25560,25561,25562,25563,25564,25565,25567,25570,25572,25573,25574,25575,25576,25579,25580,25582,25583,25584,25585,25587,25589,25591,25593,25594,25595,25596,25598,25603,25604,25606,25607,25608,25609,25610,25613,25614,25617,25618,25621,25622,25623,25624,25625,25626,25629,25631,25634,25635,25636,25637,25639,25640,25641,25643,25646,25647,25648,25649,25650,25651,25653,25654,25655,25656,25657,25659,25660,25662,25664,25666,25667,25673,25675,25676,25677,25678,25679,25680,25681,25683,25685,25686,25687,25689,25690,25691,25692,25693,25695,25696,25697,25698,25699,25700,25701,25702,25704,25706,25707,25708,25710,25711,25712,25713,25714,25715,25716,25717,25718,25719,25723,25724,25725,25726,25727,25728,25729,25731,25734,25736,25737,25738,25739,25740,25741,25742,25743,25744,25747,25748,25751,25752,25754,25755,25756,25757,25759,25760,25761,25762,25763,25765,25766,25767,25768,25770,25771,25775,25777,25778,25779,25780,25782,25785,25787,25789,25790,25791,25793,25795,25796,25798,25799,25800,25801,25802,25803,25804,25807,25809,25811,25812,25813,25814,25817,25818,25819,25820,25821,25823,25824,25825,25827,25829,25831,25832,25833,25834,25835,25836,25837,25838,25839,25840,25841,25842,25843,25844,25845,25846,25847,25848,25849,25850,25851,25852,25853,25854,25855,25857,25858,25859,25860,25861,25862,25863,25864,25866,25867,25868,25869,25870,25871,25872,25873,25875,25876,25877,25878,25879,25881,25882,25883,25884,25885,25886,25887,25888,25889,25890,25891,25892,25894,25895,25896,25897,25898,25900,25901,25904,25905,25906,25907,25911,25914,25916,25917,25920,25921,25922,25923,25924,25926,25927,25930,25931,25933,25934,25936,25938,25939,25940,25943,25944,25946,25948,25951,25952,25953,25956,25957,25959,25960,25961,25962,25965,25966,25967,25969,25971,25973,25974,25976,25977,25978,25979,25980,25981,25982,25983,25984,25985,25986,25987,25988,25989,25990,25992,25993,25994,25997,25998,25999,26002,26004,26005,26006,26008,26010,26013,26014,26016,26018,26019,26022,26024,26026,26028,26030,26033,26034,26035,26036,26037,26038,26039,26040,26042,26043,26046,26047,26048,26050,26055,26056,26057,26058,26061,26064,26065,26067,26068,26069,26072,26073,26074,26075,26076,26077,26078,26079,26081,26083,26084,26090,26091,26098,26099,26100,26101,26104,26105,26107,26108,26109,26110,26111,26113,26116,26117,26119,26120,26121,26123,26125,26128,26129,26130,26134,26135,26136,26138,26139,26140,26142,26145,26146,26147,26148,26150,26153,26154,26155,26156,26158,26160,26162,26163,26167,26168,26169,26170,26171,26173,26175,26176,26178,26180,26181,26182,26183,26184,26185,26186,26189,26190,26192,26193,26200,26201,26203,26204,26205,26206,26208,26210,26211,26213,26215,26217,26218,26219,26220,26221,26225,26226,26227,26229,26232,26233,26235,26236,26237,26239,26240,26241,26243,26245,26246,26248,26249,26250,26251,26253,26254,26255,26256,26258,26259,26260,26261,26264,26265,26266,26267,26268,26270,26271,26272,26273,26274,26275,26276,26277,26278,26281,26282,26283,26284,26285,26287,26288,26289,26290,26291,26293,26294,26295,26296,26298,26299,26300,26301,26303,26304,26305,26306,26307,26308,26309,26310,26311,26312,26313,26314,26315,26316,26317,26318,26319,26320,26321,26322,26323,26324,26325,26326,26327,26328,26330,26334,26335,26336,26337,26338,26339,26340,26341,26343,26344,26346,26347,26348,26349,26350,26351,26353,26357,26358,26360,26362,26363,26365,26369,26370,26371,26372,26373,26374,26375,26380,26382,26383,26385,26386,26387,26390,26392,26393,26394,26396,26398,26400,26401,26402,26403,26404,26405,26407,26409,26414,26416,26418,26419,26422,26423,26424,26425,26427,26428,26430,26431,26433,26436,26437,26439,26442,26443,26445,26450,26452,26453,26455,26456,26457,26458,26459,26461,26466,26467,26468,26470,26471,26475,26476,26478,26481,26484,26486,26488,26489,26490,26491,26493,26496,26498,26499,26501,26502,26504,26506,26508,26509,26510,26511,26513,26514,26515,26516,26518,26521,26523,26527,26528,26529,26532,26534,26537,26540,26542,26545,26546,26548,26553,26554,26555,26556,26557,26558,26559,26560,26562,26565,26566,26567,26568,26569,26570,26571,26572,26573,26574,26581,26582,26583,26587,26591,26593,26595,26596,26598,26599,26600,26602,26603,26605,26606,26610,26613,26614,26615,26616,26617,26618,26619,26620,26622,26625,26626,26627,26628,26630,26637,26640,26642,26644,26645,26648,26649,26650,26651,26652,26654,26655,26656,26658,26659,26660,26661,26662,26663,26664,26667,26668,26669,26670,26671,26672,26673,26676,26677,26678,26682,26683,26687,26695,26699,26701,26703,26706,26710,26711,26712,26713,26714,26715,26716,26717,26718,26719,26730,26732,26733,26734,26735,26736,26737,26738,26739,26741,26744,26745,26746,26747,26748,26749,26750,26751,26752,26754,26756,26759,26760,26761,26762,26763,26764,26765,26766,26768,26769,26770,26772,26773,26774,26776,26777,26778,26779,26780,26781,26782,26783,26784,26785,26787,26788,26789,26793,26794,26795,26796,26798,26801,26802,26804,26806,26807,26808,26809,26810,26811,26812,26813,26814,26815,26817,26819,26820,26821,26822,26823,26824,26826,26828,26830,26831,26832,26833,26835,26836,26838,26839,26841,26843,26844,26845,26846,26847,26849,26850,26852,26853,26854,26855,26856,26857,26858,26859,26860,26861,26863,26866,26867,26868,26870,26871,26872,26875,26877,26878,26879,26880,26882,26883,26884,26886,26887,26888,26889,26890,26892,26895,26897,26899,26900,26901,26902,26903,26904,26905,26906,26907,26908,26909,26910,26913,26914,26915,26917,26918,26919,26920,26921,26922,26923,26924,26926,26927,26929,26930,26931,26933,26934,26935,26936,26938,26939,26940,26942,26944,26945,26947,26948,26949,26950,26951,26952,26953,26954,26955,26956,26957,26958,26959,26960,26961,26962,26963,26965,26966,26968,26969,26971,26972,26975,26977,26978,26980,26981,26983,26984,26985,26986,26988,26989,26991,26992,26994,26995,26996,26997,26998,27002,27003,27005,27006,27007,27009,27011,27013,27018,27019,27020,27022,27023,27024,27025,27026,27027,27030,27031,27033,27034,27037,27038,27039,27040,27041,27042,27043,27044,27045,27046,27049,27050,27052,27054,27055,27056,27058,27059,27061,27062,27064,27065,27066,27068,27069,27070,27071,27072,27074,27075,27076,27077,27078,27079,27080,27081,27083,27085,27087,27089,27090,27091,27093,27094,27095,27096,27097,27098,27100,27101,27102,27105,27106,27107,27108,27109,27110,27111,27112,27113,27114,27115,27116,27118,27119,27120,27121,27123,27124,27125,27126,27127,27128,27129,27130,27131,27132,27134,27136,27137,27138,27139,27140,27141,27142,27143,27144,27145,27147,27148,27149,27150,27151,27152,27153,27154,27155,27156,27157,27158,27161,27162,27163,27164,27165,27166,27168,27170,27171,27172,27173,27174,27175,27177,27179,27180,27181,27182,27184,27186,27187,27188,27190,27191,27192,27193,27194,27195,27196,27199,27200,27201,27202,27203,27205,27206,27208,27209,27210,27211,27212,27213,27214,27215,27217,27218,27219,27220,27221,27222,27223,27226,27228,27229,27230,27231,27232,27234,27235,27236,27238,27239,27240,27241,27242,27243,27244,27245,27246,27247,27248,27250,27251,27252,27253,27254,27255,27256,27258,27259,27261,27262,27263,27265,27266,27267,27269,27270,27271,27272,27273,27274,27275,27276,27277,27279,27282,27283,27284,27285,27286,27288,27289,27290,27291,27292,27293,27294,27295,27297,27298,27299,27300,27301,27302,27303,27304,27306,27309,27310,27311,27312,27313,27314,27315,27316,27317,27318,27319,27320,27321,27322,27323,27324,27325,27326,27327,27328,27329,27330,27331,27332,27333,27334,27335,27336,27337,27338,27339,27340,27341,27342,27343,27344,27345,27346,27347,27348,27349,27350,27351,27352,27353,27354,27355,27356,27357,27358,27359,27360,27361,27362,27363,27364,27365,27366,27367,27368,27369,27370,27371,27372,27373,27374,27375,27376,27377,27378,27379,27380,27381,27382,27383,27384,27385,27386,27387,27388,27389,27390,27391,27392,27393,27394,27395,27396,27397,27398,27399,27400,27401,27402,27403,27404,27405,27406,27407,27408,27409,27410,27411,27412,27413,27414,27415,27416,27417,27418,27419,27420,27421,27422,27423,27429,27430,27432,27433,27434,27435,27436,27437,27438,27439,27440,27441,27443,27444,27445,27446,27448,27451,27452,27453,27455,27456,27457,27458,27460,27461,27464,27466,27467,27469,27470,27471,27472,27473,27474,27475,27476,27477,27478,27479,27480,27482,27483,27484,27485,27486,27487,27488,27489,27496,27497,27499,27500,27501,27502,27503,27504,27505,27506,27507,27508,27509,27510,27511,27512,27514,27517,27518,27519,27520,27525,27528,27532,27534,27535,27536,27537,27540,27541,27543,27544,27545,27548,27549,27550,27551,27552,27554,27555,27556,27557,27558,27559,27560,27561,27563,27564,27565,27566,27567,27568,27569,27570,27574,27576,27577,27578,27579,27580,27581,27582,27584,27587,27588,27590,27591,27592,27593,27594,27596,27598,27600,27601,27608,27610,27612,27613,27614,27615,27616,27618,27619,27620,27621,27622,27623,27624,27625,27628,27629,27630,27632,27633,27634,27636,27638,27639,27640,27642,27643,27644,27646,27647,27648,27649,27650,27651,27652,27656,27657,27658,27659,27660,27662,27666,27671,27676,27677,27678,27680,27683,27685,27691,27692,27693,27697,27699,27702,27703,27705,27706,27707,27708,27710,27711,27715,27716,27717,27720,27723,27724,27725,27726,27727,27729,27730,27731,27734,27736,27737,27738,27746,27747,27749,27750,27751,27755,27756,27757,27758,27759,27761,27763,27765,27767,27768,27770,27771,27772,27775,27776,27780,27783,27786,27787,27789,27790,27793,27794,27797,27798,27799,27800,27802,27804,27805,27806,27808,27810,27816,27820,27823,27824,27828,27829,27830,27831,27834,27840,27841,27842,27843,27846,27847,27848,27851,27853,27854,27855,27857,27858,27864,27865,27866,27868,27869,27871,27876,27878,27879,27881,27884,27885,27890,27892,27897,27903,27904,27906,27907,27909,27910,27912,27913,27914,27917,27919,27920,27921,27923,27924,27925,27926,27928,27932,27933,27935,27936,27937,27938,27939,27940,27942,27944,27945,27948,27949,27951,27952,27956,27958,27959,27960,27962,27967,27968,27970,27972,27977,27980,27984,27989,27990,27991,27992,27995,27997,27999,28001,28002,28004,28005,28007,28008,28011,28012,28013,28016,28017,28018,28019,28021,28022,28025,28026,28027,28029,28030,28031,28032,28033,28035,28036,28038,28039,28042,28043,28045,28047,28048,28050,28054,28055,28056,28057,28058,28060,28066,28069,28076,28077,28080,28081,28083,28084,28086,28087,28089,28090,28091,28092,28093,28094,28097,28098,28099,28104,28105,28106,28109,28110,28111,28112,28114,28115,28116,28117,28119,28122,28123,28124,28127,28130,28131,28133,28135,28136,28137,28138,28141,28143,28144,28146,28148,28149,28150,28152,28154,28157,28158,28159,28160,28161,28162,28163,28164,28166,28167,28168,28169,28171,28175,28178,28179,28181,28184,28185,28187,28188,28190,28191,28194,28198,28199,28200,28202,28204,28206,28208,28209,28211,28213,28214,28215,28217,28219,28220,28221,28222,28223,28224,28225,28226,28229,28230,28231,28232,28233,28234,28235,28236,28239,28240,28241,28242,28245,28247,28249,28250,28252,28253,28254,28256,28257,28258,28259,28260,28261,28262,28263,28264,28265,28266,28268,28269,28271,28272,28273,28274,28275,28276,28277,28278,28279,28280,28281,28282,28283,28284,28285,28288,28289,28290,28292,28295,28296,28298,28299,28300,28301,28302,28305,28306,28307,28308,28309,28310,28311,28313,28314,28315,28317,28318,28320,28321,28323,28324,28326,28328,28329,28331,28332,28333,28334,28336,28339,28341,28344,28345,28348,28350,28351,28352,28355,28356,28357,28358,28360,28361,28362,28364,28365,28366,28368,28370,28374,28376,28377,28379,28380,28381,28387,28391,28394,28395,28396,28397,28398,28399,28400,28401,28402,28403,28405,28406,28407,28408,28410,28411,28412,28413,28414,28415,28416,28417,28419,28420,28421,28423,28424,28426,28427,28428,28429,28430,28432,28433,28434,28438,28439,28440,28441,28442,28443,28444,28445,28446,28447,28449,28450,28451,28453,28454,28455,28456,28460,28462,28464,28466,28468,28469,28471,28472,28473,28474,28475,28476,28477,28479,28480,28481,28482,28483,28484,28485,28488,28489,28490,28492,28494,28495,28496,28497,28498,28499,28500,28501,28502,28503,28505,28506,28507,28509,28511,28512,28513,28515,28516,28517,28519,28520,28521,28522,28523,28524,28527,28528,28529,28531,28533,28534,28535,28537,28539,28541,28542,28543,28544,28545,28546,28547,28549,28550,28551,28554,28555,28559,28560,28561,28562,28563,28564,28565,28566,28567,28568,28569,28570,28571,28573,28574,28575,28576,28578,28579,28580,28581,28582,28584,28585,28586,28587,28588,28589,28590,28591,28592,28593,28594,28596,28597,28599,28600,28602,28603,28604,28605,28606,28607,28609,28611,28612,28613,28614,28615,28616,28618,28619,28620,28621,28622,28623,28624,28627,28628,28629,28630,28631,28632,28633,28634,28635,28636,28637,28639,28642,28643,28644,28645,28646,28647,28648,28649,28650,28651,28652,28653,28656,28657,28658,28659,28660,28661,28662,28663,28664,28665,28666,28667,28668,28669,28670,28671,28672,28673,28674,28675,28676,28677,28678,28679,28680,28681,28682,28683,28684,28685,28686,28687,28688,28690,28691,28692,28693,28694,28695,28696,28697,28700,28701,28702,28703,28704,28705,28706,28708,28709,28710,28711,28712,28713,28714,28715,28716,28717,28718,28719,28720,28721,28722,28723,28724,28726,28727,28728,28730,28731,28732,28733,28734,28735,28736,28737,28738,28739,28740,28741,28742,28743,28744,28745,28746,28747,28749,28750,28752,28753,28754,28755,28756,28757,28758,28759,28760,28761,28762,28763,28764,28765,28767,28768,28769,28770,28771,28772,28773,28774,28775,28776,28777,28778,28782,28785,28786,28787,28788,28791,28793,28794,28795,28797,28801,28802,28803,28804,28806,28807,28808,28811,28812,28813,28815,28816,28817,28819,28823,28824,28826,28827,28830,28831,28832,28833,28834,28835,28836,28837,28838,28839,28840,28841,28842,28848,28850,28852,28853,28854,28858,28862,28863,28868,28869,28870,28871,28873,28875,28876,28877,28878,28879,28880,28881,28882,28883,28884,28885,28886,28887,28890,28892,28893,28894,28896,28897,28898,28899,28901,28906,28910,28912,28913,28914,28915,28916,28917,28918,28920,28922,28923,28924,28926,28927,28928,28929,28930,28931,28932,28933,28934,28935,28936,28939,28940,28941,28942,28943,28945,28946,28948,28951,28955,28956,28957,28958,28959,28960,28961,28962,28963,28964,28965,28967,28968,28969,28970,28971,28972,28973,28974,28978,28979,28980,28981,28983,28984,28985,28986,28987,28988,28989,28990,28991,28992,28993,28994,28995,28996,28998,28999,29000,29001,29003,29005,29007,29008,29009,29010,29011,29012,29013,29014,29015,29016,29017,29018,29019,29021,29023,29024,29025,29026,29027,29029,29033,29034,29035,29036,29037,29039,29040,29041,29044,29045,29046,29047,29049,29051,29052,29054,29055,29056,29057,29058,29059,29061,29062,29063,29064,29065,29067,29068,29069,29070,29072,29073,29074,29075,29077,29078,29079,29082,29083,29084,29085,29086,29089,29090,29091,29092,29093,29094,29095,29097,29098,29099,29101,29102,29103,29104,29105,29106,29108,29110,29111,29112,29114,29115,29116,29117,29118,29119,29120,29121,29122,29124,29125,29126,29127,29128,29129,29130,29131,29132,29133,29135,29136,29137,29138,29139,29142,29143,29144,29145,29146,29147,29148,29149,29150,29151,29153,29154,29155,29156,29158,29160,29161,29162,29163,29164,29165,29167,29168,29169,29170,29171,29172,29173,29174,29175,29176,29178,29179,29180,29181,29182,29183,29184,29185,29186,29187,29188,29189,29191,29192,29193,29194,29195,29196,29197,29198,29199,29200,29201,29202,29203,29204,29205,29206,29207,29208,29209,29210,29211,29212,29214,29215,29216,29217,29218,29219,29220,29221,29222,29223,29225,29227,29229,29230,29231,29234,29235,29236,29242,29244,29246,29248,29249,29250,29251,29252,29253,29254,29257,29258,29259,29262,29263,29264,29265,29267,29268,29269,29271,29272,29274,29276,29278,29280,29283,29284,29285,29288,29290,29291,29292,29293,29296,29297,29299,29300,29302,29303,29304,29307,29308,29309,29314,29315,29317,29318,29319,29320,29321,29324,29326,29328,29329,29331,29332,29333,29334,29335,29336,29337,29338,29339,29340,29341,29342,29344,29345,29346,29347,29348,29349,29350,29351,29352,29353,29354,29355,29358,29361,29362,29363,29365,29370,29371,29372,29373,29374,29375,29376,29381,29382,29383,29385,29386,29387,29388,29391,29393,29395,29396,29397,29398,29400,29402,29403,58566,58567,58568,58569,58570,58571,58572,58573,58574,58575,58576,58577,58578,58579,58580,58581,58582,58583,58584,58585,58586,58587,58588,58589,58590,58591,58592,58593,58594,58595,58596,58597,58598,58599,58600,58601,58602,58603,58604,58605,58606,58607,58608,58609,58610,58611,58612,58613,58614,58615,58616,58617,58618,58619,58620,58621,58622,58623,58624,58625,58626,58627,58628,58629,58630,58631,58632,58633,58634,58635,58636,58637,58638,58639,58640,58641,58642,58643,58644,58645,58646,58647,58648,58649,58650,58651,58652,58653,58654,58655,58656,58657,58658,58659,58660,58661,12288,12289,12290,183,713,711,168,12291,12293,8212,65374,8214,8230,8216,8217,8220,8221,12308,12309,12296,12297,12298,12299,12300,12301,12302,12303,12310,12311,12304,12305,177,215,247,8758,8743,8744,8721,8719,8746,8745,8712,8759,8730,8869,8741,8736,8978,8857,8747,8750,8801,8780,8776,8765,8733,8800,8814,8815,8804,8805,8734,8757,8756,9794,9792,176,8242,8243,8451,65284,164,65504,65505,8240,167,8470,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,8251,8594,8592,8593,8595,12307,58662,58663,58664,58665,58666,58667,58668,58669,58670,58671,58672,58673,58674,58675,58676,58677,58678,58679,58680,58681,58682,58683,58684,58685,58686,58687,58688,58689,58690,58691,58692,58693,58694,58695,58696,58697,58698,58699,58700,58701,58702,58703,58704,58705,58706,58707,58708,58709,58710,58711,58712,58713,58714,58715,58716,58717,58718,58719,58720,58721,58722,58723,58724,58725,58726,58727,58728,58729,58730,58731,58732,58733,58734,58735,58736,58737,58738,58739,58740,58741,58742,58743,58744,58745,58746,58747,58748,58749,58750,58751,58752,58753,58754,58755,58756,58757,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,59238,59239,59240,59241,59242,59243,9352,9353,9354,9355,9356,9357,9358,9359,9360,9361,9362,9363,9364,9365,9366,9367,9368,9369,9370,9371,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345,9346,9347,9348,9349,9350,9351,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,8364,59245,12832,12833,12834,12835,12836,12837,12838,12839,12840,12841,59246,59247,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554,8555,59248,59249,58758,58759,58760,58761,58762,58763,58764,58765,58766,58767,58768,58769,58770,58771,58772,58773,58774,58775,58776,58777,58778,58779,58780,58781,58782,58783,58784,58785,58786,58787,58788,58789,58790,58791,58792,58793,58794,58795,58796,58797,58798,58799,58800,58801,58802,58803,58804,58805,58806,58807,58808,58809,58810,58811,58812,58813,58814,58815,58816,58817,58818,58819,58820,58821,58822,58823,58824,58825,58826,58827,58828,58829,58830,58831,58832,58833,58834,58835,58836,58837,58838,58839,58840,58841,58842,58843,58844,58845,58846,58847,58848,58849,58850,58851,58852,12288,65281,65282,65283,65509,65285,65286,65287,65288,65289,65290,65291,65292,65293,65294,65295,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,65306,65307,65308,65309,65310,65311,65312,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,65339,65340,65341,65342,65343,65344,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,65371,65372,65373,65507,58854,58855,58856,58857,58858,58859,58860,58861,58862,58863,58864,58865,58866,58867,58868,58869,58870,58871,58872,58873,58874,58875,58876,58877,58878,58879,58880,58881,58882,58883,58884,58885,58886,58887,58888,58889,58890,58891,58892,58893,58894,58895,58896,58897,58898,58899,58900,58901,58902,58903,58904,58905,58906,58907,58908,58909,58910,58911,58912,58913,58914,58915,58916,58917,58918,58919,58920,58921,58922,58923,58924,58925,58926,58927,58928,58929,58930,58931,58932,58933,58934,58935,58936,58937,58938,58939,58940,58941,58942,58943,58944,58945,58946,58947,58948,58949,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,59250,59251,59252,59253,59254,59255,59256,59257,59258,59259,59260,58950,58951,58952,58953,58954,58955,58956,58957,58958,58959,58960,58961,58962,58963,58964,58965,58966,58967,58968,58969,58970,58971,58972,58973,58974,58975,58976,58977,58978,58979,58980,58981,58982,58983,58984,58985,58986,58987,58988,58989,58990,58991,58992,58993,58994,58995,58996,58997,58998,58999,59000,59001,59002,59003,59004,59005,59006,59007,59008,59009,59010,59011,59012,59013,59014,59015,59016,59017,59018,59019,59020,59021,59022,59023,59024,59025,59026,59027,59028,59029,59030,59031,59032,59033,59034,59035,59036,59037,59038,59039,59040,59041,59042,59043,59044,59045,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,59261,59262,59263,59264,59265,59266,59267,59268,59046,59047,59048,59049,59050,59051,59052,59053,59054,59055,59056,59057,59058,59059,59060,59061,59062,59063,59064,59065,59066,59067,59068,59069,59070,59071,59072,59073,59074,59075,59076,59077,59078,59079,59080,59081,59082,59083,59084,59085,59086,59087,59088,59089,59090,59091,59092,59093,59094,59095,59096,59097,59098,59099,59100,59101,59102,59103,59104,59105,59106,59107,59108,59109,59110,59111,59112,59113,59114,59115,59116,59117,59118,59119,59120,59121,59122,59123,59124,59125,59126,59127,59128,59129,59130,59131,59132,59133,59134,59135,59136,59137,59138,59139,59140,59141,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,59269,59270,59271,59272,59273,59274,59275,59276,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,59277,59278,59279,59280,59281,59282,59283,65077,65078,65081,65082,65087,65088,65085,65086,65089,65090,65091,65092,59284,59285,65083,65084,65079,65080,65073,59286,65075,65076,59287,59288,59289,59290,59291,59292,59293,59294,59295,59142,59143,59144,59145,59146,59147,59148,59149,59150,59151,59152,59153,59154,59155,59156,59157,59158,59159,59160,59161,59162,59163,59164,59165,59166,59167,59168,59169,59170,59171,59172,59173,59174,59175,59176,59177,59178,59179,59180,59181,59182,59183,59184,59185,59186,59187,59188,59189,59190,59191,59192,59193,59194,59195,59196,59197,59198,59199,59200,59201,59202,59203,59204,59205,59206,59207,59208,59209,59210,59211,59212,59213,59214,59215,59216,59217,59218,59219,59220,59221,59222,59223,59224,59225,59226,59227,59228,59229,59230,59231,59232,59233,59234,59235,59236,59237,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,59296,59297,59298,59299,59300,59301,59302,59303,59304,59305,59306,59307,59308,59309,59310,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,59311,59312,59313,59314,59315,59316,59317,59318,59319,59320,59321,59322,59323,714,715,729,8211,8213,8229,8245,8453,8457,8598,8599,8600,8601,8725,8735,8739,8786,8806,8807,8895,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9581,9582,9583,9584,9585,9586,9587,9601,9602,9603,9604,9605,9606,9607,9608,9609,9610,9611,9612,9613,9614,9615,9619,9620,9621,9660,9661,9698,9699,9700,9701,9737,8853,12306,12317,12318,59324,59325,59326,59327,59328,59329,59330,59331,59332,59333,59334,257,225,462,224,275,233,283,232,299,237,464,236,333,243,466,242,363,250,468,249,470,472,474,476,252,234,593,7743,324,328,505,609,59337,59338,59339,59340,12549,12550,12551,12552,12553,12554,12555,12556,12557,12558,12559,12560,12561,12562,12563,12564,12565,12566,12567,12568,12569,12570,12571,12572,12573,12574,12575,12576,12577,12578,12579,12580,12581,12582,12583,12584,12585,59341,59342,59343,59344,59345,59346,59347,59348,59349,59350,59351,59352,59353,59354,59355,59356,59357,59358,59359,59360,59361,12321,12322,12323,12324,12325,12326,12327,12328,12329,12963,13198,13199,13212,13213,13214,13217,13252,13262,13265,13266,13269,65072,65506,65508,59362,8481,12849,59363,8208,59364,59365,59366,12540,12443,12444,12541,12542,12294,12445,12446,65097,65098,65099,65100,65101,65102,65103,65104,65105,65106,65108,65109,65110,65111,65113,65114,65115,65116,65117,65118,65119,65120,65121,65122,65123,65124,65125,65126,65128,65129,65130,65131,12350,12272,12273,12274,12275,12276,12277,12278,12279,12280,12281,12282,12283,12295,59380,59381,59382,59383,59384,59385,59386,59387,59388,59389,59390,59391,59392,9472,9473,9474,9475,9476,9477,9478,9479,9480,9481,9482,9483,9484,9485,9486,9487,9488,9489,9490,9491,9492,9493,9494,9495,9496,9497,9498,9499,9500,9501,9502,9503,9504,9505,9506,9507,9508,9509,9510,9511,9512,9513,9514,9515,9516,9517,9518,9519,9520,9521,9522,9523,9524,9525,9526,9527,9528,9529,9530,9531,9532,9533,9534,9535,9536,9537,9538,9539,9540,9541,9542,9543,9544,9545,9546,9547,59393,59394,59395,59396,59397,59398,59399,59400,59401,59402,59403,59404,59405,59406,59407,29404,29405,29407,29410,29411,29412,29413,29414,29415,29418,29419,29429,29430,29433,29437,29438,29439,29440,29442,29444,29445,29446,29447,29448,29449,29451,29452,29453,29455,29456,29457,29458,29460,29464,29465,29466,29471,29472,29475,29476,29478,29479,29480,29485,29487,29488,29490,29491,29493,29494,29498,29499,29500,29501,29504,29505,29506,29507,29508,29509,29510,29511,29512,29513,29514,29515,29516,29518,29519,29521,29523,29524,29525,29526,29528,29529,29530,29531,29532,29533,29534,29535,29537,29538,29539,29540,29541,29542,29543,29544,29545,29546,29547,29550,29552,29553,57344,57345,57346,57347,57348,57349,57350,57351,57352,57353,57354,57355,57356,57357,57358,57359,57360,57361,57362,57363,57364,57365,57366,57367,57368,57369,57370,57371,57372,57373,57374,57375,57376,57377,57378,57379,57380,57381,57382,57383,57384,57385,57386,57387,57388,57389,57390,57391,57392,57393,57394,57395,57396,57397,57398,57399,57400,57401,57402,57403,57404,57405,57406,57407,57408,57409,57410,57411,57412,57413,57414,57415,57416,57417,57418,57419,57420,57421,57422,57423,57424,57425,57426,57427,57428,57429,57430,57431,57432,57433,57434,57435,57436,57437,29554,29555,29556,29557,29558,29559,29560,29561,29562,29563,29564,29565,29567,29568,29569,29570,29571,29573,29574,29576,29578,29580,29581,29583,29584,29586,29587,29588,29589,29591,29592,29593,29594,29596,29597,29598,29600,29601,29603,29604,29605,29606,29607,29608,29610,29612,29613,29617,29620,29621,29622,29624,29625,29628,29629,29630,29631,29633,29635,29636,29637,29638,29639,29643,29644,29646,29650,29651,29652,29653,29654,29655,29656,29658,29659,29660,29661,29663,29665,29666,29667,29668,29670,29672,29674,29675,29676,29678,29679,29680,29681,29683,29684,29685,29686,29687,57438,57439,57440,57441,57442,57443,57444,57445,57446,57447,57448,57449,57450,57451,57452,57453,57454,57455,57456,57457,57458,57459,57460,57461,57462,57463,57464,57465,57466,57467,57468,57469,57470,57471,57472,57473,57474,57475,57476,57477,57478,57479,57480,57481,57482,57483,57484,57485,57486,57487,57488,57489,57490,57491,57492,57493,57494,57495,57496,57497,57498,57499,57500,57501,57502,57503,57504,57505,57506,57507,57508,57509,57510,57511,57512,57513,57514,57515,57516,57517,57518,57519,57520,57521,57522,57523,57524,57525,57526,57527,57528,57529,57530,57531,29688,29689,29690,29691,29692,29693,29694,29695,29696,29697,29698,29700,29703,29704,29707,29708,29709,29710,29713,29714,29715,29716,29717,29718,29719,29720,29721,29724,29725,29726,29727,29728,29729,29731,29732,29735,29737,29739,29741,29743,29745,29746,29751,29752,29753,29754,29755,29757,29758,29759,29760,29762,29763,29764,29765,29766,29767,29768,29769,29770,29771,29772,29773,29774,29775,29776,29777,29778,29779,29780,29782,29784,29789,29792,29793,29794,29795,29796,29797,29798,29799,29800,29801,29802,29803,29804,29806,29807,29809,29810,29811,29812,29813,29816,29817,29818,57532,57533,57534,57535,57536,57537,57538,57539,57540,57541,57542,57543,57544,57545,57546,57547,57548,57549,57550,57551,57552,57553,57554,57555,57556,57557,57558,57559,57560,57561,57562,57563,57564,57565,57566,57567,57568,57569,57570,57571,57572,57573,57574,57575,57576,57577,57578,57579,57580,57581,57582,57583,57584,57585,57586,57587,57588,57589,57590,57591,57592,57593,57594,57595,57596,57597,57598,57599,57600,57601,57602,57603,57604,57605,57606,57607,57608,57609,57610,57611,57612,57613,57614,57615,57616,57617,57618,57619,57620,57621,57622,57623,57624,57625,29819,29820,29821,29823,29826,29828,29829,29830,29832,29833,29834,29836,29837,29839,29841,29842,29843,29844,29845,29846,29847,29848,29849,29850,29851,29853,29855,29856,29857,29858,29859,29860,29861,29862,29866,29867,29868,29869,29870,29871,29872,29873,29874,29875,29876,29877,29878,29879,29880,29881,29883,29884,29885,29886,29887,29888,29889,29890,29891,29892,29893,29894,29895,29896,29897,29898,29899,29900,29901,29902,29903,29904,29905,29907,29908,29909,29910,29911,29912,29913,29914,29915,29917,29919,29921,29925,29927,29928,29929,29930,29931,29932,29933,29936,29937,29938,57626,57627,57628,57629,57630,57631,57632,57633,57634,57635,57636,57637,57638,57639,57640,57641,57642,57643,57644,57645,57646,57647,57648,57649,57650,57651,57652,57653,57654,57655,57656,57657,57658,57659,57660,57661,57662,57663,57664,57665,57666,57667,57668,57669,57670,57671,57672,57673,57674,57675,57676,57677,57678,57679,57680,57681,57682,57683,57684,57685,57686,57687,57688,57689,57690,57691,57692,57693,57694,57695,57696,57697,57698,57699,57700,57701,57702,57703,57704,57705,57706,57707,57708,57709,57710,57711,57712,57713,57714,57715,57716,57717,57718,57719,29939,29941,29944,29945,29946,29947,29948,29949,29950,29952,29953,29954,29955,29957,29958,29959,29960,29961,29962,29963,29964,29966,29968,29970,29972,29973,29974,29975,29979,29981,29982,29984,29985,29986,29987,29988,29990,29991,29994,29998,30004,30006,30009,30012,30013,30015,30017,30018,30019,30020,30022,30023,30025,30026,30029,30032,30033,30034,30035,30037,30038,30039,30040,30045,30046,30047,30048,30049,30050,30051,30052,30055,30056,30057,30059,30060,30061,30062,30063,30064,30065,30067,30069,30070,30071,30074,30075,30076,30077,30078,30080,30081,30082,30084,30085,30087,57720,57721,57722,57723,57724,57725,57726,57727,57728,57729,57730,57731,57732,57733,57734,57735,57736,57737,57738,57739,57740,57741,57742,57743,57744,57745,57746,57747,57748,57749,57750,57751,57752,57753,57754,57755,57756,57757,57758,57759,57760,57761,57762,57763,57764,57765,57766,57767,57768,57769,57770,57771,57772,57773,57774,57775,57776,57777,57778,57779,57780,57781,57782,57783,57784,57785,57786,57787,57788,57789,57790,57791,57792,57793,57794,57795,57796,57797,57798,57799,57800,57801,57802,57803,57804,57805,57806,57807,57808,57809,57810,57811,57812,57813,30088,30089,30090,30092,30093,30094,30096,30099,30101,30104,30107,30108,30110,30114,30118,30119,30120,30121,30122,30125,30134,30135,30138,30139,30143,30144,30145,30150,30155,30156,30158,30159,30160,30161,30163,30167,30169,30170,30172,30173,30175,30176,30177,30181,30185,30188,30189,30190,30191,30194,30195,30197,30198,30199,30200,30202,30203,30205,30206,30210,30212,30214,30215,30216,30217,30219,30221,30222,30223,30225,30226,30227,30228,30230,30234,30236,30237,30238,30241,30243,30247,30248,30252,30254,30255,30257,30258,30262,30263,30265,30266,30267,30269,30273,30274,30276,57814,57815,57816,57817,57818,57819,57820,57821,57822,57823,57824,57825,57826,57827,57828,57829,57830,57831,57832,57833,57834,57835,57836,57837,57838,57839,57840,57841,57842,57843,57844,57845,57846,57847,57848,57849,57850,57851,57852,57853,57854,57855,57856,57857,57858,57859,57860,57861,57862,57863,57864,57865,57866,57867,57868,57869,57870,57871,57872,57873,57874,57875,57876,57877,57878,57879,57880,57881,57882,57883,57884,57885,57886,57887,57888,57889,57890,57891,57892,57893,57894,57895,57896,57897,57898,57899,57900,57901,57902,57903,57904,57905,57906,57907,30277,30278,30279,30280,30281,30282,30283,30286,30287,30288,30289,30290,30291,30293,30295,30296,30297,30298,30299,30301,30303,30304,30305,30306,30308,30309,30310,30311,30312,30313,30314,30316,30317,30318,30320,30321,30322,30323,30324,30325,30326,30327,30329,30330,30332,30335,30336,30337,30339,30341,30345,30346,30348,30349,30351,30352,30354,30356,30357,30359,30360,30362,30363,30364,30365,30366,30367,30368,30369,30370,30371,30373,30374,30375,30376,30377,30378,30379,30380,30381,30383,30384,30387,30389,30390,30391,30392,30393,30394,30395,30396,30397,30398,30400,30401,30403,21834,38463,22467,25384,21710,21769,21696,30353,30284,34108,30702,33406,30861,29233,38552,38797,27688,23433,20474,25353,26263,23736,33018,26696,32942,26114,30414,20985,25942,29100,32753,34948,20658,22885,25034,28595,33453,25420,25170,21485,21543,31494,20843,30116,24052,25300,36299,38774,25226,32793,22365,38712,32610,29240,30333,26575,30334,25670,20336,36133,25308,31255,26001,29677,25644,25203,33324,39041,26495,29256,25198,25292,20276,29923,21322,21150,32458,37030,24110,26758,27036,33152,32465,26834,30917,34444,38225,20621,35876,33502,32990,21253,35090,21093,30404,30407,30409,30411,30412,30419,30421,30425,30426,30428,30429,30430,30432,30433,30434,30435,30436,30438,30439,30440,30441,30442,30443,30444,30445,30448,30451,30453,30454,30455,30458,30459,30461,30463,30464,30466,30467,30469,30470,30474,30476,30478,30479,30480,30481,30482,30483,30484,30485,30486,30487,30488,30491,30492,30493,30494,30497,30499,30500,30501,30503,30506,30507,30508,30510,30512,30513,30514,30515,30516,30521,30523,30525,30526,30527,30530,30532,30533,30534,30536,30537,30538,30539,30540,30541,30542,30543,30546,30547,30548,30549,30550,30551,30552,30553,30556,34180,38649,20445,22561,39281,23453,25265,25253,26292,35961,40077,29190,26479,30865,24754,21329,21271,36744,32972,36125,38049,20493,29384,22791,24811,28953,34987,22868,33519,26412,31528,23849,32503,29997,27893,36454,36856,36924,40763,27604,37145,31508,24444,30887,34006,34109,27605,27609,27606,24065,24199,30201,38381,25949,24330,24517,36767,22721,33218,36991,38491,38829,36793,32534,36140,25153,20415,21464,21342,36776,36777,36779,36941,26631,24426,33176,34920,40150,24971,21035,30250,24428,25996,28626,28392,23486,25672,20853,20912,26564,19993,31177,39292,28851,30557,30558,30559,30560,30564,30567,30569,30570,30573,30574,30575,30576,30577,30578,30579,30580,30581,30582,30583,30584,30586,30587,30588,30593,30594,30595,30598,30599,30600,30601,30602,30603,30607,30608,30611,30612,30613,30614,30615,30616,30617,30618,30619,30620,30621,30622,30625,30627,30628,30630,30632,30635,30637,30638,30639,30641,30642,30644,30646,30647,30648,30649,30650,30652,30654,30656,30657,30658,30659,30660,30661,30662,30663,30664,30665,30666,30667,30668,30670,30671,30672,30673,30674,30675,30676,30677,30678,30680,30681,30682,30685,30686,30687,30688,30689,30692,30149,24182,29627,33760,25773,25320,38069,27874,21338,21187,25615,38082,31636,20271,24091,33334,33046,33162,28196,27850,39539,25429,21340,21754,34917,22496,19981,24067,27493,31807,37096,24598,25830,29468,35009,26448,25165,36130,30572,36393,37319,24425,33756,34081,39184,21442,34453,27531,24813,24808,28799,33485,33329,20179,27815,34255,25805,31961,27133,26361,33609,21397,31574,20391,20876,27979,23618,36461,25554,21449,33580,33590,26597,30900,25661,23519,23700,24046,35815,25286,26612,35962,25600,25530,34633,39307,35863,32544,38130,20135,38416,39076,26124,29462,30694,30696,30698,30703,30704,30705,30706,30708,30709,30711,30713,30714,30715,30716,30723,30724,30725,30726,30727,30728,30730,30731,30734,30735,30736,30739,30741,30745,30747,30750,30752,30753,30754,30756,30760,30762,30763,30766,30767,30769,30770,30771,30773,30774,30781,30783,30785,30786,30787,30788,30790,30792,30793,30794,30795,30797,30799,30801,30803,30804,30808,30809,30810,30811,30812,30814,30815,30816,30817,30818,30819,30820,30821,30822,30823,30824,30825,30831,30832,30833,30834,30835,30836,30837,30838,30840,30841,30842,30843,30845,30846,30847,30848,30849,30850,30851,22330,23581,24120,38271,20607,32928,21378,25950,30021,21809,20513,36229,25220,38046,26397,22066,28526,24034,21557,28818,36710,25199,25764,25507,24443,28552,37108,33251,36784,23576,26216,24561,27785,38472,36225,34924,25745,31216,22478,27225,25104,21576,20056,31243,24809,28548,35802,25215,36894,39563,31204,21507,30196,25345,21273,27744,36831,24347,39536,32827,40831,20360,23610,36196,32709,26021,28861,20805,20914,34411,23815,23456,25277,37228,30068,36364,31264,24833,31609,20167,32504,30597,19985,33261,21021,20986,27249,21416,36487,38148,38607,28353,38500,26970,30852,30853,30854,30856,30858,30859,30863,30864,30866,30868,30869,30870,30873,30877,30878,30880,30882,30884,30886,30888,30889,30890,30891,30892,30893,30894,30895,30901,30902,30903,30904,30906,30907,30908,30909,30911,30912,30914,30915,30916,30918,30919,30920,30924,30925,30926,30927,30929,30930,30931,30934,30935,30936,30938,30939,30940,30941,30942,30943,30944,30945,30946,30947,30948,30949,30950,30951,30953,30954,30955,30957,30958,30959,30960,30961,30963,30965,30966,30968,30969,30971,30972,30973,30974,30975,30976,30978,30979,30980,30982,30983,30984,30985,30986,30987,30988,30784,20648,30679,25616,35302,22788,25571,24029,31359,26941,20256,33337,21912,20018,30126,31383,24162,24202,38383,21019,21561,28810,25462,38180,22402,26149,26943,37255,21767,28147,32431,34850,25139,32496,30133,33576,30913,38604,36766,24904,29943,35789,27492,21050,36176,27425,32874,33905,22257,21254,20174,19995,20945,31895,37259,31751,20419,36479,31713,31388,25703,23828,20652,33030,30209,31929,28140,32736,26449,23384,23544,30923,25774,25619,25514,25387,38169,25645,36798,31572,30249,25171,22823,21574,27513,20643,25140,24102,27526,20195,36151,34955,24453,36910,30989,30990,30991,30992,30993,30994,30996,30997,30998,30999,31000,31001,31002,31003,31004,31005,31007,31008,31009,31010,31011,31013,31014,31015,31016,31017,31018,31019,31020,31021,31022,31023,31024,31025,31026,31027,31029,31030,31031,31032,31033,31037,31039,31042,31043,31044,31045,31047,31050,31051,31052,31053,31054,31055,31056,31057,31058,31060,31061,31064,31065,31073,31075,31076,31078,31081,31082,31083,31084,31086,31088,31089,31090,31091,31092,31093,31094,31097,31099,31100,31101,31102,31103,31106,31107,31110,31111,31112,31113,31115,31116,31117,31118,31120,31121,31122,24608,32829,25285,20025,21333,37112,25528,32966,26086,27694,20294,24814,28129,35806,24377,34507,24403,25377,20826,33633,26723,20992,25443,36424,20498,23707,31095,23548,21040,31291,24764,36947,30423,24503,24471,30340,36460,28783,30331,31561,30634,20979,37011,22564,20302,28404,36842,25932,31515,29380,28068,32735,23265,25269,24213,22320,33922,31532,24093,24351,36882,32532,39072,25474,28359,30872,28857,20856,38747,22443,30005,20291,30008,24215,24806,22880,28096,27583,30857,21500,38613,20939,20993,25481,21514,38035,35843,36300,29241,30879,34678,36845,35853,21472,31123,31124,31125,31126,31127,31128,31129,31131,31132,31133,31134,31135,31136,31137,31138,31139,31140,31141,31142,31144,31145,31146,31147,31148,31149,31150,31151,31152,31153,31154,31156,31157,31158,31159,31160,31164,31167,31170,31172,31173,31175,31176,31178,31180,31182,31183,31184,31187,31188,31190,31191,31193,31194,31195,31196,31197,31198,31200,31201,31202,31205,31208,31210,31212,31214,31217,31218,31219,31220,31221,31222,31223,31225,31226,31228,31230,31231,31233,31236,31237,31239,31240,31241,31242,31244,31247,31248,31249,31250,31251,31253,31254,31256,31257,31259,31260,19969,30447,21486,38025,39030,40718,38189,23450,35746,20002,19996,20908,33891,25026,21160,26635,20375,24683,20923,27934,20828,25238,26007,38497,35910,36887,30168,37117,30563,27602,29322,29420,35835,22581,30585,36172,26460,38208,32922,24230,28193,22930,31471,30701,38203,27573,26029,32526,22534,20817,38431,23545,22697,21544,36466,25958,39039,22244,38045,30462,36929,25479,21702,22810,22842,22427,36530,26421,36346,33333,21057,24816,22549,34558,23784,40517,20420,39069,35769,23077,24694,21380,25212,36943,37122,39295,24681,32780,20799,32819,23572,39285,27953,20108,31261,31263,31265,31266,31268,31269,31270,31271,31272,31273,31274,31275,31276,31277,31278,31279,31280,31281,31282,31284,31285,31286,31288,31290,31294,31296,31297,31298,31299,31300,31301,31303,31304,31305,31306,31307,31308,31309,31310,31311,31312,31314,31315,31316,31317,31318,31320,31321,31322,31323,31324,31325,31326,31327,31328,31329,31330,31331,31332,31333,31334,31335,31336,31337,31338,31339,31340,31341,31342,31343,31345,31346,31347,31349,31355,31356,31357,31358,31362,31365,31367,31369,31370,31371,31372,31374,31375,31376,31379,31380,31385,31386,31387,31390,31393,31394,36144,21457,32602,31567,20240,20047,38400,27861,29648,34281,24070,30058,32763,27146,30718,38034,32321,20961,28902,21453,36820,33539,36137,29359,39277,27867,22346,33459,26041,32938,25151,38450,22952,20223,35775,32442,25918,33778,38750,21857,39134,32933,21290,35837,21536,32954,24223,27832,36153,33452,37210,21545,27675,20998,32439,22367,28954,27774,31881,22859,20221,24575,24868,31914,20016,23553,26539,34562,23792,38155,39118,30127,28925,36898,20911,32541,35773,22857,20964,20315,21542,22827,25975,32932,23413,25206,25282,36752,24133,27679,31526,20239,20440,26381,31395,31396,31399,31401,31402,31403,31406,31407,31408,31409,31410,31412,31413,31414,31415,31416,31417,31418,31419,31420,31421,31422,31424,31425,31426,31427,31428,31429,31430,31431,31432,31433,31434,31436,31437,31438,31439,31440,31441,31442,31443,31444,31445,31447,31448,31450,31451,31452,31453,31457,31458,31460,31463,31464,31465,31466,31467,31468,31470,31472,31473,31474,31475,31476,31477,31478,31479,31480,31483,31484,31486,31488,31489,31490,31493,31495,31497,31500,31501,31502,31504,31506,31507,31510,31511,31512,31514,31516,31517,31519,31521,31522,31523,31527,31529,31533,28014,28074,31119,34993,24343,29995,25242,36741,20463,37340,26023,33071,33105,24220,33104,36212,21103,35206,36171,22797,20613,20184,38428,29238,33145,36127,23500,35747,38468,22919,32538,21648,22134,22030,35813,25913,27010,38041,30422,28297,24178,29976,26438,26577,31487,32925,36214,24863,31174,25954,36195,20872,21018,38050,32568,32923,32434,23703,28207,26464,31705,30347,39640,33167,32660,31957,25630,38224,31295,21578,21733,27468,25601,25096,40509,33011,30105,21106,38761,33883,26684,34532,38401,38548,38124,20010,21508,32473,26681,36319,32789,26356,24218,32697,31535,31536,31538,31540,31541,31542,31543,31545,31547,31549,31551,31552,31553,31554,31555,31556,31558,31560,31562,31565,31566,31571,31573,31575,31577,31580,31582,31583,31585,31587,31588,31589,31590,31591,31592,31593,31594,31595,31596,31597,31599,31600,31603,31604,31606,31608,31610,31612,31613,31615,31617,31618,31619,31620,31622,31623,31624,31625,31626,31627,31628,31630,31631,31633,31634,31635,31638,31640,31641,31642,31643,31646,31647,31648,31651,31652,31653,31662,31663,31664,31666,31667,31669,31670,31671,31673,31674,31675,31676,31677,31678,31679,31680,31682,31683,31684,22466,32831,26775,24037,25915,21151,24685,40858,20379,36524,20844,23467,24339,24041,27742,25329,36129,20849,38057,21246,27807,33503,29399,22434,26500,36141,22815,36764,33735,21653,31629,20272,27837,23396,22993,40723,21476,34506,39592,35895,32929,25925,39038,22266,38599,21038,29916,21072,23521,25346,35074,20054,25296,24618,26874,20851,23448,20896,35266,31649,39302,32592,24815,28748,36143,20809,24191,36891,29808,35268,22317,30789,24402,40863,38394,36712,39740,35809,30328,26690,26588,36330,36149,21053,36746,28378,26829,38149,37101,22269,26524,35065,36807,21704,31685,31688,31689,31690,31691,31693,31694,31695,31696,31698,31700,31701,31702,31703,31704,31707,31708,31710,31711,31712,31714,31715,31716,31719,31720,31721,31723,31724,31725,31727,31728,31730,31731,31732,31733,31734,31736,31737,31738,31739,31741,31743,31744,31745,31746,31747,31748,31749,31750,31752,31753,31754,31757,31758,31760,31761,31762,31763,31764,31765,31767,31768,31769,31770,31771,31772,31773,31774,31776,31777,31778,31779,31780,31781,31784,31785,31787,31788,31789,31790,31791,31792,31793,31794,31795,31796,31797,31798,31799,31801,31802,31803,31804,31805,31806,31810,39608,23401,28023,27686,20133,23475,39559,37219,25000,37039,38889,21547,28085,23506,20989,21898,32597,32752,25788,25421,26097,25022,24717,28938,27735,27721,22831,26477,33322,22741,22158,35946,27627,37085,22909,32791,21495,28009,21621,21917,33655,33743,26680,31166,21644,20309,21512,30418,35977,38402,27827,28088,36203,35088,40548,36154,22079,40657,30165,24456,29408,24680,21756,20136,27178,34913,24658,36720,21700,28888,34425,40511,27946,23439,24344,32418,21897,20399,29492,21564,21402,20505,21518,21628,20046,24573,29786,22774,33899,32993,34676,29392,31946,28246,31811,31812,31813,31814,31815,31816,31817,31818,31819,31820,31822,31823,31824,31825,31826,31827,31828,31829,31830,31831,31832,31833,31834,31835,31836,31837,31838,31839,31840,31841,31842,31843,31844,31845,31846,31847,31848,31849,31850,31851,31852,31853,31854,31855,31856,31857,31858,31861,31862,31863,31864,31865,31866,31870,31871,31872,31873,31874,31875,31876,31877,31878,31879,31880,31882,31883,31884,31885,31886,31887,31888,31891,31892,31894,31897,31898,31899,31904,31905,31907,31910,31911,31912,31913,31915,31916,31917,31919,31920,31924,31925,31926,31927,31928,31930,31931,24359,34382,21804,25252,20114,27818,25143,33457,21719,21326,29502,28369,30011,21010,21270,35805,27088,24458,24576,28142,22351,27426,29615,26707,36824,32531,25442,24739,21796,30186,35938,28949,28067,23462,24187,33618,24908,40644,30970,34647,31783,30343,20976,24822,29004,26179,24140,24653,35854,28784,25381,36745,24509,24674,34516,22238,27585,24724,24935,21321,24800,26214,36159,31229,20250,28905,27719,35763,35826,32472,33636,26127,23130,39746,27985,28151,35905,27963,20249,28779,33719,25110,24785,38669,36135,31096,20987,22334,22522,26426,30072,31293,31215,31637,31935,31936,31938,31939,31940,31942,31945,31947,31950,31951,31952,31953,31954,31955,31956,31960,31962,31963,31965,31966,31969,31970,31971,31972,31973,31974,31975,31977,31978,31979,31980,31981,31982,31984,31985,31986,31987,31988,31989,31990,31991,31993,31994,31996,31997,31998,31999,32000,32001,32002,32003,32004,32005,32006,32007,32008,32009,32011,32012,32013,32014,32015,32016,32017,32018,32019,32020,32021,32022,32023,32024,32025,32026,32027,32028,32029,32030,32031,32033,32035,32036,32037,32038,32040,32041,32042,32044,32045,32046,32048,32049,32050,32051,32052,32053,32054,32908,39269,36857,28608,35749,40481,23020,32489,32521,21513,26497,26840,36753,31821,38598,21450,24613,30142,27762,21363,23241,32423,25380,20960,33034,24049,34015,25216,20864,23395,20238,31085,21058,24760,27982,23492,23490,35745,35760,26082,24524,38469,22931,32487,32426,22025,26551,22841,20339,23478,21152,33626,39050,36158,30002,38078,20551,31292,20215,26550,39550,23233,27516,30417,22362,23574,31546,38388,29006,20860,32937,33392,22904,32516,33575,26816,26604,30897,30839,25315,25441,31616,20461,21098,20943,33616,27099,37492,36341,36145,35265,38190,31661,20214,32055,32056,32057,32058,32059,32060,32061,32062,32063,32064,32065,32066,32067,32068,32069,32070,32071,32072,32073,32074,32075,32076,32077,32078,32079,32080,32081,32082,32083,32084,32085,32086,32087,32088,32089,32090,32091,32092,32093,32094,32095,32096,32097,32098,32099,32100,32101,32102,32103,32104,32105,32106,32107,32108,32109,32111,32112,32113,32114,32115,32116,32117,32118,32120,32121,32122,32123,32124,32125,32126,32127,32128,32129,32130,32131,32132,32133,32134,32135,32136,32137,32138,32139,32140,32141,32142,32143,32144,32145,32146,32147,32148,32149,32150,32151,32152,20581,33328,21073,39279,28176,28293,28071,24314,20725,23004,23558,27974,27743,30086,33931,26728,22870,35762,21280,37233,38477,34121,26898,30977,28966,33014,20132,37066,27975,39556,23047,22204,25605,38128,30699,20389,33050,29409,35282,39290,32564,32478,21119,25945,37237,36735,36739,21483,31382,25581,25509,30342,31224,34903,38454,25130,21163,33410,26708,26480,25463,30571,31469,27905,32467,35299,22992,25106,34249,33445,30028,20511,20171,30117,35819,23626,24062,31563,26020,37329,20170,27941,35167,32039,38182,20165,35880,36827,38771,26187,31105,36817,28908,28024,32153,32154,32155,32156,32157,32158,32159,32160,32161,32162,32163,32164,32165,32167,32168,32169,32170,32171,32172,32173,32175,32176,32177,32178,32179,32180,32181,32182,32183,32184,32185,32186,32187,32188,32189,32190,32191,32192,32193,32194,32195,32196,32197,32198,32199,32200,32201,32202,32203,32204,32205,32206,32207,32208,32209,32210,32211,32212,32213,32214,32215,32216,32217,32218,32219,32220,32221,32222,32223,32224,32225,32226,32227,32228,32229,32230,32231,32232,32233,32234,32235,32236,32237,32238,32239,32240,32241,32242,32243,32244,32245,32246,32247,32248,32249,32250,23613,21170,33606,20834,33550,30555,26230,40120,20140,24778,31934,31923,32463,20117,35686,26223,39048,38745,22659,25964,38236,24452,30153,38742,31455,31454,20928,28847,31384,25578,31350,32416,29590,38893,20037,28792,20061,37202,21417,25937,26087,33276,33285,21646,23601,30106,38816,25304,29401,30141,23621,39545,33738,23616,21632,30697,20030,27822,32858,25298,25454,24040,20855,36317,36382,38191,20465,21477,24807,28844,21095,25424,40515,23071,20518,30519,21367,32482,25733,25899,25225,25496,20500,29237,35273,20915,35776,32477,22343,33740,38055,20891,21531,23803,32251,32252,32253,32254,32255,32256,32257,32258,32259,32260,32261,32262,32263,32264,32265,32266,32267,32268,32269,32270,32271,32272,32273,32274,32275,32276,32277,32278,32279,32280,32281,32282,32283,32284,32285,32286,32287,32288,32289,32290,32291,32292,32293,32294,32295,32296,32297,32298,32299,32300,32301,32302,32303,32304,32305,32306,32307,32308,32309,32310,32311,32312,32313,32314,32316,32317,32318,32319,32320,32322,32323,32324,32325,32326,32328,32329,32330,32331,32332,32333,32334,32335,32336,32337,32338,32339,32340,32341,32342,32343,32344,32345,32346,32347,32348,32349,20426,31459,27994,37089,39567,21888,21654,21345,21679,24320,25577,26999,20975,24936,21002,22570,21208,22350,30733,30475,24247,24951,31968,25179,25239,20130,28821,32771,25335,28900,38752,22391,33499,26607,26869,30933,39063,31185,22771,21683,21487,28212,20811,21051,23458,35838,32943,21827,22438,24691,22353,21549,31354,24656,23380,25511,25248,21475,25187,23495,26543,21741,31391,33510,37239,24211,35044,22840,22446,25358,36328,33007,22359,31607,20393,24555,23485,27454,21281,31568,29378,26694,30719,30518,26103,20917,20111,30420,23743,31397,33909,22862,39745,20608,32350,32351,32352,32353,32354,32355,32356,32357,32358,32359,32360,32361,32362,32363,32364,32365,32366,32367,32368,32369,32370,32371,32372,32373,32374,32375,32376,32377,32378,32379,32380,32381,32382,32383,32384,32385,32387,32388,32389,32390,32391,32392,32393,32394,32395,32396,32397,32398,32399,32400,32401,32402,32403,32404,32405,32406,32407,32408,32409,32410,32412,32413,32414,32430,32436,32443,32444,32470,32484,32492,32505,32522,32528,32542,32567,32569,32571,32572,32573,32574,32575,32576,32577,32579,32582,32583,32584,32585,32586,32587,32588,32589,32590,32591,32594,32595,39304,24871,28291,22372,26118,25414,22256,25324,25193,24275,38420,22403,25289,21895,34593,33098,36771,21862,33713,26469,36182,34013,23146,26639,25318,31726,38417,20848,28572,35888,25597,35272,25042,32518,28866,28389,29701,27028,29436,24266,37070,26391,28010,25438,21171,29282,32769,20332,23013,37226,28889,28061,21202,20048,38647,38253,34174,30922,32047,20769,22418,25794,32907,31867,27882,26865,26974,20919,21400,26792,29313,40654,31729,29432,31163,28435,29702,26446,37324,40100,31036,33673,33620,21519,26647,20029,21385,21169,30782,21382,21033,20616,20363,20432,32598,32601,32603,32604,32605,32606,32608,32611,32612,32613,32614,32615,32619,32620,32621,32623,32624,32627,32629,32630,32631,32632,32634,32635,32636,32637,32639,32640,32642,32643,32644,32645,32646,32647,32648,32649,32651,32653,32655,32656,32657,32658,32659,32661,32662,32663,32664,32665,32667,32668,32672,32674,32675,32677,32678,32680,32681,32682,32683,32684,32685,32686,32689,32691,32692,32693,32694,32695,32698,32699,32702,32704,32706,32707,32708,32710,32711,32712,32713,32715,32717,32719,32720,32721,32722,32723,32726,32727,32729,32730,32731,32732,32733,32734,32738,32739,30178,31435,31890,27813,38582,21147,29827,21737,20457,32852,33714,36830,38256,24265,24604,28063,24088,25947,33080,38142,24651,28860,32451,31918,20937,26753,31921,33391,20004,36742,37327,26238,20142,35845,25769,32842,20698,30103,29134,23525,36797,28518,20102,25730,38243,24278,26009,21015,35010,28872,21155,29454,29747,26519,30967,38678,20020,37051,40158,28107,20955,36161,21533,25294,29618,33777,38646,40836,38083,20278,32666,20940,28789,38517,23725,39046,21478,20196,28316,29705,27060,30827,39311,30041,21016,30244,27969,26611,20845,40857,32843,21657,31548,31423,32740,32743,32744,32746,32747,32748,32749,32751,32754,32756,32757,32758,32759,32760,32761,32762,32765,32766,32767,32770,32775,32776,32777,32778,32782,32783,32785,32787,32794,32795,32797,32798,32799,32801,32803,32804,32811,32812,32813,32814,32815,32816,32818,32820,32825,32826,32828,32830,32832,32833,32836,32837,32839,32840,32841,32846,32847,32848,32849,32851,32853,32854,32855,32857,32859,32860,32861,32862,32863,32864,32865,32866,32867,32868,32869,32870,32871,32872,32875,32876,32877,32878,32879,32880,32882,32883,32884,32885,32886,32887,32888,32889,32890,32891,32892,32893,38534,22404,25314,38471,27004,23044,25602,31699,28431,38475,33446,21346,39045,24208,28809,25523,21348,34383,40065,40595,30860,38706,36335,36162,40575,28510,31108,24405,38470,25134,39540,21525,38109,20387,26053,23653,23649,32533,34385,27695,24459,29575,28388,32511,23782,25371,23402,28390,21365,20081,25504,30053,25249,36718,20262,20177,27814,32438,35770,33821,34746,32599,36923,38179,31657,39585,35064,33853,27931,39558,32476,22920,40635,29595,30721,34434,39532,39554,22043,21527,22475,20080,40614,21334,36808,33033,30610,39314,34542,28385,34067,26364,24930,28459,32894,32897,32898,32901,32904,32906,32909,32910,32911,32912,32913,32914,32916,32917,32919,32921,32926,32931,32934,32935,32936,32940,32944,32947,32949,32950,32952,32953,32955,32965,32967,32968,32969,32970,32971,32975,32976,32977,32978,32979,32980,32981,32984,32991,32992,32994,32995,32998,33006,33013,33015,33017,33019,33022,33023,33024,33025,33027,33028,33029,33031,33032,33035,33036,33045,33047,33049,33051,33052,33053,33055,33056,33057,33058,33059,33060,33061,33062,33063,33064,33065,33066,33067,33069,33070,33072,33075,33076,33077,33079,33081,33082,33083,33084,33085,33087,35881,33426,33579,30450,27667,24537,33725,29483,33541,38170,27611,30683,38086,21359,33538,20882,24125,35980,36152,20040,29611,26522,26757,37238,38665,29028,27809,30473,23186,38209,27599,32654,26151,23504,22969,23194,38376,38391,20204,33804,33945,27308,30431,38192,29467,26790,23391,30511,37274,38753,31964,36855,35868,24357,31859,31192,35269,27852,34588,23494,24130,26825,30496,32501,20885,20813,21193,23081,32517,38754,33495,25551,30596,34256,31186,28218,24217,22937,34065,28781,27665,25279,30399,25935,24751,38397,26126,34719,40483,38125,21517,21629,35884,25720,33088,33089,33090,33091,33092,33093,33095,33097,33101,33102,33103,33106,33110,33111,33112,33115,33116,33117,33118,33119,33121,33122,33123,33124,33126,33128,33130,33131,33132,33135,33138,33139,33141,33142,33143,33144,33153,33155,33156,33157,33158,33159,33161,33163,33164,33165,33166,33168,33170,33171,33172,33173,33174,33175,33177,33178,33182,33183,33184,33185,33186,33188,33189,33191,33193,33195,33196,33197,33198,33199,33200,33201,33202,33204,33205,33206,33207,33208,33209,33212,33213,33214,33215,33220,33221,33223,33224,33225,33227,33229,33230,33231,33232,33233,33234,33235,25721,34321,27169,33180,30952,25705,39764,25273,26411,33707,22696,40664,27819,28448,23518,38476,35851,29279,26576,25287,29281,20137,22982,27597,22675,26286,24149,21215,24917,26408,30446,30566,29287,31302,25343,21738,21584,38048,37027,23068,32435,27670,20035,22902,32784,22856,21335,30007,38590,22218,25376,33041,24700,38393,28118,21602,39297,20869,23273,33021,22958,38675,20522,27877,23612,25311,20320,21311,33147,36870,28346,34091,25288,24180,30910,25781,25467,24565,23064,37247,40479,23615,25423,32834,23421,21870,38218,38221,28037,24744,26592,29406,20957,23425,33236,33237,33238,33239,33240,33241,33242,33243,33244,33245,33246,33247,33248,33249,33250,33252,33253,33254,33256,33257,33259,33262,33263,33264,33265,33266,33269,33270,33271,33272,33273,33274,33277,33279,33283,33287,33288,33289,33290,33291,33294,33295,33297,33299,33301,33302,33303,33304,33305,33306,33309,33312,33316,33317,33318,33319,33321,33326,33330,33338,33340,33341,33343,33344,33345,33346,33347,33349,33350,33352,33354,33356,33357,33358,33360,33361,33362,33363,33364,33365,33366,33367,33369,33371,33372,33373,33374,33376,33377,33378,33379,33380,33381,33382,33383,33385,25319,27870,29275,25197,38062,32445,33043,27987,20892,24324,22900,21162,24594,22899,26262,34384,30111,25386,25062,31983,35834,21734,27431,40485,27572,34261,21589,20598,27812,21866,36276,29228,24085,24597,29750,25293,25490,29260,24472,28227,27966,25856,28504,30424,30928,30460,30036,21028,21467,20051,24222,26049,32810,32982,25243,21638,21032,28846,34957,36305,27873,21624,32986,22521,35060,36180,38506,37197,20329,27803,21943,30406,30768,25256,28921,28558,24429,34028,26842,30844,31735,33192,26379,40527,25447,30896,22383,30738,38713,25209,25259,21128,29749,27607,33386,33387,33388,33389,33393,33397,33398,33399,33400,33403,33404,33408,33409,33411,33413,33414,33415,33417,33420,33424,33427,33428,33429,33430,33434,33435,33438,33440,33442,33443,33447,33458,33461,33462,33466,33467,33468,33471,33472,33474,33475,33477,33478,33481,33488,33494,33497,33498,33501,33506,33511,33512,33513,33514,33516,33517,33518,33520,33522,33523,33525,33526,33528,33530,33532,33533,33534,33535,33536,33546,33547,33549,33552,33554,33555,33558,33560,33561,33565,33566,33567,33568,33569,33570,33571,33572,33573,33574,33577,33578,33582,33584,33586,33591,33595,33597,21860,33086,30130,30382,21305,30174,20731,23617,35692,31687,20559,29255,39575,39128,28418,29922,31080,25735,30629,25340,39057,36139,21697,32856,20050,22378,33529,33805,24179,20973,29942,35780,23631,22369,27900,39047,23110,30772,39748,36843,31893,21078,25169,38138,20166,33670,33889,33769,33970,22484,26420,22275,26222,28006,35889,26333,28689,26399,27450,26646,25114,22971,19971,20932,28422,26578,27791,20854,26827,22855,27495,30054,23822,33040,40784,26071,31048,31041,39569,36215,23682,20062,20225,21551,22865,30732,22120,27668,36804,24323,27773,27875,35755,25488,33598,33599,33601,33602,33604,33605,33608,33610,33611,33612,33613,33614,33619,33621,33622,33623,33624,33625,33629,33634,33648,33649,33650,33651,33652,33653,33654,33657,33658,33662,33663,33664,33665,33666,33667,33668,33671,33672,33674,33675,33676,33677,33679,33680,33681,33684,33685,33686,33687,33689,33690,33693,33695,33697,33698,33699,33700,33701,33702,33703,33708,33709,33710,33711,33717,33723,33726,33727,33730,33731,33732,33734,33736,33737,33739,33741,33742,33744,33745,33746,33747,33749,33751,33753,33754,33755,33758,33762,33763,33764,33766,33767,33768,33771,33772,33773,24688,27965,29301,25190,38030,38085,21315,36801,31614,20191,35878,20094,40660,38065,38067,21069,28508,36963,27973,35892,22545,23884,27424,27465,26538,21595,33108,32652,22681,34103,24378,25250,27207,38201,25970,24708,26725,30631,20052,20392,24039,38808,25772,32728,23789,20431,31373,20999,33540,19988,24623,31363,38054,20405,20146,31206,29748,21220,33465,25810,31165,23517,27777,38738,36731,27682,20542,21375,28165,25806,26228,27696,24773,39031,35831,24198,29756,31351,31179,19992,37041,29699,27714,22234,37195,27845,36235,21306,34502,26354,36527,23624,39537,28192,33774,33775,33779,33780,33781,33782,33783,33786,33787,33788,33790,33791,33792,33794,33797,33799,33800,33801,33802,33808,33810,33811,33812,33813,33814,33815,33817,33818,33819,33822,33823,33824,33825,33826,33827,33833,33834,33835,33836,33837,33838,33839,33840,33842,33843,33844,33845,33846,33847,33849,33850,33851,33854,33855,33856,33857,33858,33859,33860,33861,33863,33864,33865,33866,33867,33868,33869,33870,33871,33872,33874,33875,33876,33877,33878,33880,33885,33886,33887,33888,33890,33892,33893,33894,33895,33896,33898,33902,33903,33904,33906,33908,33911,33913,33915,33916,21462,23094,40843,36259,21435,22280,39079,26435,37275,27849,20840,30154,25331,29356,21048,21149,32570,28820,30264,21364,40522,27063,30830,38592,35033,32676,28982,29123,20873,26579,29924,22756,25880,22199,35753,39286,25200,32469,24825,28909,22764,20161,20154,24525,38887,20219,35748,20995,22922,32427,25172,20173,26085,25102,33592,33993,33635,34701,29076,28342,23481,32466,20887,25545,26580,32905,33593,34837,20754,23418,22914,36785,20083,27741,20837,35109,36719,38446,34122,29790,38160,38384,28070,33509,24369,25746,27922,33832,33134,40131,22622,36187,19977,21441,33917,33918,33919,33920,33921,33923,33924,33925,33926,33930,33933,33935,33936,33937,33938,33939,33940,33941,33942,33944,33946,33947,33949,33950,33951,33952,33954,33955,33956,33957,33958,33959,33960,33961,33962,33963,33964,33965,33966,33968,33969,33971,33973,33974,33975,33979,33980,33982,33984,33986,33987,33989,33990,33991,33992,33995,33996,33998,33999,34002,34004,34005,34007,34008,34009,34010,34011,34012,34014,34017,34018,34020,34023,34024,34025,34026,34027,34029,34030,34031,34033,34034,34035,34036,34037,34038,34039,34040,34041,34042,34043,34045,34046,34048,34049,34050,20254,25955,26705,21971,20007,25620,39578,25195,23234,29791,33394,28073,26862,20711,33678,30722,26432,21049,27801,32433,20667,21861,29022,31579,26194,29642,33515,26441,23665,21024,29053,34923,38378,38485,25797,36193,33203,21892,27733,25159,32558,22674,20260,21830,36175,26188,19978,23578,35059,26786,25422,31245,28903,33421,21242,38902,23569,21736,37045,32461,22882,36170,34503,33292,33293,36198,25668,23556,24913,28041,31038,35774,30775,30003,21627,20280,36523,28145,23072,32453,31070,27784,23457,23158,29978,32958,24910,28183,22768,29983,29989,29298,21319,32499,34051,34052,34053,34054,34055,34056,34057,34058,34059,34061,34062,34063,34064,34066,34068,34069,34070,34072,34073,34075,34076,34077,34078,34080,34082,34083,34084,34085,34086,34087,34088,34089,34090,34093,34094,34095,34096,34097,34098,34099,34100,34101,34102,34110,34111,34112,34113,34114,34116,34117,34118,34119,34123,34124,34125,34126,34127,34128,34129,34130,34131,34132,34133,34135,34136,34138,34139,34140,34141,34143,34144,34145,34146,34147,34149,34150,34151,34153,34154,34155,34156,34157,34158,34159,34160,34161,34163,34165,34166,34167,34168,34172,34173,34175,34176,34177,30465,30427,21097,32988,22307,24072,22833,29422,26045,28287,35799,23608,34417,21313,30707,25342,26102,20160,39135,34432,23454,35782,21490,30690,20351,23630,39542,22987,24335,31034,22763,19990,26623,20107,25325,35475,36893,21183,26159,21980,22124,36866,20181,20365,37322,39280,27663,24066,24643,23460,35270,35797,25910,25163,39318,23432,23551,25480,21806,21463,30246,20861,34092,26530,26803,27530,25234,36755,21460,33298,28113,30095,20070,36174,23408,29087,34223,26257,26329,32626,34560,40653,40736,23646,26415,36848,26641,26463,25101,31446,22661,24246,25968,28465,34178,34179,34182,34184,34185,34186,34187,34188,34189,34190,34192,34193,34194,34195,34196,34197,34198,34199,34200,34201,34202,34205,34206,34207,34208,34209,34210,34211,34213,34214,34215,34217,34219,34220,34221,34225,34226,34227,34228,34229,34230,34232,34234,34235,34236,34237,34238,34239,34240,34242,34243,34244,34245,34246,34247,34248,34250,34251,34252,34253,34254,34257,34258,34260,34262,34263,34264,34265,34266,34267,34269,34270,34271,34272,34273,34274,34275,34277,34278,34279,34280,34282,34283,34284,34285,34286,34287,34288,34289,34290,34291,34292,34293,34294,34295,34296,24661,21047,32781,25684,34928,29993,24069,26643,25332,38684,21452,29245,35841,27700,30561,31246,21550,30636,39034,33308,35828,30805,26388,28865,26031,25749,22070,24605,31169,21496,19997,27515,32902,23546,21987,22235,20282,20284,39282,24051,26494,32824,24578,39042,36865,23435,35772,35829,25628,33368,25822,22013,33487,37221,20439,32032,36895,31903,20723,22609,28335,23487,35785,32899,37240,33948,31639,34429,38539,38543,32485,39635,30862,23681,31319,36930,38567,31071,23385,25439,31499,34001,26797,21766,32553,29712,32034,38145,25152,22604,20182,23427,22905,22612,34297,34298,34300,34301,34302,34304,34305,34306,34307,34308,34310,34311,34312,34313,34314,34315,34316,34317,34318,34319,34320,34322,34323,34324,34325,34327,34328,34329,34330,34331,34332,34333,34334,34335,34336,34337,34338,34339,34340,34341,34342,34344,34346,34347,34348,34349,34350,34351,34352,34353,34354,34355,34356,34357,34358,34359,34361,34362,34363,34365,34366,34367,34368,34369,34370,34371,34372,34373,34374,34375,34376,34377,34378,34379,34380,34386,34387,34389,34390,34391,34392,34393,34395,34396,34397,34399,34400,34401,34403,34404,34405,34406,34407,34408,34409,34410,29549,25374,36427,36367,32974,33492,25260,21488,27888,37214,22826,24577,27760,22349,25674,36138,30251,28393,22363,27264,30192,28525,35885,35848,22374,27631,34962,30899,25506,21497,28845,27748,22616,25642,22530,26848,33179,21776,31958,20504,36538,28108,36255,28907,25487,28059,28372,32486,33796,26691,36867,28120,38518,35752,22871,29305,34276,33150,30140,35466,26799,21076,36386,38161,25552,39064,36420,21884,20307,26367,22159,24789,28053,21059,23625,22825,28155,22635,30000,29980,24684,33300,33094,25361,26465,36834,30522,36339,36148,38081,24086,21381,21548,28867,34413,34415,34416,34418,34419,34420,34421,34422,34423,34424,34435,34436,34437,34438,34439,34440,34441,34446,34447,34448,34449,34450,34452,34454,34455,34456,34457,34458,34459,34462,34463,34464,34465,34466,34469,34470,34475,34477,34478,34482,34483,34487,34488,34489,34491,34492,34493,34494,34495,34497,34498,34499,34501,34504,34508,34509,34514,34515,34517,34518,34519,34522,34524,34525,34528,34529,34530,34531,34533,34534,34535,34536,34538,34539,34540,34543,34549,34550,34551,34554,34555,34556,34557,34559,34561,34564,34565,34566,34571,34572,34574,34575,34576,34577,34580,34582,27712,24311,20572,20141,24237,25402,33351,36890,26704,37230,30643,21516,38108,24420,31461,26742,25413,31570,32479,30171,20599,25237,22836,36879,20984,31171,31361,22270,24466,36884,28034,23648,22303,21520,20820,28237,22242,25512,39059,33151,34581,35114,36864,21534,23663,33216,25302,25176,33073,40501,38464,39534,39548,26925,22949,25299,21822,25366,21703,34521,27964,23043,29926,34972,27498,22806,35916,24367,28286,29609,39037,20024,28919,23436,30871,25405,26202,30358,24779,23451,23113,19975,33109,27754,29579,20129,26505,32593,24448,26106,26395,24536,22916,23041,34585,34587,34589,34591,34592,34596,34598,34599,34600,34602,34603,34604,34605,34607,34608,34610,34611,34613,34614,34616,34617,34618,34620,34621,34624,34625,34626,34627,34628,34629,34630,34634,34635,34637,34639,34640,34641,34642,34644,34645,34646,34648,34650,34651,34652,34653,34654,34655,34657,34658,34662,34663,34664,34665,34666,34667,34668,34669,34671,34673,34674,34675,34677,34679,34680,34681,34682,34687,34688,34689,34692,34694,34695,34697,34698,34700,34702,34703,34704,34705,34706,34708,34709,34710,34712,34713,34714,34715,34716,34717,34718,34720,34721,34722,34723,34724,24013,24494,21361,38886,36829,26693,22260,21807,24799,20026,28493,32500,33479,33806,22996,20255,20266,23614,32428,26410,34074,21619,30031,32963,21890,39759,20301,28205,35859,23561,24944,21355,30239,28201,34442,25991,38395,32441,21563,31283,32010,38382,21985,32705,29934,25373,34583,28065,31389,25105,26017,21351,25569,27779,24043,21596,38056,20044,27745,35820,23627,26080,33436,26791,21566,21556,27595,27494,20116,25410,21320,33310,20237,20398,22366,25098,38654,26212,29289,21247,21153,24735,35823,26132,29081,26512,35199,30802,30717,26224,22075,21560,38177,29306,34725,34726,34727,34729,34730,34734,34736,34737,34738,34740,34742,34743,34744,34745,34747,34748,34750,34751,34753,34754,34755,34756,34757,34759,34760,34761,34764,34765,34766,34767,34768,34772,34773,34774,34775,34776,34777,34778,34780,34781,34782,34783,34785,34786,34787,34788,34790,34791,34792,34793,34795,34796,34797,34799,34800,34801,34802,34803,34804,34805,34806,34807,34808,34810,34811,34812,34813,34815,34816,34817,34818,34820,34821,34822,34823,34824,34825,34827,34828,34829,34830,34831,34832,34833,34834,34836,34839,34840,34841,34842,34844,34845,34846,34847,34848,34851,31232,24687,24076,24713,33181,22805,24796,29060,28911,28330,27728,29312,27268,34989,24109,20064,23219,21916,38115,27927,31995,38553,25103,32454,30606,34430,21283,38686,36758,26247,23777,20384,29421,19979,21414,22799,21523,25472,38184,20808,20185,40092,32420,21688,36132,34900,33335,38386,28046,24358,23244,26174,38505,29616,29486,21439,33146,39301,32673,23466,38519,38480,32447,30456,21410,38262,39321,31665,35140,28248,20065,32724,31077,35814,24819,21709,20139,39033,24055,27233,20687,21521,35937,33831,30813,38660,21066,21742,22179,38144,28040,23477,28102,26195,34852,34853,34854,34855,34856,34857,34858,34859,34860,34861,34862,34863,34864,34865,34867,34868,34869,34870,34871,34872,34874,34875,34877,34878,34879,34881,34882,34883,34886,34887,34888,34889,34890,34891,34894,34895,34896,34897,34898,34899,34901,34902,34904,34906,34907,34908,34909,34910,34911,34912,34918,34919,34922,34925,34927,34929,34931,34932,34933,34934,34936,34937,34938,34939,34940,34944,34947,34950,34951,34953,34954,34956,34958,34959,34960,34961,34963,34964,34965,34967,34968,34969,34970,34971,34973,34974,34975,34976,34977,34979,34981,34982,34983,34984,34985,34986,23567,23389,26657,32918,21880,31505,25928,26964,20123,27463,34638,38795,21327,25375,25658,37034,26012,32961,35856,20889,26800,21368,34809,25032,27844,27899,35874,23633,34218,33455,38156,27427,36763,26032,24571,24515,20449,34885,26143,33125,29481,24826,20852,21009,22411,24418,37026,34892,37266,24184,26447,24615,22995,20804,20982,33016,21256,27769,38596,29066,20241,20462,32670,26429,21957,38152,31168,34966,32483,22687,25100,38656,34394,22040,39035,24464,35768,33988,37207,21465,26093,24207,30044,24676,32110,23167,32490,32493,36713,21927,23459,24748,26059,29572,34988,34990,34991,34992,34994,34995,34996,34997,34998,35000,35001,35002,35003,35005,35006,35007,35008,35011,35012,35015,35016,35018,35019,35020,35021,35023,35024,35025,35027,35030,35031,35034,35035,35036,35037,35038,35040,35041,35046,35047,35049,35050,35051,35052,35053,35054,35055,35058,35061,35062,35063,35066,35067,35069,35071,35072,35073,35075,35076,35077,35078,35079,35080,35081,35083,35084,35085,35086,35087,35089,35092,35093,35094,35095,35096,35100,35101,35102,35103,35104,35106,35107,35108,35110,35111,35112,35113,35116,35117,35118,35119,35121,35122,35123,35125,35127,36873,30307,30505,32474,38772,34203,23398,31348,38634,34880,21195,29071,24490,26092,35810,23547,39535,24033,27529,27739,35757,35759,36874,36805,21387,25276,40486,40493,21568,20011,33469,29273,34460,23830,34905,28079,38597,21713,20122,35766,28937,21693,38409,28895,28153,30416,20005,30740,34578,23721,24310,35328,39068,38414,28814,27839,22852,25513,30524,34893,28436,33395,22576,29141,21388,30746,38593,21761,24422,28976,23476,35866,39564,27523,22830,40495,31207,26472,25196,20335,30113,32650,27915,38451,27687,20208,30162,20859,26679,28478,36992,33136,22934,29814,35128,35129,35130,35131,35132,35133,35134,35135,35136,35138,35139,35141,35142,35143,35144,35145,35146,35147,35148,35149,35150,35151,35152,35153,35154,35155,35156,35157,35158,35159,35160,35161,35162,35163,35164,35165,35168,35169,35170,35171,35172,35173,35175,35176,35177,35178,35179,35180,35181,35182,35183,35184,35185,35186,35187,35188,35189,35190,35191,35192,35193,35194,35196,35197,35198,35200,35202,35204,35205,35207,35208,35209,35210,35211,35212,35213,35214,35215,35216,35217,35218,35219,35220,35221,35222,35223,35224,35225,35226,35227,35228,35229,35230,35231,35232,35233,25671,23591,36965,31377,35875,23002,21676,33280,33647,35201,32768,26928,22094,32822,29239,37326,20918,20063,39029,25494,19994,21494,26355,33099,22812,28082,19968,22777,21307,25558,38129,20381,20234,34915,39056,22839,36951,31227,20202,33008,30097,27778,23452,23016,24413,26885,34433,20506,24050,20057,30691,20197,33402,25233,26131,37009,23673,20159,24441,33222,36920,32900,30123,20134,35028,24847,27589,24518,20041,30410,28322,35811,35758,35850,35793,24322,32764,32716,32462,33589,33643,22240,27575,38899,38452,23035,21535,38134,28139,23493,39278,23609,24341,38544,35234,35235,35236,35237,35238,35239,35240,35241,35242,35243,35244,35245,35246,35247,35248,35249,35250,35251,35252,35253,35254,35255,35256,35257,35258,35259,35260,35261,35262,35263,35264,35267,35277,35283,35284,35285,35287,35288,35289,35291,35293,35295,35296,35297,35298,35300,35303,35304,35305,35306,35308,35309,35310,35312,35313,35314,35316,35317,35318,35319,35320,35321,35322,35323,35324,35325,35326,35327,35329,35330,35331,35332,35333,35334,35336,35337,35338,35339,35340,35341,35342,35343,35344,35345,35346,35347,35348,35349,35350,35351,35352,35353,35354,35355,35356,35357,21360,33521,27185,23156,40560,24212,32552,33721,33828,33829,33639,34631,36814,36194,30408,24433,39062,30828,26144,21727,25317,20323,33219,30152,24248,38605,36362,34553,21647,27891,28044,27704,24703,21191,29992,24189,20248,24736,24551,23588,30001,37038,38080,29369,27833,28216,37193,26377,21451,21491,20305,37321,35825,21448,24188,36802,28132,20110,30402,27014,34398,24858,33286,20313,20446,36926,40060,24841,28189,28180,38533,20104,23089,38632,19982,23679,31161,23431,35821,32701,29577,22495,33419,37057,21505,36935,21947,23786,24481,24840,27442,29425,32946,35465,35358,35359,35360,35361,35362,35363,35364,35365,35366,35367,35368,35369,35370,35371,35372,35373,35374,35375,35376,35377,35378,35379,35380,35381,35382,35383,35384,35385,35386,35387,35388,35389,35391,35392,35393,35394,35395,35396,35397,35398,35399,35401,35402,35403,35404,35405,35406,35407,35408,35409,35410,35411,35412,35413,35414,35415,35416,35417,35418,35419,35420,35421,35422,35423,35424,35425,35426,35427,35428,35429,35430,35431,35432,35433,35434,35435,35436,35437,35438,35439,35440,35441,35442,35443,35444,35445,35446,35447,35448,35450,35451,35452,35453,35454,35455,35456,28020,23507,35029,39044,35947,39533,40499,28170,20900,20803,22435,34945,21407,25588,36757,22253,21592,22278,29503,28304,32536,36828,33489,24895,24616,38498,26352,32422,36234,36291,38053,23731,31908,26376,24742,38405,32792,20113,37095,21248,38504,20801,36816,34164,37213,26197,38901,23381,21277,30776,26434,26685,21705,28798,23472,36733,20877,22312,21681,25874,26242,36190,36163,33039,33900,36973,31967,20991,34299,26531,26089,28577,34468,36481,22122,36896,30338,28790,29157,36131,25321,21017,27901,36156,24590,22686,24974,26366,36192,25166,21939,28195,26413,36711,35457,35458,35459,35460,35461,35462,35463,35464,35467,35468,35469,35470,35471,35472,35473,35474,35476,35477,35478,35479,35480,35481,35482,35483,35484,35485,35486,35487,35488,35489,35490,35491,35492,35493,35494,35495,35496,35497,35498,35499,35500,35501,35502,35503,35504,35505,35506,35507,35508,35509,35510,35511,35512,35513,35514,35515,35516,35517,35518,35519,35520,35521,35522,35523,35524,35525,35526,35527,35528,35529,35530,35531,35532,35533,35534,35535,35536,35537,35538,35539,35540,35541,35542,35543,35544,35545,35546,35547,35548,35549,35550,35551,35552,35553,35554,35555,38113,38392,30504,26629,27048,21643,20045,28856,35784,25688,25995,23429,31364,20538,23528,30651,27617,35449,31896,27838,30415,26025,36759,23853,23637,34360,26632,21344,25112,31449,28251,32509,27167,31456,24432,28467,24352,25484,28072,26454,19976,24080,36134,20183,32960,30260,38556,25307,26157,25214,27836,36213,29031,32617,20806,32903,21484,36974,25240,21746,34544,36761,32773,38167,34071,36825,27993,29645,26015,30495,29956,30759,33275,36126,38024,20390,26517,30137,35786,38663,25391,38215,38453,33976,25379,30529,24449,29424,20105,24596,25972,25327,27491,25919,35556,35557,35558,35559,35560,35561,35562,35563,35564,35565,35566,35567,35568,35569,35570,35571,35572,35573,35574,35575,35576,35577,35578,35579,35580,35581,35582,35583,35584,35585,35586,35587,35588,35589,35590,35592,35593,35594,35595,35596,35597,35598,35599,35600,35601,35602,35603,35604,35605,35606,35607,35608,35609,35610,35611,35612,35613,35614,35615,35616,35617,35618,35619,35620,35621,35623,35624,35625,35626,35627,35628,35629,35630,35631,35632,35633,35634,35635,35636,35637,35638,35639,35640,35641,35642,35643,35644,35645,35646,35647,35648,35649,35650,35651,35652,35653,24103,30151,37073,35777,33437,26525,25903,21553,34584,30693,32930,33026,27713,20043,32455,32844,30452,26893,27542,25191,20540,20356,22336,25351,27490,36286,21482,26088,32440,24535,25370,25527,33267,33268,32622,24092,23769,21046,26234,31209,31258,36136,28825,30164,28382,27835,31378,20013,30405,24544,38047,34935,32456,31181,32959,37325,20210,20247,33311,21608,24030,27954,35788,31909,36724,32920,24090,21650,30385,23449,26172,39588,29664,26666,34523,26417,29482,35832,35803,36880,31481,28891,29038,25284,30633,22065,20027,33879,26609,21161,34496,36142,38136,31569,35654,35655,35656,35657,35658,35659,35660,35661,35662,35663,35664,35665,35666,35667,35668,35669,35670,35671,35672,35673,35674,35675,35676,35677,35678,35679,35680,35681,35682,35683,35684,35685,35687,35688,35689,35690,35691,35693,35694,35695,35696,35697,35698,35699,35700,35701,35702,35703,35704,35705,35706,35707,35708,35709,35710,35711,35712,35713,35714,35715,35716,35717,35718,35719,35720,35721,35722,35723,35724,35725,35726,35727,35728,35729,35730,35731,35732,35733,35734,35735,35736,35737,35738,35739,35740,35741,35742,35743,35756,35761,35771,35783,35792,35818,35849,35870,20303,27880,31069,39547,25235,29226,25341,19987,30742,36716,25776,36186,31686,26729,24196,35013,22918,25758,22766,29366,26894,38181,36861,36184,22368,32512,35846,20934,25417,25305,21331,26700,29730,33537,37196,21828,30528,28796,27978,20857,21672,36164,23039,28363,28100,23388,32043,20180,31869,28371,23376,33258,28173,23383,39683,26837,36394,23447,32508,24635,32437,37049,36208,22863,25549,31199,36275,21330,26063,31062,35781,38459,32452,38075,32386,22068,37257,26368,32618,23562,36981,26152,24038,20304,26590,20570,20316,22352,24231,59408,59409,59410,59411,59412,35896,35897,35898,35899,35900,35901,35902,35903,35904,35906,35907,35908,35909,35912,35914,35915,35917,35918,35919,35920,35921,35922,35923,35924,35926,35927,35928,35929,35931,35932,35933,35934,35935,35936,35939,35940,35941,35942,35943,35944,35945,35948,35949,35950,35951,35952,35953,35954,35956,35957,35958,35959,35963,35964,35965,35966,35967,35968,35969,35971,35972,35974,35975,35976,35979,35981,35982,35983,35984,35985,35986,35987,35989,35990,35991,35993,35994,35995,35996,35997,35998,35999,36000,36001,36002,36003,36004,36005,36006,36007,36008,36009,36010,36011,36012,36013,20109,19980,20800,19984,24319,21317,19989,20120,19998,39730,23404,22121,20008,31162,20031,21269,20039,22829,29243,21358,27664,22239,32996,39319,27603,30590,40727,20022,20127,40720,20060,20073,20115,33416,23387,21868,22031,20164,21389,21405,21411,21413,21422,38757,36189,21274,21493,21286,21294,21310,36188,21350,21347,20994,21000,21006,21037,21043,21055,21056,21068,21086,21089,21084,33967,21117,21122,21121,21136,21139,20866,32596,20155,20163,20169,20162,20200,20193,20203,20190,20251,20211,20258,20324,20213,20261,20263,20233,20267,20318,20327,25912,20314,20317,36014,36015,36016,36017,36018,36019,36020,36021,36022,36023,36024,36025,36026,36027,36028,36029,36030,36031,36032,36033,36034,36035,36036,36037,36038,36039,36040,36041,36042,36043,36044,36045,36046,36047,36048,36049,36050,36051,36052,36053,36054,36055,36056,36057,36058,36059,36060,36061,36062,36063,36064,36065,36066,36067,36068,36069,36070,36071,36072,36073,36074,36075,36076,36077,36078,36079,36080,36081,36082,36083,36084,36085,36086,36087,36088,36089,36090,36091,36092,36093,36094,36095,36096,36097,36098,36099,36100,36101,36102,36103,36104,36105,36106,36107,36108,36109,20319,20311,20274,20285,20342,20340,20369,20361,20355,20367,20350,20347,20394,20348,20396,20372,20454,20456,20458,20421,20442,20451,20444,20433,20447,20472,20521,20556,20467,20524,20495,20526,20525,20478,20508,20492,20517,20520,20606,20547,20565,20552,20558,20588,20603,20645,20647,20649,20666,20694,20742,20717,20716,20710,20718,20743,20747,20189,27709,20312,20325,20430,40864,27718,31860,20846,24061,40649,39320,20865,22804,21241,21261,35335,21264,20971,22809,20821,20128,20822,20147,34926,34980,20149,33044,35026,31104,23348,34819,32696,20907,20913,20925,20924,36110,36111,36112,36113,36114,36115,36116,36117,36118,36119,36120,36121,36122,36123,36124,36128,36177,36178,36183,36191,36197,36200,36201,36202,36204,36206,36207,36209,36210,36216,36217,36218,36219,36220,36221,36222,36223,36224,36226,36227,36230,36231,36232,36233,36236,36237,36238,36239,36240,36242,36243,36245,36246,36247,36248,36249,36250,36251,36252,36253,36254,36256,36257,36258,36260,36261,36262,36263,36264,36265,36266,36267,36268,36269,36270,36271,36272,36274,36278,36279,36281,36283,36285,36288,36289,36290,36293,36295,36296,36297,36298,36301,36304,36306,36307,36308,20935,20886,20898,20901,35744,35750,35751,35754,35764,35765,35767,35778,35779,35787,35791,35790,35794,35795,35796,35798,35800,35801,35804,35807,35808,35812,35816,35817,35822,35824,35827,35830,35833,35836,35839,35840,35842,35844,35847,35852,35855,35857,35858,35860,35861,35862,35865,35867,35864,35869,35871,35872,35873,35877,35879,35882,35883,35886,35887,35890,35891,35893,35894,21353,21370,38429,38434,38433,38449,38442,38461,38460,38466,38473,38484,38495,38503,38508,38514,38516,38536,38541,38551,38576,37015,37019,37021,37017,37036,37025,37044,37043,37046,37050,36309,36312,36313,36316,36320,36321,36322,36325,36326,36327,36329,36333,36334,36336,36337,36338,36340,36342,36348,36350,36351,36352,36353,36354,36355,36356,36358,36359,36360,36363,36365,36366,36368,36369,36370,36371,36373,36374,36375,36376,36377,36378,36379,36380,36384,36385,36388,36389,36390,36391,36392,36395,36397,36400,36402,36403,36404,36406,36407,36408,36411,36412,36414,36415,36419,36421,36422,36428,36429,36430,36431,36432,36435,36436,36437,36438,36439,36440,36442,36443,36444,36445,36446,36447,36448,36449,36450,36451,36452,36453,36455,36456,36458,36459,36462,36465,37048,37040,37071,37061,37054,37072,37060,37063,37075,37094,37090,37084,37079,37083,37099,37103,37118,37124,37154,37150,37155,37169,37167,37177,37187,37190,21005,22850,21154,21164,21165,21182,21759,21200,21206,21232,21471,29166,30669,24308,20981,20988,39727,21430,24321,30042,24047,22348,22441,22433,22654,22716,22725,22737,22313,22316,22314,22323,22329,22318,22319,22364,22331,22338,22377,22405,22379,22406,22396,22395,22376,22381,22390,22387,22445,22436,22412,22450,22479,22439,22452,22419,22432,22485,22488,22490,22489,22482,22456,22516,22511,22520,22500,22493,36467,36469,36471,36472,36473,36474,36475,36477,36478,36480,36482,36483,36484,36486,36488,36489,36490,36491,36492,36493,36494,36497,36498,36499,36501,36502,36503,36504,36505,36506,36507,36509,36511,36512,36513,36514,36515,36516,36517,36518,36519,36520,36521,36522,36525,36526,36528,36529,36531,36532,36533,36534,36535,36536,36537,36539,36540,36541,36542,36543,36544,36545,36546,36547,36548,36549,36550,36551,36552,36553,36554,36555,36556,36557,36559,36560,36561,36562,36563,36564,36565,36566,36567,36568,36569,36570,36571,36572,36573,36574,36575,36576,36577,36578,36579,36580,22539,22541,22525,22509,22528,22558,22553,22596,22560,22629,22636,22657,22665,22682,22656,39336,40729,25087,33401,33405,33407,33423,33418,33448,33412,33422,33425,33431,33433,33451,33464,33470,33456,33480,33482,33507,33432,33463,33454,33483,33484,33473,33449,33460,33441,33450,33439,33476,33486,33444,33505,33545,33527,33508,33551,33543,33500,33524,33490,33496,33548,33531,33491,33553,33562,33542,33556,33557,33504,33493,33564,33617,33627,33628,33544,33682,33596,33588,33585,33691,33630,33583,33615,33607,33603,33631,33600,33559,33632,33581,33594,33587,33638,33637,36581,36582,36583,36584,36585,36586,36587,36588,36589,36590,36591,36592,36593,36594,36595,36596,36597,36598,36599,36600,36601,36602,36603,36604,36605,36606,36607,36608,36609,36610,36611,36612,36613,36614,36615,36616,36617,36618,36619,36620,36621,36622,36623,36624,36625,36626,36627,36628,36629,36630,36631,36632,36633,36634,36635,36636,36637,36638,36639,36640,36641,36642,36643,36644,36645,36646,36647,36648,36649,36650,36651,36652,36653,36654,36655,36656,36657,36658,36659,36660,36661,36662,36663,36664,36665,36666,36667,36668,36669,36670,36671,36672,36673,36674,36675,36676,33640,33563,33641,33644,33642,33645,33646,33712,33656,33715,33716,33696,33706,33683,33692,33669,33660,33718,33705,33661,33720,33659,33688,33694,33704,33722,33724,33729,33793,33765,33752,22535,33816,33803,33757,33789,33750,33820,33848,33809,33798,33748,33759,33807,33795,33784,33785,33770,33733,33728,33830,33776,33761,33884,33873,33882,33881,33907,33927,33928,33914,33929,33912,33852,33862,33897,33910,33932,33934,33841,33901,33985,33997,34000,34022,33981,34003,33994,33983,33978,34016,33953,33977,33972,33943,34021,34019,34060,29965,34104,34032,34105,34079,34106,36677,36678,36679,36680,36681,36682,36683,36684,36685,36686,36687,36688,36689,36690,36691,36692,36693,36694,36695,36696,36697,36698,36699,36700,36701,36702,36703,36704,36705,36706,36707,36708,36709,36714,36736,36748,36754,36765,36768,36769,36770,36772,36773,36774,36775,36778,36780,36781,36782,36783,36786,36787,36788,36789,36791,36792,36794,36795,36796,36799,36800,36803,36806,36809,36810,36811,36812,36813,36815,36818,36822,36823,36826,36832,36833,36835,36839,36844,36847,36849,36850,36852,36853,36854,36858,36859,36860,36862,36863,36871,36872,36876,36878,36883,36885,36888,34134,34107,34047,34044,34137,34120,34152,34148,34142,34170,30626,34115,34162,34171,34212,34216,34183,34191,34169,34222,34204,34181,34233,34231,34224,34259,34241,34268,34303,34343,34309,34345,34326,34364,24318,24328,22844,22849,32823,22869,22874,22872,21263,23586,23589,23596,23604,25164,25194,25247,25275,25290,25306,25303,25326,25378,25334,25401,25419,25411,25517,25590,25457,25466,25486,25524,25453,25516,25482,25449,25518,25532,25586,25592,25568,25599,25540,25566,25550,25682,25542,25534,25669,25665,25611,25627,25632,25612,25638,25633,25694,25732,25709,25750,36889,36892,36899,36900,36901,36903,36904,36905,36906,36907,36908,36912,36913,36914,36915,36916,36919,36921,36922,36925,36927,36928,36931,36933,36934,36936,36937,36938,36939,36940,36942,36948,36949,36950,36953,36954,36956,36957,36958,36959,36960,36961,36964,36966,36967,36969,36970,36971,36972,36975,36976,36977,36978,36979,36982,36983,36984,36985,36986,36987,36988,36990,36993,36996,36997,36998,36999,37001,37002,37004,37005,37006,37007,37008,37010,37012,37014,37016,37018,37020,37022,37023,37024,37028,37029,37031,37032,37033,37035,37037,37042,37047,37052,37053,37055,37056,25722,25783,25784,25753,25786,25792,25808,25815,25828,25826,25865,25893,25902,24331,24530,29977,24337,21343,21489,21501,21481,21480,21499,21522,21526,21510,21579,21586,21587,21588,21590,21571,21537,21591,21593,21539,21554,21634,21652,21623,21617,21604,21658,21659,21636,21622,21606,21661,21712,21677,21698,21684,21714,21671,21670,21715,21716,21618,21667,21717,21691,21695,21708,21721,21722,21724,21673,21674,21668,21725,21711,21726,21787,21735,21792,21757,21780,21747,21794,21795,21775,21777,21799,21802,21863,21903,21941,21833,21869,21825,21845,21823,21840,21820,37058,37059,37062,37064,37065,37067,37068,37069,37074,37076,37077,37078,37080,37081,37082,37086,37087,37088,37091,37092,37093,37097,37098,37100,37102,37104,37105,37106,37107,37109,37110,37111,37113,37114,37115,37116,37119,37120,37121,37123,37125,37126,37127,37128,37129,37130,37131,37132,37133,37134,37135,37136,37137,37138,37139,37140,37141,37142,37143,37144,37146,37147,37148,37149,37151,37152,37153,37156,37157,37158,37159,37160,37161,37162,37163,37164,37165,37166,37168,37170,37171,37172,37173,37174,37175,37176,37178,37179,37180,37181,37182,37183,37184,37185,37186,37188,21815,21846,21877,21878,21879,21811,21808,21852,21899,21970,21891,21937,21945,21896,21889,21919,21886,21974,21905,21883,21983,21949,21950,21908,21913,21994,22007,21961,22047,21969,21995,21996,21972,21990,21981,21956,21999,21989,22002,22003,21964,21965,21992,22005,21988,36756,22046,22024,22028,22017,22052,22051,22014,22016,22055,22061,22104,22073,22103,22060,22093,22114,22105,22108,22092,22100,22150,22116,22129,22123,22139,22140,22149,22163,22191,22228,22231,22237,22241,22261,22251,22265,22271,22276,22282,22281,22300,24079,24089,24084,24081,24113,24123,24124,37189,37191,37192,37201,37203,37204,37205,37206,37208,37209,37211,37212,37215,37216,37222,37223,37224,37227,37229,37235,37242,37243,37244,37248,37249,37250,37251,37252,37254,37256,37258,37262,37263,37267,37268,37269,37270,37271,37272,37273,37276,37277,37278,37279,37280,37281,37284,37285,37286,37287,37288,37289,37291,37292,37296,37297,37298,37299,37302,37303,37304,37305,37307,37308,37309,37310,37311,37312,37313,37314,37315,37316,37317,37318,37320,37323,37328,37330,37331,37332,37333,37334,37335,37336,37337,37338,37339,37341,37342,37343,37344,37345,37346,37347,37348,37349,24119,24132,24148,24155,24158,24161,23692,23674,23693,23696,23702,23688,23704,23705,23697,23706,23708,23733,23714,23741,23724,23723,23729,23715,23745,23735,23748,23762,23780,23755,23781,23810,23811,23847,23846,23854,23844,23838,23814,23835,23896,23870,23860,23869,23916,23899,23919,23901,23915,23883,23882,23913,23924,23938,23961,23965,35955,23991,24005,24435,24439,24450,24455,24457,24460,24469,24473,24476,24488,24493,24501,24508,34914,24417,29357,29360,29364,29367,29368,29379,29377,29390,29389,29394,29416,29423,29417,29426,29428,29431,29441,29427,29443,29434,37350,37351,37352,37353,37354,37355,37356,37357,37358,37359,37360,37361,37362,37363,37364,37365,37366,37367,37368,37369,37370,37371,37372,37373,37374,37375,37376,37377,37378,37379,37380,37381,37382,37383,37384,37385,37386,37387,37388,37389,37390,37391,37392,37393,37394,37395,37396,37397,37398,37399,37400,37401,37402,37403,37404,37405,37406,37407,37408,37409,37410,37411,37412,37413,37414,37415,37416,37417,37418,37419,37420,37421,37422,37423,37424,37425,37426,37427,37428,37429,37430,37431,37432,37433,37434,37435,37436,37437,37438,37439,37440,37441,37442,37443,37444,37445,29435,29463,29459,29473,29450,29470,29469,29461,29474,29497,29477,29484,29496,29489,29520,29517,29527,29536,29548,29551,29566,33307,22821,39143,22820,22786,39267,39271,39272,39273,39274,39275,39276,39284,39287,39293,39296,39300,39303,39306,39309,39312,39313,39315,39316,39317,24192,24209,24203,24214,24229,24224,24249,24245,24254,24243,36179,24274,24273,24283,24296,24298,33210,24516,24521,24534,24527,24579,24558,24580,24545,24548,24574,24581,24582,24554,24557,24568,24601,24629,24614,24603,24591,24589,24617,24619,24586,24639,24609,24696,24697,24699,24698,24642,37446,37447,37448,37449,37450,37451,37452,37453,37454,37455,37456,37457,37458,37459,37460,37461,37462,37463,37464,37465,37466,37467,37468,37469,37470,37471,37472,37473,37474,37475,37476,37477,37478,37479,37480,37481,37482,37483,37484,37485,37486,37487,37488,37489,37490,37491,37493,37494,37495,37496,37497,37498,37499,37500,37501,37502,37503,37504,37505,37506,37507,37508,37509,37510,37511,37512,37513,37514,37515,37516,37517,37519,37520,37521,37522,37523,37524,37525,37526,37527,37528,37529,37530,37531,37532,37533,37534,37535,37536,37537,37538,37539,37540,37541,37542,37543,24682,24701,24726,24730,24749,24733,24707,24722,24716,24731,24812,24763,24753,24797,24792,24774,24794,24756,24864,24870,24853,24867,24820,24832,24846,24875,24906,24949,25004,24980,24999,25015,25044,25077,24541,38579,38377,38379,38385,38387,38389,38390,38396,38398,38403,38404,38406,38408,38410,38411,38412,38413,38415,38418,38421,38422,38423,38425,38426,20012,29247,25109,27701,27732,27740,27722,27811,27781,27792,27796,27788,27752,27753,27764,27766,27782,27817,27856,27860,27821,27895,27896,27889,27863,27826,27872,27862,27898,27883,27886,27825,27859,27887,27902,37544,37545,37546,37547,37548,37549,37551,37552,37553,37554,37555,37556,37557,37558,37559,37560,37561,37562,37563,37564,37565,37566,37567,37568,37569,37570,37571,37572,37573,37574,37575,37577,37578,37579,37580,37581,37582,37583,37584,37585,37586,37587,37588,37589,37590,37591,37592,37593,37594,37595,37596,37597,37598,37599,37600,37601,37602,37603,37604,37605,37606,37607,37608,37609,37610,37611,37612,37613,37614,37615,37616,37617,37618,37619,37620,37621,37622,37623,37624,37625,37626,37627,37628,37629,37630,37631,37632,37633,37634,37635,37636,37637,37638,37639,37640,37641,27961,27943,27916,27971,27976,27911,27908,27929,27918,27947,27981,27950,27957,27930,27983,27986,27988,27955,28049,28015,28062,28064,27998,28051,28052,27996,28000,28028,28003,28186,28103,28101,28126,28174,28095,28128,28177,28134,28125,28121,28182,28075,28172,28078,28203,28270,28238,28267,28338,28255,28294,28243,28244,28210,28197,28228,28383,28337,28312,28384,28461,28386,28325,28327,28349,28347,28343,28375,28340,28367,28303,28354,28319,28514,28486,28487,28452,28437,28409,28463,28470,28491,28532,28458,28425,28457,28553,28557,28556,28536,28530,28540,28538,28625,37642,37643,37644,37645,37646,37647,37648,37649,37650,37651,37652,37653,37654,37655,37656,37657,37658,37659,37660,37661,37662,37663,37664,37665,37666,37667,37668,37669,37670,37671,37672,37673,37674,37675,37676,37677,37678,37679,37680,37681,37682,37683,37684,37685,37686,37687,37688,37689,37690,37691,37692,37693,37695,37696,37697,37698,37699,37700,37701,37702,37703,37704,37705,37706,37707,37708,37709,37710,37711,37712,37713,37714,37715,37716,37717,37718,37719,37720,37721,37722,37723,37724,37725,37726,37727,37728,37729,37730,37731,37732,37733,37734,37735,37736,37737,37739,28617,28583,28601,28598,28610,28641,28654,28638,28640,28655,28698,28707,28699,28729,28725,28751,28766,23424,23428,23445,23443,23461,23480,29999,39582,25652,23524,23534,35120,23536,36423,35591,36790,36819,36821,36837,36846,36836,36841,36838,36851,36840,36869,36868,36875,36902,36881,36877,36886,36897,36917,36918,36909,36911,36932,36945,36946,36944,36968,36952,36962,36955,26297,36980,36989,36994,37000,36995,37003,24400,24407,24406,24408,23611,21675,23632,23641,23409,23651,23654,32700,24362,24361,24365,33396,24380,39739,23662,22913,22915,22925,22953,22954,22947,37740,37741,37742,37743,37744,37745,37746,37747,37748,37749,37750,37751,37752,37753,37754,37755,37756,37757,37758,37759,37760,37761,37762,37763,37764,37765,37766,37767,37768,37769,37770,37771,37772,37773,37774,37776,37777,37778,37779,37780,37781,37782,37783,37784,37785,37786,37787,37788,37789,37790,37791,37792,37793,37794,37795,37796,37797,37798,37799,37800,37801,37802,37803,37804,37805,37806,37807,37808,37809,37810,37811,37812,37813,37814,37815,37816,37817,37818,37819,37820,37821,37822,37823,37824,37825,37826,37827,37828,37829,37830,37831,37832,37833,37835,37836,37837,22935,22986,22955,22942,22948,22994,22962,22959,22999,22974,23045,23046,23005,23048,23011,23000,23033,23052,23049,23090,23092,23057,23075,23059,23104,23143,23114,23125,23100,23138,23157,33004,23210,23195,23159,23162,23230,23275,23218,23250,23252,23224,23264,23267,23281,23254,23270,23256,23260,23305,23319,23318,23346,23351,23360,23573,23580,23386,23397,23411,23377,23379,23394,39541,39543,39544,39546,39551,39549,39552,39553,39557,39560,39562,39568,39570,39571,39574,39576,39579,39580,39581,39583,39584,39586,39587,39589,39591,32415,32417,32419,32421,32424,32425,37838,37839,37840,37841,37842,37843,37844,37845,37847,37848,37849,37850,37851,37852,37853,37854,37855,37856,37857,37858,37859,37860,37861,37862,37863,37864,37865,37866,37867,37868,37869,37870,37871,37872,37873,37874,37875,37876,37877,37878,37879,37880,37881,37882,37883,37884,37885,37886,37887,37888,37889,37890,37891,37892,37893,37894,37895,37896,37897,37898,37899,37900,37901,37902,37903,37904,37905,37906,37907,37908,37909,37910,37911,37912,37913,37914,37915,37916,37917,37918,37919,37920,37921,37922,37923,37924,37925,37926,37927,37928,37929,37930,37931,37932,37933,37934,32429,32432,32446,32448,32449,32450,32457,32459,32460,32464,32468,32471,32475,32480,32481,32488,32491,32494,32495,32497,32498,32525,32502,32506,32507,32510,32513,32514,32515,32519,32520,32523,32524,32527,32529,32530,32535,32537,32540,32539,32543,32545,32546,32547,32548,32549,32550,32551,32554,32555,32556,32557,32559,32560,32561,32562,32563,32565,24186,30079,24027,30014,37013,29582,29585,29614,29602,29599,29647,29634,29649,29623,29619,29632,29641,29640,29669,29657,39036,29706,29673,29671,29662,29626,29682,29711,29738,29787,29734,29733,29736,29744,29742,29740,37935,37936,37937,37938,37939,37940,37941,37942,37943,37944,37945,37946,37947,37948,37949,37951,37952,37953,37954,37955,37956,37957,37958,37959,37960,37961,37962,37963,37964,37965,37966,37967,37968,37969,37970,37971,37972,37973,37974,37975,37976,37977,37978,37979,37980,37981,37982,37983,37984,37985,37986,37987,37988,37989,37990,37991,37992,37993,37994,37996,37997,37998,37999,38000,38001,38002,38003,38004,38005,38006,38007,38008,38009,38010,38011,38012,38013,38014,38015,38016,38017,38018,38019,38020,38033,38038,38040,38087,38095,38099,38100,38106,38118,38139,38172,38176,29723,29722,29761,29788,29783,29781,29785,29815,29805,29822,29852,29838,29824,29825,29831,29835,29854,29864,29865,29840,29863,29906,29882,38890,38891,38892,26444,26451,26462,26440,26473,26533,26503,26474,26483,26520,26535,26485,26536,26526,26541,26507,26487,26492,26608,26633,26584,26634,26601,26544,26636,26585,26549,26586,26547,26589,26624,26563,26552,26594,26638,26561,26621,26674,26675,26720,26721,26702,26722,26692,26724,26755,26653,26709,26726,26689,26727,26688,26686,26698,26697,26665,26805,26767,26740,26743,26771,26731,26818,26990,26876,26911,26912,26873,38183,38195,38205,38211,38216,38219,38229,38234,38240,38254,38260,38261,38263,38264,38265,38266,38267,38268,38269,38270,38272,38273,38274,38275,38276,38277,38278,38279,38280,38281,38282,38283,38284,38285,38286,38287,38288,38289,38290,38291,38292,38293,38294,38295,38296,38297,38298,38299,38300,38301,38302,38303,38304,38305,38306,38307,38308,38309,38310,38311,38312,38313,38314,38315,38316,38317,38318,38319,38320,38321,38322,38323,38324,38325,38326,38327,38328,38329,38330,38331,38332,38333,38334,38335,38336,38337,38338,38339,38340,38341,38342,38343,38344,38345,38346,38347,26916,26864,26891,26881,26967,26851,26896,26993,26937,26976,26946,26973,27012,26987,27008,27032,27000,26932,27084,27015,27016,27086,27017,26982,26979,27001,27035,27047,27067,27051,27053,27092,27057,27073,27082,27103,27029,27104,27021,27135,27183,27117,27159,27160,27237,27122,27204,27198,27296,27216,27227,27189,27278,27257,27197,27176,27224,27260,27281,27280,27305,27287,27307,29495,29522,27521,27522,27527,27524,27538,27539,27533,27546,27547,27553,27562,36715,36717,36721,36722,36723,36725,36726,36728,36727,36729,36730,36732,36734,36737,36738,36740,36743,36747,38348,38349,38350,38351,38352,38353,38354,38355,38356,38357,38358,38359,38360,38361,38362,38363,38364,38365,38366,38367,38368,38369,38370,38371,38372,38373,38374,38375,38380,38399,38407,38419,38424,38427,38430,38432,38435,38436,38437,38438,38439,38440,38441,38443,38444,38445,38447,38448,38455,38456,38457,38458,38462,38465,38467,38474,38478,38479,38481,38482,38483,38486,38487,38488,38489,38490,38492,38493,38494,38496,38499,38501,38502,38507,38509,38510,38511,38512,38513,38515,38520,38521,38522,38523,38524,38525,38526,38527,38528,38529,38530,38531,38532,38535,38537,38538,36749,36750,36751,36760,36762,36558,25099,25111,25115,25119,25122,25121,25125,25124,25132,33255,29935,29940,29951,29967,29969,29971,25908,26094,26095,26096,26122,26137,26482,26115,26133,26112,28805,26359,26141,26164,26161,26166,26165,32774,26207,26196,26177,26191,26198,26209,26199,26231,26244,26252,26279,26269,26302,26331,26332,26342,26345,36146,36147,36150,36155,36157,36160,36165,36166,36168,36169,36167,36173,36181,36185,35271,35274,35275,35276,35278,35279,35280,35281,29294,29343,29277,29286,29295,29310,29311,29316,29323,29325,29327,29330,25352,25394,25520,38540,38542,38545,38546,38547,38549,38550,38554,38555,38557,38558,38559,38560,38561,38562,38563,38564,38565,38566,38568,38569,38570,38571,38572,38573,38574,38575,38577,38578,38580,38581,38583,38584,38586,38587,38591,38594,38595,38600,38602,38603,38608,38609,38611,38612,38614,38615,38616,38617,38618,38619,38620,38621,38622,38623,38625,38626,38627,38628,38629,38630,38631,38635,38636,38637,38638,38640,38641,38642,38644,38645,38648,38650,38651,38652,38653,38655,38658,38659,38661,38666,38667,38668,38672,38673,38674,38676,38677,38679,38680,38681,38682,38683,38685,38687,38688,25663,25816,32772,27626,27635,27645,27637,27641,27653,27655,27654,27661,27669,27672,27673,27674,27681,27689,27684,27690,27698,25909,25941,25963,29261,29266,29270,29232,34402,21014,32927,32924,32915,32956,26378,32957,32945,32939,32941,32948,32951,32999,33000,33001,33002,32987,32962,32964,32985,32973,32983,26384,32989,33003,33009,33012,33005,33037,33038,33010,33020,26389,33042,35930,33078,33054,33068,33048,33074,33096,33100,33107,33140,33113,33114,33137,33120,33129,33148,33149,33133,33127,22605,23221,33160,33154,33169,28373,33187,33194,33228,26406,33226,33211,38689,38690,38691,38692,38693,38694,38695,38696,38697,38699,38700,38702,38703,38705,38707,38708,38709,38710,38711,38714,38715,38716,38717,38719,38720,38721,38722,38723,38724,38725,38726,38727,38728,38729,38730,38731,38732,38733,38734,38735,38736,38737,38740,38741,38743,38744,38746,38748,38749,38751,38755,38756,38758,38759,38760,38762,38763,38764,38765,38766,38767,38768,38769,38770,38773,38775,38776,38777,38778,38779,38781,38782,38783,38784,38785,38786,38787,38788,38790,38791,38792,38793,38794,38796,38798,38799,38800,38803,38805,38806,38807,38809,38810,38811,38812,38813,33217,33190,27428,27447,27449,27459,27462,27481,39121,39122,39123,39125,39129,39130,27571,24384,27586,35315,26000,40785,26003,26044,26054,26052,26051,26060,26062,26066,26070,28800,28828,28822,28829,28859,28864,28855,28843,28849,28904,28874,28944,28947,28950,28975,28977,29043,29020,29032,28997,29042,29002,29048,29050,29080,29107,29109,29096,29088,29152,29140,29159,29177,29213,29224,28780,28952,29030,29113,25150,25149,25155,25160,25161,31035,31040,31046,31049,31067,31068,31059,31066,31074,31063,31072,31087,31079,31098,31109,31114,31130,31143,31155,24529,24528,38814,38815,38817,38818,38820,38821,38822,38823,38824,38825,38826,38828,38830,38832,38833,38835,38837,38838,38839,38840,38841,38842,38843,38844,38845,38846,38847,38848,38849,38850,38851,38852,38853,38854,38855,38856,38857,38858,38859,38860,38861,38862,38863,38864,38865,38866,38867,38868,38869,38870,38871,38872,38873,38874,38875,38876,38877,38878,38879,38880,38881,38882,38883,38884,38885,38888,38894,38895,38896,38897,38898,38900,38903,38904,38905,38906,38907,38908,38909,38910,38911,38912,38913,38914,38915,38916,38917,38918,38919,38920,38921,38922,38923,38924,38925,38926,24636,24669,24666,24679,24641,24665,24675,24747,24838,24845,24925,25001,24989,25035,25041,25094,32896,32895,27795,27894,28156,30710,30712,30720,30729,30743,30744,30737,26027,30765,30748,30749,30777,30778,30779,30751,30780,30757,30764,30755,30761,30798,30829,30806,30807,30758,30800,30791,30796,30826,30875,30867,30874,30855,30876,30881,30883,30898,30905,30885,30932,30937,30921,30956,30962,30981,30964,30995,31012,31006,31028,40859,40697,40699,40700,30449,30468,30477,30457,30471,30472,30490,30498,30489,30509,30502,30517,30520,30544,30545,30535,30531,30554,30568,38927,38928,38929,38930,38931,38932,38933,38934,38935,38936,38937,38938,38939,38940,38941,38942,38943,38944,38945,38946,38947,38948,38949,38950,38951,38952,38953,38954,38955,38956,38957,38958,38959,38960,38961,38962,38963,38964,38965,38966,38967,38968,38969,38970,38971,38972,38973,38974,38975,38976,38977,38978,38979,38980,38981,38982,38983,38984,38985,38986,38987,38988,38989,38990,38991,38992,38993,38994,38995,38996,38997,38998,38999,39000,39001,39002,39003,39004,39005,39006,39007,39008,39009,39010,39011,39012,39013,39014,39015,39016,39017,39018,39019,39020,39021,39022,30562,30565,30591,30605,30589,30592,30604,30609,30623,30624,30640,30645,30653,30010,30016,30030,30027,30024,30043,30066,30073,30083,32600,32609,32607,35400,32616,32628,32625,32633,32641,32638,30413,30437,34866,38021,38022,38023,38027,38026,38028,38029,38031,38032,38036,38039,38037,38042,38043,38044,38051,38052,38059,38058,38061,38060,38063,38064,38066,38068,38070,38071,38072,38073,38074,38076,38077,38079,38084,38088,38089,38090,38091,38092,38093,38094,38096,38097,38098,38101,38102,38103,38105,38104,38107,38110,38111,38112,38114,38116,38117,38119,38120,38122,39023,39024,39025,39026,39027,39028,39051,39054,39058,39061,39065,39075,39080,39081,39082,39083,39084,39085,39086,39087,39088,39089,39090,39091,39092,39093,39094,39095,39096,39097,39098,39099,39100,39101,39102,39103,39104,39105,39106,39107,39108,39109,39110,39111,39112,39113,39114,39115,39116,39117,39119,39120,39124,39126,39127,39131,39132,39133,39136,39137,39138,39139,39140,39141,39142,39145,39146,39147,39148,39149,39150,39151,39152,39153,39154,39155,39156,39157,39158,39159,39160,39161,39162,39163,39164,39165,39166,39167,39168,39169,39170,39171,39172,39173,39174,39175,38121,38123,38126,38127,38131,38132,38133,38135,38137,38140,38141,38143,38147,38146,38150,38151,38153,38154,38157,38158,38159,38162,38163,38164,38165,38166,38168,38171,38173,38174,38175,38178,38186,38187,38185,38188,38193,38194,38196,38198,38199,38200,38204,38206,38207,38210,38197,38212,38213,38214,38217,38220,38222,38223,38226,38227,38228,38230,38231,38232,38233,38235,38238,38239,38237,38241,38242,38244,38245,38246,38247,38248,38249,38250,38251,38252,38255,38257,38258,38259,38202,30695,30700,38601,31189,31213,31203,31211,31238,23879,31235,31234,31262,31252,39176,39177,39178,39179,39180,39182,39183,39185,39186,39187,39188,39189,39190,39191,39192,39193,39194,39195,39196,39197,39198,39199,39200,39201,39202,39203,39204,39205,39206,39207,39208,39209,39210,39211,39212,39213,39215,39216,39217,39218,39219,39220,39221,39222,39223,39224,39225,39226,39227,39228,39229,39230,39231,39232,39233,39234,39235,39236,39237,39238,39239,39240,39241,39242,39243,39244,39245,39246,39247,39248,39249,39250,39251,39254,39255,39256,39257,39258,39259,39260,39261,39262,39263,39264,39265,39266,39268,39270,39283,39288,39289,39291,39294,39298,39299,39305,31289,31287,31313,40655,39333,31344,30344,30350,30355,30361,30372,29918,29920,29996,40480,40482,40488,40489,40490,40491,40492,40498,40497,40502,40504,40503,40505,40506,40510,40513,40514,40516,40518,40519,40520,40521,40523,40524,40526,40529,40533,40535,40538,40539,40540,40542,40547,40550,40551,40552,40553,40554,40555,40556,40561,40557,40563,30098,30100,30102,30112,30109,30124,30115,30131,30132,30136,30148,30129,30128,30147,30146,30166,30157,30179,30184,30182,30180,30187,30183,30211,30193,30204,30207,30224,30208,30213,30220,30231,30218,30245,30232,30229,30233,39308,39310,39322,39323,39324,39325,39326,39327,39328,39329,39330,39331,39332,39334,39335,39337,39338,39339,39340,39341,39342,39343,39344,39345,39346,39347,39348,39349,39350,39351,39352,39353,39354,39355,39356,39357,39358,39359,39360,39361,39362,39363,39364,39365,39366,39367,39368,39369,39370,39371,39372,39373,39374,39375,39376,39377,39378,39379,39380,39381,39382,39383,39384,39385,39386,39387,39388,39389,39390,39391,39392,39393,39394,39395,39396,39397,39398,39399,39400,39401,39402,39403,39404,39405,39406,39407,39408,39409,39410,39411,39412,39413,39414,39415,39416,39417,30235,30268,30242,30240,30272,30253,30256,30271,30261,30275,30270,30259,30285,30302,30292,30300,30294,30315,30319,32714,31462,31352,31353,31360,31366,31368,31381,31398,31392,31404,31400,31405,31411,34916,34921,34930,34941,34943,34946,34978,35014,34999,35004,35017,35042,35022,35043,35045,35057,35098,35068,35048,35070,35056,35105,35097,35091,35099,35082,35124,35115,35126,35137,35174,35195,30091,32997,30386,30388,30684,32786,32788,32790,32796,32800,32802,32805,32806,32807,32809,32808,32817,32779,32821,32835,32838,32845,32850,32873,32881,35203,39032,39040,39043,39418,39419,39420,39421,39422,39423,39424,39425,39426,39427,39428,39429,39430,39431,39432,39433,39434,39435,39436,39437,39438,39439,39440,39441,39442,39443,39444,39445,39446,39447,39448,39449,39450,39451,39452,39453,39454,39455,39456,39457,39458,39459,39460,39461,39462,39463,39464,39465,39466,39467,39468,39469,39470,39471,39472,39473,39474,39475,39476,39477,39478,39479,39480,39481,39482,39483,39484,39485,39486,39487,39488,39489,39490,39491,39492,39493,39494,39495,39496,39497,39498,39499,39500,39501,39502,39503,39504,39505,39506,39507,39508,39509,39510,39511,39512,39513,39049,39052,39053,39055,39060,39066,39067,39070,39071,39073,39074,39077,39078,34381,34388,34412,34414,34431,34426,34428,34427,34472,34445,34443,34476,34461,34471,34467,34474,34451,34473,34486,34500,34485,34510,34480,34490,34481,34479,34505,34511,34484,34537,34545,34546,34541,34547,34512,34579,34526,34548,34527,34520,34513,34563,34567,34552,34568,34570,34573,34569,34595,34619,34590,34597,34606,34586,34622,34632,34612,34609,34601,34615,34623,34690,34594,34685,34686,34683,34656,34672,34636,34670,34699,34643,34659,34684,34660,34649,34661,34707,34735,34728,34770,39514,39515,39516,39517,39518,39519,39520,39521,39522,39523,39524,39525,39526,39527,39528,39529,39530,39531,39538,39555,39561,39565,39566,39572,39573,39577,39590,39593,39594,39595,39596,39597,39598,39599,39602,39603,39604,39605,39609,39611,39613,39614,39615,39619,39620,39622,39623,39624,39625,39626,39629,39630,39631,39632,39634,39636,39637,39638,39639,39641,39642,39643,39644,39645,39646,39648,39650,39651,39652,39653,39655,39656,39657,39658,39660,39662,39664,39665,39666,39667,39668,39669,39670,39671,39672,39674,39676,39677,39678,39679,39680,39681,39682,39684,39685,39686,34758,34696,34693,34733,34711,34691,34731,34789,34732,34741,34739,34763,34771,34749,34769,34752,34762,34779,34794,34784,34798,34838,34835,34814,34826,34843,34849,34873,34876,32566,32578,32580,32581,33296,31482,31485,31496,31491,31492,31509,31498,31531,31503,31559,31544,31530,31513,31534,31537,31520,31525,31524,31539,31550,31518,31576,31578,31557,31605,31564,31581,31584,31598,31611,31586,31602,31601,31632,31654,31655,31672,31660,31645,31656,31621,31658,31644,31650,31659,31668,31697,31681,31692,31709,31706,31717,31718,31722,31756,31742,31740,31759,31766,31755,39687,39689,39690,39691,39692,39693,39694,39696,39697,39698,39700,39701,39702,39703,39704,39705,39706,39707,39708,39709,39710,39712,39713,39714,39716,39717,39718,39719,39720,39721,39722,39723,39724,39725,39726,39728,39729,39731,39732,39733,39734,39735,39736,39737,39738,39741,39742,39743,39744,39750,39754,39755,39756,39758,39760,39762,39763,39765,39766,39767,39768,39769,39770,39771,39772,39773,39774,39775,39776,39777,39778,39779,39780,39781,39782,39783,39784,39785,39786,39787,39788,39789,39790,39791,39792,39793,39794,39795,39796,39797,39798,39799,39800,39801,39802,39803,31775,31786,31782,31800,31809,31808,33278,33281,33282,33284,33260,34884,33313,33314,33315,33325,33327,33320,33323,33336,33339,33331,33332,33342,33348,33353,33355,33359,33370,33375,33384,34942,34949,34952,35032,35039,35166,32669,32671,32679,32687,32688,32690,31868,25929,31889,31901,31900,31902,31906,31922,31932,31933,31937,31943,31948,31949,31944,31941,31959,31976,33390,26280,32703,32718,32725,32741,32737,32742,32745,32750,32755,31992,32119,32166,32174,32327,32411,40632,40628,36211,36228,36244,36241,36273,36199,36205,35911,35913,37194,37200,37198,37199,37220,39804,39805,39806,39807,39808,39809,39810,39811,39812,39813,39814,39815,39816,39817,39818,39819,39820,39821,39822,39823,39824,39825,39826,39827,39828,39829,39830,39831,39832,39833,39834,39835,39836,39837,39838,39839,39840,39841,39842,39843,39844,39845,39846,39847,39848,39849,39850,39851,39852,39853,39854,39855,39856,39857,39858,39859,39860,39861,39862,39863,39864,39865,39866,39867,39868,39869,39870,39871,39872,39873,39874,39875,39876,39877,39878,39879,39880,39881,39882,39883,39884,39885,39886,39887,39888,39889,39890,39891,39892,39893,39894,39895,39896,39897,39898,39899,37218,37217,37232,37225,37231,37245,37246,37234,37236,37241,37260,37253,37264,37261,37265,37282,37283,37290,37293,37294,37295,37301,37300,37306,35925,40574,36280,36331,36357,36441,36457,36277,36287,36284,36282,36292,36310,36311,36314,36318,36302,36303,36315,36294,36332,36343,36344,36323,36345,36347,36324,36361,36349,36372,36381,36383,36396,36398,36387,36399,36410,36416,36409,36405,36413,36401,36425,36417,36418,36433,36434,36426,36464,36470,36476,36463,36468,36485,36495,36500,36496,36508,36510,35960,35970,35978,35973,35992,35988,26011,35286,35294,35290,35292,39900,39901,39902,39903,39904,39905,39906,39907,39908,39909,39910,39911,39912,39913,39914,39915,39916,39917,39918,39919,39920,39921,39922,39923,39924,39925,39926,39927,39928,39929,39930,39931,39932,39933,39934,39935,39936,39937,39938,39939,39940,39941,39942,39943,39944,39945,39946,39947,39948,39949,39950,39951,39952,39953,39954,39955,39956,39957,39958,39959,39960,39961,39962,39963,39964,39965,39966,39967,39968,39969,39970,39971,39972,39973,39974,39975,39976,39977,39978,39979,39980,39981,39982,39983,39984,39985,39986,39987,39988,39989,39990,39991,39992,39993,39994,39995,35301,35307,35311,35390,35622,38739,38633,38643,38639,38662,38657,38664,38671,38670,38698,38701,38704,38718,40832,40835,40837,40838,40839,40840,40841,40842,40844,40702,40715,40717,38585,38588,38589,38606,38610,30655,38624,37518,37550,37576,37694,37738,37834,37775,37950,37995,40063,40066,40069,40070,40071,40072,31267,40075,40078,40080,40081,40082,40084,40085,40090,40091,40094,40095,40096,40097,40098,40099,40101,40102,40103,40104,40105,40107,40109,40110,40112,40113,40114,40115,40116,40117,40118,40119,40122,40123,40124,40125,40132,40133,40134,40135,40138,40139,39996,39997,39998,39999,40000,40001,40002,40003,40004,40005,40006,40007,40008,40009,40010,40011,40012,40013,40014,40015,40016,40017,40018,40019,40020,40021,40022,40023,40024,40025,40026,40027,40028,40029,40030,40031,40032,40033,40034,40035,40036,40037,40038,40039,40040,40041,40042,40043,40044,40045,40046,40047,40048,40049,40050,40051,40052,40053,40054,40055,40056,40057,40058,40059,40061,40062,40064,40067,40068,40073,40074,40076,40079,40083,40086,40087,40088,40089,40093,40106,40108,40111,40121,40126,40127,40128,40129,40130,40136,40137,40145,40146,40154,40155,40160,40161,40140,40141,40142,40143,40144,40147,40148,40149,40151,40152,40153,40156,40157,40159,40162,38780,38789,38801,38802,38804,38831,38827,38819,38834,38836,39601,39600,39607,40536,39606,39610,39612,39617,39616,39621,39618,39627,39628,39633,39749,39747,39751,39753,39752,39757,39761,39144,39181,39214,39253,39252,39647,39649,39654,39663,39659,39675,39661,39673,39688,39695,39699,39711,39715,40637,40638,32315,40578,40583,40584,40587,40594,37846,40605,40607,40667,40668,40669,40672,40671,40674,40681,40679,40677,40682,40687,40738,40748,40751,40761,40759,40765,40766,40772,40163,40164,40165,40166,40167,40168,40169,40170,40171,40172,40173,40174,40175,40176,40177,40178,40179,40180,40181,40182,40183,40184,40185,40186,40187,40188,40189,40190,40191,40192,40193,40194,40195,40196,40197,40198,40199,40200,40201,40202,40203,40204,40205,40206,40207,40208,40209,40210,40211,40212,40213,40214,40215,40216,40217,40218,40219,40220,40221,40222,40223,40224,40225,40226,40227,40228,40229,40230,40231,40232,40233,40234,40235,40236,40237,40238,40239,40240,40241,40242,40243,40244,40245,40246,40247,40248,40249,40250,40251,40252,40253,40254,40255,40256,40257,40258,57908,57909,57910,57911,57912,57913,57914,57915,57916,57917,57918,57919,57920,57921,57922,57923,57924,57925,57926,57927,57928,57929,57930,57931,57932,57933,57934,57935,57936,57937,57938,57939,57940,57941,57942,57943,57944,57945,57946,57947,57948,57949,57950,57951,57952,57953,57954,57955,57956,57957,57958,57959,57960,57961,57962,57963,57964,57965,57966,57967,57968,57969,57970,57971,57972,57973,57974,57975,57976,57977,57978,57979,57980,57981,57982,57983,57984,57985,57986,57987,57988,57989,57990,57991,57992,57993,57994,57995,57996,57997,57998,57999,58000,58001,40259,40260,40261,40262,40263,40264,40265,40266,40267,40268,40269,40270,40271,40272,40273,40274,40275,40276,40277,40278,40279,40280,40281,40282,40283,40284,40285,40286,40287,40288,40289,40290,40291,40292,40293,40294,40295,40296,40297,40298,40299,40300,40301,40302,40303,40304,40305,40306,40307,40308,40309,40310,40311,40312,40313,40314,40315,40316,40317,40318,40319,40320,40321,40322,40323,40324,40325,40326,40327,40328,40329,40330,40331,40332,40333,40334,40335,40336,40337,40338,40339,40340,40341,40342,40343,40344,40345,40346,40347,40348,40349,40350,40351,40352,40353,40354,58002,58003,58004,58005,58006,58007,58008,58009,58010,58011,58012,58013,58014,58015,58016,58017,58018,58019,58020,58021,58022,58023,58024,58025,58026,58027,58028,58029,58030,58031,58032,58033,58034,58035,58036,58037,58038,58039,58040,58041,58042,58043,58044,58045,58046,58047,58048,58049,58050,58051,58052,58053,58054,58055,58056,58057,58058,58059,58060,58061,58062,58063,58064,58065,58066,58067,58068,58069,58070,58071,58072,58073,58074,58075,58076,58077,58078,58079,58080,58081,58082,58083,58084,58085,58086,58087,58088,58089,58090,58091,58092,58093,58094,58095,40355,40356,40357,40358,40359,40360,40361,40362,40363,40364,40365,40366,40367,40368,40369,40370,40371,40372,40373,40374,40375,40376,40377,40378,40379,40380,40381,40382,40383,40384,40385,40386,40387,40388,40389,40390,40391,40392,40393,40394,40395,40396,40397,40398,40399,40400,40401,40402,40403,40404,40405,40406,40407,40408,40409,40410,40411,40412,40413,40414,40415,40416,40417,40418,40419,40420,40421,40422,40423,40424,40425,40426,40427,40428,40429,40430,40431,40432,40433,40434,40435,40436,40437,40438,40439,40440,40441,40442,40443,40444,40445,40446,40447,40448,40449,40450,58096,58097,58098,58099,58100,58101,58102,58103,58104,58105,58106,58107,58108,58109,58110,58111,58112,58113,58114,58115,58116,58117,58118,58119,58120,58121,58122,58123,58124,58125,58126,58127,58128,58129,58130,58131,58132,58133,58134,58135,58136,58137,58138,58139,58140,58141,58142,58143,58144,58145,58146,58147,58148,58149,58150,58151,58152,58153,58154,58155,58156,58157,58158,58159,58160,58161,58162,58163,58164,58165,58166,58167,58168,58169,58170,58171,58172,58173,58174,58175,58176,58177,58178,58179,58180,58181,58182,58183,58184,58185,58186,58187,58188,58189,40451,40452,40453,40454,40455,40456,40457,40458,40459,40460,40461,40462,40463,40464,40465,40466,40467,40468,40469,40470,40471,40472,40473,40474,40475,40476,40477,40478,40484,40487,40494,40496,40500,40507,40508,40512,40525,40528,40530,40531,40532,40534,40537,40541,40543,40544,40545,40546,40549,40558,40559,40562,40564,40565,40566,40567,40568,40569,40570,40571,40572,40573,40576,40577,40579,40580,40581,40582,40585,40586,40588,40589,40590,40591,40592,40593,40596,40597,40598,40599,40600,40601,40602,40603,40604,40606,40608,40609,40610,40611,40612,40613,40615,40616,40617,40618,58190,58191,58192,58193,58194,58195,58196,58197,58198,58199,58200,58201,58202,58203,58204,58205,58206,58207,58208,58209,58210,58211,58212,58213,58214,58215,58216,58217,58218,58219,58220,58221,58222,58223,58224,58225,58226,58227,58228,58229,58230,58231,58232,58233,58234,58235,58236,58237,58238,58239,58240,58241,58242,58243,58244,58245,58246,58247,58248,58249,58250,58251,58252,58253,58254,58255,58256,58257,58258,58259,58260,58261,58262,58263,58264,58265,58266,58267,58268,58269,58270,58271,58272,58273,58274,58275,58276,58277,58278,58279,58280,58281,58282,58283,40619,40620,40621,40622,40623,40624,40625,40626,40627,40629,40630,40631,40633,40634,40636,40639,40640,40641,40642,40643,40645,40646,40647,40648,40650,40651,40652,40656,40658,40659,40661,40662,40663,40665,40666,40670,40673,40675,40676,40678,40680,40683,40684,40685,40686,40688,40689,40690,40691,40692,40693,40694,40695,40696,40698,40701,40703,40704,40705,40706,40707,40708,40709,40710,40711,40712,40713,40714,40716,40719,40721,40722,40724,40725,40726,40728,40730,40731,40732,40733,40734,40735,40737,40739,40740,40741,40742,40743,40744,40745,40746,40747,40749,40750,40752,40753,58284,58285,58286,58287,58288,58289,58290,58291,58292,58293,58294,58295,58296,58297,58298,58299,58300,58301,58302,58303,58304,58305,58306,58307,58308,58309,58310,58311,58312,58313,58314,58315,58316,58317,58318,58319,58320,58321,58322,58323,58324,58325,58326,58327,58328,58329,58330,58331,58332,58333,58334,58335,58336,58337,58338,58339,58340,58341,58342,58343,58344,58345,58346,58347,58348,58349,58350,58351,58352,58353,58354,58355,58356,58357,58358,58359,58360,58361,58362,58363,58364,58365,58366,58367,58368,58369,58370,58371,58372,58373,58374,58375,58376,58377,40754,40755,40756,40757,40758,40760,40762,40764,40767,40768,40769,40770,40771,40773,40774,40775,40776,40777,40778,40779,40780,40781,40782,40783,40786,40787,40788,40789,40790,40791,40792,40793,40794,40795,40796,40797,40798,40799,40800,40801,40802,40803,40804,40805,40806,40807,40808,40809,40810,40811,40812,40813,40814,40815,40816,40817,40818,40819,40820,40821,40822,40823,40824,40825,40826,40827,40828,40829,40830,40833,40834,40845,40846,40847,40848,40849,40850,40851,40852,40853,40854,40855,40856,40860,40861,40862,40865,40866,40867,40868,40869,63788,63865,63893,63975,63985,58378,58379,58380,58381,58382,58383,58384,58385,58386,58387,58388,58389,58390,58391,58392,58393,58394,58395,58396,58397,58398,58399,58400,58401,58402,58403,58404,58405,58406,58407,58408,58409,58410,58411,58412,58413,58414,58415,58416,58417,58418,58419,58420,58421,58422,58423,58424,58425,58426,58427,58428,58429,58430,58431,58432,58433,58434,58435,58436,58437,58438,58439,58440,58441,58442,58443,58444,58445,58446,58447,58448,58449,58450,58451,58452,58453,58454,58455,58456,58457,58458,58459,58460,58461,58462,58463,58464,58465,58466,58467,58468,58469,58470,58471,64012,64013,64014,64015,64017,64019,64020,64024,64031,64032,64033,64035,64036,64039,64040,64041,11905,59414,59415,59416,11908,13427,13383,11912,11915,59422,13726,13850,13838,11916,11927,14702,14616,59430,14799,14815,14963,14800,59435,59436,15182,15470,15584,11943,59441,59442,11946,16470,16735,11950,17207,11955,11958,11959,59451,17329,17324,11963,17373,17622,18017,17996,59459,18211,18217,18300,18317,11978,18759,18810,18813,18818,18819,18821,18822,18847,18843,18871,18870,59476,59477,19619,19615,19616,19617,19575,19618,19731,19732,19733,19734,19735,19736,19737,19886,59492,58472,58473,58474,58475,58476,58477,58478,58479,58480,58481,58482,58483,58484,58485,58486,58487,58488,58489,58490,58491,58492,58493,58494,58495,58496,58497,58498,58499,58500,58501,58502,58503,58504,58505,58506,58507,58508,58509,58510,58511,58512,58513,58514,58515,58516,58517,58518,58519,58520,58521,58522,58523,58524,58525,58526,58527,58528,58529,58530,58531,58532,58533,58534,58535,58536,58537,58538,58539,58540,58541,58542,58543,58544,58545,58546,58547,58548,58549,58550,58551,58552,58553,58554,58555,58556,58557,58558,58559,58560,58561,58562,58563,58564,58565], + 'gb18030-ranges': [[0,128],[36,165],[38,169],[45,178],[50,184],[81,216],[89,226],[95,235],[96,238],[100,244],[103,248],[104,251],[105,253],[109,258],[126,276],[133,284],[148,300],[172,325],[175,329],[179,334],[208,364],[306,463],[307,465],[308,467],[309,469],[310,471],[311,473],[312,475],[313,477],[341,506],[428,594],[443,610],[544,712],[545,716],[558,730],[741,930],[742,938],[749,962],[750,970],[805,1026],[819,1104],[820,1106],[7922,8209],[7924,8215],[7925,8218],[7927,8222],[7934,8231],[7943,8241],[7944,8244],[7945,8246],[7950,8252],[8062,8365],[8148,8452],[8149,8454],[8152,8458],[8164,8471],[8174,8482],[8236,8556],[8240,8570],[8262,8596],[8264,8602],[8374,8713],[8380,8720],[8381,8722],[8384,8726],[8388,8731],[8390,8737],[8392,8740],[8393,8742],[8394,8748],[8396,8751],[8401,8760],[8406,8766],[8416,8777],[8419,8781],[8424,8787],[8437,8802],[8439,8808],[8445,8816],[8482,8854],[8485,8858],[8496,8870],[8521,8896],[8603,8979],[8936,9322],[8946,9372],[9046,9548],[9050,9588],[9063,9616],[9066,9622],[9076,9634],[9092,9652],[9100,9662],[9108,9672],[9111,9676],[9113,9680],[9131,9702],[9162,9735],[9164,9738],[9218,9793],[9219,9795],[11329,11906],[11331,11909],[11334,11913],[11336,11917],[11346,11928],[11361,11944],[11363,11947],[11366,11951],[11370,11956],[11372,11960],[11375,11964],[11389,11979],[11682,12284],[11686,12292],[11687,12312],[11692,12319],[11694,12330],[11714,12351],[11716,12436],[11723,12447],[11725,12535],[11730,12543],[11736,12586],[11982,12842],[11989,12850],[12102,12964],[12336,13200],[12348,13215],[12350,13218],[12384,13253],[12393,13263],[12395,13267],[12397,13270],[12510,13384],[12553,13428],[12851,13727],[12962,13839],[12973,13851],[13738,14617],[13823,14703],[13919,14801],[13933,14816],[14080,14964],[14298,15183],[14585,15471],[14698,15585],[15583,16471],[15847,16736],[16318,17208],[16434,17325],[16438,17330],[16481,17374],[16729,17623],[17102,17997],[17122,18018],[17315,18212],[17320,18218],[17402,18301],[17418,18318],[17859,18760],[17909,18811],[17911,18814],[17915,18820],[17916,18823],[17936,18844],[17939,18848],[17961,18872],[18664,19576],[18703,19620],[18814,19738],[18962,19887],[19043,40870],[33469,59244],[33470,59336],[33471,59367],[33484,59413],[33485,59417],[33490,59423],[33497,59431],[33501,59437],[33505,59443],[33513,59452],[33520,59460],[33536,59478],[33550,59493],[37845,63789],[37921,63866],[37948,63894],[38029,63976],[38038,63986],[38064,64016],[38065,64018],[38066,64021],[38069,64025],[38075,64034],[38076,64037],[38078,64042],[39108,65074],[39109,65093],[39113,65107],[39114,65112],[39115,65127],[39116,65132],[39265,65375],[39394,65510],[189000,65536]], + 'jis0208': [12288,12289,12290,65292,65294,12539,65306,65307,65311,65281,12443,12444,180,65344,168,65342,65507,65343,12541,12542,12445,12446,12291,20189,12293,12294,12295,12540,8213,8208,65295,65340,65374,8741,65372,8230,8229,8216,8217,8220,8221,65288,65289,12308,12309,65339,65341,65371,65373,12296,12297,12298,12299,12300,12301,12302,12303,12304,12305,65291,65293,177,215,247,65309,8800,65308,65310,8806,8807,8734,8756,9794,9792,176,8242,8243,8451,65509,65284,65504,65505,65285,65283,65286,65290,65312,167,9734,9733,9675,9679,9678,9671,9670,9633,9632,9651,9650,9661,9660,8251,12306,8594,8592,8593,8595,12307,null,null,null,null,null,null,null,null,null,null,null,8712,8715,8838,8839,8834,8835,8746,8745,null,null,null,null,null,null,null,null,8743,8744,65506,8658,8660,8704,8707,null,null,null,null,null,null,null,null,null,null,null,8736,8869,8978,8706,8711,8801,8786,8810,8811,8730,8765,8733,8757,8747,8748,null,null,null,null,null,null,null,8491,8240,9839,9837,9834,8224,8225,182,null,null,null,null,9711,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305,null,null,null,null,null,null,null,65313,65314,65315,65316,65317,65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333,65334,65335,65336,65337,65338,null,null,null,null,null,null,65345,65346,65347,65348,65349,65350,65351,65352,65353,65354,65355,65356,65357,65358,65359,65360,65361,65362,65363,65364,65365,65366,65367,65368,65369,65370,null,null,null,null,12353,12354,12355,12356,12357,12358,12359,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369,12370,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384,12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400,12401,12402,12403,12404,12405,12406,12407,12408,12409,12410,12411,12412,12413,12414,12415,12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431,12432,12433,12434,12435,null,null,null,null,null,null,null,null,null,null,null,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462,12463,12464,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477,12478,12479,12480,12481,12482,12483,12484,12485,12486,12487,12488,12489,12490,12491,12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507,12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523,12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,null,null,null,null,null,null,null,null,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,null,null,null,null,null,null,null,null,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,963,964,965,966,967,968,969,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1040,1041,1042,1043,1044,1045,1025,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1072,1073,1074,1075,1076,1077,1105,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,null,null,null,null,null,null,null,null,null,null,null,null,null,9472,9474,9484,9488,9496,9492,9500,9516,9508,9524,9532,9473,9475,9487,9491,9499,9495,9507,9523,9515,9531,9547,9504,9519,9512,9527,9535,9501,9520,9509,9528,9538,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,9312,9313,9314,9315,9316,9317,9318,9319,9320,9321,9322,9323,9324,9325,9326,9327,9328,9329,9330,9331,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,null,13129,13076,13090,13133,13080,13095,13059,13110,13137,13143,13069,13094,13091,13099,13130,13115,13212,13213,13214,13198,13199,13252,13217,null,null,null,null,null,null,null,null,13179,12317,12319,8470,13261,8481,12964,12965,12966,12967,12968,12849,12850,12857,13182,13181,13180,8786,8801,8747,8750,8721,8730,8869,8736,8735,8895,8757,8745,8746,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,20124,21782,23043,38463,21696,24859,25384,23030,36898,33909,33564,31312,24746,25569,28197,26093,33894,33446,39925,26771,22311,26017,25201,23451,22992,34427,39156,32098,32190,39822,25110,31903,34999,23433,24245,25353,26263,26696,38343,38797,26447,20197,20234,20301,20381,20553,22258,22839,22996,23041,23561,24799,24847,24944,26131,26885,28858,30031,30064,31227,32173,32239,32963,33806,34915,35586,36949,36986,21307,20117,20133,22495,32946,37057,30959,19968,22769,28322,36920,31282,33576,33419,39983,20801,21360,21693,21729,22240,23035,24341,39154,28139,32996,34093,38498,38512,38560,38907,21515,21491,23431,28879,32701,36802,38632,21359,40284,31418,19985,30867,33276,28198,22040,21764,27421,34074,39995,23013,21417,28006,29916,38287,22082,20113,36939,38642,33615,39180,21473,21942,23344,24433,26144,26355,26628,27704,27891,27945,29787,30408,31310,38964,33521,34907,35424,37613,28082,30123,30410,39365,24742,35585,36234,38322,27022,21421,20870,22290,22576,22852,23476,24310,24616,25513,25588,27839,28436,28814,28948,29017,29141,29503,32257,33398,33489,34199,36960,37467,40219,22633,26044,27738,29989,20985,22830,22885,24448,24540,25276,26106,27178,27431,27572,29579,32705,35158,40236,40206,40644,23713,27798,33659,20740,23627,25014,33222,26742,29281,20057,20474,21368,24681,28201,31311,38899,19979,21270,20206,20309,20285,20385,20339,21152,21487,22025,22799,23233,23478,23521,31185,26247,26524,26550,27468,27827,28779,29634,31117,31166,31292,31623,33457,33499,33540,33655,33775,33747,34662,35506,22057,36008,36838,36942,38686,34442,20420,23784,25105,29273,30011,33253,33469,34558,36032,38597,39187,39381,20171,20250,35299,22238,22602,22730,24315,24555,24618,24724,24674,25040,25106,25296,25913,39745,26214,26800,28023,28784,30028,30342,32117,33445,34809,38283,38542,35997,20977,21182,22806,21683,23475,23830,24936,27010,28079,30861,33995,34903,35442,37799,39608,28012,39336,34521,22435,26623,34510,37390,21123,22151,21508,24275,25313,25785,26684,26680,27579,29554,30906,31339,35226,35282,36203,36611,37101,38307,38548,38761,23398,23731,27005,38989,38990,25499,31520,27179,27263,26806,39949,28511,21106,21917,24688,25324,27963,28167,28369,33883,35088,36676,19988,39993,21494,26907,27194,38788,26666,20828,31427,33970,37340,37772,22107,40232,26658,33541,33841,31909,21000,33477,29926,20094,20355,20896,23506,21002,21208,21223,24059,21914,22570,23014,23436,23448,23515,24178,24185,24739,24863,24931,25022,25563,25954,26577,26707,26874,27454,27475,27735,28450,28567,28485,29872,29976,30435,30475,31487,31649,31777,32233,32566,32752,32925,33382,33694,35251,35532,36011,36996,37969,38291,38289,38306,38501,38867,39208,33304,20024,21547,23736,24012,29609,30284,30524,23721,32747,36107,38593,38929,38996,39000,20225,20238,21361,21916,22120,22522,22855,23305,23492,23696,24076,24190,24524,25582,26426,26071,26082,26399,26827,26820,27231,24112,27589,27671,27773,30079,31048,23395,31232,32000,24509,35215,35352,36020,36215,36556,36637,39138,39438,39740,20096,20605,20736,22931,23452,25135,25216,25836,27450,29344,30097,31047,32681,34811,35516,35696,25516,33738,38816,21513,21507,21931,26708,27224,35440,30759,26485,40653,21364,23458,33050,34384,36870,19992,20037,20167,20241,21450,21560,23470,24339,24613,25937,26429,27714,27762,27875,28792,29699,31350,31406,31496,32026,31998,32102,26087,29275,21435,23621,24040,25298,25312,25369,28192,34394,35377,36317,37624,28417,31142,39770,20136,20139,20140,20379,20384,20689,20807,31478,20849,20982,21332,21281,21375,21483,21932,22659,23777,24375,24394,24623,24656,24685,25375,25945,27211,27841,29378,29421,30703,33016,33029,33288,34126,37111,37857,38911,39255,39514,20208,20957,23597,26241,26989,23616,26354,26997,29577,26704,31873,20677,21220,22343,24062,37670,26020,27427,27453,29748,31105,31165,31563,32202,33465,33740,34943,35167,35641,36817,37329,21535,37504,20061,20534,21477,21306,29399,29590,30697,33510,36527,39366,39368,39378,20855,24858,34398,21936,31354,20598,23507,36935,38533,20018,27355,37351,23633,23624,25496,31391,27795,38772,36705,31402,29066,38536,31874,26647,32368,26705,37740,21234,21531,34219,35347,32676,36557,37089,21350,34952,31041,20418,20670,21009,20804,21843,22317,29674,22411,22865,24418,24452,24693,24950,24935,25001,25522,25658,25964,26223,26690,28179,30054,31293,31995,32076,32153,32331,32619,33550,33610,34509,35336,35427,35686,36605,38938,40335,33464,36814,39912,21127,25119,25731,28608,38553,26689,20625,27424,27770,28500,31348,32080,34880,35363,26376,20214,20537,20518,20581,20860,21048,21091,21927,22287,22533,23244,24314,25010,25080,25331,25458,26908,27177,29309,29356,29486,30740,30831,32121,30476,32937,35211,35609,36066,36562,36963,37749,38522,38997,39443,40568,20803,21407,21427,24187,24358,28187,28304,29572,29694,32067,33335,35328,35578,38480,20046,20491,21476,21628,22266,22993,23396,24049,24235,24359,25144,25925,26543,28246,29392,31946,34996,32929,32993,33776,34382,35463,36328,37431,38599,39015,40723,20116,20114,20237,21320,21577,21566,23087,24460,24481,24735,26791,27278,29786,30849,35486,35492,35703,37264,20062,39881,20132,20348,20399,20505,20502,20809,20844,21151,21177,21246,21402,21475,21521,21518,21897,22353,22434,22909,23380,23389,23439,24037,24039,24055,24184,24195,24218,24247,24344,24658,24908,25239,25304,25511,25915,26114,26179,26356,26477,26657,26775,27083,27743,27946,28009,28207,28317,30002,30343,30828,31295,31968,32005,32024,32094,32177,32789,32771,32943,32945,33108,33167,33322,33618,34892,34913,35611,36002,36092,37066,37237,37489,30783,37628,38308,38477,38917,39321,39640,40251,21083,21163,21495,21512,22741,25335,28640,35946,36703,40633,20811,21051,21578,22269,31296,37239,40288,40658,29508,28425,33136,29969,24573,24794,39592,29403,36796,27492,38915,20170,22256,22372,22718,23130,24680,25031,26127,26118,26681,26801,28151,30165,32058,33390,39746,20123,20304,21449,21766,23919,24038,24046,26619,27801,29811,30722,35408,37782,35039,22352,24231,25387,20661,20652,20877,26368,21705,22622,22971,23472,24425,25165,25505,26685,27507,28168,28797,37319,29312,30741,30758,31085,25998,32048,33756,35009,36617,38555,21092,22312,26448,32618,36001,20916,22338,38442,22586,27018,32948,21682,23822,22524,30869,40442,20316,21066,21643,25662,26152,26388,26613,31364,31574,32034,37679,26716,39853,31545,21273,20874,21047,23519,25334,25774,25830,26413,27578,34217,38609,30352,39894,25420,37638,39851,30399,26194,19977,20632,21442,23665,24808,25746,25955,26719,29158,29642,29987,31639,32386,34453,35715,36059,37240,39184,26028,26283,27531,20181,20180,20282,20351,21050,21496,21490,21987,22235,22763,22987,22985,23039,23376,23629,24066,24107,24535,24605,25351,25903,23388,26031,26045,26088,26525,27490,27515,27663,29509,31049,31169,31992,32025,32043,32930,33026,33267,35222,35422,35433,35430,35468,35566,36039,36060,38604,39164,27503,20107,20284,20365,20816,23383,23546,24904,25345,26178,27425,28363,27835,29246,29885,30164,30913,31034,32780,32819,33258,33940,36766,27728,40575,24335,35672,40235,31482,36600,23437,38635,19971,21489,22519,22833,23241,23460,24713,28287,28422,30142,36074,23455,34048,31712,20594,26612,33437,23649,34122,32286,33294,20889,23556,25448,36198,26012,29038,31038,32023,32773,35613,36554,36974,34503,37034,20511,21242,23610,26451,28796,29237,37196,37320,37675,33509,23490,24369,24825,20027,21462,23432,25163,26417,27530,29417,29664,31278,33131,36259,37202,39318,20754,21463,21610,23551,25480,27193,32172,38656,22234,21454,21608,23447,23601,24030,20462,24833,25342,27954,31168,31179,32066,32333,32722,33261,33311,33936,34886,35186,35728,36468,36655,36913,37195,37228,38598,37276,20160,20303,20805,21313,24467,25102,26580,27713,28171,29539,32294,37325,37507,21460,22809,23487,28113,31069,32302,31899,22654,29087,20986,34899,36848,20426,23803,26149,30636,31459,33308,39423,20934,24490,26092,26991,27529,28147,28310,28516,30462,32020,24033,36981,37255,38918,20966,21021,25152,26257,26329,28186,24246,32210,32626,26360,34223,34295,35576,21161,21465,22899,24207,24464,24661,37604,38500,20663,20767,21213,21280,21319,21484,21736,21830,21809,22039,22888,22974,23100,23477,23558,23567,23569,23578,24196,24202,24288,24432,25215,25220,25307,25484,25463,26119,26124,26157,26230,26494,26786,27167,27189,27836,28040,28169,28248,28988,28966,29031,30151,30465,30813,30977,31077,31216,31456,31505,31911,32057,32918,33750,33931,34121,34909,35059,35359,35388,35412,35443,35937,36062,37284,37478,37758,37912,38556,38808,19978,19976,19998,20055,20887,21104,22478,22580,22732,23330,24120,24773,25854,26465,26454,27972,29366,30067,31331,33976,35698,37304,37664,22065,22516,39166,25325,26893,27542,29165,32340,32887,33394,35302,39135,34645,36785,23611,20280,20449,20405,21767,23072,23517,23529,24515,24910,25391,26032,26187,26862,27035,28024,28145,30003,30137,30495,31070,31206,32051,33251,33455,34218,35242,35386,36523,36763,36914,37341,38663,20154,20161,20995,22645,22764,23563,29978,23613,33102,35338,36805,38499,38765,31525,35535,38920,37218,22259,21416,36887,21561,22402,24101,25512,27700,28810,30561,31883,32736,34928,36930,37204,37648,37656,38543,29790,39620,23815,23913,25968,26530,36264,38619,25454,26441,26905,33733,38935,38592,35070,28548,25722,23544,19990,28716,30045,26159,20932,21046,21218,22995,24449,24615,25104,25919,25972,26143,26228,26866,26646,27491,28165,29298,29983,30427,31934,32854,22768,35069,35199,35488,35475,35531,36893,37266,38738,38745,25993,31246,33030,38587,24109,24796,25114,26021,26132,26512,30707,31309,31821,32318,33034,36012,36196,36321,36447,30889,20999,25305,25509,25666,25240,35373,31363,31680,35500,38634,32118,33292,34633,20185,20808,21315,21344,23459,23554,23574,24029,25126,25159,25776,26643,26676,27849,27973,27927,26579,28508,29006,29053,26059,31359,31661,32218,32330,32680,33146,33307,33337,34214,35438,36046,36341,36984,36983,37549,37521,38275,39854,21069,21892,28472,28982,20840,31109,32341,33203,31950,22092,22609,23720,25514,26366,26365,26970,29401,30095,30094,30990,31062,31199,31895,32032,32068,34311,35380,38459,36961,40736,20711,21109,21452,21474,20489,21930,22766,22863,29245,23435,23652,21277,24803,24819,25436,25475,25407,25531,25805,26089,26361,24035,27085,27133,28437,29157,20105,30185,30456,31379,31967,32207,32156,32865,33609,33624,33900,33980,34299,35013,36208,36865,36973,37783,38684,39442,20687,22679,24974,33235,34101,36104,36896,20419,20596,21063,21363,24687,25417,26463,28204,36275,36895,20439,23646,36042,26063,32154,21330,34966,20854,25539,23384,23403,23562,25613,26449,36956,20182,22810,22826,27760,35409,21822,22549,22949,24816,25171,26561,33333,26965,38464,39364,39464,20307,22534,23550,32784,23729,24111,24453,24608,24907,25140,26367,27888,28382,32974,33151,33492,34955,36024,36864,36910,38538,40667,39899,20195,21488,22823,31532,37261,38988,40441,28381,28711,21331,21828,23429,25176,25246,25299,27810,28655,29730,35351,37944,28609,35582,33592,20967,34552,21482,21481,20294,36948,36784,22890,33073,24061,31466,36799,26842,35895,29432,40008,27197,35504,20025,21336,22022,22374,25285,25506,26086,27470,28129,28251,28845,30701,31471,31658,32187,32829,32966,34507,35477,37723,22243,22727,24382,26029,26262,27264,27573,30007,35527,20516,30693,22320,24347,24677,26234,27744,30196,31258,32622,33268,34584,36933,39347,31689,30044,31481,31569,33988,36880,31209,31378,33590,23265,30528,20013,20210,23449,24544,25277,26172,26609,27880,34411,34935,35387,37198,37619,39376,27159,28710,29482,33511,33879,36015,19969,20806,20939,21899,23541,24086,24115,24193,24340,24373,24427,24500,25074,25361,26274,26397,28526,29266,30010,30522,32884,33081,33144,34678,35519,35548,36229,36339,37530,38263,38914,40165,21189,25431,30452,26389,27784,29645,36035,37806,38515,27941,22684,26894,27084,36861,37786,30171,36890,22618,26626,25524,27131,20291,28460,26584,36795,34086,32180,37716,26943,28528,22378,22775,23340,32044,29226,21514,37347,40372,20141,20302,20572,20597,21059,35998,21576,22564,23450,24093,24213,24237,24311,24351,24716,25269,25402,25552,26799,27712,30855,31118,31243,32224,33351,35330,35558,36420,36883,37048,37165,37336,40718,27877,25688,25826,25973,28404,30340,31515,36969,37841,28346,21746,24505,25764,36685,36845,37444,20856,22635,22825,23637,24215,28155,32399,29980,36028,36578,39003,28857,20253,27583,28593,30000,38651,20814,21520,22581,22615,22956,23648,24466,26007,26460,28193,30331,33759,36077,36884,37117,37709,30757,30778,21162,24230,22303,22900,24594,20498,20826,20908,20941,20992,21776,22612,22616,22871,23445,23798,23947,24764,25237,25645,26481,26691,26812,26847,30423,28120,28271,28059,28783,29128,24403,30168,31095,31561,31572,31570,31958,32113,21040,33891,34153,34276,35342,35588,35910,36367,36867,36879,37913,38518,38957,39472,38360,20685,21205,21516,22530,23566,24999,25758,27934,30643,31461,33012,33796,36947,37509,23776,40199,21311,24471,24499,28060,29305,30563,31167,31716,27602,29420,35501,26627,27233,20984,31361,26932,23626,40182,33515,23493,37193,28702,22136,23663,24775,25958,27788,35930,36929,38931,21585,26311,37389,22856,37027,20869,20045,20970,34201,35598,28760,25466,37707,26978,39348,32260,30071,21335,26976,36575,38627,27741,20108,23612,24336,36841,21250,36049,32905,34425,24319,26085,20083,20837,22914,23615,38894,20219,22922,24525,35469,28641,31152,31074,23527,33905,29483,29105,24180,24565,25467,25754,29123,31896,20035,24316,20043,22492,22178,24745,28611,32013,33021,33075,33215,36786,35223,34468,24052,25226,25773,35207,26487,27874,27966,29750,30772,23110,32629,33453,39340,20467,24259,25309,25490,25943,26479,30403,29260,32972,32954,36649,37197,20493,22521,23186,26757,26995,29028,29437,36023,22770,36064,38506,36889,34687,31204,30695,33833,20271,21093,21338,25293,26575,27850,30333,31636,31893,33334,34180,36843,26333,28448,29190,32283,33707,39361,40614,20989,31665,30834,31672,32903,31560,27368,24161,32908,30033,30048,20843,37474,28300,30330,37271,39658,20240,32624,25244,31567,38309,40169,22138,22617,34532,38588,20276,21028,21322,21453,21467,24070,25644,26001,26495,27710,27726,29256,29359,29677,30036,32321,33324,34281,36009,31684,37318,29033,38930,39151,25405,26217,30058,30436,30928,34115,34542,21290,21329,21542,22915,24199,24444,24754,25161,25209,25259,26000,27604,27852,30130,30382,30865,31192,32203,32631,32933,34987,35513,36027,36991,38750,39131,27147,31800,20633,23614,24494,26503,27608,29749,30473,32654,40763,26570,31255,21305,30091,39661,24422,33181,33777,32920,24380,24517,30050,31558,36924,26727,23019,23195,32016,30334,35628,20469,24426,27161,27703,28418,29922,31080,34920,35413,35961,24287,25551,30149,31186,33495,37672,37618,33948,34541,39981,21697,24428,25996,27996,28693,36007,36051,38971,25935,29942,19981,20184,22496,22827,23142,23500,20904,24067,24220,24598,25206,25975,26023,26222,28014,29238,31526,33104,33178,33433,35676,36000,36070,36212,38428,38468,20398,25771,27494,33310,33889,34154,37096,23553,26963,39080,33914,34135,20239,21103,24489,24133,26381,31119,33145,35079,35206,28149,24343,25173,27832,20175,29289,39826,20998,21563,22132,22707,24996,25198,28954,22894,31881,31966,32027,38640,25991,32862,19993,20341,20853,22592,24163,24179,24330,26564,20006,34109,38281,38491,31859,38913,20731,22721,30294,30887,21029,30629,34065,31622,20559,22793,29255,31687,32232,36794,36820,36941,20415,21193,23081,24321,38829,20445,33303,37610,22275,25429,27497,29995,35036,36628,31298,21215,22675,24917,25098,26286,27597,31807,33769,20515,20472,21253,21574,22577,22857,23453,23792,23791,23849,24214,25265,25447,25918,26041,26379,27861,27873,28921,30770,32299,32990,33459,33804,34028,34562,35090,35370,35914,37030,37586,39165,40179,40300,20047,20129,20621,21078,22346,22952,24125,24536,24537,25151,26292,26395,26576,26834,20882,32033,32938,33192,35584,35980,36031,37502,38450,21536,38956,21271,20693,21340,22696,25778,26420,29287,30566,31302,37350,21187,27809,27526,22528,24140,22868,26412,32763,20961,30406,25705,30952,39764,40635,22475,22969,26151,26522,27598,21737,27097,24149,33180,26517,39850,26622,40018,26717,20134,20451,21448,25273,26411,27819,36804,20397,32365,40639,19975,24930,28288,28459,34067,21619,26410,39749,24051,31637,23724,23494,34588,28234,34001,31252,33032,22937,31885,27665,30496,21209,22818,28961,29279,30683,38695,40289,26891,23167,23064,20901,21517,21629,26126,30431,36855,37528,40180,23018,29277,28357,20813,26825,32191,32236,38754,40634,25720,27169,33538,22916,23391,27611,29467,30450,32178,32791,33945,20786,26408,40665,30446,26466,21247,39173,23588,25147,31870,36016,21839,24758,32011,38272,21249,20063,20918,22812,29242,32822,37326,24357,30690,21380,24441,32004,34220,35379,36493,38742,26611,34222,37971,24841,24840,27833,30290,35565,36664,21807,20305,20778,21191,21451,23461,24189,24736,24962,25558,26377,26586,28263,28044,29494,29495,30001,31056,35029,35480,36938,37009,37109,38596,34701,22805,20104,20313,19982,35465,36671,38928,20653,24188,22934,23481,24248,25562,25594,25793,26332,26954,27096,27915,28342,29076,29992,31407,32650,32768,33865,33993,35201,35617,36362,36965,38525,39178,24958,25233,27442,27779,28020,32716,32764,28096,32645,34746,35064,26469,33713,38972,38647,27931,32097,33853,37226,20081,21365,23888,27396,28651,34253,34349,35239,21033,21519,23653,26446,26792,29702,29827,30178,35023,35041,37324,38626,38520,24459,29575,31435,33870,25504,30053,21129,27969,28316,29705,30041,30827,31890,38534,31452,40845,20406,24942,26053,34396,20102,20142,20698,20001,20940,23534,26009,26753,28092,29471,30274,30637,31260,31975,33391,35538,36988,37327,38517,38936,21147,32209,20523,21400,26519,28107,29136,29747,33256,36650,38563,40023,40607,29792,22593,28057,32047,39006,20196,20278,20363,20919,21169,23994,24604,29618,31036,33491,37428,38583,38646,38666,40599,40802,26278,27508,21015,21155,28872,35010,24265,24651,24976,28451,29001,31806,32244,32879,34030,36899,37676,21570,39791,27347,28809,36034,36335,38706,21172,23105,24266,24324,26391,27004,27028,28010,28431,29282,29436,31725,32769,32894,34635,37070,20845,40595,31108,32907,37682,35542,20525,21644,35441,27498,36036,33031,24785,26528,40434,20121,20120,39952,35435,34241,34152,26880,28286,30871,33109,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,24332,19984,19989,20010,20017,20022,20028,20031,20034,20054,20056,20098,20101,35947,20106,33298,24333,20110,20126,20127,20128,20130,20144,20147,20150,20174,20173,20164,20166,20162,20183,20190,20205,20191,20215,20233,20314,20272,20315,20317,20311,20295,20342,20360,20367,20376,20347,20329,20336,20369,20335,20358,20374,20760,20436,20447,20430,20440,20443,20433,20442,20432,20452,20453,20506,20520,20500,20522,20517,20485,20252,20470,20513,20521,20524,20478,20463,20497,20486,20547,20551,26371,20565,20560,20552,20570,20566,20588,20600,20608,20634,20613,20660,20658,20681,20682,20659,20674,20694,20702,20709,20717,20707,20718,20729,20725,20745,20737,20738,20758,20757,20756,20762,20769,20794,20791,20796,20795,20799,20800,20818,20812,20820,20834,31480,20841,20842,20846,20864,20866,22232,20876,20873,20879,20881,20883,20885,20886,20900,20902,20898,20905,20906,20907,20915,20913,20914,20912,20917,20925,20933,20937,20955,20960,34389,20969,20973,20976,20981,20990,20996,21003,21012,21006,21031,21034,21038,21043,21049,21071,21060,21067,21068,21086,21076,21098,21108,21097,21107,21119,21117,21133,21140,21138,21105,21128,21137,36776,36775,21164,21165,21180,21173,21185,21197,21207,21214,21219,21222,39149,21216,21235,21237,21240,21241,21254,21256,30008,21261,21264,21263,21269,21274,21283,21295,21297,21299,21304,21312,21318,21317,19991,21321,21325,20950,21342,21353,21358,22808,21371,21367,21378,21398,21408,21414,21413,21422,21424,21430,21443,31762,38617,21471,26364,29166,21486,21480,21485,21498,21505,21565,21568,21548,21549,21564,21550,21558,21545,21533,21582,21647,21621,21646,21599,21617,21623,21616,21650,21627,21632,21622,21636,21648,21638,21703,21666,21688,21669,21676,21700,21704,21672,21675,21698,21668,21694,21692,21720,21733,21734,21775,21780,21757,21742,21741,21754,21730,21817,21824,21859,21836,21806,21852,21829,21846,21847,21816,21811,21853,21913,21888,21679,21898,21919,21883,21886,21912,21918,21934,21884,21891,21929,21895,21928,21978,21957,21983,21956,21980,21988,21972,22036,22007,22038,22014,22013,22043,22009,22094,22096,29151,22068,22070,22066,22072,22123,22116,22063,22124,22122,22150,22144,22154,22176,22164,22159,22181,22190,22198,22196,22210,22204,22209,22211,22208,22216,22222,22225,22227,22231,22254,22265,22272,22271,22276,22281,22280,22283,22285,22291,22296,22294,21959,22300,22310,22327,22328,22350,22331,22336,22351,22377,22464,22408,22369,22399,22409,22419,22432,22451,22436,22442,22448,22467,22470,22484,22482,22483,22538,22486,22499,22539,22553,22557,22642,22561,22626,22603,22640,27584,22610,22589,22649,22661,22713,22687,22699,22714,22750,22715,22712,22702,22725,22739,22737,22743,22745,22744,22757,22748,22756,22751,22767,22778,22777,22779,22780,22781,22786,22794,22800,22811,26790,22821,22828,22829,22834,22840,22846,31442,22869,22864,22862,22874,22872,22882,22880,22887,22892,22889,22904,22913,22941,20318,20395,22947,22962,22982,23016,23004,22925,23001,23002,23077,23071,23057,23068,23049,23066,23104,23148,23113,23093,23094,23138,23146,23194,23228,23230,23243,23234,23229,23267,23255,23270,23273,23254,23290,23291,23308,23307,23318,23346,23248,23338,23350,23358,23363,23365,23360,23377,23381,23386,23387,23397,23401,23408,23411,23413,23416,25992,23418,23424,23427,23462,23480,23491,23495,23497,23508,23504,23524,23526,23522,23518,23525,23531,23536,23542,23539,23557,23559,23560,23565,23571,23584,23586,23592,23608,23609,23617,23622,23630,23635,23632,23631,23409,23660,23662,20066,23670,23673,23692,23697,23700,22939,23723,23739,23734,23740,23735,23749,23742,23751,23769,23785,23805,23802,23789,23948,23786,23819,23829,23831,23900,23839,23835,23825,23828,23842,23834,23833,23832,23884,23890,23886,23883,23916,23923,23926,23943,23940,23938,23970,23965,23980,23982,23997,23952,23991,23996,24009,24013,24019,24018,24022,24027,24043,24050,24053,24075,24090,24089,24081,24091,24118,24119,24132,24131,24128,24142,24151,24148,24159,24162,24164,24135,24181,24182,24186,40636,24191,24224,24257,24258,24264,24272,24271,24278,24291,24285,24282,24283,24290,24289,24296,24297,24300,24305,24307,24304,24308,24312,24318,24323,24329,24413,24412,24331,24337,24342,24361,24365,24376,24385,24392,24396,24398,24367,24401,24406,24407,24409,24417,24429,24435,24439,24451,24450,24447,24458,24456,24465,24455,24478,24473,24472,24480,24488,24493,24508,24534,24571,24548,24568,24561,24541,24755,24575,24609,24672,24601,24592,24617,24590,24625,24603,24597,24619,24614,24591,24634,24666,24641,24682,24695,24671,24650,24646,24653,24675,24643,24676,24642,24684,24683,24665,24705,24717,24807,24707,24730,24708,24731,24726,24727,24722,24743,24715,24801,24760,24800,24787,24756,24560,24765,24774,24757,24792,24909,24853,24838,24822,24823,24832,24820,24826,24835,24865,24827,24817,24845,24846,24903,24894,24872,24871,24906,24895,24892,24876,24884,24893,24898,24900,24947,24951,24920,24921,24922,24939,24948,24943,24933,24945,24927,24925,24915,24949,24985,24982,24967,25004,24980,24986,24970,24977,25003,25006,25036,25034,25033,25079,25032,25027,25030,25018,25035,32633,25037,25062,25059,25078,25082,25076,25087,25085,25084,25086,25088,25096,25097,25101,25100,25108,25115,25118,25121,25130,25134,25136,25138,25139,25153,25166,25182,25187,25179,25184,25192,25212,25218,25225,25214,25234,25235,25238,25300,25219,25236,25303,25297,25275,25295,25343,25286,25812,25288,25308,25292,25290,25282,25287,25243,25289,25356,25326,25329,25383,25346,25352,25327,25333,25424,25406,25421,25628,25423,25494,25486,25472,25515,25462,25507,25487,25481,25503,25525,25451,25449,25534,25577,25536,25542,25571,25545,25554,25590,25540,25622,25652,25606,25619,25638,25654,25885,25623,25640,25615,25703,25711,25718,25678,25898,25749,25747,25765,25769,25736,25788,25818,25810,25797,25799,25787,25816,25794,25841,25831,33289,25824,25825,25260,25827,25839,25900,25846,25844,25842,25850,25856,25853,25880,25884,25861,25892,25891,25899,25908,25909,25911,25910,25912,30027,25928,25942,25941,25933,25944,25950,25949,25970,25976,25986,25987,35722,26011,26015,26027,26039,26051,26054,26049,26052,26060,26066,26075,26073,26080,26081,26097,26482,26122,26115,26107,26483,26165,26166,26164,26140,26191,26180,26185,26177,26206,26205,26212,26215,26216,26207,26210,26224,26243,26248,26254,26249,26244,26264,26269,26305,26297,26313,26302,26300,26308,26296,26326,26330,26336,26175,26342,26345,26352,26357,26359,26383,26390,26398,26406,26407,38712,26414,26431,26422,26433,26424,26423,26438,26462,26464,26457,26467,26468,26505,26480,26537,26492,26474,26508,26507,26534,26529,26501,26551,26607,26548,26604,26547,26601,26552,26596,26590,26589,26594,26606,26553,26574,26566,26599,27292,26654,26694,26665,26688,26701,26674,26702,26803,26667,26713,26723,26743,26751,26783,26767,26797,26772,26781,26779,26755,27310,26809,26740,26805,26784,26810,26895,26765,26750,26881,26826,26888,26840,26914,26918,26849,26892,26829,26836,26855,26837,26934,26898,26884,26839,26851,26917,26873,26848,26863,26920,26922,26906,26915,26913,26822,27001,26999,26972,27000,26987,26964,27006,26990,26937,26996,26941,26969,26928,26977,26974,26973,27009,26986,27058,27054,27088,27071,27073,27091,27070,27086,23528,27082,27101,27067,27075,27047,27182,27025,27040,27036,27029,27060,27102,27112,27138,27163,27135,27402,27129,27122,27111,27141,27057,27166,27117,27156,27115,27146,27154,27329,27171,27155,27204,27148,27250,27190,27256,27207,27234,27225,27238,27208,27192,27170,27280,27277,27296,27268,27298,27299,27287,34327,27323,27331,27330,27320,27315,27308,27358,27345,27359,27306,27354,27370,27387,27397,34326,27386,27410,27414,39729,27423,27448,27447,30428,27449,39150,27463,27459,27465,27472,27481,27476,27483,27487,27489,27512,27513,27519,27520,27524,27523,27533,27544,27541,27550,27556,27562,27563,27567,27570,27569,27571,27575,27580,27590,27595,27603,27615,27628,27627,27635,27631,40638,27656,27667,27668,27675,27684,27683,27742,27733,27746,27754,27778,27789,27802,27777,27803,27774,27752,27763,27794,27792,27844,27889,27859,27837,27863,27845,27869,27822,27825,27838,27834,27867,27887,27865,27882,27935,34893,27958,27947,27965,27960,27929,27957,27955,27922,27916,28003,28051,28004,27994,28025,27993,28046,28053,28644,28037,28153,28181,28170,28085,28103,28134,28088,28102,28140,28126,28108,28136,28114,28101,28154,28121,28132,28117,28138,28142,28205,28270,28206,28185,28274,28255,28222,28195,28267,28203,28278,28237,28191,28227,28218,28238,28196,28415,28189,28216,28290,28330,28312,28361,28343,28371,28349,28335,28356,28338,28372,28373,28303,28325,28354,28319,28481,28433,28748,28396,28408,28414,28479,28402,28465,28399,28466,28364,28478,28435,28407,28550,28538,28536,28545,28544,28527,28507,28659,28525,28546,28540,28504,28558,28561,28610,28518,28595,28579,28577,28580,28601,28614,28586,28639,28629,28652,28628,28632,28657,28654,28635,28681,28683,28666,28689,28673,28687,28670,28699,28698,28532,28701,28696,28703,28720,28734,28722,28753,28771,28825,28818,28847,28913,28844,28856,28851,28846,28895,28875,28893,28889,28937,28925,28956,28953,29029,29013,29064,29030,29026,29004,29014,29036,29071,29179,29060,29077,29096,29100,29143,29113,29118,29138,29129,29140,29134,29152,29164,29159,29173,29180,29177,29183,29197,29200,29211,29224,29229,29228,29232,29234,29243,29244,29247,29248,29254,29259,29272,29300,29310,29314,29313,29319,29330,29334,29346,29351,29369,29362,29379,29382,29380,29390,29394,29410,29408,29409,29433,29431,20495,29463,29450,29468,29462,29469,29492,29487,29481,29477,29502,29518,29519,40664,29527,29546,29544,29552,29560,29557,29563,29562,29640,29619,29646,29627,29632,29669,29678,29662,29858,29701,29807,29733,29688,29746,29754,29781,29759,29791,29785,29761,29788,29801,29808,29795,29802,29814,29822,29835,29854,29863,29898,29903,29908,29681,29920,29923,29927,29929,29934,29938,29936,29937,29944,29943,29956,29955,29957,29964,29966,29965,29973,29971,29982,29990,29996,30012,30020,30029,30026,30025,30043,30022,30042,30057,30052,30055,30059,30061,30072,30070,30086,30087,30068,30090,30089,30082,30100,30106,30109,30117,30115,30146,30131,30147,30133,30141,30136,30140,30129,30157,30154,30162,30169,30179,30174,30206,30207,30204,30209,30192,30202,30194,30195,30219,30221,30217,30239,30247,30240,30241,30242,30244,30260,30256,30267,30279,30280,30278,30300,30296,30305,30306,30312,30313,30314,30311,30316,30320,30322,30326,30328,30332,30336,30339,30344,30347,30350,30358,30355,30361,30362,30384,30388,30392,30393,30394,30402,30413,30422,30418,30430,30433,30437,30439,30442,34351,30459,30472,30471,30468,30505,30500,30494,30501,30502,30491,30519,30520,30535,30554,30568,30571,30555,30565,30591,30590,30585,30606,30603,30609,30624,30622,30640,30646,30649,30655,30652,30653,30651,30663,30669,30679,30682,30684,30691,30702,30716,30732,30738,31014,30752,31018,30789,30862,30836,30854,30844,30874,30860,30883,30901,30890,30895,30929,30918,30923,30932,30910,30908,30917,30922,30956,30951,30938,30973,30964,30983,30994,30993,31001,31020,31019,31040,31072,31063,31071,31066,31061,31059,31098,31103,31114,31133,31143,40779,31146,31150,31155,31161,31162,31177,31189,31207,31212,31201,31203,31240,31245,31256,31257,31264,31263,31104,31281,31291,31294,31287,31299,31319,31305,31329,31330,31337,40861,31344,31353,31357,31368,31383,31381,31384,31382,31401,31432,31408,31414,31429,31428,31423,36995,31431,31434,31437,31439,31445,31443,31449,31450,31453,31457,31458,31462,31469,31472,31490,31503,31498,31494,31539,31512,31513,31518,31541,31528,31542,31568,31610,31492,31565,31499,31564,31557,31605,31589,31604,31591,31600,31601,31596,31598,31645,31640,31647,31629,31644,31642,31627,31634,31631,31581,31641,31691,31681,31692,31695,31668,31686,31709,31721,31761,31764,31718,31717,31840,31744,31751,31763,31731,31735,31767,31757,31734,31779,31783,31786,31775,31799,31787,31805,31820,31811,31828,31823,31808,31824,31832,31839,31844,31830,31845,31852,31861,31875,31888,31908,31917,31906,31915,31905,31912,31923,31922,31921,31918,31929,31933,31936,31941,31938,31960,31954,31964,31970,39739,31983,31986,31988,31990,31994,32006,32002,32028,32021,32010,32069,32075,32046,32050,32063,32053,32070,32115,32086,32078,32114,32104,32110,32079,32099,32147,32137,32091,32143,32125,32155,32186,32174,32163,32181,32199,32189,32171,32317,32162,32175,32220,32184,32159,32176,32216,32221,32228,32222,32251,32242,32225,32261,32266,32291,32289,32274,32305,32287,32265,32267,32290,32326,32358,32315,32309,32313,32323,32311,32306,32314,32359,32349,32342,32350,32345,32346,32377,32362,32361,32380,32379,32387,32213,32381,36782,32383,32392,32393,32396,32402,32400,32403,32404,32406,32398,32411,32412,32568,32570,32581,32588,32589,32590,32592,32593,32597,32596,32600,32607,32608,32616,32617,32615,32632,32642,32646,32643,32648,32647,32652,32660,32670,32669,32666,32675,32687,32690,32697,32686,32694,32696,35697,32709,32710,32714,32725,32724,32737,32742,32745,32755,32761,39132,32774,32772,32779,32786,32792,32793,32796,32801,32808,32831,32827,32842,32838,32850,32856,32858,32863,32866,32872,32883,32882,32880,32886,32889,32893,32895,32900,32902,32901,32923,32915,32922,32941,20880,32940,32987,32997,32985,32989,32964,32986,32982,33033,33007,33009,33051,33065,33059,33071,33099,38539,33094,33086,33107,33105,33020,33137,33134,33125,33126,33140,33155,33160,33162,33152,33154,33184,33173,33188,33187,33119,33171,33193,33200,33205,33214,33208,33213,33216,33218,33210,33225,33229,33233,33241,33240,33224,33242,33247,33248,33255,33274,33275,33278,33281,33282,33285,33287,33290,33293,33296,33302,33321,33323,33336,33331,33344,33369,33368,33373,33370,33375,33380,33378,33384,33386,33387,33326,33393,33399,33400,33406,33421,33426,33451,33439,33467,33452,33505,33507,33503,33490,33524,33523,33530,33683,33539,33531,33529,33502,33542,33500,33545,33497,33589,33588,33558,33586,33585,33600,33593,33616,33605,33583,33579,33559,33560,33669,33690,33706,33695,33698,33686,33571,33678,33671,33674,33660,33717,33651,33653,33696,33673,33704,33780,33811,33771,33742,33789,33795,33752,33803,33729,33783,33799,33760,33778,33805,33826,33824,33725,33848,34054,33787,33901,33834,33852,34138,33924,33911,33899,33965,33902,33922,33897,33862,33836,33903,33913,33845,33994,33890,33977,33983,33951,34009,33997,33979,34010,34000,33985,33990,34006,33953,34081,34047,34036,34071,34072,34092,34079,34069,34068,34044,34112,34147,34136,34120,34113,34306,34123,34133,34176,34212,34184,34193,34186,34216,34157,34196,34203,34282,34183,34204,34167,34174,34192,34249,34234,34255,34233,34256,34261,34269,34277,34268,34297,34314,34323,34315,34302,34298,34310,34338,34330,34352,34367,34381,20053,34388,34399,34407,34417,34451,34467,34473,34474,34443,34444,34486,34479,34500,34502,34480,34505,34851,34475,34516,34526,34537,34540,34527,34523,34543,34578,34566,34568,34560,34563,34555,34577,34569,34573,34553,34570,34612,34623,34615,34619,34597,34601,34586,34656,34655,34680,34636,34638,34676,34647,34664,34670,34649,34643,34659,34666,34821,34722,34719,34690,34735,34763,34749,34752,34768,38614,34731,34756,34739,34759,34758,34747,34799,34802,34784,34831,34829,34814,34806,34807,34830,34770,34833,34838,34837,34850,34849,34865,34870,34873,34855,34875,34884,34882,34898,34905,34910,34914,34923,34945,34942,34974,34933,34941,34997,34930,34946,34967,34962,34990,34969,34978,34957,34980,34992,35007,34993,35011,35012,35028,35032,35033,35037,35065,35074,35068,35060,35048,35058,35076,35084,35082,35091,35139,35102,35109,35114,35115,35137,35140,35131,35126,35128,35148,35101,35168,35166,35174,35172,35181,35178,35183,35188,35191,35198,35203,35208,35210,35219,35224,35233,35241,35238,35244,35247,35250,35258,35261,35263,35264,35290,35292,35293,35303,35316,35320,35331,35350,35344,35340,35355,35357,35365,35382,35393,35419,35410,35398,35400,35452,35437,35436,35426,35461,35458,35460,35496,35489,35473,35493,35494,35482,35491,35524,35533,35522,35546,35563,35571,35559,35556,35569,35604,35552,35554,35575,35550,35547,35596,35591,35610,35553,35606,35600,35607,35616,35635,38827,35622,35627,35646,35624,35649,35660,35663,35662,35657,35670,35675,35674,35691,35679,35692,35695,35700,35709,35712,35724,35726,35730,35731,35734,35737,35738,35898,35905,35903,35912,35916,35918,35920,35925,35938,35948,35960,35962,35970,35977,35973,35978,35981,35982,35988,35964,35992,25117,36013,36010,36029,36018,36019,36014,36022,36040,36033,36068,36067,36058,36093,36090,36091,36100,36101,36106,36103,36111,36109,36112,40782,36115,36045,36116,36118,36199,36205,36209,36211,36225,36249,36290,36286,36282,36303,36314,36310,36300,36315,36299,36330,36331,36319,36323,36348,36360,36361,36351,36381,36382,36368,36383,36418,36405,36400,36404,36426,36423,36425,36428,36432,36424,36441,36452,36448,36394,36451,36437,36470,36466,36476,36481,36487,36485,36484,36491,36490,36499,36497,36500,36505,36522,36513,36524,36528,36550,36529,36542,36549,36552,36555,36571,36579,36604,36603,36587,36606,36618,36613,36629,36626,36633,36627,36636,36639,36635,36620,36646,36659,36667,36665,36677,36674,36670,36684,36681,36678,36686,36695,36700,36706,36707,36708,36764,36767,36771,36781,36783,36791,36826,36837,36834,36842,36847,36999,36852,36869,36857,36858,36881,36885,36897,36877,36894,36886,36875,36903,36918,36917,36921,36856,36943,36944,36945,36946,36878,36937,36926,36950,36952,36958,36968,36975,36982,38568,36978,36994,36989,36993,36992,37002,37001,37007,37032,37039,37041,37045,37090,37092,25160,37083,37122,37138,37145,37170,37168,37194,37206,37208,37219,37221,37225,37235,37234,37259,37257,37250,37282,37291,37295,37290,37301,37300,37306,37312,37313,37321,37323,37328,37334,37343,37345,37339,37372,37365,37366,37406,37375,37396,37420,37397,37393,37470,37463,37445,37449,37476,37448,37525,37439,37451,37456,37532,37526,37523,37531,37466,37583,37561,37559,37609,37647,37626,37700,37678,37657,37666,37658,37667,37690,37685,37691,37724,37728,37756,37742,37718,37808,37804,37805,37780,37817,37846,37847,37864,37861,37848,37827,37853,37840,37832,37860,37914,37908,37907,37891,37895,37904,37942,37931,37941,37921,37946,37953,37970,37956,37979,37984,37986,37982,37994,37417,38000,38005,38007,38013,37978,38012,38014,38017,38015,38274,38279,38282,38292,38294,38296,38297,38304,38312,38311,38317,38332,38331,38329,38334,38346,28662,38339,38349,38348,38357,38356,38358,38364,38369,38373,38370,38433,38440,38446,38447,38466,38476,38479,38475,38519,38492,38494,38493,38495,38502,38514,38508,38541,38552,38549,38551,38570,38567,38577,38578,38576,38580,38582,38584,38585,38606,38603,38601,38605,35149,38620,38669,38613,38649,38660,38662,38664,38675,38670,38673,38671,38678,38681,38692,38698,38704,38713,38717,38718,38724,38726,38728,38722,38729,38748,38752,38756,38758,38760,21202,38763,38769,38777,38789,38780,38785,38778,38790,38795,38799,38800,38812,38824,38822,38819,38835,38836,38851,38854,38856,38859,38876,38893,40783,38898,31455,38902,38901,38927,38924,38968,38948,38945,38967,38973,38982,38991,38987,39019,39023,39024,39025,39028,39027,39082,39087,39089,39094,39108,39107,39110,39145,39147,39171,39177,39186,39188,39192,39201,39197,39198,39204,39200,39212,39214,39229,39230,39234,39241,39237,39248,39243,39249,39250,39244,39253,39319,39320,39333,39341,39342,39356,39391,39387,39389,39384,39377,39405,39406,39409,39410,39419,39416,39425,39439,39429,39394,39449,39467,39479,39493,39490,39488,39491,39486,39509,39501,39515,39511,39519,39522,39525,39524,39529,39531,39530,39597,39600,39612,39616,39631,39633,39635,39636,39646,39647,39650,39651,39654,39663,39659,39662,39668,39665,39671,39675,39686,39704,39706,39711,39714,39715,39717,39719,39720,39721,39722,39726,39727,39730,39748,39747,39759,39757,39758,39761,39768,39796,39827,39811,39825,39830,39831,39839,39840,39848,39860,39872,39882,39865,39878,39887,39889,39890,39907,39906,39908,39892,39905,39994,39922,39921,39920,39957,39956,39945,39955,39948,39942,39944,39954,39946,39940,39982,39963,39973,39972,39969,39984,40007,39986,40006,39998,40026,40032,40039,40054,40056,40167,40172,40176,40201,40200,40171,40195,40198,40234,40230,40367,40227,40223,40260,40213,40210,40257,40255,40254,40262,40264,40285,40286,40292,40273,40272,40281,40306,40329,40327,40363,40303,40314,40346,40356,40361,40370,40388,40385,40379,40376,40378,40390,40399,40386,40409,40403,40440,40422,40429,40431,40445,40474,40475,40478,40565,40569,40573,40577,40584,40587,40588,40594,40597,40593,40605,40613,40617,40632,40618,40621,38753,40652,40654,40655,40656,40660,40668,40670,40669,40672,40677,40680,40687,40692,40694,40695,40697,40699,40700,40701,40711,40712,30391,40725,40737,40748,40766,40778,40786,40788,40803,40799,40800,40801,40806,40807,40812,40810,40823,40818,40822,40853,40860,40864,22575,27079,36953,29796,20956,29081,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,32394,35100,37704,37512,34012,20425,28859,26161,26824,37625,26363,24389,20008,20193,20220,20224,20227,20281,20310,20370,20362,20378,20372,20429,20544,20514,20479,20510,20550,20592,20546,20628,20724,20696,20810,20836,20893,20926,20972,21013,21148,21158,21184,21211,21248,21255,21284,21362,21395,21426,21469,64014,21660,21642,21673,21759,21894,22361,22373,22444,22472,22471,64015,64016,22686,22706,22795,22867,22875,22877,22883,22948,22970,23382,23488,29999,23512,23532,23582,23718,23738,23797,23847,23891,64017,23874,23917,23992,23993,24016,24353,24372,24423,24503,24542,24669,24709,24714,24798,24789,24864,24818,24849,24887,24880,24984,25107,25254,25589,25696,25757,25806,25934,26112,26133,26171,26121,26158,26142,26148,26213,26199,26201,64018,26227,26265,26272,26290,26303,26362,26382,63785,26470,26555,26706,26560,26625,26692,26831,64019,26984,64020,27032,27106,27184,27243,27206,27251,27262,27362,27364,27606,27711,27740,27782,27759,27866,27908,28039,28015,28054,28076,28111,28152,28146,28156,28217,28252,28199,28220,28351,28552,28597,28661,28677,28679,28712,28805,28843,28943,28932,29020,28998,28999,64021,29121,29182,29361,29374,29476,64022,29559,29629,29641,29654,29667,29650,29703,29685,29734,29738,29737,29742,29794,29833,29855,29953,30063,30338,30364,30366,30363,30374,64023,30534,21167,30753,30798,30820,30842,31024,64024,64025,64026,31124,64027,31131,31441,31463,64028,31467,31646,64029,32072,32092,32183,32160,32214,32338,32583,32673,64030,33537,33634,33663,33735,33782,33864,33972,34131,34137,34155,64031,34224,64032,64033,34823,35061,35346,35383,35449,35495,35518,35551,64034,35574,35667,35711,36080,36084,36114,36214,64035,36559,64036,64037,36967,37086,64038,37141,37159,37338,37335,37342,37357,37358,37348,37349,37382,37392,37386,37434,37440,37436,37454,37465,37457,37433,37479,37543,37495,37496,37607,37591,37593,37584,64039,37589,37600,37587,37669,37665,37627,64040,37662,37631,37661,37634,37744,37719,37796,37830,37854,37880,37937,37957,37960,38290,63964,64041,38557,38575,38707,38715,38723,38733,38735,38737,38741,38999,39013,64042,64043,39207,64044,39326,39502,39641,39644,39797,39794,39823,39857,39867,39936,40304,40299,64045,40473,40657,null,null,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,65506,65508,65287,65282,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,65506,65508,65287,65282,12849,8470,8481,8757,32394,35100,37704,37512,34012,20425,28859,26161,26824,37625,26363,24389,20008,20193,20220,20224,20227,20281,20310,20370,20362,20378,20372,20429,20544,20514,20479,20510,20550,20592,20546,20628,20724,20696,20810,20836,20893,20926,20972,21013,21148,21158,21184,21211,21248,21255,21284,21362,21395,21426,21469,64014,21660,21642,21673,21759,21894,22361,22373,22444,22472,22471,64015,64016,22686,22706,22795,22867,22875,22877,22883,22948,22970,23382,23488,29999,23512,23532,23582,23718,23738,23797,23847,23891,64017,23874,23917,23992,23993,24016,24353,24372,24423,24503,24542,24669,24709,24714,24798,24789,24864,24818,24849,24887,24880,24984,25107,25254,25589,25696,25757,25806,25934,26112,26133,26171,26121,26158,26142,26148,26213,26199,26201,64018,26227,26265,26272,26290,26303,26362,26382,63785,26470,26555,26706,26560,26625,26692,26831,64019,26984,64020,27032,27106,27184,27243,27206,27251,27262,27362,27364,27606,27711,27740,27782,27759,27866,27908,28039,28015,28054,28076,28111,28152,28146,28156,28217,28252,28199,28220,28351,28552,28597,28661,28677,28679,28712,28805,28843,28943,28932,29020,28998,28999,64021,29121,29182,29361,29374,29476,64022,29559,29629,29641,29654,29667,29650,29703,29685,29734,29738,29737,29742,29794,29833,29855,29953,30063,30338,30364,30366,30363,30374,64023,30534,21167,30753,30798,30820,30842,31024,64024,64025,64026,31124,64027,31131,31441,31463,64028,31467,31646,64029,32072,32092,32183,32160,32214,32338,32583,32673,64030,33537,33634,33663,33735,33782,33864,33972,34131,34137,34155,64031,34224,64032,64033,34823,35061,35346,35383,35449,35495,35518,35551,64034,35574,35667,35711,36080,36084,36114,36214,64035,36559,64036,64037,36967,37086,64038,37141,37159,37338,37335,37342,37357,37358,37348,37349,37382,37392,37386,37434,37440,37436,37454,37465,37457,37433,37479,37543,37495,37496,37607,37591,37593,37584,64039,37589,37600,37587,37669,37665,37627,64040,37662,37631,37661,37634,37744,37719,37796,37830,37854,37880,37937,37957,37960,38290,63964,64041,38557,38575,38707,38715,38723,38733,38735,38737,38741,38999,39013,64042,64043,39207,64044,39326,39502,39641,39644,39797,39794,39823,39857,39867,39936,40304,40299,64045,40473,40657,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null], + 'jis0212': [null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,728,711,184,729,733,175,731,730,65374,900,901,null,null,null,null,null,null,null,null,161,166,191,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,186,170,169,174,8482,164,8470,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,902,904,905,906,938,null,908,null,910,939,null,911,null,null,null,null,940,941,942,943,970,912,972,962,973,971,944,974,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1038,1039,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1118,1119,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,198,272,null,294,null,306,null,321,319,null,330,216,338,null,358,222,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,230,273,240,295,305,307,312,322,320,329,331,248,339,223,359,254,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,193,192,196,194,258,461,256,260,197,195,262,264,268,199,266,270,201,200,203,202,282,278,274,280,null,284,286,290,288,292,205,204,207,206,463,304,298,302,296,308,310,313,317,315,323,327,325,209,211,210,214,212,465,336,332,213,340,344,342,346,348,352,350,356,354,218,217,220,219,364,467,368,362,370,366,360,471,475,473,469,372,221,376,374,377,381,379,null,null,null,null,null,null,null,225,224,228,226,259,462,257,261,229,227,263,265,269,231,267,271,233,232,235,234,283,279,275,281,501,285,287,null,289,293,237,236,239,238,464,null,299,303,297,309,311,314,318,316,324,328,326,241,243,242,246,244,466,337,333,245,341,345,343,347,349,353,351,357,355,250,249,252,251,365,468,369,363,371,367,361,472,476,474,470,373,253,255,375,378,382,380,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,19970,19972,19973,19980,19986,19999,20003,20004,20008,20011,20014,20015,20016,20021,20032,20033,20036,20039,20049,20058,20060,20067,20072,20073,20084,20085,20089,20095,20109,20118,20119,20125,20143,20153,20163,20176,20186,20187,20192,20193,20194,20200,20207,20209,20211,20213,20221,20222,20223,20224,20226,20227,20232,20235,20236,20242,20245,20246,20247,20249,20270,20273,20320,20275,20277,20279,20281,20283,20286,20288,20290,20296,20297,20299,20300,20306,20308,20310,20312,20319,20323,20330,20332,20334,20337,20343,20344,20345,20346,20349,20350,20353,20354,20356,20357,20361,20362,20364,20366,20368,20370,20371,20372,20375,20377,20378,20382,20383,20402,20407,20409,20411,20412,20413,20414,20416,20417,20421,20422,20424,20425,20427,20428,20429,20431,20434,20444,20448,20450,20464,20466,20476,20477,20479,20480,20481,20484,20487,20490,20492,20494,20496,20499,20503,20504,20507,20508,20509,20510,20514,20519,20526,20528,20530,20531,20533,20544,20545,20546,20549,20550,20554,20556,20558,20561,20562,20563,20567,20569,20575,20576,20578,20579,20582,20583,20586,20589,20592,20593,20539,20609,20611,20612,20614,20618,20622,20623,20624,20626,20627,20628,20630,20635,20636,20638,20639,20640,20641,20642,20650,20655,20656,20665,20666,20669,20672,20675,20676,20679,20684,20686,20688,20691,20692,20696,20700,20701,20703,20706,20708,20710,20712,20713,20719,20721,20726,20730,20734,20739,20742,20743,20744,20747,20748,20749,20750,20722,20752,20759,20761,20763,20764,20765,20766,20771,20775,20776,20780,20781,20783,20785,20787,20788,20789,20792,20793,20802,20810,20815,20819,20821,20823,20824,20831,20836,20838,20862,20867,20868,20875,20878,20888,20893,20897,20899,20909,20920,20922,20924,20926,20927,20930,20936,20943,20945,20946,20947,20949,20952,20958,20962,20965,20974,20978,20979,20980,20983,20993,20994,20997,21010,21011,21013,21014,21016,21026,21032,21041,21042,21045,21052,21061,21065,21077,21079,21080,21082,21084,21087,21088,21089,21094,21102,21111,21112,21113,21120,21122,21125,21130,21132,21139,21141,21142,21143,21144,21146,21148,21156,21157,21158,21159,21167,21168,21174,21175,21176,21178,21179,21181,21184,21188,21190,21192,21196,21199,21201,21204,21206,21211,21212,21217,21221,21224,21225,21226,21228,21232,21233,21236,21238,21239,21248,21251,21258,21259,21260,21265,21267,21272,21275,21276,21278,21279,21285,21287,21288,21289,21291,21292,21293,21296,21298,21301,21308,21309,21310,21314,21324,21323,21337,21339,21345,21347,21349,21356,21357,21362,21369,21374,21379,21383,21384,21390,21395,21396,21401,21405,21409,21412,21418,21419,21423,21426,21428,21429,21431,21432,21434,21437,21440,21445,21455,21458,21459,21461,21466,21469,21470,21472,21478,21479,21493,21506,21523,21530,21537,21543,21544,21546,21551,21553,21556,21557,21571,21572,21575,21581,21583,21598,21602,21604,21606,21607,21609,21611,21613,21614,21620,21631,21633,21635,21637,21640,21641,21645,21649,21653,21654,21660,21663,21665,21670,21671,21673,21674,21677,21678,21681,21687,21689,21690,21691,21695,21702,21706,21709,21710,21728,21738,21740,21743,21750,21756,21758,21759,21760,21761,21765,21768,21769,21772,21773,21774,21781,21802,21803,21810,21813,21814,21819,21820,21821,21825,21831,21833,21834,21837,21840,21841,21848,21850,21851,21854,21856,21857,21860,21862,21887,21889,21890,21894,21896,21902,21903,21905,21906,21907,21908,21911,21923,21924,21933,21938,21951,21953,21955,21958,21961,21963,21964,21966,21969,21970,21971,21975,21976,21979,21982,21986,21993,22006,22015,22021,22024,22026,22029,22030,22031,22032,22033,22034,22041,22060,22064,22067,22069,22071,22073,22075,22076,22077,22079,22080,22081,22083,22084,22086,22089,22091,22093,22095,22100,22110,22112,22113,22114,22115,22118,22121,22125,22127,22129,22130,22133,22148,22149,22152,22155,22156,22165,22169,22170,22173,22174,22175,22182,22183,22184,22185,22187,22188,22189,22193,22195,22199,22206,22213,22217,22218,22219,22223,22224,22220,22221,22233,22236,22237,22239,22241,22244,22245,22246,22247,22248,22257,22251,22253,22262,22263,22273,22274,22279,22282,22284,22289,22293,22298,22299,22301,22304,22306,22307,22308,22309,22313,22314,22316,22318,22319,22323,22324,22333,22334,22335,22341,22342,22348,22349,22354,22370,22373,22375,22376,22379,22381,22382,22383,22384,22385,22387,22388,22389,22391,22393,22394,22395,22396,22398,22401,22403,22412,22420,22423,22425,22426,22428,22429,22430,22431,22433,22421,22439,22440,22441,22444,22456,22461,22471,22472,22476,22479,22485,22493,22494,22500,22502,22503,22505,22509,22512,22517,22518,22520,22525,22526,22527,22531,22532,22536,22537,22497,22540,22541,22555,22558,22559,22560,22566,22567,22573,22578,22585,22591,22601,22604,22605,22607,22608,22613,22623,22625,22628,22631,22632,22648,22652,22655,22656,22657,22663,22664,22665,22666,22668,22669,22671,22672,22676,22678,22685,22688,22689,22690,22694,22697,22705,22706,22724,22716,22722,22728,22733,22734,22736,22738,22740,22742,22746,22749,22753,22754,22761,22771,22789,22790,22795,22796,22802,22803,22804,34369,22813,22817,22819,22820,22824,22831,22832,22835,22837,22838,22847,22851,22854,22866,22867,22873,22875,22877,22878,22879,22881,22883,22891,22893,22895,22898,22901,22902,22905,22907,22908,22923,22924,22926,22930,22933,22935,22943,22948,22951,22957,22958,22959,22960,22963,22967,22970,22972,22977,22979,22980,22984,22986,22989,22994,23005,23006,23007,23011,23012,23015,23022,23023,23025,23026,23028,23031,23040,23044,23052,23053,23054,23058,23059,23070,23075,23076,23079,23080,23082,23085,23088,23108,23109,23111,23112,23116,23120,23125,23134,23139,23141,23143,23149,23159,23162,23163,23166,23179,23184,23187,23190,23193,23196,23198,23199,23200,23202,23207,23212,23217,23218,23219,23221,23224,23226,23227,23231,23236,23238,23240,23247,23258,23260,23264,23269,23274,23278,23285,23286,23293,23296,23297,23304,23319,23348,23321,23323,23325,23329,23333,23341,23352,23361,23371,23372,23378,23382,23390,23400,23406,23407,23420,23421,23422,23423,23425,23428,23430,23434,23438,23440,23441,23443,23444,23446,23464,23465,23468,23469,23471,23473,23474,23479,23482,23484,23488,23489,23501,23503,23510,23511,23512,23513,23514,23520,23535,23537,23540,23549,23564,23575,23582,23583,23587,23590,23593,23595,23596,23598,23600,23602,23605,23606,23641,23642,23644,23650,23651,23655,23656,23657,23661,23664,23668,23669,23674,23675,23676,23677,23687,23688,23690,23695,23698,23709,23711,23712,23714,23715,23718,23722,23730,23732,23733,23738,23753,23755,23762,23773,23767,23790,23793,23794,23796,23809,23814,23821,23826,23851,23843,23844,23846,23847,23857,23860,23865,23869,23871,23874,23875,23878,23880,23893,23889,23897,23882,23903,23904,23905,23906,23908,23914,23917,23920,23929,23930,23934,23935,23937,23939,23944,23946,23954,23955,23956,23957,23961,23963,23967,23968,23975,23979,23984,23988,23992,23993,24003,24007,24011,24016,24014,24024,24025,24032,24036,24041,24056,24057,24064,24071,24077,24082,24084,24085,24088,24095,24096,24110,24104,24114,24117,24126,24139,24144,24137,24145,24150,24152,24155,24156,24158,24168,24170,24171,24172,24173,24174,24176,24192,24203,24206,24226,24228,24229,24232,24234,24236,24241,24243,24253,24254,24255,24262,24268,24267,24270,24273,24274,24276,24277,24284,24286,24293,24299,24322,24326,24327,24328,24334,24345,24348,24349,24353,24354,24355,24356,24360,24363,24364,24366,24368,24372,24374,24379,24381,24383,24384,24388,24389,24391,24397,24400,24404,24408,24411,24416,24419,24420,24423,24431,24434,24436,24437,24440,24442,24445,24446,24457,24461,24463,24470,24476,24477,24482,24487,24491,24484,24492,24495,24496,24497,24504,24516,24519,24520,24521,24523,24528,24529,24530,24531,24532,24542,24545,24546,24552,24553,24554,24556,24557,24558,24559,24562,24563,24566,24570,24572,24583,24586,24589,24595,24596,24599,24600,24602,24607,24612,24621,24627,24629,24640,24647,24648,24649,24652,24657,24660,24662,24663,24669,24673,24679,24689,24702,24703,24706,24710,24712,24714,24718,24721,24723,24725,24728,24733,24734,24738,24740,24741,24744,24752,24753,24759,24763,24766,24770,24772,24776,24777,24778,24779,24782,24783,24788,24789,24793,24795,24797,24798,24802,24805,24818,24821,24824,24828,24829,24834,24839,24842,24844,24848,24849,24850,24851,24852,24854,24855,24857,24860,24862,24866,24874,24875,24880,24881,24885,24886,24887,24889,24897,24901,24902,24905,24926,24928,24940,24946,24952,24955,24956,24959,24960,24961,24963,24964,24971,24973,24978,24979,24983,24984,24988,24989,24991,24992,24997,25000,25002,25005,25016,25017,25020,25024,25025,25026,25038,25039,25045,25052,25053,25054,25055,25057,25058,25063,25065,25061,25068,25069,25071,25089,25091,25092,25095,25107,25109,25116,25120,25122,25123,25127,25129,25131,25145,25149,25154,25155,25156,25158,25164,25168,25169,25170,25172,25174,25178,25180,25188,25197,25199,25203,25210,25213,25229,25230,25231,25232,25254,25256,25267,25270,25271,25274,25278,25279,25284,25294,25301,25302,25306,25322,25330,25332,25340,25341,25347,25348,25354,25355,25357,25360,25363,25366,25368,25385,25386,25389,25397,25398,25401,25404,25409,25410,25411,25412,25414,25418,25419,25422,25426,25427,25428,25432,25435,25445,25446,25452,25453,25457,25460,25461,25464,25468,25469,25471,25474,25476,25479,25482,25488,25492,25493,25497,25498,25502,25508,25510,25517,25518,25519,25533,25537,25541,25544,25550,25553,25555,25556,25557,25564,25568,25573,25578,25580,25586,25587,25589,25592,25593,25609,25610,25616,25618,25620,25624,25630,25632,25634,25636,25637,25641,25642,25647,25648,25653,25661,25663,25675,25679,25681,25682,25683,25684,25690,25691,25692,25693,25695,25696,25697,25699,25709,25715,25716,25723,25725,25733,25735,25743,25744,25745,25752,25753,25755,25757,25759,25761,25763,25766,25768,25772,25779,25789,25790,25791,25796,25801,25802,25803,25804,25806,25808,25809,25813,25815,25828,25829,25833,25834,25837,25840,25845,25847,25851,25855,25857,25860,25864,25865,25866,25871,25875,25876,25878,25881,25883,25886,25887,25890,25894,25897,25902,25905,25914,25916,25917,25923,25927,25929,25936,25938,25940,25951,25952,25959,25963,25978,25981,25985,25989,25994,26002,26005,26008,26013,26016,26019,26022,26030,26034,26035,26036,26047,26050,26056,26057,26062,26064,26068,26070,26072,26079,26096,26098,26100,26101,26105,26110,26111,26112,26116,26120,26121,26125,26129,26130,26133,26134,26141,26142,26145,26146,26147,26148,26150,26153,26154,26155,26156,26158,26160,26161,26163,26169,26167,26176,26181,26182,26186,26188,26193,26190,26199,26200,26201,26203,26204,26208,26209,26363,26218,26219,26220,26238,26227,26229,26239,26231,26232,26233,26235,26240,26236,26251,26252,26253,26256,26258,26265,26266,26267,26268,26271,26272,26276,26285,26289,26290,26293,26299,26303,26304,26306,26307,26312,26316,26318,26319,26324,26331,26335,26344,26347,26348,26350,26362,26373,26375,26382,26387,26393,26396,26400,26402,26419,26430,26437,26439,26440,26444,26452,26453,26461,26470,26476,26478,26484,26486,26491,26497,26500,26510,26511,26513,26515,26518,26520,26521,26523,26544,26545,26546,26549,26555,26556,26557,26617,26560,26562,26563,26565,26568,26569,26578,26583,26585,26588,26593,26598,26608,26610,26614,26615,26706,26644,26649,26653,26655,26664,26663,26668,26669,26671,26672,26673,26675,26683,26687,26692,26693,26698,26700,26709,26711,26712,26715,26731,26734,26735,26736,26737,26738,26741,26745,26746,26747,26748,26754,26756,26758,26760,26774,26776,26778,26780,26785,26787,26789,26793,26794,26798,26802,26811,26821,26824,26828,26831,26832,26833,26835,26838,26841,26844,26845,26853,26856,26858,26859,26860,26861,26864,26865,26869,26870,26875,26876,26877,26886,26889,26890,26896,26897,26899,26902,26903,26929,26931,26933,26936,26939,26946,26949,26953,26958,26967,26971,26979,26980,26981,26982,26984,26985,26988,26992,26993,26994,27002,27003,27007,27008,27021,27026,27030,27032,27041,27045,27046,27048,27051,27053,27055,27063,27064,27066,27068,27077,27080,27089,27094,27095,27106,27109,27118,27119,27121,27123,27125,27134,27136,27137,27139,27151,27153,27157,27162,27165,27168,27172,27176,27184,27186,27188,27191,27195,27198,27199,27205,27206,27209,27210,27214,27216,27217,27218,27221,27222,27227,27236,27239,27242,27249,27251,27262,27265,27267,27270,27271,27273,27275,27281,27291,27293,27294,27295,27301,27307,27311,27312,27313,27316,27325,27326,27327,27334,27337,27336,27340,27344,27348,27349,27350,27356,27357,27364,27367,27372,27376,27377,27378,27388,27389,27394,27395,27398,27399,27401,27407,27408,27409,27415,27419,27422,27428,27432,27435,27436,27439,27445,27446,27451,27455,27462,27466,27469,27474,27478,27480,27485,27488,27495,27499,27502,27504,27509,27517,27518,27522,27525,27543,27547,27551,27552,27554,27555,27560,27561,27564,27565,27566,27568,27576,27577,27581,27582,27587,27588,27593,27596,27606,27610,27617,27619,27622,27623,27630,27633,27639,27641,27647,27650,27652,27653,27657,27661,27662,27664,27666,27673,27679,27686,27687,27688,27692,27694,27699,27701,27702,27706,27707,27711,27722,27723,27725,27727,27730,27732,27737,27739,27740,27755,27757,27759,27764,27766,27768,27769,27771,27781,27782,27783,27785,27796,27797,27799,27800,27804,27807,27824,27826,27828,27842,27846,27853,27855,27856,27857,27858,27860,27862,27866,27868,27872,27879,27881,27883,27884,27886,27890,27892,27908,27911,27914,27918,27919,27921,27923,27930,27942,27943,27944,27751,27950,27951,27953,27961,27964,27967,27991,27998,27999,28001,28005,28007,28015,28016,28028,28034,28039,28049,28050,28052,28054,28055,28056,28074,28076,28084,28087,28089,28093,28095,28100,28104,28106,28110,28111,28118,28123,28125,28127,28128,28130,28133,28137,28143,28144,28148,28150,28156,28160,28164,28190,28194,28199,28210,28214,28217,28219,28220,28228,28229,28232,28233,28235,28239,28241,28242,28243,28244,28247,28252,28253,28254,28258,28259,28264,28275,28283,28285,28301,28307,28313,28320,28327,28333,28334,28337,28339,28347,28351,28352,28353,28355,28359,28360,28362,28365,28366,28367,28395,28397,28398,28409,28411,28413,28420,28424,28426,28428,28429,28438,28440,28442,28443,28454,28457,28458,28463,28464,28467,28470,28475,28476,28461,28495,28497,28498,28499,28503,28505,28506,28509,28510,28513,28514,28520,28524,28541,28542,28547,28551,28552,28555,28556,28557,28560,28562,28563,28564,28566,28570,28575,28576,28581,28582,28583,28584,28590,28591,28592,28597,28598,28604,28613,28615,28616,28618,28634,28638,28648,28649,28656,28661,28665,28668,28669,28672,28677,28678,28679,28685,28695,28704,28707,28719,28724,28727,28729,28732,28739,28740,28744,28745,28746,28747,28756,28757,28765,28766,28750,28772,28773,28780,28782,28789,28790,28798,28801,28805,28806,28820,28821,28822,28823,28824,28827,28836,28843,28848,28849,28852,28855,28874,28881,28883,28884,28885,28886,28888,28892,28900,28922,28931,28932,28933,28934,28935,28939,28940,28943,28958,28960,28971,28973,28975,28976,28977,28984,28993,28997,28998,28999,29002,29003,29008,29010,29015,29018,29020,29022,29024,29032,29049,29056,29061,29063,29068,29074,29082,29083,29088,29090,29103,29104,29106,29107,29114,29119,29120,29121,29124,29131,29132,29139,29142,29145,29146,29148,29176,29182,29184,29191,29192,29193,29203,29207,29210,29213,29215,29220,29227,29231,29236,29240,29241,29249,29250,29251,29253,29262,29263,29264,29267,29269,29270,29274,29276,29278,29280,29283,29288,29291,29294,29295,29297,29303,29304,29307,29308,29311,29316,29321,29325,29326,29331,29339,29352,29357,29358,29361,29364,29374,29377,29383,29385,29388,29397,29398,29400,29407,29413,29427,29428,29434,29435,29438,29442,29444,29445,29447,29451,29453,29458,29459,29464,29465,29470,29474,29476,29479,29480,29484,29489,29490,29493,29498,29499,29501,29507,29517,29520,29522,29526,29528,29533,29534,29535,29536,29542,29543,29545,29547,29548,29550,29551,29553,29559,29561,29564,29568,29569,29571,29573,29574,29582,29584,29587,29589,29591,29592,29596,29598,29599,29600,29602,29605,29606,29610,29611,29613,29621,29623,29625,29628,29629,29631,29637,29638,29641,29643,29644,29647,29650,29651,29654,29657,29661,29665,29667,29670,29671,29673,29684,29685,29687,29689,29690,29691,29693,29695,29696,29697,29700,29703,29706,29713,29722,29723,29732,29734,29736,29737,29738,29739,29740,29741,29742,29743,29744,29745,29753,29760,29763,29764,29766,29767,29771,29773,29777,29778,29783,29789,29794,29798,29799,29800,29803,29805,29806,29809,29810,29824,29825,29829,29830,29831,29833,29839,29840,29841,29842,29848,29849,29850,29852,29855,29856,29857,29859,29862,29864,29865,29866,29867,29870,29871,29873,29874,29877,29881,29883,29887,29896,29897,29900,29904,29907,29912,29914,29915,29918,29919,29924,29928,29930,29931,29935,29940,29946,29947,29948,29951,29958,29970,29974,29975,29984,29985,29988,29991,29993,29994,29999,30006,30009,30013,30014,30015,30016,30019,30023,30024,30030,30032,30034,30039,30046,30047,30049,30063,30065,30073,30074,30075,30076,30077,30078,30081,30085,30096,30098,30099,30101,30105,30108,30114,30116,30132,30138,30143,30144,30145,30148,30150,30156,30158,30159,30167,30172,30175,30176,30177,30180,30183,30188,30190,30191,30193,30201,30208,30210,30211,30212,30215,30216,30218,30220,30223,30226,30227,30229,30230,30233,30235,30236,30237,30238,30243,30245,30246,30249,30253,30258,30259,30261,30264,30265,30266,30268,30282,30272,30273,30275,30276,30277,30281,30283,30293,30297,30303,30308,30309,30317,30318,30319,30321,30324,30337,30341,30348,30349,30357,30363,30364,30365,30367,30368,30370,30371,30372,30373,30374,30375,30376,30378,30381,30397,30401,30405,30409,30411,30412,30414,30420,30425,30432,30438,30440,30444,30448,30449,30454,30457,30460,30464,30470,30474,30478,30482,30484,30485,30487,30489,30490,30492,30498,30504,30509,30510,30511,30516,30517,30518,30521,30525,30526,30530,30533,30534,30538,30541,30542,30543,30546,30550,30551,30556,30558,30559,30560,30562,30564,30567,30570,30572,30576,30578,30579,30580,30586,30589,30592,30596,30604,30605,30612,30613,30614,30618,30623,30626,30631,30634,30638,30639,30641,30645,30654,30659,30665,30673,30674,30677,30681,30686,30687,30688,30692,30694,30698,30700,30704,30705,30708,30712,30715,30725,30726,30729,30733,30734,30737,30749,30753,30754,30755,30765,30766,30768,30773,30775,30787,30788,30791,30792,30796,30798,30802,30812,30814,30816,30817,30819,30820,30824,30826,30830,30842,30846,30858,30863,30868,30872,30881,30877,30878,30879,30884,30888,30892,30893,30896,30897,30898,30899,30907,30909,30911,30919,30920,30921,30924,30926,30930,30931,30933,30934,30948,30939,30943,30944,30945,30950,30954,30962,30963,30976,30966,30967,30970,30971,30975,30982,30988,30992,31002,31004,31006,31007,31008,31013,31015,31017,31021,31025,31028,31029,31035,31037,31039,31044,31045,31046,31050,31051,31055,31057,31060,31064,31067,31068,31079,31081,31083,31090,31097,31099,31100,31102,31115,31116,31121,31123,31124,31125,31126,31128,31131,31132,31137,31144,31145,31147,31151,31153,31156,31160,31163,31170,31172,31175,31176,31178,31183,31188,31190,31194,31197,31198,31200,31202,31205,31210,31211,31213,31217,31224,31228,31234,31235,31239,31241,31242,31244,31249,31253,31259,31262,31265,31271,31275,31277,31279,31280,31284,31285,31288,31289,31290,31300,31301,31303,31304,31308,31317,31318,31321,31324,31325,31327,31328,31333,31335,31338,31341,31349,31352,31358,31360,31362,31365,31366,31370,31371,31376,31377,31380,31390,31392,31395,31404,31411,31413,31417,31419,31420,31430,31433,31436,31438,31441,31451,31464,31465,31467,31468,31473,31476,31483,31485,31486,31495,31508,31519,31523,31527,31529,31530,31531,31533,31534,31535,31536,31537,31540,31549,31551,31552,31553,31559,31566,31573,31584,31588,31590,31593,31594,31597,31599,31602,31603,31607,31620,31625,31630,31632,31633,31638,31643,31646,31648,31653,31660,31663,31664,31666,31669,31670,31674,31675,31676,31677,31682,31685,31688,31690,31700,31702,31703,31705,31706,31707,31720,31722,31730,31732,31733,31736,31737,31738,31740,31742,31745,31746,31747,31748,31750,31753,31755,31756,31758,31759,31769,31771,31776,31781,31782,31784,31788,31793,31795,31796,31798,31801,31802,31814,31818,31829,31825,31826,31827,31833,31834,31835,31836,31837,31838,31841,31843,31847,31849,31853,31854,31856,31858,31865,31868,31869,31878,31879,31887,31892,31902,31904,31910,31920,31926,31927,31930,31931,31932,31935,31940,31943,31944,31945,31949,31951,31955,31956,31957,31959,31961,31962,31965,31974,31977,31979,31989,32003,32007,32008,32009,32015,32017,32018,32019,32022,32029,32030,32035,32038,32042,32045,32049,32060,32061,32062,32064,32065,32071,32072,32077,32081,32083,32087,32089,32090,32092,32093,32101,32103,32106,32112,32120,32122,32123,32127,32129,32130,32131,32133,32134,32136,32139,32140,32141,32145,32150,32151,32157,32158,32166,32167,32170,32179,32182,32183,32185,32194,32195,32196,32197,32198,32204,32205,32206,32215,32217,32256,32226,32229,32230,32234,32235,32237,32241,32245,32246,32249,32250,32264,32272,32273,32277,32279,32284,32285,32288,32295,32296,32300,32301,32303,32307,32310,32319,32324,32325,32327,32334,32336,32338,32344,32351,32353,32354,32357,32363,32366,32367,32371,32376,32382,32385,32390,32391,32394,32397,32401,32405,32408,32410,32413,32414,32572,32571,32573,32574,32575,32579,32580,32583,32591,32594,32595,32603,32604,32605,32609,32611,32612,32613,32614,32621,32625,32637,32638,32639,32640,32651,32653,32655,32656,32657,32662,32663,32668,32673,32674,32678,32682,32685,32692,32700,32703,32704,32707,32712,32718,32719,32731,32735,32739,32741,32744,32748,32750,32751,32754,32762,32765,32766,32767,32775,32776,32778,32781,32782,32783,32785,32787,32788,32790,32797,32798,32799,32800,32804,32806,32812,32814,32816,32820,32821,32823,32825,32826,32828,32830,32832,32836,32864,32868,32870,32877,32881,32885,32897,32904,32910,32924,32926,32934,32935,32939,32952,32953,32968,32973,32975,32978,32980,32981,32983,32984,32992,33005,33006,33008,33010,33011,33014,33017,33018,33022,33027,33035,33046,33047,33048,33052,33054,33056,33060,33063,33068,33072,33077,33082,33084,33093,33095,33098,33100,33106,33111,33120,33121,33127,33128,33129,33133,33135,33143,33153,33168,33156,33157,33158,33163,33166,33174,33176,33179,33182,33186,33198,33202,33204,33211,33227,33219,33221,33226,33230,33231,33237,33239,33243,33245,33246,33249,33252,33259,33260,33264,33265,33266,33269,33270,33272,33273,33277,33279,33280,33283,33295,33299,33300,33305,33306,33309,33313,33314,33320,33330,33332,33338,33347,33348,33349,33350,33355,33358,33359,33361,33366,33372,33376,33379,33383,33389,33396,33403,33405,33407,33408,33409,33411,33412,33415,33417,33418,33422,33425,33428,33430,33432,33434,33435,33440,33441,33443,33444,33447,33448,33449,33450,33454,33456,33458,33460,33463,33466,33468,33470,33471,33478,33488,33493,33498,33504,33506,33508,33512,33514,33517,33519,33526,33527,33533,33534,33536,33537,33543,33544,33546,33547,33620,33563,33565,33566,33567,33569,33570,33580,33581,33582,33584,33587,33591,33594,33596,33597,33602,33603,33604,33607,33613,33614,33617,33621,33622,33623,33648,33656,33661,33663,33664,33666,33668,33670,33677,33682,33684,33685,33688,33689,33691,33692,33693,33702,33703,33705,33708,33726,33727,33728,33735,33737,33743,33744,33745,33748,33757,33619,33768,33770,33782,33784,33785,33788,33793,33798,33802,33807,33809,33813,33817,33709,33839,33849,33861,33863,33864,33866,33869,33871,33873,33874,33878,33880,33881,33882,33884,33888,33892,33893,33895,33898,33904,33907,33908,33910,33912,33916,33917,33921,33925,33938,33939,33941,33950,33958,33960,33961,33962,33967,33969,33972,33978,33981,33982,33984,33986,33991,33992,33996,33999,34003,34012,34023,34026,34031,34032,34033,34034,34039,34098,34042,34043,34045,34050,34051,34055,34060,34062,34064,34076,34078,34082,34083,34084,34085,34087,34090,34091,34095,34099,34100,34102,34111,34118,34127,34128,34129,34130,34131,34134,34137,34140,34141,34142,34143,34144,34145,34146,34148,34155,34159,34169,34170,34171,34173,34175,34177,34181,34182,34185,34187,34188,34191,34195,34200,34205,34207,34208,34210,34213,34215,34228,34230,34231,34232,34236,34237,34238,34239,34242,34247,34250,34251,34254,34221,34264,34266,34271,34272,34278,34280,34285,34291,34294,34300,34303,34304,34308,34309,34317,34318,34320,34321,34322,34328,34329,34331,34334,34337,34343,34345,34358,34360,34362,34364,34365,34368,34370,34374,34386,34387,34390,34391,34392,34393,34397,34400,34401,34402,34403,34404,34409,34412,34415,34421,34422,34423,34426,34445,34449,34454,34456,34458,34460,34465,34470,34471,34472,34477,34481,34483,34484,34485,34487,34488,34489,34495,34496,34497,34499,34501,34513,34514,34517,34519,34522,34524,34528,34531,34533,34535,34440,34554,34556,34557,34564,34565,34567,34571,34574,34575,34576,34579,34580,34585,34590,34591,34593,34595,34600,34606,34607,34609,34610,34617,34618,34620,34621,34622,34624,34627,34629,34637,34648,34653,34657,34660,34661,34671,34673,34674,34683,34691,34692,34693,34694,34695,34696,34697,34699,34700,34704,34707,34709,34711,34712,34713,34718,34720,34723,34727,34732,34733,34734,34737,34741,34750,34751,34753,34760,34761,34762,34766,34773,34774,34777,34778,34780,34783,34786,34787,34788,34794,34795,34797,34801,34803,34808,34810,34815,34817,34819,34822,34825,34826,34827,34832,34841,34834,34835,34836,34840,34842,34843,34844,34846,34847,34856,34861,34862,34864,34866,34869,34874,34876,34881,34883,34885,34888,34889,34890,34891,34894,34897,34901,34902,34904,34906,34908,34911,34912,34916,34921,34929,34937,34939,34944,34968,34970,34971,34972,34975,34976,34984,34986,35002,35005,35006,35008,35018,35019,35020,35021,35022,35025,35026,35027,35035,35038,35047,35055,35056,35057,35061,35063,35073,35078,35085,35086,35087,35093,35094,35096,35097,35098,35100,35104,35110,35111,35112,35120,35121,35122,35125,35129,35130,35134,35136,35138,35141,35142,35145,35151,35154,35159,35162,35163,35164,35169,35170,35171,35179,35182,35184,35187,35189,35194,35195,35196,35197,35209,35213,35216,35220,35221,35227,35228,35231,35232,35237,35248,35252,35253,35254,35255,35260,35284,35285,35286,35287,35288,35301,35305,35307,35309,35313,35315,35318,35321,35325,35327,35332,35333,35335,35343,35345,35346,35348,35349,35358,35360,35362,35364,35366,35371,35372,35375,35381,35383,35389,35390,35392,35395,35397,35399,35401,35405,35406,35411,35414,35415,35416,35420,35421,35425,35429,35431,35445,35446,35447,35449,35450,35451,35454,35455,35456,35459,35462,35467,35471,35472,35474,35478,35479,35481,35487,35495,35497,35502,35503,35507,35510,35511,35515,35518,35523,35526,35528,35529,35530,35537,35539,35540,35541,35543,35549,35551,35564,35568,35572,35573,35574,35580,35583,35589,35590,35595,35601,35612,35614,35615,35594,35629,35632,35639,35644,35650,35651,35652,35653,35654,35656,35666,35667,35668,35673,35661,35678,35683,35693,35702,35704,35705,35708,35710,35713,35716,35717,35723,35725,35727,35732,35733,35740,35742,35743,35896,35897,35901,35902,35909,35911,35913,35915,35919,35921,35923,35924,35927,35928,35931,35933,35929,35939,35940,35942,35944,35945,35949,35955,35957,35958,35963,35966,35974,35975,35979,35984,35986,35987,35993,35995,35996,36004,36025,36026,36037,36038,36041,36043,36047,36054,36053,36057,36061,36065,36072,36076,36079,36080,36082,36085,36087,36088,36094,36095,36097,36099,36105,36114,36119,36123,36197,36201,36204,36206,36223,36226,36228,36232,36237,36240,36241,36245,36254,36255,36256,36262,36267,36268,36271,36274,36277,36279,36281,36283,36288,36293,36294,36295,36296,36298,36302,36305,36308,36309,36311,36313,36324,36325,36327,36332,36336,36284,36337,36338,36340,36349,36353,36356,36357,36358,36363,36369,36372,36374,36384,36385,36386,36387,36390,36391,36401,36403,36406,36407,36408,36409,36413,36416,36417,36427,36429,36430,36431,36436,36443,36444,36445,36446,36449,36450,36457,36460,36461,36463,36464,36465,36473,36474,36475,36482,36483,36489,36496,36498,36501,36506,36507,36509,36510,36514,36519,36521,36525,36526,36531,36533,36538,36539,36544,36545,36547,36548,36551,36559,36561,36564,36572,36584,36590,36592,36593,36599,36601,36602,36589,36608,36610,36615,36616,36623,36624,36630,36631,36632,36638,36640,36641,36643,36645,36647,36648,36652,36653,36654,36660,36661,36662,36663,36666,36672,36673,36675,36679,36687,36689,36690,36691,36692,36693,36696,36701,36702,36709,36765,36768,36769,36772,36773,36774,36789,36790,36792,36798,36800,36801,36806,36810,36811,36813,36816,36818,36819,36821,36832,36835,36836,36840,36846,36849,36853,36854,36859,36862,36866,36868,36872,36876,36888,36891,36904,36905,36911,36906,36908,36909,36915,36916,36919,36927,36931,36932,36940,36955,36957,36962,36966,36967,36972,36976,36980,36985,36997,37000,37003,37004,37006,37008,37013,37015,37016,37017,37019,37024,37025,37026,37029,37040,37042,37043,37044,37046,37053,37068,37054,37059,37060,37061,37063,37064,37077,37079,37080,37081,37084,37085,37087,37093,37074,37110,37099,37103,37104,37108,37118,37119,37120,37124,37125,37126,37128,37133,37136,37140,37142,37143,37144,37146,37148,37150,37152,37157,37154,37155,37159,37161,37166,37167,37169,37172,37174,37175,37177,37178,37180,37181,37187,37191,37192,37199,37203,37207,37209,37210,37211,37217,37220,37223,37229,37236,37241,37242,37243,37249,37251,37253,37254,37258,37262,37265,37267,37268,37269,37272,37278,37281,37286,37288,37292,37293,37294,37296,37297,37298,37299,37302,37307,37308,37309,37311,37314,37315,37317,37331,37332,37335,37337,37338,37342,37348,37349,37353,37354,37356,37357,37358,37359,37360,37361,37367,37369,37371,37373,37376,37377,37380,37381,37382,37383,37385,37386,37388,37392,37394,37395,37398,37400,37404,37405,37411,37412,37413,37414,37416,37422,37423,37424,37427,37429,37430,37432,37433,37434,37436,37438,37440,37442,37443,37446,37447,37450,37453,37454,37455,37457,37464,37465,37468,37469,37472,37473,37477,37479,37480,37481,37486,37487,37488,37493,37494,37495,37496,37497,37499,37500,37501,37503,37512,37513,37514,37517,37518,37522,37527,37529,37535,37536,37540,37541,37543,37544,37547,37551,37554,37558,37560,37562,37563,37564,37565,37567,37568,37569,37570,37571,37573,37574,37575,37576,37579,37580,37581,37582,37584,37587,37589,37591,37592,37593,37596,37597,37599,37600,37601,37603,37605,37607,37608,37612,37614,37616,37625,37627,37631,37632,37634,37640,37645,37649,37652,37653,37660,37661,37662,37663,37665,37668,37669,37671,37673,37674,37683,37684,37686,37687,37703,37704,37705,37712,37713,37714,37717,37719,37720,37722,37726,37732,37733,37735,37737,37738,37741,37743,37744,37745,37747,37748,37750,37754,37757,37759,37760,37761,37762,37768,37770,37771,37773,37775,37778,37781,37784,37787,37790,37793,37795,37796,37798,37800,37803,37812,37813,37814,37818,37801,37825,37828,37829,37830,37831,37833,37834,37835,37836,37837,37843,37849,37852,37854,37855,37858,37862,37863,37881,37879,37880,37882,37883,37885,37889,37890,37892,37896,37897,37901,37902,37903,37909,37910,37911,37919,37934,37935,37937,37938,37939,37940,37947,37951,37949,37955,37957,37960,37962,37964,37973,37977,37980,37983,37985,37987,37992,37995,37997,37998,37999,38001,38002,38020,38019,38264,38265,38270,38276,38280,38284,38285,38286,38301,38302,38303,38305,38310,38313,38315,38316,38324,38326,38330,38333,38335,38342,38344,38345,38347,38352,38353,38354,38355,38361,38362,38365,38366,38367,38368,38372,38374,38429,38430,38434,38436,38437,38438,38444,38449,38451,38455,38456,38457,38458,38460,38461,38465,38482,38484,38486,38487,38488,38497,38510,38516,38523,38524,38526,38527,38529,38530,38531,38532,38537,38545,38550,38554,38557,38559,38564,38565,38566,38569,38574,38575,38579,38586,38602,38610,23986,38616,38618,38621,38622,38623,38633,38639,38641,38650,38658,38659,38661,38665,38682,38683,38685,38689,38690,38691,38696,38705,38707,38721,38723,38730,38734,38735,38741,38743,38744,38746,38747,38755,38759,38762,38766,38771,38774,38775,38776,38779,38781,38783,38784,38793,38805,38806,38807,38809,38810,38814,38815,38818,38828,38830,38833,38834,38837,38838,38840,38841,38842,38844,38846,38847,38849,38852,38853,38855,38857,38858,38860,38861,38862,38864,38865,38868,38871,38872,38873,38877,38878,38880,38875,38881,38884,38895,38897,38900,38903,38904,38906,38919,38922,38937,38925,38926,38932,38934,38940,38942,38944,38947,38950,38955,38958,38959,38960,38962,38963,38965,38949,38974,38980,38983,38986,38993,38994,38995,38998,38999,39001,39002,39010,39011,39013,39014,39018,39020,39083,39085,39086,39088,39092,39095,39096,39098,39099,39103,39106,39109,39112,39116,39137,39139,39141,39142,39143,39146,39155,39158,39170,39175,39176,39185,39189,39190,39191,39194,39195,39196,39199,39202,39206,39207,39211,39217,39218,39219,39220,39221,39225,39226,39227,39228,39232,39233,39238,39239,39240,39245,39246,39252,39256,39257,39259,39260,39262,39263,39264,39323,39325,39327,39334,39344,39345,39346,39349,39353,39354,39357,39359,39363,39369,39379,39380,39385,39386,39388,39390,39399,39402,39403,39404,39408,39412,39413,39417,39421,39422,39426,39427,39428,39435,39436,39440,39441,39446,39454,39456,39458,39459,39460,39463,39469,39470,39475,39477,39478,39480,39495,39489,39492,39498,39499,39500,39502,39505,39508,39510,39517,39594,39596,39598,39599,39602,39604,39605,39606,39609,39611,39614,39615,39617,39619,39622,39624,39630,39632,39634,39637,39638,39639,39643,39644,39648,39652,39653,39655,39657,39660,39666,39667,39669,39673,39674,39677,39679,39680,39681,39682,39683,39684,39685,39688,39689,39691,39692,39693,39694,39696,39698,39702,39705,39707,39708,39712,39718,39723,39725,39731,39732,39733,39735,39737,39738,39741,39752,39755,39756,39765,39766,39767,39771,39774,39777,39779,39781,39782,39784,39786,39787,39788,39789,39790,39795,39797,39799,39800,39801,39807,39808,39812,39813,39814,39815,39817,39818,39819,39821,39823,39824,39828,39834,39837,39838,39846,39847,39849,39852,39856,39857,39858,39863,39864,39867,39868,39870,39871,39873,39879,39880,39886,39888,39895,39896,39901,39903,39909,39911,39914,39915,39919,39923,39927,39928,39929,39930,39933,39935,39936,39938,39947,39951,39953,39958,39960,39961,39962,39964,39966,39970,39971,39974,39975,39976,39977,39978,39985,39989,39990,39991,39997,40001,40003,40004,40005,40009,40010,40014,40015,40016,40019,40020,40022,40024,40027,40029,40030,40031,40035,40041,40042,40028,40043,40040,40046,40048,40050,40053,40055,40059,40166,40178,40183,40185,40203,40194,40209,40215,40216,40220,40221,40222,40239,40240,40242,40243,40244,40250,40252,40261,40253,40258,40259,40263,40266,40275,40276,40287,40291,40290,40293,40297,40298,40299,40304,40310,40311,40315,40316,40318,40323,40324,40326,40330,40333,40334,40338,40339,40341,40342,40343,40344,40353,40362,40364,40366,40369,40373,40377,40380,40383,40387,40391,40393,40394,40404,40405,40406,40407,40410,40414,40415,40416,40421,40423,40425,40427,40430,40432,40435,40436,40446,40458,40450,40455,40462,40464,40465,40466,40469,40470,40473,40476,40477,40570,40571,40572,40576,40578,40579,40580,40581,40583,40590,40591,40598,40600,40603,40606,40612,40616,40620,40622,40623,40624,40627,40628,40629,40646,40648,40651,40661,40671,40676,40679,40684,40685,40686,40688,40689,40690,40693,40696,40703,40706,40707,40713,40719,40720,40721,40722,40724,40726,40727,40729,40730,40731,40735,40738,40742,40746,40747,40751,40753,40754,40756,40759,40761,40762,40764,40765,40767,40769,40771,40772,40773,40774,40775,40787,40789,40790,40791,40792,40794,40797,40798,40808,40809,40813,40814,40815,40816,40817,40819,40821,40826,40829,40847,40848,40849,40850,40852,40854,40855,40862,40865,40866,40867,40869,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null], + 'ibm866': [1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,9617,9618,9619,9474,9508,9569,9570,9558,9557,9571,9553,9559,9565,9564,9563,9488,9492,9524,9516,9500,9472,9532,9566,9567,9562,9556,9577,9574,9568,9552,9580,9575,9576,9572,9573,9561,9560,9554,9555,9579,9578,9496,9484,9608,9604,9612,9616,9600,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1025,1105,1028,1108,1031,1111,1038,1118,176,8729,183,8730,8470,164,9632,160], + 'iso-8859-2': [128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,728,321,164,317,346,167,168,352,350,356,377,173,381,379,176,261,731,322,180,318,347,711,184,353,351,357,378,733,382,380,340,193,194,258,196,313,262,199,268,201,280,203,282,205,206,270,272,323,327,211,212,336,214,215,344,366,218,368,220,221,354,223,341,225,226,259,228,314,263,231,269,233,281,235,283,237,238,271,273,324,328,243,244,337,246,247,345,367,250,369,252,253,355,729], + 'iso-8859-3': [128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,294,728,163,164,null,292,167,168,304,350,286,308,173,null,379,176,295,178,179,180,181,293,183,184,305,351,287,309,189,null,380,192,193,194,null,196,266,264,199,200,201,202,203,204,205,206,207,null,209,210,211,212,288,214,215,284,217,218,219,220,364,348,223,224,225,226,null,228,267,265,231,232,233,234,235,236,237,238,239,null,241,242,243,244,289,246,247,285,249,250,251,252,365,349,729], + 'iso-8859-4': [128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,312,342,164,296,315,167,168,352,274,290,358,173,381,175,176,261,731,343,180,297,316,711,184,353,275,291,359,330,382,331,256,193,194,195,196,197,198,302,268,201,280,203,278,205,206,298,272,325,332,310,212,213,214,215,216,370,218,219,220,360,362,223,257,225,226,227,228,229,230,303,269,233,281,235,279,237,238,299,273,326,333,311,244,245,246,247,248,371,250,251,252,361,363,729], + 'iso-8859-5': [128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,173,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,8470,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,167,1118,1119], + 'iso-8859-6': [128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,null,null,null,164,null,null,null,null,null,null,null,1548,173,null,null,null,null,null,null,null,null,null,null,null,null,null,1563,null,null,null,1567,null,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,null,null,null,null,null,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,null,null,null,null,null,null,null,null,null,null,null,null,null], + 'iso-8859-7': [128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,8216,8217,163,8364,8367,166,167,168,169,890,171,172,173,null,8213,176,177,178,179,900,901,902,183,904,905,906,187,908,189,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,null,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,null], + 'iso-8859-8': [128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,null,162,163,164,165,166,167,168,169,215,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,247,187,188,189,190,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,8215,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,null,null,8206,8207,null], + 'iso-8859-10': [128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,274,290,298,296,310,167,315,272,352,358,381,173,362,330,176,261,275,291,299,297,311,183,316,273,353,359,382,8213,363,331,256,193,194,195,196,197,198,302,268,201,280,203,278,205,206,207,208,325,332,211,212,213,214,360,216,370,218,219,220,221,222,223,257,225,226,227,228,229,230,303,269,233,281,235,279,237,238,239,240,326,333,243,244,245,246,361,248,371,250,251,252,253,254,312], + 'iso-8859-13': [128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,8221,162,163,164,8222,166,167,216,169,342,171,172,173,174,198,176,177,178,179,8220,181,182,183,248,185,343,187,188,189,190,230,260,302,256,262,196,197,280,274,268,201,377,278,290,310,298,315,352,323,325,211,332,213,214,215,370,321,346,362,220,379,381,223,261,303,257,263,228,229,281,275,269,233,378,279,291,311,299,316,353,324,326,243,333,245,246,247,371,322,347,363,252,380,382,8217], + 'iso-8859-14': [128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,7682,7683,163,266,267,7690,167,7808,169,7810,7691,7922,173,174,376,7710,7711,288,289,7744,7745,182,7766,7809,7767,7811,7776,7923,7812,7813,7777,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,372,209,210,211,212,213,214,7786,216,217,218,219,220,221,374,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,373,241,242,243,244,245,246,7787,248,249,250,251,252,253,375,255], + 'iso-8859-15': [128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,8364,165,352,167,353,169,170,171,172,173,174,175,176,177,178,179,381,181,182,183,382,185,186,187,338,339,376,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255], + 'iso-8859-16': [128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,260,261,321,8364,8222,352,167,353,169,536,171,377,173,378,379,176,177,268,322,381,8221,182,183,382,269,537,187,338,339,376,380,192,193,194,258,196,262,198,199,200,201,202,203,204,205,206,207,272,323,210,211,212,336,214,346,368,217,218,219,220,280,538,223,224,225,226,259,228,263,230,231,232,233,234,235,236,237,238,239,273,324,242,243,244,337,246,347,369,249,250,251,252,281,539,255], + 'koi8-r': [9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9600,9604,9608,9612,9616,9617,9618,9619,8992,9632,8729,8730,8776,8804,8805,160,8993,176,178,183,247,9552,9553,9554,1105,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,1025,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,169,1102,1072,1073,1094,1076,1077,1092,1075,1093,1080,1081,1082,1083,1084,1085,1086,1087,1103,1088,1089,1090,1091,1078,1074,1100,1099,1079,1096,1101,1097,1095,1098,1070,1040,1041,1062,1044,1045,1060,1043,1061,1048,1049,1050,1051,1052,1053,1054,1055,1071,1056,1057,1058,1059,1046,1042,1068,1067,1047,1064,1069,1065,1063,1066], + 'koi8-u': [9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9600,9604,9608,9612,9616,9617,9618,9619,8992,9632,8729,8730,8776,8804,8805,160,8993,176,178,183,247,9552,9553,9554,1105,1108,9556,1110,1111,9559,9560,9561,9562,9563,1169,1118,9566,9567,9568,9569,1025,1028,9571,1030,1031,9574,9575,9576,9577,9578,1168,1038,169,1102,1072,1073,1094,1076,1077,1092,1075,1093,1080,1081,1082,1083,1084,1085,1086,1087,1103,1088,1089,1090,1091,1078,1074,1100,1099,1079,1096,1101,1097,1095,1098,1070,1040,1041,1062,1044,1045,1060,1043,1061,1048,1049,1050,1051,1052,1053,1054,1055,1071,1056,1057,1058,1059,1046,1042,1068,1067,1047,1064,1069,1065,1063,1066], + 'macintosh': [196,197,199,201,209,214,220,225,224,226,228,227,229,231,233,232,234,235,237,236,238,239,241,243,242,244,246,245,250,249,251,252,8224,176,162,163,167,8226,182,223,174,169,8482,180,168,8800,198,216,8734,177,8804,8805,165,181,8706,8721,8719,960,8747,170,186,937,230,248,191,161,172,8730,402,8776,8710,171,187,8230,160,192,195,213,338,339,8211,8212,8220,8221,8216,8217,247,9674,255,376,8260,8364,8249,8250,64257,64258,8225,183,8218,8222,8240,194,202,193,203,200,205,206,207,204,211,212,63743,210,218,219,217,305,710,732,175,728,729,730,184,733,731,711], + 'windows-874': [8364,129,130,131,132,8230,134,135,136,137,138,139,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,152,153,154,155,156,157,158,159,160,3585,3586,3587,3588,3589,3590,3591,3592,3593,3594,3595,3596,3597,3598,3599,3600,3601,3602,3603,3604,3605,3606,3607,3608,3609,3610,3611,3612,3613,3614,3615,3616,3617,3618,3619,3620,3621,3622,3623,3624,3625,3626,3627,3628,3629,3630,3631,3632,3633,3634,3635,3636,3637,3638,3639,3640,3641,3642,null,null,null,null,3647,3648,3649,3650,3651,3652,3653,3654,3655,3656,3657,3658,3659,3660,3661,3662,3663,3664,3665,3666,3667,3668,3669,3670,3671,3672,3673,3674,3675,null,null,null,null], + 'windows-1250': [8364,129,8218,131,8222,8230,8224,8225,136,8240,352,8249,346,356,381,377,144,8216,8217,8220,8221,8226,8211,8212,152,8482,353,8250,347,357,382,378,160,711,728,321,164,260,166,167,168,169,350,171,172,173,174,379,176,177,731,322,180,181,182,183,184,261,351,187,317,733,318,380,340,193,194,258,196,313,262,199,268,201,280,203,282,205,206,270,272,323,327,211,212,336,214,215,344,366,218,368,220,221,354,223,341,225,226,259,228,314,263,231,269,233,281,235,283,237,238,271,273,324,328,243,244,337,246,247,345,367,250,369,252,253,355,729], + 'windows-1251': [1026,1027,8218,1107,8222,8230,8224,8225,8364,8240,1033,8249,1034,1036,1035,1039,1106,8216,8217,8220,8221,8226,8211,8212,152,8482,1113,8250,1114,1116,1115,1119,160,1038,1118,1032,164,1168,166,167,1025,169,1028,171,172,173,174,1031,176,177,1030,1110,1169,181,182,183,1105,8470,1108,187,1112,1029,1109,1111,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103], + 'windows-1252': [8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,381,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,382,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255], + 'windows-1253': [8364,129,8218,402,8222,8230,8224,8225,136,8240,138,8249,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,152,8482,154,8250,156,157,158,159,160,901,902,163,164,165,166,167,168,169,null,171,172,173,174,8213,176,177,178,179,900,181,182,183,904,905,906,187,908,189,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,null,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,null], + 'windows-1254': [8364,129,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,157,158,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,286,209,210,211,212,213,214,215,216,217,218,219,220,304,350,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,287,241,242,243,244,245,246,247,248,249,250,251,252,305,351,255], + 'windows-1255': [8364,129,8218,402,8222,8230,8224,8225,710,8240,138,8249,140,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,154,8250,156,157,158,159,160,161,162,163,8362,165,166,167,168,169,215,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,247,187,188,189,190,191,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1520,1521,1522,1523,1524,null,null,null,null,null,null,null,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,null,null,8206,8207,null], + 'windows-1256': [8364,1662,8218,402,8222,8230,8224,8225,710,8240,1657,8249,338,1670,1688,1672,1711,8216,8217,8220,8221,8226,8211,8212,1705,8482,1681,8250,339,8204,8205,1722,160,1548,162,163,164,165,166,167,168,169,1726,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,1563,187,188,189,190,1567,1729,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,215,1591,1592,1593,1594,1600,1601,1602,1603,224,1604,226,1605,1606,1607,1608,231,232,233,234,235,1609,1610,238,239,1611,1612,1613,1614,244,1615,1616,247,1617,249,1618,251,252,8206,8207,1746], + 'windows-1257': [8364,129,8218,131,8222,8230,8224,8225,136,8240,138,8249,140,168,711,184,144,8216,8217,8220,8221,8226,8211,8212,152,8482,154,8250,156,175,731,159,160,null,162,163,164,null,166,167,216,169,342,171,172,173,174,198,176,177,178,179,180,181,182,183,248,185,343,187,188,189,190,230,260,302,256,262,196,197,280,274,268,201,377,278,290,310,298,315,352,323,325,211,332,213,214,215,370,321,346,362,220,379,381,223,261,303,257,263,228,229,281,275,269,233,378,279,291,311,299,316,353,324,326,243,333,245,246,247,371,322,347,363,252,380,382,729], + 'windows-1258': [8364,129,8218,402,8222,8230,8224,8225,710,8240,138,8249,338,141,142,143,144,8216,8217,8220,8221,8226,8211,8212,732,8482,154,8250,339,157,158,376,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,258,196,197,198,199,200,201,202,203,768,205,206,207,272,209,777,211,212,416,214,215,216,217,218,219,220,431,771,223,224,225,226,259,228,229,230,231,232,233,234,235,769,237,238,239,273,241,803,243,244,417,246,247,248,249,250,251,252,432,8363,255], + 'x-mac-cyrillic': [1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,8224,176,1168,163,167,8226,182,1030,174,169,8482,1026,1106,8800,1027,1107,8734,177,8804,8805,1110,181,1169,1032,1028,1108,1031,1111,1033,1113,1034,1114,1112,1029,172,8730,402,8776,8710,171,187,8230,160,1035,1115,1036,1116,1109,8211,8212,8220,8221,8216,8217,247,8222,1038,1118,1039,1119,8470,1025,1105,1103,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,8364] +} + +export {Indexes} \ No newline at end of file diff --git a/cat/tjs/lib/encodings.js b/cat/tjs/lib/encodings.js new file mode 100644 index 0000000..8775406 --- /dev/null +++ b/cat/tjs/lib/encodings.js @@ -0,0 +1,460 @@ +/** + * Encodings table: https://encoding.spec.whatwg.org/encodings.json + */ +const encodings = [ + { + encodings: [ + { + labels: [ + "unicode-1-1-utf-8", + "utf-8", + "utf8", + ], + name: "UTF-8", + }, + ], + heading: "The Encoding", + }, + { + encodings: [ + { + labels: [ + "866", + "cp866", + "csibm866", + "ibm866", + ], + name: "IBM866", + }, + { + labels: [ + "csisolatin2", + "iso-8859-2", + "iso-ir-101", + "iso8859-2", + "iso88592", + "iso_8859-2", + "iso_8859-2:1987", + "l2", + "latin2", + ], + name: "ISO-8859-2", + }, + { + labels: [ + "csisolatin3", + "iso-8859-3", + "iso-ir-109", + "iso8859-3", + "iso88593", + "iso_8859-3", + "iso_8859-3:1988", + "l3", + "latin3", + ], + name: "ISO-8859-3", + }, + { + labels: [ + "csisolatin4", + "iso-8859-4", + "iso-ir-110", + "iso8859-4", + "iso88594", + "iso_8859-4", + "iso_8859-4:1988", + "l4", + "latin4", + ], + name: "ISO-8859-4", + }, + { + labels: [ + "csisolatincyrillic", + "cyrillic", + "iso-8859-5", + "iso-ir-144", + "iso8859-5", + "iso88595", + "iso_8859-5", + "iso_8859-5:1988", + ], + name: "ISO-8859-5", + }, + { + labels: [ + "arabic", + "asmo-708", + "csiso88596e", + "csiso88596i", + "csisolatinarabic", + "ecma-114", + "iso-8859-6", + "iso-8859-6-e", + "iso-8859-6-i", + "iso-ir-127", + "iso8859-6", + "iso88596", + "iso_8859-6", + "iso_8859-6:1987", + ], + name: "ISO-8859-6", + }, + { + labels: [ + "csisolatingreek", + "ecma-118", + "elot_928", + "greek", + "greek8", + "iso-8859-7", + "iso-ir-126", + "iso8859-7", + "iso88597", + "iso_8859-7", + "iso_8859-7:1987", + "sun_eu_greek", + ], + name: "ISO-8859-7", + }, + { + labels: [ + "csiso88598e", + "csisolatinhebrew", + "hebrew", + "iso-8859-8", + "iso-8859-8-e", + "iso-ir-138", + "iso8859-8", + "iso88598", + "iso_8859-8", + "iso_8859-8:1988", + "visual", + ], + name: "ISO-8859-8", + }, + { + labels: [ + "csiso88598i", + "iso-8859-8-i", + "logical", + ], + name: "ISO-8859-8-I", + }, + { + labels: [ + "csisolatin6", + "iso-8859-10", + "iso-ir-157", + "iso8859-10", + "iso885910", + "l6", + "latin6", + ], + name: "ISO-8859-10", + }, + { + labels: [ + "iso-8859-13", + "iso8859-13", + "iso885913", + ], + name: "ISO-8859-13", + }, + { + labels: [ + "iso-8859-14", + "iso8859-14", + "iso885914", + ], + name: "ISO-8859-14", + }, + { + labels: [ + "csisolatin9", + "iso-8859-15", + "iso8859-15", + "iso885915", + "iso_8859-15", + "l9", + ], + name: "ISO-8859-15", + }, + { + labels: [ + "iso-8859-16", + ], + name: "ISO-8859-16", + }, + { + labels: [ + "cskoi8r", + "koi", + "koi8", + "koi8-r", + "koi8_r", + ], + name: "KOI8-R", + }, + { + labels: [ + "koi8-ru", + "koi8-u", + ], + name: "KOI8-U", + }, + { + labels: [ + "csmacintosh", + "mac", + "macintosh", + "x-mac-roman", + ], + name: "macintosh", + }, + { + labels: [ + "dos-874", + "iso-8859-11", + "iso8859-11", + "iso885911", + "tis-620", + "windows-874", + ], + name: "windows-874", + }, + { + labels: [ + "cp1250", + "windows-1250", + "x-cp1250", + ], + name: "windows-1250", + }, + { + labels: [ + "cp1251", + "windows-1251", + "x-cp1251", + ], + name: "windows-1251", + }, + { + labels: [ + "ansi_x3.4-1968", + "ascii", + "cp1252", + "cp819", + "csisolatin1", + "ibm819", + "iso-8859-1", + "iso-ir-100", + "iso8859-1", + "iso88591", + "iso_8859-1", + "iso_8859-1:1987", + "l1", + "latin1", + "us-ascii", + "windows-1252", + "x-cp1252", + ], + name: "windows-1252", + }, + { + labels: [ + "cp1253", + "windows-1253", + "x-cp1253", + ], + name: "windows-1253", + }, + { + labels: [ + "cp1254", + "csisolatin5", + "iso-8859-9", + "iso-ir-148", + "iso8859-9", + "iso88599", + "iso_8859-9", + "iso_8859-9:1989", + "l5", + "latin5", + "windows-1254", + "x-cp1254", + ], + name: "windows-1254", + }, + { + labels: [ + "cp1255", + "windows-1255", + "x-cp1255", + ], + name: "windows-1255", + }, + { + labels: [ + "cp1256", + "windows-1256", + "x-cp1256", + ], + name: "windows-1256", + }, + { + labels: [ + "cp1257", + "windows-1257", + "x-cp1257", + ], + name: "windows-1257", + }, + { + labels: [ + "cp1258", + "windows-1258", + "x-cp1258", + ], + name: "windows-1258", + }, + { + labels: [ + "x-mac-cyrillic", + "x-mac-ukrainian", + ], + name: "x-mac-cyrillic", + }, + ], + heading: "Legacy single-byte encodings", + }, + { + encodings: [ + { + labels: [ + "chinese", + "csgb2312", + "csiso58gb231280", + "gb2312", + "gb_2312", + "gb_2312-80", + "gbk", + "iso-ir-58", + "x-gbk", + ], + name: "GBK", + }, + { + labels: [ + "gb18030", + ], + name: "gb18030", + }, + ], + heading: "Legacy multi-byte Chinese (simplified) encodings", + }, + { + encodings: [ + { + labels: [ + "big5", + "big5-hkscs", + "cn-big5", + "csbig5", + "x-x-big5", + ], + name: "Big5", + }, + ], + heading: "Legacy multi-byte Chinese (traditional) encodings", + }, + { + encodings: [ + { + labels: [ + "cseucpkdfmtjapanese", + "euc-jp", + "x-euc-jp", + ], + name: "EUC-JP", + }, + { + labels: [ + "csiso2022jp", + "iso-2022-jp", + ], + name: "ISO-2022-JP", + }, + { + labels: [ + "csshiftjis", + "ms932", + "ms_kanji", + "shift-jis", + "shift_jis", + "sjis", + "windows-31j", + "x-sjis", + ], + name: "Shift_JIS", + }, + ], + heading: "Legacy multi-byte Japanese encodings", + }, + { + encodings: [ + { + labels: [ + "cseuckr", + "csksc56011987", + "euc-kr", + "iso-ir-149", + "korean", + "ks_c_5601-1987", + "ks_c_5601-1989", + "ksc5601", + "ksc_5601", + "windows-949", + ], + name: "EUC-KR", + }, + ], + heading: "Legacy multi-byte Korean encodings", + }, + { + encodings: [ + { + labels: [ + "csiso2022kr", + "hz-gb-2312", + "iso-2022-cn", + "iso-2022-cn-ext", + "iso-2022-kr", + ], + name: "replacement", + }, + { + labels: [ + "utf-16be", + ], + name: "UTF-16BE", + }, + { + labels: [ + "utf-16", + "utf-16le", + ], + name: "UTF-16LE", + }, + { + labels: [ + "x-user-defined", + ], + name: "x-user-defined", + }, + ], + heading: "Legacy miscellaneous encodings", + }, +] + +export default encodings \ No newline at end of file diff --git a/cat/tjs/lib/euc-jp.js b/cat/tjs/lib/euc-jp.js new file mode 100644 index 0000000..3fe15be --- /dev/null +++ b/cat/tjs/lib/euc-jp.js @@ -0,0 +1,166 @@ +import { inRange, decoderError, encoderError, isASCIICodePoint, + end_of_stream, finished, isASCIIByte, floor } from './text_decoder_utils.js' +import index, { indexCodePointFor, indexPointerFor } from './text_decoder_indexes.js' + +// +// 13. Legacy multi-byte Japanese encodings +// + +// 13.1 euc-jp + +// 13.1.1 euc-jp decoder +/** + * @implements {Decoder} + */ +export class EUCJPDecoder { + constructor(options) { + const { fatal } = options + this.fatal = fatal + + // euc-jp's decoder has an associated euc-jp jis0212 flag + // (initially unset) and euc-jp lead (initially 0x00). + this.eucjp_jis0212_flag = false + this.eucjp_lead = 0x00 + } + + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + */ + handler(stream, bite) { + // 1. If byte is end-of-stream and euc-jp lead is not 0x00, set + // euc-jp lead to 0x00, and return error. + if (bite === end_of_stream && this.eucjp_lead !== 0x00) { + this.eucjp_lead = 0x00 + return decoderError(this.fatal) + } + + // 2. If byte is end-of-stream and euc-jp lead is 0x00, return + // finished. + if (bite === end_of_stream && this.eucjp_lead === 0x00) + return finished + + // 3. If euc-jp lead is 0x8E and byte is in the range 0xA1 to + // 0xDF, inclusive, set euc-jp lead to 0x00 and return a code + // point whose value is 0xFF61 − 0xA1 + byte. + if (this.eucjp_lead === 0x8E && inRange(bite, 0xA1, 0xDF)) { + this.eucjp_lead = 0x00 + return 0xFF61 - 0xA1 + bite + } + + // 4. If euc-jp lead is 0x8F and byte is in the range 0xA1 to + // 0xFE, inclusive, set the euc-jp jis0212 flag, set euc-jp lead + // to byte, and return continue. + if (this.eucjp_lead === 0x8F && inRange(bite, 0xA1, 0xFE)) { + this.eucjp_jis0212_flag = true + this.eucjp_lead = bite + return null + } + + // 5. If euc-jp lead is not 0x00, let lead be euc-jp lead, set + // euc-jp lead to 0x00, and run these substeps: + if (this.eucjp_lead !== 0x00) { + const lead = this.eucjp_lead + this.eucjp_lead = 0x00 + + // 1. Let code point be null. + let code_point = null + + // 2. If lead and byte are both in the range 0xA1 to 0xFE, + // inclusive, set code point to the index code point for (lead + // − 0xA1) × 94 + byte − 0xA1 in index jis0208 if the euc-jp + // jis0212 flag is unset and in index jis0212 otherwise. + if (inRange(lead, 0xA1, 0xFE) && inRange(bite, 0xA1, 0xFE)) { + code_point = indexCodePointFor( + (lead - 0xA1) * 94 + (bite - 0xA1), + index(!this.eucjp_jis0212_flag ? 'jis0208' : 'jis0212')) + } + + // 3. Unset the euc-jp jis0212 flag. + this.eucjp_jis0212_flag = false + + // 4. If byte is not in the range 0xA1 to 0xFE, inclusive, + // prepend byte to stream. + if (!inRange(bite, 0xA1, 0xFE)) + stream.prepend(bite) + + // 5. If code point is null, return error. + if (code_point === null) + return decoderError(this.fatal) + + // 6. Return a code point whose value is code point. + return code_point + } + + // 6. If byte is an ASCII byte, return a code point whose value + // is byte. + if (isASCIIByte(bite)) + return bite + + // 7. If byte is 0x8E, 0x8F, or in the range 0xA1 to 0xFE, + // inclusive, set euc-jp lead to byte and return continue. + if (bite === 0x8E || bite === 0x8F || inRange(bite, 0xA1, 0xFE)) { + this.eucjp_lead = bite + return null + } + + // 8. Return error. + return decoderError(this.fatal) + } +} + +// 13.1.2 euc-jp encoder +/** + * @implements {Encoder} + */ +export class EUCJPEncoder { + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + */ + handler(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point + + // 3. If code point is U+00A5, return byte 0x5C. + if (code_point === 0x00A5) + return 0x5C + + // 4. If code point is U+203E, return byte 0x7E. + if (code_point === 0x203E) + return 0x7E + + // 5. If code point is in the range U+FF61 to U+FF9F, inclusive, + // return two bytes whose values are 0x8E and code point − + // 0xFF61 + 0xA1. + if (inRange(code_point, 0xFF61, 0xFF9F)) + return [0x8E, code_point - 0xFF61 + 0xA1] + + // 6. If code point is U+2212, set it to U+FF0D. + if (code_point === 0x2212) + code_point = 0xFF0D + + // 7. Let pointer be the index pointer for code point in index + // jis0208. + const pointer = indexPointerFor(code_point, index('jis0208')) + + // 8. If pointer is null, return error with code point. + if (pointer === null) + return encoderError(code_point) + + // 9. Let lead be floor(pointer / 94) + 0xA1. + const lead = floor(pointer / 94) + 0xA1 + + // 10. Let trail be pointer % 94 + 0xA1. + const trail = pointer % 94 + 0xA1 + + // 11. Return two bytes whose values are lead and trail. + return [lead, trail] + } +} \ No newline at end of file diff --git a/cat/tjs/lib/euc-kr.js b/cat/tjs/lib/euc-kr.js new file mode 100644 index 0000000..f7c1379 --- /dev/null +++ b/cat/tjs/lib/euc-kr.js @@ -0,0 +1,124 @@ +import { inRange, decoderError, encoderError, isASCIICodePoint, + end_of_stream, finished, isASCIIByte, floor } from './text_decoder_utils.js' +import index, { indexCodePointFor, indexPointerFor } from './text_decoder_indexes.js' + +// +// 14. Legacy multi-byte Korean encodings +// + +// 14.1 euc-kr + +// 14.1.1 euc-kr decoder +/** + * @implements {Decoder} + */ +export class EUCKRDecoder { + constructor(options) { + const { fatal } = options + this.fatal = fatal + // euc-kr's decoder has an associated euc-kr lead (initially 0x00). + this.euckr_lead = 0x00 + } + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + */ + handler(stream, bite) { + // 1. If byte is end-of-stream and euc-kr lead is not 0x00, set + // euc-kr lead to 0x00 and return error. + if (bite === end_of_stream && this.euckr_lead !== 0) { + this.euckr_lead = 0x00 + return decoderError(this.fatal) + } + + // 2. If byte is end-of-stream and euc-kr lead is 0x00, return + // finished. + if (bite === end_of_stream && this.euckr_lead === 0) + return finished + + // 3. If euc-kr lead is not 0x00, let lead be euc-kr lead, let + // pointer be null, set euc-kr lead to 0x00, and then run these + // substeps: + if (this.euckr_lead !== 0x00) { + const lead = this.euckr_lead + let pointer = null + this.euckr_lead = 0x00 + + // 1. If byte is in the range 0x41 to 0xFE, inclusive, set + // pointer to (lead − 0x81) × 190 + (byte − 0x41). + if (inRange(bite, 0x41, 0xFE)) + pointer = (lead - 0x81) * 190 + (bite - 0x41) + + // 2. Let code point be null, if pointer is null, and the + // index code point for pointer in index euc-kr otherwise. + const code_point = (pointer === null) + ? null : indexCodePointFor(pointer, index('euc-kr')) + + // 3. If code point is null and byte is an ASCII byte, prepend + // byte to stream. + if (pointer === null && isASCIIByte(bite)) + stream.prepend(bite) + + // 4. If code point is null, return error. + if (code_point === null) + return decoderError(this.fatal) + + // 5. Return a code point whose value is code point. + return code_point + } + + // 4. If byte is an ASCII byte, return a code point whose value + // is byte. + if (isASCIIByte(bite)) + return bite + + // 5. If byte is in the range 0x81 to 0xFE, inclusive, set + // euc-kr lead to byte and return continue. + if (inRange(bite, 0x81, 0xFE)) { + this.euckr_lead = bite + return null + } + + // 6. Return error. + return decoderError(this.fatal) + } +} + +// 14.1.2 euc-kr encoder +/** + * @implements {Encoder} + */ +export class EUCKREncoder { + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + handler(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point + + // 3. Let pointer be the index pointer for code point in index + // euc-kr. + const pointer = indexPointerFor(code_point, index('euc-kr')) + + // 4. If pointer is null, return error with code point. + if (pointer === null) + return encoderError(code_point) + + // 5. Let lead be floor(pointer / 190) + 0x81. + const lead = floor(pointer / 190) + 0x81 + + // 6. Let trail be pointer % 190 + 0x41. + const trail = (pointer % 190) + 0x41 + + // 7. Return two bytes whose values are lead and trail. + return [lead, trail] + } +} \ No newline at end of file diff --git a/cat/tjs/lib/ffm3u8_open.js b/cat/tjs/lib/ffm3u8_open.js new file mode 100644 index 0000000..92c34e6 --- /dev/null +++ b/cat/tjs/lib/ffm3u8_open.js @@ -0,0 +1,480 @@ +/* +* @File : ffm3u8_open.js.js +* @Author : jade +* @Date : 2024/2/5 16:06 +* @Email : jadehh@1ive.com +* @Software : Samples +* @Desc : +*/ +import { _ } from './cat.js'; +import * as HLS from './hls.js'; + +let key = 'ffm3u8'; +let url = ''; +let categories = []; +let siteKey = ''; +let siteType = 0; + +async function request(reqUrl, agentSp) { + let res = await req(reqUrl, { + method: 'get', + }); + return JSON.parse(res.content); +} + +async function init(cfg) { + siteKey = cfg.skey; + siteType = cfg.stype; + url = cfg.ext.url; + categories = cfg.ext.categories; +} + +async function home(filter) { + const data = await request(url); + let classes = []; + for (const cls of data.class) { + const n = cls.type_name.toString().trim(); + if (categories && categories.length > 0) { + if (categories.indexOf(n) < 0) continue; + } + classes.push({ + type_id: cls.type_id.toString(), + type_name: n, + }); + } + if (categories && categories.length > 0) { + classes = _.sortBy(classes, (p) => { + return categories.indexOf(p.type_name); + }); + } + return { + class: classes, + }; +} + +async function homeVod() { + return '{}'; +} + +async function category(tid, pg, filter, extend) { + let page = pg || 1; + if (page == 0) page = 1; + const data = await request(url + `?ac=detail&t=${tid}&pg=${page}`); + let videos = []; + for (const vod of data.list) { + videos.push({ + vod_id: vod.vod_id.toString(), + vod_name: vod.vod_name.toString(), + vod_pic: vod.vod_pic, + vod_remarks: vod.vod_remarks, + }); + } + return { + page: parseInt(data.page), + pagecount: data.pagecount, + total: data.total, + list: videos, + }; +} + +async function detail(id) { + const data = (await request(url + `?ac=detail&ids=${id}`)).list[0]; + let vod = { + vod_id: data.vod_id, + vod_name: data.vod_name, + vod_pic: data.vod_pic, + type_name: data.type_name, + vod_year: data.vod_year, + vod_area: data.vod_area, + vod_remarks: data.vod_remarks, + vod_actor: data.vod_actor, + vod_director: data.vod_director, + vod_content: data.vod_content.trim(), + vod_play_from: data.vod_play_from, + vod_play_url: data.vod_play_url, + }; + return { + list: [vod], + }; +} + +async function proxy(segments, headers, reqHeaders) { + let what = segments[0]; + let segs = decodeURIComponent(segments[1]); + if (what == 'hls') { + function hlsHeader(data, hls) { + let hlsHeaders = {}; + if (data.headers['content-length']) { + Object.assign(hlsHeaders, data.headers, { 'content-length': hls.length.toString() }); + } else { + Object.assign(hlsHeaders, data.headers); + } + delete hlsHeaders['transfer-encoding']; + if (hlsHeaders['content-encoding'] == 'gzip') { + delete hlsHeaders['content-encoding']; + } + return hlsHeaders; + } + const hlsData = await hlsCache(segs, headers); + if (hlsData.variants) { + // variants -> variants -> .... ignore + const hls = HLS.stringify(hlsData.plist); + return { + code: hlsData.code, + content: hls, + headers: hlsHeader(hlsData, hls), + }; + } else { + const hls = HLS.stringify(hlsData.plist, (segment) => { + return js2Proxy(false, siteType, siteKey, 'ts/' + encodeURIComponent(hlsData.key + '/' + segment.mediaSequenceNumber.toString()), headers); + }); + return { + code: hlsData.code, + content: hls, + headers: hlsHeader(hlsData, hls), + }; + } + } else if (what == 'ts') { + const info = segs.split('/'); + const hlsKey = info[0]; + const segIdx = parseInt(info[1]); + return await tsCache(hlsKey, segIdx, headers); + } + return '{}'; +} + +async function play(flag, id, flags) { + try { + const pUrls = await hls2Urls(id, {}); + for (let index = 1; index < pUrls.length; index += 2) { + pUrls[index] = js2Proxy(false, siteType, siteKey, 'hls/' + encodeURIComponent(pUrls[index]), {}); + } + pUrls.push('original'); + pUrls.push(id); + return { + parse: 0, + url: pUrls, + }; + } catch (e) { + return { + parse: 0, + url: id, + }; + } +} + +async function search(wd, quick, pg) { + let page = pg || 1; + if (page == 0) page = 1; + const data = await request(url + `?ac=detail&wd=${wd}`); + let videos = []; + for (const vod of data.list) { + videos.push({ + vod_id: vod.vod_id.toString(), + vod_name: vod.vod_name.toString(), + vod_pic: vod.vod_pic, + vod_remarks: vod.vod_remarks, + }); + } + return { + page: parseInt(data.page), + pagecount: data.pagecount, + total: data.total, + list: videos, + }; +} + +const cacheRoot = 'hls_cache'; +const hlsKeys = []; +const hlsPlistCaches = {}; +const interrupts = {}; +const downloadTask = {}; +let currentDownloadHlsKey = ''; + +function hlsCacheInsert(key, data) { + hlsKeys.push(key); + hlsPlistCaches[key] = data; + if (hlsKeys.length > 5) { + const rmKey = hlsKeys.shift(); + hlsCacheRemove(rmKey); + } +} + +function hlsCacheRemove(key) { + delete hlsPlistCaches[key]; + delete hlsKeys[key]; + new JSFile(cacheRoot + '/' + key).delete(); +} + +function plistUriResolve(baseUrl, plist) { + if (plist.variants) { + for (const v of plist.variants) { + if (!v.uri.startsWith('http')) { + v.uri = relative2Absolute(baseUrl, v.uri); + } + } + } + if (plist.segments) { + for (const s of plist.segments) { + if (!s.uri.startsWith('http')) { + s.uri = relative2Absolute(baseUrl, s.uri); + } + if (s.key && s.key.uri && !s.key.uri.startsWith('http')) { + s.key.uri = relative2Absolute(baseUrl, s.key.uri); + } + } + } + return plist; +} + +async function hls2Urls(url, headers) { + let urls = []; + let resp = {}; + let tmpUrl = url; + while (true) { + resp = await req(tmpUrl, { + headers: headers, + redirect: 0, + }); + if (resp.headers['location']) { + tmpUrl = resp.headers['location']; + } else { + break; + } + } + if (resp.code == 200) { + var hls = resp.content; + const plist = plistUriResolve(tmpUrl, HLS.parse(hls)); + if (plist.variants) { + for (const vari of _.sortBy(plist.variants, (v) => -1 * v.bandwidth)) { + urls.push(`proxy_${vari.resolution.width}x${vari.resolution.height}`); + urls.push(vari.uri); + } + } else { + urls.push('proxy'); + urls.push(url); + const hlsKey = md5X(url); + hlsCacheInsert(hlsKey, { + code: resp.code, + plist: plist, + key: hlsKey, + headers: resp.headers, + }); + } + } + return urls; +} + +async function hlsCache(url, headers) { + const hlsKey = md5X(url); + if (hlsPlistCaches[hlsKey]) { + return hlsPlistCaches[hlsKey]; + } + let resp = {}; + let tmpUrl = url; + while (true) { + resp = await req(tmpUrl, { + headers: headers, + redirect: 0, + }); + if (resp.headers['location']) { + tmpUrl = resp.headers['location']; + } else { + break; + } + } + if (resp.code == 200) { + var hls = resp.content; + const plist = plistUriResolve(tmpUrl, HLS.parse(hls)); + hlsCacheInsert(hlsKey, { + code: resp.code, + plist: plist, + key: hlsKey, + headers: resp.headers, + }); + return hlsPlistCaches[hlsKey]; + } + return {}; +} + +async function tsCache(hlsKey, segmentIndex, headers) { + if (!hlsPlistCaches[hlsKey]) { + return {}; + } + const plist = hlsPlistCaches[hlsKey].plist; + const segments = plist.segments; + + let startFirst = !downloadTask[hlsKey]; + if (startFirst) { + downloadTask[hlsKey] = {}; + for (const seg of segments) { + const tk = md5X(seg.uri + seg.mediaSequenceNumber.toString()); + downloadTask[hlsKey][tk] = { + file: cacheRoot + '/' + hlsKey + '/' + tk, + uri: seg.uri, + key: tk, + index: seg.mediaSequenceNumber, + order: seg.mediaSequenceNumber, + state: -1, + read: false, + }; + } + } + + // sort task + for (const tk in downloadTask[hlsKey]) { + const task = downloadTask[hlsKey][tk]; + if (task.index >= segmentIndex) { + task.order = task.index - segmentIndex; + } else { + task.order = segments.length - segmentIndex + task.index; + } + } + + if (startFirst) { + fixedCachePool(hlsKey, 5, headers); + } + + const segment = segments[segmentIndex]; + const tsKey = md5X(segment.uri + segment.mediaSequenceNumber.toString()); + const task = downloadTask[hlsKey][tsKey]; + if (task.state == 1 || task.state == -1) { + const file = new JSFile(task.file); + if (await file.exist()) { + task.state = 1; + // download finish + return { + buffer: 3, + code: 200, + headers: { + connection: 'close', + 'content-type': 'video/mp2t', + }, + content: file, + }; + } else { + // file miss?? retry + task.state = -1; + } + } + if (task.state == -1) { + // start download + startTsTask(hlsKey, task, headers); + } + // wait read dwonload + if (task.state == 0) { + var stream = new JSProxyStream(); + stream.head(200, { + connection: 'close', + 'content-type': 'video/mp2t', + }); + let downloaded = 0; + task.read = true; + new Promise(async function (resolve, reject) { + const f = new JSFile(task.file + '.dl'); + await f.open('r'); + (async function waitReadFile() { + const s = await f.size(); + if (s > downloaded) { + var downloadBuf = await f.read(s - downloaded, downloaded); + await stream.write(downloadBuf); + downloaded = s; + } + if (task.state == 1 || task.state < 0) { + // finish error or done + stream.done(); + await f.close(); + await f.delete(); + task.read = false; + resolve(); + return; + } + setTimeout(waitReadFile, 5); + })(); + }); + return { + buffer: 3, + content: stream, + }; + } +} + +async function startTsTask(hlsKey, task, headers) { + if (task.state >= 0) return; + if (!interrupts[hlsKey]) { + return; + } + task.state = 0; + if (await new JSFile(task.file).exist()) { + task.state = 1; + return; + } + const file = new JSFile(task.file + '.dl'); + await file.open('w'); + const resp = await req(task.uri, { + buffer: 3, + headers: headers, + stream: file, + timeout: [5000, 10000], + }); + if (resp.error || resp.code >= 300) { + await file.close(); + if (!task.read) { + await file.delete(); + } + task.state = -1; + return; + } + await file.close(); + if (task.read) { + await file.copy(task.file); + } else { + await file.move(task.file); + } + task.state = 1; +} + +async function fixedCachePool(hlsKey, limit, headers) { + // keep last cache task only + if (currentDownloadHlsKey && currentDownloadHlsKey != hlsKey) { + delete interrupts[currentDownloadHlsKey]; + } + currentDownloadHlsKey = hlsKey; + interrupts[hlsKey] = true; + for (let index = 0; index < limit; index++) { + if (!interrupts[hlsKey]) break; + new Promise(function (resolve, reject) { + (async function doTask() { + if (!interrupts[hlsKey]) { + resolve(); + return; + } + const tasks = _.pickBy(downloadTask[hlsKey], function (o) { + return o.state == -1; + }); + const task = _.minBy(Object.values(tasks), function (o) { + return o.order; + }); + if (!task) { + resolve(); + return; + } + await startTsTask(hlsKey, task, headers); + setTimeout(doTask, 5); + })(); + }); + } +} + +function relative2Absolute(base, relative) { + var stack = base.split('/'), + parts = relative.split('/'); + stack.pop(); + for (var i = 0; i < parts.length; i++) { + if (parts[i] == '.') continue; + if (parts[i] == '..') stack.pop(); + else stack.push(parts[i]); + } + return stack.join('/'); +} +export {hls2Urls,hlsCache,tsCache} \ No newline at end of file diff --git a/cat/tjs/lib/gb18030.js b/cat/tjs/lib/gb18030.js new file mode 100644 index 0000000..3cf99dc --- /dev/null +++ b/cat/tjs/lib/gb18030.js @@ -0,0 +1,251 @@ +import { inRange, decoderError, encoderError, isASCIICodePoint, + end_of_stream, finished, isASCIIByte, floor } from './text_decoder_utils.js' +import index, { + indexGB18030RangesCodePointFor, indexGB18030RangesPointerFor, + indexCodePointFor, indexPointerFor } from './text_decoder_indexes.js' + +// 11.2 gb18030 + +// 11.2.1 gb18030 decoder +/** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ +export class GB18030Decoder { + constructor(options) { + const { fatal } = options + this.fatal = fatal + // gb18030's decoder has an associated gb18030 first, gb18030 + // second, and gb18030 third (all initially 0x00). + this.gb18030_first = 0x00 + this.gb18030_second = 0x00, + this.gb18030_third = 0x00 + } + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return The next code point(s) decoded, or null if not enough data exists in the input stream to decode a complete code point. + */ + handler(stream, bite) { + // 1. If byte is end-of-stream and gb18030 first, gb18030 + // second, and gb18030 third are 0x00, return finished. + if (bite === end_of_stream && this.gb18030_first === 0x00 && + this.gb18030_second === 0x00 && this.gb18030_third === 0x00) { + return finished + } + // 2. If byte is end-of-stream, and gb18030 first, gb18030 + // second, or gb18030 third is not 0x00, set gb18030 first, + // gb18030 second, and gb18030 third to 0x00, and return error. + if (bite === end_of_stream && + (this.gb18030_first !== 0x00 || this.gb18030_second !== 0x00 || + this.gb18030_third !== 0x00)) { + this.gb18030_first = 0x00 + this.gb18030_second = 0x00 + this.gb18030_third = 0x00 + decoderError(this.fatal) + } + var code_point + // 3. If gb18030 third is not 0x00, run these substeps: + if (this.gb18030_third !== 0x00) { + // 1. Let code point be null. + code_point = null + // 2. If byte is in the range 0x30 to 0x39, inclusive, set + // code point to the index gb18030 ranges code point for + // (((gb18030 first − 0x81) × 10 + gb18030 second − 0x30) × + // 126 + gb18030 third − 0x81) × 10 + byte − 0x30. + if (inRange(bite, 0x30, 0x39)) { + code_point = indexGB18030RangesCodePointFor( + (((this.gb18030_first - 0x81) * 10 + this.gb18030_second - 0x30) * 126 + + this.gb18030_third - 0x81) * 10 + bite - 0x30) + } + + // 3. Let buffer be a byte sequence consisting of gb18030 + // second, gb18030 third, and byte, in order. + var buffer = [this.gb18030_second, this.gb18030_third, bite] + + // 4. Set gb18030 first, gb18030 second, and gb18030 third to + // 0x00. + this.gb18030_first = 0x00 + this.gb18030_second = 0x00 + this.gb18030_third = 0x00 + + // 5. If code point is null, prepend buffer to stream and + // return error. + if (code_point === null) { + stream.prepend(buffer) + return decoderError(this.fatal) + } + + // 6. Return a code point whose value is code point. + return code_point + } + + // 4. If gb18030 second is not 0x00, run these substeps: + if (this.gb18030_second !== 0x00) { + // 1. If byte is in the range 0x81 to 0xFE, inclusive, set + // gb18030 third to byte and return continue. + if (inRange(bite, 0x81, 0xFE)) { + this.gb18030_third = bite + return null + } + + // 2. Prepend gb18030 second followed by byte to stream, set + // gb18030 first and gb18030 second to 0x00, and return error. + stream.prepend([this.gb18030_second, bite]) + this.gb18030_first = 0x00 + this.gb18030_second = 0x00 + return decoderError(this.fatal) + } + + // 5. If gb18030 first is not 0x00, run these substeps: + if (this.gb18030_first !== 0x00) { + // 1. If byte is in the range 0x30 to 0x39, inclusive, set + // gb18030 second to byte and return continue. + if (inRange(bite, 0x30, 0x39)) { + this.gb18030_second = bite + return null + } + + // 2. Let lead be gb18030 first, let pointer be null, and set + // gb18030 first to 0x00. + var lead = this.gb18030_first + var pointer = null + this.gb18030_first = 0x00 + + // 3. Let offset be 0x40 if byte is less than 0x7F and 0x41 + // otherwise. + var offset = bite < 0x7F ? 0x40 : 0x41 + + // 4. If byte is in the range 0x40 to 0x7E, inclusive, or 0x80 + // to 0xFE, inclusive, set pointer to (lead − 0x81) × 190 + + // (byte − offset). + if (inRange(bite, 0x40, 0x7E) || inRange(bite, 0x80, 0xFE)) + pointer = (lead - 0x81) * 190 + (bite - offset) + + // 5. Let code point be null if pointer is null and the index + // code point for pointer in index gb18030 otherwise. + code_point = pointer === null ? null : + indexCodePointFor(pointer, index('gb18030')) + + // 6. If code point is null and byte is an ASCII byte, prepend + // byte to stream. + if (code_point === null && isASCIIByte(bite)) + stream.prepend(bite) + + // 7. If code point is null, return error. + if (code_point === null) + return decoderError(this.fatal) + + // 8. Return a code point whose value is code point. + return code_point + } + + // 6. If byte is an ASCII byte, return a code point whose value + // is byte. + if (isASCIIByte(bite)) + return bite + + // 7. If byte is 0x80, return code point U+20AC. + if (bite === 0x80) + return 0x20AC + + // 8. If byte is in the range 0x81 to 0xFE, inclusive, set + // gb18030 first to byte and return continue. + if (inRange(bite, 0x81, 0xFE)) { + this.gb18030_first = bite + return null + } + + // 9. Return error. + return decoderError(this.fatal) + } +} + +// 11.2.2 gb18030 encoder +/** + * @implements {Encoder} + */ +export class GB18030Encoder { + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return Byte(s) to emit. + */ + handler(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point + + // 3. If code point is U+E5E5, return error with code point. + if (code_point === 0xE5E5) + return encoderError(code_point) + + // 4. If the gbk flag is set and code point is U+20AC, return + // byte 0x80. + if (this.gbk_flag && code_point === 0x20AC) + return 0x80 + + // 5. Let pointer be the index pointer for code point in index + // gb18030. + var pointer = indexPointerFor(code_point, index('gb18030')) + + // 6. If pointer is not null, run these substeps: + if (pointer !== null) { + // 1. Let lead be floor(pointer / 190) + 0x81. + var lead = floor(pointer / 190) + 0x81 + + // 2. Let trail be pointer % 190. + var trail = pointer % 190 + + // 3. Let offset be 0x40 if trail is less than 0x3F and 0x41 otherwise. + var offset = trail < 0x3F ? 0x40 : 0x41 + + // 4. Return two bytes whose values are lead and trail + offset. + return [lead, trail + offset] + } + + // 7. If gbk flag is set, return error with code point. + if (this.gbk_flag) + return encoderError(code_point) + + // 8. Set pointer to the index gb18030 ranges pointer for code + // point. + pointer = indexGB18030RangesPointerFor(code_point) + + // 9. Let byte1 be floor(pointer / 10 / 126 / 10). + var byte1 = floor(pointer / 10 / 126 / 10) + + // 10. Set pointer to pointer − byte1 × 10 × 126 × 10. + pointer = pointer - byte1 * 10 * 126 * 10 + + // 11. Let byte2 be floor(pointer / 10 / 126). + var byte2 = floor(pointer / 10 / 126) + + // 12. Set pointer to pointer − byte2 × 10 × 126. + pointer = pointer - byte2 * 10 * 126 + + // 13. Let byte3 be floor(pointer / 10). + var byte3 = floor(pointer / 10) + + // 14. Let byte4 be pointer − byte3 × 10. + var byte4 = pointer - byte3 * 10 + + // 15. Return four bytes whose values are byte1 + 0x81, byte2 + + // 0x30, byte3 + 0x81, byte4 + 0x30. + return [byte1 + 0x81, + byte2 + 0x30, + byte3 + 0x81, + byte4 + 0x30] + } + + constructor(options = {}, gbk_flag = false) { + // gb18030's decoder has an associated gbk flag (initially unset). + this.gbk_flag = gbk_flag + } +} diff --git a/cat/tjs/lib/gbk_us.js b/cat/tjs/lib/gbk_us.js new file mode 100644 index 0000000..d871d83 --- /dev/null +++ b/cat/tjs/lib/gbk_us.js @@ -0,0 +1,32194 @@ +let gbk_us = [ + 19970, + 19972, + 19973, + 19974, + 19983, + 19986, + 19991, + 19999, + 20000, + 20001, + 20003, + 20006, + 20009, + 20014, + 20015, + 20017, + 20019, + 20021, + 20023, + 20028, + 20032, + 20033, + 20034, + 20036, + 20038, + 20042, + 20049, + 20053, + 20055, + 20058, + 20059, + 20066, + 20067, + 20068, + 20069, + 20071, + 20072, + 20074, + 20075, + 20076, + 20077, + 20078, + 20079, + 20082, + 20084, + 20085, + 20086, + 20087, + 20088, + 20089, + 20090, + 20091, + 20092, + 20093, + 20095, + 20096, + 20097, + 20098, + 20099, + 20100, + 20101, + 20103, + 20106, + null, + 20112, + 20118, + 20119, + 20121, + 20124, + 20125, + 20126, + 20131, + 20138, + 20143, + 20144, + 20145, + 20148, + 20150, + 20151, + 20152, + 20153, + 20156, + 20157, + 20158, + 20168, + 20172, + 20175, + 20176, + 20178, + 20186, + 20187, + 20188, + 20192, + 20194, + 20198, + 20199, + 20201, + 20205, + 20206, + 20207, + 20209, + 20212, + 20216, + 20217, + 20218, + 20220, + 20222, + 20224, + 20226, + 20227, + 20228, + 20229, + 20230, + 20231, + 20232, + 20235, + 20236, + 20242, + 20243, + 20244, + 20245, + 20246, + 20252, + 20253, + 20257, + 20259, + 20264, + 20265, + 20268, + 20269, + 20270, + 20273, + 20275, + 20277, + 20279, + 20281, + 20283, + 20286, + 20287, + 20288, + 20289, + 20290, + 20292, + 20293, + 20295, + 20296, + 20297, + 20298, + 20299, + 20300, + 20306, + 20308, + 20310, + 20321, + 20322, + 20326, + 20328, + 20330, + 20331, + 20333, + 20334, + 20337, + 20338, + 20341, + 20343, + 20344, + 20345, + 20346, + 20349, + 20352, + 20353, + 20354, + 20357, + 20358, + 20359, + 20362, + 20364, + 20366, + 20368, + 20370, + 20371, + 20373, + 20374, + 20376, + 20377, + 20378, + 20380, + 20382, + 20383, + 20385, + 20386, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 20388, + 20395, + 20397, + 20400, + 20401, + 20402, + 20403, + 20404, + 20406, + 20407, + 20408, + 20409, + 20410, + 20411, + 20412, + 20413, + 20414, + 20416, + 20417, + 20418, + 20422, + 20423, + 20424, + 20425, + 20427, + 20428, + 20429, + 20434, + 20435, + 20436, + 20437, + 20438, + 20441, + 20443, + 20448, + 20450, + 20452, + 20453, + 20455, + 20459, + 20460, + 20464, + 20466, + 20468, + 20469, + 20470, + 20471, + 20473, + 20475, + 20476, + 20477, + 20479, + 20480, + 20481, + 20482, + 20483, + 20484, + 20485, + 20486, + 20487, + 20488, + 20489, + 20490, + null, + 20491, + 20494, + 20496, + 20497, + 20499, + 20501, + 20502, + 20503, + 20507, + 20509, + 20510, + 20512, + 20514, + 20515, + 20516, + 20519, + 20523, + 20527, + 20528, + 20529, + 20530, + 20531, + 20532, + 20533, + 20534, + 20535, + 20536, + 20537, + 20539, + 20541, + 20543, + 20544, + 20545, + 20546, + 20548, + 20549, + 20550, + 20553, + 20554, + 20555, + 20557, + 20560, + 20561, + 20562, + 20563, + 20564, + 20566, + 20567, + 20568, + 20569, + 20571, + 20573, + 20574, + 20575, + 20576, + 20577, + 20578, + 20579, + 20580, + 20582, + 20583, + 20584, + 20585, + 20586, + 20587, + 20589, + 20590, + 20591, + 20592, + 20593, + 20594, + 20595, + 20596, + 20597, + 20600, + 20601, + 20602, + 20604, + 20605, + 20609, + 20610, + 20611, + 20612, + 20614, + 20615, + 20617, + 20618, + 20619, + 20620, + 20622, + 20623, + 20624, + 20625, + 20626, + 20627, + 20628, + 20629, + 20630, + 20631, + 20632, + 20633, + 20634, + 20635, + 20636, + 20637, + 20638, + 20639, + 20640, + 20641, + 20642, + 20644, + 20646, + 20650, + 20651, + 20653, + 20654, + 20655, + 20656, + 20657, + 20659, + 20660, + 20661, + 20662, + 20663, + 20664, + 20665, + 20668, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 20669, + 20670, + 20671, + 20672, + 20673, + 20674, + 20675, + 20676, + 20677, + 20678, + 20679, + 20680, + 20681, + 20682, + 20683, + 20684, + 20685, + 20686, + 20688, + 20689, + 20690, + 20691, + 20692, + 20693, + 20695, + 20696, + 20697, + 20699, + 20700, + 20701, + 20702, + 20703, + 20704, + 20705, + 20706, + 20707, + 20708, + 20709, + 20712, + 20713, + 20714, + 20715, + 20719, + 20720, + 20721, + 20722, + 20724, + 20726, + 20727, + 20728, + 20729, + 20730, + 20732, + 20733, + 20734, + 20735, + 20736, + 20737, + 20738, + 20739, + 20740, + 20741, + 20744, + null, + 20745, + 20746, + 20748, + 20749, + 20750, + 20751, + 20752, + 20753, + 20755, + 20756, + 20757, + 20758, + 20759, + 20760, + 20761, + 20762, + 20763, + 20764, + 20765, + 20766, + 20767, + 20768, + 20770, + 20771, + 20772, + 20773, + 20774, + 20775, + 20776, + 20777, + 20778, + 20779, + 20780, + 20781, + 20782, + 20783, + 20784, + 20785, + 20786, + 20787, + 20788, + 20789, + 20790, + 20791, + 20792, + 20793, + 20794, + 20795, + 20796, + 20797, + 20798, + 20802, + 20807, + 20810, + 20812, + 20814, + 20815, + 20816, + 20818, + 20819, + 20823, + 20824, + 20825, + 20827, + 20829, + 20830, + 20831, + 20832, + 20833, + 20835, + 20836, + 20838, + 20839, + 20841, + 20842, + 20847, + 20850, + 20858, + 20862, + 20863, + 20867, + 20868, + 20870, + 20871, + 20874, + 20875, + 20878, + 20879, + 20880, + 20881, + 20883, + 20884, + 20888, + 20890, + 20893, + 20894, + 20895, + 20897, + 20899, + 20902, + 20903, + 20904, + 20905, + 20906, + 20909, + 20910, + 20916, + 20920, + 20921, + 20922, + 20926, + 20927, + 20929, + 20930, + 20931, + 20933, + 20936, + 20938, + 20941, + 20942, + 20944, + 20946, + 20947, + 20948, + 20949, + 20950, + 20951, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 20952, + 20953, + 20954, + 20956, + 20958, + 20959, + 20962, + 20963, + 20965, + 20966, + 20967, + 20968, + 20969, + 20970, + 20972, + 20974, + 20977, + 20978, + 20980, + 20983, + 20990, + 20996, + 20997, + 21001, + 21003, + 21004, + 21007, + 21008, + 21011, + 21012, + 21013, + 21020, + 21022, + 21023, + 21025, + 21026, + 21027, + 21029, + 21030, + 21031, + 21034, + 21036, + 21039, + 21041, + 21042, + 21044, + 21045, + 21052, + 21054, + 21060, + 21061, + 21062, + 21063, + 21064, + 21065, + 21067, + 21070, + 21071, + 21074, + 21075, + 21077, + 21079, + 21080, + null, + 21081, + 21082, + 21083, + 21085, + 21087, + 21088, + 21090, + 21091, + 21092, + 21094, + 21096, + 21099, + 21100, + 21101, + 21102, + 21104, + 21105, + 21107, + 21108, + 21109, + 21110, + 21111, + 21112, + 21113, + 21114, + 21115, + 21116, + 21118, + 21120, + 21123, + 21124, + 21125, + 21126, + 21127, + 21129, + 21130, + 21131, + 21132, + 21133, + 21134, + 21135, + 21137, + 21138, + 21140, + 21141, + 21142, + 21143, + 21144, + 21145, + 21146, + 21148, + 21156, + 21157, + 21158, + 21159, + 21166, + 21167, + 21168, + 21172, + 21173, + 21174, + 21175, + 21176, + 21177, + 21178, + 21179, + 21180, + 21181, + 21184, + 21185, + 21186, + 21188, + 21189, + 21190, + 21192, + 21194, + 21196, + 21197, + 21198, + 21199, + 21201, + 21203, + 21204, + 21205, + 21207, + 21209, + 21210, + 21211, + 21212, + 21213, + 21214, + 21216, + 21217, + 21218, + 21219, + 21221, + 21222, + 21223, + 21224, + 21225, + 21226, + 21227, + 21228, + 21229, + 21230, + 21231, + 21233, + 21234, + 21235, + 21236, + 21237, + 21238, + 21239, + 21240, + 21243, + 21244, + 21245, + 21249, + 21250, + 21251, + 21252, + 21255, + 21257, + 21258, + 21259, + 21260, + 21262, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 21265, + 21266, + 21267, + 21268, + 21272, + 21275, + 21276, + 21278, + 21279, + 21282, + 21284, + 21285, + 21287, + 21288, + 21289, + 21291, + 21292, + 21293, + 21295, + 21296, + 21297, + 21298, + 21299, + 21300, + 21301, + 21302, + 21303, + 21304, + 21308, + 21309, + 21312, + 21314, + 21316, + 21318, + 21323, + 21324, + 21325, + 21328, + 21332, + 21336, + 21337, + 21339, + 21341, + 21349, + 21352, + 21354, + 21356, + 21357, + 21362, + 21366, + 21369, + 21371, + 21372, + 21373, + 21374, + 21376, + 21377, + 21379, + 21383, + 21384, + 21386, + 21390, + 21391, + null, + 21392, + 21393, + 21394, + 21395, + 21396, + 21398, + 21399, + 21401, + 21403, + 21404, + 21406, + 21408, + 21409, + 21412, + 21415, + 21418, + 21419, + 21420, + 21421, + 21423, + 21424, + 21425, + 21426, + 21427, + 21428, + 21429, + 21431, + 21432, + 21433, + 21434, + 21436, + 21437, + 21438, + 21440, + 21443, + 21444, + 21445, + 21446, + 21447, + 21454, + 21455, + 21456, + 21458, + 21459, + 21461, + 21466, + 21468, + 21469, + 21470, + 21473, + 21474, + 21479, + 21492, + 21498, + 21502, + 21503, + 21504, + 21506, + 21509, + 21511, + 21515, + 21524, + 21528, + 21529, + 21530, + 21532, + 21538, + 21540, + 21541, + 21546, + 21552, + 21555, + 21558, + 21559, + 21562, + 21565, + 21567, + 21569, + 21570, + 21572, + 21573, + 21575, + 21577, + 21580, + 21581, + 21582, + 21583, + 21585, + 21594, + 21597, + 21598, + 21599, + 21600, + 21601, + 21603, + 21605, + 21607, + 21609, + 21610, + 21611, + 21612, + 21613, + 21614, + 21615, + 21616, + 21620, + 21625, + 21626, + 21630, + 21631, + 21633, + 21635, + 21637, + 21639, + 21640, + 21641, + 21642, + 21645, + 21649, + 21651, + 21655, + 21656, + 21660, + 21662, + 21663, + 21664, + 21665, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 21666, + 21669, + 21678, + 21680, + 21682, + 21685, + 21686, + 21687, + 21689, + 21690, + 21692, + 21694, + 21699, + 21701, + 21706, + 21707, + 21718, + 21720, + 21723, + 21728, + 21729, + 21730, + 21731, + 21732, + 21739, + 21740, + 21743, + 21744, + 21745, + 21748, + 21749, + 21750, + 21751, + 21752, + 21753, + 21755, + 21758, + 21760, + 21762, + 21763, + 21764, + 21765, + 21768, + 21770, + 21771, + 21772, + 21773, + 21774, + 21778, + 21779, + 21781, + 21782, + 21783, + 21784, + 21785, + 21786, + 21788, + 21789, + 21790, + 21791, + 21793, + 21797, + 21798, + null, + 21800, + 21801, + 21803, + 21805, + 21810, + 21812, + 21813, + 21814, + 21816, + 21817, + 21818, + 21819, + 21821, + 21824, + 21826, + 21829, + 21831, + 21832, + 21835, + 21836, + 21837, + 21838, + 21839, + 21841, + 21842, + 21843, + 21844, + 21847, + 21848, + 21849, + 21850, + 21851, + 21853, + 21854, + 21855, + 21856, + 21858, + 21859, + 21864, + 21865, + 21867, + 21871, + 21872, + 21873, + 21874, + 21875, + 21876, + 21881, + 21882, + 21885, + 21887, + 21893, + 21894, + 21900, + 21901, + 21902, + 21904, + 21906, + 21907, + 21909, + 21910, + 21911, + 21914, + 21915, + 21918, + 21920, + 21921, + 21922, + 21923, + 21924, + 21925, + 21926, + 21928, + 21929, + 21930, + 21931, + 21932, + 21933, + 21934, + 21935, + 21936, + 21938, + 21940, + 21942, + 21944, + 21946, + 21948, + 21951, + 21952, + 21953, + 21954, + 21955, + 21958, + 21959, + 21960, + 21962, + 21963, + 21966, + 21967, + 21968, + 21973, + 21975, + 21976, + 21977, + 21978, + 21979, + 21982, + 21984, + 21986, + 21991, + 21993, + 21997, + 21998, + 22000, + 22001, + 22004, + 22006, + 22008, + 22009, + 22010, + 22011, + 22012, + 22015, + 22018, + 22019, + 22020, + 22021, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 22022, + 22023, + 22026, + 22027, + 22029, + 22032, + 22033, + 22034, + 22035, + 22036, + 22037, + 22038, + 22039, + 22041, + 22042, + 22044, + 22045, + 22048, + 22049, + 22050, + 22053, + 22054, + 22056, + 22057, + 22058, + 22059, + 22062, + 22063, + 22064, + 22067, + 22069, + 22071, + 22072, + 22074, + 22076, + 22077, + 22078, + 22080, + 22081, + 22082, + 22083, + 22084, + 22085, + 22086, + 22087, + 22088, + 22089, + 22090, + 22091, + 22095, + 22096, + 22097, + 22098, + 22099, + 22101, + 22102, + 22106, + 22107, + 22109, + 22110, + 22111, + 22112, + 22113, + null, + 22115, + 22117, + 22118, + 22119, + 22125, + 22126, + 22127, + 22128, + 22130, + 22131, + 22132, + 22133, + 22135, + 22136, + 22137, + 22138, + 22141, + 22142, + 22143, + 22144, + 22145, + 22146, + 22147, + 22148, + 22151, + 22152, + 22153, + 22154, + 22155, + 22156, + 22157, + 22160, + 22161, + 22162, + 22164, + 22165, + 22166, + 22167, + 22168, + 22169, + 22170, + 22171, + 22172, + 22173, + 22174, + 22175, + 22176, + 22177, + 22178, + 22180, + 22181, + 22182, + 22183, + 22184, + 22185, + 22186, + 22187, + 22188, + 22189, + 22190, + 22192, + 22193, + 22194, + 22195, + 22196, + 22197, + 22198, + 22200, + 22201, + 22202, + 22203, + 22205, + 22206, + 22207, + 22208, + 22209, + 22210, + 22211, + 22212, + 22213, + 22214, + 22215, + 22216, + 22217, + 22219, + 22220, + 22221, + 22222, + 22223, + 22224, + 22225, + 22226, + 22227, + 22229, + 22230, + 22232, + 22233, + 22236, + 22243, + 22245, + 22246, + 22247, + 22248, + 22249, + 22250, + 22252, + 22254, + 22255, + 22258, + 22259, + 22262, + 22263, + 22264, + 22267, + 22268, + 22272, + 22273, + 22274, + 22277, + 22279, + 22283, + 22284, + 22285, + 22286, + 22287, + 22288, + 22289, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 22290, + 22291, + 22292, + 22293, + 22294, + 22295, + 22296, + 22297, + 22298, + 22299, + 22301, + 22302, + 22304, + 22305, + 22306, + 22308, + 22309, + 22310, + 22311, + 22315, + 22321, + 22322, + 22324, + 22325, + 22326, + 22327, + 22328, + 22332, + 22333, + 22335, + 22337, + 22339, + 22340, + 22341, + 22342, + 22344, + 22345, + 22347, + 22354, + 22355, + 22356, + 22357, + 22358, + 22360, + 22361, + 22370, + 22371, + 22373, + 22375, + 22380, + 22382, + 22384, + 22385, + 22386, + 22388, + 22389, + 22392, + 22393, + 22394, + 22397, + 22398, + 22399, + 22400, + null, + 22401, + 22407, + 22408, + 22409, + 22410, + 22413, + 22414, + 22415, + 22416, + 22417, + 22420, + 22421, + 22422, + 22423, + 22424, + 22425, + 22426, + 22428, + 22429, + 22430, + 22431, + 22437, + 22440, + 22442, + 22444, + 22447, + 22448, + 22449, + 22451, + 22453, + 22454, + 22455, + 22457, + 22458, + 22459, + 22460, + 22461, + 22462, + 22463, + 22464, + 22465, + 22468, + 22469, + 22470, + 22471, + 22472, + 22473, + 22474, + 22476, + 22477, + 22480, + 22481, + 22483, + 22486, + 22487, + 22491, + 22492, + 22494, + 22497, + 22498, + 22499, + 22501, + 22502, + 22503, + 22504, + 22505, + 22506, + 22507, + 22508, + 22510, + 22512, + 22513, + 22514, + 22515, + 22517, + 22518, + 22519, + 22523, + 22524, + 22526, + 22527, + 22529, + 22531, + 22532, + 22533, + 22536, + 22537, + 22538, + 22540, + 22542, + 22543, + 22544, + 22546, + 22547, + 22548, + 22550, + 22551, + 22552, + 22554, + 22555, + 22556, + 22557, + 22559, + 22562, + 22563, + 22565, + 22566, + 22567, + 22568, + 22569, + 22571, + 22572, + 22573, + 22574, + 22575, + 22577, + 22578, + 22579, + 22580, + 22582, + 22583, + 22584, + 22585, + 22586, + 22587, + 22588, + 22589, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 22590, + 22591, + 22592, + 22593, + 22594, + 22595, + 22597, + 22598, + 22599, + 22600, + 22601, + 22602, + 22603, + 22606, + 22607, + 22608, + 22610, + 22611, + 22613, + 22614, + 22615, + 22617, + 22618, + 22619, + 22620, + 22621, + 22623, + 22624, + 22625, + 22626, + 22627, + 22628, + 22630, + 22631, + 22632, + 22633, + 22634, + 22637, + 22638, + 22639, + 22640, + 22641, + 22642, + 22643, + 22644, + 22645, + 22646, + 22647, + 22648, + 22649, + 22650, + 22651, + 22652, + 22653, + 22655, + 22658, + 22660, + 22662, + 22663, + 22664, + 22666, + 22667, + 22668, + null, + 22669, + 22670, + 22671, + 22672, + 22673, + 22676, + 22677, + 22678, + 22679, + 22680, + 22683, + 22684, + 22685, + 22688, + 22689, + 22690, + 22691, + 22692, + 22693, + 22694, + 22695, + 22698, + 22699, + 22700, + 22701, + 22702, + 22703, + 22704, + 22705, + 22706, + 22707, + 22708, + 22709, + 22710, + 22711, + 22712, + 22713, + 22714, + 22715, + 22717, + 22718, + 22719, + 22720, + 22722, + 22723, + 22724, + 22726, + 22727, + 22728, + 22729, + 22730, + 22731, + 22732, + 22733, + 22734, + 22735, + 22736, + 22738, + 22739, + 22740, + 22742, + 22743, + 22744, + 22745, + 22746, + 22747, + 22748, + 22749, + 22750, + 22751, + 22752, + 22753, + 22754, + 22755, + 22757, + 22758, + 22759, + 22760, + 22761, + 22762, + 22765, + 22767, + 22769, + 22770, + 22772, + 22773, + 22775, + 22776, + 22778, + 22779, + 22780, + 22781, + 22782, + 22783, + 22784, + 22785, + 22787, + 22789, + 22790, + 22792, + 22793, + 22794, + 22795, + 22796, + 22798, + 22800, + 22801, + 22802, + 22803, + 22807, + 22808, + 22811, + 22813, + 22814, + 22816, + 22817, + 22818, + 22819, + 22822, + 22824, + 22828, + 22832, + 22834, + 22835, + 22837, + 22838, + 22843, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 22845, + 22846, + 22847, + 22848, + 22851, + 22853, + 22854, + 22858, + 22860, + 22861, + 22864, + 22866, + 22867, + 22873, + 22875, + 22876, + 22877, + 22878, + 22879, + 22881, + 22883, + 22884, + 22886, + 22887, + 22888, + 22889, + 22890, + 22891, + 22892, + 22893, + 22894, + 22895, + 22896, + 22897, + 22898, + 22901, + 22903, + 22906, + 22907, + 22908, + 22910, + 22911, + 22912, + 22917, + 22921, + 22923, + 22924, + 22926, + 22927, + 22928, + 22929, + 22932, + 22933, + 22936, + 22938, + 22939, + 22940, + 22941, + 22943, + 22944, + 22945, + 22946, + 22950, + null, + 22951, + 22956, + 22957, + 22960, + 22961, + 22963, + 22964, + 22965, + 22966, + 22967, + 22968, + 22970, + 22972, + 22973, + 22975, + 22976, + 22977, + 22978, + 22979, + 22980, + 22981, + 22983, + 22984, + 22985, + 22988, + 22989, + 22990, + 22991, + 22997, + 22998, + 23001, + 23003, + 23006, + 23007, + 23008, + 23009, + 23010, + 23012, + 23014, + 23015, + 23017, + 23018, + 23019, + 23021, + 23022, + 23023, + 23024, + 23025, + 23026, + 23027, + 23028, + 23029, + 23030, + 23031, + 23032, + 23034, + 23036, + 23037, + 23038, + 23040, + 23042, + 23050, + 23051, + 23053, + 23054, + 23055, + 23056, + 23058, + 23060, + 23061, + 23062, + 23063, + 23065, + 23066, + 23067, + 23069, + 23070, + 23073, + 23074, + 23076, + 23078, + 23079, + 23080, + 23082, + 23083, + 23084, + 23085, + 23086, + 23087, + 23088, + 23091, + 23093, + 23095, + 23096, + 23097, + 23098, + 23099, + 23101, + 23102, + 23103, + 23105, + 23106, + 23107, + 23108, + 23109, + 23111, + 23112, + 23115, + 23116, + 23117, + 23118, + 23119, + 23120, + 23121, + 23122, + 23123, + 23124, + 23126, + 23127, + 23128, + 23129, + 23131, + 23132, + 23133, + 23134, + 23135, + 23136, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 23137, + 23139, + 23140, + 23141, + 23142, + 23144, + 23145, + 23147, + 23148, + 23149, + 23150, + 23151, + 23152, + 23153, + 23154, + 23155, + 23160, + 23161, + 23163, + 23164, + 23165, + 23166, + 23168, + 23169, + 23170, + 23171, + 23172, + 23173, + 23174, + 23175, + 23176, + 23177, + 23178, + 23179, + 23180, + 23181, + 23182, + 23183, + 23184, + 23185, + 23187, + 23188, + 23189, + 23190, + 23191, + 23192, + 23193, + 23196, + 23197, + 23198, + 23199, + 23200, + 23201, + 23202, + 23203, + 23204, + 23205, + 23206, + 23207, + 23208, + 23209, + 23211, + 23212, + null, + 23213, + 23214, + 23215, + 23216, + 23217, + 23220, + 23222, + 23223, + 23225, + 23226, + 23227, + 23228, + 23229, + 23231, + 23232, + 23235, + 23236, + 23237, + 23238, + 23239, + 23240, + 23242, + 23243, + 23245, + 23246, + 23247, + 23248, + 23249, + 23251, + 23253, + 23255, + 23257, + 23258, + 23259, + 23261, + 23262, + 23263, + 23266, + 23268, + 23269, + 23271, + 23272, + 23274, + 23276, + 23277, + 23278, + 23279, + 23280, + 23282, + 23283, + 23284, + 23285, + 23286, + 23287, + 23288, + 23289, + 23290, + 23291, + 23292, + 23293, + 23294, + 23295, + 23296, + 23297, + 23298, + 23299, + 23300, + 23301, + 23302, + 23303, + 23304, + 23306, + 23307, + 23308, + 23309, + 23310, + 23311, + 23312, + 23313, + 23314, + 23315, + 23316, + 23317, + 23320, + 23321, + 23322, + 23323, + 23324, + 23325, + 23326, + 23327, + 23328, + 23329, + 23330, + 23331, + 23332, + 23333, + 23334, + 23335, + 23336, + 23337, + 23338, + 23339, + 23340, + 23341, + 23342, + 23343, + 23344, + 23345, + 23347, + 23349, + 23350, + 23352, + 23353, + 23354, + 23355, + 23356, + 23357, + 23358, + 23359, + 23361, + 23362, + 23363, + 23364, + 23365, + 23366, + 23367, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 23368, + 23369, + 23370, + 23371, + 23372, + 23373, + 23374, + 23375, + 23378, + 23382, + 23390, + 23392, + 23393, + 23399, + 23400, + 23403, + 23405, + 23406, + 23407, + 23410, + 23412, + 23414, + 23415, + 23416, + 23417, + 23419, + 23420, + 23422, + 23423, + 23426, + 23430, + 23434, + 23437, + 23438, + 23440, + 23441, + 23442, + 23444, + 23446, + 23455, + 23463, + 23464, + 23465, + 23468, + 23469, + 23470, + 23471, + 23473, + 23474, + 23479, + 23482, + 23483, + 23484, + 23488, + 23489, + 23491, + 23496, + 23497, + 23498, + 23499, + 23501, + 23502, + 23503, + null, + 23505, + 23508, + 23509, + 23510, + 23511, + 23512, + 23513, + 23514, + 23515, + 23516, + 23520, + 23522, + 23523, + 23526, + 23527, + 23529, + 23530, + 23531, + 23532, + 23533, + 23535, + 23537, + 23538, + 23539, + 23540, + 23541, + 23542, + 23543, + 23549, + 23550, + 23552, + 23554, + 23555, + 23557, + 23559, + 23560, + 23563, + 23564, + 23565, + 23566, + 23568, + 23570, + 23571, + 23575, + 23577, + 23579, + 23582, + 23583, + 23584, + 23585, + 23587, + 23590, + 23592, + 23593, + 23594, + 23595, + 23597, + 23598, + 23599, + 23600, + 23602, + 23603, + 23605, + 23606, + 23607, + 23619, + 23620, + 23622, + 23623, + 23628, + 23629, + 23634, + 23635, + 23636, + 23638, + 23639, + 23640, + 23642, + 23643, + 23644, + 23645, + 23647, + 23650, + 23652, + 23655, + 23656, + 23657, + 23658, + 23659, + 23660, + 23661, + 23664, + 23666, + 23667, + 23668, + 23669, + 23670, + 23671, + 23672, + 23675, + 23676, + 23677, + 23678, + 23680, + 23683, + 23684, + 23685, + 23686, + 23687, + 23689, + 23690, + 23691, + 23694, + 23695, + 23698, + 23699, + 23701, + 23709, + 23710, + 23711, + 23712, + 23713, + 23716, + 23717, + 23718, + 23719, + 23720, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 23722, + 23726, + 23727, + 23728, + 23730, + 23732, + 23734, + 23737, + 23738, + 23739, + 23740, + 23742, + 23744, + 23746, + 23747, + 23749, + 23750, + 23751, + 23752, + 23753, + 23754, + 23756, + 23757, + 23758, + 23759, + 23760, + 23761, + 23763, + 23764, + 23765, + 23766, + 23767, + 23768, + 23770, + 23771, + 23772, + 23773, + 23774, + 23775, + 23776, + 23778, + 23779, + 23783, + 23785, + 23787, + 23788, + 23790, + 23791, + 23793, + 23794, + 23795, + 23796, + 23797, + 23798, + 23799, + 23800, + 23801, + 23802, + 23804, + 23805, + 23806, + 23807, + 23808, + null, + 23809, + 23812, + 23813, + 23816, + 23817, + 23818, + 23819, + 23820, + 23821, + 23823, + 23824, + 23825, + 23826, + 23827, + 23829, + 23831, + 23832, + 23833, + 23834, + 23836, + 23837, + 23839, + 23840, + 23841, + 23842, + 23843, + 23845, + 23848, + 23850, + 23851, + 23852, + 23855, + 23856, + 23857, + 23858, + 23859, + 23861, + 23862, + 23863, + 23864, + 23865, + 23866, + 23867, + 23868, + 23871, + 23872, + 23873, + 23874, + 23875, + 23876, + 23877, + 23878, + 23880, + 23881, + 23885, + 23886, + 23887, + 23888, + 23889, + 23890, + 23891, + 23892, + 23893, + 23894, + 23895, + 23897, + 23898, + 23900, + 23902, + 23903, + 23904, + 23905, + 23906, + 23907, + 23908, + 23909, + 23910, + 23911, + 23912, + 23914, + 23917, + 23918, + 23920, + 23921, + 23922, + 23923, + 23925, + 23926, + 23927, + 23928, + 23929, + 23930, + 23931, + 23932, + 23933, + 23934, + 23935, + 23936, + 23937, + 23939, + 23940, + 23941, + 23942, + 23943, + 23944, + 23945, + 23946, + 23947, + 23948, + 23949, + 23950, + 23951, + 23952, + 23953, + 23954, + 23955, + 23956, + 23957, + 23958, + 23959, + 23960, + 23962, + 23963, + 23964, + 23966, + 23967, + 23968, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 23969, + 23970, + 23971, + 23972, + 23973, + 23974, + 23975, + 23976, + 23977, + 23978, + 23979, + 23980, + 23981, + 23982, + 23983, + 23984, + 23985, + 23986, + 23987, + 23988, + 23989, + 23990, + 23992, + 23993, + 23994, + 23995, + 23996, + 23997, + 23998, + 23999, + 24000, + 24001, + 24002, + 24003, + 24004, + 24006, + 24007, + 24008, + 24009, + 24010, + 24011, + 24012, + 24014, + 24015, + 24016, + 24017, + 24018, + 24019, + 24020, + 24021, + 24022, + 24023, + 24024, + 24025, + 24026, + 24028, + 24031, + 24032, + 24035, + 24036, + 24042, + 24044, + 24045, + null, + 24048, + 24053, + 24054, + 24056, + 24057, + 24058, + 24059, + 24060, + 24063, + 24064, + 24068, + 24071, + 24073, + 24074, + 24075, + 24077, + 24078, + 24082, + 24083, + 24087, + 24094, + 24095, + 24096, + 24097, + 24098, + 24099, + 24100, + 24101, + 24104, + 24105, + 24106, + 24107, + 24108, + 24111, + 24112, + 24114, + 24115, + 24116, + 24117, + 24118, + 24121, + 24122, + 24126, + 24127, + 24128, + 24129, + 24131, + 24134, + 24135, + 24136, + 24137, + 24138, + 24139, + 24141, + 24142, + 24143, + 24144, + 24145, + 24146, + 24147, + 24150, + 24151, + 24152, + 24153, + 24154, + 24156, + 24157, + 24159, + 24160, + 24163, + 24164, + 24165, + 24166, + 24167, + 24168, + 24169, + 24170, + 24171, + 24172, + 24173, + 24174, + 24175, + 24176, + 24177, + 24181, + 24183, + 24185, + 24190, + 24193, + 24194, + 24195, + 24197, + 24200, + 24201, + 24204, + 24205, + 24206, + 24210, + 24216, + 24219, + 24221, + 24225, + 24226, + 24227, + 24228, + 24232, + 24233, + 24234, + 24235, + 24236, + 24238, + 24239, + 24240, + 24241, + 24242, + 24244, + 24250, + 24251, + 24252, + 24253, + 24255, + 24256, + 24257, + 24258, + 24259, + 24260, + 24261, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 24262, + 24263, + 24264, + 24267, + 24268, + 24269, + 24270, + 24271, + 24272, + 24276, + 24277, + 24279, + 24280, + 24281, + 24282, + 24284, + 24285, + 24286, + 24287, + 24288, + 24289, + 24290, + 24291, + 24292, + 24293, + 24294, + 24295, + 24297, + 24299, + 24300, + 24301, + 24302, + 24303, + 24304, + 24305, + 24306, + 24307, + 24309, + 24312, + 24313, + 24315, + 24316, + 24317, + 24325, + 24326, + 24327, + 24329, + 24332, + 24333, + 24334, + 24336, + 24338, + 24340, + 24342, + 24345, + 24346, + 24348, + 24349, + 24350, + 24353, + 24354, + 24355, + 24356, + null, + 24360, + 24363, + 24364, + 24366, + 24368, + 24370, + 24371, + 24372, + 24373, + 24374, + 24375, + 24376, + 24379, + 24381, + 24382, + 24383, + 24385, + 24386, + 24387, + 24388, + 24389, + 24390, + 24391, + 24392, + 24393, + 24394, + 24395, + 24396, + 24397, + 24398, + 24399, + 24401, + 24404, + 24409, + 24410, + 24411, + 24412, + 24414, + 24415, + 24416, + 24419, + 24421, + 24423, + 24424, + 24427, + 24430, + 24431, + 24434, + 24436, + 24437, + 24438, + 24440, + 24442, + 24445, + 24446, + 24447, + 24451, + 24454, + 24461, + 24462, + 24463, + 24465, + 24467, + 24468, + 24470, + 24474, + 24475, + 24477, + 24478, + 24479, + 24480, + 24482, + 24483, + 24484, + 24485, + 24486, + 24487, + 24489, + 24491, + 24492, + 24495, + 24496, + 24497, + 24498, + 24499, + 24500, + 24502, + 24504, + 24505, + 24506, + 24507, + 24510, + 24511, + 24512, + 24513, + 24514, + 24519, + 24520, + 24522, + 24523, + 24526, + 24531, + 24532, + 24533, + 24538, + 24539, + 24540, + 24542, + 24543, + 24546, + 24547, + 24549, + 24550, + 24552, + 24553, + 24556, + 24559, + 24560, + 24562, + 24563, + 24564, + 24566, + 24567, + 24569, + 24570, + 24572, + 24583, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 24584, + 24585, + 24587, + 24588, + 24592, + 24593, + 24595, + 24599, + 24600, + 24602, + 24606, + 24607, + 24610, + 24611, + 24612, + 24620, + 24621, + 24622, + 24624, + 24625, + 24626, + 24627, + 24628, + 24630, + 24631, + 24632, + 24633, + 24634, + 24637, + 24638, + 24640, + 24644, + 24645, + 24646, + 24647, + 24648, + 24649, + 24650, + 24652, + 24654, + 24655, + 24657, + 24659, + 24660, + 24662, + 24663, + 24664, + 24667, + 24668, + 24670, + 24671, + 24672, + 24673, + 24677, + 24678, + 24686, + 24689, + 24690, + 24692, + 24693, + 24695, + 24702, + 24704, + null, + 24705, + 24706, + 24709, + 24710, + 24711, + 24712, + 24714, + 24715, + 24718, + 24719, + 24720, + 24721, + 24723, + 24725, + 24727, + 24728, + 24729, + 24732, + 24734, + 24737, + 24738, + 24740, + 24741, + 24743, + 24745, + 24746, + 24750, + 24752, + 24755, + 24757, + 24758, + 24759, + 24761, + 24762, + 24765, + 24766, + 24767, + 24768, + 24769, + 24770, + 24771, + 24772, + 24775, + 24776, + 24777, + 24780, + 24781, + 24782, + 24783, + 24784, + 24786, + 24787, + 24788, + 24790, + 24791, + 24793, + 24795, + 24798, + 24801, + 24802, + 24803, + 24804, + 24805, + 24810, + 24817, + 24818, + 24821, + 24823, + 24824, + 24827, + 24828, + 24829, + 24830, + 24831, + 24834, + 24835, + 24836, + 24837, + 24839, + 24842, + 24843, + 24844, + 24848, + 24849, + 24850, + 24851, + 24852, + 24854, + 24855, + 24856, + 24857, + 24859, + 24860, + 24861, + 24862, + 24865, + 24866, + 24869, + 24872, + 24873, + 24874, + 24876, + 24877, + 24878, + 24879, + 24880, + 24881, + 24882, + 24883, + 24884, + 24885, + 24886, + 24887, + 24888, + 24889, + 24890, + 24891, + 24892, + 24893, + 24894, + 24896, + 24897, + 24898, + 24899, + 24900, + 24901, + 24902, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 24903, + 24905, + 24907, + 24909, + 24911, + 24912, + 24914, + 24915, + 24916, + 24918, + 24919, + 24920, + 24921, + 24922, + 24923, + 24924, + 24926, + 24927, + 24928, + 24929, + 24931, + 24932, + 24933, + 24934, + 24937, + 24938, + 24939, + 24940, + 24941, + 24942, + 24943, + 24945, + 24946, + 24947, + 24948, + 24950, + 24952, + 24953, + 24954, + 24955, + 24956, + 24957, + 24958, + 24959, + 24960, + 24961, + 24962, + 24963, + 24964, + 24965, + 24966, + 24967, + 24968, + 24969, + 24970, + 24972, + 24973, + 24975, + 24976, + 24977, + 24978, + 24979, + 24981, + null, + 24982, + 24983, + 24984, + 24985, + 24986, + 24987, + 24988, + 24990, + 24991, + 24992, + 24993, + 24994, + 24995, + 24996, + 24997, + 24998, + 25002, + 25003, + 25005, + 25006, + 25007, + 25008, + 25009, + 25010, + 25011, + 25012, + 25013, + 25014, + 25016, + 25017, + 25018, + 25019, + 25020, + 25021, + 25023, + 25024, + 25025, + 25027, + 25028, + 25029, + 25030, + 25031, + 25033, + 25036, + 25037, + 25038, + 25039, + 25040, + 25043, + 25045, + 25046, + 25047, + 25048, + 25049, + 25050, + 25051, + 25052, + 25053, + 25054, + 25055, + 25056, + 25057, + 25058, + 25059, + 25060, + 25061, + 25063, + 25064, + 25065, + 25066, + 25067, + 25068, + 25069, + 25070, + 25071, + 25072, + 25073, + 25074, + 25075, + 25076, + 25078, + 25079, + 25080, + 25081, + 25082, + 25083, + 25084, + 25085, + 25086, + 25088, + 25089, + 25090, + 25091, + 25092, + 25093, + 25095, + 25097, + 25107, + 25108, + 25113, + 25116, + 25117, + 25118, + 25120, + 25123, + 25126, + 25127, + 25128, + 25129, + 25131, + 25133, + 25135, + 25136, + 25137, + 25138, + 25141, + 25142, + 25144, + 25145, + 25146, + 25147, + 25148, + 25154, + 25156, + 25157, + 25158, + 25162, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 25167, + 25168, + 25173, + 25174, + 25175, + 25177, + 25178, + 25180, + 25181, + 25182, + 25183, + 25184, + 25185, + 25186, + 25188, + 25189, + 25192, + 25201, + 25202, + 25204, + 25205, + 25207, + 25208, + 25210, + 25211, + 25213, + 25217, + 25218, + 25219, + 25221, + 25222, + 25223, + 25224, + 25227, + 25228, + 25229, + 25230, + 25231, + 25232, + 25236, + 25241, + 25244, + 25245, + 25246, + 25251, + 25254, + 25255, + 25257, + 25258, + 25261, + 25262, + 25263, + 25264, + 25266, + 25267, + 25268, + 25270, + 25271, + 25272, + 25274, + 25278, + 25280, + 25281, + null, + 25283, + 25291, + 25295, + 25297, + 25301, + 25309, + 25310, + 25312, + 25313, + 25316, + 25322, + 25323, + 25328, + 25330, + 25333, + 25336, + 25337, + 25338, + 25339, + 25344, + 25347, + 25348, + 25349, + 25350, + 25354, + 25355, + 25356, + 25357, + 25359, + 25360, + 25362, + 25363, + 25364, + 25365, + 25367, + 25368, + 25369, + 25372, + 25382, + 25383, + 25385, + 25388, + 25389, + 25390, + 25392, + 25393, + 25395, + 25396, + 25397, + 25398, + 25399, + 25400, + 25403, + 25404, + 25406, + 25407, + 25408, + 25409, + 25412, + 25415, + 25416, + 25418, + 25425, + 25426, + 25427, + 25428, + 25430, + 25431, + 25432, + 25433, + 25434, + 25435, + 25436, + 25437, + 25440, + 25444, + 25445, + 25446, + 25448, + 25450, + 25451, + 25452, + 25455, + 25456, + 25458, + 25459, + 25460, + 25461, + 25464, + 25465, + 25468, + 25469, + 25470, + 25471, + 25473, + 25475, + 25476, + 25477, + 25478, + 25483, + 25485, + 25489, + 25491, + 25492, + 25493, + 25495, + 25497, + 25498, + 25499, + 25500, + 25501, + 25502, + 25503, + 25505, + 25508, + 25510, + 25515, + 25519, + 25521, + 25522, + 25525, + 25526, + 25529, + 25531, + 25533, + 25535, + 25536, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 25537, + 25538, + 25539, + 25541, + 25543, + 25544, + 25546, + 25547, + 25548, + 25553, + 25555, + 25556, + 25557, + 25559, + 25560, + 25561, + 25562, + 25563, + 25564, + 25565, + 25567, + 25570, + 25572, + 25573, + 25574, + 25575, + 25576, + 25579, + 25580, + 25582, + 25583, + 25584, + 25585, + 25587, + 25589, + 25591, + 25593, + 25594, + 25595, + 25596, + 25598, + 25603, + 25604, + 25606, + 25607, + 25608, + 25609, + 25610, + 25613, + 25614, + 25617, + 25618, + 25621, + 25622, + 25623, + 25624, + 25625, + 25626, + 25629, + 25631, + 25634, + 25635, + 25636, + null, + 25637, + 25639, + 25640, + 25641, + 25643, + 25646, + 25647, + 25648, + 25649, + 25650, + 25651, + 25653, + 25654, + 25655, + 25656, + 25657, + 25659, + 25660, + 25662, + 25664, + 25666, + 25667, + 25673, + 25675, + 25676, + 25677, + 25678, + 25679, + 25680, + 25681, + 25683, + 25685, + 25686, + 25687, + 25689, + 25690, + 25691, + 25692, + 25693, + 25695, + 25696, + 25697, + 25698, + 25699, + 25700, + 25701, + 25702, + 25704, + 25706, + 25707, + 25708, + 25710, + 25711, + 25712, + 25713, + 25714, + 25715, + 25716, + 25717, + 25718, + 25719, + 25723, + 25724, + 25725, + 25726, + 25727, + 25728, + 25729, + 25731, + 25734, + 25736, + 25737, + 25738, + 25739, + 25740, + 25741, + 25742, + 25743, + 25744, + 25747, + 25748, + 25751, + 25752, + 25754, + 25755, + 25756, + 25757, + 25759, + 25760, + 25761, + 25762, + 25763, + 25765, + 25766, + 25767, + 25768, + 25770, + 25771, + 25775, + 25777, + 25778, + 25779, + 25780, + 25782, + 25785, + 25787, + 25789, + 25790, + 25791, + 25793, + 25795, + 25796, + 25798, + 25799, + 25800, + 25801, + 25802, + 25803, + 25804, + 25807, + 25809, + 25811, + 25812, + 25813, + 25814, + 25817, + 25818, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 25819, + 25820, + 25821, + 25823, + 25824, + 25825, + 25827, + 25829, + 25831, + 25832, + 25833, + 25834, + 25835, + 25836, + 25837, + 25838, + 25839, + 25840, + 25841, + 25842, + 25843, + 25844, + 25845, + 25846, + 25847, + 25848, + 25849, + 25850, + 25851, + 25852, + 25853, + 25854, + 25855, + 25857, + 25858, + 25859, + 25860, + 25861, + 25862, + 25863, + 25864, + 25866, + 25867, + 25868, + 25869, + 25870, + 25871, + 25872, + 25873, + 25875, + 25876, + 25877, + 25878, + 25879, + 25881, + 25882, + 25883, + 25884, + 25885, + 25886, + 25887, + 25888, + 25889, + null, + 25890, + 25891, + 25892, + 25894, + 25895, + 25896, + 25897, + 25898, + 25900, + 25901, + 25904, + 25905, + 25906, + 25907, + 25911, + 25914, + 25916, + 25917, + 25920, + 25921, + 25922, + 25923, + 25924, + 25926, + 25927, + 25930, + 25931, + 25933, + 25934, + 25936, + 25938, + 25939, + 25940, + 25943, + 25944, + 25946, + 25948, + 25951, + 25952, + 25953, + 25956, + 25957, + 25959, + 25960, + 25961, + 25962, + 25965, + 25966, + 25967, + 25969, + 25971, + 25973, + 25974, + 25976, + 25977, + 25978, + 25979, + 25980, + 25981, + 25982, + 25983, + 25984, + 25985, + 25986, + 25987, + 25988, + 25989, + 25990, + 25992, + 25993, + 25994, + 25997, + 25998, + 25999, + 26002, + 26004, + 26005, + 26006, + 26008, + 26010, + 26013, + 26014, + 26016, + 26018, + 26019, + 26022, + 26024, + 26026, + 26028, + 26030, + 26033, + 26034, + 26035, + 26036, + 26037, + 26038, + 26039, + 26040, + 26042, + 26043, + 26046, + 26047, + 26048, + 26050, + 26055, + 26056, + 26057, + 26058, + 26061, + 26064, + 26065, + 26067, + 26068, + 26069, + 26072, + 26073, + 26074, + 26075, + 26076, + 26077, + 26078, + 26079, + 26081, + 26083, + 26084, + 26090, + 26091, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 26098, + 26099, + 26100, + 26101, + 26104, + 26105, + 26107, + 26108, + 26109, + 26110, + 26111, + 26113, + 26116, + 26117, + 26119, + 26120, + 26121, + 26123, + 26125, + 26128, + 26129, + 26130, + 26134, + 26135, + 26136, + 26138, + 26139, + 26140, + 26142, + 26145, + 26146, + 26147, + 26148, + 26150, + 26153, + 26154, + 26155, + 26156, + 26158, + 26160, + 26162, + 26163, + 26167, + 26168, + 26169, + 26170, + 26171, + 26173, + 26175, + 26176, + 26178, + 26180, + 26181, + 26182, + 26183, + 26184, + 26185, + 26186, + 26189, + 26190, + 26192, + 26193, + 26200, + null, + 26201, + 26203, + 26204, + 26205, + 26206, + 26208, + 26210, + 26211, + 26213, + 26215, + 26217, + 26218, + 26219, + 26220, + 26221, + 26225, + 26226, + 26227, + 26229, + 26232, + 26233, + 26235, + 26236, + 26237, + 26239, + 26240, + 26241, + 26243, + 26245, + 26246, + 26248, + 26249, + 26250, + 26251, + 26253, + 26254, + 26255, + 26256, + 26258, + 26259, + 26260, + 26261, + 26264, + 26265, + 26266, + 26267, + 26268, + 26270, + 26271, + 26272, + 26273, + 26274, + 26275, + 26276, + 26277, + 26278, + 26281, + 26282, + 26283, + 26284, + 26285, + 26287, + 26288, + 26289, + 26290, + 26291, + 26293, + 26294, + 26295, + 26296, + 26298, + 26299, + 26300, + 26301, + 26303, + 26304, + 26305, + 26306, + 26307, + 26308, + 26309, + 26310, + 26311, + 26312, + 26313, + 26314, + 26315, + 26316, + 26317, + 26318, + 26319, + 26320, + 26321, + 26322, + 26323, + 26324, + 26325, + 26326, + 26327, + 26328, + 26330, + 26334, + 26335, + 26336, + 26337, + 26338, + 26339, + 26340, + 26341, + 26343, + 26344, + 26346, + 26347, + 26348, + 26349, + 26350, + 26351, + 26353, + 26357, + 26358, + 26360, + 26362, + 26363, + 26365, + 26369, + 26370, + 26371, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 26372, + 26373, + 26374, + 26375, + 26380, + 26382, + 26383, + 26385, + 26386, + 26387, + 26390, + 26392, + 26393, + 26394, + 26396, + 26398, + 26400, + 26401, + 26402, + 26403, + 26404, + 26405, + 26407, + 26409, + 26414, + 26416, + 26418, + 26419, + 26422, + 26423, + 26424, + 26425, + 26427, + 26428, + 26430, + 26431, + 26433, + 26436, + 26437, + 26439, + 26442, + 26443, + 26445, + 26450, + 26452, + 26453, + 26455, + 26456, + 26457, + 26458, + 26459, + 26461, + 26466, + 26467, + 26468, + 26470, + 26471, + 26475, + 26476, + 26478, + 26481, + 26484, + 26486, + null, + 26488, + 26489, + 26490, + 26491, + 26493, + 26496, + 26498, + 26499, + 26501, + 26502, + 26504, + 26506, + 26508, + 26509, + 26510, + 26511, + 26513, + 26514, + 26515, + 26516, + 26518, + 26521, + 26523, + 26527, + 26528, + 26529, + 26532, + 26534, + 26537, + 26540, + 26542, + 26545, + 26546, + 26548, + 26553, + 26554, + 26555, + 26556, + 26557, + 26558, + 26559, + 26560, + 26562, + 26565, + 26566, + 26567, + 26568, + 26569, + 26570, + 26571, + 26572, + 26573, + 26574, + 26581, + 26582, + 26583, + 26587, + 26591, + 26593, + 26595, + 26596, + 26598, + 26599, + 26600, + 26602, + 26603, + 26605, + 26606, + 26610, + 26613, + 26614, + 26615, + 26616, + 26617, + 26618, + 26619, + 26620, + 26622, + 26625, + 26626, + 26627, + 26628, + 26630, + 26637, + 26640, + 26642, + 26644, + 26645, + 26648, + 26649, + 26650, + 26651, + 26652, + 26654, + 26655, + 26656, + 26658, + 26659, + 26660, + 26661, + 26662, + 26663, + 26664, + 26667, + 26668, + 26669, + 26670, + 26671, + 26672, + 26673, + 26676, + 26677, + 26678, + 26682, + 26683, + 26687, + 26695, + 26699, + 26701, + 26703, + 26706, + 26710, + 26711, + 26712, + 26713, + 26714, + 26715, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 26716, + 26717, + 26718, + 26719, + 26730, + 26732, + 26733, + 26734, + 26735, + 26736, + 26737, + 26738, + 26739, + 26741, + 26744, + 26745, + 26746, + 26747, + 26748, + 26749, + 26750, + 26751, + 26752, + 26754, + 26756, + 26759, + 26760, + 26761, + 26762, + 26763, + 26764, + 26765, + 26766, + 26768, + 26769, + 26770, + 26772, + 26773, + 26774, + 26776, + 26777, + 26778, + 26779, + 26780, + 26781, + 26782, + 26783, + 26784, + 26785, + 26787, + 26788, + 26789, + 26793, + 26794, + 26795, + 26796, + 26798, + 26801, + 26802, + 26804, + 26806, + 26807, + 26808, + null, + 26809, + 26810, + 26811, + 26812, + 26813, + 26814, + 26815, + 26817, + 26819, + 26820, + 26821, + 26822, + 26823, + 26824, + 26826, + 26828, + 26830, + 26831, + 26832, + 26833, + 26835, + 26836, + 26838, + 26839, + 26841, + 26843, + 26844, + 26845, + 26846, + 26847, + 26849, + 26850, + 26852, + 26853, + 26854, + 26855, + 26856, + 26857, + 26858, + 26859, + 26860, + 26861, + 26863, + 26866, + 26867, + 26868, + 26870, + 26871, + 26872, + 26875, + 26877, + 26878, + 26879, + 26880, + 26882, + 26883, + 26884, + 26886, + 26887, + 26888, + 26889, + 26890, + 26892, + 26895, + 26897, + 26899, + 26900, + 26901, + 26902, + 26903, + 26904, + 26905, + 26906, + 26907, + 26908, + 26909, + 26910, + 26913, + 26914, + 26915, + 26917, + 26918, + 26919, + 26920, + 26921, + 26922, + 26923, + 26924, + 26926, + 26927, + 26929, + 26930, + 26931, + 26933, + 26934, + 26935, + 26936, + 26938, + 26939, + 26940, + 26942, + 26944, + 26945, + 26947, + 26948, + 26949, + 26950, + 26951, + 26952, + 26953, + 26954, + 26955, + 26956, + 26957, + 26958, + 26959, + 26960, + 26961, + 26962, + 26963, + 26965, + 26966, + 26968, + 26969, + 26971, + 26972, + 26975, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 26977, + 26978, + 26980, + 26981, + 26983, + 26984, + 26985, + 26986, + 26988, + 26989, + 26991, + 26992, + 26994, + 26995, + 26996, + 26997, + 26998, + 27002, + 27003, + 27005, + 27006, + 27007, + 27009, + 27011, + 27013, + 27018, + 27019, + 27020, + 27022, + 27023, + 27024, + 27025, + 27026, + 27027, + 27030, + 27031, + 27033, + 27034, + 27037, + 27038, + 27039, + 27040, + 27041, + 27042, + 27043, + 27044, + 27045, + 27046, + 27049, + 27050, + 27052, + 27054, + 27055, + 27056, + 27058, + 27059, + 27061, + 27062, + 27064, + 27065, + 27066, + 27068, + 27069, + null, + 27070, + 27071, + 27072, + 27074, + 27075, + 27076, + 27077, + 27078, + 27079, + 27080, + 27081, + 27083, + 27085, + 27087, + 27089, + 27090, + 27091, + 27093, + 27094, + 27095, + 27096, + 27097, + 27098, + 27100, + 27101, + 27102, + 27105, + 27106, + 27107, + 27108, + 27109, + 27110, + 27111, + 27112, + 27113, + 27114, + 27115, + 27116, + 27118, + 27119, + 27120, + 27121, + 27123, + 27124, + 27125, + 27126, + 27127, + 27128, + 27129, + 27130, + 27131, + 27132, + 27134, + 27136, + 27137, + 27138, + 27139, + 27140, + 27141, + 27142, + 27143, + 27144, + 27145, + 27147, + 27148, + 27149, + 27150, + 27151, + 27152, + 27153, + 27154, + 27155, + 27156, + 27157, + 27158, + 27161, + 27162, + 27163, + 27164, + 27165, + 27166, + 27168, + 27170, + 27171, + 27172, + 27173, + 27174, + 27175, + 27177, + 27179, + 27180, + 27181, + 27182, + 27184, + 27186, + 27187, + 27188, + 27190, + 27191, + 27192, + 27193, + 27194, + 27195, + 27196, + 27199, + 27200, + 27201, + 27202, + 27203, + 27205, + 27206, + 27208, + 27209, + 27210, + 27211, + 27212, + 27213, + 27214, + 27215, + 27217, + 27218, + 27219, + 27220, + 27221, + 27222, + 27223, + 27226, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 27228, + 27229, + 27230, + 27231, + 27232, + 27234, + 27235, + 27236, + 27238, + 27239, + 27240, + 27241, + 27242, + 27243, + 27244, + 27245, + 27246, + 27247, + 27248, + 27250, + 27251, + 27252, + 27253, + 27254, + 27255, + 27256, + 27258, + 27259, + 27261, + 27262, + 27263, + 27265, + 27266, + 27267, + 27269, + 27270, + 27271, + 27272, + 27273, + 27274, + 27275, + 27276, + 27277, + 27279, + 27282, + 27283, + 27284, + 27285, + 27286, + 27288, + 27289, + 27290, + 27291, + 27292, + 27293, + 27294, + 27295, + 27297, + 27298, + 27299, + 27300, + 27301, + 27302, + null, + 27303, + 27304, + 27306, + 27309, + 27310, + 27311, + 27312, + 27313, + 27314, + 27315, + 27316, + 27317, + 27318, + 27319, + 27320, + 27321, + 27322, + 27323, + 27324, + 27325, + 27326, + 27327, + 27328, + 27329, + 27330, + 27331, + 27332, + 27333, + 27334, + 27335, + 27336, + 27337, + 27338, + 27339, + 27340, + 27341, + 27342, + 27343, + 27344, + 27345, + 27346, + 27347, + 27348, + 27349, + 27350, + 27351, + 27352, + 27353, + 27354, + 27355, + 27356, + 27357, + 27358, + 27359, + 27360, + 27361, + 27362, + 27363, + 27364, + 27365, + 27366, + 27367, + 27368, + 27369, + 27370, + 27371, + 27372, + 27373, + 27374, + 27375, + 27376, + 27377, + 27378, + 27379, + 27380, + 27381, + 27382, + 27383, + 27384, + 27385, + 27386, + 27387, + 27388, + 27389, + 27390, + 27391, + 27392, + 27393, + 27394, + 27395, + 27396, + 27397, + 27398, + 27399, + 27400, + 27401, + 27402, + 27403, + 27404, + 27405, + 27406, + 27407, + 27408, + 27409, + 27410, + 27411, + 27412, + 27413, + 27414, + 27415, + 27416, + 27417, + 27418, + 27419, + 27420, + 27421, + 27422, + 27423, + 27429, + 27430, + 27432, + 27433, + 27434, + 27435, + 27436, + 27437, + 27438, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 27439, + 27440, + 27441, + 27443, + 27444, + 27445, + 27446, + 27448, + 27451, + 27452, + 27453, + 27455, + 27456, + 27457, + 27458, + 27460, + 27461, + 27464, + 27466, + 27467, + 27469, + 27470, + 27471, + 27472, + 27473, + 27474, + 27475, + 27476, + 27477, + 27478, + 27479, + 27480, + 27482, + 27483, + 27484, + 27485, + 27486, + 27487, + 27488, + 27489, + 27496, + 27497, + 27499, + 27500, + 27501, + 27502, + 27503, + 27504, + 27505, + 27506, + 27507, + 27508, + 27509, + 27510, + 27511, + 27512, + 27514, + 27517, + 27518, + 27519, + 27520, + 27525, + 27528, + null, + 27532, + 27534, + 27535, + 27536, + 27537, + 27540, + 27541, + 27543, + 27544, + 27545, + 27548, + 27549, + 27550, + 27551, + 27552, + 27554, + 27555, + 27556, + 27557, + 27558, + 27559, + 27560, + 27561, + 27563, + 27564, + 27565, + 27566, + 27567, + 27568, + 27569, + 27570, + 27574, + 27576, + 27577, + 27578, + 27579, + 27580, + 27581, + 27582, + 27584, + 27587, + 27588, + 27590, + 27591, + 27592, + 27593, + 27594, + 27596, + 27598, + 27600, + 27601, + 27608, + 27610, + 27612, + 27613, + 27614, + 27615, + 27616, + 27618, + 27619, + 27620, + 27621, + 27622, + 27623, + 27624, + 27625, + 27628, + 27629, + 27630, + 27632, + 27633, + 27634, + 27636, + 27638, + 27639, + 27640, + 27642, + 27643, + 27644, + 27646, + 27647, + 27648, + 27649, + 27650, + 27651, + 27652, + 27656, + 27657, + 27658, + 27659, + 27660, + 27662, + 27666, + 27671, + 27676, + 27677, + 27678, + 27680, + 27683, + 27685, + 27691, + 27692, + 27693, + 27697, + 27699, + 27702, + 27703, + 27705, + 27706, + 27707, + 27708, + 27710, + 27711, + 27715, + 27716, + 27717, + 27720, + 27723, + 27724, + 27725, + 27726, + 27727, + 27729, + 27730, + 27731, + 27734, + 27736, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 27737, + 27738, + 27746, + 27747, + 27749, + 27750, + 27751, + 27755, + 27756, + 27757, + 27758, + 27759, + 27761, + 27763, + 27765, + 27767, + 27768, + 27770, + 27771, + 27772, + 27775, + 27776, + 27780, + 27783, + 27786, + 27787, + 27789, + 27790, + 27793, + 27794, + 27797, + 27798, + 27799, + 27800, + 27802, + 27804, + 27805, + 27806, + 27808, + 27810, + 27816, + 27820, + 27823, + 27824, + 27828, + 27829, + 27830, + 27831, + 27834, + 27840, + 27841, + 27842, + 27843, + 27846, + 27847, + 27848, + 27851, + 27853, + 27854, + 27855, + 27857, + 27858, + 27864, + null, + 27865, + 27866, + 27868, + 27869, + 27871, + 27876, + 27878, + 27879, + 27881, + 27884, + 27885, + 27890, + 27892, + 27897, + 27903, + 27904, + 27906, + 27907, + 27909, + 27910, + 27912, + 27913, + 27914, + 27917, + 27919, + 27920, + 27921, + 27923, + 27924, + 27925, + 27926, + 27928, + 27932, + 27933, + 27935, + 27936, + 27937, + 27938, + 27939, + 27940, + 27942, + 27944, + 27945, + 27948, + 27949, + 27951, + 27952, + 27956, + 27958, + 27959, + 27960, + 27962, + 27967, + 27968, + 27970, + 27972, + 27977, + 27980, + 27984, + 27989, + 27990, + 27991, + 27992, + 27995, + 27997, + 27999, + 28001, + 28002, + 28004, + 28005, + 28007, + 28008, + 28011, + 28012, + 28013, + 28016, + 28017, + 28018, + 28019, + 28021, + 28022, + 28025, + 28026, + 28027, + 28029, + 28030, + 28031, + 28032, + 28033, + 28035, + 28036, + 28038, + 28039, + 28042, + 28043, + 28045, + 28047, + 28048, + 28050, + 28054, + 28055, + 28056, + 28057, + 28058, + 28060, + 28066, + 28069, + 28076, + 28077, + 28080, + 28081, + 28083, + 28084, + 28086, + 28087, + 28089, + 28090, + 28091, + 28092, + 28093, + 28094, + 28097, + 28098, + 28099, + 28104, + 28105, + 28106, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 28109, + 28110, + 28111, + 28112, + 28114, + 28115, + 28116, + 28117, + 28119, + 28122, + 28123, + 28124, + 28127, + 28130, + 28131, + 28133, + 28135, + 28136, + 28137, + 28138, + 28141, + 28143, + 28144, + 28146, + 28148, + 28149, + 28150, + 28152, + 28154, + 28157, + 28158, + 28159, + 28160, + 28161, + 28162, + 28163, + 28164, + 28166, + 28167, + 28168, + 28169, + 28171, + 28175, + 28178, + 28179, + 28181, + 28184, + 28185, + 28187, + 28188, + 28190, + 28191, + 28194, + 28198, + 28199, + 28200, + 28202, + 28204, + 28206, + 28208, + 28209, + 28211, + 28213, + null, + 28214, + 28215, + 28217, + 28219, + 28220, + 28221, + 28222, + 28223, + 28224, + 28225, + 28226, + 28229, + 28230, + 28231, + 28232, + 28233, + 28234, + 28235, + 28236, + 28239, + 28240, + 28241, + 28242, + 28245, + 28247, + 28249, + 28250, + 28252, + 28253, + 28254, + 28256, + 28257, + 28258, + 28259, + 28260, + 28261, + 28262, + 28263, + 28264, + 28265, + 28266, + 28268, + 28269, + 28271, + 28272, + 28273, + 28274, + 28275, + 28276, + 28277, + 28278, + 28279, + 28280, + 28281, + 28282, + 28283, + 28284, + 28285, + 28288, + 28289, + 28290, + 28292, + 28295, + 28296, + 28298, + 28299, + 28300, + 28301, + 28302, + 28305, + 28306, + 28307, + 28308, + 28309, + 28310, + 28311, + 28313, + 28314, + 28315, + 28317, + 28318, + 28320, + 28321, + 28323, + 28324, + 28326, + 28328, + 28329, + 28331, + 28332, + 28333, + 28334, + 28336, + 28339, + 28341, + 28344, + 28345, + 28348, + 28350, + 28351, + 28352, + 28355, + 28356, + 28357, + 28358, + 28360, + 28361, + 28362, + 28364, + 28365, + 28366, + 28368, + 28370, + 28374, + 28376, + 28377, + 28379, + 28380, + 28381, + 28387, + 28391, + 28394, + 28395, + 28396, + 28397, + 28398, + 28399, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 28400, + 28401, + 28402, + 28403, + 28405, + 28406, + 28407, + 28408, + 28410, + 28411, + 28412, + 28413, + 28414, + 28415, + 28416, + 28417, + 28419, + 28420, + 28421, + 28423, + 28424, + 28426, + 28427, + 28428, + 28429, + 28430, + 28432, + 28433, + 28434, + 28438, + 28439, + 28440, + 28441, + 28442, + 28443, + 28444, + 28445, + 28446, + 28447, + 28449, + 28450, + 28451, + 28453, + 28454, + 28455, + 28456, + 28460, + 28462, + 28464, + 28466, + 28468, + 28469, + 28471, + 28472, + 28473, + 28474, + 28475, + 28476, + 28477, + 28479, + 28480, + 28481, + 28482, + null, + 28483, + 28484, + 28485, + 28488, + 28489, + 28490, + 28492, + 28494, + 28495, + 28496, + 28497, + 28498, + 28499, + 28500, + 28501, + 28502, + 28503, + 28505, + 28506, + 28507, + 28509, + 28511, + 28512, + 28513, + 28515, + 28516, + 28517, + 28519, + 28520, + 28521, + 28522, + 28523, + 28524, + 28527, + 28528, + 28529, + 28531, + 28533, + 28534, + 28535, + 28537, + 28539, + 28541, + 28542, + 28543, + 28544, + 28545, + 28546, + 28547, + 28549, + 28550, + 28551, + 28554, + 28555, + 28559, + 28560, + 28561, + 28562, + 28563, + 28564, + 28565, + 28566, + 28567, + 28568, + 28569, + 28570, + 28571, + 28573, + 28574, + 28575, + 28576, + 28578, + 28579, + 28580, + 28581, + 28582, + 28584, + 28585, + 28586, + 28587, + 28588, + 28589, + 28590, + 28591, + 28592, + 28593, + 28594, + 28596, + 28597, + 28599, + 28600, + 28602, + 28603, + 28604, + 28605, + 28606, + 28607, + 28609, + 28611, + 28612, + 28613, + 28614, + 28615, + 28616, + 28618, + 28619, + 28620, + 28621, + 28622, + 28623, + 28624, + 28627, + 28628, + 28629, + 28630, + 28631, + 28632, + 28633, + 28634, + 28635, + 28636, + 28637, + 28639, + 28642, + 28643, + 28644, + 28645, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 28646, + 28647, + 28648, + 28649, + 28650, + 28651, + 28652, + 28653, + 28656, + 28657, + 28658, + 28659, + 28660, + 28661, + 28662, + 28663, + 28664, + 28665, + 28666, + 28667, + 28668, + 28669, + 28670, + 28671, + 28672, + 28673, + 28674, + 28675, + 28676, + 28677, + 28678, + 28679, + 28680, + 28681, + 28682, + 28683, + 28684, + 28685, + 28686, + 28687, + 28688, + 28690, + 28691, + 28692, + 28693, + 28694, + 28695, + 28696, + 28697, + 28700, + 28701, + 28702, + 28703, + 28704, + 28705, + 28706, + 28708, + 28709, + 28710, + 28711, + 28712, + 28713, + 28714, + null, + 28715, + 28716, + 28717, + 28718, + 28719, + 28720, + 28721, + 28722, + 28723, + 28724, + 28726, + 28727, + 28728, + 28730, + 28731, + 28732, + 28733, + 28734, + 28735, + 28736, + 28737, + 28738, + 28739, + 28740, + 28741, + 28742, + 28743, + 28744, + 28745, + 28746, + 28747, + 28749, + 28750, + 28752, + 28753, + 28754, + 28755, + 28756, + 28757, + 28758, + 28759, + 28760, + 28761, + 28762, + 28763, + 28764, + 28765, + 28767, + 28768, + 28769, + 28770, + 28771, + 28772, + 28773, + 28774, + 28775, + 28776, + 28777, + 28778, + 28782, + 28785, + 28786, + 28787, + 28788, + 28791, + 28793, + 28794, + 28795, + 28797, + 28801, + 28802, + 28803, + 28804, + 28806, + 28807, + 28808, + 28811, + 28812, + 28813, + 28815, + 28816, + 28817, + 28819, + 28823, + 28824, + 28826, + 28827, + 28830, + 28831, + 28832, + 28833, + 28834, + 28835, + 28836, + 28837, + 28838, + 28839, + 28840, + 28841, + 28842, + 28848, + 28850, + 28852, + 28853, + 28854, + 28858, + 28862, + 28863, + 28868, + 28869, + 28870, + 28871, + 28873, + 28875, + 28876, + 28877, + 28878, + 28879, + 28880, + 28881, + 28882, + 28883, + 28884, + 28885, + 28886, + 28887, + 28890, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 28892, + 28893, + 28894, + 28896, + 28897, + 28898, + 28899, + 28901, + 28906, + 28910, + 28912, + 28913, + 28914, + 28915, + 28916, + 28917, + 28918, + 28920, + 28922, + 28923, + 28924, + 28926, + 28927, + 28928, + 28929, + 28930, + 28931, + 28932, + 28933, + 28934, + 28935, + 28936, + 28939, + 28940, + 28941, + 28942, + 28943, + 28945, + 28946, + 28948, + 28951, + 28955, + 28956, + 28957, + 28958, + 28959, + 28960, + 28961, + 28962, + 28963, + 28964, + 28965, + 28967, + 28968, + 28969, + 28970, + 28971, + 28972, + 28973, + 28974, + 28978, + 28979, + 28980, + null, + 28981, + 28983, + 28984, + 28985, + 28986, + 28987, + 28988, + 28989, + 28990, + 28991, + 28992, + 28993, + 28994, + 28995, + 28996, + 28998, + 28999, + 29000, + 29001, + 29003, + 29005, + 29007, + 29008, + 29009, + 29010, + 29011, + 29012, + 29013, + 29014, + 29015, + 29016, + 29017, + 29018, + 29019, + 29021, + 29023, + 29024, + 29025, + 29026, + 29027, + 29029, + 29033, + 29034, + 29035, + 29036, + 29037, + 29039, + 29040, + 29041, + 29044, + 29045, + 29046, + 29047, + 29049, + 29051, + 29052, + 29054, + 29055, + 29056, + 29057, + 29058, + 29059, + 29061, + 29062, + 29063, + 29064, + 29065, + 29067, + 29068, + 29069, + 29070, + 29072, + 29073, + 29074, + 29075, + 29077, + 29078, + 29079, + 29082, + 29083, + 29084, + 29085, + 29086, + 29089, + 29090, + 29091, + 29092, + 29093, + 29094, + 29095, + 29097, + 29098, + 29099, + 29101, + 29102, + 29103, + 29104, + 29105, + 29106, + 29108, + 29110, + 29111, + 29112, + 29114, + 29115, + 29116, + 29117, + 29118, + 29119, + 29120, + 29121, + 29122, + 29124, + 29125, + 29126, + 29127, + 29128, + 29129, + 29130, + 29131, + 29132, + 29133, + 29135, + 29136, + 29137, + 29138, + 29139, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 29142, + 29143, + 29144, + 29145, + 29146, + 29147, + 29148, + 29149, + 29150, + 29151, + 29153, + 29154, + 29155, + 29156, + 29158, + 29160, + 29161, + 29162, + 29163, + 29164, + 29165, + 29167, + 29168, + 29169, + 29170, + 29171, + 29172, + 29173, + 29174, + 29175, + 29176, + 29178, + 29179, + 29180, + 29181, + 29182, + 29183, + 29184, + 29185, + 29186, + 29187, + 29188, + 29189, + 29191, + 29192, + 29193, + 29194, + 29195, + 29196, + 29197, + 29198, + 29199, + 29200, + 29201, + 29202, + 29203, + 29204, + 29205, + 29206, + 29207, + 29208, + 29209, + 29210, + null, + 29211, + 29212, + 29214, + 29215, + 29216, + 29217, + 29218, + 29219, + 29220, + 29221, + 29222, + 29223, + 29225, + 29227, + 29229, + 29230, + 29231, + 29234, + 29235, + 29236, + 29242, + 29244, + 29246, + 29248, + 29249, + 29250, + 29251, + 29252, + 29253, + 29254, + 29257, + 29258, + 29259, + 29262, + 29263, + 29264, + 29265, + 29267, + 29268, + 29269, + 29271, + 29272, + 29274, + 29276, + 29278, + 29280, + 29283, + 29284, + 29285, + 29288, + 29290, + 29291, + 29292, + 29293, + 29296, + 29297, + 29299, + 29300, + 29302, + 29303, + 29304, + 29307, + 29308, + 29309, + 29314, + 29315, + 29317, + 29318, + 29319, + 29320, + 29321, + 29324, + 29326, + 29328, + 29329, + 29331, + 29332, + 29333, + 29334, + 29335, + 29336, + 29337, + 29338, + 29339, + 29340, + 29341, + 29342, + 29344, + 29345, + 29346, + 29347, + 29348, + 29349, + 29350, + 29351, + 29352, + 29353, + 29354, + 29355, + 29358, + 29361, + 29362, + 29363, + 29365, + 29370, + 29371, + 29372, + 29373, + 29374, + 29375, + 29376, + 29381, + 29382, + 29383, + 29385, + 29386, + 29387, + 29388, + 29391, + 29393, + 29395, + 29396, + 29397, + 29398, + 29400, + 29402, + 29403, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 12288, + 12289, + 12290, + 183, + 713, + 711, + 168, + 12291, + 12293, + 8212, + 65374, + 8214, + 8230, + 8216, + 8217, + 8220, + 8221, + 12308, + 12309, + 12296, + 12297, + 12298, + 12299, + 12300, + 12301, + 12302, + 12303, + 12310, + 12311, + 12304, + 12305, + 177, + 215, + 247, + 8758, + 8743, + 8744, + 8721, + 8719, + 8746, + 8745, + 8712, + 8759, + 8730, + 8869, + 8741, + 8736, + 8978, + 8857, + 8747, + 8750, + 8801, + 8780, + 8776, + 8765, + 8733, + 8800, + 8814, + 8815, + 8804, + 8805, + 8734, + 8757, + 8756, + 9794, + 9792, + 176, + 8242, + 8243, + 8451, + 65284, + 164, + 65504, + 65505, + 8240, + 167, + 8470, + 9734, + 9733, + 9675, + 9679, + 9678, + 9671, + 9670, + 9633, + 9632, + 9651, + 9650, + 8251, + 8594, + 8592, + 8593, + 8595, + 12307, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 8560, + 8561, + 8562, + 8563, + 8564, + 8565, + 8566, + 8567, + 8568, + 8569, + null, + null, + null, + null, + null, + null, + 9352, + 9353, + 9354, + 9355, + 9356, + 9357, + 9358, + 9359, + 9360, + 9361, + 9362, + 9363, + 9364, + 9365, + 9366, + 9367, + 9368, + 9369, + 9370, + 9371, + 9332, + 9333, + 9334, + 9335, + 9336, + 9337, + 9338, + 9339, + 9340, + 9341, + 9342, + 9343, + 9344, + 9345, + 9346, + 9347, + 9348, + 9349, + 9350, + 9351, + 9312, + 9313, + 9314, + 9315, + 9316, + 9317, + 9318, + 9319, + 9320, + 9321, + null, + null, + 12832, + 12833, + 12834, + 12835, + 12836, + 12837, + 12838, + 12839, + 12840, + 12841, + null, + null, + 8544, + 8545, + 8546, + 8547, + 8548, + 8549, + 8550, + 8551, + 8552, + 8553, + 8554, + 8555, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 65281, + 65282, + 65283, + 65509, + 65285, + 65286, + 65287, + 65288, + 65289, + 65290, + 65291, + 65292, + 65293, + 65294, + 65295, + 65296, + 65297, + 65298, + 65299, + 65300, + 65301, + 65302, + 65303, + 65304, + 65305, + 65306, + 65307, + 65308, + 65309, + 65310, + 65311, + 65312, + 65313, + 65314, + 65315, + 65316, + 65317, + 65318, + 65319, + 65320, + 65321, + 65322, + 65323, + 65324, + 65325, + 65326, + 65327, + 65328, + 65329, + 65330, + 65331, + 65332, + 65333, + 65334, + 65335, + 65336, + 65337, + 65338, + 65339, + 65340, + 65341, + 65342, + 65343, + 65344, + 65345, + 65346, + 65347, + 65348, + 65349, + 65350, + 65351, + 65352, + 65353, + 65354, + 65355, + 65356, + 65357, + 65358, + 65359, + 65360, + 65361, + 65362, + 65363, + 65364, + 65365, + 65366, + 65367, + 65368, + 65369, + 65370, + 65371, + 65372, + 65373, + 65507, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 12353, + 12354, + 12355, + 12356, + 12357, + 12358, + 12359, + 12360, + 12361, + 12362, + 12363, + 12364, + 12365, + 12366, + 12367, + 12368, + 12369, + 12370, + 12371, + 12372, + 12373, + 12374, + 12375, + 12376, + 12377, + 12378, + 12379, + 12380, + 12381, + 12382, + 12383, + 12384, + 12385, + 12386, + 12387, + 12388, + 12389, + 12390, + 12391, + 12392, + 12393, + 12394, + 12395, + 12396, + 12397, + 12398, + 12399, + 12400, + 12401, + 12402, + 12403, + 12404, + 12405, + 12406, + 12407, + 12408, + 12409, + 12410, + 12411, + 12412, + 12413, + 12414, + 12415, + 12416, + 12417, + 12418, + 12419, + 12420, + 12421, + 12422, + 12423, + 12424, + 12425, + 12426, + 12427, + 12428, + 12429, + 12430, + 12431, + 12432, + 12433, + 12434, + 12435, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 12449, + 12450, + 12451, + 12452, + 12453, + 12454, + 12455, + 12456, + 12457, + 12458, + 12459, + 12460, + 12461, + 12462, + 12463, + 12464, + 12465, + 12466, + 12467, + 12468, + 12469, + 12470, + 12471, + 12472, + 12473, + 12474, + 12475, + 12476, + 12477, + 12478, + 12479, + 12480, + 12481, + 12482, + 12483, + 12484, + 12485, + 12486, + 12487, + 12488, + 12489, + 12490, + 12491, + 12492, + 12493, + 12494, + 12495, + 12496, + 12497, + 12498, + 12499, + 12500, + 12501, + 12502, + 12503, + 12504, + 12505, + 12506, + 12507, + 12508, + 12509, + 12510, + 12511, + 12512, + 12513, + 12514, + 12515, + 12516, + 12517, + 12518, + 12519, + 12520, + 12521, + 12522, + 12523, + 12524, + 12525, + 12526, + 12527, + 12528, + 12529, + 12530, + 12531, + 12532, + 12533, + 12534, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 913, + 914, + 915, + 916, + 917, + 918, + 919, + 920, + 921, + 922, + 923, + 924, + 925, + 926, + 927, + 928, + 929, + 931, + 932, + 933, + 934, + 935, + 936, + 937, + null, + null, + null, + null, + null, + null, + null, + null, + 945, + 946, + 947, + 948, + 949, + 950, + 951, + 952, + 953, + 954, + 955, + 956, + 957, + 958, + 959, + 960, + 961, + 963, + 964, + 965, + 966, + 967, + 968, + 969, + null, + null, + null, + null, + null, + null, + null, + 65077, + 65078, + 65081, + 65082, + 65087, + 65088, + 65085, + 65086, + 65089, + 65090, + 65091, + 65092, + null, + null, + 65083, + 65084, + 65079, + 65080, + 65073, + null, + 65075, + 65076, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 1040, + 1041, + 1042, + 1043, + 1044, + 1045, + 1025, + 1046, + 1047, + 1048, + 1049, + 1050, + 1051, + 1052, + 1053, + 1054, + 1055, + 1056, + 1057, + 1058, + 1059, + 1060, + 1061, + 1062, + 1063, + 1064, + 1065, + 1066, + 1067, + 1068, + 1069, + 1070, + 1071, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 1072, + 1073, + 1074, + 1075, + 1076, + 1077, + 1105, + 1078, + 1079, + 1080, + 1081, + 1082, + 1083, + 1084, + 1085, + 1086, + 1087, + 1088, + 1089, + 1090, + 1091, + 1092, + 1093, + 1094, + 1095, + 1096, + 1097, + 1098, + 1099, + 1100, + 1101, + 1102, + 1103, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 714, + 715, + 729, + 8211, + 8213, + 8229, + 8245, + 8453, + 8457, + 8598, + 8599, + 8600, + 8601, + 8725, + 8735, + 8739, + 8786, + 8806, + 8807, + 8895, + 9552, + 9553, + 9554, + 9555, + 9556, + 9557, + 9558, + 9559, + 9560, + 9561, + 9562, + 9563, + 9564, + 9565, + 9566, + 9567, + 9568, + 9569, + 9570, + 9571, + 9572, + 9573, + 9574, + 9575, + 9576, + 9577, + 9578, + 9579, + 9580, + 9581, + 9582, + 9583, + 9584, + 9585, + 9586, + 9587, + 9601, + 9602, + 9603, + 9604, + 9605, + 9606, + 9607, + null, + 9608, + 9609, + 9610, + 9611, + 9612, + 9613, + 9614, + 9615, + 9619, + 9620, + 9621, + 9660, + 9661, + 9698, + 9699, + 9700, + 9701, + 9737, + 8853, + 12306, + 12317, + 12318, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 257, + 225, + 462, + 224, + 275, + 233, + 283, + 232, + 299, + 237, + 464, + 236, + 333, + 243, + 466, + 242, + 363, + 250, + 468, + 249, + 470, + 472, + 474, + 476, + 252, + 234, + 593, + 59335, + 324, + 328, + 59336, + 609, + null, + null, + null, + null, + 12549, + 12550, + 12551, + 12552, + 12553, + 12554, + 12555, + 12556, + 12557, + 12558, + 12559, + 12560, + 12561, + 12562, + 12563, + 12564, + 12565, + 12566, + 12567, + 12568, + 12569, + 12570, + 12571, + 12572, + 12573, + 12574, + 12575, + 12576, + 12577, + 12578, + 12579, + 12580, + 12581, + 12582, + 12583, + 12584, + 12585, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 12321, + 12322, + 12323, + 12324, + 12325, + 12326, + 12327, + 12328, + 12329, + 12963, + 13198, + 13199, + 13212, + 13213, + 13214, + 13217, + 13252, + 13262, + 13265, + 13266, + 13269, + 65072, + 65506, + 65508, + null, + 8481, + 12849, + null, + 8208, + null, + null, + null, + 12540, + 12443, + 12444, + 12541, + 12542, + 12294, + 12445, + 12446, + 65097, + 65098, + 65099, + 65100, + 65101, + 65102, + 65103, + 65104, + 65105, + 65106, + 65108, + 65109, + 65110, + 65111, + 65113, + 65114, + 65115, + 65116, + 65117, + 65118, + 65119, + 65120, + 65121, + null, + 65122, + 65123, + 65124, + 65125, + 65126, + 65128, + 65129, + 65130, + 65131, + 59367, + 59368, + 59369, + 59370, + 59371, + 59372, + 59373, + 59374, + 59375, + 59376, + 59377, + 59378, + 59379, + 12295, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 9472, + 9473, + 9474, + 9475, + 9476, + 9477, + 9478, + 9479, + 9480, + 9481, + 9482, + 9483, + 9484, + 9485, + 9486, + 9487, + 9488, + 9489, + 9490, + 9491, + 9492, + 9493, + 9494, + 9495, + 9496, + 9497, + 9498, + 9499, + 9500, + 9501, + 9502, + 9503, + 9504, + 9505, + 9506, + 9507, + 9508, + 9509, + 9510, + 9511, + 9512, + 9513, + 9514, + 9515, + 9516, + 9517, + 9518, + 9519, + 9520, + 9521, + 9522, + 9523, + 9524, + 9525, + 9526, + 9527, + 9528, + 9529, + 9530, + 9531, + 9532, + 9533, + 9534, + 9535, + 9536, + 9537, + 9538, + 9539, + 9540, + 9541, + 9542, + 9543, + 9544, + 9545, + 9546, + 9547, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 29404, + 29405, + 29407, + 29410, + 29411, + 29412, + 29413, + 29414, + 29415, + 29418, + 29419, + 29429, + 29430, + 29433, + 29437, + 29438, + 29439, + 29440, + 29442, + 29444, + 29445, + 29446, + 29447, + 29448, + 29449, + 29451, + 29452, + 29453, + 29455, + 29456, + 29457, + 29458, + 29460, + 29464, + 29465, + 29466, + 29471, + 29472, + 29475, + 29476, + 29478, + 29479, + 29480, + 29485, + 29487, + 29488, + 29490, + 29491, + 29493, + 29494, + 29498, + 29499, + 29500, + 29501, + 29504, + 29505, + 29506, + 29507, + 29508, + 29509, + 29510, + 29511, + 29512, + null, + 29513, + 29514, + 29515, + 29516, + 29518, + 29519, + 29521, + 29523, + 29524, + 29525, + 29526, + 29528, + 29529, + 29530, + 29531, + 29532, + 29533, + 29534, + 29535, + 29537, + 29538, + 29539, + 29540, + 29541, + 29542, + 29543, + 29544, + 29545, + 29546, + 29547, + 29550, + 29552, + 29553, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 29554, + 29555, + 29556, + 29557, + 29558, + 29559, + 29560, + 29561, + 29562, + 29563, + 29564, + 29565, + 29567, + 29568, + 29569, + 29570, + 29571, + 29573, + 29574, + 29576, + 29578, + 29580, + 29581, + 29583, + 29584, + 29586, + 29587, + 29588, + 29589, + 29591, + 29592, + 29593, + 29594, + 29596, + 29597, + 29598, + 29600, + 29601, + 29603, + 29604, + 29605, + 29606, + 29607, + 29608, + 29610, + 29612, + 29613, + 29617, + 29620, + 29621, + 29622, + 29624, + 29625, + 29628, + 29629, + 29630, + 29631, + 29633, + 29635, + 29636, + 29637, + 29638, + 29639, + null, + 29643, + 29644, + 29646, + 29650, + 29651, + 29652, + 29653, + 29654, + 29655, + 29656, + 29658, + 29659, + 29660, + 29661, + 29663, + 29665, + 29666, + 29667, + 29668, + 29670, + 29672, + 29674, + 29675, + 29676, + 29678, + 29679, + 29680, + 29681, + 29683, + 29684, + 29685, + 29686, + 29687, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 29688, + 29689, + 29690, + 29691, + 29692, + 29693, + 29694, + 29695, + 29696, + 29697, + 29698, + 29700, + 29703, + 29704, + 29707, + 29708, + 29709, + 29710, + 29713, + 29714, + 29715, + 29716, + 29717, + 29718, + 29719, + 29720, + 29721, + 29724, + 29725, + 29726, + 29727, + 29728, + 29729, + 29731, + 29732, + 29735, + 29737, + 29739, + 29741, + 29743, + 29745, + 29746, + 29751, + 29752, + 29753, + 29754, + 29755, + 29757, + 29758, + 29759, + 29760, + 29762, + 29763, + 29764, + 29765, + 29766, + 29767, + 29768, + 29769, + 29770, + 29771, + 29772, + 29773, + null, + 29774, + 29775, + 29776, + 29777, + 29778, + 29779, + 29780, + 29782, + 29784, + 29789, + 29792, + 29793, + 29794, + 29795, + 29796, + 29797, + 29798, + 29799, + 29800, + 29801, + 29802, + 29803, + 29804, + 29806, + 29807, + 29809, + 29810, + 29811, + 29812, + 29813, + 29816, + 29817, + 29818, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 29819, + 29820, + 29821, + 29823, + 29826, + 29828, + 29829, + 29830, + 29832, + 29833, + 29834, + 29836, + 29837, + 29839, + 29841, + 29842, + 29843, + 29844, + 29845, + 29846, + 29847, + 29848, + 29849, + 29850, + 29851, + 29853, + 29855, + 29856, + 29857, + 29858, + 29859, + 29860, + 29861, + 29862, + 29866, + 29867, + 29868, + 29869, + 29870, + 29871, + 29872, + 29873, + 29874, + 29875, + 29876, + 29877, + 29878, + 29879, + 29880, + 29881, + 29883, + 29884, + 29885, + 29886, + 29887, + 29888, + 29889, + 29890, + 29891, + 29892, + 29893, + 29894, + 29895, + null, + 29896, + 29897, + 29898, + 29899, + 29900, + 29901, + 29902, + 29903, + 29904, + 29905, + 29907, + 29908, + 29909, + 29910, + 29911, + 29912, + 29913, + 29914, + 29915, + 29917, + 29919, + 29921, + 29925, + 29927, + 29928, + 29929, + 29930, + 29931, + 29932, + 29933, + 29936, + 29937, + 29938, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 29939, + 29941, + 29944, + 29945, + 29946, + 29947, + 29948, + 29949, + 29950, + 29952, + 29953, + 29954, + 29955, + 29957, + 29958, + 29959, + 29960, + 29961, + 29962, + 29963, + 29964, + 29966, + 29968, + 29970, + 29972, + 29973, + 29974, + 29975, + 29979, + 29981, + 29982, + 29984, + 29985, + 29986, + 29987, + 29988, + 29990, + 29991, + 29994, + 29998, + 30004, + 30006, + 30009, + 30012, + 30013, + 30015, + 30017, + 30018, + 30019, + 30020, + 30022, + 30023, + 30025, + 30026, + 30029, + 30032, + 30033, + 30034, + 30035, + 30037, + 30038, + 30039, + 30040, + null, + 30045, + 30046, + 30047, + 30048, + 30049, + 30050, + 30051, + 30052, + 30055, + 30056, + 30057, + 30059, + 30060, + 30061, + 30062, + 30063, + 30064, + 30065, + 30067, + 30069, + 30070, + 30071, + 30074, + 30075, + 30076, + 30077, + 30078, + 30080, + 30081, + 30082, + 30084, + 30085, + 30087, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 30088, + 30089, + 30090, + 30092, + 30093, + 30094, + 30096, + 30099, + 30101, + 30104, + 30107, + 30108, + 30110, + 30114, + 30118, + 30119, + 30120, + 30121, + 30122, + 30125, + 30134, + 30135, + 30138, + 30139, + 30143, + 30144, + 30145, + 30150, + 30155, + 30156, + 30158, + 30159, + 30160, + 30161, + 30163, + 30167, + 30169, + 30170, + 30172, + 30173, + 30175, + 30176, + 30177, + 30181, + 30185, + 30188, + 30189, + 30190, + 30191, + 30194, + 30195, + 30197, + 30198, + 30199, + 30200, + 30202, + 30203, + 30205, + 30206, + 30210, + 30212, + 30214, + 30215, + null, + 30216, + 30217, + 30219, + 30221, + 30222, + 30223, + 30225, + 30226, + 30227, + 30228, + 30230, + 30234, + 30236, + 30237, + 30238, + 30241, + 30243, + 30247, + 30248, + 30252, + 30254, + 30255, + 30257, + 30258, + 30262, + 30263, + 30265, + 30266, + 30267, + 30269, + 30273, + 30274, + 30276, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 30277, + 30278, + 30279, + 30280, + 30281, + 30282, + 30283, + 30286, + 30287, + 30288, + 30289, + 30290, + 30291, + 30293, + 30295, + 30296, + 30297, + 30298, + 30299, + 30301, + 30303, + 30304, + 30305, + 30306, + 30308, + 30309, + 30310, + 30311, + 30312, + 30313, + 30314, + 30316, + 30317, + 30318, + 30320, + 30321, + 30322, + 30323, + 30324, + 30325, + 30326, + 30327, + 30329, + 30330, + 30332, + 30335, + 30336, + 30337, + 30339, + 30341, + 30345, + 30346, + 30348, + 30349, + 30351, + 30352, + 30354, + 30356, + 30357, + 30359, + 30360, + 30362, + 30363, + null, + 30364, + 30365, + 30366, + 30367, + 30368, + 30369, + 30370, + 30371, + 30373, + 30374, + 30375, + 30376, + 30377, + 30378, + 30379, + 30380, + 30381, + 30383, + 30384, + 30387, + 30389, + 30390, + 30391, + 30392, + 30393, + 30394, + 30395, + 30396, + 30397, + 30398, + 30400, + 30401, + 30403, + 21834, + 38463, + 22467, + 25384, + 21710, + 21769, + 21696, + 30353, + 30284, + 34108, + 30702, + 33406, + 30861, + 29233, + 38552, + 38797, + 27688, + 23433, + 20474, + 25353, + 26263, + 23736, + 33018, + 26696, + 32942, + 26114, + 30414, + 20985, + 25942, + 29100, + 32753, + 34948, + 20658, + 22885, + 25034, + 28595, + 33453, + 25420, + 25170, + 21485, + 21543, + 31494, + 20843, + 30116, + 24052, + 25300, + 36299, + 38774, + 25226, + 32793, + 22365, + 38712, + 32610, + 29240, + 30333, + 26575, + 30334, + 25670, + 20336, + 36133, + 25308, + 31255, + 26001, + 29677, + 25644, + 25203, + 33324, + 39041, + 26495, + 29256, + 25198, + 25292, + 20276, + 29923, + 21322, + 21150, + 32458, + 37030, + 24110, + 26758, + 27036, + 33152, + 32465, + 26834, + 30917, + 34444, + 38225, + 20621, + 35876, + 33502, + 32990, + 21253, + 35090, + 21093, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 30404, + 30407, + 30409, + 30411, + 30412, + 30419, + 30421, + 30425, + 30426, + 30428, + 30429, + 30430, + 30432, + 30433, + 30434, + 30435, + 30436, + 30438, + 30439, + 30440, + 30441, + 30442, + 30443, + 30444, + 30445, + 30448, + 30451, + 30453, + 30454, + 30455, + 30458, + 30459, + 30461, + 30463, + 30464, + 30466, + 30467, + 30469, + 30470, + 30474, + 30476, + 30478, + 30479, + 30480, + 30481, + 30482, + 30483, + 30484, + 30485, + 30486, + 30487, + 30488, + 30491, + 30492, + 30493, + 30494, + 30497, + 30499, + 30500, + 30501, + 30503, + 30506, + 30507, + null, + 30508, + 30510, + 30512, + 30513, + 30514, + 30515, + 30516, + 30521, + 30523, + 30525, + 30526, + 30527, + 30530, + 30532, + 30533, + 30534, + 30536, + 30537, + 30538, + 30539, + 30540, + 30541, + 30542, + 30543, + 30546, + 30547, + 30548, + 30549, + 30550, + 30551, + 30552, + 30553, + 30556, + 34180, + 38649, + 20445, + 22561, + 39281, + 23453, + 25265, + 25253, + 26292, + 35961, + 40077, + 29190, + 26479, + 30865, + 24754, + 21329, + 21271, + 36744, + 32972, + 36125, + 38049, + 20493, + 29384, + 22791, + 24811, + 28953, + 34987, + 22868, + 33519, + 26412, + 31528, + 23849, + 32503, + 29997, + 27893, + 36454, + 36856, + 36924, + 40763, + 27604, + 37145, + 31508, + 24444, + 30887, + 34006, + 34109, + 27605, + 27609, + 27606, + 24065, + 24199, + 30201, + 38381, + 25949, + 24330, + 24517, + 36767, + 22721, + 33218, + 36991, + 38491, + 38829, + 36793, + 32534, + 36140, + 25153, + 20415, + 21464, + 21342, + 36776, + 36777, + 36779, + 36941, + 26631, + 24426, + 33176, + 34920, + 40150, + 24971, + 21035, + 30250, + 24428, + 25996, + 28626, + 28392, + 23486, + 25672, + 20853, + 20912, + 26564, + 19993, + 31177, + 39292, + 28851, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 30557, + 30558, + 30559, + 30560, + 30564, + 30567, + 30569, + 30570, + 30573, + 30574, + 30575, + 30576, + 30577, + 30578, + 30579, + 30580, + 30581, + 30582, + 30583, + 30584, + 30586, + 30587, + 30588, + 30593, + 30594, + 30595, + 30598, + 30599, + 30600, + 30601, + 30602, + 30603, + 30607, + 30608, + 30611, + 30612, + 30613, + 30614, + 30615, + 30616, + 30617, + 30618, + 30619, + 30620, + 30621, + 30622, + 30625, + 30627, + 30628, + 30630, + 30632, + 30635, + 30637, + 30638, + 30639, + 30641, + 30642, + 30644, + 30646, + 30647, + 30648, + 30649, + 30650, + null, + 30652, + 30654, + 30656, + 30657, + 30658, + 30659, + 30660, + 30661, + 30662, + 30663, + 30664, + 30665, + 30666, + 30667, + 30668, + 30670, + 30671, + 30672, + 30673, + 30674, + 30675, + 30676, + 30677, + 30678, + 30680, + 30681, + 30682, + 30685, + 30686, + 30687, + 30688, + 30689, + 30692, + 30149, + 24182, + 29627, + 33760, + 25773, + 25320, + 38069, + 27874, + 21338, + 21187, + 25615, + 38082, + 31636, + 20271, + 24091, + 33334, + 33046, + 33162, + 28196, + 27850, + 39539, + 25429, + 21340, + 21754, + 34917, + 22496, + 19981, + 24067, + 27493, + 31807, + 37096, + 24598, + 25830, + 29468, + 35009, + 26448, + 25165, + 36130, + 30572, + 36393, + 37319, + 24425, + 33756, + 34081, + 39184, + 21442, + 34453, + 27531, + 24813, + 24808, + 28799, + 33485, + 33329, + 20179, + 27815, + 34255, + 25805, + 31961, + 27133, + 26361, + 33609, + 21397, + 31574, + 20391, + 20876, + 27979, + 23618, + 36461, + 25554, + 21449, + 33580, + 33590, + 26597, + 30900, + 25661, + 23519, + 23700, + 24046, + 35815, + 25286, + 26612, + 35962, + 25600, + 25530, + 34633, + 39307, + 35863, + 32544, + 38130, + 20135, + 38416, + 39076, + 26124, + 29462, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 30694, + 30696, + 30698, + 30703, + 30704, + 30705, + 30706, + 30708, + 30709, + 30711, + 30713, + 30714, + 30715, + 30716, + 30723, + 30724, + 30725, + 30726, + 30727, + 30728, + 30730, + 30731, + 30734, + 30735, + 30736, + 30739, + 30741, + 30745, + 30747, + 30750, + 30752, + 30753, + 30754, + 30756, + 30760, + 30762, + 30763, + 30766, + 30767, + 30769, + 30770, + 30771, + 30773, + 30774, + 30781, + 30783, + 30785, + 30786, + 30787, + 30788, + 30790, + 30792, + 30793, + 30794, + 30795, + 30797, + 30799, + 30801, + 30803, + 30804, + 30808, + 30809, + 30810, + null, + 30811, + 30812, + 30814, + 30815, + 30816, + 30817, + 30818, + 30819, + 30820, + 30821, + 30822, + 30823, + 30824, + 30825, + 30831, + 30832, + 30833, + 30834, + 30835, + 30836, + 30837, + 30838, + 30840, + 30841, + 30842, + 30843, + 30845, + 30846, + 30847, + 30848, + 30849, + 30850, + 30851, + 22330, + 23581, + 24120, + 38271, + 20607, + 32928, + 21378, + 25950, + 30021, + 21809, + 20513, + 36229, + 25220, + 38046, + 26397, + 22066, + 28526, + 24034, + 21557, + 28818, + 36710, + 25199, + 25764, + 25507, + 24443, + 28552, + 37108, + 33251, + 36784, + 23576, + 26216, + 24561, + 27785, + 38472, + 36225, + 34924, + 25745, + 31216, + 22478, + 27225, + 25104, + 21576, + 20056, + 31243, + 24809, + 28548, + 35802, + 25215, + 36894, + 39563, + 31204, + 21507, + 30196, + 25345, + 21273, + 27744, + 36831, + 24347, + 39536, + 32827, + 40831, + 20360, + 23610, + 36196, + 32709, + 26021, + 28861, + 20805, + 20914, + 34411, + 23815, + 23456, + 25277, + 37228, + 30068, + 36364, + 31264, + 24833, + 31609, + 20167, + 32504, + 30597, + 19985, + 33261, + 21021, + 20986, + 27249, + 21416, + 36487, + 38148, + 38607, + 28353, + 38500, + 26970, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 30852, + 30853, + 30854, + 30856, + 30858, + 30859, + 30863, + 30864, + 30866, + 30868, + 30869, + 30870, + 30873, + 30877, + 30878, + 30880, + 30882, + 30884, + 30886, + 30888, + 30889, + 30890, + 30891, + 30892, + 30893, + 30894, + 30895, + 30901, + 30902, + 30903, + 30904, + 30906, + 30907, + 30908, + 30909, + 30911, + 30912, + 30914, + 30915, + 30916, + 30918, + 30919, + 30920, + 30924, + 30925, + 30926, + 30927, + 30929, + 30930, + 30931, + 30934, + 30935, + 30936, + 30938, + 30939, + 30940, + 30941, + 30942, + 30943, + 30944, + 30945, + 30946, + 30947, + null, + 30948, + 30949, + 30950, + 30951, + 30953, + 30954, + 30955, + 30957, + 30958, + 30959, + 30960, + 30961, + 30963, + 30965, + 30966, + 30968, + 30969, + 30971, + 30972, + 30973, + 30974, + 30975, + 30976, + 30978, + 30979, + 30980, + 30982, + 30983, + 30984, + 30985, + 30986, + 30987, + 30988, + 30784, + 20648, + 30679, + 25616, + 35302, + 22788, + 25571, + 24029, + 31359, + 26941, + 20256, + 33337, + 21912, + 20018, + 30126, + 31383, + 24162, + 24202, + 38383, + 21019, + 21561, + 28810, + 25462, + 38180, + 22402, + 26149, + 26943, + 37255, + 21767, + 28147, + 32431, + 34850, + 25139, + 32496, + 30133, + 33576, + 30913, + 38604, + 36766, + 24904, + 29943, + 35789, + 27492, + 21050, + 36176, + 27425, + 32874, + 33905, + 22257, + 21254, + 20174, + 19995, + 20945, + 31895, + 37259, + 31751, + 20419, + 36479, + 31713, + 31388, + 25703, + 23828, + 20652, + 33030, + 30209, + 31929, + 28140, + 32736, + 26449, + 23384, + 23544, + 30923, + 25774, + 25619, + 25514, + 25387, + 38169, + 25645, + 36798, + 31572, + 30249, + 25171, + 22823, + 21574, + 27513, + 20643, + 25140, + 24102, + 27526, + 20195, + 36151, + 34955, + 24453, + 36910, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 30989, + 30990, + 30991, + 30992, + 30993, + 30994, + 30996, + 30997, + 30998, + 30999, + 31000, + 31001, + 31002, + 31003, + 31004, + 31005, + 31007, + 31008, + 31009, + 31010, + 31011, + 31013, + 31014, + 31015, + 31016, + 31017, + 31018, + 31019, + 31020, + 31021, + 31022, + 31023, + 31024, + 31025, + 31026, + 31027, + 31029, + 31030, + 31031, + 31032, + 31033, + 31037, + 31039, + 31042, + 31043, + 31044, + 31045, + 31047, + 31050, + 31051, + 31052, + 31053, + 31054, + 31055, + 31056, + 31057, + 31058, + 31060, + 31061, + 31064, + 31065, + 31073, + 31075, + null, + 31076, + 31078, + 31081, + 31082, + 31083, + 31084, + 31086, + 31088, + 31089, + 31090, + 31091, + 31092, + 31093, + 31094, + 31097, + 31099, + 31100, + 31101, + 31102, + 31103, + 31106, + 31107, + 31110, + 31111, + 31112, + 31113, + 31115, + 31116, + 31117, + 31118, + 31120, + 31121, + 31122, + 24608, + 32829, + 25285, + 20025, + 21333, + 37112, + 25528, + 32966, + 26086, + 27694, + 20294, + 24814, + 28129, + 35806, + 24377, + 34507, + 24403, + 25377, + 20826, + 33633, + 26723, + 20992, + 25443, + 36424, + 20498, + 23707, + 31095, + 23548, + 21040, + 31291, + 24764, + 36947, + 30423, + 24503, + 24471, + 30340, + 36460, + 28783, + 30331, + 31561, + 30634, + 20979, + 37011, + 22564, + 20302, + 28404, + 36842, + 25932, + 31515, + 29380, + 28068, + 32735, + 23265, + 25269, + 24213, + 22320, + 33922, + 31532, + 24093, + 24351, + 36882, + 32532, + 39072, + 25474, + 28359, + 30872, + 28857, + 20856, + 38747, + 22443, + 30005, + 20291, + 30008, + 24215, + 24806, + 22880, + 28096, + 27583, + 30857, + 21500, + 38613, + 20939, + 20993, + 25481, + 21514, + 38035, + 35843, + 36300, + 29241, + 30879, + 34678, + 36845, + 35853, + 21472, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 31123, + 31124, + 31125, + 31126, + 31127, + 31128, + 31129, + 31131, + 31132, + 31133, + 31134, + 31135, + 31136, + 31137, + 31138, + 31139, + 31140, + 31141, + 31142, + 31144, + 31145, + 31146, + 31147, + 31148, + 31149, + 31150, + 31151, + 31152, + 31153, + 31154, + 31156, + 31157, + 31158, + 31159, + 31160, + 31164, + 31167, + 31170, + 31172, + 31173, + 31175, + 31176, + 31178, + 31180, + 31182, + 31183, + 31184, + 31187, + 31188, + 31190, + 31191, + 31193, + 31194, + 31195, + 31196, + 31197, + 31198, + 31200, + 31201, + 31202, + 31205, + 31208, + 31210, + null, + 31212, + 31214, + 31217, + 31218, + 31219, + 31220, + 31221, + 31222, + 31223, + 31225, + 31226, + 31228, + 31230, + 31231, + 31233, + 31236, + 31237, + 31239, + 31240, + 31241, + 31242, + 31244, + 31247, + 31248, + 31249, + 31250, + 31251, + 31253, + 31254, + 31256, + 31257, + 31259, + 31260, + 19969, + 30447, + 21486, + 38025, + 39030, + 40718, + 38189, + 23450, + 35746, + 20002, + 19996, + 20908, + 33891, + 25026, + 21160, + 26635, + 20375, + 24683, + 20923, + 27934, + 20828, + 25238, + 26007, + 38497, + 35910, + 36887, + 30168, + 37117, + 30563, + 27602, + 29322, + 29420, + 35835, + 22581, + 30585, + 36172, + 26460, + 38208, + 32922, + 24230, + 28193, + 22930, + 31471, + 30701, + 38203, + 27573, + 26029, + 32526, + 22534, + 20817, + 38431, + 23545, + 22697, + 21544, + 36466, + 25958, + 39039, + 22244, + 38045, + 30462, + 36929, + 25479, + 21702, + 22810, + 22842, + 22427, + 36530, + 26421, + 36346, + 33333, + 21057, + 24816, + 22549, + 34558, + 23784, + 40517, + 20420, + 39069, + 35769, + 23077, + 24694, + 21380, + 25212, + 36943, + 37122, + 39295, + 24681, + 32780, + 20799, + 32819, + 23572, + 39285, + 27953, + 20108, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 31261, + 31263, + 31265, + 31266, + 31268, + 31269, + 31270, + 31271, + 31272, + 31273, + 31274, + 31275, + 31276, + 31277, + 31278, + 31279, + 31280, + 31281, + 31282, + 31284, + 31285, + 31286, + 31288, + 31290, + 31294, + 31296, + 31297, + 31298, + 31299, + 31300, + 31301, + 31303, + 31304, + 31305, + 31306, + 31307, + 31308, + 31309, + 31310, + 31311, + 31312, + 31314, + 31315, + 31316, + 31317, + 31318, + 31320, + 31321, + 31322, + 31323, + 31324, + 31325, + 31326, + 31327, + 31328, + 31329, + 31330, + 31331, + 31332, + 31333, + 31334, + 31335, + 31336, + null, + 31337, + 31338, + 31339, + 31340, + 31341, + 31342, + 31343, + 31345, + 31346, + 31347, + 31349, + 31355, + 31356, + 31357, + 31358, + 31362, + 31365, + 31367, + 31369, + 31370, + 31371, + 31372, + 31374, + 31375, + 31376, + 31379, + 31380, + 31385, + 31386, + 31387, + 31390, + 31393, + 31394, + 36144, + 21457, + 32602, + 31567, + 20240, + 20047, + 38400, + 27861, + 29648, + 34281, + 24070, + 30058, + 32763, + 27146, + 30718, + 38034, + 32321, + 20961, + 28902, + 21453, + 36820, + 33539, + 36137, + 29359, + 39277, + 27867, + 22346, + 33459, + 26041, + 32938, + 25151, + 38450, + 22952, + 20223, + 35775, + 32442, + 25918, + 33778, + 38750, + 21857, + 39134, + 32933, + 21290, + 35837, + 21536, + 32954, + 24223, + 27832, + 36153, + 33452, + 37210, + 21545, + 27675, + 20998, + 32439, + 22367, + 28954, + 27774, + 31881, + 22859, + 20221, + 24575, + 24868, + 31914, + 20016, + 23553, + 26539, + 34562, + 23792, + 38155, + 39118, + 30127, + 28925, + 36898, + 20911, + 32541, + 35773, + 22857, + 20964, + 20315, + 21542, + 22827, + 25975, + 32932, + 23413, + 25206, + 25282, + 36752, + 24133, + 27679, + 31526, + 20239, + 20440, + 26381, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 31395, + 31396, + 31399, + 31401, + 31402, + 31403, + 31406, + 31407, + 31408, + 31409, + 31410, + 31412, + 31413, + 31414, + 31415, + 31416, + 31417, + 31418, + 31419, + 31420, + 31421, + 31422, + 31424, + 31425, + 31426, + 31427, + 31428, + 31429, + 31430, + 31431, + 31432, + 31433, + 31434, + 31436, + 31437, + 31438, + 31439, + 31440, + 31441, + 31442, + 31443, + 31444, + 31445, + 31447, + 31448, + 31450, + 31451, + 31452, + 31453, + 31457, + 31458, + 31460, + 31463, + 31464, + 31465, + 31466, + 31467, + 31468, + 31470, + 31472, + 31473, + 31474, + 31475, + null, + 31476, + 31477, + 31478, + 31479, + 31480, + 31483, + 31484, + 31486, + 31488, + 31489, + 31490, + 31493, + 31495, + 31497, + 31500, + 31501, + 31502, + 31504, + 31506, + 31507, + 31510, + 31511, + 31512, + 31514, + 31516, + 31517, + 31519, + 31521, + 31522, + 31523, + 31527, + 31529, + 31533, + 28014, + 28074, + 31119, + 34993, + 24343, + 29995, + 25242, + 36741, + 20463, + 37340, + 26023, + 33071, + 33105, + 24220, + 33104, + 36212, + 21103, + 35206, + 36171, + 22797, + 20613, + 20184, + 38428, + 29238, + 33145, + 36127, + 23500, + 35747, + 38468, + 22919, + 32538, + 21648, + 22134, + 22030, + 35813, + 25913, + 27010, + 38041, + 30422, + 28297, + 24178, + 29976, + 26438, + 26577, + 31487, + 32925, + 36214, + 24863, + 31174, + 25954, + 36195, + 20872, + 21018, + 38050, + 32568, + 32923, + 32434, + 23703, + 28207, + 26464, + 31705, + 30347, + 39640, + 33167, + 32660, + 31957, + 25630, + 38224, + 31295, + 21578, + 21733, + 27468, + 25601, + 25096, + 40509, + 33011, + 30105, + 21106, + 38761, + 33883, + 26684, + 34532, + 38401, + 38548, + 38124, + 20010, + 21508, + 32473, + 26681, + 36319, + 32789, + 26356, + 24218, + 32697, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 31535, + 31536, + 31538, + 31540, + 31541, + 31542, + 31543, + 31545, + 31547, + 31549, + 31551, + 31552, + 31553, + 31554, + 31555, + 31556, + 31558, + 31560, + 31562, + 31565, + 31566, + 31571, + 31573, + 31575, + 31577, + 31580, + 31582, + 31583, + 31585, + 31587, + 31588, + 31589, + 31590, + 31591, + 31592, + 31593, + 31594, + 31595, + 31596, + 31597, + 31599, + 31600, + 31603, + 31604, + 31606, + 31608, + 31610, + 31612, + 31613, + 31615, + 31617, + 31618, + 31619, + 31620, + 31622, + 31623, + 31624, + 31625, + 31626, + 31627, + 31628, + 31630, + 31631, + null, + 31633, + 31634, + 31635, + 31638, + 31640, + 31641, + 31642, + 31643, + 31646, + 31647, + 31648, + 31651, + 31652, + 31653, + 31662, + 31663, + 31664, + 31666, + 31667, + 31669, + 31670, + 31671, + 31673, + 31674, + 31675, + 31676, + 31677, + 31678, + 31679, + 31680, + 31682, + 31683, + 31684, + 22466, + 32831, + 26775, + 24037, + 25915, + 21151, + 24685, + 40858, + 20379, + 36524, + 20844, + 23467, + 24339, + 24041, + 27742, + 25329, + 36129, + 20849, + 38057, + 21246, + 27807, + 33503, + 29399, + 22434, + 26500, + 36141, + 22815, + 36764, + 33735, + 21653, + 31629, + 20272, + 27837, + 23396, + 22993, + 40723, + 21476, + 34506, + 39592, + 35895, + 32929, + 25925, + 39038, + 22266, + 38599, + 21038, + 29916, + 21072, + 23521, + 25346, + 35074, + 20054, + 25296, + 24618, + 26874, + 20851, + 23448, + 20896, + 35266, + 31649, + 39302, + 32592, + 24815, + 28748, + 36143, + 20809, + 24191, + 36891, + 29808, + 35268, + 22317, + 30789, + 24402, + 40863, + 38394, + 36712, + 39740, + 35809, + 30328, + 26690, + 26588, + 36330, + 36149, + 21053, + 36746, + 28378, + 26829, + 38149, + 37101, + 22269, + 26524, + 35065, + 36807, + 21704, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 31685, + 31688, + 31689, + 31690, + 31691, + 31693, + 31694, + 31695, + 31696, + 31698, + 31700, + 31701, + 31702, + 31703, + 31704, + 31707, + 31708, + 31710, + 31711, + 31712, + 31714, + 31715, + 31716, + 31719, + 31720, + 31721, + 31723, + 31724, + 31725, + 31727, + 31728, + 31730, + 31731, + 31732, + 31733, + 31734, + 31736, + 31737, + 31738, + 31739, + 31741, + 31743, + 31744, + 31745, + 31746, + 31747, + 31748, + 31749, + 31750, + 31752, + 31753, + 31754, + 31757, + 31758, + 31760, + 31761, + 31762, + 31763, + 31764, + 31765, + 31767, + 31768, + 31769, + null, + 31770, + 31771, + 31772, + 31773, + 31774, + 31776, + 31777, + 31778, + 31779, + 31780, + 31781, + 31784, + 31785, + 31787, + 31788, + 31789, + 31790, + 31791, + 31792, + 31793, + 31794, + 31795, + 31796, + 31797, + 31798, + 31799, + 31801, + 31802, + 31803, + 31804, + 31805, + 31806, + 31810, + 39608, + 23401, + 28023, + 27686, + 20133, + 23475, + 39559, + 37219, + 25000, + 37039, + 38889, + 21547, + 28085, + 23506, + 20989, + 21898, + 32597, + 32752, + 25788, + 25421, + 26097, + 25022, + 24717, + 28938, + 27735, + 27721, + 22831, + 26477, + 33322, + 22741, + 22158, + 35946, + 27627, + 37085, + 22909, + 32791, + 21495, + 28009, + 21621, + 21917, + 33655, + 33743, + 26680, + 31166, + 21644, + 20309, + 21512, + 30418, + 35977, + 38402, + 27827, + 28088, + 36203, + 35088, + 40548, + 36154, + 22079, + 40657, + 30165, + 24456, + 29408, + 24680, + 21756, + 20136, + 27178, + 34913, + 24658, + 36720, + 21700, + 28888, + 34425, + 40511, + 27946, + 23439, + 24344, + 32418, + 21897, + 20399, + 29492, + 21564, + 21402, + 20505, + 21518, + 21628, + 20046, + 24573, + 29786, + 22774, + 33899, + 32993, + 34676, + 29392, + 31946, + 28246, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 31811, + 31812, + 31813, + 31814, + 31815, + 31816, + 31817, + 31818, + 31819, + 31820, + 31822, + 31823, + 31824, + 31825, + 31826, + 31827, + 31828, + 31829, + 31830, + 31831, + 31832, + 31833, + 31834, + 31835, + 31836, + 31837, + 31838, + 31839, + 31840, + 31841, + 31842, + 31843, + 31844, + 31845, + 31846, + 31847, + 31848, + 31849, + 31850, + 31851, + 31852, + 31853, + 31854, + 31855, + 31856, + 31857, + 31858, + 31861, + 31862, + 31863, + 31864, + 31865, + 31866, + 31870, + 31871, + 31872, + 31873, + 31874, + 31875, + 31876, + 31877, + 31878, + 31879, + null, + 31880, + 31882, + 31883, + 31884, + 31885, + 31886, + 31887, + 31888, + 31891, + 31892, + 31894, + 31897, + 31898, + 31899, + 31904, + 31905, + 31907, + 31910, + 31911, + 31912, + 31913, + 31915, + 31916, + 31917, + 31919, + 31920, + 31924, + 31925, + 31926, + 31927, + 31928, + 31930, + 31931, + 24359, + 34382, + 21804, + 25252, + 20114, + 27818, + 25143, + 33457, + 21719, + 21326, + 29502, + 28369, + 30011, + 21010, + 21270, + 35805, + 27088, + 24458, + 24576, + 28142, + 22351, + 27426, + 29615, + 26707, + 36824, + 32531, + 25442, + 24739, + 21796, + 30186, + 35938, + 28949, + 28067, + 23462, + 24187, + 33618, + 24908, + 40644, + 30970, + 34647, + 31783, + 30343, + 20976, + 24822, + 29004, + 26179, + 24140, + 24653, + 35854, + 28784, + 25381, + 36745, + 24509, + 24674, + 34516, + 22238, + 27585, + 24724, + 24935, + 21321, + 24800, + 26214, + 36159, + 31229, + 20250, + 28905, + 27719, + 35763, + 35826, + 32472, + 33636, + 26127, + 23130, + 39746, + 27985, + 28151, + 35905, + 27963, + 20249, + 28779, + 33719, + 25110, + 24785, + 38669, + 36135, + 31096, + 20987, + 22334, + 22522, + 26426, + 30072, + 31293, + 31215, + 31637, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 31935, + 31936, + 31938, + 31939, + 31940, + 31942, + 31945, + 31947, + 31950, + 31951, + 31952, + 31953, + 31954, + 31955, + 31956, + 31960, + 31962, + 31963, + 31965, + 31966, + 31969, + 31970, + 31971, + 31972, + 31973, + 31974, + 31975, + 31977, + 31978, + 31979, + 31980, + 31981, + 31982, + 31984, + 31985, + 31986, + 31987, + 31988, + 31989, + 31990, + 31991, + 31993, + 31994, + 31996, + 31997, + 31998, + 31999, + 32000, + 32001, + 32002, + 32003, + 32004, + 32005, + 32006, + 32007, + 32008, + 32009, + 32011, + 32012, + 32013, + 32014, + 32015, + 32016, + null, + 32017, + 32018, + 32019, + 32020, + 32021, + 32022, + 32023, + 32024, + 32025, + 32026, + 32027, + 32028, + 32029, + 32030, + 32031, + 32033, + 32035, + 32036, + 32037, + 32038, + 32040, + 32041, + 32042, + 32044, + 32045, + 32046, + 32048, + 32049, + 32050, + 32051, + 32052, + 32053, + 32054, + 32908, + 39269, + 36857, + 28608, + 35749, + 40481, + 23020, + 32489, + 32521, + 21513, + 26497, + 26840, + 36753, + 31821, + 38598, + 21450, + 24613, + 30142, + 27762, + 21363, + 23241, + 32423, + 25380, + 20960, + 33034, + 24049, + 34015, + 25216, + 20864, + 23395, + 20238, + 31085, + 21058, + 24760, + 27982, + 23492, + 23490, + 35745, + 35760, + 26082, + 24524, + 38469, + 22931, + 32487, + 32426, + 22025, + 26551, + 22841, + 20339, + 23478, + 21152, + 33626, + 39050, + 36158, + 30002, + 38078, + 20551, + 31292, + 20215, + 26550, + 39550, + 23233, + 27516, + 30417, + 22362, + 23574, + 31546, + 38388, + 29006, + 20860, + 32937, + 33392, + 22904, + 32516, + 33575, + 26816, + 26604, + 30897, + 30839, + 25315, + 25441, + 31616, + 20461, + 21098, + 20943, + 33616, + 27099, + 37492, + 36341, + 36145, + 35265, + 38190, + 31661, + 20214, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 32055, + 32056, + 32057, + 32058, + 32059, + 32060, + 32061, + 32062, + 32063, + 32064, + 32065, + 32066, + 32067, + 32068, + 32069, + 32070, + 32071, + 32072, + 32073, + 32074, + 32075, + 32076, + 32077, + 32078, + 32079, + 32080, + 32081, + 32082, + 32083, + 32084, + 32085, + 32086, + 32087, + 32088, + 32089, + 32090, + 32091, + 32092, + 32093, + 32094, + 32095, + 32096, + 32097, + 32098, + 32099, + 32100, + 32101, + 32102, + 32103, + 32104, + 32105, + 32106, + 32107, + 32108, + 32109, + 32111, + 32112, + 32113, + 32114, + 32115, + 32116, + 32117, + 32118, + null, + 32120, + 32121, + 32122, + 32123, + 32124, + 32125, + 32126, + 32127, + 32128, + 32129, + 32130, + 32131, + 32132, + 32133, + 32134, + 32135, + 32136, + 32137, + 32138, + 32139, + 32140, + 32141, + 32142, + 32143, + 32144, + 32145, + 32146, + 32147, + 32148, + 32149, + 32150, + 32151, + 32152, + 20581, + 33328, + 21073, + 39279, + 28176, + 28293, + 28071, + 24314, + 20725, + 23004, + 23558, + 27974, + 27743, + 30086, + 33931, + 26728, + 22870, + 35762, + 21280, + 37233, + 38477, + 34121, + 26898, + 30977, + 28966, + 33014, + 20132, + 37066, + 27975, + 39556, + 23047, + 22204, + 25605, + 38128, + 30699, + 20389, + 33050, + 29409, + 35282, + 39290, + 32564, + 32478, + 21119, + 25945, + 37237, + 36735, + 36739, + 21483, + 31382, + 25581, + 25509, + 30342, + 31224, + 34903, + 38454, + 25130, + 21163, + 33410, + 26708, + 26480, + 25463, + 30571, + 31469, + 27905, + 32467, + 35299, + 22992, + 25106, + 34249, + 33445, + 30028, + 20511, + 20171, + 30117, + 35819, + 23626, + 24062, + 31563, + 26020, + 37329, + 20170, + 27941, + 35167, + 32039, + 38182, + 20165, + 35880, + 36827, + 38771, + 26187, + 31105, + 36817, + 28908, + 28024, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 32153, + 32154, + 32155, + 32156, + 32157, + 32158, + 32159, + 32160, + 32161, + 32162, + 32163, + 32164, + 32165, + 32167, + 32168, + 32169, + 32170, + 32171, + 32172, + 32173, + 32175, + 32176, + 32177, + 32178, + 32179, + 32180, + 32181, + 32182, + 32183, + 32184, + 32185, + 32186, + 32187, + 32188, + 32189, + 32190, + 32191, + 32192, + 32193, + 32194, + 32195, + 32196, + 32197, + 32198, + 32199, + 32200, + 32201, + 32202, + 32203, + 32204, + 32205, + 32206, + 32207, + 32208, + 32209, + 32210, + 32211, + 32212, + 32213, + 32214, + 32215, + 32216, + 32217, + null, + 32218, + 32219, + 32220, + 32221, + 32222, + 32223, + 32224, + 32225, + 32226, + 32227, + 32228, + 32229, + 32230, + 32231, + 32232, + 32233, + 32234, + 32235, + 32236, + 32237, + 32238, + 32239, + 32240, + 32241, + 32242, + 32243, + 32244, + 32245, + 32246, + 32247, + 32248, + 32249, + 32250, + 23613, + 21170, + 33606, + 20834, + 33550, + 30555, + 26230, + 40120, + 20140, + 24778, + 31934, + 31923, + 32463, + 20117, + 35686, + 26223, + 39048, + 38745, + 22659, + 25964, + 38236, + 24452, + 30153, + 38742, + 31455, + 31454, + 20928, + 28847, + 31384, + 25578, + 31350, + 32416, + 29590, + 38893, + 20037, + 28792, + 20061, + 37202, + 21417, + 25937, + 26087, + 33276, + 33285, + 21646, + 23601, + 30106, + 38816, + 25304, + 29401, + 30141, + 23621, + 39545, + 33738, + 23616, + 21632, + 30697, + 20030, + 27822, + 32858, + 25298, + 25454, + 24040, + 20855, + 36317, + 36382, + 38191, + 20465, + 21477, + 24807, + 28844, + 21095, + 25424, + 40515, + 23071, + 20518, + 30519, + 21367, + 32482, + 25733, + 25899, + 25225, + 25496, + 20500, + 29237, + 35273, + 20915, + 35776, + 32477, + 22343, + 33740, + 38055, + 20891, + 21531, + 23803, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 32251, + 32252, + 32253, + 32254, + 32255, + 32256, + 32257, + 32258, + 32259, + 32260, + 32261, + 32262, + 32263, + 32264, + 32265, + 32266, + 32267, + 32268, + 32269, + 32270, + 32271, + 32272, + 32273, + 32274, + 32275, + 32276, + 32277, + 32278, + 32279, + 32280, + 32281, + 32282, + 32283, + 32284, + 32285, + 32286, + 32287, + 32288, + 32289, + 32290, + 32291, + 32292, + 32293, + 32294, + 32295, + 32296, + 32297, + 32298, + 32299, + 32300, + 32301, + 32302, + 32303, + 32304, + 32305, + 32306, + 32307, + 32308, + 32309, + 32310, + 32311, + 32312, + 32313, + null, + 32314, + 32316, + 32317, + 32318, + 32319, + 32320, + 32322, + 32323, + 32324, + 32325, + 32326, + 32328, + 32329, + 32330, + 32331, + 32332, + 32333, + 32334, + 32335, + 32336, + 32337, + 32338, + 32339, + 32340, + 32341, + 32342, + 32343, + 32344, + 32345, + 32346, + 32347, + 32348, + 32349, + 20426, + 31459, + 27994, + 37089, + 39567, + 21888, + 21654, + 21345, + 21679, + 24320, + 25577, + 26999, + 20975, + 24936, + 21002, + 22570, + 21208, + 22350, + 30733, + 30475, + 24247, + 24951, + 31968, + 25179, + 25239, + 20130, + 28821, + 32771, + 25335, + 28900, + 38752, + 22391, + 33499, + 26607, + 26869, + 30933, + 39063, + 31185, + 22771, + 21683, + 21487, + 28212, + 20811, + 21051, + 23458, + 35838, + 32943, + 21827, + 22438, + 24691, + 22353, + 21549, + 31354, + 24656, + 23380, + 25511, + 25248, + 21475, + 25187, + 23495, + 26543, + 21741, + 31391, + 33510, + 37239, + 24211, + 35044, + 22840, + 22446, + 25358, + 36328, + 33007, + 22359, + 31607, + 20393, + 24555, + 23485, + 27454, + 21281, + 31568, + 29378, + 26694, + 30719, + 30518, + 26103, + 20917, + 20111, + 30420, + 23743, + 31397, + 33909, + 22862, + 39745, + 20608, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 32350, + 32351, + 32352, + 32353, + 32354, + 32355, + 32356, + 32357, + 32358, + 32359, + 32360, + 32361, + 32362, + 32363, + 32364, + 32365, + 32366, + 32367, + 32368, + 32369, + 32370, + 32371, + 32372, + 32373, + 32374, + 32375, + 32376, + 32377, + 32378, + 32379, + 32380, + 32381, + 32382, + 32383, + 32384, + 32385, + 32387, + 32388, + 32389, + 32390, + 32391, + 32392, + 32393, + 32394, + 32395, + 32396, + 32397, + 32398, + 32399, + 32400, + 32401, + 32402, + 32403, + 32404, + 32405, + 32406, + 32407, + 32408, + 32409, + 32410, + 32412, + 32413, + 32414, + null, + 32430, + 32436, + 32443, + 32444, + 32470, + 32484, + 32492, + 32505, + 32522, + 32528, + 32542, + 32567, + 32569, + 32571, + 32572, + 32573, + 32574, + 32575, + 32576, + 32577, + 32579, + 32582, + 32583, + 32584, + 32585, + 32586, + 32587, + 32588, + 32589, + 32590, + 32591, + 32594, + 32595, + 39304, + 24871, + 28291, + 22372, + 26118, + 25414, + 22256, + 25324, + 25193, + 24275, + 38420, + 22403, + 25289, + 21895, + 34593, + 33098, + 36771, + 21862, + 33713, + 26469, + 36182, + 34013, + 23146, + 26639, + 25318, + 31726, + 38417, + 20848, + 28572, + 35888, + 25597, + 35272, + 25042, + 32518, + 28866, + 28389, + 29701, + 27028, + 29436, + 24266, + 37070, + 26391, + 28010, + 25438, + 21171, + 29282, + 32769, + 20332, + 23013, + 37226, + 28889, + 28061, + 21202, + 20048, + 38647, + 38253, + 34174, + 30922, + 32047, + 20769, + 22418, + 25794, + 32907, + 31867, + 27882, + 26865, + 26974, + 20919, + 21400, + 26792, + 29313, + 40654, + 31729, + 29432, + 31163, + 28435, + 29702, + 26446, + 37324, + 40100, + 31036, + 33673, + 33620, + 21519, + 26647, + 20029, + 21385, + 21169, + 30782, + 21382, + 21033, + 20616, + 20363, + 20432, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 32598, + 32601, + 32603, + 32604, + 32605, + 32606, + 32608, + 32611, + 32612, + 32613, + 32614, + 32615, + 32619, + 32620, + 32621, + 32623, + 32624, + 32627, + 32629, + 32630, + 32631, + 32632, + 32634, + 32635, + 32636, + 32637, + 32639, + 32640, + 32642, + 32643, + 32644, + 32645, + 32646, + 32647, + 32648, + 32649, + 32651, + 32653, + 32655, + 32656, + 32657, + 32658, + 32659, + 32661, + 32662, + 32663, + 32664, + 32665, + 32667, + 32668, + 32672, + 32674, + 32675, + 32677, + 32678, + 32680, + 32681, + 32682, + 32683, + 32684, + 32685, + 32686, + 32689, + null, + 32691, + 32692, + 32693, + 32694, + 32695, + 32698, + 32699, + 32702, + 32704, + 32706, + 32707, + 32708, + 32710, + 32711, + 32712, + 32713, + 32715, + 32717, + 32719, + 32720, + 32721, + 32722, + 32723, + 32726, + 32727, + 32729, + 32730, + 32731, + 32732, + 32733, + 32734, + 32738, + 32739, + 30178, + 31435, + 31890, + 27813, + 38582, + 21147, + 29827, + 21737, + 20457, + 32852, + 33714, + 36830, + 38256, + 24265, + 24604, + 28063, + 24088, + 25947, + 33080, + 38142, + 24651, + 28860, + 32451, + 31918, + 20937, + 26753, + 31921, + 33391, + 20004, + 36742, + 37327, + 26238, + 20142, + 35845, + 25769, + 32842, + 20698, + 30103, + 29134, + 23525, + 36797, + 28518, + 20102, + 25730, + 38243, + 24278, + 26009, + 21015, + 35010, + 28872, + 21155, + 29454, + 29747, + 26519, + 30967, + 38678, + 20020, + 37051, + 40158, + 28107, + 20955, + 36161, + 21533, + 25294, + 29618, + 33777, + 38646, + 40836, + 38083, + 20278, + 32666, + 20940, + 28789, + 38517, + 23725, + 39046, + 21478, + 20196, + 28316, + 29705, + 27060, + 30827, + 39311, + 30041, + 21016, + 30244, + 27969, + 26611, + 20845, + 40857, + 32843, + 21657, + 31548, + 31423, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 32740, + 32743, + 32744, + 32746, + 32747, + 32748, + 32749, + 32751, + 32754, + 32756, + 32757, + 32758, + 32759, + 32760, + 32761, + 32762, + 32765, + 32766, + 32767, + 32770, + 32775, + 32776, + 32777, + 32778, + 32782, + 32783, + 32785, + 32787, + 32794, + 32795, + 32797, + 32798, + 32799, + 32801, + 32803, + 32804, + 32811, + 32812, + 32813, + 32814, + 32815, + 32816, + 32818, + 32820, + 32825, + 32826, + 32828, + 32830, + 32832, + 32833, + 32836, + 32837, + 32839, + 32840, + 32841, + 32846, + 32847, + 32848, + 32849, + 32851, + 32853, + 32854, + 32855, + null, + 32857, + 32859, + 32860, + 32861, + 32862, + 32863, + 32864, + 32865, + 32866, + 32867, + 32868, + 32869, + 32870, + 32871, + 32872, + 32875, + 32876, + 32877, + 32878, + 32879, + 32880, + 32882, + 32883, + 32884, + 32885, + 32886, + 32887, + 32888, + 32889, + 32890, + 32891, + 32892, + 32893, + 38534, + 22404, + 25314, + 38471, + 27004, + 23044, + 25602, + 31699, + 28431, + 38475, + 33446, + 21346, + 39045, + 24208, + 28809, + 25523, + 21348, + 34383, + 40065, + 40595, + 30860, + 38706, + 36335, + 36162, + 40575, + 28510, + 31108, + 24405, + 38470, + 25134, + 39540, + 21525, + 38109, + 20387, + 26053, + 23653, + 23649, + 32533, + 34385, + 27695, + 24459, + 29575, + 28388, + 32511, + 23782, + 25371, + 23402, + 28390, + 21365, + 20081, + 25504, + 30053, + 25249, + 36718, + 20262, + 20177, + 27814, + 32438, + 35770, + 33821, + 34746, + 32599, + 36923, + 38179, + 31657, + 39585, + 35064, + 33853, + 27931, + 39558, + 32476, + 22920, + 40635, + 29595, + 30721, + 34434, + 39532, + 39554, + 22043, + 21527, + 22475, + 20080, + 40614, + 21334, + 36808, + 33033, + 30610, + 39314, + 34542, + 28385, + 34067, + 26364, + 24930, + 28459, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 32894, + 32897, + 32898, + 32901, + 32904, + 32906, + 32909, + 32910, + 32911, + 32912, + 32913, + 32914, + 32916, + 32917, + 32919, + 32921, + 32926, + 32931, + 32934, + 32935, + 32936, + 32940, + 32944, + 32947, + 32949, + 32950, + 32952, + 32953, + 32955, + 32965, + 32967, + 32968, + 32969, + 32970, + 32971, + 32975, + 32976, + 32977, + 32978, + 32979, + 32980, + 32981, + 32984, + 32991, + 32992, + 32994, + 32995, + 32998, + 33006, + 33013, + 33015, + 33017, + 33019, + 33022, + 33023, + 33024, + 33025, + 33027, + 33028, + 33029, + 33031, + 33032, + 33035, + null, + 33036, + 33045, + 33047, + 33049, + 33051, + 33052, + 33053, + 33055, + 33056, + 33057, + 33058, + 33059, + 33060, + 33061, + 33062, + 33063, + 33064, + 33065, + 33066, + 33067, + 33069, + 33070, + 33072, + 33075, + 33076, + 33077, + 33079, + 33081, + 33082, + 33083, + 33084, + 33085, + 33087, + 35881, + 33426, + 33579, + 30450, + 27667, + 24537, + 33725, + 29483, + 33541, + 38170, + 27611, + 30683, + 38086, + 21359, + 33538, + 20882, + 24125, + 35980, + 36152, + 20040, + 29611, + 26522, + 26757, + 37238, + 38665, + 29028, + 27809, + 30473, + 23186, + 38209, + 27599, + 32654, + 26151, + 23504, + 22969, + 23194, + 38376, + 38391, + 20204, + 33804, + 33945, + 27308, + 30431, + 38192, + 29467, + 26790, + 23391, + 30511, + 37274, + 38753, + 31964, + 36855, + 35868, + 24357, + 31859, + 31192, + 35269, + 27852, + 34588, + 23494, + 24130, + 26825, + 30496, + 32501, + 20885, + 20813, + 21193, + 23081, + 32517, + 38754, + 33495, + 25551, + 30596, + 34256, + 31186, + 28218, + 24217, + 22937, + 34065, + 28781, + 27665, + 25279, + 30399, + 25935, + 24751, + 38397, + 26126, + 34719, + 40483, + 38125, + 21517, + 21629, + 35884, + 25720, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 33088, + 33089, + 33090, + 33091, + 33092, + 33093, + 33095, + 33097, + 33101, + 33102, + 33103, + 33106, + 33110, + 33111, + 33112, + 33115, + 33116, + 33117, + 33118, + 33119, + 33121, + 33122, + 33123, + 33124, + 33126, + 33128, + 33130, + 33131, + 33132, + 33135, + 33138, + 33139, + 33141, + 33142, + 33143, + 33144, + 33153, + 33155, + 33156, + 33157, + 33158, + 33159, + 33161, + 33163, + 33164, + 33165, + 33166, + 33168, + 33170, + 33171, + 33172, + 33173, + 33174, + 33175, + 33177, + 33178, + 33182, + 33183, + 33184, + 33185, + 33186, + 33188, + 33189, + null, + 33191, + 33193, + 33195, + 33196, + 33197, + 33198, + 33199, + 33200, + 33201, + 33202, + 33204, + 33205, + 33206, + 33207, + 33208, + 33209, + 33212, + 33213, + 33214, + 33215, + 33220, + 33221, + 33223, + 33224, + 33225, + 33227, + 33229, + 33230, + 33231, + 33232, + 33233, + 33234, + 33235, + 25721, + 34321, + 27169, + 33180, + 30952, + 25705, + 39764, + 25273, + 26411, + 33707, + 22696, + 40664, + 27819, + 28448, + 23518, + 38476, + 35851, + 29279, + 26576, + 25287, + 29281, + 20137, + 22982, + 27597, + 22675, + 26286, + 24149, + 21215, + 24917, + 26408, + 30446, + 30566, + 29287, + 31302, + 25343, + 21738, + 21584, + 38048, + 37027, + 23068, + 32435, + 27670, + 20035, + 22902, + 32784, + 22856, + 21335, + 30007, + 38590, + 22218, + 25376, + 33041, + 24700, + 38393, + 28118, + 21602, + 39297, + 20869, + 23273, + 33021, + 22958, + 38675, + 20522, + 27877, + 23612, + 25311, + 20320, + 21311, + 33147, + 36870, + 28346, + 34091, + 25288, + 24180, + 30910, + 25781, + 25467, + 24565, + 23064, + 37247, + 40479, + 23615, + 25423, + 32834, + 23421, + 21870, + 38218, + 38221, + 28037, + 24744, + 26592, + 29406, + 20957, + 23425, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 33236, + 33237, + 33238, + 33239, + 33240, + 33241, + 33242, + 33243, + 33244, + 33245, + 33246, + 33247, + 33248, + 33249, + 33250, + 33252, + 33253, + 33254, + 33256, + 33257, + 33259, + 33262, + 33263, + 33264, + 33265, + 33266, + 33269, + 33270, + 33271, + 33272, + 33273, + 33274, + 33277, + 33279, + 33283, + 33287, + 33288, + 33289, + 33290, + 33291, + 33294, + 33295, + 33297, + 33299, + 33301, + 33302, + 33303, + 33304, + 33305, + 33306, + 33309, + 33312, + 33316, + 33317, + 33318, + 33319, + 33321, + 33326, + 33330, + 33338, + 33340, + 33341, + 33343, + null, + 33344, + 33345, + 33346, + 33347, + 33349, + 33350, + 33352, + 33354, + 33356, + 33357, + 33358, + 33360, + 33361, + 33362, + 33363, + 33364, + 33365, + 33366, + 33367, + 33369, + 33371, + 33372, + 33373, + 33374, + 33376, + 33377, + 33378, + 33379, + 33380, + 33381, + 33382, + 33383, + 33385, + 25319, + 27870, + 29275, + 25197, + 38062, + 32445, + 33043, + 27987, + 20892, + 24324, + 22900, + 21162, + 24594, + 22899, + 26262, + 34384, + 30111, + 25386, + 25062, + 31983, + 35834, + 21734, + 27431, + 40485, + 27572, + 34261, + 21589, + 20598, + 27812, + 21866, + 36276, + 29228, + 24085, + 24597, + 29750, + 25293, + 25490, + 29260, + 24472, + 28227, + 27966, + 25856, + 28504, + 30424, + 30928, + 30460, + 30036, + 21028, + 21467, + 20051, + 24222, + 26049, + 32810, + 32982, + 25243, + 21638, + 21032, + 28846, + 34957, + 36305, + 27873, + 21624, + 32986, + 22521, + 35060, + 36180, + 38506, + 37197, + 20329, + 27803, + 21943, + 30406, + 30768, + 25256, + 28921, + 28558, + 24429, + 34028, + 26842, + 30844, + 31735, + 33192, + 26379, + 40527, + 25447, + 30896, + 22383, + 30738, + 38713, + 25209, + 25259, + 21128, + 29749, + 27607, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 33386, + 33387, + 33388, + 33389, + 33393, + 33397, + 33398, + 33399, + 33400, + 33403, + 33404, + 33408, + 33409, + 33411, + 33413, + 33414, + 33415, + 33417, + 33420, + 33424, + 33427, + 33428, + 33429, + 33430, + 33434, + 33435, + 33438, + 33440, + 33442, + 33443, + 33447, + 33458, + 33461, + 33462, + 33466, + 33467, + 33468, + 33471, + 33472, + 33474, + 33475, + 33477, + 33478, + 33481, + 33488, + 33494, + 33497, + 33498, + 33501, + 33506, + 33511, + 33512, + 33513, + 33514, + 33516, + 33517, + 33518, + 33520, + 33522, + 33523, + 33525, + 33526, + 33528, + null, + 33530, + 33532, + 33533, + 33534, + 33535, + 33536, + 33546, + 33547, + 33549, + 33552, + 33554, + 33555, + 33558, + 33560, + 33561, + 33565, + 33566, + 33567, + 33568, + 33569, + 33570, + 33571, + 33572, + 33573, + 33574, + 33577, + 33578, + 33582, + 33584, + 33586, + 33591, + 33595, + 33597, + 21860, + 33086, + 30130, + 30382, + 21305, + 30174, + 20731, + 23617, + 35692, + 31687, + 20559, + 29255, + 39575, + 39128, + 28418, + 29922, + 31080, + 25735, + 30629, + 25340, + 39057, + 36139, + 21697, + 32856, + 20050, + 22378, + 33529, + 33805, + 24179, + 20973, + 29942, + 35780, + 23631, + 22369, + 27900, + 39047, + 23110, + 30772, + 39748, + 36843, + 31893, + 21078, + 25169, + 38138, + 20166, + 33670, + 33889, + 33769, + 33970, + 22484, + 26420, + 22275, + 26222, + 28006, + 35889, + 26333, + 28689, + 26399, + 27450, + 26646, + 25114, + 22971, + 19971, + 20932, + 28422, + 26578, + 27791, + 20854, + 26827, + 22855, + 27495, + 30054, + 23822, + 33040, + 40784, + 26071, + 31048, + 31041, + 39569, + 36215, + 23682, + 20062, + 20225, + 21551, + 22865, + 30732, + 22120, + 27668, + 36804, + 24323, + 27773, + 27875, + 35755, + 25488, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 33598, + 33599, + 33601, + 33602, + 33604, + 33605, + 33608, + 33610, + 33611, + 33612, + 33613, + 33614, + 33619, + 33621, + 33622, + 33623, + 33624, + 33625, + 33629, + 33634, + 33648, + 33649, + 33650, + 33651, + 33652, + 33653, + 33654, + 33657, + 33658, + 33662, + 33663, + 33664, + 33665, + 33666, + 33667, + 33668, + 33671, + 33672, + 33674, + 33675, + 33676, + 33677, + 33679, + 33680, + 33681, + 33684, + 33685, + 33686, + 33687, + 33689, + 33690, + 33693, + 33695, + 33697, + 33698, + 33699, + 33700, + 33701, + 33702, + 33703, + 33708, + 33709, + 33710, + null, + 33711, + 33717, + 33723, + 33726, + 33727, + 33730, + 33731, + 33732, + 33734, + 33736, + 33737, + 33739, + 33741, + 33742, + 33744, + 33745, + 33746, + 33747, + 33749, + 33751, + 33753, + 33754, + 33755, + 33758, + 33762, + 33763, + 33764, + 33766, + 33767, + 33768, + 33771, + 33772, + 33773, + 24688, + 27965, + 29301, + 25190, + 38030, + 38085, + 21315, + 36801, + 31614, + 20191, + 35878, + 20094, + 40660, + 38065, + 38067, + 21069, + 28508, + 36963, + 27973, + 35892, + 22545, + 23884, + 27424, + 27465, + 26538, + 21595, + 33108, + 32652, + 22681, + 34103, + 24378, + 25250, + 27207, + 38201, + 25970, + 24708, + 26725, + 30631, + 20052, + 20392, + 24039, + 38808, + 25772, + 32728, + 23789, + 20431, + 31373, + 20999, + 33540, + 19988, + 24623, + 31363, + 38054, + 20405, + 20146, + 31206, + 29748, + 21220, + 33465, + 25810, + 31165, + 23517, + 27777, + 38738, + 36731, + 27682, + 20542, + 21375, + 28165, + 25806, + 26228, + 27696, + 24773, + 39031, + 35831, + 24198, + 29756, + 31351, + 31179, + 19992, + 37041, + 29699, + 27714, + 22234, + 37195, + 27845, + 36235, + 21306, + 34502, + 26354, + 36527, + 23624, + 39537, + 28192, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 33774, + 33775, + 33779, + 33780, + 33781, + 33782, + 33783, + 33786, + 33787, + 33788, + 33790, + 33791, + 33792, + 33794, + 33797, + 33799, + 33800, + 33801, + 33802, + 33808, + 33810, + 33811, + 33812, + 33813, + 33814, + 33815, + 33817, + 33818, + 33819, + 33822, + 33823, + 33824, + 33825, + 33826, + 33827, + 33833, + 33834, + 33835, + 33836, + 33837, + 33838, + 33839, + 33840, + 33842, + 33843, + 33844, + 33845, + 33846, + 33847, + 33849, + 33850, + 33851, + 33854, + 33855, + 33856, + 33857, + 33858, + 33859, + 33860, + 33861, + 33863, + 33864, + 33865, + null, + 33866, + 33867, + 33868, + 33869, + 33870, + 33871, + 33872, + 33874, + 33875, + 33876, + 33877, + 33878, + 33880, + 33885, + 33886, + 33887, + 33888, + 33890, + 33892, + 33893, + 33894, + 33895, + 33896, + 33898, + 33902, + 33903, + 33904, + 33906, + 33908, + 33911, + 33913, + 33915, + 33916, + 21462, + 23094, + 40843, + 36259, + 21435, + 22280, + 39079, + 26435, + 37275, + 27849, + 20840, + 30154, + 25331, + 29356, + 21048, + 21149, + 32570, + 28820, + 30264, + 21364, + 40522, + 27063, + 30830, + 38592, + 35033, + 32676, + 28982, + 29123, + 20873, + 26579, + 29924, + 22756, + 25880, + 22199, + 35753, + 39286, + 25200, + 32469, + 24825, + 28909, + 22764, + 20161, + 20154, + 24525, + 38887, + 20219, + 35748, + 20995, + 22922, + 32427, + 25172, + 20173, + 26085, + 25102, + 33592, + 33993, + 33635, + 34701, + 29076, + 28342, + 23481, + 32466, + 20887, + 25545, + 26580, + 32905, + 33593, + 34837, + 20754, + 23418, + 22914, + 36785, + 20083, + 27741, + 20837, + 35109, + 36719, + 38446, + 34122, + 29790, + 38160, + 38384, + 28070, + 33509, + 24369, + 25746, + 27922, + 33832, + 33134, + 40131, + 22622, + 36187, + 19977, + 21441, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 33917, + 33918, + 33919, + 33920, + 33921, + 33923, + 33924, + 33925, + 33926, + 33930, + 33933, + 33935, + 33936, + 33937, + 33938, + 33939, + 33940, + 33941, + 33942, + 33944, + 33946, + 33947, + 33949, + 33950, + 33951, + 33952, + 33954, + 33955, + 33956, + 33957, + 33958, + 33959, + 33960, + 33961, + 33962, + 33963, + 33964, + 33965, + 33966, + 33968, + 33969, + 33971, + 33973, + 33974, + 33975, + 33979, + 33980, + 33982, + 33984, + 33986, + 33987, + 33989, + 33990, + 33991, + 33992, + 33995, + 33996, + 33998, + 33999, + 34002, + 34004, + 34005, + 34007, + null, + 34008, + 34009, + 34010, + 34011, + 34012, + 34014, + 34017, + 34018, + 34020, + 34023, + 34024, + 34025, + 34026, + 34027, + 34029, + 34030, + 34031, + 34033, + 34034, + 34035, + 34036, + 34037, + 34038, + 34039, + 34040, + 34041, + 34042, + 34043, + 34045, + 34046, + 34048, + 34049, + 34050, + 20254, + 25955, + 26705, + 21971, + 20007, + 25620, + 39578, + 25195, + 23234, + 29791, + 33394, + 28073, + 26862, + 20711, + 33678, + 30722, + 26432, + 21049, + 27801, + 32433, + 20667, + 21861, + 29022, + 31579, + 26194, + 29642, + 33515, + 26441, + 23665, + 21024, + 29053, + 34923, + 38378, + 38485, + 25797, + 36193, + 33203, + 21892, + 27733, + 25159, + 32558, + 22674, + 20260, + 21830, + 36175, + 26188, + 19978, + 23578, + 35059, + 26786, + 25422, + 31245, + 28903, + 33421, + 21242, + 38902, + 23569, + 21736, + 37045, + 32461, + 22882, + 36170, + 34503, + 33292, + 33293, + 36198, + 25668, + 23556, + 24913, + 28041, + 31038, + 35774, + 30775, + 30003, + 21627, + 20280, + 36523, + 28145, + 23072, + 32453, + 31070, + 27784, + 23457, + 23158, + 29978, + 32958, + 24910, + 28183, + 22768, + 29983, + 29989, + 29298, + 21319, + 32499, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 34051, + 34052, + 34053, + 34054, + 34055, + 34056, + 34057, + 34058, + 34059, + 34061, + 34062, + 34063, + 34064, + 34066, + 34068, + 34069, + 34070, + 34072, + 34073, + 34075, + 34076, + 34077, + 34078, + 34080, + 34082, + 34083, + 34084, + 34085, + 34086, + 34087, + 34088, + 34089, + 34090, + 34093, + 34094, + 34095, + 34096, + 34097, + 34098, + 34099, + 34100, + 34101, + 34102, + 34110, + 34111, + 34112, + 34113, + 34114, + 34116, + 34117, + 34118, + 34119, + 34123, + 34124, + 34125, + 34126, + 34127, + 34128, + 34129, + 34130, + 34131, + 34132, + 34133, + null, + 34135, + 34136, + 34138, + 34139, + 34140, + 34141, + 34143, + 34144, + 34145, + 34146, + 34147, + 34149, + 34150, + 34151, + 34153, + 34154, + 34155, + 34156, + 34157, + 34158, + 34159, + 34160, + 34161, + 34163, + 34165, + 34166, + 34167, + 34168, + 34172, + 34173, + 34175, + 34176, + 34177, + 30465, + 30427, + 21097, + 32988, + 22307, + 24072, + 22833, + 29422, + 26045, + 28287, + 35799, + 23608, + 34417, + 21313, + 30707, + 25342, + 26102, + 20160, + 39135, + 34432, + 23454, + 35782, + 21490, + 30690, + 20351, + 23630, + 39542, + 22987, + 24335, + 31034, + 22763, + 19990, + 26623, + 20107, + 25325, + 35475, + 36893, + 21183, + 26159, + 21980, + 22124, + 36866, + 20181, + 20365, + 37322, + 39280, + 27663, + 24066, + 24643, + 23460, + 35270, + 35797, + 25910, + 25163, + 39318, + 23432, + 23551, + 25480, + 21806, + 21463, + 30246, + 20861, + 34092, + 26530, + 26803, + 27530, + 25234, + 36755, + 21460, + 33298, + 28113, + 30095, + 20070, + 36174, + 23408, + 29087, + 34223, + 26257, + 26329, + 32626, + 34560, + 40653, + 40736, + 23646, + 26415, + 36848, + 26641, + 26463, + 25101, + 31446, + 22661, + 24246, + 25968, + 28465, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 34178, + 34179, + 34182, + 34184, + 34185, + 34186, + 34187, + 34188, + 34189, + 34190, + 34192, + 34193, + 34194, + 34195, + 34196, + 34197, + 34198, + 34199, + 34200, + 34201, + 34202, + 34205, + 34206, + 34207, + 34208, + 34209, + 34210, + 34211, + 34213, + 34214, + 34215, + 34217, + 34219, + 34220, + 34221, + 34225, + 34226, + 34227, + 34228, + 34229, + 34230, + 34232, + 34234, + 34235, + 34236, + 34237, + 34238, + 34239, + 34240, + 34242, + 34243, + 34244, + 34245, + 34246, + 34247, + 34248, + 34250, + 34251, + 34252, + 34253, + 34254, + 34257, + 34258, + null, + 34260, + 34262, + 34263, + 34264, + 34265, + 34266, + 34267, + 34269, + 34270, + 34271, + 34272, + 34273, + 34274, + 34275, + 34277, + 34278, + 34279, + 34280, + 34282, + 34283, + 34284, + 34285, + 34286, + 34287, + 34288, + 34289, + 34290, + 34291, + 34292, + 34293, + 34294, + 34295, + 34296, + 24661, + 21047, + 32781, + 25684, + 34928, + 29993, + 24069, + 26643, + 25332, + 38684, + 21452, + 29245, + 35841, + 27700, + 30561, + 31246, + 21550, + 30636, + 39034, + 33308, + 35828, + 30805, + 26388, + 28865, + 26031, + 25749, + 22070, + 24605, + 31169, + 21496, + 19997, + 27515, + 32902, + 23546, + 21987, + 22235, + 20282, + 20284, + 39282, + 24051, + 26494, + 32824, + 24578, + 39042, + 36865, + 23435, + 35772, + 35829, + 25628, + 33368, + 25822, + 22013, + 33487, + 37221, + 20439, + 32032, + 36895, + 31903, + 20723, + 22609, + 28335, + 23487, + 35785, + 32899, + 37240, + 33948, + 31639, + 34429, + 38539, + 38543, + 32485, + 39635, + 30862, + 23681, + 31319, + 36930, + 38567, + 31071, + 23385, + 25439, + 31499, + 34001, + 26797, + 21766, + 32553, + 29712, + 32034, + 38145, + 25152, + 22604, + 20182, + 23427, + 22905, + 22612, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 34297, + 34298, + 34300, + 34301, + 34302, + 34304, + 34305, + 34306, + 34307, + 34308, + 34310, + 34311, + 34312, + 34313, + 34314, + 34315, + 34316, + 34317, + 34318, + 34319, + 34320, + 34322, + 34323, + 34324, + 34325, + 34327, + 34328, + 34329, + 34330, + 34331, + 34332, + 34333, + 34334, + 34335, + 34336, + 34337, + 34338, + 34339, + 34340, + 34341, + 34342, + 34344, + 34346, + 34347, + 34348, + 34349, + 34350, + 34351, + 34352, + 34353, + 34354, + 34355, + 34356, + 34357, + 34358, + 34359, + 34361, + 34362, + 34363, + 34365, + 34366, + 34367, + 34368, + null, + 34369, + 34370, + 34371, + 34372, + 34373, + 34374, + 34375, + 34376, + 34377, + 34378, + 34379, + 34380, + 34386, + 34387, + 34389, + 34390, + 34391, + 34392, + 34393, + 34395, + 34396, + 34397, + 34399, + 34400, + 34401, + 34403, + 34404, + 34405, + 34406, + 34407, + 34408, + 34409, + 34410, + 29549, + 25374, + 36427, + 36367, + 32974, + 33492, + 25260, + 21488, + 27888, + 37214, + 22826, + 24577, + 27760, + 22349, + 25674, + 36138, + 30251, + 28393, + 22363, + 27264, + 30192, + 28525, + 35885, + 35848, + 22374, + 27631, + 34962, + 30899, + 25506, + 21497, + 28845, + 27748, + 22616, + 25642, + 22530, + 26848, + 33179, + 21776, + 31958, + 20504, + 36538, + 28108, + 36255, + 28907, + 25487, + 28059, + 28372, + 32486, + 33796, + 26691, + 36867, + 28120, + 38518, + 35752, + 22871, + 29305, + 34276, + 33150, + 30140, + 35466, + 26799, + 21076, + 36386, + 38161, + 25552, + 39064, + 36420, + 21884, + 20307, + 26367, + 22159, + 24789, + 28053, + 21059, + 23625, + 22825, + 28155, + 22635, + 30000, + 29980, + 24684, + 33300, + 33094, + 25361, + 26465, + 36834, + 30522, + 36339, + 36148, + 38081, + 24086, + 21381, + 21548, + 28867, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 34413, + 34415, + 34416, + 34418, + 34419, + 34420, + 34421, + 34422, + 34423, + 34424, + 34435, + 34436, + 34437, + 34438, + 34439, + 34440, + 34441, + 34446, + 34447, + 34448, + 34449, + 34450, + 34452, + 34454, + 34455, + 34456, + 34457, + 34458, + 34459, + 34462, + 34463, + 34464, + 34465, + 34466, + 34469, + 34470, + 34475, + 34477, + 34478, + 34482, + 34483, + 34487, + 34488, + 34489, + 34491, + 34492, + 34493, + 34494, + 34495, + 34497, + 34498, + 34499, + 34501, + 34504, + 34508, + 34509, + 34514, + 34515, + 34517, + 34518, + 34519, + 34522, + 34524, + null, + 34525, + 34528, + 34529, + 34530, + 34531, + 34533, + 34534, + 34535, + 34536, + 34538, + 34539, + 34540, + 34543, + 34549, + 34550, + 34551, + 34554, + 34555, + 34556, + 34557, + 34559, + 34561, + 34564, + 34565, + 34566, + 34571, + 34572, + 34574, + 34575, + 34576, + 34577, + 34580, + 34582, + 27712, + 24311, + 20572, + 20141, + 24237, + 25402, + 33351, + 36890, + 26704, + 37230, + 30643, + 21516, + 38108, + 24420, + 31461, + 26742, + 25413, + 31570, + 32479, + 30171, + 20599, + 25237, + 22836, + 36879, + 20984, + 31171, + 31361, + 22270, + 24466, + 36884, + 28034, + 23648, + 22303, + 21520, + 20820, + 28237, + 22242, + 25512, + 39059, + 33151, + 34581, + 35114, + 36864, + 21534, + 23663, + 33216, + 25302, + 25176, + 33073, + 40501, + 38464, + 39534, + 39548, + 26925, + 22949, + 25299, + 21822, + 25366, + 21703, + 34521, + 27964, + 23043, + 29926, + 34972, + 27498, + 22806, + 35916, + 24367, + 28286, + 29609, + 39037, + 20024, + 28919, + 23436, + 30871, + 25405, + 26202, + 30358, + 24779, + 23451, + 23113, + 19975, + 33109, + 27754, + 29579, + 20129, + 26505, + 32593, + 24448, + 26106, + 26395, + 24536, + 22916, + 23041, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 34585, + 34587, + 34589, + 34591, + 34592, + 34596, + 34598, + 34599, + 34600, + 34602, + 34603, + 34604, + 34605, + 34607, + 34608, + 34610, + 34611, + 34613, + 34614, + 34616, + 34617, + 34618, + 34620, + 34621, + 34624, + 34625, + 34626, + 34627, + 34628, + 34629, + 34630, + 34634, + 34635, + 34637, + 34639, + 34640, + 34641, + 34642, + 34644, + 34645, + 34646, + 34648, + 34650, + 34651, + 34652, + 34653, + 34654, + 34655, + 34657, + 34658, + 34662, + 34663, + 34664, + 34665, + 34666, + 34667, + 34668, + 34669, + 34671, + 34673, + 34674, + 34675, + 34677, + null, + 34679, + 34680, + 34681, + 34682, + 34687, + 34688, + 34689, + 34692, + 34694, + 34695, + 34697, + 34698, + 34700, + 34702, + 34703, + 34704, + 34705, + 34706, + 34708, + 34709, + 34710, + 34712, + 34713, + 34714, + 34715, + 34716, + 34717, + 34718, + 34720, + 34721, + 34722, + 34723, + 34724, + 24013, + 24494, + 21361, + 38886, + 36829, + 26693, + 22260, + 21807, + 24799, + 20026, + 28493, + 32500, + 33479, + 33806, + 22996, + 20255, + 20266, + 23614, + 32428, + 26410, + 34074, + 21619, + 30031, + 32963, + 21890, + 39759, + 20301, + 28205, + 35859, + 23561, + 24944, + 21355, + 30239, + 28201, + 34442, + 25991, + 38395, + 32441, + 21563, + 31283, + 32010, + 38382, + 21985, + 32705, + 29934, + 25373, + 34583, + 28065, + 31389, + 25105, + 26017, + 21351, + 25569, + 27779, + 24043, + 21596, + 38056, + 20044, + 27745, + 35820, + 23627, + 26080, + 33436, + 26791, + 21566, + 21556, + 27595, + 27494, + 20116, + 25410, + 21320, + 33310, + 20237, + 20398, + 22366, + 25098, + 38654, + 26212, + 29289, + 21247, + 21153, + 24735, + 35823, + 26132, + 29081, + 26512, + 35199, + 30802, + 30717, + 26224, + 22075, + 21560, + 38177, + 29306, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 34725, + 34726, + 34727, + 34729, + 34730, + 34734, + 34736, + 34737, + 34738, + 34740, + 34742, + 34743, + 34744, + 34745, + 34747, + 34748, + 34750, + 34751, + 34753, + 34754, + 34755, + 34756, + 34757, + 34759, + 34760, + 34761, + 34764, + 34765, + 34766, + 34767, + 34768, + 34772, + 34773, + 34774, + 34775, + 34776, + 34777, + 34778, + 34780, + 34781, + 34782, + 34783, + 34785, + 34786, + 34787, + 34788, + 34790, + 34791, + 34792, + 34793, + 34795, + 34796, + 34797, + 34799, + 34800, + 34801, + 34802, + 34803, + 34804, + 34805, + 34806, + 34807, + 34808, + null, + 34810, + 34811, + 34812, + 34813, + 34815, + 34816, + 34817, + 34818, + 34820, + 34821, + 34822, + 34823, + 34824, + 34825, + 34827, + 34828, + 34829, + 34830, + 34831, + 34832, + 34833, + 34834, + 34836, + 34839, + 34840, + 34841, + 34842, + 34844, + 34845, + 34846, + 34847, + 34848, + 34851, + 31232, + 24687, + 24076, + 24713, + 33181, + 22805, + 24796, + 29060, + 28911, + 28330, + 27728, + 29312, + 27268, + 34989, + 24109, + 20064, + 23219, + 21916, + 38115, + 27927, + 31995, + 38553, + 25103, + 32454, + 30606, + 34430, + 21283, + 38686, + 36758, + 26247, + 23777, + 20384, + 29421, + 19979, + 21414, + 22799, + 21523, + 25472, + 38184, + 20808, + 20185, + 40092, + 32420, + 21688, + 36132, + 34900, + 33335, + 38386, + 28046, + 24358, + 23244, + 26174, + 38505, + 29616, + 29486, + 21439, + 33146, + 39301, + 32673, + 23466, + 38519, + 38480, + 32447, + 30456, + 21410, + 38262, + 39321, + 31665, + 35140, + 28248, + 20065, + 32724, + 31077, + 35814, + 24819, + 21709, + 20139, + 39033, + 24055, + 27233, + 20687, + 21521, + 35937, + 33831, + 30813, + 38660, + 21066, + 21742, + 22179, + 38144, + 28040, + 23477, + 28102, + 26195, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 34852, + 34853, + 34854, + 34855, + 34856, + 34857, + 34858, + 34859, + 34860, + 34861, + 34862, + 34863, + 34864, + 34865, + 34867, + 34868, + 34869, + 34870, + 34871, + 34872, + 34874, + 34875, + 34877, + 34878, + 34879, + 34881, + 34882, + 34883, + 34886, + 34887, + 34888, + 34889, + 34890, + 34891, + 34894, + 34895, + 34896, + 34897, + 34898, + 34899, + 34901, + 34902, + 34904, + 34906, + 34907, + 34908, + 34909, + 34910, + 34911, + 34912, + 34918, + 34919, + 34922, + 34925, + 34927, + 34929, + 34931, + 34932, + 34933, + 34934, + 34936, + 34937, + 34938, + null, + 34939, + 34940, + 34944, + 34947, + 34950, + 34951, + 34953, + 34954, + 34956, + 34958, + 34959, + 34960, + 34961, + 34963, + 34964, + 34965, + 34967, + 34968, + 34969, + 34970, + 34971, + 34973, + 34974, + 34975, + 34976, + 34977, + 34979, + 34981, + 34982, + 34983, + 34984, + 34985, + 34986, + 23567, + 23389, + 26657, + 32918, + 21880, + 31505, + 25928, + 26964, + 20123, + 27463, + 34638, + 38795, + 21327, + 25375, + 25658, + 37034, + 26012, + 32961, + 35856, + 20889, + 26800, + 21368, + 34809, + 25032, + 27844, + 27899, + 35874, + 23633, + 34218, + 33455, + 38156, + 27427, + 36763, + 26032, + 24571, + 24515, + 20449, + 34885, + 26143, + 33125, + 29481, + 24826, + 20852, + 21009, + 22411, + 24418, + 37026, + 34892, + 37266, + 24184, + 26447, + 24615, + 22995, + 20804, + 20982, + 33016, + 21256, + 27769, + 38596, + 29066, + 20241, + 20462, + 32670, + 26429, + 21957, + 38152, + 31168, + 34966, + 32483, + 22687, + 25100, + 38656, + 34394, + 22040, + 39035, + 24464, + 35768, + 33988, + 37207, + 21465, + 26093, + 24207, + 30044, + 24676, + 32110, + 23167, + 32490, + 32493, + 36713, + 21927, + 23459, + 24748, + 26059, + 29572, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 34988, + 34990, + 34991, + 34992, + 34994, + 34995, + 34996, + 34997, + 34998, + 35000, + 35001, + 35002, + 35003, + 35005, + 35006, + 35007, + 35008, + 35011, + 35012, + 35015, + 35016, + 35018, + 35019, + 35020, + 35021, + 35023, + 35024, + 35025, + 35027, + 35030, + 35031, + 35034, + 35035, + 35036, + 35037, + 35038, + 35040, + 35041, + 35046, + 35047, + 35049, + 35050, + 35051, + 35052, + 35053, + 35054, + 35055, + 35058, + 35061, + 35062, + 35063, + 35066, + 35067, + 35069, + 35071, + 35072, + 35073, + 35075, + 35076, + 35077, + 35078, + 35079, + 35080, + null, + 35081, + 35083, + 35084, + 35085, + 35086, + 35087, + 35089, + 35092, + 35093, + 35094, + 35095, + 35096, + 35100, + 35101, + 35102, + 35103, + 35104, + 35106, + 35107, + 35108, + 35110, + 35111, + 35112, + 35113, + 35116, + 35117, + 35118, + 35119, + 35121, + 35122, + 35123, + 35125, + 35127, + 36873, + 30307, + 30505, + 32474, + 38772, + 34203, + 23398, + 31348, + 38634, + 34880, + 21195, + 29071, + 24490, + 26092, + 35810, + 23547, + 39535, + 24033, + 27529, + 27739, + 35757, + 35759, + 36874, + 36805, + 21387, + 25276, + 40486, + 40493, + 21568, + 20011, + 33469, + 29273, + 34460, + 23830, + 34905, + 28079, + 38597, + 21713, + 20122, + 35766, + 28937, + 21693, + 38409, + 28895, + 28153, + 30416, + 20005, + 30740, + 34578, + 23721, + 24310, + 35328, + 39068, + 38414, + 28814, + 27839, + 22852, + 25513, + 30524, + 34893, + 28436, + 33395, + 22576, + 29141, + 21388, + 30746, + 38593, + 21761, + 24422, + 28976, + 23476, + 35866, + 39564, + 27523, + 22830, + 40495, + 31207, + 26472, + 25196, + 20335, + 30113, + 32650, + 27915, + 38451, + 27687, + 20208, + 30162, + 20859, + 26679, + 28478, + 36992, + 33136, + 22934, + 29814, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 35128, + 35129, + 35130, + 35131, + 35132, + 35133, + 35134, + 35135, + 35136, + 35138, + 35139, + 35141, + 35142, + 35143, + 35144, + 35145, + 35146, + 35147, + 35148, + 35149, + 35150, + 35151, + 35152, + 35153, + 35154, + 35155, + 35156, + 35157, + 35158, + 35159, + 35160, + 35161, + 35162, + 35163, + 35164, + 35165, + 35168, + 35169, + 35170, + 35171, + 35172, + 35173, + 35175, + 35176, + 35177, + 35178, + 35179, + 35180, + 35181, + 35182, + 35183, + 35184, + 35185, + 35186, + 35187, + 35188, + 35189, + 35190, + 35191, + 35192, + 35193, + 35194, + 35196, + null, + 35197, + 35198, + 35200, + 35202, + 35204, + 35205, + 35207, + 35208, + 35209, + 35210, + 35211, + 35212, + 35213, + 35214, + 35215, + 35216, + 35217, + 35218, + 35219, + 35220, + 35221, + 35222, + 35223, + 35224, + 35225, + 35226, + 35227, + 35228, + 35229, + 35230, + 35231, + 35232, + 35233, + 25671, + 23591, + 36965, + 31377, + 35875, + 23002, + 21676, + 33280, + 33647, + 35201, + 32768, + 26928, + 22094, + 32822, + 29239, + 37326, + 20918, + 20063, + 39029, + 25494, + 19994, + 21494, + 26355, + 33099, + 22812, + 28082, + 19968, + 22777, + 21307, + 25558, + 38129, + 20381, + 20234, + 34915, + 39056, + 22839, + 36951, + 31227, + 20202, + 33008, + 30097, + 27778, + 23452, + 23016, + 24413, + 26885, + 34433, + 20506, + 24050, + 20057, + 30691, + 20197, + 33402, + 25233, + 26131, + 37009, + 23673, + 20159, + 24441, + 33222, + 36920, + 32900, + 30123, + 20134, + 35028, + 24847, + 27589, + 24518, + 20041, + 30410, + 28322, + 35811, + 35758, + 35850, + 35793, + 24322, + 32764, + 32716, + 32462, + 33589, + 33643, + 22240, + 27575, + 38899, + 38452, + 23035, + 21535, + 38134, + 28139, + 23493, + 39278, + 23609, + 24341, + 38544, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 35234, + 35235, + 35236, + 35237, + 35238, + 35239, + 35240, + 35241, + 35242, + 35243, + 35244, + 35245, + 35246, + 35247, + 35248, + 35249, + 35250, + 35251, + 35252, + 35253, + 35254, + 35255, + 35256, + 35257, + 35258, + 35259, + 35260, + 35261, + 35262, + 35263, + 35264, + 35267, + 35277, + 35283, + 35284, + 35285, + 35287, + 35288, + 35289, + 35291, + 35293, + 35295, + 35296, + 35297, + 35298, + 35300, + 35303, + 35304, + 35305, + 35306, + 35308, + 35309, + 35310, + 35312, + 35313, + 35314, + 35316, + 35317, + 35318, + 35319, + 35320, + 35321, + 35322, + null, + 35323, + 35324, + 35325, + 35326, + 35327, + 35329, + 35330, + 35331, + 35332, + 35333, + 35334, + 35336, + 35337, + 35338, + 35339, + 35340, + 35341, + 35342, + 35343, + 35344, + 35345, + 35346, + 35347, + 35348, + 35349, + 35350, + 35351, + 35352, + 35353, + 35354, + 35355, + 35356, + 35357, + 21360, + 33521, + 27185, + 23156, + 40560, + 24212, + 32552, + 33721, + 33828, + 33829, + 33639, + 34631, + 36814, + 36194, + 30408, + 24433, + 39062, + 30828, + 26144, + 21727, + 25317, + 20323, + 33219, + 30152, + 24248, + 38605, + 36362, + 34553, + 21647, + 27891, + 28044, + 27704, + 24703, + 21191, + 29992, + 24189, + 20248, + 24736, + 24551, + 23588, + 30001, + 37038, + 38080, + 29369, + 27833, + 28216, + 37193, + 26377, + 21451, + 21491, + 20305, + 37321, + 35825, + 21448, + 24188, + 36802, + 28132, + 20110, + 30402, + 27014, + 34398, + 24858, + 33286, + 20313, + 20446, + 36926, + 40060, + 24841, + 28189, + 28180, + 38533, + 20104, + 23089, + 38632, + 19982, + 23679, + 31161, + 23431, + 35821, + 32701, + 29577, + 22495, + 33419, + 37057, + 21505, + 36935, + 21947, + 23786, + 24481, + 24840, + 27442, + 29425, + 32946, + 35465, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 35358, + 35359, + 35360, + 35361, + 35362, + 35363, + 35364, + 35365, + 35366, + 35367, + 35368, + 35369, + 35370, + 35371, + 35372, + 35373, + 35374, + 35375, + 35376, + 35377, + 35378, + 35379, + 35380, + 35381, + 35382, + 35383, + 35384, + 35385, + 35386, + 35387, + 35388, + 35389, + 35391, + 35392, + 35393, + 35394, + 35395, + 35396, + 35397, + 35398, + 35399, + 35401, + 35402, + 35403, + 35404, + 35405, + 35406, + 35407, + 35408, + 35409, + 35410, + 35411, + 35412, + 35413, + 35414, + 35415, + 35416, + 35417, + 35418, + 35419, + 35420, + 35421, + 35422, + null, + 35423, + 35424, + 35425, + 35426, + 35427, + 35428, + 35429, + 35430, + 35431, + 35432, + 35433, + 35434, + 35435, + 35436, + 35437, + 35438, + 35439, + 35440, + 35441, + 35442, + 35443, + 35444, + 35445, + 35446, + 35447, + 35448, + 35450, + 35451, + 35452, + 35453, + 35454, + 35455, + 35456, + 28020, + 23507, + 35029, + 39044, + 35947, + 39533, + 40499, + 28170, + 20900, + 20803, + 22435, + 34945, + 21407, + 25588, + 36757, + 22253, + 21592, + 22278, + 29503, + 28304, + 32536, + 36828, + 33489, + 24895, + 24616, + 38498, + 26352, + 32422, + 36234, + 36291, + 38053, + 23731, + 31908, + 26376, + 24742, + 38405, + 32792, + 20113, + 37095, + 21248, + 38504, + 20801, + 36816, + 34164, + 37213, + 26197, + 38901, + 23381, + 21277, + 30776, + 26434, + 26685, + 21705, + 28798, + 23472, + 36733, + 20877, + 22312, + 21681, + 25874, + 26242, + 36190, + 36163, + 33039, + 33900, + 36973, + 31967, + 20991, + 34299, + 26531, + 26089, + 28577, + 34468, + 36481, + 22122, + 36896, + 30338, + 28790, + 29157, + 36131, + 25321, + 21017, + 27901, + 36156, + 24590, + 22686, + 24974, + 26366, + 36192, + 25166, + 21939, + 28195, + 26413, + 36711, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 35457, + 35458, + 35459, + 35460, + 35461, + 35462, + 35463, + 35464, + 35467, + 35468, + 35469, + 35470, + 35471, + 35472, + 35473, + 35474, + 35476, + 35477, + 35478, + 35479, + 35480, + 35481, + 35482, + 35483, + 35484, + 35485, + 35486, + 35487, + 35488, + 35489, + 35490, + 35491, + 35492, + 35493, + 35494, + 35495, + 35496, + 35497, + 35498, + 35499, + 35500, + 35501, + 35502, + 35503, + 35504, + 35505, + 35506, + 35507, + 35508, + 35509, + 35510, + 35511, + 35512, + 35513, + 35514, + 35515, + 35516, + 35517, + 35518, + 35519, + 35520, + 35521, + 35522, + null, + 35523, + 35524, + 35525, + 35526, + 35527, + 35528, + 35529, + 35530, + 35531, + 35532, + 35533, + 35534, + 35535, + 35536, + 35537, + 35538, + 35539, + 35540, + 35541, + 35542, + 35543, + 35544, + 35545, + 35546, + 35547, + 35548, + 35549, + 35550, + 35551, + 35552, + 35553, + 35554, + 35555, + 38113, + 38392, + 30504, + 26629, + 27048, + 21643, + 20045, + 28856, + 35784, + 25688, + 25995, + 23429, + 31364, + 20538, + 23528, + 30651, + 27617, + 35449, + 31896, + 27838, + 30415, + 26025, + 36759, + 23853, + 23637, + 34360, + 26632, + 21344, + 25112, + 31449, + 28251, + 32509, + 27167, + 31456, + 24432, + 28467, + 24352, + 25484, + 28072, + 26454, + 19976, + 24080, + 36134, + 20183, + 32960, + 30260, + 38556, + 25307, + 26157, + 25214, + 27836, + 36213, + 29031, + 32617, + 20806, + 32903, + 21484, + 36974, + 25240, + 21746, + 34544, + 36761, + 32773, + 38167, + 34071, + 36825, + 27993, + 29645, + 26015, + 30495, + 29956, + 30759, + 33275, + 36126, + 38024, + 20390, + 26517, + 30137, + 35786, + 38663, + 25391, + 38215, + 38453, + 33976, + 25379, + 30529, + 24449, + 29424, + 20105, + 24596, + 25972, + 25327, + 27491, + 25919, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 35556, + 35557, + 35558, + 35559, + 35560, + 35561, + 35562, + 35563, + 35564, + 35565, + 35566, + 35567, + 35568, + 35569, + 35570, + 35571, + 35572, + 35573, + 35574, + 35575, + 35576, + 35577, + 35578, + 35579, + 35580, + 35581, + 35582, + 35583, + 35584, + 35585, + 35586, + 35587, + 35588, + 35589, + 35590, + 35592, + 35593, + 35594, + 35595, + 35596, + 35597, + 35598, + 35599, + 35600, + 35601, + 35602, + 35603, + 35604, + 35605, + 35606, + 35607, + 35608, + 35609, + 35610, + 35611, + 35612, + 35613, + 35614, + 35615, + 35616, + 35617, + 35618, + 35619, + null, + 35620, + 35621, + 35623, + 35624, + 35625, + 35626, + 35627, + 35628, + 35629, + 35630, + 35631, + 35632, + 35633, + 35634, + 35635, + 35636, + 35637, + 35638, + 35639, + 35640, + 35641, + 35642, + 35643, + 35644, + 35645, + 35646, + 35647, + 35648, + 35649, + 35650, + 35651, + 35652, + 35653, + 24103, + 30151, + 37073, + 35777, + 33437, + 26525, + 25903, + 21553, + 34584, + 30693, + 32930, + 33026, + 27713, + 20043, + 32455, + 32844, + 30452, + 26893, + 27542, + 25191, + 20540, + 20356, + 22336, + 25351, + 27490, + 36286, + 21482, + 26088, + 32440, + 24535, + 25370, + 25527, + 33267, + 33268, + 32622, + 24092, + 23769, + 21046, + 26234, + 31209, + 31258, + 36136, + 28825, + 30164, + 28382, + 27835, + 31378, + 20013, + 30405, + 24544, + 38047, + 34935, + 32456, + 31181, + 32959, + 37325, + 20210, + 20247, + 33311, + 21608, + 24030, + 27954, + 35788, + 31909, + 36724, + 32920, + 24090, + 21650, + 30385, + 23449, + 26172, + 39588, + 29664, + 26666, + 34523, + 26417, + 29482, + 35832, + 35803, + 36880, + 31481, + 28891, + 29038, + 25284, + 30633, + 22065, + 20027, + 33879, + 26609, + 21161, + 34496, + 36142, + 38136, + 31569, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 35654, + 35655, + 35656, + 35657, + 35658, + 35659, + 35660, + 35661, + 35662, + 35663, + 35664, + 35665, + 35666, + 35667, + 35668, + 35669, + 35670, + 35671, + 35672, + 35673, + 35674, + 35675, + 35676, + 35677, + 35678, + 35679, + 35680, + 35681, + 35682, + 35683, + 35684, + 35685, + 35687, + 35688, + 35689, + 35690, + 35691, + 35693, + 35694, + 35695, + 35696, + 35697, + 35698, + 35699, + 35700, + 35701, + 35702, + 35703, + 35704, + 35705, + 35706, + 35707, + 35708, + 35709, + 35710, + 35711, + 35712, + 35713, + 35714, + 35715, + 35716, + 35717, + 35718, + null, + 35719, + 35720, + 35721, + 35722, + 35723, + 35724, + 35725, + 35726, + 35727, + 35728, + 35729, + 35730, + 35731, + 35732, + 35733, + 35734, + 35735, + 35736, + 35737, + 35738, + 35739, + 35740, + 35741, + 35742, + 35743, + 35756, + 35761, + 35771, + 35783, + 35792, + 35818, + 35849, + 35870, + 20303, + 27880, + 31069, + 39547, + 25235, + 29226, + 25341, + 19987, + 30742, + 36716, + 25776, + 36186, + 31686, + 26729, + 24196, + 35013, + 22918, + 25758, + 22766, + 29366, + 26894, + 38181, + 36861, + 36184, + 22368, + 32512, + 35846, + 20934, + 25417, + 25305, + 21331, + 26700, + 29730, + 33537, + 37196, + 21828, + 30528, + 28796, + 27978, + 20857, + 21672, + 36164, + 23039, + 28363, + 28100, + 23388, + 32043, + 20180, + 31869, + 28371, + 23376, + 33258, + 28173, + 23383, + 39683, + 26837, + 36394, + 23447, + 32508, + 24635, + 32437, + 37049, + 36208, + 22863, + 25549, + 31199, + 36275, + 21330, + 26063, + 31062, + 35781, + 38459, + 32452, + 38075, + 32386, + 22068, + 37257, + 26368, + 32618, + 23562, + 36981, + 26152, + 24038, + 20304, + 26590, + 20570, + 20316, + 22352, + 24231, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 35896, + 35897, + 35898, + 35899, + 35900, + 35901, + 35902, + 35903, + 35904, + 35906, + 35907, + 35908, + 35909, + 35912, + 35914, + 35915, + 35917, + 35918, + 35919, + 35920, + 35921, + 35922, + 35923, + 35924, + 35926, + 35927, + 35928, + 35929, + 35931, + 35932, + 35933, + 35934, + 35935, + 35936, + 35939, + 35940, + 35941, + 35942, + 35943, + 35944, + 35945, + 35948, + 35949, + 35950, + 35951, + 35952, + 35953, + 35954, + 35956, + 35957, + 35958, + 35959, + 35963, + 35964, + 35965, + 35966, + 35967, + 35968, + 35969, + 35971, + 35972, + 35974, + 35975, + null, + 35976, + 35979, + 35981, + 35982, + 35983, + 35984, + 35985, + 35986, + 35987, + 35989, + 35990, + 35991, + 35993, + 35994, + 35995, + 35996, + 35997, + 35998, + 35999, + 36000, + 36001, + 36002, + 36003, + 36004, + 36005, + 36006, + 36007, + 36008, + 36009, + 36010, + 36011, + 36012, + 36013, + 20109, + 19980, + 20800, + 19984, + 24319, + 21317, + 19989, + 20120, + 19998, + 39730, + 23404, + 22121, + 20008, + 31162, + 20031, + 21269, + 20039, + 22829, + 29243, + 21358, + 27664, + 22239, + 32996, + 39319, + 27603, + 30590, + 40727, + 20022, + 20127, + 40720, + 20060, + 20073, + 20115, + 33416, + 23387, + 21868, + 22031, + 20164, + 21389, + 21405, + 21411, + 21413, + 21422, + 38757, + 36189, + 21274, + 21493, + 21286, + 21294, + 21310, + 36188, + 21350, + 21347, + 20994, + 21000, + 21006, + 21037, + 21043, + 21055, + 21056, + 21068, + 21086, + 21089, + 21084, + 33967, + 21117, + 21122, + 21121, + 21136, + 21139, + 20866, + 32596, + 20155, + 20163, + 20169, + 20162, + 20200, + 20193, + 20203, + 20190, + 20251, + 20211, + 20258, + 20324, + 20213, + 20261, + 20263, + 20233, + 20267, + 20318, + 20327, + 25912, + 20314, + 20317, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 36014, + 36015, + 36016, + 36017, + 36018, + 36019, + 36020, + 36021, + 36022, + 36023, + 36024, + 36025, + 36026, + 36027, + 36028, + 36029, + 36030, + 36031, + 36032, + 36033, + 36034, + 36035, + 36036, + 36037, + 36038, + 36039, + 36040, + 36041, + 36042, + 36043, + 36044, + 36045, + 36046, + 36047, + 36048, + 36049, + 36050, + 36051, + 36052, + 36053, + 36054, + 36055, + 36056, + 36057, + 36058, + 36059, + 36060, + 36061, + 36062, + 36063, + 36064, + 36065, + 36066, + 36067, + 36068, + 36069, + 36070, + 36071, + 36072, + 36073, + 36074, + 36075, + 36076, + null, + 36077, + 36078, + 36079, + 36080, + 36081, + 36082, + 36083, + 36084, + 36085, + 36086, + 36087, + 36088, + 36089, + 36090, + 36091, + 36092, + 36093, + 36094, + 36095, + 36096, + 36097, + 36098, + 36099, + 36100, + 36101, + 36102, + 36103, + 36104, + 36105, + 36106, + 36107, + 36108, + 36109, + 20319, + 20311, + 20274, + 20285, + 20342, + 20340, + 20369, + 20361, + 20355, + 20367, + 20350, + 20347, + 20394, + 20348, + 20396, + 20372, + 20454, + 20456, + 20458, + 20421, + 20442, + 20451, + 20444, + 20433, + 20447, + 20472, + 20521, + 20556, + 20467, + 20524, + 20495, + 20526, + 20525, + 20478, + 20508, + 20492, + 20517, + 20520, + 20606, + 20547, + 20565, + 20552, + 20558, + 20588, + 20603, + 20645, + 20647, + 20649, + 20666, + 20694, + 20742, + 20717, + 20716, + 20710, + 20718, + 20743, + 20747, + 20189, + 27709, + 20312, + 20325, + 20430, + 40864, + 27718, + 31860, + 20846, + 24061, + 40649, + 39320, + 20865, + 22804, + 21241, + 21261, + 35335, + 21264, + 20971, + 22809, + 20821, + 20128, + 20822, + 20147, + 34926, + 34980, + 20149, + 33044, + 35026, + 31104, + 23348, + 34819, + 32696, + 20907, + 20913, + 20925, + 20924, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 36110, + 36111, + 36112, + 36113, + 36114, + 36115, + 36116, + 36117, + 36118, + 36119, + 36120, + 36121, + 36122, + 36123, + 36124, + 36128, + 36177, + 36178, + 36183, + 36191, + 36197, + 36200, + 36201, + 36202, + 36204, + 36206, + 36207, + 36209, + 36210, + 36216, + 36217, + 36218, + 36219, + 36220, + 36221, + 36222, + 36223, + 36224, + 36226, + 36227, + 36230, + 36231, + 36232, + 36233, + 36236, + 36237, + 36238, + 36239, + 36240, + 36242, + 36243, + 36245, + 36246, + 36247, + 36248, + 36249, + 36250, + 36251, + 36252, + 36253, + 36254, + 36256, + 36257, + null, + 36258, + 36260, + 36261, + 36262, + 36263, + 36264, + 36265, + 36266, + 36267, + 36268, + 36269, + 36270, + 36271, + 36272, + 36274, + 36278, + 36279, + 36281, + 36283, + 36285, + 36288, + 36289, + 36290, + 36293, + 36295, + 36296, + 36297, + 36298, + 36301, + 36304, + 36306, + 36307, + 36308, + 20935, + 20886, + 20898, + 20901, + 35744, + 35750, + 35751, + 35754, + 35764, + 35765, + 35767, + 35778, + 35779, + 35787, + 35791, + 35790, + 35794, + 35795, + 35796, + 35798, + 35800, + 35801, + 35804, + 35807, + 35808, + 35812, + 35816, + 35817, + 35822, + 35824, + 35827, + 35830, + 35833, + 35836, + 35839, + 35840, + 35842, + 35844, + 35847, + 35852, + 35855, + 35857, + 35858, + 35860, + 35861, + 35862, + 35865, + 35867, + 35864, + 35869, + 35871, + 35872, + 35873, + 35877, + 35879, + 35882, + 35883, + 35886, + 35887, + 35890, + 35891, + 35893, + 35894, + 21353, + 21370, + 38429, + 38434, + 38433, + 38449, + 38442, + 38461, + 38460, + 38466, + 38473, + 38484, + 38495, + 38503, + 38508, + 38514, + 38516, + 38536, + 38541, + 38551, + 38576, + 37015, + 37019, + 37021, + 37017, + 37036, + 37025, + 37044, + 37043, + 37046, + 37050, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 36309, + 36312, + 36313, + 36316, + 36320, + 36321, + 36322, + 36325, + 36326, + 36327, + 36329, + 36333, + 36334, + 36336, + 36337, + 36338, + 36340, + 36342, + 36348, + 36350, + 36351, + 36352, + 36353, + 36354, + 36355, + 36356, + 36358, + 36359, + 36360, + 36363, + 36365, + 36366, + 36368, + 36369, + 36370, + 36371, + 36373, + 36374, + 36375, + 36376, + 36377, + 36378, + 36379, + 36380, + 36384, + 36385, + 36388, + 36389, + 36390, + 36391, + 36392, + 36395, + 36397, + 36400, + 36402, + 36403, + 36404, + 36406, + 36407, + 36408, + 36411, + 36412, + 36414, + null, + 36415, + 36419, + 36421, + 36422, + 36428, + 36429, + 36430, + 36431, + 36432, + 36435, + 36436, + 36437, + 36438, + 36439, + 36440, + 36442, + 36443, + 36444, + 36445, + 36446, + 36447, + 36448, + 36449, + 36450, + 36451, + 36452, + 36453, + 36455, + 36456, + 36458, + 36459, + 36462, + 36465, + 37048, + 37040, + 37071, + 37061, + 37054, + 37072, + 37060, + 37063, + 37075, + 37094, + 37090, + 37084, + 37079, + 37083, + 37099, + 37103, + 37118, + 37124, + 37154, + 37150, + 37155, + 37169, + 37167, + 37177, + 37187, + 37190, + 21005, + 22850, + 21154, + 21164, + 21165, + 21182, + 21759, + 21200, + 21206, + 21232, + 21471, + 29166, + 30669, + 24308, + 20981, + 20988, + 39727, + 21430, + 24321, + 30042, + 24047, + 22348, + 22441, + 22433, + 22654, + 22716, + 22725, + 22737, + 22313, + 22316, + 22314, + 22323, + 22329, + 22318, + 22319, + 22364, + 22331, + 22338, + 22377, + 22405, + 22379, + 22406, + 22396, + 22395, + 22376, + 22381, + 22390, + 22387, + 22445, + 22436, + 22412, + 22450, + 22479, + 22439, + 22452, + 22419, + 22432, + 22485, + 22488, + 22490, + 22489, + 22482, + 22456, + 22516, + 22511, + 22520, + 22500, + 22493, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 36467, + 36469, + 36471, + 36472, + 36473, + 36474, + 36475, + 36477, + 36478, + 36480, + 36482, + 36483, + 36484, + 36486, + 36488, + 36489, + 36490, + 36491, + 36492, + 36493, + 36494, + 36497, + 36498, + 36499, + 36501, + 36502, + 36503, + 36504, + 36505, + 36506, + 36507, + 36509, + 36511, + 36512, + 36513, + 36514, + 36515, + 36516, + 36517, + 36518, + 36519, + 36520, + 36521, + 36522, + 36525, + 36526, + 36528, + 36529, + 36531, + 36532, + 36533, + 36534, + 36535, + 36536, + 36537, + 36539, + 36540, + 36541, + 36542, + 36543, + 36544, + 36545, + 36546, + null, + 36547, + 36548, + 36549, + 36550, + 36551, + 36552, + 36553, + 36554, + 36555, + 36556, + 36557, + 36559, + 36560, + 36561, + 36562, + 36563, + 36564, + 36565, + 36566, + 36567, + 36568, + 36569, + 36570, + 36571, + 36572, + 36573, + 36574, + 36575, + 36576, + 36577, + 36578, + 36579, + 36580, + 22539, + 22541, + 22525, + 22509, + 22528, + 22558, + 22553, + 22596, + 22560, + 22629, + 22636, + 22657, + 22665, + 22682, + 22656, + 39336, + 40729, + 25087, + 33401, + 33405, + 33407, + 33423, + 33418, + 33448, + 33412, + 33422, + 33425, + 33431, + 33433, + 33451, + 33464, + 33470, + 33456, + 33480, + 33482, + 33507, + 33432, + 33463, + 33454, + 33483, + 33484, + 33473, + 33449, + 33460, + 33441, + 33450, + 33439, + 33476, + 33486, + 33444, + 33505, + 33545, + 33527, + 33508, + 33551, + 33543, + 33500, + 33524, + 33490, + 33496, + 33548, + 33531, + 33491, + 33553, + 33562, + 33542, + 33556, + 33557, + 33504, + 33493, + 33564, + 33617, + 33627, + 33628, + 33544, + 33682, + 33596, + 33588, + 33585, + 33691, + 33630, + 33583, + 33615, + 33607, + 33603, + 33631, + 33600, + 33559, + 33632, + 33581, + 33594, + 33587, + 33638, + 33637, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 36581, + 36582, + 36583, + 36584, + 36585, + 36586, + 36587, + 36588, + 36589, + 36590, + 36591, + 36592, + 36593, + 36594, + 36595, + 36596, + 36597, + 36598, + 36599, + 36600, + 36601, + 36602, + 36603, + 36604, + 36605, + 36606, + 36607, + 36608, + 36609, + 36610, + 36611, + 36612, + 36613, + 36614, + 36615, + 36616, + 36617, + 36618, + 36619, + 36620, + 36621, + 36622, + 36623, + 36624, + 36625, + 36626, + 36627, + 36628, + 36629, + 36630, + 36631, + 36632, + 36633, + 36634, + 36635, + 36636, + 36637, + 36638, + 36639, + 36640, + 36641, + 36642, + 36643, + null, + 36644, + 36645, + 36646, + 36647, + 36648, + 36649, + 36650, + 36651, + 36652, + 36653, + 36654, + 36655, + 36656, + 36657, + 36658, + 36659, + 36660, + 36661, + 36662, + 36663, + 36664, + 36665, + 36666, + 36667, + 36668, + 36669, + 36670, + 36671, + 36672, + 36673, + 36674, + 36675, + 36676, + 33640, + 33563, + 33641, + 33644, + 33642, + 33645, + 33646, + 33712, + 33656, + 33715, + 33716, + 33696, + 33706, + 33683, + 33692, + 33669, + 33660, + 33718, + 33705, + 33661, + 33720, + 33659, + 33688, + 33694, + 33704, + 33722, + 33724, + 33729, + 33793, + 33765, + 33752, + 22535, + 33816, + 33803, + 33757, + 33789, + 33750, + 33820, + 33848, + 33809, + 33798, + 33748, + 33759, + 33807, + 33795, + 33784, + 33785, + 33770, + 33733, + 33728, + 33830, + 33776, + 33761, + 33884, + 33873, + 33882, + 33881, + 33907, + 33927, + 33928, + 33914, + 33929, + 33912, + 33852, + 33862, + 33897, + 33910, + 33932, + 33934, + 33841, + 33901, + 33985, + 33997, + 34000, + 34022, + 33981, + 34003, + 33994, + 33983, + 33978, + 34016, + 33953, + 33977, + 33972, + 33943, + 34021, + 34019, + 34060, + 29965, + 34104, + 34032, + 34105, + 34079, + 34106, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 36677, + 36678, + 36679, + 36680, + 36681, + 36682, + 36683, + 36684, + 36685, + 36686, + 36687, + 36688, + 36689, + 36690, + 36691, + 36692, + 36693, + 36694, + 36695, + 36696, + 36697, + 36698, + 36699, + 36700, + 36701, + 36702, + 36703, + 36704, + 36705, + 36706, + 36707, + 36708, + 36709, + 36714, + 36736, + 36748, + 36754, + 36765, + 36768, + 36769, + 36770, + 36772, + 36773, + 36774, + 36775, + 36778, + 36780, + 36781, + 36782, + 36783, + 36786, + 36787, + 36788, + 36789, + 36791, + 36792, + 36794, + 36795, + 36796, + 36799, + 36800, + 36803, + 36806, + null, + 36809, + 36810, + 36811, + 36812, + 36813, + 36815, + 36818, + 36822, + 36823, + 36826, + 36832, + 36833, + 36835, + 36839, + 36844, + 36847, + 36849, + 36850, + 36852, + 36853, + 36854, + 36858, + 36859, + 36860, + 36862, + 36863, + 36871, + 36872, + 36876, + 36878, + 36883, + 36885, + 36888, + 34134, + 34107, + 34047, + 34044, + 34137, + 34120, + 34152, + 34148, + 34142, + 34170, + 30626, + 34115, + 34162, + 34171, + 34212, + 34216, + 34183, + 34191, + 34169, + 34222, + 34204, + 34181, + 34233, + 34231, + 34224, + 34259, + 34241, + 34268, + 34303, + 34343, + 34309, + 34345, + 34326, + 34364, + 24318, + 24328, + 22844, + 22849, + 32823, + 22869, + 22874, + 22872, + 21263, + 23586, + 23589, + 23596, + 23604, + 25164, + 25194, + 25247, + 25275, + 25290, + 25306, + 25303, + 25326, + 25378, + 25334, + 25401, + 25419, + 25411, + 25517, + 25590, + 25457, + 25466, + 25486, + 25524, + 25453, + 25516, + 25482, + 25449, + 25518, + 25532, + 25586, + 25592, + 25568, + 25599, + 25540, + 25566, + 25550, + 25682, + 25542, + 25534, + 25669, + 25665, + 25611, + 25627, + 25632, + 25612, + 25638, + 25633, + 25694, + 25732, + 25709, + 25750, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 36889, + 36892, + 36899, + 36900, + 36901, + 36903, + 36904, + 36905, + 36906, + 36907, + 36908, + 36912, + 36913, + 36914, + 36915, + 36916, + 36919, + 36921, + 36922, + 36925, + 36927, + 36928, + 36931, + 36933, + 36934, + 36936, + 36937, + 36938, + 36939, + 36940, + 36942, + 36948, + 36949, + 36950, + 36953, + 36954, + 36956, + 36957, + 36958, + 36959, + 36960, + 36961, + 36964, + 36966, + 36967, + 36969, + 36970, + 36971, + 36972, + 36975, + 36976, + 36977, + 36978, + 36979, + 36982, + 36983, + 36984, + 36985, + 36986, + 36987, + 36988, + 36990, + 36993, + null, + 36996, + 36997, + 36998, + 36999, + 37001, + 37002, + 37004, + 37005, + 37006, + 37007, + 37008, + 37010, + 37012, + 37014, + 37016, + 37018, + 37020, + 37022, + 37023, + 37024, + 37028, + 37029, + 37031, + 37032, + 37033, + 37035, + 37037, + 37042, + 37047, + 37052, + 37053, + 37055, + 37056, + 25722, + 25783, + 25784, + 25753, + 25786, + 25792, + 25808, + 25815, + 25828, + 25826, + 25865, + 25893, + 25902, + 24331, + 24530, + 29977, + 24337, + 21343, + 21489, + 21501, + 21481, + 21480, + 21499, + 21522, + 21526, + 21510, + 21579, + 21586, + 21587, + 21588, + 21590, + 21571, + 21537, + 21591, + 21593, + 21539, + 21554, + 21634, + 21652, + 21623, + 21617, + 21604, + 21658, + 21659, + 21636, + 21622, + 21606, + 21661, + 21712, + 21677, + 21698, + 21684, + 21714, + 21671, + 21670, + 21715, + 21716, + 21618, + 21667, + 21717, + 21691, + 21695, + 21708, + 21721, + 21722, + 21724, + 21673, + 21674, + 21668, + 21725, + 21711, + 21726, + 21787, + 21735, + 21792, + 21757, + 21780, + 21747, + 21794, + 21795, + 21775, + 21777, + 21799, + 21802, + 21863, + 21903, + 21941, + 21833, + 21869, + 21825, + 21845, + 21823, + 21840, + 21820, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 37058, + 37059, + 37062, + 37064, + 37065, + 37067, + 37068, + 37069, + 37074, + 37076, + 37077, + 37078, + 37080, + 37081, + 37082, + 37086, + 37087, + 37088, + 37091, + 37092, + 37093, + 37097, + 37098, + 37100, + 37102, + 37104, + 37105, + 37106, + 37107, + 37109, + 37110, + 37111, + 37113, + 37114, + 37115, + 37116, + 37119, + 37120, + 37121, + 37123, + 37125, + 37126, + 37127, + 37128, + 37129, + 37130, + 37131, + 37132, + 37133, + 37134, + 37135, + 37136, + 37137, + 37138, + 37139, + 37140, + 37141, + 37142, + 37143, + 37144, + 37146, + 37147, + 37148, + null, + 37149, + 37151, + 37152, + 37153, + 37156, + 37157, + 37158, + 37159, + 37160, + 37161, + 37162, + 37163, + 37164, + 37165, + 37166, + 37168, + 37170, + 37171, + 37172, + 37173, + 37174, + 37175, + 37176, + 37178, + 37179, + 37180, + 37181, + 37182, + 37183, + 37184, + 37185, + 37186, + 37188, + 21815, + 21846, + 21877, + 21878, + 21879, + 21811, + 21808, + 21852, + 21899, + 21970, + 21891, + 21937, + 21945, + 21896, + 21889, + 21919, + 21886, + 21974, + 21905, + 21883, + 21983, + 21949, + 21950, + 21908, + 21913, + 21994, + 22007, + 21961, + 22047, + 21969, + 21995, + 21996, + 21972, + 21990, + 21981, + 21956, + 21999, + 21989, + 22002, + 22003, + 21964, + 21965, + 21992, + 22005, + 21988, + 36756, + 22046, + 22024, + 22028, + 22017, + 22052, + 22051, + 22014, + 22016, + 22055, + 22061, + 22104, + 22073, + 22103, + 22060, + 22093, + 22114, + 22105, + 22108, + 22092, + 22100, + 22150, + 22116, + 22129, + 22123, + 22139, + 22140, + 22149, + 22163, + 22191, + 22228, + 22231, + 22237, + 22241, + 22261, + 22251, + 22265, + 22271, + 22276, + 22282, + 22281, + 22300, + 24079, + 24089, + 24084, + 24081, + 24113, + 24123, + 24124, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 37189, + 37191, + 37192, + 37201, + 37203, + 37204, + 37205, + 37206, + 37208, + 37209, + 37211, + 37212, + 37215, + 37216, + 37222, + 37223, + 37224, + 37227, + 37229, + 37235, + 37242, + 37243, + 37244, + 37248, + 37249, + 37250, + 37251, + 37252, + 37254, + 37256, + 37258, + 37262, + 37263, + 37267, + 37268, + 37269, + 37270, + 37271, + 37272, + 37273, + 37276, + 37277, + 37278, + 37279, + 37280, + 37281, + 37284, + 37285, + 37286, + 37287, + 37288, + 37289, + 37291, + 37292, + 37296, + 37297, + 37298, + 37299, + 37302, + 37303, + 37304, + 37305, + 37307, + null, + 37308, + 37309, + 37310, + 37311, + 37312, + 37313, + 37314, + 37315, + 37316, + 37317, + 37318, + 37320, + 37323, + 37328, + 37330, + 37331, + 37332, + 37333, + 37334, + 37335, + 37336, + 37337, + 37338, + 37339, + 37341, + 37342, + 37343, + 37344, + 37345, + 37346, + 37347, + 37348, + 37349, + 24119, + 24132, + 24148, + 24155, + 24158, + 24161, + 23692, + 23674, + 23693, + 23696, + 23702, + 23688, + 23704, + 23705, + 23697, + 23706, + 23708, + 23733, + 23714, + 23741, + 23724, + 23723, + 23729, + 23715, + 23745, + 23735, + 23748, + 23762, + 23780, + 23755, + 23781, + 23810, + 23811, + 23847, + 23846, + 23854, + 23844, + 23838, + 23814, + 23835, + 23896, + 23870, + 23860, + 23869, + 23916, + 23899, + 23919, + 23901, + 23915, + 23883, + 23882, + 23913, + 23924, + 23938, + 23961, + 23965, + 35955, + 23991, + 24005, + 24435, + 24439, + 24450, + 24455, + 24457, + 24460, + 24469, + 24473, + 24476, + 24488, + 24493, + 24501, + 24508, + 34914, + 24417, + 29357, + 29360, + 29364, + 29367, + 29368, + 29379, + 29377, + 29390, + 29389, + 29394, + 29416, + 29423, + 29417, + 29426, + 29428, + 29431, + 29441, + 29427, + 29443, + 29434, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 37350, + 37351, + 37352, + 37353, + 37354, + 37355, + 37356, + 37357, + 37358, + 37359, + 37360, + 37361, + 37362, + 37363, + 37364, + 37365, + 37366, + 37367, + 37368, + 37369, + 37370, + 37371, + 37372, + 37373, + 37374, + 37375, + 37376, + 37377, + 37378, + 37379, + 37380, + 37381, + 37382, + 37383, + 37384, + 37385, + 37386, + 37387, + 37388, + 37389, + 37390, + 37391, + 37392, + 37393, + 37394, + 37395, + 37396, + 37397, + 37398, + 37399, + 37400, + 37401, + 37402, + 37403, + 37404, + 37405, + 37406, + 37407, + 37408, + 37409, + 37410, + 37411, + 37412, + null, + 37413, + 37414, + 37415, + 37416, + 37417, + 37418, + 37419, + 37420, + 37421, + 37422, + 37423, + 37424, + 37425, + 37426, + 37427, + 37428, + 37429, + 37430, + 37431, + 37432, + 37433, + 37434, + 37435, + 37436, + 37437, + 37438, + 37439, + 37440, + 37441, + 37442, + 37443, + 37444, + 37445, + 29435, + 29463, + 29459, + 29473, + 29450, + 29470, + 29469, + 29461, + 29474, + 29497, + 29477, + 29484, + 29496, + 29489, + 29520, + 29517, + 29527, + 29536, + 29548, + 29551, + 29566, + 33307, + 22821, + 39143, + 22820, + 22786, + 39267, + 39271, + 39272, + 39273, + 39274, + 39275, + 39276, + 39284, + 39287, + 39293, + 39296, + 39300, + 39303, + 39306, + 39309, + 39312, + 39313, + 39315, + 39316, + 39317, + 24192, + 24209, + 24203, + 24214, + 24229, + 24224, + 24249, + 24245, + 24254, + 24243, + 36179, + 24274, + 24273, + 24283, + 24296, + 24298, + 33210, + 24516, + 24521, + 24534, + 24527, + 24579, + 24558, + 24580, + 24545, + 24548, + 24574, + 24581, + 24582, + 24554, + 24557, + 24568, + 24601, + 24629, + 24614, + 24603, + 24591, + 24589, + 24617, + 24619, + 24586, + 24639, + 24609, + 24696, + 24697, + 24699, + 24698, + 24642, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 37446, + 37447, + 37448, + 37449, + 37450, + 37451, + 37452, + 37453, + 37454, + 37455, + 37456, + 37457, + 37458, + 37459, + 37460, + 37461, + 37462, + 37463, + 37464, + 37465, + 37466, + 37467, + 37468, + 37469, + 37470, + 37471, + 37472, + 37473, + 37474, + 37475, + 37476, + 37477, + 37478, + 37479, + 37480, + 37481, + 37482, + 37483, + 37484, + 37485, + 37486, + 37487, + 37488, + 37489, + 37490, + 37491, + 37493, + 37494, + 37495, + 37496, + 37497, + 37498, + 37499, + 37500, + 37501, + 37502, + 37503, + 37504, + 37505, + 37506, + 37507, + 37508, + 37509, + null, + 37510, + 37511, + 37512, + 37513, + 37514, + 37515, + 37516, + 37517, + 37519, + 37520, + 37521, + 37522, + 37523, + 37524, + 37525, + 37526, + 37527, + 37528, + 37529, + 37530, + 37531, + 37532, + 37533, + 37534, + 37535, + 37536, + 37537, + 37538, + 37539, + 37540, + 37541, + 37542, + 37543, + 24682, + 24701, + 24726, + 24730, + 24749, + 24733, + 24707, + 24722, + 24716, + 24731, + 24812, + 24763, + 24753, + 24797, + 24792, + 24774, + 24794, + 24756, + 24864, + 24870, + 24853, + 24867, + 24820, + 24832, + 24846, + 24875, + 24906, + 24949, + 25004, + 24980, + 24999, + 25015, + 25044, + 25077, + 24541, + 38579, + 38377, + 38379, + 38385, + 38387, + 38389, + 38390, + 38396, + 38398, + 38403, + 38404, + 38406, + 38408, + 38410, + 38411, + 38412, + 38413, + 38415, + 38418, + 38421, + 38422, + 38423, + 38425, + 38426, + 20012, + 29247, + 25109, + 27701, + 27732, + 27740, + 27722, + 27811, + 27781, + 27792, + 27796, + 27788, + 27752, + 27753, + 27764, + 27766, + 27782, + 27817, + 27856, + 27860, + 27821, + 27895, + 27896, + 27889, + 27863, + 27826, + 27872, + 27862, + 27898, + 27883, + 27886, + 27825, + 27859, + 27887, + 27902, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 37544, + 37545, + 37546, + 37547, + 37548, + 37549, + 37551, + 37552, + 37553, + 37554, + 37555, + 37556, + 37557, + 37558, + 37559, + 37560, + 37561, + 37562, + 37563, + 37564, + 37565, + 37566, + 37567, + 37568, + 37569, + 37570, + 37571, + 37572, + 37573, + 37574, + 37575, + 37577, + 37578, + 37579, + 37580, + 37581, + 37582, + 37583, + 37584, + 37585, + 37586, + 37587, + 37588, + 37589, + 37590, + 37591, + 37592, + 37593, + 37594, + 37595, + 37596, + 37597, + 37598, + 37599, + 37600, + 37601, + 37602, + 37603, + 37604, + 37605, + 37606, + 37607, + 37608, + null, + 37609, + 37610, + 37611, + 37612, + 37613, + 37614, + 37615, + 37616, + 37617, + 37618, + 37619, + 37620, + 37621, + 37622, + 37623, + 37624, + 37625, + 37626, + 37627, + 37628, + 37629, + 37630, + 37631, + 37632, + 37633, + 37634, + 37635, + 37636, + 37637, + 37638, + 37639, + 37640, + 37641, + 27961, + 27943, + 27916, + 27971, + 27976, + 27911, + 27908, + 27929, + 27918, + 27947, + 27981, + 27950, + 27957, + 27930, + 27983, + 27986, + 27988, + 27955, + 28049, + 28015, + 28062, + 28064, + 27998, + 28051, + 28052, + 27996, + 28000, + 28028, + 28003, + 28186, + 28103, + 28101, + 28126, + 28174, + 28095, + 28128, + 28177, + 28134, + 28125, + 28121, + 28182, + 28075, + 28172, + 28078, + 28203, + 28270, + 28238, + 28267, + 28338, + 28255, + 28294, + 28243, + 28244, + 28210, + 28197, + 28228, + 28383, + 28337, + 28312, + 28384, + 28461, + 28386, + 28325, + 28327, + 28349, + 28347, + 28343, + 28375, + 28340, + 28367, + 28303, + 28354, + 28319, + 28514, + 28486, + 28487, + 28452, + 28437, + 28409, + 28463, + 28470, + 28491, + 28532, + 28458, + 28425, + 28457, + 28553, + 28557, + 28556, + 28536, + 28530, + 28540, + 28538, + 28625, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 37642, + 37643, + 37644, + 37645, + 37646, + 37647, + 37648, + 37649, + 37650, + 37651, + 37652, + 37653, + 37654, + 37655, + 37656, + 37657, + 37658, + 37659, + 37660, + 37661, + 37662, + 37663, + 37664, + 37665, + 37666, + 37667, + 37668, + 37669, + 37670, + 37671, + 37672, + 37673, + 37674, + 37675, + 37676, + 37677, + 37678, + 37679, + 37680, + 37681, + 37682, + 37683, + 37684, + 37685, + 37686, + 37687, + 37688, + 37689, + 37690, + 37691, + 37692, + 37693, + 37695, + 37696, + 37697, + 37698, + 37699, + 37700, + 37701, + 37702, + 37703, + 37704, + 37705, + null, + 37706, + 37707, + 37708, + 37709, + 37710, + 37711, + 37712, + 37713, + 37714, + 37715, + 37716, + 37717, + 37718, + 37719, + 37720, + 37721, + 37722, + 37723, + 37724, + 37725, + 37726, + 37727, + 37728, + 37729, + 37730, + 37731, + 37732, + 37733, + 37734, + 37735, + 37736, + 37737, + 37739, + 28617, + 28583, + 28601, + 28598, + 28610, + 28641, + 28654, + 28638, + 28640, + 28655, + 28698, + 28707, + 28699, + 28729, + 28725, + 28751, + 28766, + 23424, + 23428, + 23445, + 23443, + 23461, + 23480, + 29999, + 39582, + 25652, + 23524, + 23534, + 35120, + 23536, + 36423, + 35591, + 36790, + 36819, + 36821, + 36837, + 36846, + 36836, + 36841, + 36838, + 36851, + 36840, + 36869, + 36868, + 36875, + 36902, + 36881, + 36877, + 36886, + 36897, + 36917, + 36918, + 36909, + 36911, + 36932, + 36945, + 36946, + 36944, + 36968, + 36952, + 36962, + 36955, + 26297, + 36980, + 36989, + 36994, + 37000, + 36995, + 37003, + 24400, + 24407, + 24406, + 24408, + 23611, + 21675, + 23632, + 23641, + 23409, + 23651, + 23654, + 32700, + 24362, + 24361, + 24365, + 33396, + 24380, + 39739, + 23662, + 22913, + 22915, + 22925, + 22953, + 22954, + 22947, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 37740, + 37741, + 37742, + 37743, + 37744, + 37745, + 37746, + 37747, + 37748, + 37749, + 37750, + 37751, + 37752, + 37753, + 37754, + 37755, + 37756, + 37757, + 37758, + 37759, + 37760, + 37761, + 37762, + 37763, + 37764, + 37765, + 37766, + 37767, + 37768, + 37769, + 37770, + 37771, + 37772, + 37773, + 37774, + 37776, + 37777, + 37778, + 37779, + 37780, + 37781, + 37782, + 37783, + 37784, + 37785, + 37786, + 37787, + 37788, + 37789, + 37790, + 37791, + 37792, + 37793, + 37794, + 37795, + 37796, + 37797, + 37798, + 37799, + 37800, + 37801, + 37802, + 37803, + null, + 37804, + 37805, + 37806, + 37807, + 37808, + 37809, + 37810, + 37811, + 37812, + 37813, + 37814, + 37815, + 37816, + 37817, + 37818, + 37819, + 37820, + 37821, + 37822, + 37823, + 37824, + 37825, + 37826, + 37827, + 37828, + 37829, + 37830, + 37831, + 37832, + 37833, + 37835, + 37836, + 37837, + 22935, + 22986, + 22955, + 22942, + 22948, + 22994, + 22962, + 22959, + 22999, + 22974, + 23045, + 23046, + 23005, + 23048, + 23011, + 23000, + 23033, + 23052, + 23049, + 23090, + 23092, + 23057, + 23075, + 23059, + 23104, + 23143, + 23114, + 23125, + 23100, + 23138, + 23157, + 33004, + 23210, + 23195, + 23159, + 23162, + 23230, + 23275, + 23218, + 23250, + 23252, + 23224, + 23264, + 23267, + 23281, + 23254, + 23270, + 23256, + 23260, + 23305, + 23319, + 23318, + 23346, + 23351, + 23360, + 23573, + 23580, + 23386, + 23397, + 23411, + 23377, + 23379, + 23394, + 39541, + 39543, + 39544, + 39546, + 39551, + 39549, + 39552, + 39553, + 39557, + 39560, + 39562, + 39568, + 39570, + 39571, + 39574, + 39576, + 39579, + 39580, + 39581, + 39583, + 39584, + 39586, + 39587, + 39589, + 39591, + 32415, + 32417, + 32419, + 32421, + 32424, + 32425, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 37838, + 37839, + 37840, + 37841, + 37842, + 37843, + 37844, + 37845, + 37847, + 37848, + 37849, + 37850, + 37851, + 37852, + 37853, + 37854, + 37855, + 37856, + 37857, + 37858, + 37859, + 37860, + 37861, + 37862, + 37863, + 37864, + 37865, + 37866, + 37867, + 37868, + 37869, + 37870, + 37871, + 37872, + 37873, + 37874, + 37875, + 37876, + 37877, + 37878, + 37879, + 37880, + 37881, + 37882, + 37883, + 37884, + 37885, + 37886, + 37887, + 37888, + 37889, + 37890, + 37891, + 37892, + 37893, + 37894, + 37895, + 37896, + 37897, + 37898, + 37899, + 37900, + 37901, + null, + 37902, + 37903, + 37904, + 37905, + 37906, + 37907, + 37908, + 37909, + 37910, + 37911, + 37912, + 37913, + 37914, + 37915, + 37916, + 37917, + 37918, + 37919, + 37920, + 37921, + 37922, + 37923, + 37924, + 37925, + 37926, + 37927, + 37928, + 37929, + 37930, + 37931, + 37932, + 37933, + 37934, + 32429, + 32432, + 32446, + 32448, + 32449, + 32450, + 32457, + 32459, + 32460, + 32464, + 32468, + 32471, + 32475, + 32480, + 32481, + 32488, + 32491, + 32494, + 32495, + 32497, + 32498, + 32525, + 32502, + 32506, + 32507, + 32510, + 32513, + 32514, + 32515, + 32519, + 32520, + 32523, + 32524, + 32527, + 32529, + 32530, + 32535, + 32537, + 32540, + 32539, + 32543, + 32545, + 32546, + 32547, + 32548, + 32549, + 32550, + 32551, + 32554, + 32555, + 32556, + 32557, + 32559, + 32560, + 32561, + 32562, + 32563, + 32565, + 24186, + 30079, + 24027, + 30014, + 37013, + 29582, + 29585, + 29614, + 29602, + 29599, + 29647, + 29634, + 29649, + 29623, + 29619, + 29632, + 29641, + 29640, + 29669, + 29657, + 39036, + 29706, + 29673, + 29671, + 29662, + 29626, + 29682, + 29711, + 29738, + 29787, + 29734, + 29733, + 29736, + 29744, + 29742, + 29740, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 37935, + 37936, + 37937, + 37938, + 37939, + 37940, + 37941, + 37942, + 37943, + 37944, + 37945, + 37946, + 37947, + 37948, + 37949, + 37951, + 37952, + 37953, + 37954, + 37955, + 37956, + 37957, + 37958, + 37959, + 37960, + 37961, + 37962, + 37963, + 37964, + 37965, + 37966, + 37967, + 37968, + 37969, + 37970, + 37971, + 37972, + 37973, + 37974, + 37975, + 37976, + 37977, + 37978, + 37979, + 37980, + 37981, + 37982, + 37983, + 37984, + 37985, + 37986, + 37987, + 37988, + 37989, + 37990, + 37991, + 37992, + 37993, + 37994, + 37996, + 37997, + 37998, + 37999, + null, + 38000, + 38001, + 38002, + 38003, + 38004, + 38005, + 38006, + 38007, + 38008, + 38009, + 38010, + 38011, + 38012, + 38013, + 38014, + 38015, + 38016, + 38017, + 38018, + 38019, + 38020, + 38033, + 38038, + 38040, + 38087, + 38095, + 38099, + 38100, + 38106, + 38118, + 38139, + 38172, + 38176, + 29723, + 29722, + 29761, + 29788, + 29783, + 29781, + 29785, + 29815, + 29805, + 29822, + 29852, + 29838, + 29824, + 29825, + 29831, + 29835, + 29854, + 29864, + 29865, + 29840, + 29863, + 29906, + 29882, + 38890, + 38891, + 38892, + 26444, + 26451, + 26462, + 26440, + 26473, + 26533, + 26503, + 26474, + 26483, + 26520, + 26535, + 26485, + 26536, + 26526, + 26541, + 26507, + 26487, + 26492, + 26608, + 26633, + 26584, + 26634, + 26601, + 26544, + 26636, + 26585, + 26549, + 26586, + 26547, + 26589, + 26624, + 26563, + 26552, + 26594, + 26638, + 26561, + 26621, + 26674, + 26675, + 26720, + 26721, + 26702, + 26722, + 26692, + 26724, + 26755, + 26653, + 26709, + 26726, + 26689, + 26727, + 26688, + 26686, + 26698, + 26697, + 26665, + 26805, + 26767, + 26740, + 26743, + 26771, + 26731, + 26818, + 26990, + 26876, + 26911, + 26912, + 26873, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 38183, + 38195, + 38205, + 38211, + 38216, + 38219, + 38229, + 38234, + 38240, + 38254, + 38260, + 38261, + 38263, + 38264, + 38265, + 38266, + 38267, + 38268, + 38269, + 38270, + 38272, + 38273, + 38274, + 38275, + 38276, + 38277, + 38278, + 38279, + 38280, + 38281, + 38282, + 38283, + 38284, + 38285, + 38286, + 38287, + 38288, + 38289, + 38290, + 38291, + 38292, + 38293, + 38294, + 38295, + 38296, + 38297, + 38298, + 38299, + 38300, + 38301, + 38302, + 38303, + 38304, + 38305, + 38306, + 38307, + 38308, + 38309, + 38310, + 38311, + 38312, + 38313, + 38314, + null, + 38315, + 38316, + 38317, + 38318, + 38319, + 38320, + 38321, + 38322, + 38323, + 38324, + 38325, + 38326, + 38327, + 38328, + 38329, + 38330, + 38331, + 38332, + 38333, + 38334, + 38335, + 38336, + 38337, + 38338, + 38339, + 38340, + 38341, + 38342, + 38343, + 38344, + 38345, + 38346, + 38347, + 26916, + 26864, + 26891, + 26881, + 26967, + 26851, + 26896, + 26993, + 26937, + 26976, + 26946, + 26973, + 27012, + 26987, + 27008, + 27032, + 27000, + 26932, + 27084, + 27015, + 27016, + 27086, + 27017, + 26982, + 26979, + 27001, + 27035, + 27047, + 27067, + 27051, + 27053, + 27092, + 27057, + 27073, + 27082, + 27103, + 27029, + 27104, + 27021, + 27135, + 27183, + 27117, + 27159, + 27160, + 27237, + 27122, + 27204, + 27198, + 27296, + 27216, + 27227, + 27189, + 27278, + 27257, + 27197, + 27176, + 27224, + 27260, + 27281, + 27280, + 27305, + 27287, + 27307, + 29495, + 29522, + 27521, + 27522, + 27527, + 27524, + 27538, + 27539, + 27533, + 27546, + 27547, + 27553, + 27562, + 36715, + 36717, + 36721, + 36722, + 36723, + 36725, + 36726, + 36728, + 36727, + 36729, + 36730, + 36732, + 36734, + 36737, + 36738, + 36740, + 36743, + 36747, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 38348, + 38349, + 38350, + 38351, + 38352, + 38353, + 38354, + 38355, + 38356, + 38357, + 38358, + 38359, + 38360, + 38361, + 38362, + 38363, + 38364, + 38365, + 38366, + 38367, + 38368, + 38369, + 38370, + 38371, + 38372, + 38373, + 38374, + 38375, + 38380, + 38399, + 38407, + 38419, + 38424, + 38427, + 38430, + 38432, + 38435, + 38436, + 38437, + 38438, + 38439, + 38440, + 38441, + 38443, + 38444, + 38445, + 38447, + 38448, + 38455, + 38456, + 38457, + 38458, + 38462, + 38465, + 38467, + 38474, + 38478, + 38479, + 38481, + 38482, + 38483, + 38486, + 38487, + null, + 38488, + 38489, + 38490, + 38492, + 38493, + 38494, + 38496, + 38499, + 38501, + 38502, + 38507, + 38509, + 38510, + 38511, + 38512, + 38513, + 38515, + 38520, + 38521, + 38522, + 38523, + 38524, + 38525, + 38526, + 38527, + 38528, + 38529, + 38530, + 38531, + 38532, + 38535, + 38537, + 38538, + 36749, + 36750, + 36751, + 36760, + 36762, + 36558, + 25099, + 25111, + 25115, + 25119, + 25122, + 25121, + 25125, + 25124, + 25132, + 33255, + 29935, + 29940, + 29951, + 29967, + 29969, + 29971, + 25908, + 26094, + 26095, + 26096, + 26122, + 26137, + 26482, + 26115, + 26133, + 26112, + 28805, + 26359, + 26141, + 26164, + 26161, + 26166, + 26165, + 32774, + 26207, + 26196, + 26177, + 26191, + 26198, + 26209, + 26199, + 26231, + 26244, + 26252, + 26279, + 26269, + 26302, + 26331, + 26332, + 26342, + 26345, + 36146, + 36147, + 36150, + 36155, + 36157, + 36160, + 36165, + 36166, + 36168, + 36169, + 36167, + 36173, + 36181, + 36185, + 35271, + 35274, + 35275, + 35276, + 35278, + 35279, + 35280, + 35281, + 29294, + 29343, + 29277, + 29286, + 29295, + 29310, + 29311, + 29316, + 29323, + 29325, + 29327, + 29330, + 25352, + 25394, + 25520, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 38540, + 38542, + 38545, + 38546, + 38547, + 38549, + 38550, + 38554, + 38555, + 38557, + 38558, + 38559, + 38560, + 38561, + 38562, + 38563, + 38564, + 38565, + 38566, + 38568, + 38569, + 38570, + 38571, + 38572, + 38573, + 38574, + 38575, + 38577, + 38578, + 38580, + 38581, + 38583, + 38584, + 38586, + 38587, + 38591, + 38594, + 38595, + 38600, + 38602, + 38603, + 38608, + 38609, + 38611, + 38612, + 38614, + 38615, + 38616, + 38617, + 38618, + 38619, + 38620, + 38621, + 38622, + 38623, + 38625, + 38626, + 38627, + 38628, + 38629, + 38630, + 38631, + 38635, + null, + 38636, + 38637, + 38638, + 38640, + 38641, + 38642, + 38644, + 38645, + 38648, + 38650, + 38651, + 38652, + 38653, + 38655, + 38658, + 38659, + 38661, + 38666, + 38667, + 38668, + 38672, + 38673, + 38674, + 38676, + 38677, + 38679, + 38680, + 38681, + 38682, + 38683, + 38685, + 38687, + 38688, + 25663, + 25816, + 32772, + 27626, + 27635, + 27645, + 27637, + 27641, + 27653, + 27655, + 27654, + 27661, + 27669, + 27672, + 27673, + 27674, + 27681, + 27689, + 27684, + 27690, + 27698, + 25909, + 25941, + 25963, + 29261, + 29266, + 29270, + 29232, + 34402, + 21014, + 32927, + 32924, + 32915, + 32956, + 26378, + 32957, + 32945, + 32939, + 32941, + 32948, + 32951, + 32999, + 33000, + 33001, + 33002, + 32987, + 32962, + 32964, + 32985, + 32973, + 32983, + 26384, + 32989, + 33003, + 33009, + 33012, + 33005, + 33037, + 33038, + 33010, + 33020, + 26389, + 33042, + 35930, + 33078, + 33054, + 33068, + 33048, + 33074, + 33096, + 33100, + 33107, + 33140, + 33113, + 33114, + 33137, + 33120, + 33129, + 33148, + 33149, + 33133, + 33127, + 22605, + 23221, + 33160, + 33154, + 33169, + 28373, + 33187, + 33194, + 33228, + 26406, + 33226, + 33211, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 38689, + 38690, + 38691, + 38692, + 38693, + 38694, + 38695, + 38696, + 38697, + 38699, + 38700, + 38702, + 38703, + 38705, + 38707, + 38708, + 38709, + 38710, + 38711, + 38714, + 38715, + 38716, + 38717, + 38719, + 38720, + 38721, + 38722, + 38723, + 38724, + 38725, + 38726, + 38727, + 38728, + 38729, + 38730, + 38731, + 38732, + 38733, + 38734, + 38735, + 38736, + 38737, + 38740, + 38741, + 38743, + 38744, + 38746, + 38748, + 38749, + 38751, + 38755, + 38756, + 38758, + 38759, + 38760, + 38762, + 38763, + 38764, + 38765, + 38766, + 38767, + 38768, + 38769, + null, + 38770, + 38773, + 38775, + 38776, + 38777, + 38778, + 38779, + 38781, + 38782, + 38783, + 38784, + 38785, + 38786, + 38787, + 38788, + 38790, + 38791, + 38792, + 38793, + 38794, + 38796, + 38798, + 38799, + 38800, + 38803, + 38805, + 38806, + 38807, + 38809, + 38810, + 38811, + 38812, + 38813, + 33217, + 33190, + 27428, + 27447, + 27449, + 27459, + 27462, + 27481, + 39121, + 39122, + 39123, + 39125, + 39129, + 39130, + 27571, + 24384, + 27586, + 35315, + 26000, + 40785, + 26003, + 26044, + 26054, + 26052, + 26051, + 26060, + 26062, + 26066, + 26070, + 28800, + 28828, + 28822, + 28829, + 28859, + 28864, + 28855, + 28843, + 28849, + 28904, + 28874, + 28944, + 28947, + 28950, + 28975, + 28977, + 29043, + 29020, + 29032, + 28997, + 29042, + 29002, + 29048, + 29050, + 29080, + 29107, + 29109, + 29096, + 29088, + 29152, + 29140, + 29159, + 29177, + 29213, + 29224, + 28780, + 28952, + 29030, + 29113, + 25150, + 25149, + 25155, + 25160, + 25161, + 31035, + 31040, + 31046, + 31049, + 31067, + 31068, + 31059, + 31066, + 31074, + 31063, + 31072, + 31087, + 31079, + 31098, + 31109, + 31114, + 31130, + 31143, + 31155, + 24529, + 24528, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 38814, + 38815, + 38817, + 38818, + 38820, + 38821, + 38822, + 38823, + 38824, + 38825, + 38826, + 38828, + 38830, + 38832, + 38833, + 38835, + 38837, + 38838, + 38839, + 38840, + 38841, + 38842, + 38843, + 38844, + 38845, + 38846, + 38847, + 38848, + 38849, + 38850, + 38851, + 38852, + 38853, + 38854, + 38855, + 38856, + 38857, + 38858, + 38859, + 38860, + 38861, + 38862, + 38863, + 38864, + 38865, + 38866, + 38867, + 38868, + 38869, + 38870, + 38871, + 38872, + 38873, + 38874, + 38875, + 38876, + 38877, + 38878, + 38879, + 38880, + 38881, + 38882, + 38883, + null, + 38884, + 38885, + 38888, + 38894, + 38895, + 38896, + 38897, + 38898, + 38900, + 38903, + 38904, + 38905, + 38906, + 38907, + 38908, + 38909, + 38910, + 38911, + 38912, + 38913, + 38914, + 38915, + 38916, + 38917, + 38918, + 38919, + 38920, + 38921, + 38922, + 38923, + 38924, + 38925, + 38926, + 24636, + 24669, + 24666, + 24679, + 24641, + 24665, + 24675, + 24747, + 24838, + 24845, + 24925, + 25001, + 24989, + 25035, + 25041, + 25094, + 32896, + 32895, + 27795, + 27894, + 28156, + 30710, + 30712, + 30720, + 30729, + 30743, + 30744, + 30737, + 26027, + 30765, + 30748, + 30749, + 30777, + 30778, + 30779, + 30751, + 30780, + 30757, + 30764, + 30755, + 30761, + 30798, + 30829, + 30806, + 30807, + 30758, + 30800, + 30791, + 30796, + 30826, + 30875, + 30867, + 30874, + 30855, + 30876, + 30881, + 30883, + 30898, + 30905, + 30885, + 30932, + 30937, + 30921, + 30956, + 30962, + 30981, + 30964, + 30995, + 31012, + 31006, + 31028, + 40859, + 40697, + 40699, + 40700, + 30449, + 30468, + 30477, + 30457, + 30471, + 30472, + 30490, + 30498, + 30489, + 30509, + 30502, + 30517, + 30520, + 30544, + 30545, + 30535, + 30531, + 30554, + 30568, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 38927, + 38928, + 38929, + 38930, + 38931, + 38932, + 38933, + 38934, + 38935, + 38936, + 38937, + 38938, + 38939, + 38940, + 38941, + 38942, + 38943, + 38944, + 38945, + 38946, + 38947, + 38948, + 38949, + 38950, + 38951, + 38952, + 38953, + 38954, + 38955, + 38956, + 38957, + 38958, + 38959, + 38960, + 38961, + 38962, + 38963, + 38964, + 38965, + 38966, + 38967, + 38968, + 38969, + 38970, + 38971, + 38972, + 38973, + 38974, + 38975, + 38976, + 38977, + 38978, + 38979, + 38980, + 38981, + 38982, + 38983, + 38984, + 38985, + 38986, + 38987, + 38988, + 38989, + null, + 38990, + 38991, + 38992, + 38993, + 38994, + 38995, + 38996, + 38997, + 38998, + 38999, + 39000, + 39001, + 39002, + 39003, + 39004, + 39005, + 39006, + 39007, + 39008, + 39009, + 39010, + 39011, + 39012, + 39013, + 39014, + 39015, + 39016, + 39017, + 39018, + 39019, + 39020, + 39021, + 39022, + 30562, + 30565, + 30591, + 30605, + 30589, + 30592, + 30604, + 30609, + 30623, + 30624, + 30640, + 30645, + 30653, + 30010, + 30016, + 30030, + 30027, + 30024, + 30043, + 30066, + 30073, + 30083, + 32600, + 32609, + 32607, + 35400, + 32616, + 32628, + 32625, + 32633, + 32641, + 32638, + 30413, + 30437, + 34866, + 38021, + 38022, + 38023, + 38027, + 38026, + 38028, + 38029, + 38031, + 38032, + 38036, + 38039, + 38037, + 38042, + 38043, + 38044, + 38051, + 38052, + 38059, + 38058, + 38061, + 38060, + 38063, + 38064, + 38066, + 38068, + 38070, + 38071, + 38072, + 38073, + 38074, + 38076, + 38077, + 38079, + 38084, + 38088, + 38089, + 38090, + 38091, + 38092, + 38093, + 38094, + 38096, + 38097, + 38098, + 38101, + 38102, + 38103, + 38105, + 38104, + 38107, + 38110, + 38111, + 38112, + 38114, + 38116, + 38117, + 38119, + 38120, + 38122, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 39023, + 39024, + 39025, + 39026, + 39027, + 39028, + 39051, + 39054, + 39058, + 39061, + 39065, + 39075, + 39080, + 39081, + 39082, + 39083, + 39084, + 39085, + 39086, + 39087, + 39088, + 39089, + 39090, + 39091, + 39092, + 39093, + 39094, + 39095, + 39096, + 39097, + 39098, + 39099, + 39100, + 39101, + 39102, + 39103, + 39104, + 39105, + 39106, + 39107, + 39108, + 39109, + 39110, + 39111, + 39112, + 39113, + 39114, + 39115, + 39116, + 39117, + 39119, + 39120, + 39124, + 39126, + 39127, + 39131, + 39132, + 39133, + 39136, + 39137, + 39138, + 39139, + 39140, + null, + 39141, + 39142, + 39145, + 39146, + 39147, + 39148, + 39149, + 39150, + 39151, + 39152, + 39153, + 39154, + 39155, + 39156, + 39157, + 39158, + 39159, + 39160, + 39161, + 39162, + 39163, + 39164, + 39165, + 39166, + 39167, + 39168, + 39169, + 39170, + 39171, + 39172, + 39173, + 39174, + 39175, + 38121, + 38123, + 38126, + 38127, + 38131, + 38132, + 38133, + 38135, + 38137, + 38140, + 38141, + 38143, + 38147, + 38146, + 38150, + 38151, + 38153, + 38154, + 38157, + 38158, + 38159, + 38162, + 38163, + 38164, + 38165, + 38166, + 38168, + 38171, + 38173, + 38174, + 38175, + 38178, + 38186, + 38187, + 38185, + 38188, + 38193, + 38194, + 38196, + 38198, + 38199, + 38200, + 38204, + 38206, + 38207, + 38210, + 38197, + 38212, + 38213, + 38214, + 38217, + 38220, + 38222, + 38223, + 38226, + 38227, + 38228, + 38230, + 38231, + 38232, + 38233, + 38235, + 38238, + 38239, + 38237, + 38241, + 38242, + 38244, + 38245, + 38246, + 38247, + 38248, + 38249, + 38250, + 38251, + 38252, + 38255, + 38257, + 38258, + 38259, + 38202, + 30695, + 30700, + 38601, + 31189, + 31213, + 31203, + 31211, + 31238, + 23879, + 31235, + 31234, + 31262, + 31252, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 39176, + 39177, + 39178, + 39179, + 39180, + 39182, + 39183, + 39185, + 39186, + 39187, + 39188, + 39189, + 39190, + 39191, + 39192, + 39193, + 39194, + 39195, + 39196, + 39197, + 39198, + 39199, + 39200, + 39201, + 39202, + 39203, + 39204, + 39205, + 39206, + 39207, + 39208, + 39209, + 39210, + 39211, + 39212, + 39213, + 39215, + 39216, + 39217, + 39218, + 39219, + 39220, + 39221, + 39222, + 39223, + 39224, + 39225, + 39226, + 39227, + 39228, + 39229, + 39230, + 39231, + 39232, + 39233, + 39234, + 39235, + 39236, + 39237, + 39238, + 39239, + 39240, + 39241, + null, + 39242, + 39243, + 39244, + 39245, + 39246, + 39247, + 39248, + 39249, + 39250, + 39251, + 39254, + 39255, + 39256, + 39257, + 39258, + 39259, + 39260, + 39261, + 39262, + 39263, + 39264, + 39265, + 39266, + 39268, + 39270, + 39283, + 39288, + 39289, + 39291, + 39294, + 39298, + 39299, + 39305, + 31289, + 31287, + 31313, + 40655, + 39333, + 31344, + 30344, + 30350, + 30355, + 30361, + 30372, + 29918, + 29920, + 29996, + 40480, + 40482, + 40488, + 40489, + 40490, + 40491, + 40492, + 40498, + 40497, + 40502, + 40504, + 40503, + 40505, + 40506, + 40510, + 40513, + 40514, + 40516, + 40518, + 40519, + 40520, + 40521, + 40523, + 40524, + 40526, + 40529, + 40533, + 40535, + 40538, + 40539, + 40540, + 40542, + 40547, + 40550, + 40551, + 40552, + 40553, + 40554, + 40555, + 40556, + 40561, + 40557, + 40563, + 30098, + 30100, + 30102, + 30112, + 30109, + 30124, + 30115, + 30131, + 30132, + 30136, + 30148, + 30129, + 30128, + 30147, + 30146, + 30166, + 30157, + 30179, + 30184, + 30182, + 30180, + 30187, + 30183, + 30211, + 30193, + 30204, + 30207, + 30224, + 30208, + 30213, + 30220, + 30231, + 30218, + 30245, + 30232, + 30229, + 30233, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 39308, + 39310, + 39322, + 39323, + 39324, + 39325, + 39326, + 39327, + 39328, + 39329, + 39330, + 39331, + 39332, + 39334, + 39335, + 39337, + 39338, + 39339, + 39340, + 39341, + 39342, + 39343, + 39344, + 39345, + 39346, + 39347, + 39348, + 39349, + 39350, + 39351, + 39352, + 39353, + 39354, + 39355, + 39356, + 39357, + 39358, + 39359, + 39360, + 39361, + 39362, + 39363, + 39364, + 39365, + 39366, + 39367, + 39368, + 39369, + 39370, + 39371, + 39372, + 39373, + 39374, + 39375, + 39376, + 39377, + 39378, + 39379, + 39380, + 39381, + 39382, + 39383, + 39384, + null, + 39385, + 39386, + 39387, + 39388, + 39389, + 39390, + 39391, + 39392, + 39393, + 39394, + 39395, + 39396, + 39397, + 39398, + 39399, + 39400, + 39401, + 39402, + 39403, + 39404, + 39405, + 39406, + 39407, + 39408, + 39409, + 39410, + 39411, + 39412, + 39413, + 39414, + 39415, + 39416, + 39417, + 30235, + 30268, + 30242, + 30240, + 30272, + 30253, + 30256, + 30271, + 30261, + 30275, + 30270, + 30259, + 30285, + 30302, + 30292, + 30300, + 30294, + 30315, + 30319, + 32714, + 31462, + 31352, + 31353, + 31360, + 31366, + 31368, + 31381, + 31398, + 31392, + 31404, + 31400, + 31405, + 31411, + 34916, + 34921, + 34930, + 34941, + 34943, + 34946, + 34978, + 35014, + 34999, + 35004, + 35017, + 35042, + 35022, + 35043, + 35045, + 35057, + 35098, + 35068, + 35048, + 35070, + 35056, + 35105, + 35097, + 35091, + 35099, + 35082, + 35124, + 35115, + 35126, + 35137, + 35174, + 35195, + 30091, + 32997, + 30386, + 30388, + 30684, + 32786, + 32788, + 32790, + 32796, + 32800, + 32802, + 32805, + 32806, + 32807, + 32809, + 32808, + 32817, + 32779, + 32821, + 32835, + 32838, + 32845, + 32850, + 32873, + 32881, + 35203, + 39032, + 39040, + 39043, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 39418, + 39419, + 39420, + 39421, + 39422, + 39423, + 39424, + 39425, + 39426, + 39427, + 39428, + 39429, + 39430, + 39431, + 39432, + 39433, + 39434, + 39435, + 39436, + 39437, + 39438, + 39439, + 39440, + 39441, + 39442, + 39443, + 39444, + 39445, + 39446, + 39447, + 39448, + 39449, + 39450, + 39451, + 39452, + 39453, + 39454, + 39455, + 39456, + 39457, + 39458, + 39459, + 39460, + 39461, + 39462, + 39463, + 39464, + 39465, + 39466, + 39467, + 39468, + 39469, + 39470, + 39471, + 39472, + 39473, + 39474, + 39475, + 39476, + 39477, + 39478, + 39479, + 39480, + null, + 39481, + 39482, + 39483, + 39484, + 39485, + 39486, + 39487, + 39488, + 39489, + 39490, + 39491, + 39492, + 39493, + 39494, + 39495, + 39496, + 39497, + 39498, + 39499, + 39500, + 39501, + 39502, + 39503, + 39504, + 39505, + 39506, + 39507, + 39508, + 39509, + 39510, + 39511, + 39512, + 39513, + 39049, + 39052, + 39053, + 39055, + 39060, + 39066, + 39067, + 39070, + 39071, + 39073, + 39074, + 39077, + 39078, + 34381, + 34388, + 34412, + 34414, + 34431, + 34426, + 34428, + 34427, + 34472, + 34445, + 34443, + 34476, + 34461, + 34471, + 34467, + 34474, + 34451, + 34473, + 34486, + 34500, + 34485, + 34510, + 34480, + 34490, + 34481, + 34479, + 34505, + 34511, + 34484, + 34537, + 34545, + 34546, + 34541, + 34547, + 34512, + 34579, + 34526, + 34548, + 34527, + 34520, + 34513, + 34563, + 34567, + 34552, + 34568, + 34570, + 34573, + 34569, + 34595, + 34619, + 34590, + 34597, + 34606, + 34586, + 34622, + 34632, + 34612, + 34609, + 34601, + 34615, + 34623, + 34690, + 34594, + 34685, + 34686, + 34683, + 34656, + 34672, + 34636, + 34670, + 34699, + 34643, + 34659, + 34684, + 34660, + 34649, + 34661, + 34707, + 34735, + 34728, + 34770, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 39514, + 39515, + 39516, + 39517, + 39518, + 39519, + 39520, + 39521, + 39522, + 39523, + 39524, + 39525, + 39526, + 39527, + 39528, + 39529, + 39530, + 39531, + 39538, + 39555, + 39561, + 39565, + 39566, + 39572, + 39573, + 39577, + 39590, + 39593, + 39594, + 39595, + 39596, + 39597, + 39598, + 39599, + 39602, + 39603, + 39604, + 39605, + 39609, + 39611, + 39613, + 39614, + 39615, + 39619, + 39620, + 39622, + 39623, + 39624, + 39625, + 39626, + 39629, + 39630, + 39631, + 39632, + 39634, + 39636, + 39637, + 39638, + 39639, + 39641, + 39642, + 39643, + 39644, + null, + 39645, + 39646, + 39648, + 39650, + 39651, + 39652, + 39653, + 39655, + 39656, + 39657, + 39658, + 39660, + 39662, + 39664, + 39665, + 39666, + 39667, + 39668, + 39669, + 39670, + 39671, + 39672, + 39674, + 39676, + 39677, + 39678, + 39679, + 39680, + 39681, + 39682, + 39684, + 39685, + 39686, + 34758, + 34696, + 34693, + 34733, + 34711, + 34691, + 34731, + 34789, + 34732, + 34741, + 34739, + 34763, + 34771, + 34749, + 34769, + 34752, + 34762, + 34779, + 34794, + 34784, + 34798, + 34838, + 34835, + 34814, + 34826, + 34843, + 34849, + 34873, + 34876, + 32566, + 32578, + 32580, + 32581, + 33296, + 31482, + 31485, + 31496, + 31491, + 31492, + 31509, + 31498, + 31531, + 31503, + 31559, + 31544, + 31530, + 31513, + 31534, + 31537, + 31520, + 31525, + 31524, + 31539, + 31550, + 31518, + 31576, + 31578, + 31557, + 31605, + 31564, + 31581, + 31584, + 31598, + 31611, + 31586, + 31602, + 31601, + 31632, + 31654, + 31655, + 31672, + 31660, + 31645, + 31656, + 31621, + 31658, + 31644, + 31650, + 31659, + 31668, + 31697, + 31681, + 31692, + 31709, + 31706, + 31717, + 31718, + 31722, + 31756, + 31742, + 31740, + 31759, + 31766, + 31755, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 39687, + 39689, + 39690, + 39691, + 39692, + 39693, + 39694, + 39696, + 39697, + 39698, + 39700, + 39701, + 39702, + 39703, + 39704, + 39705, + 39706, + 39707, + 39708, + 39709, + 39710, + 39712, + 39713, + 39714, + 39716, + 39717, + 39718, + 39719, + 39720, + 39721, + 39722, + 39723, + 39724, + 39725, + 39726, + 39728, + 39729, + 39731, + 39732, + 39733, + 39734, + 39735, + 39736, + 39737, + 39738, + 39741, + 39742, + 39743, + 39744, + 39750, + 39754, + 39755, + 39756, + 39758, + 39760, + 39762, + 39763, + 39765, + 39766, + 39767, + 39768, + 39769, + 39770, + null, + 39771, + 39772, + 39773, + 39774, + 39775, + 39776, + 39777, + 39778, + 39779, + 39780, + 39781, + 39782, + 39783, + 39784, + 39785, + 39786, + 39787, + 39788, + 39789, + 39790, + 39791, + 39792, + 39793, + 39794, + 39795, + 39796, + 39797, + 39798, + 39799, + 39800, + 39801, + 39802, + 39803, + 31775, + 31786, + 31782, + 31800, + 31809, + 31808, + 33278, + 33281, + 33282, + 33284, + 33260, + 34884, + 33313, + 33314, + 33315, + 33325, + 33327, + 33320, + 33323, + 33336, + 33339, + 33331, + 33332, + 33342, + 33348, + 33353, + 33355, + 33359, + 33370, + 33375, + 33384, + 34942, + 34949, + 34952, + 35032, + 35039, + 35166, + 32669, + 32671, + 32679, + 32687, + 32688, + 32690, + 31868, + 25929, + 31889, + 31901, + 31900, + 31902, + 31906, + 31922, + 31932, + 31933, + 31937, + 31943, + 31948, + 31949, + 31944, + 31941, + 31959, + 31976, + 33390, + 26280, + 32703, + 32718, + 32725, + 32741, + 32737, + 32742, + 32745, + 32750, + 32755, + 31992, + 32119, + 32166, + 32174, + 32327, + 32411, + 40632, + 40628, + 36211, + 36228, + 36244, + 36241, + 36273, + 36199, + 36205, + 35911, + 35913, + 37194, + 37200, + 37198, + 37199, + 37220, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 39804, + 39805, + 39806, + 39807, + 39808, + 39809, + 39810, + 39811, + 39812, + 39813, + 39814, + 39815, + 39816, + 39817, + 39818, + 39819, + 39820, + 39821, + 39822, + 39823, + 39824, + 39825, + 39826, + 39827, + 39828, + 39829, + 39830, + 39831, + 39832, + 39833, + 39834, + 39835, + 39836, + 39837, + 39838, + 39839, + 39840, + 39841, + 39842, + 39843, + 39844, + 39845, + 39846, + 39847, + 39848, + 39849, + 39850, + 39851, + 39852, + 39853, + 39854, + 39855, + 39856, + 39857, + 39858, + 39859, + 39860, + 39861, + 39862, + 39863, + 39864, + 39865, + 39866, + null, + 39867, + 39868, + 39869, + 39870, + 39871, + 39872, + 39873, + 39874, + 39875, + 39876, + 39877, + 39878, + 39879, + 39880, + 39881, + 39882, + 39883, + 39884, + 39885, + 39886, + 39887, + 39888, + 39889, + 39890, + 39891, + 39892, + 39893, + 39894, + 39895, + 39896, + 39897, + 39898, + 39899, + 37218, + 37217, + 37232, + 37225, + 37231, + 37245, + 37246, + 37234, + 37236, + 37241, + 37260, + 37253, + 37264, + 37261, + 37265, + 37282, + 37283, + 37290, + 37293, + 37294, + 37295, + 37301, + 37300, + 37306, + 35925, + 40574, + 36280, + 36331, + 36357, + 36441, + 36457, + 36277, + 36287, + 36284, + 36282, + 36292, + 36310, + 36311, + 36314, + 36318, + 36302, + 36303, + 36315, + 36294, + 36332, + 36343, + 36344, + 36323, + 36345, + 36347, + 36324, + 36361, + 36349, + 36372, + 36381, + 36383, + 36396, + 36398, + 36387, + 36399, + 36410, + 36416, + 36409, + 36405, + 36413, + 36401, + 36425, + 36417, + 36418, + 36433, + 36434, + 36426, + 36464, + 36470, + 36476, + 36463, + 36468, + 36485, + 36495, + 36500, + 36496, + 36508, + 36510, + 35960, + 35970, + 35978, + 35973, + 35992, + 35988, + 26011, + 35286, + 35294, + 35290, + 35292, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 39900, + 39901, + 39902, + 39903, + 39904, + 39905, + 39906, + 39907, + 39908, + 39909, + 39910, + 39911, + 39912, + 39913, + 39914, + 39915, + 39916, + 39917, + 39918, + 39919, + 39920, + 39921, + 39922, + 39923, + 39924, + 39925, + 39926, + 39927, + 39928, + 39929, + 39930, + 39931, + 39932, + 39933, + 39934, + 39935, + 39936, + 39937, + 39938, + 39939, + 39940, + 39941, + 39942, + 39943, + 39944, + 39945, + 39946, + 39947, + 39948, + 39949, + 39950, + 39951, + 39952, + 39953, + 39954, + 39955, + 39956, + 39957, + 39958, + 39959, + 39960, + 39961, + 39962, + null, + 39963, + 39964, + 39965, + 39966, + 39967, + 39968, + 39969, + 39970, + 39971, + 39972, + 39973, + 39974, + 39975, + 39976, + 39977, + 39978, + 39979, + 39980, + 39981, + 39982, + 39983, + 39984, + 39985, + 39986, + 39987, + 39988, + 39989, + 39990, + 39991, + 39992, + 39993, + 39994, + 39995, + 35301, + 35307, + 35311, + 35390, + 35622, + 38739, + 38633, + 38643, + 38639, + 38662, + 38657, + 38664, + 38671, + 38670, + 38698, + 38701, + 38704, + 38718, + 40832, + 40835, + 40837, + 40838, + 40839, + 40840, + 40841, + 40842, + 40844, + 40702, + 40715, + 40717, + 38585, + 38588, + 38589, + 38606, + 38610, + 30655, + 38624, + 37518, + 37550, + 37576, + 37694, + 37738, + 37834, + 37775, + 37950, + 37995, + 40063, + 40066, + 40069, + 40070, + 40071, + 40072, + 31267, + 40075, + 40078, + 40080, + 40081, + 40082, + 40084, + 40085, + 40090, + 40091, + 40094, + 40095, + 40096, + 40097, + 40098, + 40099, + 40101, + 40102, + 40103, + 40104, + 40105, + 40107, + 40109, + 40110, + 40112, + 40113, + 40114, + 40115, + 40116, + 40117, + 40118, + 40119, + 40122, + 40123, + 40124, + 40125, + 40132, + 40133, + 40134, + 40135, + 40138, + 40139, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 39996, + 39997, + 39998, + 39999, + 40000, + 40001, + 40002, + 40003, + 40004, + 40005, + 40006, + 40007, + 40008, + 40009, + 40010, + 40011, + 40012, + 40013, + 40014, + 40015, + 40016, + 40017, + 40018, + 40019, + 40020, + 40021, + 40022, + 40023, + 40024, + 40025, + 40026, + 40027, + 40028, + 40029, + 40030, + 40031, + 40032, + 40033, + 40034, + 40035, + 40036, + 40037, + 40038, + 40039, + 40040, + 40041, + 40042, + 40043, + 40044, + 40045, + 40046, + 40047, + 40048, + 40049, + 40050, + 40051, + 40052, + 40053, + 40054, + 40055, + 40056, + 40057, + 40058, + null, + 40059, + 40061, + 40062, + 40064, + 40067, + 40068, + 40073, + 40074, + 40076, + 40079, + 40083, + 40086, + 40087, + 40088, + 40089, + 40093, + 40106, + 40108, + 40111, + 40121, + 40126, + 40127, + 40128, + 40129, + 40130, + 40136, + 40137, + 40145, + 40146, + 40154, + 40155, + 40160, + 40161, + 40140, + 40141, + 40142, + 40143, + 40144, + 40147, + 40148, + 40149, + 40151, + 40152, + 40153, + 40156, + 40157, + 40159, + 40162, + 38780, + 38789, + 38801, + 38802, + 38804, + 38831, + 38827, + 38819, + 38834, + 38836, + 39601, + 39600, + 39607, + 40536, + 39606, + 39610, + 39612, + 39617, + 39616, + 39621, + 39618, + 39627, + 39628, + 39633, + 39749, + 39747, + 39751, + 39753, + 39752, + 39757, + 39761, + 39144, + 39181, + 39214, + 39253, + 39252, + 39647, + 39649, + 39654, + 39663, + 39659, + 39675, + 39661, + 39673, + 39688, + 39695, + 39699, + 39711, + 39715, + 40637, + 40638, + 32315, + 40578, + 40583, + 40584, + 40587, + 40594, + 37846, + 40605, + 40607, + 40667, + 40668, + 40669, + 40672, + 40671, + 40674, + 40681, + 40679, + 40677, + 40682, + 40687, + 40738, + 40748, + 40751, + 40761, + 40759, + 40765, + 40766, + 40772, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 40163, + 40164, + 40165, + 40166, + 40167, + 40168, + 40169, + 40170, + 40171, + 40172, + 40173, + 40174, + 40175, + 40176, + 40177, + 40178, + 40179, + 40180, + 40181, + 40182, + 40183, + 40184, + 40185, + 40186, + 40187, + 40188, + 40189, + 40190, + 40191, + 40192, + 40193, + 40194, + 40195, + 40196, + 40197, + 40198, + 40199, + 40200, + 40201, + 40202, + 40203, + 40204, + 40205, + 40206, + 40207, + 40208, + 40209, + 40210, + 40211, + 40212, + 40213, + 40214, + 40215, + 40216, + 40217, + 40218, + 40219, + 40220, + 40221, + 40222, + 40223, + 40224, + 40225, + null, + 40226, + 40227, + 40228, + 40229, + 40230, + 40231, + 40232, + 40233, + 40234, + 40235, + 40236, + 40237, + 40238, + 40239, + 40240, + 40241, + 40242, + 40243, + 40244, + 40245, + 40246, + 40247, + 40248, + 40249, + 40250, + 40251, + 40252, + 40253, + 40254, + 40255, + 40256, + 40257, + 40258, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 40259, + 40260, + 40261, + 40262, + 40263, + 40264, + 40265, + 40266, + 40267, + 40268, + 40269, + 40270, + 40271, + 40272, + 40273, + 40274, + 40275, + 40276, + 40277, + 40278, + 40279, + 40280, + 40281, + 40282, + 40283, + 40284, + 40285, + 40286, + 40287, + 40288, + 40289, + 40290, + 40291, + 40292, + 40293, + 40294, + 40295, + 40296, + 40297, + 40298, + 40299, + 40300, + 40301, + 40302, + 40303, + 40304, + 40305, + 40306, + 40307, + 40308, + 40309, + 40310, + 40311, + 40312, + 40313, + 40314, + 40315, + 40316, + 40317, + 40318, + 40319, + 40320, + 40321, + null, + 40322, + 40323, + 40324, + 40325, + 40326, + 40327, + 40328, + 40329, + 40330, + 40331, + 40332, + 40333, + 40334, + 40335, + 40336, + 40337, + 40338, + 40339, + 40340, + 40341, + 40342, + 40343, + 40344, + 40345, + 40346, + 40347, + 40348, + 40349, + 40350, + 40351, + 40352, + 40353, + 40354, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 40355, + 40356, + 40357, + 40358, + 40359, + 40360, + 40361, + 40362, + 40363, + 40364, + 40365, + 40366, + 40367, + 40368, + 40369, + 40370, + 40371, + 40372, + 40373, + 40374, + 40375, + 40376, + 40377, + 40378, + 40379, + 40380, + 40381, + 40382, + 40383, + 40384, + 40385, + 40386, + 40387, + 40388, + 40389, + 40390, + 40391, + 40392, + 40393, + 40394, + 40395, + 40396, + 40397, + 40398, + 40399, + 40400, + 40401, + 40402, + 40403, + 40404, + 40405, + 40406, + 40407, + 40408, + 40409, + 40410, + 40411, + 40412, + 40413, + 40414, + 40415, + 40416, + 40417, + null, + 40418, + 40419, + 40420, + 40421, + 40422, + 40423, + 40424, + 40425, + 40426, + 40427, + 40428, + 40429, + 40430, + 40431, + 40432, + 40433, + 40434, + 40435, + 40436, + 40437, + 40438, + 40439, + 40440, + 40441, + 40442, + 40443, + 40444, + 40445, + 40446, + 40447, + 40448, + 40449, + 40450, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 40451, + 40452, + 40453, + 40454, + 40455, + 40456, + 40457, + 40458, + 40459, + 40460, + 40461, + 40462, + 40463, + 40464, + 40465, + 40466, + 40467, + 40468, + 40469, + 40470, + 40471, + 40472, + 40473, + 40474, + 40475, + 40476, + 40477, + 40478, + 40484, + 40487, + 40494, + 40496, + 40500, + 40507, + 40508, + 40512, + 40525, + 40528, + 40530, + 40531, + 40532, + 40534, + 40537, + 40541, + 40543, + 40544, + 40545, + 40546, + 40549, + 40558, + 40559, + 40562, + 40564, + 40565, + 40566, + 40567, + 40568, + 40569, + 40570, + 40571, + 40572, + 40573, + 40576, + null, + 40577, + 40579, + 40580, + 40581, + 40582, + 40585, + 40586, + 40588, + 40589, + 40590, + 40591, + 40592, + 40593, + 40596, + 40597, + 40598, + 40599, + 40600, + 40601, + 40602, + 40603, + 40604, + 40606, + 40608, + 40609, + 40610, + 40611, + 40612, + 40613, + 40615, + 40616, + 40617, + 40618, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 40619, + 40620, + 40621, + 40622, + 40623, + 40624, + 40625, + 40626, + 40627, + 40629, + 40630, + 40631, + 40633, + 40634, + 40636, + 40639, + 40640, + 40641, + 40642, + 40643, + 40645, + 40646, + 40647, + 40648, + 40650, + 40651, + 40652, + 40656, + 40658, + 40659, + 40661, + 40662, + 40663, + 40665, + 40666, + 40670, + 40673, + 40675, + 40676, + 40678, + 40680, + 40683, + 40684, + 40685, + 40686, + 40688, + 40689, + 40690, + 40691, + 40692, + 40693, + 40694, + 40695, + 40696, + 40698, + 40701, + 40703, + 40704, + 40705, + 40706, + 40707, + 40708, + 40709, + null, + 40710, + 40711, + 40712, + 40713, + 40714, + 40716, + 40719, + 40721, + 40722, + 40724, + 40725, + 40726, + 40728, + 40730, + 40731, + 40732, + 40733, + 40734, + 40735, + 40737, + 40739, + 40740, + 40741, + 40742, + 40743, + 40744, + 40745, + 40746, + 40747, + 40749, + 40750, + 40752, + 40753, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 40754, + 40755, + 40756, + 40757, + 40758, + 40760, + 40762, + 40764, + 40767, + 40768, + 40769, + 40770, + 40771, + 40773, + 40774, + 40775, + 40776, + 40777, + 40778, + 40779, + 40780, + 40781, + 40782, + 40783, + 40786, + 40787, + 40788, + 40789, + 40790, + 40791, + 40792, + 40793, + 40794, + 40795, + 40796, + 40797, + 40798, + 40799, + 40800, + 40801, + 40802, + 40803, + 40804, + 40805, + 40806, + 40807, + 40808, + 40809, + 40810, + 40811, + 40812, + 40813, + 40814, + 40815, + 40816, + 40817, + 40818, + 40819, + 40820, + 40821, + 40822, + 40823, + 40824, + null, + 40825, + 40826, + 40827, + 40828, + 40829, + 40830, + 40833, + 40834, + 40845, + 40846, + 40847, + 40848, + 40849, + 40850, + 40851, + 40852, + 40853, + 40854, + 40855, + 40856, + 40860, + 40861, + 40862, + 40865, + 40866, + 40867, + 40868, + 40869, + 63788, + 63865, + 63893, + 63975, + 63985, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + 64012, + 64013, + 64014, + 64015, + 64017, + 64019, + 64020, + 64024, + 64031, + 64032, + 64033, + 64035, + 64036, + 64039, + 64040, + 64041, + 59413, + 59414, + 59415, + 59416, + 59417, + 59418, + 59419, + 59420, + 59421, + 59422, + 59423, + 59424, + 59425, + 59426, + 59427, + 59428, + 59429, + 59430, + 59431, + 59432, + 59433, + 59434, + 59435, + 59436, + 59437, + 59438, + 59439, + 59440, + 59441, + 59442, + 59443, + 59444, + 59445, + 59446, + 59447, + 59448, + 59449, + 59450, + 59451, + 59452, + 59453, + 59454, + 59455, + 59456, + 59457, + 59458, + 59459, + null, + 59460, + 59461, + 59462, + 59463, + 59464, + 59465, + 59466, + 59467, + 59468, + 59469, + 59470, + 59471, + 59472, + 59473, + 59474, + 59475, + 59476, + 59477, + 59478, + 59479, + 59480, + 59481, + 59482, + 59483, + 59484, + 59485, + 59486, + 59487, + 59488, + 59489, + 59490, + 59491, + 59492, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null +] +export {gbk_us} \ No newline at end of file diff --git a/cat/tjs/lib/hls.js b/cat/tjs/lib/hls.js new file mode 100644 index 0000000..2f1e08a --- /dev/null +++ b/cat/tjs/lib/hls.js @@ -0,0 +1,940 @@ +/* +* @File : hls.js.js +* @Author : jade +* @Date : 2024/2/5 16:07 +* @Email : jadehh@1ive.com +* @Software : Samples +* @Desc : +*/ +let t = {}; + +function e(e) { + if (t.strictMode) throw e; + t.silent || console.error(e.message) +} + +function s(t, ...s) { + for (const [i, n] of s.entries()) n || e(new Error(`${t} : Failed at [${i}]`)) +} + +function i(...t) { + for (const [s, [i, n]] of t.entries()) i && (n || e(new Error(`Conditional Assert : Failed at [${s}]`))) +} + +function n(...t) { + for (const [s, i] of t.entries()) void 0 === i && e(new Error(`Param Check : Failed at [${s}]`)) +} + +function a(...t) { + for (const [s, [i, n]] of t.entries()) i && void 0 === n && e(new Error(`Conditional Param Check : Failed at [${s}]`)) +} + +function r(t) { + e(new Error(`Invalid Playlist : ${t}`)) +} + +function o(t, e = 10) { + if ("number" == typeof t) return t; + const s = 10 === e ? Number.parseFloat(t) : Number.parseInt(t, e); + return Number.isNaN(s) ? 0 : s +} + +function E(t) { + (t.startsWith("0x") || t.startsWith("0X")) && (t = t.slice(2)); + const e = new Uint8Array(t.length / 2); + for (let s = 0; s < t.length; s += 2) e[s / 2] = o(t.slice(s, s + 2), 16); + return e +} + +function T(t, s = 0, i = t.length) { + i <= s && e(new Error(`end must be larger than start : start=${s}, end=${i}`)); + const n = []; + for (let e = s; e < i; e++) n.push(`0${(255 & t[e]).toString(16).toUpperCase()}`.slice(-2)); + return `0x${n.join("")}` +} + +function u(t, e, s = 0) { + let i = -1; + for (let n = 0, a = 0; n < t.length; n++) if (t[n] === e) { + if (a++ === s) return [t.slice(0, n), t.slice(n + 1)]; + i = n + } + return -1 !== i ? [t.slice(0, i), t.slice(i + 1)] : [t] +} + +function c(t) { + const e = []; + let s = !1; + for (const i of t) "-" !== i && "_" !== i ? s ? (e.push(i.toUpperCase()), s = !1) : e.push(i.toLowerCase()) : s = !0; + return e.join("") +} + +function l(t) { + return `${t.getUTCFullYear()}-${("0" + (t.getUTCMonth() + 1)).slice(-2)}-${("0" + t.getUTCDate()).slice(-2)}T${("0" + t.getUTCHours()).slice(-2)}:${("0" + t.getUTCMinutes()).slice(-2)}:${("0" + t.getUTCSeconds()).slice(-2)}.${("00" + t.getUTCMilliseconds()).slice(-3)}Z` +} + +function h(e = {}) { + t = Object.assign(t, e) +} + +function X() { + return Object.assign({}, t) +} + +function p(t, e) { + e = Math.trunc(e) || 0; + const s = t.length >>> 0; + if (e < 0 && (e = s + e), !(e < 0 || e >= s)) return t[e] +} + +class I { + constructor({ + type: t, + uri: e, + groupId: s, + language: a, + assocLanguage: r, + name: o, + isDefault: E, + autoselect: T, + forced: u, + instreamId: c, + characteristics: l, + channels: h + }) { + n(t, s, o), i(["SUBTITLES" === t, e], ["CLOSED-CAPTIONS" === t, c], ["CLOSED-CAPTIONS" === t, !e], [u, "SUBTITLES" === t]), this.type = t, this.uri = e, this.groupId = s, this.language = a, this.assocLanguage = r, this.name = o, this.isDefault = E, this.autoselect = T, this.forced = u, this.instreamId = c, this.characteristics = l, this.channels = h + } +} + +class N { + constructor({ + uri: t, + isIFrameOnly: e = !1, + bandwidth: s, + averageBandwidth: i, + score: a, + codecs: r, + resolution: o, + frameRate: E, + hdcpLevel: T, + allowedCpc: u, + videoRange: c, + stableVariantId: l, + programId: h, + audio: X = [], + video: p = [], + subtitles: I = [], + closedCaptions: N = [], + currentRenditions: d = {audio: 0, video: 0, subtitles: 0, closedCaptions: 0} + }) { + n(t, s), this.uri = t, this.isIFrameOnly = e, this.bandwidth = s, this.averageBandwidth = i, this.score = a, this.codecs = r, this.resolution = o, this.frameRate = E, this.hdcpLevel = T, this.allowedCpc = u, this.videoRange = c, this.stableVariantId = l, this.programId = h, this.audio = X, this.video = p, this.subtitles = I, this.closedCaptions = N, this.currentRenditions = d + } +} + +class d { + constructor({id: t, value: e, uri: i, language: a}) { + n(t, e || i), s("SessionData cannot have both value and uri, shoud be either.", !(e && i)), this.id = t, this.value = e, this.uri = i, this.language = a + } +} + +class A { + constructor({method: t, uri: e, iv: s, format: r, formatVersion: o}) { + n(t), a(["NONE" !== t, e]), i(["NONE" === t, !(e || s || r || o)]), this.method = t, this.uri = e, this.iv = s, this.format = r, this.formatVersion = o + } +} + +class f { + constructor({hint: t = !1, uri: e, mimeType: s, byterange: i}) { + n(e), this.hint = t, this.uri = e, this.mimeType = s, this.byterange = i + } +} + +class S { + constructor({ + id: t, + classId: e, + start: s, + end: r, + duration: o, + plannedDuration: E, + endOnNext: T, + attributes: u = {} + }) { + n(t), a([!0 === T, e]), i([r, s], [r, s <= r], [o, o >= 0], [E, E >= 0]), this.id = t, this.classId = e, this.start = s, this.end = r, this.duration = o, this.plannedDuration = E, this.endOnNext = T, this.attributes = u + } +} + +class R { + constructor({type: t, duration: e, tagName: s, value: i}) { + n(t), a(["OUT" === t, e]), a(["RAW" === t, s]), this.type = t, this.duration = e, this.tagName = s, this.value = i + } +} + +class m { + constructor(t) { + n(t), this.type = t + } +} + +class g extends m { + constructor({isMasterPlaylist: t, uri: e, version: s, independentSegments: i = !1, start: a, source: r}) { + super("playlist"), n(t), this.isMasterPlaylist = t, this.uri = e, this.version = s, this.independentSegments = i, this.start = a, this.source = r + } +} + +class O extends g { + constructor(t = {}) { + super(Object.assign(Object.assign({}, t), {isMasterPlaylist: !0})); + const {variants: e = [], currentVariant: s, sessionDataList: i = [], sessionKeyList: n = []} = t; + this.variants = e, this.currentVariant = s, this.sessionDataList = i, this.sessionKeyList = n + } +} + +class D extends g { + constructor(t = {}) { + super(Object.assign(Object.assign({}, t), {isMasterPlaylist: !1})); + const { + targetDuration: e, + mediaSequenceBase: s = 0, + discontinuitySequenceBase: i = 0, + endlist: n = !1, + playlistType: a, + isIFrame: r, + segments: o = [], + prefetchSegments: E = [], + lowLatencyCompatibility: T, + partTargetDuration: u, + renditionReports: c = [], + skip: l = 0, + hash: h + } = t; + this.targetDuration = e, this.mediaSequenceBase = s, this.discontinuitySequenceBase = i, this.endlist = n, this.playlistType = a, this.isIFrame = r, this.segments = o, this.prefetchSegments = E, this.lowLatencyCompatibility = T, this.partTargetDuration = u, this.renditionReports = c, this.skip = l, this.hash = h + } +} + +class P extends m { + constructor({ + uri: t, + mimeType: e, + data: s, + duration: i, + title: n, + byterange: a, + discontinuity: r, + mediaSequenceNumber: o = 0, + discontinuitySequence: E = 0, + key: T, + map: u, + programDateTime: c, + dateRange: l, + markers: h = [], + parts: X = [] + }) { + super("segment"), this.uri = t, this.mimeType = e, this.data = s, this.duration = i, this.title = n, this.byterange = a, this.discontinuity = r, this.mediaSequenceNumber = o, this.discontinuitySequence = E, this.key = T, this.map = u, this.programDateTime = c, this.dateRange = l, this.markers = h, this.parts = X + } +} + +class y extends m { + constructor({hint: t = !1, uri: e, duration: s, independent: i, byterange: a, gap: r}) { + super("part"), n(e), this.hint = t, this.uri = e, this.duration = s, this.independent = i, this.duration = s, this.byterange = a, this.gap = r + } +} + +class C extends m { + constructor({uri: t, discontinuity: e, mediaSequenceNumber: s = 0, discontinuitySequence: i = 0, key: a}) { + super("prefetch"), n(t), this.uri = t, this.discontinuity = e, this.mediaSequenceNumber = s, this.discontinuitySequence = i, this.key = a + } +} + +class U { + constructor({uri: t, lastMSN: e, lastPart: s}) { + n(t), this.uri = t, this.lastMSN = e, this.lastPart = s + } +} + +var M = Object.freeze({ + __proto__: null, + Rendition: I, + Variant: N, + SessionData: d, + Key: A, + MediaInitializationSection: f, + DateRange: S, + SpliceInfo: R, + Playlist: g, + MasterPlaylist: O, + MediaPlaylist: D, + Segment: P, + PartialSegment: y, + PrefetchSegment: C, + RenditionReport: U +}); + +function b(t) { + return function (t, e = " ") { + return t ? (t = t.trim(), " " === e || (t.startsWith(e) && (t = t.slice(1)), t.endsWith(e) && (t = t.slice(0, -1))), t) : t + }(t, '"') +} + +function L(t) { + const e = u(t, ","); + return {duration: o(e[0]), title: decodeURIComponent(escape(e[1]))} +} + +function v(t) { + const e = u(t, "@"); + return {length: o(e[0]), offset: e[1] ? o(e[1]) : -1} +} + +function $(t) { + const e = u(t, "x"); + return {width: o(e[0]), height: o(e[1])} +} + +function Y(t) { + const e = "ALLOWED-CPC: Each entry must consit of KEYFORMAT and Content Protection Configuration", s = t.split(","); + 0 === s.length && r(e); + const i = []; + for (const t of s) { + const [s, n] = u(t, ":"); + s && n ? i.push({format: s, cpcList: n.split("/")}) : r(e) + } + return i +} + +function F(t) { + const e = E(t); + return 16 !== e.length && r("IV must be a 128-bit unsigned integer"), e +} + +function G(t, e) { + e.IV && t.compatibleVersion < 2 && (t.compatibleVersion = 2), (e.KEYFORMAT || e.KEYFORMATVERSIONS) && t.compatibleVersion < 5 && (t.compatibleVersion = 5) +} + +function V(t) { + const e = {}; + for (const i of function (t) { + const e = []; + let s = !0, i = 0; + const n = []; + for (let a = 0; a < t.length; a++) { + const r = t[a]; + s && "," === r ? (e.push(t.slice(i, a).trim()), i = a + 1) : '"' !== r && "'" !== r || (s ? (n.push(r), s = !1) : r === p(n, -1) ? (n.pop(), s = !0) : n.push(r)) + } + return e.push(t.slice(i).trim()), e + }(t)) { + const [t, n] = u(i, "="), a = b(n); + switch (t) { + case"URI": + e[t] = a; + break; + case"START-DATE": + case"END-DATE": + e[t] = new Date(a); + break; + case"IV": + e[t] = F(a); + break; + case"BYTERANGE": + e[t] = v(a); + break; + case"RESOLUTION": + e[t] = $(a); + break; + case"ALLOWED-CPC": + e[t] = Y(a); + break; + case"END-ON-NEXT": + case"DEFAULT": + case"AUTOSELECT": + case"FORCED": + case"PRECISE": + case"CAN-BLOCK-RELOAD": + case"INDEPENDENT": + case"GAP": + e[t] = "YES" === a; + break; + case"DURATION": + case"PLANNED-DURATION": + case"BANDWIDTH": + case"AVERAGE-BANDWIDTH": + case"FRAME-RATE": + case"TIME-OFFSET": + case"CAN-SKIP-UNTIL": + case"HOLD-BACK": + case"PART-HOLD-BACK": + case"PART-TARGET": + case"BYTERANGE-START": + case"BYTERANGE-LENGTH": + case"LAST-MSN": + case"LAST-PART": + case"SKIPPED-SEGMENTS": + case"SCORE": + case"PROGRAM-ID": + e[t] = o(a); + break; + default: + t.startsWith("SCTE35-") ? e[t] = E(a) : t.startsWith("X-") ? e[t] = (s = n).startsWith('"') ? b(s) : s.startsWith("0x") || s.startsWith("0X") ? E(s) : o(s) : ("VIDEO-RANGE" === t && "SDR" !== a && "HLG" !== a && "PQ" !== a && r(`VIDEO-RANGE: unknown value "${a}"`), e[t] = a) + } + } + var s; + return e +} + +function w() { + r("The file contains both media and master playlist tags.") +} + +function B(t, e, s) { + const i = function ({attributes: t}) { + return new I({ + type: t.TYPE, + uri: t.URI, + groupId: t["GROUP-ID"], + language: t.LANGUAGE, + assocLanguage: t["ASSOC-LANGUAGE"], + name: t.NAME, + isDefault: t.DEFAULT, + autoselect: t.AUTOSELECT, + forced: t.FORCED, + instreamId: t["INSTREAM-ID"], + characteristics: t.CHARACTERISTICS, + channels: t.CHANNELS + }) + }(e), n = t[c(s)], a = function (t, e) { + let s = !1; + for (const i of t) { + if (i.name === e.name) return "All EXT-X-MEDIA tags in the same Group MUST have different NAME attributes."; + i.isDefault && (s = !0) + } + return s && e.isDefault ? "EXT-X-MEDIA A Group MUST NOT have more than one member with a DEFAULT attribute of YES." : "" + }(n, i); + a && r(a), n.push(i), i.isDefault && (t.currentRenditions[c(s)] = n.length - 1) +} + +function H(t, e, s, i, n) { + const a = new N({ + uri: s, + bandwidth: e.BANDWIDTH, + averageBandwidth: e["AVERAGE-BANDWIDTH"], + score: e.SCORE, + codecs: e.CODECS, + resolution: e.RESOLUTION, + frameRate: e["FRAME-RATE"], + hdcpLevel: e["HDCP-LEVEL"], + allowedCpc: e["ALLOWED-CPC"], + videoRange: e["VIDEO-RANGE"], + stableVariantId: e["STABLE-VARIANT-ID"], + programId: e["PROGRAM-ID"] + }); + for (const s of t) if ("EXT-X-MEDIA" === s.name) { + const t = s.attributes, i = t.TYPE; + if (i && t["GROUP-ID"] || r("EXT-X-MEDIA TYPE attribute is REQUIRED."), e[i] === t["GROUP-ID"] && (B(a, s, i), "CLOSED-CAPTIONS" === i)) for (const {instreamId: t} of a.closedCaptions) if (t && t.startsWith("SERVICE") && n.compatibleVersion < 7) { + n.compatibleVersion = 7; + break + } + } + return function (t, e, s) { + for (const i of ["AUDIO", "VIDEO", "SUBTITLES", "CLOSED-CAPTIONS"]) "CLOSED-CAPTIONS" === i && "NONE" === t[i] ? (s.isClosedCaptionsNone = !0, e.closedCaptions = []) : t[i] && !e[c(i)].some((e => e.groupId === t[i])) && r(`${i} attribute MUST match the value of the GROUP-ID attribute of an EXT-X-MEDIA tag whose TYPE attribute is ${i}.`) + }(e, a, n), a.isIFrameOnly = i, a +} + +function K(t, e) { + if (t.method !== e.method) return !1; + if (t.uri !== e.uri) return !1; + if (t.iv) { + if (!e.iv) return !1; + if (t.iv.length !== e.iv.length) return !1; + for (let s = 0; s < t.iv.length; s++) if (t.iv[s] !== e.iv[s]) return !1 + } else if (e.iv) return !1; + return t.format === e.format && t.formatVersion === e.formatVersion +} + +function k(t, e, s, i, n, a, o) { + const E = new P({uri: e, mediaSequenceNumber: n, discontinuitySequence: a}); + let T = !1, u = !1; + for (let e = s; e <= i; e++) { + const {name: s, value: i, attributes: n} = t[e]; + if ("EXTINF" === s) !Number.isInteger(i.duration) && o.compatibleVersion < 3 && (o.compatibleVersion = 3), Math.round(i.duration) > o.targetDuration && r("EXTINF duration, when rounded to the nearest integer, MUST be less than or equal to the target duration"), E.duration = i.duration, E.title = i.title; else if ("EXT-X-BYTERANGE" === s) o.compatibleVersion < 4 && (o.compatibleVersion = 4), E.byterange = i; else if ("EXT-X-DISCONTINUITY" === s) E.parts.length > 0 && r("EXT-X-DISCONTINUITY must appear before the first EXT-X-PART tag of the Parent Segment."), E.discontinuity = !0; else if ("EXT-X-KEY" === s) E.parts.length > 0 && r("EXT-X-KEY must appear before the first EXT-X-PART tag of the Parent Segment."), G(o, n), E.key = new A({ + method: n.METHOD, + uri: n.URI, + iv: n.IV, + format: n.KEYFORMAT, + formatVersion: n.KEYFORMATVERSIONS + }); else if ("EXT-X-MAP" === s) E.parts.length > 0 && r("EXT-X-MAP must appear before the first EXT-X-PART tag of the Parent Segment."), o.compatibleVersion < 5 && (o.compatibleVersion = 5), o.hasMap = !0, E.map = new f({ + uri: n.URI, + byterange: n.BYTERANGE + }); else if ("EXT-X-PROGRAM-DATE-TIME" === s) E.programDateTime = i; else if ("EXT-X-DATERANGE" === s) { + const t = {}; + for (const e of Object.keys(n)) (e.startsWith("SCTE35-") || e.startsWith("X-")) && (t[e] = n[e]); + E.dateRange = new S({ + id: n.ID, + classId: n.CLASS, + start: n["START-DATE"], + end: n["END-DATE"], + duration: n.DURATION, + plannedDuration: n["PLANNED-DURATION"], + endOnNext: n["END-ON-NEXT"], + attributes: t + }) + } else if ("EXT-X-CUE-OUT" === s) E.markers.push(new R({ + type: "OUT", + duration: n && n.DURATION || i + })); else if ("EXT-X-CUE-IN" === s) E.markers.push(new R({type: "IN"})); else if ("EXT-X-CUE-OUT-CONT" === s || "EXT-X-CUE" === s || "EXT-OATCLS-SCTE35" === s || "EXT-X-ASSET" === s || "EXT-X-SCTE35" === s) E.markers.push(new R({ + type: "RAW", + tagName: s, + value: i + })); else if ("EXT-X-PRELOAD-HINT" !== s || n.TYPE) if ("EXT-X-PRELOAD-HINT" === s && "PART" === n.TYPE && u) r("Servers should not add more than one EXT-X-PRELOAD-HINT tag with the same TYPE attribute to a Playlist."); else if ("EXT-X-PART" !== s && "EXT-X-PRELOAD-HINT" !== s || n.URI) { + if ("EXT-X-PRELOAD-HINT" === s && "MAP" === n.TYPE) T && r("Servers should not add more than one EXT-X-PRELOAD-HINT tag with the same TYPE attribute to a Playlist."), T = !0, o.hasMap = !0, E.map = new f({ + hint: !0, + uri: n.URI, + byterange: {length: n["BYTERANGE-LENGTH"], offset: n["BYTERANGE-START"] || 0} + }); else if ("EXT-X-PART" === s || "EXT-X-PRELOAD-HINT" === s && "PART" === n.TYPE) { + "EXT-X-PART" !== s || n.DURATION || r("EXT-X-PART: DURATION attribute is mandatory"), "EXT-X-PRELOAD-HINT" === s && (u = !0); + const t = new y({ + hint: "EXT-X-PRELOAD-HINT" === s, + uri: n.URI, + byterange: "EXT-X-PART" === s ? n.BYTERANGE : { + length: n["BYTERANGE-LENGTH"], + offset: n["BYTERANGE-START"] || 0 + }, + duration: n.DURATION, + independent: n.INDEPENDENT, + gap: n.GAP + }); + E.parts.push(t) + } + } else r("EXT-X-PART / EXT-X-PRELOAD-HINT: URI attribute is mandatory"); else r("EXT-X-PRELOAD-HINT: TYPE attribute is mandatory") + } + return E +} + +function W(t, e, s, i, n, a, o) { + const E = new C({uri: e, mediaSequenceNumber: n, discontinuitySequence: a}); + for (let e = s; e <= i; e++) { + const {name: s, attributes: i} = t[e]; + "EXTINF" === s ? r("A prefetch segment must not be advertised with an EXTINF tag.") : "EXT-X-DISCONTINUITY" === s ? r("A prefetch segment must not be advertised with an EXT-X-DISCONTINUITY tag.") : "EXT-X-PREFETCH-DISCONTINUITY" === s ? E.discontinuity = !0 : "EXT-X-KEY" === s ? (G(o, i), E.key = new A({ + method: i.METHOD, + uri: i.URI, + iv: i.IV, + format: i.KEYFORMAT, + formatVersion: i.KEYFORMATVERSIONS + })) : "EXT-X-MAP" === s && r("Prefetch segments must not be advertised with an EXT-X-MAP tag.") + } + return E +} + +function q(t, e) { + var s; + const i = new D; + let n = -1, a = 0, o = !1, E = !1, T = 0, u = null, c = null, l = !1; + for (const [s, h] of t.entries()) { + const {name: X, value: p, attributes: I, category: N} = h; + if ("Segment" !== N) { + if ("EXT-X-VERSION" === X) void 0 === i.version ? i.version = p : r("A Playlist file MUST NOT contain more than one EXT-X-VERSION tag."); else if ("EXT-X-TARGETDURATION" === X) i.targetDuration = e.targetDuration = p; else if ("EXT-X-MEDIA-SEQUENCE" === X) i.segments.length > 0 && r("The EXT-X-MEDIA-SEQUENCE tag MUST appear before the first Media Segment in the Playlist."), i.mediaSequenceBase = a = p; else if ("EXT-X-DISCONTINUITY-SEQUENCE" === X) i.segments.length > 0 && r("The EXT-X-DISCONTINUITY-SEQUENCE tag MUST appear before the first Media Segment in the Playlist."), o && r("The EXT-X-DISCONTINUITY-SEQUENCE tag MUST appear before any EXT-X-DISCONTINUITY tag."), i.discontinuitySequenceBase = T = p; else if ("EXT-X-ENDLIST" === X) i.endlist = !0; else if ("EXT-X-PLAYLIST-TYPE" === X) i.playlistType = p; else if ("EXT-X-I-FRAMES-ONLY" === X) e.compatibleVersion < 4 && (e.compatibleVersion = 4), i.isIFrame = !0; else if ("EXT-X-INDEPENDENT-SEGMENTS" === X) i.independentSegments && r("EXT-X-INDEPENDENT-SEGMENTS tag MUST NOT appear more than once in a Playlist"), i.independentSegments = !0; else if ("EXT-X-START" === X) i.start && r("EXT-X-START tag MUST NOT appear more than once in a Playlist"), "number" != typeof I["TIME-OFFSET"] && r("EXT-X-START: TIME-OFFSET attribute is REQUIRED"), i.start = { + offset: I["TIME-OFFSET"], + precise: I.PRECISE || !1 + }; else if ("EXT-X-SERVER-CONTROL" === X) I["CAN-BLOCK-RELOAD"] || r("EXT-X-SERVER-CONTROL: CAN-BLOCK-RELOAD=YES is mandatory for Low-Latency HLS"), i.lowLatencyCompatibility = { + canBlockReload: I["CAN-BLOCK-RELOAD"], + canSkipUntil: I["CAN-SKIP-UNTIL"], + holdBack: I["HOLD-BACK"], + partHoldBack: I["PART-HOLD-BACK"] + }; else if ("EXT-X-PART-INF" === X) I["PART-TARGET"] || r("EXT-X-PART-INF: PART-TARGET attribute is mandatory"), i.partTargetDuration = I["PART-TARGET"]; else if ("EXT-X-RENDITION-REPORT" === X) I.URI || r("EXT-X-RENDITION-REPORT: URI attribute is mandatory"), 0 === I.URI.search(/^[a-z]+:/) && r("EXT-X-RENDITION-REPORT: URI must be relative to the playlist uri"), i.renditionReports.push(new U({ + uri: I.URI, + lastMSN: I["LAST-MSN"], + lastPart: I["LAST-PART"] + })); else if ("EXT-X-SKIP" === X) I["SKIPPED-SEGMENTS"] || r("EXT-X-SKIP: SKIPPED-SEGMENTS attribute is mandatory"), e.compatibleVersion < 9 && (e.compatibleVersion = 9), i.skip = I["SKIPPED-SEGMENTS"], a += i.skip; else if ("EXT-X-PREFETCH" === X) { + const r = W(t, p, -1 === n ? s : n, s - 1, a++, T, e); + r && (r.discontinuity && (r.discontinuitySequence++, T = r.discontinuitySequence), r.key ? u = r.key : r.key = u, i.prefetchSegments.push(r)), E = !0, n = -1 + } else if ("string" == typeof h) { + -1 === n && r("A URI line is not preceded by any segment tags"), i.targetDuration || r("The EXT-X-TARGETDURATION tag is REQUIRED"), E && r("These segments must appear after all complete segments."); + const o = k(t, h, n, s - 1, a++, T, e); + o && ([T, u, c] = x(i, o, T, u, c), !l && o.parts.length > 0 && (l = !0)), n = -1 + } + } else -1 === n && (n = s), "EXT-X-DISCONTINUITY" === X && (o = !0) + } + if (-1 !== n) { + const o = k(t, "", n, t.length - 1, a++, T, e); + if (o) { + const {parts: t} = o; + t.length > 0 && !i.endlist && !(null === (s = p(t, -1)) || void 0 === s ? void 0 : s.hint) && r("If the Playlist contains EXT-X-PART tags and does not contain an EXT-X-ENDLIST tag, the Playlist must contain an EXT-X-PRELOAD-HINT tag with a TYPE=PART attribute"), x(i, o, u, c), !l && o.parts.length > 0 && (l = !0) + } + } + return function (t) { + const e = new Map, s = new Map; + let i = !1, n = !1; + for (let a = t.length - 1; a >= 0; a--) { + const {programDateTime: o, dateRange: E} = t[a]; + if (o && (n = !0), E && E.start) { + i = !0, E.endOnNext && (E.end || E.duration) && r("An EXT-X-DATERANGE tag with an END-ON-NEXT=YES attribute MUST NOT contain DURATION or END-DATE attributes."); + const t = E.start.getTime(), n = E.duration || 0; + E.end && E.duration && t + 1e3 * n !== E.end.getTime() && r("END-DATE MUST be equal to the value of the START-DATE attribute plus the value of the DURATION"), E.endOnNext && (E.end = e.get(E.classId)), e.set(E.classId, E.start); + const a = E.end ? E.end.getTime() : E.start.getTime() + 1e3 * (E.duration || 0), o = s.get(E.classId); + if (o) { + for (const e of o) (e.start <= t && e.end > t || e.start >= t && e.start < a) && r("DATERANGE tags with the same CLASS should not overlap"); + o.push({start: t, end: a}) + } else E.classId && s.set(E.classId, [{start: t, end: a}]) + } + } + i && !n && r("If a Playlist contains an EXT-X-DATERANGE tag, it MUST also contain at least one EXT-X-PROGRAM-DATE-TIME tag.") + }(i.segments), i.lowLatencyCompatibility && function ({ + lowLatencyCompatibility: t, + targetDuration: e, + partTargetDuration: s, + segments: i, + renditionReports: n + }, a) { + const {canSkipUntil: o, holdBack: E, partHoldBack: T} = t; + o < 6 * e && r("The Skip Boundary must be at least six times the EXT-X-TARGETDURATION."); + E < 3 * e && r("HOLD-BACK must be at least three times the EXT-X-TARGETDURATION."); + if (a) { + void 0 === s && r("EXT-X-PART-INF is required if a Playlist contains one or more EXT-X-PART tags"), void 0 === T && r("EXT-X-PART: PART-HOLD-BACK attribute is mandatory"), T < s && r("PART-HOLD-BACK must be at least PART-TARGET"); + for (const [t, {parts: e}] of i.entries()) { + e.length > 0 && t < i.length - 3 && r("Remove EXT-X-PART tags from the Playlist after they are greater than three target durations from the end of the Playlist."); + for (const [t, {duration: i}] of e.entries()) void 0 !== i && (i > s && r("PART-TARGET is the maximum duration of any Partial Segment"), t < e.length - 1 && i < .85 * s && r("All Partial Segments except the last part of a segment must have a duration of at least 85% of PART-TARGET")) + } + } + for (const t of n) { + const e = i.at(-1); + null !== t.lastMSN && void 0 !== t.lastMSN || (t.lastMSN = e.mediaSequenceNumber), (null === t.lastPart || void 0 === t.lastPart) && e.parts.length > 0 && (t.lastPart = e.parts.length - 1) + } + }(i, l), i +} + +function x(t, e, s, i, n) { + const {discontinuity: a, key: o, map: E, byterange: T, uri: u} = e; + if (a && (e.discontinuitySequence = s + 1), o || (e.key = i), E || (e.map = n), T && -1 === T.offset) { + const {segments: e} = t; + if (e.length > 0) { + const t = p(e, -1); + t.byterange && t.uri === u ? T.offset = t.byterange.offset + t.byterange.length : r("If offset of EXT-X-BYTERANGE is not present, a previous Media Segment MUST be a sub-range of the same media resource") + } else r("If offset of EXT-X-BYTERANGE is not present, a previous Media Segment MUST appear in the Playlist file") + } + return t.segments.push(e), [e.discontinuitySequence, e.key, e.map] +} + +function j(t, e) { + const [s, i] = function (t) { + const e = t.indexOf(":"); + return -1 === e ? [t.slice(1).trim(), null] : [t.slice(1, e).trim(), t.slice(e + 1).trim()] + }(t), n = function (t) { + switch (t) { + case"EXTM3U": + case"EXT-X-VERSION": + return "Basic"; + case"EXTINF": + case"EXT-X-BYTERANGE": + case"EXT-X-DISCONTINUITY": + case"EXT-X-PREFETCH-DISCONTINUITY": + case"EXT-X-KEY": + case"EXT-X-MAP": + case"EXT-X-PROGRAM-DATE-TIME": + case"EXT-X-DATERANGE": + case"EXT-X-CUE-OUT": + case"EXT-X-CUE-IN": + case"EXT-X-CUE-OUT-CONT": + case"EXT-X-CUE": + case"EXT-OATCLS-SCTE35": + case"EXT-X-ASSET": + case"EXT-X-SCTE35": + case"EXT-X-PART": + case"EXT-X-PRELOAD-HINT": + return "Segment"; + case"EXT-X-TARGETDURATION": + case"EXT-X-MEDIA-SEQUENCE": + case"EXT-X-DISCONTINUITY-SEQUENCE": + case"EXT-X-ENDLIST": + case"EXT-X-PLAYLIST-TYPE": + case"EXT-X-I-FRAMES-ONLY": + case"EXT-X-SERVER-CONTROL": + case"EXT-X-PART-INF": + case"EXT-X-PREFETCH": + case"EXT-X-RENDITION-REPORT": + case"EXT-X-SKIP": + return "MediaPlaylist"; + case"EXT-X-MEDIA": + case"EXT-X-STREAM-INF": + case"EXT-X-I-FRAME-STREAM-INF": + case"EXT-X-SESSION-DATA": + case"EXT-X-SESSION-KEY": + return "MasterPlaylist"; + case"EXT-X-INDEPENDENT-SEGMENTS": + case"EXT-X-START": + return "MediaorMasterPlaylist"; + default: + return "Unknown" + } + }(s); + if (function (t, e) { + if ("Segment" === t || "MediaPlaylist" === t) return void 0 === e.isMasterPlaylist ? void (e.isMasterPlaylist = !1) : void (e.isMasterPlaylist && w()); + if ("MasterPlaylist" === t) { + if (void 0 === e.isMasterPlaylist) return void (e.isMasterPlaylist = !0); + !1 === e.isMasterPlaylist && w() + } + }(n, e), "Unknown" === n) return null; + "MediaPlaylist" === n && "EXT-X-RENDITION-REPORT" !== s && "EXT-X-PREFETCH" !== s && (e.hash[s] && r("There MUST NOT be more than one Media Playlist tag of each type in any Media Playlist"), e.hash[s] = !0); + const [a, E] = function (t, e) { + switch (t) { + case"EXTM3U": + case"EXT-X-DISCONTINUITY": + case"EXT-X-ENDLIST": + case"EXT-X-I-FRAMES-ONLY": + case"EXT-X-INDEPENDENT-SEGMENTS": + case"EXT-X-CUE-IN": + return [null, null]; + case"EXT-X-VERSION": + case"EXT-X-TARGETDURATION": + case"EXT-X-MEDIA-SEQUENCE": + case"EXT-X-DISCONTINUITY-SEQUENCE": + return [o(e), null]; + case"EXT-X-CUE-OUT": + return Number.isNaN(Number(e)) ? [null, V(e)] : [o(e), null]; + case"EXT-X-KEY": + case"EXT-X-MAP": + case"EXT-X-DATERANGE": + case"EXT-X-MEDIA": + case"EXT-X-STREAM-INF": + case"EXT-X-I-FRAME-STREAM-INF": + case"EXT-X-SESSION-DATA": + case"EXT-X-SESSION-KEY": + case"EXT-X-START": + case"EXT-X-SERVER-CONTROL": + case"EXT-X-PART-INF": + case"EXT-X-PART": + case"EXT-X-PRELOAD-HINT": + case"EXT-X-RENDITION-REPORT": + case"EXT-X-SKIP": + return [null, V(e)]; + case"EXTINF": + return [L(e), null]; + case"EXT-X-BYTERANGE": + return [v(e), null]; + case"EXT-X-PROGRAM-DATE-TIME": + return [new Date(e), null]; + default: + return [e, null] + } + }(s, i); + return {name: s, category: n, value: a, attributes: E} +} + +function Q(t, e) { + let s; + return e.isMasterPlaylist ? s = function (t, e) { + const s = new O; + let i = !1; + for (const [n, { + name: a, + value: o, + attributes: E + }] of t.entries()) if ("EXT-X-VERSION" === a) s.version = o; else if ("EXT-X-STREAM-INF" === a) { + const a = t[n + 1]; + ("string" != typeof a || a.startsWith("#EXT")) && r("EXT-X-STREAM-INF must be followed by a URI line"); + const o = H(t, E, a, !1, e); + o && ("number" == typeof o.score && (i = !0, o.score < 0 && r("SCORE attribute on EXT-X-STREAM-INF must be positive decimal-floating-point number.")), s.variants.push(o)) + } else if ("EXT-X-I-FRAME-STREAM-INF" === a) { + const i = H(t, E, E.URI, !0, e); + i && s.variants.push(i) + } else if ("EXT-X-SESSION-DATA" === a) { + const t = new d({id: E["DATA-ID"], value: E.VALUE, uri: E.URI, language: E.LANGUAGE}); + s.sessionDataList.some((e => e.id === t.id && e.language === t.language)) && r("A Playlist MUST NOT contain more than one EXT-X-SESSION-DATA tag with the same DATA-ID attribute and the same LANGUAGE attribute."), s.sessionDataList.push(t) + } else if ("EXT-X-SESSION-KEY" === a) { + "NONE" === E.METHOD && r("EXT-X-SESSION-KEY: The value of the METHOD attribute MUST NOT be NONE"); + const t = new A({ + method: E.METHOD, + uri: E.URI, + iv: E.IV, + format: E.KEYFORMAT, + formatVersion: E.KEYFORMATVERSIONS + }); + s.sessionKeyList.some((e => K(e, t))) && r("A Master Playlist MUST NOT contain more than one EXT-X-SESSION-KEY tag with the same METHOD, URI, IV, KEYFORMAT, and KEYFORMATVERSIONS attribute values."), G(e, E), s.sessionKeyList.push(t) + } else "EXT-X-INDEPENDENT-SEGMENTS" === a ? (s.independentSegments && r("EXT-X-INDEPENDENT-SEGMENTS tag MUST NOT appear more than once in a Playlist"), s.independentSegments = !0) : "EXT-X-START" === a && (s.start && r("EXT-X-START tag MUST NOT appear more than once in a Playlist"), "number" != typeof E["TIME-OFFSET"] && r("EXT-X-START: TIME-OFFSET attribute is REQUIRED"), s.start = { + offset: E["TIME-OFFSET"], + precise: E.PRECISE || !1 + }); + if (i) for (const t of s.variants) "number" != typeof t.score && r("If any Variant Stream contains the SCORE attribute, then all Variant Streams in the Master Playlist SHOULD have a SCORE attribute"); + if (e.isClosedCaptionsNone) for (const t of s.variants) t.closedCaptions.length > 0 && r("If there is a variant with CLOSED-CAPTIONS attribute of NONE, all EXT-X-STREAM-INF tags MUST have this attribute with a value of NONE"); + return s + }(t, e) : (s = q(t, e), !s.isIFrame && e.hasMap && e.compatibleVersion < 6 && (e.compatibleVersion = 6)), e.compatibleVersion > 1 && (!s.version || s.version < e.compatibleVersion) && r(`EXT-X-VERSION needs to be ${e.compatibleVersion} or higher.`), s +} + +function _(t) { + const e = { + version: void 0, + isMasterPlaylist: void 0, + hasMap: !1, + targetDuration: 0, + compatibleVersion: 1, + isClosedCaptionsNone: !1, + hash: {} + }, s = function (t, e) { + const s = []; + for (const i of t.split("\n")) { + const t = i.trim(); + if (t) if (t.startsWith("#")) { + if (t.startsWith("#EXT")) { + const i = j(t, e); + i && s.push(i) + } + } else s.push(t) + } + return 0 !== s.length && "EXTM3U" === s[0].name || r("The EXTM3U tag MUST be the first line."), s + }(t, e), i = Q(s, e); + return i.source = t, i +} + +const z = ["#EXTINF", "#EXT-X-BYTERANGE", "#EXT-X-DISCONTINUITY", "#EXT-X-STREAM-INF", "#EXT-X-CUE-OUT", "#EXT-X-CUE-IN", "#EXT-X-KEY", "#EXT-X-MAP"], + Z = ["#EXT-X-MEDIA"]; + +class J extends Array { + constructor(t) { + super(), this.baseUri = t + } + + push(...t) { + for (const e of t) if (e.startsWith("#")) if (z.some((t => e.startsWith(t)))) super.push(e); else { + if (this.includes(e)) { + if (Z.some((t => e.startsWith(t)))) continue; + r(`Redundant item (${e})`) + } + super.push(e) + } else super.push(e); + return this.length + } +} + +function tt(t, e) { + let s = 1e3; + e && (s = Math.pow(10, e)); + const i = Math.round(t * s) / s; + return e ? i.toFixed(e) : i +} + +function et(t) { + const e = [`DATA-ID="${t.id}"`]; + return t.language && e.push(`LANGUAGE="${t.language}"`), t.value ? e.push(`VALUE="${t.value}"`) : t.uri && e.push(`URI="${t.uri}"`), `#EXT-X-SESSION-DATA:${e.join(",")}` +} + +function st(t, e) { + const s = e ? "#EXT-X-SESSION-KEY" : "#EXT-X-KEY", i = [`METHOD=${t.method}`]; + return t.uri && i.push(`URI="${t.uri}"`), t.iv && (16 !== t.iv.length && r("IV must be a 128-bit unsigned integer"), i.push(`IV=${T(t.iv)}`)), t.format && i.push(`KEYFORMAT="${t.format}"`), t.formatVersion && i.push(`KEYFORMATVERSIONS="${t.formatVersion}"`), `${s}:${i.join(",")}` +} + +function it(t, e) { + const s = e.isIFrameOnly ? "#EXT-X-I-FRAME-STREAM-INF" : "#EXT-X-STREAM-INF", i = [`BANDWIDTH=${e.bandwidth}`]; + if (e.averageBandwidth && i.push(`AVERAGE-BANDWIDTH=${e.averageBandwidth}`), e.isIFrameOnly && i.push(`URI="${e.uri}"`), e.codecs && i.push(`CODECS="${e.codecs}"`), e.resolution && i.push(`RESOLUTION=${e.resolution.width}x${e.resolution.height}`), e.frameRate && i.push(`FRAME-RATE=${tt(e.frameRate, 3)}`), e.hdcpLevel && i.push(`HDCP-LEVEL=${e.hdcpLevel}`), e.audio.length > 0) { + i.push(`AUDIO="${e.audio[0].groupId}"`); + for (const s of e.audio) t.push(nt(s)) + } + if (e.video.length > 0) { + i.push(`VIDEO="${e.video[0].groupId}"`); + for (const s of e.video) t.push(nt(s)) + } + if (e.subtitles.length > 0) { + i.push(`SUBTITLES="${e.subtitles[0].groupId}"`); + for (const s of e.subtitles) t.push(nt(s)) + } + if (X().allowClosedCaptionsNone && 0 === e.closedCaptions.length) i.push("CLOSED-CAPTIONS=NONE"); else if (e.closedCaptions.length > 0) { + i.push(`CLOSED-CAPTIONS="${e.closedCaptions[0].groupId}"`); + for (const s of e.closedCaptions) t.push(nt(s)) + } + if (e.score && i.push(`SCORE=${e.score}`), e.allowedCpc) { + const t = []; + for (const {format: s, cpcList: i} of e.allowedCpc) t.push(`${s}:${i.join("/")}`); + i.push(`ALLOWED-CPC="${t.join(",")}"`) + } + e.videoRange && i.push(`VIDEO-RANGE=${e.videoRange}`), e.stableVariantId && i.push(`STABLE-VARIANT-ID="${e.stableVariantId}"`), e.programId && i.push(`PROGRAM-ID=${e.programId}`), t.push(`${s}:${i.join(",")}`), e.isIFrameOnly || t.push(`${e.uri}`) +} + +function nt(t) { + const e = [`TYPE=${t.type}`, `GROUP-ID="${t.groupId}"`, `NAME="${t.name}"`]; + return void 0 !== t.isDefault && e.push("DEFAULT=" + (t.isDefault ? "YES" : "NO")), void 0 !== t.autoselect && e.push("AUTOSELECT=" + (t.autoselect ? "YES" : "NO")), void 0 !== t.forced && e.push("FORCED=" + (t.forced ? "YES" : "NO")), t.language && e.push(`LANGUAGE="${t.language}"`), t.assocLanguage && e.push(`ASSOC-LANGUAGE="${t.assocLanguage}"`), t.instreamId && e.push(`INSTREAM-ID="${t.instreamId}"`), t.characteristics && e.push(`CHARACTERISTICS="${t.characteristics}"`), t.channels && e.push(`CHANNELS="${t.channels}"`), t.uri && e.push(`URI="${t.uri}"`), `#EXT-X-MEDIA:${e.join(",")}` +} + +function at(t, e, s, i, n = 1, a = null) { + let r = !1, o = ""; + if (e.discontinuity && t.push("#EXT-X-DISCONTINUITY"), e.key) { + const i = st(e.key); + i !== s && (t.push(i), s = i) + } + if (e.map) { + const s = function (t) { + const e = [`URI="${t.uri}"`]; + t.byterange && e.push(`BYTERANGE="${rt(t.byterange)}"`); + return `#EXT-X-MAP:${e.join(",")}` + }(e.map); + s !== i && (t.push(s), i = s) + } + if (e.programDateTime && t.push(`#EXT-X-PROGRAM-DATE-TIME:${l(e.programDateTime)}`), e.dateRange && t.push(function (t) { + const e = [`ID="${t.id}"`]; + t.start && e.push(`START-DATE="${l(t.start)}"`); + t.end && e.push(`END-DATE="${l(t.end)}"`); + t.duration && e.push(`DURATION=${t.duration}`); + t.plannedDuration && e.push(`PLANNED-DURATION=${t.plannedDuration}`); + t.classId && e.push(`CLASS="${t.classId}"`); + t.endOnNext && e.push("END-ON-NEXT=YES"); + for (const s of Object.keys(t.attributes)) s.startsWith("X-") ? "number" == typeof t.attributes[s] ? e.push(`${s}=${t.attributes[s]}`) : e.push(`${s}="${t.attributes[s]}"`) : s.startsWith("SCTE35-") && e.push(`${s}=${T(t.attributes[s])}`); + return `#EXT-X-DATERANGE:${e.join(",")}` + }(e.dateRange)), e.markers.length > 0 && (o = function (t, e) { + let s = ""; + for (const i of e) if ("OUT" === i.type) s = "OUT", t.push(`#EXT-X-CUE-OUT:DURATION=${i.duration}`); else if ("IN" === i.type) s = "IN", t.push("#EXT-X-CUE-IN"); else if ("RAW" === i.type) { + const e = i.value ? `:${i.value}` : ""; + t.push(`#${i.tagName}${e}`) + } + return s + }(t, e.markers)), e.parts.length > 0 && (r = function (t, e) { + let s = !1; + for (const i of e) if (i.hint) { + const e = []; + if (e.push("TYPE=PART", `URI="${i.uri}"`), i.byterange) { + const {offset: t, length: s} = i.byterange; + e.push(`BYTERANGE-START=${t}`), s && e.push(`BYTERANGE-LENGTH=${s}`) + } + t.push(`#EXT-X-PRELOAD-HINT:${e.join(",")}`), s = !0 + } else { + const e = []; + e.push(`DURATION=${i.duration}`, `URI="${i.uri}"`), i.byterange && e.push(`BYTERANGE=${rt(i.byterange)}`), i.independent && e.push("INDEPENDENT=YES"), i.gap && e.push("GAP=YES"), t.push(`#EXT-X-PART:${e.join(",")}`) + } + return s + }(t, e.parts)), r) return [s, i]; + const E = n < 3 ? Math.round(e.duration) : tt(e.duration, function (t) { + const e = t.toString(10), s = e.indexOf("."); + return -1 === s ? 0 : e.length - s - 1 + }(e.duration)); + return t.push(`#EXTINF:${E},${unescape(encodeURIComponent(e.title || ""))}`), e.byterange && t.push(`#EXT-X-BYTERANGE:${rt(e.byterange)}`), null != a ? Array.prototype.push.call(t, a(e)) : Array.prototype.push.call(t, `${e.uri}`), [s, i, o] +} + +function rt({offset: t, length: e}) { + return `${e}@${t}` +} + +function ot(t, e = null) { + n(t), s("Not a playlist", "playlist" === t.type); + const i = new J(t.uri); + return i.push("#EXTM3U"), t.version && i.push(`#EXT-X-VERSION:${t.version}`), t.independentSegments && i.push("#EXT-X-INDEPENDENT-SEGMENTS"), t.start && i.push(`#EXT-X-START:TIME-OFFSET=${tt(t.start.offset)}${t.start.precise ? ",PRECISE=YES" : ""}`), t.isMasterPlaylist ? function (t, e) { + for (const s of e.sessionDataList) t.push(et(s)); + for (const s of e.sessionKeyList) t.push(st(s, !0)); + for (const s of e.variants) it(t, s) + }(i, t) : function (t, e, s = null) { + let i = "", n = "", a = !1; + if (e.targetDuration && t.push(`#EXT-X-TARGETDURATION:${e.targetDuration}`), e.lowLatencyCompatibility) { + const {canBlockReload: s, canSkipUntil: i, holdBack: n, partHoldBack: a} = e.lowLatencyCompatibility, + r = []; + r.push("CAN-BLOCK-RELOAD=" + (s ? "YES" : "NO")), void 0 !== i && r.push(`CAN-SKIP-UNTIL=${i}`), void 0 !== n && r.push(`HOLD-BACK=${n}`), void 0 !== a && r.push(`PART-HOLD-BACK=${a}`), t.push(`#EXT-X-SERVER-CONTROL:${r.join(",")}`) + } + e.partTargetDuration && t.push(`#EXT-X-PART-INF:PART-TARGET=${e.partTargetDuration}`), e.mediaSequenceBase && t.push(`#EXT-X-MEDIA-SEQUENCE:${e.mediaSequenceBase}`), e.discontinuitySequenceBase && t.push(`#EXT-X-DISCONTINUITY-SEQUENCE:${e.discontinuitySequenceBase}`), e.playlistType && t.push(`#EXT-X-PLAYLIST-TYPE:${e.playlistType}`), e.isIFrame && t.push("#EXT-X-I-FRAMES-ONLY"), e.skip > 0 && t.push(`#EXT-X-SKIP:SKIPPED-SEGMENTS=${e.skip}`); + for (const r of e.segments) { + let o = ""; + [i, n, o] = at(t, r, i, n, e.version, s), "OUT" === o ? a = !0 : "IN" === o && a && (a = !1) + } + "VOD" === e.playlistType && a && t.push("#EXT-X-CUE-IN"), e.prefetchSegments.length > 2 && r("The server must deliver no more than two prefetch segments"); + for (const s of e.prefetchSegments) s.discontinuity && t.push("#EXT-X-PREFETCH-DISCONTINUITY"), t.push(`#EXT-X-PREFETCH:${s.uri}`); + e.endlist && t.push("#EXT-X-ENDLIST"); + for (const s of e.renditionReports) { + const e = []; + e.push(`URI="${s.uri}"`, `LAST-MSN=${s.lastMSN}`), void 0 !== s.lastPart && e.push(`LAST-PART=${s.lastPart}`), t.push(`#EXT-X-RENDITION-REPORT:${e.join(",")}`) + } + }(i, t, e), i.join("\n") +} + +export {X as getOptions, _ as parse, h as setOptions, ot as stringify, M as types}; \ No newline at end of file diff --git a/cat/tjs/lib/iso-2022-jp.js b/cat/tjs/lib/iso-2022-jp.js new file mode 100644 index 0000000..3924a33 --- /dev/null +++ b/cat/tjs/lib/iso-2022-jp.js @@ -0,0 +1,441 @@ +import { inRange, decoderError, encoderError, isASCIICodePoint, + end_of_stream, finished, floor } from './text_decoder_utils.js' +import index, { indexCodePointFor, indexPointerFor } from './text_decoder_indexes.js' + +// 13.2 iso-2022-jp + +// 13.2.1 iso-2022-jp decoder +/** + * @implements {Decoder} + */ +export class ISO2022JPDecoder { + constructor(options) { + const { fatal } = options + this.fatal = fatal + /** @enum */ + this.states = { + ASCII: 0, + Roman: 1, + Katakana: 2, + LeadByte: 3, + TrailByte: 4, + EscapeStart: 5, + Escape: 6, + } + // iso-2022-jp's decoder has an associated iso-2022-jp decoder + // state (initially ASCII), iso-2022-jp decoder output state + // (initially ASCII), iso-2022-jp lead (initially 0x00), and + // iso-2022-jp output flag (initially unset). + this.iso2022jp_decoder_state = this.states.ASCII + this.iso2022jp_decoder_output_state = this.states.ASCII, + this.iso2022jp_lead = 0x00 + this.iso2022jp_output_flag = false + } + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + */ + handler(stream, bite) { + // switching on iso-2022-jp decoder state: + switch (this.iso2022jp_decoder_state) { + default: + case this.states.ASCII: + // ASCII + // Based on byte: + + // 0x1B + if (bite === 0x1B) { + // Set iso-2022-jp decoder state to escape start and return + // continue. + this.iso2022jp_decoder_state = this.states.EscapeStart + return null + } + + // 0x00 to 0x7F, excluding 0x0E, 0x0F, and 0x1B + if (inRange(bite, 0x00, 0x7F) && bite !== 0x0E + && bite !== 0x0F && bite !== 0x1B) { + // Unset the iso-2022-jp output flag and return a code point + // whose value is byte. + this.iso2022jp_output_flag = false + return bite + } + + // end-of-stream + if (bite === end_of_stream) { + // Return finished. + return finished + } + + // Otherwise + // Unset the iso-2022-jp output flag and return error. + this.iso2022jp_output_flag = false + return decoderError(this.fatal) + + case this.states.Roman: + // Roman + // Based on byte: + + // 0x1B + if (bite === 0x1B) { + // Set iso-2022-jp decoder state to escape start and return + // continue. + this.iso2022jp_decoder_state = this.states.EscapeStart + return null + } + + // 0x5C + if (bite === 0x5C) { + // Unset the iso-2022-jp output flag and return code point + // U+00A5. + this.iso2022jp_output_flag = false + return 0x00A5 + } + + // 0x7E + if (bite === 0x7E) { + // Unset the iso-2022-jp output flag and return code point + // U+203E. + this.iso2022jp_output_flag = false + return 0x203E + } + + // 0x00 to 0x7F, excluding 0x0E, 0x0F, 0x1B, 0x5C, and 0x7E + if (inRange(bite, 0x00, 0x7F) && bite !== 0x0E && bite !== 0x0F + && bite !== 0x1B && bite !== 0x5C && bite !== 0x7E) { + // Unset the iso-2022-jp output flag and return a code point + // whose value is byte. + this.iso2022jp_output_flag = false + return bite + } + + // end-of-stream + if (bite === end_of_stream) { + // Return finished. + return finished + } + + // Otherwise + // Unset the iso-2022-jp output flag and return error. + this.iso2022jp_output_flag = false + return decoderError(this.fatal) + + case this.states.Katakana: + // Katakana + // Based on byte: + + // 0x1B + if (bite === 0x1B) { + // Set iso-2022-jp decoder state to escape start and return + // continue. + this.iso2022jp_decoder_state = this.states.EscapeStart + return null + } + + // 0x21 to 0x5F + if (inRange(bite, 0x21, 0x5F)) { + // Unset the iso-2022-jp output flag and return a code point + // whose value is 0xFF61 − 0x21 + byte. + this.iso2022jp_output_flag = false + return 0xFF61 - 0x21 + bite + } + + // end-of-stream + if (bite === end_of_stream) { + // Return finished. + return finished + } + + // Otherwise + // Unset the iso-2022-jp output flag and return error. + this.iso2022jp_output_flag = false + return decoderError(this.fatal) + + case this.states.LeadByte: + // Lead byte + // Based on byte: + + // 0x1B + if (bite === 0x1B) { + // Set iso-2022-jp decoder state to escape start and return + // continue. + this.iso2022jp_decoder_state = this.states.EscapeStart + return null + } + + // 0x21 to 0x7E + if (inRange(bite, 0x21, 0x7E)) { + // Unset the iso-2022-jp output flag, set iso-2022-jp lead + // to byte, iso-2022-jp decoder state to trail byte, and + // return continue. + this.iso2022jp_output_flag = false + this.iso2022jp_lead = bite + this.iso2022jp_decoder_state = this.states.TrailByte + return null + } + + // end-of-stream + if (bite === end_of_stream) { + // Return finished. + return finished + } + + // Otherwise + // Unset the iso-2022-jp output flag and return error. + this.iso2022jp_output_flag = false + return decoderError(this.fatal) + + case this.states.TrailByte: + // Trail byte + // Based on byte: + + // 0x1B + if (bite === 0x1B) { + // Set iso-2022-jp decoder state to escape start and return + // continue. + this.iso2022jp_decoder_state = this.states.EscapeStart + return decoderError(this.fatal) + } + + // 0x21 to 0x7E + if (inRange(bite, 0x21, 0x7E)) { + // 1. Set the iso-2022-jp decoder state to lead byte. + this.iso2022jp_decoder_state = this.states.LeadByte + + // 2. Let pointer be (iso-2022-jp lead − 0x21) × 94 + byte − 0x21. + const pointer = (this.iso2022jp_lead - 0x21) * 94 + bite - 0x21 + + // 3. Let code point be the index code point for pointer in + // index jis0208. + const code_point = indexCodePointFor(pointer, index('jis0208')) + + // 4. If code point is null, return error. + if (code_point === null) + return decoderError(this.fatal) + + // 5. Return a code point whose value is code point. + return code_point + } + + // end-of-stream + if (bite === end_of_stream) { + // Set the iso-2022-jp decoder state to lead byte, prepend + // byte to stream, and return error. + this.iso2022jp_decoder_state = this.states.LeadByte + stream.prepend(bite) + return decoderError(this.fatal) + } + + // Otherwise + // Set iso-2022-jp decoder state to lead byte and return + // error. + this.iso2022jp_decoder_state = this.states.LeadByte + return decoderError(this.fatal) + + case this.states.EscapeStart: + // Escape start + + // 1. If byte is either 0x24 or 0x28, set iso-2022-jp lead to + // byte, iso-2022-jp decoder state to escape, and return + // continue. + if (bite === 0x24 || bite === 0x28) { + this.iso2022jp_lead = bite + this.iso2022jp_decoder_state = this.states.Escape + return null + } + + // 2. Prepend byte to stream. + stream.prepend(bite) + + // 3. Unset the iso-2022-jp output flag, set iso-2022-jp + // decoder state to iso-2022-jp decoder output state, and + // return error. + this.iso2022jp_output_flag = false + this.iso2022jp_decoder_state = this.iso2022jp_decoder_output_state + return decoderError(this.fatal) + + case this.states.Escape: { + // Escape + + // 1. Let lead be iso-2022-jp lead and set iso-2022-jp lead to + // 0x00. + const lead = this.iso2022jp_lead + this.iso2022jp_lead = 0x00 + + // 2. Let state be null. + let state = null + + // 3. If lead is 0x28 and byte is 0x42, set state to ASCII. + if (lead === 0x28 && bite === 0x42) + state = this.states.ASCII + + // 4. If lead is 0x28 and byte is 0x4A, set state to Roman. + if (lead === 0x28 && bite === 0x4A) + state = this.states.Roman + + // 5. If lead is 0x28 and byte is 0x49, set state to Katakana. + if (lead === 0x28 && bite === 0x49) + state = this.states.Katakana + + // 6. If lead is 0x24 and byte is either 0x40 or 0x42, set + // state to lead byte. + if (lead === 0x24 && (bite === 0x40 || bite === 0x42)) + state = this.states.LeadByte + + // 7. If state is non-null, run these substeps: + if (state !== null) { + // 1. Set iso-2022-jp decoder state and iso-2022-jp decoder + // output state to this.states. + this.iso2022jp_decoder_state = this.iso2022jp_decoder_state = state + + // 2. Let output flag be the iso-2022-jp output flag. + const output_flag = this.iso2022jp_output_flag + + // 3. Set the iso-2022-jp output flag. + this.iso2022jp_output_flag = true + + // 4. Return continue, if output flag is unset, and error + // otherwise. + return !output_flag ? null : decoderError(this.fatal) + } + + // 8. Prepend lead and byte to stream. + stream.prepend([lead, bite]) + + // 9. Unset the iso-2022-jp output flag, set iso-2022-jp + // decoder state to iso-2022-jp decoder output state and + // return error. + this.iso2022jp_output_flag = false + this.iso2022jp_decoder_state = this.iso2022jp_decoder_output_state + return decoderError(this.fatal) + } + } + } +} + +// 13.2.2 iso-2022-jp encoder +/** + * @implements {Encoder} + */ +export class ISO2022JPEncoder { + constructor() { + // iso-2022-jp's encoder has an associated iso-2022-jp encoder + // state which is one of ASCII, Roman, and jis0208 (initially + // ASCII). + /** @enum */ + this.states = { + ASCII: 0, + Roman: 1, + jis0208: 2, + } + this.iso2022jp_state = this.states.ASCII + } + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + */ + handler(stream, code_point) { + // 1. If code point is end-of-stream and iso-2022-jp encoder + // state is not ASCII, prepend code point to stream, set + // iso-2022-jp encoder state to ASCII, and return three bytes + // 0x1B 0x28 0x42. + if (code_point === end_of_stream && + this.iso2022jp_state !== this.states.ASCII) { + stream.prepend(code_point) + this.iso2022jp_state = this.states.ASCII + return [0x1B, 0x28, 0x42] + } + + // 2. If code point is end-of-stream and iso-2022-jp encoder + // state is ASCII, return finished. + if (code_point === end_of_stream && this.iso2022jp_state === this.states.ASCII) + return finished + + // 3. If ISO-2022-JP encoder state is ASCII or Roman, and code + // point is U+000E, U+000F, or U+001B, return error with U+FFFD. + if ((this.iso2022jp_state === this.states.ASCII || + this.iso2022jp_state === this.states.Roman) && + (code_point === 0x000E || code_point === 0x000F || + code_point === 0x001B)) { + return encoderError(0xFFFD) + } + + // 4. If iso-2022-jp encoder state is ASCII and code point is an + // ASCII code point, return a byte whose value is code point. + if (this.iso2022jp_state === this.states.ASCII && + isASCIICodePoint(code_point)) + return code_point + + // 5. If iso-2022-jp encoder state is Roman and code point is an + // ASCII code point, excluding U+005C and U+007E, or is U+00A5 + // or U+203E, run these substeps: + if (this.iso2022jp_state === this.states.Roman && + ((isASCIICodePoint(code_point) && + code_point !== 0x005C && code_point !== 0x007E) || + (code_point == 0x00A5 || code_point == 0x203E))) { + // 1. If code point is an ASCII code point, return a byte + // whose value is code point. + if (isASCIICodePoint(code_point)) + return code_point + + // 2. If code point is U+00A5, return byte 0x5C. + if (code_point === 0x00A5) + return 0x5C + + // 3. If code point is U+203E, return byte 0x7E. + if (code_point === 0x203E) + return 0x7E + } + + // 6. If code point is an ASCII code point, and iso-2022-jp + // encoder state is not ASCII, prepend code point to stream, set + // iso-2022-jp encoder state to ASCII, and return three bytes + // 0x1B 0x28 0x42. + if (isASCIICodePoint(code_point) && + this.iso2022jp_state !== this.states.ASCII) { + stream.prepend(code_point) + this.iso2022jp_state = this.states.ASCII + return [0x1B, 0x28, 0x42] + } + + // 7. If code point is either U+00A5 or U+203E, and iso-2022-jp + // encoder state is not Roman, prepend code point to stream, set + // iso-2022-jp encoder state to Roman, and return three bytes + // 0x1B 0x28 0x4A. + if ((code_point === 0x00A5 || code_point === 0x203E) && + this.iso2022jp_state !== this.states.Roman) { + stream.prepend(code_point) + this.iso2022jp_state = this.states.Roman + return [0x1B, 0x28, 0x4A] + } + + // 8. If code point is U+2212, set it to U+FF0D. + if (code_point === 0x2212) + code_point = 0xFF0D + + // 9. Let pointer be the index pointer for code point in index + // jis0208. + const pointer = indexPointerFor(code_point, index('jis0208')) + + // 10. If pointer is null, return error with code point. + if (pointer === null) + return encoderError(code_point) + + // 11. If iso-2022-jp encoder state is not jis0208, prepend code + // point to stream, set iso-2022-jp encoder state to jis0208, + // and return three bytes 0x1B 0x24 0x42. + if (this.iso2022jp_state !== this.states.jis0208) { + stream.prepend(code_point) + this.iso2022jp_state = this.states.jis0208 + return [0x1B, 0x24, 0x42] + } + + // 12. Let lead be floor(pointer / 94) + 0x21. + const lead = floor(pointer / 94) + 0x21 + + // 13. Let trail be pointer % 94 + 0x21. + const trail = pointer % 94 + 0x21 + + // 14. Return two bytes whose values are lead and trail. + return [lead, trail] + } +} \ No newline at end of file diff --git a/cat/tjs/lib/log.js b/cat/tjs/lib/log.js new file mode 100644 index 0000000..2198e60 --- /dev/null +++ b/cat/tjs/lib/log.js @@ -0,0 +1,86 @@ +const level_list = ["DEBUG", "INFO", "WARNING", "ERROR"]; +const file_path = "log" + +class JadeLogging { + + constructor(app_name, level = "DEBUG") { + this.app_name = app_name + this.level = level + this.level_index = level_list.indexOf(level) + } + + + format(level, message) { + let max_format = 80 + switch (level) { + case "INFO": + max_format = max_format + 1 + break + case "WARNING": + max_format = max_format - 2 + break + default : + break + } + if (message.length < max_format) { + if ((max_format - message.length) % 2 === 0) { + message = "#".repeat(Math.floor((max_format - message.length) / 2)) + message + "#".repeat(Math.floor((max_format - message.length) / 2)) + } else { + message = "#".repeat(Math.floor((max_format - message.length) / 2)) + message + "#".repeat(Math.floor((max_format - message.length) / 2) + 1) + } + } + return message + } + + getTime() { + const timestamp = new Date(); + // 获取当前时间戳 + return timestamp.toLocaleDateString().replace(/\//g, "-") + " " + timestamp.toTimeString().substr(0, 8) + "," + timestamp.getMilliseconds().toString() + } + + formatMessage(log_level, message, is_format) { + // 获取北京时间 + // 格式化消息 + //2023-12-13 15:15:21,409 - 阿里玩偶 - + //2023-12-14T01:43:31.278Z + //2023-12-13 15:15:21,409 - 阿里玩偶 - INFO: + //2023-12-13 15:15:21,409 - 阿里玩偶 - ERROR: + if (is_format) { + message = this.format(log_level, message) + } + return `${this.getTime()} - ${this.app_name} - ${log_level}: ${message}` + + } + + async log(message) { + console.debug(message) + await local.set(file_path,this.getTime(), message); + } + + async info(message, is_format=false) { + if (this.level_index <= 1) { + await this.log(this.formatMessage("INFO", message, is_format)) + } + } + + async warning(message, is_format=false) { + if (this.level_index <= 2) { + await this.log(this.formatMessage("WARNING", message, is_format)) + } + } + + async error(message, is_format=false) { + if (this.level_index <= 3) { + await this.log(this.formatMessage("ERROR", message, is_format)) + } + } + + async debug(message, is_format=false) { + if (this.level_index <= 0) { + await this.log(this.formatMessage("DEBUG", message, is_format)) + } + } +} + +// 测试日志记录函数 +export {JadeLogging} \ No newline at end of file diff --git a/cat/tjs/lib/misc.js b/cat/tjs/lib/misc.js new file mode 100644 index 0000000..ac303f9 --- /dev/null +++ b/cat/tjs/lib/misc.js @@ -0,0 +1,129 @@ +var charStr = 'abacdefghjklmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789'; + +export function rand(min, max) { + return Math.floor(Math.random() * (max - min + 1)) + min; +} + +export function randStr(len, withNum, onlyNum) { + var _str = ''; + let containsNum = withNum === undefined ? true : withNum; + for (var i = 0; i < len; i++) { + let idx = onlyNum ? rand(charStr.length - 10, charStr.length - 1) : rand(0, containsNum ? charStr.length - 1 : charStr.length - 11); + _str += charStr[idx]; + } + return _str; +} + +export function randUUID() { + return randStr(8).toLowerCase() + '-' + randStr(4).toLowerCase() + '-' + randStr(4).toLowerCase() + '-' + randStr(4).toLowerCase() + '-' + randStr(12).toLowerCase(); +} + +export function randMAC() { + return randStr(2).toUpperCase() + ':' + randStr(2).toUpperCase() + ':' + randStr(2).toUpperCase() + ':' + randStr(2).toUpperCase() + ':' + randStr(2).toUpperCase() + ':' + randStr(2).toUpperCase(); +} + +const deviceBrands = ['Huawei', 'Xiaomi']; +const deviceModels = [ + ['MHA-AL00', 'HUAWEI Mate 9', 'MHA-TL00', 'HUAWEI Mate 9', 'LON-AL00', 'HUAWEI Mate 9 Pro', 'ALP-AL00', 'HUAWEI Mate 10', 'ALP-TL00', 'HUAWEI Mate 10', 'BLA-AL00', 'HUAWEI Mate 10 Pro', 'BLA-TL00', 'HUAWEI Mate 10 Pro', 'HMA-AL00', 'HUAWEI Mate 20', 'HMA-TL00', 'HUAWEI Mate 20', 'LYA-AL00', 'HUAWEI Mate 20 Pro', 'LYA-AL10', 'HUAWEI Mate 20 Pro', 'LYA-TL00', 'HUAWEI Mate 20 Pro', 'EVR-AL00', 'HUAWEI Mate 20 X', 'EVR-TL00', 'HUAWEI Mate 20 X', 'EVR-AN00', 'HUAWEI Mate 20 X', 'TAS-AL00', 'HUAWEI Mate 30', 'TAS-TL00', 'HUAWEI Mate 30', 'TAS-AN00', 'HUAWEI Mate 30', 'TAS-TN00', 'HUAWEI Mate 30', 'LIO-AL00', 'HUAWEI Mate 30 Pro', 'LIO-TL00', 'HUAWEI Mate 30 Pro', 'LIO-AN00', 'HUAWEI Mate 30 Pro', 'LIO-TN00', 'HUAWEI Mate 30 Pro', 'LIO-AN00m', 'HUAWEI Mate 30E Pro', 'OCE-AN10', 'HUAWEI Mate 40', 'OCE-AN50', 'HUAWEI Mate 40E', 'OCE-AL50', 'HUAWEI Mate 40E', 'NOH-AN00', 'HUAWEI Mate 40 Pro', 'NOH-AN01', 'HUAWEI Mate 40 Pro', 'NOH-AL00', 'HUAWEI Mate 40 Pro', 'NOH-AL10', 'HUAWEI Mate 40 Pro', 'NOH-AN50', 'HUAWEI Mate 40E Pro', 'NOP-AN00', 'HUAWEI Mate 40 Pro', 'CET-AL00', 'HUAWEI Mate 50', 'CET-AL60', 'HUAWEI Mate 50E', 'DCO-AL00', 'HUAWEI Mate 50 Pro', 'TAH-AN00', 'HUAWEI Mate X', 'TAH-AN00m', 'HUAWEI Mate Xs', 'TET-AN00', 'HUAWEI Mate X2', 'TET-AN10', 'HUAWEI Mate X2', 'TET-AN50', 'HUAWEI Mate X2', 'TET-AL00', 'HUAWEI Mate X2', 'PAL-AL00', 'HUAWEI Mate Xs 2', 'PAL-AL10', 'HUAWEI Mate Xs 2', 'EVA-AL00', 'HUAWEI P9', 'EVA-AL10', 'HUAWEI P9', 'EVA-TL00', 'HUAWEI P9', 'EVA-DL00', 'HUAWEI P9', 'EVA-CL00', 'HUAWEI P9', 'VIE-AL10', 'HUAWEI P9 Plus', 'VTR-AL00', 'HUAWEI P10', 'VTR-TL00', 'HUAWEI P10', 'VKY-AL00', 'HUAWEI P10 Plus', 'VKY-TL00', 'HUAWEI P10 Plus', 'EML-AL00', 'HUAWEI P20', 'EML-TL00', 'HUAWEI P20', 'CLT-AL00', 'HUAWEI P20 Pro', 'CLT-AL01', 'HUAWEI P20 Pro', 'CLT-AL00l', 'HUAWEI P20 Pro', 'CLT-TL00', 'HUAWEI P20 Pro', 'CLT-TL01', 'HUAWEI P20 Pro', 'ELE-AL00', 'HUAWEI P30', 'ELE-TL00', 'HUAWEI P30', 'VOG-AL00', 'HUAWEI P30 Pro', 'VOG-AL10', 'HUAWEI P30 Pro', 'VOG-TL00', 'HUAWEI P30 Pro', 'ANA-AL00', 'HUAWEI P40', 'ANA-AN00', 'HUAWEI P40', 'ANA-TN00', 'HUAWEI P40', 'ELS-AN00', 'HUAWEI P40 Pro', 'ELS-TN00', 'HUAWEI P40 Pro', 'ELS-AN10', 'HUAWEI P40 Pro', 'ELS-TN10', 'HUAWEI P40 Pro', 'ABR-AL00', 'HUAWEI P50', 'ABR-AL80', 'HUAWEI P50', 'ABR-AL60', 'HUAWEI P50E', 'ABR-AL90', 'HUAWEI P50E', 'JAD-AL00', 'HUAWEI P50 Pro', 'JAD-AL80', 'HUAWEI P50 Pro', 'JAD-AL50', 'HUAWEI P50 Pro', 'JAD-AL60', 'HUAWEI P50 Pro', 'BAL-AL00', 'HUAWEI P50 Pocket', 'BAL-AL60', 'HUAWEI Pocket S', 'PIC-AL00', 'HUAWEI nova 2', 'PIC-TL00', 'HUAWEI nova 2', 'BAC-AL00', 'HUAWEI nova 2 Plus', 'BAC-TL00', 'HUAWEI nova 2 Plus', 'HWI-AL00', 'HUAWEI nova 2s', 'HWI-TL00', 'HUAWEI nova 2s', 'ANE-AL00', 'HUAWEI nova 3e', 'ANE-TL00', 'HUAWEI nova 3e', 'PAR-AL00', 'HUAWEI nova 3', 'PAR-TL00', 'HUAWEI nova 3', 'INE-AL00', 'HUAWEI nova 3i', 'INE-TL00', 'HUAWEI nova 3i', 'VCE-AL00', 'HUAWEI nova 4', 'VCE-TL00', 'HUAWEI nova 4', 'MAR-AL00', 'HUAWEI nova 4e', 'MAR-TL00', 'HUAWEI nova 4e', 'SEA-AL00', 'HUAWEI nova 5', 'SEA-TL00', 'HUAWEI nova 5', 'SEA-AL10', 'HUAWEI nova 5 Pro', 'SEA-TL10', 'HUAWEI nova 5 Pro', 'GLK-AL00', 'HUAWEI nova 5i', 'GLK-TL00', 'HUAWEI nova 5i', 'GLK-LX1U', 'HUAWEI nova 5i', 'SPN-TL00', 'HUAWEI nova 5i Pro', 'SPN-AL00', 'HUAWEI nova 5z', 'WLZ-AL10', 'HUAWEI nova 6', 'WLZ-AN00', 'HUAWEI nova 6', 'JNY-AL10', 'HUAWEI nova 6 SE', 'JNY-TL10', 'HUAWEI nova 6 SE', 'JEF-AN00', 'HUAWEI nova 7', 'JEF-AN20', 'HUAWEI nova 7', 'JEF-TN00', 'HUAWEI nova 7', 'JEF-TN20', 'HUAWEI nova 7', 'JER-AN10', 'HUAWEI nova 7 Pro', 'JER-AN20', 'HUAWEI nova 7 Pro', 'JER-TN10', 'HUAWEI nova 7 Pro', 'JER-TN20', 'HUAWEI nova 7 Pro', 'CDY-AN00', 'HUAWEI nova 7 SE', 'CDY-AN20', 'HUAWEI nova 7 SE', 'CDY-TN00', 'HUAWEI nova 7 SE', 'CDY-TN20', 'HUAWEI nova 7 SE', 'ANG-AN00', 'HUAWEI nova 8', 'BRQ-AN00', 'HUAWEI nova 8 Pro', 'BRQ-AL00', 'HUAWEI nova 8 Pro', 'JSC-AN00', 'HUAWEI nova 8 SE', 'JSC-TN00', 'HUAWEI nova 8 SE', 'JSC-AL50', 'HUAWEI nova 8 SE', 'NAM-AL00', 'HUAWEI nova 9', 'RTE-AL00', 'HUAWEI nova 9 Pro', 'JLN-AL00', 'HUAWEI nova 9 SE', 'NCO-AL00', 'HUAWEI nova 10', 'GLA-AL00', 'HUAWEI nova 10 Pro', 'CHA-AL80', 'HUAWEI nova 10z'], + ['M2001J2C', 'Xiaomi 10', 'M2001J2G', 'Xiaomi 10', 'M2001J2I', 'Xiaomi 10', 'M2011K2C', 'Xiaomi 11', 'M2011K2G', 'Xiaomi 11', '2201123C', 'Xiaomi 12', '2201123G', 'Xiaomi 12', '2112123AC', 'Xiaomi 12X', '2112123AG', 'Xiaomi 12X', '2201122C', 'Xiaomi 12 Pro', '2201122G', 'Xiaomi 12 Pro'], +]; +export function randDevice() { + let brandIdx = rand(0, deviceBrands.length - 1); + let brand = deviceBrands[brandIdx]; + let modelIdx = rand(0, deviceModels[brandIdx].length / 2 - 1); + let model = deviceModels[brandIdx][modelIdx * 2 + 1]; + let release = rand(8, 13); + let buildId = randStr(3, false).toUpperCase() + rand(11, 99) + randStr(1, false).toUpperCase(); + return { + brand: brand, + model: model, + release: release, + buildId: buildId, + }; +} + +export function randDeviceWithId(len) { + let device = randDevice(); + device['id'] = randStr(len); + return device; +} + +export const MOBILE_UA = 'Mozilla/5.0 (Linux; Android 11; M2007J3SC Build/RKQ1.200826.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/77.0.3865.120 MQQBrowser/6.2 TBS/045714 Mobile Safari/537.36'; +export const PC_UA = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36'; +export const UA = 'Mozilla/5.0'; +export const UC_UA = 'Mozilla/5.0 (Linux; U; Android 9; zh-CN; MI 9 Build/PKQ1.181121.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.108 UCBrowser/12.5.5.1035 Mobile Safari/537.36'; +export const IOS_UA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1'; +export const MAC_UA = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.81 Safari/537.36 SE 2.X MetaSr 1.0'; + +export function formatPlayUrl(src, name) { + if (src.trim() == name.trim()) { + return name; + } + return name + .trim() + .replaceAll(src, '') + .replace(/<|>|《|》/g, '') + .replace(/\$|#/g, ' ') + .trim(); +} + +export function formatPlayUrl2(src, name) { + var idx = name.indexOf('$'); + if (idx <= 0) { + return formatPlayUrl(src, name); + } + return formatPlayUrl(src, name.substring(0, idx)) + name.substring(idx); +} + +export function stripHtmlTag(src) { + return src + .replace(/<\/?[^>]+(>|$)/g, '') + .replace(/&.{1,5};/g, '') + .replace(/\s{2,}/g, ' '); +} + +export function fixUrl(base, src) { + try { + if (src.startsWith('//')) { + let parse = new URL(base); + let host = src.substring(2, src.indexOf('/', 2)); + if (!host.includes('.')) { + src = parse.protocol + '://' + parse.host + src.substring(1); + } else { + src = parse.protocol + ':' + src; + } + } else if (!src.includes('://')) { + let parse = new URL(base); + src = parse.protocol + '://' + parse.host + src; + } + } catch (error) {} + return src; +} + +export function jsonParse(input, json) { + try { + let url = json.url || ''; + if (url.startsWith('//')) { + url = 'https:' + url; + } + if (!url.startsWith('http')) { + return {}; + } + let headers = json['headers'] || {}; + let ua = (json['user-agent'] || '').trim(); + if (ua.length > 0) { + headers['User-Agent'] = ua; + } + let referer = (json['referer'] || '').trim(); + if (referer.length > 0) { + headers['Referer'] = referer; + } + return { + header: headers, + url: url, + }; + } catch (error) { + console.log(error); + } + return {}; +} diff --git a/cat/tjs/lib/nivid_object.js b/cat/tjs/lib/nivid_object.js new file mode 100644 index 0000000..91c9d7f --- /dev/null +++ b/cat/tjs/lib/nivid_object.js @@ -0,0 +1,255 @@ +/* +* @File : nivid_object.js +* @Author : jade +* @Date : 2023/12/20 9:50 +* @Email : jadehh@1ive.com +* @Software : Samples +* @Desc : +*/ +import {Crypto} from "./cat.js"; + +let DesKey = "diao.com" + +class ChannelResponse { + // classes + constructor() { + this.channelMsg = "" + this.channelStatus = 0 + this.channelList = [] + this.channelFilters = {} + } + + fromJsonString(json_str, remove18ChannelCode = 0) { + let json_dic = JSON.parse(json_str) + this.channelMsg = json_dic.msg + this.channelStatus = json_dic.status + let channel_list = [] + for (const channel_info of json_dic.list) { + let new_channel_info = new ChannelInfo() + switch (remove18ChannelCode) { + case 0: + new_channel_info.fromJson(channel_info) + channel_list.push(new_channel_info) + break + case 1: + if (channel_info.channelName !== "午夜场" && channel_info.channelName !== "午夜直播") { + new_channel_info.fromJson(channel_info) + channel_list.push(new_channel_info) + } + break + case 2: + if (channel_info.channelName === "午夜场" || channel_info.channelName === "午夜直播") { + new_channel_info.fromJson(channel_info) + channel_list.push(new_channel_info) + } + break + } + } + this.channelList = channel_list + this.channelFilters = json_dic.filter + } + + setChannelFilters(filter_str) { + this.channelFilters = JSON.parse(filter_str) + } + + getValues(typeList, name_key, id_key) { + let values = [] + values.push({"n": "全部", "v": "0"}) + for (const obj of typeList) { + values.push({"n": obj[name_key], "v": obj[id_key].toString()}) + } + return values + } + + getFilters() { + let filters = {} + for (const channel_info of this.channelList) { + filters[channel_info.channelId] = [] + let sortMapList = this.channelFilters["sortsMap"][parseInt(channel_info.channelId)] + let sortValues = this.getValues(sortMapList, "title", "id") + filters[channel_info.channelId].push({"key": "1", "name": "排序", "value": sortValues}) + let typeMapList = this.channelFilters["typesMap"][parseInt(channel_info.channelId)] + let typeValues = this.getValues(typeMapList, "showTypeName", "showTypeId") + filters[channel_info.channelId].push({"key": "2", "name": "类型", "value": typeValues}) + let areaValues = this.getValues(this.channelFilters["regions"], "regionName", "regionId") + filters[channel_info.channelId].push({"key": "3", "name": "地区", "value": areaValues}) + let langValues = this.getValues(this.channelFilters["langs"], "langName", "langId") + filters[channel_info.channelId].push({"key": "4", "name": "语言", "value": langValues}) + let yearValues = this.getValues(this.channelFilters["yearRanges"], "name", "code") + filters[channel_info.channelId].push({"key": "5", "name": "年份", "value": yearValues}) + } + return filters + } + + getChannelFilters() { + return this.channelFilters + } + + + + getChannelMsg() { + return this.channelMsg + } + + getChannelStatus() { + return this.channelStatus + } + + getChannelList() { + return this.channelList + } + + getClassList() { + let classes = [] + for (const channel_info of this.channelList) { + classes.push({"type_id": channel_info.channelId, "type_name": channel_info.channelName}) + } + return classes + } + + + async save() { + await local.set("niba", "niba_channel", this.toString()); + return this; + } + + clear() { + this.channelMsg = "" + this.channelStatus = 0 + this.channelList = [] + } + + async clearCache() { + this.clear() + await local.set("niba", "niba_channel", "{}"); + } + + toString() { + const params = { + msg: this.getChannelMsg(), + status: this.getChannelStatus(), + list: this.getChannelList(), + filter: this.getChannelFilters() + }; + return JSON.stringify(params); + } +} + +async function getChannelCache() { + return await local.get("niba", "niba_channel"); +} + +class ChannelInfo { + constructor() { + this.channelId = 0 + this.channelName = "" + } + + fromJsonString(json_str) { + let json_dic = JSON.parse(json_str) + this.channelId = json_dic.channelId + this.channelName = json_dic.channelName + } + + fromJson(json) { + this.channelId = json.channelId + this.channelName = json.channelName + } + + getChannelName() { + return this.channelName + } + + getChannelId() { + return this.channelId + } +} + +function isNumeric(str) { + return !isNaN(parseInt(str)); +} + +function getVod(video_dic_list, play_foramt_list, showIdCode) { + let episode_list = [], episode_str_list = []; + for (const video_dic of video_dic_list) { + let video_name = "" + if (isNumeric((video_dic['episodeName']))) { + video_name = "第" + video_dic["episodeName"] + "集" + } else { + video_name = video_dic["episodeName"] + } + episode_list.push(video_name + "$" + video_dic["playIdCode"] + "@" + showIdCode); + } + + for (let index = 0; index < play_foramt_list.length; index++) { + episode_str_list.push(episode_list.join("#")); + } + return { + vod_play_url: episode_str_list.join("$$$"), + vod_play_from: play_foramt_list.map(item => item).join("$$$"), + }; +} + +function getHeader() { + return { + "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36", + "Referer": "https://m.nivod.tv/", + "Content-Type": "application/x-www-form-urlencoded" + } +} + + +function md5(text) { + return Crypto.MD5(text).toString() +} + +//加密 +async function createSign(body = null) { + let params = { + "_ts": Date.now(), "app_version": "1.0", + "platform": "3", "market_id": "web_nivod", + "device_code": "web", "versioncode": 1, + "oid": "8ca275aa5e12ba504b266d4c70d95d77a0c2eac5726198ea" + } + /** + * __QUERY::_ts=1702973558399&app_version=1.0&device_code=web&market_id=web_nivod&oid=8ca275aa5e12ba504b266d4c70d95d77a0c2eac5726198ea&platform=3&versioncode=1&__BODY::__KEY::2x_Give_it_a_shot + */ + let params_list = [] + for (const key of Object.keys(params).sort()) { + params_list.push(`${key}=${params[key]}`) + } + let body_str = "&__BODY::" + if (body !== null) { + let body_list = [] + for (const key of Object.keys(body).sort()) { + body_list.push(`${key}=${body[key]}`) + } + body_str = body_str + body_list.join("&") + "&" + } + + + let params_str = "__QUERY::" + params_list.join("&") + body_str + "__KEY::2x_Give_it_a_shot" + let sign_code = md5(params_str) + params_list.push(`sign=${sign_code}`) + return "?" + params_list.join("&") + +} + +//解密 +function desDecrypt(content) { + // 定义密钥 + const key = Crypto.enc.Utf8.parse(DesKey); // 密钥需要进行字节数转换 + /* + const encrypted = Crypto.DES.encrypt(content, key, { + mode: Crypto.mode.ECB, // 使用ECB模式 + padding: Crypto.pad.Pkcs7, // 使用Pkcs7填充 + }).ciphertext.toString(); + */ + return Crypto.DES.decrypt({ciphertext: Crypto.enc.Hex.parse(content)}, key, { + mode: Crypto.mode.ECB, + padding: Crypto.pad.Pkcs7, + }).toString(Crypto.enc.Utf8); +} + +export {getChannelCache, desDecrypt, createSign, ChannelResponse, getHeader, getVod}; \ No newline at end of file diff --git a/cat/tjs/lib/pipiXiaObject.js b/cat/tjs/lib/pipiXiaObject.js new file mode 100644 index 0000000..ad5a303 --- /dev/null +++ b/cat/tjs/lib/pipiXiaObject.js @@ -0,0 +1,146 @@ +/* +* @File : pipiXiaObject.js +* @Author : jade +* @Date : 2024/2/4 14:33 +* @Email : jadehh@1ive.com +* @Software : Samples +* @Desc : +*/ +const UID = "DCC147D11943AF75" +const chrsz = 8; +const hexcase = 0; + +function hex_md5(s) { + return binl2hex(core_md5(str2binl(s), s.length * chrsz)) +} +function str2binl(str) { + var bin = Array(); + var mask = (1 << chrsz) - 1; + for (var i = 0; i < str.length * chrsz; i += chrsz) + bin[i >> 5] |= (str.charCodeAt(i / chrsz) & mask) << (i % 32); + return bin +} +function core_md5(x, len) { + x[len >> 5] |= 0x80 << ((len) % 32); + x[(((len + 64) >>> 9) << 4) + 14] = len; + var a = 1732584193; + var b = -271733879; + var c = -1732584194; + var d = 271733878; + for (var i = 0; i < x.length; i += 16) { + var olda = a; + var oldb = b; + var oldc = c; + var oldd = d; + a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936); + d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586); + c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819); + b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330); + a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897); + d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426); + c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341); + b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983); + a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416); + d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417); + c = md5_ff(c, d, a, b, x[i + 10], 17, -42063); + b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162); + a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682); + d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101); + c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290); + b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329); + a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510); + d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632); + c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713); + b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302); + a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691); + d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083); + c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335); + b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848); + a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438); + d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690); + c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961); + b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501); + a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467); + d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784); + c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473); + b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734); + a = md5_hh(a, b, c, d, x[i + 5], 4, -378558); + d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463); + c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562); + b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556); + a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060); + d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353); + c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632); + b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640); + a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174); + d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222); + c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979); + b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189); + a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487); + d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835); + c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520); + b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651); + a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844); + d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415); + c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905); + b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055); + a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571); + d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606); + c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523); + b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799); + a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359); + d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744); + c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380); + b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649); + a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070); + d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379); + c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259); + b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551); + a = safe_add(a, olda); + b = safe_add(b, oldb); + c = safe_add(c, oldc); + d = safe_add(d, oldd) + } + return Array(a, b, c, d) +} +function md5_gg(a, b, c, d, x, s, t) { + return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t) +} + +function md5_ff(a, b, c, d, x, s, t) { + return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t) +} + +function md5_hh(a, b, c, d, x, s, t) { + return md5_cmn(b ^ c ^ d, a, b, x, s, t) +} +function md5_ii(a, b, c, d, x, s, t) { + return md5_cmn(c ^ (b | (~d)), a, b, x, s, t) +} +function md5_cmn(q, a, b, x, s, t) { + return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b) +} +function safe_add(x, y) { + var lsw = (x & 0xFFFF) + (y & 0xFFFF); + var msw = (x >> 16) + (y >> 16) + (lsw >> 16); + return (msw << 16) | (lsw & 0xFFFF) +} +function bit_rol(num, cnt) { + return (num << cnt) | (num >>> (32 - cnt)) +} +function binl2hex(binarray) { + let hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef"; + let str = ""; + for (let i = 0; i < binarray.length * 4; i++) { + str += hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8 + 4)) & 0xF) + hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8)) & 0xF) + } + return str +} +function pipixiaMd5(date_time) { + return hex_md5('DS' + date_time + UID) +} +export {pipixiaMd5} + + +// let key = pipixiaMd5(Math.floor(new Date() / 1000),"DCC147D11943AF75") +// let x = 0 diff --git a/cat/tjs/lib/quark.js b/cat/tjs/lib/quark.js new file mode 100644 index 0000000..0b8630c --- /dev/null +++ b/cat/tjs/lib/quark.js @@ -0,0 +1,66 @@ +/** + * File: h:\PycharmProjects\Github\TVSpider\lib\quark.js + * Project: h:\PycharmProjects\Github\TVSpider + * Created Date: Monday, May 20th 2024, 4:54:26 pm + * Author: jade + * ----- + * Last Modified: Tue May 21 2024 + * Modified By: jade + * ----- + * Copyright (c) 2024 samples + * ------------------------------------ + * Javascript will save your soul! + */ + +import {JadeLogging} from "./log.js"; +import {Quark} from "./quark_api.js" +const quarkName = "夸克云盘" +const JadeLog = new JadeLogging(quarkName) +const quark = new Quark() +async function initQuark(cookie) { + quark.initQuark(cookie) + await JadeLog.info(`夸克云盘初始化完成,Cookie为:${cookie}`, true) +} +async function detailContentQuark(share_url_list, type_name = "电影") { + try { + let video_items = [], sub_items = [] + for (let i=0;i 0) { + await JadeLog.info(`获取播放链接成功,分享链接为:${share_url_list.join("\t")}`) + } else { + await JadeLog.error(`获取播放链接失败,检查分享链接为:${share_url_list.join("\t")}`) + } + return {"video_items":video_items,"sub_items":sub_items} + } catch (e) { + await JadeLog.error('获取夸克视频失败,失败原因为:' + e.message + ' 行数为:' + e.lineNumber); + } +} + +function getQuarkPlayFormatList(){ + return quark.getPlayFormatList() +} + +async function playContentQuark(flag, id, flags){ + + let id_list = id.split("++") + let shareId = id_list[2],stoken = id_list[3], fileId = id_list[0], fileToken = id_list[1] + let playUrl = "" + if (flag.indexOf("原画") > -1){ + playUrl = (await quark.getDownload(shareId, stoken, fileId, fileToken,true)).download_url + }else{ + playUrl = await quark.getLiveTranscoding(shareId, stoken, fileId, fileToken,flag) + } + return playUrl +} + +function getQuarkHeaders(){ + let headers = quark.getHeaders() + delete headers["Host"] + return headers +} + +export {initQuark,detailContentQuark,playContentQuark,getQuarkPlayFormatList,quarkName,getQuarkHeaders} + diff --git a/cat/tjs/lib/quark_api.js b/cat/tjs/lib/quark_api.js new file mode 100644 index 0000000..de7a387 --- /dev/null +++ b/cat/tjs/lib/quark_api.js @@ -0,0 +1,313 @@ +/** + * File: /workspaces/TVSpider/lib/quark_api.js + * Project: /workspaces/TVSpider + * Created Date: Monday, May 20th 2024, 6:38:12 am + * Author: jade + * ----- + * Last Modified: Tue May 21 2024 + * Modified By: jade + * ----- + * Copyright (c) 2024 samples + * ------------------------------------ + * Javascript will save your soul! + */ +import {_,Crypto} from "../lib/cat.js"; +import * as Utils from "../lib/utils.js" +import {Item} from "../lib/quark_object.js" + +class Quark{ + constructor(){ + this.apiUrl = "https://drive-pc.quark.cn/1/clouddrive/" + this.cookie = "" + this.ckey = "" + this.shareTokenCache = {} + this.pr = "pr=ucpro&fr=pc" + this.subtitleExts = ['.srt', '.ass', '.scc', '.stl', '.ttml']; + this.saveFileIdCaches = {} + this.saveDirId = null + this.saveDirName = 'TV'; + this.isVip = false; + + } + async initQuark(cookie) { + this.ckey = Crypto.enc.Hex.stringify(Crypto.MD5(cookie)).toString(); + this.cookie = cookie + this.isVip = await this.getVip() + } + + getHeaders(){ + return { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) quark-cloud-drive/2.5.20 Chrome/100.0.4896.160 Electron/18.3.5.4-b478491100 Safari/537.36 Channel/pckk_other_ch', + 'Referer': 'https://pan.quark.cn/', + "Content-Type":"application/json", + "Cookie":this.cookie, + "Host":"drive-pc.quark.cn" + }; + + } + + async api(url,data,retry,method){ + const leftRetry = retry || 3; + let resp = await req(this.apiUrl + url,{ + method:method || "post", + data:data, + headers:this.getHeaders() + }) + if (resp.headers['set-cookie']) { + const puus = [resp.headers['set-cookie']].join(';;;').match(/__puus=([^;]+)/); + if (puus) { + if (this.cookie.match(/__puus=([^;]+)/)[1] != puus[1]) { + this.cookie = this.cookie.replace(/__puus=[^;]+/, `__puus=${puus[1]}`); + } + } + } + if (resp.code !== 200 && leftRetry > 0) { + Utils.sleep(1) + return await this.api(url, data, leftRetry - 1); + } + return JSON.parse(resp.content) || {}; + } + + getShareData(url) { + let regex = /https:\/\/pan\.quark\.cn\/s\/([^\\|#/]+)/; + let matches = regex.exec(url); + if (matches) { + return { + shareId: matches[1], + folderId: '0', + }; + } + return null; + } + + async getVip(){ + const listData = await this.api(`member?pr=ucpro&fr=pc&uc_param_str=&fetch_subscribe=true&_ch=home&fetch_identity=true`, null,null, 'get'); + if (listData.data.member_type==="EXP_SVIP"){ + return true + }else{ + return false + } + } + + getPlayFormatList(){ + if(this.isVip){ + return ["4K","超清","高清","普画"] + }else{ + return ["普画"] + } + } + + getPlayFormtQuarkList(){ + if(this.isVip){ + return ["4k","2k","super","high","normal","low"] + }{ + return ["low"] + } + } + + + async getShareToken(shareData) { + if (!this.shareTokenCache[shareData.shareId]) { + delete this.shareTokenCache[shareData.shareId]; + const shareToken = await this.api(`share/sharepage/token?${this.pr}`, { + pwd_id: shareData.shareId, + passcode: shareData.sharePwd || '', + }); + if (shareToken.data && shareToken.data.stoken) { + this.shareTokenCache[shareData.shareId] = shareToken.data; + } + } + } + async listFile (shareIndex,shareData,videos,subtitles,shareId, folderId, page) { + const prePage = 200; + page = page || 1; + const listData = await this.api(`share/sharepage/detail?${this.pr}&pwd_id=${shareId}&stoken=${encodeURIComponent(this.shareTokenCache[shareId].stoken)}&pdir_fid=${folderId}&force=0&_page=${page}&_size=${prePage}&_sort=file_type:asc,file_name:asc`, null,null, 'get'); + if (!listData.data) return []; + const items = listData.data.list; + if (!items) return []; + const subDir = []; + for (const item of items) { + if (item.dir === true) { + subDir.push(item); + } else if (item.file === true && item.obj_category === 'video') { + if (item.size < 1024 * 1024 * 5) continue; + item.stoken = this.shareTokenCache[shareData.shareId].stoken; + videos.push(Item.objectFrom(item,shareData.shareId,shareIndex)); + } else if (item.type === 'file' && this.subtitleExts.some((x) => item.file_name.endsWith(x))) { + subtitles.push(Item.objectFrom(item,shareData,shareIndex)); + } + } + if (page < Math.ceil(listData.metadata._total / prePage)) { + const nextItems = await this.listFile(shareIndex,shareData.shareId,videos,subtitles,shareId, folderId, page + 1); + for (const item of nextItems) { + items.push(item); + } + } + for (const dir of subDir) { + const subItems = await this.listFile(shareIndex,shareData,videos,subtitles,shareId, dir.fid); + for (const item of subItems) { + items.push(item); + } + } + return items; + }; + + findBestLCS(mainItem, targetItems) { + const results = []; + let bestMatchIndex = 0; + for (let i = 0; i < targetItems.length; i++) { + const currentLCS = Utils.lcs(mainItem.name, targetItems[i].name); + results.push({ target: targetItems[i], lcs: currentLCS }); + if (currentLCS.length > results[bestMatchIndex].lcs.length) { + bestMatchIndex = i; + } + } + const bestMatch = results[bestMatchIndex]; + return { allLCS: results, bestMatch: bestMatch, bestMatchIndex: bestMatchIndex }; + } + + async getFilesByShareUrl(shareIndex,shareInfo,videos,subtitles){ + const shareData = typeof shareInfo === 'string' ? this.getShareData(shareInfo) : shareInfo; + if (!shareData) return []; + await this.getShareToken(shareData); + if (!this.shareTokenCache[shareData.shareId]) return []; + await this.listFile(shareIndex,shareData,videos,subtitles,shareData.shareId, shareData.folderId); + if (subtitles.length > 0) { + videos.forEach((item) => { + var matchSubtitle = this.findBestLCS(item, subtitles); + if (matchSubtitle.bestMatch) { + item.subtitle = matchSubtitle.bestMatch.target; + } + }); + } + } + + clean(){ + const saves = Object.keys(this.saveFileIdCaches); + for (const save of saves) { + delete this.saveFileIdCaches[save]; + } + } + + + async clearSaveDir() { + const listData = await this.api(`file/sort?${this.pr}&pdir_fid=${this.saveDirId}&_page=1&_size=200&_sort=file_type:asc,updated_at:desc`, {}, {}, 'get'); + if (listData.data && listData.data.list && listData.data.list.length > 0) { + await this.api(`file/delete?${this.pr}`, { + action_type: 2, + filelist: listData.data.list.map((v) => v.fid), + exclude_fids: [], + }); + } + } + + async createSaveDir(clean) { + if (this.saveDirId) { + // 删除所有子文件 + if (clean) await this.clearSaveDir(); + return; + } + const listData = await this.api(`file/sort?${this.pr}&pdir_fid=0&_page=1&_size=200&_sort=file_type:asc,updated_at:desc`, {}, {}, 'get'); + if (listData.data && listData.data.list) + for (const item of listData.data.list) { + if (item.file_name === this.saveDirName) { + this.saveDirId = item.fid; + await this.clearSaveDir(); + break; + } + } + if (!this.saveDirId) { + const create = await this.api(`file?${this.pr}`, { + pdir_fid: '0', + file_name: this.saveDirName, + dir_path: '', + dir_init_lock: false, + }); + if (create.data && create.data.fid) { + this.saveDirId = create.data.fid; + } + } + } + + async save(shareId, stoken, fileId, fileToken, clean) { + await this.createSaveDir(clean); + if (clean) { + this.clean() + } + if (!this.saveDirId) return null; + if (!stoken) { + await this.getShareToken({ + shareId: shareId, + }); + if (!this.shareTokenCache[shareId]) return null; + } + const saveResult = await this.api(`share/sharepage/save?${this.pr}`, { + fid_list: [fileId], + fid_token_list: [fileToken], + to_pdir_fid: this.saveDirId, + pwd_id: shareId, + stoken: stoken || this.shareTokenCache[shareId].stoken, + pdir_fid: '0', + scene: 'link', + }); + if (saveResult.data && saveResult.data.task_id) { + let retry = 0; + // wait task finish + while (true) { + const taskResult = await this.api(`task?${this.pr}&task_id=${saveResult.data.task_id}&retry_index=${retry}`, {}, {}, 'get'); + if (taskResult.data && taskResult.data.save_as && taskResult.data.save_as.save_as_top_fids && taskResult.data.save_as.save_as_top_fids.length > 0) { + return taskResult.data.save_as.save_as_top_fids[0]; + } + retry++; + if (retry > 2) break; + Utils.sleep(1); + } + } + return false; + } + + + async getLiveTranscoding(shareId, stoken, fileId, fileToken,flag) { + if (!this.saveFileIdCaches[fileId]) { + const saveFileId = await this.save(shareId, stoken, fileId, fileToken, true); + if (!saveFileId) return null; + this.saveFileIdCaches[fileId] = saveFileId; + } + const transcoding = await this.api(`file/v2/play?${this.pr}`, { + fid: this.saveFileIdCaches[fileId], + resolutions: 'normal,low,high,super,2k,4k', + supports: 'fmp4', + }); + + + if (transcoding.data && transcoding.data.video_list) { + let flag_id = flag.split("-").slice(-1)[0] + let index = Utils.findAllIndexes(this.getPlayFormatList(),flag_id); + let quarkFormat = this.getPlayFormtQuarkList()[index] + for (const video of transcoding.data.video_list){ + if (video.resolution === quarkFormat){ + return video.video_info.url + } + } + return transcoding.data.video_list[index].video_info.url + } + return null; + } + + async getDownload(shareId, stoken, fileId, fileToken, clean) { + if (!this.saveFileIdCaches[fileId]) { + const saveFileId = await this.save(shareId, stoken, fileId, fileToken, clean); + if (!saveFileId) return null; + this.saveFileIdCaches[fileId] = saveFileId; + } + const down = await this.api(`file/download?${this.pr}&uc_param_str=`, { + fids: [this.saveFileIdCaches[fileId]], + }); + if (down.data) { + return down.data[0]; + } + return null; + } + +} +export {Quark} \ No newline at end of file diff --git a/cat/tjs/lib/quark_object.js b/cat/tjs/lib/quark_object.js new file mode 100644 index 0000000..e94097c --- /dev/null +++ b/cat/tjs/lib/quark_object.js @@ -0,0 +1,98 @@ +/** + * File: h:\PycharmProjects\Github\TVSpider\lib\quark_object.js + * Project: h:\PycharmProjects\Github\TVSpider + * Created Date: Monday, May 20th 2024, 5:26:45 pm + * Author: jade + * ----- + * Last Modified: Tue May 21 2024 + * Modified By: jade + * ----- + * Copyright (c) 2024 samples + * ------------------------------------ + * Javascript will save your soul! + */ +import {_} from "../lib/cat.js"; +import * as Utils from "./utils.js"; + + +class Item { + constructor() { + this.fileId = ""; + this.shareId = "" + this.shareToken = ""; + this.shareFileToken = "" + this.seriesId = "" + this.name = ""; + this.type = ""; + this.formatType = ""; + this.size = ""; + this.parent = ""; + this.shareData = null; + this.shareIndex = 0; + this.lastUpdateAt = 0 + } + + static objectFrom(item_json, shareId,shareIndex) { + let item = new Item(); + item.fileId = typeof item_json.fid == undefined ? "" : item_json.fid; + item.shareId = shareId + item.shareToken = typeof item_json.stoken == undefined ? "" : item_json.stoken; + item.shareFileToken = typeof item_json.share_fid_token == undefined ? "" : item_json.share_fid_token; + item.seriesId = typeof item_json.series_id == undefined? "":item_json.series_id + item.name = typeof item_json.file_name == undefined ? "" : item_json.file_name; + item.type = typeof item_json.obj_category == undefined ? "" : item_json.obj_category; + item.formatType = typeof item_json.format_type == undefined? "" : item_json.format_type; + item.size = typeof item_json.size == undefined ? "" : item_json.size; + item.parent = typeof item_json.pdir_fid == undefined ? "" : item_json.pdir_fid; + item.lastUpdateAt = typeof item_json.last_update_at == undefined ? "" : item_json.last_update_at + item.shareIndex = shareIndex + return item; + } + + getFileExtension(){ + return this.name.split(".").slice(-1)[0] + } + + getFileId() { + return _.isEmpty(this.fileId) ? "" : this.fileId + } + + getName() { + return _.isEmpty(this.name) ? "" : this.name; + } + + getParent() { + return _.isEmpty(this.parent) ? "" : "[" + this.parent + "]"; + } + + getSize() { + return this.size === 0 ? "" : "[" + Utils.getSize(this.size) + "]"; + } + + getShareIndex(){ + return this.shareIndex + } + getDisplayName(type_name) { + let name = this.getName(); + if (type_name === "电视剧") { + let replaceNameList = ["4k", "4K"] + name = name.replaceAll("." + this.getFileExtension(), "") + name = name.replaceAll(" ", "").replaceAll(" ", "") + for (const replaceName of replaceNameList) { + name = name.replaceAll(replaceName, "") + } + name = Utils.getStrByRegexDefault(/\.S01E(.*?)\./, name) + const numbers = name.match(/\d+/g); + if (!_.isEmpty(numbers) && numbers.length > 0) { + name = numbers[0] + } + } + + return name + " " + this.getSize(); + } + + getEpisodeUrl(type_name){ + return this.getDisplayName(type_name) + "$" + this.getFileId() + "++" + this.shareFileToken + "++" + this.shareId + "++" + this.shareToken + } +} +export {Item} \ No newline at end of file diff --git a/cat/tjs/lib/shift-jis.js b/cat/tjs/lib/shift-jis.js new file mode 100644 index 0000000..5c95635 --- /dev/null +++ b/cat/tjs/lib/shift-jis.js @@ -0,0 +1,170 @@ +import { inRange, decoderError, encoderError, floor, isASCIICodePoint, isASCIIByte, + end_of_stream, finished } from './text_decoder_utils.js' +import index, { indexCodePointFor, indexShiftJISPointerFor } from './text_decoder_indexes.js' + + +// 13.3 Shift_JIS + +// 13.3.1 Shift_JIS decoder +/** + * @constructor + * @implements {Decoder} + * @param {{fatal: boolean}} options + */ +export class ShiftJISDecoder { + constructor(options) { + const { fatal } = options + this.fatal = fatal + // Shift_JIS's decoder has an associated Shift_JIS lead (initially + // 0x00). + this.Shift_JIS_lead = 0x00 + } + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + */ + handler(stream, bite) { + // 1. If byte is end-of-stream and Shift_JIS lead is not 0x00, + // set Shift_JIS lead to 0x00 and return error. + if (bite === end_of_stream && this.Shift_JIS_lead !== 0x00) { + this.Shift_JIS_lead = 0x00 + return decoderError(this.fatal) + } + + // 2. If byte is end-of-stream and Shift_JIS lead is 0x00, + // return finished. + if (bite === end_of_stream && this.Shift_JIS_lead === 0x00) + return finished + + // 3. If Shift_JIS lead is not 0x00, let lead be Shift_JIS lead, + // let pointer be null, set Shift_JIS lead to 0x00, and then run + // these substeps: + if (this.Shift_JIS_lead !== 0x00) { + var lead = this.Shift_JIS_lead + var pointer = null + this.Shift_JIS_lead = 0x00 + + // 1. Let offset be 0x40, if byte is less than 0x7F, and 0x41 + // otherwise. + var offset = (bite < 0x7F) ? 0x40 : 0x41 + + // 2. Let lead offset be 0x81, if lead is less than 0xA0, and + // 0xC1 otherwise. + var lead_offset = (lead < 0xA0) ? 0x81 : 0xC1 + + // 3. If byte is in the range 0x40 to 0x7E, inclusive, or 0x80 + // to 0xFC, inclusive, set pointer to (lead − lead offset) × + // 188 + byte − offset. + if (inRange(bite, 0x40, 0x7E) || inRange(bite, 0x80, 0xFC)) + pointer = (lead - lead_offset) * 188 + bite - offset + + // 4. If pointer is in the range 8836 to 10715, inclusive, + // return a code point whose value is 0xE000 − 8836 + pointer. + if (inRange(pointer, 8836, 10715)) + return 0xE000 - 8836 + pointer + + // 5. Let code point be null, if pointer is null, and the + // index code point for pointer in index jis0208 otherwise. + var code_point = (pointer === null) ? null : + indexCodePointFor(pointer, index('jis0208')) + + // 6. If code point is null and byte is an ASCII byte, prepend + // byte to stream. + if (code_point === null && isASCIIByte(bite)) + stream.prepend(bite) + + // 7. If code point is null, return error. + if (code_point === null) + return decoderError(this.fatal) + + // 8. Return a code point whose value is code point. + return code_point + } + + // 4. If byte is an ASCII byte or 0x80, return a code point + // whose value is byte. + if (isASCIIByte(bite) || bite === 0x80) + return bite + + // 5. If byte is in the range 0xA1 to 0xDF, inclusive, return a + // code point whose value is 0xFF61 − 0xA1 + byte. + if (inRange(bite, 0xA1, 0xDF)) + return 0xFF61 - 0xA1 + bite + + // 6. If byte is in the range 0x81 to 0x9F, inclusive, or 0xE0 + // to 0xFC, inclusive, set Shift_JIS lead to byte and return + // continue. + if (inRange(bite, 0x81, 0x9F) || inRange(bite, 0xE0, 0xFC)) { + this.Shift_JIS_lead = bite + return null + } + + // 7. Return error. + return decoderError(this.fatal) + } +} + +// 13.3.2 Shift_JIS encoder +/** + * @constructor + * @implements {Encoder} + * @param {{fatal: boolean}} options + */ +export class ShiftJISEncoder { + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + */ + handler(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished + + // 2. If code point is an ASCII code point or U+0080, return a + // byte whose value is code point. + if (isASCIICodePoint(code_point) || code_point === 0x0080) + return code_point + + // 3. If code point is U+00A5, return byte 0x5C. + if (code_point === 0x00A5) + return 0x5C + + // 4. If code point is U+203E, return byte 0x7E. + if (code_point === 0x203E) + return 0x7E + + // 5. If code point is in the range U+FF61 to U+FF9F, inclusive, + // return a byte whose value is code point − 0xFF61 + 0xA1. + if (inRange(code_point, 0xFF61, 0xFF9F)) + return code_point - 0xFF61 + 0xA1 + + // 6. If code point is U+2212, set it to U+FF0D. + if (code_point === 0x2212) + code_point = 0xFF0D + + // 7. Let pointer be the index Shift_JIS pointer for code point. + var pointer = indexShiftJISPointerFor(code_point) + + // 8. If pointer is null, return error with code point. + if (pointer === null) + return encoderError(code_point) + + // 9. Let lead be floor(pointer / 188). + var lead = floor(pointer / 188) + + // 10. Let lead offset be 0x81, if lead is less than 0x1F, and + // 0xC1 otherwise. + var lead_offset = (lead < 0x1F) ? 0x81 : 0xC1 + + // 11. Let trail be pointer % 188. + var trail = pointer % 188 + + // 12. Let offset be 0x40, if trail is less than 0x3F, and 0x41 + // otherwise. + var offset = (trail < 0x3F) ? 0x40 : 0x41 + + // 13. Return two bytes whose values are lead + lead offset and + // trail + offset. + return [lead + lead_offset, trail + offset] + } +} \ No newline at end of file diff --git a/cat/tjs/lib/similarity.js b/cat/tjs/lib/similarity.js new file mode 100644 index 0000000..fc2e44e --- /dev/null +++ b/cat/tjs/lib/similarity.js @@ -0,0 +1,53 @@ +function compareTwoStrings(first, second) { + if ((first = first.replace(/\s+/g, "")) === (second = second.replace(/\s+/g, ""))) return 1; + if (first.length < 2 || second.length < 2) return 0; + var firstBigrams = new Map; + for (let i = 0; i < first.length - 1; i++) { + var bigram = first.substring(i, i + 2), count = firstBigrams.has(bigram) ? firstBigrams.get(bigram) + 1 : 1; + firstBigrams.set(bigram, count) + } + let intersectionSize = 0; + for (let i = 0; i < second.length - 1; i++) { + const bigram = second.substring(i, i + 2), count = firstBigrams.has(bigram) ? firstBigrams.get(bigram) : 0; + 0 < count && (firstBigrams.set(bigram, count - 1), intersectionSize++) + } + return 2 * intersectionSize / (first.length + second.length - 2) +} + +function findBestMatch(mainString, targetStrings) { + var ratings = []; + let bestMatchIndex = 0; + for (let i = 0; i < targetStrings.length; i++) { + var currentTargetString = targetStrings[i], currentRating = compareTwoStrings(mainString, currentTargetString); + ratings.push({ + target: currentTargetString, + rating: currentRating + }), currentRating > ratings[bestMatchIndex].rating && (bestMatchIndex = i) + } + return {ratings: ratings, bestMatch: ratings[bestMatchIndex], bestMatchIndex: bestMatchIndex} +} + +function lcs(str1, str2) { + if (!str1 || !str2) return {length: 0, sequence: "", offset: 0}; + for (var sequence = "", str1Length = str1.length, str2Length = str2.length, num = new Array(str1Length), maxlen = 0, lastSubsBegin = 0, i = 0; i < str1Length; i++) { + for (var subArray = new Array(str2Length), j = 0; j < str2Length; j++) subArray[j] = 0; + num[i] = subArray + } + for (var thisSubsBegin = null, i = 0; i < str1Length; i++) for (j = 0; j < str2Length; j++) str1[i] !== str2[j] ? num[i][j] = 0 : (num[i][j] = 0 === i || 0 === j ? 1 : 1 + num[i - 1][j - 1], num[i][j] > maxlen && (maxlen = num[i][j], lastSubsBegin === (thisSubsBegin = i - num[i][j] + 1) ? sequence += str1[i] : (lastSubsBegin = thisSubsBegin, sequence = "", sequence += str1.substr(lastSubsBegin, i + 1 - lastSubsBegin)))); + return {length: maxlen, sequence: sequence, offset: thisSubsBegin} +} + +function findBestLCS(mainString, targetStrings) { + var results = []; + let bestMatchIndex = 0; + for (let i = 0; i < targetStrings.length; i++) { + var currentTargetString = targetStrings[i], currentLCS = lcs(mainString, currentTargetString); + results.push({ + target: currentTargetString, + lcs: currentLCS + }), currentLCS.length > results[bestMatchIndex].lcs.length && (bestMatchIndex = i) + } + return {allLCS: results, bestMatch: results[bestMatchIndex], bestMatchIndex: bestMatchIndex} +} + +export {compareTwoStrings, findBestMatch, findBestLCS}; \ No newline at end of file diff --git a/cat/tjs/lib/single-byte.js b/cat/tjs/lib/single-byte.js new file mode 100644 index 0000000..e54ddd8 --- /dev/null +++ b/cat/tjs/lib/single-byte.js @@ -0,0 +1,86 @@ +import { end_of_stream, finished, isASCIIByte, decoderError, encoderError, isASCIICodePoint } from './text_decoder_utils.js' +import { indexPointerFor } from './text_decoder_indexes.js' + +// +// 10. Legacy single-byte encodings +// + +// 10.1 single-byte decoder +/** + * @implements {Decoder} + */ +export class SingleByteDecoder { + /** + * @param {!Array.} index The encoding index. + * @param {{fatal: boolean}} options + */ + constructor(index, options) { + const { fatal } = options + this.fatal = fatal + this.index = index + } + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + */ + handler(stream, bite) { + // 1. If byte is end-of-stream, return finished. + if (bite === end_of_stream) + return finished + + // 2. If byte is an ASCII byte, return a code point whose value + // is byte. + if (isASCIIByte(bite)) + return bite + + // 3. Let code point be the index code point for byte − 0x80 in + // index single-byte. + var code_point = this.index[bite - 0x80] + + // 4. If code point is null, return error. + if (code_point === null) + return decoderError(this.fatal) + + // 5. Return a code point whose value is code point. + return code_point + } +} + +// 10.2 single-byte encoder +/** + * @implements {Encoder} + */ +export class SingleByteEncoder { + /** + * @param {!Array.} index The encoding index. + */ + constructor(index) { + this.index = index + } + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + handler(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point + + // 3. Let pointer be the index pointer for code point in index + // single-byte. + const pointer = indexPointerFor(code_point, this.index) + + // 4. If pointer is null, return error with code point. + if (pointer === null) + encoderError(code_point) + + // 5. Return a byte whose value is pointer + 0x80. + return pointer + 0x80 + } +} \ No newline at end of file diff --git a/cat/tjs/lib/table.js b/cat/tjs/lib/table.js new file mode 100644 index 0000000..41195fa --- /dev/null +++ b/cat/tjs/lib/table.js @@ -0,0 +1,119 @@ +import Encodings from './encodings.js' +import { UTF8Decoder, UTF8Encoder } from './utf8.js' +import { UTF16Decoder, UTF16Encoder } from './utf16.js' +import { GB18030Decoder, GB18030Encoder } from './gb18030.js' +import { Big5Decoder, Big5Encoder } from './big5.js' +import { EUCJPDecoder, EUCJPEncoder } from './euc-jp.js' +import { EUCKRDecoder, EUCKREncoder } from './euc-kr.js' +import { ISO2022JPDecoder, ISO2022JPEncoder } from './iso-2022-jp.js' +import { XUserDefinedDecoder, XUserDefinedEncoder } from './x-user-defined.js' +import { ShiftJISDecoder, ShiftJISEncoder } from './shift-jis.js' +import { SingleByteDecoder, SingleByteEncoder } from './single-byte.js' +import index from './text_decoder_indexes.js'; + +// 5.2 Names and labels + +// TODO: Define @typedef for Encoding: {name:string,labels:Array.} +// https://github.com/google/closure-compiler/issues/247 + + +// Label to encoding registry. +/** @type {Object.}>} */ +export const label_to_encoding = {} +Encodings.forEach(({ encodings }) => { + encodings.forEach((encoding) => { + encoding.labels.forEach((label) => { + label_to_encoding[label] = encoding + }) + }) +}) + +// Registry of of encoder/decoder factories, by encoding name. +export const encoders = { + 'UTF-8'() { // 9.1 utf-8 + return new UTF8Encoder() + }, + 'GBK'(options) { // 11.1.2 gbk encoder; + // gbk's encoder is gb18030's encoder with its gbk flag set. + return new GB18030Encoder(options, true) + }, + 'gb18030'() { + return new GB18030Encoder() + }, + 'Big5'() { + return new Big5Encoder() + }, + 'EUC-JP'() { + return new EUCJPEncoder() + }, + 'EUC-KR'() { + return new EUCKREncoder() + }, + 'ISO-2022-JP'() { + return new ISO2022JPEncoder() + }, + 'UTF-16BE'() { // 15.3 utf-16be + return new UTF16Encoder(true) + }, + 'UTF-16LE'() { // 15.4 utf-16le + return new UTF16Encoder() + }, + 'x-user-defined'() { + return new XUserDefinedEncoder() + }, + 'Shift_JIS'() { + return new ShiftJISEncoder() + }, +} + +/** @type {Object.} */ +export const decoders = { + 'UTF-8'(options) { // 9.1.1 utf-8 decoder + return new UTF8Decoder(options) + }, + 'GBK'(options) { // 11.1.1 gbk decoder; gbk's decoder is gb18030's decoder. + return new GB18030Decoder(options) + }, + 'gb18030'(options) { + return new GB18030Decoder(options) + }, + 'Big5'(options) { + return new Big5Decoder(options) + }, + 'EUC-JP'(options) { + return new EUCJPDecoder(options) + }, + 'EUC-KR'(options) { + return new EUCKRDecoder(options) + }, + 'ISO-2022-JP'(options) { + return new ISO2022JPDecoder(options) + }, + 'UTF-16BE'(options) { // 15.3.1 utf-16be decoder + return new UTF16Decoder(true, options) + }, + 'UTF-16LE'(options) { // 15.4.1 utf-16le decoder + return new UTF16Decoder(false, options) + }, + 'x-user-defined'() { + return new XUserDefinedDecoder() + }, + 'Shift_JIS'(options) { + return new ShiftJISDecoder(options) + }, +} + +Encodings.forEach(({ heading, encodings }) => { + if (heading != 'Legacy single-byte encodings') + return + encodings.forEach((encoding) => { + const name = encoding.name + const idx = index(name.toLowerCase()) + decoders[name] = (options) => { + return new SingleByteDecoder(idx, options) + } + encoders[name] = (options) => { + return new SingleByteEncoder(idx, options) + } + }) +}) \ No newline at end of file diff --git a/cat/tjs/lib/tencentDanmu.js b/cat/tjs/lib/tencentDanmu.js new file mode 100644 index 0000000..e7f259d --- /dev/null +++ b/cat/tjs/lib/tencentDanmu.js @@ -0,0 +1,84 @@ +/* +* @File : tencentDanmu.js +* @Author : jade +* @Date : 2024/3/13 13:17 +* @Email : jadehh@1ive.com +* @Software : Samples +* @Desc : +*/ + +import {DammuSpider} from "./danmuSpider.js"; +import {VodDetail} from "./vod.js"; +import * as Utils from "./utils.js"; + +class TencentDammuSpider extends DammuSpider { + constructor() { + super() + this.siteUrl = "https://v.qq.com" + this.reconnectTimes = 0 + this.maxReconnectTimes = 5 + } + + getAppName() { + return "腾讯视频" + } + + async parseVodShortListFromDoc($) { + let vodElements = $("[class=\"_infos\"]") + let vod_list = [] + for (const vodElement of vodElements) { + let vodDetail = new VodDetail() + let titleElement = $(vodElement).find("[class=\"result_title\"]") + let infoItemEvenElenet = $(vodElement).find("[class=\"info_item info_item_even\"]") + let infoItemOddElement = $(vodElement).find("[class=\"info_item info_item_odd\"]") + let descElement = $(vodElement).find("[class=\"info_item info_item_desc\"]") + vodDetail.vod_name = $($(titleElement).find("[class=\"hl\"]")).text() + vodDetail.vod_year = $($(titleElement).find("[class=\"sub\"]")).text().replaceAll("\n","").replaceAll("(","").replaceAll(")","").replaceAll("\t","").split("/").slice(-1)[0] + vodDetail.type_name = $($(titleElement).find("[class=\"type\"]")).text() + vodDetail.vod_director = $($($(infoItemEvenElenet).find("[class=\"content\"]")).find("span")).text() + let actorList = $( $(infoItemOddElement.slice(-1)[0]).find("[class=\"content\"]")).find("a") + let vodActorList = [] + for (const actorElement of actorList){ + vodActorList.push($(actorElement).text()) + } + vodDetail.vod_actor = vodActorList.join(" * ") + vodDetail.vod_content = $($(descElement).find("[class=\"desc_text\"]")[0]).text() + let url = $(vodElement).find("a")[0].attribs.href + if (url.indexOf("cover") > -1){ + let detail$ = await this.getHtml(url) + let video_ids = JSON.parse(Utils.getStrByRegex(/"video_ids":(.*?),/,detail$.html())) + vodDetail.vod_id = video_ids[0] + vod_list.push(vodDetail) + } + } + return vod_list + } + + async search(wd) { + await this.jadeLog.debug(`正在搜索:${wd}`, true) + let searchUrl = this.siteUrl + `/x/search/?q=${wd}` + let $ = await this.getHtml(searchUrl) + return this.parseVodShortListFromDoc($) + } + + parseDammu(id){ + + } + + + async getDammu(voddetail, episodeId) { + let vod_list = await this.search(voddetail.vod_name) + for (const searchVodDetail of vod_list){ + if (voddetail.vod_director === searchVodDetail.vod_director){ + await this.jadeLog.debug("搜索匹配成功",true) + return + } + } + await this.jadeLog.warning(`搜索匹配失败,原:${JSON.stringify(voddetail)},搜索:${JSON.stringify(vod_list)}`) + return "" + } +} + +export {TencentDammuSpider} + + diff --git a/cat/tjs/lib/text_decoder_index.js b/cat/tjs/lib/text_decoder_index.js new file mode 100644 index 0000000..cde1def --- /dev/null +++ b/cat/tjs/lib/text_decoder_index.js @@ -0,0 +1,118 @@ +import { end_of_stream } from './text_decoder_utils.js' +import { label_to_encoding } from './table.js' + +export default class Stream { + /** + * A stream represents an ordered sequence of tokens. + * @param {!(Array.|Uint8Array)} tokens Array of tokens that provide + * the stream. + */ + constructor(tokens) { + this.tokens = [...tokens] + // Reversed as push/pop is more efficient than shift/unshift. + this.tokens.reverse() + } + /** + * @returns True if end-of-stream has been hit. + */ + endOfStream() { + return !this.tokens.length + } + /** + * When a token is read from a stream, the first token in the + * stream must be returned and subsequently removed, and + * end-of-stream must be returned otherwise. + * + * @return Get the next token from the stream, or end_of_stream. + */ + read() { + if (!this.tokens.length) + return end_of_stream + return this.tokens.pop() + } + /** + * When one or more tokens are prepended to a stream, those tokens + * must be inserted, in given order, before the first token in the + * stream. + * + * @param {(number|!Array.)} token The token(s) to prepend to the + * stream. + */ + prepend(token) { + if (Array.isArray(token)) { + var tokens = /**@type {!Array.}*/(token) + while (tokens.length) + this.tokens.push(tokens.pop()) + } else { + this.tokens.push(token) + } + } + /** + * When one or more tokens are pushed to a stream, those tokens + * must be inserted, in given order, after the last token in the + * stream. + * + * @param {(number|!Array.)} token The tokens(s) to push to the + * stream. + */ + push(token) { + if (Array.isArray(token)) { + const tokens = /**@type {!Array.}*/(token) + while (tokens.length) + this.tokens.unshift(tokens.shift()) + } else { + this.tokens.unshift(token) + } + } +} + +export const DEFAULT_ENCODING = 'utf-8' + + +/** + * Returns the encoding for the label. + * @param {string} label The encoding label. + */ +export function getEncoding(label) { + // 1. Remove any leading and trailing ASCII whitespace from label. + label = String(label).trim().toLowerCase() + + // 2. If label is an ASCII case-insensitive match for any of the + // labels listed in the table below, return the corresponding + // encoding, and failure otherwise. + if (Object.prototype.hasOwnProperty.call(label_to_encoding, label)) { + return label_to_encoding[label] + } + return null +} + + +// +// 5. Encodings +// + +// 5.1 Encoders and decoders + +// /** @interface */ +// function Decoder() {} +// Decoder.prototype = { +// /** +// * @param {Stream} stream The stream of bytes being decoded. +// * @param {number} bite The next byte read from the stream. +// * @return {?(number|!Array.)} The next code point(s) +// * decoded, or null if not enough data exists in the input +// * stream to decode a complete code point, or |finished|. +// */ +// handler: function(stream, bite) {}, +// } + +// /** @interface */ +// function Encoder() {} +// Encoder.prototype = { +// /** +// * @param {Stream} stream The stream of code points being encoded. +// * @param {number} code_point Next code point read from the stream. +// * @return {(number|!Array.)} Byte(s) to emit, or |finished|. +// */ +// handler: function(stream, code_point) {}, +// } \ No newline at end of file diff --git a/cat/tjs/lib/text_decoder_indexes.js b/cat/tjs/lib/text_decoder_indexes.js new file mode 100644 index 0000000..b4f0445 --- /dev/null +++ b/cat/tjs/lib/text_decoder_indexes.js @@ -0,0 +1,153 @@ +import { inRange } from './text_decoder_utils.js' +import {Indexes} from './encoding-indexes.js' + +// +// 6. Indexes +// + +/** + * @param {number} pointer The |pointer| to search for. + * @param {(!Array.|undefined)} index The |index| to search within. + * @return {?number} The code point corresponding to |pointer| in |index|, + * or null if |code point| is not in |index|. + */ +export function indexCodePointFor(pointer, i) { + if (!i) return null + return i[pointer] || null +} + +/** + * @param {number} code_point The |code point| to search for. + * @param {!Array.} i The |index| to search within. + * @return {?number} The first pointer corresponding to |code point| in + * |index|, or null if |code point| is not in |index|. + */ +export function indexPointerFor(code_point, i) { + var pointer = i.indexOf(code_point) + return pointer === -1 ? null : pointer +} + +/** + * @param {string} name Name of the index. + */ +export default function index(name) { + return Indexes[name] +} + +/** + * @param {number} pointer The |pointer| to search for in the gb18030 index. + * @return The code point corresponding to |pointer| in |index|, + * or null if |code point| is not in the gb18030 index. + */ +export function indexGB18030RangesCodePointFor(pointer) { + // 1. If pointer is greater than 39419 and less than 189000, or + // pointer is greater than 1237575, return null. + if ((pointer > 39419 && pointer < 189000) || (pointer > 1237575)) + return null + + // 2. If pointer is 7457, return code point U+E7C7. + if (pointer === 7457) return 0xE7C7 + + // 3. Let offset be the last pointer in index gb18030 ranges that + // is equal to or less than pointer and let code point offset be + // its corresponding code point. + var offset = 0 + var code_point_offset = 0 + var idx = index('gb18030-ranges') + var i + for (i = 0; i < idx.length; ++i) { + /** @type {!Array.} */ + var entry = idx[i] + if (entry[0] <= pointer) { + offset = entry[0] + code_point_offset = entry[1] + } else { + break + } + } + + // 4. Return a code point whose value is code point offset + + // pointer − offset. + return code_point_offset + pointer - offset +} + +/** + * @param {number} code_point The |code point| to locate in the gb18030 index. + * @return {number} The first pointer corresponding to |code point| in the + * gb18030 index. + */ +export function indexGB18030RangesPointerFor(code_point) { + // 1. If code point is U+E7C7, return pointer 7457. + if (code_point === 0xE7C7) return 7457 + + // 2. Let offset be the last code point in index gb18030 ranges + // that is equal to or less than code point and let pointer offset + // be its corresponding pointer. + var offset = 0 + var pointer_offset = 0 + var idx = index('gb18030-ranges') + var i + for (i = 0; i < idx.length; ++i) { + /** @type {!Array.} */ + var entry = idx[i] + if (entry[1] <= code_point) { + offset = entry[1] + pointer_offset = entry[0] + } else { + break + } + } + + // 3. Return a pointer whose value is pointer offset + code point + // − offset. + return pointer_offset + code_point - offset +} + +/** + * @param {number} code_point The |code_point| to search for in the Shift_JIS + * index. + * @return {?number} The code point corresponding to |pointer| in |index|, + * or null if |code point| is not in the Shift_JIS index. + */ +export function indexShiftJISPointerFor(code_point) { + // 1. Let index be index jis0208 excluding all entries whose + // pointer is in the range 8272 to 8835, inclusive. + shift_jis_index = shift_jis_index || + index('jis0208').map((cp, pointer) => { + return inRange(pointer, 8272, 8835) ? null : cp + }) + const index_ = shift_jis_index + + // 2. Return the index pointer for code point in index. + return index_.indexOf(code_point) +} +var shift_jis_index + +/** + * @param {number} code_point The |code_point| to search for in the big5 + * index. + * @return {?number} The code point corresponding to |pointer| in |index|, + * or null if |code point| is not in the big5 index. + */ +export function indexBig5PointerFor(code_point) { + // 1. Let index be index Big5 excluding all entries whose pointer + big5_index_no_hkscs = big5_index_no_hkscs || + index('big5').map((cp, pointer) => { + return (pointer < (0xA1 - 0x81) * 157) ? null : cp + }) + var index_ = big5_index_no_hkscs + + // 2. If code point is U+2550, U+255E, U+2561, U+256A, U+5341, or + // U+5345, return the last pointer corresponding to code point in + // index. + if (code_point === 0x2550 || code_point === 0x255E || + code_point === 0x2561 || code_point === 0x256A || + code_point === 0x5341 || code_point === 0x5345) { + return index_.lastIndexOf(code_point) + } + + // 3. Return the index pointer for code point in index. + return indexPointerFor(code_point, index_) +} + +var big5_index_no_hkscs \ No newline at end of file diff --git a/cat/tjs/lib/text_decoder_utils.js b/cat/tjs/lib/text_decoder_utils.js new file mode 100644 index 0000000..f7bb771 --- /dev/null +++ b/cat/tjs/lib/text_decoder_utils.js @@ -0,0 +1,180 @@ +// +// Utilities +// +/** + * @param {number} a The number to test. + * @param {number} min The minimum value in the range, inclusive. + * @param {number} max The maximum value in the range, inclusive. + * @return {boolean} True if a >= min and a <= max. + */ +export function inRange(a, min, max) { + return min <= a && a <= max +} + +export const floor = Math.floor + +/** + * @param {string} string Input string of UTF-16 code units. + * @return {!Array.} Code points. + */ +export function stringToCodePoints(string) { + // https://heycam.github.io/webidl/#dfn-obtain-unicode + + // 1. Let S be the DOMString value. + var s = String(string) + + // 2. Let n be the length of S. + var n = s.length + + // 3. Initialize i to 0. + var i = 0 + + // 4. Initialize U to be an empty sequence of Unicode characters. + var u = [] + + // 5. While i < n: + while (i < n) { + // 1. Let c be the code unit in S at index i. + var c = s.charCodeAt(i) + + // 2. Depending on the value of c: + + // c < 0xD800 or c > 0xDFFF + if (c < 0xD800 || c > 0xDFFF) { + // Append to U the Unicode character with code point c. + u.push(c) + } + + // 0xDC00 ≤ c ≤ 0xDFFF + else if (0xDC00 <= c && c <= 0xDFFF) { + // Append to U a U+FFFD REPLACEMENT CHARACTER. + u.push(0xFFFD) + } + + // 0xD800 ≤ c ≤ 0xDBFF + else if (0xD800 <= c && c <= 0xDBFF) { + // 1. If i = n−1, then append to U a U+FFFD REPLACEMENT + // CHARACTER. + if (i === n - 1) { + u.push(0xFFFD) + } + // 2. Otherwise, i < n−1: + else { + // 1. Let d be the code unit in S at index i+1. + var d = s.charCodeAt(i + 1) + + // 2. If 0xDC00 ≤ d ≤ 0xDFFF, then: + if (0xDC00 <= d && d <= 0xDFFF) { + // 1. Let a be c & 0x3FF. + var a = c & 0x3FF + + // 2. Let b be d & 0x3FF. + var b = d & 0x3FF + + // 3. Append to U the Unicode character with code point + // 2^16+2^10*a+b. + u.push(0x10000 + (a << 10) + b) + + // 4. Set i to i+1. + i += 1 + } + + // 3. Otherwise, d < 0xDC00 or d > 0xDFFF. Append to U a + // U+FFFD REPLACEMENT CHARACTER. + else { + u.push(0xFFFD) + } + } + } + + // 3. Set i to i+1. + i += 1 + } + + // 6. Return U. + return u +} + +/** + * @param {!Array.} code_points Array of code points. + * @return {string} string String of UTF-16 code units. + */ +export function codePointsToString(code_points) { + var s = '' + for (var i = 0; i < code_points.length; ++i) { + var cp = code_points[i] + if (cp <= 0xFFFF) { + s += String.fromCharCode(cp) + } else { + cp -= 0x10000 + s += String.fromCharCode((cp >> 10) + 0xD800, + (cp & 0x3FF) + 0xDC00) + } + } + return s +} + +/** + * @param {boolean} fatal If true, decoding errors raise an exception. + * @param {number=} opt_code_point Override the standard fallback code point. + * @return The code point to insert on a decoding error. + */ +export function decoderError(fatal, opt_code_point) { + if (fatal) + throw TypeError('Decoder error') + return opt_code_point || 0xFFFD +} + +/** + * @param {number} code_point The code point that could not be encoded. + * @return {number} Always throws, no value is actually returned. + */ +export function encoderError(code_point) { + throw TypeError('The code point ' + code_point + ' could not be encoded.') +} + +/** + * @param {number} code_unit + * @param {boolean} utf16be + */ +export function convertCodeUnitToBytes(code_unit, utf16be) { + // 1. Let byte1 be code unit >> 8. + const byte1 = code_unit >> 8 + + // 2. Let byte2 be code unit & 0x00FF. + const byte2 = code_unit & 0x00FF + + // 3. Then return the bytes in order: + // utf-16be flag is set: byte1, then byte2. + if (utf16be) + return [byte1, byte2] + // utf-16be flag is unset: byte2, then byte1. + return [byte2, byte1] +} + + +// +// 4. Terminology +// + +/** + * An ASCII byte is a byte in the range 0x00 to 0x7F, inclusive. + * @param {number} a The number to test. + * @return {boolean} True if a is in the range 0x00 to 0x7F, inclusive. + */ +export function isASCIIByte(a) { + return 0x00 <= a && a <= 0x7F +} + +/** + * An ASCII code point is a code point in the range U+0000 to + * U+007F, inclusive. + */ +export const isASCIICodePoint = isASCIIByte + +/** + * End-of-stream is a special token that signifies no more tokens are in the stream. + */ +export const end_of_stream = -1 + +export const finished = -1 \ No newline at end of file diff --git a/cat/tjs/lib/utf16.js b/cat/tjs/lib/utf16.js new file mode 100644 index 0000000..8b370ed --- /dev/null +++ b/cat/tjs/lib/utf16.js @@ -0,0 +1,139 @@ +import { inRange, decoderError, end_of_stream, finished, convertCodeUnitToBytes } from './text_decoder_utils.js' + +// 15.2.1 shared utf-16 decoder + +/** + * @implements {Decoder} + */ +export class UTF16Decoder { + /** + * @param {boolean} utf16_be True if big-endian, false if little-endian. + * @param {{fatal: boolean}} options + */ + constructor(utf16_be, options) { + const { fatal } = options + this.utf16_be = utf16_be + this.fatal = fatal + this.utf16_lead_byte = null + this.utf16_lead_surrogate = null + } + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + */ + handler(stream, bite) { + // 1. If byte is end-of-stream and either utf-16 lead byte or + // utf-16 lead surrogate is not null, set utf-16 lead byte and + // utf-16 lead surrogate to null, and return error. + if (bite === end_of_stream && (this.utf16_lead_byte !== null || + this.utf16_lead_surrogate !== null)) { + return decoderError(this.fatal) + } + + // 2. If byte is end-of-stream and utf-16 lead byte and utf-16 + // lead surrogate are null, return finished. + if (bite === end_of_stream && this.utf16_lead_byte === null && + this.utf16_lead_surrogate === null) { + return finished + } + + // 3. If utf-16 lead byte is null, set utf-16 lead byte to byte + // and return continue. + if (this.utf16_lead_byte === null) { + this.utf16_lead_byte = bite + return null + } + + // 4. Let code unit be the result of: + let code_unit + if (this.utf16_be) { + // utf-16be decoder flag is set + // (utf-16 lead byte << 8) + byte. + code_unit = (this.utf16_lead_byte << 8) + bite + } else { + // utf-16be decoder flag is unset + // (byte << 8) + utf-16 lead byte. + code_unit = (bite << 8) + this.utf16_lead_byte + } + // Then set utf-16 lead byte to null. + this.utf16_lead_byte = null + + // 5. If utf-16 lead surrogate is not null, let lead surrogate + // be utf-16 lead surrogate, set utf-16 lead surrogate to null, + // and then run these substeps: + if (this.utf16_lead_surrogate !== null) { + const lead_surrogate = this.utf16_lead_surrogate + this.utf16_lead_surrogate = null + + // 1. If code unit is in the range U+DC00 to U+DFFF, + // inclusive, return a code point whose value is 0x10000 + + // ((lead surrogate − 0xD800) << 10) + (code unit − 0xDC00). + if (inRange(code_unit, 0xDC00, 0xDFFF)) { + return 0x10000 + (lead_surrogate - 0xD800) * 0x400 + + (code_unit - 0xDC00) + } + + // 2. Prepend the sequence resulting of converting code unit + // to bytes using utf-16be decoder flag to stream and return + // error. + stream.prepend(convertCodeUnitToBytes(code_unit, this.utf16_be)) + return decoderError(this.fatal) + } + + // 6. If code unit is in the range U+D800 to U+DBFF, inclusive, + // set utf-16 lead surrogate to code unit and return continue. + if (inRange(code_unit, 0xD800, 0xDBFF)) { + this.utf16_lead_surrogate = code_unit + return null + } + + // 7. If code unit is in the range U+DC00 to U+DFFF, inclusive, + // return error. + if (inRange(code_unit, 0xDC00, 0xDFFF)) + return decoderError(this.fatal) + + // 8. Return code point code unit. + return code_unit + } +} + +// 15.2.2 shared utf-16 encoder +/** + * @implements {Encoder} + */ +export class UTF16Encoder { + /** + * @param {boolean} [utf16_be] True if big-endian, false if little-endian. + */ + constructor(utf16_be = false) { + this.utf16_be = utf16_be + } + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + */ + handler(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished + + // 2. If code point is in the range U+0000 to U+FFFF, inclusive, + // return the sequence resulting of converting code point to + // bytes using utf-16be encoder flag. + if (inRange(code_point, 0x0000, 0xFFFF)) + return convertCodeUnitToBytes(code_point, this.utf16_be) + + // 3. Let lead be ((code point − 0x10000) >> 10) + 0xD800, + // converted to bytes using utf-16be encoder flag. + const lead = convertCodeUnitToBytes( + ((code_point - 0x10000) >> 10) + 0xD800, this.utf16_be) + + // 4. Let trail be ((code point − 0x10000) & 0x3FF) + 0xDC00, + // converted to bytes using utf-16be encoder flag. + const trail = convertCodeUnitToBytes( + ((code_point - 0x10000) & 0x3FF) + 0xDC00, this.utf16_be) + + // 5. Return a byte sequence of lead followed by trail. + return lead.concat(trail) + } +} \ No newline at end of file diff --git a/cat/tjs/lib/utf8.js b/cat/tjs/lib/utf8.js new file mode 100644 index 0000000..dd0d01f --- /dev/null +++ b/cat/tjs/lib/utf8.js @@ -0,0 +1,208 @@ +import { inRange, decoderError, isASCIICodePoint, + end_of_stream, finished } from './text_decoder_utils.js' + +/** + * @implements {Decoder} + */ +export class UTF8Decoder { + /** + * @param {{fatal: boolean}} options + */ + constructor(options) { + const { fatal } = options + + // utf-8's decoder's has an associated utf-8 code point, utf-8 + // bytes seen, and utf-8 bytes needed (all initially 0), a utf-8 + // lower boundary (initially 0x80), and a utf-8 upper boundary + // (initially 0xBF). + let /** @type {number} */ utf8_code_point = 0, + /** @type {number} */ utf8_bytes_seen = 0, + /** @type {number} */ utf8_bytes_needed = 0, + /** @type {number} */ utf8_lower_boundary = 0x80, + /** @type {number} */ utf8_upper_boundary = 0xBF + + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + * @return {?(number|!Array.)} The next code point(s) + * decoded, or null if not enough data exists in the input + * stream to decode a complete code point. + */ + this.handler = function(stream, bite) { + // 1. If byte is end-of-stream and utf-8 bytes needed is not 0, + // set utf-8 bytes needed to 0 and return error. + if (bite === end_of_stream && utf8_bytes_needed !== 0) { + utf8_bytes_needed = 0 + return decoderError(fatal) + } + + // 2. If byte is end-of-stream, return finished. + if (bite === end_of_stream) + return finished + + // 3. If utf-8 bytes needed is 0, based on byte: + if (utf8_bytes_needed === 0) { + // 0x00 to 0x7F + if (inRange(bite, 0x00, 0x7F)) { + // Return a code point whose value is byte. + return bite + } + + // 0xC2 to 0xDF + else if (inRange(bite, 0xC2, 0xDF)) { + // 1. Set utf-8 bytes needed to 1. + utf8_bytes_needed = 1 + + // 2. Set UTF-8 code point to byte & 0x1F. + utf8_code_point = bite & 0x1F + } + + // 0xE0 to 0xEF + else if (inRange(bite, 0xE0, 0xEF)) { + // 1. If byte is 0xE0, set utf-8 lower boundary to 0xA0. + if (bite === 0xE0) + utf8_lower_boundary = 0xA0 + // 2. If byte is 0xED, set utf-8 upper boundary to 0x9F. + if (bite === 0xED) + utf8_upper_boundary = 0x9F + // 3. Set utf-8 bytes needed to 2. + utf8_bytes_needed = 2 + // 4. Set UTF-8 code point to byte & 0xF. + utf8_code_point = bite & 0xF + } + + // 0xF0 to 0xF4 + else if (inRange(bite, 0xF0, 0xF4)) { + // 1. If byte is 0xF0, set utf-8 lower boundary to 0x90. + if (bite === 0xF0) + utf8_lower_boundary = 0x90 + // 2. If byte is 0xF4, set utf-8 upper boundary to 0x8F. + if (bite === 0xF4) + utf8_upper_boundary = 0x8F + // 3. Set utf-8 bytes needed to 3. + utf8_bytes_needed = 3 + // 4. Set UTF-8 code point to byte & 0x7. + utf8_code_point = bite & 0x7 + } + + // Otherwise + else { + // Return error. + return decoderError(fatal) + } + + // Return continue. + return null + } + + // 4. If byte is not in the range utf-8 lower boundary to utf-8 + // upper boundary, inclusive, run these substeps: + if (!inRange(bite, utf8_lower_boundary, utf8_upper_boundary)) { + // 1. Set utf-8 code point, utf-8 bytes needed, and utf-8 + // bytes seen to 0, set utf-8 lower boundary to 0x80, and set + // utf-8 upper boundary to 0xBF. + utf8_code_point = utf8_bytes_needed = utf8_bytes_seen = 0 + utf8_lower_boundary = 0x80 + utf8_upper_boundary = 0xBF + + // 2. Prepend byte to stream. + stream.prepend(bite) + + // 3. Return error. + return decoderError(fatal) + } + + // 5. Set utf-8 lower boundary to 0x80 and utf-8 upper boundary + // to 0xBF. + utf8_lower_boundary = 0x80 + utf8_upper_boundary = 0xBF + + // 6. Set UTF-8 code point to (UTF-8 code point << 6) | (byte & + // 0x3F) + utf8_code_point = (utf8_code_point << 6) | (bite & 0x3F) + + // 7. Increase utf-8 bytes seen by one. + utf8_bytes_seen += 1 + + // 8. If utf-8 bytes seen is not equal to utf-8 bytes needed, + // continue. + if (utf8_bytes_seen !== utf8_bytes_needed) + return null + + // 9. Let code point be utf-8 code point. + var code_point = utf8_code_point + + // 10. Set utf-8 code point, utf-8 bytes needed, and utf-8 bytes + // seen to 0. + utf8_code_point = utf8_bytes_needed = utf8_bytes_seen = 0 + + // 11. Return a code point whose value is code point. + return code_point + } + } +} + +// 9.1.2 utf-8 encoder + +/** + * @implements {Encoder} + */ +export class UTF8Encoder { + constructor() { + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + * @return {(number|!Array.)} Byte(s) to emit. + */ + this.handler = function(stream, code_point) { + // 1. If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point + + // 3. Set count and offset based on the range code point is in: + var count, offset + // U+0080 to U+07FF, inclusive: + if (inRange(code_point, 0x0080, 0x07FF)) { + // 1 and 0xC0 + count = 1 + offset = 0xC0 + } + // U+0800 to U+FFFF, inclusive: + else if (inRange(code_point, 0x0800, 0xFFFF)) { + // 2 and 0xE0 + count = 2 + offset = 0xE0 + } + // U+10000 to U+10FFFF, inclusive: + else if (inRange(code_point, 0x10000, 0x10FFFF)) { + // 3 and 0xF0 + count = 3 + offset = 0xF0 + } + + // 4. Let bytes be a byte sequence whose first byte is (code + // point >> (6 × count)) + offset. + var bytes = [(code_point >> (6 * count)) + offset] + + // 5. Run these substeps while count is greater than 0: + while (count > 0) { + // 1. Set temp to code point >> (6 × (count − 1)). + var temp = code_point >> (6 * (count - 1)) + + // 2. Append to bytes 0x80 | (temp & 0x3F). + bytes.push(0x80 | (temp & 0x3F)) + + // 3. Decrease count by one. + count -= 1 + } + + // 6. Return bytes bytes, in order. + return bytes + } + } +} \ No newline at end of file diff --git a/cat/tjs/lib/utils.js b/cat/tjs/lib/utils.js new file mode 100644 index 0000000..e42b678 --- /dev/null +++ b/cat/tjs/lib/utils.js @@ -0,0 +1,385 @@ +/* +* @File : utils.js +* @Author : jade +* @Date : 2024/1/25 15:01 +* @Email : jadehh@1ive.com +* @Software : Samples +* @Desc : +*/ +import {Crypto} from "./cat.js"; +import {TextDecoder} from "./TextDecoder.js"; +import {TextEncoder} from "./TextEncoder.js"; +// import {TextDecoder} from "text-decoding"; +const deviceBrands = ['Huawei', 'Xiaomi']; +const deviceModels = [ + ['MHA-AL00', 'HUAWEI Mate 9', 'MHA-TL00', 'HUAWEI Mate 9', 'LON-AL00', 'HUAWEI Mate 9 Pro', 'ALP-AL00', 'HUAWEI Mate 10', 'ALP-TL00', 'HUAWEI Mate 10', 'BLA-AL00', 'HUAWEI Mate 10 Pro', 'BLA-TL00', 'HUAWEI Mate 10 Pro', 'HMA-AL00', 'HUAWEI Mate 20', 'HMA-TL00', 'HUAWEI Mate 20', 'LYA-AL00', 'HUAWEI Mate 20 Pro', 'LYA-AL10', 'HUAWEI Mate 20 Pro', 'LYA-TL00', 'HUAWEI Mate 20 Pro', 'EVR-AL00', 'HUAWEI Mate 20 X', 'EVR-TL00', 'HUAWEI Mate 20 X', 'EVR-AN00', 'HUAWEI Mate 20 X', 'TAS-AL00', 'HUAWEI Mate 30', 'TAS-TL00', 'HUAWEI Mate 30', 'TAS-AN00', 'HUAWEI Mate 30', 'TAS-TN00', 'HUAWEI Mate 30', 'LIO-AL00', 'HUAWEI Mate 30 Pro', 'LIO-TL00', 'HUAWEI Mate 30 Pro', 'LIO-AN00', 'HUAWEI Mate 30 Pro', 'LIO-TN00', 'HUAWEI Mate 30 Pro', 'LIO-AN00m', 'HUAWEI Mate 30E Pro', 'OCE-AN10', 'HUAWEI Mate 40', 'OCE-AN50', 'HUAWEI Mate 40E', 'OCE-AL50', 'HUAWEI Mate 40E', 'NOH-AN00', 'HUAWEI Mate 40 Pro', 'NOH-AN01', 'HUAWEI Mate 40 Pro', 'NOH-AL00', 'HUAWEI Mate 40 Pro', 'NOH-AL10', 'HUAWEI Mate 40 Pro', 'NOH-AN50', 'HUAWEI Mate 40E Pro', 'NOP-AN00', 'HUAWEI Mate 40 Pro', 'CET-AL00', 'HUAWEI Mate 50', 'CET-AL60', 'HUAWEI Mate 50E', 'DCO-AL00', 'HUAWEI Mate 50 Pro', 'TAH-AN00', 'HUAWEI Mate X', 'TAH-AN00m', 'HUAWEI Mate Xs', 'TET-AN00', 'HUAWEI Mate X2', 'TET-AN10', 'HUAWEI Mate X2', 'TET-AN50', 'HUAWEI Mate X2', 'TET-AL00', 'HUAWEI Mate X2', 'PAL-AL00', 'HUAWEI Mate Xs 2', 'PAL-AL10', 'HUAWEI Mate Xs 2', 'EVA-AL00', 'HUAWEI P9', 'EVA-AL10', 'HUAWEI P9', 'EVA-TL00', 'HUAWEI P9', 'EVA-DL00', 'HUAWEI P9', 'EVA-CL00', 'HUAWEI P9', 'VIE-AL10', 'HUAWEI P9 Plus', 'VTR-AL00', 'HUAWEI P10', 'VTR-TL00', 'HUAWEI P10', 'VKY-AL00', 'HUAWEI P10 Plus', 'VKY-TL00', 'HUAWEI P10 Plus', 'EML-AL00', 'HUAWEI P20', 'EML-TL00', 'HUAWEI P20', 'CLT-AL00', 'HUAWEI P20 Pro', 'CLT-AL01', 'HUAWEI P20 Pro', 'CLT-AL00l', 'HUAWEI P20 Pro', 'CLT-TL00', 'HUAWEI P20 Pro', 'CLT-TL01', 'HUAWEI P20 Pro', 'ELE-AL00', 'HUAWEI P30', 'ELE-TL00', 'HUAWEI P30', 'VOG-AL00', 'HUAWEI P30 Pro', 'VOG-AL10', 'HUAWEI P30 Pro', 'VOG-TL00', 'HUAWEI P30 Pro', 'ANA-AL00', 'HUAWEI P40', 'ANA-AN00', 'HUAWEI P40', 'ANA-TN00', 'HUAWEI P40', 'ELS-AN00', 'HUAWEI P40 Pro', 'ELS-TN00', 'HUAWEI P40 Pro', 'ELS-AN10', 'HUAWEI P40 Pro', 'ELS-TN10', 'HUAWEI P40 Pro', 'ABR-AL00', 'HUAWEI P50', 'ABR-AL80', 'HUAWEI P50', 'ABR-AL60', 'HUAWEI P50E', 'ABR-AL90', 'HUAWEI P50E', 'JAD-AL00', 'HUAWEI P50 Pro', 'JAD-AL80', 'HUAWEI P50 Pro', 'JAD-AL50', 'HUAWEI P50 Pro', 'JAD-AL60', 'HUAWEI P50 Pro', 'BAL-AL00', 'HUAWEI P50 Pocket', 'BAL-AL60', 'HUAWEI Pocket S', 'PIC-AL00', 'HUAWEI nova 2', 'PIC-TL00', 'HUAWEI nova 2', 'BAC-AL00', 'HUAWEI nova 2 Plus', 'BAC-TL00', 'HUAWEI nova 2 Plus', 'HWI-AL00', 'HUAWEI nova 2s', 'HWI-TL00', 'HUAWEI nova 2s', 'ANE-AL00', 'HUAWEI nova 3e', 'ANE-TL00', 'HUAWEI nova 3e', 'PAR-AL00', 'HUAWEI nova 3', 'PAR-TL00', 'HUAWEI nova 3', 'INE-AL00', 'HUAWEI nova 3i', 'INE-TL00', 'HUAWEI nova 3i', 'VCE-AL00', 'HUAWEI nova 4', 'VCE-TL00', 'HUAWEI nova 4', 'MAR-AL00', 'HUAWEI nova 4e', 'MAR-TL00', 'HUAWEI nova 4e', 'SEA-AL00', 'HUAWEI nova 5', 'SEA-TL00', 'HUAWEI nova 5', 'SEA-AL10', 'HUAWEI nova 5 Pro', 'SEA-TL10', 'HUAWEI nova 5 Pro', 'GLK-AL00', 'HUAWEI nova 5i', 'GLK-TL00', 'HUAWEI nova 5i', 'GLK-LX1U', 'HUAWEI nova 5i', 'SPN-TL00', 'HUAWEI nova 5i Pro', 'SPN-AL00', 'HUAWEI nova 5z', 'WLZ-AL10', 'HUAWEI nova 6', 'WLZ-AN00', 'HUAWEI nova 6', 'JNY-AL10', 'HUAWEI nova 6 SE', 'JNY-TL10', 'HUAWEI nova 6 SE', 'JEF-AN00', 'HUAWEI nova 7', 'JEF-AN20', 'HUAWEI nova 7', 'JEF-TN00', 'HUAWEI nova 7', 'JEF-TN20', 'HUAWEI nova 7', 'JER-AN10', 'HUAWEI nova 7 Pro', 'JER-AN20', 'HUAWEI nova 7 Pro', 'JER-TN10', 'HUAWEI nova 7 Pro', 'JER-TN20', 'HUAWEI nova 7 Pro', 'CDY-AN00', 'HUAWEI nova 7 SE', 'CDY-AN20', 'HUAWEI nova 7 SE', 'CDY-TN00', 'HUAWEI nova 7 SE', 'CDY-TN20', 'HUAWEI nova 7 SE', 'ANG-AN00', 'HUAWEI nova 8', 'BRQ-AN00', 'HUAWEI nova 8 Pro', 'BRQ-AL00', 'HUAWEI nova 8 Pro', 'JSC-AN00', 'HUAWEI nova 8 SE', 'JSC-TN00', 'HUAWEI nova 8 SE', 'JSC-AL50', 'HUAWEI nova 8 SE', 'NAM-AL00', 'HUAWEI nova 9', 'RTE-AL00', 'HUAWEI nova 9 Pro', 'JLN-AL00', 'HUAWEI nova 9 SE', 'NCO-AL00', 'HUAWEI nova 10', 'GLA-AL00', 'HUAWEI nova 10 Pro', 'CHA-AL80', 'HUAWEI nova 10z'], + ['M2001J2C', 'Xiaomi 10', 'M2001J2G', 'Xiaomi 10', 'M2001J2I', 'Xiaomi 10', 'M2011K2C', 'Xiaomi 11', 'M2011K2G', 'Xiaomi 11', '2201123C', 'Xiaomi 12', '2201123G', 'Xiaomi 12', '2112123AC', 'Xiaomi 12X', '2112123AG', 'Xiaomi 12X', '2201122C', 'Xiaomi 12 Pro', '2201122G', 'Xiaomi 12 Pro'], +]; +var charStr = 'abacdefghjklmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789'; + +let CHROME = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36"; +const MOBILEUA = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1'; +let RESOURCEURL = "https://gh.con.sh/https://raw.githubusercontent.com/jadehh/TV/js" + +function isSub(ext) { + return ext === "srt" || ext === "ass" || ext === "ssa"; +} + +function isNumeric(str) { + return !isNaN(parseInt(str)); +} + +function getSize(size) { + if (size <= 0) return ""; + if (size > 1024 * 1024 * 1024 * 1024.0) { + size /= (1024 * 1024 * 1024 * 1024.0); + return size.toFixed(2) + "TB"; + } else if (size > 1024 * 1024 * 1024.0) { + size /= (1024 * 1024 * 1024.0); + return size.toFixed(2) + "GB"; + } else if (size > 1024 * 1024.0) { + size /= (1024 * 1024.0); + return size.toFixed(2) + "MB"; + } else { + size /= 1024.0; + return size.toFixed(2) + "KB"; + } +} + +function removeExt(text) { + return text.indexOf('.') > -1 ? text.substring(0, text.lastIndexOf(".")) : text; +} + +async function log(str) { + console.debug(str); +} + +function isVideoFormat(url) { + var RULE = /http((?!http).){12,}?\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg|m4a|mp3)\?.*|http((?!http).){12,}\.(m3u8|mp4|flv|avi|mkv|rm|wmv|mpg|m4a|mp3)|http((?!http).)*?video\/tos*/; + if (url.indexOf("url=http") > -1 || url.indexOf(".js") > -1 || url.indexOf(".css") > -1 || url.indexOf(".html") > -1) { + return false; + } + return RULE.test(url); +} + +function jsonParse(input, json) { + var jsonPlayData = JSON.parse(json); + var url = jsonPlayData.url; + if (url.startsWith("//")) { + url = "https:" + url; + } + if (!url.startsWith("http")) { + return null; + } + if (url === input) { + if (!isVideoFormat(url)) { + return null; + } + } + var headers = {}; + var ua = jsonPlayData["user-agent"] || ""; + if (ua.trim().length > 0) { + headers["User-Agent"] = " " + ua; + } + var referer = jsonPlayData.referer || ""; + if (referer.trim().length > 0) { + headers["Referer"] = " " + referer; + } + var taskResult = { + header: headers, url: url + }; + return taskResult; +} + +function debug(obj) { + for (var a in obj) { + if (typeof (obj[a]) == "object") { + debug(obj[a]); //递归遍历 + } else { + console.debug(a + "=" + obj[a]); + } + } +} + +function objectToStr(params = null, isBase64Encode = false) { + let params_str_list = [] + if (params !== null) { + for (const key of Object.keys(params)) { + if (isBase64Encode) { + params_str_list.push(`${key}=${encodeURIComponent(params[key])}`) + } else { + params_str_list.push(`${key}=${params[key]}`) + } + + } + } + + return params_str_list.join("&") +} + +function sleep(delay) { + const start = (new Date()).getTime(); + while ((new Date()).getTime() - start < delay * 1000) { + continue; + } +} + +function getStrByRegex(pattern, str) { + let matcher = pattern.exec(str); + if (matcher !== null) { + if (matcher.length >= 1) { + if (matcher.length >= 1) return matcher[1] + } + } + return ""; +} + +function getStrByRegexDefault(pattern, str) { + let matcher = pattern.exec(str); + if (matcher !== null) { + if (matcher.length >= 1) { + if (matcher.length >= 1) return matcher[1] + } + } + return str; +} + +function base64Encode(text) { + return Crypto.enc.Base64.stringify(Crypto.enc.Utf8.parse(text)); +} + +function base64Decode(text) { + return Crypto.enc.Utf8.stringify(Crypto.enc.Base64.parse(text)); +} + +function unescape(code) { + return code.replace(/\\('|\\)/g, "$1").replace(/[\r\t\n]/g, " "); +} + +function decode(buffer, encode_type) { + let decoder = new TextDecoder(encode_type) + return decoder.decode(buffer) +} + +function encode(buffer, encode_type) { + let encoder = new TextEncoder(encode_type) + return encoder.encode(buffer) +} + +function getHost(url) { + let url_list = url.split("/") + return url_list[0] + "//" + url_list[2] +} + +function unquote(str) { + return str.replace(/^"(.*)"$/, '$1'); +} + +function md5Encode(text) { + return Crypto.MD5(Crypto.enc.Utf8.parse(text)).toString(); +} + + +function getUUID() { + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { + let r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & 0x3 | 0x8); + return v.toString(16); + }) + "-" + new Date().getTime().toString(16) + +} + +function objToList(list, key, split_value = "*") { + let value_list = [] + for (const dic of list) { + value_list.push(dic[key]) + } + return value_list.join(split_value) +} + +function getPropertiesAndMethods(obj) { + let str = "" + for (let key in obj) { + if (typeof obj[key] === 'function') { + str = str + "方法名:" + key + '()' + "\n"; + } else { + str = str + "属性名:" + (key + ': ' + obj[key]) + "\n"; + } + } + return str +} + +function formatPlayUrl(src, name) { + return name + .trim() + .replaceAll(src, '') + .replace(/<|>|《|》/g, '') + .replace(/\$|#/g, ' ') + .trim(); +} + +function rand(min, max) { + return Math.floor(Math.random() * (max - min + 1)) + min; +} + +function randDevice() { + let brandIdx = rand(0, deviceBrands.length - 1); + let brand = deviceBrands[brandIdx]; + let modelIdx = rand(0, deviceModels[brandIdx].length / 2 - 1); + let model = deviceModels[brandIdx][modelIdx * 2 + 1]; + let release = rand(8, 13); + let buildId = randStr(3, false).toUpperCase() + rand(11, 99) + randStr(1, false).toUpperCase(); + return { + brand: brand, + model: model, + release: release, + buildId: buildId, + }; +} + +function randStr(len, withNum, onlyNum) { + let _str = ''; + let containsNum = withNum === undefined ? true : withNum; + for (let i = 0; i < len; i++) { + let idx = onlyNum ? rand(charStr.length - 10, charStr.length - 1) : rand(0, containsNum ? charStr.length - 1 : charStr.length - 11); + _str += charStr[idx]; + } + return _str; +} + +function randDeviceWithId(len) { + let device = randDevice(); + device['id'] = randStr(len); + return device; +} + +function randUUID() { + return randStr(8).toLowerCase() + '-' + randStr(4).toLowerCase() + '-' + randStr(4).toLowerCase() + '-' + randStr(4).toLowerCase() + '-' + randStr(12).toLowerCase(); +} + +function formatUrl(url) { + if (url.indexOf("https:////") > -1) { + url = "https://" + url.replaceAll("https:////", "") + } + if (url.indexOf("http:////") > -1) { + url = "http://" + url.replaceAll("http:////", "") + } + return url +} + +function formatContent(content) { + return content.replaceAll('&', '&') + .replaceAll('<', '<') + .replaceAll('>', '>') + .replaceAll('"', '\"') + .replaceAll(/<\/?[^>]+>/g, ''); +} +/** + * 字符串相似度匹配 + * @returns + */ +function lcs(str1, str2) { + if (!str1 || !str2) { + return { + length: 0, + sequence: '', + offset: 0, + }; + } + + var sequence = ''; + var str1Length = str1.length; + var str2Length = str2.length; + var num = new Array(str1Length); + var maxlen = 0; + var lastSubsBegin = 0; + + for (var i = 0; i < str1Length; i++) { + var subArray = new Array(str2Length); + for (var j = 0; j < str2Length; j++) { + subArray[j] = 0; + } + num[i] = subArray; + } + var thisSubsBegin = null; + for (i = 0; i < str1Length; i++) { + for (j = 0; j < str2Length; j++) { + if (str1[i] !== str2[j]) { + num[i][j] = 0; + } else { + if (i === 0 || j === 0) { + num[i][j] = 1; + } else { + num[i][j] = 1 + num[i - 1][j - 1]; + } + + if (num[i][j] > maxlen) { + maxlen = num[i][j]; + thisSubsBegin = i - num[i][j] + 1; + if (lastSubsBegin === thisSubsBegin) { + // if the current LCS is the same as the last time this block ran + sequence += str1[i]; + } else { + // this block resets the string builder if a different LCS is found + lastSubsBegin = thisSubsBegin; + sequence = ''; // clear it + sequence += str1.substr(lastSubsBegin, i + 1 - lastSubsBegin); + } + } + } + } + } + return { + length: maxlen, + sequence: sequence, + offset: thisSubsBegin, + }; +} + + +function findAllIndexes(arr, value) { + const indexes = arr.map((item, index) => index).filter(index => arr[index] === value); + return indexes; + } + +let patternAli = /(https:\/\/www\.aliyundrive\.com\/s\/[^"]+|https:\/\/www\.alipan\.com\/s\/[^"]+)/ +let patternQuark = /(https:\/\/pan\.quark\.cn\/s\/[^"]+)/ + + +export { + isSub, + getSize, + removeExt, + log, + isVideoFormat, + jsonParse, + debug, + CHROME, + objectToStr, + sleep, + getStrByRegex, + RESOURCEURL, + base64Encode, + base64Decode, + patternAli, + patternQuark, + unescape, + decode, + MOBILEUA, + isNumeric, + getHost, + unquote, + md5Encode, + getStrByRegexDefault, + getUUID, + objToList, + getPropertiesAndMethods, + formatPlayUrl, + randDeviceWithId, + randStr, + randUUID, + formatContent, + formatUrl, + encode, + lcs, + findAllIndexes +}; \ No newline at end of file diff --git a/cat/tjs/lib/vod.js b/cat/tjs/lib/vod.js new file mode 100644 index 0000000..59adcd3 --- /dev/null +++ b/cat/tjs/lib/vod.js @@ -0,0 +1,62 @@ +// LocalAddress = "http://192.168.29.156:8099" +import * as Utils from "./utils.js"; + +export class VodShort { + constructor() { + this.vod_id = "" //id + this.vod_name = "" //名称 + this.vod_pic = Utils.RESOURCEURL + "/resources/ali.jpg" //图片 + this.vod_remarks = "" //备注 + } + + to_dict() { + return JSON.stringify(this); + } + + load_dic(json_str) { + let obj = JSON.parse(json_str) + for (let propName in obj) { + this[propName] = obj[propName]; + } + + } + + load_data(data) { + for (let propName in JSON.parse(this.to_dict())) { + this[propName] = data[propName]; + } + } + +} + +export class VodDetail extends VodShort { + constructor() { + super(); + this.type_name = "" // 类别 + this.vod_year = "" // 年份 + this.vod_area = "" // 地区 + this.vod_actor = "" // 导演 + this.vod_director = "" // 演员 + this.vod_content = "" // 剧情 + this.vod_play_from = "" // 播放格式 + this.vod_play_url = "" // 播放连接 + } + + to_short() { + let vodShort = new VodShort() + vodShort.load_dic(this.to_dict()) + return vodShort + } + + load_dic(json_str) { + let obj = JSON.parse(json_str) + for (let propName in JSON.parse(this.to_dict())) { + this[propName] = obj[propName]; + } + } + + +} + + + diff --git a/cat/tjs/lib/x-user-defined.js b/cat/tjs/lib/x-user-defined.js new file mode 100644 index 0000000..26b457f --- /dev/null +++ b/cat/tjs/lib/x-user-defined.js @@ -0,0 +1,56 @@ +import { inRange, encoderError, end_of_stream, finished, isASCIIByte, isASCIICodePoint } from './text_decoder_utils.js' + +// 15.5 x-user-defined + +// 15.5.1 x-user-defined decoder +/** + * @implements {Decoder} + */ +export class XUserDefinedDecoder { + /** + * @param {Stream} stream The stream of bytes being decoded. + * @param {number} bite The next byte read from the stream. + */ + handler(stream, bite) { + // 1. If byte is end-of-stream, return finished. + if (bite === end_of_stream) + return finished + + // 2. If byte is an ASCII byte, return a code point whose value + // is byte. + if (isASCIIByte(bite)) + return bite + + // 3. Return a code point whose value is 0xF780 + byte − 0x80. + return 0xF780 + bite - 0x80 + } +} + +// 15.5.2 x-user-defined encoder +/** + * @implements {Encoder} + */ +export class XUserDefinedEncoder { + /** + * @param {Stream} stream Input stream. + * @param {number} code_point Next code point read from the stream. + */ + handler(stream, code_point) { + // 1.If code point is end-of-stream, return finished. + if (code_point === end_of_stream) + return finished + + // 2. If code point is an ASCII code point, return a byte whose + // value is code point. + if (isASCIICodePoint(code_point)) + return code_point + + // 3. If code point is in the range U+F780 to U+F7FF, inclusive, + // return a byte whose value is code point − 0xF780 + 0x80. + if (inRange(code_point, 0xF780, 0xF7FF)) + return code_point - 0xF780 + 0x80 + + // 4. Return error with code point. + return encoderError(code_point) + } +} \ No newline at end of file