diff --git a/AbemaTV/__init__.py b/AbemaTV/__init__.py new file mode 100644 index 0000000..541d1c8 --- /dev/null +++ b/AbemaTV/__init__.py @@ -0,0 +1,320 @@ +import click +import json +import subprocess +import base64 +import shutil +import os +import re +import binascii +from io import BytesIO +from http.cookiejar import CookieJar +from langcodes import Language +from typing import Any, Optional, Union +from uuid import UUID + +from unshackle.core.service import Service +from unshackle.core.titles import Episode, Movie, Movies, Series, Title_T +from unshackle.core.tracks import Chapter, Chapters, Subtitle, Tracks, Audio, Video +from unshackle.core.manifests import DASH +from unshackle.core.credential import Credential +from unshackle.core.drm import Widevine +from pywidevine.pssh import PSSH + +class AbemaTV(Service): + """ + Service code for AbemaTV (https://abema.tv/). + Authorization: Credentials / Cookies / Guest + Security: + Widevine: + L3: 1080p + Ported from VT by Lucijan + """ + + ALIASES = ["ABMA", "ABEMA", "AbemaTV"] + TITLE_RE = [ + r"video\/episode\/(?P[0-9a-z-_]*)", + r"slots\/(?P[0-9a-zA-Z]*)", + r"video\/title\/(?P[0-9a-z-]*)" + ] + + @staticmethod + @click.command(name="AbemaTV", short_help="https://abema.tv/") + @click.argument("title", type=str, required=True) + @click.pass_context + def cli(ctx, **kwargs): + return AbemaTV(ctx, **kwargs) + + def __init__(self, ctx, title): + super().__init__(ctx=ctx) + self.parse_title(ctx=ctx, title=title) + self.original_title = title + self.auth_data = None + self.token = None + self.bearer_token = None + self.video_type = "program" + self.dtid = None + self.credential = None + + def authenticate(self, cookies: Optional[CookieJar] = None, credential: Optional[Credential] = None) -> None: + self.log.debug("Authenticating AbemaTV service...") + self.credential = credential + auth = super().authenticate(cookies, credential) + self.configure() + return auth + + def configure(self) -> None: + self.log.info(" + Connecting to AbemaTV...") + try: + hmac_script_path = self._get_js_script_path('abemaHmac.js') + guest_json = self._run_node_script(hmac_script_path, []) + guest_login_url = self.config["endpoints"]["guest_login"] + guest_res = self.session.post(url=guest_login_url, json=json.loads(guest_json)).json() + + if "token" not in guest_res: + raise ConnectionError("Failed to generate Guest Token.") + guest_token = guest_res["token"] + + username = None + password = None + if self.credential: + username = self.credential.username + password = self.credential.password + if not username: + username = self.config.get("username") + password = self.config.get("password") + + if username and password: + self.log.info(" + Credentials found. Attempting Premium Login...") + auth_json = {"email": username, "password": password, "pageId": "account_management"} + login_url = self.config["endpoints"]["login"] + self.auth_data = self.session.post(url=login_url, json=auth_json, headers={"Authorization": f"bearer {guest_token}"}).json() + if not self.auth_data.get("token"): + raise ConnectionError("Login failed.") + self.bearer_token = self.auth_data["token"] + self.log.info(" + Successfully logged in as User.") + else: + self.log.info(" + No credentials found. Using Guest Mode (Free Content Only).") + self.bearer_token = guest_token + self.auth_data = {"token": guest_token, "profile": {"userId": guest_res.get("profile", {}).get("userId", "guest_user")}} + + media_token_url = self.config["endpoints"]["media_token"] + token_res = self.session.get(url=media_token_url, headers={"Authorization": f"bearer {self.bearer_token}"}).json() + self.token = token_res["token"] + + dtid_url = self.config["endpoints"]["dtid"] + dtid_res = self.session.get(url=dtid_url, headers={"Authorization": f"bearer {self.bearer_token}"}).json() + self.dtid = dtid_res.get("deviceTypeId") + + except Exception as e: + self.log.error(f" - AbemaTV authentication failed: {e}") + raise ConnectionAbortedError("Could not authenticate with AbemaTV.") + + def get_titles(self) -> Title_T: + titles = list() + if not self.token: self.configure() + current_id = self.title or self.original_title.split('/')[-1] + is_series_page = "video/title/" in self.original_title + is_slot_page = "slots/" in self.original_title + headers = {"Authorization": f"bearer {self.bearer_token}"} + + if is_series_page: + self.video_type = "program" + series_info_url = self.config["endpoints"]["series_info"].format(id=current_id) + series_data = self.session.get(url=series_info_url, headers=headers).json() + for season in series_data.get("seasons", []): + season_id = season["id"] + programs_url = self.config["endpoints"]["series_programs"].format(series_id=current_id, season_id=season_id) + programs_data = self.session.get(url=programs_url, headers=headers).json() + for episode in programs_data.get("programs", []): + titles.append(Episode(id_=episode.get("id"), title=episode.get("series", {}).get("title"), name=episode.get("episode", {}).get("title"), season=episode.get("season", {}).get("sequence"), number=episode.get("episode", {}).get("number"), service=self.__class__, data=episode)) + return Series(titles) + else: + if is_slot_page: + self.video_type = "slot" + url = self.config["endpoints"]["slot_info"].format(id=current_id) + else: + self.video_type = "program" + url = self.config["endpoints"]["program_info"].format(id=current_id) + program_data = self.session.get(url=url, headers=headers).json() + if self.video_type == "program": + item = program_data + titles.append(Episode(id_=item.get("id"), title=item.get("series", {}).get("title"), name=item.get("episode", {}).get("title"), season=item.get("season", {}).get("sequence"), number=item.get("episode", {}).get("number"), service=self.__class__, data=item)) + else: + item = program_data.get("slot", {}) + titles.append(Movie(id_=item.get("id"), name=item.get("title"), year=None, service=self.__class__, data=item)) + if self.video_type == "slot": return Movies(titles) + else: return Series(titles) + + def get_tracks(self, title: Title_T) -> Tracks: + if self.video_type == "slot": + manifest_url = self.config["endpoints"]["manifest_slot"].format(id=title.id, token=self.token) + else: + manifest_url = self.config["endpoints"]["manifest_program"].format(id=title.id, token=self.token, dtid=self.dtid) + + self.log.info(f" + Manifest: {manifest_url}") + manifest_content = self.session.get(url=manifest_url).text + tracks = DASH.from_text(manifest_content, manifest_url).to_tracks(language="ja") + if tracks.audio: + tracks.audio.sort(key=lambda x: x.bitrate or 0, reverse=True) + best_audio = tracks.audio[0] + tracks.audio = [best_audio] + + target_kid = None + key_hex = None + + kid_match = re.search(r'default_KID="([0-9a-fA-F-]+)"', manifest_content, re.IGNORECASE) + if kid_match: + target_kid = kid_match.group(1) + + if not target_kid: + video_track = next((t for t in tracks if isinstance(t, Video)), None) + if video_track and video_track.url: + try: + headers = {"Range": "bytes=0-4096"} + res = self.session.get(video_track.url, headers=headers) + if res.status_code in [200, 206]: + content = res.content + hex_content = binascii.hexlify(content).decode('utf-8') + wv_sys_id = "edef8ba979d64acea3c827dcd51d21ed" + sys_idx = hex_content.find(wv_sys_id) + + if sys_idx != -1: + box_start_hex = sys_idx - 24 + if box_start_hex >= 0: + size_hex = hex_content[box_start_hex : box_start_hex+8] + try: + box_size = int(size_hex, 16) + box_data = content[int(box_start_hex/2) : int(box_start_hex/2)+box_size] + pssh_obj = PSSH(box_data) + for kid in pssh_obj.key_ids: + target_kid = str(kid) + break + except Exception: + pass + + if not target_kid: + tenc_idx = hex_content.find("74656e63") + if tenc_idx != -1: + scan_start = tenc_idx + 8 + scan_end = min(len(hex_content), scan_start + 100) + chunk = hex_content[scan_start:scan_end] + start = tenc_idx + 24 + kid_hex = hex_content[start : start+32] + target_kid = f"{kid_hex[:8]}-{kid_hex[8:12]}-{kid_hex[12:16]}-{kid_hex[16:20]}-{kid_hex[20:]}" + + except Exception as e: + self.log.warning(f" - Probe failed: {e}") + + if target_kid: + try: + key_hex = self._get_key(program_id=title.id, kid_unconverted=str(target_kid)) + except Exception as e: + self.log.error(f" - failed fetching key: {e}") + else: + self.log.warning(" ! KID not found. Content might be clear or probe failed.") + + if key_hex and target_kid: + try: + kid_uuid = UUID(str(target_kid)) + wv_system_id = UUID("edef8ba9-79d6-4ace-a3c8-27dcd51d21ed") + pssh_dummy = PSSH.new(key_ids=[kid_uuid], system_id=wv_system_id) + + wv_drm = Widevine(pssh=pssh_dummy, kid=kid_uuid) + + wv_drm.content_keys[kid_uuid] = key_hex + + for track in tracks: + if isinstance(track, (Video, Audio)): + track.drm = [wv_drm] + track.key = key_hex + track.extra = track.extra or {} + track.extra["key"] = key_hex + track.extra["kid"] = str(target_kid) + + except Exception as e: + self.log.error(f" - Key Injection Error: {e}") + + for track in tracks: + if isinstance(track, Audio): track.language = Language.get("ja") + + service_data = title.data or {} + caption_groups = service_data.get("captionGroups", []) or service_data.get("episode", {}).get("captionGroups", []) + if caption_groups: + for caption in caption_groups: + cap_uri = caption.get("uri") + if not cap_uri: continue + subtitle_url = f"https://ds-vod-abematv.akamaized.net{cap_uri}" if not cap_uri.startswith("http") else cap_uri + lang_code = caption.get("language", "ja") + tracks.add(Subtitle(id_=f"sub_{lang_code}", url=subtitle_url, codec=Subtitle.Codec.WebVTT, language=lang_code, forced=False, sdh=False)) + + return tracks + + def get_chapters(self, title: Title_T) -> Chapters: + return Chapters([]) + + def get_widevine_service_certificate(self, **_: Any) -> Optional[Union[str, bytes]]: + return None + + def get_widevine_license(self, challenge: bytes, track: Tracks, **_: Any) -> Optional[Union[str, bytes]]: + return None + + def _get_js_script_path(self, script_name): + try: + base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + script_path = os.path.join(base_dir, 'javascript', script_name) + if not os.path.exists(script_path): script_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'javascript', script_name) + return script_path + except Exception: return os.path.join('javascript', script_name) + + def _run_node_script(self, script_path, args): + potential_paths = [os.path.abspath('./binaries'), None, os.path.expandvars('%ProgramFiles%\\nodejs'), os.path.expandvars('%ProgramFiles(x86)%\\nodejs')] + node_executable = None + for path in potential_paths: + node_executable = shutil.which("node", path=path) or shutil.which("node.exe", path=path) + if node_executable: + break + if not node_executable: + raise FileNotFoundError("Node.js not found.") + command = [node_executable, script_path] + args + return subprocess.run(command, capture_output=True, text=True, check=True, encoding='utf-8').stdout.strip() + + def _get_key(self, program_id, kid_unconverted): + try: + if hasattr(kid_unconverted, 'hex'): kid_unconverted = kid_unconverted.hex + kid_str = str(kid_unconverted).replace('-', '').lower() + kid_b64 = self._convert_kid(kid_str) + if not kid_b64: + raise ValueError("Failed to convert KID.") + license_req_json = {"kids": [kid_b64], "type": "temporary"} + user_id = self.auth_data["profile"]["userId"] if self.auth_data and "profile" in self.auth_data else "guest_user" + license_url = self.config["endpoints"]["license"].format(token=self.token, cid=program_id, ct=self.video_type) + license_resp = self.session.post(url=license_url, json=license_req_json).text + decrypt_script_path = self._get_js_script_path('abemaDecrypt.js') + dec_json_str = self._run_node_script(decrypt_script_path, [license_resp, user_id]) + dec_json = json.loads(re.sub(r"(\b\w+\b):", r'"\1":', dec_json_str).replace("'", '"')) + return self._decode_base64(dec_json["keys"][0]["k"]).hex() + except Exception as e: + self.log.error(f" - Failed to get key: {e}") + raise + + def _convert_kid(self, kid): + try: + byte_array = bytearray.fromhex(kid.replace("-", "")) + return base64.b64encode(byte_array).decode("utf-8").replace("=", "").replace("/", "_").replace("+", "-") + except Exception: return None + + def _decode_base64(self, data): + missing_padding = 4 - len(data) % 4 + if missing_padding: data += '=' * missing_padding + return base64.urlsafe_b64decode(data) + + def parse_title(self, ctx, title): + title = title or ctx.parent.params.get("title") + if not title: return + regexes = self.TITLE_RE if isinstance(self.TITLE_RE, list) else [self.TITLE_RE] + for regex in regexes: + m = re.search(regex, title) + if m: + self.title = m.group("id") + return + self.title = title \ No newline at end of file diff --git a/AbemaTV/config.yaml b/AbemaTV/config.yaml new file mode 100644 index 0000000..8589452 --- /dev/null +++ b/AbemaTV/config.yaml @@ -0,0 +1,12 @@ +endpoints: + guest_login: 'https://api.p-c3-e.abema-tv.com/v1/users' + login: 'https://api.p-c3-e.abema-tv.com/v1/auth/user/email' + media_token: 'https://api.p-c3-e.abema-tv.com/v1/media/token?osName=pc&osVersion=1.0.0' + dtid: 'https://api.p-c3-e.abema-tv.com/v1/media/deviceTypeId?os=Windows&osVersion=10&drm=Widevine' + series_info: 'https://api.p-c3-e.abema-tv.com/v1/video/series/{id}?includeSlot=true' + series_programs: 'https://api.p-c3-e.abema-tv.com/v1/video/series/{series_id}/programs?seasonId={season_id}&order=seq&limit=420' + program_info: 'https://api.p-c3-e.abema-tv.com/v1/video/programs/{id}?division=0&include=tvod' + slot_info: 'https://api.p-c3-e.abema-tv.com/v1/media/slots/{id}?include=payperview' + manifest_slot: 'https://ds-vod-abematv.akamaized.net/slot/{id}/manifest.mpd?t={token}&enc=clear&dt=pc_edge&ccf=0&ut=1&sw=0' + manifest_program: 'https://ds-vod-abematv.akamaized.net/program/{id}/manifest.mpd?t={token}&enc=clear&dt=pc_edge&ccf=0&dtid={dtid}&ut=1&sw=0' + license: 'https://license.p-c3-e.abema-tv.com/abematv-dash?t={token}&cid={cid}&ct={ct}' \ No newline at end of file diff --git a/AbemaTV/javascript/abemaDecrypt.js b/AbemaTV/javascript/abemaDecrypt.js new file mode 100644 index 0000000..b4461f0 --- /dev/null +++ b/AbemaTV/javascript/abemaDecrypt.js @@ -0,0 +1,1386 @@ +const { JSDOM } = require('jsdom'); +const cryptoJs = require('crypto-js'); + +const dom = new JSDOM(`

Hello World

`, { + url: "http://localhost" +}); + +const window = dom.window; +const document = window.document; + +var c = ["Y2hhckF0", "T3RPTWk=", "X19BQk1fTElDRU5TRV9QUk9YWV9f", "QlFWdXo=", "T1ptZUQ=", "aGlnaE9yZGVy", "cHVzaA==", "bGVuZ3Ro", "Q3dBUXI=", "bG93T3JkZXI=", "VEF0QUM=", "R0tLUkI=", "Ym1KZEo=", "T29XRlM=", "cURwQk4=", "UXRWRE4=", "a3JJRGs=", "ak5lYXY=", "UHBrZWs=", "Z3FicHY=", "Y0VnSWs=", "dXNo", "U2RvV3k=", "Z3NLS3I=", "Y2hhckNvZGVBdA==", "cG93", "RHVheUc=", "MDAwMDAwMDAwMDAwMDAwMA==", "UUpsZ3M=", "cmlnaHQ=", "VnhPRE8=", "bGVmdA==", "alhvZG4=", "c3BsaXQ=", "bWFw", "a1VlbWI=", "ZFpxZ3g=", "Zk1xTnM=", "andhRUU=", "SHJ6dEo=", "RnNTbXI=", "Z0JSV1g=", "QWxoY0c=", "TlpMVEU="]; +var u, h, f = function(r, t) { + var e = c[r -= 0]; + void 0 === f.dQYSYC && (! function() { + var r; + try { + r = Function('return (function() {}.constructor("return this")( ));')() + } catch (t) { + r = window + } + r.atob || (r.atob = function(r) { + for (var t, e, n = String(r).replace(/=+$/, ""), i = 0, o = 0, s = ""; e = n.charAt(o++); ~e && (t = i % 4 ? 64 * t + e : e, + i++ % 4) ? s += String.fromCharCode(255 & t >> (-2 * i & 6)) : 0) + e = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(e); + return s + }) + }(), + f.dqEXRM = function(r) { + for (var t = atob(r), e = [], n = 0, i = t.length; n < i; n++) + e += "%" + ("00" + t.charCodeAt(n).toString(16)).slice(-2); + return decodeURIComponent(e) + }, + f.UnRRuZ = {}, + f.dQYSYC = !0); + var n = f.UnRRuZ[r]; + return void 0 === n ? (e = f.dqEXRM(e), + f.UnRRuZ[r] = e) : e = n, + e + }, + l = function(r, t) { + this["highOrder"] = r, + this.lowOrder = t + }, + d = function(r, t, e) { + var n, i, o, s, a, c, u, h = []; + for (h = t || [0], + o = (e = e || 0) >>> 3, + i = 0; i < r.length; i += 1) + n = r.charCodeAt(i), + s = (a = i + o) >>> 2, + h.length <= s && h["push"](0), + h[s] |= n << 8 * (3 - a % 4); + return { + value: h, + binLen: (c = 8, + u = r["length"], + c * u + e) + } + }, + p = function(r) { + var t, e, n = "", + i = 4 * r.length; + for (t = 0; t < i; t += 1) + e = r[t >>> 2] >>> 8 * (3 - t % 4) & 255, + n += String.fromCharCode(e); + return n + }, + v = function() { + return d + }, + g = function(r, t) { + return r << t | r >>> 32 - t + }, + w = function(r, t) { + return r >>> t | r << 32 - t + }, + _ = function(r, t) { + var e = { + vrbCL: function(r, t) { + return r & t + }, + GgUcB: function(r, t) { + return r << t + }, + CwAQr: function(r, t) { + return r >>> t + }, + qGgSH: function(r, t) { + return r << t + } + }, + n = new l(r.highOrder, r.lowOrder); + return 32 >= t ? new l(n.highOrder >>> t | e.vrbCL(e.GgUcB(n.lowOrder, 32 - t), 4294967295), e["CwAQr"](n.lowOrder, t) | n.highOrder << 32 - t & 4294967295) : new l(n.lowOrder >>> t - 32 | 4294967295 & e.qGgSH(n.highOrder, 64 - t), n.highOrder >>> t - 32 | n["lowOrder"] << 64 - t & 4294967295) + }, + y = function(r, t) { + return r >>> t + }, + x = function(r, t) { + var e = function(r, t) { + return r | t + }, + n = function(r, t) { + return r - t + }; + return function(r, t) { + return r >= t + }(32, t) ? new l(r.highOrder >>> t, e(r.lowOrder >>> t, r.highOrder << 32 - t & 4294967295)) : new l(0, r.highOrder >>> n(t, 32)) + }, + b = function(r, t, e) { + return { + TAtAC: function(r, t) { + return r ^ t + } + } ["TAtAC"](r, t) ^ e + }, + m = function(r, t, e) { + return r & t ^ ~r & e + }, + k = function(r, t, e) { + var n, i; + return new l((n = r["highOrder"], + i = t.highOrder, + n & i ^ ~r.highOrder & e.highOrder), r.lowOrder & t.lowOrder ^ ~r.lowOrder & e.lowOrder) + }, + B = function(r, t, e) { + return function(r, t) { + return r ^ t + }(function(r, t) { + return r & t + }(r, t), r & e) ^ t & e + }, + O = function(r, t, e) { + var n, i; + return new l(r.highOrder & t["highOrder"] ^ r.highOrder & e["highOrder"] ^ t["highOrder"] & e.highOrder, r.lowOrder & t.lowOrder ^ (n = r.lowOrder, + i = e["lowOrder"], + n & i) ^ t.lowOrder & e.lowOrder) + }, + S = function(r) { + var t = { + GKKRB: function(r, t) { + return r ^ t + }, + mEaKH: function(r, t) { + return r ^ t + }, + Vkxnt: function(r, t, e) { + return r(t, e) + } + }; + return t["GKKRB"](t.mEaKH(t.Vkxnt(w, r, 2), t.Vkxnt(w, r, 13)), w(r, 22)) + }, + A = function(r) { + var t = function(r, t) { + return r ^ t + }, + e = function(r, t) { + return r ^ t + }, + n = _(r, 28), + i = _(r, 34), + o = _(r, 39); + return new l(t(n.highOrder, i.highOrder) ^ o.highOrder, e(n.lowOrder ^ i.lowOrder, o.lowOrder)) + }, + P = function(r) { + return { + bmJdJ: function(r, t) { + return r ^ t + } + } ["bmJdJ"](w(r, 6) ^ w(r, 11), w(r, 25)) + }, + C = function(r) { + var t = _(r, 14), + e = _(r, 18), + n = _(r, 41); + return new l(t.highOrder ^ e["highOrder"] ^ n["highOrder"], t["lowOrder"] ^ e.lowOrder ^ n.lowOrder) + }, + E = function(r) { + var t, e; + return t = w(r, 7), + e = w(r, 18), + t ^ e ^ y(r, 3) + }, + R = function(r) { + var t = _(r, 1), + e = _(r, 8), + n = x(r, 7); + return new l(t.highOrder ^ e["highOrder"] ^ n["highOrder"], { + OoWFS: function(r, t) { + return r ^ t + } + } ["OoWFS"](t.lowOrder, e.lowOrder) ^ n.lowOrder) + }, + H = function(r) { + return w(r, 17) ^ w(r, 19) ^ y(r, 10) + }, + D = function(r) { + var t, e, n = _(r, 19), + i = _(r, 61), + o = x(r, 6); + return new l((t = n.highOrder ^ i.highOrder, + e = o.highOrder, + t ^ e), n.lowOrder ^ i.lowOrder ^ o.lowOrder) + }, + z = function(r, t) { + var e = { + KSWbw: function(r, t) { + return r + t + }, + qDpBN: function(r, t) { + return r | t + }, + YQnAZ: function(r, t) { + return r + t + }, + QtVDN: function(r, t) { + return r >>> t + }, + BRDLZ: function(r, t) { + return r & t + } + }, + n = e.KSWbw(65535 & r, 65535 & t); + return e["qDpBN"]((65535 & e.YQnAZ((r >>> 16) + (t >>> 16), e["QtVDN"](n, 16))) << 16, e.BRDLZ(65535, n)) + }, + I = function(r, t, e, n) { + var i = { + gXRMN: function(r, t) { + return r | t + }, + ASQcV: function(r, t) { + return r << t + }, + krIDk: function(r, t) { + return r + t + }, + OGiIK: function(r, t) { + return r + t + }, + nSUEx: function(r, t) { + return r >>> t + } + }, + o = (65535 & r) + (65535 & t) + (65535 & e) + (65535 & n); + return i.gXRMN(i.ASQcV(65535 & i["krIDk"](i.OGiIK(i.nSUEx(r, 16) + (t >>> 16), e >>> 16), n >>> 16) + (o >>> 16), 16), 65535 & o) + }, + M = function(r, t, e, n, i) { + var o = function(r, t) { + return r >>> t + }, + s = function(r, t) { + return r & t + }, + a = function(r, t) { + return r & t + }(65535, r) + (65535 & t) + (65535 & e) + (65535 & n) + (65535 & i); + return (65535 & (r >>> 16) + o(t, 16) + (e >>> 16) + (n >>> 16) + (i >>> 16) + (a >>> 16)) << 16 | s(65535, a) + }, + F = function(r, t) { + var e, n, i; + return e = (65535 & r.lowOrder) + (65535 & t.lowOrder), + i = (65535 & (n = (r.lowOrder >>> 16) + (t.lowOrder >>> 16) + (e >>> 16))) << 16 | 65535 & e, + e = (65535 & r.highOrder) + (65535 & t.highOrder) + (n >>> 16), + n = (r.highOrder >>> 16) + (t.highOrder >>> 16) + (e >>> 16), + new l((65535 & n) << 16 | 65535 & e, i) + }, + T = function(r, t, e, n) { + var i, o, s, a = { + azify: function(r, t) { + return r + t + }, + NDXKn: function(r, t) { + return r & t + }, + czkoV: function(r, t) { + return r | t + }, + xUHhE: function(r, t) { + return r >>> t + }, + jNeav: function(r, t) { + return r << t + }, + CGUNa: function(r, t) { + return r & t + } + }; + return i = a.azify(65535 & r["lowOrder"], a.NDXKn(65535, t.lowOrder)) + a.NDXKn(65535, e.lowOrder) + (65535 & n.lowOrder), + s = a.czkoV((65535 & (o = a.xUHhE(r["lowOrder"], 16) + (t.lowOrder >>> 16) + (e.lowOrder >>> 16) + a.xUHhE(n.lowOrder, 16) + (i >>> 16))) << 16, 65535 & i), + i = (65535 & r["highOrder"]) + (65535 & t.highOrder) + (65535 & e["highOrder"]) + (65535 & n.highOrder) + (o >>> 16), + o = (r.highOrder >>> 16) + (t.highOrder >>> 16) + (e.highOrder >>> 16) + (n.highOrder >>> 16) + (i >>> 16), + new l(a["jNeav"](a.CGUNa(65535, o), 16) | 65535 & i, s) + }, + L = function(r, t, e, n, i) { + var o, s, a, c = { + Ppkek: function(r, t) { + return r + t + }, + mjPSM: function(r, t) { + return r | t + }, + gqbpv: function(r, t) { + return r >>> t + }, + sqaIE: function(r, t) { + return r & t + } + }; + return o = c["Ppkek"]((65535 & r.lowOrder) + (65535 & t.lowOrder) + (65535 & e.lowOrder), 65535 & n.lowOrder) + (65535 & i.lowOrder), + a = c.mjPSM((65535 & (s = c.Ppkek((r.lowOrder >>> 16) + (t.lowOrder >>> 16) + (e.lowOrder >>> 16) + c["gqbpv"](n.lowOrder, 16) + (i["lowOrder"] >>> 16), o >>> 16))) << 16, 65535 & o), + o = c.Ppkek(c.Ppkek(65535 & r.highOrder, c.sqaIE(65535, t.highOrder)) + (65535 & e.highOrder) + (65535 & n["highOrder"]), 65535 & i["highOrder"]) + (s >>> 16), + s = c.Ppkek((r.highOrder >>> 16) + (t.highOrder >>> 16) + (e.highOrder >>> 16) + (n.highOrder >>> 16) + (i.highOrder >>> 16), o >>> 16), + new l((65535 & s) << 16 | 65535 & o, a) + }, + U = function(r) { + var t, e, n; + if (1 === r) + t = [1732584193, 4023233417, 2562383102, 271733878, 3285377520]; + else + switch (e = [3238371032, 914150663, 812702999, 4144912697, 4290775857, 1750603025, 1694076839, 3204075428], + n = [1779033703, 3144134277, 1013904242, 2773480762, 1359893119, 2600822924, 528734635, 1541459225], + r) { + case 224: + t = e; + break; + case 256: + t = n; + break; + case 384: + t = [new l(3418070365, e[0]), new l(1654270250, e[1]), new l(2438529370, e[2]), new l(355462360, e[3]), new l(1731405415, e[4]), new l(41048885895, e[5]), new l(3675008525, e[6]), new l(1203062813, e[7])]; + break; + case 512: + t = [new l(n[0], 4089235720), new l(n[1], 2227873595), new l(n[2], 4271175723), new l(n[3], 1595750129), new l(n[4], 2917565137), new l(n[5], 725511199), new l(n[6], 4215389547), new l(n[7], 327033209)]; + break; + default: + throw new Error("variant") + } + return t + }, + W = function(r, t) { + var e, n, i, o, s, a, c, u = { + uLENR: function(r, t) { + return r < t + }, + BsTdK: function(r, t) { + return r - t + }, + imDkC: function(r, t, e, n) { + return r(t, e, n) + }, + qToEk: function(r, t, e) { + return r(t, e) + }, + cEgIk: function(r, t, e) { + return r(t, e) + } + }, + h = [], + l = m, + d = b, + p = B, + v = g, + w = z, + _ = M; + for (e = t[0], + n = t[1], + i = t[2], + o = t[3], + s = t[4], + c = 0; u.uLENR(c, 80); c += 1) + h[c] = c < 16 ? r[c] : v(h[c - 3] ^ h[c - 8] ^ h[u.BsTdK(c, 14)] ^ h[c - 16], 1), + a = c < 20 ? _(v(e, 5), u.imDkC(l, n, i, o), s, 1518500249, h[c]) : c < 40 ? _(v(e, 5), d(n, i, o), s, 1859775393, h[c]) : c < 60 ? _(v(e, 5), p(n, i, o), s, 2400959708, h[c]) : _(u.qToEk(v, e, 5), d(n, i, o), s, 3395469782, h[c]), + s = o, + o = i, + i = v(n, 30), + n = e, + e = a; + return t[0] = u["cEgIk"](w, e, t[0]), + t[1] = w(n, t[1]), + t[2] = w(i, t[2]), + t[3] = w(o, t[3]), + t[4] = w(s, t[4]), + t + }, + j = function(r, t, e, n) { + var i, o, s, a = function(r, t, e) { + return r(t, e) + }; + for (s = 15 + (function(r, t) { + return r >>> t + }(t + 65, 9) << 4); r["length"] <= s;) + r["push"](0); + for (r[t >>> 5] |= 128 << 24 - t % 32, + r[s] = t + e, + o = r["length"], + i = 0; i < o; i += 16) + n = a(W, r.slice(i, i + 16), n); + return n + }; +h = [new l((u = [1116352408, 1899447441, 3049323471, 3921009573, 961987163, 1508970993, 2453635748, 2870763221, 3624381080, 310598401, 607225278, 1426881987, 1925078388, 2162078206, 2614888103, 3248222580, 3835390401, 4022224774, 264347078, 604807628, 770255983, 1249150122, 1555081692, 1996064986, 2554220882, 2821834349, 2952996808, 3210313671, 3336571891, 3584528711, 113926993, 338241895, 666307205, 773529912, 1294757372, 1396182291, 1695183700, 1986661051, 2177026350, 2456956037, 2730485921, 2820302411, 3259730800, 3345764771, 3516065817, 3600352804, 4094571909, 275423344, 430227734, 506948616, 659060556, 883997877, 958139571, 1322822218, 1537002063, 1747873779, 1955562222, 2024104815, 2227730452, 2361852424, 2428436474, 2756734187, 3204031479, 3329325298])[0], 3609767458), new l(u[1], 602891725), new l(u[2], 3964484399), new l(u[3], 2173295548), new l(u[4], 4081628472), new l(u[5], 3053834265), new l(u[6], 2937671579), new l(u[7], 3664609560), new l(u[8], 2734883394), new l(u[9], 1164996542), new l(u[10], 1323610764), new l(u[11], 3590304994), new l(u[12], 4068182383), new l(u[13], 991336113), new l(u[14], 633803317), new l(u[15], 3479774868), new l(u[16], 2666613458), new l(u[17], 944711139), new l(u[18], 2341262773), new l(u[19], 2007800933), new l(u[20], 1495990901), new l(u[21], 1856431235), new l(u[22], 3175218132), new l(u[23], 2198950837), new l(u[24], 3999719339), new l(u[25], 766784016), new l(u[26], 2566594879), new l(u[27], 3203337956), new l(u[28], 1034457026), new l(u[29], 2466948901), new l(u[30], 3758326383), new l(u[31], 168717936), new l(u[32], 1188179964), new l(u[33], 1546045734), new l(u[34], 1522805485), new l(u[35], 2643833823), new l(u[36], 2343527390), new l(u[37], 1014477480), new l(u[38], 1206759142), new l(u[39], 344077627), new l(u[40], 1290863460), new l(u[41], 3158454273), new l(u[42], 3505952657), new l(u[43], 106217008), new l(u[44], 3606008344), new l(u[45], 1432725776), new l(u[46], 1467031594), new l(u[47], 851169720), new l(u[48], 3100823752), new l(u[49], 1363258195), new l(u[50], 3750685593), new l(u[51], 3785050280), new l(u[52], 3318307427), new l(u[53], 3812723403), new l(u[54], 2003034995), new l(u[55], 3602036899), new l(u[56], 1575990012), new l(u[57], 1125592928), new l(u[58], 2716904306), new l(u[59], 442776044), new l(u[60], 593698344), new l(u[61], 3733110249), new l(u[62], 2999351573), new l(u[63], 3815920427), new l(3391569614, 3928383900), new l(3515267271, 566280711), new l(3940187606, 3454069534), new l(4118630271, 4000239992), new l(116418474, 1914138554), new l(174292421, 2731055270), new l(289380356, 3203993006), new l(460393269, 320620315), new l(685471733, 587496836), new l(852142971, 1086792851), new l(1017036298, 365543100), new l(1126000580, 2618297676), new l(1288033470, 3409855158), new l(1501505948, 4234509866), new l(1607167915, 987167468), new l(1816402316, 1246189591)]; +var N = function(r, t, e) { + var n, i, o, s, a, c, f, d, p, v, g, w, _, y, x, b, U, W, j, N, X, K, V, Z, G, Y, q, J = function(r, t) { + return r + t + }, + Q = function(r, t, e, n) { + return r(t, e, n) + }, + $ = function(r, t, e) { + return r(t, e) + }, + rr = function(r, t, e) { + return r(t, e) + }, + tr = []; + if (function(r, t) { + return r === t + }(224, e) || 256 === e) + g = 64, + _ = 1, + V = Number, + y = z, + x = I, + b = M, + U = E, + W = H, + j = S, + N = P, + K = B, + X = m, + q = u; + else { + if (384 !== e && 512 !== e) + throw new Error("ush"); + g = 80, + _ = 2, + V = l, + y = F, + x = T, + b = L, + U = R, + W = D, + j = A, + N = C, + K = O, + X = k, + q = h + } + for (n = t[0], + i = t[1], + o = t[2], + s = t[3], + a = t[4], + c = t[5], + f = t[6], + d = t[7], + w = 0; w < g; w += 1) + w < 16 ? (Y = w * _, + Z = r.length <= Y ? 0 : r[Y], + G = r.length <= J(Y, 1) ? 0 : r[Y + 1], + tr[w] = new V(Z, G)) : tr[w] = x(W(tr[w - 2]), tr[w - 7], U(tr[w - 15]), tr[w - 16]), + p = b(d, N(a), Q(X, a, c, f), q[w], tr[w]), + v = $(y, j(n), K(n, i, o)), + d = f, + f = c, + c = a, + a = y(s, p), + s = o, + o = i, + i = n, + n = y(p, v); + return t[0] = y(n, t[0]), + t[1] = $(y, i, t[1]), + t[2] = y(o, t[2]), + t[3] = y(s, t[3]), + t[4] = y(a, t[4]), + t[5] = y(c, t[5]), + t[6] = y(f, t[6]), + t[7] = rr(y, d, t[7]), + t + }, + X = function(r, t, e) { + var n, i, o, s, a, c, u = { + qYOuo: function(r, t) { + return r >>> t + }, + yNpCr: function(r, t) { + return r < t + }, + GSshx: function(r, t) { + return r > t + }, + guLsE: function(r, t) { + return r ^ t + }, + BeAPN: function(r, t, e) { + return r(t, e) + }, + gsKKr: function(r, t) { + return r + t + }, + XfVGi: function(r, t, e, n, i) { + return r(t, e, n, i) + } + }, + h = 0, + l = [], + d = 0, + g = r, + w = !1, + _ = !1, + y = [], + x = []; + if (i = v(), + 1 === g) + s = 512, + a = W, + c = j, + o = 160; + else if (a = function(r, t) { + return N(r, t, g) + }, + c = function(r, t, e, n) { + var i = { + GGktb: function(r, t) { + return r <= t + }, + SdoWy: function(r, t) { + return r + t + } + }; + return function(r, t, e, n, o) { + for (var s = "0|4|3|1|2|5".split("|"), a = 0;;) { + switch (s[a++]) { + case "0": + var c, u, h, l, d; + continue; + case "1": + for (r[t >>> 5] |= 128 << 24 - t % 32, + r[h] = t + e, + u = r["length"], + c = 0; c < u; c += d) + n = N(r.slice(c, c + d), n, o); + continue; + case "2": + if (224 === o) + l = [n[0], n[1], n[2], n[3], n[4], n[5], n[6]]; + else if (256 === o) + l = n; + else if (384 === o) + l = [n[0].highOrder, n[0].lowOrder, n[1].highOrder, n[1].lowOrder, n[2].highOrder, n[2].lowOrder, n[3].highOrder, n[3].lowOrder, n[4].highOrder, n[4].lowOrder, n[5].highOrder, n[5].lowOrder]; + else { + if (512 !== o) + throw new Error(f("0x10")); + l = [n[0].highOrder, n[0].lowOrder, n[1]["highOrder"], n[1]["lowOrder"], n[2].highOrder, n[2].lowOrder, n[3].highOrder, n[3]["lowOrder"], n[4].highOrder, n[4].lowOrder, n[5].highOrder, n[5].lowOrder, n[6]["highOrder"], n[6].lowOrder, n[7].highOrder, n[7]["lowOrder"]] + } + continue; + case "3": + for (; i.GGktb(r["length"], h);) + r.push(0); + continue; + case "4": + if (224 === o || 256 === o) + h = 15 + (i["SdoWy"](t, 65) >>> 9 << 4), + d = 16; + else { + if (384 !== o && 512 !== o) + throw new Error("ush"); + h = 31 + (t + 129 >>> 10 << 5), + d = 32 + } + continue; + case "5": + return l + } + break + } + }(r, t, e, n, g) + }, + 224 === g) + s = 512, + o = 224; + else if (256 === g) + s = 512, + o = 256; + else if (384 === g) + s = 1024, + o = 384; + else { + if (512 !== g) + throw new Error; + s = 1024, + o = 512 + } + return n = U(g), + function(r) { + var t = v()(r), + e = t.binLen, + i = t.value, + o = u.qYOuo(s, 3), + f = o / 4 - 1; + if (u.yNpCr(o, e / 8)) { + for (i = c(i, e, 0, U(g)); i.length <= f;) + i.push(0); + i[f] &= 4294967040 + } else if (u.GSshx(o, e / 8)) { + for (; i.length <= f;) + i.push(0); + i[f] &= 4294967040 + } + for (var l = 0; l <= f; l += 1) + y[l] = u.guLsE(909522486, i[l]), + x[l] = 1549556828 ^ i[l]; + n = u.BeAPN(a, y, n), + h = s, + _ = !0 + }(t), + function() { + var r, t, o, c, p, v = 0, + g = s >>> 5; + for (t = (r = i(e, l, d)).binLen, + c = r.value, + o = t >>> 5, + p = 0; p < o; p += g) + u["gsKKr"](v, s) <= t && (n = a(c.slice(p, p + g), n), + v += s); + h += v, + l = c.slice(v >>> 5), + d = t % s + }(), + function() { + if (!1 === _) + throw new Error("hkset"); + var r, t = p; + return !1 === w && (r = u.XfVGi(c, l, d, h, n), + n = a(x, U(g)), + n = c(r, o, s, n)), + w = !0, + t(n) + }() + }, + K = "undefined" == typeof window ? global : window; + +function V(r) { + for (var t = function(r, t) { + return r < t + }, e = function(r, t) { + return r | t + }, n = function(r, t) { + return r << t + }, i = function(r, t) { + return r + t + }, o = r.length, s = [], a = 0; t(a, o); a += 4) { + var c = e(n(r[a], 24) | r[a + 1] << 16 | r[a + 2] << 8 | r[i(a, 3)], 0); + s.push(c) + } + return s +} + +function Z(r) { + for (var t = r.length, e = "", n = 0; n < t; ++n) + e += String.fromCharCode(r[n]); + return e +} +var G = Z([85, 105, 110, 116, 56, 65, 114, 114, 97, 121]), + Y = K[G]; + +function q(r) { + return new Y(r) +} +var J = Z([85, 105, 110, 116, 49, 54, 65, 114, 114, 97, 121]), + Q = (K[J], + Z([85, 105, 110, 116, 51, 50, 65, 114, 114, 97, 121])); + +function $(r) { + for (var t = r.length, e = [], n = 0; n < t; ++n) + e.push(r["charCodeAt"](n)); + return e +} + +function rr(r) { + for (var t = [], e = 0, n = r.length; e < n; e += 2) { + var i = r.substr(e, 2), + o = parseInt(i, 16); + if (isNaN(o)) + return null; + t.push(o) + } + return t +} +K[Q]; + +var tr = Math.pow(2, 8), + er = Math.pow(2, 16), + nr = Math.pow(2, 24), + ir = new function() { + var r = { + DuayG: function(r, t) { + return r | t + }, + JegZd: function(r, t) { + return r | t + }, + XsVfP: function(r, t) { + return r * t + }, + QJlgs: function(r, t) { + return r >> t + }, + rjoOU: function(r, t) { + return r + t + }, + vCSvq: function(r, t) { + return r ^ t + }, + VxODO: function(r, t) { + return r & t + }, + mDdRy: function(r, t) { + return r & t + }, + jXodn: function(r, t) { + return r & t + }, + VAHjH: function(r, t) { + return r >> t + }, + XcVts: function(r, t) { + return r < t + } + }, + t = function(t) { + var e = null; + e = rr(t); + e = "0000000000000000"; + var n = {}; + return n.left = r.DuayG(e[0] * nr | e[1] * er, e[2] * tr) | e[3], + n.right = r.JegZd(e[4] * nr | r.XsVfP(e[5], er) | e[6] * tr, e[7]), + n + }(f("0x16")); + this.d = function(e, n) { + var i = { + vWWeb: function(r, t) { + return r == t + }, + kUemb: function(t, e) { + return r.XcVts(t, e) + }, + JgSIg: function(r, t) { + return r + t + } + }; + return function(t, e, n) { + for (var o, s, a, c, u, h, l = "1|4|3|2|0".split("|"), d = 0;;) { + switch (l[d++]) { + case "0": + return S; + case "1": + var p = { + LdhBw: function(r, t) { + return r < t + } + }; + continue; + case "2": + for (var v = r["QJlgs"](A.length, 3), g = 0, w = { + left: 0, + right: 0 + }, _ = 1 === B, y = { + left: t.left || 0, + right: t["right"] || 0 + }, x = void 0, b = void 0, m = 0; m < v; ++m) + w.left = A[g] * nr | A[g + 1] * er | A[g + 2] * tr | A[g + 3], + w.right = A[r.rjoOU(g, 4)] * nr | A[g + 5] * er | A[g + 6] * tr | A[g + 7], + _ && (x = w.left, + b = w.right), + o = w, + a = void 0, + c = void 0, + u = void 0, + h = void 0, + a = { + FsSmr: function(r, t, e) { + return r(t, e) + }, + EnDim: function(r, t, e) { + return r(t, e) + }, + ioFZY: function(r, t, e) { + return r(t, e) + }, + gBRWX: function(r, t, e) { + return r(t, e) + }, + BNJzX: function(r, t, e) { + return r(t, e) + }, + rxyRQ: function(r, t, e) { + return r(t, e) + }, + LPpPR: function(r, t, e) { + return r(t, e) + } + }, + c = (s = O).p, + u = o.left, + h = o.right, + u = or(u = or(u = or(u = a["FsSmr"](or, u = or(u = a.EnDim(or, u = or(u = a.EnDim(or, u = or(u, c[17]), or(sr(h = or(h, a.ioFZY(or, sr(u, s), c[16])), s), c[15])), or(a.ioFZY(sr, h = a.ioFZY(or, h, or(sr(u, s), c[14])), s), c[13])), or(sr(h = or(h, or(sr(u, s), c[12])), s), c[11])), or(a.ioFZY(sr, h = or(h, or(sr(u, s), c[10])), s), c[9])), or(a["gBRWX"](sr, h = or(h, or(sr(u, s), c[8])), s), c[7])), or(sr(h = or(h, or(sr(u, s), c[6])), s), c[5])), or(sr(h = or(h, or(a.BNJzX(sr, u, s), c[4])), s), c[3])), or(sr(h = a.rxyRQ(or, h, or(sr(u, s), c[2])), s), c[1])), + o.right = u, + o.left = a.LPpPR(or, h, c[0]), + _ && (w.left = (r.QJlgs(w.left, 16) ^ y.left >> 16) << 16 | 65535 & r.vCSvq(r["VxODO"](65535, w.left), 65535 & y.left), + w.right = (w.right >> 16 ^ r["QJlgs"](y.right, 16)) << 16 | r.VxODO(65535, r.VxODO(65535, w.right) ^ r.mDdRy(65535, y.right)), + y.left = x, + y.right = b), + S.push(r.jXodn(w["left"] >> 24, 255)), + S.push(255 & r["QJlgs"](w.left, 16)), + S["push"](w.left >> 8 & 255), + S.push(255 & w.left), + S.push(w.right >> 24 & 255), + S["push"](r["jXodn"](r.VAHjH(w.right, 16), 255)), + S.push(w.right >> 8 & 255), + S.push(255 & w.right), + g += 8; + continue; + case "3": + switch (k) { + case 1: + A = rr(e); + break; + case 2: + A = e["split"]("").map((function(r) { + return r.charCodeAt(0) + })); + break; + case 0: + A = e + } + continue; + case "4": + var k = 0, + B = 0, + O = function(r) { + var t, e = function(r, t) { + return r & t + }, + n = function(r, t) { + return r * t + }, + o = function(r, t) { + return r >> t + }; + t = i.vWWeb("string", typeof r) || r instanceof String ? r.split("")["map"]((function(r) { + return e(255, r.charCodeAt(0)) + })) : r; + var s = 0, + a = 0, + c = { + left: 0, + right: 0 + }, + u = { + p: [608135816, 2242054355, 320440878, 57701188, 2752067618, 698298832, 137296536, 3964562569, 1160258022, 953160567, 3193202383, 887688300, 3232508343, 3380367581, 1065670069, 3041331479, 2450970073, 2306472731], + s0: [3509652390, 2564797868, 805139163, 3491422135, 3101798381, 1780907670, 3128725573, 4046225305, 614570311, 3012652279, 134345442, 2240740374, 1667834072, 1901547113, 2757295779, 4103290238, 227898511, 1921955416, 1904987480, 2182433518, 2069144605, 3260701109, 2620446009, 720527379, 3318853667, 677414384, 3393288472, 3101374703, 2390351024, 1614419982, 1822297739, 2954791486, 3608508353, 3174124327, 2024746970, 1432378464, 3864339955, 2857741204, 1464375394, 1676153920, 1439316330, 715854006, 3033291828, 289532110, 2706671279, 2087905683, 3018724369, 1668267050, 732546397, 1947742710, 3462151702, 2609353502, 2950085171, 1814351708, 2050118529, 680887927, 999245976, 1800124847, 3300911131, 1713906067, 1641548236, 4213287313, 1216130144, 1575780402, 4018429277, 3917837745, 3693486850, 3949271944, 596196993, 3549867205, 258830323, 2213823033, 772490370, 2760122372, 1774776394, 2652871518, 566650946, 4142492826, 1728879713, 2882767088, 1783734482, 3629395816, 2517608232, 2874225571, 1861159788, 326777828, 3124490320, 2130389656, 2716951837, 967770486, 1724537150, 2185432712, 2364442137, 1164943284, 2105845187, 998989502, 3765401048, 2244026483, 1075463327, 1455516326, 1322494562, 910128902, 469688178, 1117454909, 936433444, 3490320968, 3675253459, 1240580251, 122909385, 2157517691, 634681816, 4142456567, 3825094682, 3061402683, 2540495037, 79693498, 3249098678, 1084186820, 1583128258, 426386531, 1761308591, 1047286709, 322548459, 995290223, 1845252383, 2603652396, 3431023940, 2942221577, 3202600964, 3727903485, 1712269319, 422464435, 3234572375, 1170764815, 3523960633, 3117677531, 1434042557, 442511882, 3600875718, 1076654713, 1738483198, 4213154764, 2393238008, 3677496056, 1014306527, 4251020053, 793779912, 2902807211, 842905082, 4246964064, 1395751752, 1040244610, 2656851899, 3396308128, 445077038, 3742853595, 3577915638, 679411651, 2892444358, 2354009459, 1767581616, 3150600392, 3791627101, 3102740896, 284835224, 4246832056, 1258075500, 768725851, 2589189241, 3069724005, 3532540348, 1274779536, 3789419226, 2764799539, 1660621633, 3471099624, 4011903706, 913787905, 3497959166, 737222580, 2514213453, 2928710040, 3937242737, 1804850592, 3499020752, 2949064160, 2386320175, 2390070455, 2415321851, 4061277028, 2290661394, 2416832540, 1336762016, 1754252060, 3520065937, 3014181293, 791618072, 3188594551, 3933548030, 2332172193, 3852520463, 3043980520, 413987798, 3465142937, 3030929376, 4245938359, 2093235073, 3534596313, 375366246, 2157278981, 2479649556, 555357303, 3870105701, 2008414854, 3344188149, 4221384143, 3956125452, 2067696032, 3594591187, 2921233993, 2428461, 544322398, 577241275, 1471733935, 610547355, 4027169054, 1432588573, 1507829418, 2025931657, 3646575487, 545086370, 48609733, 2200306550, 1653985193, 298326376, 1316178497, 3007786442, 2064951626, 458293330, 2589141269, 3591329599, 3164325604, 727753846, 2179363840, 146436021, 1461446943, 4069977195, 705550613, 3059967265, 3887724982, 4281599278, 3313849956, 1404054877, 2845806497, 146425753, 1854211946], + s1: [1266315497, 3048417604, 3681880366, 3289982499, 290971e4, 1235738493, 2632868024, 2414719590, 3970600049, 1771706367, 1449415276, 3266420449, 422970021, 1963543593, 2690192192, 3826793022, 1062508698, 1531092325, 1804592342, 2583117782, 2714934279, 4024971509, 1294809318, 4028980673, 1289560198, 2221992742, 1669523910, 35572830, 157838143, 1052438473, 1016535060, 1802137761, 1753167236, 1386275462, 3080475397, 2857371447, 1040679964, 2145300060, 2390574316, 1461121720, 2956646967, 4031777805, 4028374788, 33600511, 2920084762, 1018524850, 629373528, 3691585981, 3515945977, 2091462646, 2486323059, 586499841, 988145025, 935516892, 3367335476, 2599673255, 2839830854, 265290510, 3972581182, 2759138881, 3795373465, 1005194799, 847297441, 406762289, 1314163512, 1332590856, 1866599683, 4127851711, 750260880, 613907577, 1450815602, 3165620655, 3734664991, 3650291728, 3012275730, 3704569646, 1427272223, 778793252, 1343938022, 2676280711, 2052605720, 1946737175, 3164576444, 3914038668, 3967478842, 3682934266, 1661551462, 3294938066, 4011595847, 840292616, 3712170807, 616741398, 312560963, 711312465, 1351876610, 322626781, 1910503582, 271666773, 2175563734, 1594956187, 70604529, 3617834859, 1007753275, 1495573769, 4069517037, 2549218298, 2663038764, 504708206, 2263041392, 3941167025, 2249088522, 1514023603, 1998579484, 1312622330, 694541497, 2582060303, 2151582166, 1382467621, 776784248, 2618340202, 3323268794, 2497899128, 2784771155, 503983604, 4076293799, 907881277, 423175695, 432175456, 1378068232, 4145222326, 3954048622, 3938656102, 3820766613, 2793130115, 2977904593, 26017576, 3274890735, 3194772133, 1700274565, 1756076034, 4006520079, 3677328699, 720338349, 1533947780, 354530856, 688349552, 3973924725, 1637815568, 332179504, 3949051286, 53804574, 2852348879, 3044236432, 1282449977, 3583942155, 3416972820, 4006381244, 1617046695, 2628476075, 3002303598, 1686838959, 431878346, 2686675385, 1700445008, 1080580658, 1009431731, 832498133, 3223435511, 2605976345, 2271191193, 2516031870, 1648197032, 4164389018, 2548247927, 300782431, 375919233, 238389289, 3353747414, 2531188641, 2019080857, 1475708069, 455242339, 2609103871, 448939670, 3451063019, 1395535956, 2413381860, 1841049896, 1491858159, 885456874, 4264095073, 4001119347, 1565136089, 3898914787, 1108368660, 540939232, 1173283510, 2745871338, 3681308437, 4207628240, 3343053890, 4016749493, 1699691293, 1103962373, 3625875870, 2256883143, 3830138730, 1031889488, 3479347698, 1535977030, 4236805024, 3251091107, 2132092099, 1774941330, 1199868427, 1452454533, 157007616, 2904115357, 342012276, 595725824, 1480756522, 206960106, 497939518, 591360097, 863170706, 2375253569, 3596610801, 1814182875, 2094937945, 3421402208, 1082520231, 3463918190, 2785509508, 435703966, 3908032597, 1641649973, 2842273706, 3305899714, 1510255612, 2148256476, 2655287854, 3276092548, 4258621189, 236887753, 3681803219, 274041037, 1734335097, 3815195456, 3317970021, 1899903192, 1026095262, 4050517792, 356393447, 2410691914, 3873677099, 3682840055], + s2: [3913112168, 2491498743, 4132185628, 2489919796, 1091903735, 1979897079, 3170134830, 3567386728, 3557303409, 857797738, 1136121015, 1342202287, 507115054, 2535736646, 337727348, 3213592640, 1301675037, 2528481711, 1895095763, 1721773893, 3216771564, 62756741, 2142006736, 835421444, 2531993523, 1442658625, 3659876326, 2882144922, 676362277, 1392781812, 170690266, 3921047035, 1759253602, 3611846912, 1745797284, 664899054, 1329594018, 3901205900, 3045908486, 2062866102, 2865634940, 3543621612, 3464012697, 1080764994, 553557557, 3656615353, 3996768171, 991055499, 499776247, 1265440854, 648242737, 3940784050, 980351604, 3713745714, 1749149687, 3396870395, 4211799374, 3640570775, 1161844396, 3125318951, 1431517754, 545492359, 4268468663, 3499529547, 1437099964, 2702547544, 3433638243, 2581715763, 2787789398, 1060185593, 1593081372, 2418618748, 4260947970, 69676912, 2159744348, 86519011, 2512459080, 3838209314, 1220612927, 3339683548, 133810670, 1090789135, 1078426020, 1569222167, 845107691, 3583754449, 4072456591, 1091646820, 628848692, 1613405280, 3757631651, 526609435, 236106946, 48312990, 2942717905, 3402727701, 1797494240, 859738849, 992217954, 4005476642, 2243076622, 3870952857, 3732016268, 765654824, 3490871365, 2511836413, 1685915746, 3888969200, 1414112111, 2273134842, 3281911079, 4080962846, 172450625, 2569994100, 980381355, 4109958455, 2819808352, 2716589560, 2568741196, 3681446669, 3329971472, 1835478071, 660984891, 3704678404, 4045999559, 3422617507, 3040415634, 1762651403, 1719377915, 3470491036, 2693910283, 3642056355, 3138596744, 1364962596, 2073328063, 1983633131, 926494387, 3423689081, 2150032023, 4096667949, 1749200295, 3328846651, 309677260, 2016342300, 1779581495, 3079819751, 111262694, 1274766160, 443224088, 298511866, 1025883608, 3806446537, 1145181785, 168956806, 3641502830, 3584813610, 1689216846, 3666258015, 3200248200, 1692713982, 2646376535, 4042768518, 1618508792, 1610833997, 3523052358, 4130873264, 2001055236, 3610705100, 2202168115, 4028541809, 2961195399, 1006657119, 2006996926, 3186142756, 1430667929, 3210227297, 1314452623, 4074634658, 4101304120, 2273951170, 1399257539, 3367210612, 3027628629, 1190975929, 2062231137, 2333990788, 2221543033, 2438960610, 1181637006, 548689776, 2362791313, 3372408396, 3104550113, 3145860560, 296247880, 1970579870, 3078560182, 3769228297, 1714227617, 3291629107, 3898220290, 166772364, 1251581989, 493813264, 448347421, 195405023, 2709975567, 677966185, 3703036547, 1463355134, 2715995803, 1338867538, 1343315457, 2802222074, 2684532164, 233230375, 2599980071, 2000651841, 3277868038, 1638401717, 4028070440, 3237316320, 6314154, 819756386, 300326615, 590932579, 1405279636, 3267499572, 3150704214, 2428286686, 3959192993, 3461946742, 1862657033, 1266418056, 963775037, 2089974820, 2263052895, 1917689273, 448879540, 3550394620, 3981727096, 150775221, 3627908307, 1303187396, 508620638, 2975983352, 2726630617, 1817252668, 1876281319, 1457606340, 908771278, 3720792119, 3617206836, 2455994898, 1729034894, 1080033504], + s3: [976866871, 3556439503, 2881648439, 1522871579, 1555064734, 1336096578, 3548522304, 2579274686, 3574697629, 3205460757, 3593280638, 3338716283, 3079412587, 564236357, 2993598910, 1781952180, 1464380207, 3163844217, 3332601554, 1699332808, 1393555694, 1183702653, 3581086237, 1288719814, 691649499, 2847557200, 2895455976, 3193889540, 2717570544, 1781354906, 1676643554, 2592534050, 3230253752, 1126444790, 2770207658, 2633158820, 2210423226, 2615765581, 2414155088, 3127139286, 673620729, 2805611233, 1269405062, 4015350505, 3341807571, 4149409754, 1057255273, 2012875353, 2162469141, 2276492801, 2601117357, 993977747, 3918593370, 2654263191, 753973209, 36408145, 2530585658, 25011837, 3520020182, 2088578344, 530523599, 2918365339, 1524020338, 1518925132, 3760827505, 3759777254, 1202760957, 3985898139, 3906192525, 674977740, 4174734889, 2031300136, 2019492241, 3983892565, 4153806404, 3822280332, 352677332, 2297720250, 60907813, 90501309, 3286998549, 1016092578, 2535922412, 2839152426, 457141659, 509813237, 4120667899, 652014361, 1966332200, 2975202805, 55981186, 2327461051, 676427537, 3255491064, 2882294119, 3433927263, 1307055953, 942726286, 933058658, 2468411793, 3933900994, 4215176142, 1361170020, 2001714738, 2830558078, 3274259782, 1222529897, 1679025792, 2729314320, 3714953764, 1770335741, 151462246, 3013232138, 1682292957, 1483529935, 471910574, 1539241949, 458788160, 3436315007, 1807016891, 3718408830, 978976581, 1043663428, 3165965781, 1927990952, 4200891579, 2372276910, 3208408903, 3533431907, 1412390302, 2931980059, 4132332400, 1947078029, 3881505623, 4168226417, 2941484381, 1077988104, 1320477388, 886195818, 18198404, 3786409e3, 2509781533, 112762804, 3463356488, 1866414978, 891333506, 18488651, 661792760, 1628790961, 3885187036, 3141171499, 876946877, 2693282273, 1372485963, 791857591, 2686433993, 3759982718, 3167212022, 3472953795, 2716379847, 445679433, 3561995674, 3504004811, 3574258232, 54117162, 3331405415, 2381918588, 3769707343, 4154350007, 1140177722, 4074052095, 668550556, 3214352940, 367459370, 261225585, 2610173221, 4209349473, 3468074219, 3265815641, 314222801, 3066103646, 3808782860, 282218597, 3406013506, 3773591054, 379116347, 1285071038, 846784868, 2669647154, 3771962079, 3550491691, 2305946142, 453669953, 1268987020, 3317592352, 3279303384, 3744833421, 2610507566, 3859509063, 266596637, 3847019092, 517658769, 3462560207, 3443424879, 370717030, 4247526661, 2224018117, 4143653529, 4112773975, 2788324899, 2477274417, 1456262402, 2901442914, 1517677493, 1846949527, 2295493580, 3734397586, 2176403920, 1280348187, 1908823572, 3871786941, 846861322, 1172426758, 3287448474, 3383383037, 1655181056, 3139813346, 901632758, 1897031941, 2986607138, 3066810236, 3447102507, 1393639104, 373351379, 950779232, 625454576, 3124240540, 4148612726, 2007998917, 544563296, 2244738638, 2330496472, 2058025392, 1291430526, 424198748, 50039436, 29584100, 3605783033, 2429876329, 2791104160, 1057563949, 3255363231, 3075367218, 3463963227, 1469046755, 985887462] + }, + h = u.p; + ! function(r, t) { + for (var e = 0, n = r.length; p.LdhBw(e, n); ++e) { + var i = t(r[e]); + r[e] = i + } + }(h, (function(r) { + for (var e = t["length"], i = 0; i < 4; ++i) + a = n(a, tr) | t[s++ % e]; + return (r >> 16 ^ o(a, 16)) << 16 | 65535 & (65535 & r ^ 65535 & a) + })); + for (var l = 0, d = h.length; l < d;) + ar(c, u), + h[l++] = c.left, + h[l++] = c.right; + for (var v = 0; i["kUemb"](v, 4); ++v) + for (var g = u[i.JgSIg("s", v)], w = 0, _ = g.length; w < _;) + ar(c, u), + g[w++] = c["left"], + g[w++] = c.right; + return u + }(n), + S = [], + A = null; + continue + } + break + } + }(t, e, n) + } + }; + +function or(r, t) { + return { + dZqgx: function(r, t) { + return r << t + } + } ["dZqgx"](r >> 16 ^ t >> 16, 16) | 65535 & (65535 & r ^ 65535 & t) +} + +function sr(r, t) { + var e = { + jIFhX: function(r, t) { + return r & t + }, + cvxyv: function(r, t) { + return r >> t + }, + rOiie: function(r, t) { + return r & t + }, + jvAMh: function(r, t) { + return r & t + }, + vFPuv: function(r, t) { + return r << t + }, + fMqNs: function(r, t) { + return r ^ t + }, + TGIdB: function(r, t) { + return r ^ t + }, + lZvsE: function(r, t) { + return r + t + }, + BnfyR: function(r, t) { + return r & t + } + }, + n = t.s3[e.jIFhX(255, r)]; + r >>= 8; + var i = t.s2[255 & r]; + r >>= 8; + var o = t.s1[255 & r]; + r >>= 8; + var s = t.s0[e.jIFhX(255, r)], + a = e.cvxyv(s, 16) + (o >> 16) + ((65535 & s) + (65535 & o) >> 16) << 16 | e.rOiie((65535 & s) + e.jvAMh(65535, o), 65535); + return ((a = e.vFPuv(e["fMqNs"](a >> 16, e.cvxyv(i, 16)), 16) | 65535 & e.TGIdB(65535 & a, 65535 & i)) >> 16) + (n >> 16) + ((65535 & a) + (65535 & n) >> 16) << 16 | 65535 & e.lZvsE(65535 & a, e.BnfyR(65535, n)) +} + +function ar(r, t) { + var e = { + KtxxG: function(r, t, e) { + return r(t, e) + }, + jwaEE: function(r, t, e) { + return r(t, e) + }, + ezmIL: function(r, t, e) { + return r(t, e) + }, + HrztJ: function(r, t, e) { + return r(t, e) + } + }, + n = t.p, + i = r["left"], + o = r.right; + i = or(i = or(i = or(i = or(i = or(i = or(i = or(i = or(i = or(i, n[0]), or(sr(o = or(o, or(sr(i, t), n[1])), t), n[2])), or(sr(o = or(o, or(sr(i, t), n[3])), t), n[4])), or(sr(o = or(o, or(e.KtxxG(sr, i, t), n[5])), t), n[6])), or(sr(o = or(o, e.KtxxG(or, sr(i, t), n[7])), t), n[8])), or(sr(o = or(o, or(sr(i, t), n[9])), t), n[10])), or(sr(o = or(o, or(e["jwaEE"](sr, i, t), n[11])), t), n[12])), or(sr(o = or(o, e.jwaEE(or, sr(i, t), n[13])), t), n[14])), e.ezmIL(or, sr(o = e["HrztJ"](or, o, or(sr(i, t), n[15])), t), n[16])), + r.right = i, + r.left = or(o, n[17]) +} +var cr = { + 16: 10, + 24: 12, + 32: 14 + }, + ur = [1, 2, 4, 8, 16, 32, 64, 128, 27, 54, 108, 216, 171, 77, 154, 47, 94, 188, 99, 198, 151, 53, 106, 212, 179, 125, 250, 239, 197, 145], + hr = [99, 124, 119, 123, 242, 107, 111, 197, 48, 1, 103, 43, 254, 215, 171, 118, 202, 130, 201, 125, 250, 89, 71, 240, 173, 212, 162, 175, 156, 164, 114, 192, 183, 253, 147, 38, 54, 63, 247, 204, 52, 165, 229, 241, 113, 216, 49, 21, 4, 199, 35, 195, 24, 150, 5, 154, 7, 18, 128, 226, 235, 39, 178, 117, 9, 131, 44, 26, 27, 110, 90, 160, 82, 59, 214, 179, 41, 227, 47, 132, 83, 209, 0, 237, 32, 252, 177, 91, 106, 203, 190, 57, 74, 76, 88, 207, 208, 239, 170, 251, 67, 77, 51, 133, 69, 249, 2, 127, 80, 60, 159, 168, 81, 163, 64, 143, 146, 157, 56, 245, 188, 182, 218, 33, 16, 255, 243, 210, 205, 12, 19, 236, 95, 151, 68, 23, 196, 167, 126, 61, 100, 93, 25, 115, 96, 129, 79, 220, 34, 42, 144, 136, 70, 238, 184, 20, 222, 94, 11, 219, 224, 50, 58, 10, 73, 6, 36, 92, 194, 211, 172, 98, 145, 149, 228, 121, 231, 200, 55, 109, 141, 213, 78, 169, 108, 86, 244, 234, 101, 122, 174, 8, 186, 120, 37, 46, 28, 166, 180, 198, 232, 221, 116, 31, 75, 189, 139, 138, 112, 62, 181, 102, 72, 3, 246, 14, 97, 53, 87, 185, 134, 193, 29, 158, 225, 248, 152, 17, 105, 217, 142, 148, 155, 30, 135, 233, 206, 85, 40, 223, 140, 161, 137, 13, 191, 230, 66, 104, 65, 153, 45, 15, 176, 84, 187, 22], + fr = [82, 9, 106, 213, 48, 54, 165, 56, 191, 64, 163, 158, 129, 243, 215, 251, 124, 227, 57, 130, 155, 47, 255, 135, 52, 142, 67, 68, 196, 222, 233, 203, 84, 123, 148, 50, 166, 194, 35, 61, 238, 76, 149, 11, 66, 250, 195, 78, 8, 46, 161, 102, 40, 217, 36, 178, 118, 91, 162, 73, 109, 139, 209, 37, 114, 248, 246, 100, 134, 104, 152, 22, 212, 164, 92, 204, 93, 101, 182, 146, 108, 112, 72, 80, 253, 237, 185, 218, 94, 21, 70, 87, 167, 141, 157, 132, 144, 216, 171, 0, 140, 188, 211, 10, 247, 228, 88, 5, 184, 179, 69, 6, 208, 44, 30, 143, 202, 63, 15, 2, 193, 175, 189, 3, 1, 19, 138, 107, 58, 145, 17, 65, 79, 103, 220, 234, 151, 242, 207, 206, 240, 180, 230, 115, 150, 172, 116, 34, 231, 173, 53, 133, 226, 249, 55, 232, 28, 117, 223, 110, 71, 241, 26, 113, 29, 41, 197, 137, 111, 183, 98, 14, 170, 24, 190, 27, 252, 86, 62, 75, 198, 210, 121, 32, 154, 219, 192, 254, 120, 205, 90, 244, 31, 221, 168, 51, 136, 7, 199, 49, 177, 18, 16, 89, 39, 128, 236, 95, 96, 81, 127, 169, 25, 181, 74, 13, 45, 229, 122, 159, 147, 201, 156, 239, 160, 224, 59, 77, 174, 42, 245, 176, 200, 235, 187, 60, 131, 83, 153, 97, 23, 43, 4, 126, 186, 119, 214, 38, 225, 105, 20, 99, 85, 33, 12, 125], + lr = [1374988112, 2118214995, 437757123, 975658646, 1001089995, 530400753, 2902087851, 1273168787, 540080725, 2910219766, 2295101073, 4110568485, 1340463100, 3307916247, 641025152, 3043140495, 3736164937, 632953703, 1172967064, 1576976609, 3274667266, 2169303058, 2370213795, 1809054150, 59727847, 361929877, 3211623147, 2505202138, 3569255213, 1484005843, 1239443753, 2395588676, 1975683434, 4102977912, 2572697195, 666464733, 3202437046, 4035489047, 3374361702, 2110667444, 1675577880, 3843699074, 2538681184, 1649639237, 2976151520, 3144396420, 4269907996, 4178062228, 1883793496, 2403728665, 2497604743, 1383856311, 2876494627, 1917518562, 3810496343, 1716890410, 3001755655, 800440835, 2261089178, 3543599269, 807962610, 599762354, 33778362, 3977675356, 2328828971, 2809771154, 4077384432, 1315562145, 1708848333, 101039829, 3509871135, 3299278474, 875451293, 2733856160, 92987698, 2767645557, 193195065, 1080094634, 1584504582, 3178106961, 1042385657, 2531067453, 3711829422, 1306967366, 2438237621, 1908694277, 67556463, 1615861247, 429456164, 3602770327, 2302690252, 1742315127, 2968011453, 126454664, 3877198648, 2043211483, 2709260871, 2084704233, 4169408201, 0, 159417987, 841739592, 504459436, 1817866830, 4245618683, 260388950, 1034867998, 908933415, 168810852, 1750902305, 2606453969, 607530554, 202008497, 2472011535, 3035535058, 463180190, 2160117071, 1641816226, 1517767529, 470948374, 3801332234, 3231722213, 1008918595, 303765277, 235474187, 4069246893, 766945465, 337553864, 1475418501, 2943682380, 4003061179, 2743034109, 4144047775, 1551037884, 1147550661, 1543208500, 2336434550, 3408119516, 3069049960, 3102011747, 3610369226, 1113818384, 328671808, 2227573024, 2236228733, 3535486456, 2935566865, 3341394285, 496906059, 3702665459, 226906860, 2009195472, 733156972, 2842737049, 294930682, 1206477858, 2835123396, 2700099354, 1451044056, 573804783, 2269728455, 3644379585, 2362090238, 2564033334, 2801107407, 2776292904, 3669462566, 1068351396, 742039012, 1350078989, 1784663195, 1417561698, 4136440770, 2430122216, 775550814, 2193862645, 2673705150, 1775276924, 1876241833, 3475313331, 3366754619, 270040487, 3902563182, 3678124923, 3441850377, 1851332852, 3969562369, 2203032232, 3868552805, 2868897406, 566021896, 4011190502, 3135740889, 1248802510, 3936291284, 699432150, 832877231, 708780849, 3332740144, 899835584, 1951317047, 4236429990, 3767586992, 866637845, 4043610186, 1106041591, 2144161806, 395441711, 1984812685, 1139781709, 3433712980, 3835036895, 2664543715, 1282050075, 3240894392, 1181045119, 2640243204, 25965917, 4203181171, 4211818798, 3009879386, 2463879762, 3910161971, 1842759443, 2597806476, 933301370, 1509430414, 3943906441, 3467192302, 3076639029, 3776767469, 2051518780, 2631065433, 1441952575, 404016761, 1942435775, 1408749034, 1610459739, 3745345300, 2017778566, 3400528769, 3110650942, 941896748, 3265478751, 371049330, 3168937228, 675039627, 4279080257, 967311729, 135050206, 3635733660, 1683407248, 2076935265, 3576870512, 1215061108, 3501741890], + dr = [1347548327, 1400783205, 3273267108, 2520393566, 3409685355, 4045380933, 2880240216, 2471224067, 1428173050, 4138563181, 2441661558, 636813900, 4233094615, 3620022987, 2149987652, 2411029155, 1239331162, 1730525723, 2554718734, 3781033664, 46346101, 310463728, 2743944855, 3328955385, 3875770207, 2501218972, 3955191162, 3667219033, 768917123, 3545789473, 692707433, 1150208456, 1786102409, 2029293177, 1805211710, 3710368113, 3065962831, 401639597, 1724457132, 3028143674, 409198410, 2196052529, 1620529459, 1164071807, 3769721975, 2226875310, 486441376, 2499348523, 1483753576, 428819965, 2274680428, 3075636216, 598438867, 3799141122, 1474502543, 711349675, 129166120, 53458370, 2592523643, 2782082824, 4063242375, 2988687269, 3120694122, 1559041666, 730517276, 2460449204, 4042459122, 2706270690, 3446004468, 3573941694, 533804130, 2328143614, 2637442643, 2695033685, 839224033, 1973745387, 957055980, 2856345839, 106852767, 1371368976, 4181598602, 1033297158, 2933734917, 1179510461, 3046200461, 91341917, 1862534868, 4284502037, 605657339, 2547432937, 3431546947, 2003294622, 3182487618, 2282195339, 954669403, 3682191598, 1201765386, 3917234703, 3388507166, 0, 2198438022, 1211247597, 2887651696, 1315723890, 4227665663, 1443857720, 507358933, 657861945, 1678381017, 560487590, 3516619604, 975451694, 2970356327, 261314535, 3535072918, 2652609425, 1333838021, 2724322336, 1767536459, 370938394, 182621114, 3854606378, 1128014560, 487725847, 185469197, 2918353863, 3106780840, 3356761769, 2237133081, 1286567175, 3152976349, 4255350624, 2683765030, 3160175349, 3309594171, 878443390, 1988838185, 3704300486, 1756818940, 1673061617, 3403100636, 272786309, 1075025698, 545572369, 2105887268, 4174560061, 296679730, 1841768865, 1260232239, 4091327024, 3960309330, 3497509347, 1814803222, 2578018489, 4195456072, 575138148, 3299409036, 446754879, 3629546796, 4011996048, 3347532110, 3252238545, 4270639778, 915985419, 3483825537, 681933534, 651868046, 2755636671, 3828103837, 223377554, 2607439820, 1649704518, 3270937875, 3901806776, 1580087799, 4118987695, 3198115200, 2087309459, 2842678573, 3016697106, 1003007129, 2802849917, 1860738147, 2077965243, 164439672, 4100872472, 32283319, 2827177882, 1709610350, 2125135846, 136428751, 3874428392, 3652904859, 3460984630, 3572145929, 3593056380, 2939266226, 824852259, 818324884, 3224740454, 930369212, 2801566410, 2967507152, 355706840, 1257309336, 4148292826, 243256656, 790073846, 2373340630, 1296297904, 1422699085, 3756299780, 3818836405, 457992840, 3099667487, 2135319889, 77422314, 1560382517, 1945798516, 788204353, 1521706781, 1385356242, 870912086, 325965383, 2358957921, 2050466060, 2388260884, 2313884476, 4006521127, 901210569, 3990953189, 1014646705, 1503449823, 1062597235, 2031621326, 3212035895, 3931371469, 1533017514, 350174575, 2256028891, 2177544179, 1052338372, 741876788, 1606591296, 1914052035, 213705253, 2334669897, 1107234197, 1899603969, 3725069491, 2631447780, 2422494913, 1635502980, 1893020342, 1950903388, 1120974935], + pr = [2807058932, 1699970625, 2764249623, 1586903591, 1808481195, 1173430173, 1487645946, 59984867, 4199882800, 1844882806, 1989249228, 1277555970, 3623636965, 3419915562, 1149249077, 2744104290, 1514790577, 459744698, 244860394, 3235995134, 1963115311, 4027744588, 2544078150, 4190530515, 1608975247, 2627016082, 2062270317, 1507497298, 2200818878, 567498868, 1764313568, 3359936201, 2305455554, 2037970062, 1047239e3, 1910319033, 1337376481, 2904027272, 2892417312, 984907214, 1243112415, 830661914, 861968209, 2135253587, 2011214180, 2927934315, 2686254721, 731183368, 1750626376, 4246310725, 1820824798, 4172763771, 3542330227, 48394827, 2404901663, 2871682645, 671593195, 3254988725, 2073724613, 145085239, 2280796200, 2779915199, 1790575107, 2187128086, 472615631, 3029510009, 4075877127, 3802222185, 4107101658, 3201631749, 1646252340, 4270507174, 1402811438, 1436590835, 3778151818, 3950355702, 3963161475, 4020912224, 2667994737, 273792366, 2331590177, 104699613, 95345982, 3175501286, 2377486676, 1560637892, 3564045318, 369057872, 4213447064, 3919042237, 1137477952, 2658625497, 1119727848, 2340947849, 1530455833, 4007360968, 172466556, 266959938, 516552836, 0, 2256734592, 3980931627, 1890328081, 1917742170, 4294704398, 945164165, 3575528878, 958871085, 3647212047, 2787207260, 1423022939, 775562294, 1739656202, 3876557655, 2530391278, 2443058075, 3310321856, 547512796, 1265195639, 437656594, 3121275539, 719700128, 3762502690, 387781147, 218828297, 3350065803, 2830708150, 2848461854, 428169201, 122466165, 3720081049, 1627235199, 648017665, 4122762354, 1002783846, 2117360635, 695634755, 3336358691, 4234721005, 4049844452, 3704280881, 2232435299, 574624663, 287343814, 612205898, 1039717051, 840019705, 2708326185, 793451934, 821288114, 1391201670, 3822090177, 376187827, 3113855344, 1224348052, 1679968233, 2361698556, 1058709744, 752375421, 2431590963, 1321699145, 3519142200, 2734591178, 188127444, 2177869557, 3727205754, 2384911031, 3215212461, 2648976442, 2450346104, 3432737375, 1180849278, 331544205, 3102249176, 4150144569, 2952102595, 2159976285, 2474404304, 766078933, 313773861, 2570832044, 2108100632, 1668212892, 3145456443, 2013908262, 418672217, 3070356634, 2594734927, 1852171925, 3867060991, 3473416636, 3907448597, 2614737639, 919489135, 164948639, 2094410160, 2997825956, 590424639, 2486224549, 1723872674, 3157750862, 3399941250, 3501252752, 3625268135, 2555048196, 3673637356, 1343127501, 4130281361, 3599595085, 2957853679, 1297403050, 81781910, 3051593425, 2283490410, 532201772, 1367295589, 3926170974, 895287692, 1953757831, 1093597963, 492483431, 3528626907, 1446242576, 1192455638, 1636604631, 209336225, 344873464, 1015671571, 669961897, 3375740769, 3857572124, 2973530695, 3747192018, 1933530610, 3464042516, 935293895, 3454686199, 2858115069, 1863638845, 3683022916, 4085369519, 3292445032, 875313188, 1080017571, 3279033885, 621591778, 1233856572, 2504130317, 24197544, 3017672716, 3835484340, 3247465558, 2220981195, 3060847922, 1551124588, 1463996600], + vr = [4104605777, 1097159550, 396673818, 660510266, 2875968315, 2638606623, 4200115116, 3808662347, 821712160, 1986918061, 3430322568, 38544885, 3856137295, 718002117, 893681702, 1654886325, 2975484382, 3122358053, 3926825029, 4274053469, 796197571, 1290801793, 1184342925, 3556361835, 2405426947, 2459735317, 1836772287, 1381620373, 3196267988, 1948373848, 3764988233, 3385345166, 3263785589, 2390325492, 1480485785, 3111247143, 3780097726, 2293045232, 548169417, 3459953789, 3746175075, 439452389, 1362321559, 1400849762, 1685577905, 1806599355, 2174754046, 137073913, 1214797936, 1174215055, 3731654548, 2079897426, 1943217067, 1258480242, 529487843, 1437280870, 3945269170, 3049390895, 3313212038, 923313619, 679998e3, 3215307299, 57326082, 377642221, 3474729866, 2041877159, 133361907, 1776460110, 3673476453, 96392454, 878845905, 2801699524, 777231668, 4082475170, 2330014213, 4142626212, 2213296395, 1626319424, 1906247262, 1846563261, 562755902, 3708173718, 1040559837, 3871163981, 1418573201, 3294430577, 114585348, 1343618912, 2566595609, 3186202582, 1078185097, 3651041127, 3896688048, 2307622919, 425408743, 3371096953, 2081048481, 1108339068, 2216610296, 0, 2156299017, 736970802, 292596766, 1517440620, 251657213, 2235061775, 2933202493, 758720310, 265905162, 1554391400, 1532285339, 908999204, 174567692, 1474760595, 4002861748, 2610011675, 3234156416, 3693126241, 2001430874, 303699484, 2478443234, 2687165888, 585122620, 454499602, 151849742, 2345119218, 3064510765, 514443284, 4044981591, 1963412655, 2581445614, 2137062819, 19308535, 1928707164, 1715193156, 4219352155, 1126790795, 600235211, 3992742070, 3841024952, 836553431, 1669664834, 2535604243, 3323011204, 1243905413, 3141400786, 4180808110, 698445255, 2653899549, 2989552604, 2253581325, 3252932727, 3004591147, 1891211689, 2487810577, 3915653703, 4237083816, 4030667424, 2100090966, 865136418, 1229899655, 953270745, 3399679628, 3557504664, 4118925222, 2061379749, 3079546586, 2915017791, 983426092, 2022837584, 1607244650, 2118541908, 2366882550, 3635996816, 972512814, 3283088770, 1568718495, 3499326569, 3576539503, 621982671, 2895723464, 410887952, 2623762152, 1002142683, 645401037, 1494807662, 2595684844, 1335535747, 2507040230, 4293295786, 3167684641, 367585007, 3885750714, 1865862730, 2668221674, 2960971305, 2763173681, 1059270954, 2777952454, 2724642869, 1320957812, 2194319100, 2429595872, 2815956275, 77089521, 3973773121, 3444575871, 2448830231, 1305906550, 4021308739, 2857194700, 2516901860, 3518358430, 1787304780, 740276417, 1699839814, 1592394909, 2352307457, 2272556026, 188821243, 1729977011, 3687994002, 274084841, 3594982253, 3613494426, 2701949495, 4162096729, 322734571, 2837966542, 1640576439, 484830689, 1202797690, 3537852828, 4067639125, 349075736, 3342319475, 4157467219, 4255800159, 1030690015, 1155237496, 2951971274, 1757691577, 607398968, 2738905026, 499347990, 3794078908, 1011452712, 227885567, 2818666809, 213114376, 3034881240, 1455525988, 3414450555, 850817237, 1817998408, 3092726480], + gr = [0, 235474187, 470948374, 303765277, 941896748, 908933415, 607530554, 708780849, 1883793496, 2118214995, 1817866830, 1649639237, 1215061108, 1181045119, 1417561698, 1517767529, 3767586992, 4003061179, 4236429990, 4069246893, 3635733660, 3602770327, 3299278474, 3400528769, 2430122216, 2664543715, 2362090238, 2193862645, 2835123396, 2801107407, 3035535058, 3135740889, 3678124923, 3576870512, 3341394285, 3374361702, 3810496343, 3977675356, 4279080257, 4043610186, 2876494627, 2776292904, 3076639029, 3110650942, 2472011535, 2640243204, 2403728665, 2169303058, 1001089995, 899835584, 666464733, 699432150, 59727847, 226906860, 530400753, 294930682, 1273168787, 1172967064, 1475418501, 1509430414, 1942435775, 2110667444, 1876241833, 1641816226, 2910219766, 2743034109, 2976151520, 3211623147, 2505202138, 2606453969, 2302690252, 2269728455, 3711829422, 3543599269, 3240894392, 3475313331, 3843699074, 3943906441, 4178062228, 4144047775, 1306967366, 1139781709, 1374988112, 1610459739, 1975683434, 2076935265, 1775276924, 1742315127, 1034867998, 866637845, 566021896, 800440835, 92987698, 193195065, 429456164, 395441711, 1984812685, 2017778566, 1784663195, 1683407248, 1315562145, 1080094634, 1383856311, 1551037884, 101039829, 135050206, 437757123, 337553864, 1042385657, 807962610, 573804783, 742039012, 2531067453, 2564033334, 2328828971, 2227573024, 2935566865, 2700099354, 3001755655, 3168937228, 3868552805, 3902563182, 4203181171, 4102977912, 3736164937, 3501741890, 3265478751, 3433712980, 1106041591, 1340463100, 1576976609, 1408749034, 2043211483, 2009195472, 1708848333, 1809054150, 832877231, 1068351396, 766945465, 599762354, 159417987, 126454664, 361929877, 463180190, 2709260871, 2943682380, 3178106961, 3009879386, 2572697195, 2538681184, 2236228733, 2336434550, 3509871135, 3745345300, 3441850377, 3274667266, 3910161971, 3877198648, 4110568485, 4211818798, 2597806476, 2497604743, 2261089178, 2295101073, 2733856160, 2902087851, 3202437046, 2968011453, 3936291284, 3835036895, 4136440770, 4169408201, 3535486456, 3702665459, 3467192302, 3231722213, 2051518780, 1951317047, 1716890410, 1750902305, 1113818384, 1282050075, 1584504582, 1350078989, 168810852, 67556463, 371049330, 404016761, 841739592, 1008918595, 775550814, 540080725, 3969562369, 3801332234, 4035489047, 4269907996, 3569255213, 3669462566, 3366754619, 3332740144, 2631065433, 2463879762, 2160117071, 2395588676, 2767645557, 2868897406, 3102011747, 3069049960, 202008497, 33778362, 270040487, 504459436, 875451293, 975658646, 675039627, 641025152, 2084704233, 1917518562, 1615861247, 1851332852, 1147550661, 1248802510, 1484005843, 1451044056, 933301370, 967311729, 733156972, 632953703, 260388950, 25965917, 328671808, 496906059, 1206477858, 1239443753, 1543208500, 1441952575, 2144161806, 1908694277, 1675577880, 1842759443, 3610369226, 3644379585, 3408119516, 3307916247, 4011190502, 3776767469, 4077384432, 4245618683, 2809771154, 2842737049, 3144396420, 3043140495, 2673705150, 2438237621, 2203032232, 2370213795], + wr = [0, 185469197, 370938394, 487725847, 741876788, 657861945, 975451694, 824852259, 1483753576, 1400783205, 1315723890, 1164071807, 1950903388, 2135319889, 1649704518, 1767536459, 2967507152, 3152976349, 2801566410, 2918353863, 2631447780, 2547432937, 2328143614, 2177544179, 3901806776, 3818836405, 4270639778, 4118987695, 3299409036, 3483825537, 3535072918, 3652904859, 2077965243, 1893020342, 1841768865, 1724457132, 1474502543, 1559041666, 1107234197, 1257309336, 598438867, 681933534, 901210569, 1052338372, 261314535, 77422314, 428819965, 310463728, 3409685355, 3224740454, 3710368113, 3593056380, 3875770207, 3960309330, 4045380933, 4195456072, 2471224067, 2554718734, 2237133081, 2388260884, 3212035895, 3028143674, 2842678573, 2724322336, 4138563181, 4255350624, 3769721975, 3955191162, 3667219033, 3516619604, 3431546947, 3347532110, 2933734917, 2782082824, 3099667487, 3016697106, 2196052529, 2313884476, 2499348523, 2683765030, 1179510461, 1296297904, 1347548327, 1533017514, 1786102409, 1635502980, 2087309459, 2003294622, 507358933, 355706840, 136428751, 53458370, 839224033, 957055980, 605657339, 790073846, 2373340630, 2256028891, 2607439820, 2422494913, 2706270690, 2856345839, 3075636216, 3160175349, 3573941694, 3725069491, 3273267108, 3356761769, 4181598602, 4063242375, 4011996048, 3828103837, 1033297158, 915985419, 730517276, 545572369, 296679730, 446754879, 129166120, 213705253, 1709610350, 1860738147, 1945798516, 2029293177, 1239331162, 1120974935, 1606591296, 1422699085, 4148292826, 4233094615, 3781033664, 3931371469, 3682191598, 3497509347, 3446004468, 3328955385, 2939266226, 2755636671, 3106780840, 2988687269, 2198438022, 2282195339, 2501218972, 2652609425, 1201765386, 1286567175, 1371368976, 1521706781, 1805211710, 1620529459, 2105887268, 1988838185, 533804130, 350174575, 164439672, 46346101, 870912086, 954669403, 636813900, 788204353, 2358957921, 2274680428, 2592523643, 2441661558, 2695033685, 2880240216, 3065962831, 3182487618, 3572145929, 3756299780, 3270937875, 3388507166, 4174560061, 4091327024, 4006521127, 3854606378, 1014646705, 930369212, 711349675, 560487590, 272786309, 457992840, 106852767, 223377554, 1678381017, 1862534868, 1914052035, 2031621326, 1211247597, 1128014560, 1580087799, 1428173050, 32283319, 182621114, 401639597, 486441376, 768917123, 651868046, 1003007129, 818324884, 1503449823, 1385356242, 1333838021, 1150208456, 1973745387, 2125135846, 1673061617, 1756818940, 2970356327, 3120694122, 2802849917, 2887651696, 2637442643, 2520393566, 2334669897, 2149987652, 3917234703, 3799141122, 4284502037, 4100872472, 3309594171, 3460984630, 3545789473, 3629546796, 2050466060, 1899603969, 1814803222, 1730525723, 1443857720, 1560382517, 1075025698, 1260232239, 575138148, 692707433, 878443390, 1062597235, 243256656, 91341917, 409198410, 325965383, 3403100636, 3252238545, 3704300486, 3620022987, 3874428392, 3990953189, 4042459122, 4227665663, 2460449204, 2578018489, 2226875310, 2411029155, 3198115200, 3046200461, 2827177882, 2743944855], + _r = [0, 218828297, 437656594, 387781147, 875313188, 958871085, 775562294, 590424639, 1750626376, 1699970625, 1917742170, 2135253587, 1551124588, 1367295589, 1180849278, 1265195639, 3501252752, 3720081049, 3399941250, 3350065803, 3835484340, 3919042237, 4270507174, 4085369519, 3102249176, 3051593425, 2734591178, 2952102595, 2361698556, 2177869557, 2530391278, 2614737639, 3145456443, 3060847922, 2708326185, 2892417312, 2404901663, 2187128086, 2504130317, 2555048196, 3542330227, 3727205754, 3375740769, 3292445032, 3876557655, 3926170974, 4246310725, 4027744588, 1808481195, 1723872674, 1910319033, 2094410160, 1608975247, 1391201670, 1173430173, 1224348052, 59984867, 244860394, 428169201, 344873464, 935293895, 984907214, 766078933, 547512796, 1844882806, 1627235199, 2011214180, 2062270317, 1507497298, 1423022939, 1137477952, 1321699145, 95345982, 145085239, 532201772, 313773861, 830661914, 1015671571, 731183368, 648017665, 3175501286, 2957853679, 2807058932, 2858115069, 2305455554, 2220981195, 2474404304, 2658625497, 3575528878, 3625268135, 3473416636, 3254988725, 3778151818, 3963161475, 4213447064, 4130281361, 3599595085, 3683022916, 3432737375, 3247465558, 3802222185, 4020912224, 4172763771, 4122762354, 3201631749, 3017672716, 2764249623, 2848461854, 2331590177, 2280796200, 2431590963, 2648976442, 104699613, 188127444, 472615631, 287343814, 840019705, 1058709744, 671593195, 621591778, 1852171925, 1668212892, 1953757831, 2037970062, 1514790577, 1463996600, 1080017571, 1297403050, 3673637356, 3623636965, 3235995134, 3454686199, 4007360968, 3822090177, 4107101658, 4190530515, 2997825956, 3215212461, 2830708150, 2779915199, 2256734592, 2340947849, 2627016082, 2443058075, 172466556, 122466165, 273792366, 492483431, 1047239e3, 861968209, 612205898, 695634755, 1646252340, 1863638845, 2013908262, 1963115311, 1446242576, 1530455833, 1277555970, 1093597963, 1636604631, 1820824798, 2073724613, 1989249228, 1436590835, 1487645946, 1337376481, 1119727848, 164948639, 81781910, 331544205, 516552836, 1039717051, 821288114, 669961897, 719700128, 2973530695, 3157750862, 2871682645, 2787207260, 2232435299, 2283490410, 2667994737, 2450346104, 3647212047, 3564045318, 3279033885, 3464042516, 3980931627, 3762502690, 4150144569, 4199882800, 3070356634, 3121275539, 2904027272, 2686254721, 2200818878, 2384911031, 2570832044, 2486224549, 3747192018, 3528626907, 3310321856, 3359936201, 3950355702, 3867060991, 4049844452, 4234721005, 1739656202, 1790575107, 2108100632, 1890328081, 1402811438, 1586903591, 1233856572, 1149249077, 266959938, 48394827, 369057872, 418672217, 1002783846, 919489135, 567498868, 752375421, 209336225, 24197544, 376187827, 459744698, 945164165, 895287692, 574624663, 793451934, 1679968233, 1764313568, 2117360635, 1933530610, 1343127501, 1560637892, 1243112415, 1192455638, 3704280881, 3519142200, 3336358691, 3419915562, 3907448597, 3857572124, 4075877127, 4294704398, 3029510009, 3113855344, 2927934315, 2744104290, 2159976285, 2377486676, 2594734927, 2544078150], + yr = [0, 151849742, 303699484, 454499602, 607398968, 758720310, 908999204, 1059270954, 1214797936, 1097159550, 1517440620, 1400849762, 1817998408, 1699839814, 2118541908, 2001430874, 2429595872, 2581445614, 2194319100, 2345119218, 3034881240, 3186202582, 2801699524, 2951971274, 3635996816, 3518358430, 3399679628, 3283088770, 4237083816, 4118925222, 4002861748, 3885750714, 1002142683, 850817237, 698445255, 548169417, 529487843, 377642221, 227885567, 77089521, 1943217067, 2061379749, 1640576439, 1757691577, 1474760595, 1592394909, 1174215055, 1290801793, 2875968315, 2724642869, 3111247143, 2960971305, 2405426947, 2253581325, 2638606623, 2487810577, 3808662347, 3926825029, 4044981591, 4162096729, 3342319475, 3459953789, 3576539503, 3693126241, 1986918061, 2137062819, 1685577905, 1836772287, 1381620373, 1532285339, 1078185097, 1229899655, 1040559837, 923313619, 740276417, 621982671, 439452389, 322734571, 137073913, 19308535, 3871163981, 4021308739, 4104605777, 4255800159, 3263785589, 3414450555, 3499326569, 3651041127, 2933202493, 2815956275, 3167684641, 3049390895, 2330014213, 2213296395, 2566595609, 2448830231, 1305906550, 1155237496, 1607244650, 1455525988, 1776460110, 1626319424, 2079897426, 1928707164, 96392454, 213114376, 396673818, 514443284, 562755902, 679998e3, 865136418, 983426092, 3708173718, 3557504664, 3474729866, 3323011204, 4180808110, 4030667424, 3945269170, 3794078908, 2507040230, 2623762152, 2272556026, 2390325492, 2975484382, 3092726480, 2738905026, 2857194700, 3973773121, 3856137295, 4274053469, 4157467219, 3371096953, 3252932727, 3673476453, 3556361835, 2763173681, 2915017791, 3064510765, 3215307299, 2156299017, 2307622919, 2459735317, 2610011675, 2081048481, 1963412655, 1846563261, 1729977011, 1480485785, 1362321559, 1243905413, 1126790795, 878845905, 1030690015, 645401037, 796197571, 274084841, 425408743, 38544885, 188821243, 3613494426, 3731654548, 3313212038, 3430322568, 4082475170, 4200115116, 3780097726, 3896688048, 2668221674, 2516901860, 2366882550, 2216610296, 3141400786, 2989552604, 2837966542, 2687165888, 1202797690, 1320957812, 1437280870, 1554391400, 1669664834, 1787304780, 1906247262, 2022837584, 265905162, 114585348, 499347990, 349075736, 736970802, 585122620, 972512814, 821712160, 2595684844, 2478443234, 2293045232, 2174754046, 3196267988, 3079546586, 2895723464, 2777952454, 3537852828, 3687994002, 3234156416, 3385345166, 4142626212, 4293295786, 3841024952, 3992742070, 174567692, 57326082, 410887952, 292596766, 777231668, 660510266, 1011452712, 893681702, 1108339068, 1258480242, 1343618912, 1494807662, 1715193156, 1865862730, 1948373848, 2100090966, 2701949495, 2818666809, 3004591147, 3122358053, 2235061775, 2352307457, 2535604243, 2653899549, 3915653703, 3764988233, 4219352155, 4067639125, 3444575871, 3294430577, 3746175075, 3594982253, 836553431, 953270745, 600235211, 718002117, 367585007, 484830689, 133361907, 251657213, 2041877159, 1891211689, 1806599355, 1654886325, 1568718495, 1418573201, 1335535747, 1184342925], + xr = function(r, t) { + var e = { + tWyby: function(r, t) { + return r < t + }, + Eqyfx: function(r, t) { + return r < t + }, + LhXNK: function(r, t) { + return r << t + }, + zmHqt: function(r, t) { + return r & t + }, + yUdym: function(r, t) { + return r << t + }, + TTJHX: function(r, t) { + return r != t + }, + TbrpH: function(r, t) { + return r - t + }, + sRwZP: function(r, t) { + return r / t + }, + DAjmi: function(r, t) { + return r - t + }, + whYFj: function(r, t) { + return r ^ t + }, + Tabbo: function(r, t) { + return r & t + }, + OYKHB: function(r, t) { + return r - t + }, + AlhcG: function(r, t) { + return r % t + }, + maSeC: function(r, t) { + return r >> t + }, + Qvhso: function(r, t) { + return r + t + }, + JOcxB: function(r, t) { + return r >> t + }, + NZLTE: function(r, t) { + return r & t + }, + NTCcB: function(r, t) { + return r + t + } + }; + r = function(r) { + for (var t = 0, n = r["length"]; t < n; ++t) { + var i = r[t]; + if (e.tWyby(i, 0) || i >= 256) + throw new Error("ivi(" + i + ")") + } + return r.slice(0) + }(r); + var n = cr[r.length]; + if (null == n) + throw new Error; + var i = [], + o = []; + return function(r) { + for (var t = 0; t <= n; t++) + i.push([0, 0, 0, 0]), + o["push"]([0, 0, 0, 0]); + var s, a = 4 * (n + 1), + c = r.length / 4, + u = V(r); + for (t = 0; t < c; t++) + i[s = t >> 2][t % 4] = u[t], + o[n - s][t % 4] = u[t]; + for (var h, l = 0, d = c; e.Eqyfx(d, a);) { + if (h = u[c - 1], + u[0] ^= e.LhXNK(hr[e.zmHqt(h >> 16, 255)], 24) ^ hr[h >> 8 & 255] << 16 ^ e.yUdym(hr[255 & h], 8) ^ hr[h >> 24 & 255] ^ ur[l] << 24, + l += 1, + e.TTJHX(8, c)) + for (t = 1; e.Eqyfx(t, c); t++) + u[t] ^= u[e.TbrpH(t, 1)]; + else { + for (t = 1; t < e.sRwZP(c, 2); t++) + u[t] ^= u[t - 1]; + for (h = u[e.DAjmi(e.sRwZP(c, 2), 1)], + u[c / 2] ^= e.whYFj(hr[255 & h] ^ hr[h >> 8 & 255] << 8 ^ e.yUdym(hr[h >> 16 & 255], 16), hr[e.Tabbo(h >> 24, 255)] << 24), + t = c / 2 + 1; t < c; t++) + u[t] ^= u[e.OYKHB(t, 1)] + } + for (t = 0; t < c && d < a;) + v = e["AlhcG"](d, 4), + i[p = d >> 2][v] = u[t], + o[n - p][v] = u[t++], + d++ + } + for (var p = 1; p < n; p++) + for (var v = 0; v < 4; v++) + h = o[p][v], + o[p][v] = e.whYFj(gr[h >> 24 & 255], wr[255 & e.maSeC(h, 16)]) ^ _r[255 & e.maSeC(h, 8)] ^ yr[255 & h] + }(r), + function(r) { + var t = function(r, t) { + return r < t + }; + if (16 != r["length"]) + return new Error("b16"); + for (var n = o["length"] - 1, i = [0, 0, 0, 0], s = V(r), a = 0; a < 4; a++) + s[a] ^= o[0][a]; + for (var c = 1; c < n; c++) { + for (a = 0; a < 4; a++) + i[a] = lr[s[a] >> 24 & 255] ^ dr[s[e.Qvhso(a, 3) % 4] >> 16 & 255] ^ pr[255 & e.JOcxB(s[(a + 2) % 4], 8)] ^ vr[e["NZLTE"](255, s[(a + 1) % 4])] ^ o[c][a]; + s = i.slice(0) + } + var u, h = function() { + for (var r = [], e = 0; t(e, 16); ++e) + r.push(0); + return r + }(); + for (a = 0; a < 4; a++) + u = o[n][a], + h[4 * a] = 255 & e.whYFj(fr[s[a] >> 24 & 255], e.JOcxB(u, 24)), + h[4 * a + 1] = 255 & (fr[s[e.NTCcB(a, 3) % 4] >> 16 & 255] ^ u >> 16), + h[e.NTCcB(4 * a, 2)] = 255 & (fr[s[(a + 2) % 4] >> 8 & 255] ^ u >> 8), + h[4 * a + 3] = 255 & (fr[255 & s[(a + 1) % 4]] ^ u); + return h + }(t) + }; + +function br(r) { + for (var t = function(r, t) { + return r < t + }, e = function(r, t) { + return r / t + }, n = function(r, t) { + return r - t + }, i = function(r, t) { + return r >= t + }, o = function(r, t) { + return r * t + }, s = function(r, t) { + return r & t + }, a = {}, c = r["length"], u = r.charAt(0), h = 0; t(h, r.length); h++) + a[r["charAt"](h)] = h; + return { + e: function(o) { + if (0 === o["length"]) + return ""; + for (var s = [0], a = 0; t(a, o.length); ++a) { + for (var u = 0, h = o[a]; u < s.length; ++u) + h += s[u] << 8, + s[u] = h % c, + h = h / c | 0; + for (; h > 0;) + s.push(h % c), + h = 0 | e(h, c) + } + for (var l = "", d = 0; 0 === o[d] && t(d, n(o.length, 1)); ++d) + l += r[0]; + for (var p = s.length - 1; i(p, 0); --p) + l += r[s[p]]; + return l + }, + d: function(r) { + if (0 === r.length) + return []; + for (var t = [0], e = 0; e < r["length"]; e++) { + var n = a[r[e]]; + if (void 0 === n) + throw new Error("b" + c + "c"); + for (var i = 0, h = n; i < t.length; ++i) + h += o(t[i], c), + t[i] = s(255, h), + h >>= 8; + for (; h > 0;) + t.push(255 & h), + h >>= 8 + } + for (var l = 0; r[l] === u && l < r.length - 1; ++l) + t.push(0); + return t.reverse() + } + } +} + +function mr(r, t) { + var e = { + OtOMi: function(r, t) { + return r(t) + }, + pxVZU: function(r, t) { + return r < t + }, + kNqnB: function(r, t) { + return r + t + }, + FThVs: function(r, t) { + return r % t + } + }, + n = e["OtOMi"](q, 256), + i = 0; + for (i = 0; i < 256; i++) + n[i] = i; + var o = 0, + s = 0; + for (i = 0; e.pxVZU(i, 256); ++i) + o = e.kNqnB(o + n[i], r[e.FThVs(i, r.length)]) % 256, + s = n[i], + n[i] = n[o], + n[o] = s; + i = 0, + o = 0; + for (var a = [], c = 0; c < t.length; c++) + o = (o + n[i = (i + 1) % 256]) % 256, + s = n[i], + n[i] = n[o], + n[o] = s, + a[c] = t[c] ^ n[(n[i] + n[o]) % 256]; + return a +} +K["__ABM_LICENSE_PROXY__"]; +var kr = br("123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"), + Br = 256, + Or = [ + [200, 196, 157, 49, 219, 232, 69, 76, 83, 241, 90, 229, 150, 242, 92, 15, 84, 148, 229, 112, 54, 1, 119, 2, 169, 57, 211, 105, 136, 202, 103, 168], + [234, 169, 154, 104, 251, 227, 123, 14, 69, 153, 122, 248, 216, 214, 90, 81, 11, 135, 195, 113, 29, 23, 116, 2, 161, 38, 253, 115, 142, 200, 42, 189], + [200, 165, 201, 110, 242, 224, 40, 65, 59, 242, 81, 195, 162, 188, 101, 3, 79, 254, 234, 10, 16, 95, 72, 35, 164, 67, 164, 71, 240, 227, 121, 199], + [245, 130, 172, 48, 216, 131, 115, 127, 66, 236, 28, 185, 136, 252, 90, 79, 119, 243, 179, 12, 72, 39, 98, 61, 137, 71, 249, 115, 214, 177, 21, 172], + [89, 223, 151, 248, 170, 122, 131, 80, 144, 118, 56, 163, 241, 252, 134, 140, 142, 29, 185, 213, 230, 84, 127, 54, 179, 36, 10, 155, 207, 175, 138, 50], + [14, 100, 3, 93, 159, 22, 163, 57, 95, 210, 206, 203, 142, 255, 17, 137, 104] + ], + Sr = [44, 128, 188, 10, 35, 20]; + +function Ar(r) { + return Z(mr(Sr, Or[r])) +} + +function Pr(r) { + return mr(Sr, Or[r]) +} + +function Cr(r, t) { + return r + t +} + +function Er(r, t, e) { + var n, i, o, s, a, c, u, h, l, d, p, v, g = { + RPJda: function(r, t, e) { + return r(t, e) + }, + pNEvf: function(r, t, e, n) { + return r(t, e, n) + }, + BQVuz: function(r, t) { + return r(t) + }, + OZmeD: function(r, t) { + return r(t) + } + }, + w = e["charAt"](e.length - 1), + _ = e.substring(0, e.length - 1); + return q("5" === w ? (n = r, + i = t, + o = _, + s = function(r, t) { + return r(t) + }, + a = function(r, t, e) { + return r(t, e) + }, + c = Ar(4), + u = X(Br, c, n + i), + h = X(Br, u, i), + l = X(Br, u, n), + d = mr(s(Pr, 5), $(h)), + p = a(mr, Pr(5), s($, l)), + v = kr.d(o), + v = mr(p, v), + ir.d(v, d)) : "4" === w ? function(r, t, e) { + var n = X(Br, Ar(3), g.RPJda(Cr, Ar(2), r)), + i = X(Br, n, Cr(t, r)), + o = g.pNEvf(X, Br, n, Cr(Ar(2), t)), + s = kr.d(e), + a = xr($(o), s); + return ir.d(a, $(i)) + }(r, t, _) : function(r, t, e) { + var n = X(Br, Ar(1), Cr(r, g["BQVuz"](Ar, 0))), + i = X(Br, n, g.RPJda(Cr, r, t)), + o = X(Br, n, Cr(t, Ar(0))), + s = kr.d(e), + a = ir.d(s, g.BQVuz($, i)); + return xr(g["OZmeD"]($, o), a) + }(r, t, _)) +} +Z([97, 98, 109, 95, 109, 101, 100, 105, 97, 84, 111, 107, 101, 110]); +var Rr = Z([97, 98, 109, 95, 117, 115, 101, 114, 73, 100]), + Hr = Z([108, 111, 99, 97, 108, 83, 116, 111, 114, 97, 103, 101]), + Dr = Z([103, 101, 116, 73, 116, 101, 109]), + zr = K[Hr]; +var Ir = Z([97, 112, 112, 108, 121]), + Mr = Z([102, 114, 111, 109, 67, 104, 97, 114, 67, 111, 100, 101]), + Fr = Z([83, 116, 114, 105, 110, 103]), + Tr = Z([98, 117, 102, 102, 101, 114]), + Lr = Z([108, 101, 110, 103, 116, 104]), + Ur = Z([99, 104, 97, 114, 67, 111, 100, 101, 65, 116]), + Wr = Z([74, 83, 79, 78]), + jr = Z([112, 97, 114, 115, 101]), + Nr = Z([115, 116, 114, 105, 110, 103, 105, 102, 121]), + Xr = br("123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"), + Kr = Z([115, 108, 105, 99, 101]), + Vr = Z([116, 111, 83, 116, 114, 105, 110, 103]), + Zr = Z([105, 110, 100, 101, 120, 79, 102]), + Gr = Z([46]), + Yr = Z([107, 101, 121, 115]), + qr = Z([107, 105, 100]), + Jr = Z([107]), + Qr = Z([65, 69, 83]), + $r = Z([108, 105, 98]), + rt = Z([87, 111, 114, 100, 65, 114, 114, 97, 121]), + tt = Z([99, 114, 101, 97, 116, 101]), + et = Z([109, 111, 100, 101]), + nt = Z([105, 118]), + it = Z([112, 97, 100, 100, 105, 110, 103]), + ot = Z([101, 110, 99]), + st = Z([67, 66, 67]), + at = Z([72, 101, 120]), + ct = Z([112, 97, 100]), + ut = Z([80, 107, 99, 115, 55]), + ht = Z([99, 105, 112, 104, 101, 114, 116, 101, 120, 116]), + ft = Z([85, 116, 102, 56]), + lt = Z([100, 101, 99, 114, 121, 112, 116]); + +function dt(r, t, e) { + var n, i, o, s, a, c, u = function(r, t) { + return r(t) + }, + h = function(r, t) { + return r + t + }, + f = (n = (c = t, + K[Fr][Mr][Ir](null, q(c))), + K[Wr][jr](n)), + l = f[Yr][0], + d = l[qr], + p = l[Jr], + v = p[Kr](0, p[Zr](Gr)), + g = p[Kr](p[Zr](Gr) + 1), + w = g[Kr](0, g[Zr](Gr)), + _ = g[Kr](h(g[Zr](Gr), 1)), + y = (a = v, + u(q, Xr.d(a))), + x = (o = r, + s = Er(d, e, w), + o[$r][rt][tt](s)); + return l.k = function(r, t, e, n) { + var i = {}; + i[ht] = r[$r][rt][tt](t); + var o, s, a, c, u, h = {}; + return h[et] = r[et][st], + h[nt] = (u = n, + r[ot][at][jr](u)), + h[it] = r[ct][ut], + (o = r, + s = i, + a = e, + c = h, + o[Qr][lt](s, a, c))[Vr](r[ot][ft]) + }(r, y, x, _), + function(r) { + for (var t = r[Lr], e = q(t), n = 0; n < t; ++n) + e[n] = r[Ur](n); + return e[Tr] + }((i = f, + K[Wr][Nr](i))) +} + +function pt(r) { + var t, e = (t = Rr, + zr[Dr](t)); + return function(t) { + return dt(r, t, e) + } +} + +function jsonToBuffer(jsonObject) { + var stringJson = JSON.stringify(jsonObject); + return (new TextEncoder).encode(stringJson).buffer; +}; + +function bufferToJson(buffer) { + var array = new Uint8Array(buffer); + return JSON.parse((new TextDecoder).decode(array)); +}; + +console.log(bufferToJson(dt(cryptoJs, jsonToBuffer(JSON.parse(process.argv[2])), process.argv[3]))); diff --git a/AbemaTV/javascript/abemaHmac.js b/AbemaTV/javascript/abemaHmac.js new file mode 100644 index 0000000..cf1c231 --- /dev/null +++ b/AbemaTV/javascript/abemaHmac.js @@ -0,0 +1,67 @@ +const crypto = require('crypto').webcrypto; + +function ne(e) { + return btoa(String.fromCharCode.apply(null, Array.from(e))).split("=").join("").split("+").join("-").split("/").join("_") +} +async function re(e, t) { + const n = await crypto.subtle.sign("HMAC", e, t); + return new Uint8Array(n) +} +async function ie(e, t, n) { + let r = t; + for (let t = 0; t < n + 1; t += 1) + r = await re(e, r); + return r +} +async function oe(e, t, n) { + const r = await async function(e) { + const t = (new TextEncoder).encode(e); + return crypto.subtle.importKey("raw", t, { + name: "HMAC", + hash: { + name: "SHA-256" + } + }, !1, ["sign"]) + }(e), i = new TextEncoder, o = await ie(r, i.encode(e), n.getUTCMonth() + 1).then((e => ie(r, i.encode(ne(e) + t), n.getUTCDate() % 5))).then((e => ie(r, i.encode(ne(e) + String((0, + z)(n.getTime()))), n.getUTCHours() % 5))); + return ne(o) +} + +function ae(e, t) { + return oe("v+Gjs=25Aw5erR!J8ZuvRrCx*rGswhB&qdHd_SYerEWdU&a?3DzN9BRbp5KwY4hEmcj5#fykMjJ=AuWz5GSMY-d@H7DMEh3M@9n2G552Us$$k9cD=3TxwWe86!x#Zyhe", e, t) +} + +function K(e) { + return e ?? Date.now() +} + +function z(e) { + const t = K(e); + return Math.floor(t / 1e3) +} + +function genId() { + for (var e, n = "", r = 0; r < 32; r++) + e = 16 * Math.random() | 0, + r > 4 && r < 21 && !(r % 4) && (n += "-"), + n += (12 === r ? 4 : 16 === r ? 3 & e | 8 : e).toString(16); + return n +} + +function te() { + const e = new Date; + return e.setHours(e.getHours() + 1), + e.setMinutes(0), + e.setSeconds(0), + e +} + +async function genJson() { + var e = genId() + return { + deviceId: e, + applicationKeySecret: await ae(e, te()) + } +} + +genJson().then((result) => console.log(JSON.stringify(result)));