From 30e7becbf825c04de1c134755867e7302033bddc Mon Sep 17 00:00:00 2001 From: dexter <178529795@qq.com> Date: Sun, 5 Jun 2022 21:49:29 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B7=B3=E8=BF=87=E5=8F=8D=E5=A4=8D=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 +- demo/public/decoder.wasm | Bin 1051091 -> 1051042 bytes demo/public/jessibuca.js | 2 ++ demo/public/jessibuca.js.map | 2 +- dist/decoder.wasm | Bin 1051091 -> 1051042 bytes dist/jessibuca.js | 2 +- src/decoder/decoder.wasm | Bin 1051091 -> 1051042 bytes wasm/decoder.cpp | 56 ++++++++++++++--------------------- 8 files changed, 28 insertions(+), 36 deletions(-) diff --git a/.gitignore b/.gitignore index 2e9e6959..f77d0c93 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,4 @@ node_modules demo/.vitepress/dist yarn.lock package-lock.json - +.DS_Store diff --git a/demo/public/decoder.wasm b/demo/public/decoder.wasm index dd8e4a4bbe33e14f55172fe40dd614e373e21be8..3cf0b72bcc6aa7bc6e7f65ed63024097acf8f6a5 100755 GIT binary patch delta 1583 zcmYLJU2GIp6uv+6*Us#6TUuGM%H8P}W+}xkEwi;OI2UYcftZr$3yo-r(Xhk>5;Z1j zwulA|8VL8H7%*v&2OiX*8`GpUMiZhy6Jzv2#Aqvqga?hp7}3O_-<>V8$=Nygo;%<9 z&N<(mZ*+1>Cubk_+8x`qx#PMHcWvA8T;dVV>wCPbzUc0IaHO-)(>GGSZ!j598|%B; zZe;9xue6p*dS{q-K0ncSZRw;w5PnIU^l0bPcPkRJHIgVVW|1V46nRwUp4q61HTqI# zh5GuZLc3mFkjnyfVumZS_m>^1yILnthaQP=vw`3*Hd(z{-NtI?bmx&ZqKimRB}mLIFVfRODl!-U$v-RlO$qZ zsP~T*>!-%f(X2@}NK7*1wDiT5-7A{G1N4U#5ymx?{BEN9#gDC$h*-C+N@%ZsWYuW0 zKFwm2d?OEAr0+MOhKLd2q@JW=-Ex1+VqJkGn@O2j$aqa(U9}=B{-iN$1M=%4W{U~X0JJtZl1tTl-YLd-Nd^`O}+oZIcEemk%`%-#yJ4z`P-*IrjqJk`f|0D z(Z0oiftsk5`FRU(fawB5VRlMBL(C&$1EDjN`ZQv>kbxtWj`&D~EM_^0wHnRa0jT2a zn)ECvJ7%ut1@Wy&BM*cGC_IrBBb<;8Wzy2Eyn``$RS3*f>WDd^$U_<8ORkPUHXfdr zKY(Mw`QyrD%Qp9p4&IQVg=XO_T`ny#*Xk?cqp|w${?F(e_1X11yO#C>(KRwPj*~h% z8XI(sdc}Y~`RG`4uNiV9LU;XB8)(RFtHJw1wpRjKCPhHUHtX*gbiutc3clkFk;g~zfr4zVbv zj()<0m**y+=peFAoykgbU3}>^>gUo?Z=HpZ&_C&lwZesKE;EQ(5vzn;1xChPxx?UK zsorX6q++L6<1TYCU<<7Q_Ystf!5wMzJ$zqog)v%mADJQY-`)j~@Kr6(jHb_y|4e&X?W=<&KYK1(~yB*3jP67QB{r_RCo-G}CPQy7DBm<6+84$Osl zuqIeD%%7g$9UOZzxcp)8eG5?&oEY1xJi#V~t!3)?^2(z08Z1$Qc>)(}$?c`3G5LSkG(A}>aL z*+osj5EUJgYQTi334K6Q*=Q3`qNWKpjlTGxHbxLb;sa`9jP=2a-`s`3X3w4P%sF%B zoH^gjySntPF3mmWwb`!C9oKcZYuk?J5|421)SmWk_+snBW9dxK*0J310}qz+s#u#! ztcLde*IWDh^+c3%{yaVS>pHEEM&D3RkEai}kDRPlt0K=mN$$X`B+4s`ZoQl?(nh^L zvu(mxr!R6vZhz;l5cLl9K#(+1;!s30M4kGKE2dWPU4W@cg~FCpiE@VAjV$iMBsLLd zli5s>HtQRiC+Rjl+A%xR@$Ix=Y0sUsk21;^mONV(@?y`CaHLlzTDZqeqe(?h-4JWu>gsXJhPzP)GM8v z^ro&Y+w*?Xm~UR>IR+p~P?BZrNc;w)=fqO0|C&YZ3aXZeB978HY9ykd-{{IVY?nmZ zl8K`JvTKx8FKNGf4B71KE+h-RgoJf(Cg7)DJZqzv9r|2%n(ov~-OtkFwUM5eT_{%u zhoV`BIu%K>EU=J;0r-m+hxo|jZ<=EX9Sl9x=18XaC|oQ6T1H*Ibo9ZYU-nV;mMcCK zkz(n$%`z{AN+dQ4FxZ$knm)6w zy~2G!j^w`=X44!yjx0t%BCv? zsy{=CFTglgLkC;rCS)J>pa%8Au)wvETtL7u- zSc|M=&fZ)AGr2;KC^3qIr;5fifTWjfG~_}$Nl?mC#d6B2vk}*)4%`e{sNSD#LJ+$(GStrdKt0k~}``S`saAAqCxx`05IG!F#s(I4j# zQ245Xr8r{K?#Mg{acs~8PXQRi5#1O|hj4~e4^O{G&(waLzC<^gHY3q`zr8!aj=@W{ z1IKCyD1<>c#Ddrm2jW6JNCTu1;?LI(1aH0?T)hx1w-8nJ{Bxho?_CM@{=fv8IlCBk j(ZtM^#V|ed(_$FRuPufLDNP)kS_&ae^HWRByLSE$bDc{c diff --git a/demo/public/jessibuca.js b/demo/public/jessibuca.js index d54942b8..37bb0561 100644 --- a/demo/public/jessibuca.js +++ b/demo/public/jessibuca.js @@ -1086,6 +1086,8 @@ pause() {} + clearView() {} + } class CanvasVideoLoader extends CommonLoader$1 { diff --git a/demo/public/jessibuca.js.map b/demo/public/jessibuca.js.map index 97ece1a5..2da0cbd2 100644 --- a/demo/public/jessibuca.js.map +++ b/demo/public/jessibuca.js.map @@ -1 +1 @@ -{"version":3,"file":"jessibuca.js","sources":["../../src/constant/index.js","../../src/utils/debug.js","../../src/utils/events.js","../../src/player/property.js","../../node_modules/.pnpm/screenfull@5.1.0/node_modules/screenfull/dist/screenfull.js","../../src/utils/index.js","../../src/player/events.js","../../src/utils/emitter.js","../../src/utils/webgl.js","../../src/video/commonLoader.js","../../src/video/canvasLoader.js","../../src/video/videoLoader.js","../../src/video/index.js","../../src/audio/audioContextLoader.js","../../src/audio/index.js","../../src/stream/fetchLoader.js","../../src/stream/websocketLoader.js","../../src/stream/index.js","../../node_modules/.pnpm/recordrtc@5.6.2/node_modules/recordrtc/RecordRTC.js","../../src/recorder/recordRTCLoader.js","../../src/recorder/index.js","../../src/worker/index.js","../../src/demux/commonLoader.js","../../src/demux/flvLoader.js","../../src/demux/m7sLoader.js","../../src/demux/index.js","../../src/decoder/webcodecs.js","../../src/control/icons.js","../../src/control/template.js","../../src/control/observer.js","../../src/control/property.js","../../src/control/events.js","../../node_modules/.pnpm/style-inject@0.3.0/node_modules/style-inject/dist/style-inject.es.js","../../src/control/hotkey.js","../../src/control/index.js","../../src/player/observer.js","../../src/remux/fmp4-generator.js","../../src/utils/exp-golomb.js","../../src/utils/h264-sps-parser.js","../../src/utils/h264.js","../../src/utils/h265-sps-parser.js","../../src/utils/h265.js","../../src/decoder/mediaSource.js","../../src/utils/noSleep.js","../../src/player/index.js","../../src/jessibuca.js"],"sourcesContent":["// 播放协议\nexport const PLAYER_PLAY_PROTOCOL = {\n websocket: 0,\n fetch: 1,\n webrtc: 2,\n}\n\nexport const DEMUX_TYPE = {\n flv: 'flv',\n m7s: 'm7s'\n}\n\n\n// default player options\nexport const DEFAULT_PLAYER_OPTIONS = {\n videoBuffer: 1000, //1000ms == 1 second\n isResize: true,\n isFullResize: false, //\n isFlv: false,\n debug: false,\n hotKey: false, // 快捷键\n loadingTimeout: 10, // loading timeout\n heartTimeout: 5, // heart timeout\n timeout: 10, // second\n loadingTimeoutReplay: false, // loading timeout replay\n heartTimeoutReplay: false,// heart timeout replay。\n loadingTimeoutReplayTimes: 3, // loading timeout replay fail times\n heartTimeoutReplayTimes: 3, // heart timeout replay fail times\n supportDblclickFullscreen: false,\n showBandwidth: false, //\n keepScreenOn: false,\n isNotMute: false,\n hasAudio: true,\n hasVideo: true,\n operateBtns: {\n fullscreen: false,\n screenshot: false,\n play: false,\n audio: false,\n record: false,\n },\n controlAutoHide: false,\n hasControl: false,\n loadingText: '',\n background: '',\n decoder: 'decoder.js',\n url: '',//\n rotate: 0,\n // text: '',\n forceNoOffscreen: true, // 默认是不采用\n hiddenAutoPause: false,\n protocol: PLAYER_PLAY_PROTOCOL.fetch,\n demuxType: DEMUX_TYPE.flv, //\n useWCS: false, //\n wcsUseVideoRender: false,\n useMSE: false, //\n useOffscreen: false, //\n autoWasm: true, // 自动降级到 wasm 模式\n wasmDecodeErrorReplay: true, // 解码失败重新播放。\n openWebglAlignment: false,// https://github.com/langhuihui/jessibuca/issues/152\n}\n\n\nexport const WORKER_CMD_TYPE = {\n init: 'init',\n initVideo: 'initVideo',\n render: 'render',\n playAudio: 'playAudio',\n initAudio: 'initAudio',\n kBps: 'kBps',\n decode: 'decode',\n audioCode: 'audioCode',\n videoCode: 'videoCode',\n wasmError: 'wasmError'\n}\n\nexport const WASM_ERROR = {\n invalidNalUnitSize: 'Invalid NAL unit size',\n // errorSplittingTheInputIntoNALUnits: 'Error splitting the input into NAL units'\n}\n\nexport const MEDIA_TYPE = {\n audio: 1,\n video: 2\n}\n\nexport const FLV_MEDIA_TYPE = {\n audio: 8,\n video: 9\n}\n\nexport const WORKER_SEND_TYPE = {\n init: 'init',\n decode: 'decode',\n audioDecode: 'audioDecode',\n videoDecode: 'videoDecode',\n close: 'close',\n updateConfig: 'updateConfig'\n}\n\n\n//\nexport const EVENTS = {\n fullscreen: 'fullscreen$2',\n webFullscreen: 'webFullscreen',\n decoderWorkerInit: 'decoderWorkerInit',\n play: 'play',\n playing: 'playing',\n pause: 'pause',\n mute: 'mute',\n load: 'load',\n loading: 'loading',\n videoInfo: 'videoInfo',\n timeUpdate: 'timeUpdate',\n audioInfo: \"audioInfo\",\n log: 'log',\n error: \"error\",\n kBps: 'kBps',\n timeout: 'timeout',\n delayTimeout: 'delayTimeout',\n loadingTimeout: 'loadingTimeout',\n stats: 'stats',\n performance: \"performance\",\n record: 'record',\n recording: 'recording',\n recordingTimestamp: 'recordingTimestamp',\n recordStart: 'recordStart',\n recordEnd: 'recordEnd',\n recordCreateError: 'recordCreateError',\n buffer: 'buffer',\n videoFrame: 'videoFrame',\n start: 'start',\n metadata: 'metadata',\n resize: 'resize',\n streamEnd: 'streamEnd',\n streamSuccess: 'streamSuccess',\n streamMessage: 'streamMessage',\n streamError: 'streamError',\n volumechange: 'volumechange',\n destroy: 'destroy',\n mseSourceOpen: 'mseSourceOpen',\n mseSourceClose: 'mseSourceClose',\n mseSourceBufferError: 'mseSourceBufferError',\n mseSourceBufferBusy: 'mseSourceBufferBusy',\n videoWaiting: 'videoWaiting',\n videoTimeUpdate: 'videoTimeUpdate',\n videoSyncAudio: 'videoSyncAudio',\n playToRenderTimes: 'playToRenderTimes'\n}\n\n\nexport const JESSIBUCA_EVENTS = {\n load: EVENTS.load,\n timeUpdate: EVENTS.timeUpdate,\n videoInfo: EVENTS.videoInfo,\n audioInfo: EVENTS.audioInfo,\n error: EVENTS.error,\n kBps: EVENTS.kBps,\n log: EVENTS.log,\n start: EVENTS.start,\n timeout: EVENTS.timeout,\n loadingTimeout: EVENTS.loadingTimeout,\n delayTimeout: EVENTS.delayTimeout,\n fullscreen: 'fullscreen',\n play: EVENTS.play,\n pause: EVENTS.pause,\n mute: EVENTS.mute,\n stats: EVENTS.stats,\n performance: EVENTS.performance,\n recordingTimestamp: EVENTS.recordingTimestamp,\n recordStart: EVENTS.recordStart,\n recordEnd: EVENTS.recordEnd,\n playToRenderTimes: EVENTS.playToRenderTimes\n}\n\nexport const EVENTS_ERROR = {\n playError: 'playIsNotPauseOrUrlIsNull',\n fetchError: \"fetchError\",\n websocketError: 'websocketError',\n webcodecsH265NotSupport: 'webcodecsH265NotSupport',\n mediaSourceH265NotSupport: 'mediaSourceH265NotSupport',\n wasmDecodeError: 'wasmDecodeError'\n}\n\n\nexport const WEBSOCKET_STATUS = {\n notConnect: 'notConnect',\n open: 'open',\n close: 'close',\n error: 'error'\n}\n\nexport const BUFFER_STATUS = {\n empty: 'empty',\n buffering: 'buffering',\n full: 'full'\n}\n\n\nexport const SCREENSHOT_TYPE = {\n download: 'download',\n base64: 'base64',\n blob: 'blob'\n}\n\n\nexport const VIDEO_ENC_TYPE = {\n 7: 'H264(AVC)', //\n 12: 'H265(HEVC)' //\n}\n\nexport const VIDEO_ENC_CODE = {\n h264: 7,\n h265: 12\n}\n\n\nexport const AUDIO_ENC_TYPE = {\n 10: 'AAC',\n 7: 'ALAW',\n 8: 'MULAW'\n}\n\nexport const H265_NAL_TYPE = {\n vps: 32,\n sps: 33,\n pps: 34\n}\n\nexport const CONTROL_HEIGHT = 38\n\nexport const SCALE_MODE_TYPE = {\n full: 0, // 视频画面完全填充canvas区域,画面会被拉伸\n auto: 1, // 视频画面做等比缩放后,高或宽对齐canvas区域,画面不被拉伸,但有黑边\n fullAuto: 2 // 视频画面做等比缩放后,完全填充canvas区域,画面不被拉伸,没有黑边,但画面显示不全\n}\n\n\nexport const FILE_SUFFIX = {\n mp4: 'mp4',\n webm: 'webm'\n};\n\n\nexport const CANVAS_RENDER_TYPE = {\n webcodecs: 'webcodecs',\n webgl: 'webgl',\n offscreen: 'offscreen'\n}\n\nexport const ENCODED_VIDEO_TYPE = {\n key: 'key',\n delta: 'delta'\n}\n\n\nexport const MP4_CODECS = {\n avc: 'video/mp4; codecs=\"avc1.64002A\"',\n hev: 'video/mp4; codecs=\"hev1.1.6.L123.b0\"',\n}\n\n\nexport const MEDIA_SOURCE_STATE = {\n ended: 'ended',\n open: 'open',\n closed: 'closed'\n}\n\n\n// frag duration\nexport const FRAG_DURATION = Math.ceil(1000 / 25)\n\n\nexport const AUDIO_SYNC_VIDEO_DIFF = 1000;\n\n\nexport const HOT_KEY = {\n esc: 27, //\n arrowUp: 38, //\n arrowDown: 40, //\n}\n","export default class Debug {\n constructor(master) {\n this.log = (name, ...args) => {\n if (master._opt.debug) {\n console.log(`Jessibuca: [${name}]`, ...args);\n }\n };\n\n this.warn = (name, ...args) => {\n if (master._opt.debug) {\n console.warn(`Jessibuca: [${name}]`, ...args);\n }\n };\n\n this.error = (name, ...args) => {\n if (master._opt.debug) {\n console.error(`Jessibuca: [${name}]`, ...args);\n }\n };\n }\n}\n","export default class Events {\n constructor(master) {\n this.destroys = [];\n this.proxy = this.proxy.bind(this);\n this.master = master;\n }\n\n proxy(target, name, callback, option = {}) {\n if (!target) {\n return;\n }\n if (Array.isArray(name)) {\n return name.map(item => this.proxy(target, item, callback, option));\n }\n target.addEventListener(name, callback, option);\n const destroy = () => target.removeEventListener(name, callback, option);\n this.destroys.push(destroy);\n return destroy;\n }\n\n destroy() {\n this.master.debug && this.master.debug.log(`Events`, 'destroy');\n this.destroys.forEach(event => event());\n }\n}\n","export default (player) => {\n Object.defineProperty(player, 'rect', {\n get: () => {\n const clientRect = player.$container.getBoundingClientRect()\n clientRect.width = Math.max(clientRect.width, player.$container.clientWidth);\n clientRect.height = Math.max(clientRect.height, player.$container.clientHeight);\n return clientRect;\n },\n });\n\n ['bottom', 'height', 'left', 'right', 'top', 'width'].forEach(key => {\n Object.defineProperty(player, key, {\n get: () => {\n return player.rect[key];\n },\n });\n });\n}\n","/*!\n* screenfull\n* v5.1.0 - 2020-12-24\n* (c) Sindre Sorhus; MIT License\n*/\n(function () {\n\t'use strict';\n\n\tvar document = typeof window !== 'undefined' && typeof window.document !== 'undefined' ? window.document : {};\n\tvar isCommonjs = typeof module !== 'undefined' && module.exports;\n\n\tvar fn = (function () {\n\t\tvar val;\n\n\t\tvar fnMap = [\n\t\t\t[\n\t\t\t\t'requestFullscreen',\n\t\t\t\t'exitFullscreen',\n\t\t\t\t'fullscreenElement',\n\t\t\t\t'fullscreenEnabled',\n\t\t\t\t'fullscreenchange',\n\t\t\t\t'fullscreenerror'\n\t\t\t],\n\t\t\t// New WebKit\n\t\t\t[\n\t\t\t\t'webkitRequestFullscreen',\n\t\t\t\t'webkitExitFullscreen',\n\t\t\t\t'webkitFullscreenElement',\n\t\t\t\t'webkitFullscreenEnabled',\n\t\t\t\t'webkitfullscreenchange',\n\t\t\t\t'webkitfullscreenerror'\n\n\t\t\t],\n\t\t\t// Old WebKit\n\t\t\t[\n\t\t\t\t'webkitRequestFullScreen',\n\t\t\t\t'webkitCancelFullScreen',\n\t\t\t\t'webkitCurrentFullScreenElement',\n\t\t\t\t'webkitCancelFullScreen',\n\t\t\t\t'webkitfullscreenchange',\n\t\t\t\t'webkitfullscreenerror'\n\n\t\t\t],\n\t\t\t[\n\t\t\t\t'mozRequestFullScreen',\n\t\t\t\t'mozCancelFullScreen',\n\t\t\t\t'mozFullScreenElement',\n\t\t\t\t'mozFullScreenEnabled',\n\t\t\t\t'mozfullscreenchange',\n\t\t\t\t'mozfullscreenerror'\n\t\t\t],\n\t\t\t[\n\t\t\t\t'msRequestFullscreen',\n\t\t\t\t'msExitFullscreen',\n\t\t\t\t'msFullscreenElement',\n\t\t\t\t'msFullscreenEnabled',\n\t\t\t\t'MSFullscreenChange',\n\t\t\t\t'MSFullscreenError'\n\t\t\t]\n\t\t];\n\n\t\tvar i = 0;\n\t\tvar l = fnMap.length;\n\t\tvar ret = {};\n\n\t\tfor (; i < l; i++) {\n\t\t\tval = fnMap[i];\n\t\t\tif (val && val[1] in document) {\n\t\t\t\tfor (i = 0; i < val.length; i++) {\n\t\t\t\t\tret[fnMap[0][i]] = val[i];\n\t\t\t\t}\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t})();\n\n\tvar eventNameMap = {\n\t\tchange: fn.fullscreenchange,\n\t\terror: fn.fullscreenerror\n\t};\n\n\tvar screenfull = {\n\t\trequest: function (element, options) {\n\t\t\treturn new Promise(function (resolve, reject) {\n\t\t\t\tvar onFullScreenEntered = function () {\n\t\t\t\t\tthis.off('change', onFullScreenEntered);\n\t\t\t\t\tresolve();\n\t\t\t\t}.bind(this);\n\n\t\t\t\tthis.on('change', onFullScreenEntered);\n\n\t\t\t\telement = element || document.documentElement;\n\n\t\t\t\tvar returnPromise = element[fn.requestFullscreen](options);\n\n\t\t\t\tif (returnPromise instanceof Promise) {\n\t\t\t\t\treturnPromise.then(onFullScreenEntered).catch(reject);\n\t\t\t\t}\n\t\t\t}.bind(this));\n\t\t},\n\t\texit: function () {\n\t\t\treturn new Promise(function (resolve, reject) {\n\t\t\t\tif (!this.isFullscreen) {\n\t\t\t\t\tresolve();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar onFullScreenExit = function () {\n\t\t\t\t\tthis.off('change', onFullScreenExit);\n\t\t\t\t\tresolve();\n\t\t\t\t}.bind(this);\n\n\t\t\t\tthis.on('change', onFullScreenExit);\n\n\t\t\t\tvar returnPromise = document[fn.exitFullscreen]();\n\n\t\t\t\tif (returnPromise instanceof Promise) {\n\t\t\t\t\treturnPromise.then(onFullScreenExit).catch(reject);\n\t\t\t\t}\n\t\t\t}.bind(this));\n\t\t},\n\t\ttoggle: function (element, options) {\n\t\t\treturn this.isFullscreen ? this.exit() : this.request(element, options);\n\t\t},\n\t\tonchange: function (callback) {\n\t\t\tthis.on('change', callback);\n\t\t},\n\t\tonerror: function (callback) {\n\t\t\tthis.on('error', callback);\n\t\t},\n\t\ton: function (event, callback) {\n\t\t\tvar eventName = eventNameMap[event];\n\t\t\tif (eventName) {\n\t\t\t\tdocument.addEventListener(eventName, callback, false);\n\t\t\t}\n\t\t},\n\t\toff: function (event, callback) {\n\t\t\tvar eventName = eventNameMap[event];\n\t\t\tif (eventName) {\n\t\t\t\tdocument.removeEventListener(eventName, callback, false);\n\t\t\t}\n\t\t},\n\t\traw: fn\n\t};\n\n\tif (!fn) {\n\t\tif (isCommonjs) {\n\t\t\tmodule.exports = {isEnabled: false};\n\t\t} else {\n\t\t\twindow.screenfull = {isEnabled: false};\n\t\t}\n\n\t\treturn;\n\t}\n\n\tObject.defineProperties(screenfull, {\n\t\tisFullscreen: {\n\t\t\tget: function () {\n\t\t\t\treturn Boolean(document[fn.fullscreenElement]);\n\t\t\t}\n\t\t},\n\t\telement: {\n\t\t\tenumerable: true,\n\t\t\tget: function () {\n\t\t\t\treturn document[fn.fullscreenElement];\n\t\t\t}\n\t\t},\n\t\tisEnabled: {\n\t\t\tenumerable: true,\n\t\t\tget: function () {\n\t\t\t\t// Coerce to boolean in case of old WebKit\n\t\t\t\treturn Boolean(document[fn.fullscreenEnabled]);\n\t\t\t}\n\t\t}\n\t});\n\n\tif (isCommonjs) {\n\t\tmodule.exports = screenfull;\n\t} else {\n\t\twindow.screenfull = screenfull;\n\t}\n})();\n","import {MP4_CODECS, FILE_SUFFIX} from \"../constant\";\n\nexport function noop() {\n}\n\n\nexport function supportOffscreen($canvas) {\n return typeof $canvas.transferControlToOffscreen === 'function';\n}\n\n\nexport function supportOffscreenV2() {\n return typeof OffscreenCanvas !== \"undefined\";\n}\n\n\nexport function createContextGL($canvas) {\n let gl = null;\n\n const validContextNames = [\"webgl\", \"experimental-webgl\", \"moz-webgl\", \"webkit-3d\"];\n let nameIndex = 0;\n\n while (!gl && nameIndex < validContextNames.length) {\n const contextName = validContextNames[nameIndex];\n\n try {\n let contextOptions = {preserveDrawingBuffer: true};\n gl = $canvas.getContext(contextName, contextOptions);\n } catch (e) {\n gl = null;\n }\n\n if (!gl || typeof gl.getParameter !== \"function\") {\n gl = null;\n }\n\n ++nameIndex;\n }\n\n\n return gl;\n}\n\n\nexport function audioContextUnlock(context) {\n context.resume();\n const source = context.createBufferSource();\n source.buffer = context.createBuffer(1, 1, 22050);\n source.connect(context.destination);\n if (source.noteOn) {\n source.noteOn(0);\n } else {\n source.start(0);\n }\n}\n\nexport function dataURLToFile(dataURL = '') {\n const arr = dataURL.split(\",\");\n const bstr = atob(arr[1]);\n const type = arr[0].replace(\"data:\", \"\").replace(\";base64\", \"\")\n let n = bstr.length, u8arr = new Uint8Array(n);\n while (n--) {\n u8arr[n] = bstr.charCodeAt(n);\n }\n return new File([u8arr], 'file', {type});\n}\n\nexport function downloadFile(file, fileName) {\n if (file instanceof Blob || file instanceof File) {\n file = new Blob([file]);\n }\n const aLink = document.createElement(\"a\");\n aLink.download = fileName;\n aLink.href = file;\n aLink.click();\n}\n\n\nexport function downloadImg(content, fileName) {\n const aLink = document.createElement(\"a\");\n aLink.download = fileName;\n aLink.href = URL.createObjectURL(content);\n aLink.click();\n setTimeout(() => {\n URL.revokeObjectURL(content);\n }, isIOS() ? 1000 : 0)\n}\n\nexport function checkFull() {\n let isFull = document.fullscreenElement || window.webkitFullscreenElement || document.msFullscreenElement;\n if (isFull === undefined) isFull = false;\n return !!isFull;\n}\n\nexport function now() {\n return new Date().getTime();\n}\n\nexport const supportedWasm = (() => {\n try {\n if (typeof WebAssembly === \"object\"\n && typeof WebAssembly.instantiate === \"function\") {\n const module = new WebAssembly.Module(Uint8Array.of(0x0, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00));\n if (module instanceof WebAssembly.Module)\n return new WebAssembly.Instance(module) instanceof WebAssembly.Instance;\n }\n } catch (e) {\n }\n return false;\n})();\n\nexport function clamp(num, a, b) {\n return Math.max(Math.min(num, Math.max(a, b)), Math.min(a, b));\n}\n\nexport function setStyle(element, key, value) {\n if (!element) {\n return\n }\n if (typeof key === 'object') {\n Object.keys(key).forEach(item => {\n setStyle(element, item, key[item]);\n });\n }\n element.style[key] = value;\n return element;\n}\n\n\nexport function getStyle(element, key, numberType = true) {\n if (!element) {\n return 0\n }\n\n const value = getComputedStyle(element, null).getPropertyValue(key);\n return numberType ? parseFloat(value) : value;\n}\n\nexport function getNowTime() {\n if (performance && typeof performance.now === 'function') {\n return performance.now();\n }\n return Date.now();\n}\n\nexport function calculationRate(callback) {\n let totalSize = 0;\n let lastTime = getNowTime();\n return size => {\n totalSize += size;\n const thisTime = getNowTime();\n const diffTime = thisTime - lastTime;\n if (diffTime >= 1000) {\n callback((totalSize / diffTime) * 1000);\n lastTime = thisTime;\n totalSize = 0;\n }\n };\n}\n\nexport function downloadRecord(blob, name, suffix) {\n const url = window.URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = (name || now()) + '.' + (suffix || FILE_SUFFIX.webm);\n a.click();\n setTimeout(() => {\n window.URL.revokeObjectURL(url);\n }, isIOS() ? 1000 : 0)\n}\n\nexport const env = '__ENV__';\n\nexport function isMobile() {\n return (/iphone|ipod|android.*mobile|windows.*phone|blackberry.*mobile/i.test(window.navigator.userAgent.toLowerCase()));\n}\n\nexport function isAndroid() {\n const UA = window.navigator.userAgent.toLowerCase();\n return (/android/i.test(UA));\n}\n\nexport function isIOS() {\n const UA = window.navigator.userAgent.toLowerCase();\n return UA && /iphone|ipad|ipod|ios/.test(UA);\n}\n\n\nexport function parseTime(time, cFormat) {\n if (arguments.length === 0) {\n return null\n }\n var format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}'\n var date;\n if (typeof time === 'object') {\n date = time\n } else {\n if (('' + time).length === 10) time = parseInt(time) * 1000;\n time = +time; // 转成int 型\n date = new Date(time)\n }\n var formatObj = {\n y: date.getFullYear(),\n m: date.getMonth() + 1,\n d: date.getDate(),\n h: date.getHours(),\n i: date.getMinutes(),\n s: date.getSeconds(),\n a: date.getDay()\n };\n var time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {\n var value = formatObj[key]\n if (key === 'a') return ['一', '二', '三', '四', '五', '六', '日'][value - 1]\n if (result.length > 0 && value < 10) {\n value = '0' + value\n }\n return value || 0\n });\n return time_str\n}\n\n// 是否支持 webcodecs\nexport function supportWCS() {\n return \"VideoEncoder\" in window;\n}\n\nexport function toNumber(value) {\n if (typeof value !== 'string') {\n return value;\n } else {\n // 转换成 number 类型\n var parsed = Number(value);\n return isNaN(parsed) ? value : parsed;\n }\n}\n\nexport function uuid16() {\n return 'xxxxxxxxxxxx4xxx'.replace(/[xy]/g, function (c) {\n var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8)\n return v.toString(16)\n })\n}\n\nexport function throttle(callback, delay) {\n let isThrottled = false;\n let args;\n let context;\n\n function fn(...args2) {\n if (isThrottled) {\n args = args2;\n context = this;\n return;\n }\n\n isThrottled = true;\n callback.apply(this, args2);\n setTimeout(() => {\n isThrottled = false;\n if (args) {\n fn.apply(context, args);\n args = null;\n context = null;\n }\n }, delay);\n }\n\n return fn;\n}\n\n\nexport function isDef(v) {\n return v !== undefined && v !== null;\n}\n\nexport function formatVideoDecoderConfigure(avcC) {\n let codecArray = avcC.subarray(1, 4);\n let codecString = \"avc1.\";\n for (let j = 0; j < 3; j++) {\n let h = codecArray[j].toString(16);\n if (h.length < 2) {\n h = \"0\" + h\n }\n codecString += h\n }\n\n return {\n codec: codecString,\n description: avcC\n }\n}\n\nexport function isFullScreen() {\n return document.isFullScreen || document.mozIsFullScreen || document.webkitIsFullScreen;\n}\n\nexport function bpsSize(value) {\n if (null == value || value === '') {\n return \"0 KB/S\";\n }\n let size = parseFloat(value);\n size = size.toFixed(2);\n return size + 'KB/S';\n}\n\n\nexport function fpsStatus(fps) {\n let result = 0;\n if (fps >= 24) {\n result = 2;\n } else if (fps >= 15) {\n result = 1;\n }\n\n return result;\n}\n\nexport function createEmptyImageBitmap(width, height) {\n const $canvasElement = document.createElement(\"canvas\");\n $canvasElement.width = width;\n $canvasElement.height = height;\n return createImageBitmap($canvasElement, 0, 0, width, height);\n}\n\n\nexport function supportMSE() {\n return window.MediaSource && window.MediaSource.isTypeSupported(MP4_CODECS.avc);\n}\n\n\nexport function formatMp4VideoCodec(codec) {\n return `video/mp4; codecs=\"${codec}\"`\n}\n\n\nexport function saveBlobToFile(fileName, blob) {\n let url = window.URL.createObjectURL(blob);\n let aLink = window.document.createElement('a');\n aLink.download = fileName;\n aLink.href = url;\n //创建内置事件并触发\n let evt = window.document.createEvent('MouseEvents');\n evt.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n aLink.dispatchEvent(evt);\n}\n\nexport function isEmpty(value) {\n return value === null || value === undefined\n}\n\nexport function isBoolean(value) {\n return value === true || value === false;\n}\n\nexport function isNotEmpty(value) {\n return !isEmpty(value)\n}\n\nexport function initPlayTimes() {\n return {\n playInitStart: '', //1\n playStart: '', // 2\n streamStart: '', //3\n streamResponse: '', // 4\n demuxStart: '', // 5\n decodeStart: '', // 6\n videoStart: '', // 7\n playTimestamp: '',// playStart- playInitStart\n streamTimestamp: '',// streamStart - playStart\n streamResponseTimestamp: '',// streamResponse - streamStart\n demuxTimestamp: '', // demuxStart - streamResponse\n decodeTimestamp: '', // decodeStart - demuxStart\n videoTimestamp: '',// videoStart - decodeStart\n allTimestamp: '' // videoStart - playInitStart\n }\n}\n\n// create watermark\nexport function createWatermark(options) {\n let defaultConfig = {\n container: '',\n left: '',\n right: '',\n top: '',\n bottom: '',\n image: {\n src: '',\n width: '100',\n height: '60',\n },\n text: {\n content: '',\n fontSize: '14',\n color: '#000'\n },\n }\n defaultConfig = Object.assign(defaultConfig, options)\n\n const $container = defaultConfig.container;\n\n if ($container) {\n return\n }\n\n let shadowRoot = null;\n const otDiv = document.createElement('div');\n otDiv.setAttribute('style', 'pointer-events: none !important; display: block !important');\n\n if (typeof otDiv.attachShadow === \"function\") {\n shadowRoot = otDiv.attachShadow({mode: 'open'});\n } else if (otDiv.shadowRoot) {\n shadowRoot = otDiv.shadowRoot;\n } else {\n shadowRoot = otDiv;\n }\n\n const nodeList = $container.children;\n const index = Math.floor(Math.random() * (nodeList.length - 1));\n\n if (nodeList[index]) {\n $container.insertBefore(otDiv, nodeList[index]);\n } else {\n $container.appendChild(otDiv);\n }\n\n\n const maskDiv = document.createElement('div');\n let innerDom = null;\n if (defaultConfig.text && defaultConfig.text.content) {\n innerDom = document.createTextNode(defaultConfig.text);\n } else if (defaultConfig.image && defaultConfig.image.src) {\n innerDom = document.createElement('img')\n innerDom.style.height = '100%'\n innerDom.style.width = '100%'\n innerDom.src = defaultConfig.image.src;\n }\n\n if (!innerDom) {\n return;\n }\n\n maskDiv.appendChild(innerDom);\n\n maskDiv.style.visibility = '';\n maskDiv.style.position = \"absolute\";\n maskDiv.style.display = 'block'\n maskDiv.style['-ms-user-select'] = \"none\";\n maskDiv.style.left = defaultConfig.left;\n maskDiv.style.right = defaultConfig.right;\n maskDiv.style.top = defaultConfig.top;\n maskDiv.style.bottom = defaultConfig.bottom;\n maskDiv.style.overflow = 'hidden';\n maskDiv.style.zIndex = \"9999999\";\n if (defaultConfig.text && defaultConfig.text.content) {\n maskDiv.style.fontSize = defaultConfig.text.fontSize;\n maskDiv.style.color = defaultConfig.text.color;\n } else if (defaultConfig.image && defaultConfig.image.src) {\n maskDiv.style.width = defaultConfig.image.width + 'px';\n maskDiv.style.height = defaultConfig.image.height + 'px';\n }\n\n shadowRoot.appendChild(maskDiv)\n\n // remove function\n return () => {\n $container.removeChild(otDiv);\n }\n}\n\nexport function formatTimeTips(time) {\n var result;\n\n //\n if (time > -1) {\n var hour = Math.floor(time / 3600);\n var min = Math.floor(time / 60) % 60;\n var sec = time % 60;\n\n sec = Math.round(sec);\n\n if (hour < 10) {\n result = '0' + hour + \":\";\n } else {\n result = hour + \":\";\n }\n\n if (min < 10) {\n result += \"0\";\n }\n result += min + \":\";\n if (sec < 10) {\n result += \"0\";\n }\n result += sec.toFixed(0);\n }\n\n return result;\n}\n","import {EVENTS, EVENTS_ERROR, JESSIBUCA_EVENTS} from \"../constant\";\nimport screenfull from \"screenfull\";\nimport {setStyle} from \"../utils\";\n\nexport default (player) => {\n\n\n try {\n const screenfullChange = () => {\n player.emit(JESSIBUCA_EVENTS.fullscreen, player.fullscreen)\n\n // 如果不是fullscreen,则触发下 resize 方法\n if (!player.fullscreen) {\n player.resize();\n } else {\n if(player._opt.useMSE){\n player.resize();\n }\n }\n\n };\n screenfull.on('change', screenfullChange);\n player.events.destroys.push(() => {\n screenfull.off('change', screenfullChange);\n });\n } catch (error) {\n //\n }\n //\n player.on(EVENTS.decoderWorkerInit, () => {\n player.debug.log('player', 'has loaded');\n player.loaded = true;\n })\n\n //\n player.on(EVENTS.play, () => {\n player.loading = false;\n })\n\n //\n player.on(EVENTS.fullscreen, (value) => {\n if (value) {\n try {\n screenfull.request(player.$container).then(() => {\n\n }).catch((e) => {\n player.webFullscreen = true;\n });\n\n } catch (e) {\n player.webFullscreen = true;\n }\n } else {\n try {\n screenfull.exit().then(() => {\n }).catch(() => {\n player.webFullscreen = false;\n\n });\n } catch (e) {\n player.webFullscreen = false;\n }\n }\n })\n\n player.on(EVENTS.webFullscreen, (value) => {\n if (value) {\n player.$container.classList.add('jessibuca-fullscreen-web')\n } else {\n player.$container.classList.remove('jessibuca-fullscreen-web')\n }\n })\n\n //\n player.on(EVENTS.resize, () => {\n player.video.resize();\n })\n\n\n if (player._opt.debug) {\n const ignoreList = [EVENTS.timeUpdate];\n Object.keys(EVENTS).forEach((key) => {\n player.on(EVENTS[key], (value) => {\n if (ignoreList.includes(key)) {\n return;\n }\n\n player.debug.log('player events', EVENTS[key], value);\n })\n })\n\n Object.keys(EVENTS_ERROR).forEach((key) => {\n player.on(EVENTS_ERROR[key], (value) => {\n player.debug.log('player event error', EVENTS_ERROR[key], value);\n })\n })\n }\n}\n","export default class Emitter {\n on(name, fn, ctx) {\n const e = this.e || (this.e = {});\n (e[name] || (e[name] = [])).push({fn, ctx});\n return this;\n }\n\n once(name, fn, ctx) {\n const self = this;\n\n function listener(...args) {\n self.off(name, listener);\n fn.apply(ctx, args);\n }\n\n listener._ = fn;\n return this.on(name, listener, ctx);\n }\n\n emit(name, ...data) {\n const evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n for (let i = 0; i < evtArr.length; i += 1) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n return this;\n }\n\n off(name, callback) {\n const e = this.e || (this.e = {});\n\n if (!name) {\n Object.keys(e).forEach((key) => {\n delete e[key];\n })\n delete this.e\n return;\n }\n\n const evts = e[name];\n const liveEvents = [];\n if (evts && callback) {\n for (let i = 0, len = evts.length; i < len; i += 1) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback) liveEvents.push(evts[i]);\n }\n }\n if (liveEvents.length) {\n e[name] = liveEvents;\n } else {\n delete e[name];\n }\n return this;\n }\n}\n","export default (gl, openWebglAlignment) => {\n var vertexShaderScript = [\n 'attribute vec4 vertexPos;',\n 'attribute vec4 texturePos;',\n 'varying vec2 textureCoord;',\n\n 'void main()',\n '{',\n 'gl_Position = vertexPos;',\n 'textureCoord = texturePos.xy;',\n '}'\n ].join('\\n');\n\n var fragmentShaderScript = [\n 'precision highp float;',\n 'varying highp vec2 textureCoord;',\n 'uniform sampler2D ySampler;',\n 'uniform sampler2D uSampler;',\n 'uniform sampler2D vSampler;',\n 'const mat4 YUV2RGB = mat4',\n '(',\n '1.1643828125, 0, 1.59602734375, -.87078515625,',\n '1.1643828125, -.39176171875, -.81296875, .52959375,',\n '1.1643828125, 2.017234375, 0, -1.081390625,',\n '0, 0, 0, 1',\n ');',\n\n 'void main(void) {',\n 'highp float y = texture2D(ySampler, textureCoord).r;',\n 'highp float u = texture2D(uSampler, textureCoord).r;',\n 'highp float v = texture2D(vSampler, textureCoord).r;',\n 'gl_FragColor = vec4(y, u, v, 1) * YUV2RGB;',\n '}'\n ].join('\\n');\n\n if (openWebglAlignment) {\n gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1);\n }\n var vertexShader = gl.createShader(gl.VERTEX_SHADER);\n gl.shaderSource(vertexShader, vertexShaderScript);\n gl.compileShader(vertexShader);\n if (!gl.getShaderParameter(vertexShader, gl.COMPILE_STATUS)) {\n console.log('Vertex shader failed to compile: ' + gl.getShaderInfoLog(vertexShader));\n }\n\n var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);\n gl.shaderSource(fragmentShader, fragmentShaderScript);\n gl.compileShader(fragmentShader);\n if (!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS)) {\n console.log('Fragment shader failed to compile: ' + gl.getShaderInfoLog(fragmentShader));\n }\n\n var program = gl.createProgram();\n gl.attachShader(program, vertexShader);\n gl.attachShader(program, fragmentShader);\n gl.linkProgram(program);\n if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n console.log('Program failed to compile: ' + gl.getProgramInfoLog(program));\n }\n\n gl.useProgram(program);\n\n // initBuffers\n var vertexPosBuffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, vertexPosBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([1, 1, -1, 1, 1, -1, -1, -1]), gl.STATIC_DRAW);\n\n var vertexPosRef = gl.getAttribLocation(program, 'vertexPos');\n gl.enableVertexAttribArray(vertexPosRef);\n gl.vertexAttribPointer(vertexPosRef, 2, gl.FLOAT, false, 0, 0);\n\n var texturePosBuffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, texturePosBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([1, 0, 0, 0, 1, 1, 0, 1]), gl.STATIC_DRAW);\n\n var texturePosRef = gl.getAttribLocation(program, 'texturePos');\n gl.enableVertexAttribArray(texturePosRef);\n gl.vertexAttribPointer(texturePosRef, 2, gl.FLOAT, false, 0, 0);\n\n function _initTexture(name, index) {\n var textureRef = gl.createTexture();\n gl.bindTexture(gl.TEXTURE_2D, textureRef);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.bindTexture(gl.TEXTURE_2D, null);\n gl.uniform1i(gl.getUniformLocation(program, name), index);\n return textureRef;\n }\n\n var yTextureRef = _initTexture('ySampler', 0);\n var uTextureRef = _initTexture('uSampler', 1);\n var vTextureRef = _initTexture('vSampler', 2);\n\n return {\n render: function (w, h, y, u, v) {\n gl.viewport(0, 0, w, h);\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, yTextureRef);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.LUMINANCE, w, h, 0, gl.LUMINANCE, gl.UNSIGNED_BYTE, y);\n gl.activeTexture(gl.TEXTURE1);\n gl.bindTexture(gl.TEXTURE_2D, uTextureRef);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.LUMINANCE, w / 2, h / 2, 0, gl.LUMINANCE, gl.UNSIGNED_BYTE, u);\n gl.activeTexture(gl.TEXTURE2);\n gl.bindTexture(gl.TEXTURE_2D, vTextureRef);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.LUMINANCE, w / 2, h / 2, 0, gl.LUMINANCE, gl.UNSIGNED_BYTE, v);\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n },\n destroy: function () {\n try {\n gl.deleteProgram(program);\n\n gl.deleteBuffer(vertexPosBuffer)\n gl.deleteBuffer(texturePosBuffer);\n\n gl.deleteTexture(yTextureRef);\n gl.deleteTexture(uTextureRef);\n gl.deleteBuffer(vTextureRef);\n } catch (e) {\n // console.error(e);\n }\n\n }\n }\n};\n","import Emitter from \"../utils/emitter\";\nimport {CONTROL_HEIGHT, EVENTS, VIDEO_ENC_TYPE} from \"../constant\";\n\nexport default class CommonLoader extends Emitter {\n constructor() {\n super();\n this.init = false;\n }\n\n //\n updateVideoInfo(data) {\n if (data.encTypeCode) {\n this.videoInfo.encType = VIDEO_ENC_TYPE[data.encTypeCode];\n }\n\n if (data.width) {\n this.videoInfo.width = data.width;\n }\n\n if (data.height) {\n this.videoInfo.height = data.height;\n }\n\n // video 基本信息\n if (this.videoInfo.encType && this.videoInfo.height && this.videoInfo.width && !this.init) {\n this.player.emit(EVENTS.videoInfo, this.videoInfo);\n this.init = true;\n }\n }\n\n play(){\n\n }\n\n pause() {\n\n }\n}\n","import Emitter from \"../utils/emitter\";\nimport {\n createContextGL,\n createEmptyImageBitmap,\n dataURLToFile,\n downloadImg,\n isMobile,\n now,\n supportOffscreen\n} from \"../utils\";\nimport createWebGL from \"../utils/webgl\";\nimport {CANVAS_RENDER_TYPE, CONTROL_HEIGHT, EVENTS, SCREENSHOT_TYPE, VIDEO_ENC_TYPE} from \"../constant\";\nimport CommonLoader from \"./commonLoader\";\n\nexport default class CanvasVideoLoader extends CommonLoader {\n\n constructor(player) {\n super()\n this.player = player;\n const $canvasElement = document.createElement(\"canvas\");\n $canvasElement.style.position = \"absolute\";\n $canvasElement.style.top = 0;\n $canvasElement.style.left = 0;\n this.$videoElement = $canvasElement;\n player.$container.appendChild(this.$videoElement);\n\n this.context2D = null;\n this.contextGl = null;\n this.contextGlRender = null;\n this.contextGlDestroy = null;\n this.bitmaprenderer = null;\n this.renderType = null;\n this.videoInfo = {\n width: '',\n height: '',\n encType: '',\n }\n //\n this._initCanvasRender();\n this.player.debug.log('CanvasVideo', 'init');\n }\n\n destroy() {\n if (this.contextGl) {\n this.contextGl = null;\n }\n\n if (this.context2D) {\n this.context2D = null;\n }\n\n if (this.contextGlRender) {\n this.contextGlDestroy && this.contextGlDestroy();\n this.contextGlDestroy = null;\n this.contextGlRender = null;\n }\n if (this.bitmaprenderer) {\n this.bitmaprenderer = null;\n }\n\n this.renderType = null;\n\n this.videoInfo = {\n width: '',\n height: '',\n encType: '',\n encTypeCode: ''\n }\n\n this.player.$container.removeChild(this.$videoElement);\n this.init = false;\n this.off();\n this.player.debug.log(`CanvasVideoLoader`, 'destroy');\n }\n\n\n _initContextGl() {\n this.contextGl = createContextGL(this.$videoElement);\n const webgl = createWebGL(this.contextGl, this.player._opt.openWebglAlignment);\n this.contextGlRender = webgl.render;\n this.contextGlDestroy = webgl.destroy\n }\n\n _initContext2D() {\n this.context2D = this.$videoElement.getContext('2d');\n }\n\n\n // 渲染类型\n _initCanvasRender() {\n if (this.player._opt.useWCS && !this._supportOffscreen()) {\n this.renderType = CANVAS_RENDER_TYPE.webcodecs;\n this._initContext2D();\n } else if (this._supportOffscreen()) {\n this.renderType = CANVAS_RENDER_TYPE.offscreen;\n this._bindOffscreen();\n } else {\n this.renderType = CANVAS_RENDER_TYPE.webgl;\n this._initContextGl();\n }\n }\n\n _supportOffscreen() {\n return supportOffscreen(this.$videoElement) && this.player._opt.useOffscreen;\n }\n\n //\n _bindOffscreen() {\n this.bitmaprenderer = this.$videoElement.getContext('bitmaprenderer');\n }\n\n initCanvasViewSize() {\n this.$videoElement.width = this.videoInfo.width;\n this.$videoElement.height = this.videoInfo.height;\n this.resize();\n }\n\n //\n render(msg) {\n this.player.videoTimestamp = msg.ts;\n switch (this.renderType) {\n case CANVAS_RENDER_TYPE.offscreen:\n this.bitmaprenderer.transferFromImageBitmap(msg.buffer);\n break;\n case CANVAS_RENDER_TYPE.webgl:\n this.contextGlRender(this.$videoElement.width, this.$videoElement.height, msg.output[0], msg.output[1], msg.output[2]);\n break;\n case CANVAS_RENDER_TYPE.webcodecs:\n this.context2D.drawImage(msg.videoFrame, 0, 0, this.$videoElement.width, this.$videoElement.height);\n break;\n }\n }\n\n screenshot(filename, format, quality, type) {\n filename = filename || now();\n type = type || SCREENSHOT_TYPE.download;\n const formatType = {\n png: 'image/png',\n jpeg: 'image/jpeg',\n webp: 'image/webp'\n };\n let encoderOptions = 0.92;\n if (!formatType[format] && SCREENSHOT_TYPE[format]) {\n type = format;\n format = 'png';\n quality = undefined\n }\n\n if (typeof quality === \"string\") {\n type = quality;\n quality = undefined;\n }\n\n if (typeof quality !== 'undefined') {\n encoderOptions = Number(quality);\n }\n const dataURL = this.$videoElement.toDataURL(formatType[format] || formatType.png, encoderOptions);\n\n const file = dataURLToFile(dataURL)\n if (type === SCREENSHOT_TYPE.base64) {\n return dataURL;\n } else if (type === SCREENSHOT_TYPE.blob) {\n return file;\n } else if (type === SCREENSHOT_TYPE.download) {\n downloadImg(file, filename);\n }\n }\n\n //\n clearView() {\n switch (this.renderType) {\n case CANVAS_RENDER_TYPE.offscreen:\n createEmptyImageBitmap(this.$videoElement.width, this.$videoElement.height).then((imageBitMap) => {\n this.bitmaprenderer.transferFromImageBitmap(imageBitMap);\n })\n break;\n case CANVAS_RENDER_TYPE.webgl:\n this.contextGl.clear(this.contextGl.COLOR_BUFFER_BIT);\n break;\n case CANVAS_RENDER_TYPE.webcodecs:\n this.context2D.clearRect(0, 0, this.$videoElement.width, this.$videoElement.height)\n break;\n }\n }\n\n resize() {\n this.player.debug.log('canvasVideo', 'resize');\n const option = this.player._opt;\n let width = this.player.width;\n let height = this.player.height;\n if (option.hasControl && !option.controlAutoHide) {\n if (isMobile() && this.player.fullscreen) {\n width -= CONTROL_HEIGHT;\n } else {\n height -= CONTROL_HEIGHT;\n }\n }\n let resizeWidth = this.$videoElement.width;\n let resizeHeight = this.$videoElement.height;\n const rotate = option.rotate;\n let left = ((width - resizeWidth) / 2)\n let top = ((height - resizeHeight) / 2)\n if (rotate === 270 || rotate === 90) {\n resizeWidth = this.$videoElement.height;\n resizeHeight = this.$videoElement.width;\n }\n\n const wScale = width / resizeWidth;\n const hScale = height / resizeHeight;\n\n let scale = wScale > hScale ? hScale : wScale;\n //\n if (!option.isResize) {\n if (wScale !== hScale) {\n scale = wScale + ',' + hScale;\n }\n }\n //\n if (option.isFullResize) {\n scale = wScale > hScale ? wScale : hScale;\n }\n let transform = \"scale(\" + scale + \")\";\n\n if (rotate) {\n transform += ' rotate(' + rotate + 'deg)'\n }\n\n this.$videoElement.style.transform = transform;\n this.$videoElement.style.left = left + \"px\"\n this.$videoElement.style.top = top + \"px\"\n }\n\n\n}\n","import Emitter from \"../utils/emitter\";\nimport {CONTROL_HEIGHT, EVENTS, SCREENSHOT_TYPE, VIDEO_ENC_TYPE} from \"../constant\";\nimport {dataURLToFile, downloadImg, isMobile, now} from \"../utils\";\nimport CommonLoader from \"./commonLoader\";\n\nexport default class VideoLoader extends CommonLoader {\n constructor(player) {\n super();\n this.player = player;\n const $videoElement = document.createElement('video');\n $videoElement.muted = true;\n $videoElement.style.position = \"absolute\";\n $videoElement.style.top = 0;\n $videoElement.style.left = 0;\n player.$container.appendChild($videoElement);\n this.$videoElement = $videoElement;\n this.videoInfo = {\n width: '',\n height: '',\n encType: '',\n }\n const _opt = this.player._opt;\n if (_opt.useWCS && _opt.wcsUseVideoRender) {\n this.trackGenerator = new MediaStreamTrackGenerator({kind: 'video'});\n $videoElement.srcObject = new MediaStream([this.trackGenerator]);\n this.vwriter = this.trackGenerator.writable.getWriter();\n }\n\n this.resize();\n\n const {proxy} = this.player.events;\n\n proxy(this.$videoElement, 'canplay', () => {\n this.player.debug.log('Video', 'canplay');\n })\n\n proxy(this.$videoElement, 'waiting', () => {\n this.player.emit(EVENTS.videoWaiting);\n })\n\n proxy(this.$videoElement, 'timeupdate', (event) => {\n // this.player.emit(EVENTS.videoTimeUpdate, event.timeStamp);\n })\n\n this.player.debug.log('Video', 'init');\n }\n\n destroy() {\n this.player.$container.removeChild(this.$videoElement);\n if (this.$videoElement) {\n this.$videoElement.src = ''\n this.$videoElement = null;\n }\n if (this.trackGenerator) {\n this.trackGenerator = null;\n }\n if (this.vwriter) {\n this.trackGenerator = null;\n }\n\n\n this.init = false;\n this.off();\n this.player.debug.log('Video', 'destroy');\n }\n\n play() {\n // this.$videoElement.autoplay = true;\n this.$videoElement.play();\n }\n\n clearView() {\n\n }\n\n screenshot(filename, format, quality, type) {\n filename = filename || now();\n type = type || SCREENSHOT_TYPE.download;\n const formatType = {\n png: 'image/png',\n jpeg: 'image/jpeg',\n webp: 'image/webp'\n };\n let encoderOptions = 0.92;\n if (!formatType[format] && SCREENSHOT_TYPE[format]) {\n type = format;\n format = 'png';\n quality = undefined\n }\n if (typeof quality === \"string\") {\n type = quality;\n quality = undefined;\n }\n\n if (typeof quality !== 'undefined') {\n encoderOptions = Number(quality);\n }\n const $video = this.$videoElement;\n let canvas = document.createElement('canvas');\n canvas.width = $video.videoWidth;\n canvas.height = $video.videoHeight;\n const context = canvas.getContext('2d');\n context.drawImage($video, 0, 0, canvas.width, canvas.height);\n const dataURL = canvas.toDataURL(SCREENSHOT_TYPE[format] || SCREENSHOT_TYPE.png, encoderOptions);\n const file = dataURLToFile(dataURL)\n if (type === SCREENSHOT_TYPE.base64) {\n return dataURL;\n } else if (type === SCREENSHOT_TYPE.blob) {\n return file;\n } else if (type === SCREENSHOT_TYPE.download) {\n downloadImg(file, filename);\n }\n }\n\n initCanvasViewSize() {\n this.resize();\n }\n\n //\n render(msg) {\n if (this.vwriter) {\n this.vwriter.write(msg.videoFrame);\n }\n }\n\n resize() {\n let width = this.player.width;\n let height = this.player.height;\n const option = this.player._opt;\n const rotate = option.rotate;\n if (option.hasControl && !option.controlAutoHide) {\n if (isMobile() && this.player.fullscreen) {\n width -= CONTROL_HEIGHT;\n } else {\n height -= CONTROL_HEIGHT;\n }\n }\n\n this.$videoElement.width = width;\n this.$videoElement.height = height;\n\n if (rotate === 270 || rotate === 90) {\n this.$videoElement.width = height;\n this.$videoElement.height = width;\n }\n let resizeWidth = this.$videoElement.width;\n let resizeHeight = this.$videoElement.height;\n let left = ((width - resizeWidth) / 2)\n let top = ((height - resizeHeight) / 2)\n let objectFill = 'contain';\n\n // 默认是true\n // 视频画面做等比缩放后,高或宽对齐canvas区域,画面不被拉伸,但有黑边\n\n // 视频画面完全填充canvas区域,画面会被拉伸\n if (!option.isResize) {\n objectFill = 'fill';\n }\n\n // 视频画面做等比缩放后,完全填充canvas区域,画面不被拉伸,没有黑边,但画面显示不全\n if (option.isFullResize) {\n objectFill = 'none';\n }\n this.$videoElement.style.objectFit = objectFill;\n this.$videoElement.style.transform = 'rotate(' + rotate + 'deg)';\n this.$videoElement.style.left = left + \"px\"\n this.$videoElement.style.top = top + \"px\"\n }\n}\n","import CanvasVideoLoader from './canvasLoader';\nimport VideoLoader from \"./videoLoader\";\n\nexport default class Video {\n constructor(player) {\n const Loader = Video.getLoaderFactory(player._opt);\n return new Loader(player);\n }\n\n static getLoaderFactory(opt) {\n if (opt.useMSE || (opt.useWCS && !opt.useOffscreen && opt.wcsUseVideoRender)) {\n return VideoLoader;\n } else {\n return CanvasVideoLoader;\n }\n }\n}\n","import Emitter from \"../utils/emitter\";\nimport {AUDIO_ENC_TYPE, AUDIO_SYNC_VIDEO_DIFF, EVENTS, VIDEO_ENC_TYPE} from \"../constant\";\nimport {clamp, noop} from \"../utils\";\n\nexport default class AudioContextLoader extends Emitter {\n constructor(player) {\n super();\n this.bufferList = [];\n this.player = player;\n this.scriptNode = null;\n this.hasInitScriptNode = false;\n this.audioContextChannel = null;\n\n this.audioContext = new (window.AudioContext || window.webkitAudioContext)();\n //\n this.gainNode = this.audioContext.createGain();\n // Get an AudioBufferSourceNode.\n // This is the AudioNode to use when we want to play an AudioBuffer\n const source = this.audioContext.createBufferSource();\n // set the buffer in the AudioBufferSourceNode\n source.buffer = this.audioContext.createBuffer(1, 1, 22050);\n // connect the AudioBufferSourceNode to the\n // destination so we can hear the sound\n source.connect(this.audioContext.destination);\n // noteOn as start\n // start the source playing\n if (source.noteOn) {\n source.noteOn(0);\n } else {\n source.start(0);\n }\n this.audioBufferSourceNode = source;\n //\n this.mediaStreamAudioDestinationNode = this.audioContext.createMediaStreamDestination();\n //\n this.audioEnabled(true);\n // default setting 0\n this.gainNode.gain.value = 0;\n\n this.playing = false;\n //\n this.audioSyncVideoOption = {\n diff: null\n };\n\n\n this.audioInfo = {\n encType: '',\n channels: '',\n sampleRate: ''\n }\n this.init = false;\n this.hasAudio = false;\n\n // update\n this.on(EVENTS.videoSyncAudio, (options) => {\n // this.player.debug.log('AudioContext', `videoSyncAudio , audioTimestamp: ${options.audioTimestamp},videoTimestamp: ${options.videoTimestamp},diff:${options.diff}`)\n this.audioSyncVideoOption = options;\n })\n\n this.player.debug.log('AudioContext', 'init');\n }\n\n\n destroy() {\n this.closeAudio();\n this.audioContext.close();\n this.audioContext = null;\n this.gainNode = null;\n this.init = false;\n this.hasAudio = false;\n this.playing = false;\n\n if (this.scriptNode) {\n this.scriptNode.onaudioprocess = noop;\n this.scriptNode = null;\n }\n this.audioBufferSourceNode = null;\n this.mediaStreamAudioDestinationNode = null;\n this.hasInitScriptNode = false;\n this.audioSyncVideoOption = {\n diff: null\n };\n this.audioInfo = {\n encType: '',\n channels: '',\n sampleRate: ''\n }\n this.off();\n this.player.debug.log('AudioContext', 'destroy');\n }\n\n updateAudioInfo(data) {\n if (data.encTypeCode) {\n this.audioInfo.encType = AUDIO_ENC_TYPE[data.encTypeCode];\n }\n\n if (data.channels) {\n this.audioInfo.channels = data.channels;\n }\n\n if (data.sampleRate) {\n this.audioInfo.sampleRate = data.sampleRate;\n }\n\n // audio 基本信息\n if (this.audioInfo.sampleRate && this.audioInfo.channels && this.audioInfo.encType && !this.init) {\n this.player.emit(EVENTS.audioInfo, this.audioInfo);\n this.init = true;\n }\n }\n\n //\n get isPlaying() {\n return this.playing;\n }\n\n get isMute() {\n return this.gainNode.gain.value === 0 || this.isStateSuspended();\n }\n\n get volume() {\n return this.gainNode.gain.value;\n }\n\n get bufferSize() {\n return this.bufferList.length;\n }\n\n\n initScriptNode() {\n this.playing = true;\n\n if (this.hasInitScriptNode) {\n return;\n }\n const channels = this.audioInfo.channels;\n\n const scriptNode = this.audioContext.createScriptProcessor(1024, 0, channels);\n // tips: if audio isStateSuspended onaudioprocess method not working\n scriptNode.onaudioprocess = (audioProcessingEvent) => {\n const outputBuffer = audioProcessingEvent.outputBuffer;\n\n if (this.bufferList.length && this.playing) {\n // just for wasm\n if (!this.player._opt.useWCS && !this.player._opt.useMSE) {\n // audio > video\n // wait\n if (this.audioSyncVideoOption.diff > AUDIO_SYNC_VIDEO_DIFF) {\n this.player.debug.warn('AudioContext', `audioSyncVideoOption more than diff :${this.audioSyncVideoOption.diff}, waiting`)\n // wait\n return;\n }\n // audio < video\n // throw away then chase video\n else if (this.audioSyncVideoOption.diff < -AUDIO_SYNC_VIDEO_DIFF) {\n this.player.debug.warn('AudioContext', `audioSyncVideoOption less than diff :${this.audioSyncVideoOption.diff}, dropping`)\n\n //\n let bufferItem = this.bufferList.shift();\n //\n while ((bufferItem.ts - this.player.videoTimestamp < -AUDIO_SYNC_VIDEO_DIFF) && this.bufferList.length > 0) {\n // this.player.debug.warn('AudioContext', `audioSyncVideoOption less than inner ts is:${bufferItem.ts}, videoTimestamp is ${this.player.videoTimestamp},diff:${bufferItem.ts - this.player.videoTimestamp}`)\n bufferItem = this.bufferList.shift();\n }\n\n if (this.bufferList.length === 0) {\n return;\n }\n }\n }\n\n if (this.bufferList.length === 0) {\n return;\n }\n\n const bufferItem = this.bufferList.shift();\n\n // update audio time stamp\n if (bufferItem && bufferItem.ts) {\n this.player.audioTimestamp = bufferItem.ts;\n }\n\n for (let channel = 0; channel < channels; channel++) {\n const b = bufferItem.buffer[channel]\n const nowBuffering = outputBuffer.getChannelData(channel);\n for (let i = 0; i < 1024; i++) {\n nowBuffering[i] = b[i] || 0\n }\n }\n }\n }\n\n scriptNode.connect(this.gainNode);\n this.scriptNode = scriptNode;\n this.gainNode.connect(this.audioContext.destination);\n this.gainNode.connect(this.mediaStreamAudioDestinationNode);\n this.hasInitScriptNode = true;\n }\n\n mute(flag) {\n if (flag) {\n if (!this.isMute) {\n this.player.emit(EVENTS.mute, flag);\n }\n this.setVolume(0);\n this.audioEnabled(false);\n this.clear();\n } else {\n if (this.isMute) {\n this.player.emit(EVENTS.mute, flag);\n }\n this.setVolume(0.5);\n this.audioEnabled(true);\n }\n }\n\n setVolume(volume) {\n volume = parseFloat(volume).toFixed(2);\n if (isNaN(volume)) {\n return;\n }\n this.audioEnabled(true);\n volume = clamp(volume, 0, 1);\n this.gainNode.gain.value = volume;\n this.gainNode.gain.setValueAtTime(volume, this.audioContext.currentTime);\n this.player.emit(EVENTS.volumechange, this.player.volume);\n }\n\n closeAudio() {\n if (this.hasInitScriptNode) {\n this.scriptNode && this.scriptNode.disconnect(this.gainNode);\n this.gainNode && this.gainNode.disconnect(this.audioContext.destination);\n this.gainNode && this.gainNode.disconnect(this.mediaStreamAudioDestinationNode);\n }\n this.clear();\n }\n\n // 是否播放。。。\n audioEnabled(flag) {\n if (flag) {\n if (this.audioContext.state === 'suspended') {\n // resume\n this.audioContext.resume();\n }\n } else {\n if (this.audioContext.state === 'running') {\n // suspend\n this.audioContext.suspend();\n }\n }\n }\n\n isStateRunning() {\n return this.audioContext.state === 'running';\n }\n\n isStateSuspended() {\n return this.audioContext.state === 'suspended';\n }\n\n clear() {\n this.bufferList = [];\n }\n\n play(buffer, ts) {\n // if is mute\n if (this.isMute) {\n return;\n }\n\n this.hasAudio = true;\n\n this.bufferList.push({\n buffer,\n ts\n });\n\n if (this.bufferList.length > 20) {\n this.player.debug.warn('AudioContext', `bufferList is large: ${this.bufferList.length}`)\n\n // out of memory\n if (this.bufferList.length > 50) {\n this.bufferList.shift();\n }\n }\n // this.player.debug.log('AudioContext', `bufferList is ${this.bufferList.length}`)\n }\n\n pause() {\n this.audioSyncVideoOption = {\n diff: null\n };\n this.playing = false;\n this.clear();\n }\n\n resume() {\n this.playing = true;\n }\n\n\n\n\n}\n","import AudioContextLoader from \"./audioContextLoader\";\nimport AudioLoader from \"./audioLoader\";\n\nexport default class Audio {\n constructor(player) {\n const Loader = Audio.getLoaderFactory();\n return new Loader(player);\n }\n\n static getLoaderFactory() {\n return AudioContextLoader;\n }\n}\n","import Emitter from \"../utils/emitter\";\nimport {EVENTS, EVENTS_ERROR, JESSIBUCA_EVENTS} from \"../constant\";\nimport {calculationRate, now} from \"../utils\";\n\nexport default class FetchLoader extends Emitter {\n constructor(player) {\n super();\n this.player = player;\n this.playing = false;\n\n this.abortController = new AbortController();\n //\n this.streamRate = calculationRate(rate => {\n player.emit(EVENTS.kBps, (rate / 1024).toFixed(2));\n });\n player.debug.log('FetchStream', 'init');\n }\n\n destroy() {\n this.abort()\n this.off();\n this.streamRate = null;\n this.player.debug.log('FetchStream', 'destroy');\n }\n\n fetchStream(url) {\n const {demux} = this.player;\n this.player._times.streamStart = now();\n fetch(url, {signal: this.abortController.signal}).then((res) => {\n const reader = res.body.getReader();\n this.emit(EVENTS.streamSuccess);\n const fetchNext = () => {\n reader.read().then(({done, value}) => {\n if (done) {\n demux.close();\n } else {\n this.streamRate && this.streamRate(value.byteLength);\n demux.dispatch(value);\n fetchNext();\n }\n }\n ).catch((e) => {\n demux.close();\n // 这边会报用户 aborted a request 错误。\n this.emit(EVENTS_ERROR.fetchError, e);\n this.player.emit(EVENTS.error, EVENTS_ERROR.fetchError);\n this.abort();\n })\n }\n fetchNext();\n }).catch((e) => {\n this.abort();\n this.emit(EVENTS_ERROR.fetchError, e)\n this.player.emit(EVENTS.error, EVENTS_ERROR.fetchError);\n })\n }\n\n abort() {\n if (this.abortController) {\n this.abortController.abort();\n this.abortController = null\n }\n }\n\n\n}\n","import Emitter from \"../utils/emitter\";\nimport {EVENTS, EVENTS_ERROR, WEBSOCKET_STATUS} from \"../constant\";\nimport {calculationRate, now} from \"../utils\";\n\nexport default class WebsocketLoader extends Emitter {\n constructor(player) {\n super();\n this.player = player;\n this.socket = null;\n this.socketStatus = WEBSOCKET_STATUS.notConnect;\n this.wsUrl = null;\n //\n this.streamRate = calculationRate(rate => {\n player.emit(EVENTS.kBps, (rate / 1024).toFixed(2));\n });\n\n player.debug.log('WebsocketLoader', 'init');\n }\n\n destroy() {\n if (this.socket) {\n this.socket.close();\n this.socket = null;\n }\n this.socketStatus = WEBSOCKET_STATUS.notConnect;\n this.streamRate = null;\n this.wsUrl = null;\n this.off();\n this.player.debug.log('websocketLoader', 'destroy');\n }\n\n _createWebSocket() {\n const player = this.player;\n const {\n debug,\n events: {proxy},\n demux,\n } = player;\n\n this.socket = new WebSocket(this.wsUrl);\n this.socket.binaryType = 'arraybuffer';\n proxy(this.socket, 'open', () => {\n this.emit(EVENTS.streamSuccess);\n debug.log('websocketLoader', 'socket open');\n this.socketStatus = WEBSOCKET_STATUS.open;\n });\n\n proxy(this.socket, 'message', event => {\n this.streamRate && this.streamRate(event.data.byteLength);\n this._handleMessage(event.data);\n });\n\n\n proxy(this.socket, 'close', () => {\n debug.log('websocketLoader', 'socket close');\n this.emit(EVENTS.streamEnd);\n this.socketStatus = WEBSOCKET_STATUS.close;\n });\n\n proxy(this.socket, 'error', error => {\n debug.log('websocketLoader', 'socket error');\n this.emit(EVENTS_ERROR.websocketError, error);\n this.player.emit(EVENTS.error, EVENTS_ERROR.websocketError);\n this.socketStatus = WEBSOCKET_STATUS.error;\n demux.close();\n debug.log('websocketLoader', `socket error:`, error);\n });\n }\n\n //\n _handleMessage(message) {\n const {demux} = this.player;\n if (!demux) {\n this.player.debug.warn('websocketLoader', 'websocket handle message demux is null');\n return;\n }\n demux.dispatch(message);\n }\n\n\n fetchStream(url) {\n this.player._times.streamStart = now();\n this.wsUrl = url;\n this._createWebSocket();\n }\n\n\n}\n","import FetchLoader from \"./fetchLoader\";\nimport WebsocketLoader from \"./websocketLoader\";\nimport {PLAYER_PLAY_PROTOCOL} from \"../constant\";\n\nexport default class Stream {\n constructor(player) {\n const Loader = Stream.getLoaderFactory(player._opt.protocol);\n return new Loader(player);\n }\n\n static getLoaderFactory(protocol) {\n if (protocol === PLAYER_PLAY_PROTOCOL.fetch) {\n return FetchLoader;\n } else if (protocol === PLAYER_PLAY_PROTOCOL.websocket) {\n return WebsocketLoader;\n }\n }\n}\n","'use strict';\r\n\r\n// Last time updated: 2021-03-09 3:20:22 AM UTC\r\n\r\n// ________________\r\n// RecordRTC v5.6.2\r\n\r\n// Open-Sourced: https://github.com/muaz-khan/RecordRTC\r\n\r\n// --------------------------------------------------\r\n// Muaz Khan - www.MuazKhan.com\r\n// MIT License - www.WebRTC-Experiment.com/licence\r\n// --------------------------------------------------\r\n\r\n// ____________\r\n// RecordRTC.js\r\n\r\n/**\r\n * {@link https://github.com/muaz-khan/RecordRTC|RecordRTC} is a WebRTC JavaScript library for audio/video as well as screen activity recording. It supports Chrome, Firefox, Opera, Android, and Microsoft Edge. Platforms: Linux, Mac and Windows. \r\n * @summary Record audio, video or screen inside the browser.\r\n * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT}\r\n * @author {@link https://MuazKhan.com|Muaz Khan}\r\n * @typedef RecordRTC\r\n * @class\r\n * @example\r\n * var recorder = RecordRTC(mediaStream or [arrayOfMediaStream], {\r\n * type: 'video', // audio or video or gif or canvas\r\n * recorderType: MediaStreamRecorder || CanvasRecorder || StereoAudioRecorder || Etc\r\n * });\r\n * recorder.startRecording();\r\n * @see For further information:\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n * @param {MediaStream} mediaStream - Single media-stream object, array of media-streams, html-canvas-element, etc.\r\n * @param {object} config - {type:\"video\", recorderType: MediaStreamRecorder, disableLogs: true, numberOfAudioChannels: 1, bufferSize: 0, sampleRate: 0, desiredSampRate: 16000, video: HTMLVideoElement, etc.}\r\n */\r\n\r\nfunction RecordRTC(mediaStream, config) {\r\n if (!mediaStream) {\r\n throw 'First parameter is required.';\r\n }\r\n\r\n config = config || {\r\n type: 'video'\r\n };\r\n\r\n config = new RecordRTCConfiguration(mediaStream, config);\r\n\r\n // a reference to user's recordRTC object\r\n var self = this;\r\n\r\n function startRecording(config2) {\r\n if (!config.disableLogs) {\r\n console.log('RecordRTC version: ', self.version);\r\n }\r\n\r\n if (!!config2) {\r\n // allow users to set options using startRecording method\r\n // config2 is similar to main \"config\" object (second parameter over RecordRTC constructor)\r\n config = new RecordRTCConfiguration(mediaStream, config2);\r\n }\r\n\r\n if (!config.disableLogs) {\r\n console.log('started recording ' + config.type + ' stream.');\r\n }\r\n\r\n if (mediaRecorder) {\r\n mediaRecorder.clearRecordedData();\r\n mediaRecorder.record();\r\n\r\n setState('recording');\r\n\r\n if (self.recordingDuration) {\r\n handleRecordingDuration();\r\n }\r\n return self;\r\n }\r\n\r\n initRecorder(function() {\r\n if (self.recordingDuration) {\r\n handleRecordingDuration();\r\n }\r\n });\r\n\r\n return self;\r\n }\r\n\r\n function initRecorder(initCallback) {\r\n if (initCallback) {\r\n config.initCallback = function() {\r\n initCallback();\r\n initCallback = config.initCallback = null; // recorder.initRecorder should be call-backed once.\r\n };\r\n }\r\n\r\n var Recorder = new GetRecorderType(mediaStream, config);\r\n\r\n mediaRecorder = new Recorder(mediaStream, config);\r\n mediaRecorder.record();\r\n\r\n setState('recording');\r\n\r\n if (!config.disableLogs) {\r\n console.log('Initialized recorderType:', mediaRecorder.constructor.name, 'for output-type:', config.type);\r\n }\r\n }\r\n\r\n function stopRecording(callback) {\r\n callback = callback || function() {};\r\n\r\n if (!mediaRecorder) {\r\n warningLog();\r\n return;\r\n }\r\n\r\n if (self.state === 'paused') {\r\n self.resumeRecording();\r\n\r\n setTimeout(function() {\r\n stopRecording(callback);\r\n }, 1);\r\n return;\r\n }\r\n\r\n if (self.state !== 'recording' && !config.disableLogs) {\r\n console.warn('Recording state should be: \"recording\", however current state is: ', self.state);\r\n }\r\n\r\n if (!config.disableLogs) {\r\n console.log('Stopped recording ' + config.type + ' stream.');\r\n }\r\n\r\n if (config.type !== 'gif') {\r\n mediaRecorder.stop(_callback);\r\n } else {\r\n mediaRecorder.stop();\r\n _callback();\r\n }\r\n\r\n setState('stopped');\r\n\r\n function _callback(__blob) {\r\n if (!mediaRecorder) {\r\n if (typeof callback.call === 'function') {\r\n callback.call(self, '');\r\n } else {\r\n callback('');\r\n }\r\n return;\r\n }\r\n\r\n Object.keys(mediaRecorder).forEach(function(key) {\r\n if (typeof mediaRecorder[key] === 'function') {\r\n return;\r\n }\r\n\r\n self[key] = mediaRecorder[key];\r\n });\r\n\r\n var blob = mediaRecorder.blob;\r\n\r\n if (!blob) {\r\n if (__blob) {\r\n mediaRecorder.blob = blob = __blob;\r\n } else {\r\n throw 'Recording failed.';\r\n }\r\n }\r\n\r\n if (blob && !config.disableLogs) {\r\n console.log(blob.type, '->', bytesToSize(blob.size));\r\n }\r\n\r\n if (callback) {\r\n var url;\r\n\r\n try {\r\n url = URL.createObjectURL(blob);\r\n } catch (e) {}\r\n\r\n if (typeof callback.call === 'function') {\r\n callback.call(self, url);\r\n } else {\r\n callback(url);\r\n }\r\n }\r\n\r\n if (!config.autoWriteToDisk) {\r\n return;\r\n }\r\n\r\n getDataURL(function(dataURL) {\r\n var parameter = {};\r\n parameter[config.type + 'Blob'] = dataURL;\r\n DiskStorage.Store(parameter);\r\n });\r\n }\r\n }\r\n\r\n function pauseRecording() {\r\n if (!mediaRecorder) {\r\n warningLog();\r\n return;\r\n }\r\n\r\n if (self.state !== 'recording') {\r\n if (!config.disableLogs) {\r\n console.warn('Unable to pause the recording. Recording state: ', self.state);\r\n }\r\n return;\r\n }\r\n\r\n setState('paused');\r\n\r\n mediaRecorder.pause();\r\n\r\n if (!config.disableLogs) {\r\n console.log('Paused recording.');\r\n }\r\n }\r\n\r\n function resumeRecording() {\r\n if (!mediaRecorder) {\r\n warningLog();\r\n return;\r\n }\r\n\r\n if (self.state !== 'paused') {\r\n if (!config.disableLogs) {\r\n console.warn('Unable to resume the recording. Recording state: ', self.state);\r\n }\r\n return;\r\n }\r\n\r\n setState('recording');\r\n\r\n // not all libs have this method yet\r\n mediaRecorder.resume();\r\n\r\n if (!config.disableLogs) {\r\n console.log('Resumed recording.');\r\n }\r\n }\r\n\r\n function readFile(_blob) {\r\n postMessage(new FileReaderSync().readAsDataURL(_blob));\r\n }\r\n\r\n function getDataURL(callback, _mediaRecorder) {\r\n if (!callback) {\r\n throw 'Pass a callback function over getDataURL.';\r\n }\r\n\r\n var blob = _mediaRecorder ? _mediaRecorder.blob : (mediaRecorder || {}).blob;\r\n\r\n if (!blob) {\r\n if (!config.disableLogs) {\r\n console.warn('Blob encoder did not finish its job yet.');\r\n }\r\n\r\n setTimeout(function() {\r\n getDataURL(callback, _mediaRecorder);\r\n }, 1000);\r\n return;\r\n }\r\n\r\n if (typeof Worker !== 'undefined' && !navigator.mozGetUserMedia) {\r\n var webWorker = processInWebWorker(readFile);\r\n\r\n webWorker.onmessage = function(event) {\r\n callback(event.data);\r\n };\r\n\r\n webWorker.postMessage(blob);\r\n } else {\r\n var reader = new FileReader();\r\n reader.readAsDataURL(blob);\r\n reader.onload = function(event) {\r\n callback(event.target.result);\r\n };\r\n }\r\n\r\n function processInWebWorker(_function) {\r\n try {\r\n var blob = URL.createObjectURL(new Blob([_function.toString(),\r\n 'this.onmessage = function (eee) {' + _function.name + '(eee.data);}'\r\n ], {\r\n type: 'application/javascript'\r\n }));\r\n\r\n var worker = new Worker(blob);\r\n URL.revokeObjectURL(blob);\r\n return worker;\r\n } catch (e) {}\r\n }\r\n }\r\n\r\n function handleRecordingDuration(counter) {\r\n counter = counter || 0;\r\n\r\n if (self.state === 'paused') {\r\n setTimeout(function() {\r\n handleRecordingDuration(counter);\r\n }, 1000);\r\n return;\r\n }\r\n\r\n if (self.state === 'stopped') {\r\n return;\r\n }\r\n\r\n if (counter >= self.recordingDuration) {\r\n stopRecording(self.onRecordingStopped);\r\n return;\r\n }\r\n\r\n counter += 1000; // 1-second\r\n\r\n setTimeout(function() {\r\n handleRecordingDuration(counter);\r\n }, 1000);\r\n }\r\n\r\n function setState(state) {\r\n if (!self) {\r\n return;\r\n }\r\n\r\n self.state = state;\r\n\r\n if (typeof self.onStateChanged.call === 'function') {\r\n self.onStateChanged.call(self, state);\r\n } else {\r\n self.onStateChanged(state);\r\n }\r\n }\r\n\r\n var WARNING = 'It seems that recorder is destroyed or \"startRecording\" is not invoked for ' + config.type + ' recorder.';\r\n\r\n function warningLog() {\r\n if (config.disableLogs === true) {\r\n return;\r\n }\r\n\r\n console.warn(WARNING);\r\n }\r\n\r\n var mediaRecorder;\r\n\r\n var returnObject = {\r\n /**\r\n * This method starts the recording.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @example\r\n * var recorder = RecordRTC(mediaStream, {\r\n * type: 'video'\r\n * });\r\n * recorder.startRecording();\r\n */\r\n startRecording: startRecording,\r\n\r\n /**\r\n * This method stops the recording. It is strongly recommended to get \"blob\" or \"URI\" inside the callback to make sure all recorders finished their job.\r\n * @param {function} callback - Callback to get the recorded blob.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @example\r\n * recorder.stopRecording(function() {\r\n * // use either \"this\" or \"recorder\" object; both are identical\r\n * video.src = this.toURL();\r\n * var blob = this.getBlob();\r\n * });\r\n */\r\n stopRecording: stopRecording,\r\n\r\n /**\r\n * This method pauses the recording. You can resume recording using \"resumeRecording\" method.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @todo Firefox is unable to pause the recording. Fix it.\r\n * @example\r\n * recorder.pauseRecording(); // pause the recording\r\n * recorder.resumeRecording(); // resume again\r\n */\r\n pauseRecording: pauseRecording,\r\n\r\n /**\r\n * This method resumes the recording.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @example\r\n * recorder.pauseRecording(); // first of all, pause the recording\r\n * recorder.resumeRecording(); // now resume it\r\n */\r\n resumeRecording: resumeRecording,\r\n\r\n /**\r\n * This method initializes the recording.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @todo This method should be deprecated.\r\n * @example\r\n * recorder.initRecorder();\r\n */\r\n initRecorder: initRecorder,\r\n\r\n /**\r\n * Ask RecordRTC to auto-stop the recording after 5 minutes.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @example\r\n * var fiveMinutes = 5 * 1000 * 60;\r\n * recorder.setRecordingDuration(fiveMinutes, function() {\r\n * var blob = this.getBlob();\r\n * video.src = this.toURL();\r\n * });\r\n * \r\n * // or otherwise\r\n * recorder.setRecordingDuration(fiveMinutes).onRecordingStopped(function() {\r\n * var blob = this.getBlob();\r\n * video.src = this.toURL();\r\n * });\r\n */\r\n setRecordingDuration: function(recordingDuration, callback) {\r\n if (typeof recordingDuration === 'undefined') {\r\n throw 'recordingDuration is required.';\r\n }\r\n\r\n if (typeof recordingDuration !== 'number') {\r\n throw 'recordingDuration must be a number.';\r\n }\r\n\r\n self.recordingDuration = recordingDuration;\r\n self.onRecordingStopped = callback || function() {};\r\n\r\n return {\r\n onRecordingStopped: function(callback) {\r\n self.onRecordingStopped = callback;\r\n }\r\n };\r\n },\r\n\r\n /**\r\n * This method can be used to clear/reset all the recorded data.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @todo Figure out the difference between \"reset\" and \"clearRecordedData\" methods.\r\n * @example\r\n * recorder.clearRecordedData();\r\n */\r\n clearRecordedData: function() {\r\n if (!mediaRecorder) {\r\n warningLog();\r\n return;\r\n }\r\n\r\n mediaRecorder.clearRecordedData();\r\n\r\n if (!config.disableLogs) {\r\n console.log('Cleared old recorded data.');\r\n }\r\n },\r\n\r\n /**\r\n * Get the recorded blob. Use this method inside the \"stopRecording\" callback.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @example\r\n * recorder.stopRecording(function() {\r\n * var blob = this.getBlob();\r\n *\r\n * var file = new File([blob], 'filename.webm', {\r\n * type: 'video/webm'\r\n * });\r\n *\r\n * var formData = new FormData();\r\n * formData.append('file', file); // upload \"File\" object rather than a \"Blob\"\r\n * uploadToServer(formData);\r\n * });\r\n * @returns {Blob} Returns recorded data as \"Blob\" object.\r\n */\r\n getBlob: function() {\r\n if (!mediaRecorder) {\r\n warningLog();\r\n return;\r\n }\r\n\r\n return mediaRecorder.blob;\r\n },\r\n\r\n /**\r\n * Get data-URI instead of Blob.\r\n * @param {function} callback - Callback to get the Data-URI.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @example\r\n * recorder.stopRecording(function() {\r\n * recorder.getDataURL(function(dataURI) {\r\n * video.src = dataURI;\r\n * });\r\n * });\r\n */\r\n getDataURL: getDataURL,\r\n\r\n /**\r\n * Get virtual/temporary URL. Usage of this URL is limited to current tab.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @example\r\n * recorder.stopRecording(function() {\r\n * video.src = this.toURL();\r\n * });\r\n * @returns {String} Returns a virtual/temporary URL for the recorded \"Blob\".\r\n */\r\n toURL: function() {\r\n if (!mediaRecorder) {\r\n warningLog();\r\n return;\r\n }\r\n\r\n return URL.createObjectURL(mediaRecorder.blob);\r\n },\r\n\r\n /**\r\n * Get internal recording object (i.e. internal module) e.g. MutliStreamRecorder, MediaStreamRecorder, StereoAudioRecorder or WhammyRecorder etc.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @example\r\n * var internalRecorder = recorder.getInternalRecorder();\r\n * if(internalRecorder instanceof MultiStreamRecorder) {\r\n * internalRecorder.addStreams([newAudioStream]);\r\n * internalRecorder.resetVideoStreams([screenStream]);\r\n * }\r\n * @returns {Object} Returns internal recording object.\r\n */\r\n getInternalRecorder: function() {\r\n return mediaRecorder;\r\n },\r\n\r\n /**\r\n * Invoke save-as dialog to save the recorded blob into your disk.\r\n * @param {string} fileName - Set your own file name.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @example\r\n * recorder.stopRecording(function() {\r\n * this.save('file-name');\r\n *\r\n * // or manually:\r\n * invokeSaveAsDialog(this.getBlob(), 'filename.webm');\r\n * });\r\n */\r\n save: function(fileName) {\r\n if (!mediaRecorder) {\r\n warningLog();\r\n return;\r\n }\r\n\r\n invokeSaveAsDialog(mediaRecorder.blob, fileName);\r\n },\r\n\r\n /**\r\n * This method gets a blob from indexed-DB storage.\r\n * @param {function} callback - Callback to get the recorded blob.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @example\r\n * recorder.getFromDisk(function(dataURL) {\r\n * video.src = dataURL;\r\n * });\r\n */\r\n getFromDisk: function(callback) {\r\n if (!mediaRecorder) {\r\n warningLog();\r\n return;\r\n }\r\n\r\n RecordRTC.getFromDisk(config.type, callback);\r\n },\r\n\r\n /**\r\n * This method appends an array of webp images to the recorded video-blob. It takes an \"array\" object.\r\n * @type {Array.}\r\n * @param {Array} arrayOfWebPImages - Array of webp images.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @todo This method should be deprecated.\r\n * @example\r\n * var arrayOfWebPImages = [];\r\n * arrayOfWebPImages.push({\r\n * duration: index,\r\n * image: 'data:image/webp;base64,...'\r\n * });\r\n * recorder.setAdvertisementArray(arrayOfWebPImages);\r\n */\r\n setAdvertisementArray: function(arrayOfWebPImages) {\r\n config.advertisement = [];\r\n\r\n var length = arrayOfWebPImages.length;\r\n for (var i = 0; i < length; i++) {\r\n config.advertisement.push({\r\n duration: i,\r\n image: arrayOfWebPImages[i]\r\n });\r\n }\r\n },\r\n\r\n /**\r\n * It is equivalent to \"recorder.getBlob()\" method. Usage of \"getBlob\" is recommended, though.\r\n * @property {Blob} blob - Recorded Blob can be accessed using this property.\r\n * @memberof RecordRTC\r\n * @instance\r\n * @readonly\r\n * @example\r\n * recorder.stopRecording(function() {\r\n * var blob = this.blob;\r\n *\r\n * // below one is recommended\r\n * var blob = this.getBlob();\r\n * });\r\n */\r\n blob: null,\r\n\r\n /**\r\n * This works only with {recorderType:StereoAudioRecorder}. Use this property on \"stopRecording\" to verify the encoder's sample-rates.\r\n * @property {number} bufferSize - Buffer-size used to encode the WAV container\r\n * @memberof RecordRTC\r\n * @instance\r\n * @readonly\r\n * @example\r\n * recorder.stopRecording(function() {\r\n * alert('Recorder used this buffer-size: ' + this.bufferSize);\r\n * });\r\n */\r\n bufferSize: 0,\r\n\r\n /**\r\n * This works only with {recorderType:StereoAudioRecorder}. Use this property on \"stopRecording\" to verify the encoder's sample-rates.\r\n * @property {number} sampleRate - Sample-rates used to encode the WAV container\r\n * @memberof RecordRTC\r\n * @instance\r\n * @readonly\r\n * @example\r\n * recorder.stopRecording(function() {\r\n * alert('Recorder used these sample-rates: ' + this.sampleRate);\r\n * });\r\n */\r\n sampleRate: 0,\r\n\r\n /**\r\n * {recorderType:StereoAudioRecorder} returns ArrayBuffer object.\r\n * @property {ArrayBuffer} buffer - Audio ArrayBuffer, supported only in Chrome.\r\n * @memberof RecordRTC\r\n * @instance\r\n * @readonly\r\n * @example\r\n * recorder.stopRecording(function() {\r\n * var arrayBuffer = this.buffer;\r\n * alert(arrayBuffer.byteLength);\r\n * });\r\n */\r\n buffer: null,\r\n\r\n /**\r\n * This method resets the recorder. So that you can reuse single recorder instance many times.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @example\r\n * recorder.reset();\r\n * recorder.startRecording();\r\n */\r\n reset: function() {\r\n if (self.state === 'recording' && !config.disableLogs) {\r\n console.warn('Stop an active recorder.');\r\n }\r\n\r\n if (mediaRecorder && typeof mediaRecorder.clearRecordedData === 'function') {\r\n mediaRecorder.clearRecordedData();\r\n }\r\n mediaRecorder = null;\r\n setState('inactive');\r\n self.blob = null;\r\n },\r\n\r\n /**\r\n * This method is called whenever recorder's state changes. Use this as an \"event\".\r\n * @property {String} state - A recorder's state can be: recording, paused, stopped or inactive.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @example\r\n * recorder.onStateChanged = function(state) {\r\n * console.log('Recorder state: ', state);\r\n * };\r\n */\r\n onStateChanged: function(state) {\r\n if (!config.disableLogs) {\r\n console.log('Recorder state changed:', state);\r\n }\r\n },\r\n\r\n /**\r\n * A recorder can have inactive, recording, paused or stopped states.\r\n * @property {String} state - A recorder's state can be: recording, paused, stopped or inactive.\r\n * @memberof RecordRTC\r\n * @static\r\n * @readonly\r\n * @example\r\n * // this looper function will keep you updated about the recorder's states.\r\n * (function looper() {\r\n * document.querySelector('h1').innerHTML = 'Recorder\\'s state is: ' + recorder.state;\r\n * if(recorder.state === 'stopped') return; // ignore+stop\r\n * setTimeout(looper, 1000); // update after every 3-seconds\r\n * })();\r\n * recorder.startRecording();\r\n */\r\n state: 'inactive',\r\n\r\n /**\r\n * Get recorder's readonly state.\r\n * @method\r\n * @memberof RecordRTC\r\n * @example\r\n * var state = recorder.getState();\r\n * @returns {String} Returns recording state.\r\n */\r\n getState: function() {\r\n return self.state;\r\n },\r\n\r\n /**\r\n * Destroy RecordRTC instance. Clear all recorders and objects.\r\n * @method\r\n * @memberof RecordRTC\r\n * @example\r\n * recorder.destroy();\r\n */\r\n destroy: function() {\r\n var disableLogsCache = config.disableLogs;\r\n\r\n config = {\r\n disableLogs: true\r\n };\r\n self.reset();\r\n setState('destroyed');\r\n returnObject = self = null;\r\n\r\n if (Storage.AudioContextConstructor) {\r\n Storage.AudioContextConstructor.close();\r\n Storage.AudioContextConstructor = null;\r\n }\r\n\r\n config.disableLogs = disableLogsCache;\r\n\r\n if (!config.disableLogs) {\r\n console.log('RecordRTC is destroyed.');\r\n }\r\n },\r\n\r\n /**\r\n * RecordRTC version number\r\n * @property {String} version - Release version number.\r\n * @memberof RecordRTC\r\n * @static\r\n * @readonly\r\n * @example\r\n * alert(recorder.version);\r\n */\r\n version: '5.6.2'\r\n };\r\n\r\n if (!this) {\r\n self = returnObject;\r\n return returnObject;\r\n }\r\n\r\n // if someone wants to use RecordRTC with the \"new\" keyword.\r\n for (var prop in returnObject) {\r\n this[prop] = returnObject[prop];\r\n }\r\n\r\n self = this;\r\n\r\n return returnObject;\r\n}\r\n\r\nRecordRTC.version = '5.6.2';\r\n\r\nif (typeof module !== 'undefined' /* && !!module.exports*/ ) {\r\n module.exports = RecordRTC;\r\n}\r\n\r\nif (typeof define === 'function' && define.amd) {\r\n define('RecordRTC', [], function() {\r\n return RecordRTC;\r\n });\r\n}\n\r\nRecordRTC.getFromDisk = function(type, callback) {\r\n if (!callback) {\r\n throw 'callback is mandatory.';\r\n }\r\n\r\n console.log('Getting recorded ' + (type === 'all' ? 'blobs' : type + ' blob ') + ' from disk!');\r\n DiskStorage.Fetch(function(dataURL, _type) {\r\n if (type !== 'all' && _type === type + 'Blob' && callback) {\r\n callback(dataURL);\r\n }\r\n\r\n if (type === 'all' && callback) {\r\n callback(dataURL, _type.replace('Blob', ''));\r\n }\r\n });\r\n};\r\n\r\n/**\r\n * This method can be used to store recorded blobs into IndexedDB storage.\r\n * @param {object} options - {audio: Blob, video: Blob, gif: Blob}\r\n * @method\r\n * @memberof RecordRTC\r\n * @example\r\n * RecordRTC.writeToDisk({\r\n * audio: audioBlob,\r\n * video: videoBlob,\r\n * gif : gifBlob\r\n * });\r\n */\r\nRecordRTC.writeToDisk = function(options) {\r\n console.log('Writing recorded blob(s) to disk!');\r\n options = options || {};\r\n if (options.audio && options.video && options.gif) {\r\n options.audio.getDataURL(function(audioDataURL) {\r\n options.video.getDataURL(function(videoDataURL) {\r\n options.gif.getDataURL(function(gifDataURL) {\r\n DiskStorage.Store({\r\n audioBlob: audioDataURL,\r\n videoBlob: videoDataURL,\r\n gifBlob: gifDataURL\r\n });\r\n });\r\n });\r\n });\r\n } else if (options.audio && options.video) {\r\n options.audio.getDataURL(function(audioDataURL) {\r\n options.video.getDataURL(function(videoDataURL) {\r\n DiskStorage.Store({\r\n audioBlob: audioDataURL,\r\n videoBlob: videoDataURL\r\n });\r\n });\r\n });\r\n } else if (options.audio && options.gif) {\r\n options.audio.getDataURL(function(audioDataURL) {\r\n options.gif.getDataURL(function(gifDataURL) {\r\n DiskStorage.Store({\r\n audioBlob: audioDataURL,\r\n gifBlob: gifDataURL\r\n });\r\n });\r\n });\r\n } else if (options.video && options.gif) {\r\n options.video.getDataURL(function(videoDataURL) {\r\n options.gif.getDataURL(function(gifDataURL) {\r\n DiskStorage.Store({\r\n videoBlob: videoDataURL,\r\n gifBlob: gifDataURL\r\n });\r\n });\r\n });\r\n } else if (options.audio) {\r\n options.audio.getDataURL(function(audioDataURL) {\r\n DiskStorage.Store({\r\n audioBlob: audioDataURL\r\n });\r\n });\r\n } else if (options.video) {\r\n options.video.getDataURL(function(videoDataURL) {\r\n DiskStorage.Store({\r\n videoBlob: videoDataURL\r\n });\r\n });\r\n } else if (options.gif) {\r\n options.gif.getDataURL(function(gifDataURL) {\r\n DiskStorage.Store({\r\n gifBlob: gifDataURL\r\n });\r\n });\r\n }\r\n};\n\r\n// __________________________\r\n// RecordRTC-Configuration.js\r\n\r\n/**\r\n * {@link RecordRTCConfiguration} is an inner/private helper for {@link RecordRTC}.\r\n * @summary It configures the 2nd parameter passed over {@link RecordRTC} and returns a valid \"config\" object.\r\n * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT}\r\n * @author {@link https://MuazKhan.com|Muaz Khan}\r\n * @typedef RecordRTCConfiguration\r\n * @class\r\n * @example\r\n * var options = RecordRTCConfiguration(mediaStream, options);\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n * @param {MediaStream} mediaStream - MediaStream object fetched using getUserMedia API or generated using captureStreamUntilEnded or WebAudio API.\r\n * @param {object} config - {type:\"video\", disableLogs: true, numberOfAudioChannels: 1, bufferSize: 0, sampleRate: 0, video: HTMLVideoElement, getNativeBlob:true, etc.}\r\n */\r\n\r\nfunction RecordRTCConfiguration(mediaStream, config) {\r\n if (!config.recorderType && !config.type) {\r\n if (!!config.audio && !!config.video) {\r\n config.type = 'video';\r\n } else if (!!config.audio && !config.video) {\r\n config.type = 'audio';\r\n }\r\n }\r\n\r\n if (config.recorderType && !config.type) {\r\n if (config.recorderType === WhammyRecorder || config.recorderType === CanvasRecorder || (typeof WebAssemblyRecorder !== 'undefined' && config.recorderType === WebAssemblyRecorder)) {\r\n config.type = 'video';\r\n } else if (config.recorderType === GifRecorder) {\r\n config.type = 'gif';\r\n } else if (config.recorderType === StereoAudioRecorder) {\r\n config.type = 'audio';\r\n } else if (config.recorderType === MediaStreamRecorder) {\r\n if (getTracks(mediaStream, 'audio').length && getTracks(mediaStream, 'video').length) {\r\n config.type = 'video';\r\n } else if (!getTracks(mediaStream, 'audio').length && getTracks(mediaStream, 'video').length) {\r\n config.type = 'video';\r\n } else if (getTracks(mediaStream, 'audio').length && !getTracks(mediaStream, 'video').length) {\r\n config.type = 'audio';\r\n } else {\r\n // config.type = 'UnKnown';\r\n }\r\n }\r\n }\r\n\r\n if (typeof MediaStreamRecorder !== 'undefined' && typeof MediaRecorder !== 'undefined' && 'requestData' in MediaRecorder.prototype) {\r\n if (!config.mimeType) {\r\n config.mimeType = 'video/webm';\r\n }\r\n\r\n if (!config.type) {\r\n config.type = config.mimeType.split('/')[0];\r\n }\r\n\r\n if (!config.bitsPerSecond) {\r\n // config.bitsPerSecond = 128000;\r\n }\r\n }\r\n\r\n // consider default type=audio\r\n if (!config.type) {\r\n if (config.mimeType) {\r\n config.type = config.mimeType.split('/')[0];\r\n }\r\n if (!config.type) {\r\n config.type = 'audio';\r\n }\r\n }\r\n\r\n return config;\r\n}\n\r\n// __________________\r\n// GetRecorderType.js\r\n\r\n/**\r\n * {@link GetRecorderType} is an inner/private helper for {@link RecordRTC}.\r\n * @summary It returns best recorder-type available for your browser.\r\n * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT}\r\n * @author {@link https://MuazKhan.com|Muaz Khan}\r\n * @typedef GetRecorderType\r\n * @class\r\n * @example\r\n * var RecorderType = GetRecorderType(options);\r\n * var recorder = new RecorderType(options);\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n * @param {MediaStream} mediaStream - MediaStream object fetched using getUserMedia API or generated using captureStreamUntilEnded or WebAudio API.\r\n * @param {object} config - {type:\"video\", disableLogs: true, numberOfAudioChannels: 1, bufferSize: 0, sampleRate: 0, video: HTMLVideoElement, etc.}\r\n */\r\n\r\nfunction GetRecorderType(mediaStream, config) {\r\n var recorder;\r\n\r\n // StereoAudioRecorder can work with all three: Edge, Firefox and Chrome\r\n // todo: detect if it is Edge, then auto use: StereoAudioRecorder\r\n if (isChrome || isEdge || isOpera) {\r\n // Media Stream Recording API has not been implemented in chrome yet;\r\n // That's why using WebAudio API to record stereo audio in WAV format\r\n recorder = StereoAudioRecorder;\r\n }\r\n\r\n if (typeof MediaRecorder !== 'undefined' && 'requestData' in MediaRecorder.prototype && !isChrome) {\r\n recorder = MediaStreamRecorder;\r\n }\r\n\r\n // video recorder (in WebM format)\r\n if (config.type === 'video' && (isChrome || isOpera)) {\r\n recorder = WhammyRecorder;\r\n\r\n if (typeof WebAssemblyRecorder !== 'undefined' && typeof ReadableStream !== 'undefined') {\r\n recorder = WebAssemblyRecorder;\r\n }\r\n }\r\n\r\n // video recorder (in Gif format)\r\n if (config.type === 'gif') {\r\n recorder = GifRecorder;\r\n }\r\n\r\n // html2canvas recording!\r\n if (config.type === 'canvas') {\r\n recorder = CanvasRecorder;\r\n }\r\n\r\n if (isMediaRecorderCompatible() && recorder !== CanvasRecorder && recorder !== GifRecorder && typeof MediaRecorder !== 'undefined' && 'requestData' in MediaRecorder.prototype) {\r\n if (getTracks(mediaStream, 'video').length || getTracks(mediaStream, 'audio').length) {\r\n // audio-only recording\r\n if (config.type === 'audio') {\r\n if (typeof MediaRecorder.isTypeSupported === 'function' && MediaRecorder.isTypeSupported('audio/webm')) {\r\n recorder = MediaStreamRecorder;\r\n }\r\n // else recorder = StereoAudioRecorder;\r\n } else {\r\n // video or screen tracks\r\n if (typeof MediaRecorder.isTypeSupported === 'function' && MediaRecorder.isTypeSupported('video/webm')) {\r\n recorder = MediaStreamRecorder;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (mediaStream instanceof Array && mediaStream.length) {\r\n recorder = MultiStreamRecorder;\r\n }\r\n\r\n if (config.recorderType) {\r\n recorder = config.recorderType;\r\n }\r\n\r\n if (!config.disableLogs && !!recorder && !!recorder.name) {\r\n console.log('Using recorderType:', recorder.name || recorder.constructor.name);\r\n }\r\n\r\n if (!recorder && isSafari) {\r\n recorder = MediaStreamRecorder;\r\n }\r\n\r\n return recorder;\r\n}\n\r\n// _____________\r\n// MRecordRTC.js\r\n\r\n/**\r\n * MRecordRTC runs on top of {@link RecordRTC} to bring multiple recordings in a single place, by providing simple API.\r\n * @summary MRecordRTC stands for \"Multiple-RecordRTC\".\r\n * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT}\r\n * @author {@link https://MuazKhan.com|Muaz Khan}\r\n * @typedef MRecordRTC\r\n * @class\r\n * @example\r\n * var recorder = new MRecordRTC();\r\n * recorder.addStream(MediaStream);\r\n * recorder.mediaType = {\r\n * audio: true, // or StereoAudioRecorder or MediaStreamRecorder\r\n * video: true, // or WhammyRecorder or MediaStreamRecorder or WebAssemblyRecorder or CanvasRecorder\r\n * gif: true // or GifRecorder\r\n * };\r\n * // mimeType is optional and should be set only in advance cases.\r\n * recorder.mimeType = {\r\n * audio: 'audio/wav',\r\n * video: 'video/webm',\r\n * gif: 'image/gif'\r\n * };\r\n * recorder.startRecording();\r\n * @see For further information:\r\n * @see {@link https://github.com/muaz-khan/RecordRTC/tree/master/MRecordRTC|MRecordRTC Source Code}\r\n * @param {MediaStream} mediaStream - MediaStream object fetched using getUserMedia API or generated using captureStreamUntilEnded or WebAudio API.\r\n * @requires {@link RecordRTC}\r\n */\r\n\r\nfunction MRecordRTC(mediaStream) {\r\n\r\n /**\r\n * This method attaches MediaStream object to {@link MRecordRTC}.\r\n * @param {MediaStream} mediaStream - A MediaStream object, either fetched using getUserMedia API, or generated using captureStreamUntilEnded or WebAudio API.\r\n * @method\r\n * @memberof MRecordRTC\r\n * @example\r\n * recorder.addStream(MediaStream);\r\n */\r\n this.addStream = function(_mediaStream) {\r\n if (_mediaStream) {\r\n mediaStream = _mediaStream;\r\n }\r\n };\r\n\r\n /**\r\n * This property can be used to set the recording type e.g. audio, or video, or gif, or canvas.\r\n * @property {object} mediaType - {audio: true, video: true, gif: true}\r\n * @memberof MRecordRTC\r\n * @example\r\n * var recorder = new MRecordRTC();\r\n * recorder.mediaType = {\r\n * audio: true, // TRUE or StereoAudioRecorder or MediaStreamRecorder\r\n * video: true, // TRUE or WhammyRecorder or MediaStreamRecorder or WebAssemblyRecorder or CanvasRecorder\r\n * gif : true // TRUE or GifRecorder\r\n * };\r\n */\r\n this.mediaType = {\r\n audio: true,\r\n video: true\r\n };\r\n\r\n /**\r\n * This method starts recording.\r\n * @method\r\n * @memberof MRecordRTC\r\n * @example\r\n * recorder.startRecording();\r\n */\r\n this.startRecording = function() {\r\n var mediaType = this.mediaType;\r\n var recorderType;\r\n var mimeType = this.mimeType || {\r\n audio: null,\r\n video: null,\r\n gif: null\r\n };\r\n\r\n if (typeof mediaType.audio !== 'function' && isMediaRecorderCompatible() && !getTracks(mediaStream, 'audio').length) {\r\n mediaType.audio = false;\r\n }\r\n\r\n if (typeof mediaType.video !== 'function' && isMediaRecorderCompatible() && !getTracks(mediaStream, 'video').length) {\r\n mediaType.video = false;\r\n }\r\n\r\n if (typeof mediaType.gif !== 'function' && isMediaRecorderCompatible() && !getTracks(mediaStream, 'video').length) {\r\n mediaType.gif = false;\r\n }\r\n\r\n if (!mediaType.audio && !mediaType.video && !mediaType.gif) {\r\n throw 'MediaStream must have either audio or video tracks.';\r\n }\r\n\r\n if (!!mediaType.audio) {\r\n recorderType = null;\r\n if (typeof mediaType.audio === 'function') {\r\n recorderType = mediaType.audio;\r\n }\r\n\r\n this.audioRecorder = new RecordRTC(mediaStream, {\r\n type: 'audio',\r\n bufferSize: this.bufferSize,\r\n sampleRate: this.sampleRate,\r\n numberOfAudioChannels: this.numberOfAudioChannels || 2,\r\n disableLogs: this.disableLogs,\r\n recorderType: recorderType,\r\n mimeType: mimeType.audio,\r\n timeSlice: this.timeSlice,\r\n onTimeStamp: this.onTimeStamp\r\n });\r\n\r\n if (!mediaType.video) {\r\n this.audioRecorder.startRecording();\r\n }\r\n }\r\n\r\n if (!!mediaType.video) {\r\n recorderType = null;\r\n if (typeof mediaType.video === 'function') {\r\n recorderType = mediaType.video;\r\n }\r\n\r\n var newStream = mediaStream;\r\n\r\n if (isMediaRecorderCompatible() && !!mediaType.audio && typeof mediaType.audio === 'function') {\r\n var videoTrack = getTracks(mediaStream, 'video')[0];\r\n\r\n if (isFirefox) {\r\n newStream = new MediaStream();\r\n newStream.addTrack(videoTrack);\r\n\r\n if (recorderType && recorderType === WhammyRecorder) {\r\n // Firefox does NOT supports webp-encoding yet\r\n // But Firefox do supports WebAssemblyRecorder\r\n recorderType = MediaStreamRecorder;\r\n }\r\n } else {\r\n newStream = new MediaStream();\r\n newStream.addTrack(videoTrack);\r\n }\r\n }\r\n\r\n this.videoRecorder = new RecordRTC(newStream, {\r\n type: 'video',\r\n video: this.video,\r\n canvas: this.canvas,\r\n frameInterval: this.frameInterval || 10,\r\n disableLogs: this.disableLogs,\r\n recorderType: recorderType,\r\n mimeType: mimeType.video,\r\n timeSlice: this.timeSlice,\r\n onTimeStamp: this.onTimeStamp,\r\n workerPath: this.workerPath,\r\n webAssemblyPath: this.webAssemblyPath,\r\n frameRate: this.frameRate, // used by WebAssemblyRecorder; values: usually 30; accepts any.\r\n bitrate: this.bitrate // used by WebAssemblyRecorder; values: 0 to 1000+\r\n });\r\n\r\n if (!mediaType.audio) {\r\n this.videoRecorder.startRecording();\r\n }\r\n }\r\n\r\n if (!!mediaType.audio && !!mediaType.video) {\r\n var self = this;\r\n\r\n var isSingleRecorder = isMediaRecorderCompatible() === true;\r\n\r\n if (mediaType.audio instanceof StereoAudioRecorder && !!mediaType.video) {\r\n isSingleRecorder = false;\r\n } else if (mediaType.audio !== true && mediaType.video !== true && mediaType.audio !== mediaType.video) {\r\n isSingleRecorder = false;\r\n }\r\n\r\n if (isSingleRecorder === true) {\r\n self.audioRecorder = null;\r\n self.videoRecorder.startRecording();\r\n } else {\r\n self.videoRecorder.initRecorder(function() {\r\n self.audioRecorder.initRecorder(function() {\r\n // Both recorders are ready to record things accurately\r\n self.videoRecorder.startRecording();\r\n self.audioRecorder.startRecording();\r\n });\r\n });\r\n }\r\n }\r\n\r\n if (!!mediaType.gif) {\r\n recorderType = null;\r\n if (typeof mediaType.gif === 'function') {\r\n recorderType = mediaType.gif;\r\n }\r\n this.gifRecorder = new RecordRTC(mediaStream, {\r\n type: 'gif',\r\n frameRate: this.frameRate || 200,\r\n quality: this.quality || 10,\r\n disableLogs: this.disableLogs,\r\n recorderType: recorderType,\r\n mimeType: mimeType.gif\r\n });\r\n this.gifRecorder.startRecording();\r\n }\r\n };\r\n\r\n /**\r\n * This method stops recording.\r\n * @param {function} callback - Callback function is invoked when all encoders finished their jobs.\r\n * @method\r\n * @memberof MRecordRTC\r\n * @example\r\n * recorder.stopRecording(function(recording){\r\n * var audioBlob = recording.audio;\r\n * var videoBlob = recording.video;\r\n * var gifBlob = recording.gif;\r\n * });\r\n */\r\n this.stopRecording = function(callback) {\r\n callback = callback || function() {};\r\n\r\n if (this.audioRecorder) {\r\n this.audioRecorder.stopRecording(function(blobURL) {\r\n callback(blobURL, 'audio');\r\n });\r\n }\r\n\r\n if (this.videoRecorder) {\r\n this.videoRecorder.stopRecording(function(blobURL) {\r\n callback(blobURL, 'video');\r\n });\r\n }\r\n\r\n if (this.gifRecorder) {\r\n this.gifRecorder.stopRecording(function(blobURL) {\r\n callback(blobURL, 'gif');\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * This method pauses recording.\r\n * @method\r\n * @memberof MRecordRTC\r\n * @example\r\n * recorder.pauseRecording();\r\n */\r\n this.pauseRecording = function() {\r\n if (this.audioRecorder) {\r\n this.audioRecorder.pauseRecording();\r\n }\r\n\r\n if (this.videoRecorder) {\r\n this.videoRecorder.pauseRecording();\r\n }\r\n\r\n if (this.gifRecorder) {\r\n this.gifRecorder.pauseRecording();\r\n }\r\n };\r\n\r\n /**\r\n * This method resumes recording.\r\n * @method\r\n * @memberof MRecordRTC\r\n * @example\r\n * recorder.resumeRecording();\r\n */\r\n this.resumeRecording = function() {\r\n if (this.audioRecorder) {\r\n this.audioRecorder.resumeRecording();\r\n }\r\n\r\n if (this.videoRecorder) {\r\n this.videoRecorder.resumeRecording();\r\n }\r\n\r\n if (this.gifRecorder) {\r\n this.gifRecorder.resumeRecording();\r\n }\r\n };\r\n\r\n /**\r\n * This method can be used to manually get all recorded blobs.\r\n * @param {function} callback - All recorded blobs are passed back to the \"callback\" function.\r\n * @method\r\n * @memberof MRecordRTC\r\n * @example\r\n * recorder.getBlob(function(recording){\r\n * var audioBlob = recording.audio;\r\n * var videoBlob = recording.video;\r\n * var gifBlob = recording.gif;\r\n * });\r\n * // or\r\n * var audioBlob = recorder.getBlob().audio;\r\n * var videoBlob = recorder.getBlob().video;\r\n */\r\n this.getBlob = function(callback) {\r\n var output = {};\r\n\r\n if (this.audioRecorder) {\r\n output.audio = this.audioRecorder.getBlob();\r\n }\r\n\r\n if (this.videoRecorder) {\r\n output.video = this.videoRecorder.getBlob();\r\n }\r\n\r\n if (this.gifRecorder) {\r\n output.gif = this.gifRecorder.getBlob();\r\n }\r\n\r\n if (callback) {\r\n callback(output);\r\n }\r\n\r\n return output;\r\n };\r\n\r\n /**\r\n * Destroy all recorder instances.\r\n * @method\r\n * @memberof MRecordRTC\r\n * @example\r\n * recorder.destroy();\r\n */\r\n this.destroy = function() {\r\n if (this.audioRecorder) {\r\n this.audioRecorder.destroy();\r\n this.audioRecorder = null;\r\n }\r\n\r\n if (this.videoRecorder) {\r\n this.videoRecorder.destroy();\r\n this.videoRecorder = null;\r\n }\r\n\r\n if (this.gifRecorder) {\r\n this.gifRecorder.destroy();\r\n this.gifRecorder = null;\r\n }\r\n };\r\n\r\n /**\r\n * This method can be used to manually get all recorded blobs' DataURLs.\r\n * @param {function} callback - All recorded blobs' DataURLs are passed back to the \"callback\" function.\r\n * @method\r\n * @memberof MRecordRTC\r\n * @example\r\n * recorder.getDataURL(function(recording){\r\n * var audioDataURL = recording.audio;\r\n * var videoDataURL = recording.video;\r\n * var gifDataURL = recording.gif;\r\n * });\r\n */\r\n this.getDataURL = function(callback) {\r\n this.getBlob(function(blob) {\r\n if (blob.audio && blob.video) {\r\n getDataURL(blob.audio, function(_audioDataURL) {\r\n getDataURL(blob.video, function(_videoDataURL) {\r\n callback({\r\n audio: _audioDataURL,\r\n video: _videoDataURL\r\n });\r\n });\r\n });\r\n } else if (blob.audio) {\r\n getDataURL(blob.audio, function(_audioDataURL) {\r\n callback({\r\n audio: _audioDataURL\r\n });\r\n });\r\n } else if (blob.video) {\r\n getDataURL(blob.video, function(_videoDataURL) {\r\n callback({\r\n video: _videoDataURL\r\n });\r\n });\r\n }\r\n });\r\n\r\n function getDataURL(blob, callback00) {\r\n if (typeof Worker !== 'undefined') {\r\n var webWorker = processInWebWorker(function readFile(_blob) {\r\n postMessage(new FileReaderSync().readAsDataURL(_blob));\r\n });\r\n\r\n webWorker.onmessage = function(event) {\r\n callback00(event.data);\r\n };\r\n\r\n webWorker.postMessage(blob);\r\n } else {\r\n var reader = new FileReader();\r\n reader.readAsDataURL(blob);\r\n reader.onload = function(event) {\r\n callback00(event.target.result);\r\n };\r\n }\r\n }\r\n\r\n function processInWebWorker(_function) {\r\n var blob = URL.createObjectURL(new Blob([_function.toString(),\r\n 'this.onmessage = function (eee) {' + _function.name + '(eee.data);}'\r\n ], {\r\n type: 'application/javascript'\r\n }));\r\n\r\n var worker = new Worker(blob);\r\n var url;\r\n if (typeof URL !== 'undefined') {\r\n url = URL;\r\n } else if (typeof webkitURL !== 'undefined') {\r\n url = webkitURL;\r\n } else {\r\n throw 'Neither URL nor webkitURL detected.';\r\n }\r\n url.revokeObjectURL(blob);\r\n return worker;\r\n }\r\n };\r\n\r\n /**\r\n * This method can be used to ask {@link MRecordRTC} to write all recorded blobs into IndexedDB storage.\r\n * @method\r\n * @memberof MRecordRTC\r\n * @example\r\n * recorder.writeToDisk();\r\n */\r\n this.writeToDisk = function() {\r\n RecordRTC.writeToDisk({\r\n audio: this.audioRecorder,\r\n video: this.videoRecorder,\r\n gif: this.gifRecorder\r\n });\r\n };\r\n\r\n /**\r\n * This method can be used to invoke a save-as dialog for all recorded blobs.\r\n * @param {object} args - {audio: 'audio-name', video: 'video-name', gif: 'gif-name'}\r\n * @method\r\n * @memberof MRecordRTC\r\n * @example\r\n * recorder.save({\r\n * audio: 'audio-file-name',\r\n * video: 'video-file-name',\r\n * gif : 'gif-file-name'\r\n * });\r\n */\r\n this.save = function(args) {\r\n args = args || {\r\n audio: true,\r\n video: true,\r\n gif: true\r\n };\r\n\r\n if (!!args.audio && this.audioRecorder) {\r\n this.audioRecorder.save(typeof args.audio === 'string' ? args.audio : '');\r\n }\r\n\r\n if (!!args.video && this.videoRecorder) {\r\n this.videoRecorder.save(typeof args.video === 'string' ? args.video : '');\r\n }\r\n if (!!args.gif && this.gifRecorder) {\r\n this.gifRecorder.save(typeof args.gif === 'string' ? args.gif : '');\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * This method can be used to get all recorded blobs from IndexedDB storage.\r\n * @param {string} type - 'all' or 'audio' or 'video' or 'gif'\r\n * @param {function} callback - Callback function to get all stored blobs.\r\n * @method\r\n * @memberof MRecordRTC\r\n * @example\r\n * MRecordRTC.getFromDisk('all', function(dataURL, type){\r\n * if(type === 'audio') { }\r\n * if(type === 'video') { }\r\n * if(type === 'gif') { }\r\n * });\r\n */\r\nMRecordRTC.getFromDisk = RecordRTC.getFromDisk;\r\n\r\n/**\r\n * This method can be used to store recorded blobs into IndexedDB storage.\r\n * @param {object} options - {audio: Blob, video: Blob, gif: Blob}\r\n * @method\r\n * @memberof MRecordRTC\r\n * @example\r\n * MRecordRTC.writeToDisk({\r\n * audio: audioBlob,\r\n * video: videoBlob,\r\n * gif : gifBlob\r\n * });\r\n */\r\nMRecordRTC.writeToDisk = RecordRTC.writeToDisk;\r\n\r\nif (typeof RecordRTC !== 'undefined') {\r\n RecordRTC.MRecordRTC = MRecordRTC;\r\n}\n\r\nvar browserFakeUserAgent = 'Fake/5.0 (FakeOS) AppleWebKit/123 (KHTML, like Gecko) Fake/12.3.4567.89 Fake/123.45';\r\n\r\n(function(that) {\r\n if (!that) {\r\n return;\r\n }\r\n\r\n if (typeof window !== 'undefined') {\r\n return;\r\n }\r\n\r\n if (typeof global === 'undefined') {\r\n return;\r\n }\r\n\r\n global.navigator = {\r\n userAgent: browserFakeUserAgent,\r\n getUserMedia: function() {}\r\n };\r\n\r\n if (!global.console) {\r\n global.console = {};\r\n }\r\n\r\n if (typeof global.console.log === 'undefined' || typeof global.console.error === 'undefined') {\r\n global.console.error = global.console.log = global.console.log || function() {\r\n console.log(arguments);\r\n };\r\n }\r\n\r\n if (typeof document === 'undefined') {\r\n /*global document:true */\r\n that.document = {\r\n documentElement: {\r\n appendChild: function() {\r\n return '';\r\n }\r\n }\r\n };\r\n\r\n document.createElement = document.captureStream = document.mozCaptureStream = function() {\r\n var obj = {\r\n getContext: function() {\r\n return obj;\r\n },\r\n play: function() {},\r\n pause: function() {},\r\n drawImage: function() {},\r\n toDataURL: function() {\r\n return '';\r\n },\r\n style: {}\r\n };\r\n return obj;\r\n };\r\n\r\n that.HTMLVideoElement = function() {};\r\n }\r\n\r\n if (typeof location === 'undefined') {\r\n /*global location:true */\r\n that.location = {\r\n protocol: 'file:',\r\n href: '',\r\n hash: ''\r\n };\r\n }\r\n\r\n if (typeof screen === 'undefined') {\r\n /*global screen:true */\r\n that.screen = {\r\n width: 0,\r\n height: 0\r\n };\r\n }\r\n\r\n if (typeof URL === 'undefined') {\r\n /*global screen:true */\r\n that.URL = {\r\n createObjectURL: function() {\r\n return '';\r\n },\r\n revokeObjectURL: function() {\r\n return '';\r\n }\r\n };\r\n }\r\n\r\n /*global window:true */\r\n that.window = global;\r\n})(typeof global !== 'undefined' ? global : null);\n\r\n// _____________________________\r\n// Cross-Browser-Declarations.js\r\n\r\n// animation-frame used in WebM recording\r\n\r\n/*jshint -W079 */\r\nvar requestAnimationFrame = window.requestAnimationFrame;\r\nif (typeof requestAnimationFrame === 'undefined') {\r\n if (typeof webkitRequestAnimationFrame !== 'undefined') {\r\n /*global requestAnimationFrame:true */\r\n requestAnimationFrame = webkitRequestAnimationFrame;\r\n } else if (typeof mozRequestAnimationFrame !== 'undefined') {\r\n /*global requestAnimationFrame:true */\r\n requestAnimationFrame = mozRequestAnimationFrame;\r\n } else if (typeof msRequestAnimationFrame !== 'undefined') {\r\n /*global requestAnimationFrame:true */\r\n requestAnimationFrame = msRequestAnimationFrame;\r\n } else if (typeof requestAnimationFrame === 'undefined') {\r\n // via: https://gist.github.com/paulirish/1579671\r\n var lastTime = 0;\r\n\r\n /*global requestAnimationFrame:true */\r\n requestAnimationFrame = function(callback, element) {\r\n var currTime = new Date().getTime();\r\n var timeToCall = Math.max(0, 16 - (currTime - lastTime));\r\n var id = setTimeout(function() {\r\n callback(currTime + timeToCall);\r\n }, timeToCall);\r\n lastTime = currTime + timeToCall;\r\n return id;\r\n };\r\n }\r\n}\r\n\r\n/*jshint -W079 */\r\nvar cancelAnimationFrame = window.cancelAnimationFrame;\r\nif (typeof cancelAnimationFrame === 'undefined') {\r\n if (typeof webkitCancelAnimationFrame !== 'undefined') {\r\n /*global cancelAnimationFrame:true */\r\n cancelAnimationFrame = webkitCancelAnimationFrame;\r\n } else if (typeof mozCancelAnimationFrame !== 'undefined') {\r\n /*global cancelAnimationFrame:true */\r\n cancelAnimationFrame = mozCancelAnimationFrame;\r\n } else if (typeof msCancelAnimationFrame !== 'undefined') {\r\n /*global cancelAnimationFrame:true */\r\n cancelAnimationFrame = msCancelAnimationFrame;\r\n } else if (typeof cancelAnimationFrame === 'undefined') {\r\n /*global cancelAnimationFrame:true */\r\n cancelAnimationFrame = function(id) {\r\n clearTimeout(id);\r\n };\r\n }\r\n}\r\n\r\n// WebAudio API representer\r\nvar AudioContext = window.AudioContext;\r\n\r\nif (typeof AudioContext === 'undefined') {\r\n if (typeof webkitAudioContext !== 'undefined') {\r\n /*global AudioContext:true */\r\n AudioContext = webkitAudioContext;\r\n }\r\n\r\n if (typeof mozAudioContext !== 'undefined') {\r\n /*global AudioContext:true */\r\n AudioContext = mozAudioContext;\r\n }\r\n}\r\n\r\n/*jshint -W079 */\r\nvar URL = window.URL;\r\n\r\nif (typeof URL === 'undefined' && typeof webkitURL !== 'undefined') {\r\n /*global URL:true */\r\n URL = webkitURL;\r\n}\r\n\r\nif (typeof navigator !== 'undefined' && typeof navigator.getUserMedia === 'undefined') { // maybe window.navigator?\r\n if (typeof navigator.webkitGetUserMedia !== 'undefined') {\r\n navigator.getUserMedia = navigator.webkitGetUserMedia;\r\n }\r\n\r\n if (typeof navigator.mozGetUserMedia !== 'undefined') {\r\n navigator.getUserMedia = navigator.mozGetUserMedia;\r\n }\r\n}\r\n\r\nvar isEdge = navigator.userAgent.indexOf('Edge') !== -1 && (!!navigator.msSaveBlob || !!navigator.msSaveOrOpenBlob);\r\nvar isOpera = !!window.opera || navigator.userAgent.indexOf('OPR/') !== -1;\r\nvar isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1 && ('netscape' in window) && / rv:/.test(navigator.userAgent);\r\nvar isChrome = (!isOpera && !isEdge && !!navigator.webkitGetUserMedia) || isElectron() || navigator.userAgent.toLowerCase().indexOf('chrome/') !== -1;\r\n\r\nvar isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\r\n\r\nif (isSafari && !isChrome && navigator.userAgent.indexOf('CriOS') !== -1) {\r\n isSafari = false;\r\n isChrome = true;\r\n}\r\n\r\nvar MediaStream = window.MediaStream;\r\n\r\nif (typeof MediaStream === 'undefined' && typeof webkitMediaStream !== 'undefined') {\r\n MediaStream = webkitMediaStream;\r\n}\r\n\r\n/*global MediaStream:true */\r\nif (typeof MediaStream !== 'undefined') {\r\n // override \"stop\" method for all browsers\r\n if (typeof MediaStream.prototype.stop === 'undefined') {\r\n MediaStream.prototype.stop = function() {\r\n this.getTracks().forEach(function(track) {\r\n track.stop();\r\n });\r\n };\r\n }\r\n}\r\n\r\n// below function via: http://goo.gl/B3ae8c\r\n/**\r\n * Return human-readable file size.\r\n * @param {number} bytes - Pass bytes and get formatted string.\r\n * @returns {string} - formatted string\r\n * @example\r\n * bytesToSize(1024*1024*5) === '5 GB'\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n */\r\nfunction bytesToSize(bytes) {\r\n var k = 1000;\r\n var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];\r\n if (bytes === 0) {\r\n return '0 Bytes';\r\n }\r\n var i = parseInt(Math.floor(Math.log(bytes) / Math.log(k)), 10);\r\n return (bytes / Math.pow(k, i)).toPrecision(3) + ' ' + sizes[i];\r\n}\r\n\r\n/**\r\n * @param {Blob} file - File or Blob object. This parameter is required.\r\n * @param {string} fileName - Optional file name e.g. \"Recorded-Video.webm\"\r\n * @example\r\n * invokeSaveAsDialog(blob or file, [optional] fileName);\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n */\r\nfunction invokeSaveAsDialog(file, fileName) {\r\n if (!file) {\r\n throw 'Blob object is required.';\r\n }\r\n\r\n if (!file.type) {\r\n try {\r\n file.type = 'video/webm';\r\n } catch (e) {}\r\n }\r\n\r\n var fileExtension = (file.type || 'video/webm').split('/')[1];\r\n if (fileExtension.indexOf(';') !== -1) {\r\n // extended mimetype, e.g. 'video/webm;codecs=vp8,opus'\r\n fileExtension = fileExtension.split(';')[0];\r\n }\r\n if (fileName && fileName.indexOf('.') !== -1) {\r\n var splitted = fileName.split('.');\r\n fileName = splitted[0];\r\n fileExtension = splitted[1];\r\n }\r\n\r\n var fileFullName = (fileName || (Math.round(Math.random() * 9999999999) + 888888888)) + '.' + fileExtension;\r\n\r\n if (typeof navigator.msSaveOrOpenBlob !== 'undefined') {\r\n return navigator.msSaveOrOpenBlob(file, fileFullName);\r\n } else if (typeof navigator.msSaveBlob !== 'undefined') {\r\n return navigator.msSaveBlob(file, fileFullName);\r\n }\r\n\r\n var hyperlink = document.createElement('a');\r\n hyperlink.href = URL.createObjectURL(file);\r\n hyperlink.download = fileFullName;\r\n\r\n hyperlink.style = 'display:none;opacity:0;color:transparent;';\r\n (document.body || document.documentElement).appendChild(hyperlink);\r\n\r\n if (typeof hyperlink.click === 'function') {\r\n hyperlink.click();\r\n } else {\r\n hyperlink.target = '_blank';\r\n hyperlink.dispatchEvent(new MouseEvent('click', {\r\n view: window,\r\n bubbles: true,\r\n cancelable: true\r\n }));\r\n }\r\n\r\n URL.revokeObjectURL(hyperlink.href);\r\n}\r\n\r\n/**\r\n * from: https://github.com/cheton/is-electron/blob/master/index.js\r\n **/\r\nfunction isElectron() {\r\n // Renderer process\r\n if (typeof window !== 'undefined' && typeof window.process === 'object' && window.process.type === 'renderer') {\r\n return true;\r\n }\r\n\r\n // Main process\r\n if (typeof process !== 'undefined' && typeof process.versions === 'object' && !!process.versions.electron) {\r\n return true;\r\n }\r\n\r\n // Detect the user agent when the `nodeIntegration` option is set to true\r\n if (typeof navigator === 'object' && typeof navigator.userAgent === 'string' && navigator.userAgent.indexOf('Electron') >= 0) {\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction getTracks(stream, kind) {\r\n if (!stream || !stream.getTracks) {\r\n return [];\r\n }\r\n\r\n return stream.getTracks().filter(function(t) {\r\n return t.kind === (kind || 'audio');\r\n });\r\n}\r\n\r\nfunction setSrcObject(stream, element) {\r\n if ('srcObject' in element) {\r\n element.srcObject = stream;\r\n } else if ('mozSrcObject' in element) {\r\n element.mozSrcObject = stream;\r\n } else {\r\n element.srcObject = stream;\r\n }\r\n}\r\n\r\n/**\r\n * @param {Blob} file - File or Blob object.\r\n * @param {function} callback - Callback function.\r\n * @example\r\n * getSeekableBlob(blob or file, callback);\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n */\r\nfunction getSeekableBlob(inputBlob, callback) {\r\n // EBML.js copyrights goes to: https://github.com/legokichi/ts-ebml\r\n if (typeof EBML === 'undefined') {\r\n throw new Error('Please link: https://www.webrtc-experiment.com/EBML.js');\r\n }\r\n\r\n var reader = new EBML.Reader();\r\n var decoder = new EBML.Decoder();\r\n var tools = EBML.tools;\r\n\r\n var fileReader = new FileReader();\r\n fileReader.onload = function(e) {\r\n var ebmlElms = decoder.decode(this.result);\r\n ebmlElms.forEach(function(element) {\r\n reader.read(element);\r\n });\r\n reader.stop();\r\n var refinedMetadataBuf = tools.makeMetadataSeekable(reader.metadatas, reader.duration, reader.cues);\r\n var body = this.result.slice(reader.metadataSize);\r\n var newBlob = new Blob([refinedMetadataBuf, body], {\r\n type: 'video/webm'\r\n });\r\n\r\n callback(newBlob);\r\n };\r\n fileReader.readAsArrayBuffer(inputBlob);\r\n}\r\n\r\nif (typeof RecordRTC !== 'undefined') {\r\n RecordRTC.invokeSaveAsDialog = invokeSaveAsDialog;\r\n RecordRTC.getTracks = getTracks;\r\n RecordRTC.getSeekableBlob = getSeekableBlob;\r\n RecordRTC.bytesToSize = bytesToSize;\r\n RecordRTC.isElectron = isElectron;\r\n}\r\n\r\n// __________ (used to handle stuff like http://goo.gl/xmE5eg) issue #129\r\n// Storage.js\r\n\r\n/**\r\n * Storage is a standalone object used by {@link RecordRTC} to store reusable objects e.g. \"new AudioContext\".\r\n * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT}\r\n * @author {@link https://MuazKhan.com|Muaz Khan}\r\n * @example\r\n * Storage.AudioContext === webkitAudioContext\r\n * @property {webkitAudioContext} AudioContext - Keeps a reference to AudioContext object.\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n */\r\n\r\nvar Storage = {};\r\n\r\nif (typeof AudioContext !== 'undefined') {\r\n Storage.AudioContext = AudioContext;\r\n} else if (typeof webkitAudioContext !== 'undefined') {\r\n Storage.AudioContext = webkitAudioContext;\r\n}\r\n\r\nif (typeof RecordRTC !== 'undefined') {\r\n RecordRTC.Storage = Storage;\r\n}\n\r\nfunction isMediaRecorderCompatible() {\r\n if (isFirefox || isSafari || isEdge) {\r\n return true;\r\n }\r\n\r\n var nVer = navigator.appVersion;\r\n var nAgt = navigator.userAgent;\r\n var fullVersion = '' + parseFloat(navigator.appVersion);\r\n var majorVersion = parseInt(navigator.appVersion, 10);\r\n var nameOffset, verOffset, ix;\r\n\r\n if (isChrome || isOpera) {\r\n verOffset = nAgt.indexOf('Chrome');\r\n fullVersion = nAgt.substring(verOffset + 7);\r\n }\r\n\r\n // trim the fullVersion string at semicolon/space if present\r\n if ((ix = fullVersion.indexOf(';')) !== -1) {\r\n fullVersion = fullVersion.substring(0, ix);\r\n }\r\n\r\n if ((ix = fullVersion.indexOf(' ')) !== -1) {\r\n fullVersion = fullVersion.substring(0, ix);\r\n }\r\n\r\n majorVersion = parseInt('' + fullVersion, 10);\r\n\r\n if (isNaN(majorVersion)) {\r\n fullVersion = '' + parseFloat(navigator.appVersion);\r\n majorVersion = parseInt(navigator.appVersion, 10);\r\n }\r\n\r\n return majorVersion >= 49;\r\n}\n\r\n// ______________________\r\n// MediaStreamRecorder.js\r\n\r\n/**\r\n * MediaStreamRecorder is an abstraction layer for {@link https://w3c.github.io/mediacapture-record/MediaRecorder.html|MediaRecorder API}. It is used by {@link RecordRTC} to record MediaStream(s) in both Chrome and Firefox.\r\n * @summary Runs top over {@link https://w3c.github.io/mediacapture-record/MediaRecorder.html|MediaRecorder API}.\r\n * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT}\r\n * @author {@link https://github.com/muaz-khan|Muaz Khan}\r\n * @typedef MediaStreamRecorder\r\n * @class\r\n * @example\r\n * var config = {\r\n * mimeType: 'video/webm', // vp8, vp9, h264, mkv, opus/vorbis\r\n * audioBitsPerSecond : 256 * 8 * 1024,\r\n * videoBitsPerSecond : 256 * 8 * 1024,\r\n * bitsPerSecond: 256 * 8 * 1024, // if this is provided, skip above two\r\n * checkForInactiveTracks: true,\r\n * timeSlice: 1000, // concatenate intervals based blobs\r\n * ondataavailable: function() {} // get intervals based blobs\r\n * }\r\n * var recorder = new MediaStreamRecorder(mediaStream, config);\r\n * recorder.record();\r\n * recorder.stop(function(blob) {\r\n * video.src = URL.createObjectURL(blob);\r\n *\r\n * // or\r\n * var blob = recorder.blob;\r\n * });\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n * @param {MediaStream} mediaStream - MediaStream object fetched using getUserMedia API or generated using captureStreamUntilEnded or WebAudio API.\r\n * @param {object} config - {disableLogs:true, initCallback: function, mimeType: \"video/webm\", timeSlice: 1000}\r\n * @throws Will throw an error if first argument \"MediaStream\" is missing. Also throws error if \"MediaRecorder API\" are not supported by the browser.\r\n */\r\n\r\nfunction MediaStreamRecorder(mediaStream, config) {\r\n var self = this;\r\n\r\n if (typeof mediaStream === 'undefined') {\r\n throw 'First argument \"MediaStream\" is required.';\r\n }\r\n\r\n if (typeof MediaRecorder === 'undefined') {\r\n throw 'Your browser does not support the Media Recorder API. Please try other modules e.g. WhammyRecorder or StereoAudioRecorder.';\r\n }\r\n\r\n config = config || {\r\n // bitsPerSecond: 256 * 8 * 1024,\r\n mimeType: 'video/webm'\r\n };\r\n\r\n if (config.type === 'audio') {\r\n if (getTracks(mediaStream, 'video').length && getTracks(mediaStream, 'audio').length) {\r\n var stream;\r\n if (!!navigator.mozGetUserMedia) {\r\n stream = new MediaStream();\r\n stream.addTrack(getTracks(mediaStream, 'audio')[0]);\r\n } else {\r\n // webkitMediaStream\r\n stream = new MediaStream(getTracks(mediaStream, 'audio'));\r\n }\r\n mediaStream = stream;\r\n }\r\n\r\n if (!config.mimeType || config.mimeType.toString().toLowerCase().indexOf('audio') === -1) {\r\n config.mimeType = isChrome ? 'audio/webm' : 'audio/ogg';\r\n }\r\n\r\n if (config.mimeType && config.mimeType.toString().toLowerCase() !== 'audio/ogg' && !!navigator.mozGetUserMedia) {\r\n // forcing better codecs on Firefox (via #166)\r\n config.mimeType = 'audio/ogg';\r\n }\r\n }\r\n\r\n var arrayOfBlobs = [];\r\n\r\n /**\r\n * This method returns array of blobs. Use only with \"timeSlice\". Its useful to preview recording anytime, without using the \"stop\" method.\r\n * @method\r\n * @memberof MediaStreamRecorder\r\n * @example\r\n * var arrayOfBlobs = recorder.getArrayOfBlobs();\r\n * @returns {Array} Returns array of recorded blobs.\r\n */\r\n this.getArrayOfBlobs = function() {\r\n return arrayOfBlobs;\r\n };\r\n\r\n /**\r\n * This method records MediaStream.\r\n * @method\r\n * @memberof MediaStreamRecorder\r\n * @example\r\n * recorder.record();\r\n */\r\n this.record = function() {\r\n // set defaults\r\n self.blob = null;\r\n self.clearRecordedData();\r\n self.timestamps = [];\r\n allStates = [];\r\n arrayOfBlobs = [];\r\n\r\n var recorderHints = config;\r\n\r\n if (!config.disableLogs) {\r\n console.log('Passing following config over MediaRecorder API.', recorderHints);\r\n }\r\n\r\n if (mediaRecorder) {\r\n // mandatory to make sure Firefox doesn't fails to record streams 3-4 times without reloading the page.\r\n mediaRecorder = null;\r\n }\r\n\r\n if (isChrome && !isMediaRecorderCompatible()) {\r\n // to support video-only recording on stable\r\n recorderHints = 'video/vp8';\r\n }\r\n\r\n if (typeof MediaRecorder.isTypeSupported === 'function' && recorderHints.mimeType) {\r\n if (!MediaRecorder.isTypeSupported(recorderHints.mimeType)) {\r\n if (!config.disableLogs) {\r\n console.warn('MediaRecorder API seems unable to record mimeType:', recorderHints.mimeType);\r\n }\r\n\r\n recorderHints.mimeType = config.type === 'audio' ? 'audio/webm' : 'video/webm';\r\n }\r\n }\r\n\r\n // using MediaRecorder API here\r\n try {\r\n mediaRecorder = new MediaRecorder(mediaStream, recorderHints);\r\n\r\n // reset\r\n config.mimeType = recorderHints.mimeType;\r\n } catch (e) {\r\n // chrome-based fallback\r\n mediaRecorder = new MediaRecorder(mediaStream);\r\n }\r\n\r\n // old hack?\r\n if (recorderHints.mimeType && !MediaRecorder.isTypeSupported && 'canRecordMimeType' in mediaRecorder && mediaRecorder.canRecordMimeType(recorderHints.mimeType) === false) {\r\n if (!config.disableLogs) {\r\n console.warn('MediaRecorder API seems unable to record mimeType:', recorderHints.mimeType);\r\n }\r\n }\r\n\r\n // Dispatching OnDataAvailable Handler\r\n mediaRecorder.ondataavailable = function(e) {\r\n if (e.data) {\r\n allStates.push('ondataavailable: ' + bytesToSize(e.data.size));\r\n }\r\n\r\n if (typeof config.timeSlice === 'number') {\r\n if (e.data && e.data.size) {\r\n arrayOfBlobs.push(e.data);\r\n updateTimeStamp();\r\n\r\n if (typeof config.ondataavailable === 'function') {\r\n // intervals based blobs\r\n var blob = config.getNativeBlob ? e.data : new Blob([e.data], {\r\n type: getMimeType(recorderHints)\r\n });\r\n config.ondataavailable(blob);\r\n }\r\n }\r\n return;\r\n }\r\n\r\n if (!e.data || !e.data.size || e.data.size < 100 || self.blob) {\r\n // make sure that stopRecording always getting fired\r\n // even if there is invalid data\r\n if (self.recordingCallback) {\r\n self.recordingCallback(new Blob([], {\r\n type: getMimeType(recorderHints)\r\n }));\r\n self.recordingCallback = null;\r\n }\r\n return;\r\n }\r\n\r\n self.blob = config.getNativeBlob ? e.data : new Blob([e.data], {\r\n type: getMimeType(recorderHints)\r\n });\r\n\r\n if (self.recordingCallback) {\r\n self.recordingCallback(self.blob);\r\n self.recordingCallback = null;\r\n }\r\n };\r\n\r\n mediaRecorder.onstart = function() {\r\n allStates.push('started');\r\n };\r\n\r\n mediaRecorder.onpause = function() {\r\n allStates.push('paused');\r\n };\r\n\r\n mediaRecorder.onresume = function() {\r\n allStates.push('resumed');\r\n };\r\n\r\n mediaRecorder.onstop = function() {\r\n allStates.push('stopped');\r\n };\r\n\r\n mediaRecorder.onerror = function(error) {\r\n if (!error) {\r\n return;\r\n }\r\n\r\n if (!error.name) {\r\n error.name = 'UnknownError';\r\n }\r\n\r\n allStates.push('error: ' + error);\r\n\r\n if (!config.disableLogs) {\r\n // via: https://w3c.github.io/mediacapture-record/MediaRecorder.html#exception-summary\r\n if (error.name.toString().toLowerCase().indexOf('invalidstate') !== -1) {\r\n console.error('The MediaRecorder is not in a state in which the proposed operation is allowed to be executed.', error);\r\n } else if (error.name.toString().toLowerCase().indexOf('notsupported') !== -1) {\r\n console.error('MIME type (', recorderHints.mimeType, ') is not supported.', error);\r\n } else if (error.name.toString().toLowerCase().indexOf('security') !== -1) {\r\n console.error('MediaRecorder security error', error);\r\n }\r\n\r\n // older code below\r\n else if (error.name === 'OutOfMemory') {\r\n console.error('The UA has exhaused the available memory. User agents SHOULD provide as much additional information as possible in the message attribute.', error);\r\n } else if (error.name === 'IllegalStreamModification') {\r\n console.error('A modification to the stream has occurred that makes it impossible to continue recording. An example would be the addition of a Track while recording is occurring. User agents SHOULD provide as much additional information as possible in the message attribute.', error);\r\n } else if (error.name === 'OtherRecordingError') {\r\n console.error('Used for an fatal error other than those listed above. User agents SHOULD provide as much additional information as possible in the message attribute.', error);\r\n } else if (error.name === 'GenericError') {\r\n console.error('The UA cannot provide the codec or recording option that has been requested.', error);\r\n } else {\r\n console.error('MediaRecorder Error', error);\r\n }\r\n }\r\n\r\n (function(looper) {\r\n if (!self.manuallyStopped && mediaRecorder && mediaRecorder.state === 'inactive') {\r\n delete config.timeslice;\r\n\r\n // 10 minutes, enough?\r\n mediaRecorder.start(10 * 60 * 1000);\r\n return;\r\n }\r\n\r\n setTimeout(looper, 1000);\r\n })();\r\n\r\n if (mediaRecorder.state !== 'inactive' && mediaRecorder.state !== 'stopped') {\r\n mediaRecorder.stop();\r\n }\r\n };\r\n\r\n if (typeof config.timeSlice === 'number') {\r\n updateTimeStamp();\r\n mediaRecorder.start(config.timeSlice);\r\n } else {\r\n // default is 60 minutes; enough?\r\n // use config => {timeSlice: 1000} otherwise\r\n\r\n mediaRecorder.start(3.6e+6);\r\n }\r\n\r\n if (config.initCallback) {\r\n config.initCallback(); // old code\r\n }\r\n };\r\n\r\n /**\r\n * @property {Array} timestamps - Array of time stamps\r\n * @memberof MediaStreamRecorder\r\n * @example\r\n * console.log(recorder.timestamps);\r\n */\r\n this.timestamps = [];\r\n\r\n function updateTimeStamp() {\r\n self.timestamps.push(new Date().getTime());\r\n\r\n if (typeof config.onTimeStamp === 'function') {\r\n config.onTimeStamp(self.timestamps[self.timestamps.length - 1], self.timestamps);\r\n }\r\n }\r\n\r\n function getMimeType(secondObject) {\r\n if (mediaRecorder && mediaRecorder.mimeType) {\r\n return mediaRecorder.mimeType;\r\n }\r\n\r\n return secondObject.mimeType || 'video/webm';\r\n }\r\n\r\n /**\r\n * This method stops recording MediaStream.\r\n * @param {function} callback - Callback function, that is used to pass recorded blob back to the callee.\r\n * @method\r\n * @memberof MediaStreamRecorder\r\n * @example\r\n * recorder.stop(function(blob) {\r\n * video.src = URL.createObjectURL(blob);\r\n * });\r\n */\r\n this.stop = function(callback) {\r\n callback = callback || function() {};\r\n\r\n self.manuallyStopped = true; // used inside the mediaRecorder.onerror\r\n\r\n if (!mediaRecorder) {\r\n return;\r\n }\r\n\r\n this.recordingCallback = callback;\r\n\r\n if (mediaRecorder.state === 'recording') {\r\n mediaRecorder.stop();\r\n }\r\n\r\n if (typeof config.timeSlice === 'number') {\r\n setTimeout(function() {\r\n self.blob = new Blob(arrayOfBlobs, {\r\n type: getMimeType(config)\r\n });\r\n\r\n self.recordingCallback(self.blob);\r\n }, 100);\r\n }\r\n };\r\n\r\n /**\r\n * This method pauses the recording process.\r\n * @method\r\n * @memberof MediaStreamRecorder\r\n * @example\r\n * recorder.pause();\r\n */\r\n this.pause = function() {\r\n if (!mediaRecorder) {\r\n return;\r\n }\r\n\r\n if (mediaRecorder.state === 'recording') {\r\n mediaRecorder.pause();\r\n }\r\n };\r\n\r\n /**\r\n * This method resumes the recording process.\r\n * @method\r\n * @memberof MediaStreamRecorder\r\n * @example\r\n * recorder.resume();\r\n */\r\n this.resume = function() {\r\n if (!mediaRecorder) {\r\n return;\r\n }\r\n\r\n if (mediaRecorder.state === 'paused') {\r\n mediaRecorder.resume();\r\n }\r\n };\r\n\r\n /**\r\n * This method resets currently recorded data.\r\n * @method\r\n * @memberof MediaStreamRecorder\r\n * @example\r\n * recorder.clearRecordedData();\r\n */\r\n this.clearRecordedData = function() {\r\n if (mediaRecorder && mediaRecorder.state === 'recording') {\r\n self.stop(clearRecordedDataCB);\r\n }\r\n\r\n clearRecordedDataCB();\r\n };\r\n\r\n function clearRecordedDataCB() {\r\n arrayOfBlobs = [];\r\n mediaRecorder = null;\r\n self.timestamps = [];\r\n }\r\n\r\n // Reference to \"MediaRecorder\" object\r\n var mediaRecorder;\r\n\r\n /**\r\n * Access to native MediaRecorder API\r\n * @method\r\n * @memberof MediaStreamRecorder\r\n * @instance\r\n * @example\r\n * var internal = recorder.getInternalRecorder();\r\n * internal.ondataavailable = function() {}; // override\r\n * internal.stream, internal.onpause, internal.onstop, etc.\r\n * @returns {Object} Returns internal recording object.\r\n */\r\n this.getInternalRecorder = function() {\r\n return mediaRecorder;\r\n };\r\n\r\n function isMediaStreamActive() {\r\n if ('active' in mediaStream) {\r\n if (!mediaStream.active) {\r\n return false;\r\n }\r\n } else if ('ended' in mediaStream) { // old hack\r\n if (mediaStream.ended) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * @property {Blob} blob - Recorded data as \"Blob\" object.\r\n * @memberof MediaStreamRecorder\r\n * @example\r\n * recorder.stop(function() {\r\n * var blob = recorder.blob;\r\n * });\r\n */\r\n this.blob = null;\r\n\r\n\r\n /**\r\n * Get MediaRecorder readonly state.\r\n * @method\r\n * @memberof MediaStreamRecorder\r\n * @example\r\n * var state = recorder.getState();\r\n * @returns {String} Returns recording state.\r\n */\r\n this.getState = function() {\r\n if (!mediaRecorder) {\r\n return 'inactive';\r\n }\r\n\r\n return mediaRecorder.state || 'inactive';\r\n };\r\n\r\n // list of all recording states\r\n var allStates = [];\r\n\r\n /**\r\n * Get MediaRecorder all recording states.\r\n * @method\r\n * @memberof MediaStreamRecorder\r\n * @example\r\n * var state = recorder.getAllStates();\r\n * @returns {Array} Returns all recording states\r\n */\r\n this.getAllStates = function() {\r\n return allStates;\r\n };\r\n\r\n // if any Track within the MediaStream is muted or not enabled at any time, \r\n // the browser will only record black frames \r\n // or silence since that is the content produced by the Track\r\n // so we need to stopRecording as soon as any single track ends.\r\n if (typeof config.checkForInactiveTracks === 'undefined') {\r\n config.checkForInactiveTracks = false; // disable to minimize CPU usage\r\n }\r\n\r\n var self = this;\r\n\r\n // this method checks if media stream is stopped\r\n // or if any track is ended.\r\n (function looper() {\r\n if (!mediaRecorder || config.checkForInactiveTracks === false) {\r\n return;\r\n }\r\n\r\n if (isMediaStreamActive() === false) {\r\n if (!config.disableLogs) {\r\n console.log('MediaStream seems stopped.');\r\n }\r\n self.stop();\r\n return;\r\n }\r\n\r\n setTimeout(looper, 1000); // check every second\r\n })();\r\n\r\n // for debugging\r\n this.name = 'MediaStreamRecorder';\r\n this.toString = function() {\r\n return this.name;\r\n };\r\n}\r\n\r\nif (typeof RecordRTC !== 'undefined') {\r\n RecordRTC.MediaStreamRecorder = MediaStreamRecorder;\r\n}\r\n\r\n// source code from: http://typedarray.org/wp-content/projects/WebAudioRecorder/script.js\r\n// https://github.com/mattdiamond/Recorderjs#license-mit\r\n// ______________________\r\n// StereoAudioRecorder.js\r\n\r\n/**\r\n * StereoAudioRecorder is a standalone class used by {@link RecordRTC} to bring \"stereo\" audio-recording in chrome.\r\n * @summary JavaScript standalone object for stereo audio recording.\r\n * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT}\r\n * @author {@link https://MuazKhan.com|Muaz Khan}\r\n * @typedef StereoAudioRecorder\r\n * @class\r\n * @example\r\n * var recorder = new StereoAudioRecorder(MediaStream, {\r\n * sampleRate: 44100,\r\n * bufferSize: 4096\r\n * });\r\n * recorder.record();\r\n * recorder.stop(function(blob) {\r\n * video.src = URL.createObjectURL(blob);\r\n * });\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n * @param {MediaStream} mediaStream - MediaStream object fetched using getUserMedia API or generated using captureStreamUntilEnded or WebAudio API.\r\n * @param {object} config - {sampleRate: 44100, bufferSize: 4096, numberOfAudioChannels: 1, etc.}\r\n */\r\n\r\nfunction StereoAudioRecorder(mediaStream, config) {\r\n if (!getTracks(mediaStream, 'audio').length) {\r\n throw 'Your stream has no audio tracks.';\r\n }\r\n\r\n config = config || {};\r\n\r\n var self = this;\r\n\r\n // variables\r\n var leftchannel = [];\r\n var rightchannel = [];\r\n var recording = false;\r\n var recordingLength = 0;\r\n var jsAudioNode;\r\n\r\n var numberOfAudioChannels = 2;\r\n\r\n /**\r\n * Set sample rates such as 8K or 16K. Reference: http://stackoverflow.com/a/28977136/552182\r\n * @property {number} desiredSampRate - Desired Bits per sample * 1000\r\n * @memberof StereoAudioRecorder\r\n * @instance\r\n * @example\r\n * var recorder = StereoAudioRecorder(mediaStream, {\r\n * desiredSampRate: 16 * 1000 // bits-per-sample * 1000\r\n * });\r\n */\r\n var desiredSampRate = config.desiredSampRate;\r\n\r\n // backward compatibility\r\n if (config.leftChannel === true) {\r\n numberOfAudioChannels = 1;\r\n }\r\n\r\n if (config.numberOfAudioChannels === 1) {\r\n numberOfAudioChannels = 1;\r\n }\r\n\r\n if (!numberOfAudioChannels || numberOfAudioChannels < 1) {\r\n numberOfAudioChannels = 2;\r\n }\r\n\r\n if (!config.disableLogs) {\r\n console.log('StereoAudioRecorder is set to record number of channels: ' + numberOfAudioChannels);\r\n }\r\n\r\n // if any Track within the MediaStream is muted or not enabled at any time, \r\n // the browser will only record black frames \r\n // or silence since that is the content produced by the Track\r\n // so we need to stopRecording as soon as any single track ends.\r\n if (typeof config.checkForInactiveTracks === 'undefined') {\r\n config.checkForInactiveTracks = true;\r\n }\r\n\r\n function isMediaStreamActive() {\r\n if (config.checkForInactiveTracks === false) {\r\n // always return \"true\"\r\n return true;\r\n }\r\n\r\n if ('active' in mediaStream) {\r\n if (!mediaStream.active) {\r\n return false;\r\n }\r\n } else if ('ended' in mediaStream) { // old hack\r\n if (mediaStream.ended) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * This method records MediaStream.\r\n * @method\r\n * @memberof StereoAudioRecorder\r\n * @example\r\n * recorder.record();\r\n */\r\n this.record = function() {\r\n if (isMediaStreamActive() === false) {\r\n throw 'Please make sure MediaStream is active.';\r\n }\r\n\r\n resetVariables();\r\n\r\n isAudioProcessStarted = isPaused = false;\r\n recording = true;\r\n\r\n if (typeof config.timeSlice !== 'undefined') {\r\n looper();\r\n }\r\n };\r\n\r\n function mergeLeftRightBuffers(config, callback) {\r\n function mergeAudioBuffers(config, cb) {\r\n var numberOfAudioChannels = config.numberOfAudioChannels;\r\n\r\n // todo: \"slice(0)\" --- is it causes loop? Should be removed?\r\n var leftBuffers = config.leftBuffers.slice(0);\r\n var rightBuffers = config.rightBuffers.slice(0);\r\n var sampleRate = config.sampleRate;\r\n var internalInterleavedLength = config.internalInterleavedLength;\r\n var desiredSampRate = config.desiredSampRate;\r\n\r\n if (numberOfAudioChannels === 2) {\r\n leftBuffers = mergeBuffers(leftBuffers, internalInterleavedLength);\r\n rightBuffers = mergeBuffers(rightBuffers, internalInterleavedLength);\r\n\r\n if (desiredSampRate) {\r\n leftBuffers = interpolateArray(leftBuffers, desiredSampRate, sampleRate);\r\n rightBuffers = interpolateArray(rightBuffers, desiredSampRate, sampleRate);\r\n }\r\n }\r\n\r\n if (numberOfAudioChannels === 1) {\r\n leftBuffers = mergeBuffers(leftBuffers, internalInterleavedLength);\r\n\r\n if (desiredSampRate) {\r\n leftBuffers = interpolateArray(leftBuffers, desiredSampRate, sampleRate);\r\n }\r\n }\r\n\r\n // set sample rate as desired sample rate\r\n if (desiredSampRate) {\r\n sampleRate = desiredSampRate;\r\n }\r\n\r\n // for changing the sampling rate, reference:\r\n // http://stackoverflow.com/a/28977136/552182\r\n function interpolateArray(data, newSampleRate, oldSampleRate) {\r\n var fitCount = Math.round(data.length * (newSampleRate / oldSampleRate));\r\n var newData = [];\r\n var springFactor = Number((data.length - 1) / (fitCount - 1));\r\n newData[0] = data[0];\r\n for (var i = 1; i < fitCount - 1; i++) {\r\n var tmp = i * springFactor;\r\n var before = Number(Math.floor(tmp)).toFixed();\r\n var after = Number(Math.ceil(tmp)).toFixed();\r\n var atPoint = tmp - before;\r\n newData[i] = linearInterpolate(data[before], data[after], atPoint);\r\n }\r\n newData[fitCount - 1] = data[data.length - 1];\r\n return newData;\r\n }\r\n\r\n function linearInterpolate(before, after, atPoint) {\r\n return before + (after - before) * atPoint;\r\n }\r\n\r\n function mergeBuffers(channelBuffer, rLength) {\r\n var result = new Float64Array(rLength);\r\n var offset = 0;\r\n var lng = channelBuffer.length;\r\n\r\n for (var i = 0; i < lng; i++) {\r\n var buffer = channelBuffer[i];\r\n result.set(buffer, offset);\r\n offset += buffer.length;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n function interleave(leftChannel, rightChannel) {\r\n var length = leftChannel.length + rightChannel.length;\r\n\r\n var result = new Float64Array(length);\r\n\r\n var inputIndex = 0;\r\n\r\n for (var index = 0; index < length;) {\r\n result[index++] = leftChannel[inputIndex];\r\n result[index++] = rightChannel[inputIndex];\r\n inputIndex++;\r\n }\r\n return result;\r\n }\r\n\r\n function writeUTFBytes(view, offset, string) {\r\n var lng = string.length;\r\n for (var i = 0; i < lng; i++) {\r\n view.setUint8(offset + i, string.charCodeAt(i));\r\n }\r\n }\r\n\r\n // interleave both channels together\r\n var interleaved;\r\n\r\n if (numberOfAudioChannels === 2) {\r\n interleaved = interleave(leftBuffers, rightBuffers);\r\n }\r\n\r\n if (numberOfAudioChannels === 1) {\r\n interleaved = leftBuffers;\r\n }\r\n\r\n var interleavedLength = interleaved.length;\r\n\r\n // create wav file\r\n var resultingBufferLength = 44 + interleavedLength * 2;\r\n\r\n var buffer = new ArrayBuffer(resultingBufferLength);\r\n\r\n var view = new DataView(buffer);\r\n\r\n // RIFF chunk descriptor/identifier \r\n writeUTFBytes(view, 0, 'RIFF');\r\n\r\n // RIFF chunk length\r\n // changed \"44\" to \"36\" via #401\r\n view.setUint32(4, 36 + interleavedLength * 2, true);\r\n\r\n // RIFF type \r\n writeUTFBytes(view, 8, 'WAVE');\r\n\r\n // format chunk identifier \r\n // FMT sub-chunk\r\n writeUTFBytes(view, 12, 'fmt ');\r\n\r\n // format chunk length \r\n view.setUint32(16, 16, true);\r\n\r\n // sample format (raw)\r\n view.setUint16(20, 1, true);\r\n\r\n // stereo (2 channels)\r\n view.setUint16(22, numberOfAudioChannels, true);\r\n\r\n // sample rate \r\n view.setUint32(24, sampleRate, true);\r\n\r\n // byte rate (sample rate * block align)\r\n view.setUint32(28, sampleRate * numberOfAudioChannels * 2, true);\r\n\r\n // block align (channel count * bytes per sample) \r\n view.setUint16(32, numberOfAudioChannels * 2, true);\r\n\r\n // bits per sample \r\n view.setUint16(34, 16, true);\r\n\r\n // data sub-chunk\r\n // data chunk identifier \r\n writeUTFBytes(view, 36, 'data');\r\n\r\n // data chunk length \r\n view.setUint32(40, interleavedLength * 2, true);\r\n\r\n // write the PCM samples\r\n var lng = interleavedLength;\r\n var index = 44;\r\n var volume = 1;\r\n for (var i = 0; i < lng; i++) {\r\n view.setInt16(index, interleaved[i] * (0x7FFF * volume), true);\r\n index += 2;\r\n }\r\n\r\n if (cb) {\r\n return cb({\r\n buffer: buffer,\r\n view: view\r\n });\r\n }\r\n\r\n postMessage({\r\n buffer: buffer,\r\n view: view\r\n });\r\n }\r\n\r\n if (config.noWorker) {\r\n mergeAudioBuffers(config, function(data) {\r\n callback(data.buffer, data.view);\r\n });\r\n return;\r\n }\r\n\r\n\r\n var webWorker = processInWebWorker(mergeAudioBuffers);\r\n\r\n webWorker.onmessage = function(event) {\r\n callback(event.data.buffer, event.data.view);\r\n\r\n // release memory\r\n URL.revokeObjectURL(webWorker.workerURL);\r\n\r\n // kill webworker (or Chrome will kill your page after ~25 calls)\r\n webWorker.terminate();\r\n };\r\n\r\n webWorker.postMessage(config);\r\n }\r\n\r\n function processInWebWorker(_function) {\r\n var workerURL = URL.createObjectURL(new Blob([_function.toString(),\r\n ';this.onmessage = function (eee) {' + _function.name + '(eee.data);}'\r\n ], {\r\n type: 'application/javascript'\r\n }));\r\n\r\n var worker = new Worker(workerURL);\r\n worker.workerURL = workerURL;\r\n return worker;\r\n }\r\n\r\n /**\r\n * This method stops recording MediaStream.\r\n * @param {function} callback - Callback function, that is used to pass recorded blob back to the callee.\r\n * @method\r\n * @memberof StereoAudioRecorder\r\n * @example\r\n * recorder.stop(function(blob) {\r\n * video.src = URL.createObjectURL(blob);\r\n * });\r\n */\r\n this.stop = function(callback) {\r\n callback = callback || function() {};\r\n\r\n // stop recording\r\n recording = false;\r\n\r\n mergeLeftRightBuffers({\r\n desiredSampRate: desiredSampRate,\r\n sampleRate: sampleRate,\r\n numberOfAudioChannels: numberOfAudioChannels,\r\n internalInterleavedLength: recordingLength,\r\n leftBuffers: leftchannel,\r\n rightBuffers: numberOfAudioChannels === 1 ? [] : rightchannel,\r\n noWorker: config.noWorker\r\n }, function(buffer, view) {\r\n /**\r\n * @property {Blob} blob - The recorded blob object.\r\n * @memberof StereoAudioRecorder\r\n * @example\r\n * recorder.stop(function(){\r\n * var blob = recorder.blob;\r\n * });\r\n */\r\n self.blob = new Blob([view], {\r\n type: 'audio/wav'\r\n });\r\n\r\n /**\r\n * @property {ArrayBuffer} buffer - The recorded buffer object.\r\n * @memberof StereoAudioRecorder\r\n * @example\r\n * recorder.stop(function(){\r\n * var buffer = recorder.buffer;\r\n * });\r\n */\r\n self.buffer = new ArrayBuffer(view.buffer.byteLength);\r\n\r\n /**\r\n * @property {DataView} view - The recorded data-view object.\r\n * @memberof StereoAudioRecorder\r\n * @example\r\n * recorder.stop(function(){\r\n * var view = recorder.view;\r\n * });\r\n */\r\n self.view = view;\r\n\r\n self.sampleRate = desiredSampRate || sampleRate;\r\n self.bufferSize = bufferSize;\r\n\r\n // recorded audio length\r\n self.length = recordingLength;\r\n\r\n isAudioProcessStarted = false;\r\n\r\n if (callback) {\r\n callback(self.blob);\r\n }\r\n });\r\n };\r\n\r\n if (typeof RecordRTC.Storage === 'undefined') {\r\n RecordRTC.Storage = {\r\n AudioContextConstructor: null,\r\n AudioContext: window.AudioContext || window.webkitAudioContext\r\n };\r\n }\r\n\r\n if (!RecordRTC.Storage.AudioContextConstructor || RecordRTC.Storage.AudioContextConstructor.state === 'closed') {\r\n RecordRTC.Storage.AudioContextConstructor = new RecordRTC.Storage.AudioContext();\r\n }\r\n\r\n var context = RecordRTC.Storage.AudioContextConstructor;\r\n\r\n // creates an audio node from the microphone incoming stream\r\n var audioInput = context.createMediaStreamSource(mediaStream);\r\n\r\n var legalBufferValues = [0, 256, 512, 1024, 2048, 4096, 8192, 16384];\r\n\r\n /**\r\n * From the spec: This value controls how frequently the audioprocess event is\r\n * dispatched and how many sample-frames need to be processed each call.\r\n * Lower values for buffer size will result in a lower (better) latency.\r\n * Higher values will be necessary to avoid audio breakup and glitches\r\n * The size of the buffer (in sample-frames) which needs to\r\n * be processed each time onprocessaudio is called.\r\n * Legal values are (256, 512, 1024, 2048, 4096, 8192, 16384).\r\n * @property {number} bufferSize - Buffer-size for how frequently the audioprocess event is dispatched.\r\n * @memberof StereoAudioRecorder\r\n * @example\r\n * recorder = new StereoAudioRecorder(mediaStream, {\r\n * bufferSize: 4096\r\n * });\r\n */\r\n\r\n // \"0\" means, let chrome decide the most accurate buffer-size for current platform.\r\n var bufferSize = typeof config.bufferSize === 'undefined' ? 4096 : config.bufferSize;\r\n\r\n if (legalBufferValues.indexOf(bufferSize) === -1) {\r\n if (!config.disableLogs) {\r\n console.log('Legal values for buffer-size are ' + JSON.stringify(legalBufferValues, null, '\\t'));\r\n }\r\n }\r\n\r\n if (context.createJavaScriptNode) {\r\n jsAudioNode = context.createJavaScriptNode(bufferSize, numberOfAudioChannels, numberOfAudioChannels);\r\n } else if (context.createScriptProcessor) {\r\n jsAudioNode = context.createScriptProcessor(bufferSize, numberOfAudioChannels, numberOfAudioChannels);\r\n } else {\r\n throw 'WebAudio API has no support on this browser.';\r\n }\r\n\r\n // connect the stream to the script processor\r\n audioInput.connect(jsAudioNode);\r\n\r\n if (!config.bufferSize) {\r\n bufferSize = jsAudioNode.bufferSize; // device buffer-size\r\n }\r\n\r\n /**\r\n * The sample rate (in sample-frames per second) at which the\r\n * AudioContext handles audio. It is assumed that all AudioNodes\r\n * in the context run at this rate. In making this assumption,\r\n * sample-rate converters or \"varispeed\" processors are not supported\r\n * in real-time processing.\r\n * The sampleRate parameter describes the sample-rate of the\r\n * linear PCM audio data in the buffer in sample-frames per second.\r\n * An implementation must support sample-rates in at least\r\n * the range 22050 to 96000.\r\n * @property {number} sampleRate - Buffer-size for how frequently the audioprocess event is dispatched.\r\n * @memberof StereoAudioRecorder\r\n * @example\r\n * recorder = new StereoAudioRecorder(mediaStream, {\r\n * sampleRate: 44100\r\n * });\r\n */\r\n var sampleRate = typeof config.sampleRate !== 'undefined' ? config.sampleRate : context.sampleRate || 44100;\r\n\r\n if (sampleRate < 22050 || sampleRate > 96000) {\r\n // Ref: http://stackoverflow.com/a/26303918/552182\r\n if (!config.disableLogs) {\r\n console.log('sample-rate must be under range 22050 and 96000.');\r\n }\r\n }\r\n\r\n if (!config.disableLogs) {\r\n if (config.desiredSampRate) {\r\n console.log('Desired sample-rate: ' + config.desiredSampRate);\r\n }\r\n }\r\n\r\n var isPaused = false;\r\n /**\r\n * This method pauses the recording process.\r\n * @method\r\n * @memberof StereoAudioRecorder\r\n * @example\r\n * recorder.pause();\r\n */\r\n this.pause = function() {\r\n isPaused = true;\r\n };\r\n\r\n /**\r\n * This method resumes the recording process.\r\n * @method\r\n * @memberof StereoAudioRecorder\r\n * @example\r\n * recorder.resume();\r\n */\r\n this.resume = function() {\r\n if (isMediaStreamActive() === false) {\r\n throw 'Please make sure MediaStream is active.';\r\n }\r\n\r\n if (!recording) {\r\n if (!config.disableLogs) {\r\n console.log('Seems recording has been restarted.');\r\n }\r\n this.record();\r\n return;\r\n }\r\n\r\n isPaused = false;\r\n };\r\n\r\n /**\r\n * This method resets currently recorded data.\r\n * @method\r\n * @memberof StereoAudioRecorder\r\n * @example\r\n * recorder.clearRecordedData();\r\n */\r\n this.clearRecordedData = function() {\r\n config.checkForInactiveTracks = false;\r\n\r\n if (recording) {\r\n this.stop(clearRecordedDataCB);\r\n }\r\n\r\n clearRecordedDataCB();\r\n };\r\n\r\n function resetVariables() {\r\n leftchannel = [];\r\n rightchannel = [];\r\n recordingLength = 0;\r\n isAudioProcessStarted = false;\r\n recording = false;\r\n isPaused = false;\r\n context = null;\r\n\r\n self.leftchannel = leftchannel;\r\n self.rightchannel = rightchannel;\r\n self.numberOfAudioChannels = numberOfAudioChannels;\r\n self.desiredSampRate = desiredSampRate;\r\n self.sampleRate = sampleRate;\r\n self.recordingLength = recordingLength;\r\n\r\n intervalsBasedBuffers = {\r\n left: [],\r\n right: [],\r\n recordingLength: 0\r\n };\r\n }\r\n\r\n function clearRecordedDataCB() {\r\n if (jsAudioNode) {\r\n jsAudioNode.onaudioprocess = null;\r\n jsAudioNode.disconnect();\r\n jsAudioNode = null;\r\n }\r\n\r\n if (audioInput) {\r\n audioInput.disconnect();\r\n audioInput = null;\r\n }\r\n\r\n resetVariables();\r\n }\r\n\r\n // for debugging\r\n this.name = 'StereoAudioRecorder';\r\n this.toString = function() {\r\n return this.name;\r\n };\r\n\r\n var isAudioProcessStarted = false;\r\n\r\n function onAudioProcessDataAvailable(e) {\r\n if (isPaused) {\r\n return;\r\n }\r\n\r\n if (isMediaStreamActive() === false) {\r\n if (!config.disableLogs) {\r\n console.log('MediaStream seems stopped.');\r\n }\r\n jsAudioNode.disconnect();\r\n recording = false;\r\n }\r\n\r\n if (!recording) {\r\n if (audioInput) {\r\n audioInput.disconnect();\r\n audioInput = null;\r\n }\r\n return;\r\n }\r\n\r\n /**\r\n * This method is called on \"onaudioprocess\" event's first invocation.\r\n * @method {function} onAudioProcessStarted\r\n * @memberof StereoAudioRecorder\r\n * @example\r\n * recorder.onAudioProcessStarted: function() { };\r\n */\r\n if (!isAudioProcessStarted) {\r\n isAudioProcessStarted = true;\r\n if (config.onAudioProcessStarted) {\r\n config.onAudioProcessStarted();\r\n }\r\n\r\n if (config.initCallback) {\r\n config.initCallback();\r\n }\r\n }\r\n\r\n var left = e.inputBuffer.getChannelData(0);\r\n\r\n // we clone the samples\r\n var chLeft = new Float32Array(left);\r\n leftchannel.push(chLeft);\r\n\r\n if (numberOfAudioChannels === 2) {\r\n var right = e.inputBuffer.getChannelData(1);\r\n var chRight = new Float32Array(right);\r\n rightchannel.push(chRight);\r\n }\r\n\r\n recordingLength += bufferSize;\r\n\r\n // export raw PCM\r\n self.recordingLength = recordingLength;\r\n\r\n if (typeof config.timeSlice !== 'undefined') {\r\n intervalsBasedBuffers.recordingLength += bufferSize;\r\n intervalsBasedBuffers.left.push(chLeft);\r\n\r\n if (numberOfAudioChannels === 2) {\r\n intervalsBasedBuffers.right.push(chRight);\r\n }\r\n }\r\n }\r\n\r\n jsAudioNode.onaudioprocess = onAudioProcessDataAvailable;\r\n\r\n // to prevent self audio to be connected with speakers\r\n if (context.createMediaStreamDestination) {\r\n jsAudioNode.connect(context.createMediaStreamDestination());\r\n } else {\r\n jsAudioNode.connect(context.destination);\r\n }\r\n\r\n // export raw PCM\r\n this.leftchannel = leftchannel;\r\n this.rightchannel = rightchannel;\r\n this.numberOfAudioChannels = numberOfAudioChannels;\r\n this.desiredSampRate = desiredSampRate;\r\n this.sampleRate = sampleRate;\r\n self.recordingLength = recordingLength;\r\n\r\n // helper for intervals based blobs\r\n var intervalsBasedBuffers = {\r\n left: [],\r\n right: [],\r\n recordingLength: 0\r\n };\r\n\r\n // this looper is used to support intervals based blobs (via timeSlice+ondataavailable)\r\n function looper() {\r\n if (!recording || typeof config.ondataavailable !== 'function' || typeof config.timeSlice === 'undefined') {\r\n return;\r\n }\r\n\r\n if (intervalsBasedBuffers.left.length) {\r\n mergeLeftRightBuffers({\r\n desiredSampRate: desiredSampRate,\r\n sampleRate: sampleRate,\r\n numberOfAudioChannels: numberOfAudioChannels,\r\n internalInterleavedLength: intervalsBasedBuffers.recordingLength,\r\n leftBuffers: intervalsBasedBuffers.left,\r\n rightBuffers: numberOfAudioChannels === 1 ? [] : intervalsBasedBuffers.right\r\n }, function(buffer, view) {\r\n var blob = new Blob([view], {\r\n type: 'audio/wav'\r\n });\r\n config.ondataavailable(blob);\r\n\r\n setTimeout(looper, config.timeSlice);\r\n });\r\n\r\n intervalsBasedBuffers = {\r\n left: [],\r\n right: [],\r\n recordingLength: 0\r\n };\r\n } else {\r\n setTimeout(looper, config.timeSlice);\r\n }\r\n }\r\n}\r\n\r\nif (typeof RecordRTC !== 'undefined') {\r\n RecordRTC.StereoAudioRecorder = StereoAudioRecorder;\r\n}\r\n\r\n// _________________\r\n// CanvasRecorder.js\r\n\r\n/**\r\n * CanvasRecorder is a standalone class used by {@link RecordRTC} to bring HTML5-Canvas recording into video WebM. It uses HTML2Canvas library and runs top over {@link Whammy}.\r\n * @summary HTML2Canvas recording into video WebM.\r\n * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT}\r\n * @author {@link https://MuazKhan.com|Muaz Khan}\r\n * @typedef CanvasRecorder\r\n * @class\r\n * @example\r\n * var recorder = new CanvasRecorder(htmlElement, { disableLogs: true, useWhammyRecorder: true });\r\n * recorder.record();\r\n * recorder.stop(function(blob) {\r\n * video.src = URL.createObjectURL(blob);\r\n * });\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n * @param {HTMLElement} htmlElement - querySelector/getElementById/getElementsByTagName[0]/etc.\r\n * @param {object} config - {disableLogs:true, initCallback: function}\r\n */\r\n\r\nfunction CanvasRecorder(htmlElement, config) {\r\n if (typeof html2canvas === 'undefined') {\r\n throw 'Please link: https://www.webrtc-experiment.com/screenshot.js';\r\n }\r\n\r\n config = config || {};\r\n if (!config.frameInterval) {\r\n config.frameInterval = 10;\r\n }\r\n\r\n // via DetectRTC.js\r\n var isCanvasSupportsStreamCapturing = false;\r\n ['captureStream', 'mozCaptureStream', 'webkitCaptureStream'].forEach(function(item) {\r\n if (item in document.createElement('canvas')) {\r\n isCanvasSupportsStreamCapturing = true;\r\n }\r\n });\r\n\r\n var _isChrome = (!!window.webkitRTCPeerConnection || !!window.webkitGetUserMedia) && !!window.chrome;\r\n\r\n var chromeVersion = 50;\r\n var matchArray = navigator.userAgent.match(/Chrom(e|ium)\\/([0-9]+)\\./);\r\n if (_isChrome && matchArray && matchArray[2]) {\r\n chromeVersion = parseInt(matchArray[2], 10);\r\n }\r\n\r\n if (_isChrome && chromeVersion < 52) {\r\n isCanvasSupportsStreamCapturing = false;\r\n }\r\n\r\n if (config.useWhammyRecorder) {\r\n isCanvasSupportsStreamCapturing = false;\r\n }\r\n\r\n var globalCanvas, mediaStreamRecorder;\r\n\r\n if (isCanvasSupportsStreamCapturing) {\r\n if (!config.disableLogs) {\r\n console.log('Your browser supports both MediRecorder API and canvas.captureStream!');\r\n }\r\n\r\n if (htmlElement instanceof HTMLCanvasElement) {\r\n globalCanvas = htmlElement;\r\n } else if (htmlElement instanceof CanvasRenderingContext2D) {\r\n globalCanvas = htmlElement.canvas;\r\n } else {\r\n throw 'Please pass either HTMLCanvasElement or CanvasRenderingContext2D.';\r\n }\r\n } else if (!!navigator.mozGetUserMedia) {\r\n if (!config.disableLogs) {\r\n console.error('Canvas recording is NOT supported in Firefox.');\r\n }\r\n }\r\n\r\n var isRecording;\r\n\r\n /**\r\n * This method records Canvas.\r\n * @method\r\n * @memberof CanvasRecorder\r\n * @example\r\n * recorder.record();\r\n */\r\n this.record = function() {\r\n isRecording = true;\r\n\r\n if (isCanvasSupportsStreamCapturing && !config.useWhammyRecorder) {\r\n // CanvasCaptureMediaStream\r\n var canvasMediaStream;\r\n if ('captureStream' in globalCanvas) {\r\n canvasMediaStream = globalCanvas.captureStream(25); // 25 FPS\r\n } else if ('mozCaptureStream' in globalCanvas) {\r\n canvasMediaStream = globalCanvas.mozCaptureStream(25);\r\n } else if ('webkitCaptureStream' in globalCanvas) {\r\n canvasMediaStream = globalCanvas.webkitCaptureStream(25);\r\n }\r\n\r\n try {\r\n var mdStream = new MediaStream();\r\n mdStream.addTrack(getTracks(canvasMediaStream, 'video')[0]);\r\n canvasMediaStream = mdStream;\r\n } catch (e) {}\r\n\r\n if (!canvasMediaStream) {\r\n throw 'captureStream API are NOT available.';\r\n }\r\n\r\n // Note: Jan 18, 2016 status is that, \r\n // Firefox MediaRecorder API can't record CanvasCaptureMediaStream object.\r\n mediaStreamRecorder = new MediaStreamRecorder(canvasMediaStream, {\r\n mimeType: config.mimeType || 'video/webm'\r\n });\r\n mediaStreamRecorder.record();\r\n } else {\r\n whammy.frames = [];\r\n lastTime = new Date().getTime();\r\n drawCanvasFrame();\r\n }\r\n\r\n if (config.initCallback) {\r\n config.initCallback();\r\n }\r\n };\r\n\r\n this.getWebPImages = function(callback) {\r\n if (htmlElement.nodeName.toLowerCase() !== 'canvas') {\r\n callback();\r\n return;\r\n }\r\n\r\n var framesLength = whammy.frames.length;\r\n whammy.frames.forEach(function(frame, idx) {\r\n var framesRemaining = framesLength - idx;\r\n if (!config.disableLogs) {\r\n console.log(framesRemaining + '/' + framesLength + ' frames remaining');\r\n }\r\n\r\n if (config.onEncodingCallback) {\r\n config.onEncodingCallback(framesRemaining, framesLength);\r\n }\r\n\r\n var webp = frame.image.toDataURL('image/webp', 1);\r\n whammy.frames[idx].image = webp;\r\n });\r\n\r\n if (!config.disableLogs) {\r\n console.log('Generating WebM');\r\n }\r\n\r\n callback();\r\n };\r\n\r\n /**\r\n * This method stops recording Canvas.\r\n * @param {function} callback - Callback function, that is used to pass recorded blob back to the callee.\r\n * @method\r\n * @memberof CanvasRecorder\r\n * @example\r\n * recorder.stop(function(blob) {\r\n * video.src = URL.createObjectURL(blob);\r\n * });\r\n */\r\n this.stop = function(callback) {\r\n isRecording = false;\r\n\r\n var that = this;\r\n\r\n if (isCanvasSupportsStreamCapturing && mediaStreamRecorder) {\r\n mediaStreamRecorder.stop(callback);\r\n return;\r\n }\r\n\r\n this.getWebPImages(function() {\r\n /**\r\n * @property {Blob} blob - Recorded frames in video/webm blob.\r\n * @memberof CanvasRecorder\r\n * @example\r\n * recorder.stop(function() {\r\n * var blob = recorder.blob;\r\n * });\r\n */\r\n whammy.compile(function(blob) {\r\n if (!config.disableLogs) {\r\n console.log('Recording finished!');\r\n }\r\n\r\n that.blob = blob;\r\n\r\n if (that.blob.forEach) {\r\n that.blob = new Blob([], {\r\n type: 'video/webm'\r\n });\r\n }\r\n\r\n if (callback) {\r\n callback(that.blob);\r\n }\r\n\r\n whammy.frames = [];\r\n });\r\n });\r\n };\r\n\r\n var isPausedRecording = false;\r\n\r\n /**\r\n * This method pauses the recording process.\r\n * @method\r\n * @memberof CanvasRecorder\r\n * @example\r\n * recorder.pause();\r\n */\r\n this.pause = function() {\r\n isPausedRecording = true;\r\n\r\n if (mediaStreamRecorder instanceof MediaStreamRecorder) {\r\n mediaStreamRecorder.pause();\r\n return;\r\n }\r\n };\r\n\r\n /**\r\n * This method resumes the recording process.\r\n * @method\r\n * @memberof CanvasRecorder\r\n * @example\r\n * recorder.resume();\r\n */\r\n this.resume = function() {\r\n isPausedRecording = false;\r\n\r\n if (mediaStreamRecorder instanceof MediaStreamRecorder) {\r\n mediaStreamRecorder.resume();\r\n return;\r\n }\r\n\r\n if (!isRecording) {\r\n this.record();\r\n }\r\n };\r\n\r\n /**\r\n * This method resets currently recorded data.\r\n * @method\r\n * @memberof CanvasRecorder\r\n * @example\r\n * recorder.clearRecordedData();\r\n */\r\n this.clearRecordedData = function() {\r\n if (isRecording) {\r\n this.stop(clearRecordedDataCB);\r\n }\r\n clearRecordedDataCB();\r\n };\r\n\r\n function clearRecordedDataCB() {\r\n whammy.frames = [];\r\n isRecording = false;\r\n isPausedRecording = false;\r\n }\r\n\r\n // for debugging\r\n this.name = 'CanvasRecorder';\r\n this.toString = function() {\r\n return this.name;\r\n };\r\n\r\n function cloneCanvas() {\r\n //create a new canvas\r\n var newCanvas = document.createElement('canvas');\r\n var context = newCanvas.getContext('2d');\r\n\r\n //set dimensions\r\n newCanvas.width = htmlElement.width;\r\n newCanvas.height = htmlElement.height;\r\n\r\n //apply the old canvas to the new one\r\n context.drawImage(htmlElement, 0, 0);\r\n\r\n //return the new canvas\r\n return newCanvas;\r\n }\r\n\r\n function drawCanvasFrame() {\r\n if (isPausedRecording) {\r\n lastTime = new Date().getTime();\r\n return setTimeout(drawCanvasFrame, 500);\r\n }\r\n\r\n if (htmlElement.nodeName.toLowerCase() === 'canvas') {\r\n var duration = new Date().getTime() - lastTime;\r\n // via #206, by Jack i.e. @Seymourr\r\n lastTime = new Date().getTime();\r\n\r\n whammy.frames.push({\r\n image: cloneCanvas(),\r\n duration: duration\r\n });\r\n\r\n if (isRecording) {\r\n setTimeout(drawCanvasFrame, config.frameInterval);\r\n }\r\n return;\r\n }\r\n\r\n html2canvas(htmlElement, {\r\n grabMouse: typeof config.showMousePointer === 'undefined' || config.showMousePointer,\r\n onrendered: function(canvas) {\r\n var duration = new Date().getTime() - lastTime;\r\n if (!duration) {\r\n return setTimeout(drawCanvasFrame, config.frameInterval);\r\n }\r\n\r\n // via #206, by Jack i.e. @Seymourr\r\n lastTime = new Date().getTime();\r\n\r\n whammy.frames.push({\r\n image: canvas.toDataURL('image/webp', 1),\r\n duration: duration\r\n });\r\n\r\n if (isRecording) {\r\n setTimeout(drawCanvasFrame, config.frameInterval);\r\n }\r\n }\r\n });\r\n }\r\n\r\n var lastTime = new Date().getTime();\r\n\r\n var whammy = new Whammy.Video(100);\r\n}\r\n\r\nif (typeof RecordRTC !== 'undefined') {\r\n RecordRTC.CanvasRecorder = CanvasRecorder;\r\n}\n\r\n// _________________\r\n// WhammyRecorder.js\r\n\r\n/**\r\n * WhammyRecorder is a standalone class used by {@link RecordRTC} to bring video recording in Chrome. It runs top over {@link Whammy}.\r\n * @summary Video recording feature in Chrome.\r\n * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT}\r\n * @author {@link https://MuazKhan.com|Muaz Khan}\r\n * @typedef WhammyRecorder\r\n * @class\r\n * @example\r\n * var recorder = new WhammyRecorder(mediaStream);\r\n * recorder.record();\r\n * recorder.stop(function(blob) {\r\n * video.src = URL.createObjectURL(blob);\r\n * });\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n * @param {MediaStream} mediaStream - MediaStream object fetched using getUserMedia API or generated using captureStreamUntilEnded or WebAudio API.\r\n * @param {object} config - {disableLogs: true, initCallback: function, video: HTMLVideoElement, etc.}\r\n */\r\n\r\nfunction WhammyRecorder(mediaStream, config) {\r\n\r\n config = config || {};\r\n\r\n if (!config.frameInterval) {\r\n config.frameInterval = 10;\r\n }\r\n\r\n if (!config.disableLogs) {\r\n console.log('Using frames-interval:', config.frameInterval);\r\n }\r\n\r\n /**\r\n * This method records video.\r\n * @method\r\n * @memberof WhammyRecorder\r\n * @example\r\n * recorder.record();\r\n */\r\n this.record = function() {\r\n if (!config.width) {\r\n config.width = 320;\r\n }\r\n\r\n if (!config.height) {\r\n config.height = 240;\r\n }\r\n\r\n if (!config.video) {\r\n config.video = {\r\n width: config.width,\r\n height: config.height\r\n };\r\n }\r\n\r\n if (!config.canvas) {\r\n config.canvas = {\r\n width: config.width,\r\n height: config.height\r\n };\r\n }\r\n\r\n canvas.width = config.canvas.width || 320;\r\n canvas.height = config.canvas.height || 240;\r\n\r\n context = canvas.getContext('2d');\r\n\r\n // setting defaults\r\n if (config.video && config.video instanceof HTMLVideoElement) {\r\n video = config.video.cloneNode();\r\n\r\n if (config.initCallback) {\r\n config.initCallback();\r\n }\r\n } else {\r\n video = document.createElement('video');\r\n\r\n setSrcObject(mediaStream, video);\r\n\r\n video.onloadedmetadata = function() { // \"onloadedmetadata\" may NOT work in FF?\r\n if (config.initCallback) {\r\n config.initCallback();\r\n }\r\n };\r\n\r\n video.width = config.video.width;\r\n video.height = config.video.height;\r\n }\r\n\r\n video.muted = true;\r\n video.play();\r\n\r\n lastTime = new Date().getTime();\r\n whammy = new Whammy.Video();\r\n\r\n if (!config.disableLogs) {\r\n console.log('canvas resolutions', canvas.width, '*', canvas.height);\r\n console.log('video width/height', video.width || canvas.width, '*', video.height || canvas.height);\r\n }\r\n\r\n drawFrames(config.frameInterval);\r\n };\r\n\r\n /**\r\n * Draw and push frames to Whammy\r\n * @param {integer} frameInterval - set minimum interval (in milliseconds) between each time we push a frame to Whammy\r\n */\r\n function drawFrames(frameInterval) {\r\n frameInterval = typeof frameInterval !== 'undefined' ? frameInterval : 10;\r\n\r\n var duration = new Date().getTime() - lastTime;\r\n if (!duration) {\r\n return setTimeout(drawFrames, frameInterval, frameInterval);\r\n }\r\n\r\n if (isPausedRecording) {\r\n lastTime = new Date().getTime();\r\n return setTimeout(drawFrames, 100);\r\n }\r\n\r\n // via #206, by Jack i.e. @Seymourr\r\n lastTime = new Date().getTime();\r\n\r\n if (video.paused) {\r\n // via: https://github.com/muaz-khan/WebRTC-Experiment/pull/316\r\n // Tweak for Android Chrome\r\n video.play();\r\n }\r\n\r\n context.drawImage(video, 0, 0, canvas.width, canvas.height);\r\n whammy.frames.push({\r\n duration: duration,\r\n image: canvas.toDataURL('image/webp')\r\n });\r\n\r\n if (!isStopDrawing) {\r\n setTimeout(drawFrames, frameInterval, frameInterval);\r\n }\r\n }\r\n\r\n function asyncLoop(o) {\r\n var i = -1,\r\n length = o.length;\r\n\r\n (function loop() {\r\n i++;\r\n if (i === length) {\r\n o.callback();\r\n return;\r\n }\r\n\r\n // \"setTimeout\" added by Jim McLeod\r\n setTimeout(function() {\r\n o.functionToLoop(loop, i);\r\n }, 1);\r\n })();\r\n }\r\n\r\n\r\n /**\r\n * remove black frames from the beginning to the specified frame\r\n * @param {Array} _frames - array of frames to be checked\r\n * @param {number} _framesToCheck - number of frame until check will be executed (-1 - will drop all frames until frame not matched will be found)\r\n * @param {number} _pixTolerance - 0 - very strict (only black pixel color) ; 1 - all\r\n * @param {number} _frameTolerance - 0 - very strict (only black frame color) ; 1 - all\r\n * @returns {Array} - array of frames\r\n */\r\n // pull#293 by @volodalexey\r\n function dropBlackFrames(_frames, _framesToCheck, _pixTolerance, _frameTolerance, callback) {\r\n var localCanvas = document.createElement('canvas');\r\n localCanvas.width = canvas.width;\r\n localCanvas.height = canvas.height;\r\n var context2d = localCanvas.getContext('2d');\r\n var resultFrames = [];\r\n\r\n var checkUntilNotBlack = _framesToCheck === -1;\r\n var endCheckFrame = (_framesToCheck && _framesToCheck > 0 && _framesToCheck <= _frames.length) ?\r\n _framesToCheck : _frames.length;\r\n var sampleColor = {\r\n r: 0,\r\n g: 0,\r\n b: 0\r\n };\r\n var maxColorDifference = Math.sqrt(\r\n Math.pow(255, 2) +\r\n Math.pow(255, 2) +\r\n Math.pow(255, 2)\r\n );\r\n var pixTolerance = _pixTolerance && _pixTolerance >= 0 && _pixTolerance <= 1 ? _pixTolerance : 0;\r\n var frameTolerance = _frameTolerance && _frameTolerance >= 0 && _frameTolerance <= 1 ? _frameTolerance : 0;\r\n var doNotCheckNext = false;\r\n\r\n asyncLoop({\r\n length: endCheckFrame,\r\n functionToLoop: function(loop, f) {\r\n var matchPixCount, endPixCheck, maxPixCount;\r\n\r\n var finishImage = function() {\r\n if (!doNotCheckNext && maxPixCount - matchPixCount <= maxPixCount * frameTolerance) {\r\n // console.log('removed black frame : ' + f + ' ; frame duration ' + _frames[f].duration);\r\n } else {\r\n // console.log('frame is passed : ' + f);\r\n if (checkUntilNotBlack) {\r\n doNotCheckNext = true;\r\n }\r\n resultFrames.push(_frames[f]);\r\n }\r\n loop();\r\n };\r\n\r\n if (!doNotCheckNext) {\r\n var image = new Image();\r\n image.onload = function() {\r\n context2d.drawImage(image, 0, 0, canvas.width, canvas.height);\r\n var imageData = context2d.getImageData(0, 0, canvas.width, canvas.height);\r\n matchPixCount = 0;\r\n endPixCheck = imageData.data.length;\r\n maxPixCount = imageData.data.length / 4;\r\n\r\n for (var pix = 0; pix < endPixCheck; pix += 4) {\r\n var currentColor = {\r\n r: imageData.data[pix],\r\n g: imageData.data[pix + 1],\r\n b: imageData.data[pix + 2]\r\n };\r\n var colorDifference = Math.sqrt(\r\n Math.pow(currentColor.r - sampleColor.r, 2) +\r\n Math.pow(currentColor.g - sampleColor.g, 2) +\r\n Math.pow(currentColor.b - sampleColor.b, 2)\r\n );\r\n // difference in color it is difference in color vectors (r1,g1,b1) <=> (r2,g2,b2)\r\n if (colorDifference <= maxColorDifference * pixTolerance) {\r\n matchPixCount++;\r\n }\r\n }\r\n finishImage();\r\n };\r\n image.src = _frames[f].image;\r\n } else {\r\n finishImage();\r\n }\r\n },\r\n callback: function() {\r\n resultFrames = resultFrames.concat(_frames.slice(endCheckFrame));\r\n\r\n if (resultFrames.length <= 0) {\r\n // at least one last frame should be available for next manipulation\r\n // if total duration of all frames will be < 1000 than ffmpeg doesn't work well...\r\n resultFrames.push(_frames[_frames.length - 1]);\r\n }\r\n callback(resultFrames);\r\n }\r\n });\r\n }\r\n\r\n var isStopDrawing = false;\r\n\r\n /**\r\n * This method stops recording video.\r\n * @param {function} callback - Callback function, that is used to pass recorded blob back to the callee.\r\n * @method\r\n * @memberof WhammyRecorder\r\n * @example\r\n * recorder.stop(function(blob) {\r\n * video.src = URL.createObjectURL(blob);\r\n * });\r\n */\r\n this.stop = function(callback) {\r\n callback = callback || function() {};\r\n\r\n isStopDrawing = true;\r\n\r\n var _this = this;\r\n // analyse of all frames takes some time!\r\n setTimeout(function() {\r\n // e.g. dropBlackFrames(frames, 10, 1, 1) - will cut all 10 frames\r\n // e.g. dropBlackFrames(frames, 10, 0.5, 0.5) - will analyse 10 frames\r\n // e.g. dropBlackFrames(frames, 10) === dropBlackFrames(frames, 10, 0, 0) - will analyse 10 frames with strict black color\r\n dropBlackFrames(whammy.frames, -1, null, null, function(frames) {\r\n whammy.frames = frames;\r\n\r\n // to display advertisement images!\r\n if (config.advertisement && config.advertisement.length) {\r\n whammy.frames = config.advertisement.concat(whammy.frames);\r\n }\r\n\r\n /**\r\n * @property {Blob} blob - Recorded frames in video/webm blob.\r\n * @memberof WhammyRecorder\r\n * @example\r\n * recorder.stop(function() {\r\n * var blob = recorder.blob;\r\n * });\r\n */\r\n whammy.compile(function(blob) {\r\n _this.blob = blob;\r\n\r\n if (_this.blob.forEach) {\r\n _this.blob = new Blob([], {\r\n type: 'video/webm'\r\n });\r\n }\r\n\r\n if (callback) {\r\n callback(_this.blob);\r\n }\r\n });\r\n });\r\n }, 10);\r\n };\r\n\r\n var isPausedRecording = false;\r\n\r\n /**\r\n * This method pauses the recording process.\r\n * @method\r\n * @memberof WhammyRecorder\r\n * @example\r\n * recorder.pause();\r\n */\r\n this.pause = function() {\r\n isPausedRecording = true;\r\n };\r\n\r\n /**\r\n * This method resumes the recording process.\r\n * @method\r\n * @memberof WhammyRecorder\r\n * @example\r\n * recorder.resume();\r\n */\r\n this.resume = function() {\r\n isPausedRecording = false;\r\n\r\n if (isStopDrawing) {\r\n this.record();\r\n }\r\n };\r\n\r\n /**\r\n * This method resets currently recorded data.\r\n * @method\r\n * @memberof WhammyRecorder\r\n * @example\r\n * recorder.clearRecordedData();\r\n */\r\n this.clearRecordedData = function() {\r\n if (!isStopDrawing) {\r\n this.stop(clearRecordedDataCB);\r\n }\r\n clearRecordedDataCB();\r\n };\r\n\r\n function clearRecordedDataCB() {\r\n whammy.frames = [];\r\n isStopDrawing = true;\r\n isPausedRecording = false;\r\n }\r\n\r\n // for debugging\r\n this.name = 'WhammyRecorder';\r\n this.toString = function() {\r\n return this.name;\r\n };\r\n\r\n var canvas = document.createElement('canvas');\r\n var context = canvas.getContext('2d');\r\n\r\n var video;\r\n var lastTime;\r\n var whammy;\r\n}\r\n\r\nif (typeof RecordRTC !== 'undefined') {\r\n RecordRTC.WhammyRecorder = WhammyRecorder;\r\n}\n\r\n// https://github.com/antimatter15/whammy/blob/master/LICENSE\r\n// _________\r\n// Whammy.js\r\n\r\n// todo: Firefox now supports webp for webm containers!\r\n// their MediaRecorder implementation works well!\r\n// should we provide an option to record via Whammy.js or MediaRecorder API is a better solution?\r\n\r\n/**\r\n * Whammy is a standalone class used by {@link RecordRTC} to bring video recording in Chrome. It is written by {@link https://github.com/antimatter15|antimatter15}\r\n * @summary A real time javascript webm encoder based on a canvas hack.\r\n * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT}\r\n * @author {@link https://MuazKhan.com|Muaz Khan}\r\n * @typedef Whammy\r\n * @class\r\n * @example\r\n * var recorder = new Whammy().Video(15);\r\n * recorder.add(context || canvas || dataURL);\r\n * var output = recorder.compile();\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n */\r\n\r\nvar Whammy = (function() {\r\n // a more abstract-ish API\r\n\r\n function WhammyVideo(duration) {\r\n this.frames = [];\r\n this.duration = duration || 1;\r\n this.quality = 0.8;\r\n }\r\n\r\n /**\r\n * Pass Canvas or Context or image/webp(string) to {@link Whammy} encoder.\r\n * @method\r\n * @memberof Whammy\r\n * @example\r\n * recorder = new Whammy().Video(0.8, 100);\r\n * recorder.add(canvas || context || 'image/webp');\r\n * @param {string} frame - Canvas || Context || image/webp\r\n * @param {number} duration - Stick a duration (in milliseconds)\r\n */\r\n WhammyVideo.prototype.add = function(frame, duration) {\r\n if ('canvas' in frame) { //CanvasRenderingContext2D\r\n frame = frame.canvas;\r\n }\r\n\r\n if ('toDataURL' in frame) {\r\n frame = frame.toDataURL('image/webp', this.quality);\r\n }\r\n\r\n if (!(/^data:image\\/webp;base64,/ig).test(frame)) {\r\n throw 'Input must be formatted properly as a base64 encoded DataURI of type image/webp';\r\n }\r\n this.frames.push({\r\n image: frame,\r\n duration: duration || this.duration\r\n });\r\n };\r\n\r\n function processInWebWorker(_function) {\r\n var blob = URL.createObjectURL(new Blob([_function.toString(),\r\n 'this.onmessage = function (eee) {' + _function.name + '(eee.data);}'\r\n ], {\r\n type: 'application/javascript'\r\n }));\r\n\r\n var worker = new Worker(blob);\r\n URL.revokeObjectURL(blob);\r\n return worker;\r\n }\r\n\r\n function whammyInWebWorker(frames) {\r\n function ArrayToWebM(frames) {\r\n var info = checkFrames(frames);\r\n if (!info) {\r\n return [];\r\n }\r\n\r\n var clusterMaxDuration = 30000;\r\n\r\n var EBML = [{\r\n 'id': 0x1a45dfa3, // EBML\r\n 'data': [{\r\n 'data': 1,\r\n 'id': 0x4286 // EBMLVersion\r\n }, {\r\n 'data': 1,\r\n 'id': 0x42f7 // EBMLReadVersion\r\n }, {\r\n 'data': 4,\r\n 'id': 0x42f2 // EBMLMaxIDLength\r\n }, {\r\n 'data': 8,\r\n 'id': 0x42f3 // EBMLMaxSizeLength\r\n }, {\r\n 'data': 'webm',\r\n 'id': 0x4282 // DocType\r\n }, {\r\n 'data': 2,\r\n 'id': 0x4287 // DocTypeVersion\r\n }, {\r\n 'data': 2,\r\n 'id': 0x4285 // DocTypeReadVersion\r\n }]\r\n }, {\r\n 'id': 0x18538067, // Segment\r\n 'data': [{\r\n 'id': 0x1549a966, // Info\r\n 'data': [{\r\n 'data': 1e6, //do things in millisecs (num of nanosecs for duration scale)\r\n 'id': 0x2ad7b1 // TimecodeScale\r\n }, {\r\n 'data': 'whammy',\r\n 'id': 0x4d80 // MuxingApp\r\n }, {\r\n 'data': 'whammy',\r\n 'id': 0x5741 // WritingApp\r\n }, {\r\n 'data': doubleToString(info.duration),\r\n 'id': 0x4489 // Duration\r\n }]\r\n }, {\r\n 'id': 0x1654ae6b, // Tracks\r\n 'data': [{\r\n 'id': 0xae, // TrackEntry\r\n 'data': [{\r\n 'data': 1,\r\n 'id': 0xd7 // TrackNumber\r\n }, {\r\n 'data': 1,\r\n 'id': 0x73c5 // TrackUID\r\n }, {\r\n 'data': 0,\r\n 'id': 0x9c // FlagLacing\r\n }, {\r\n 'data': 'und',\r\n 'id': 0x22b59c // Language\r\n }, {\r\n 'data': 'V_VP8',\r\n 'id': 0x86 // CodecID\r\n }, {\r\n 'data': 'VP8',\r\n 'id': 0x258688 // CodecName\r\n }, {\r\n 'data': 1,\r\n 'id': 0x83 // TrackType\r\n }, {\r\n 'id': 0xe0, // Video\r\n 'data': [{\r\n 'data': info.width,\r\n 'id': 0xb0 // PixelWidth\r\n }, {\r\n 'data': info.height,\r\n 'id': 0xba // PixelHeight\r\n }]\r\n }]\r\n }]\r\n }]\r\n }];\r\n\r\n //Generate clusters (max duration)\r\n var frameNumber = 0;\r\n var clusterTimecode = 0;\r\n while (frameNumber < frames.length) {\r\n\r\n var clusterFrames = [];\r\n var clusterDuration = 0;\r\n do {\r\n clusterFrames.push(frames[frameNumber]);\r\n clusterDuration += frames[frameNumber].duration;\r\n frameNumber++;\r\n } while (frameNumber < frames.length && clusterDuration < clusterMaxDuration);\r\n\r\n var clusterCounter = 0;\r\n var cluster = {\r\n 'id': 0x1f43b675, // Cluster\r\n 'data': getClusterData(clusterTimecode, clusterCounter, clusterFrames)\r\n }; //Add cluster to segment\r\n EBML[1].data.push(cluster);\r\n clusterTimecode += clusterDuration;\r\n }\r\n\r\n return generateEBML(EBML);\r\n }\r\n\r\n function getClusterData(clusterTimecode, clusterCounter, clusterFrames) {\r\n return [{\r\n 'data': clusterTimecode,\r\n 'id': 0xe7 // Timecode\r\n }].concat(clusterFrames.map(function(webp) {\r\n var block = makeSimpleBlock({\r\n discardable: 0,\r\n frame: webp.data.slice(4),\r\n invisible: 0,\r\n keyframe: 1,\r\n lacing: 0,\r\n trackNum: 1,\r\n timecode: Math.round(clusterCounter)\r\n });\r\n clusterCounter += webp.duration;\r\n return {\r\n data: block,\r\n id: 0xa3\r\n };\r\n }));\r\n }\r\n\r\n // sums the lengths of all the frames and gets the duration\r\n\r\n function checkFrames(frames) {\r\n if (!frames[0]) {\r\n postMessage({\r\n error: 'Something went wrong. Maybe WebP format is not supported in the current browser.'\r\n });\r\n return;\r\n }\r\n\r\n var width = frames[0].width,\r\n height = frames[0].height,\r\n duration = frames[0].duration;\r\n\r\n for (var i = 1; i < frames.length; i++) {\r\n duration += frames[i].duration;\r\n }\r\n return {\r\n duration: duration,\r\n width: width,\r\n height: height\r\n };\r\n }\r\n\r\n function numToBuffer(num) {\r\n var parts = [];\r\n while (num > 0) {\r\n parts.push(num & 0xff);\r\n num = num >> 8;\r\n }\r\n return new Uint8Array(parts.reverse());\r\n }\r\n\r\n function strToBuffer(str) {\r\n return new Uint8Array(str.split('').map(function(e) {\r\n return e.charCodeAt(0);\r\n }));\r\n }\r\n\r\n function bitsToBuffer(bits) {\r\n var data = [];\r\n var pad = (bits.length % 8) ? (new Array(1 + 8 - (bits.length % 8))).join('0') : '';\r\n bits = pad + bits;\r\n for (var i = 0; i < bits.length; i += 8) {\r\n data.push(parseInt(bits.substr(i, 8), 2));\r\n }\r\n return new Uint8Array(data);\r\n }\r\n\r\n function generateEBML(json) {\r\n var ebml = [];\r\n for (var i = 0; i < json.length; i++) {\r\n var data = json[i].data;\r\n\r\n if (typeof data === 'object') {\r\n data = generateEBML(data);\r\n }\r\n\r\n if (typeof data === 'number') {\r\n data = bitsToBuffer(data.toString(2));\r\n }\r\n\r\n if (typeof data === 'string') {\r\n data = strToBuffer(data);\r\n }\r\n\r\n var len = data.size || data.byteLength || data.length;\r\n var zeroes = Math.ceil(Math.ceil(Math.log(len) / Math.log(2)) / 8);\r\n var sizeToString = len.toString(2);\r\n var padded = (new Array((zeroes * 7 + 7 + 1) - sizeToString.length)).join('0') + sizeToString;\r\n var size = (new Array(zeroes)).join('0') + '1' + padded;\r\n\r\n ebml.push(numToBuffer(json[i].id));\r\n ebml.push(bitsToBuffer(size));\r\n ebml.push(data);\r\n }\r\n\r\n return new Blob(ebml, {\r\n type: 'video/webm'\r\n });\r\n }\r\n\r\n function toBinStrOld(bits) {\r\n var data = '';\r\n var pad = (bits.length % 8) ? (new Array(1 + 8 - (bits.length % 8))).join('0') : '';\r\n bits = pad + bits;\r\n for (var i = 0; i < bits.length; i += 8) {\r\n data += String.fromCharCode(parseInt(bits.substr(i, 8), 2));\r\n }\r\n return data;\r\n }\r\n\r\n function makeSimpleBlock(data) {\r\n var flags = 0;\r\n\r\n if (data.keyframe) {\r\n flags |= 128;\r\n }\r\n\r\n if (data.invisible) {\r\n flags |= 8;\r\n }\r\n\r\n if (data.lacing) {\r\n flags |= (data.lacing << 1);\r\n }\r\n\r\n if (data.discardable) {\r\n flags |= 1;\r\n }\r\n\r\n if (data.trackNum > 127) {\r\n throw 'TrackNumber > 127 not supported';\r\n }\r\n\r\n var out = [data.trackNum | 0x80, data.timecode >> 8, data.timecode & 0xff, flags].map(function(e) {\r\n return String.fromCharCode(e);\r\n }).join('') + data.frame;\r\n\r\n return out;\r\n }\r\n\r\n function parseWebP(riff) {\r\n var VP8 = riff.RIFF[0].WEBP[0];\r\n\r\n var frameStart = VP8.indexOf('\\x9d\\x01\\x2a'); // A VP8 keyframe starts with the 0x9d012a header\r\n for (var i = 0, c = []; i < 4; i++) {\r\n c[i] = VP8.charCodeAt(frameStart + 3 + i);\r\n }\r\n\r\n var width, height, tmp;\r\n\r\n //the code below is literally copied verbatim from the bitstream spec\r\n tmp = (c[1] << 8) | c[0];\r\n width = tmp & 0x3FFF;\r\n tmp = (c[3] << 8) | c[2];\r\n height = tmp & 0x3FFF;\r\n return {\r\n width: width,\r\n height: height,\r\n data: VP8,\r\n riff: riff\r\n };\r\n }\r\n\r\n function getStrLength(string, offset) {\r\n return parseInt(string.substr(offset + 4, 4).split('').map(function(i) {\r\n var unpadded = i.charCodeAt(0).toString(2);\r\n return (new Array(8 - unpadded.length + 1)).join('0') + unpadded;\r\n }).join(''), 2);\r\n }\r\n\r\n function parseRIFF(string) {\r\n var offset = 0;\r\n var chunks = {};\r\n\r\n while (offset < string.length) {\r\n var id = string.substr(offset, 4);\r\n var len = getStrLength(string, offset);\r\n var data = string.substr(offset + 4 + 4, len);\r\n offset += 4 + 4 + len;\r\n chunks[id] = chunks[id] || [];\r\n\r\n if (id === 'RIFF' || id === 'LIST') {\r\n chunks[id].push(parseRIFF(data));\r\n } else {\r\n chunks[id].push(data);\r\n }\r\n }\r\n return chunks;\r\n }\r\n\r\n function doubleToString(num) {\r\n return [].slice.call(\r\n new Uint8Array((new Float64Array([num])).buffer), 0).map(function(e) {\r\n return String.fromCharCode(e);\r\n }).reverse().join('');\r\n }\r\n\r\n var webm = new ArrayToWebM(frames.map(function(frame) {\r\n var webp = parseWebP(parseRIFF(atob(frame.image.slice(23))));\r\n webp.duration = frame.duration;\r\n return webp;\r\n }));\r\n\r\n postMessage(webm);\r\n }\r\n\r\n /**\r\n * Encodes frames in WebM container. It uses WebWorkinvoke to invoke 'ArrayToWebM' method.\r\n * @param {function} callback - Callback function, that is used to pass recorded blob back to the callee.\r\n * @method\r\n * @memberof Whammy\r\n * @example\r\n * recorder = new Whammy().Video(0.8, 100);\r\n * recorder.compile(function(blob) {\r\n * // blob.size - blob.type\r\n * });\r\n */\r\n WhammyVideo.prototype.compile = function(callback) {\r\n var webWorker = processInWebWorker(whammyInWebWorker);\r\n\r\n webWorker.onmessage = function(event) {\r\n if (event.data.error) {\r\n console.error(event.data.error);\r\n return;\r\n }\r\n callback(event.data);\r\n };\r\n\r\n webWorker.postMessage(this.frames);\r\n };\r\n\r\n return {\r\n /**\r\n * A more abstract-ish API.\r\n * @method\r\n * @memberof Whammy\r\n * @example\r\n * recorder = new Whammy().Video(0.8, 100);\r\n * @param {?number} speed - 0.8\r\n * @param {?number} quality - 100\r\n */\r\n Video: WhammyVideo\r\n };\r\n})();\r\n\r\nif (typeof RecordRTC !== 'undefined') {\r\n RecordRTC.Whammy = Whammy;\r\n}\n\r\n// ______________ (indexed-db)\r\n// DiskStorage.js\r\n\r\n/**\r\n * DiskStorage is a standalone object used by {@link RecordRTC} to store recorded blobs in IndexedDB storage.\r\n * @summary Writing blobs into IndexedDB.\r\n * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT}\r\n * @author {@link https://MuazKhan.com|Muaz Khan}\r\n * @example\r\n * DiskStorage.Store({\r\n * audioBlob: yourAudioBlob,\r\n * videoBlob: yourVideoBlob,\r\n * gifBlob : yourGifBlob\r\n * });\r\n * DiskStorage.Fetch(function(dataURL, type) {\r\n * if(type === 'audioBlob') { }\r\n * if(type === 'videoBlob') { }\r\n * if(type === 'gifBlob') { }\r\n * });\r\n * // DiskStorage.dataStoreName = 'recordRTC';\r\n * // DiskStorage.onError = function(error) { };\r\n * @property {function} init - This method must be called once to initialize IndexedDB ObjectStore. Though, it is auto-used internally.\r\n * @property {function} Fetch - This method fetches stored blobs from IndexedDB.\r\n * @property {function} Store - This method stores blobs in IndexedDB.\r\n * @property {function} onError - This function is invoked for any known/unknown error.\r\n * @property {string} dataStoreName - Name of the ObjectStore created in IndexedDB storage.\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n */\r\n\r\n\r\nvar DiskStorage = {\r\n /**\r\n * This method must be called once to initialize IndexedDB ObjectStore. Though, it is auto-used internally.\r\n * @method\r\n * @memberof DiskStorage\r\n * @internal\r\n * @example\r\n * DiskStorage.init();\r\n */\r\n init: function() {\r\n var self = this;\r\n\r\n if (typeof indexedDB === 'undefined' || typeof indexedDB.open === 'undefined') {\r\n console.error('IndexedDB API are not available in this browser.');\r\n return;\r\n }\r\n\r\n var dbVersion = 1;\r\n var dbName = this.dbName || location.href.replace(/\\/|:|#|%|\\.|\\[|\\]/g, ''),\r\n db;\r\n var request = indexedDB.open(dbName, dbVersion);\r\n\r\n function createObjectStore(dataBase) {\r\n dataBase.createObjectStore(self.dataStoreName);\r\n }\r\n\r\n function putInDB() {\r\n var transaction = db.transaction([self.dataStoreName], 'readwrite');\r\n\r\n if (self.videoBlob) {\r\n transaction.objectStore(self.dataStoreName).put(self.videoBlob, 'videoBlob');\r\n }\r\n\r\n if (self.gifBlob) {\r\n transaction.objectStore(self.dataStoreName).put(self.gifBlob, 'gifBlob');\r\n }\r\n\r\n if (self.audioBlob) {\r\n transaction.objectStore(self.dataStoreName).put(self.audioBlob, 'audioBlob');\r\n }\r\n\r\n function getFromStore(portionName) {\r\n transaction.objectStore(self.dataStoreName).get(portionName).onsuccess = function(event) {\r\n if (self.callback) {\r\n self.callback(event.target.result, portionName);\r\n }\r\n };\r\n }\r\n\r\n getFromStore('audioBlob');\r\n getFromStore('videoBlob');\r\n getFromStore('gifBlob');\r\n }\r\n\r\n request.onerror = self.onError;\r\n\r\n request.onsuccess = function() {\r\n db = request.result;\r\n db.onerror = self.onError;\r\n\r\n if (db.setVersion) {\r\n if (db.version !== dbVersion) {\r\n var setVersion = db.setVersion(dbVersion);\r\n setVersion.onsuccess = function() {\r\n createObjectStore(db);\r\n putInDB();\r\n };\r\n } else {\r\n putInDB();\r\n }\r\n } else {\r\n putInDB();\r\n }\r\n };\r\n request.onupgradeneeded = function(event) {\r\n createObjectStore(event.target.result);\r\n };\r\n },\r\n /**\r\n * This method fetches stored blobs from IndexedDB.\r\n * @method\r\n * @memberof DiskStorage\r\n * @internal\r\n * @example\r\n * DiskStorage.Fetch(function(dataURL, type) {\r\n * if(type === 'audioBlob') { }\r\n * if(type === 'videoBlob') { }\r\n * if(type === 'gifBlob') { }\r\n * });\r\n */\r\n Fetch: function(callback) {\r\n this.callback = callback;\r\n this.init();\r\n\r\n return this;\r\n },\r\n /**\r\n * This method stores blobs in IndexedDB.\r\n * @method\r\n * @memberof DiskStorage\r\n * @internal\r\n * @example\r\n * DiskStorage.Store({\r\n * audioBlob: yourAudioBlob,\r\n * videoBlob: yourVideoBlob,\r\n * gifBlob : yourGifBlob\r\n * });\r\n */\r\n Store: function(config) {\r\n this.audioBlob = config.audioBlob;\r\n this.videoBlob = config.videoBlob;\r\n this.gifBlob = config.gifBlob;\r\n\r\n this.init();\r\n\r\n return this;\r\n },\r\n /**\r\n * This function is invoked for any known/unknown error.\r\n * @method\r\n * @memberof DiskStorage\r\n * @internal\r\n * @example\r\n * DiskStorage.onError = function(error){\r\n * alerot( JSON.stringify(error) );\r\n * };\r\n */\r\n onError: function(error) {\r\n console.error(JSON.stringify(error, null, '\\t'));\r\n },\r\n\r\n /**\r\n * @property {string} dataStoreName - Name of the ObjectStore created in IndexedDB storage.\r\n * @memberof DiskStorage\r\n * @internal\r\n * @example\r\n * DiskStorage.dataStoreName = 'recordRTC';\r\n */\r\n dataStoreName: 'recordRTC',\r\n dbName: null\r\n};\r\n\r\nif (typeof RecordRTC !== 'undefined') {\r\n RecordRTC.DiskStorage = DiskStorage;\r\n}\n\r\n// ______________\r\n// GifRecorder.js\r\n\r\n/**\r\n * GifRecorder is standalone calss used by {@link RecordRTC} to record video or canvas into animated gif.\r\n * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT}\r\n * @author {@link https://MuazKhan.com|Muaz Khan}\r\n * @typedef GifRecorder\r\n * @class\r\n * @example\r\n * var recorder = new GifRecorder(mediaStream || canvas || context, { onGifPreview: function, onGifRecordingStarted: function, width: 1280, height: 720, frameRate: 200, quality: 10 });\r\n * recorder.record();\r\n * recorder.stop(function(blob) {\r\n * img.src = URL.createObjectURL(blob);\r\n * });\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n * @param {MediaStream} mediaStream - MediaStream object or HTMLCanvasElement or CanvasRenderingContext2D.\r\n * @param {object} config - {disableLogs:true, initCallback: function, width: 320, height: 240, frameRate: 200, quality: 10}\r\n */\r\n\r\nfunction GifRecorder(mediaStream, config) {\r\n if (typeof GIFEncoder === 'undefined') {\r\n var script = document.createElement('script');\r\n script.src = 'https://www.webrtc-experiment.com/gif-recorder.js';\r\n (document.body || document.documentElement).appendChild(script);\r\n }\r\n\r\n config = config || {};\r\n\r\n var isHTMLObject = mediaStream instanceof CanvasRenderingContext2D || mediaStream instanceof HTMLCanvasElement;\r\n\r\n /**\r\n * This method records MediaStream.\r\n * @method\r\n * @memberof GifRecorder\r\n * @example\r\n * recorder.record();\r\n */\r\n this.record = function() {\r\n if (typeof GIFEncoder === 'undefined') {\r\n setTimeout(self.record, 1000);\r\n return;\r\n }\r\n\r\n if (!isLoadedMetaData) {\r\n setTimeout(self.record, 1000);\r\n return;\r\n }\r\n\r\n if (!isHTMLObject) {\r\n if (!config.width) {\r\n config.width = video.offsetWidth || 320;\r\n }\r\n\r\n if (!config.height) {\r\n config.height = video.offsetHeight || 240;\r\n }\r\n\r\n if (!config.video) {\r\n config.video = {\r\n width: config.width,\r\n height: config.height\r\n };\r\n }\r\n\r\n if (!config.canvas) {\r\n config.canvas = {\r\n width: config.width,\r\n height: config.height\r\n };\r\n }\r\n\r\n canvas.width = config.canvas.width || 320;\r\n canvas.height = config.canvas.height || 240;\r\n\r\n video.width = config.video.width || 320;\r\n video.height = config.video.height || 240;\r\n }\r\n\r\n // external library to record as GIF images\r\n gifEncoder = new GIFEncoder();\r\n\r\n // void setRepeat(int iter) \r\n // Sets the number of times the set of GIF frames should be played. \r\n // Default is 1; 0 means play indefinitely.\r\n gifEncoder.setRepeat(0);\r\n\r\n // void setFrameRate(Number fps) \r\n // Sets frame rate in frames per second. \r\n // Equivalent to setDelay(1000/fps).\r\n // Using \"setDelay\" instead of \"setFrameRate\"\r\n gifEncoder.setDelay(config.frameRate || 200);\r\n\r\n // void setQuality(int quality) \r\n // Sets quality of color quantization (conversion of images to the \r\n // maximum 256 colors allowed by the GIF specification). \r\n // Lower values (minimum = 1) produce better colors, \r\n // but slow processing significantly. 10 is the default, \r\n // and produces good color mapping at reasonable speeds. \r\n // Values greater than 20 do not yield significant improvements in speed.\r\n gifEncoder.setQuality(config.quality || 10);\r\n\r\n // Boolean start() \r\n // This writes the GIF Header and returns false if it fails.\r\n gifEncoder.start();\r\n\r\n if (typeof config.onGifRecordingStarted === 'function') {\r\n config.onGifRecordingStarted();\r\n }\r\n\r\n startTime = Date.now();\r\n\r\n function drawVideoFrame(time) {\r\n if (self.clearedRecordedData === true) {\r\n return;\r\n }\r\n\r\n if (isPausedRecording) {\r\n return setTimeout(function() {\r\n drawVideoFrame(time);\r\n }, 100);\r\n }\r\n\r\n lastAnimationFrame = requestAnimationFrame(drawVideoFrame);\r\n\r\n if (typeof lastFrameTime === undefined) {\r\n lastFrameTime = time;\r\n }\r\n\r\n // ~10 fps\r\n if (time - lastFrameTime < 90) {\r\n return;\r\n }\r\n\r\n if (!isHTMLObject && video.paused) {\r\n // via: https://github.com/muaz-khan/WebRTC-Experiment/pull/316\r\n // Tweak for Android Chrome\r\n video.play();\r\n }\r\n\r\n if (!isHTMLObject) {\r\n context.drawImage(video, 0, 0, canvas.width, canvas.height);\r\n }\r\n\r\n if (config.onGifPreview) {\r\n config.onGifPreview(canvas.toDataURL('image/png'));\r\n }\r\n\r\n gifEncoder.addFrame(context);\r\n lastFrameTime = time;\r\n }\r\n\r\n lastAnimationFrame = requestAnimationFrame(drawVideoFrame);\r\n\r\n if (config.initCallback) {\r\n config.initCallback();\r\n }\r\n };\r\n\r\n /**\r\n * This method stops recording MediaStream.\r\n * @param {function} callback - Callback function, that is used to pass recorded blob back to the callee.\r\n * @method\r\n * @memberof GifRecorder\r\n * @example\r\n * recorder.stop(function(blob) {\r\n * img.src = URL.createObjectURL(blob);\r\n * });\r\n */\r\n this.stop = function(callback) {\r\n callback = callback || function() {};\r\n\r\n if (lastAnimationFrame) {\r\n cancelAnimationFrame(lastAnimationFrame);\r\n }\r\n\r\n endTime = Date.now();\r\n\r\n /**\r\n * @property {Blob} blob - The recorded blob object.\r\n * @memberof GifRecorder\r\n * @example\r\n * recorder.stop(function(){\r\n * var blob = recorder.blob;\r\n * });\r\n */\r\n this.blob = new Blob([new Uint8Array(gifEncoder.stream().bin)], {\r\n type: 'image/gif'\r\n });\r\n\r\n callback(this.blob);\r\n\r\n // bug: find a way to clear old recorded blobs\r\n gifEncoder.stream().bin = [];\r\n };\r\n\r\n var isPausedRecording = false;\r\n\r\n /**\r\n * This method pauses the recording process.\r\n * @method\r\n * @memberof GifRecorder\r\n * @example\r\n * recorder.pause();\r\n */\r\n this.pause = function() {\r\n isPausedRecording = true;\r\n };\r\n\r\n /**\r\n * This method resumes the recording process.\r\n * @method\r\n * @memberof GifRecorder\r\n * @example\r\n * recorder.resume();\r\n */\r\n this.resume = function() {\r\n isPausedRecording = false;\r\n };\r\n\r\n /**\r\n * This method resets currently recorded data.\r\n * @method\r\n * @memberof GifRecorder\r\n * @example\r\n * recorder.clearRecordedData();\r\n */\r\n this.clearRecordedData = function() {\r\n self.clearedRecordedData = true;\r\n clearRecordedDataCB();\r\n };\r\n\r\n function clearRecordedDataCB() {\r\n if (gifEncoder) {\r\n gifEncoder.stream().bin = [];\r\n }\r\n }\r\n\r\n // for debugging\r\n this.name = 'GifRecorder';\r\n this.toString = function() {\r\n return this.name;\r\n };\r\n\r\n var canvas = document.createElement('canvas');\r\n var context = canvas.getContext('2d');\r\n\r\n if (isHTMLObject) {\r\n if (mediaStream instanceof CanvasRenderingContext2D) {\r\n context = mediaStream;\r\n canvas = context.canvas;\r\n } else if (mediaStream instanceof HTMLCanvasElement) {\r\n context = mediaStream.getContext('2d');\r\n canvas = mediaStream;\r\n }\r\n }\r\n\r\n var isLoadedMetaData = true;\r\n\r\n if (!isHTMLObject) {\r\n var video = document.createElement('video');\r\n video.muted = true;\r\n video.autoplay = true;\r\n video.playsInline = true;\r\n\r\n isLoadedMetaData = false;\r\n video.onloadedmetadata = function() {\r\n isLoadedMetaData = true;\r\n };\r\n\r\n setSrcObject(mediaStream, video);\r\n\r\n video.play();\r\n }\r\n\r\n var lastAnimationFrame = null;\r\n var startTime, endTime, lastFrameTime;\r\n\r\n var gifEncoder;\r\n\r\n var self = this;\r\n}\r\n\r\nif (typeof RecordRTC !== 'undefined') {\r\n RecordRTC.GifRecorder = GifRecorder;\r\n}\n\r\n// Last time updated: 2019-06-21 4:09:42 AM UTC\r\n\r\n// ________________________\r\n// MultiStreamsMixer v1.2.2\r\n\r\n// Open-Sourced: https://github.com/muaz-khan/MultiStreamsMixer\r\n\r\n// --------------------------------------------------\r\n// Muaz Khan - www.MuazKhan.com\r\n// MIT License - www.WebRTC-Experiment.com/licence\r\n// --------------------------------------------------\r\n\r\nfunction MultiStreamsMixer(arrayOfMediaStreams, elementClass) {\r\n\r\n var browserFakeUserAgent = 'Fake/5.0 (FakeOS) AppleWebKit/123 (KHTML, like Gecko) Fake/12.3.4567.89 Fake/123.45';\r\n\r\n (function(that) {\r\n if (typeof RecordRTC !== 'undefined') {\r\n return;\r\n }\r\n\r\n if (!that) {\r\n return;\r\n }\r\n\r\n if (typeof window !== 'undefined') {\r\n return;\r\n }\r\n\r\n if (typeof global === 'undefined') {\r\n return;\r\n }\r\n\r\n global.navigator = {\r\n userAgent: browserFakeUserAgent,\r\n getUserMedia: function() {}\r\n };\r\n\r\n if (!global.console) {\r\n global.console = {};\r\n }\r\n\r\n if (typeof global.console.log === 'undefined' || typeof global.console.error === 'undefined') {\r\n global.console.error = global.console.log = global.console.log || function() {\r\n console.log(arguments);\r\n };\r\n }\r\n\r\n if (typeof document === 'undefined') {\r\n /*global document:true */\r\n that.document = {\r\n documentElement: {\r\n appendChild: function() {\r\n return '';\r\n }\r\n }\r\n };\r\n\r\n document.createElement = document.captureStream = document.mozCaptureStream = function() {\r\n var obj = {\r\n getContext: function() {\r\n return obj;\r\n },\r\n play: function() {},\r\n pause: function() {},\r\n drawImage: function() {},\r\n toDataURL: function() {\r\n return '';\r\n },\r\n style: {}\r\n };\r\n return obj;\r\n };\r\n\r\n that.HTMLVideoElement = function() {};\r\n }\r\n\r\n if (typeof location === 'undefined') {\r\n /*global location:true */\r\n that.location = {\r\n protocol: 'file:',\r\n href: '',\r\n hash: ''\r\n };\r\n }\r\n\r\n if (typeof screen === 'undefined') {\r\n /*global screen:true */\r\n that.screen = {\r\n width: 0,\r\n height: 0\r\n };\r\n }\r\n\r\n if (typeof URL === 'undefined') {\r\n /*global screen:true */\r\n that.URL = {\r\n createObjectURL: function() {\r\n return '';\r\n },\r\n revokeObjectURL: function() {\r\n return '';\r\n }\r\n };\r\n }\r\n\r\n /*global window:true */\r\n that.window = global;\r\n })(typeof global !== 'undefined' ? global : null);\r\n\r\n // requires: chrome://flags/#enable-experimental-web-platform-features\r\n\r\n elementClass = elementClass || 'multi-streams-mixer';\r\n\r\n var videos = [];\r\n var isStopDrawingFrames = false;\r\n\r\n var canvas = document.createElement('canvas');\r\n var context = canvas.getContext('2d');\r\n canvas.style.opacity = 0;\r\n canvas.style.position = 'absolute';\r\n canvas.style.zIndex = -1;\r\n canvas.style.top = '-1000em';\r\n canvas.style.left = '-1000em';\r\n canvas.className = elementClass;\r\n (document.body || document.documentElement).appendChild(canvas);\r\n\r\n this.disableLogs = false;\r\n this.frameInterval = 10;\r\n\r\n this.width = 360;\r\n this.height = 240;\r\n\r\n // use gain node to prevent echo\r\n this.useGainNode = true;\r\n\r\n var self = this;\r\n\r\n // _____________________________\r\n // Cross-Browser-Declarations.js\r\n\r\n // WebAudio API representer\r\n var AudioContext = window.AudioContext;\r\n\r\n if (typeof AudioContext === 'undefined') {\r\n if (typeof webkitAudioContext !== 'undefined') {\r\n /*global AudioContext:true */\r\n AudioContext = webkitAudioContext;\r\n }\r\n\r\n if (typeof mozAudioContext !== 'undefined') {\r\n /*global AudioContext:true */\r\n AudioContext = mozAudioContext;\r\n }\r\n }\r\n\r\n /*jshint -W079 */\r\n var URL = window.URL;\r\n\r\n if (typeof URL === 'undefined' && typeof webkitURL !== 'undefined') {\r\n /*global URL:true */\r\n URL = webkitURL;\r\n }\r\n\r\n if (typeof navigator !== 'undefined' && typeof navigator.getUserMedia === 'undefined') { // maybe window.navigator?\r\n if (typeof navigator.webkitGetUserMedia !== 'undefined') {\r\n navigator.getUserMedia = navigator.webkitGetUserMedia;\r\n }\r\n\r\n if (typeof navigator.mozGetUserMedia !== 'undefined') {\r\n navigator.getUserMedia = navigator.mozGetUserMedia;\r\n }\r\n }\r\n\r\n var MediaStream = window.MediaStream;\r\n\r\n if (typeof MediaStream === 'undefined' && typeof webkitMediaStream !== 'undefined') {\r\n MediaStream = webkitMediaStream;\r\n }\r\n\r\n /*global MediaStream:true */\r\n if (typeof MediaStream !== 'undefined') {\r\n // override \"stop\" method for all browsers\r\n if (typeof MediaStream.prototype.stop === 'undefined') {\r\n MediaStream.prototype.stop = function() {\r\n this.getTracks().forEach(function(track) {\r\n track.stop();\r\n });\r\n };\r\n }\r\n }\r\n\r\n var Storage = {};\r\n\r\n if (typeof AudioContext !== 'undefined') {\r\n Storage.AudioContext = AudioContext;\r\n } else if (typeof webkitAudioContext !== 'undefined') {\r\n Storage.AudioContext = webkitAudioContext;\r\n }\r\n\r\n function setSrcObject(stream, element) {\r\n if ('srcObject' in element) {\r\n element.srcObject = stream;\r\n } else if ('mozSrcObject' in element) {\r\n element.mozSrcObject = stream;\r\n } else {\r\n element.srcObject = stream;\r\n }\r\n }\r\n\r\n this.startDrawingFrames = function() {\r\n drawVideosToCanvas();\r\n };\r\n\r\n function drawVideosToCanvas() {\r\n if (isStopDrawingFrames) {\r\n return;\r\n }\r\n\r\n var videosLength = videos.length;\r\n\r\n var fullcanvas = false;\r\n var remaining = [];\r\n videos.forEach(function(video) {\r\n if (!video.stream) {\r\n video.stream = {};\r\n }\r\n\r\n if (video.stream.fullcanvas) {\r\n fullcanvas = video;\r\n } else {\r\n // todo: video.stream.active or video.stream.live to fix blank frames issues?\r\n remaining.push(video);\r\n }\r\n });\r\n\r\n if (fullcanvas) {\r\n canvas.width = fullcanvas.stream.width;\r\n canvas.height = fullcanvas.stream.height;\r\n } else if (remaining.length) {\r\n canvas.width = videosLength > 1 ? remaining[0].width * 2 : remaining[0].width;\r\n\r\n var height = 1;\r\n if (videosLength === 3 || videosLength === 4) {\r\n height = 2;\r\n }\r\n if (videosLength === 5 || videosLength === 6) {\r\n height = 3;\r\n }\r\n if (videosLength === 7 || videosLength === 8) {\r\n height = 4;\r\n }\r\n if (videosLength === 9 || videosLength === 10) {\r\n height = 5;\r\n }\r\n canvas.height = remaining[0].height * height;\r\n } else {\r\n canvas.width = self.width || 360;\r\n canvas.height = self.height || 240;\r\n }\r\n\r\n if (fullcanvas && fullcanvas instanceof HTMLVideoElement) {\r\n drawImage(fullcanvas);\r\n }\r\n\r\n remaining.forEach(function(video, idx) {\r\n drawImage(video, idx);\r\n });\r\n\r\n setTimeout(drawVideosToCanvas, self.frameInterval);\r\n }\r\n\r\n function drawImage(video, idx) {\r\n if (isStopDrawingFrames) {\r\n return;\r\n }\r\n\r\n var x = 0;\r\n var y = 0;\r\n var width = video.width;\r\n var height = video.height;\r\n\r\n if (idx === 1) {\r\n x = video.width;\r\n }\r\n\r\n if (idx === 2) {\r\n y = video.height;\r\n }\r\n\r\n if (idx === 3) {\r\n x = video.width;\r\n y = video.height;\r\n }\r\n\r\n if (idx === 4) {\r\n y = video.height * 2;\r\n }\r\n\r\n if (idx === 5) {\r\n x = video.width;\r\n y = video.height * 2;\r\n }\r\n\r\n if (idx === 6) {\r\n y = video.height * 3;\r\n }\r\n\r\n if (idx === 7) {\r\n x = video.width;\r\n y = video.height * 3;\r\n }\r\n\r\n if (typeof video.stream.left !== 'undefined') {\r\n x = video.stream.left;\r\n }\r\n\r\n if (typeof video.stream.top !== 'undefined') {\r\n y = video.stream.top;\r\n }\r\n\r\n if (typeof video.stream.width !== 'undefined') {\r\n width = video.stream.width;\r\n }\r\n\r\n if (typeof video.stream.height !== 'undefined') {\r\n height = video.stream.height;\r\n }\r\n\r\n context.drawImage(video, x, y, width, height);\r\n\r\n if (typeof video.stream.onRender === 'function') {\r\n video.stream.onRender(context, x, y, width, height, idx);\r\n }\r\n }\r\n\r\n function getMixedStream() {\r\n isStopDrawingFrames = false;\r\n var mixedVideoStream = getMixedVideoStream();\r\n\r\n var mixedAudioStream = getMixedAudioStream();\r\n if (mixedAudioStream) {\r\n mixedAudioStream.getTracks().filter(function(t) {\r\n return t.kind === 'audio';\r\n }).forEach(function(track) {\r\n mixedVideoStream.addTrack(track);\r\n });\r\n }\r\n\r\n var fullcanvas;\r\n arrayOfMediaStreams.forEach(function(stream) {\r\n if (stream.fullcanvas) {\r\n fullcanvas = true;\r\n }\r\n });\r\n\r\n // mixedVideoStream.prototype.appendStreams = appendStreams;\r\n // mixedVideoStream.prototype.resetVideoStreams = resetVideoStreams;\r\n // mixedVideoStream.prototype.clearRecordedData = clearRecordedData;\r\n\r\n return mixedVideoStream;\r\n }\r\n\r\n function getMixedVideoStream() {\r\n resetVideoStreams();\r\n\r\n var capturedStream;\r\n\r\n if ('captureStream' in canvas) {\r\n capturedStream = canvas.captureStream();\r\n } else if ('mozCaptureStream' in canvas) {\r\n capturedStream = canvas.mozCaptureStream();\r\n } else if (!self.disableLogs) {\r\n console.error('Upgrade to latest Chrome or otherwise enable this flag: chrome://flags/#enable-experimental-web-platform-features');\r\n }\r\n\r\n var videoStream = new MediaStream();\r\n\r\n capturedStream.getTracks().filter(function(t) {\r\n return t.kind === 'video';\r\n }).forEach(function(track) {\r\n videoStream.addTrack(track);\r\n });\r\n\r\n canvas.stream = videoStream;\r\n\r\n return videoStream;\r\n }\r\n\r\n function getMixedAudioStream() {\r\n // via: @pehrsons\r\n if (!Storage.AudioContextConstructor) {\r\n Storage.AudioContextConstructor = new Storage.AudioContext();\r\n }\r\n\r\n self.audioContext = Storage.AudioContextConstructor;\r\n\r\n self.audioSources = [];\r\n\r\n if (self.useGainNode === true) {\r\n self.gainNode = self.audioContext.createGain();\r\n self.gainNode.connect(self.audioContext.destination);\r\n self.gainNode.gain.value = 0; // don't hear self\r\n }\r\n\r\n var audioTracksLength = 0;\r\n arrayOfMediaStreams.forEach(function(stream) {\r\n if (!stream.getTracks().filter(function(t) {\r\n return t.kind === 'audio';\r\n }).length) {\r\n return;\r\n }\r\n\r\n audioTracksLength++;\r\n\r\n var audioSource = self.audioContext.createMediaStreamSource(stream);\r\n\r\n if (self.useGainNode === true) {\r\n audioSource.connect(self.gainNode);\r\n }\r\n\r\n self.audioSources.push(audioSource);\r\n });\r\n\r\n if (!audioTracksLength) {\r\n // because \"self.audioContext\" is not initialized\r\n // that's why we've to ignore rest of the code\r\n return;\r\n }\r\n\r\n self.audioDestination = self.audioContext.createMediaStreamDestination();\r\n self.audioSources.forEach(function(audioSource) {\r\n audioSource.connect(self.audioDestination);\r\n });\r\n return self.audioDestination.stream;\r\n }\r\n\r\n function getVideo(stream) {\r\n var video = document.createElement('video');\r\n\r\n setSrcObject(stream, video);\r\n\r\n video.className = elementClass;\r\n\r\n video.muted = true;\r\n video.volume = 0;\r\n\r\n video.width = stream.width || self.width || 360;\r\n video.height = stream.height || self.height || 240;\r\n\r\n video.play();\r\n\r\n return video;\r\n }\r\n\r\n this.appendStreams = function(streams) {\r\n if (!streams) {\r\n throw 'First parameter is required.';\r\n }\r\n\r\n if (!(streams instanceof Array)) {\r\n streams = [streams];\r\n }\r\n\r\n streams.forEach(function(stream) {\r\n var newStream = new MediaStream();\r\n\r\n if (stream.getTracks().filter(function(t) {\r\n return t.kind === 'video';\r\n }).length) {\r\n var video = getVideo(stream);\r\n video.stream = stream;\r\n videos.push(video);\r\n\r\n newStream.addTrack(stream.getTracks().filter(function(t) {\r\n return t.kind === 'video';\r\n })[0]);\r\n }\r\n\r\n if (stream.getTracks().filter(function(t) {\r\n return t.kind === 'audio';\r\n }).length) {\r\n var audioSource = self.audioContext.createMediaStreamSource(stream);\r\n self.audioDestination = self.audioContext.createMediaStreamDestination();\r\n audioSource.connect(self.audioDestination);\r\n\r\n newStream.addTrack(self.audioDestination.stream.getTracks().filter(function(t) {\r\n return t.kind === 'audio';\r\n })[0]);\r\n }\r\n\r\n arrayOfMediaStreams.push(newStream);\r\n });\r\n };\r\n\r\n this.releaseStreams = function() {\r\n videos = [];\r\n isStopDrawingFrames = true;\r\n\r\n if (self.gainNode) {\r\n self.gainNode.disconnect();\r\n self.gainNode = null;\r\n }\r\n\r\n if (self.audioSources.length) {\r\n self.audioSources.forEach(function(source) {\r\n source.disconnect();\r\n });\r\n self.audioSources = [];\r\n }\r\n\r\n if (self.audioDestination) {\r\n self.audioDestination.disconnect();\r\n self.audioDestination = null;\r\n }\r\n\r\n if (self.audioContext) {\r\n self.audioContext.close();\r\n }\r\n\r\n self.audioContext = null;\r\n\r\n context.clearRect(0, 0, canvas.width, canvas.height);\r\n\r\n if (canvas.stream) {\r\n canvas.stream.stop();\r\n canvas.stream = null;\r\n }\r\n };\r\n\r\n this.resetVideoStreams = function(streams) {\r\n if (streams && !(streams instanceof Array)) {\r\n streams = [streams];\r\n }\r\n\r\n resetVideoStreams(streams);\r\n };\r\n\r\n function resetVideoStreams(streams) {\r\n videos = [];\r\n streams = streams || arrayOfMediaStreams;\r\n\r\n // via: @adrian-ber\r\n streams.forEach(function(stream) {\r\n if (!stream.getTracks().filter(function(t) {\r\n return t.kind === 'video';\r\n }).length) {\r\n return;\r\n }\r\n\r\n var video = getVideo(stream);\r\n video.stream = stream;\r\n videos.push(video);\r\n });\r\n }\r\n\r\n // for debugging\r\n this.name = 'MultiStreamsMixer';\r\n this.toString = function() {\r\n return this.name;\r\n };\r\n\r\n this.getMixedStream = getMixedStream;\r\n\r\n}\r\n\r\nif (typeof RecordRTC === 'undefined') {\r\n if (typeof module !== 'undefined' /* && !!module.exports*/ ) {\r\n module.exports = MultiStreamsMixer;\r\n }\r\n\r\n if (typeof define === 'function' && define.amd) {\r\n define('MultiStreamsMixer', [], function() {\r\n return MultiStreamsMixer;\r\n });\r\n }\r\n}\n\r\n// ______________________\r\n// MultiStreamRecorder.js\r\n\r\n/*\r\n * Video conference recording, using captureStream API along with WebAudio and Canvas2D API.\r\n */\r\n\r\n/**\r\n * MultiStreamRecorder can record multiple videos in single container.\r\n * @summary Multi-videos recorder.\r\n * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT}\r\n * @author {@link https://MuazKhan.com|Muaz Khan}\r\n * @typedef MultiStreamRecorder\r\n * @class\r\n * @example\r\n * var options = {\r\n * mimeType: 'video/webm'\r\n * }\r\n * var recorder = new MultiStreamRecorder(ArrayOfMediaStreams, options);\r\n * recorder.record();\r\n * recorder.stop(function(blob) {\r\n * video.src = URL.createObjectURL(blob);\r\n *\r\n * // or\r\n * var blob = recorder.blob;\r\n * });\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n * @param {MediaStreams} mediaStreams - Array of MediaStreams.\r\n * @param {object} config - {disableLogs:true, frameInterval: 1, mimeType: \"video/webm\"}\r\n */\r\n\r\nfunction MultiStreamRecorder(arrayOfMediaStreams, options) {\r\n arrayOfMediaStreams = arrayOfMediaStreams || [];\r\n var self = this;\r\n\r\n var mixer;\r\n var mediaRecorder;\r\n\r\n options = options || {\r\n elementClass: 'multi-streams-mixer',\r\n mimeType: 'video/webm',\r\n video: {\r\n width: 360,\r\n height: 240\r\n }\r\n };\r\n\r\n if (!options.frameInterval) {\r\n options.frameInterval = 10;\r\n }\r\n\r\n if (!options.video) {\r\n options.video = {};\r\n }\r\n\r\n if (!options.video.width) {\r\n options.video.width = 360;\r\n }\r\n\r\n if (!options.video.height) {\r\n options.video.height = 240;\r\n }\r\n\r\n /**\r\n * This method records all MediaStreams.\r\n * @method\r\n * @memberof MultiStreamRecorder\r\n * @example\r\n * recorder.record();\r\n */\r\n this.record = function() {\r\n // github/muaz-khan/MultiStreamsMixer\r\n mixer = new MultiStreamsMixer(arrayOfMediaStreams, options.elementClass || 'multi-streams-mixer');\r\n\r\n if (getAllVideoTracks().length) {\r\n mixer.frameInterval = options.frameInterval || 10;\r\n mixer.width = options.video.width || 360;\r\n mixer.height = options.video.height || 240;\r\n mixer.startDrawingFrames();\r\n }\r\n\r\n if (options.previewStream && typeof options.previewStream === 'function') {\r\n options.previewStream(mixer.getMixedStream());\r\n }\r\n\r\n // record using MediaRecorder API\r\n mediaRecorder = new MediaStreamRecorder(mixer.getMixedStream(), options);\r\n mediaRecorder.record();\r\n };\r\n\r\n function getAllVideoTracks() {\r\n var tracks = [];\r\n arrayOfMediaStreams.forEach(function(stream) {\r\n getTracks(stream, 'video').forEach(function(track) {\r\n tracks.push(track);\r\n });\r\n });\r\n return tracks;\r\n }\r\n\r\n /**\r\n * This method stops recording MediaStream.\r\n * @param {function} callback - Callback function, that is used to pass recorded blob back to the callee.\r\n * @method\r\n * @memberof MultiStreamRecorder\r\n * @example\r\n * recorder.stop(function(blob) {\r\n * video.src = URL.createObjectURL(blob);\r\n * });\r\n */\r\n this.stop = function(callback) {\r\n if (!mediaRecorder) {\r\n return;\r\n }\r\n\r\n mediaRecorder.stop(function(blob) {\r\n self.blob = blob;\r\n\r\n callback(blob);\r\n\r\n self.clearRecordedData();\r\n });\r\n };\r\n\r\n /**\r\n * This method pauses the recording process.\r\n * @method\r\n * @memberof MultiStreamRecorder\r\n * @example\r\n * recorder.pause();\r\n */\r\n this.pause = function() {\r\n if (mediaRecorder) {\r\n mediaRecorder.pause();\r\n }\r\n };\r\n\r\n /**\r\n * This method resumes the recording process.\r\n * @method\r\n * @memberof MultiStreamRecorder\r\n * @example\r\n * recorder.resume();\r\n */\r\n this.resume = function() {\r\n if (mediaRecorder) {\r\n mediaRecorder.resume();\r\n }\r\n };\r\n\r\n /**\r\n * This method resets currently recorded data.\r\n * @method\r\n * @memberof MultiStreamRecorder\r\n * @example\r\n * recorder.clearRecordedData();\r\n */\r\n this.clearRecordedData = function() {\r\n if (mediaRecorder) {\r\n mediaRecorder.clearRecordedData();\r\n mediaRecorder = null;\r\n }\r\n\r\n if (mixer) {\r\n mixer.releaseStreams();\r\n mixer = null;\r\n }\r\n };\r\n\r\n /**\r\n * Add extra media-streams to existing recordings.\r\n * @method\r\n * @memberof MultiStreamRecorder\r\n * @param {MediaStreams} mediaStreams - Array of MediaStreams\r\n * @example\r\n * recorder.addStreams([newAudioStream, newVideoStream]);\r\n */\r\n this.addStreams = function(streams) {\r\n if (!streams) {\r\n throw 'First parameter is required.';\r\n }\r\n\r\n if (!(streams instanceof Array)) {\r\n streams = [streams];\r\n }\r\n\r\n arrayOfMediaStreams.concat(streams);\r\n\r\n if (!mediaRecorder || !mixer) {\r\n return;\r\n }\r\n\r\n mixer.appendStreams(streams);\r\n\r\n if (options.previewStream && typeof options.previewStream === 'function') {\r\n options.previewStream(mixer.getMixedStream());\r\n }\r\n };\r\n\r\n /**\r\n * Reset videos during live recording. Replace old videos e.g. replace cameras with full-screen.\r\n * @method\r\n * @memberof MultiStreamRecorder\r\n * @param {MediaStreams} mediaStreams - Array of MediaStreams\r\n * @example\r\n * recorder.resetVideoStreams([newVideo1, newVideo2]);\r\n */\r\n this.resetVideoStreams = function(streams) {\r\n if (!mixer) {\r\n return;\r\n }\r\n\r\n if (streams && !(streams instanceof Array)) {\r\n streams = [streams];\r\n }\r\n\r\n mixer.resetVideoStreams(streams);\r\n };\r\n\r\n /**\r\n * Returns MultiStreamsMixer\r\n * @method\r\n * @memberof MultiStreamRecorder\r\n * @example\r\n * let mixer = recorder.getMixer();\r\n * mixer.appendStreams([newStream]);\r\n */\r\n this.getMixer = function() {\r\n return mixer;\r\n };\r\n\r\n // for debugging\r\n this.name = 'MultiStreamRecorder';\r\n this.toString = function() {\r\n return this.name;\r\n };\r\n}\r\n\r\nif (typeof RecordRTC !== 'undefined') {\r\n RecordRTC.MultiStreamRecorder = MultiStreamRecorder;\r\n}\n\r\n// _____________________\r\n// RecordRTC.promises.js\r\n\r\n/**\r\n * RecordRTCPromisesHandler adds promises support in {@link RecordRTC}. Try a {@link https://github.com/muaz-khan/RecordRTC/blob/master/simple-demos/RecordRTCPromisesHandler.html|demo here}\r\n * @summary Promises for {@link RecordRTC}\r\n * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT}\r\n * @author {@link https://MuazKhan.com|Muaz Khan}\r\n * @typedef RecordRTCPromisesHandler\r\n * @class\r\n * @example\r\n * var recorder = new RecordRTCPromisesHandler(mediaStream, options);\r\n * recorder.startRecording()\r\n * .then(successCB)\r\n * .catch(errorCB);\r\n * // Note: You can access all RecordRTC API using \"recorder.recordRTC\" e.g. \r\n * recorder.recordRTC.onStateChanged = function(state) {};\r\n * recorder.recordRTC.setRecordingDuration(5000);\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n * @param {MediaStream} mediaStream - Single media-stream object, array of media-streams, html-canvas-element, etc.\r\n * @param {object} config - {type:\"video\", recorderType: MediaStreamRecorder, disableLogs: true, numberOfAudioChannels: 1, bufferSize: 0, sampleRate: 0, video: HTMLVideoElement, etc.}\r\n * @throws Will throw an error if \"new\" keyword is not used to initiate \"RecordRTCPromisesHandler\". Also throws error if first argument \"MediaStream\" is missing.\r\n * @requires {@link RecordRTC}\r\n */\r\n\r\nfunction RecordRTCPromisesHandler(mediaStream, options) {\r\n if (!this) {\r\n throw 'Use \"new RecordRTCPromisesHandler()\"';\r\n }\r\n\r\n if (typeof mediaStream === 'undefined') {\r\n throw 'First argument \"MediaStream\" is required.';\r\n }\r\n\r\n var self = this;\r\n\r\n /**\r\n * @property {Blob} blob - Access/reach the native {@link RecordRTC} object.\r\n * @memberof RecordRTCPromisesHandler\r\n * @example\r\n * let internal = recorder.recordRTC.getInternalRecorder();\r\n * alert(internal instanceof MediaStreamRecorder);\r\n * recorder.recordRTC.onStateChanged = function(state) {};\r\n */\r\n self.recordRTC = new RecordRTC(mediaStream, options);\r\n\r\n /**\r\n * This method records MediaStream.\r\n * @method\r\n * @memberof RecordRTCPromisesHandler\r\n * @example\r\n * recorder.startRecording()\r\n * .then(successCB)\r\n * .catch(errorCB);\r\n */\r\n this.startRecording = function() {\r\n return new Promise(function(resolve, reject) {\r\n try {\r\n self.recordRTC.startRecording();\r\n resolve();\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * This method stops the recording.\r\n * @method\r\n * @memberof RecordRTCPromisesHandler\r\n * @example\r\n * recorder.stopRecording().then(function() {\r\n * var blob = recorder.getBlob();\r\n * }).catch(errorCB);\r\n */\r\n this.stopRecording = function() {\r\n return new Promise(function(resolve, reject) {\r\n try {\r\n self.recordRTC.stopRecording(function(url) {\r\n self.blob = self.recordRTC.getBlob();\r\n\r\n if (!self.blob || !self.blob.size) {\r\n reject('Empty blob.', self.blob);\r\n return;\r\n }\r\n\r\n resolve(url);\r\n });\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * This method pauses the recording. You can resume recording using \"resumeRecording\" method.\r\n * @method\r\n * @memberof RecordRTCPromisesHandler\r\n * @example\r\n * recorder.pauseRecording()\r\n * .then(successCB)\r\n * .catch(errorCB);\r\n */\r\n this.pauseRecording = function() {\r\n return new Promise(function(resolve, reject) {\r\n try {\r\n self.recordRTC.pauseRecording();\r\n resolve();\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * This method resumes the recording.\r\n * @method\r\n * @memberof RecordRTCPromisesHandler\r\n * @example\r\n * recorder.resumeRecording()\r\n * .then(successCB)\r\n * .catch(errorCB);\r\n */\r\n this.resumeRecording = function() {\r\n return new Promise(function(resolve, reject) {\r\n try {\r\n self.recordRTC.resumeRecording();\r\n resolve();\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * This method returns data-url for the recorded blob.\r\n * @method\r\n * @memberof RecordRTCPromisesHandler\r\n * @example\r\n * recorder.stopRecording().then(function() {\r\n * recorder.getDataURL().then(function(dataURL) {\r\n * window.open(dataURL);\r\n * }).catch(errorCB);;\r\n * }).catch(errorCB);\r\n */\r\n this.getDataURL = function(callback) {\r\n return new Promise(function(resolve, reject) {\r\n try {\r\n self.recordRTC.getDataURL(function(dataURL) {\r\n resolve(dataURL);\r\n });\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * This method returns the recorded blob.\r\n * @method\r\n * @memberof RecordRTCPromisesHandler\r\n * @example\r\n * recorder.stopRecording().then(function() {\r\n * recorder.getBlob().then(function(blob) {})\r\n * }).catch(errorCB);\r\n */\r\n this.getBlob = function() {\r\n return new Promise(function(resolve, reject) {\r\n try {\r\n resolve(self.recordRTC.getBlob());\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * This method returns the internal recording object.\r\n * @method\r\n * @memberof RecordRTCPromisesHandler\r\n * @example\r\n * let internalRecorder = await recorder.getInternalRecorder();\r\n * if(internalRecorder instanceof MultiStreamRecorder) {\r\n * internalRecorder.addStreams([newAudioStream]);\r\n * internalRecorder.resetVideoStreams([screenStream]);\r\n * }\r\n * @returns {Object} \r\n */\r\n this.getInternalRecorder = function() {\r\n return new Promise(function(resolve, reject) {\r\n try {\r\n resolve(self.recordRTC.getInternalRecorder());\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * This method resets the recorder. So that you can reuse single recorder instance many times.\r\n * @method\r\n * @memberof RecordRTCPromisesHandler\r\n * @example\r\n * await recorder.reset();\r\n * recorder.startRecording(); // record again\r\n */\r\n this.reset = function() {\r\n return new Promise(function(resolve, reject) {\r\n try {\r\n resolve(self.recordRTC.reset());\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * Destroy RecordRTC instance. Clear all recorders and objects.\r\n * @method\r\n * @memberof RecordRTCPromisesHandler\r\n * @example\r\n * recorder.destroy().then(successCB).catch(errorCB);\r\n */\r\n this.destroy = function() {\r\n return new Promise(function(resolve, reject) {\r\n try {\r\n resolve(self.recordRTC.destroy());\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * Get recorder's readonly state.\r\n * @method\r\n * @memberof RecordRTCPromisesHandler\r\n * @example\r\n * let state = await recorder.getState();\r\n * // or\r\n * recorder.getState().then(state => { console.log(state); })\r\n * @returns {String} Returns recording state.\r\n */\r\n this.getState = function() {\r\n return new Promise(function(resolve, reject) {\r\n try {\r\n resolve(self.recordRTC.getState());\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * @property {Blob} blob - Recorded data as \"Blob\" object.\r\n * @memberof RecordRTCPromisesHandler\r\n * @example\r\n * await recorder.stopRecording();\r\n * let blob = recorder.getBlob(); // or \"recorder.recordRTC.blob\"\r\n * invokeSaveAsDialog(blob);\r\n */\r\n this.blob = null;\r\n\r\n /**\r\n * RecordRTC version number\r\n * @property {String} version - Release version number.\r\n * @memberof RecordRTCPromisesHandler\r\n * @static\r\n * @readonly\r\n * @example\r\n * alert(recorder.version);\r\n */\r\n this.version = '5.6.2';\r\n}\r\n\r\nif (typeof RecordRTC !== 'undefined') {\r\n RecordRTC.RecordRTCPromisesHandler = RecordRTCPromisesHandler;\r\n}\n\r\n// ______________________\r\n// WebAssemblyRecorder.js\r\n\r\n/**\r\n * WebAssemblyRecorder lets you create webm videos in JavaScript via WebAssembly. The library consumes raw RGBA32 buffers (4 bytes per pixel) and turns them into a webm video with the given framerate and quality. This makes it compatible out-of-the-box with ImageData from a CANVAS. With realtime mode you can also use webm-wasm for streaming webm videos.\r\n * @summary Video recording feature in Chrome, Firefox and maybe Edge.\r\n * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT}\r\n * @author {@link https://MuazKhan.com|Muaz Khan}\r\n * @typedef WebAssemblyRecorder\r\n * @class\r\n * @example\r\n * var recorder = new WebAssemblyRecorder(mediaStream);\r\n * recorder.record();\r\n * recorder.stop(function(blob) {\r\n * video.src = URL.createObjectURL(blob);\r\n * });\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n * @param {MediaStream} mediaStream - MediaStream object fetched using getUserMedia API or generated using captureStreamUntilEnded or WebAudio API.\r\n * @param {object} config - {webAssemblyPath:'webm-wasm.wasm',workerPath: 'webm-worker.js', frameRate: 30, width: 1920, height: 1080, bitrate: 1024, realtime: true}\r\n */\r\nfunction WebAssemblyRecorder(stream, config) {\r\n // based on: github.com/GoogleChromeLabs/webm-wasm\r\n\r\n if (typeof ReadableStream === 'undefined' || typeof WritableStream === 'undefined') {\r\n // because it fixes readable/writable streams issues\r\n console.error('Following polyfill is strongly recommended: https://unpkg.com/@mattiasbuelens/web-streams-polyfill/dist/polyfill.min.js');\r\n }\r\n\r\n config = config || {};\r\n\r\n config.width = config.width || 640;\r\n config.height = config.height || 480;\r\n config.frameRate = config.frameRate || 30;\r\n config.bitrate = config.bitrate || 1200;\r\n config.realtime = config.realtime || true;\r\n\r\n function createBufferURL(buffer, type) {\r\n return URL.createObjectURL(new Blob([buffer], {\r\n type: type || ''\r\n }));\r\n }\r\n\r\n var finished;\r\n\r\n function cameraStream() {\r\n return new ReadableStream({\r\n start: function(controller) {\r\n var cvs = document.createElement('canvas');\r\n var video = document.createElement('video');\r\n var first = true;\r\n video.srcObject = stream;\r\n video.muted = true;\r\n video.height = config.height;\r\n video.width = config.width;\r\n video.volume = 0;\r\n video.onplaying = function() {\r\n cvs.width = config.width;\r\n cvs.height = config.height;\r\n var ctx = cvs.getContext('2d');\r\n var frameTimeout = 1000 / config.frameRate;\r\n var cameraTimer = setInterval(function f() {\r\n if (finished) {\r\n clearInterval(cameraTimer);\r\n controller.close();\r\n }\r\n\r\n if (first) {\r\n first = false;\r\n if (config.onVideoProcessStarted) {\r\n config.onVideoProcessStarted();\r\n }\r\n }\r\n\r\n ctx.drawImage(video, 0, 0);\r\n if (controller._controlledReadableStream.state !== 'closed') {\r\n try {\r\n controller.enqueue(\r\n ctx.getImageData(0, 0, config.width, config.height)\r\n );\r\n } catch (e) {}\r\n }\r\n }, frameTimeout);\r\n };\r\n video.play();\r\n }\r\n });\r\n }\r\n\r\n var worker;\r\n\r\n function startRecording(stream, buffer) {\r\n if (!config.workerPath && !buffer) {\r\n finished = false;\r\n\r\n // is it safe to use @latest ?\r\n\r\n fetch(\r\n 'https://unpkg.com/webm-wasm@latest/dist/webm-worker.js'\r\n ).then(function(r) {\r\n r.arrayBuffer().then(function(buffer) {\r\n startRecording(stream, buffer);\r\n });\r\n });\r\n return;\r\n }\r\n\r\n if (!config.workerPath && buffer instanceof ArrayBuffer) {\r\n var blob = new Blob([buffer], {\r\n type: 'text/javascript'\r\n });\r\n config.workerPath = URL.createObjectURL(blob);\r\n }\r\n\r\n if (!config.workerPath) {\r\n console.error('workerPath parameter is missing.');\r\n }\r\n\r\n worker = new Worker(config.workerPath);\r\n\r\n worker.postMessage(config.webAssemblyPath || 'https://unpkg.com/webm-wasm@latest/dist/webm-wasm.wasm');\r\n worker.addEventListener('message', function(event) {\r\n if (event.data === 'READY') {\r\n worker.postMessage({\r\n width: config.width,\r\n height: config.height,\r\n bitrate: config.bitrate || 1200,\r\n timebaseDen: config.frameRate || 30,\r\n realtime: config.realtime\r\n });\r\n\r\n cameraStream().pipeTo(new WritableStream({\r\n write: function(image) {\r\n if (finished) {\r\n console.error('Got image, but recorder is finished!');\r\n return;\r\n }\r\n\r\n worker.postMessage(image.data.buffer, [image.data.buffer]);\r\n }\r\n }));\r\n } else if (!!event.data) {\r\n if (!isPaused) {\r\n arrayOfBuffers.push(event.data);\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * This method records video.\r\n * @method\r\n * @memberof WebAssemblyRecorder\r\n * @example\r\n * recorder.record();\r\n */\r\n this.record = function() {\r\n arrayOfBuffers = [];\r\n isPaused = false;\r\n this.blob = null;\r\n startRecording(stream);\r\n\r\n if (typeof config.initCallback === 'function') {\r\n config.initCallback();\r\n }\r\n };\r\n\r\n var isPaused;\r\n\r\n /**\r\n * This method pauses the recording process.\r\n * @method\r\n * @memberof WebAssemblyRecorder\r\n * @example\r\n * recorder.pause();\r\n */\r\n this.pause = function() {\r\n isPaused = true;\r\n };\r\n\r\n /**\r\n * This method resumes the recording process.\r\n * @method\r\n * @memberof WebAssemblyRecorder\r\n * @example\r\n * recorder.resume();\r\n */\r\n this.resume = function() {\r\n isPaused = false;\r\n };\r\n\r\n function terminate(callback) {\r\n if (!worker) {\r\n if (callback) {\r\n callback();\r\n }\r\n\r\n return;\r\n }\r\n\r\n // Wait for null event data to indicate that the encoding is complete\r\n worker.addEventListener('message', function(event) {\r\n if (event.data === null) {\r\n worker.terminate();\r\n worker = null;\r\n\r\n if (callback) {\r\n callback();\r\n }\r\n }\r\n });\r\n\r\n worker.postMessage(null);\r\n }\r\n\r\n var arrayOfBuffers = [];\r\n\r\n /**\r\n * This method stops recording video.\r\n * @param {function} callback - Callback function, that is used to pass recorded blob back to the callee.\r\n * @method\r\n * @memberof WebAssemblyRecorder\r\n * @example\r\n * recorder.stop(function(blob) {\r\n * video.src = URL.createObjectURL(blob);\r\n * });\r\n */\r\n this.stop = function(callback) {\r\n finished = true;\r\n\r\n var recorder = this;\r\n\r\n terminate(function() {\r\n recorder.blob = new Blob(arrayOfBuffers, {\r\n type: 'video/webm'\r\n });\r\n\r\n callback(recorder.blob);\r\n });\r\n };\r\n\r\n // for debugging\r\n this.name = 'WebAssemblyRecorder';\r\n this.toString = function() {\r\n return this.name;\r\n };\r\n\r\n /**\r\n * This method resets currently recorded data.\r\n * @method\r\n * @memberof WebAssemblyRecorder\r\n * @example\r\n * recorder.clearRecordedData();\r\n */\r\n this.clearRecordedData = function() {\r\n arrayOfBuffers = [];\r\n isPaused = false;\r\n this.blob = null;\r\n\r\n // todo: if recording-ON then STOP it first\r\n };\r\n\r\n /**\r\n * @property {Blob} blob - The recorded blob object.\r\n * @memberof WebAssemblyRecorder\r\n * @example\r\n * recorder.stop(function(){\r\n * var blob = recorder.blob;\r\n * });\r\n */\r\n this.blob = null;\r\n}\r\n\r\nif (typeof RecordRTC !== 'undefined') {\r\n RecordRTC.WebAssemblyRecorder = WebAssemblyRecorder;\r\n}\n","import {downloadRecord} from \"../utils\";\nimport RecordRTC from 'recordrtc';\nimport {EVENTS, FILE_SUFFIX} from \"../constant\";\nimport Emitter from \"../utils/emitter\";\n\nexport default class RecordRTCLoader extends Emitter {\n constructor(player) {\n super();\n this.player = player;\n this.fileName = '';\n this.fileType = FILE_SUFFIX.webm;\n this.isRecording = false;\n this.recordingTimestamp = 0;\n this.recordingInterval = null;\n player.debug.log('Recorder', 'init');\n }\n\n destroy() {\n this._reset();\n this.player.debug.log('Recorder', 'destroy');\n }\n\n setFileName(fileName, fileType) {\n this.fileName = fileName;\n\n if (FILE_SUFFIX.mp4 === fileType || FILE_SUFFIX.webm === fileType) {\n this.fileType = fileType;\n }\n }\n\n get recording() {\n return this.isRecording;\n }\n\n get recordTime() {\n return this.recordingTimestamp;\n }\n\n startRecord() {\n const debug = this.player.debug;\n const options = {\n type: 'video',\n mimeType: 'video/webm;codecs=h264',\n onTimeStamp: (timestamp) => {\n debug.log('Recorder', 'record timestamp :' + timestamp);\n },\n disableLogs: !this.player._opt.debug\n }\n\n try {\n const stream = this.player.video.$videoElement.captureStream(25);\n if (this.player.audio && this.player.audio.mediaStreamAudioDestinationNode &&\n this.player.audio.mediaStreamAudioDestinationNode.stream &&\n !this.player.audio.isStateSuspended() &&\n this.player.audio.hasAudio && this.player._opt.hasAudio) {\n const audioStream = this.player.audio.mediaStreamAudioDestinationNode.stream;\n if (audioStream.getAudioTracks().length > 0) {\n const audioTrack = audioStream.getAudioTracks()[0];\n if (audioTrack && audioTrack.enabled) {\n stream.addTrack(audioTrack);\n }\n }\n }\n this.recorder = RecordRTC(stream, options);\n } catch (e) {\n debug.error('Recorder', e);\n this.emit(EVENTS.recordCreateError);\n }\n if (this.recorder) {\n this.isRecording = true;\n this.player.emit(EVENTS.recording, true);\n this.recorder.startRecording();\n debug.log('Recorder', 'start recording');\n this.player.emit(EVENTS.recordStart);\n this.recordingInterval = window.setInterval(() => {\n this.recordingTimestamp += 1;\n this.player.emit(EVENTS.recordingTimestamp, this.recordingTimestamp);\n }, 1000);\n }\n }\n\n stopRecordAndSave() {\n if (!this.recorder || !this.isRecording) {\n return;\n }\n this.recorder.stopRecording(() => {\n this.player.debug.log('Recorder', 'stop recording');\n this.player.emit(EVENTS.recordEnd)\n downloadRecord(this.recorder.getBlob(), this.fileName, this.fileType);\n this._reset();\n this.player.emit(EVENTS.recording, false);\n })\n }\n\n _reset() {\n this.isRecording = false;\n this.recordingTimestamp = 0;\n\n if (this.recorder) {\n this.recorder.destroy();\n this.recorder = null;\n }\n this.fileName = null;\n if (this.recordingInterval) {\n clearInterval(this.recordingInterval);\n }\n this.recordingInterval = null;\n }\n\n\n}\n","import RecordRTCLoader from \"./recordRTCLoader\";\n\nexport default class Recorder {\n constructor(player) {\n const Loader = Recorder.getLoaderFactory();\n return new Loader(player);\n }\n\n static getLoaderFactory() {\n return RecordRTCLoader;\n }\n}\n","import {EVENTS, EVENTS_ERROR, MEDIA_TYPE, WASM_ERROR, WORKER_CMD_TYPE, WORKER_SEND_TYPE} from \"../constant\";\nimport {now} from \"../utils\";\n\nexport default class DecoderWorker {\n constructor(player) {\n this.player = player;\n this.decoderWorker = new Worker(player._opt.decoder)\n this._initDecoderWorker();\n player.debug.log('decoderWorker', 'init')\n }\n\n destroy() {\n this.decoderWorker.postMessage({cmd: WORKER_SEND_TYPE.close})\n this.decoderWorker.terminate();\n this.decoderWorker = null;\n this.player.debug.log(`decoderWorker`, 'destroy');\n }\n\n _initDecoderWorker() {\n const {\n debug,\n events: {proxy},\n } = this.player;\n\n this.decoderWorker.onmessage = (event) => {\n const msg = event.data;\n switch (msg.cmd) {\n case WORKER_CMD_TYPE.init:\n debug.log(`decoderWorker`, 'onmessage:', WORKER_CMD_TYPE.init);\n if (!this.player.loaded) {\n this.player.emit(EVENTS.load);\n }\n this.player.emit(EVENTS.decoderWorkerInit);\n this._initWork();\n break;\n case WORKER_CMD_TYPE.videoCode:\n debug.log(`decoderWorker`, 'onmessage:', WORKER_CMD_TYPE.videoCode, msg.code);\n if (!this.player._times.decodeStart) {\n this.player._times.decodeStart = now();\n }\n this.player.video.updateVideoInfo({\n encTypeCode: msg.code\n })\n break;\n case WORKER_CMD_TYPE.audioCode:\n debug.log(`decoderWorker`, 'onmessage:', WORKER_CMD_TYPE.audioCode, msg.code);\n this.player.audio && this.player.audio.updateAudioInfo({\n encTypeCode: msg.code\n })\n break;\n case WORKER_CMD_TYPE.initVideo:\n debug.log(`decoderWorker`, 'onmessage:', WORKER_CMD_TYPE.initVideo, `width:${msg.w},height:${msg.h}`);\n this.player.video.updateVideoInfo({\n width: msg.w,\n height: msg.h\n })\n this.player.video.initCanvasViewSize();\n break;\n case WORKER_CMD_TYPE.initAudio:\n debug.log(`decoderWorker`, 'onmessage:', WORKER_CMD_TYPE.initAudio, `channels:${msg.channels},sampleRate:${msg.sampleRate}`);\n if (this.player.audio) {\n this.player.audio.updateAudioInfo(msg);\n this.player.audio.initScriptNode(msg);\n }\n break;\n case WORKER_CMD_TYPE.render:\n // debug.log(`decoderWorker`, 'onmessage:', WORKER_CMD_TYPE.render, `msg ts:${msg.ts}`);\n this.player.handleRender();\n this.player.video.render(msg);\n this.player.emit(EVENTS.timeUpdate, msg.ts)\n this.player.updateStats({fps: true, ts: msg.ts, buf: msg.delay})\n if (!this.player._times.videoStart) {\n this.player._times.videoStart = now();\n this.player.handlePlayToRenderTimes();\n }\n break;\n case WORKER_CMD_TYPE.playAudio:\n // debug.log(`decoderWorker`, 'onmessage:', WORKER_CMD_TYPE.playAudio, `msg ts:${msg.ts}`);\n // 只有在 playing 的时候。\n if (this.player.playing && this.player.audio) {\n this.player.audio.play(msg.buffer, msg.ts);\n }\n break;\n case WORKER_CMD_TYPE.wasmError:\n if (msg.message) {\n if (msg.message.indexOf(WASM_ERROR.invalidNalUnitSize) !== -1) {\n this.player.emit(EVENTS.error, EVENTS_ERROR.wasmDecodeError);\n this.player.emit(EVENTS_ERROR.wasmDecodeError);\n }\n }\n break;\n default:\n this.player[msg.cmd] && this.player[msg.cmd](msg);\n }\n }\n }\n\n _initWork() {\n const opt = {\n debug: this.player._opt.debug,\n forceNoOffscreen: this.player._opt.forceNoOffscreen,\n useWCS: this.player._opt.useWCS,\n videoBuffer: this.player._opt.videoBuffer,\n openWebglAlignment: this.player._opt.openWebglAlignment\n }\n this.decoderWorker.postMessage({\n cmd: WORKER_SEND_TYPE.init,\n opt: JSON.stringify(opt),\n sampleRate: (this.player.audio && this.player.audio.audioContext.sampleRate) || 0\n })\n }\n\n decodeVideo(arrayBuffer, ts, isIFrame) {\n\n const options = {\n type: MEDIA_TYPE.video,\n ts: Math.max(ts, 0),\n isIFrame\n }\n // this.player.debug.log('decoderWorker', 'decodeVideo', options);\n this.decoderWorker.postMessage({\n cmd: WORKER_SEND_TYPE.decode,\n buffer: arrayBuffer,\n options\n }, [arrayBuffer.buffer])\n }\n\n decodeAudio(arrayBuffer, ts) {\n if (this.player._opt.useWCS && !this.player._opt.useOffscreen) {\n this._decodeAudioNoDelay(arrayBuffer, ts);\n } else if (this.player._opt.useMSE) {\n this._decodeAudioNoDelay(arrayBuffer, ts);\n } else {\n this._decodeAudio(arrayBuffer, ts);\n }\n }\n\n //\n _decodeAudio(arrayBuffer, ts) {\n const options = {\n type: MEDIA_TYPE.audio,\n ts: Math.max(ts, 0)\n }\n // this.player.debug.log('decoderWorker', 'decodeAudio',options);\n this.decoderWorker.postMessage({\n cmd: WORKER_SEND_TYPE.decode,\n buffer: arrayBuffer,\n options\n }, [arrayBuffer.buffer])\n }\n\n\n _decodeAudioNoDelay(arrayBuffer, ts) {\n // console.log('_decodeAudioNoDelay', arrayBuffer);\n this.decoderWorker.postMessage({\n cmd: WORKER_SEND_TYPE.audioDecode,\n buffer: arrayBuffer,\n ts: Math.max(ts, 0)\n }, [arrayBuffer.buffer])\n }\n\n\n updateWorkConfig(config) {\n this.decoderWorker.postMessage({\n cmd: WORKER_SEND_TYPE.updateConfig,\n key: config.key,\n value: config.value\n })\n }\n\n}\n","import Emitter from \"../utils/emitter\";\nimport {MEDIA_TYPE} from \"../constant\";\n\nexport default class CommonLoader extends Emitter {\n constructor(player) {\n super();\n this.player = player;\n\n this.stopId = null;\n this.firstTimestamp = null;\n this.startTimestamp = null;\n this.delay = -1;\n this.bufferList = [];\n this.dropping = false;\n this.initInterval();\n }\n\n destroy() {\n if (this.stopId) {\n clearInterval(this.stopId);\n this.stopId = null;\n }\n this.firstTimestamp = null;\n this.startTimestamp = null;\n this.delay = -1;\n this.bufferList = [];\n this.dropping = false;\n this.off();\n }\n\n getDelay(timestamp) {\n if (!timestamp) {\n return -1\n }\n if (!this.firstTimestamp) {\n this.firstTimestamp = timestamp\n this.startTimestamp = Date.now()\n this.delay = -1;\n } else {\n if (timestamp) {\n this.delay = (Date.now() - this.startTimestamp) - (timestamp - this.firstTimestamp)\n }\n }\n return this.delay\n }\n\n resetDelay() {\n this.firstTimestamp = null;\n this.startTimestamp = null;\n this.delay = -1;\n this.dropping = false;\n }\n\n //\n initInterval() {\n this.player.debug.log('common dumex', `init Interval`);\n let _loop = () => {\n let data;\n const videoBuffer = this.player._opt.videoBuffer;\n if (this.bufferList.length) {\n if (this.dropping) {\n // this.player.debug.log('common dumex', `is dropping`);\n data = this.bufferList.shift();\n if (data.type === MEDIA_TYPE.audio && data.payload[1] === 0) {\n this._doDecoderDecode(data);\n }\n while (!data.isIFrame && this.bufferList.length) {\n data = this.bufferList.shift();\n if (data.type === MEDIA_TYPE.audio && data.payload[1] === 0) {\n this._doDecoderDecode(data);\n }\n }\n // i frame\n if (data.isIFrame) {\n this.dropping = false;\n this._doDecoderDecode(data);\n }\n } else {\n data = this.bufferList[0];\n if (this.getDelay(data.ts) === -1) {\n // this.player.debug.log('common dumex', `delay is -1`);\n this.bufferList.shift()\n this._doDecoderDecode(data);\n } else if (this.delay > videoBuffer + 1000) {\n // this.player.debug.log('common dumex', `delay is ${this.delay}, set dropping is true`);\n this.resetDelay();\n this.dropping = true\n } else {\n while (this.bufferList.length) {\n data = this.bufferList[0]\n\n if (this.getDelay(data.ts) > videoBuffer) {\n // drop frame\n this.bufferList.shift()\n this._doDecoderDecode(data);\n } else {\n // this.player.debug.log('common dumex', `delay is ${this.delay}`);\n break;\n }\n }\n }\n }\n }\n }\n _loop();\n this.stopId = setInterval(_loop, 10)\n }\n\n _doDecode(payload, type, ts, isIFrame) {\n const player = this.player;\n let options = {\n ts: ts,\n type: type,\n isIFrame: false\n }\n // use offscreen\n if (player._opt.useWCS && !player._opt.useOffscreen) {\n if (type === MEDIA_TYPE.video) {\n options.isIFrame = isIFrame;\n }\n this.pushBuffer(payload, options)\n } else if (player._opt.useMSE) {\n // use mse\n if (type === MEDIA_TYPE.video) {\n options.isIFrame = isIFrame;\n }\n this.pushBuffer(payload, options)\n } else {\n //\n if (type === MEDIA_TYPE.video) {\n player.decoderWorker && player.decoderWorker.decodeVideo(payload, ts, isIFrame);\n } else if (type === MEDIA_TYPE.audio) {\n if (player._opt.hasAudio) {\n player.decoderWorker && player.decoderWorker.decodeAudio(payload, ts);\n }\n }\n }\n }\n\n _doDecoderDecode(data) {\n const player = this.player;\n const {webcodecsDecoder, mseDecoder} = player;\n\n if (data.type === MEDIA_TYPE.audio) {\n if (player._opt.hasAudio) {\n player.decoderWorker && player.decoderWorker.decodeAudio(data.payload, data.ts)\n }\n } else if (data.type === MEDIA_TYPE.video) {\n if (player._opt.useWCS && !player._opt.useOffscreen) {\n webcodecsDecoder.decodeVideo(data.payload, data.ts, data.isIFrame);\n } else if (player._opt.useMSE) {\n mseDecoder.decodeVideo(data.payload, data.ts, data.isIFrame);\n }\n }\n }\n\n pushBuffer(payload, options) {\n // 音频\n if (options.type === MEDIA_TYPE.audio) {\n this.bufferList.push({\n ts: options.ts,\n payload: payload,\n type: MEDIA_TYPE.audio,\n })\n } else if (options.type === MEDIA_TYPE.video) {\n this.bufferList.push({\n ts: options.ts,\n payload: payload,\n type: MEDIA_TYPE.video,\n isIFrame: options.isIFrame\n })\n }\n }\n\n close() {\n\n }\n\n\n}\n","import {FLV_MEDIA_TYPE, MEDIA_TYPE} from \"../constant\";\nimport CommonLoader from \"./commonLoader\";\nimport {now} from \"../utils\";\n\nexport default class FlvLoader extends CommonLoader {\n constructor(player) {\n super(player);\n this.input = this._inputFlv();\n this.flvDemux = this.dispatchFlvData(this.input);\n player.debug.log('FlvDemux', 'init')\n }\n\n destroy() {\n super.destroy();\n this.input = null;\n this.flvDemux = null;\n this.player.debug.log('FlvDemux', 'destroy')\n }\n\n dispatch(data) {\n this.flvDemux(data);\n }\n\n * _inputFlv() {\n yield 9;\n const tmp = new ArrayBuffer(4)\n const tmp8 = new Uint8Array(tmp)\n const tmp32 = new Uint32Array(tmp)\n const player = this.player;\n\n while (true) {\n tmp8[3] = 0\n const t = yield 15\n const type = t[4]\n tmp8[0] = t[7]\n tmp8[1] = t[6]\n tmp8[2] = t[5]\n const length = tmp32[0]\n tmp8[0] = t[10]\n tmp8[1] = t[9]\n tmp8[2] = t[8]\n let ts = tmp32[0]\n if (ts === 0xFFFFFF) {\n tmp8[3] = t[11]\n ts = tmp32[0]\n }\n const payload = yield length\n switch (type) {\n case FLV_MEDIA_TYPE.audio:\n if (player._opt.hasAudio) {\n player.updateStats({\n abps: payload.byteLength\n })\n if (payload.byteLength > 0) {\n this._doDecode(payload, MEDIA_TYPE.audio, ts)\n }\n }\n break\n case FLV_MEDIA_TYPE.video:\n if (!player._times.demuxStart) {\n player._times.demuxStart = now();\n }\n if (player._opt.hasVideo) {\n player.updateStats({\n vbps: payload.byteLength\n })\n const isIFrame = payload[0] >> 4 === 1;\n if (payload.byteLength > 0) {\n this._doDecode(payload, MEDIA_TYPE.video, ts, isIFrame);\n }\n }\n break\n }\n }\n }\n\n dispatchFlvData(input) {\n let need = input.next()\n let buffer = null\n return (value) => {\n let data = new Uint8Array(value)\n if (buffer) {\n let combine = new Uint8Array(buffer.length + data.length)\n combine.set(buffer)\n combine.set(data, buffer.length)\n data = combine\n buffer = null\n }\n while (data.length >= need.value) {\n let remain = data.slice(need.value)\n need = input.next(data.slice(0, need.value))\n data = remain\n }\n if (data.length > 0) {\n buffer = data\n }\n }\n }\n\n close() {\n this.input && this.input.return(null)\n }\n\n\n}\n","import {FLV_MEDIA_TYPE, MEDIA_TYPE} from \"../constant\";\nimport CommonLoader from \"./commonLoader\";\nimport {now} from \"../utils\";\n\nexport default class M7sLoader extends CommonLoader {\n constructor(player) {\n super(player);\n player.debug.log('M7sDemux', 'init')\n }\n\n destroy() {\n super.destroy();\n this.player.debug.log('M7sDemux', 'destroy')\n }\n\n dispatch(data) {\n const player = this.player;\n const dv = new DataView(data)\n const type = dv.getUint8(0);\n const ts = dv.getUint32(1, false);\n switch (type) {\n case MEDIA_TYPE.audio:\n if (player._opt.hasAudio) {\n const payload = new Uint8Array(data, 5)\n player.updateStats({\n abps: payload.byteLength\n })\n if (payload.byteLength > 0) {\n this._doDecode(payload, type, ts)\n }\n }\n break;\n case MEDIA_TYPE.video:\n if (player._opt.hasVideo) {\n if (!player._times.demuxStart) {\n player._times.demuxStart = now();\n }\n if (dv.byteLength > 5) {\n const payload = new Uint8Array(data, 5);\n const isIframe = dv.getUint8(5) >> 4 === 1;\n player.updateStats({\n vbps: payload.byteLength\n })\n if (payload.byteLength > 0) {\n this._doDecode(payload, type, ts, isIframe)\n }\n }\n }\n break;\n }\n }\n\n\n}\n","import FlvLoader from \"./flvLoader\";\nimport M7sLoader from \"./m7sLoader\";\nimport {DEMUX_TYPE} from \"../constant\";\n\nexport default class Demux {\n constructor(player) {\n const Loader = Demux.getLoaderFactory(player._opt.demuxType);\n return new Loader(player);\n }\n\n static getLoaderFactory(type) {\n if (type === DEMUX_TYPE.m7s) {\n return M7sLoader;\n } else if (type === DEMUX_TYPE.flv) {\n return FlvLoader;\n }\n }\n}\n","import {formatVideoDecoderConfigure, noop, now} from \"../utils\";\nimport Emitter from \"../utils/emitter\";\nimport {ENCODED_VIDEO_TYPE, EVENTS, EVENTS_ERROR, VIDEO_ENC_CODE} from \"../constant\";\n\n\nexport default class WebcodecsDecoder extends Emitter {\n constructor(player) {\n super();\n this.player = player;\n this.hasInit = false;\n this.isInitInfo = false;\n this.decoder = null;\n this.initDecoder();\n player.debug.log('Webcodecs', 'init')\n }\n\n destroy() {\n if (this.decoder) {\n this.decoder.close();\n this.decoder = null;\n }\n\n this.hasInit = false;\n this.isInitInfo = false;\n this.off();\n this.player.debug.log('Webcodecs', 'destroy')\n }\n\n initDecoder() {\n const _this = this;\n this.decoder = new VideoDecoder({\n output(videoFrame) {\n _this.handleDecode(videoFrame)\n },\n error(error) {\n _this.handleError(error)\n }\n })\n }\n\n handleDecode(videoFrame) {\n if (!this.isInitInfo) {\n this.player.video.updateVideoInfo({\n width: videoFrame.codedWidth,\n height: videoFrame.codedHeight\n })\n this.player.video.initCanvasViewSize();\n this.isInitInfo = true;\n }\n\n if (!this.player._times.videoStart) {\n this.player._times.videoStart = now();\n this.player.handlePlayToRenderTimes();\n }\n\n this.player.handleRender();\n this.player.video.render({\n videoFrame\n })\n\n this.player.updateStats({fps: true, ts: 0, buf: this.player.demux.delay})\n\n // release resource\n setTimeout(function () {\n if (videoFrame.close) {\n videoFrame.close()\n } else {\n videoFrame.destroy()\n }\n }, 100)\n }\n\n handleError(error) {\n this.player.debug.log('Webcodecs', 'VideoDecoder handleError', error)\n }\n\n decodeVideo(payload, ts, isIframe) {\n // this.player.debug.log('Webcodecs decoder', 'decodeVideo', ts, isIframe);\n if (!this.hasInit) {\n if (isIframe && payload[1] === 0) {\n const videoCodec = (payload[0] & 0x0F);\n this.player.video.updateVideoInfo({\n encTypeCode: videoCodec\n })\n\n // 如果解码出来的是\n if (videoCodec === VIDEO_ENC_CODE.h265) {\n this.emit(EVENTS_ERROR.webcodecsH265NotSupport)\n return;\n }\n if (!this.player._times.decodeStart) {\n this.player._times.decodeStart = now();\n }\n\n const config = formatVideoDecoderConfigure(payload.slice(5));\n this.decoder.configure(config);\n this.hasInit = true;\n }\n } else {\n const chunk = new EncodedVideoChunk({\n data: payload.slice(5),\n timestamp: ts,\n type: isIframe ? ENCODED_VIDEO_TYPE.key : ENCODED_VIDEO_TYPE.delta\n })\n this.decoder.decode(chunk);\n }\n }\n\n\n}\n","const iconsMap = {\n play: '播放',\n pause: '暂停',\n audio: '',\n mute: '',\n screenshot: '截图',\n loading: '加载',\n fullscreen: '全屏',\n fullscreenExit: '退出全屏',\n record: '录制',\n recordStop: '停止录制',\n}\n\nexport default Object.keys(iconsMap).reduce((icons, key) => {\n icons[key] = `\n \n ${iconsMap[key] ? `${iconsMap[key]}` : ''}\n`;\n return icons;\n}, {});\n","import icons from './icons';\n\nexport default (player, control) => {\n\n if (player._opt.hasControl && player._opt.controlAutoHide) {\n player.$container.classList.add('jessibuca-controls-show-auto-hide');\n }\n else {\n player.$container.classList.add('jessibuca-controls-show');\n }\n const options = player._opt;\n const operateBtns = options.operateBtns;\n\n\n player.$container.insertAdjacentHTML(\n 'beforeend',\n `\n ${options.background ? `
` : ''}\n
\n ${icons.loading}\n ${options.loadingText ? `
${options.loadingText}
` : ''}\n
\n ${options.hasControl && operateBtns.play ? `
` : ''}\n ${options.hasControl ? `\n
\n
\n
00:00:01
\n
${icons.recordStop}
\n
\n `:''}\n ${options.hasControl ? `\n
\n
\n
\n ${options.showBandwidth ? `
` : ''}\n
\n
\n ${operateBtns.audio ? `\n
\n ${icons.audio}\n ${icons.mute}\n
\n
\n
\n
\n
\n
\n
\n ` : ''}\n ${operateBtns.play ? `
${icons.play}
${icons.pause}
` : ''}\n ${operateBtns.screenshot ? `
${icons.screenshot}
` : ''}\n ${operateBtns.record ? `
${icons.record}
${icons.recordStop}
` : ''}\n ${operateBtns.fullscreen ? `
${icons.fullscreen}
${icons.fullscreenExit}
` : ''}\n
\n
\n
\n ` : ''}\n\n `\n )\n\n Object.defineProperty(control, '$poster', {\n value: player.$container.querySelector('.jessibuca-poster'),\n });\n\n Object.defineProperty(control, '$loading', {\n value: player.$container.querySelector('.jessibuca-loading'),\n });\n\n Object.defineProperty(control, '$play', {\n value: player.$container.querySelector('.jessibuca-play'),\n });\n\n Object.defineProperty(control, '$playBig', {\n value: player.$container.querySelector('.jessibuca-play-big'),\n });\n\n Object.defineProperty(control, '$recording', {\n value: player.$container.querySelector('.jessibuca-recording'),\n });\n Object.defineProperty(control, '$recordingTime', {\n value: player.$container.querySelector('.jessibuca-recording-time'),\n });\n\n Object.defineProperty(control, '$recordingStop', {\n value: player.$container.querySelector('.jessibuca-recording-stop'),\n });\n\n Object.defineProperty(control, '$pause', {\n value: player.$container.querySelector('.jessibuca-pause'),\n });\n\n Object.defineProperty(control, '$controls', {\n value: player.$container.querySelector('.jessibuca-controls'),\n });\n\n Object.defineProperty(control, '$fullscreen', {\n value: player.$container.querySelector('.jessibuca-fullscreen'),\n });\n\n Object.defineProperty(control, '$fullscreen', {\n value: player.$container.querySelector('.jessibuca-fullscreen'),\n });\n\n\n Object.defineProperty(control, '$volume', {\n value: player.$container.querySelector('.jessibuca-volume'),\n });\n\n Object.defineProperty(control, '$volumePanelWrap', {\n value: player.$container.querySelector('.jessibuca-volume-panel-wrap'),\n });\n\n Object.defineProperty(control, '$volumePanelText', {\n value: player.$container.querySelector('.jessibuca-volume-panel-text'),\n });\n\n Object.defineProperty(control, '$volumePanel', {\n value: player.$container.querySelector('.jessibuca-volume-panel'),\n });\n\n Object.defineProperty(control, '$volumeHandle', {\n value: player.$container.querySelector('.jessibuca-volume-panel-handle'),\n });\n\n Object.defineProperty(control, '$volumeOn', {\n value: player.$container.querySelector('.jessibuca-icon-audio'),\n });\n\n Object.defineProperty(control, '$volumeOff', {\n value: player.$container.querySelector('.jessibuca-icon-mute'),\n });\n\n\n Object.defineProperty(control, '$fullscreen', {\n value: player.$container.querySelector('.jessibuca-fullscreen'),\n });\n\n Object.defineProperty(control, '$fullscreenExit', {\n value: player.$container.querySelector('.jessibuca-fullscreen-exit'),\n });\n\n Object.defineProperty(control, '$record', {\n value: player.$container.querySelector('.jessibuca-record'),\n });\n Object.defineProperty(control, '$recordStop', {\n value: player.$container.querySelector('.jessibuca-record-stop'),\n });\n\n Object.defineProperty(control, '$screenshot', {\n value: player.$container.querySelector('.jessibuca-screenshot'),\n });\n\n Object.defineProperty(control, '$speed', {\n value: player.$container.querySelector('.jessibuca-speed'),\n });\n}\n","import {EVENTS} from \"../constant\";\nimport {bpsSize, formatTimeTips, getStyle, isBoolean, setStyle} from \"../utils\";\nimport screenfull from \"screenfull\";\n\nexport default (player, control) => {\n const {\n events: {proxy},\n } = player;\n\n const object = document.createElement('object');\n object.setAttribute('aria-hidden', 'true');\n object.setAttribute('tabindex', -1);\n object.type = 'text/html';\n object.data = 'about:blank';\n\n setStyle(object, {\n display: 'block',\n position: 'absolute',\n top: '0',\n left: '0',\n height: '100%',\n width: '100%',\n overflow: 'hidden',\n pointerEvents: 'none',\n zIndex: '-1',\n });\n\n let playerWidth = player.width;\n let playerHeight = player.height;\n\n proxy(object, 'load', () => {\n proxy(object.contentDocument.defaultView, 'resize', () => {\n if (player.width !== playerWidth || player.height !== playerHeight) {\n playerWidth = player.width;\n playerHeight = player.height;\n player.emit(EVENTS.resize);\n }\n });\n });\n player.$container.appendChild(object);\n\n player.on(EVENTS.destroy, () => {\n player.$container.removeChild(object);\n })\n\n function setVolumeHandle(percentage) {\n if (percentage === 0) {\n setStyle(control.$volumeOn, 'display', 'none');\n setStyle(control.$volumeOff, 'display', 'flex');\n setStyle(control.$volumeHandle, 'top', `${48}px`);\n } else {\n if (control.$volumeHandle && control.$volumePanel) {\n const panelHeight = getStyle(control.$volumePanel, 'height') || 60;\n const handleHeight = getStyle(control.$volumeHandle, 'height');\n const top = panelHeight - (panelHeight - handleHeight) * percentage - handleHeight;\n setStyle(control.$volumeHandle, 'top', `${top}px`);\n setStyle(control.$volumeOn, 'display', 'flex');\n setStyle(control.$volumeOff, 'display', 'none');\n }\n }\n control.$volumePanelText && (control.$volumePanelText.innerHTML = parseInt(percentage * 100))\n }\n\n player.on(EVENTS.volumechange, () => {\n setVolumeHandle(player.volume);\n });\n\n player.on(EVENTS.loading, (flag) => {\n setStyle(control.$loading, 'display', flag ? 'flex' : 'none');\n setStyle(control.$poster, 'display', 'none')\n\n if (flag) {\n setStyle(control.$playBig, 'display', 'none');\n }\n })\n\n const screenfullChange = (fullscreen) => {\n let isFullScreen = isBoolean(fullscreen) ? fullscreen : player.fullscreen\n setStyle(control.$fullscreenExit, 'display', isFullScreen ? 'flex' : 'none');\n setStyle(control.$fullscreen, 'display', isFullScreen ? 'none' : 'flex');\n // control.autoSize();\n };\n try {\n\n screenfull.on('change', screenfullChange);\n player.events.destroys.push(() => {\n screenfull.off('change', screenfullChange);\n });\n } catch (error) {\n //\n }\n\n //\n player.on(EVENTS.webFullscreen, (value) => {\n screenfullChange(value);\n })\n\n\n player.on(EVENTS.recording, () => {\n setStyle(control.$record, 'display', player.recording ? 'none' : 'flex');\n setStyle(control.$recordStop, 'display', player.recording ? 'flex' : 'none');\n setStyle(control.$recording, 'display', player.recording ? 'flex' : 'none')\n })\n\n //\n player.on(EVENTS.recordingTimestamp, (timestamp) => {\n // console.log(timestamp);\n control.$recordingTime && (control.$recordingTime.innerHTML = formatTimeTips(timestamp))\n })\n\n player.on(EVENTS.playing, (flag) => {\n setStyle(control.$play, 'display', flag ? 'none' : 'flex');\n setStyle(control.$playBig, 'display', flag ? 'none' : 'block');\n setStyle(control.$pause, 'display', flag ? 'flex' : 'none');\n setStyle(control.$screenshot, 'display', flag ? 'flex' : 'none');\n setStyle(control.$record, 'display', flag ? 'flex' : 'none');\n setStyle(control.$fullscreen, 'display', flag ? 'flex' : 'none');\n\n // 不在播放\n if (!flag) {\n control.$speed && (control.$speed.innerHTML = bpsSize(''));\n }\n })\n\n\n player.on(EVENTS.kBps, (rate) => {\n const bps = bpsSize(rate);\n control.$speed && (control.$speed.innerHTML = bps);\n })\n}\n","export default (player, control) => {\n\n Object.defineProperty(control, 'controlsRect', {\n get: () => {\n return control.$controls.getBoundingClientRect();\n },\n });\n\n}\n","import {clamp, isMobile, setStyle} from \"../utils\";\n\nexport default (player, control) => {\n const {\n events: {proxy},\n debug\n } = player;\n\n function volumeChangeFromEvent(event) {\n const {bottom: panelBottom, height: panelHeight} = control.$volumePanel.getBoundingClientRect();\n const {height: handleHeight} = control.$volumeHandle.getBoundingClientRect();\n\n let moveLen = event.y;\n\n // if (isMobile() && player.fullscreen) {\n // moveLen = event.x;\n // }\n\n const percentage =\n clamp(panelBottom - moveLen - handleHeight / 2, 0, panelHeight - handleHeight / 2) / (panelHeight - handleHeight);\n return percentage;\n }\n\n //\n proxy(window, ['click', 'contextmenu'], event => {\n if (event.composedPath().indexOf(player.$container) > -1) {\n control.isFocus = true;\n } else {\n control.isFocus = false;\n }\n });\n\n //\n proxy(window, 'orientationchange', () => {\n setTimeout(() => {\n player.resize();\n }, 300);\n });\n\n\n proxy(control.$controls, 'click', (e) => {\n e.stopPropagation();\n })\n\n proxy(control.$pause, 'click', (e) => {\n player.pause();\n })\n // 监听 play 方法\n proxy(control.$play, 'click', (e) => {\n player.play();\n })\n\n // 监听 play 方法\n proxy(control.$playBig, 'click', (e) => {\n player.play();\n })\n\n proxy(control.$volume, 'mouseover', () => {\n control.$volumePanelWrap.classList.add('jessibuca-volume-panel-wrap-show');\n })\n\n proxy(control.$volume, 'mouseout', () => {\n control.$volumePanelWrap.classList.remove('jessibuca-volume-panel-wrap-show');\n })\n\n proxy(control.$volumeOn, 'click', (e) => {\n e.stopPropagation();\n setStyle(control.$volumeOn, 'display', 'none');\n setStyle(control.$volumeOff, 'display', 'block');\n player.lastVolume = player.volume;\n player.volume = 0;\n })\n\n proxy(control.$volumeOff, 'click', (e) => {\n e.stopPropagation();\n setStyle(control.$volumeOn, 'display', 'block');\n setStyle(control.$volumeOff, 'display', 'none');\n player.volume = player.lastVolume || 0.5;\n })\n\n proxy(control.$screenshot, 'click', (e) => {\n e.stopPropagation();\n player.video.screenshot();\n })\n\n proxy(control.$volumePanel, 'click', event => {\n event.stopPropagation();\n player.volume = volumeChangeFromEvent(event);\n });\n\n proxy(control.$volumeHandle, 'mousedown', () => {\n control.isVolumeDroging = true;\n });\n\n proxy(control.$volumeHandle, 'mousemove', event => {\n if (control.isVolumeDroging) {\n player.volume = volumeChangeFromEvent(event);\n }\n });\n\n proxy(document, 'mouseup', () => {\n if (control.isVolumeDroging) {\n control.isVolumeDroging = false;\n }\n });\n\n proxy(control.$record, 'click', (e) => {\n e.stopPropagation();\n player.recording = true;\n })\n\n proxy(control.$recordStop, 'click', (e) => {\n e.stopPropagation();\n player.recording = false;\n })\n\n proxy(control.$recordingStop, 'click', (e) => {\n e.stopPropagation();\n player.recording = false;\n })\n\n proxy(control.$fullscreen, 'click', (e) => {\n e.stopPropagation();\n player.fullscreen = true;\n })\n\n proxy(control.$fullscreenExit, 'click', (e) => {\n e.stopPropagation();\n player.fullscreen = false;\n })\n\n if (player._opt.hasControl && player._opt.controlAutoHide) {\n //\n proxy(player.$container, 'mouseover', () => {\n if (!player.fullscreen) {\n setStyle(control.$controls, 'display', 'block');\n }\n })\n\n proxy(player.$container, 'mouseout', () => {\n setStyle(control.$controls, 'display', 'none');\n })\n }\n}\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","// todo: 待定\nimport {HOT_KEY} from \"../constant\";\n\nexport default (player, control) => {\n const {\n events: {proxy}\n } = player;\n\n const keys = {};\n\n function addHotkey(key, event) {\n if (keys[key]) {\n keys[key].push(event);\n } else {\n keys[key] = [event];\n }\n }\n\n //\n addHotkey(HOT_KEY.esc, () => {\n if (player.fullscreen) {\n player.fullscreen = false;\n }\n })\n\n //\n addHotkey(HOT_KEY.arrowUp, () => {\n player.volume += 0.05;\n })\n\n //\n addHotkey(HOT_KEY.arrowDown, () => {\n player.volume -= 0.05;\n })\n\n proxy(window, 'keydown', event => {\n if (control.isFocus) {\n const tag = document.activeElement.tagName.toUpperCase();\n const editable = document.activeElement.getAttribute('contenteditable');\n if (tag !== 'INPUT' && tag !== 'TEXTAREA' && editable !== '' && editable !== 'true') {\n const events = keys[event.keyCode];\n if (events) {\n event.preventDefault();\n events.forEach(fn => fn());\n }\n }\n }\n });\n}\n","import template from \"./template\";\nimport observer from './observer';\nimport property from './property';\nimport events from './events';\nimport './style.scss'\nimport hotkey from \"./hotkey\";\n\nexport default class Control {\n constructor(player) {\n this.player = player;\n template(player, this);\n observer(player, this);\n property(player, this);\n events(player, this);\n if (player._opt.hotKey) {\n hotkey(player, this);\n }\n this.player.debug.log('Control', 'init');\n }\n\n destroy() {\n if (this.$poster) {\n this.player.$container.removeChild(this.$poster);\n }\n if (this.$loading) {\n this.player.$container.removeChild(this.$loading);\n }\n if (this.$controls) {\n this.player.$container.removeChild(this.$controls);\n }\n\n if(this.$playBig){\n this.player.$container.removeChild(this.$playBig);\n }\n\n this.player.debug.log('control', 'destroy');\n }\n\n autoSize() {\n const player = this.player;\n player.$container.style.padding = '0 0';\n const playerWidth = player.width;\n const playerHeight = player.height;\n const playerRatio = playerWidth / playerHeight;\n const canvasWidth = player.video.$videoElement.width;\n const canvasHeight = player.video.$videoElement.height;\n const canvasRatio = canvasWidth / canvasHeight;\n if (playerRatio > canvasRatio) {\n const padding = (playerWidth - playerHeight * canvasRatio) / 2;\n player.$container.style.padding = `0 ${padding}px`;\n } else {\n const padding = (playerHeight - playerWidth / canvasRatio) / 2;\n player.$container.style.padding = `${padding}px 0`;\n }\n }\n\n\n}\n","export default (player) => {\n\n const {\n _opt,\n debug,\n events: {proxy},\n } = player;\n\n\n if (_opt.supportDblclickFullscreen) {\n proxy(player.$container, 'dblclick', () => {\n player.fullscreen = !player.fullscreen;\n })\n }\n\n\n //\n proxy(document, 'visibilitychange', () => {\n if (_opt.hiddenAutoPause) {\n debug.log('visibilitychange', document.visibilityState, player._isPlayingBeforePageHidden)\n\n if (\"visible\" === document.visibilityState) {\n if (player._isPlayingBeforePageHidden) {\n player.play();\n }\n } else {\n player._isPlayingBeforePageHidden = player.playing;\n // hidden\n if (player.playing) {\n player.pause();\n }\n }\n }\n })\n\n proxy(window, 'fullscreenchange', () => {\n //\n if (player.keepScreenOn !== null && \"visible\" === document.visibilityState) {\n player.enableWakeLock();\n }\n })\n}\n","class MP4 {\n\n static init() {\n MP4.types = {\n avc1: [],\n avcC: [],\n hvc1: [],\n hvcC: [],\n btrt: [],\n dinf: [],\n dref: [],\n esds: [],\n ftyp: [],\n hdlr: [],\n mdat: [],\n mdhd: [],\n mdia: [],\n mfhd: [],\n minf: [],\n moof: [],\n moov: [],\n mp4a: [],\n mvex: [],\n mvhd: [],\n sdtp: [],\n stbl: [],\n stco: [],\n stsc: [],\n stsd: [],\n stsz: [],\n stts: [],\n tfdt: [],\n tfhd: [],\n traf: [],\n trak: [],\n trun: [],\n trex: [],\n tkhd: [],\n vmhd: [],\n smhd: []\n };\n\n for (let name in MP4.types) {\n if (MP4.types.hasOwnProperty(name)) {\n MP4.types[name] = [\n name.charCodeAt(0),\n name.charCodeAt(1),\n name.charCodeAt(2),\n name.charCodeAt(3)\n ];\n }\n }\n\n let constants = MP4.constants = {};\n\n constants.FTYP = new Uint8Array([\n 0x69, 0x73, 0x6F, 0x6D, // major_brand: isom\n 0x0, 0x0, 0x0, 0x1, // minor_version: 0x01\n 0x69, 0x73, 0x6F, 0x6D, // isom\n 0x61, 0x76, 0x63, 0x31 // avc1\n ]);\n\n constants.STSD_PREFIX = new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // version(0) + flags\n 0x00, 0x00, 0x00, 0x01 // entry_count\n ]);\n\n constants.STTS = new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // version(0) + flags\n 0x00, 0x00, 0x00, 0x00 // entry_count\n ]);\n\n constants.STSC = constants.STCO = constants.STTS;\n\n constants.STSZ = new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // version(0) + flags\n 0x00, 0x00, 0x00, 0x00, // sample_size\n 0x00, 0x00, 0x00, 0x00 // sample_count\n ]);\n\n constants.HDLR_VIDEO = new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // version(0) + flags\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n 0x76, 0x69, 0x64, 0x65, // handler_type: 'vide'\n 0x00, 0x00, 0x00, 0x00, // reserved: 3 * 4 bytes\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x56, 0x69, 0x64, 0x65,\n 0x6F, 0x48, 0x61, 0x6E,\n 0x64, 0x6C, 0x65, 0x72, 0x00 // name: VideoHandler\n ]);\n\n constants.HDLR_AUDIO = new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // version(0) + flags\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n 0x73, 0x6F, 0x75, 0x6E, // handler_type: 'soun'\n 0x00, 0x00, 0x00, 0x00, // reserved: 3 * 4 bytes\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x53, 0x6F, 0x75, 0x6E,\n 0x64, 0x48, 0x61, 0x6E,\n 0x64, 0x6C, 0x65, 0x72, 0x00 // name: SoundHandler\n ]);\n\n constants.DREF = new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // version(0) + flags\n 0x00, 0x00, 0x00, 0x01, // entry_count\n 0x00, 0x00, 0x00, 0x0C, // entry_size\n 0x75, 0x72, 0x6C, 0x20, // type 'url '\n 0x00, 0x00, 0x00, 0x01 // version(0) + flags\n ]);\n\n // Sound media header\n constants.SMHD = new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // version(0) + flags\n 0x00, 0x00, 0x00, 0x00 // balance(2) + reserved(2)\n ]);\n\n // video media header\n constants.VMHD = new Uint8Array([\n 0x00, 0x00, 0x00, 0x01, // version(0) + flags\n 0x00, 0x00, // graphicsmode: 2 bytes\n 0x00, 0x00, 0x00, 0x00, // opcolor: 3 * 2 bytes\n 0x00, 0x00\n ]);\n }\n\n // Generate a box\n static box(type) {\n let size = 8;\n let result = null;\n let datas = Array.prototype.slice.call(arguments, 1);\n let arrayCount = datas.length;\n\n for (let i = 0; i < arrayCount; i++) {\n size += datas[i].byteLength;\n }\n\n result = new Uint8Array(size);\n result[0] = (size >>> 24) & 0xFF; // size\n result[1] = (size >>> 16) & 0xFF;\n result[2] = (size >>> 8) & 0xFF;\n result[3] = (size) & 0xFF;\n\n result.set(type, 4); // type\n\n let offset = 8;\n for (let i = 0; i < arrayCount; i++) { // data body\n result.set(datas[i], offset);\n offset += datas[i].byteLength;\n }\n\n return result;\n }\n\n // emit ftyp & moov\n static generateInitSegment(meta) {\n let ftyp = MP4.box(MP4.types.ftyp, MP4.constants.FTYP);\n let moov = MP4.moov(meta);\n\n let result = new Uint8Array(ftyp.byteLength + moov.byteLength);\n result.set(ftyp, 0);\n result.set(moov, ftyp.byteLength);\n return result;\n }\n\n // Movie metadata box\n static moov(meta) {\n let mvhd = MP4.mvhd(meta.timescale, meta.duration);\n let trak = MP4.trak(meta);\n let mvex = MP4.mvex(meta);\n return MP4.box(MP4.types.moov, mvhd, trak, mvex);\n }\n\n // Movie header box\n static mvhd(timescale, duration) {\n return MP4.box(MP4.types.mvhd, new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // version(0) + flags\n 0x00, 0x00, 0x00, 0x00, // creation_time\n 0x00, 0x00, 0x00, 0x00, // modification_time\n (timescale >>> 24) & 0xFF, // timescale: 4 bytes\n (timescale >>> 16) & 0xFF,\n (timescale >>> 8) & 0xFF,\n (timescale) & 0xFF,\n (duration >>> 24) & 0xFF, // duration: 4 bytes\n (duration >>> 16) & 0xFF,\n (duration >>> 8) & 0xFF,\n (duration) & 0xFF,\n 0x00, 0x01, 0x00, 0x00, // Preferred rate: 1.0\n 0x01, 0x00, 0x00, 0x00, // PreferredVolume(1.0, 2bytes) + reserved(2bytes)\n 0x00, 0x00, 0x00, 0x00, // reserved: 4 + 4 bytes\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x01, 0x00, 0x00, // ----begin composition matrix----\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x01, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x40, 0x00, 0x00, 0x00, // ----end composition matrix----\n 0x00, 0x00, 0x00, 0x00, // ----begin pre_defined 6 * 4 bytes----\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // ----end pre_defined 6 * 4 bytes----\n 0xFF, 0xFF, 0xFF, 0xFF // next_track_ID\n ]));\n }\n\n // Track box\n static trak(meta) {\n return MP4.box(MP4.types.trak, MP4.tkhd(meta), MP4.mdia(meta));\n }\n\n // Track header box\n static tkhd(meta) {\n let trackId = meta.id, duration = meta.duration;\n let width = meta.presentWidth, height = meta.presentHeight;\n\n return MP4.box(MP4.types.tkhd, new Uint8Array([\n 0x00, 0x00, 0x00, 0x07, // version(0) + flags\n 0x00, 0x00, 0x00, 0x00, // creation_time\n 0x00, 0x00, 0x00, 0x00, // modification_time\n (trackId >>> 24) & 0xFF, // track_ID: 4 bytes\n (trackId >>> 16) & 0xFF,\n (trackId >>> 8) & 0xFF,\n (trackId) & 0xFF,\n 0x00, 0x00, 0x00, 0x00, // reserved: 4 bytes\n (duration >>> 24) & 0xFF, // duration: 4 bytes\n (duration >>> 16) & 0xFF,\n (duration >>> 8) & 0xFF,\n (duration) & 0xFF,\n 0x00, 0x00, 0x00, 0x00, // reserved: 2 * 4 bytes\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // layer(2bytes) + alternate_group(2bytes)\n 0x00, 0x00, 0x00, 0x00, // volume(2bytes) + reserved(2bytes)\n 0x00, 0x01, 0x00, 0x00, // ----begin composition matrix----\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x01, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x40, 0x00, 0x00, 0x00, // ----end composition matrix----\n (width >>> 8) & 0xFF, // width and height\n (width) & 0xFF,\n 0x00, 0x00,\n (height >>> 8) & 0xFF,\n (height) & 0xFF,\n 0x00, 0x00\n ]));\n }\n\n static mdia(meta) {\n return MP4.box(MP4.types.mdia, MP4.mdhd(meta), MP4.hdlr(meta), MP4.minf(meta))\n }\n\n // Media header box\n static mdhd(meta) {\n let timescale = meta.timescale;\n let duration = meta.duration;\n return MP4.box(MP4.types.mdhd, new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // version(0) + flags\n 0x00, 0x00, 0x00, 0x00, // creation_time\n 0x00, 0x00, 0x00, 0x00, // modification_time\n (timescale >>> 24) & 0xFF, // timescale: 4 bytes\n (timescale >>> 16) & 0xFF,\n (timescale >>> 8) & 0xFF,\n (timescale) & 0xFF,\n (duration >>> 24) & 0xFF, // duration: 4 bytes\n (duration >>> 16) & 0xFF,\n (duration >>> 8) & 0xFF,\n (duration) & 0xFF,\n 0x55, 0xC4, // language: und (undetermined)\n 0x00, 0x00 // pre_defined = 0\n ]));\n }\n\n // Media handler reference box\n static hdlr(meta) {\n let data = null;\n if (meta.type === 'audio') {\n data = MP4.constants.HDLR_AUDIO;\n } else {\n data = MP4.constants.HDLR_VIDEO;\n }\n return MP4.box(MP4.types.hdlr, data);\n }\n\n // Media infomation box\n static minf(meta) {\n let xmhd = null;\n if (meta.type === 'audio') {\n xmhd = MP4.box(MP4.types.smhd, MP4.constants.SMHD);\n } else {\n xmhd = MP4.box(MP4.types.vmhd, MP4.constants.VMHD);\n }\n return MP4.box(MP4.types.minf, xmhd, MP4.dinf(), MP4.stbl(meta));\n }\n\n // Data infomation box\n static dinf() {\n let result = MP4.box(MP4.types.dinf,\n MP4.box(MP4.types.dref, MP4.constants.DREF)\n );\n return result;\n }\n\n // Sample table box\n static stbl(meta) {\n let result = MP4.box(MP4.types.stbl, // type: stbl\n MP4.stsd(meta), // Sample Description Table\n MP4.box(MP4.types.stts, MP4.constants.STTS), // Time-To-Sample\n MP4.box(MP4.types.stsc, MP4.constants.STSC), // Sample-To-Chunk\n MP4.box(MP4.types.stsz, MP4.constants.STSZ), // Sample size\n MP4.box(MP4.types.stco, MP4.constants.STCO) // Chunk offset\n );\n return result;\n }\n\n // Sample description box\n static stsd(meta) {\n if (meta.type === 'audio') {\n // else: aac -> mp4a\n return MP4.box(MP4.types.stsd, MP4.constants.STSD_PREFIX, MP4.mp4a(meta));\n } else {\n if (meta.videoType === 'avc') {\n //\n return MP4.box(MP4.types.stsd, MP4.constants.STSD_PREFIX, MP4.avc1(meta));\n } else {\n //\n return MP4.box(MP4.types.stsd, MP4.constants.STSD_PREFIX, MP4.hvc1(meta))\n }\n }\n }\n\n static mp4a(meta) {\n let channelCount = meta.channelCount;\n let sampleRate = meta.audioSampleRate;\n\n let data = new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // reserved(4)\n 0x00, 0x00, 0x00, 0x01, // reserved(2) + data_reference_index(2)\n 0x00, 0x00, 0x00, 0x00, // reserved: 2 * 4 bytes\n 0x00, 0x00, 0x00, 0x00,\n 0x00, channelCount, // channelCount(2)\n 0x00, 0x10, // sampleSize(2)\n 0x00, 0x00, 0x00, 0x00, // reserved(4)\n (sampleRate >>> 8) & 0xFF, // Audio sample rate\n (sampleRate) & 0xFF,\n 0x00, 0x00\n ]);\n\n return MP4.box(MP4.types.mp4a, data, MP4.esds(meta));\n }\n\n static esds(meta) {\n let config = meta.config || [];\n let configSize = config.length;\n let data = new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // version 0 + flags\n\n 0x03, // descriptor_type\n 0x17 + configSize, // length3\n 0x00, 0x01, // es_id\n 0x00, // stream_priority\n\n 0x04, // descriptor_type\n 0x0F + configSize, // length\n 0x40, // codec: mpeg4_audio\n 0x15, // stream_type: Audio\n 0x00, 0x00, 0x00, // buffer_size\n 0x00, 0x00, 0x00, 0x00, // maxBitrate\n 0x00, 0x00, 0x00, 0x00, // avgBitrate\n\n 0x05 // descriptor_type\n ].concat([\n configSize\n ]).concat(\n config\n ).concat([\n 0x06, 0x01, 0x02 // GASpecificConfig\n ]));\n return MP4.box(MP4.types.esds, data);\n }\n\n // avc\n static avc1(meta) {\n let avcc = meta.avcc;\n const width = meta.codecWidth;\n const height = meta.codecHeight;\n let data = new Uint8Array([\n 0, 0, 0, 0,\n 0, 0, 0, 1,\n 0, 0, 0, 0,\n 0, 0, 0, 0,\n 0, 0, 0, 0,\n 0, 0, 0, 0,\n width >>> 8 & 255,\n width & 255,\n height >>> 8 & 255,\n height & 255,\n 0, 72, 0, 0,\n 0, 72, 0, 0,\n 0, 0, 0, 0,\n 0, 1,\n 0,\n 0, 0, 0, 0,\n 0, 0, 0, 0,\n 0, 0, 0, 0,\n 0, 0, 0, 0,\n 0, 0, 0, 0,\n 0, 0, 0, 0,\n 0, 0, 0, 0,\n 0, 0, 0,\n 0, 24,\n 255, 255]\n );\n return MP4.box(MP4.types.avc1, data, MP4.box(MP4.types.avcC, avcc))\n }\n\n // hvc\n static hvc1(meta) {\n let avcc = meta.avcc;\n const width = meta.codecWidth;\n const height = meta.codecHeight;\n let data = new Uint8Array([\n 0, 0, 0, 0,\n 0, 0, 0, 1,\n 0, 0, 0, 0,\n 0, 0, 0, 0,\n 0, 0, 0, 0,\n 0, 0, 0, 0,\n width >>> 8 & 255,\n width & 255,\n height >>> 8 & 255,\n height & 255,\n 0, 72, 0, 0,\n 0, 72, 0, 0,\n 0, 0, 0, 0,\n 0, 1,\n 0,\n 0, 0, 0, 0,\n 0, 0, 0, 0,\n 0, 0, 0, 0,\n 0, 0, 0, 0,\n 0, 0, 0, 0,\n 0, 0, 0, 0,\n 0, 0, 0, 0,\n 0, 0, 0,\n 0, 24,\n 255, 255\n ]);\n return MP4.box(MP4.types.hvc1, data, MP4.box(MP4.types.hvcC, avcc))\n }\n\n // Movie Extends box\n static mvex(meta) {\n return MP4.box(MP4.types.mvex, MP4.trex(meta))\n }\n\n // Track Extends box\n static trex(meta) {\n let trackId = meta.id;\n let data = new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // version(0) + flags\n (trackId >>> 24) & 0xFF, // track_ID\n (trackId >>> 16) & 0xFF,\n (trackId >>> 8) & 0xFF,\n (trackId) & 0xFF,\n 0x00, 0x00, 0x00, 0x01, // default_sample_description_index\n 0x00, 0x00, 0x00, 0x00, // default_sample_duration\n 0x00, 0x00, 0x00, 0x00, // default_sample_size\n 0x00, 0x01, 0x00, 0x01 // default_sample_flags\n ]);\n return MP4.box(MP4.types.trex, data);\n }\n\n // Movie fragment box\n static moof(track, baseMediaDecodeTime) {\n return MP4.box(MP4.types.moof, MP4.mfhd(track.sequenceNumber), MP4.traf(track, baseMediaDecodeTime))\n }\n //\n static mfhd(sequenceNumber) {\n let data = new Uint8Array([\n 0x00, 0x00, 0x00, 0x00,\n (sequenceNumber >>> 24) & 0xFF, // sequence_number: int32\n (sequenceNumber >>> 16) & 0xFF,\n (sequenceNumber >>> 8) & 0xFF,\n (sequenceNumber) & 0xFF\n ]);\n return MP4.box(MP4.types.mfhd, data);\n }\n\n // Track fragment box\n static traf(track, baseMediaDecodeTime) {\n let trackId = track.id;\n\n // Track fragment header box\n let tfhd = MP4.box(MP4.types.tfhd, new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // version(0) & flags\n (trackId >>> 24) & 0xFF, // track_ID\n (trackId >>> 16) & 0xFF,\n (trackId >>> 8) & 0xFF,\n (trackId) & 0xFF\n ]));\n // Track Fragment Decode Time\n let tfdt = MP4.box(MP4.types.tfdt, new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // version(0) & flags\n (baseMediaDecodeTime >>> 24) & 0xFF, // baseMediaDecodeTime: int32\n (baseMediaDecodeTime >>> 16) & 0xFF,\n (baseMediaDecodeTime >>> 8) & 0xFF,\n (baseMediaDecodeTime) & 0xFF\n ]));\n let sdtp = MP4.sdtp(track);\n let trun = MP4.trun(track, sdtp.byteLength + 16 + 16 + 8 + 16 + 8 + 8);\n\n return MP4.box(MP4.types.traf, tfhd, tfdt, trun, sdtp);\n }\n\n // Sample Dependency Type box\n static sdtp(track) {\n let data = new Uint8Array(4 + 1);\n let flags = track.flags;\n data[4] = flags.isLeading << 6\n | flags.dependsOn << 4\n | flags.isDependedOn << 2\n | flags.hasRedundancy;\n return MP4.box(MP4.types.sdtp, data);\n }\n // trun\n static trun(track, offset) {\n let dataSize = 12 + 16;\n let data = new Uint8Array(dataSize);\n offset += 8 + dataSize;\n\n data.set([\n 0x00, 0x00, 0x0F, 0x01, // version(0) & flags\n 0x00, 0x00, 0x00, 0x01, // sample_count\n (offset >>> 24) & 0xFF, // data_offset\n (offset >>> 16) & 0xFF,\n (offset >>> 8) & 0xFF,\n (offset) & 0xFF\n ], 0);\n\n let duration = track.duration;\n let size = track.size;\n let flags = track.flags;\n let cts = track.cts;\n\n data.set([\n (duration >>> 24) & 0xFF, // sample_duration\n (duration >>> 16) & 0xFF,\n (duration >>> 8) & 0xFF,\n (duration) & 0xFF,\n (size >>> 24) & 0xFF, // sample_size\n (size >>> 16) & 0xFF,\n (size >>> 8) & 0xFF,\n (size) & 0xFF,\n (flags.isLeading << 2) | flags.dependsOn, // sample_flags\n (flags.isDependedOn << 6) | (flags.hasRedundancy << 4) | flags.isNonSync,\n 0x00, 0x00, // sample_degradation_priority\n (cts >>> 24) & 0xFF, // sample_composition_time_offset\n (cts >>> 16) & 0xFF,\n (cts >>> 8) & 0xFF,\n (cts) & 0xFF\n ], 12);\n\n return MP4.box(MP4.types.trun, data);\n }\n // mdat\n static mdat(data) {\n return MP4.box(MP4.types.mdat, data)\n }\n}\n\nMP4.init();\n\nexport default MP4;\n","/*\n * Copyright (C) 2016 Bilibili. All Rights Reserved.\n *\n * @author zheng qian \n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n// Exponential-Golomb buffer decoder\nclass ExpGolomb {\n\n constructor(uint8array) {\n this.TAG = 'ExpGolomb';\n\n this._buffer = uint8array;\n this._buffer_index = 0;\n this._total_bytes = uint8array.byteLength;\n this._total_bits = uint8array.byteLength * 8;\n this._current_word = 0;\n this._current_word_bits_left = 0;\n }\n\n destroy() {\n this._buffer = null;\n }\n\n _fillCurrentWord() {\n let buffer_bytes_left = this._total_bytes - this._buffer_index;\n if (buffer_bytes_left <= 0) {\n // throw new IllegalStateException('ExpGolomb: _fillCurrentWord() but no bytes available');\n }\n\n let bytes_read = Math.min(4, buffer_bytes_left);\n let word = new Uint8Array(4);\n word.set(this._buffer.subarray(this._buffer_index, this._buffer_index + bytes_read));\n this._current_word = new DataView(word.buffer).getUint32(0, false);\n\n this._buffer_index += bytes_read;\n this._current_word_bits_left = bytes_read * 8;\n }\n\n readBits(bits) {\n if (bits > 32) {\n // throw new InvalidArgumentException('ExpGolomb: readBits() bits exceeded max 32bits!');\n }\n\n if (bits <= this._current_word_bits_left) {\n let result = this._current_word >>> (32 - bits);\n this._current_word <<= bits;\n this._current_word_bits_left -= bits;\n return result;\n }\n\n let result = this._current_word_bits_left ? this._current_word : 0;\n result = result >>> (32 - this._current_word_bits_left);\n let bits_need_left = bits - this._current_word_bits_left;\n\n this._fillCurrentWord();\n let bits_read_next = Math.min(bits_need_left, this._current_word_bits_left);\n\n let result2 = this._current_word >>> (32 - bits_read_next);\n this._current_word <<= bits_read_next;\n this._current_word_bits_left -= bits_read_next;\n\n result = (result << bits_read_next) | result2;\n return result;\n }\n\n readBool() {\n return this.readBits(1) === 1;\n }\n\n readByte() {\n return this.readBits(8);\n }\n\n _skipLeadingZero() {\n let zero_count;\n for (zero_count = 0; zero_count < this._current_word_bits_left; zero_count++) {\n if (0 !== (this._current_word & (0x80000000 >>> zero_count))) {\n this._current_word <<= zero_count;\n this._current_word_bits_left -= zero_count;\n return zero_count;\n }\n }\n this._fillCurrentWord();\n return zero_count + this._skipLeadingZero();\n }\n\n readUEG() { // unsigned exponential golomb\n let leading_zeros = this._skipLeadingZero();\n return this.readBits(leading_zeros + 1) - 1;\n }\n\n readSEG() { // signed exponential golomb\n let value = this.readUEG();\n if (value & 0x01) {\n return (value + 1) >>> 1;\n } else {\n return -1 * (value >>> 1);\n }\n }\n\n}\n\nexport default ExpGolomb;\n","/*\n * Copyright (C) 2016 Bilibili. All Rights Reserved.\n *\n * @author zheng qian \n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport ExpGolomb from './exp-golomb.js';\n\nclass SPSParser {\n\n static _ebsp2rbsp(uint8array) {\n let src = uint8array;\n let src_length = src.byteLength;\n let dst = new Uint8Array(src_length);\n let dst_idx = 0;\n\n for (let i = 0; i < src_length; i++) {\n if (i >= 2) {\n // Unescape: Skip 0x03 after 00 00\n if (src[i] === 0x03 && src[i - 1] === 0x00 && src[i - 2] === 0x00) {\n continue;\n }\n }\n dst[dst_idx] = src[i];\n dst_idx++;\n }\n\n return new Uint8Array(dst.buffer, 0, dst_idx);\n }\n\n // 解析 SPS\n // https://zhuanlan.zhihu.com/p/27896239\n static parseSPS(uint8array) {\n let rbsp = SPSParser._ebsp2rbsp(uint8array);\n let gb = new ExpGolomb(rbsp);\n\n gb.readByte();\n // 标识当前H.264码流的profile。\n // 我们知道,H.264中定义了三种常用的档次profile: 基准档次:baseline profile;主要档次:main profile; 扩展档次:extended profile;\n\n let profile_idc = gb.readByte(); // profile_idc\n gb.readByte(); // constraint_set_flags[5] + reserved_zero[3]\n // 标识当前码流的Level。编码的Level定义了某种条件下的最大视频分辨率、最大视频帧率等参数,码流所遵从的level由level_idc指定。\n let level_idc = gb.readByte(); // level_idc\n // 表示当前的序列参数集的id。通过该id值,图像参数集pps可以引用其代表的sps中的参数。\n gb.readUEG(); // seq_parameter_set_id\n\n let profile_string = SPSParser.getProfileString(profile_idc);\n\n let level_string = SPSParser.getLevelString(level_idc);\n\n let chroma_format_idc = 1;\n let chroma_format = 420;\n let chroma_format_table = [0, 420, 422, 444];\n let bit_depth = 8;\n\n //\n if (profile_idc === 100 || profile_idc === 110 || profile_idc === 122 ||\n profile_idc === 244 || profile_idc === 44 || profile_idc === 83 ||\n profile_idc === 86 || profile_idc === 118 || profile_idc === 128 ||\n profile_idc === 138 || profile_idc === 144) {\n //\n chroma_format_idc = gb.readUEG();\n\n if (chroma_format_idc === 3) {\n gb.readBits(1); // separate_colour_plane_flag\n }\n if (chroma_format_idc <= 3) {\n chroma_format = chroma_format_table[chroma_format_idc];\n }\n\n bit_depth = gb.readUEG() + 8; // bit_depth_luma_minus8\n gb.readUEG(); // bit_depth_chroma_minus8\n gb.readBits(1); // qpprime_y_zero_transform_bypass_flag\n if (gb.readBool()) { // seq_scaling_matrix_present_flag\n let scaling_list_count = (chroma_format_idc !== 3) ? 8 : 12;\n for (let i = 0; i < scaling_list_count; i++) {\n if (gb.readBool()) { // seq_scaling_list_present_flag\n if (i < 6) {\n SPSParser._skipScalingList(gb, 16);\n } else {\n SPSParser._skipScalingList(gb, 64);\n }\n }\n }\n }\n }\n // 用于计算MaxFrameNum的值。计算公式为MaxFrameNum = 2^(log2_max_frame_num_minus4 +\n gb.readUEG(); // log2_max_frame_num_minus4\n // 表示解码picture order count(POC)的方法。POC是另一种计量图像序号的方式,与frame_num有着不同的计算方法。该语法元素的取值为0、1或2。\n let pic_order_cnt_type = gb.readUEG();\n if (pic_order_cnt_type === 0) {\n gb.readUEG(); // log2_max_pic_order_cnt_lsb_minus_4\n } else if (pic_order_cnt_type === 1) {\n gb.readBits(1); // delta_pic_order_always_zero_flag\n gb.readSEG(); // offset_for_non_ref_pic\n gb.readSEG(); // offset_for_top_to_bottom_field\n let num_ref_frames_in_pic_order_cnt_cycle = gb.readUEG();\n for (let i = 0; i < num_ref_frames_in_pic_order_cnt_cycle; i++) {\n gb.readSEG(); // offset_for_ref_frame\n }\n }\n // 用于表示参考帧的最大数目。\n let ref_frames = gb.readUEG(); // max_num_ref_frames\n // 标识位,说明frame_num中是否允许不连续的值。\n gb.readBits(1); // gaps_in_frame_num_value_allowed_flag\n // 用于计算图像的宽度。单位为宏块个数,因此图像的实际宽度为:\n let pic_width_in_mbs_minus1 = gb.readUEG();\n // 使用PicHeightInMapUnits来度量视频中一帧图像的高度。\n // PicHeightInMapUnits并非图像明确的以像素或宏块为单位的高度,而需要考虑该宏块是帧编码或场编码。PicHeightInMapUnits的计算方式为:\n let pic_height_in_map_units_minus1 = gb.readUEG();\n // 标识位,说明宏块的编码方式。当该标识位为0时,宏块可能为帧编码或场编码;\n // 该标识位为1时,所有宏块都采用帧编码。根据该标识位取值不同,PicHeightInMapUnits的含义也不同,\n // 为0时表示一场数据按宏块计算的高度,为1时表示一帧数据按宏块计算的高度。\n let frame_mbs_only_flag = gb.readBits(1);\n if (frame_mbs_only_flag === 0) {\n // 标识位,说明是否采用了宏块级的帧场自适应编码。当该标识位为0时,不存在帧编码和场编码之间的切换;当标识位为1时,宏块可能在帧编码和场编码模式之间进行选择。\n gb.readBits(1); // mb_adaptive_frame_field_flag\n }\n // 标识位,用于B_Skip、B_Direct模式运动矢量的推导计算。\n gb.readBits(1); // direct_8x8_inference_flag\n\n let frame_crop_left_offset = 0;\n let frame_crop_right_offset = 0;\n let frame_crop_top_offset = 0;\n let frame_crop_bottom_offset = 0;\n\n let frame_cropping_flag = gb.readBool();\n if (frame_cropping_flag) {\n frame_crop_left_offset = gb.readUEG();\n frame_crop_right_offset = gb.readUEG();\n frame_crop_top_offset = gb.readUEG();\n frame_crop_bottom_offset = gb.readUEG();\n }\n\n let sar_width = 1, sar_height = 1;\n let fps = 0, fps_fixed = true, fps_num = 0, fps_den = 0;\n // 标识位,说明SPS中是否存在VUI信息。\n let vui_parameters_present_flag = gb.readBool();\n if (vui_parameters_present_flag) {\n if (gb.readBool()) { // aspect_ratio_info_present_flag\n let aspect_ratio_idc = gb.readByte();\n let sar_w_table = [1, 12, 10, 16, 40, 24, 20, 32, 80, 18, 15, 64, 160, 4, 3, 2];\n let sar_h_table = [1, 11, 11, 11, 33, 11, 11, 11, 33, 11, 11, 33, 99, 3, 2, 1];\n\n if (aspect_ratio_idc > 0 && aspect_ratio_idc < 16) {\n sar_width = sar_w_table[aspect_ratio_idc - 1];\n sar_height = sar_h_table[aspect_ratio_idc - 1];\n } else if (aspect_ratio_idc === 255) {\n sar_width = gb.readByte() << 8 | gb.readByte();\n sar_height = gb.readByte() << 8 | gb.readByte();\n }\n }\n\n if (gb.readBool()) { // overscan_info_present_flag\n gb.readBool(); // overscan_appropriate_flag\n }\n if (gb.readBool()) { // video_signal_type_present_flag\n gb.readBits(4); // video_format & video_full_range_flag\n if (gb.readBool()) { // colour_description_present_flag\n gb.readBits(24); // colour_primaries & transfer_characteristics & matrix_coefficients\n }\n }\n if (gb.readBool()) { // chroma_loc_info_present_flag\n gb.readUEG(); // chroma_sample_loc_type_top_field\n gb.readUEG(); // chroma_sample_loc_type_bottom_field\n }\n if (gb.readBool()) { // timing_info_present_flag\n let num_units_in_tick = gb.readBits(32);\n let time_scale = gb.readBits(32);\n fps_fixed = gb.readBool(); // fixed_frame_rate_flag\n\n fps_num = time_scale;\n fps_den = num_units_in_tick * 2;\n fps = fps_num / fps_den;\n }\n }\n\n let sarScale = 1;\n if (sar_width !== 1 || sar_height !== 1) {\n sarScale = sar_width / sar_height;\n }\n\n let crop_unit_x = 0, crop_unit_y = 0;\n if (chroma_format_idc === 0) {\n crop_unit_x = 1;\n crop_unit_y = 2 - frame_mbs_only_flag;\n } else {\n let sub_wc = (chroma_format_idc === 3) ? 1 : 2;\n let sub_hc = (chroma_format_idc === 1) ? 2 : 1;\n crop_unit_x = sub_wc;\n crop_unit_y = sub_hc * (2 - frame_mbs_only_flag);\n }\n\n let codec_width = (pic_width_in_mbs_minus1 + 1) * 16;\n let codec_height = (2 - frame_mbs_only_flag) * ((pic_height_in_map_units_minus1 + 1) * 16);\n\n codec_width -= (frame_crop_left_offset + frame_crop_right_offset) * crop_unit_x;\n codec_height -= (frame_crop_top_offset + frame_crop_bottom_offset) * crop_unit_y;\n\n let present_width = Math.ceil(codec_width * sarScale);\n\n gb.destroy();\n gb = null;\n\n\n // 解析出来的SPS 内容。\n return {\n profile_string: profile_string, // baseline, high, high10, ...\n level_string: level_string, // 3, 3.1, 4, 4.1, 5, 5.1, ...\n bit_depth: bit_depth, // 8bit, 10bit, ...\n ref_frames: ref_frames,\n chroma_format: chroma_format, // 4:2:0, 4:2:2, ...\n chroma_format_string: SPSParser.getChromaFormatString(chroma_format),\n\n frame_rate: {\n fixed: fps_fixed,\n fps: fps,\n fps_den: fps_den,\n fps_num: fps_num\n },\n\n sar_ratio: {\n width: sar_width,\n height: sar_height\n },\n\n codec_size: {\n width: codec_width,\n height: codec_height\n },\n\n present_size: {\n width: present_width,\n height: codec_height\n }\n };\n }\n\n static _skipScalingList(gb, count) {\n let last_scale = 8, next_scale = 8;\n let delta_scale = 0;\n for (let i = 0; i < count; i++) {\n if (next_scale !== 0) {\n delta_scale = gb.readSEG();\n next_scale = (last_scale + delta_scale + 256) % 256;\n }\n last_scale = (next_scale === 0) ? last_scale : next_scale;\n }\n }\n\n // profile_idc = 66 → baseline profile;\n // profile_idc = 77 → main profile;\n // profile_idc = 88 → extended profile;\n // 在新版的标准中,还包括了High、High 10、High 4:2:2、High 4:4:4、High 10 Intra、High\n // 4:2:2 Intra、High 4:4:4 Intra、CAVLC 4:4:4 Intra\n static getProfileString(profile_idc) {\n switch (profile_idc) {\n case 66:\n return 'Baseline';\n case 77:\n return 'Main';\n case 88:\n return 'Extended';\n case 100:\n return 'High';\n case 110:\n return 'High10';\n case 122:\n return 'High422';\n case 244:\n return 'High444';\n default:\n return 'Unknown';\n }\n }\n\n static getLevelString(level_idc) {\n return (level_idc / 10).toFixed(1);\n }\n\n static getChromaFormatString(chroma) {\n switch (chroma) {\n case 420:\n return '4:2:0';\n case 422:\n return '4:2:2';\n case 444:\n return '4:4:4';\n default:\n return 'Unknown';\n }\n }\n\n}\n\nexport default SPSParser;","import SPSParser from './h264-sps-parser.js';\n\n//\nexport function parseAVCDecoderConfigurationRecord(arrayBuffer) {\n const meta = {}\n const v = new DataView(arrayBuffer.buffer);\n let version = v.getUint8(0); // configurationVersion\n let avcProfile = v.getUint8(1); // avcProfileIndication\n let profileCompatibility = v.getUint8(2); // profile_compatibil\n let avcLevel = v.getUint8(3); // AVCLevelIndication\n\n if (version !== 1 || avcProfile === 0) {\n // this._onError(DemuxErrors.FORMAT_ERROR, 'Flv: Invalid AVCDecoderConfigurationRecord');\n\n return;\n }\n\n const _naluLengthSize = (v.getUint8(4) & 3) + 1; // lengthSizeMinusOne\n\n if (_naluLengthSize !== 3 && _naluLengthSize !== 4) { // holy shit!!!\n // this._onError(DemuxErrors.FORMAT_ERROR, `Flv: Strange NaluLengthSizeMinusOne: ${_naluLengthSize - 1}`);\n return;\n }\n let spsCount = v.getUint8(5) & 31; // numOfSequenceParameterSets\n\n if (spsCount === 0) {\n // this._onError(DemuxErrors.FORMAT_ERROR, 'Flv: Invalid AVCDecoderConfigurationRecord: No SPS');\n return;\n } else if (spsCount > 1) {\n // Log.w(this.TAG, `Flv: Strange AVCDecoderConfigurationRecord: SPS Count = ${spsCount}`);\n }\n\n let offset = 6;\n for (let i = 0; i < spsCount; i++) {\n let len = v.getUint16(offset, false); // sequenceParameterSetLength\n offset += 2;\n\n if (len === 0) {\n continue;\n }\n\n // Notice: Nalu without startcode header (00 00 00 01)\n let sps = new Uint8Array(arrayBuffer.buffer, offset, len);\n offset += len;\n // flv.js作者选择了自己来解析这个数据结构,也是迫不得已,因为JS环境下没有ffmpeg,解析这个结构主要是为了提取 sps和pps。虽然理论上sps允许有多个,但其实一般就一个。\n // packetTtype 为 1 表示 NALU,NALU= network abstract layer unit,这是H.264的概念,网络抽象层数据单元,其实简单理解就是一帧视频数据。\n // pps的信息没什么用,所以作者只实现了sps的分析器,说明作者下了很大功夫去学习264的标准,其中的Golomb解码还是挺复杂的,能解对不容易,我在PC和手机平台都是用ffmpeg去解析的。\n // SPS里面包括了视频分辨率,帧率,profile level等视频重要信息。\n let config = SPSParser.parseSPS(sps);\n if (i !== 0) {\n // ignore other sps's config\n continue;\n }\n\n meta.codecWidth = config.codec_size.width;\n meta.codecHeight = config.codec_size.height;\n meta.presentWidth = config.present_size.width;\n meta.presentHeight = config.present_size.height;\n\n meta.profile = config.profile_string;\n meta.level = config.level_string;\n meta.bitDepth = config.bit_depth;\n meta.chromaFormat = config.chroma_format;\n meta.sarRatio = config.sar_ratio;\n meta.frameRate = config.frame_rate;\n\n if (config.frame_rate.fixed === false ||\n config.frame_rate.fps_num === 0 ||\n config.frame_rate.fps_den === 0) {\n meta.frameRate = {};\n }\n\n let fps_den = meta.frameRate.fps_den;\n let fps_num = meta.frameRate.fps_num;\n\n meta.refSampleDuration = meta.timescale * (fps_den / fps_num);\n\n let codecArray = sps.subarray(1, 4);\n\n let codecString = 'avc1.';\n for (let j = 0; j < 3; j++) {\n let h = codecArray[j].toString(16);\n if (h.length < 2) {\n h = '0' + h;\n }\n codecString += h;\n }\n // codec\n meta.codec = codecString;\n }\n\n let ppsCount = v.getUint8(offset); // numOfPictureParameterSets\n if (ppsCount === 0) {\n // this._onError(DemuxErrors.FORMAT_ERROR, 'Flv: Invalid AVCDecoderConfigurationRecord: No PPS');\n return;\n } else if (ppsCount > 1) {\n // Log.w(this.TAG, `Flv: Strange AVCDecoderConfigurationRecord: PPS Count = ${ppsCount}`);\n }\n\n offset++;\n for (let i = 0; i < ppsCount; i++) {\n let len = v.getUint16(offset, false); // pictureParameterSetLength\n offset += 2;\n\n if (len === 0) {\n continue;\n }\n let pps = new Uint8Array(arrayBuffer.buffer, offset, len);\n\n // pps is useless for extracting video information\n offset += len;\n }\n\n meta.videoType = 'avc';\n\n // meta.avcc = arrayBuffer;\n return meta;\n}\n","class SPSParser {\n static parseSPS(uint8array) {\n\n }\n}\n\nexport default SPSParser\n","import {H265_NAL_TYPE} from \"../constant\";\nimport SPSParser from \"./h265-sps-parser\";\n\nexport function parseHEVCDecoderConfigurationRecord(arrayBuffer) {\n const meta = {}\n meta.videoType = 'hevc'\n let offset = 28 - 5;\n //\n const vpsTag = arrayBuffer[offset];\n\n if (vpsTag !== H265_NAL_TYPE.vps) {\n return meta;\n }\n\n offset += 2;\n offset += 1;\n const vpsLength = arrayBuffer[offset + 1] | (arrayBuffer[offset] << 8);\n offset += 2;\n const vpsData = arrayBuffer.slice(offset, (offset + vpsLength));\n console.log(Uint8Array.from(vpsData));\n offset += vpsLength;\n\n const spsTag = arrayBuffer[offset]\n if (spsTag !== H265_NAL_TYPE.sps) {\n return meta;\n }\n offset += 2;\n offset += 1;\n const spsLength = arrayBuffer[offset + 1] | (arrayBuffer[offset] << 8);\n\n offset += 2;\n const spsData = arrayBuffer.slice(offset, (offset + spsLength))\n console.log(Uint8Array.from(spsData));\n\n offset += spsLength;\n\n const ppsTag = arrayBuffer[offset];\n\n if (ppsTag !== H265_NAL_TYPE.pps) {\n return meta;\n }\n offset += 2;\n offset += 1;\n const ppsLength = arrayBuffer[offset + 1] | (arrayBuffer[offset] << 8);\n offset += 2;\n const ppsData = arrayBuffer.slice(offset, (offset + ppsLength))\n console.log(Uint8Array.from(ppsData));\n\n let sps = Uint8Array.from(spsData);\n let config = SPSParser.parseSPS(sps);\n\n meta.codecWidth = config.codec_size.width;\n meta.codecHeight = config.codec_size.height;\n\n meta.presentWidth = config.present_size.width;\n meta.presentHeight = config.present_size.height;\n\n meta.profile = config.profile_string;\n meta.level = config.level_string;\n meta.bitDepth = config.bit_depth;\n meta.chromaFormat = config.chroma_format;\n meta.sarRatio = config.sar_ratio;\n\n return meta;\n}\n","import Emitter from \"../utils/emitter\";\nimport {EVENTS, EVENTS_ERROR, FRAG_DURATION, MEDIA_SOURCE_STATE, MP4_CODECS, VIDEO_ENC_CODE} from \"../constant\";\nimport MP4 from \"../remux/fmp4-generator\";\nimport {parseAVCDecoderConfigurationRecord} from \"../utils/h264\";\nimport {parseHEVCDecoderConfigurationRecord} from \"../utils/h265\";\nimport {now} from \"../utils\";\n\nexport default class MseDecoder extends Emitter {\n constructor(player) {\n super();\n this.player = player;\n this.isAvc = true;\n this.mediaSource = new window.MediaSource();\n this.sourceBuffer = null;\n this.hasInit = false;\n this.isInitInfo = false;\n this.cacheTrack = {};\n this.timeInit = false;\n this.sequenceNumber = 0;\n this.mediaSourceOpen = false;\n this.bufferList = [];\n this.dropping = false;\n this.player.video.$videoElement.src = window.URL.createObjectURL(this.mediaSource);\n const {\n debug,\n events: {proxy},\n } = player;\n\n\n proxy(this.mediaSource, 'sourceopen', () => {\n this.mediaSourceOpen = true;\n this.player.emit(EVENTS.mseSourceOpen)\n })\n\n proxy(this.mediaSource, 'sourceclose', () => {\n this.player.emit(EVENTS.mseSourceClose);\n })\n\n player.debug.log('MediaSource', 'init')\n }\n\n destroy() {\n this.stop();\n this.bufferList = [];\n this.mediaSource = null;\n this.mediaSourceOpen = false;\n this.sourceBuffer = null;\n this.hasInit = false;\n this.isInitInfo = false;\n this.sequenceNumber = 0;\n this.cacheTrack = null;\n this.timeInit = false;\n this.off();\n this.player.debug.log('MediaSource', 'destroy')\n }\n\n get state() {\n return this.mediaSource.readyState\n }\n\n get isStateOpen() {\n return this.state === MEDIA_SOURCE_STATE.open;\n }\n\n get isStateClosed() {\n return this.state === MEDIA_SOURCE_STATE.closed;\n }\n\n get isStateEnded() {\n return this.state === MEDIA_SOURCE_STATE.ended;\n }\n\n get duration() {\n return this.mediaSource.duration\n }\n\n set duration(duration) {\n this.mediaSource.duration = duration\n }\n\n decodeVideo(payload, ts, isIframe) {\n const player = this.player;\n\n if (!this.hasInit) {\n if (isIframe && payload[1] === 0) {\n const videoCodec = (payload[0] & 0x0F);\n player.video.updateVideoInfo({\n encTypeCode: videoCodec\n })\n\n // 如果解码出来的是\n if (videoCodec === VIDEO_ENC_CODE.h265) {\n this.emit(EVENTS_ERROR.mediaSourceH265NotSupport)\n return;\n }\n if (!player._times.decodeStart) {\n player._times.decodeStart = now();\n }\n\n this._decodeConfigurationRecord(payload, ts, isIframe, videoCodec)\n this.hasInit = true;\n }\n } else {\n this._decodeVideo(payload, ts, isIframe);\n }\n }\n\n _doDecode() {\n const bufferItem = this.bufferList.shift();\n if (bufferItem) {\n this._decodeVideo(bufferItem.payload, bufferItem.ts, bufferItem.isIframe);\n }\n }\n\n\n _decodeConfigurationRecord(payload, ts, isIframe, videoCodec) {\n let data = payload.slice(5);\n let config = {};\n\n if (videoCodec === VIDEO_ENC_CODE.h264) {\n config = parseAVCDecoderConfigurationRecord(data)\n } else if (videoCodec === VIDEO_ENC_CODE.h265) {\n config = parseHEVCDecoderConfigurationRecord(data);\n }\n const metaData = {\n id: 1, // video tag data\n type: 'video',\n timescale: 1000,\n duration: 0,\n avcc: data,\n codecWidth: config.codecWidth,\n codecHeight: config.codecHeight,\n videoType: config.videoType\n }\n // ftyp\n const metaBox = MP4.generateInitSegment(metaData);\n this.isAvc = true;\n this.appendBuffer(metaBox.buffer);\n this.sequenceNumber = 0;\n this.cacheTrack = null;\n this.timeInit = false;\n }\n\n //\n _decodeVideo(payload, ts, isIframe) {\n const player = this.player;\n let arrayBuffer = payload.slice(5);\n let bytes = arrayBuffer.byteLength;\n let cts = 0;\n let dts = ts;\n // player.debug.log('MediaSource', '_decodeVideo', ts);\n const $video = player.video.$videoElement;\n\n if ($video.buffered.length > 1) {\n this.removeBuffer($video.buffered.start(0), $video.buffered.end(0));\n this.timeInit = false;\n }\n if (this.dropping && dts - this.cacheTrack.dts > 1000) {\n this.dropping = false;\n this.cacheTrack = {};\n } else if (this.cacheTrack && dts > this.cacheTrack.dts) {\n // 需要额外加8个size\n let mdatBytes = 8 + this.cacheTrack.size;\n let mdatbox = new Uint8Array(mdatBytes);\n mdatbox[0] = mdatBytes >>> 24 & 255;\n mdatbox[1] = mdatBytes >>> 16 & 255;\n mdatbox[2] = mdatBytes >>> 8 & 255;\n mdatbox[3] = mdatBytes & 255;\n mdatbox.set(MP4.types.mdat, 4);\n mdatbox.set(this.cacheTrack.data, 8);\n\n this.cacheTrack.duration = dts - this.cacheTrack.dts;\n // moof\n let moofbox = MP4.moof(this.cacheTrack, this.cacheTrack.dts);\n let result = new Uint8Array(moofbox.byteLength + mdatbox.byteLength);\n result.set(moofbox, 0);\n result.set(mdatbox, moofbox.byteLength);\n // appendBuffer\n this.appendBuffer(result.buffer)\n player.handleRender();\n player.updateStats({fps: true, ts: ts, buf: player.demux.delay})\n if (!player._times.videoStart) {\n player._times.videoStart = now();\n player.handlePlayToRenderTimes()\n }\n } else {\n player.debug.log('MediaSource', 'timeInit set false , cacheTrack = {}');\n this.timeInit = false;\n this.cacheTrack = {};\n }\n\n this.cacheTrack.id = 1;\n this.cacheTrack.sequenceNumber = ++this.sequenceNumber;\n this.cacheTrack.size = bytes;\n this.cacheTrack.dts = dts;\n this.cacheTrack.cts = cts;\n this.cacheTrack.isKeyframe = isIframe;\n this.cacheTrack.data = arrayBuffer;\n //\n this.cacheTrack.flags = {\n isLeading: 0,\n dependsOn: isIframe ? 2 : 1,\n isDependedOn: isIframe ? 1 : 0,\n hasRedundancy: 0,\n isNonSync: isIframe ? 0 : 1\n }\n\n //\n if (!this.timeInit && $video.buffered.length === 1) {\n player.debug.log('MediaSource', 'timeInit set true');\n this.timeInit = true;\n $video.currentTime = $video.buffered.end(0);\n }\n\n if (!this.isInitInfo && $video.videoWidth > 0 && $video.videoHeight > 0) {\n player.debug.log('MediaSource', `updateVideoInfo: ${$video.videoWidth},${$video.videoHeight}`);\n player.video.updateVideoInfo({\n width: $video.videoWidth,\n height: $video.videoHeight\n })\n player.video.initCanvasViewSize();\n this.isInitInfo = true;\n }\n }\n\n appendBuffer(buffer) {\n const {\n debug,\n events: {proxy},\n } = this.player;\n\n if (this.sourceBuffer === null) {\n this.sourceBuffer = this.mediaSource.addSourceBuffer(MP4_CODECS.avc);\n proxy(this.sourceBuffer, 'error', (error) => {\n this.player.emit(EVENTS.mseSourceBufferError, error);\n // this.dropSourceBuffer(false)\n })\n }\n\n if (this.sourceBuffer.updating === false && this.isStateOpen) {\n this.sourceBuffer.appendBuffer(buffer);\n return;\n }\n\n if (this.isStateClosed) {\n this.player.emit(EVENTS.mseSourceBufferError, 'mediaSource is not attached to video or mediaSource is closed')\n } else if (this.isStateEnded) {\n this.player.emit(EVENTS.mseSourceBufferError, 'mediaSource is closed')\n } else {\n if (this.sourceBuffer.updating === true) {\n this.player.emit(EVENTS.mseSourceBufferBusy);\n // this.dropSourceBuffer(false);\n }\n }\n }\n\n stop() {\n if (this.isStateOpen) {\n if (this.sourceBuffer) {\n this.sourceBuffer.abort();\n }\n }\n this.endOfStream();\n }\n\n dropSourceBuffer(flag) {\n const video = this.player.video;\n const $video = video.$videoElement;\n this.dropping = flag;\n if ($video.buffered.length > 0) {\n if ($video.buffered.end(0) - $video.currentTime > 1) {\n $video.currentTime = $video.buffered.end(0);\n }\n }\n }\n\n\n removeBuffer(start, end) {\n\n if (this.isStateOpen && this.sourceBuffer.updating === false) {\n try {\n this.sourceBuffer.remove(start, end)\n } catch (e) {\n console.error(e)\n }\n }\n }\n\n endOfStream() {\n if (this.isStateOpen) {\n this.mediaSource.endOfStream();\n }\n }\n}\n","// tks: https://github.com/richtr/NoSleep.js\n\nconst WEBM = \"data:video/webm;base64,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\";\nconst MP4 = \"data:video/mp4;base64,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\";\n\n\n// Detect iOS browsers < version 10\nconst\n oldIOS = () =>\n typeof navigator !== \"undefined\" &&\n parseFloat(\n (\n \"\" +\n (/CPU.*OS ([0-9_]{3,4})[0-9_]{0,1}|(CPU like).*AppleWebKit.*Mobile/i.exec(\n navigator.userAgent\n ) || [0, \"\"])[1]\n )\n .replace(\"undefined\", \"3_2\")\n .replace(\"_\", \".\")\n .replace(\"_\", \"\")\n ) < 10 &&\n !window.MSStream;\n\n// Detect native Wake Lock API support\nconst nativeWakeLock = () => \"wakeLock\" in navigator;\n\nexport default class NoSleep {\n constructor(player) {\n this.player = player;\n this.enabled = false;\n if (nativeWakeLock()) {\n this._wakeLock = null;\n const handleVisibilityChange = () => {\n if (this._wakeLock !== null && document.visibilityState === \"visible\") {\n this.enable();\n }\n };\n document.addEventListener(\"visibilitychange\", handleVisibilityChange);\n document.addEventListener(\"fullscreenchange\", handleVisibilityChange);\n } else if (oldIOS()) {\n this.noSleepTimer = null;\n } else {\n // Set up no sleep video element\n this.noSleepVideo = document.createElement(\"video\");\n\n this.noSleepVideo.setAttribute(\"title\", \"No Sleep\");\n this.noSleepVideo.setAttribute(\"playsinline\", \"\");\n\n this._addSourceToVideo(this.noSleepVideo, \"webm\", WEBM);\n this._addSourceToVideo(this.noSleepVideo, \"mp4\", MP4);\n\n this.noSleepVideo.addEventListener(\"loadedmetadata\", () => {\n if (this.noSleepVideo.duration <= 1) {\n // webm source\n this.noSleepVideo.setAttribute(\"loop\", \"\");\n } else {\n // mp4 source\n this.noSleepVideo.addEventListener(\"timeupdate\", () => {\n if (this.noSleepVideo.currentTime > 0.5) {\n this.noSleepVideo.currentTime = Math.random();\n }\n });\n }\n });\n }\n }\n\n _addSourceToVideo(element, type, dataURI) {\n var source = document.createElement(\"source\");\n source.src = dataURI;\n source.type = `video/${type}`;\n element.appendChild(source);\n }\n\n get isEnabled() {\n return this.enabled;\n }\n\n enable() {\n const debug = this.player.debug;\n if (nativeWakeLock()) {\n return navigator.wakeLock\n .request(\"screen\")\n .then((wakeLock) => {\n this._wakeLock = wakeLock;\n this.enabled = true;\n debug.log('wakeLock', 'Wake Lock active.')\n this._wakeLock.addEventListener(\"release\", () => {\n // ToDo: Potentially emit an event for the page to observe since\n // Wake Lock releases happen when page visibility changes.\n // (https://web.dev/wakelock/#wake-lock-lifecycle)\n debug.log('wakeLock', 'Wake Lock released.')\n });\n })\n .catch((err) => {\n this.enabled = false;\n debug.error('wakeLock', `${err.name}, ${err.message}`)\n throw err;\n });\n } else if (oldIOS()) {\n this.disable();\n this.noSleepTimer = window.setInterval(() => {\n if (!document.hidden) {\n window.location.href = window.location.href.split(\"#\")[0];\n window.setTimeout(window.stop, 0);\n }\n }, 15000);\n this.enabled = true;\n return Promise.resolve();\n } else {\n let playPromise = this.noSleepVideo.play();\n return playPromise\n .then((res) => {\n this.enabled = true;\n return res;\n })\n .catch((err) => {\n this.enabled = false;\n throw err;\n });\n }\n }\n\n disable() {\n const debug = this.player.debug;\n if (nativeWakeLock()) {\n if (this._wakeLock) {\n this._wakeLock.release();\n }\n this._wakeLock = null;\n } else if (oldIOS()) {\n if (this.noSleepTimer) {\n debug.warn('wakeLock', 'NoSleep now disabled for older iOS devices.')\n\n window.clearInterval(this.noSleepTimer);\n this.noSleepTimer = null;\n }\n } else {\n this.noSleepVideo.pause();\n }\n this.enabled = false;\n }\n}\n","import {DEFAULT_PLAYER_OPTIONS, EVENTS, EVENTS_ERROR, JESSIBUCA_EVENTS} from \"../constant\";\nimport Debug from \"../utils/debug\";\nimport Events from \"../utils/events\";\nimport property from './property';\nimport events from './events';\nimport {\n fpsStatus,\n initPlayTimes,\n isEmpty,\n isFullScreen, isMobile,\n isNotEmpty,\n now,\n supportMSE,\n supportOffscreenV2,\n supportWCS\n} from \"../utils\";\nimport Video from \"../video\";\nimport Audio from \"../audio\";\nimport Stream from \"../stream\";\nimport Recorder from \"../recorder\";\nimport DecoderWorker from \"../worker/index\";\nimport Emitter from \"../utils/emitter\";\nimport Demux from \"../demux\";\nimport WebcodecsDecoder from \"../decoder/webcodecs\";\nimport Control from \"../control\";\nimport './style.scss'\nimport observer from \"./observer\";\nimport MseDecoder from \"../decoder/mediaSource\";\nimport NoSleep from \"../utils/noSleep\";\n\nexport default class Player extends Emitter {\n constructor(container, options) {\n super()\n this.$container = container;\n this._opt = Object.assign({}, DEFAULT_PLAYER_OPTIONS, options)\n this.debug = new Debug(this);\n\n\n if (this._opt.useWCS) {\n this._opt.useWCS = supportWCS();\n }\n\n if (this._opt.useMSE) {\n this._opt.useMSE = supportMSE();\n }\n\n // 如果使用mse则强制不允许 webcodecs\n if (this._opt.useMSE) {\n if (this._opt.useWCS) {\n this.debug.log('Player', 'useWCS set true->false')\n }\n\n if (!this._opt.forceNoOffscreen) {\n this.debug.log('Player', 'forceNoOffscreen set false->true')\n }\n\n this._opt.useWCS = false;\n this._opt.forceNoOffscreen = true;\n } else if (this._opt.useWCS) {\n\n }\n\n\n if (!this._opt.forceNoOffscreen) {\n if (!supportOffscreenV2()) {\n this._opt.forceNoOffscreen = true;\n this._opt.useOffscreen = false;\n } else {\n this._opt.useOffscreen = true;\n }\n }\n\n if (!this._opt.hasAudio) {\n this._opt.operateBtns.audio = false\n }\n\n this._opt.hasControl = this._hasControl();\n //\n this._loading = false;\n this._playing = false;\n this._hasLoaded = false;\n\n //\n this._checkHeartTimeout = null;\n this._checkLoadingTimeout = null;\n\n //\n this._startBpsTime = null;\n this._isPlayingBeforePageHidden = false;\n this._stats = {\n buf: 0, // 当前缓冲区时长,单位毫秒,\n fps: 0, // 当前视频帧率\n abps: 0, // 当前音频码率,单位bit\n vbps: 0, // 当前视频码率,单位bit\n ts: 0 // 当前视频帧pts,单位毫秒\n }\n\n // 各个步骤的时间统计\n this._times = initPlayTimes();\n\n //\n this._videoTimestamp = 0;\n this._audioTimestamp = 0;\n\n property(this);\n\n this.events = new Events(this);\n this.video = new Video(this);\n\n if (this._opt.hasAudio) {\n this.audio = new Audio(this);\n }\n this.recorder = new Recorder(this);\n\n if (!this._onlyMseOrWcsVideo()) {\n this.decoderWorker = new DecoderWorker(this);\n } else {\n this.loaded = true;\n }\n\n this.stream = null;\n this.demux = null;\n\n if (this._opt.useWCS) {\n this.webcodecsDecoder = new WebcodecsDecoder(this)\n }\n\n if (this._opt.useMSE) {\n this.mseDecoder = new MseDecoder(this);\n }\n\n //\n this.control = new Control(this);\n\n this.keepScreenOn = new NoSleep(this);\n\n\n events(this);\n observer(this);\n\n\n if (this._opt.useWCS) {\n this.debug.log('Player', 'use WCS')\n }\n\n if (this._opt.useMSE) {\n this.debug.log('Player', 'use MSE')\n }\n\n if (this._opt.useOffscreen) {\n this.debug.log('Player', 'use offscreen')\n }\n\n this.debug.log('Player options', this._opt);\n }\n\n\n destroy() {\n this._loading = false;\n this._playing = false;\n this._hasLoaded = false;\n\n this._times = initPlayTimes();\n\n if (this.decoderWorker) {\n this.decoderWorker.destroy();\n this.decoderWorker = null;\n }\n if (this.video) {\n this.video.destroy();\n this.video = null;\n }\n\n if (this.audio) {\n this.audio.destroy();\n this.audio = null;\n }\n\n if (this.stream) {\n this.stream.destroy();\n this.stream = null;\n }\n\n if (this.recorder) {\n this.recorder.destroy();\n this.recorder = null;\n }\n\n if (this.control) {\n this.control.destroy();\n this.control = null;\n }\n\n if (this.webcodecsDecoder) {\n this.webcodecsDecoder.destroy();\n this.webcodecsDecoder = null;\n }\n\n if (this.mseDecoder) {\n this.mseDecoder.destroy();\n this.mseDecoder = null;\n }\n\n if (this.demux) {\n this.demux.destroy();\n this.demux = null;\n }\n\n\n if (this.events) {\n this.events.destroy();\n this.events = null;\n }\n\n this.clearCheckHeartTimeout();\n this.clearCheckLoadingTimeout();\n //\n this.releaseWakeLock();\n this.keepScreenOn = null;\n // reset stats\n this.resetStats();\n this._audioTimestamp = 0;\n this._videoTimestamp = 0;\n\n // 其他没法解耦的,通过 destroy 方式\n this.emit('destroy');\n // 接触所有绑定事件\n this.off();\n\n this.debug.log('play', 'destroy end');\n }\n\n set fullscreen(value) {\n if (isMobile()) {\n this.emit(EVENTS.webFullscreen, value);\n setTimeout(() => {\n this.updateOption({\n rotate: value ? 270 : 0,\n })\n this.resize();\n }, 10)\n } else {\n this.emit(EVENTS.fullscreen, value);\n }\n }\n\n get fullscreen() {\n return isFullScreen() || this.webFullscreen;\n }\n\n set webFullscreen(value) {\n this.emit(EVENTS.webFullscreen, value);\n }\n\n get webFullscreen() {\n return this.$container.classList.contains('jessibuca-fullscreen-web')\n }\n\n set loaded(value) {\n this._hasLoaded = value;\n }\n\n get loaded() {\n return this._hasLoaded;\n }\n\n //\n set playing(value) {\n\n if (value) {\n // 将loading 设置为 false\n this.loading = false;\n }\n\n if (this.playing !== value) {\n this._playing = value;\n this.emit(EVENTS.playing, value);\n this.emit(EVENTS.volumechange, this.volume);\n\n if (value) {\n this.emit(EVENTS.play);\n } else {\n this.emit(EVENTS.pause);\n }\n }\n\n }\n\n get playing() {\n return this._playing;\n }\n\n get volume() {\n return (this.audio && this.audio.volume) || 0;\n }\n\n set volume(value) {\n this.audio && this.audio.setVolume(value);\n }\n\n set loading(value) {\n if (this.loading !== value) {\n this._loading = value;\n this.emit(EVENTS.loading, this._loading);\n }\n }\n\n get loading() {\n return this._loading;\n }\n\n set recording(value) {\n if (value) {\n if (this.playing) {\n this.recorder.startRecord();\n }\n } else {\n this.recorder.stopRecordAndSave();\n }\n }\n\n get recording() {\n return this.recorder && this.recorder.recording;\n }\n\n set audioTimestamp(value) {\n if (value === null) {\n return;\n }\n this._audioTimestamp = value;\n }\n\n //\n get audioTimestamp() {\n return this._audioTimestamp;\n }\n\n //\n set videoTimestamp(value) {\n if (value === null) {\n return;\n }\n this._videoTimestamp = value;\n // just for wasm\n if (!this._opt.useWCS && !this._opt.useMSE) {\n if (this.audioTimestamp && this.videoTimestamp) {\n this.audio && this.audio.emit(EVENTS.videoSyncAudio, {\n audioTimestamp: this.audioTimestamp,\n videoTimestamp: this.videoTimestamp,\n diff: this.audioTimestamp - this.videoTimestamp\n })\n }\n }\n }\n\n //\n get videoTimestamp() {\n return this._videoTimestamp;\n }\n\n\n /**\n *\n * @param options\n */\n updateOption(options) {\n this._opt = Object.assign({}, this._opt, options)\n }\n\n /**\n *\n * @returns {Promise}\n */\n init() {\n return new Promise((resolve, reject) => {\n if (!this.stream) {\n this.stream = new Stream(this);\n }\n\n if (!this.demux) {\n this.demux = new Demux(this);\n }\n\n if (this._opt.useWCS) {\n if (!this.webcodecsDecoder) {\n this.webcodecsDecoder = new WebcodecsDecoder(this)\n }\n }\n\n if (this._opt.useMSE) {\n if (!this.mseDecoder) {\n this.mseDecoder = new MseDecoder(this);\n }\n }\n\n if (!this.decoderWorker && !this._onlyMseOrWcsVideo()) {\n this.decoderWorker = new DecoderWorker(this);\n\n this.once(EVENTS.decoderWorkerInit, () => {\n resolve()\n })\n } else {\n resolve()\n }\n\n })\n }\n\n\n /**\n *\n * @param url\n * @returns {Promise}\n */\n play(url) {\n return new Promise((resolve, reject) => {\n if (!url && !this._opt.url) {\n return reject();\n }\n\n this.loading = true;\n this.playing = false;\n this._times.playInitStart = now();\n if (!url) {\n url = this._opt.url;\n }\n this._opt.url = url;\n\n this.clearCheckHeartTimeout();\n\n this.init().then(() => {\n this._times.playStart = now();\n //\n if (this._opt.isNotMute) {\n this.mute(false);\n }\n\n\n if (this.webcodecsDecoder) {\n this.webcodecsDecoder.once(EVENTS_ERROR.webcodecsH265NotSupport, () => {\n this.emit(EVENTS_ERROR.webcodecsH265NotSupport)\n if (!this._opt.autoWasm) {\n this.emit(EVENTS.error, EVENTS_ERROR.webcodecsH265NotSupport);\n }\n })\n }\n\n if (this.mseDecoder) {\n this.mseDecoder.once(EVENTS_ERROR.mediaSourceH265NotSupport, () => {\n this.emit(EVENTS_ERROR.mediaSourceH265NotSupport)\n if (!this._opt.autoWasm) {\n this.emit(EVENTS.error, EVENTS_ERROR.mediaSourceH265NotSupport);\n }\n })\n }\n\n this.enableWakeLock();\n\n this.stream.fetchStream(url);\n\n //\n this.checkLoadingTimeout();\n // fetch error\n this.stream.once(EVENTS_ERROR.fetchError, (error) => {\n reject(error)\n })\n\n // ws\n this.stream.once(EVENTS_ERROR.websocketError, (error) => {\n reject(error)\n })\n\n // success\n this.stream.once(EVENTS.streamSuccess, () => {\n resolve();\n this._times.streamResponse = now();\n //\n this.video.play();\n })\n\n }).catch((e) => {\n reject(e)\n })\n })\n }\n\n /**\n *\n */\n close() {\n return new Promise((resolve, reject) => {\n this._close().then(() => {\n this.video.clearView();\n resolve()\n })\n })\n }\n\n _close() {\n return new Promise((resolve, reject) => {\n //\n if (this.stream) {\n this.stream.destroy();\n this.stream = null;\n }\n\n if (this.demux) {\n this.demux.destroy();\n this.demux = null;\n }\n\n //\n if (this.decoderWorker) {\n this.decoderWorker.destroy();\n this.decoderWorker = null;\n }\n\n if (this.webcodecsDecoder) {\n this.webcodecsDecoder.destroy();\n this.webcodecsDecoder = null;\n }\n\n if (this.mseDecoder) {\n this.mseDecoder.destroy();\n this.mseDecoder = null;\n }\n\n this.clearCheckHeartTimeout();\n this.clearCheckLoadingTimeout();\n this.playing = false;\n this.loading = false;\n this.recording = false;\n // release audio buffer\n this.audio && this.audio.pause();\n this.video && this.video.pause();\n // release lock\n this.releaseWakeLock();\n // reset stats\n this.resetStats();\n //\n this._audioTimestamp = 0;\n this._videoTimestamp = 0;\n //\n this._times = initPlayTimes();\n //\n setTimeout(() => {\n resolve()\n }, 0)\n })\n }\n\n /**\n *\n * @param flag {boolean} 是否清除画面\n * @returns {Promise}\n */\n pause(flag) {\n if (flag) {\n return this.close();\n } else {\n return this._close();\n }\n }\n\n /**\n *\n * @param flag\n */\n mute(flag) {\n this.audio && this.audio.mute(flag)\n }\n\n /**\n *\n */\n resize() {\n this.video.resize();\n }\n\n /**\n *\n * @param fileName\n * @param fileType\n */\n startRecord(fileName, fileType) {\n if (this.recording) {\n return;\n }\n\n this.recorder.setFileName(fileName, fileType);\n this.recording = true;\n }\n\n /**\n *\n */\n stopRecordAndSave() {\n if (this.recording) {\n this.recording = false;\n }\n }\n\n _hasControl() {\n let result = false;\n\n let hasBtnShow = false;\n Object.keys(this._opt.operateBtns).forEach((key) => {\n if (this._opt.operateBtns[key]) {\n hasBtnShow = true;\n }\n });\n\n if (this._opt.showBandwidth || this._opt.text || hasBtnShow) {\n result = true;\n }\n\n return result;\n }\n\n _onlyMseOrWcsVideo() {\n return this._opt.hasAudio === false && (this._opt.useMSE || (this._opt.useWCS && !this._opt.useOffscreen))\n }\n\n checkHeart() {\n this.clearCheckHeartTimeout();\n this.checkHeartTimeout();\n }\n\n // 心跳检查,如果渲染间隔暂停了多少时间之后,就会抛出异常\n checkHeartTimeout() {\n this._checkHeartTimeout = setTimeout(() => {\n this.pause(false).then(() => {\n this.emit(EVENTS.timeout, EVENTS.delayTimeout);\n this.emit(EVENTS.delayTimeout);\n });\n }, this._opt.heartTimeout * 1000)\n }\n\n //\n clearCheckHeartTimeout() {\n if (this._checkHeartTimeout) {\n clearTimeout(this._checkHeartTimeout);\n this._checkHeartTimeout = null;\n }\n }\n\n // loading 等待时间\n checkLoadingTimeout() {\n this._checkLoadingTimeout = setTimeout(() => {\n this.pause(false).then(() => {\n this.emit(EVENTS.timeout, EVENTS.loadingTimeout);\n this.emit(EVENTS.loadingTimeout);\n });\n }, this._opt.loadingTimeout * 1000)\n }\n\n clearCheckLoadingTimeout() {\n if (this._checkLoadingTimeout) {\n clearTimeout(this._checkLoadingTimeout);\n this._checkLoadingTimeout = null;\n }\n }\n\n handleRender() {\n if (this.loading) {\n this.emit(EVENTS.start);\n this.loading = false;\n this.clearCheckLoadingTimeout();\n }\n if (!this.playing) {\n this.playing = true;\n }\n this.checkHeart();\n }\n\n\n //\n updateStats(options) {\n options = options || {};\n\n if (!this._startBpsTime) {\n this._startBpsTime = now();\n }\n\n if (isNotEmpty(options.ts)) {\n this._stats.ts = options.ts;\n }\n\n if (isNotEmpty(options.buf)) {\n this._stats.buf = options.buf;\n }\n\n if (options.fps) {\n this._stats.fps += 1;\n }\n if (options.abps) {\n this._stats.abps += options.abps;\n }\n if (options.vbps) {\n this._stats.vbps += options.vbps;\n }\n\n const _nowTime = now();\n const timestamp = _nowTime - this._startBpsTime;\n\n if (timestamp < 1 * 1000) {\n return;\n }\n\n this.emit(EVENTS.stats, this._stats);\n this.emit(EVENTS.performance, fpsStatus(this._stats.fps));\n this._stats.fps = 0;\n this._stats.abps = 0;\n this._stats.vbps = 0;\n this._startBpsTime = _nowTime;\n }\n\n resetStats() {\n this._startBpsTime = null;\n this._stats = {\n buf: 0, //ms\n fps: 0,\n abps: 0,\n vbps: 0,\n ts: 0\n }\n }\n\n enableWakeLock() {\n if (this._opt.keepScreenOn) {\n this.keepScreenOn.enable();\n }\n }\n\n releaseWakeLock() {\n if (this._opt.keepScreenOn) {\n this.keepScreenOn.disable();\n }\n }\n\n handlePlayToRenderTimes() {\n const _times = this._times;\n _times.playTimestamp = _times.playStart - _times.playInitStart;\n _times.streamTimestamp = _times.streamStart - _times.playStart;\n _times.streamResponseTimestamp = _times.streamResponse - _times.streamStart;\n _times.demuxTimestamp = _times.demuxStart - _times.streamResponse;\n _times.decodeTimestamp = _times.decodeStart - _times.demuxStart;\n _times.videoTimestamp = _times.videoStart - _times.decodeStart;\n _times.allTimestamp = _times.videoStart - _times.playInitStart;\n this.emit(EVENTS.playToRenderTimes, _times);\n }\n}\n","import Player from './player';\nimport Events from \"./utils/events\";\nimport {DEMUX_TYPE, EVENTS, EVENTS_ERROR, JESSIBUCA_EVENTS, PLAYER_PLAY_PROTOCOL, SCALE_MODE_TYPE} from \"./constant\";\nimport {isEmpty, isNotEmpty, supportWCS, uuid16} from \"./utils\";\nimport Emitter from \"./utils/emitter\";\n\n\nclass Jessibuca extends Emitter {\n static ERROR = EVENTS_ERROR\n\n static TIMEOUT = {\n loadingTimeout: EVENTS.loadingTimeout,\n delayTimeout: EVENTS.delayTimeout,\n }\n\n constructor(options) {\n super()\n let _opt = options;\n let $container = options.container;\n if (typeof options.container === 'string') {\n $container = document.querySelector(options.container);\n }\n if (!$container) {\n throw new Error('Jessibuca need container option');\n return;\n }\n\n $container.classList.add('jessibuca-container');\n\n delete _opt.container;\n\n // s -> ms\n if (isNotEmpty(_opt.videoBuffer)) {\n _opt.videoBuffer = Number(_opt.videoBuffer) * 1000\n }\n\n // setting\n if (isNotEmpty(_opt.timeout)) {\n if (isEmpty(_opt.loadingTimeout)) {\n _opt.loadingTimeout = _opt.timeout;\n }\n\n if (isEmpty(_opt.heartTimeout)) {\n _opt.heartTimeout = _opt.timeout\n }\n }\n\n this._opt = _opt;\n this.$container = $container;\n this._loadingTimeoutReplayTimes = 0;\n this._heartTimeoutReplayTimes = 0;\n this.events = new Events(this);\n this._initPlayer($container, _opt);\n }\n\n /**\n *\n */\n destroy() {\n if (this.events) {\n this.events.destroy();\n this.events = null;\n }\n\n if (this.player) {\n this.player.destroy();\n this.player = null;\n }\n this.$container = null;\n this._opt = null;\n this._loadingTimeoutReplayTimes = 0;\n this._heartTimeoutReplayTimes = 0;\n this.off();\n }\n\n _initPlayer($container, options) {\n this.player = new Player($container, options);\n this._bindEvents();\n }\n\n _resetPlayer(options = {}) {\n this.player.destroy();\n this.player = null;\n const _options = Object.assign(this._opt, options);\n this._initPlayer(this.$container, _options);\n }\n\n _bindEvents() {\n // 对外的事件\n Object.keys(JESSIBUCA_EVENTS).forEach((key) => {\n this.player.on(JESSIBUCA_EVENTS[key], (value) => {\n this.emit(key, value)\n })\n })\n }\n\n /**\n * 是否开启控制台调试打印\n * @param value {Boolean}\n */\n setDebug(value) {\n this.player.updateOption({\n isDebug: !!value\n })\n }\n\n /**\n *\n */\n mute() {\n this.player.mute(true);\n }\n\n /**\n *\n */\n cancelMute() {\n this.player.mute(false);\n }\n\n /**\n *\n * @param value {number}\n */\n setVolume(value) {\n this.player.volume = value;\n }\n\n /**\n *\n */\n audioResume() {\n this.player.audio && this.player.audio.audioEnabled(true);\n }\n\n /**\n * 设置超时时长, 单位秒 在连接成功之前和播放中途,如果超过设定时长无数据返回,则回调timeout事件\n * @param value {number}\n */\n setTimeout(time) {\n time = Number(time);\n this.player.updateOption({\n timeout: time,\n loadingTimeout: time,\n heartTimeout: time\n })\n }\n\n /**\n *\n * @param type {number}: 0,1,2\n */\n setScaleMode(type) {\n type = Number(type);\n let options = {\n isFullResize: false,\n isResize: false\n }\n switch (type) {\n case SCALE_MODE_TYPE.full:\n options.isFullResize = false;\n options.isResize = false;\n break;\n case SCALE_MODE_TYPE.auto:\n options.isFullResize = false;\n options.isResize = true;\n break;\n case SCALE_MODE_TYPE.fullAuto:\n options.isFullResize = true;\n options.isResize = true;\n break;\n }\n\n this.player.updateOption(options);\n this.resize();\n }\n\n /**\n *\n * @returns {Promise}\n */\n pause() {\n return this.player.pause();\n }\n\n /**\n *\n */\n close() {\n // clear url\n this._opt.url = '';\n return this.player.close();\n }\n\n\n /**\n *\n */\n clearView() {\n this.player.video.clearView()\n }\n\n /**\n *\n * @param url {string}\n * @returns {Promise}\n */\n play(url) {\n return new Promise((resolve, reject) => {\n if (!url && !this._opt.url) {\n this.emit(EVENTS.error, EVENTS_ERROR.playError)\n reject();\n return;\n }\n\n if (url) {\n // url 相等的时候。\n if (this._opt.url) {\n // 存在相同的 url\n if (url === this._opt.url) {\n // 正在播放\n if (this.player.playing) {\n resolve();\n } else {\n // pause -> play\n this.clearView();\n this.player.play(this._opt.url).then(() => {\n resolve();\n }).catch(() => {\n this.player.pause().then(() => {\n reject();\n })\n })\n }\n } else {\n // url 发生改变了\n this.player.pause().then(() => {\n // 清除 画面\n this.clearView();\n return this._play(url);\n }).catch(() => {\n reject();\n })\n }\n } else {\n return this._play(url);\n }\n } else {\n // url 不存在的时候\n // 就是从 play -> pause -> play\n this.player.play(this._opt.url).then(() => {\n resolve();\n }).catch(() => {\n this.player.pause().then(() => {\n reject();\n })\n })\n }\n })\n }\n\n /**\n *\n * @param url {string}\n * @returns {Promise}\n * @private\n */\n _play(url) {\n return new Promise((resolve, reject) => {\n this._opt.url = url;\n // 新的url\n const isHttp = url.indexOf(\"http\") === 0;\n //\n const protocol = isHttp ? PLAYER_PLAY_PROTOCOL.fetch : PLAYER_PLAY_PROTOCOL.websocket\n //\n const demuxType = (isHttp || url.indexOf(\".flv\") !== -1 || this._opt.isFlv) ? DEMUX_TYPE.flv : DEMUX_TYPE.m7s;\n\n this.player.updateOption({\n protocol,\n demuxType\n })\n\n this.player.once(EVENTS_ERROR.mediaSourceH265NotSupport, () => {\n this.close().then(() => {\n if (this.player._opt.autoWasm) {\n this.player.debug.log('Jessibuca', 'auto wasm [mse-> wasm] reset player and play')\n this._resetPlayer({useMSE: false})\n this.play(url).then(() => {\n // resolve();\n this.player.debug.log('Jessibuca', 'auto wasm [mse-> wasm] reset player and play success')\n }).catch(() => {\n // reject();\n this.player.debug.log('Jessibuca', 'auto wasm [mse-> wasm] reset player and play error')\n });\n }\n });\n })\n\n this.player.once(EVENTS_ERROR.webcodecsH265NotSupport, () => {\n this.close().then(() => {\n if (this.player._opt.autoWasm) {\n this.player.debug.log('Jessibuca', 'auto wasm [wcs-> wasm] reset player and play')\n this._resetPlayer({useWCS: false})\n this.play(url).then(() => {\n // resolve();\n this.player.debug.log('Jessibuca', 'auto wasm [wcs-> wasm] reset player and play success')\n }).catch(() => {\n // reject();\n this.player.debug.log('Jessibuca', 'auto wasm [wcs-> wasm] reset player and play error')\n });\n }\n });\n })\n\n // 解码报错。\n this.player.once(EVENTS_ERROR.wasmDecodeError, () => {\n if (this.player._opt.wasmDecodeErrorReplay) {\n this.close().then(() => {\n this.player.debug.log('Jessibuca', 'wasm decode error and reset player and play')\n this._resetPlayer({useWCS: false})\n this.play(url).then(() => {\n // resolve();\n this.player.debug.log('Jessibuca', 'wasm decode error and reset player and play success')\n }).catch(() => {\n // reject();\n this.player.debug.log('Jessibuca', 'wasm decode error and reset player and play error')\n });\n })\n }\n })\n\n // 监听 delay timeout\n this.player.once(EVENTS.delayTimeout, () => {\n if (this.player._opt.heartTimeoutReplay && this._heartTimeoutReplayTimes < this.player._opt.heartTimeoutReplayTimes) {\n this._heartTimeoutReplayTimes += 1;\n this.play(url).then(() => {\n // resolve();\n this._heartTimeoutReplayTimes = 0;\n }).catch(() => {\n // reject();\n });\n }\n })\n\n // 监听 loading timeout\n this.player.once(EVENTS.loadingTimeout, () => {\n if (this.player._opt.loadingTimeoutReplay && this._loadingTimeoutReplayTimes < this.player._opt.loadingTimeoutReplayTimes) {\n this._loadingTimeoutReplayTimes += 1;\n this.play(url).then(() => {\n // resolve();\n this._loadingTimeoutReplayTimes = 0;\n }).catch(() => {\n // reject();\n });\n }\n })\n\n\n if (this.hasLoaded()) {\n this.player.play(url).then(() => {\n resolve();\n }).catch(() => {\n this.player.pause().then(() => {\n reject();\n })\n })\n } else {\n this.player.once(EVENTS.decoderWorkerInit, () => {\n this.player.play(url).then(() => {\n resolve();\n }).catch(() => {\n this.player.pause().then(() => {\n reject();\n })\n })\n })\n }\n })\n }\n\n /**\n *\n */\n resize() {\n this.player.resize();\n }\n\n /**\n *\n * @param time {number} s\n */\n setBufferTime(time) {\n time = Number(time)\n // s -> ms\n this.player.updateOption({\n videoBuffer: time * 1000\n })\n // update worker config\n this.player.decoderWorker && this.player.decoderWorker.updateWorkConfig({\n key: 'videoBuffer',\n value: time * 1000\n })\n }\n\n /**\n *\n * @param deg {number}\n */\n setRotate(deg) {\n deg = parseInt(deg, 10)\n const list = [0, 90, 270];\n if (this._opt.rotate === deg || list.indexOf(deg) === -1) {\n return;\n }\n this.player.updateOption({\n rotate: deg\n })\n this.resize();\n }\n\n /**\n *\n * @returns {boolean}\n */\n hasLoaded() {\n return this.player.loaded;\n }\n\n /**\n *\n */\n setKeepScreenOn() {\n this.player.updateOption({\n keepScreenOn: true\n })\n }\n\n /**\n *\n * @param flag {Boolean}\n */\n setFullscreen(flag) {\n const fullscreen = !!flag;\n if (this.player.fullscreen !== fullscreen) {\n this.player.fullscreen = fullscreen;\n }\n }\n\n /**\n *\n * @param filename {string}\n * @param format {string}\n * @param quality {number}\n * @param type {string} download,base64,blob\n */\n screenshot(filename, format, quality, type) {\n return this.player.video.screenshot(filename, format, quality, type)\n }\n\n /**\n *\n * @param fileName {string}\n * @param fileType {string}\n * @returns {Promise}\n */\n startRecord(fileName, fileType) {\n return new Promise((resolve, reject) => {\n if (this.player.playing) {\n this.player.startRecord(fileName, fileType)\n resolve();\n } else {\n reject();\n }\n })\n }\n\n stopRecordAndSave() {\n if (this.player.recording) {\n this.player.stopRecordAndSave();\n }\n }\n\n /**\n *\n * @returns {Boolean}\n */\n isPlaying() {\n return this.player.playing;\n }\n\n /**\n * 是否静音状态\n * @returns {Boolean}\n */\n isMute() {\n return this.player.audio ? this.player.audio.isMute : true;\n }\n\n /**\n * 是否在录制视频\n * @returns {*}\n */\n isRecording() {\n return this.player.recorder.recording;\n }\n\n\n}\n\n\nwindow.Jessibuca = Jessibuca;\n\nexport default Jessibuca;\n"],"names":["PLAYER_PLAY_PROTOCOL","websocket","fetch","webrtc","DEMUX_TYPE","flv","m7s","DEFAULT_PLAYER_OPTIONS","videoBuffer","isResize","isFullResize","isFlv","debug","hotKey","loadingTimeout","heartTimeout","timeout","loadingTimeoutReplay","heartTimeoutReplay","loadingTimeoutReplayTimes","heartTimeoutReplayTimes","supportDblclickFullscreen","showBandwidth","keepScreenOn","isNotMute","hasAudio","hasVideo","operateBtns","fullscreen","screenshot","play","audio","record","controlAutoHide","hasControl","loadingText","background","decoder","url","rotate","forceNoOffscreen","hiddenAutoPause","protocol","demuxType","useWCS","wcsUseVideoRender","useMSE","useOffscreen","autoWasm","wasmDecodeErrorReplay","openWebglAlignment","WORKER_CMD_TYPE","init","initVideo","render","playAudio","initAudio","kBps","decode","audioCode","videoCode","wasmError","WASM_ERROR","invalidNalUnitSize","MEDIA_TYPE","video","FLV_MEDIA_TYPE","WORKER_SEND_TYPE","audioDecode","videoDecode","close","updateConfig","EVENTS","webFullscreen","decoderWorkerInit","playing","pause","mute","load","loading","videoInfo","timeUpdate","audioInfo","log","error","delayTimeout","stats","performance","recording","recordingTimestamp","recordStart","recordEnd","recordCreateError","buffer","videoFrame","start","metadata","resize","streamEnd","streamSuccess","streamMessage","streamError","volumechange","destroy","mseSourceOpen","mseSourceClose","mseSourceBufferError","mseSourceBufferBusy","videoWaiting","videoTimeUpdate","videoSyncAudio","playToRenderTimes","JESSIBUCA_EVENTS","EVENTS_ERROR","playError","fetchError","websocketError","webcodecsH265NotSupport","mediaSourceH265NotSupport","wasmDecodeError","WEBSOCKET_STATUS","notConnect","open","SCREENSHOT_TYPE","download","base64","blob","VIDEO_ENC_TYPE","VIDEO_ENC_CODE","h264","h265","AUDIO_ENC_TYPE","H265_NAL_TYPE","vps","sps","pps","CONTROL_HEIGHT","SCALE_MODE_TYPE","full","auto","fullAuto","FILE_SUFFIX","mp4","webm","CANVAS_RENDER_TYPE","webcodecs","webgl","offscreen","ENCODED_VIDEO_TYPE","key","delta","MP4_CODECS","avc","hev","MEDIA_SOURCE_STATE","ended","closed","AUDIO_SYNC_VIDEO_DIFF","HOT_KEY","esc","arrowUp","arrowDown","Debug","constructor","master","name","_opt","args","console","warn","Events","destroys","proxy","bind","target","callback","option","Array","isArray","map","item","addEventListener","removeEventListener","push","forEach","event","player","Object","defineProperty","get","clientRect","$container","getBoundingClientRect","width","Math","max","clientWidth","height","clientHeight","rect","noop","supportOffscreen","$canvas","transferControlToOffscreen","supportOffscreenV2","OffscreenCanvas","createContextGL","gl","validContextNames","nameIndex","length","contextName","contextOptions","preserveDrawingBuffer","getContext","e","getParameter","dataURLToFile","dataURL","arr","split","bstr","atob","type","replace","n","u8arr","Uint8Array","charCodeAt","File","downloadImg","content","fileName","aLink","document","createElement","href","URL","createObjectURL","click","setTimeout","revokeObjectURL","isIOS","now","Date","getTime","WebAssembly","instantiate","module","Module","of","Instance","clamp","num","a","b","min","setStyle","element","value","keys","style","getStyle","numberType","getComputedStyle","getPropertyValue","parseFloat","getNowTime","calculationRate","totalSize","lastTime","size","thisTime","diffTime","downloadRecord","suffix","window","isMobile","test","navigator","userAgent","toLowerCase","UA","supportWCS","formatVideoDecoderConfigure","avcC","codecArray","subarray","codecString","j","h","toString","codec","description","isFullScreen","mozIsFullScreen","webkitIsFullScreen","bpsSize","toFixed","fpsStatus","fps","result","createEmptyImageBitmap","$canvasElement","createImageBitmap","supportMSE","MediaSource","isTypeSupported","isEmpty","undefined","isBoolean","isNotEmpty","initPlayTimes","playInitStart","playStart","streamStart","streamResponse","demuxStart","decodeStart","videoStart","playTimestamp","streamTimestamp","streamResponseTimestamp","demuxTimestamp","decodeTimestamp","videoTimestamp","allTimestamp","formatTimeTips","time","hour","floor","sec","round","screenfullChange","emit","screenfull","on","events","off","loaded","request","then","catch","exit","classList","add","remove","ignoreList","includes","Emitter","fn","ctx","once","self","listener","apply","_","evtArr","slice","data","i","evts","liveEvents","len","vertexShaderScript","join","fragmentShaderScript","pixelStorei","UNPACK_ALIGNMENT","vertexShader","createShader","VERTEX_SHADER","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","getShaderInfoLog","fragmentShader","FRAGMENT_SHADER","program","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","getProgramInfoLog","useProgram","vertexPosBuffer","createBuffer","bindBuffer","ARRAY_BUFFER","bufferData","Float32Array","STATIC_DRAW","vertexPosRef","getAttribLocation","enableVertexAttribArray","vertexAttribPointer","FLOAT","texturePosBuffer","texturePosRef","_initTexture","index","textureRef","createTexture","bindTexture","TEXTURE_2D","texParameteri","TEXTURE_MAG_FILTER","LINEAR","TEXTURE_MIN_FILTER","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","uniform1i","getUniformLocation","yTextureRef","uTextureRef","vTextureRef","w","y","u","v","viewport","activeTexture","TEXTURE0","texImage2D","LUMINANCE","UNSIGNED_BYTE","TEXTURE1","TEXTURE2","drawArrays","TRIANGLE_STRIP","deleteProgram","deleteBuffer","deleteTexture","CommonLoader","updateVideoInfo","encTypeCode","encType","CanvasVideoLoader","position","top","left","$videoElement","appendChild","context2D","contextGl","contextGlRender","contextGlDestroy","bitmaprenderer","renderType","_initCanvasRender","removeChild","_initContextGl","createWebGL","_initContext2D","_supportOffscreen","_bindOffscreen","initCanvasViewSize","msg","ts","transferFromImageBitmap","output","drawImage","filename","format","quality","formatType","png","jpeg","webp","encoderOptions","Number","toDataURL","file","clearView","imageBitMap","clear","COLOR_BUFFER_BIT","clearRect","resizeWidth","resizeHeight","wScale","hScale","scale","transform","VideoLoader","muted","trackGenerator","MediaStreamTrackGenerator","kind","srcObject","MediaStream","vwriter","writable","getWriter","src","$video","canvas","videoWidth","videoHeight","context","write","objectFill","objectFit","Video","Loader","getLoaderFactory","opt","AudioContextLoader","bufferList","scriptNode","hasInitScriptNode","audioContextChannel","audioContext","AudioContext","webkitAudioContext","gainNode","createGain","source","createBufferSource","connect","destination","noteOn","audioBufferSourceNode","mediaStreamAudioDestinationNode","createMediaStreamDestination","audioEnabled","gain","audioSyncVideoOption","diff","channels","sampleRate","options","closeAudio","onaudioprocess","updateAudioInfo","isPlaying","isMute","isStateSuspended","volume","bufferSize","initScriptNode","createScriptProcessor","audioProcessingEvent","outputBuffer","bufferItem","shift","audioTimestamp","channel","nowBuffering","getChannelData","flag","setVolume","isNaN","setValueAtTime","currentTime","disconnect","state","resume","suspend","isStateRunning","Audio","FetchLoader","abortController","AbortController","streamRate","rate","abort","fetchStream","demux","_times","signal","res","reader","body","getReader","fetchNext","read","done","byteLength","dispatch","WebsocketLoader","socket","socketStatus","wsUrl","_createWebSocket","WebSocket","binaryType","_handleMessage","message","Stream","global","RecordRTCLoader","fileType","isRecording","recordingInterval","_reset","setFileName","recordTime","startRecord","mimeType","onTimeStamp","timestamp","disableLogs","stream","captureStream","audioStream","getAudioTracks","audioTrack","enabled","addTrack","recorder","RecordRTC","startRecording","setInterval","stopRecordAndSave","stopRecording","getBlob","clearInterval","Recorder","DecoderWorker","decoderWorker","Worker","_initDecoderWorker","postMessage","cmd","terminate","onmessage","_initWork","code","handleRender","updateStats","buf","delay","handlePlayToRenderTimes","indexOf","JSON","stringify","decodeVideo","arrayBuffer","isIFrame","decodeAudio","_decodeAudioNoDelay","_decodeAudio","updateWorkConfig","config","stopId","firstTimestamp","startTimestamp","dropping","initInterval","getDelay","resetDelay","_loop","payload","_doDecoderDecode","_doDecode","pushBuffer","webcodecsDecoder","mseDecoder","FlvLoader","input","_inputFlv","flvDemux","dispatchFlvData","tmp","ArrayBuffer","tmp8","tmp32","Uint32Array","t","abps","vbps","need","next","combine","set","remain","return","M7sLoader","dv","DataView","getUint8","getUint32","isIframe","Demux","WebcodecsDecoder","hasInit","isInitInfo","initDecoder","_this","VideoDecoder","handleDecode","handleError","codedWidth","codedHeight","videoCodec","configure","chunk","EncodedVideoChunk","iconsMap","fullscreenExit","recordStop","reduce","icons","control","insertAdjacentHTML","querySelector","object","setAttribute","display","overflow","pointerEvents","zIndex","playerWidth","playerHeight","contentDocument","defaultView","setVolumeHandle","percentage","$volumeOn","$volumeOff","$volumeHandle","$volumePanel","panelHeight","handleHeight","$volumePanelText","innerHTML","parseInt","$loading","$poster","$playBig","$fullscreenExit","$fullscreen","$record","$recordStop","$recording","$recordingTime","$play","$pause","$screenshot","$speed","bps","$controls","volumeChangeFromEvent","bottom","panelBottom","moveLen","composedPath","isFocus","stopPropagation","$volume","$volumePanelWrap","lastVolume","isVolumeDroging","$recordingStop","addHotkey","tag","activeElement","tagName","toUpperCase","editable","getAttribute","keyCode","preventDefault","Control","template","observer","property","hotkey","autoSize","padding","playerRatio","canvasWidth","canvasHeight","canvasRatio","visibilityState","_isPlayingBeforePageHidden","enableWakeLock","MP4","types","avc1","hvc1","hvcC","btrt","dinf","dref","esds","ftyp","hdlr","mdat","mdhd","mdia","mfhd","minf","moof","moov","mp4a","mvex","mvhd","sdtp","stbl","stco","stsc","stsd","stsz","stts","tfdt","tfhd","traf","trak","trun","trex","tkhd","vmhd","smhd","hasOwnProperty","constants","FTYP","STSD_PREFIX","STTS","STSC","STCO","STSZ","HDLR_VIDEO","HDLR_AUDIO","DREF","SMHD","VMHD","box","datas","prototype","call","arguments","arrayCount","offset","generateInitSegment","meta","timescale","duration","trackId","id","presentWidth","presentHeight","xmhd","videoType","channelCount","audioSampleRate","configSize","concat","avcc","codecWidth","codecHeight","track","baseMediaDecodeTime","sequenceNumber","flags","isLeading","dependsOn","isDependedOn","hasRedundancy","dataSize","cts","isNonSync","ExpGolomb","uint8array","TAG","_buffer","_buffer_index","_total_bytes","_total_bits","_current_word","_current_word_bits_left","_fillCurrentWord","buffer_bytes_left","bytes_read","word","readBits","bits","bits_need_left","bits_read_next","result2","readBool","readByte","_skipLeadingZero","zero_count","readUEG","leading_zeros","readSEG","SPSParser","_ebsp2rbsp","src_length","dst","dst_idx","parseSPS","rbsp","gb","profile_idc","level_idc","profile_string","getProfileString","level_string","getLevelString","chroma_format_idc","chroma_format","chroma_format_table","bit_depth","scaling_list_count","_skipScalingList","pic_order_cnt_type","num_ref_frames_in_pic_order_cnt_cycle","ref_frames","pic_width_in_mbs_minus1","pic_height_in_map_units_minus1","frame_mbs_only_flag","frame_crop_left_offset","frame_crop_right_offset","frame_crop_top_offset","frame_crop_bottom_offset","frame_cropping_flag","sar_width","sar_height","fps_fixed","fps_num","fps_den","vui_parameters_present_flag","aspect_ratio_idc","sar_w_table","sar_h_table","num_units_in_tick","time_scale","sarScale","crop_unit_x","crop_unit_y","sub_wc","sub_hc","codec_width","codec_height","present_width","ceil","chroma_format_string","getChromaFormatString","frame_rate","fixed","sar_ratio","codec_size","present_size","count","last_scale","next_scale","delta_scale","chroma","parseAVCDecoderConfigurationRecord","version","avcProfile","_naluLengthSize","spsCount","getUint16","profile","level","bitDepth","chromaFormat","sarRatio","frameRate","refSampleDuration","ppsCount","parseHEVCDecoderConfigurationRecord","vpsTag","vpsLength","vpsData","from","spsTag","spsLength","spsData","ppsTag","ppsLength","ppsData","MseDecoder","isAvc","mediaSource","sourceBuffer","cacheTrack","timeInit","mediaSourceOpen","stop","readyState","isStateOpen","isStateClosed","isStateEnded","_decodeConfigurationRecord","_decodeVideo","metaData","metaBox","appendBuffer","bytes","dts","buffered","removeBuffer","end","mdatBytes","mdatbox","moofbox","isKeyframe","addSourceBuffer","updating","endOfStream","dropSourceBuffer","WEBM","oldIOS","exec","MSStream","nativeWakeLock","NoSleep","_wakeLock","handleVisibilityChange","enable","noSleepTimer","noSleepVideo","_addSourceToVideo","random","dataURI","isEnabled","wakeLock","err","disable","hidden","location","Promise","resolve","playPromise","release","Player","container","assign","_hasControl","_loading","_playing","_hasLoaded","_checkHeartTimeout","_checkLoadingTimeout","_startBpsTime","_stats","_videoTimestamp","_audioTimestamp","_onlyMseOrWcsVideo","clearCheckHeartTimeout","clearCheckLoadingTimeout","releaseWakeLock","resetStats","updateOption","contains","reject","checkLoadingTimeout","_close","hasBtnShow","text","checkHeart","checkHeartTimeout","clearTimeout","_nowTime","Jessibuca","ERROR","TIMEOUT","Error","_loadingTimeoutReplayTimes","_heartTimeoutReplayTimes","_initPlayer","_bindEvents","_resetPlayer","_options","setDebug","isDebug","cancelMute","audioResume","setScaleMode","_play","isHttp","hasLoaded","setBufferTime","setRotate","deg","list","setKeepScreenOn","setFullscreen"],"mappings":";;;;;;IAAA;IACO,MAAMA,oBAAoB,GAAG;IAChCC,EAAAA,SAAS,EAAE,CADqB;IAEhCC,EAAAA,KAAK,EAAE,CAFyB;IAGhCC,EAAAA,MAAM,EAAE,CAAA;IAHwB,CAA7B,CAAA;IAMA,MAAMC,UAAU,GAAG;IACtBC,EAAAA,GAAG,EAAE,KADiB;IAEtBC,EAAAA,GAAG,EAAE,KAAA;IAFiB,CAAnB;;IAOA,MAAMC,sBAAsB,GAAG;IAClCC,EAAAA,WAAW,EAAE,IADqB;IACf;IACnBC,EAAAA,QAAQ,EAAE,IAFwB;IAGlCC,EAAAA,YAAY,EAAE,KAHoB;IAGb;IACrBC,EAAAA,KAAK,EAAE,KAJ2B;IAKlCC,EAAAA,KAAK,EAAE,KAL2B;IAMlCC,EAAAA,MAAM,EAAE,KAN0B;IAMnB;IACfC,EAAAA,cAAc,EAAE,EAPkB;IAOd;IACpBC,EAAAA,YAAY,EAAE,CARoB;IAQhB;IAClBC,EAAAA,OAAO,EAAE,EATyB;IASrB;IACbC,EAAAA,oBAAoB,EAAE,KAVY;IAUL;IAC7BC,EAAAA,kBAAkB,EAAE,KAXc;IAWR;IAC1BC,EAAAA,yBAAyB,EAAE,CAZO;IAYJ;IAC9BC,EAAAA,uBAAuB,EAAE,CAbS;IAaN;IAC5BC,EAAAA,yBAAyB,EAAE,KAdO;IAelCC,EAAAA,aAAa,EAAE,KAfmB;IAeZ;IACtBC,EAAAA,YAAY,EAAE,KAhBoB;IAiBlCC,EAAAA,SAAS,EAAE,KAjBuB;IAkBlCC,EAAAA,QAAQ,EAAE,IAlBwB;IAmBlCC,EAAAA,QAAQ,EAAE,IAnBwB;IAoBlCC,EAAAA,WAAW,EAAE;IACTC,IAAAA,UAAU,EAAE,KADH;IAETC,IAAAA,UAAU,EAAE,KAFH;IAGTC,IAAAA,IAAI,EAAE,KAHG;IAITC,IAAAA,KAAK,EAAE,KAJE;IAKTC,IAAAA,MAAM,EAAE,KAAA;IALC,GApBqB;IA2BlCC,EAAAA,eAAe,EAAE,KA3BiB;IA4BlCC,EAAAA,UAAU,EAAE,KA5BsB;IA6BlCC,EAAAA,WAAW,EAAE,EA7BqB;IA8BlCC,EAAAA,UAAU,EAAE,EA9BsB;IA+BlCC,EAAAA,OAAO,EAAE,YA/ByB;IAgClCC,EAAAA,GAAG,EAAE,EAhC6B;IAgC1B;IACRC,EAAAA,MAAM,EAAE,CAjC0B;IAkClC;IACAC,EAAAA,gBAAgB,EAAE,IAnCgB;IAmCV;IACxBC,EAAAA,eAAe,EAAE,KApCiB;IAqClCC,EAAAA,QAAQ,EAAE1C,oBAAoB,CAACE,KArCG;IAsClCyC,EAAAA,SAAS,EAAEvC,UAAU,CAACC,GAtCY;IAsCP;IAC3BuC,EAAAA,MAAM,EAAE,KAvC0B;IAuCnB;IACfC,EAAAA,iBAAiB,EAAE,KAxCe;IAyClCC,EAAAA,MAAM,EAAE,KAzC0B;IAyCnB;IACfC,EAAAA,YAAY,EAAE,KA1CoB;IA0Cb;IACrBC,EAAAA,QAAQ,EAAE,IA3CwB;IA2ClB;IAChBC,EAAAA,qBAAqB,EAAE,IA5CW;IA4CL;IAC7BC,EAAAA,kBAAkB,EAAE,KA7Cc;;IAAA,CAA/B,CAAA;IAiDA,MAAMC,eAAe,GAAG;IAC3BC,EAAAA,IAAI,EAAE,MADqB;IAE3BC,EAAAA,SAAS,EAAE,WAFgB;IAG3BC,EAAAA,MAAM,EAAE,QAHmB;IAI3BC,EAAAA,SAAS,EAAE,WAJgB;IAK3BC,EAAAA,SAAS,EAAE,WALgB;IAM3BC,EAAAA,IAAI,EAAE,MANqB;IAO3BC,EAAAA,MAAM,EAAE,QAPmB;IAQ3BC,EAAAA,SAAS,EAAE,WARgB;IAS3BC,EAAAA,SAAS,EAAE,WATgB;IAU3BC,EAAAA,SAAS,EAAE,WAAA;IAVgB,CAAxB,CAAA;IAaA,MAAMC,UAAU,GAAG;IACtBC,EAAAA,kBAAkB,EAAE,uBADE;;IAAA,CAAnB,CAAA;IAKA,MAAMC,UAAU,GAAG;IACtBjC,EAAAA,KAAK,EAAE,CADe;IAEtBkC,EAAAA,KAAK,EAAE,CAAA;IAFe,CAAnB,CAAA;IAKA,MAAMC,cAAc,GAAG;IAC1BnC,EAAAA,KAAK,EAAE,CADmB;IAE1BkC,EAAAA,KAAK,EAAE,CAAA;IAFmB,CAAvB,CAAA;IAKA,MAAME,gBAAgB,GAAG;IAC5Bf,EAAAA,IAAI,EAAE,MADsB;IAE5BM,EAAAA,MAAM,EAAE,QAFoB;IAG5BU,EAAAA,WAAW,EAAE,aAHe;IAI5BC,EAAAA,WAAW,EAAE,aAJe;IAK5BC,EAAAA,KAAK,EAAE,OALqB;IAM5BC,EAAAA,YAAY,EAAE,cAAA;IANc,CAAzB;;IAWA,MAAMC,MAAM,GAAG;IAClB5C,EAAAA,UAAU,EAAE,cADM;IAElB6C,EAAAA,aAAa,EAAE,eAFG;IAGlBC,EAAAA,iBAAiB,EAAE,mBAHD;IAIlB5C,EAAAA,IAAI,EAAE,MAJY;IAKlB6C,EAAAA,OAAO,EAAE,SALS;IAMlBC,EAAAA,KAAK,EAAE,OANW;IAOlBC,EAAAA,IAAI,EAAE,MAPY;IAQlBC,EAAAA,IAAI,EAAE,MARY;IASlBC,EAAAA,OAAO,EAAE,SATS;IAUlBC,EAAAA,SAAS,EAAE,WAVO;IAWlBC,EAAAA,UAAU,EAAE,YAXM;IAYlBC,EAAAA,SAAS,EAAE,WAZO;IAalBC,EAAAA,GAAG,EAAE,KAba;IAclBC,EAAAA,KAAK,EAAE,OAdW;IAelB3B,EAAAA,IAAI,EAAE,MAfY;IAgBlBzC,EAAAA,OAAO,EAAE,SAhBS;IAiBlBqE,EAAAA,YAAY,EAAE,cAjBI;IAkBlBvE,EAAAA,cAAc,EAAE,gBAlBE;IAmBlBwE,EAAAA,KAAK,EAAE,OAnBW;IAoBlBC,EAAAA,WAAW,EAAE,aApBK;IAqBlBvD,EAAAA,MAAM,EAAE,QArBU;IAsBlBwD,EAAAA,SAAS,EAAE,WAtBO;IAuBlBC,EAAAA,kBAAkB,EAAE,oBAvBF;IAwBlBC,EAAAA,WAAW,EAAE,aAxBK;IAyBlBC,EAAAA,SAAS,EAAE,WAzBO;IA0BlBC,EAAAA,iBAAiB,EAAE,mBA1BD;IA2BlBC,EAAAA,MAAM,EAAE,QA3BU;IA4BlBC,EAAAA,UAAU,EAAE,YA5BM;IA6BlBC,EAAAA,KAAK,EAAE,OA7BW;IA8BlBC,EAAAA,QAAQ,EAAE,UA9BQ;IA+BlBC,EAAAA,MAAM,EAAE,QA/BU;IAgClBC,EAAAA,SAAS,EAAE,WAhCO;IAiClBC,EAAAA,aAAa,EAAE,eAjCG;IAkClBC,EAAAA,aAAa,EAAE,eAlCG;IAmClBC,EAAAA,WAAW,EAAE,aAnCK;IAoClBC,EAAAA,YAAY,EAAE,cApCI;IAqClBC,EAAAA,OAAO,EAAE,SArCS;IAsClBC,EAAAA,aAAa,EAAE,eAtCG;IAuClBC,EAAAA,cAAc,EAAE,gBAvCE;IAwClBC,EAAAA,oBAAoB,EAAE,sBAxCJ;IAyClBC,EAAAA,mBAAmB,EAAE,qBAzCH;IA0ClBC,EAAAA,YAAY,EAAE,cA1CI;IA2ClBC,EAAAA,eAAe,EAAE,iBA3CC;IA4ClBC,EAAAA,cAAc,EAAE,gBA5CE;IA6ClBC,EAAAA,iBAAiB,EAAE,mBAAA;IA7CD,CAAf,CAAA;IAiDA,MAAMC,gBAAgB,GAAG;IAC5BlC,EAAAA,IAAI,EAAEN,MAAM,CAACM,IADe;IAE5BG,EAAAA,UAAU,EAAET,MAAM,CAACS,UAFS;IAG5BD,EAAAA,SAAS,EAAER,MAAM,CAACQ,SAHU;IAI5BE,EAAAA,SAAS,EAAEV,MAAM,CAACU,SAJU;IAK5BE,EAAAA,KAAK,EAAEZ,MAAM,CAACY,KALc;IAM5B3B,EAAAA,IAAI,EAAEe,MAAM,CAACf,IANe;IAO5B0B,EAAAA,GAAG,EAAEX,MAAM,CAACW,GAPgB;IAQ5BY,EAAAA,KAAK,EAAEvB,MAAM,CAACuB,KARc;IAS5B/E,EAAAA,OAAO,EAAEwD,MAAM,CAACxD,OATY;IAU5BF,EAAAA,cAAc,EAAE0D,MAAM,CAAC1D,cAVK;IAW5BuE,EAAAA,YAAY,EAAEb,MAAM,CAACa,YAXO;IAY5BzD,EAAAA,UAAU,EAAE,YAZgB;IAa5BE,EAAAA,IAAI,EAAE0C,MAAM,CAAC1C,IAbe;IAc5B8C,EAAAA,KAAK,EAAEJ,MAAM,CAACI,KAdc;IAe5BC,EAAAA,IAAI,EAAEL,MAAM,CAACK,IAfe;IAgB5BS,EAAAA,KAAK,EAAEd,MAAM,CAACc,KAhBc;IAiB5BC,EAAAA,WAAW,EAAEf,MAAM,CAACe,WAjBQ;IAkB5BE,EAAAA,kBAAkB,EAAEjB,MAAM,CAACiB,kBAlBC;IAmB5BC,EAAAA,WAAW,EAAElB,MAAM,CAACkB,WAnBQ;IAoB5BC,EAAAA,SAAS,EAAEnB,MAAM,CAACmB,SApBU;IAqB5BoB,EAAAA,iBAAiB,EAAEvC,MAAM,CAACuC,iBAAAA;IArBE,CAAzB,CAAA;IAwBA,MAAME,YAAY,GAAG;IACxBC,EAAAA,SAAS,EAAE,2BADa;IAExBC,EAAAA,UAAU,EAAE,YAFY;IAGxBC,EAAAA,cAAc,EAAE,gBAHQ;IAIxBC,EAAAA,uBAAuB,EAAE,yBAJD;IAKxBC,EAAAA,yBAAyB,EAAE,2BALH;IAMxBC,EAAAA,eAAe,EAAE,iBAAA;IANO,CAArB,CAAA;IAUA,MAAMC,gBAAgB,GAAG;IAC5BC,EAAAA,UAAU,EAAE,YADgB;IAE5BC,EAAAA,IAAI,EAAE,MAFsB;IAG5BpD,EAAAA,KAAK,EAAE,OAHqB;IAI5Bc,EAAAA,KAAK,EAAE,OAAA;IAJqB,CAAzB,CAAA;IAcA,MAAMuC,eAAe,GAAG;IAC3BC,EAAAA,QAAQ,EAAE,UADiB;IAE3BC,EAAAA,MAAM,EAAE,QAFmB;IAG3BC,EAAAA,IAAI,EAAE,MAAA;IAHqB,CAAxB,CAAA;IAOA,MAAMC,cAAc,GAAG;IAC1B,EAAA,CAAA,EAAG,WADuB;IACV;IAChB,EAAA,EAAA,EAAI,YAFsB;;IAAA,CAAvB,CAAA;IAKA,MAAMC,cAAc,GAAG;IAC1BC,EAAAA,IAAI,EAAE,CADoB;IAE1BC,EAAAA,IAAI,EAAE,EAAA;IAFoB,CAAvB,CAAA;IAMA,MAAMC,cAAc,GAAG;IAC1B,EAAA,EAAA,EAAI,KADsB;IAE1B,EAAA,CAAA,EAAG,MAFuB;IAG1B,EAAG,CAAA,EAAA,OAAA;IAHuB,CAAvB,CAAA;IAMA,MAAMC,aAAa,GAAG;IACzBC,EAAAA,GAAG,EAAE,EADoB;IAEzBC,EAAAA,GAAG,EAAE,EAFoB;IAGzBC,EAAAA,GAAG,EAAE,EAAA;IAHoB,CAAtB,CAAA;IAMA,MAAMC,cAAc,GAAG,EAAvB,CAAA;IAEA,MAAMC,eAAe,GAAG;IAC3BC,EAAAA,IAAI,EAAE,CADqB;IAClB;IACTC,EAAAA,IAAI,EAAE,CAFqB;IAElB;IACTC,EAAAA,QAAQ,EAAE,CAHiB;;IAAA,CAAxB,CAAA;IAOA,MAAMC,WAAW,GAAG;IACvBC,EAAAA,GAAG,EAAE,KADkB;IAEvBC,EAAAA,IAAI,EAAE,MAAA;IAFiB,CAApB,CAAA;IAMA,MAAMC,kBAAkB,GAAG;IAC9BC,EAAAA,SAAS,EAAE,WADmB;IAE9BC,EAAAA,KAAK,EAAE,OAFuB;IAG9BC,EAAAA,SAAS,EAAE,WAAA;IAHmB,CAA3B,CAAA;IAMA,MAAMC,kBAAkB,GAAG;IAC9BC,EAAAA,GAAG,EAAE,KADyB;IAE9BC,EAAAA,KAAK,EAAE,OAAA;IAFuB,CAA3B,CAAA;IAMA,MAAMC,UAAU,GAAG;IACtBC,EAAAA,GAAG,EAAE,iCADiB;IAEtBC,EAAAA,GAAG,EAAE,sCAAA;IAFiB,CAAnB,CAAA;IAMA,MAAMC,kBAAkB,GAAG;IAC9BC,EAAAA,KAAK,EAAE,OADuB;IAE9BjC,EAAAA,IAAI,EAAE,MAFwB;IAG9BkC,EAAAA,MAAM,EAAE,QAAA;IAHsB,CAA3B;IAWA,MAAMC,qBAAqB,GAAG,IAA9B,CAAA;IAGA,MAAMC,OAAO,GAAG;IACnBC,EAAAA,GAAG,EAAE,EADc;IACV;IACTC,EAAAA,OAAO,EAAE,EAFU;IAEN;IACbC,EAAAA,SAAS,EAAE,EAHQ;;IAAA,CAAhB;;ICpRQ,MAAMC,KAAN,CAAY;IACvBC,EAAAA,WAAW,CAACC,MAAD,EAAS;IAChB,IAAA,IAAA,CAAKjF,GAAL,GAAW,UAACkF,IAAD,EAAmB;IAC1B,MAAA,IAAID,MAAM,CAACE,IAAP,CAAY1J,KAAhB,EAAuB;IAAA,QAAA,KAAA,IAAA,IAAA,GAAA,SAAA,CAAA,MAAA,EADN2J,IACM,GAAA,IAAA,KAAA,CAAA,IAAA,GAAA,CAAA,GAAA,IAAA,GAAA,CAAA,GAAA,CAAA,CAAA,EAAA,IAAA,GAAA,CAAA,EAAA,IAAA,GAAA,IAAA,EAAA,IAAA,EAAA,EAAA;IADNA,UAAAA,IACM,CAAA,IAAA,GAAA,CAAA,CAAA,GAAA,SAAA,CAAA,IAAA,CAAA,CAAA;IAAA,SAAA;;IACnBC,QAAAA,OAAO,CAACrF,GAAR,CAAa,eAAckF,IAAK,CAAA,CAAA,CAAhC,EAAoC,GAAGE,IAAvC,CAAA,CAAA;IACH,OAAA;IACJ,KAJD,CAAA;;IAMA,IAAA,IAAA,CAAKE,IAAL,GAAY,UAACJ,IAAD,EAAmB;IAC3B,MAAA,IAAID,MAAM,CAACE,IAAP,CAAY1J,KAAhB,EAAuB;IAAA,QAAA,KAAA,IAAA,KAAA,GAAA,SAAA,CAAA,MAAA,EADL2J,IACK,GAAA,IAAA,KAAA,CAAA,KAAA,GAAA,CAAA,GAAA,KAAA,GAAA,CAAA,GAAA,CAAA,CAAA,EAAA,KAAA,GAAA,CAAA,EAAA,KAAA,GAAA,KAAA,EAAA,KAAA,EAAA,EAAA;IADLA,UAAAA,IACK,CAAA,KAAA,GAAA,CAAA,CAAA,GAAA,SAAA,CAAA,KAAA,CAAA,CAAA;IAAA,SAAA;;IACnBC,QAAAA,OAAO,CAACC,IAAR,CAAc,eAAcJ,IAAK,CAAA,CAAA,CAAjC,EAAqC,GAAGE,IAAxC,CAAA,CAAA;IACH,OAAA;IACJ,KAJD,CAAA;;IAMA,IAAA,IAAA,CAAKnF,KAAL,GAAa,UAACiF,IAAD,EAAmB;IAC5B,MAAA,IAAID,MAAM,CAACE,IAAP,CAAY1J,KAAhB,EAAuB;IAAA,QAAA,KAAA,IAAA,KAAA,GAAA,SAAA,CAAA,MAAA,EADJ2J,IACI,GAAA,IAAA,KAAA,CAAA,KAAA,GAAA,CAAA,GAAA,KAAA,GAAA,CAAA,GAAA,CAAA,CAAA,EAAA,KAAA,GAAA,CAAA,EAAA,KAAA,GAAA,KAAA,EAAA,KAAA,EAAA,EAAA;IADJA,UAAAA,IACI,CAAA,KAAA,GAAA,CAAA,CAAA,GAAA,SAAA,CAAA,KAAA,CAAA,CAAA;IAAA,SAAA;;IACnBC,QAAAA,OAAO,CAACpF,KAAR,CAAe,eAAciF,IAAK,CAAA,CAAA,CAAlC,EAAsC,GAAGE,IAAzC,CAAA,CAAA;IACH,OAAA;IACJ,KAJD,CAAA;IAKH,GAAA;;IAnBsB;;ICAZ,MAAMG,MAAN,CAAa;IACxBP,EAAAA,WAAW,CAACC,MAAD,EAAS;IAChB,IAAKO,IAAAA,CAAAA,QAAL,GAAgB,EAAhB,CAAA;IACA,IAAKC,IAAAA,CAAAA,KAAL,GAAa,IAAKA,CAAAA,KAAL,CAAWC,IAAX,CAAgB,IAAhB,CAAb,CAAA;IACA,IAAKT,IAAAA,CAAAA,MAAL,GAAcA,MAAd,CAAA;IACH,GAAA;;IAEDQ,EAAAA,KAAK,CAACE,MAAD,EAAST,IAAT,EAAeU,QAAf,EAAsC;IAAA,IAAbC,IAAAA,MAAa,uEAAJ,EAAI,CAAA;;IACvC,IAAI,IAAA,CAACF,MAAL,EAAa;IACT,MAAA,OAAA;IACH,KAAA;;IACD,IAAA,IAAIG,KAAK,CAACC,OAAN,CAAcb,IAAd,CAAJ,EAAyB;IACrB,MAAA,OAAOA,IAAI,CAACc,GAAL,CAASC,IAAI,IAAI,IAAKR,CAAAA,KAAL,CAAWE,MAAX,EAAmBM,IAAnB,EAAyBL,QAAzB,EAAmCC,MAAnC,CAAjB,CAAP,CAAA;IACH,KAAA;;IACDF,IAAAA,MAAM,CAACO,gBAAP,CAAwBhB,IAAxB,EAA8BU,QAA9B,EAAwCC,MAAxC,CAAA,CAAA;;IACA,IAAA,MAAMzE,OAAO,GAAG,MAAMuE,MAAM,CAACQ,mBAAP,CAA2BjB,IAA3B,EAAiCU,QAAjC,EAA2CC,MAA3C,CAAtB,CAAA;;IACA,IAAA,IAAA,CAAKL,QAAL,CAAcY,IAAd,CAAmBhF,OAAnB,CAAA,CAAA;IACA,IAAA,OAAOA,OAAP,CAAA;IACH,GAAA;;IAEDA,EAAAA,OAAO,GAAG;IACN,IAAA,IAAA,CAAK6D,MAAL,CAAYxJ,KAAZ,IAAqB,KAAKwJ,MAAL,CAAYxJ,KAAZ,CAAkBuE,GAAlB,CAAuB,CAAvB,MAAA,CAAA,EAAgC,SAAhC,CAArB,CAAA;IACA,IAAA,IAAA,CAAKwF,QAAL,CAAca,OAAd,CAAsBC,KAAK,IAAIA,KAAK,EAApC,CAAA,CAAA;IACH,GAAA;;IAvBuB;;ACA5B,qBAAA,CAAgBC,MAAD,IAAY;IACvBC,EAAAA,MAAM,CAACC,cAAP,CAAsBF,MAAtB,EAA8B,MAA9B,EAAsC;IAClCG,IAAAA,GAAG,EAAE,MAAM;IACP,MAAA,MAAMC,UAAU,GAAGJ,MAAM,CAACK,UAAP,CAAkBC,qBAAlB,EAAnB,CAAA;IACAF,MAAAA,UAAU,CAACG,KAAX,GAAmBC,IAAI,CAACC,GAAL,CAASL,UAAU,CAACG,KAApB,EAA2BP,MAAM,CAACK,UAAP,CAAkBK,WAA7C,CAAnB,CAAA;IACAN,MAAAA,UAAU,CAACO,MAAX,GAAoBH,IAAI,CAACC,GAAL,CAASL,UAAU,CAACO,MAApB,EAA4BX,MAAM,CAACK,UAAP,CAAkBO,YAA9C,CAApB,CAAA;IACA,MAAA,OAAOR,UAAP,CAAA;IACH,KAAA;IANiC,GAAtC,CAAA,CAAA;IASA,EAAA,CAAC,QAAD,EAAW,QAAX,EAAqB,MAArB,EAA6B,OAA7B,EAAsC,KAAtC,EAA6C,OAA7C,CAAA,CAAsDN,OAAtD,CAA8DnC,GAAG,IAAI;IACjEsC,IAAAA,MAAM,CAACC,cAAP,CAAsBF,MAAtB,EAA8BrC,GAA9B,EAAmC;IAC/BwC,MAAAA,GAAG,EAAE,MAAM;IACP,QAAA,OAAOH,MAAM,CAACa,IAAP,CAAYlD,GAAZ,CAAP,CAAA;IACH,OAAA;IAH8B,KAAnC,CAAA,CAAA;IAKH,GAND,CAAA,CAAA;IAOH,CAjBD;;;;;;;;;ICAA;IACA;IACA;IACA;IACA;IACA,CAAC,YAAY;AAEb;IACA,CAAC,IAAI,QAAQ,GAAG,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,WAAW,GAAG,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC;IAC/G,CAAC,IAAI,UAAU,GAAoC,MAAM,CAAC,OAAO,CAAC;AAClE;IACA,CAAC,IAAI,EAAE,GAAG,CAAC,YAAY;IACvB,EAAE,IAAI,GAAG,CAAC;AACV;IACA,EAAE,IAAI,KAAK,GAAG;IACd,GAAG;IACH,IAAI,mBAAmB;IACvB,IAAI,gBAAgB;IACpB,IAAI,mBAAmB;IACvB,IAAI,mBAAmB;IACvB,IAAI,kBAAkB;IACtB,IAAI,iBAAiB;IACrB,IAAI;IACJ;IACA,GAAG;IACH,IAAI,yBAAyB;IAC7B,IAAI,sBAAsB;IAC1B,IAAI,yBAAyB;IAC7B,IAAI,yBAAyB;IAC7B,IAAI,wBAAwB;IAC5B,IAAI,uBAAuB;AAC3B;IACA,IAAI;IACJ;IACA,GAAG;IACH,IAAI,yBAAyB;IAC7B,IAAI,wBAAwB;IAC5B,IAAI,gCAAgC;IACpC,IAAI,wBAAwB;IAC5B,IAAI,wBAAwB;IAC5B,IAAI,uBAAuB;AAC3B;IACA,IAAI;IACJ,GAAG;IACH,IAAI,sBAAsB;IAC1B,IAAI,qBAAqB;IACzB,IAAI,sBAAsB;IAC1B,IAAI,sBAAsB;IAC1B,IAAI,qBAAqB;IACzB,IAAI,oBAAoB;IACxB,IAAI;IACJ,GAAG;IACH,IAAI,qBAAqB;IACzB,IAAI,kBAAkB;IACtB,IAAI,qBAAqB;IACzB,IAAI,qBAAqB;IACzB,IAAI,oBAAoB;IACxB,IAAI,mBAAmB;IACvB,IAAI;IACJ,GAAG,CAAC;AACJ;IACA,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IACZ,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IACvB,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC;AACf;IACA,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;IACrB,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAClB,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE;IAClC,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;IACrC,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/B,KAAK;IACL,IAAI,OAAO,GAAG,CAAC;IACf,IAAI;IACJ,GAAG;AACH;IACA,EAAE,OAAO,KAAK,CAAC;IACf,EAAE,GAAG,CAAC;AACN;IACA,CAAC,IAAI,YAAY,GAAG;IACpB,EAAE,MAAM,EAAE,EAAE,CAAC,gBAAgB;IAC7B,EAAE,KAAK,EAAE,EAAE,CAAC,eAAe;IAC3B,EAAE,CAAC;AACH;IACA,CAAC,IAAI,UAAU,GAAG;IAClB,EAAE,OAAO,EAAE,UAAU,OAAO,EAAE,OAAO,EAAE;IACvC,GAAG,OAAO,IAAI,OAAO,CAAC,UAAU,OAAO,EAAE,MAAM,EAAE;IACjD,IAAI,IAAI,mBAAmB,GAAG,YAAY;IAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;IAC7C,KAAK,OAAO,EAAE,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB;IACA,IAAI,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;AAC3C;IACA,IAAI,OAAO,GAAG,OAAO,IAAI,QAAQ,CAAC,eAAe,CAAC;AAClD;IACA,IAAI,IAAI,aAAa,GAAG,OAAO,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC;AAC/D;IACA,IAAI,IAAI,aAAa,YAAY,OAAO,EAAE;IAC1C,KAAK,aAAa,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3D,KAAK;IACL,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACjB,GAAG;IACH,EAAE,IAAI,EAAE,YAAY;IACpB,GAAG,OAAO,IAAI,OAAO,CAAC,UAAU,OAAO,EAAE,MAAM,EAAE;IACjD,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;IAC5B,KAAK,OAAO,EAAE,CAAC;IACf,KAAK,OAAO;IACZ,KAAK;AACL;IACA,IAAI,IAAI,gBAAgB,GAAG,YAAY;IACvC,KAAK,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IAC1C,KAAK,OAAO,EAAE,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB;IACA,IAAI,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;AACxC;IACA,IAAI,IAAI,aAAa,GAAG,QAAQ,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC;AACtD;IACA,IAAI,IAAI,aAAa,YAAY,OAAO,EAAE;IAC1C,KAAK,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACxD,KAAK;IACL,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACjB,GAAG;IACH,EAAE,MAAM,EAAE,UAAU,OAAO,EAAE,OAAO,EAAE;IACtC,GAAG,OAAO,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC3E,GAAG;IACH,EAAE,QAAQ,EAAE,UAAU,QAAQ,EAAE;IAChC,GAAG,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,GAAG;IACH,EAAE,OAAO,EAAE,UAAU,QAAQ,EAAE;IAC/B,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC9B,GAAG;IACH,EAAE,EAAE,EAAE,UAAU,KAAK,EAAE,QAAQ,EAAE;IACjC,GAAG,IAAI,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACvC,GAAG,IAAI,SAAS,EAAE;IAClB,IAAI,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC1D,IAAI;IACJ,GAAG;IACH,EAAE,GAAG,EAAE,UAAU,KAAK,EAAE,QAAQ,EAAE;IAClC,GAAG,IAAI,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACvC,GAAG,IAAI,SAAS,EAAE;IAClB,IAAI,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC7D,IAAI;IACJ,GAAG;IACH,EAAE,GAAG,EAAE,EAAE;IACT,EAAE,CAAC;AACH;IACA,CAAC,IAAI,CAAC,EAAE,EAAE;IACV,EAAE,IAAI,UAAU,EAAE;IAClB,GAAG,cAAc,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACvC,GAAG,MAAM;IACT,GAAG,MAAM,CAAC,UAAU,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC1C,GAAG;AACH;IACA,EAAE,OAAO;IACT,EAAE;AACF;IACA,CAAC,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE;IACrC,EAAE,YAAY,EAAE;IAChB,GAAG,GAAG,EAAE,YAAY;IACpB,IAAI,OAAO,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACnD,IAAI;IACJ,GAAG;IACH,EAAE,OAAO,EAAE;IACX,GAAG,UAAU,EAAE,IAAI;IACnB,GAAG,GAAG,EAAE,YAAY;IACpB,IAAI,OAAO,QAAQ,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC;IAC1C,IAAI;IACJ,GAAG;IACH,EAAE,SAAS,EAAE;IACb,GAAG,UAAU,EAAE,IAAI;IACnB,GAAG,GAAG,EAAE,YAAY;IACpB;IACA,IAAI,OAAO,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACnD,IAAI;IACJ,GAAG;IACH,EAAE,CAAC,CAAC;AACJ;IACA,CAAC,IAAI,UAAU,EAAE;IACjB,EAAE,MAAA,CAAA,OAAc,GAAG,UAAU,CAAC;IAC9B,EAAE,MAAM;IACR,EAAE,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;IACjC,EAAE;IACF,CAAC,GAAG,CAAA;;;;ICrLG,SAASmD,IAAT,GAAgB,EACtB;IAGM,SAASC,gBAAT,CAA0BC,OAA1B,EAAmC;IACtC,EAAA,OAAO,OAAOA,OAAO,CAACC,0BAAf,KAA8C,UAArD,CAAA;IACH,CAAA;IAGM,SAASC,kBAAT,GAA8B;IACjC,EAAO,OAAA,OAAOC,eAAP,KAA2B,WAAlC,CAAA;IACH,CAAA;IAGM,SAASC,eAAT,CAAyBJ,OAAzB,EAAkC;IACrC,EAAIK,IAAAA,EAAE,GAAG,IAAT,CAAA;IAEA,EAAMC,MAAAA,iBAAiB,GAAG,CAAC,OAAD,EAAU,oBAAV,EAAgC,WAAhC,EAA6C,WAA7C,CAA1B,CAAA;IACA,EAAIC,IAAAA,SAAS,GAAG,CAAhB,CAAA;;IAEA,EAAO,OAAA,CAACF,EAAD,IAAOE,SAAS,GAAGD,iBAAiB,CAACE,MAA5C,EAAoD;IAChD,IAAA,MAAMC,WAAW,GAAGH,iBAAiB,CAACC,SAAD,CAArC,CAAA;;IAEA,IAAI,IAAA;IACA,MAAA,IAAIG,cAAc,GAAG;IAACC,QAAAA,qBAAqB,EAAE,IAAA;IAAxB,OAArB,CAAA;IACAN,MAAAA,EAAE,GAAGL,OAAO,CAACY,UAAR,CAAmBH,WAAnB,EAAgCC,cAAhC,CAAL,CAAA;IACH,KAHD,CAGE,OAAOG,CAAP,EAAU;IACRR,MAAAA,EAAE,GAAG,IAAL,CAAA;IACH,KAAA;;IAED,IAAI,IAAA,CAACA,EAAD,IAAO,OAAOA,EAAE,CAACS,YAAV,KAA2B,UAAtC,EAAkD;IAC9CT,MAAAA,EAAE,GAAG,IAAL,CAAA;IACH,KAAA;;IAED,IAAA,EAAEE,SAAF,CAAA;IACH,GAAA;;IAGD,EAAA,OAAOF,EAAP,CAAA;IACH,CAAA;IAeM,SAASU,aAAT,GAAqC;IAAA,EAAdC,IAAAA,OAAc,uEAAJ,EAAI,CAAA;IACxC,EAAA,MAAMC,GAAG,GAAGD,OAAO,CAACE,KAAR,CAAc,GAAd,CAAZ,CAAA;IACA,EAAMC,MAAAA,IAAI,GAAGC,IAAI,CAACH,GAAG,CAAC,CAAD,CAAJ,CAAjB,CAAA;IACA,EAAA,MAAMI,IAAI,GAAGJ,GAAG,CAAC,CAAD,CAAH,CAAOK,OAAP,CAAe,OAAf,EAAwB,EAAxB,CAA4BA,CAAAA,OAA5B,CAAoC,SAApC,EAA+C,EAA/C,CAAb,CAAA;IACA,EAAA,IAAIC,CAAC,GAAGJ,IAAI,CAACX,MAAb;IAAA,MAAqBgB,KAAK,GAAG,IAAIC,UAAJ,CAAeF,CAAf,CAA7B,CAAA;;IACA,EAAOA,OAAAA,CAAC,EAAR,EAAY;IACRC,IAAAA,KAAK,CAACD,CAAD,CAAL,GAAWJ,IAAI,CAACO,UAAL,CAAgBH,CAAhB,CAAX,CAAA;IACH,GAAA;;IACD,EAAO,OAAA,IAAII,IAAJ,CAAS,CAACH,KAAD,CAAT,EAAkB,MAAlB,EAA0B;IAACH,IAAAA,IAAAA;IAAD,GAA1B,CAAP,CAAA;IACH,CAAA;IAaM,SAASO,WAAT,CAAqBC,OAArB,EAA8BC,QAA9B,EAAwC;IAC3C,EAAA,MAAMC,KAAK,GAAGC,QAAQ,CAACC,aAAT,CAAuB,GAAvB,CAAd,CAAA;IACAF,EAAAA,KAAK,CAAC7G,QAAN,GAAiB4G,QAAjB,CAAA;IACAC,EAAAA,KAAK,CAACG,IAAN,GAAaC,GAAG,CAACC,eAAJ,CAAoBP,OAApB,CAAb,CAAA;IACAE,EAAAA,KAAK,CAACM,KAAN,EAAA,CAAA;IACAC,EAAAA,UAAU,CAAC,MAAM;IACbH,IAAAA,GAAG,CAACI,eAAJ,CAAoBV,OAApB,CAAA,CAAA;IACH,GAFS,EAEPW,KAAK,EAAA,GAAK,IAAL,GAAY,CAFV,CAAV,CAAA;IAGH,CAAA;IAQM,SAASC,GAAT,GAAe;IAClB,EAAA,OAAO,IAAIC,IAAJ,EAAWC,CAAAA,OAAX,EAAP,CAAA;IACH,CAAA;IAE4B,CAAC,MAAM;IAChC,EAAI,IAAA;IACA,IAAI,IAAA,OAAOC,WAAP,KAAuB,QAAvB,IACG,OAAOA,WAAW,CAACC,WAAnB,KAAmC,UAD1C,EACsD;IAClD,MAAMC,MAAAA,MAAM,GAAG,IAAIF,WAAW,CAACG,MAAhB,CAAuBtB,UAAU,CAACuB,EAAX,CAAc,GAAd,EAAmB,IAAnB,EAAyB,IAAzB,EAA+B,IAA/B,EAAqC,IAArC,EAA2C,IAA3C,EAAiD,IAAjD,EAAuD,IAAvD,CAAvB,CAAf,CAAA;IACA,MAAA,IAAIF,MAAM,YAAYF,WAAW,CAACG,MAAlC,EACI,OAAO,IAAIH,WAAW,CAACK,QAAhB,CAAyBH,MAAzB,CAA4CF,YAAAA,WAAW,CAACK,QAA/D,CAAA;IACP,KAAA;IACJ,GAPD,CAOE,OAAOpC,CAAP,EAAU,EACX;;IACD,EAAA,OAAO,KAAP,CAAA;IACH,CAX4B,IAAtB;IAaA,SAASqC,KAAT,CAAeC,GAAf,EAAoBC,CAApB,EAAuBC,CAAvB,EAA0B;IAC7B,EAAA,OAAO7D,IAAI,CAACC,GAAL,CAASD,IAAI,CAAC8D,GAAL,CAASH,GAAT,EAAc3D,IAAI,CAACC,GAAL,CAAS2D,CAAT,EAAYC,CAAZ,CAAd,CAAT,EAAwC7D,IAAI,CAAC8D,GAAL,CAASF,CAAT,EAAYC,CAAZ,CAAxC,CAAP,CAAA;IACH,CAAA;IAEM,SAASE,QAAT,CAAkBC,OAAlB,EAA2B7G,GAA3B,EAAgC8G,KAAhC,EAAuC;IAC1C,EAAI,IAAA,CAACD,OAAL,EAAc;IACV,IAAA,OAAA;IACH,GAAA;;IACD,EAAA,IAAI,OAAO7G,GAAP,KAAe,QAAnB,EAA6B;IACzBsC,IAAAA,MAAM,CAACyE,IAAP,CAAY/G,GAAZ,CAAiBmC,CAAAA,OAAjB,CAAyBJ,IAAI,IAAI;IAC7B6E,MAAAA,QAAQ,CAACC,OAAD,EAAU9E,IAAV,EAAgB/B,GAAG,CAAC+B,IAAD,CAAnB,CAAR,CAAA;IACH,KAFD,CAAA,CAAA;IAGH,GAAA;;IACD8E,EAAAA,OAAO,CAACG,KAAR,CAAchH,GAAd,IAAqB8G,KAArB,CAAA;IACA,EAAA,OAAOD,OAAP,CAAA;IACH,CAAA;IAGM,SAASI,QAAT,CAAkBJ,OAAlB,EAA2B7G,GAA3B,EAAmD;IAAA,EAAnBkH,IAAAA,UAAmB,uEAAN,IAAM,CAAA;;IACtD,EAAI,IAAA,CAACL,OAAL,EAAc;IACV,IAAA,OAAO,CAAP,CAAA;IACH,GAAA;;IAED,EAAA,MAAMC,KAAK,GAAGK,gBAAgB,CAACN,OAAD,EAAU,IAAV,CAAhB,CAAgCO,gBAAhC,CAAiDpH,GAAjD,CAAd,CAAA;IACA,EAAA,OAAOkH,UAAU,GAAGG,UAAU,CAACP,KAAD,CAAb,GAAuBA,KAAxC,CAAA;IACH,CAAA;IAEM,SAASQ,UAAT,GAAsB;IACzB,EAAIpL,IAAAA,WAAW,IAAI,OAAOA,WAAW,CAAC4J,GAAnB,KAA2B,UAA9C,EAA0D;IACtD,IAAO5J,OAAAA,WAAW,CAAC4J,GAAZ,EAAP,CAAA;IACH,GAAA;;IACD,EAAOC,OAAAA,IAAI,CAACD,GAAL,EAAP,CAAA;IACH,CAAA;IAEM,SAASyB,eAAT,CAAyB7F,QAAzB,EAAmC;IACtC,EAAI8F,IAAAA,SAAS,GAAG,CAAhB,CAAA;IACA,EAAIC,IAAAA,QAAQ,GAAGH,UAAU,EAAzB,CAAA;IACA,EAAA,OAAOI,IAAI,IAAI;IACXF,IAAAA,SAAS,IAAIE,IAAb,CAAA;IACA,IAAMC,MAAAA,QAAQ,GAAGL,UAAU,EAA3B,CAAA;IACA,IAAA,MAAMM,QAAQ,GAAGD,QAAQ,GAAGF,QAA5B,CAAA;;IACA,IAAIG,IAAAA,QAAQ,IAAI,IAAhB,EAAsB;IAClBlG,MAAAA,QAAQ,CAAE8F,SAAS,GAAGI,QAAb,GAAyB,IAA1B,CAAR,CAAA;IACAH,MAAAA,QAAQ,GAAGE,QAAX,CAAA;IACAH,MAAAA,SAAS,GAAG,CAAZ,CAAA;IACH,KAAA;IACJ,GATD,CAAA;IAUH,CAAA;IAEM,SAASK,cAAT,CAAwBpJ,IAAxB,EAA8BuC,IAA9B,EAAoC8G,MAApC,EAA4C;IAC/C,EAAM7O,MAAAA,GAAG,GAAG8O,MAAM,CAACvC,GAAP,CAAWC,eAAX,CAA2BhH,IAA3B,CAAZ,CAAA;IACA,EAAA,MAAMgI,CAAC,GAAGpB,QAAQ,CAACC,aAAT,CAAuB,GAAvB,CAAV,CAAA;IACAmB,EAAAA,CAAC,CAAClB,IAAF,GAAStM,GAAT,CAAA;IACAwN,EAAAA,CAAC,CAAClI,QAAF,GAAa,CAACyC,IAAI,IAAI8E,GAAG,EAAZ,IAAkB,GAAlB,IAAyBgC,MAAM,IAAItI,WAAW,CAACE,IAA/C,CAAb,CAAA;IACA+G,EAAAA,CAAC,CAACf,KAAF,EAAA,CAAA;IACAC,EAAAA,UAAU,CAAC,MAAM;IACboC,IAAAA,MAAM,CAACvC,GAAP,CAAWI,eAAX,CAA2B3M,GAA3B,CAAA,CAAA;IACH,GAFS,EAEP4M,KAAK,EAAA,GAAK,IAAL,GAAY,CAFV,CAAV,CAAA;IAGH,CAAA;IAIM,SAASmC,QAAT,GAAoB;IACvB,EAAQ,OAAA,gEAAA,CAAiEC,IAAjE,CAAsEF,MAAM,CAACG,SAAP,CAAiBC,SAAjB,CAA2BC,WAA3B,EAAtE,CAAR,CAAA;IACH,CAAA;IAOM,SAASvC,KAAT,GAAiB;IACpB,EAAMwC,MAAAA,EAAE,GAAGN,MAAM,CAACG,SAAP,CAAiBC,SAAjB,CAA2BC,WAA3B,EAAX,CAAA;IACA,EAAA,OAAOC,EAAE,IAAI,sBAAA,CAAuBJ,IAAvB,CAA4BI,EAA5B,CAAb,CAAA;IACH,CAAA;;IAqCM,SAASC,UAAT,GAAsB;IACzB,EAAA,OAAO,kBAAkBP,MAAzB,CAAA;IACH,CAAA;IAmDM,SAASQ,2BAAT,CAAqCC,IAArC,EAA2C;IAC9C,EAAIC,IAAAA,UAAU,GAAGD,IAAI,CAACE,QAAL,CAAc,CAAd,EAAiB,CAAjB,CAAjB,CAAA;IACA,EAAIC,IAAAA,WAAW,GAAG,OAAlB,CAAA;;IACA,EAAK,KAAA,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EAA4B;IACxB,IAAIC,IAAAA,CAAC,GAAGJ,UAAU,CAACG,CAAD,CAAV,CAAcE,QAAd,CAAuB,EAAvB,CAAR,CAAA;;IACA,IAAA,IAAID,CAAC,CAAChF,MAAF,GAAW,CAAf,EAAkB;IACdgF,MAAAA,CAAC,GAAG,GAAA,GAAMA,CAAV,CAAA;IACH,KAAA;;IACDF,IAAAA,WAAW,IAAIE,CAAf,CAAA;IACH,GAAA;;IAED,EAAO,OAAA;IACHE,IAAAA,KAAK,EAAEJ,WADJ;IAEHK,IAAAA,WAAW,EAAER,IAAAA;IAFV,GAAP,CAAA;IAIH,CAAA;IAEM,SAASS,YAAT,GAAwB;IAC3B,EAAO5D,OAAAA,QAAQ,CAAC4D,YAAT,IAAyB5D,QAAQ,CAAC6D,eAAlC,IAAqD7D,QAAQ,CAAC8D,kBAArE,CAAA;IACH,CAAA;IAEM,SAASC,OAAT,CAAiBtC,KAAjB,EAAwB;IAC3B,EAAA,IAAI,QAAQA,KAAR,IAAiBA,KAAK,KAAK,EAA/B,EAAmC;IAC/B,IAAA,OAAO,QAAP,CAAA;IACH,GAAA;;IACD,EAAA,IAAIY,IAAI,GAAGL,UAAU,CAACP,KAAD,CAArB,CAAA;IACAY,EAAAA,IAAI,GAAGA,IAAI,CAAC2B,OAAL,CAAa,CAAb,CAAP,CAAA;IACA,EAAO3B,OAAAA,IAAI,GAAG,MAAd,CAAA;IACH,CAAA;IAGM,SAAS4B,SAAT,CAAmBC,GAAnB,EAAwB;IAC3B,EAAIC,IAAAA,MAAM,GAAG,CAAb,CAAA;;IACA,EAAID,IAAAA,GAAG,IAAI,EAAX,EAAe;IACXC,IAAAA,MAAM,GAAG,CAAT,CAAA;IACH,GAFD,MAEO,IAAID,GAAG,IAAI,EAAX,EAAe;IAClBC,IAAAA,MAAM,GAAG,CAAT,CAAA;IACH,GAAA;;IAED,EAAA,OAAOA,MAAP,CAAA;IACH,CAAA;IAEM,SAASC,sBAAT,CAAgC7G,KAAhC,EAAuCI,MAAvC,EAA+C;IAClD,EAAA,MAAM0G,cAAc,GAAGrE,QAAQ,CAACC,aAAT,CAAuB,QAAvB,CAAvB,CAAA;IACAoE,EAAAA,cAAc,CAAC9G,KAAf,GAAuBA,KAAvB,CAAA;IACA8G,EAAAA,cAAc,CAAC1G,MAAf,GAAwBA,MAAxB,CAAA;IACA,EAAO2G,OAAAA,iBAAiB,CAACD,cAAD,EAAiB,CAAjB,EAAoB,CAApB,EAAuB9G,KAAvB,EAA8BI,MAA9B,CAAxB,CAAA;IACH,CAAA;IAGM,SAAS4G,UAAT,GAAsB;IACzB,EAAA,OAAO7B,MAAM,CAAC8B,WAAP,IAAsB9B,MAAM,CAAC8B,WAAP,CAAmBC,eAAnB,CAAmC5J,UAAU,CAACC,GAA9C,CAA7B,CAAA;IACH,CAAA;IAmBM,SAAS4J,OAAT,CAAiBjD,KAAjB,EAAwB;IAC3B,EAAA,OAAOA,KAAK,KAAK,IAAV,IAAkBA,KAAK,KAAKkD,SAAnC,CAAA;IACH,CAAA;IAEM,SAASC,SAAT,CAAmBnD,KAAnB,EAA0B;IAC7B,EAAA,OAAOA,KAAK,KAAK,IAAV,IAAkBA,KAAK,KAAK,KAAnC,CAAA;IACH,CAAA;IAEM,SAASoD,UAAT,CAAoBpD,KAApB,EAA2B;IAC9B,EAAA,OAAO,CAACiD,OAAO,CAACjD,KAAD,CAAf,CAAA;IACH,CAAA;IAEM,SAASqD,aAAT,GAAyB;IAC5B,EAAO,OAAA;IACHC,IAAAA,aAAa,EAAE,EADZ;IACgB;IACnBC,IAAAA,SAAS,EAAE,EAFR;IAEY;IACfC,IAAAA,WAAW,EAAE,EAHV;IAGc;IACjBC,IAAAA,cAAc,EAAE,EAJb;IAIiB;IACpBC,IAAAA,UAAU,EAAE,EALT;IAKa;IAChBC,IAAAA,WAAW,EAAE,EANV;IAMc;IACjBC,IAAAA,UAAU,EAAE,EAPT;IAOa;IAChBC,IAAAA,aAAa,EAAE,EARZ;IAQe;IAClBC,IAAAA,eAAe,EAAE,EATd;IASiB;IACpBC,IAAAA,uBAAuB,EAAE,EAVtB;IAUyB;IAC5BC,IAAAA,cAAc,EAAE,EAXb;IAWiB;IACpBC,IAAAA,eAAe,EAAE,EAZd;IAYkB;IACrBC,IAAAA,cAAc,EAAE,EAbb;IAagB;IACnBC,IAAAA,YAAY,EAAE,EAdX;;IAAA,GAAP,CAAA;IAgBH;IA8FM,SAASC,cAAT,CAAwBC,IAAxB,EAA8B;IACjC,EAAI3B,IAAAA,MAAJ,CADiC;;IAIjC,EAAA,IAAI2B,IAAI,GAAG,CAAC,CAAZ,EAAe;IACX,IAAIC,IAAAA,IAAI,GAAGvI,IAAI,CAACwI,KAAL,CAAWF,IAAI,GAAG,IAAlB,CAAX,CAAA;IACA,IAAIxE,IAAAA,GAAG,GAAG9D,IAAI,CAACwI,KAAL,CAAWF,IAAI,GAAG,EAAlB,CAAA,GAAwB,EAAlC,CAAA;IACA,IAAA,IAAIG,GAAG,GAAGH,IAAI,GAAG,EAAjB,CAAA;IAEAG,IAAAA,GAAG,GAAGzI,IAAI,CAAC0I,KAAL,CAAWD,GAAX,CAAN,CAAA;;IAEA,IAAIF,IAAAA,IAAI,GAAG,EAAX,EAAe;IACX5B,MAAAA,MAAM,GAAG,GAAM4B,GAAAA,IAAN,GAAa,GAAtB,CAAA;IACH,KAFD,MAEO;IACH5B,MAAAA,MAAM,GAAG4B,IAAI,GAAG,GAAhB,CAAA;IACH,KAAA;;IAED,IAAIzE,IAAAA,GAAG,GAAG,EAAV,EAAc;IACV6C,MAAAA,MAAM,IAAI,GAAV,CAAA;IACH,KAAA;;IACDA,IAAAA,MAAM,IAAI7C,GAAG,GAAG,GAAhB,CAAA;;IACA,IAAI2E,IAAAA,GAAG,GAAG,EAAV,EAAc;IACV9B,MAAAA,MAAM,IAAI,GAAV,CAAA;IACH,KAAA;;IACDA,IAAAA,MAAM,IAAI8B,GAAG,CAACjC,OAAJ,CAAY,CAAZ,CAAV,CAAA;IACH,GAAA;;IAED,EAAA,OAAOG,MAAP,CAAA;IACH;;AC7eD,mBAAA,CAAgBnH,MAAD,IAAY;IAGvB,EAAI,IAAA;IACA,IAAMmJ,MAAAA,gBAAgB,GAAG,MAAM;IAC3BnJ,MAAAA,MAAM,CAACoJ,IAAP,CAAY9N,gBAAgB,CAACpF,UAA7B,EAAyC8J,MAAM,CAAC9J,UAAhD,CAAA,CAD2B;;IAI3B,MAAA,IAAI,CAAC8J,MAAM,CAAC9J,UAAZ,EAAwB;IACpB8J,QAAAA,MAAM,CAACzF,MAAP,EAAA,CAAA;IACH,OAFD,MAEO;IACH,QAAA,IAAGyF,MAAM,CAACpB,IAAP,CAAYxH,MAAf,EAAsB;IAClB4I,UAAAA,MAAM,CAACzF,MAAP,EAAA,CAAA;IACH,SAAA;IACJ,OAAA;IAEJ,KAZD,CAAA;;IAaA8O,IAAAA,UAAU,CAACC,EAAX,CAAc,QAAd,EAAwBH,gBAAxB,CAAA,CAAA;IACAnJ,IAAAA,MAAM,CAACuJ,MAAP,CAActK,QAAd,CAAuBY,IAAvB,CAA4B,MAAM;IAC9BwJ,MAAAA,UAAU,CAACG,GAAX,CAAe,QAAf,EAAyBL,gBAAzB,CAAA,CAAA;IACH,KAFD,CAAA,CAAA;IAGH,GAlBD,CAkBE,OAAOzP,KAAP,EAAc;IAEf,GAvBsB;;;IAyBvBsG,EAAAA,MAAM,CAACsJ,EAAP,CAAUxQ,MAAM,CAACE,iBAAjB,EAAoC,MAAM;IACtCgH,IAAAA,MAAM,CAAC9K,KAAP,CAAauE,GAAb,CAAiB,QAAjB,EAA2B,YAA3B,CAAA,CAAA;IACAuG,IAAAA,MAAM,CAACyJ,MAAP,GAAgB,IAAhB,CAAA;IACH,GAHD,EAzBuB;;IA+BvBzJ,EAAAA,MAAM,CAACsJ,EAAP,CAAUxQ,MAAM,CAAC1C,IAAjB,EAAuB,MAAM;IACzB4J,IAAAA,MAAM,CAAC3G,OAAP,GAAiB,KAAjB,CAAA;IACH,GAFD,EA/BuB;;IAoCvB2G,EAAAA,MAAM,CAACsJ,EAAP,CAAUxQ,MAAM,CAAC5C,UAAjB,EAA8BuO,KAAD,IAAW;IACpC,IAAA,IAAIA,KAAJ,EAAW;IACP,MAAI,IAAA;IACA4E,QAAAA,UAAU,CAACK,OAAX,CAAmB1J,MAAM,CAACK,UAA1B,CAAA,CAAsCsJ,IAAtC,CAA2C,MAAM,EAAjD,EAEGC,KAFH,CAEU/H,CAAD,IAAO;IACZ7B,UAAAA,MAAM,CAACjH,aAAP,GAAuB,IAAvB,CAAA;IACH,SAJD,CAAA,CAAA;IAMH,OAPD,CAOE,OAAO8I,CAAP,EAAU;IACR7B,QAAAA,MAAM,CAACjH,aAAP,GAAuB,IAAvB,CAAA;IACH,OAAA;IACJ,KAXD,MAWO;IACH,MAAI,IAAA;IACAsQ,QAAAA,UAAU,CAACQ,IAAX,EAAA,CAAkBF,IAAlB,CAAuB,MAAM,EAA7B,CAAA,CACGC,KADH,CACS,MAAM;IACX5J,UAAAA,MAAM,CAACjH,aAAP,GAAuB,KAAvB,CAAA;IAEH,SAJD,CAAA,CAAA;IAKH,OAND,CAME,OAAO8I,CAAP,EAAU;IACR7B,QAAAA,MAAM,CAACjH,aAAP,GAAuB,KAAvB,CAAA;IACH,OAAA;IACJ,KAAA;IACJ,GAvBD,CAAA,CAAA;IAyBAiH,EAAAA,MAAM,CAACsJ,EAAP,CAAUxQ,MAAM,CAACC,aAAjB,EAAiC0L,KAAD,IAAW;IACvC,IAAA,IAAIA,KAAJ,EAAW;IACPzE,MAAAA,MAAM,CAACK,UAAP,CAAkByJ,SAAlB,CAA4BC,GAA5B,CAAgC,0BAAhC,CAAA,CAAA;IACH,KAFD,MAEO;IACH/J,MAAAA,MAAM,CAACK,UAAP,CAAkByJ,SAAlB,CAA4BE,MAA5B,CAAmC,0BAAnC,CAAA,CAAA;IACH,KAAA;IACJ,GAND,EA7DuB;;IAsEvBhK,EAAAA,MAAM,CAACsJ,EAAP,CAAUxQ,MAAM,CAACyB,MAAjB,EAAyB,MAAM;IAC3ByF,IAAAA,MAAM,CAACzH,KAAP,CAAagC,MAAb,EAAA,CAAA;IACH,GAFD,CAAA,CAAA;;IAKA,EAAA,IAAIyF,MAAM,CAACpB,IAAP,CAAY1J,KAAhB,EAAuB;IACnB,IAAA,MAAM+U,UAAU,GAAG,CAACnR,MAAM,CAACS,UAAR,CAAnB,CAAA;IACA0G,IAAAA,MAAM,CAACyE,IAAP,CAAY5L,MAAZ,CAAoBgH,CAAAA,OAApB,CAA6BnC,GAAD,IAAS;IACjCqC,MAAAA,MAAM,CAACsJ,EAAP,CAAUxQ,MAAM,CAAC6E,GAAD,CAAhB,EAAwB8G,KAAD,IAAW;IAC9B,QAAA,IAAIwF,UAAU,CAACC,QAAX,CAAoBvM,GAApB,CAAJ,EAA8B;IAC1B,UAAA,OAAA;IACH,SAAA;;IAEDqC,QAAAA,MAAM,CAAC9K,KAAP,CAAauE,GAAb,CAAiB,eAAjB,EAAkCX,MAAM,CAAC6E,GAAD,CAAxC,EAA+C8G,KAA/C,CAAA,CAAA;IACH,OAND,CAAA,CAAA;IAOH,KARD,CAAA,CAAA;IAUAxE,IAAAA,MAAM,CAACyE,IAAP,CAAYnJ,YAAZ,CAA0BuE,CAAAA,OAA1B,CAAmCnC,GAAD,IAAS;IACvCqC,MAAAA,MAAM,CAACsJ,EAAP,CAAU/N,YAAY,CAACoC,GAAD,CAAtB,EAA8B8G,KAAD,IAAW;IACpCzE,QAAAA,MAAM,CAAC9K,KAAP,CAAauE,GAAb,CAAiB,oBAAjB,EAAuC8B,YAAY,CAACoC,GAAD,CAAnD,EAA0D8G,KAA1D,CAAA,CAAA;IACH,OAFD,CAAA,CAAA;IAGH,KAJD,CAAA,CAAA;IAKH,GAAA;IACJ,CA7FD;;ICJe,MAAM0F,OAAN,CAAc;IACzBb,EAAAA,EAAE,CAAC3K,IAAD,EAAOyL,EAAP,EAAWC,GAAX,EAAgB;IACd,IAAMxI,MAAAA,CAAC,GAAG,IAAKA,CAAAA,CAAL,KAAW,IAAKA,CAAAA,CAAL,GAAS,EAApB,CAAV,CAAA;IACA,IAAA,CAACA,CAAC,CAAClD,IAAD,CAAD,KAAYkD,CAAC,CAAClD,IAAD,CAAD,GAAU,EAAtB,CAAD,EAA4BkB,IAA5B,CAAiC;IAACuK,MAAAA,EAAD;IAAKC,MAAAA,GAAAA;IAAL,KAAjC,CAAA,CAAA;IACA,IAAA,OAAO,IAAP,CAAA;IACH,GAAA;;IAEDC,EAAAA,IAAI,CAAC3L,IAAD,EAAOyL,EAAP,EAAWC,GAAX,EAAgB;IAChB,IAAME,MAAAA,IAAI,GAAG,IAAb,CAAA;;IAEA,IAAA,SAASC,QAAT,GAA2B;IACvBD,MAAAA,IAAI,CAACf,GAAL,CAAS7K,IAAT,EAAe6L,QAAf,CAAA,CAAA;;IADuB,MAAA,KAAA,IAAA,IAAA,GAAA,SAAA,CAAA,MAAA,EAAN3L,IAAM,GAAA,IAAA,KAAA,CAAA,IAAA,CAAA,EAAA,IAAA,GAAA,CAAA,EAAA,IAAA,GAAA,IAAA,EAAA,IAAA,EAAA,EAAA;IAANA,QAAAA,IAAM,CAAA,IAAA,CAAA,GAAA,SAAA,CAAA,IAAA,CAAA,CAAA;IAAA,OAAA;;IAEvBuL,MAAAA,EAAE,CAACK,KAAH,CAASJ,GAAT,EAAcxL,IAAd,CAAA,CAAA;IACH,KAAA;;IAED2L,IAAAA,QAAQ,CAACE,CAAT,GAAaN,EAAb,CAAA;IACA,IAAO,OAAA,IAAA,CAAKd,EAAL,CAAQ3K,IAAR,EAAc6L,QAAd,EAAwBH,GAAxB,CAAP,CAAA;IACH,GAAA;;IAEDjB,EAAAA,IAAI,CAACzK,IAAD,EAAgB;IAChB,IAAA,MAAMgM,MAAM,GAAG,CAAC,CAAC,IAAK9I,CAAAA,CAAL,KAAW,IAAKA,CAAAA,CAAL,GAAS,EAApB,CAAD,EAA0BlD,IAA1B,KAAmC,EAApC,EAAwCiM,KAAxC,EAAf,CAAA;;IADgB,IAAA,KAAA,IAAA,KAAA,GAAA,SAAA,CAAA,MAAA,EAANC,IAAM,GAAA,IAAA,KAAA,CAAA,KAAA,GAAA,CAAA,GAAA,KAAA,GAAA,CAAA,GAAA,CAAA,CAAA,EAAA,KAAA,GAAA,CAAA,EAAA,KAAA,GAAA,KAAA,EAAA,KAAA,EAAA,EAAA;IAANA,MAAAA,IAAM,CAAA,KAAA,GAAA,CAAA,CAAA,GAAA,SAAA,CAAA,KAAA,CAAA,CAAA;IAAA,KAAA;;IAEhB,IAAA,KAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGH,MAAM,CAACnJ,MAA3B,EAAmCsJ,CAAC,IAAI,CAAxC,EAA2C;IACvCH,MAAAA,MAAM,CAACG,CAAD,CAAN,CAAUV,EAAV,CAAaK,KAAb,CAAmBE,MAAM,CAACG,CAAD,CAAN,CAAUT,GAA7B,EAAkCQ,IAAlC,CAAA,CAAA;IACH,KAAA;;IACD,IAAA,OAAO,IAAP,CAAA;IACH,GAAA;;IAEDrB,EAAAA,GAAG,CAAC7K,IAAD,EAAOU,QAAP,EAAiB;IAChB,IAAMwC,MAAAA,CAAC,GAAG,IAAKA,CAAAA,CAAL,KAAW,IAAKA,CAAAA,CAAL,GAAS,EAApB,CAAV,CAAA;;IAEA,IAAI,IAAA,CAAClD,IAAL,EAAW;IACPsB,MAAAA,MAAM,CAACyE,IAAP,CAAY7C,CAAZ,CAAe/B,CAAAA,OAAf,CAAwBnC,GAAD,IAAS;IAC5B,QAAOkE,OAAAA,CAAC,CAAClE,GAAD,CAAR,CAAA;IACH,OAFD,CAAA,CAAA;IAGA,MAAA,OAAO,KAAKkE,CAAZ,CAAA;IACA,MAAA,OAAA;IACH,KAAA;;IAED,IAAA,MAAMkJ,IAAI,GAAGlJ,CAAC,CAAClD,IAAD,CAAd,CAAA;IACA,IAAMqM,MAAAA,UAAU,GAAG,EAAnB,CAAA;;IACA,IAAID,IAAAA,IAAI,IAAI1L,QAAZ,EAAsB;IAClB,MAAA,KAAK,IAAIyL,CAAC,GAAG,CAAR,EAAWG,GAAG,GAAGF,IAAI,CAACvJ,MAA3B,EAAmCsJ,CAAC,GAAGG,GAAvC,EAA4CH,CAAC,IAAI,CAAjD,EAAoD;IAChD,QAAIC,IAAAA,IAAI,CAACD,CAAD,CAAJ,CAAQV,EAAR,KAAe/K,QAAf,IAA2B0L,IAAI,CAACD,CAAD,CAAJ,CAAQV,EAAR,CAAWM,CAAX,KAAiBrL,QAAhD,EAA0D2L,UAAU,CAACnL,IAAX,CAAgBkL,IAAI,CAACD,CAAD,CAApB,CAAA,CAAA;IAC7D,OAAA;IACJ,KAAA;;IACD,IAAIE,IAAAA,UAAU,CAACxJ,MAAf,EAAuB;IACnBK,MAAAA,CAAC,CAAClD,IAAD,CAAD,GAAUqM,UAAV,CAAA;IACH,KAFD,MAEO;IACH,MAAOnJ,OAAAA,CAAC,CAAClD,IAAD,CAAR,CAAA;IACH,KAAA;;IACD,IAAA,OAAO,IAAP,CAAA;IACH,GAAA;;IAnDwB;;ACA7B,sBAAA,CAAe,CAAC0C,EAAD,EAAK7J,kBAAL,KAA4B;IACvC,EAAI0T,IAAAA,kBAAkB,GAAG,CACrB,2BADqB,EAErB,4BAFqB,EAGrB,4BAHqB,EAKrB,aALqB,EAMrB,GANqB,EAOrB,0BAPqB,EAQrB,+BARqB,EASrB,GATqB,CAUvBC,CAAAA,IAVuB,CAUlB,IAVkB,CAAzB,CAAA;IAYA,EAAA,IAAIC,oBAAoB,GAAG,CACvB,wBADuB,EAEvB,kCAFuB,EAGvB,6BAHuB,EAIvB,6BAJuB,EAKvB,6BALuB,EAMvB,2BANuB,EAOvB,GAPuB,EAQvB,gDARuB,EASvB,qDATuB,EAUvB,6CAVuB,EAWvB,YAXuB,EAYvB,IAZuB,EAcvB,mBAduB,EAevB,uDAfuB,EAgBvB,uDAhBuB,EAiBvB,uDAjBuB,EAkBvB,4CAlBuB,EAmBvB,GAnBuB,EAoBzBD,IApByB,CAoBpB,IApBoB,CAA3B,CAAA;;IAsBA,EAAA,IAAI3T,kBAAJ,EAAwB;IACpB6J,IAAAA,EAAE,CAACgK,WAAH,CAAehK,EAAE,CAACiK,gBAAlB,EAAoC,CAApC,CAAA,CAAA;IACH,GAAA;;IACD,EAAIC,IAAAA,YAAY,GAAGlK,EAAE,CAACmK,YAAH,CAAgBnK,EAAE,CAACoK,aAAnB,CAAnB,CAAA;IACApK,EAAAA,EAAE,CAACqK,YAAH,CAAgBH,YAAhB,EAA8BL,kBAA9B,CAAA,CAAA;IACA7J,EAAAA,EAAE,CAACsK,aAAH,CAAiBJ,YAAjB,CAAA,CAAA;;IACA,EAAI,IAAA,CAAClK,EAAE,CAACuK,kBAAH,CAAsBL,YAAtB,EAAoClK,EAAE,CAACwK,cAAvC,CAAL,EAA6D;IACzD/M,IAAAA,OAAO,CAACrF,GAAR,CAAY,mCAAA,GAAsC4H,EAAE,CAACyK,gBAAH,CAAoBP,YAApB,CAAlD,CAAA,CAAA;IACH,GAAA;;IAED,EAAIQ,IAAAA,cAAc,GAAG1K,EAAE,CAACmK,YAAH,CAAgBnK,EAAE,CAAC2K,eAAnB,CAArB,CAAA;IACA3K,EAAAA,EAAE,CAACqK,YAAH,CAAgBK,cAAhB,EAAgCX,oBAAhC,CAAA,CAAA;IACA/J,EAAAA,EAAE,CAACsK,aAAH,CAAiBI,cAAjB,CAAA,CAAA;;IACA,EAAI,IAAA,CAAC1K,EAAE,CAACuK,kBAAH,CAAsBG,cAAtB,EAAsC1K,EAAE,CAACwK,cAAzC,CAAL,EAA+D;IAC3D/M,IAAAA,OAAO,CAACrF,GAAR,CAAY,qCAAA,GAAwC4H,EAAE,CAACyK,gBAAH,CAAoBC,cAApB,CAApD,CAAA,CAAA;IACH,GAAA;;IAED,EAAA,IAAIE,OAAO,GAAG5K,EAAE,CAAC6K,aAAH,EAAd,CAAA;IACA7K,EAAAA,EAAE,CAAC8K,YAAH,CAAgBF,OAAhB,EAAyBV,YAAzB,CAAA,CAAA;IACAlK,EAAAA,EAAE,CAAC8K,YAAH,CAAgBF,OAAhB,EAAyBF,cAAzB,CAAA,CAAA;IACA1K,EAAAA,EAAE,CAAC+K,WAAH,CAAeH,OAAf,CAAA,CAAA;;IACA,EAAI,IAAA,CAAC5K,EAAE,CAACgL,mBAAH,CAAuBJ,OAAvB,EAAgC5K,EAAE,CAACiL,WAAnC,CAAL,EAAsD;IAClDxN,IAAAA,OAAO,CAACrF,GAAR,CAAY,6BAAA,GAAgC4H,EAAE,CAACkL,iBAAH,CAAqBN,OAArB,CAA5C,CAAA,CAAA;IACH,GAAA;;IAED5K,EAAAA,EAAE,CAACmL,UAAH,CAAcP,OAAd,EA5DuC;;IA+DvC,EAAA,IAAIQ,eAAe,GAAGpL,EAAE,CAACqL,YAAH,EAAtB,CAAA;IACArL,EAAAA,EAAE,CAACsL,UAAH,CAActL,EAAE,CAACuL,YAAjB,EAA+BH,eAA/B,CAAA,CAAA;IACApL,EAAAA,EAAE,CAACwL,UAAH,CAAcxL,EAAE,CAACuL,YAAjB,EAA+B,IAAIE,YAAJ,CAAiB,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAC,CAAR,EAAW,CAAX,EAAc,CAAd,EAAiB,CAAC,CAAlB,EAAqB,CAAC,CAAtB,EAAyB,CAAC,CAA1B,CAAjB,CAA/B,EAA+EzL,EAAE,CAAC0L,WAAlF,CAAA,CAAA;IAEA,EAAIC,IAAAA,YAAY,GAAG3L,EAAE,CAAC4L,iBAAH,CAAqBhB,OAArB,EAA8B,WAA9B,CAAnB,CAAA;IACA5K,EAAAA,EAAE,CAAC6L,uBAAH,CAA2BF,YAA3B,CAAA,CAAA;IACA3L,EAAAA,EAAE,CAAC8L,mBAAH,CAAuBH,YAAvB,EAAqC,CAArC,EAAwC3L,EAAE,CAAC+L,KAA3C,EAAkD,KAAlD,EAAyD,CAAzD,EAA4D,CAA5D,CAAA,CAAA;IAEA,EAAA,IAAIC,gBAAgB,GAAGhM,EAAE,CAACqL,YAAH,EAAvB,CAAA;IACArL,EAAAA,EAAE,CAACsL,UAAH,CAActL,EAAE,CAACuL,YAAjB,EAA+BS,gBAA/B,CAAA,CAAA;IACAhM,EAAAA,EAAE,CAACwL,UAAH,CAAcxL,EAAE,CAACuL,YAAjB,EAA+B,IAAIE,YAAJ,CAAiB,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,EAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,EAAsB,CAAtB,CAAjB,CAA/B,EAA2EzL,EAAE,CAAC0L,WAA9E,CAAA,CAAA;IAEA,EAAIO,IAAAA,aAAa,GAAGjM,EAAE,CAAC4L,iBAAH,CAAqBhB,OAArB,EAA8B,YAA9B,CAApB,CAAA;IACA5K,EAAAA,EAAE,CAAC6L,uBAAH,CAA2BI,aAA3B,CAAA,CAAA;IACAjM,EAAAA,EAAE,CAAC8L,mBAAH,CAAuBG,aAAvB,EAAsC,CAAtC,EAAyCjM,EAAE,CAAC+L,KAA5C,EAAmD,KAAnD,EAA0D,CAA1D,EAA6D,CAA7D,CAAA,CAAA;;IAEA,EAAA,SAASG,YAAT,CAAsB5O,IAAtB,EAA4B6O,KAA5B,EAAmC;IAC/B,IAAA,IAAIC,UAAU,GAAGpM,EAAE,CAACqM,aAAH,EAAjB,CAAA;IACArM,IAAAA,EAAE,CAACsM,WAAH,CAAetM,EAAE,CAACuM,UAAlB,EAA8BH,UAA9B,CAAA,CAAA;IACApM,IAAAA,EAAE,CAACwM,aAAH,CAAiBxM,EAAE,CAACuM,UAApB,EAAgCvM,EAAE,CAACyM,kBAAnC,EAAuDzM,EAAE,CAAC0M,MAA1D,CAAA,CAAA;IACA1M,IAAAA,EAAE,CAACwM,aAAH,CAAiBxM,EAAE,CAACuM,UAApB,EAAgCvM,EAAE,CAAC2M,kBAAnC,EAAuD3M,EAAE,CAAC0M,MAA1D,CAAA,CAAA;IACA1M,IAAAA,EAAE,CAACwM,aAAH,CAAiBxM,EAAE,CAACuM,UAApB,EAAgCvM,EAAE,CAAC4M,cAAnC,EAAmD5M,EAAE,CAAC6M,aAAtD,CAAA,CAAA;IACA7M,IAAAA,EAAE,CAACwM,aAAH,CAAiBxM,EAAE,CAACuM,UAApB,EAAgCvM,EAAE,CAAC8M,cAAnC,EAAmD9M,EAAE,CAAC6M,aAAtD,CAAA,CAAA;IACA7M,IAAAA,EAAE,CAACsM,WAAH,CAAetM,EAAE,CAACuM,UAAlB,EAA8B,IAA9B,CAAA,CAAA;IACAvM,IAAAA,EAAE,CAAC+M,SAAH,CAAa/M,EAAE,CAACgN,kBAAH,CAAsBpC,OAAtB,EAA+BtN,IAA/B,CAAb,EAAmD6O,KAAnD,CAAA,CAAA;IACA,IAAA,OAAOC,UAAP,CAAA;IACH,GAAA;;IAED,EAAA,IAAIa,WAAW,GAAGf,YAAY,CAAC,UAAD,EAAa,CAAb,CAA9B,CAAA;;IACA,EAAA,IAAIgB,WAAW,GAAGhB,YAAY,CAAC,UAAD,EAAa,CAAb,CAA9B,CAAA;;IACA,EAAA,IAAIiB,WAAW,GAAGjB,YAAY,CAAC,UAAD,EAAa,CAAb,CAA9B,CAAA;;IAEA,EAAO,OAAA;IACH3V,IAAAA,MAAM,EAAE,UAAU6W,CAAV,EAAajI,CAAb,EAAgBkI,CAAhB,EAAmBC,CAAnB,EAAsBC,CAAtB,EAAyB;IAC7BvN,MAAAA,EAAE,CAACwN,QAAH,CAAY,CAAZ,EAAe,CAAf,EAAkBJ,CAAlB,EAAqBjI,CAArB,CAAA,CAAA;IACAnF,MAAAA,EAAE,CAACyN,aAAH,CAAiBzN,EAAE,CAAC0N,QAApB,CAAA,CAAA;IACA1N,MAAAA,EAAE,CAACsM,WAAH,CAAetM,EAAE,CAACuM,UAAlB,EAA8BU,WAA9B,CAAA,CAAA;IACAjN,MAAAA,EAAE,CAAC2N,UAAH,CAAc3N,EAAE,CAACuM,UAAjB,EAA6B,CAA7B,EAAgCvM,EAAE,CAAC4N,SAAnC,EAA8CR,CAA9C,EAAiDjI,CAAjD,EAAoD,CAApD,EAAuDnF,EAAE,CAAC4N,SAA1D,EAAqE5N,EAAE,CAAC6N,aAAxE,EAAuFR,CAAvF,CAAA,CAAA;IACArN,MAAAA,EAAE,CAACyN,aAAH,CAAiBzN,EAAE,CAAC8N,QAApB,CAAA,CAAA;IACA9N,MAAAA,EAAE,CAACsM,WAAH,CAAetM,EAAE,CAACuM,UAAlB,EAA8BW,WAA9B,CAAA,CAAA;IACAlN,MAAAA,EAAE,CAAC2N,UAAH,CAAc3N,EAAE,CAACuM,UAAjB,EAA6B,CAA7B,EAAgCvM,EAAE,CAAC4N,SAAnC,EAA8CR,CAAC,GAAG,CAAlD,EAAqDjI,CAAC,GAAG,CAAzD,EAA4D,CAA5D,EAA+DnF,EAAE,CAAC4N,SAAlE,EAA6E5N,EAAE,CAAC6N,aAAhF,EAA+FP,CAA/F,CAAA,CAAA;IACAtN,MAAAA,EAAE,CAACyN,aAAH,CAAiBzN,EAAE,CAAC+N,QAApB,CAAA,CAAA;IACA/N,MAAAA,EAAE,CAACsM,WAAH,CAAetM,EAAE,CAACuM,UAAlB,EAA8BY,WAA9B,CAAA,CAAA;IACAnN,MAAAA,EAAE,CAAC2N,UAAH,CAAc3N,EAAE,CAACuM,UAAjB,EAA6B,CAA7B,EAAgCvM,EAAE,CAAC4N,SAAnC,EAA8CR,CAAC,GAAG,CAAlD,EAAqDjI,CAAC,GAAG,CAAzD,EAA4D,CAA5D,EAA+DnF,EAAE,CAAC4N,SAAlE,EAA6E5N,EAAE,CAAC6N,aAAhF,EAA+FN,CAA/F,CAAA,CAAA;IACAvN,MAAAA,EAAE,CAACgO,UAAH,CAAchO,EAAE,CAACiO,cAAjB,EAAiC,CAAjC,EAAoC,CAApC,CAAA,CAAA;IACH,KAbE;IAcHzU,IAAAA,OAAO,EAAE,YAAY;IACjB,MAAI,IAAA;IACAwG,QAAAA,EAAE,CAACkO,aAAH,CAAiBtD,OAAjB,CAAA,CAAA;IAEA5K,QAAAA,EAAE,CAACmO,YAAH,CAAgB/C,eAAhB,CAAA,CAAA;IACApL,QAAAA,EAAE,CAACmO,YAAH,CAAgBnC,gBAAhB,CAAA,CAAA;IAEAhM,QAAAA,EAAE,CAACoO,aAAH,CAAiBnB,WAAjB,CAAA,CAAA;IACAjN,QAAAA,EAAE,CAACoO,aAAH,CAAiBlB,WAAjB,CAAA,CAAA;IACAlN,QAAAA,EAAE,CAACmO,YAAH,CAAgBhB,WAAhB,CAAA,CAAA;IACH,OATD,CASE,OAAO3M,CAAP,EAAU;IAEX,OAAA;IAEJ,KAAA;IA5BE,GAAP,CAAA;IA8BH,CA7HD;;ICGe,MAAM6N,cAAN,SAA2BvF,OAA3B,CAAmC;IAC9C1L,EAAAA,WAAW,GAAG;IACV,IAAA,KAAA,EAAA,CAAA;IACA,IAAK/G,IAAAA,CAAAA,IAAL,GAAY,KAAZ,CAAA;IACH,GAJ6C;;;IAO9CiY,EAAAA,eAAe,CAAC9E,IAAD,EAAO;IAClB,IAAIA,IAAAA,IAAI,CAAC+E,WAAT,EAAsB;IAClB,MAAKtW,IAAAA,CAAAA,SAAL,CAAeuW,OAAf,GAAyBxT,cAAc,CAACwO,IAAI,CAAC+E,WAAN,CAAvC,CAAA;IACH,KAAA;;IAED,IAAI/E,IAAAA,IAAI,CAACtK,KAAT,EAAgB;IACZ,MAAA,IAAA,CAAKjH,SAAL,CAAeiH,KAAf,GAAuBsK,IAAI,CAACtK,KAA5B,CAAA;IACH,KAAA;;IAED,IAAIsK,IAAAA,IAAI,CAAClK,MAAT,EAAiB;IACb,MAAA,IAAA,CAAKrH,SAAL,CAAeqH,MAAf,GAAwBkK,IAAI,CAAClK,MAA7B,CAAA;IACH,KAXiB;;;IAclB,IAAA,IAAI,KAAKrH,SAAL,CAAeuW,OAAf,IAA0B,IAAA,CAAKvW,SAAL,CAAeqH,MAAzC,IAAmD,IAAA,CAAKrH,SAAL,CAAeiH,KAAlE,IAA2E,CAAC,IAAA,CAAK7I,IAArF,EAA2F;IACvF,MAAKsI,IAAAA,CAAAA,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAACQ,SAAxB,EAAmC,IAAA,CAAKA,SAAxC,CAAA,CAAA;IACA,MAAK5B,IAAAA,CAAAA,IAAL,GAAY,IAAZ,CAAA;IACH,KAAA;IACJ,GAAA;;IAEDtB,EAAAA,IAAI,GAAE,EAEL;;IAED8C,EAAAA,KAAK,GAAG,EAEP;;IAjC6C;;ICWnC,MAAM4W,iBAAN,SAAgCJ,cAAhC,CAA6C;IAExDjR,EAAAA,WAAW,CAACuB,MAAD,EAAS;IAChB,IAAA,KAAA,EAAA,CAAA;IACA,IAAKA,IAAAA,CAAAA,MAAL,GAAcA,MAAd,CAAA;IACA,IAAA,MAAMqH,cAAc,GAAGrE,QAAQ,CAACC,aAAT,CAAuB,QAAvB,CAAvB,CAAA;IACAoE,IAAAA,cAAc,CAAC1C,KAAf,CAAqBoL,QAArB,GAAgC,UAAhC,CAAA;IACA1I,IAAAA,cAAc,CAAC1C,KAAf,CAAqBqL,GAArB,GAA2B,CAA3B,CAAA;IACA3I,IAAAA,cAAc,CAAC1C,KAAf,CAAqBsL,IAArB,GAA4B,CAA5B,CAAA;IACA,IAAKC,IAAAA,CAAAA,aAAL,GAAqB7I,cAArB,CAAA;IACArH,IAAAA,MAAM,CAACK,UAAP,CAAkB8P,WAAlB,CAA8B,KAAKD,aAAnC,CAAA,CAAA;IAEA,IAAKE,IAAAA,CAAAA,SAAL,GAAiB,IAAjB,CAAA;IACA,IAAKC,IAAAA,CAAAA,SAAL,GAAiB,IAAjB,CAAA;IACA,IAAKC,IAAAA,CAAAA,eAAL,GAAuB,IAAvB,CAAA;IACA,IAAKC,IAAAA,CAAAA,gBAAL,GAAwB,IAAxB,CAAA;IACA,IAAKC,IAAAA,CAAAA,cAAL,GAAsB,IAAtB,CAAA;IACA,IAAKC,IAAAA,CAAAA,UAAL,GAAkB,IAAlB,CAAA;IACA,IAAA,IAAA,CAAKnX,SAAL,GAAiB;IACbiH,MAAAA,KAAK,EAAE,EADM;IAEbI,MAAAA,MAAM,EAAE,EAFK;IAGbkP,MAAAA,OAAO,EAAE,EAAA;IAHI,KAAjB,CAhBgB;;IAsBhB,IAAA,IAAA,CAAKa,iBAAL,EAAA,CAAA;;IACA,IAAK1Q,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,aAAtB,EAAqC,MAArC,CAAA,CAAA;IACH,GAAA;;IAEDoB,EAAAA,OAAO,GAAG;IACN,IAAI,IAAA,IAAA,CAAKwV,SAAT,EAAoB;IAChB,MAAKA,IAAAA,CAAAA,SAAL,GAAiB,IAAjB,CAAA;IACH,KAAA;;IAED,IAAI,IAAA,IAAA,CAAKD,SAAT,EAAoB;IAChB,MAAKA,IAAAA,CAAAA,SAAL,GAAiB,IAAjB,CAAA;IACH,KAAA;;IAED,IAAI,IAAA,IAAA,CAAKE,eAAT,EAA0B;IACtB,MAAA,IAAA,CAAKC,gBAAL,IAAyB,IAAKA,CAAAA,gBAAL,EAAzB,CAAA;IACA,MAAKA,IAAAA,CAAAA,gBAAL,GAAwB,IAAxB,CAAA;IACA,MAAKD,IAAAA,CAAAA,eAAL,GAAuB,IAAvB,CAAA;IACH,KAAA;;IACD,IAAI,IAAA,IAAA,CAAKE,cAAT,EAAyB;IACrB,MAAKA,IAAAA,CAAAA,cAAL,GAAsB,IAAtB,CAAA;IACH,KAAA;;IAED,IAAKC,IAAAA,CAAAA,UAAL,GAAkB,IAAlB,CAAA;IAEA,IAAA,IAAA,CAAKnX,SAAL,GAAiB;IACbiH,MAAAA,KAAK,EAAE,EADM;IAEbI,MAAAA,MAAM,EAAE,EAFK;IAGbkP,MAAAA,OAAO,EAAE,EAHI;IAIbD,MAAAA,WAAW,EAAE,EAAA;IAJA,KAAjB,CAAA;IAOA,IAAA,IAAA,CAAK5P,MAAL,CAAYK,UAAZ,CAAuBsQ,WAAvB,CAAmC,KAAKT,aAAxC,CAAA,CAAA;IACA,IAAKxY,IAAAA,CAAAA,IAAL,GAAY,KAAZ,CAAA;IACA,IAAA,IAAA,CAAK8R,GAAL,EAAA,CAAA;IACA,IAAKxJ,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAuB,CAAA,iBAAA,CAAvB,EAA2C,SAA3C,CAAA,CAAA;IACH,GAAA;;IAGDmX,EAAAA,cAAc,GAAG;IACb,IAAA,IAAA,CAAKP,SAAL,GAAiBjP,eAAe,CAAC,IAAA,CAAK8O,aAAN,CAAhC,CAAA;IACA,IAAA,MAAM1S,KAAK,GAAGqT,WAAW,CAAC,IAAKR,CAAAA,SAAN,EAAiB,IAAA,CAAKrQ,MAAL,CAAYpB,IAAZ,CAAiBpH,kBAAlC,CAAzB,CAAA;IACA,IAAA,IAAA,CAAK8Y,eAAL,GAAuB9S,KAAK,CAAC5F,MAA7B,CAAA;IACA,IAAA,IAAA,CAAK2Y,gBAAL,GAAwB/S,KAAK,CAAC3C,OAA9B,CAAA;IACH,GAAA;;IAEDiW,EAAAA,cAAc,GAAG;IACb,IAAKV,IAAAA,CAAAA,SAAL,GAAiB,IAAKF,CAAAA,aAAL,CAAmBtO,UAAnB,CAA8B,IAA9B,CAAjB,CAAA;IACH,GAvEuD;;;IA2ExD8O,EAAAA,iBAAiB,GAAG;IAChB,IAAI,IAAA,IAAA,CAAK1Q,MAAL,CAAYpB,IAAZ,CAAiB1H,MAAjB,IAA2B,CAAC,IAAA,CAAK6Z,iBAAL,EAAhC,EAA0D;IACtD,MAAA,IAAA,CAAKN,UAAL,GAAkBnT,kBAAkB,CAACC,SAArC,CAAA;;IACA,MAAA,IAAA,CAAKuT,cAAL,EAAA,CAAA;IACH,KAHD,MAGO,IAAI,IAAKC,CAAAA,iBAAL,EAAJ,EAA8B;IACjC,MAAA,IAAA,CAAKN,UAAL,GAAkBnT,kBAAkB,CAACG,SAArC,CAAA;;IACA,MAAA,IAAA,CAAKuT,cAAL,EAAA,CAAA;IACH,KAHM,MAGA;IACH,MAAA,IAAA,CAAKP,UAAL,GAAkBnT,kBAAkB,CAACE,KAArC,CAAA;;IACA,MAAA,IAAA,CAAKoT,cAAL,EAAA,CAAA;IACH,KAAA;IACJ,GAAA;;IAEDG,EAAAA,iBAAiB,GAAG;IAChB,IAAOhQ,OAAAA,gBAAgB,CAAC,IAAA,CAAKmP,aAAN,CAAhB,IAAwC,IAAA,CAAKlQ,MAAL,CAAYpB,IAAZ,CAAiBvH,YAAhE,CAAA;IACH,GA1FuD;;;IA6FxD2Z,EAAAA,cAAc,GAAG;IACb,IAAKR,IAAAA,CAAAA,cAAL,GAAsB,IAAKN,CAAAA,aAAL,CAAmBtO,UAAnB,CAA8B,gBAA9B,CAAtB,CAAA;IACH,GAAA;;IAEDqP,EAAAA,kBAAkB,GAAG;IACjB,IAAA,IAAA,CAAKf,aAAL,CAAmB3P,KAAnB,GAA2B,IAAKjH,CAAAA,SAAL,CAAeiH,KAA1C,CAAA;IACA,IAAA,IAAA,CAAK2P,aAAL,CAAmBvP,MAAnB,GAA4B,IAAKrH,CAAAA,SAAL,CAAeqH,MAA3C,CAAA;IACA,IAAA,IAAA,CAAKpG,MAAL,EAAA,CAAA;IACH,GArGuD;;;IAwGxD3C,EAAAA,MAAM,CAACsZ,GAAD,EAAM;IACR,IAAA,IAAA,CAAKlR,MAAL,CAAY2I,cAAZ,GAA6BuI,GAAG,CAACC,EAAjC,CAAA;;IACA,IAAA,QAAQ,KAAKV,UAAb;IACI,MAAKnT,KAAAA,kBAAkB,CAACG,SAAxB;IACI,QAAA,IAAA,CAAK+S,cAAL,CAAoBY,uBAApB,CAA4CF,GAAG,CAAC/W,MAAhD,CAAA,CAAA;IACA,QAAA,MAAA;;IACJ,MAAKmD,KAAAA,kBAAkB,CAACE,KAAxB;IACI,QAAA,IAAA,CAAK8S,eAAL,CAAqB,IAAKJ,CAAAA,aAAL,CAAmB3P,KAAxC,EAA+C,IAAA,CAAK2P,aAAL,CAAmBvP,MAAlE,EAA0EuQ,GAAG,CAACG,MAAJ,CAAW,CAAX,CAA1E,EAAyFH,GAAG,CAACG,MAAJ,CAAW,CAAX,CAAzF,EAAwGH,GAAG,CAACG,MAAJ,CAAW,CAAX,CAAxG,CAAA,CAAA;IACA,QAAA,MAAA;;IACJ,MAAK/T,KAAAA,kBAAkB,CAACC,SAAxB;IACI,QAAK6S,IAAAA,CAAAA,SAAL,CAAekB,SAAf,CAAyBJ,GAAG,CAAC9W,UAA7B,EAAyC,CAAzC,EAA4C,CAA5C,EAA+C,IAAA,CAAK8V,aAAL,CAAmB3P,KAAlE,EAAyE,IAAK2P,CAAAA,aAAL,CAAmBvP,MAA5F,CAAA,CAAA;IACA,QAAA,MAAA;IATR,KAAA;IAWH,GAAA;;IAEDxK,EAAAA,UAAU,CAACob,QAAD,EAAWC,MAAX,EAAmBC,OAAnB,EAA4BpP,IAA5B,EAAkC;IACxCkP,IAAAA,QAAQ,GAAGA,QAAQ,IAAI9N,GAAG,EAA1B,CAAA;IACApB,IAAAA,IAAI,GAAGA,IAAI,IAAIpG,eAAe,CAACC,QAA/B,CAAA;IACA,IAAA,MAAMwV,UAAU,GAAG;IACfC,MAAAA,GAAG,EAAE,WADU;IAEfC,MAAAA,IAAI,EAAE,YAFS;IAGfC,MAAAA,IAAI,EAAE,YAAA;IAHS,KAAnB,CAAA;IAKA,IAAIC,IAAAA,cAAc,GAAG,IAArB,CAAA;;IACA,IAAI,IAAA,CAACJ,UAAU,CAACF,MAAD,CAAX,IAAuBvV,eAAe,CAACuV,MAAD,CAA1C,EAAoD;IAChDnP,MAAAA,IAAI,GAAGmP,MAAP,CAAA;IACAA,MAAAA,MAAM,GAAG,KAAT,CAAA;IACAC,MAAAA,OAAO,GAAG9J,SAAV,CAAA;IACH,KAAA;;IAED,IAAA,IAAI,OAAO8J,OAAP,KAAmB,QAAvB,EAAiC;IAC7BpP,MAAAA,IAAI,GAAGoP,OAAP,CAAA;IACAA,MAAAA,OAAO,GAAG9J,SAAV,CAAA;IACH,KAAA;;IAED,IAAA,IAAI,OAAO8J,OAAP,KAAmB,WAAvB,EAAoC;IAChCK,MAAAA,cAAc,GAAGC,MAAM,CAACN,OAAD,CAAvB,CAAA;IACH,KAAA;;IACD,IAAA,MAAMzP,OAAO,GAAG,IAAA,CAAKkO,aAAL,CAAmB8B,SAAnB,CAA6BN,UAAU,CAACF,MAAD,CAAV,IAAsBE,UAAU,CAACC,GAA9D,EAAmEG,cAAnE,CAAhB,CAAA;IAEA,IAAA,MAAMG,IAAI,GAAGlQ,aAAa,CAACC,OAAD,CAA1B,CAAA;;IACA,IAAA,IAAIK,IAAI,KAAKpG,eAAe,CAACE,MAA7B,EAAqC;IACjC,MAAA,OAAO6F,OAAP,CAAA;IACH,KAFD,MAEO,IAAIK,IAAI,KAAKpG,eAAe,CAACG,IAA7B,EAAmC;IACtC,MAAA,OAAO6V,IAAP,CAAA;IACH,KAFM,MAEA,IAAI5P,IAAI,KAAKpG,eAAe,CAACC,QAA7B,EAAuC;IAC1C0G,MAAAA,WAAW,CAACqP,IAAD,EAAOV,QAAP,CAAX,CAAA;IACH,KAAA;IACJ,GAxJuD;;;IA2JxDW,EAAAA,SAAS,GAAG;IACR,IAAA,QAAQ,KAAKzB,UAAb;IACI,MAAKnT,KAAAA,kBAAkB,CAACG,SAAxB;IACI2J,QAAAA,sBAAsB,CAAC,IAAA,CAAK8I,aAAL,CAAmB3P,KAApB,EAA2B,IAAA,CAAK2P,aAAL,CAAmBvP,MAA9C,CAAtB,CAA4EgJ,IAA5E,CAAkFwI,WAAD,IAAiB;IAC9F,UAAA,IAAA,CAAK3B,cAAL,CAAoBY,uBAApB,CAA4Ce,WAA5C,CAAA,CAAA;IACH,SAFD,CAAA,CAAA;IAGA,QAAA,MAAA;;IACJ,MAAK7U,KAAAA,kBAAkB,CAACE,KAAxB;IACI,QAAA,IAAA,CAAK6S,SAAL,CAAe+B,KAAf,CAAqB,IAAK/B,CAAAA,SAAL,CAAegC,gBAApC,CAAA,CAAA;IACA,QAAA,MAAA;;IACJ,MAAK/U,KAAAA,kBAAkB,CAACC,SAAxB;IACI,QAAA,IAAA,CAAK6S,SAAL,CAAekC,SAAf,CAAyB,CAAzB,EAA4B,CAA5B,EAA+B,IAAKpC,CAAAA,aAAL,CAAmB3P,KAAlD,EAAyD,IAAK2P,CAAAA,aAAL,CAAmBvP,MAA5E,CAAA,CAAA;IACA,QAAA,MAAA;IAXR,KAAA;IAaH,GAAA;;IAEDpG,EAAAA,MAAM,GAAG;IACL,IAAKyF,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,aAAtB,EAAqC,QAArC,CAAA,CAAA;IACA,IAAA,MAAM6F,MAAM,GAAG,IAAKU,CAAAA,MAAL,CAAYpB,IAA3B,CAAA;IACA,IAAA,IAAI2B,KAAK,GAAG,IAAKP,CAAAA,MAAL,CAAYO,KAAxB,CAAA;IACA,IAAA,IAAII,MAAM,GAAG,IAAKX,CAAAA,MAAL,CAAYW,MAAzB,CAAA;;IACA,IAAIrB,IAAAA,MAAM,CAAC9I,UAAP,IAAqB,CAAC8I,MAAM,CAAC/I,eAAjC,EAAkD;IAC9C,MAAA,IAAIoP,QAAQ,EAAM,IAAA,IAAA,CAAK3F,MAAL,CAAY9J,UAA9B,EAA0C;IACtCqK,QAAAA,KAAK,IAAIzD,cAAT,CAAA;IACH,OAFD,MAEO;IACH6D,QAAAA,MAAM,IAAI7D,cAAV,CAAA;IACH,OAAA;IACJ,KAAA;;IACD,IAAA,IAAIyV,WAAW,GAAG,IAAKrC,CAAAA,aAAL,CAAmB3P,KAArC,CAAA;IACA,IAAA,IAAIiS,YAAY,GAAG,IAAKtC,CAAAA,aAAL,CAAmBvP,MAAtC,CAAA;IACA,IAAA,MAAM9J,MAAM,GAAGyI,MAAM,CAACzI,MAAtB,CAAA;IACA,IAAA,IAAIoZ,IAAI,GAAI,CAAC1P,KAAK,GAAGgS,WAAT,IAAwB,CAApC,CAAA;IACA,IAAA,IAAIvC,GAAG,GAAI,CAACrP,MAAM,GAAG6R,YAAV,IAA0B,CAArC,CAAA;;IACA,IAAA,IAAI3b,MAAM,KAAK,GAAX,IAAkBA,MAAM,KAAK,EAAjC,EAAqC;IACjC0b,MAAAA,WAAW,GAAG,IAAKrC,CAAAA,aAAL,CAAmBvP,MAAjC,CAAA;IACA6R,MAAAA,YAAY,GAAG,IAAKtC,CAAAA,aAAL,CAAmB3P,KAAlC,CAAA;IACH,KAAA;;IAED,IAAA,MAAMkS,MAAM,GAAGlS,KAAK,GAAGgS,WAAvB,CAAA;IACA,IAAA,MAAMG,MAAM,GAAG/R,MAAM,GAAG6R,YAAxB,CAAA;IAEA,IAAIG,IAAAA,KAAK,GAAGF,MAAM,GAAGC,MAAT,GAAkBA,MAAlB,GAA2BD,MAAvC,CAzBK;;IA2BL,IAAA,IAAI,CAACnT,MAAM,CAACvK,QAAZ,EAAsB;IAClB,MAAI0d,IAAAA,MAAM,KAAKC,MAAf,EAAuB;IACnBC,QAAAA,KAAK,GAAGF,MAAM,GAAG,GAAT,GAAeC,MAAvB,CAAA;IACH,OAAA;IACJ,KA/BI;;;IAiCL,IAAIpT,IAAAA,MAAM,CAACtK,YAAX,EAAyB;IACrB2d,MAAAA,KAAK,GAAGF,MAAM,GAAGC,MAAT,GAAkBD,MAAlB,GAA2BC,MAAnC,CAAA;IACH,KAAA;;IACD,IAAA,IAAIE,SAAS,GAAG,QAAWD,GAAAA,KAAX,GAAmB,GAAnC,CAAA;;IAEA,IAAA,IAAI9b,MAAJ,EAAY;IACR+b,MAAAA,SAAS,IAAI,UAAa/b,GAAAA,MAAb,GAAsB,MAAnC,CAAA;IACH,KAAA;;IAED,IAAA,IAAA,CAAKqZ,aAAL,CAAmBvL,KAAnB,CAAyBiO,SAAzB,GAAqCA,SAArC,CAAA;IACA,IAAK1C,IAAAA,CAAAA,aAAL,CAAmBvL,KAAnB,CAAyBsL,IAAzB,GAAgCA,IAAI,GAAG,IAAvC,CAAA;IACA,IAAKC,IAAAA,CAAAA,aAAL,CAAmBvL,KAAnB,CAAyBqL,GAAzB,GAA+BA,GAAG,GAAG,IAArC,CAAA;IACH,GAAA;;IAxNuD;;ICT7C,MAAM6C,WAAN,SAA0BnD,cAA1B,CAAuC;IAClDjR,EAAAA,WAAW,CAACuB,MAAD,EAAS;IAChB,IAAA,KAAA,EAAA,CAAA;IACA,IAAKA,IAAAA,CAAAA,MAAL,GAAcA,MAAd,CAAA;IACA,IAAA,MAAMkQ,aAAa,GAAGlN,QAAQ,CAACC,aAAT,CAAuB,OAAvB,CAAtB,CAAA;IACAiN,IAAAA,aAAa,CAAC4C,KAAd,GAAsB,IAAtB,CAAA;IACA5C,IAAAA,aAAa,CAACvL,KAAd,CAAoBoL,QAApB,GAA+B,UAA/B,CAAA;IACAG,IAAAA,aAAa,CAACvL,KAAd,CAAoBqL,GAApB,GAA0B,CAA1B,CAAA;IACAE,IAAAA,aAAa,CAACvL,KAAd,CAAoBsL,IAApB,GAA2B,CAA3B,CAAA;IACAjQ,IAAAA,MAAM,CAACK,UAAP,CAAkB8P,WAAlB,CAA8BD,aAA9B,CAAA,CAAA;IACA,IAAKA,IAAAA,CAAAA,aAAL,GAAqBA,aAArB,CAAA;IACA,IAAA,IAAA,CAAK5W,SAAL,GAAiB;IACbiH,MAAAA,KAAK,EAAE,EADM;IAEbI,MAAAA,MAAM,EAAE,EAFK;IAGbkP,MAAAA,OAAO,EAAE,EAAA;IAHI,KAAjB,CAAA;IAKA,IAAA,MAAMjR,IAAI,GAAG,IAAKoB,CAAAA,MAAL,CAAYpB,IAAzB,CAAA;;IACA,IAAA,IAAIA,IAAI,CAAC1H,MAAL,IAAe0H,IAAI,CAACzH,iBAAxB,EAA2C;IACvC,MAAA,IAAA,CAAK4b,cAAL,GAAsB,IAAIC,yBAAJ,CAA8B;IAACC,QAAAA,IAAI,EAAE,OAAA;IAAP,OAA9B,CAAtB,CAAA;IACA/C,MAAAA,aAAa,CAACgD,SAAd,GAA0B,IAAIC,WAAJ,CAAgB,CAAC,IAAA,CAAKJ,cAAN,CAAhB,CAA1B,CAAA;IACA,MAAKK,IAAAA,CAAAA,OAAL,GAAe,IAAKL,CAAAA,cAAL,CAAoBM,QAApB,CAA6BC,SAA7B,EAAf,CAAA;IACH,KAAA;;IAED,IAAA,IAAA,CAAK/Y,MAAL,EAAA,CAAA;IAEA,IAAM,MAAA;IAAC2E,MAAAA,KAAAA;IAAD,KAAU,GAAA,IAAA,CAAKc,MAAL,CAAYuJ,MAA5B,CAAA;IAEArK,IAAAA,KAAK,CAAC,IAAA,CAAKgR,aAAN,EAAqB,SAArB,EAAgC,MAAM;IACvC,MAAKlQ,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,OAAtB,EAA+B,SAA/B,CAAA,CAAA;IACH,KAFI,CAAL,CAAA;IAIAyF,IAAAA,KAAK,CAAC,IAAA,CAAKgR,aAAN,EAAqB,SAArB,EAAgC,MAAM;IACvC,MAAA,IAAA,CAAKlQ,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAACoC,YAAxB,CAAA,CAAA;IACH,KAFI,CAAL,CAAA;IAIAgE,IAAAA,KAAK,CAAC,IAAKgR,CAAAA,aAAN,EAAqB,YAArB,EAAoCnQ,KAAD,IAAW;IAElD,KAFI,CAAL,CAAA;IAIA,IAAKC,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,OAAtB,EAA+B,MAA/B,CAAA,CAAA;IACH,GAAA;;IAEDoB,EAAAA,OAAO,GAAG;IACN,IAAA,IAAA,CAAKmF,MAAL,CAAYK,UAAZ,CAAuBsQ,WAAvB,CAAmC,KAAKT,aAAxC,CAAA,CAAA;;IACA,IAAI,IAAA,IAAA,CAAKA,aAAT,EAAwB;IACpB,MAAA,IAAA,CAAKA,aAAL,CAAmBqD,GAAnB,GAAyB,EAAzB,CAAA;IACA,MAAKrD,IAAAA,CAAAA,aAAL,GAAqB,IAArB,CAAA;IACH,KAAA;;IACD,IAAI,IAAA,IAAA,CAAK6C,cAAT,EAAyB;IACrB,MAAKA,IAAAA,CAAAA,cAAL,GAAsB,IAAtB,CAAA;IACH,KAAA;;IACD,IAAI,IAAA,IAAA,CAAKK,OAAT,EAAkB;IACd,MAAKL,IAAAA,CAAAA,cAAL,GAAsB,IAAtB,CAAA;IACH,KAAA;;IAGD,IAAKrb,IAAAA,CAAAA,IAAL,GAAY,KAAZ,CAAA;IACA,IAAA,IAAA,CAAK8R,GAAL,EAAA,CAAA;IACA,IAAKxJ,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,OAAtB,EAA+B,SAA/B,CAAA,CAAA;IACH,GAAA;;IAEDrD,EAAAA,IAAI,GAAG;IACH;IACA,IAAK8Z,IAAAA,CAAAA,aAAL,CAAmB9Z,IAAnB,EAAA,CAAA;IACH,GAAA;;IAED8b,EAAAA,SAAS,GAAG,EAEX;;IAED/b,EAAAA,UAAU,CAACob,QAAD,EAAWC,MAAX,EAAmBC,OAAnB,EAA4BpP,IAA5B,EAAkC;IACxCkP,IAAAA,QAAQ,GAAGA,QAAQ,IAAI9N,GAAG,EAA1B,CAAA;IACApB,IAAAA,IAAI,GAAGA,IAAI,IAAIpG,eAAe,CAACC,QAA/B,CAAA;IACA,IAAA,MAAMwV,UAAU,GAAG;IACfC,MAAAA,GAAG,EAAE,WADU;IAEfC,MAAAA,IAAI,EAAE,YAFS;IAGfC,MAAAA,IAAI,EAAE,YAAA;IAHS,KAAnB,CAAA;IAKA,IAAIC,IAAAA,cAAc,GAAG,IAArB,CAAA;;IACA,IAAI,IAAA,CAACJ,UAAU,CAACF,MAAD,CAAX,IAAuBvV,eAAe,CAACuV,MAAD,CAA1C,EAAoD;IAChDnP,MAAAA,IAAI,GAAGmP,MAAP,CAAA;IACAA,MAAAA,MAAM,GAAG,KAAT,CAAA;IACAC,MAAAA,OAAO,GAAG9J,SAAV,CAAA;IACH,KAAA;;IACD,IAAA,IAAI,OAAO8J,OAAP,KAAmB,QAAvB,EAAiC;IAC7BpP,MAAAA,IAAI,GAAGoP,OAAP,CAAA;IACAA,MAAAA,OAAO,GAAG9J,SAAV,CAAA;IACH,KAAA;;IAED,IAAA,IAAI,OAAO8J,OAAP,KAAmB,WAAvB,EAAoC;IAChCK,MAAAA,cAAc,GAAGC,MAAM,CAACN,OAAD,CAAvB,CAAA;IACH,KAAA;;IACD,IAAM+B,MAAAA,MAAM,GAAG,IAAA,CAAKtD,aAApB,CAAA;IACA,IAAA,IAAIuD,MAAM,GAAGzQ,QAAQ,CAACC,aAAT,CAAuB,QAAvB,CAAb,CAAA;IACAwQ,IAAAA,MAAM,CAAClT,KAAP,GAAeiT,MAAM,CAACE,UAAtB,CAAA;IACAD,IAAAA,MAAM,CAAC9S,MAAP,GAAgB6S,MAAM,CAACG,WAAvB,CAAA;IACA,IAAA,MAAMC,OAAO,GAAGH,MAAM,CAAC7R,UAAP,CAAkB,IAAlB,CAAhB,CAAA;IACAgS,IAAAA,OAAO,CAACtC,SAAR,CAAkBkC,MAAlB,EAA0B,CAA1B,EAA6B,CAA7B,EAAgCC,MAAM,CAAClT,KAAvC,EAA8CkT,MAAM,CAAC9S,MAArD,CAAA,CAAA;IACA,IAAA,MAAMqB,OAAO,GAAGyR,MAAM,CAACzB,SAAP,CAAiB/V,eAAe,CAACuV,MAAD,CAAf,IAA2BvV,eAAe,CAAC0V,GAA5D,EAAiEG,cAAjE,CAAhB,CAAA;IACA,IAAA,MAAMG,IAAI,GAAGlQ,aAAa,CAACC,OAAD,CAA1B,CAAA;;IACA,IAAA,IAAIK,IAAI,KAAKpG,eAAe,CAACE,MAA7B,EAAqC;IACjC,MAAA,OAAO6F,OAAP,CAAA;IACH,KAFD,MAEO,IAAIK,IAAI,KAAKpG,eAAe,CAACG,IAA7B,EAAmC;IACtC,MAAA,OAAO6V,IAAP,CAAA;IACH,KAFM,MAEA,IAAI5P,IAAI,KAAKpG,eAAe,CAACC,QAA7B,EAAuC;IAC1C0G,MAAAA,WAAW,CAACqP,IAAD,EAAOV,QAAP,CAAX,CAAA;IACH,KAAA;IACJ,GAAA;;IAEDN,EAAAA,kBAAkB,GAAG;IACjB,IAAA,IAAA,CAAK1W,MAAL,EAAA,CAAA;IACH,GA/GiD;;;IAkHlD3C,EAAAA,MAAM,CAACsZ,GAAD,EAAM;IACR,IAAI,IAAA,IAAA,CAAKkC,OAAT,EAAkB;IACd,MAAA,IAAA,CAAKA,OAAL,CAAaS,KAAb,CAAmB3C,GAAG,CAAC9W,UAAvB,CAAA,CAAA;IACH,KAAA;IACJ,GAAA;;IAEDG,EAAAA,MAAM,GAAG;IACL,IAAA,IAAIgG,KAAK,GAAG,IAAKP,CAAAA,MAAL,CAAYO,KAAxB,CAAA;IACA,IAAA,IAAII,MAAM,GAAG,IAAKX,CAAAA,MAAL,CAAYW,MAAzB,CAAA;IACA,IAAA,MAAMrB,MAAM,GAAG,IAAKU,CAAAA,MAAL,CAAYpB,IAA3B,CAAA;IACA,IAAA,MAAM/H,MAAM,GAAGyI,MAAM,CAACzI,MAAtB,CAAA;;IACA,IAAIyI,IAAAA,MAAM,CAAC9I,UAAP,IAAqB,CAAC8I,MAAM,CAAC/I,eAAjC,EAAkD;IAC9C,MAAA,IAAIoP,QAAQ,EAAM,IAAA,IAAA,CAAK3F,MAAL,CAAY9J,UAA9B,EAA0C;IACtCqK,QAAAA,KAAK,IAAIzD,cAAT,CAAA;IACH,OAFD,MAEO;IACH6D,QAAAA,MAAM,IAAI7D,cAAV,CAAA;IACH,OAAA;IACJ,KAAA;;IAED,IAAA,IAAA,CAAKoT,aAAL,CAAmB3P,KAAnB,GAA2BA,KAA3B,CAAA;IACA,IAAA,IAAA,CAAK2P,aAAL,CAAmBvP,MAAnB,GAA4BA,MAA5B,CAAA;;IAEA,IAAA,IAAI9J,MAAM,KAAK,GAAX,IAAkBA,MAAM,KAAK,EAAjC,EAAqC;IACjC,MAAA,IAAA,CAAKqZ,aAAL,CAAmB3P,KAAnB,GAA2BI,MAA3B,CAAA;IACA,MAAA,IAAA,CAAKuP,aAAL,CAAmBvP,MAAnB,GAA4BJ,KAA5B,CAAA;IACH,KAAA;;IACD,IAAA,IAAIgS,WAAW,GAAG,IAAKrC,CAAAA,aAAL,CAAmB3P,KAArC,CAAA;IACA,IAAA,IAAIiS,YAAY,GAAG,IAAKtC,CAAAA,aAAL,CAAmBvP,MAAtC,CAAA;IACA,IAAA,IAAIsP,IAAI,GAAI,CAAC1P,KAAK,GAAGgS,WAAT,IAAwB,CAApC,CAAA;IACA,IAAA,IAAIvC,GAAG,GAAI,CAACrP,MAAM,GAAG6R,YAAV,IAA0B,CAArC,CAAA;IACA,IAAA,IAAIsB,UAAU,GAAG,SAAjB,CAxBK;IA2BL;IAEA;;IACA,IAAA,IAAI,CAACxU,MAAM,CAACvK,QAAZ,EAAsB;IAClB+e,MAAAA,UAAU,GAAG,MAAb,CAAA;IACH,KAhCI;;;IAmCL,IAAIxU,IAAAA,MAAM,CAACtK,YAAX,EAAyB;IACrB8e,MAAAA,UAAU,GAAG,MAAb,CAAA;IACH,KAAA;;IACD,IAAA,IAAA,CAAK5D,aAAL,CAAmBvL,KAAnB,CAAyBoP,SAAzB,GAAqCD,UAArC,CAAA;IACA,IAAK5D,IAAAA,CAAAA,aAAL,CAAmBvL,KAAnB,CAAyBiO,SAAzB,GAAqC,SAAA,GAAY/b,MAAZ,GAAqB,MAA1D,CAAA;IACA,IAAKqZ,IAAAA,CAAAA,aAAL,CAAmBvL,KAAnB,CAAyBsL,IAAzB,GAAgCA,IAAI,GAAG,IAAvC,CAAA;IACA,IAAKC,IAAAA,CAAAA,aAAL,CAAmBvL,KAAnB,CAAyBqL,GAAzB,GAA+BA,GAAG,GAAG,IAArC,CAAA;IACH,GAAA;;IAlKiD;;ICFvC,MAAMgE,KAAN,CAAY;IACvBvV,EAAAA,WAAW,CAACuB,MAAD,EAAS;IAChB,IAAMiU,MAAAA,MAAM,GAAGD,KAAK,CAACE,gBAAN,CAAuBlU,MAAM,CAACpB,IAA9B,CAAf,CAAA;IACA,IAAA,OAAO,IAAIqV,MAAJ,CAAWjU,MAAX,CAAP,CAAA;IACH,GAAA;;IAEsB,EAAhBkU,OAAAA,gBAAgB,CAACC,GAAD,EAAM;IACzB,IAAA,IAAIA,GAAG,CAAC/c,MAAJ,IAAe+c,GAAG,CAACjd,MAAJ,IAAc,CAACid,GAAG,CAAC9c,YAAnB,IAAmC8c,GAAG,CAAChd,iBAA1D,EAA8E;IAC1E,MAAA,OAAO0b,WAAP,CAAA;IACH,KAFD,MAEO;IACH,MAAA,OAAO/C,iBAAP,CAAA;IACH,KAAA;IACJ,GAAA;;IAZsB;;ICCZ,MAAMsE,kBAAN,SAAiCjK,OAAjC,CAAyC;IACpD1L,EAAAA,WAAW,CAACuB,MAAD,EAAS;IAChB,IAAA,KAAA,EAAA,CAAA;IACA,IAAKqU,IAAAA,CAAAA,UAAL,GAAkB,EAAlB,CAAA;IACA,IAAKrU,IAAAA,CAAAA,MAAL,GAAcA,MAAd,CAAA;IACA,IAAKsU,IAAAA,CAAAA,UAAL,GAAkB,IAAlB,CAAA;IACA,IAAKC,IAAAA,CAAAA,iBAAL,GAAyB,KAAzB,CAAA;IACA,IAAKC,IAAAA,CAAAA,mBAAL,GAA2B,IAA3B,CAAA;IAEA,IAAA,IAAA,CAAKC,YAAL,GAAoB,KAAK/O,MAAM,CAACgP,YAAP,IAAuBhP,MAAM,CAACiP,kBAAnC,GAApB,CARgB;;IAUhB,IAAKC,IAAAA,CAAAA,QAAL,GAAgB,IAAKH,CAAAA,YAAL,CAAkBI,UAAlB,EAAhB,CAVgB;IAYhB;;IACA,IAAMC,MAAAA,MAAM,GAAG,IAAKL,CAAAA,YAAL,CAAkBM,kBAAlB,EAAf,CAbgB;;IAehBD,IAAAA,MAAM,CAAC3a,MAAP,GAAgB,IAAA,CAAKsa,YAAL,CAAkB/H,YAAlB,CAA+B,CAA/B,EAAkC,CAAlC,EAAqC,KAArC,CAAhB,CAfgB;IAiBhB;;IACAoI,IAAAA,MAAM,CAACE,OAAP,CAAe,KAAKP,YAAL,CAAkBQ,WAAjC,CAAA,CAlBgB;IAoBhB;;IACA,IAAIH,IAAAA,MAAM,CAACI,MAAX,EAAmB;IACfJ,MAAAA,MAAM,CAACI,MAAP,CAAc,CAAd,CAAA,CAAA;IACH,KAFD,MAEO;IACHJ,MAAAA,MAAM,CAACza,KAAP,CAAa,CAAb,CAAA,CAAA;IACH,KAAA;;IACD,IAAA,IAAA,CAAK8a,qBAAL,GAA6BL,MAA7B,CA1BgB;;IA4BhB,IAAKM,IAAAA,CAAAA,+BAAL,GAAuC,IAAKX,CAAAA,YAAL,CAAkBY,4BAAlB,EAAvC,CA5BgB;;IA8BhB,IAAA,IAAA,CAAKC,YAAL,CAAkB,IAAlB,CAAA,CA9BgB;;IAgChB,IAAA,IAAA,CAAKV,QAAL,CAAcW,IAAd,CAAmB9Q,KAAnB,GAA2B,CAA3B,CAAA;IAEA,IAAA,IAAA,CAAKxL,OAAL,GAAe,KAAf,CAlCgB;;IAoChB,IAAA,IAAA,CAAKuc,oBAAL,GAA4B;IACxBC,MAAAA,IAAI,EAAE,IAAA;IADkB,KAA5B,CAAA;IAKA,IAAA,IAAA,CAAKjc,SAAL,GAAiB;IACbqW,MAAAA,OAAO,EAAE,EADI;IAEb6F,MAAAA,QAAQ,EAAE,EAFG;IAGbC,MAAAA,UAAU,EAAE,EAAA;IAHC,KAAjB,CAAA;IAKA,IAAKje,IAAAA,CAAAA,IAAL,GAAY,KAAZ,CAAA;IACA,IAAA,IAAA,CAAK3B,QAAL,GAAgB,KAAhB,CA/CgB;;IAkDhB,IAAA,IAAA,CAAKuT,EAAL,CAAQxQ,MAAM,CAACsC,cAAf,EAAgCwa,OAAD,IAAa;IACxC;IACA,MAAKJ,IAAAA,CAAAA,oBAAL,GAA4BI,OAA5B,CAAA;IACH,KAHD,CAAA,CAAA;IAKA,IAAK5V,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,cAAtB,EAAsC,MAAtC,CAAA,CAAA;IACH,GAAA;;IAGDoB,EAAAA,OAAO,GAAG;IACN,IAAA,IAAA,CAAKgb,UAAL,EAAA,CAAA;IACA,IAAKpB,IAAAA,CAAAA,YAAL,CAAkB7b,KAAlB,EAAA,CAAA;IACA,IAAK6b,IAAAA,CAAAA,YAAL,GAAoB,IAApB,CAAA;IACA,IAAKG,IAAAA,CAAAA,QAAL,GAAgB,IAAhB,CAAA;IACA,IAAKld,IAAAA,CAAAA,IAAL,GAAY,KAAZ,CAAA;IACA,IAAK3B,IAAAA,CAAAA,QAAL,GAAgB,KAAhB,CAAA;IACA,IAAKkD,IAAAA,CAAAA,OAAL,GAAe,KAAf,CAAA;;IAEA,IAAI,IAAA,IAAA,CAAKqb,UAAT,EAAqB;IACjB,MAAA,IAAA,CAAKA,UAAL,CAAgBwB,cAAhB,GAAiChV,IAAjC,CAAA;IACA,MAAKwT,IAAAA,CAAAA,UAAL,GAAkB,IAAlB,CAAA;IACH,KAAA;;IACD,IAAKa,IAAAA,CAAAA,qBAAL,GAA6B,IAA7B,CAAA;IACA,IAAKC,IAAAA,CAAAA,+BAAL,GAAuC,IAAvC,CAAA;IACA,IAAKb,IAAAA,CAAAA,iBAAL,GAAyB,KAAzB,CAAA;IACA,IAAA,IAAA,CAAKiB,oBAAL,GAA4B;IACxBC,MAAAA,IAAI,EAAE,IAAA;IADkB,KAA5B,CAAA;IAGA,IAAA,IAAA,CAAKjc,SAAL,GAAiB;IACbqW,MAAAA,OAAO,EAAE,EADI;IAEb6F,MAAAA,QAAQ,EAAE,EAFG;IAGbC,MAAAA,UAAU,EAAE,EAAA;IAHC,KAAjB,CAAA;IAKA,IAAA,IAAA,CAAKnM,GAAL,EAAA,CAAA;IACA,IAAKxJ,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,cAAtB,EAAsC,SAAtC,CAAA,CAAA;IACH,GAAA;;IAEDsc,EAAAA,eAAe,CAAClL,IAAD,EAAO;IAClB,IAAIA,IAAAA,IAAI,CAAC+E,WAAT,EAAsB;IAClB,MAAKpW,IAAAA,CAAAA,SAAL,CAAeqW,OAAf,GAAyBpT,cAAc,CAACoO,IAAI,CAAC+E,WAAN,CAAvC,CAAA;IACH,KAAA;;IAED,IAAI/E,IAAAA,IAAI,CAAC6K,QAAT,EAAmB;IACf,MAAA,IAAA,CAAKlc,SAAL,CAAekc,QAAf,GAA0B7K,IAAI,CAAC6K,QAA/B,CAAA;IACH,KAAA;;IAED,IAAI7K,IAAAA,IAAI,CAAC8K,UAAT,EAAqB;IACjB,MAAA,IAAA,CAAKnc,SAAL,CAAemc,UAAf,GAA4B9K,IAAI,CAAC8K,UAAjC,CAAA;IACH,KAXiB;;;IAclB,IAAA,IAAI,KAAKnc,SAAL,CAAemc,UAAf,IAA6B,IAAA,CAAKnc,SAAL,CAAekc,QAA5C,IAAwD,IAAA,CAAKlc,SAAL,CAAeqW,OAAvE,IAAkF,CAAC,IAAA,CAAKnY,IAA5F,EAAkG;IAC9F,MAAKsI,IAAAA,CAAAA,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAACU,SAAxB,EAAmC,IAAA,CAAKA,SAAxC,CAAA,CAAA;IACA,MAAK9B,IAAAA,CAAAA,IAAL,GAAY,IAAZ,CAAA;IACH,KAAA;IACJ,GA1GmD;;;IA6GvC,EAAA,IAATse,SAAS,GAAG;IACZ,IAAA,OAAO,KAAK/c,OAAZ,CAAA;IACH,GAAA;;IAES,EAAA,IAANgd,MAAM,GAAG;IACT,IAAO,OAAA,IAAA,CAAKrB,QAAL,CAAcW,IAAd,CAAmB9Q,KAAnB,KAA6B,CAA7B,IAAkC,IAAKyR,CAAAA,gBAAL,EAAzC,CAAA;IACH,GAAA;;IAES,EAAA,IAANC,MAAM,GAAG;IACT,IAAA,OAAO,IAAKvB,CAAAA,QAAL,CAAcW,IAAd,CAAmB9Q,KAA1B,CAAA;IACH,GAAA;;IAEa,EAAA,IAAV2R,UAAU,GAAG;IACb,IAAO,OAAA,IAAA,CAAK/B,UAAL,CAAgB7S,MAAvB,CAAA;IACH,GAAA;;IAGD6U,EAAAA,cAAc,GAAG;IACb,IAAKpd,IAAAA,CAAAA,OAAL,GAAe,IAAf,CAAA;;IAEA,IAAI,IAAA,IAAA,CAAKsb,iBAAT,EAA4B;IACxB,MAAA,OAAA;IACH,KAAA;;IACD,IAAA,MAAMmB,QAAQ,GAAG,IAAKlc,CAAAA,SAAL,CAAekc,QAAhC,CAAA;IAEA,IAAA,MAAMpB,UAAU,GAAG,IAAKG,CAAAA,YAAL,CAAkB6B,qBAAlB,CAAwC,IAAxC,EAA8C,CAA9C,EAAiDZ,QAAjD,CAAnB,CARa;;IAUbpB,IAAAA,UAAU,CAACwB,cAAX,GAA6BS,oBAAD,IAA0B;IAClD,MAAA,MAAMC,YAAY,GAAGD,oBAAoB,CAACC,YAA1C,CAAA;;IAEA,MAAA,IAAI,KAAKnC,UAAL,CAAgB7S,MAAhB,IAA0B,IAAA,CAAKvI,OAAnC,EAA4C;IACxC;IACA,QAAA,IAAI,CAAC,IAAA,CAAK+G,MAAL,CAAYpB,IAAZ,CAAiB1H,MAAlB,IAA4B,CAAC,KAAK8I,MAAL,CAAYpB,IAAZ,CAAiBxH,MAAlD,EAA0D;IACtD;IACA;IACA,UAAA,IAAI,KAAKoe,oBAAL,CAA0BC,IAA1B,GAAiCtX,qBAArC,EAA4D;IACxD,YAAA,IAAA,CAAK6B,MAAL,CAAY9K,KAAZ,CAAkB6J,IAAlB,CAAuB,cAAvB,EAAwC,CAAA,qCAAA,EAAuC,KAAKyW,oBAAL,CAA0BC,IAAK,CAAA,SAAA,CAA9G,EADwD;;IAGxD,YAAA,OAAA;IACH,WAJD;IAMA;IANA,eAOK,IAAI,KAAKD,oBAAL,CAA0BC,IAA1B,GAAiC,CAACtX,qBAAtC,EAA6D;IAC9D,YAAA,IAAA,CAAK6B,MAAL,CAAY9K,KAAZ,CAAkB6J,IAAlB,CAAuB,cAAvB,EAAwC,CAAA,qCAAA,EAAuC,KAAKyW,oBAAL,CAA0BC,IAAK,CAAA,UAAA,CAA9G,EAD8D;;IAI9D,YAAIgB,IAAAA,UAAU,GAAG,IAAKpC,CAAAA,UAAL,CAAgBqC,KAAhB,EAAjB,CAJ8D;;IAM9D,YAAA,OAAQD,UAAU,CAACtF,EAAX,GAAgB,IAAKnR,CAAAA,MAAL,CAAY2I,cAA5B,GAA6C,CAACxK,qBAA/C,IAAyE,IAAKkW,CAAAA,UAAL,CAAgB7S,MAAhB,GAAyB,CAAzG,EAA4G;IACxG;IACAiV,cAAAA,UAAU,GAAG,IAAA,CAAKpC,UAAL,CAAgBqC,KAAhB,EAAb,CAAA;IACH,aAAA;;IAED,YAAA,IAAI,KAAKrC,UAAL,CAAgB7S,MAAhB,KAA2B,CAA/B,EAAkC;IAC9B,cAAA,OAAA;IACH,aAAA;IACJ,WAAA;IACJ,SAAA;;IAED,QAAA,IAAI,KAAK6S,UAAL,CAAgB7S,MAAhB,KAA2B,CAA/B,EAAkC;IAC9B,UAAA,OAAA;IACH,SAAA;;IAED,QAAMiV,MAAAA,UAAU,GAAG,IAAKpC,CAAAA,UAAL,CAAgBqC,KAAhB,EAAnB,CAjCwC;;IAoCxC,QAAA,IAAID,UAAU,IAAIA,UAAU,CAACtF,EAA7B,EAAiC;IAC7B,UAAA,IAAA,CAAKnR,MAAL,CAAY2W,cAAZ,GAA6BF,UAAU,CAACtF,EAAxC,CAAA;IACH,SAAA;;IAED,QAAK,KAAA,IAAIyF,OAAO,GAAG,CAAnB,EAAsBA,OAAO,GAAGlB,QAAhC,EAA0CkB,OAAO,EAAjD,EAAqD;IACjD,UAAA,MAAMvS,CAAC,GAAGoS,UAAU,CAACtc,MAAX,CAAkByc,OAAlB,CAAV,CAAA;IACA,UAAA,MAAMC,YAAY,GAAGL,YAAY,CAACM,cAAb,CAA4BF,OAA5B,CAArB,CAAA;;IACA,UAAK,KAAA,IAAI9L,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,IAApB,EAA0BA,CAAC,EAA3B,EAA+B;IAC3B+L,YAAAA,YAAY,CAAC/L,CAAD,CAAZ,GAAkBzG,CAAC,CAACyG,CAAD,CAAD,IAAQ,CAA1B,CAAA;IACH,WAAA;IACJ,SAAA;IACJ,OAAA;IACJ,KAnDD,CAAA;;IAqDAwJ,IAAAA,UAAU,CAACU,OAAX,CAAmB,KAAKJ,QAAxB,CAAA,CAAA;IACA,IAAKN,IAAAA,CAAAA,UAAL,GAAkBA,UAAlB,CAAA;IACA,IAAA,IAAA,CAAKM,QAAL,CAAcI,OAAd,CAAsB,IAAKP,CAAAA,YAAL,CAAkBQ,WAAxC,CAAA,CAAA;IACA,IAAA,IAAA,CAAKL,QAAL,CAAcI,OAAd,CAAsB,KAAKI,+BAA3B,CAAA,CAAA;IACA,IAAKb,IAAAA,CAAAA,iBAAL,GAAyB,IAAzB,CAAA;IACH,GAAA;;IAEDpb,EAAAA,IAAI,CAAC4d,IAAD,EAAO;IACP,IAAA,IAAIA,IAAJ,EAAU;IACN,MAAI,IAAA,CAAC,IAAKd,CAAAA,MAAV,EAAkB;IACd,QAAKjW,IAAAA,CAAAA,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAACK,IAAxB,EAA8B4d,IAA9B,CAAA,CAAA;IACH,OAAA;;IACD,MAAKC,IAAAA,CAAAA,SAAL,CAAe,CAAf,CAAA,CAAA;IACA,MAAK1B,IAAAA,CAAAA,YAAL,CAAkB,KAAlB,CAAA,CAAA;IACA,MAAA,IAAA,CAAKlD,KAAL,EAAA,CAAA;IACH,KAPD,MAOO;IACH,MAAI,IAAA,IAAA,CAAK6D,MAAT,EAAiB;IACb,QAAKjW,IAAAA,CAAAA,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAACK,IAAxB,EAA8B4d,IAA9B,CAAA,CAAA;IACH,OAAA;;IACD,MAAKC,IAAAA,CAAAA,SAAL,CAAe,GAAf,CAAA,CAAA;IACA,MAAK1B,IAAAA,CAAAA,YAAL,CAAkB,IAAlB,CAAA,CAAA;IACH,KAAA;IACJ,GAAA;;IAED0B,EAAAA,SAAS,CAACb,MAAD,EAAS;IACdA,IAAAA,MAAM,GAAGnR,UAAU,CAACmR,MAAD,CAAV,CAAmBnP,OAAnB,CAA2B,CAA3B,CAAT,CAAA;;IACA,IAAA,IAAIiQ,KAAK,CAACd,MAAD,CAAT,EAAmB;IACf,MAAA,OAAA;IACH,KAAA;;IACD,IAAKb,IAAAA,CAAAA,YAAL,CAAkB,IAAlB,CAAA,CAAA;IACAa,IAAAA,MAAM,GAAGjS,KAAK,CAACiS,MAAD,EAAS,CAAT,EAAY,CAAZ,CAAd,CAAA;IACA,IAAA,IAAA,CAAKvB,QAAL,CAAcW,IAAd,CAAmB9Q,KAAnB,GAA2B0R,MAA3B,CAAA;IACA,IAAKvB,IAAAA,CAAAA,QAAL,CAAcW,IAAd,CAAmB2B,cAAnB,CAAkCf,MAAlC,EAA0C,IAAA,CAAK1B,YAAL,CAAkB0C,WAA5D,CAAA,CAAA;IACA,IAAKnX,IAAAA,CAAAA,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAAC8B,YAAxB,EAAsC,IAAA,CAAKoF,MAAL,CAAYmW,MAAlD,CAAA,CAAA;IACH,GAAA;;IAEDN,EAAAA,UAAU,GAAG;IACT,IAAI,IAAA,IAAA,CAAKtB,iBAAT,EAA4B;IACxB,MAAKD,IAAAA,CAAAA,UAAL,IAAmB,IAAKA,CAAAA,UAAL,CAAgB8C,UAAhB,CAA2B,IAAKxC,CAAAA,QAAhC,CAAnB,CAAA;IACA,MAAKA,IAAAA,CAAAA,QAAL,IAAiB,IAAA,CAAKA,QAAL,CAAcwC,UAAd,CAAyB,IAAK3C,CAAAA,YAAL,CAAkBQ,WAA3C,CAAjB,CAAA;IACA,MAAKL,IAAAA,CAAAA,QAAL,IAAiB,IAAKA,CAAAA,QAAL,CAAcwC,UAAd,CAAyB,IAAKhC,CAAAA,+BAA9B,CAAjB,CAAA;IACH,KAAA;;IACD,IAAA,IAAA,CAAKhD,KAAL,EAAA,CAAA;IACH,GAxOmD;;;IA2OpDkD,EAAAA,YAAY,CAACyB,IAAD,EAAO;IACf,IAAA,IAAIA,IAAJ,EAAU;IACN,MAAA,IAAI,KAAKtC,YAAL,CAAkB4C,KAAlB,KAA4B,WAAhC,EAA6C;IACzC;IACA,QAAK5C,IAAAA,CAAAA,YAAL,CAAkB6C,MAAlB,EAAA,CAAA;IACH,OAAA;IACJ,KALD,MAKO;IACH,MAAA,IAAI,KAAK7C,YAAL,CAAkB4C,KAAlB,KAA4B,SAAhC,EAA2C;IACvC;IACA,QAAK5C,IAAAA,CAAAA,YAAL,CAAkB8C,OAAlB,EAAA,CAAA;IACH,OAAA;IACJ,KAAA;IACJ,GAAA;;IAEDC,EAAAA,cAAc,GAAG;IACb,IAAA,OAAO,IAAK/C,CAAAA,YAAL,CAAkB4C,KAAlB,KAA4B,SAAnC,CAAA;IACH,GAAA;;IAEDnB,EAAAA,gBAAgB,GAAG;IACf,IAAA,OAAO,IAAKzB,CAAAA,YAAL,CAAkB4C,KAAlB,KAA4B,WAAnC,CAAA;IACH,GAAA;;IAEDjF,EAAAA,KAAK,GAAG;IACJ,IAAKiC,IAAAA,CAAAA,UAAL,GAAkB,EAAlB,CAAA;IACH,GAAA;;IAEDje,EAAAA,IAAI,CAAC+D,MAAD,EAASgX,EAAT,EAAa;IACb;IACA,IAAI,IAAA,IAAA,CAAK8E,MAAT,EAAiB;IACb,MAAA,OAAA;IACH,KAAA;;IAED,IAAKlgB,IAAAA,CAAAA,QAAL,GAAgB,IAAhB,CAAA;IAEA,IAAKse,IAAAA,CAAAA,UAAL,CAAgBxU,IAAhB,CAAqB;IACjB1F,MAAAA,MADiB;IAEjBgX,MAAAA,EAAAA;IAFiB,KAArB,CAAA,CAAA;;IAKA,IAAA,IAAI,KAAKkD,UAAL,CAAgB7S,MAAhB,GAAyB,EAA7B,EAAiC;IAC7B,MAAA,IAAA,CAAKxB,MAAL,CAAY9K,KAAZ,CAAkB6J,IAAlB,CAAuB,cAAvB,EAAwC,CAAA,qBAAA,EAAuB,KAAKsV,UAAL,CAAgB7S,MAAO,CAAA,CAAtF,EAD6B;;IAI7B,MAAA,IAAI,KAAK6S,UAAL,CAAgB7S,MAAhB,GAAyB,EAA7B,EAAiC;IAC7B,QAAK6S,IAAAA,CAAAA,UAAL,CAAgBqC,KAAhB,EAAA,CAAA;IACH,OAAA;IACJ,KApBY;;IAsBhB,GAAA;;IAEDxd,EAAAA,KAAK,GAAG;IACJ,IAAA,IAAA,CAAKsc,oBAAL,GAA4B;IACxBC,MAAAA,IAAI,EAAE,IAAA;IADkB,KAA5B,CAAA;IAGA,IAAKxc,IAAAA,CAAAA,OAAL,GAAe,KAAf,CAAA;IACA,IAAA,IAAA,CAAKmZ,KAAL,EAAA,CAAA;IACH,GAAA;;IAEDkF,EAAAA,MAAM,GAAG;IACL,IAAKre,IAAAA,CAAAA,OAAL,GAAe,IAAf,CAAA;IACH,GAAA;;IAvSmD;;ICDzC,MAAMwe,KAAN,CAAY;IACvBhZ,EAAAA,WAAW,CAACuB,MAAD,EAAS;IAChB,IAAA,MAAMiU,MAAM,GAAGwD,KAAK,CAACvD,gBAAN,EAAf,CAAA;IACA,IAAA,OAAO,IAAID,MAAJ,CAAWjU,MAAX,CAAP,CAAA;IACH,GAAA;;IAEsB,EAAA,OAAhBkU,gBAAgB,GAAG;IACtB,IAAA,OAAOE,kBAAP,CAAA;IACH,GAAA;;IARsB;;ICCZ,MAAMsD,WAAN,SAA0BvN,OAA1B,CAAkC;IAC7C1L,EAAAA,WAAW,CAACuB,MAAD,EAAS;IAChB,IAAA,KAAA,EAAA,CAAA;IACA,IAAKA,IAAAA,CAAAA,MAAL,GAAcA,MAAd,CAAA;IACA,IAAK/G,IAAAA,CAAAA,OAAL,GAAe,KAAf,CAAA;IAEA,IAAA,IAAA,CAAK0e,eAAL,GAAuB,IAAIC,eAAJ,EAAvB,CALgB;;IAOhB,IAAA,IAAA,CAAKC,UAAL,GAAkB3S,eAAe,CAAC4S,IAAI,IAAI;IACtC9X,MAAAA,MAAM,CAACoJ,IAAP,CAAYtQ,MAAM,CAACf,IAAnB,EAAyB,CAAC+f,IAAI,GAAG,IAAR,EAAc9Q,OAAd,CAAsB,CAAtB,CAAzB,CAAA,CAAA;IACH,KAFgC,CAAjC,CAAA;IAGAhH,IAAAA,MAAM,CAAC9K,KAAP,CAAauE,GAAb,CAAiB,aAAjB,EAAgC,MAAhC,CAAA,CAAA;IACH,GAAA;;IAEDoB,EAAAA,OAAO,GAAG;IACN,IAAA,IAAA,CAAKkd,KAAL,EAAA,CAAA;IACA,IAAA,IAAA,CAAKvO,GAAL,EAAA,CAAA;IACA,IAAKqO,IAAAA,CAAAA,UAAL,GAAkB,IAAlB,CAAA;IACA,IAAK7X,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,aAAtB,EAAqC,SAArC,CAAA,CAAA;IACH,GAAA;;IAEDue,EAAAA,WAAW,CAACphB,GAAD,EAAM;IACb,IAAM,MAAA;IAACqhB,MAAAA,KAAAA;IAAD,KAAA,GAAU,KAAKjY,MAArB,CAAA;IACA,IAAA,IAAA,CAAKA,MAAL,CAAYkY,MAAZ,CAAmBjQ,WAAnB,GAAiCxE,GAAG,EAApC,CAAA;IACAjP,IAAAA,KAAK,CAACoC,GAAD,EAAM;IAACuhB,MAAAA,MAAM,EAAE,IAAKR,CAAAA,eAAL,CAAqBQ,MAAAA;IAA9B,KAAN,CAAL,CAAkDxO,IAAlD,CAAwDyO,GAAD,IAAS;IAC5D,MAAA,MAAMC,MAAM,GAAGD,GAAG,CAACE,IAAJ,CAASC,SAAT,EAAf,CAAA;IACA,MAAA,IAAA,CAAKnP,IAAL,CAAUtQ,MAAM,CAAC2B,aAAjB,CAAA,CAAA;;IACA,MAAM+d,MAAAA,SAAS,GAAG,MAAM;IACpBH,QAAAA,MAAM,CAACI,IAAP,EAAc9O,CAAAA,IAAd,CAAmB,IAAmB,IAAA;IAAA,UAAlB,IAAA;IAAC+O,YAAAA,IAAD;IAAOjU,YAAAA,KAAAA;IAAP,WAAkB,GAAA,IAAA,CAAA;;IAC9B,UAAA,IAAIiU,IAAJ,EAAU;IACNT,YAAAA,KAAK,CAACrf,KAAN,EAAA,CAAA;IACH,WAFD,MAEO;IACH,YAAKif,IAAAA,CAAAA,UAAL,IAAmB,IAAKA,CAAAA,UAAL,CAAgBpT,KAAK,CAACkU,UAAtB,CAAnB,CAAA;IACAV,YAAAA,KAAK,CAACW,QAAN,CAAenU,KAAf,CAAA,CAAA;IACA+T,YAAAA,SAAS,EAAA,CAAA;IACZ,WAAA;IACJ,SARL,CASE5O,CAAAA,KATF,CASS/H,CAAD,IAAO;IACXoW,UAAAA,KAAK,CAACrf,KAAN,EAAA,CADW;;IAGX,UAAA,IAAA,CAAKwQ,IAAL,CAAU7N,YAAY,CAACE,UAAvB,EAAmCoG,CAAnC,CAAA,CAAA;IACA,UAAK7B,IAAAA,CAAAA,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAACY,KAAxB,EAA+B6B,YAAY,CAACE,UAA5C,CAAA,CAAA;IACA,UAAA,IAAA,CAAKsc,KAAL,EAAA,CAAA;IACH,SAfD,CAAA,CAAA;IAgBH,OAjBD,CAAA;;IAkBAS,MAAAA,SAAS,EAAA,CAAA;IACZ,KAtBD,CAsBG5O,CAAAA,KAtBH,CAsBU/H,CAAD,IAAO;IACZ,MAAA,IAAA,CAAKkW,KAAL,EAAA,CAAA;IACA,MAAA,IAAA,CAAK3O,IAAL,CAAU7N,YAAY,CAACE,UAAvB,EAAmCoG,CAAnC,CAAA,CAAA;IACA,MAAK7B,IAAAA,CAAAA,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAACY,KAAxB,EAA+B6B,YAAY,CAACE,UAA5C,CAAA,CAAA;IACH,KA1BD,CAAA,CAAA;IA2BH,GAAA;;IAEDsc,EAAAA,KAAK,GAAG;IACJ,IAAI,IAAA,IAAA,CAAKJ,eAAT,EAA0B;IACtB,MAAKA,IAAAA,CAAAA,eAAL,CAAqBI,KAArB,EAAA,CAAA;IACA,MAAKJ,IAAAA,CAAAA,eAAL,GAAuB,IAAvB,CAAA;IACH,KAAA;IACJ,GAAA;;IA1D4C;;ICAlC,MAAMkB,eAAN,SAA8B1O,OAA9B,CAAsC;IACjD1L,EAAAA,WAAW,CAACuB,MAAD,EAAS;IAChB,IAAA,KAAA,EAAA,CAAA;IACA,IAAKA,IAAAA,CAAAA,MAAL,GAAcA,MAAd,CAAA;IACA,IAAK8Y,IAAAA,CAAAA,MAAL,GAAc,IAAd,CAAA;IACA,IAAA,IAAA,CAAKC,YAAL,GAAoBjd,gBAAgB,CAACC,UAArC,CAAA;IACA,IAAA,IAAA,CAAKid,KAAL,GAAa,IAAb,CALgB;;IAOhB,IAAA,IAAA,CAAKnB,UAAL,GAAkB3S,eAAe,CAAC4S,IAAI,IAAI;IACtC9X,MAAAA,MAAM,CAACoJ,IAAP,CAAYtQ,MAAM,CAACf,IAAnB,EAAyB,CAAC+f,IAAI,GAAG,IAAR,EAAc9Q,OAAd,CAAsB,CAAtB,CAAzB,CAAA,CAAA;IACH,KAFgC,CAAjC,CAAA;IAIAhH,IAAAA,MAAM,CAAC9K,KAAP,CAAauE,GAAb,CAAiB,iBAAjB,EAAoC,MAApC,CAAA,CAAA;IACH,GAAA;;IAEDoB,EAAAA,OAAO,GAAG;IACN,IAAI,IAAA,IAAA,CAAKie,MAAT,EAAiB;IACb,MAAKA,IAAAA,CAAAA,MAAL,CAAYlgB,KAAZ,EAAA,CAAA;IACA,MAAKkgB,IAAAA,CAAAA,MAAL,GAAc,IAAd,CAAA;IACH,KAAA;;IACD,IAAA,IAAA,CAAKC,YAAL,GAAoBjd,gBAAgB,CAACC,UAArC,CAAA;IACA,IAAK8b,IAAAA,CAAAA,UAAL,GAAkB,IAAlB,CAAA;IACA,IAAKmB,IAAAA,CAAAA,KAAL,GAAa,IAAb,CAAA;IACA,IAAA,IAAA,CAAKxP,GAAL,EAAA,CAAA;IACA,IAAKxJ,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,iBAAtB,EAAyC,SAAzC,CAAA,CAAA;IACH,GAAA;;IAEDwf,EAAAA,gBAAgB,GAAG;IACf,IAAMjZ,MAAAA,MAAM,GAAG,IAAA,CAAKA,MAApB,CAAA;IACA,IAAM,MAAA;IACF9K,MAAAA,KADE;IAEFqU,MAAAA,MAAM,EAAE;IAACrK,QAAAA,KAAAA;IAAD,OAFN;IAGF+Y,MAAAA,KAAAA;IAHE,KAAA,GAIFjY,MAJJ,CAAA;IAMA,IAAA,IAAA,CAAK8Y,MAAL,GAAc,IAAII,SAAJ,CAAc,IAAA,CAAKF,KAAnB,CAAd,CAAA;IACA,IAAA,IAAA,CAAKF,MAAL,CAAYK,UAAZ,GAAyB,aAAzB,CAAA;IACAja,IAAAA,KAAK,CAAC,IAAA,CAAK4Z,MAAN,EAAc,MAAd,EAAsB,MAAM;IAC7B,MAAA,IAAA,CAAK1P,IAAL,CAAUtQ,MAAM,CAAC2B,aAAjB,CAAA,CAAA;IACAvF,MAAAA,KAAK,CAACuE,GAAN,CAAU,iBAAV,EAA6B,aAA7B,CAAA,CAAA;IACA,MAAA,IAAA,CAAKsf,YAAL,GAAoBjd,gBAAgB,CAACE,IAArC,CAAA;IACH,KAJI,CAAL,CAAA;IAMAkD,IAAAA,KAAK,CAAC,IAAK4Z,CAAAA,MAAN,EAAc,SAAd,EAAyB/Y,KAAK,IAAI;IACnC,MAAK8X,IAAAA,CAAAA,UAAL,IAAmB,IAAA,CAAKA,UAAL,CAAgB9X,KAAK,CAAC8K,IAAN,CAAW8N,UAA3B,CAAnB,CAAA;;IACA,MAAA,IAAA,CAAKS,cAAL,CAAoBrZ,KAAK,CAAC8K,IAA1B,CAAA,CAAA;IACH,KAHI,CAAL,CAAA;IAMA3L,IAAAA,KAAK,CAAC,IAAA,CAAK4Z,MAAN,EAAc,OAAd,EAAuB,MAAM;IAC9B5jB,MAAAA,KAAK,CAACuE,GAAN,CAAU,iBAAV,EAA6B,cAA7B,CAAA,CAAA;IACA,MAAA,IAAA,CAAK2P,IAAL,CAAUtQ,MAAM,CAAC0B,SAAjB,CAAA,CAAA;IACA,MAAA,IAAA,CAAKue,YAAL,GAAoBjd,gBAAgB,CAAClD,KAArC,CAAA;IACH,KAJI,CAAL,CAAA;IAMAsG,IAAAA,KAAK,CAAC,IAAK4Z,CAAAA,MAAN,EAAc,OAAd,EAAuBpf,KAAK,IAAI;IACjCxE,MAAAA,KAAK,CAACuE,GAAN,CAAU,iBAAV,EAA6B,cAA7B,CAAA,CAAA;IACA,MAAA,IAAA,CAAK2P,IAAL,CAAU7N,YAAY,CAACG,cAAvB,EAAuChC,KAAvC,CAAA,CAAA;IACA,MAAKsG,IAAAA,CAAAA,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAACY,KAAxB,EAA+B6B,YAAY,CAACG,cAA5C,CAAA,CAAA;IACA,MAAA,IAAA,CAAKqd,YAAL,GAAoBjd,gBAAgB,CAACpC,KAArC,CAAA;IACAue,MAAAA,KAAK,CAACrf,KAAN,EAAA,CAAA;IACA1D,MAAAA,KAAK,CAACuE,GAAN,CAAU,iBAAV,EAA8B,CAAA,aAAA,CAA9B,EAA8CC,KAA9C,CAAA,CAAA;IACH,KAPI,CAAL,CAAA;IAQH,GA/DgD;;;IAkEjD0f,EAAAA,cAAc,CAACC,OAAD,EAAU;IACpB,IAAM,MAAA;IAACpB,MAAAA,KAAAA;IAAD,KAAA,GAAU,KAAKjY,MAArB,CAAA;;IACA,IAAI,IAAA,CAACiY,KAAL,EAAY;IACR,MAAKjY,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkB6J,IAAlB,CAAuB,iBAAvB,EAA0C,wCAA1C,CAAA,CAAA;IACA,MAAA,OAAA;IACH,KAAA;;IACDkZ,IAAAA,KAAK,CAACW,QAAN,CAAeS,OAAf,CAAA,CAAA;IACH,GAAA;;IAGDrB,EAAAA,WAAW,CAACphB,GAAD,EAAM;IACb,IAAA,IAAA,CAAKoJ,MAAL,CAAYkY,MAAZ,CAAmBjQ,WAAnB,GAAiCxE,GAAG,EAApC,CAAA;IACA,IAAKuV,IAAAA,CAAAA,KAAL,GAAapiB,GAAb,CAAA;;IACA,IAAA,IAAA,CAAKqiB,gBAAL,EAAA,CAAA;IACH,GAAA;;IAhFgD;;ICAtC,MAAMK,MAAN,CAAa;IACxB7a,EAAAA,WAAW,CAACuB,MAAD,EAAS;IAChB,IAAMiU,MAAAA,MAAM,GAAGqF,MAAM,CAACpF,gBAAP,CAAwBlU,MAAM,CAACpB,IAAP,CAAY5H,QAApC,CAAf,CAAA;IACA,IAAA,OAAO,IAAIid,MAAJ,CAAWjU,MAAX,CAAP,CAAA;IACH,GAAA;;IAEsB,EAAhBkU,OAAAA,gBAAgB,CAACld,QAAD,EAAW;IAC9B,IAAA,IAAIA,QAAQ,KAAK1C,oBAAoB,CAACE,KAAtC,EAA6C;IACzC,MAAA,OAAOkjB,WAAP,CAAA;IACH,KAFD,MAEO,IAAI1gB,QAAQ,KAAK1C,oBAAoB,CAACC,SAAtC,EAAiD;IACpD,MAAA,OAAOskB,eAAP,CAAA;IACH,KAAA;IACJ,GAAA;;IAZuB;;;ACH5B;IACA;AACA;IACA;IACA;AACA;IACA;AACA;IACA;IACA;IACA;IACA;AACA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;AACA;IACA,SAAS,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE;IACxC,IAAI,IAAI,CAAC,WAAW,EAAE;IACtB,QAAQ,MAAM,8BAA8B,CAAC;IAC7C,KAAK;AACL;IACA,IAAI,MAAM,GAAG,MAAM,IAAI;IACvB,QAAQ,IAAI,EAAE,OAAO;IACrB,KAAK,CAAC;AACN;IACA,IAAI,MAAM,GAAG,IAAI,sBAAsB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AAC7D;IACA;IACA,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC;AACpB;IACA,IAAI,SAAS,cAAc,CAAC,OAAO,EAAE;IACrC,QAAQ,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACjC,YAAY,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7D,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,CAAC,OAAO,EAAE;IACvB;IACA;IACA,YAAY,MAAM,GAAG,IAAI,sBAAsB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACtE,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACjC,YAAY,OAAO,CAAC,GAAG,CAAC,oBAAoB,GAAG,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC,CAAC;IACzE,SAAS;AACT;IACA,QAAQ,IAAI,aAAa,EAAE;IAC3B,YAAY,aAAa,CAAC,iBAAiB,EAAE,CAAC;IAC9C,YAAY,aAAa,CAAC,MAAM,EAAE,CAAC;AACnC;IACA,YAAY,QAAQ,CAAC,WAAW,CAAC,CAAC;AAClC;IACA,YAAY,IAAI,IAAI,CAAC,iBAAiB,EAAE;IACxC,gBAAgB,uBAAuB,EAAE,CAAC;IAC1C,aAAa;IACb,YAAY,OAAO,IAAI,CAAC;IACxB,SAAS;AACT;IACA,QAAQ,YAAY,CAAC,WAAW;IAChC,YAAY,IAAI,IAAI,CAAC,iBAAiB,EAAE;IACxC,gBAAgB,uBAAuB,EAAE,CAAC;IAC1C,aAAa;IACb,SAAS,CAAC,CAAC;AACX;IACA,QAAQ,OAAO,IAAI,CAAC;IACpB,KAAK;AACL;IACA,IAAI,SAAS,YAAY,CAAC,YAAY,EAAE;IACxC,QAAQ,IAAI,YAAY,EAAE;IAC1B,YAAY,MAAM,CAAC,YAAY,GAAG,WAAW;IAC7C,gBAAgB,YAAY,EAAE,CAAC;IAC/B,gBAAgB,YAAY,GAAG,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC;IAC1D,aAAa,CAAC;IACd,SAAS;AACT;IACA,QAAQ,IAAI,QAAQ,GAAG,IAAI,eAAe,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AAChE;IACA,QAAQ,aAAa,GAAG,IAAI,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAC1D,QAAQ,aAAa,CAAC,MAAM,EAAE,CAAC;AAC/B;IACA,QAAQ,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC9B;IACA,QAAQ,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACjC,YAAY,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,aAAa,CAAC,WAAW,CAAC,IAAI,EAAE,kBAAkB,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IACtH,SAAS;IACT,KAAK;AACL;IACA,IAAI,SAAS,aAAa,CAAC,QAAQ,EAAE;IACrC,QAAQ,QAAQ,GAAG,QAAQ,IAAI,WAAW,EAAE,CAAC;AAC7C;IACA,QAAQ,IAAI,CAAC,aAAa,EAAE;IAC5B,YAAY,UAAU,EAAE,CAAC;IACzB,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE;IACrC,YAAY,IAAI,CAAC,eAAe,EAAE,CAAC;AACnC;IACA,YAAY,UAAU,CAAC,WAAW;IAClC,gBAAgB,aAAa,CAAC,QAAQ,CAAC,CAAC;IACxC,aAAa,EAAE,CAAC,CAAC,CAAC;IAClB,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IAC/D,YAAY,OAAO,CAAC,IAAI,CAAC,oEAAoE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3G,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACjC,YAAY,OAAO,CAAC,GAAG,CAAC,oBAAoB,GAAG,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC,CAAC;IACzE,SAAS;AACT;IACA,QAAQ,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE;IACnC,YAAY,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC1C,SAAS,MAAM;IACf,YAAY,aAAa,CAAC,IAAI,EAAE,CAAC;IACjC,YAAY,SAAS,EAAE,CAAC;IACxB,SAAS;AACT;IACA,QAAQ,QAAQ,CAAC,SAAS,CAAC,CAAC;AAC5B;IACA,QAAQ,SAAS,SAAS,CAAC,MAAM,EAAE;IACnC,YAAY,IAAI,CAAC,aAAa,EAAE;IAChC,gBAAgB,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE;IACzD,oBAAoB,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC5C,iBAAiB,MAAM;IACvB,oBAAoB,QAAQ,CAAC,EAAE,CAAC,CAAC;IACjC,iBAAiB;IACjB,gBAAgB,OAAO;IACvB,aAAa;AACb;IACA,YAAY,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,SAAS,GAAG,EAAE;IAC7D,gBAAgB,IAAI,OAAO,aAAa,CAAC,GAAG,CAAC,KAAK,UAAU,EAAE;IAC9D,oBAAoB,OAAO;IAC3B,iBAAiB;AACjB;IACA,gBAAgB,IAAI,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IAC/C,aAAa,CAAC,CAAC;AACf;IACA,YAAY,IAAI,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC;AAC1C;IACA,YAAY,IAAI,CAAC,IAAI,EAAE;IACvB,gBAAgB,IAAI,MAAM,EAAE;IAC5B,oBAAoB,aAAa,CAAC,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;IACvD,iBAAiB,MAAM;IACvB,oBAAoB,MAAM,mBAAmB,CAAC;IAC9C,iBAAiB;IACjB,aAAa;AACb;IACA,YAAY,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IAC7C,gBAAgB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACrE,aAAa;AACb;IACA,YAAY,IAAI,QAAQ,EAAE;IAC1B,gBAAgB,IAAI,GAAG,CAAC;AACxB;IACA,gBAAgB,IAAI;IACpB,oBAAoB,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACpD,iBAAiB,CAAC,OAAO,CAAC,EAAE,EAAE;AAC9B;IACA,gBAAgB,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE;IACzD,oBAAoB,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC7C,iBAAiB,MAAM;IACvB,oBAAoB,QAAQ,CAAC,GAAG,CAAC,CAAC;IAClC,iBAAiB;IACjB,aAAa;AACb;IACA,YAAY,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE;IACzC,gBAAgB,OAAO;IACvB,aAAa;AACb;IACA,YAAY,UAAU,CAAC,SAAS,OAAO,EAAE;IACzC,gBAAgB,IAAI,SAAS,GAAG,EAAE,CAAC;IACnC,gBAAgB,SAAS,CAAC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,OAAO,CAAC;IAC1D,gBAAgB,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC7C,aAAa,CAAC,CAAC;IACf,SAAS;IACT,KAAK;AACL;IACA,IAAI,SAAS,cAAc,GAAG;IAC9B,QAAQ,IAAI,CAAC,aAAa,EAAE;IAC5B,YAAY,UAAU,EAAE,CAAC;IACzB,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW,EAAE;IACxC,YAAY,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACrC,gBAAgB,OAAO,CAAC,IAAI,CAAC,kDAAkD,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7F,aAAa;IACb,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC3B;IACA,QAAQ,aAAa,CAAC,KAAK,EAAE,CAAC;AAC9B;IACA,QAAQ,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACjC,YAAY,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAC7C,SAAS;IACT,KAAK;AACL;IACA,IAAI,SAAS,eAAe,GAAG;IAC/B,QAAQ,IAAI,CAAC,aAAa,EAAE;IAC5B,YAAY,UAAU,EAAE,CAAC;IACzB,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE;IACrC,YAAY,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACrC,gBAAgB,OAAO,CAAC,IAAI,CAAC,mDAAmD,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9F,aAAa;IACb,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC9B;IACA;IACA,QAAQ,aAAa,CAAC,MAAM,EAAE,CAAC;AAC/B;IACA,QAAQ,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACjC,YAAY,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAC9C,SAAS;IACT,KAAK;AACL;IACA,IAAI,SAAS,QAAQ,CAAC,KAAK,EAAE;IAC7B,QAAQ,WAAW,CAAC,IAAI,cAAc,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/D,KAAK;AACL;IACA,IAAI,SAAS,UAAU,CAAC,QAAQ,EAAE,cAAc,EAAE;IAClD,QAAQ,IAAI,CAAC,QAAQ,EAAE;IACvB,YAAY,MAAM,2CAA2C,CAAC;IAC9D,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,GAAG,cAAc,GAAG,cAAc,CAAC,IAAI,GAAG,CAAC,aAAa,IAAI,EAAE,EAAE,IAAI,CAAC;AACrF;IACA,QAAQ,IAAI,CAAC,IAAI,EAAE;IACnB,YAAY,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACrC,gBAAgB,OAAO,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;IACzE,aAAa;AACb;IACA,YAAY,UAAU,CAAC,WAAW;IAClC,gBAAgB,UAAU,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IACrD,aAAa,EAAE,IAAI,CAAC,CAAC;IACrB,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE;IACzE,YAAY,IAAI,SAAS,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;AACzD;IACA,YAAY,SAAS,CAAC,SAAS,GAAG,SAAS,KAAK,EAAE;IAClD,gBAAgB,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrC,aAAa,CAAC;AACd;IACA,YAAY,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACxC,SAAS,MAAM;IACf,YAAY,IAAI,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;IAC1C,YAAY,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IACvC,YAAY,MAAM,CAAC,MAAM,GAAG,SAAS,KAAK,EAAE;IAC5C,gBAAgB,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9C,aAAa,CAAC;IACd,SAAS;AACT;IACA,QAAQ,SAAS,kBAAkB,CAAC,SAAS,EAAE;IAC/C,YAAY,IAAI;IAChB,gBAAgB,IAAI,IAAI,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE;IAC7E,oBAAoB,oCAAoC,GAAG,SAAS,CAAC,IAAI,GAAG,cAAc;IAC1F,iBAAiB,EAAE;IACnB,oBAAoB,IAAI,EAAE,wBAAwB;IAClD,iBAAiB,CAAC,CAAC,CAAC;AACpB;IACA,gBAAgB,IAAI,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;IAC9C,gBAAgB,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAC1C,gBAAgB,OAAO,MAAM,CAAC;IAC9B,aAAa,CAAC,OAAO,CAAC,EAAE,EAAE;IAC1B,SAAS;IACT,KAAK;AACL;IACA,IAAI,SAAS,uBAAuB,CAAC,OAAO,EAAE;IAC9C,QAAQ,OAAO,GAAG,OAAO,IAAI,CAAC,CAAC;AAC/B;IACA,QAAQ,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE;IACrC,YAAY,UAAU,CAAC,WAAW;IAClC,gBAAgB,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACjD,aAAa,EAAE,IAAI,CAAC,CAAC;IACrB,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;IACtC,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,OAAO,IAAI,IAAI,CAAC,iBAAiB,EAAE;IAC/C,YAAY,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACnD,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,OAAO,IAAI,IAAI,CAAC;AACxB;IACA,QAAQ,UAAU,CAAC,WAAW;IAC9B,YAAY,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAC7C,SAAS,EAAE,IAAI,CAAC,CAAC;IACjB,KAAK;AACL;IACA,IAAI,SAAS,QAAQ,CAAC,KAAK,EAAE;IAC7B,QAAQ,IAAI,CAAC,IAAI,EAAE;IACnB,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AAC3B;IACA,QAAQ,IAAI,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,KAAK,UAAU,EAAE;IAC5D,YAAY,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAClD,SAAS,MAAM;IACf,YAAY,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IACvC,SAAS;IACT,KAAK;AACL;IACA,IAAI,IAAI,OAAO,GAAG,6EAA6E,GAAG,MAAM,CAAC,IAAI,GAAG,YAAY,CAAC;AAC7H;IACA,IAAI,SAAS,UAAU,GAAG;IAC1B,QAAQ,IAAI,MAAM,CAAC,WAAW,KAAK,IAAI,EAAE;IACzC,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9B,KAAK;AACL;IACA,IAAI,IAAI,aAAa,CAAC;AACtB;IACA,IAAI,IAAI,YAAY,GAAG;IACvB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,cAAc,EAAE,cAAc;AACtC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,aAAa,EAAE,aAAa;AACpC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,cAAc,EAAE,cAAc;AACtC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,eAAe,EAAE,eAAe;AACxC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,YAAY,EAAE,YAAY;AAClC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,oBAAoB,EAAE,SAAS,iBAAiB,EAAE,QAAQ,EAAE;IACpE,YAAY,IAAI,OAAO,iBAAiB,KAAK,WAAW,EAAE;IAC1D,gBAAgB,MAAM,gCAAgC,CAAC;IACvD,aAAa;AACb;IACA,YAAY,IAAI,OAAO,iBAAiB,KAAK,QAAQ,EAAE;IACvD,gBAAgB,MAAM,qCAAqC,CAAC;IAC5D,aAAa;AACb;IACA,YAAY,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;IACvD,YAAY,IAAI,CAAC,kBAAkB,GAAG,QAAQ,IAAI,WAAW,EAAE,CAAC;AAChE;IACA,YAAY,OAAO;IACnB,gBAAgB,kBAAkB,EAAE,SAAS,QAAQ,EAAE;IACvD,oBAAoB,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC;IACvD,iBAAiB;IACjB,aAAa,CAAC;IACd,SAAS;AACT;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,iBAAiB,EAAE,WAAW;IACtC,YAAY,IAAI,CAAC,aAAa,EAAE;IAChC,gBAAgB,UAAU,EAAE,CAAC;IAC7B,gBAAgB,OAAO;IACvB,aAAa;AACb;IACA,YAAY,aAAa,CAAC,iBAAiB,EAAE,CAAC;AAC9C;IACA,YAAY,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACrC,gBAAgB,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAC1D,aAAa;IACb,SAAS;AACT;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,OAAO,EAAE,WAAW;IAC5B,YAAY,IAAI,CAAC,aAAa,EAAE;IAChC,gBAAgB,UAAU,EAAE,CAAC;IAC7B,gBAAgB,OAAO;IACvB,aAAa;AACb;IACA,YAAY,OAAO,aAAa,CAAC,IAAI,CAAC;IACtC,SAAS;AACT;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,UAAU,EAAE,UAAU;AAC9B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,KAAK,EAAE,WAAW;IAC1B,YAAY,IAAI,CAAC,aAAa,EAAE;IAChC,gBAAgB,UAAU,EAAE,CAAC;IAC7B,gBAAgB,OAAO;IACvB,aAAa;AACb;IACA,YAAY,OAAO,GAAG,CAAC,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC3D,SAAS;AACT;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,mBAAmB,EAAE,WAAW;IACxC,YAAY,OAAO,aAAa,CAAC;IACjC,SAAS;AACT;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,IAAI,EAAE,SAAS,QAAQ,EAAE;IACjC,YAAY,IAAI,CAAC,aAAa,EAAE;IAChC,gBAAgB,UAAU,EAAE,CAAC;IAC7B,gBAAgB,OAAO;IACvB,aAAa;AACb;IACA,YAAY,kBAAkB,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC7D,SAAS;AACT;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,WAAW,EAAE,SAAS,QAAQ,EAAE;IACxC,YAAY,IAAI,CAAC,aAAa,EAAE;IAChC,gBAAgB,UAAU,EAAE,CAAC;IAC7B,gBAAgB,OAAO;IACvB,aAAa;AACb;IACA,YAAY,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACzD,SAAS;AACT;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,qBAAqB,EAAE,SAAS,iBAAiB,EAAE;IAC3D,YAAY,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC;AACtC;IACA,YAAY,IAAI,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC;IAClD,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;IAC7C,gBAAgB,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;IAC1C,oBAAoB,QAAQ,EAAE,CAAC;IAC/B,oBAAoB,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAC/C,iBAAiB,CAAC,CAAC;IACnB,aAAa;IACb,SAAS;AACT;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,IAAI,EAAE,IAAI;AAClB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,UAAU,EAAE,CAAC;AACrB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,UAAU,EAAE,CAAC;AACrB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,MAAM,EAAE,IAAI;AACpB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,KAAK,EAAE,WAAW;IAC1B,YAAY,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACnE,gBAAgB,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACzD,aAAa;AACb;IACA,YAAY,IAAI,aAAa,IAAI,OAAO,aAAa,CAAC,iBAAiB,KAAK,UAAU,EAAE;IACxF,gBAAgB,aAAa,CAAC,iBAAiB,EAAE,CAAC;IAClD,aAAa;IACb,YAAY,aAAa,GAAG,IAAI,CAAC;IACjC,YAAY,QAAQ,CAAC,UAAU,CAAC,CAAC;IACjC,YAAY,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IAC7B,SAAS;AACT;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,cAAc,EAAE,SAAS,KAAK,EAAE;IACxC,YAAY,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACrC,gBAAgB,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;IAC9D,aAAa;IACb,SAAS;AACT;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,KAAK,EAAE,UAAU;AACzB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,QAAQ,EAAE,WAAW;IAC7B,YAAY,OAAO,IAAI,CAAC,KAAK,CAAC;IAC9B,SAAS;AACT;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,OAAO,EAAE,WAAW;IAC5B,YAAY,IAAI,gBAAgB,GAAG,MAAM,CAAC,WAAW,CAAC;AACtD;IACA,YAAY,MAAM,GAAG;IACrB,gBAAgB,WAAW,EAAE,IAAI;IACjC,aAAa,CAAC;IACd,YAAY,IAAI,CAAC,KAAK,EAAE,CAAC;IACzB,YAAY,QAAQ,CAAC,WAAW,CAAC,CAAC;IAClC,YAAY,YAAY,GAAG,IAAI,GAAG,IAAI,CAAC;AACvC;IACA,YAAY,IAAI,OAAO,CAAC,uBAAuB,EAAE;IACjD,gBAAgB,OAAO,CAAC,uBAAuB,CAAC,KAAK,EAAE,CAAC;IACxD,gBAAgB,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC;IACvD,aAAa;AACb;IACA,YAAY,MAAM,CAAC,WAAW,GAAG,gBAAgB,CAAC;AAClD;IACA,YAAY,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACrC,gBAAgB,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IACvD,aAAa;IACb,SAAS;AACT;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,OAAO,EAAE,OAAO;IACxB,KAAK,CAAC;AACN;IACA,IAAI,IAAI,CAAC,IAAI,EAAE;IACf,QAAQ,IAAI,GAAG,YAAY,CAAC;IAC5B,QAAQ,OAAO,YAAY,CAAC;IAC5B,KAAK;AACL;IACA;IACA,IAAI,KAAK,IAAI,IAAI,IAAI,YAAY,EAAE;IACnC,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACxC,KAAK;AACL;IACA,IAAI,IAAI,GAAG,IAAI,CAAC;AAChB;IACA,IAAI,OAAO,YAAY,CAAC;IACxB,CAAC;AACD;IACA,SAAS,CAAC,OAAO,GAAG,OAAO,CAAC;AAC5B;IAC6D;IAC7D,IAAI,MAAA,CAAA,OAAc,GAAG,SAAS,CAAC;IAC/B,CAAC;AAOD;IACA,SAAS,CAAC,WAAW,GAAG,SAAS,IAAI,EAAE,QAAQ,EAAE;IACjD,IAAI,IAAI,CAAC,QAAQ,EAAE;IACnB,QAAQ,MAAM,wBAAwB,CAAC;IACvC,KAAK;AACL;IACA,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,IAAI,KAAK,KAAK,GAAG,OAAO,GAAG,IAAI,GAAG,QAAQ,CAAC,GAAG,aAAa,CAAC,CAAC;IACpG,IAAI,WAAW,CAAC,KAAK,CAAC,SAAS,OAAO,EAAE,KAAK,EAAE;IAC/C,QAAQ,IAAI,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,GAAG,MAAM,IAAI,QAAQ,EAAE;IACnE,YAAY,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC9B,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,KAAK,KAAK,IAAI,QAAQ,EAAE;IACxC,YAAY,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;IACzD,SAAS;IACT,KAAK,CAAC,CAAC;IACP,CAAC,CAAC;AACF;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,SAAS,CAAC,WAAW,GAAG,SAAS,OAAO,EAAE;IAC1C,IAAI,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IACrD,IAAI,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;IAC5B,IAAI,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,EAAE;IACvD,QAAQ,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,YAAY,EAAE;IACxD,YAAY,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,YAAY,EAAE;IAC5D,gBAAgB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,UAAU,EAAE;IAC5D,oBAAoB,WAAW,CAAC,KAAK,CAAC;IACtC,wBAAwB,SAAS,EAAE,YAAY;IAC/C,wBAAwB,SAAS,EAAE,YAAY;IAC/C,wBAAwB,OAAO,EAAE,UAAU;IAC3C,qBAAqB,CAAC,CAAC;IACvB,iBAAiB,CAAC,CAAC;IACnB,aAAa,CAAC,CAAC;IACf,SAAS,CAAC,CAAC;IACX,KAAK,MAAM,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE;IAC/C,QAAQ,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,YAAY,EAAE;IACxD,YAAY,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,YAAY,EAAE;IAC5D,gBAAgB,WAAW,CAAC,KAAK,CAAC;IAClC,oBAAoB,SAAS,EAAE,YAAY;IAC3C,oBAAoB,SAAS,EAAE,YAAY;IAC3C,iBAAiB,CAAC,CAAC;IACnB,aAAa,CAAC,CAAC;IACf,SAAS,CAAC,CAAC;IACX,KAAK,MAAM,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,EAAE;IAC7C,QAAQ,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,YAAY,EAAE;IACxD,YAAY,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,UAAU,EAAE;IACxD,gBAAgB,WAAW,CAAC,KAAK,CAAC;IAClC,oBAAoB,SAAS,EAAE,YAAY;IAC3C,oBAAoB,OAAO,EAAE,UAAU;IACvC,iBAAiB,CAAC,CAAC;IACnB,aAAa,CAAC,CAAC;IACf,SAAS,CAAC,CAAC;IACX,KAAK,MAAM,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,EAAE;IAC7C,QAAQ,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,YAAY,EAAE;IACxD,YAAY,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,UAAU,EAAE;IACxD,gBAAgB,WAAW,CAAC,KAAK,CAAC;IAClC,oBAAoB,SAAS,EAAE,YAAY;IAC3C,oBAAoB,OAAO,EAAE,UAAU;IACvC,iBAAiB,CAAC,CAAC;IACnB,aAAa,CAAC,CAAC;IACf,SAAS,CAAC,CAAC;IACX,KAAK,MAAM,IAAI,OAAO,CAAC,KAAK,EAAE;IAC9B,QAAQ,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,YAAY,EAAE;IACxD,YAAY,WAAW,CAAC,KAAK,CAAC;IAC9B,gBAAgB,SAAS,EAAE,YAAY;IACvC,aAAa,CAAC,CAAC;IACf,SAAS,CAAC,CAAC;IACX,KAAK,MAAM,IAAI,OAAO,CAAC,KAAK,EAAE;IAC9B,QAAQ,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,YAAY,EAAE;IACxD,YAAY,WAAW,CAAC,KAAK,CAAC;IAC9B,gBAAgB,SAAS,EAAE,YAAY;IACvC,aAAa,CAAC,CAAC;IACf,SAAS,CAAC,CAAC;IACX,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE;IAC5B,QAAQ,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,UAAU,EAAE;IACpD,YAAY,WAAW,CAAC,KAAK,CAAC;IAC9B,gBAAgB,OAAO,EAAE,UAAU;IACnC,aAAa,CAAC,CAAC;IACf,SAAS,CAAC,CAAC;IACX,KAAK;IACL,CAAC,CAAC;AACF;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;AACA;IACA,SAAS,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE;IACrD,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IAC9C,QAAQ,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE;IAC9C,YAAY,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC;IAClC,SAAS,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;IACpD,YAAY,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC;IAClC,SAAS;IACT,KAAK;AACL;IACA,IAAI,IAAI,MAAM,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IAC7C,QAAQ,IAAI,MAAM,CAAC,YAAY,KAAK,cAAc,IAAI,MAAM,CAAC,YAAY,KAAK,cAAc,KAAK,OAAO,mBAAmB,KAAK,WAAW,IAAI,MAAM,CAAC,YAAY,KAAK,mBAAmB,CAAC,EAAE;IAC7L,YAAY,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC;IAClC,SAAS,MAAM,IAAI,MAAM,CAAC,YAAY,KAAK,WAAW,EAAE;IACxD,YAAY,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC;IAChC,SAAS,MAAM,IAAI,MAAM,CAAC,YAAY,KAAK,mBAAmB,EAAE;IAChE,YAAY,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC;IAClC,SAAS,MAAM,IAAI,MAAM,CAAC,YAAY,KAAK,mBAAmB,EAAE;IAChE,YAAY,IAAI,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,MAAM,IAAI,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE;IAClG,gBAAgB,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC;IACtC,aAAa,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,MAAM,IAAI,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE;IAC1G,gBAAgB,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC;IACtC,aAAa,MAAM,IAAI,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE;IAC1G,gBAAgB,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC;IACtC,aAAa,MAAM,CAEN;IACb,SAAS;IACT,KAAK;AACL;IACA,IAAI,IAAI,OAAO,mBAAmB,KAAK,WAAW,IAAI,OAAO,aAAa,KAAK,WAAW,IAAI,aAAa,IAAI,aAAa,CAAC,SAAS,EAAE;IACxI,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;IAC9B,YAAY,MAAM,CAAC,QAAQ,GAAG,YAAY,CAAC;IAC3C,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IAC1B,YAAY,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAE1B;IACT,KAAK;AACL;IACA;IACA,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACtB,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAAE;IAC7B,YAAY,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,SAAS;IACT,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IAC1B,YAAY,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC;IAClC,SAAS;IACT,KAAK;AACL;IACA,IAAI,OAAO,MAAM,CAAC;IAClB,CAAC;AACD;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;AACA;IACA,SAAS,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE;IAC9C,IAAI,IAAI,QAAQ,CAAC;AACjB;IACA;IACA;IACA,IAAI,IAAI,QAAQ,IAAI,MAAM,IAAI,OAAO,EAAE;IACvC;IACA;IACA,QAAQ,QAAQ,GAAG,mBAAmB,CAAC;IACvC,KAAK;AACL;IACA,IAAI,IAAI,OAAO,aAAa,KAAK,WAAW,IAAI,aAAa,IAAI,aAAa,CAAC,SAAS,IAAI,CAAC,QAAQ,EAAE;IACvG,QAAQ,QAAQ,GAAG,mBAAmB,CAAC;IACvC,KAAK;AACL;IACA;IACA,IAAI,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,EAAE;IAC1D,QAAQ,QAAQ,GAAG,cAAc,CAAC;AAClC;IACA,QAAQ,IAAI,OAAO,mBAAmB,KAAK,WAAW,IAAI,OAAO,cAAc,KAAK,WAAW,EAAE;IACjG,YAAY,QAAQ,GAAG,mBAAmB,CAAC;IAC3C,SAAS;IACT,KAAK;AACL;IACA;IACA,IAAI,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE;IAC/B,QAAQ,QAAQ,GAAG,WAAW,CAAC;IAC/B,KAAK;AACL;IACA;IACA,IAAI,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;IAClC,QAAQ,QAAQ,GAAG,cAAc,CAAC;IAClC,KAAK;AACL;IACA,IAAI,IAAI,yBAAyB,EAAE,IAAI,QAAQ,KAAK,cAAc,IAAI,QAAQ,KAAK,WAAW,IAAI,OAAO,aAAa,KAAK,WAAW,IAAI,aAAa,IAAI,aAAa,CAAC,SAAS,EAAE;IACpL,QAAQ,IAAI,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,MAAM,IAAI,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE;IAC9F;IACA,YAAY,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;IACzC,gBAAgB,IAAI,OAAO,aAAa,CAAC,eAAe,KAAK,UAAU,IAAI,aAAa,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE;IACxH,oBAAoB,QAAQ,GAAG,mBAAmB,CAAC;IACnD,iBAAiB;IACjB;IACA,aAAa,MAAM;IACnB;IACA,gBAAgB,IAAI,OAAO,aAAa,CAAC,eAAe,KAAK,UAAU,IAAI,aAAa,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE;IACxH,oBAAoB,QAAQ,GAAG,mBAAmB,CAAC;IACnD,iBAAiB;IACjB,aAAa;IACb,SAAS;IACT,KAAK;AACL;IACA,IAAI,IAAI,WAAW,YAAY,KAAK,IAAI,WAAW,CAAC,MAAM,EAAE;IAC5D,QAAQ,QAAQ,GAAG,mBAAmB,CAAC;IACvC,KAAK;AACL;IACA,IAAI,IAAI,MAAM,CAAC,YAAY,EAAE;IAC7B,QAAQ,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC;IACvC,KAAK;AACL;IACA,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE;IAC9D,QAAQ,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACvF,KAAK;AACL;IACA,IAAI,IAAI,CAAC,QAAQ,IAAI,QAAQ,EAAE;IAC/B,QAAQ,QAAQ,GAAG,mBAAmB,CAAC;IACvC,KAAK;AACL;IACA,IAAI,OAAO,QAAQ,CAAC;IACpB,CAAC;AACD;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;AACA;IACA,SAAS,UAAU,CAAC,WAAW,EAAE;AACjC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,SAAS,GAAG,SAAS,YAAY,EAAE;IAC5C,QAAQ,IAAI,YAAY,EAAE;IAC1B,YAAY,WAAW,GAAG,YAAY,CAAC;IACvC,SAAS;IACT,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,SAAS,GAAG;IACrB,QAAQ,KAAK,EAAE,IAAI;IACnB,QAAQ,KAAK,EAAE,IAAI;IACnB,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,cAAc,GAAG,WAAW;IACrC,QAAQ,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IACvC,QAAQ,IAAI,YAAY,CAAC;IACzB,QAAQ,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI;IACxC,YAAY,KAAK,EAAE,IAAI;IACvB,YAAY,KAAK,EAAE,IAAI;IACvB,YAAY,GAAG,EAAE,IAAI;IACrB,SAAS,CAAC;AACV;IACA,QAAQ,IAAI,OAAO,SAAS,CAAC,KAAK,KAAK,UAAU,IAAI,yBAAyB,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE;IAC7H,YAAY,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC;IACpC,SAAS;AACT;IACA,QAAQ,IAAI,OAAO,SAAS,CAAC,KAAK,KAAK,UAAU,IAAI,yBAAyB,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE;IAC7H,YAAY,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC;IACpC,SAAS;AACT;IACA,QAAQ,IAAI,OAAO,SAAS,CAAC,GAAG,KAAK,UAAU,IAAI,yBAAyB,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE;IAC3H,YAAY,SAAS,CAAC,GAAG,GAAG,KAAK,CAAC;IAClC,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE;IACpE,YAAY,MAAM,qDAAqD,CAAC;IACxE,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE;IAC/B,YAAY,YAAY,GAAG,IAAI,CAAC;IAChC,YAAY,IAAI,OAAO,SAAS,CAAC,KAAK,KAAK,UAAU,EAAE;IACvD,gBAAgB,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC;IAC/C,aAAa;AACb;IACA,YAAY,IAAI,CAAC,aAAa,GAAG,IAAI,SAAS,CAAC,WAAW,EAAE;IAC5D,gBAAgB,IAAI,EAAE,OAAO;IAC7B,gBAAgB,UAAU,EAAE,IAAI,CAAC,UAAU;IAC3C,gBAAgB,UAAU,EAAE,IAAI,CAAC,UAAU;IAC3C,gBAAgB,qBAAqB,EAAE,IAAI,CAAC,qBAAqB,IAAI,CAAC;IACtE,gBAAgB,WAAW,EAAE,IAAI,CAAC,WAAW;IAC7C,gBAAgB,YAAY,EAAE,YAAY;IAC1C,gBAAgB,QAAQ,EAAE,QAAQ,CAAC,KAAK;IACxC,gBAAgB,SAAS,EAAE,IAAI,CAAC,SAAS;IACzC,gBAAgB,WAAW,EAAE,IAAI,CAAC,WAAW;IAC7C,aAAa,CAAC,CAAC;AACf;IACA,YAAY,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;IAClC,gBAAgB,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;IACpD,aAAa;IACb,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE;IAC/B,YAAY,YAAY,GAAG,IAAI,CAAC;IAChC,YAAY,IAAI,OAAO,SAAS,CAAC,KAAK,KAAK,UAAU,EAAE;IACvD,gBAAgB,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC;IAC/C,aAAa;AACb;IACA,YAAY,IAAI,SAAS,GAAG,WAAW,CAAC;AACxC;IACA,YAAY,IAAI,yBAAyB,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,IAAI,OAAO,SAAS,CAAC,KAAK,KAAK,UAAU,EAAE;IAC3G,gBAAgB,IAAI,UAAU,GAAG,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACpE;IACA,gBAAgB,IAAI,SAAS,EAAE;IAC/B,oBAAoB,SAAS,GAAG,IAAI,WAAW,EAAE,CAAC;IAClD,oBAAoB,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AACnD;IACA,oBAAoB,IAAI,YAAY,IAAI,YAAY,KAAK,cAAc,EAAE;IACzE;IACA;IACA,wBAAwB,YAAY,GAAG,mBAAmB,CAAC;IAC3D,qBAAqB;IACrB,iBAAiB,MAAM;IACvB,oBAAoB,SAAS,GAAG,IAAI,WAAW,EAAE,CAAC;IAClD,oBAAoB,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACnD,iBAAiB;IACjB,aAAa;AACb;IACA,YAAY,IAAI,CAAC,aAAa,GAAG,IAAI,SAAS,CAAC,SAAS,EAAE;IAC1D,gBAAgB,IAAI,EAAE,OAAO;IAC7B,gBAAgB,KAAK,EAAE,IAAI,CAAC,KAAK;IACjC,gBAAgB,MAAM,EAAE,IAAI,CAAC,MAAM;IACnC,gBAAgB,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,EAAE;IACvD,gBAAgB,WAAW,EAAE,IAAI,CAAC,WAAW;IAC7C,gBAAgB,YAAY,EAAE,YAAY;IAC1C,gBAAgB,QAAQ,EAAE,QAAQ,CAAC,KAAK;IACxC,gBAAgB,SAAS,EAAE,IAAI,CAAC,SAAS;IACzC,gBAAgB,WAAW,EAAE,IAAI,CAAC,WAAW;IAC7C,gBAAgB,UAAU,EAAE,IAAI,CAAC,UAAU;IAC3C,gBAAgB,eAAe,EAAE,IAAI,CAAC,eAAe;IACrD,gBAAgB,SAAS,EAAE,IAAI,CAAC,SAAS;IACzC,gBAAgB,OAAO,EAAE,IAAI,CAAC,OAAO;IACrC,aAAa,CAAC,CAAC;AACf;IACA,YAAY,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;IAClC,gBAAgB,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;IACpD,aAAa;IACb,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE;IACpD,YAAY,IAAI,IAAI,GAAG,IAAI,CAAC;AAC5B;IACA,YAAY,IAAI,gBAAgB,GAAG,yBAAyB,EAAE,KAAK,IAAI,CAAC;AACxE;IACA,YAAY,IAAI,SAAS,CAAC,KAAK,YAAY,mBAAmB,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE;IACrF,gBAAgB,gBAAgB,GAAG,KAAK,CAAC;IACzC,aAAa,MAAM,IAAI,SAAS,CAAC,KAAK,KAAK,IAAI,IAAI,SAAS,CAAC,KAAK,KAAK,IAAI,IAAI,SAAS,CAAC,KAAK,KAAK,SAAS,CAAC,KAAK,EAAE;IACpH,gBAAgB,gBAAgB,GAAG,KAAK,CAAC;IACzC,aAAa;AACb;IACA,YAAY,IAAI,gBAAgB,KAAK,IAAI,EAAE;IAC3C,gBAAgB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;IAC1C,gBAAgB,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;IACpD,aAAa,MAAM;IACnB,gBAAgB,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,WAAW;IAC3D,oBAAoB,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,WAAW;IAC/D;IACA,wBAAwB,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;IAC5D,wBAAwB,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;IAC5D,qBAAqB,CAAC,CAAC;IACvB,iBAAiB,CAAC,CAAC;IACnB,aAAa;IACb,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE;IAC7B,YAAY,YAAY,GAAG,IAAI,CAAC;IAChC,YAAY,IAAI,OAAO,SAAS,CAAC,GAAG,KAAK,UAAU,EAAE;IACrD,gBAAgB,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC;IAC7C,aAAa;IACb,YAAY,IAAI,CAAC,WAAW,GAAG,IAAI,SAAS,CAAC,WAAW,EAAE;IAC1D,gBAAgB,IAAI,EAAE,KAAK;IAC3B,gBAAgB,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,GAAG;IAChD,gBAAgB,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE;IAC3C,gBAAgB,WAAW,EAAE,IAAI,CAAC,WAAW;IAC7C,gBAAgB,YAAY,EAAE,YAAY;IAC1C,gBAAgB,QAAQ,EAAE,QAAQ,CAAC,GAAG;IACtC,aAAa,CAAC,CAAC;IACf,YAAY,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC;IAC9C,SAAS;IACT,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,aAAa,GAAG,SAAS,QAAQ,EAAE;IAC5C,QAAQ,QAAQ,GAAG,QAAQ,IAAI,WAAW,EAAE,CAAC;AAC7C;IACA,QAAQ,IAAI,IAAI,CAAC,aAAa,EAAE;IAChC,YAAY,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,SAAS,OAAO,EAAE;IAC/D,gBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC3C,aAAa,CAAC,CAAC;IACf,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,aAAa,EAAE;IAChC,YAAY,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,SAAS,OAAO,EAAE;IAC/D,gBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC3C,aAAa,CAAC,CAAC;IACf,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE;IAC9B,YAAY,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS,OAAO,EAAE;IAC7D,gBAAgB,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACzC,aAAa,CAAC,CAAC;IACf,SAAS;IACT,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,cAAc,GAAG,WAAW;IACrC,QAAQ,IAAI,IAAI,CAAC,aAAa,EAAE;IAChC,YAAY,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;IAChD,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,aAAa,EAAE;IAChC,YAAY,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;IAChD,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE;IAC9B,YAAY,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC;IAC9C,SAAS;IACT,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,eAAe,GAAG,WAAW;IACtC,QAAQ,IAAI,IAAI,CAAC,aAAa,EAAE;IAChC,YAAY,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE,CAAC;IACjD,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,aAAa,EAAE;IAChC,YAAY,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE,CAAC;IACjD,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE;IAC9B,YAAY,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC;IAC/C,SAAS;IACT,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,OAAO,GAAG,SAAS,QAAQ,EAAE;IACtC,QAAQ,IAAI,MAAM,GAAG,EAAE,CAAC;AACxB;IACA,QAAQ,IAAI,IAAI,CAAC,aAAa,EAAE;IAChC,YAAY,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;IACxD,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,aAAa,EAAE;IAChC,YAAY,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;IACxD,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE;IAC9B,YAAY,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;IACpD,SAAS;AACT;IACA,QAAQ,IAAI,QAAQ,EAAE;IACtB,YAAY,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC7B,SAAS;AACT;IACA,QAAQ,OAAO,MAAM,CAAC;IACtB,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,OAAO,GAAG,WAAW;IAC9B,QAAQ,IAAI,IAAI,CAAC,aAAa,EAAE;IAChC,YAAY,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;IACzC,YAAY,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;IACtC,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,aAAa,EAAE;IAChC,YAAY,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;IACzC,YAAY,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;IACtC,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE;IAC9B,YAAY,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;IACvC,YAAY,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IACpC,SAAS;IACT,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,UAAU,GAAG,SAAS,QAAQ,EAAE;IACzC,QAAQ,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE;IACpC,YAAY,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE;IAC1C,gBAAgB,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE;IAC/D,oBAAoB,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE;IACnE,wBAAwB,QAAQ,CAAC;IACjC,4BAA4B,KAAK,EAAE,aAAa;IAChD,4BAA4B,KAAK,EAAE,aAAa;IAChD,yBAAyB,CAAC,CAAC;IAC3B,qBAAqB,CAAC,CAAC;IACvB,iBAAiB,CAAC,CAAC;IACnB,aAAa,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE;IACnC,gBAAgB,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE;IAC/D,oBAAoB,QAAQ,CAAC;IAC7B,wBAAwB,KAAK,EAAE,aAAa;IAC5C,qBAAqB,CAAC,CAAC;IACvB,iBAAiB,CAAC,CAAC;IACnB,aAAa,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE;IACnC,gBAAgB,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE;IAC/D,oBAAoB,QAAQ,CAAC;IAC7B,wBAAwB,KAAK,EAAE,aAAa;IAC5C,qBAAqB,CAAC,CAAC;IACvB,iBAAiB,CAAC,CAAC;IACnB,aAAa;IACb,SAAS,CAAC,CAAC;AACX;IACA,QAAQ,SAAS,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE;IAC9C,YAAY,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;IAC/C,gBAAgB,IAAI,SAAS,GAAG,kBAAkB,CAAC,SAAS,QAAQ,CAAC,KAAK,EAAE;IAC5E,oBAAoB,WAAW,CAAC,IAAI,cAAc,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3E,iBAAiB,CAAC,CAAC;AACnB;IACA,gBAAgB,SAAS,CAAC,SAAS,GAAG,SAAS,KAAK,EAAE;IACtD,oBAAoB,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3C,iBAAiB,CAAC;AAClB;IACA,gBAAgB,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAC5C,aAAa,MAAM;IACnB,gBAAgB,IAAI,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;IAC9C,gBAAgB,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC3C,gBAAgB,MAAM,CAAC,MAAM,GAAG,SAAS,KAAK,EAAE;IAChD,oBAAoB,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACpD,iBAAiB,CAAC;IAClB,aAAa;IACb,SAAS;AACT;IACA,QAAQ,SAAS,kBAAkB,CAAC,SAAS,EAAE;IAC/C,YAAY,IAAI,IAAI,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE;IACzE,gBAAgB,oCAAoC,GAAG,SAAS,CAAC,IAAI,GAAG,cAAc;IACtF,aAAa,EAAE;IACf,gBAAgB,IAAI,EAAE,wBAAwB;IAC9C,aAAa,CAAC,CAAC,CAAC;AAChB;IACA,YAAY,IAAI,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;IAC1C,YAAY,IAAI,GAAG,CAAC;IACpB,YAAY,IAAI,OAAO,GAAG,KAAK,WAAW,EAAE;IAC5C,gBAAgB,GAAG,GAAG,GAAG,CAAC;IAC1B,aAAa,MAAM,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;IACzD,gBAAgB,GAAG,GAAG,SAAS,CAAC;IAChC,aAAa,MAAM;IACnB,gBAAgB,MAAM,qCAAqC,CAAC;IAC5D,aAAa;IACb,YAAY,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACtC,YAAY,OAAO,MAAM,CAAC;IAC1B,SAAS;IACT,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,WAAW,GAAG,WAAW;IAClC,QAAQ,SAAS,CAAC,WAAW,CAAC;IAC9B,YAAY,KAAK,EAAE,IAAI,CAAC,aAAa;IACrC,YAAY,KAAK,EAAE,IAAI,CAAC,aAAa;IACrC,YAAY,GAAG,EAAE,IAAI,CAAC,WAAW;IACjC,SAAS,CAAC,CAAC;IACX,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,IAAI,GAAG,SAAS,IAAI,EAAE;IAC/B,QAAQ,IAAI,GAAG,IAAI,IAAI;IACvB,YAAY,KAAK,EAAE,IAAI;IACvB,YAAY,KAAK,EAAE,IAAI;IACvB,YAAY,GAAG,EAAE,IAAI;IACrB,SAAS,CAAC;AACV;IACA,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE;IAChD,YAAY,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;IACtF,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE;IAChD,YAAY,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;IACtF,SAAS;IACT,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,WAAW,EAAE;IAC5C,YAAY,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ,GAAG,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;IAChF,SAAS;IACT,KAAK,CAAC;IACN,CAAC;AACD;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,UAAU,CAAC,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC;AAC/C;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,UAAU,CAAC,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC;AAC/C;IACA,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;IACtC,IAAI,SAAS,CAAC,UAAU,GAAG,UAAU,CAAC;IACtC,CAAC;AACD;IACA,IAAI,oBAAoB,GAAG,qFAAqF,CAAC;AACjH;IACA,CAAC,SAAS,IAAI,EAAE;IAChB,IAAI,IAAI,CAAC,IAAI,EAAE;IACf,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;IACvC,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,IAAI,OAAOU,cAAM,KAAK,WAAW,EAAE;IACvC,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAIA,cAAM,CAAC,SAAS,GAAG;IACvB,QAAQ,SAAS,EAAE,oBAAoB;IACvC,QAAQ,YAAY,EAAE,WAAW,EAAE;IACnC,KAAK,CAAC;AACN;IACA,IAAI,IAAI,CAACA,cAAM,CAAC,OAAO,EAAE;IACzB,QAAQA,cAAM,CAAC,OAAO,GAAG,EAAE,CAAC;IAC5B,KAAK;AACL;IACA,IAAI,IAAI,OAAOA,cAAM,CAAC,OAAO,CAAC,GAAG,KAAK,WAAW,IAAI,OAAOA,cAAM,CAAC,OAAO,CAAC,KAAK,KAAK,WAAW,EAAE;IAClG,QAAQA,cAAM,CAAC,OAAO,CAAC,KAAK,GAAGA,cAAM,CAAC,OAAO,CAAC,GAAG,GAAGA,cAAM,CAAC,OAAO,CAAC,GAAG,IAAI,WAAW;IACrF,YAAY,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACnC,SAAS,CAAC;IACV,KAAK;AACL;IACA,IAAI,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;IACzC;IACA,QAAQ,IAAI,CAAC,QAAQ,GAAG;IACxB,YAAY,eAAe,EAAE;IAC7B,gBAAgB,WAAW,EAAE,WAAW;IACxC,oBAAoB,OAAO,EAAE,CAAC;IAC9B,iBAAiB;IACjB,aAAa;IACb,SAAS,CAAC;AACV;IACA,QAAQ,QAAQ,CAAC,aAAa,GAAG,QAAQ,CAAC,aAAa,GAAG,QAAQ,CAAC,gBAAgB,GAAG,WAAW;IACjG,YAAY,IAAI,GAAG,GAAG;IACtB,gBAAgB,UAAU,EAAE,WAAW;IACvC,oBAAoB,OAAO,GAAG,CAAC;IAC/B,iBAAiB;IACjB,gBAAgB,IAAI,EAAE,WAAW,EAAE;IACnC,gBAAgB,KAAK,EAAE,WAAW,EAAE;IACpC,gBAAgB,SAAS,EAAE,WAAW,EAAE;IACxC,gBAAgB,SAAS,EAAE,WAAW;IACtC,oBAAoB,OAAO,EAAE,CAAC;IAC9B,iBAAiB;IACjB,gBAAgB,KAAK,EAAE,EAAE;IACzB,aAAa,CAAC;IACd,YAAY,OAAO,GAAG,CAAC;IACvB,SAAS,CAAC;AACV;IACA,QAAQ,IAAI,CAAC,gBAAgB,GAAG,WAAW,EAAE,CAAC;IAC9C,KAAK;AACL;IACA,IAAI,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;IACzC;IACA,QAAQ,IAAI,CAAC,QAAQ,GAAG;IACxB,YAAY,QAAQ,EAAE,OAAO;IAC7B,YAAY,IAAI,EAAE,EAAE;IACpB,YAAY,IAAI,EAAE,EAAE;IACpB,SAAS,CAAC;IACV,KAAK;AACL;IACA,IAAI,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;IACvC;IACA,QAAQ,IAAI,CAAC,MAAM,GAAG;IACtB,YAAY,KAAK,EAAE,CAAC;IACpB,YAAY,MAAM,EAAE,CAAC;IACrB,SAAS,CAAC;IACV,KAAK;AACL;IACA,IAAI,IAAI,OAAO,GAAG,KAAK,WAAW,EAAE;IACpC;IACA,QAAQ,IAAI,CAAC,GAAG,GAAG;IACnB,YAAY,eAAe,EAAE,WAAW;IACxC,gBAAgB,OAAO,EAAE,CAAC;IAC1B,aAAa;IACb,YAAY,eAAe,EAAE,WAAW;IACxC,gBAAgB,OAAO,EAAE,CAAC;IAC1B,aAAa;IACb,SAAS,CAAC;IACV,KAAK;AACL;IACA;IACA,IAAI,IAAI,CAAC,MAAM,GAAGA,cAAM,CAAC;IACzB,CAAC,EAAE,OAAOA,cAAM,KAAK,WAAW,GAAGA,cAAM,GAAG,IAAI,CAAC,CAAC;AAClD;IACA;IACA;AACA;IACA;AACA;IACA;IACA,IAAI,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC;IACzD,IAAI,OAAO,qBAAqB,KAAK,WAAW,EAAE;IAClD,IAAI,IAAI,OAAO,2BAA2B,KAAK,WAAW,EAAE;IAC5D;IACA,QAAQ,qBAAqB,GAAG,2BAA2B,CAAC;IAC5D,KAAK,MAAM,IAAI,OAAO,wBAAwB,KAAK,WAAW,EAAE;IAChE;IACA,QAAQ,qBAAqB,GAAG,wBAAwB,CAAC;IACzD,KAAK,MAAM,IAAI,OAAO,uBAAuB,KAAK,WAAW,EAAE;IAC/D;IACA,QAAQ,qBAAqB,GAAG,uBAAuB,CAAC;IACxD,KAAK,MAAM,IAAI,OAAO,qBAAqB,KAAK,WAAW,EAAE;IAC7D;IACA,QAAQ,IAAI,QAAQ,GAAG,CAAC,CAAC;AACzB;IACA;IACA,QAAQ,qBAAqB,GAAG,SAAS,QAAQ,EAAE,OAAO,EAAE;IAC5D,YAAY,IAAI,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IAChD,YAAY,IAAI,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,IAAI,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC;IACrE,YAAY,IAAI,EAAE,GAAG,UAAU,CAAC,WAAW;IAC3C,gBAAgB,QAAQ,CAAC,QAAQ,GAAG,UAAU,CAAC,CAAC;IAChD,aAAa,EAAE,UAAU,CAAC,CAAC;IAC3B,YAAY,QAAQ,GAAG,QAAQ,GAAG,UAAU,CAAC;IAC7C,YAAY,OAAO,EAAE,CAAC;IACtB,SAAS,CAAC;IACV,KAAK;IACL,CAAC;AACD;IACA;IACA,IAAI,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;IACvD,IAAI,OAAO,oBAAoB,KAAK,WAAW,EAAE;IACjD,IAAI,IAAI,OAAO,0BAA0B,KAAK,WAAW,EAAE;IAC3D;IACA,QAAQ,oBAAoB,GAAG,0BAA0B,CAAC;IAC1D,KAAK,MAAM,IAAI,OAAO,uBAAuB,KAAK,WAAW,EAAE;IAC/D;IACA,QAAQ,oBAAoB,GAAG,uBAAuB,CAAC;IACvD,KAAK,MAAM,IAAI,OAAO,sBAAsB,KAAK,WAAW,EAAE;IAC9D;IACA,QAAQ,oBAAoB,GAAG,sBAAsB,CAAC;IACtD,KAAK,MAAM,IAAI,OAAO,oBAAoB,KAAK,WAAW,EAAE;IAC5D;IACA,QAAQ,oBAAoB,GAAG,SAAS,EAAE,EAAE;IAC5C,YAAY,YAAY,CAAC,EAAE,CAAC,CAAC;IAC7B,SAAS,CAAC;IACV,KAAK;IACL,CAAC;AACD;IACA;IACA,IAAI,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACvC;IACA,IAAI,OAAO,YAAY,KAAK,WAAW,EAAE;IACzC,IAAI,IAAI,OAAO,kBAAkB,KAAK,WAAW,EAAE;IACnD;IACA,QAAQ,YAAY,GAAG,kBAAkB,CAAC;IAC1C,KAAK;AACL;IACA,IAAI,IAAI,OAAO,eAAe,KAAK,WAAW,EAAE;IAChD;IACA,QAAQ,YAAY,GAAG,eAAe,CAAC;IACvC,KAAK;IACL,CAAC;AACD;IACA;IACA,IAAI,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;AACrB;IACA,IAAI,OAAO,GAAG,KAAK,WAAW,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;IACpE;IACA,IAAI,GAAG,GAAG,SAAS,CAAC;IACpB,CAAC;AACD;IACA,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,OAAO,SAAS,CAAC,YAAY,KAAK,WAAW,EAAE;IACvF,IAAI,IAAI,OAAO,SAAS,CAAC,kBAAkB,KAAK,WAAW,EAAE;IAC7D,QAAQ,SAAS,CAAC,YAAY,GAAG,SAAS,CAAC,kBAAkB,CAAC;IAC9D,KAAK;AACL;IACA,IAAI,IAAI,OAAO,SAAS,CAAC,eAAe,KAAK,WAAW,EAAE;IAC1D,QAAQ,SAAS,CAAC,YAAY,GAAG,SAAS,CAAC,eAAe,CAAC;IAC3D,KAAK;IACL,CAAC;AACD;IACA,IAAI,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,UAAU,IAAI,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IACpH,IAAI,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3E,IAAI,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,UAAU,IAAI,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACxI,IAAI,QAAQ,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,SAAS,CAAC,kBAAkB,KAAK,UAAU,EAAE,IAAI,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AACtJ;IACA,IAAI,QAAQ,GAAG,gCAAgC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AAC1E;IACA,IAAI,QAAQ,IAAI,CAAC,QAAQ,IAAI,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE;IAC1E,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,QAAQ,GAAG,IAAI,CAAC;IACpB,CAAC;AACD;IACA,IAAI,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACrC;IACA,IAAI,OAAO,WAAW,KAAK,WAAW,IAAI,OAAO,iBAAiB,KAAK,WAAW,EAAE;IACpF,IAAI,WAAW,GAAG,iBAAiB,CAAC;IACpC,CAAC;AACD;IACA;IACA,IAAI,OAAO,WAAW,KAAK,WAAW,EAAE;IACxC;IACA,IAAI,IAAI,OAAO,WAAW,CAAC,SAAS,CAAC,IAAI,KAAK,WAAW,EAAE;IAC3D,QAAQ,WAAW,CAAC,SAAS,CAAC,IAAI,GAAG,WAAW;IAChD,YAAY,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,SAAS,KAAK,EAAE;IACrD,gBAAgB,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,aAAa,CAAC,CAAC;IACf,SAAS,CAAC;IACV,KAAK;IACL,CAAC;AACD;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,SAAS,WAAW,CAAC,KAAK,EAAE;IAC5B,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC;IACjB,IAAI,IAAI,KAAK,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAClD,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE;IACrB,QAAQ,OAAO,SAAS,CAAC;IACzB,KAAK;IACL,IAAI,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACpE,IAAI,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACpE,CAAC;AACD;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,SAAS,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE;IAC5C,IAAI,IAAI,CAAC,IAAI,EAAE;IACf,QAAQ,MAAM,0BAA0B,CAAC;IACzC,KAAK;AACL;IACA,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;IACpB,QAAQ,IAAI;IACZ,YAAY,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IACrC,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE;IACtB,KAAK;AACL;IACA,IAAI,IAAI,aAAa,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,YAAY,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,IAAI,IAAI,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;IAC3C;IACA,QAAQ,aAAa,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,KAAK;IACL,IAAI,IAAI,QAAQ,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;IAClD,QAAQ,IAAI,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3C,QAAQ,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC/B,QAAQ,aAAa,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACpC,KAAK;AACL;IACA,IAAI,IAAI,YAAY,GAAG,CAAC,QAAQ,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,SAAS,CAAC,IAAI,GAAG,GAAG,aAAa,CAAC;AAChH;IACA,IAAI,IAAI,OAAO,SAAS,CAAC,gBAAgB,KAAK,WAAW,EAAE;IAC3D,QAAQ,OAAO,SAAS,CAAC,gBAAgB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC9D,KAAK,MAAM,IAAI,OAAO,SAAS,CAAC,UAAU,KAAK,WAAW,EAAE;IAC5D,QAAQ,OAAO,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACxD,KAAK;AACL;IACA,IAAI,IAAI,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAChD,IAAI,SAAS,CAAC,IAAI,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAC/C,IAAI,SAAS,CAAC,QAAQ,GAAG,YAAY,CAAC;AACtC;IACA,IAAI,SAAS,CAAC,KAAK,GAAG,2CAA2C,CAAC;IAClE,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;AACvE;IACA,IAAI,IAAI,OAAO,SAAS,CAAC,KAAK,KAAK,UAAU,EAAE;IAC/C,QAAQ,SAAS,CAAC,KAAK,EAAE,CAAC;IAC1B,KAAK,MAAM;IACX,QAAQ,SAAS,CAAC,MAAM,GAAG,QAAQ,CAAC;IACpC,QAAQ,SAAS,CAAC,aAAa,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE;IACxD,YAAY,IAAI,EAAE,MAAM;IACxB,YAAY,OAAO,EAAE,IAAI;IACzB,YAAY,UAAU,EAAE,IAAI;IAC5B,SAAS,CAAC,CAAC,CAAC;IACZ,KAAK;AACL;IACA,IAAI,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;AACD;IACA;IACA;IACA;IACA,SAAS,UAAU,GAAG;IACtB;IACA,IAAI,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE;IACnH,QAAQ,OAAO,IAAI,CAAC;IACpB,KAAK;AACL;IACA;IACA,IAAI,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE;IAC/G,QAAQ,OAAO,IAAI,CAAC;IACpB,KAAK;AACL;IACA;IACA,IAAI,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,OAAO,SAAS,CAAC,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;IAClI,QAAQ,OAAO,IAAI,CAAC;IACpB,KAAK;AACL;IACA,IAAI,OAAO,KAAK,CAAC;IACjB,CAAC;AACD;IACA,SAAS,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE;IACjC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;IACtC,QAAQ,OAAO,EAAE,CAAC;IAClB,KAAK;AACL;IACA,IAAI,OAAO,MAAM,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;IACjD,QAAQ,OAAO,CAAC,CAAC,IAAI,MAAM,IAAI,IAAI,OAAO,CAAC,CAAC;IAC5C,KAAK,CAAC,CAAC;IACP,CAAC;AACD;IACA,SAAS,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE;IACvC,IAAI,IAAI,WAAW,IAAI,OAAO,EAAE;IAChC,QAAQ,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC;IACnC,KAAK,MAAM,IAAI,cAAc,IAAI,OAAO,EAAE;IAC1C,QAAQ,OAAO,CAAC,YAAY,GAAG,MAAM,CAAC;IACtC,KAAK,MAAM;IACX,QAAQ,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC;IACnC,KAAK;IACL,CAAC;AACD;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,SAAS,eAAe,CAAC,SAAS,EAAE,QAAQ,EAAE;IAC9C;IACA,IAAI,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE;IACrC,QAAQ,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAClF,KAAK;AACL;IACA,IAAI,IAAI,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;IACnC,IAAI,IAAI,OAAO,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;IACrC,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AAC3B;IACA,IAAI,IAAI,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;IACtC,IAAI,UAAU,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE;IACpC,QAAQ,IAAI,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnD,QAAQ,QAAQ,CAAC,OAAO,CAAC,SAAS,OAAO,EAAE;IAC3C,YAAY,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjC,SAAS,CAAC,CAAC;IACX,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;IACtB,QAAQ,IAAI,kBAAkB,GAAG,KAAK,CAAC,oBAAoB,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5G,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAC1D,QAAQ,IAAI,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC,kBAAkB,EAAE,IAAI,CAAC,EAAE;IAC3D,YAAY,IAAI,EAAE,YAAY;IAC9B,SAAS,CAAC,CAAC;AACX;IACA,QAAQ,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC1B,KAAK,CAAC;IACN,IAAI,UAAU,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;AACD;IACA,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;IACtC,IAAI,SAAS,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;IACtD,IAAI,SAAS,CAAC,SAAS,GAAG,SAAS,CAAC;IACpC,IAAI,SAAS,CAAC,eAAe,GAAG,eAAe,CAAC;IAChD,IAAI,SAAS,CAAC,WAAW,GAAG,WAAW,CAAC;IACxC,IAAI,SAAS,CAAC,UAAU,GAAG,UAAU,CAAC;IACtC,CAAC;AACD;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;AACA;IACA,IAAI,OAAO,GAAG,EAAE,CAAC;AACjB;IACA,IAAI,OAAO,YAAY,KAAK,WAAW,EAAE;IACzC,IAAI,OAAO,CAAC,YAAY,GAAG,YAAY,CAAC;IACxC,CAAC,MAAM,IAAI,OAAO,kBAAkB,KAAK,WAAW,EAAE;IACtD,IAAI,OAAO,CAAC,YAAY,GAAG,kBAAkB,CAAC;IAC9C,CAAC;AACD;IACA,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;IACtC,IAAI,SAAS,CAAC,OAAO,GAAG,OAAO,CAAC;IAChC,CAAC;AACD;IACA,SAAS,yBAAyB,GAAG;IACrC,IAAI,IAAI,SAAS,IAAI,QAAQ,IAAI,MAAM,EAAE;IACzC,QAAQ,OAAO,IAAI,CAAC;IACpB,KAAK;IAGL,IAAI,IAAI,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC;IACnC,IAAI,IAAI,WAAW,GAAG,EAAE,GAAG,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAC5D,IAAI,IAAI,YAAY,GAAG,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC1D,QAAoB,SAAS,CAAA,CAAE,GAAG;AAClC;IACA,IAAI,IAAI,QAAQ,IAAI,OAAO,EAAE;IAC7B,QAAQ,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3C,QAAQ,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;IACpD,KAAK;AACL;IACA;IACA,IAAI,IAAI,CAAC,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE;IAChD,QAAQ,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACnD,KAAK;AACL;IACA,IAAI,IAAI,CAAC,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE;IAChD,QAAQ,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACnD,KAAK;AACL;IACA,IAAI,YAAY,GAAG,QAAQ,CAAC,EAAE,GAAG,WAAW,EAAE,EAAE,CAAC,CAAC;AAClD;IACA,IAAI,IAAI,KAAK,CAAC,YAAY,CAAC,EAAE;IAC7B,QAAQ,WAAW,GAAG,EAAE,GAAG,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAC5D,QAAQ,YAAY,GAAG,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC1D,KAAK;AACL;IACA,IAAI,OAAO,YAAY,IAAI,EAAE,CAAC;IAC9B,CAAC;AACD;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;AACA;IACA,SAAS,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE;IAClD,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC;AACpB;IACA,IAAI,IAAI,OAAO,WAAW,KAAK,WAAW,EAAE;IAC5C,QAAQ,MAAM,2CAA2C,CAAC;IAC1D,KAAK;AACL;IACA,IAAI,IAAI,OAAO,aAAa,KAAK,WAAW,EAAE;IAC9C,QAAQ,MAAM,4HAA4H,CAAC;IAC3I,KAAK;AACL;IACA,IAAI,MAAM,GAAG,MAAM,IAAI;IACvB;IACA,QAAQ,QAAQ,EAAE,YAAY;IAC9B,KAAK,CAAC;AACN;IACA,IAAI,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;IACjC,QAAQ,IAAI,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,MAAM,IAAI,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE;IAC9F,YAAY,IAAI,MAAM,CAAC;IACvB,YAAY,IAAI,CAAC,CAAC,SAAS,CAAC,eAAe,EAAE;IAC7C,gBAAgB,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;IAC3C,gBAAgB,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,aAAa,MAAM;IACnB;IACA,gBAAgB,MAAM,GAAG,IAAI,WAAW,CAAC,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1E,aAAa;IACb,YAAY,WAAW,GAAG,MAAM,CAAC;IACjC,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE;IAClG,YAAY,MAAM,CAAC,QAAQ,GAAG,QAAQ,GAAG,YAAY,GAAG,WAAW,CAAC;IACpE,SAAS;AACT;IACA,QAAQ,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,KAAK,WAAW,IAAI,CAAC,CAAC,SAAS,CAAC,eAAe,EAAE;IACxH;IACA,YAAY,MAAM,CAAC,QAAQ,GAAG,WAAW,CAAC;IAC1C,SAAS;IACT,KAAK;AACL;IACA,IAAI,IAAI,YAAY,GAAG,EAAE,CAAC;AAC1B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,eAAe,GAAG,WAAW;IACtC,QAAQ,OAAO,YAAY,CAAC;IAC5B,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW;IAC7B;IACA,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACzB,QAAQ,IAAI,CAAC,iBAAiB,EAAE,CAAC;IACjC,QAAQ,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;IAC7B,QAAQ,SAAS,GAAG,EAAE,CAAC;IACvB,QAAQ,YAAY,GAAG,EAAE,CAAC;AAC1B;IACA,QAAQ,IAAI,aAAa,GAAG,MAAM,CAAC;AACnC;IACA,QAAQ,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACjC,YAAY,OAAO,CAAC,GAAG,CAAC,kDAAkD,EAAE,aAAa,CAAC,CAAC;IAC3F,SAAS;AACT;IACA,QAAQ,IAAI,aAAa,EAAE;IAC3B;IACA,YAAY,aAAa,GAAG,IAAI,CAAC;IACjC,SAAS;AACT;IACA,QAAQ,IAAI,QAAQ,IAAI,CAAC,yBAAyB,EAAE,EAAE;IACtD;IACA,YAAY,aAAa,GAAG,WAAW,CAAC;IACxC,SAAS;AACT;IACA,QAAQ,IAAI,OAAO,aAAa,CAAC,eAAe,KAAK,UAAU,IAAI,aAAa,CAAC,QAAQ,EAAE;IAC3F,YAAY,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE;IACxE,gBAAgB,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACzC,oBAAoB,OAAO,CAAC,IAAI,CAAC,oDAAoD,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC/G,iBAAiB;AACjB;IACA,gBAAgB,aAAa,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI,KAAK,OAAO,GAAG,YAAY,GAAG,YAAY,CAAC;IAC/F,aAAa;IACb,SAAS;AACT;IACA;IACA,QAAQ,IAAI;IACZ,YAAY,aAAa,GAAG,IAAI,aAAa,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;AAC1E;IACA;IACA,YAAY,MAAM,CAAC,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC;IACrD,SAAS,CAAC,OAAO,CAAC,EAAE;IACpB;IACA,YAAY,aAAa,GAAG,IAAI,aAAa,CAAC,WAAW,CAAC,CAAC;IAC3D,SAAS;AACT;IACA;IACA,QAAQ,IAAI,aAAa,CAAC,QAAQ,IAAI,CAAC,aAAa,CAAC,eAAe,IAAI,mBAAmB,IAAI,aAAa,IAAI,aAAa,CAAC,iBAAiB,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,KAAK,EAAE;IACnL,YAAY,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACrC,gBAAgB,OAAO,CAAC,IAAI,CAAC,oDAAoD,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC3G,aAAa;IACb,SAAS;AACT;IACA;IACA,QAAQ,aAAa,CAAC,eAAe,GAAG,SAAS,CAAC,EAAE;IACpD,YAAY,IAAI,CAAC,CAAC,IAAI,EAAE;IACxB,gBAAgB,SAAS,CAAC,IAAI,CAAC,mBAAmB,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/E,aAAa;AACb;IACA,YAAY,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,EAAE;IACtD,gBAAgB,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE;IAC3C,oBAAoB,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC9C,oBAAoB,eAAe,EAAE,CAAC;AACtC;IACA,oBAAoB,IAAI,OAAO,MAAM,CAAC,eAAe,KAAK,UAAU,EAAE;IACtE;IACA,wBAAwB,IAAI,IAAI,GAAG,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;IACtF,4BAA4B,IAAI,EAAE,WAAW,CAAC,aAAa,CAAC;IAC5D,yBAAyB,CAAC,CAAC;IAC3B,wBAAwB,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACrD,qBAAqB;IACrB,iBAAiB;IACjB,gBAAgB,OAAO;IACvB,aAAa;AACb;IACA,YAAY,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE;IAC3E;IACA;IACA,gBAAgB,IAAI,IAAI,CAAC,iBAAiB,EAAE;IAC5C,oBAAoB,IAAI,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC,EAAE,EAAE;IACxD,wBAAwB,IAAI,EAAE,WAAW,CAAC,aAAa,CAAC;IACxD,qBAAqB,CAAC,CAAC,CAAC;IACxB,oBAAoB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAClD,iBAAiB;IACjB,gBAAgB,OAAO;IACvB,aAAa;AACb;IACA,YAAY,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;IAC3E,gBAAgB,IAAI,EAAE,WAAW,CAAC,aAAa,CAAC;IAChD,aAAa,CAAC,CAAC;AACf;IACA,YAAY,IAAI,IAAI,CAAC,iBAAiB,EAAE;IACxC,gBAAgB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClD,gBAAgB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAC9C,aAAa;IACb,SAAS,CAAC;AACV;IACA,QAAQ,aAAa,CAAC,OAAO,GAAG,WAAW;IAC3C,YAAY,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtC,SAAS,CAAC;AACV;IACA,QAAQ,aAAa,CAAC,OAAO,GAAG,WAAW;IAC3C,YAAY,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrC,SAAS,CAAC;AACV;IACA,QAAQ,aAAa,CAAC,QAAQ,GAAG,WAAW;IAC5C,YAAY,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtC,SAAS,CAAC;AACV;IACA,QAAQ,aAAa,CAAC,MAAM,GAAG,WAAW;IAC1C,YAAY,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtC,SAAS,CAAC;AACV;IACA,QAAQ,aAAa,CAAC,OAAO,GAAG,SAAS,KAAK,EAAE;IAChD,YAAY,IAAI,CAAC,KAAK,EAAE;IACxB,gBAAgB,OAAO;IACvB,aAAa;AACb;IACA,YAAY,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;IAC7B,gBAAgB,KAAK,CAAC,IAAI,GAAG,cAAc,CAAC;IAC5C,aAAa;AACb;IACA,YAAY,SAAS,CAAC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC;AAC9C;IACA,YAAY,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACrC;IACA,gBAAgB,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE;IACxF,oBAAoB,OAAO,CAAC,KAAK,CAAC,gGAAgG,EAAE,KAAK,CAAC,CAAC;IAC3I,iBAAiB,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE;IAC/F,oBAAoB,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,aAAa,CAAC,QAAQ,EAAE,qBAAqB,EAAE,KAAK,CAAC,CAAC;IACvG,iBAAiB,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE;IAC3F,oBAAoB,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;IACzE,iBAAiB;AACjB;IACA;IACA,qBAAqB,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE;IACvD,oBAAoB,OAAO,CAAC,KAAK,CAAC,2IAA2I,EAAE,KAAK,CAAC,CAAC;IACtL,iBAAiB,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,2BAA2B,EAAE;IACvE,oBAAoB,OAAO,CAAC,KAAK,CAAC,qQAAqQ,EAAE,KAAK,CAAC,CAAC;IAChT,iBAAiB,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,qBAAqB,EAAE;IACjE,oBAAoB,OAAO,CAAC,KAAK,CAAC,wJAAwJ,EAAE,KAAK,CAAC,CAAC;IACnM,iBAAiB,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE;IAC1D,oBAAoB,OAAO,CAAC,KAAK,CAAC,8EAA8E,EAAE,KAAK,CAAC,CAAC;IACzH,iBAAiB,MAAM;IACvB,oBAAoB,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;IAChE,iBAAiB;IACjB,aAAa;AACb;IACA,YAAY,CAAC,SAAS,MAAM,EAAE;IAC9B,gBAAgB,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,aAAa,IAAI,aAAa,CAAC,KAAK,KAAK,UAAU,EAAE;IAClG,oBAAoB,OAAO,MAAM,CAAC,SAAS,CAAC;AAC5C;IACA;IACA,oBAAoB,aAAa,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IACxD,oBAAoB,OAAO;IAC3B,iBAAiB;AACjB;IACA,gBAAgB,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACzC,aAAa,GAAG,CAAC;AACjB;IACA,YAAY,IAAI,aAAa,CAAC,KAAK,KAAK,UAAU,IAAI,aAAa,CAAC,KAAK,KAAK,SAAS,EAAE;IACzF,gBAAgB,aAAa,CAAC,IAAI,EAAE,CAAC;IACrC,aAAa;IACb,SAAS,CAAC;AACV;IACA,QAAQ,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,EAAE;IAClD,YAAY,eAAe,EAAE,CAAC;IAC9B,YAAY,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAClD,SAAS,MAAM;IACf;IACA;AACA;IACA,YAAY,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACxC,SAAS;AACT;IACA,QAAQ,IAAI,MAAM,CAAC,YAAY,EAAE;IACjC,YAAY,MAAM,CAAC,YAAY,EAAE,CAAC;IAClC,SAAS;IACT,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AACzB;IACA,IAAI,SAAS,eAAe,GAAG;IAC/B,QAAQ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;AACnD;IACA,QAAQ,IAAI,OAAO,MAAM,CAAC,WAAW,KAAK,UAAU,EAAE;IACtD,YAAY,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAC7F,SAAS;IACT,KAAK;AACL;IACA,IAAI,SAAS,WAAW,CAAC,YAAY,EAAE;IACvC,QAAQ,IAAI,aAAa,IAAI,aAAa,CAAC,QAAQ,EAAE;IACrD,YAAY,OAAO,aAAa,CAAC,QAAQ,CAAC;IAC1C,SAAS;AACT;IACA,QAAQ,OAAO,YAAY,CAAC,QAAQ,IAAI,YAAY,CAAC;IACrD,KAAK;AACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,IAAI,GAAG,SAAS,QAAQ,EAAE;IACnC,QAAQ,QAAQ,GAAG,QAAQ,IAAI,WAAW,EAAE,CAAC;AAC7C;IACA,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AACpC;IACA,QAAQ,IAAI,CAAC,aAAa,EAAE;IAC5B,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC;AAC1C;IACA,QAAQ,IAAI,aAAa,CAAC,KAAK,KAAK,WAAW,EAAE;IACjD,YAAY,aAAa,CAAC,IAAI,EAAE,CAAC;IACjC,SAAS;AACT;IACA,QAAQ,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,EAAE;IAClD,YAAY,UAAU,CAAC,WAAW;IAClC,gBAAgB,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,YAAY,EAAE;IACnD,oBAAoB,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC;IAC7C,iBAAiB,CAAC,CAAC;AACnB;IACA,gBAAgB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClD,aAAa,EAAE,GAAG,CAAC,CAAC;IACpB,SAAS;IACT,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,KAAK,GAAG,WAAW;IAC5B,QAAQ,IAAI,CAAC,aAAa,EAAE;IAC5B,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,aAAa,CAAC,KAAK,KAAK,WAAW,EAAE;IACjD,YAAY,aAAa,CAAC,KAAK,EAAE,CAAC;IAClC,SAAS;IACT,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW;IAC7B,QAAQ,IAAI,CAAC,aAAa,EAAE;IAC5B,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,aAAa,CAAC,KAAK,KAAK,QAAQ,EAAE;IAC9C,YAAY,aAAa,CAAC,MAAM,EAAE,CAAC;IACnC,SAAS;IACT,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,iBAAiB,GAAG,WAAW;IACxC,QAAQ,IAAI,aAAa,IAAI,aAAa,CAAC,KAAK,KAAK,WAAW,EAAE;IAClE,YAAY,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC3C,SAAS;AACT;IACA,QAAQ,mBAAmB,EAAE,CAAC;IAC9B,KAAK,CAAC;AACN;IACA,IAAI,SAAS,mBAAmB,GAAG;IACnC,QAAQ,YAAY,GAAG,EAAE,CAAC;IAC1B,QAAQ,aAAa,GAAG,IAAI,CAAC;IAC7B,QAAQ,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;IAC7B,KAAK;AACL;IACA;IACA,IAAI,IAAI,aAAa,CAAC;AACtB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,mBAAmB,GAAG,WAAW;IAC1C,QAAQ,OAAO,aAAa,CAAC;IAC7B,KAAK,CAAC;AACN;IACA,IAAI,SAAS,mBAAmB,GAAG;IACnC,QAAQ,IAAI,QAAQ,IAAI,WAAW,EAAE;IACrC,YAAY,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;IACrC,gBAAgB,OAAO,KAAK,CAAC;IAC7B,aAAa;IACb,SAAS,MAAM,IAAI,OAAO,IAAI,WAAW,EAAE;IAC3C,YAAY,IAAI,WAAW,CAAC,KAAK,EAAE;IACnC,gBAAgB,OAAO,KAAK,CAAC;IAC7B,aAAa;IACb,SAAS;IACT,QAAQ,OAAO,IAAI,CAAC;IACpB,KAAK;AACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACrB;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,QAAQ,GAAG,WAAW;IAC/B,QAAQ,IAAI,CAAC,aAAa,EAAE;IAC5B,YAAY,OAAO,UAAU,CAAC;IAC9B,SAAS;AACT;IACA,QAAQ,OAAO,aAAa,CAAC,KAAK,IAAI,UAAU,CAAC;IACjD,KAAK,CAAC;AACN;IACA;IACA,IAAI,IAAI,SAAS,GAAG,EAAE,CAAC;AACvB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,YAAY,GAAG,WAAW;IACnC,QAAQ,OAAO,SAAS,CAAC;IACzB,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,OAAO,MAAM,CAAC,sBAAsB,KAAK,WAAW,EAAE;IAC9D,QAAQ,MAAM,CAAC,sBAAsB,GAAG,KAAK,CAAC;IAC9C,KAAK;AACL;IACA,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC;AACpB;IACA;IACA;IACA,IAAI,CAAC,SAAS,MAAM,GAAG;IACvB,QAAQ,IAAI,CAAC,aAAa,IAAI,MAAM,CAAC,sBAAsB,KAAK,KAAK,EAAE;IACvE,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,mBAAmB,EAAE,KAAK,KAAK,EAAE;IAC7C,YAAY,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACrC,gBAAgB,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAC1D,aAAa;IACb,YAAY,IAAI,CAAC,IAAI,EAAE,CAAC;IACxB,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACjC,KAAK,GAAG,CAAC;AACT;IACA;IACA,IAAI,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACtC,IAAI,IAAI,CAAC,QAAQ,GAAG,WAAW;IAC/B,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC;IACzB,KAAK,CAAC;IACN,CAAC;AACD;IACA,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;IACtC,IAAI,SAAS,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;IACxD,CAAC;AACD;IACA;IACA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;AACA;IACA,SAAS,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE;IAClD,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE;IACjD,QAAQ,MAAM,kCAAkC,CAAC;IACjD,KAAK;AACL;IACA,IAAI,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;AAC1B;IACA,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC;AACpB;IACA;IACA,IAAI,IAAI,WAAW,GAAG,EAAE,CAAC;IACzB,IAAI,IAAI,YAAY,GAAG,EAAE,CAAC;IAC1B,IAAI,IAAI,SAAS,GAAG,KAAK,CAAC;IAC1B,IAAI,IAAI,eAAe,GAAG,CAAC,CAAC;IAC5B,IAAI,IAAI,WAAW,CAAC;AACpB;IACA,IAAI,IAAI,qBAAqB,GAAG,CAAC,CAAC;AAClC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACjD;IACA;IACA,IAAI,IAAI,MAAM,CAAC,WAAW,KAAK,IAAI,EAAE;IACrC,QAAQ,qBAAqB,GAAG,CAAC,CAAC;IAClC,KAAK;AACL;IACA,IAAI,IAAI,MAAM,CAAC,qBAAqB,KAAK,CAAC,EAAE;IAC5C,QAAQ,qBAAqB,GAAG,CAAC,CAAC;IAClC,KAAK;AACL;IACA,IAAI,IAAI,CAAC,qBAAqB,IAAI,qBAAqB,GAAG,CAAC,EAAE;IAC7D,QAAQ,qBAAqB,GAAG,CAAC,CAAC;IAClC,KAAK;AACL;IACA,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IAC7B,QAAQ,OAAO,CAAC,GAAG,CAAC,2DAA2D,GAAG,qBAAqB,CAAC,CAAC;IACzG,KAAK;AACL;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,OAAO,MAAM,CAAC,sBAAsB,KAAK,WAAW,EAAE;IAC9D,QAAQ,MAAM,CAAC,sBAAsB,GAAG,IAAI,CAAC;IAC7C,KAAK;AACL;IACA,IAAI,SAAS,mBAAmB,GAAG;IACnC,QAAQ,IAAI,MAAM,CAAC,sBAAsB,KAAK,KAAK,EAAE;IACrD;IACA,YAAY,OAAO,IAAI,CAAC;IACxB,SAAS;AACT;IACA,QAAQ,IAAI,QAAQ,IAAI,WAAW,EAAE;IACrC,YAAY,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;IACrC,gBAAgB,OAAO,KAAK,CAAC;IAC7B,aAAa;IACb,SAAS,MAAM,IAAI,OAAO,IAAI,WAAW,EAAE;IAC3C,YAAY,IAAI,WAAW,CAAC,KAAK,EAAE;IACnC,gBAAgB,OAAO,KAAK,CAAC;IAC7B,aAAa;IACb,SAAS;IACT,QAAQ,OAAO,IAAI,CAAC;IACpB,KAAK;AACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW;IAC7B,QAAQ,IAAI,mBAAmB,EAAE,KAAK,KAAK,EAAE;IAC7C,YAAY,MAAM,yCAAyC,CAAC;IAC5D,SAAS;AACT;IACA,QAAQ,cAAc,EAAE,CAAC;AACzB;IACA,QAAQ,qBAAqB,GAAG,QAAQ,GAAG,KAAK,CAAC;IACjD,QAAQ,SAAS,GAAG,IAAI,CAAC;AACzB;IACA,QAAQ,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,WAAW,EAAE;IACrD,YAAY,MAAM,EAAE,CAAC;IACrB,SAAS;IACT,KAAK,CAAC;AACN;IACA,IAAI,SAAS,qBAAqB,CAAC,MAAM,EAAE,QAAQ,EAAE;IACrD,QAAQ,SAAS,iBAAiB,CAAC,MAAM,EAAE,EAAE,EAAE;IAC/C,YAAY,IAAI,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACrE;IACA;IACA,YAAY,IAAI,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1D,YAAY,IAAI,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5D,YAAY,IAAI,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAC/C,YAAY,IAAI,yBAAyB,GAAG,MAAM,CAAC,yBAAyB,CAAC;IAC7E,YAAY,IAAI,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACzD;IACA,YAAY,IAAI,qBAAqB,KAAK,CAAC,EAAE;IAC7C,gBAAgB,WAAW,GAAG,YAAY,CAAC,WAAW,EAAE,yBAAyB,CAAC,CAAC;IACnF,gBAAgB,YAAY,GAAG,YAAY,CAAC,YAAY,EAAE,yBAAyB,CAAC,CAAC;AACrF;IACA,gBAAgB,IAAI,eAAe,EAAE;IACrC,oBAAoB,WAAW,GAAG,gBAAgB,CAAC,WAAW,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC;IAC7F,oBAAoB,YAAY,GAAG,gBAAgB,CAAC,YAAY,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC;IAC/F,iBAAiB;IACjB,aAAa;AACb;IACA,YAAY,IAAI,qBAAqB,KAAK,CAAC,EAAE;IAC7C,gBAAgB,WAAW,GAAG,YAAY,CAAC,WAAW,EAAE,yBAAyB,CAAC,CAAC;AACnF;IACA,gBAAgB,IAAI,eAAe,EAAE;IACrC,oBAAoB,WAAW,GAAG,gBAAgB,CAAC,WAAW,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC;IAC7F,iBAAiB;IACjB,aAAa;AACb;IACA;IACA,YAAY,IAAI,eAAe,EAAE;IACjC,gBAAgB,UAAU,GAAG,eAAe,CAAC;IAC7C,aAAa;AACb;IACA;IACA;IACA,YAAY,SAAS,gBAAgB,CAAC,IAAI,EAAE,aAAa,EAAE,aAAa,EAAE;IAC1E,gBAAgB,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,aAAa,GAAG,aAAa,CAAC,CAAC,CAAC;IACzF,gBAAgB,IAAI,OAAO,GAAG,EAAE,CAAC;IACjC,gBAAgB,IAAI,YAAY,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,KAAK,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;IAC9E,gBAAgB,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACrC,gBAAgB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;IACvD,oBAAoB,IAAI,GAAG,GAAG,CAAC,GAAG,YAAY,CAAC;IAC/C,oBAAoB,IAAI,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IACnE,oBAAoB,IAAI,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IACjE,oBAAoB,IAAI,OAAO,GAAG,GAAG,GAAG,MAAM,CAAC;IAC/C,oBAAoB,OAAO,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;IACvF,iBAAiB;IACjB,gBAAgB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC9D,gBAAgB,OAAO,OAAO,CAAC;IAC/B,aAAa;AACb;IACA,YAAY,SAAS,iBAAiB,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE;IAC/D,gBAAgB,OAAO,MAAM,GAAG,CAAC,KAAK,GAAG,MAAM,IAAI,OAAO,CAAC;IAC3D,aAAa;AACb;IACA,YAAY,SAAS,YAAY,CAAC,aAAa,EAAE,OAAO,EAAE;IAC1D,gBAAgB,IAAI,MAAM,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC;IACvD,gBAAgB,IAAI,MAAM,GAAG,CAAC,CAAC;IAC/B,gBAAgB,IAAI,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC;AAC/C;IACA,gBAAgB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;IAC9C,oBAAoB,IAAI,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;IAClD,oBAAoB,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,oBAAoB,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC;IAC5C,iBAAiB;AACjB;IACA,gBAAgB,OAAO,MAAM,CAAC;IAC9B,aAAa;AACb;IACA,YAAY,SAAS,UAAU,CAAC,WAAW,EAAE,YAAY,EAAE;IAC3D,gBAAgB,IAAI,MAAM,GAAG,WAAW,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;AACtE;IACA,gBAAgB,IAAI,MAAM,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;AACtD;IACA,gBAAgB,IAAI,UAAU,GAAG,CAAC,CAAC;AACnC;IACA,gBAAgB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG;IACrD,oBAAoB,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;IAC9D,oBAAoB,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;IAC/D,oBAAoB,UAAU,EAAE,CAAC;IACjC,iBAAiB;IACjB,gBAAgB,OAAO,MAAM,CAAC;IAC9B,aAAa;AACb;IACA,YAAY,SAAS,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE;IACzD,gBAAgB,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;IACxC,gBAAgB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;IAC9C,oBAAoB,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,iBAAiB;IACjB,aAAa;AACb;IACA;IACA,YAAY,IAAI,WAAW,CAAC;AAC5B;IACA,YAAY,IAAI,qBAAqB,KAAK,CAAC,EAAE;IAC7C,gBAAgB,WAAW,GAAG,UAAU,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IACpE,aAAa;AACb;IACA,YAAY,IAAI,qBAAqB,KAAK,CAAC,EAAE;IAC7C,gBAAgB,WAAW,GAAG,WAAW,CAAC;IAC1C,aAAa;AACb;IACA,YAAY,IAAI,iBAAiB,GAAG,WAAW,CAAC,MAAM,CAAC;AACvD;IACA;IACA,YAAY,IAAI,qBAAqB,GAAG,EAAE,GAAG,iBAAiB,GAAG,CAAC,CAAC;AACnE;IACA,YAAY,IAAI,MAAM,GAAG,IAAI,WAAW,CAAC,qBAAqB,CAAC,CAAC;AAChE;IACA,YAAY,IAAI,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC5C;IACA;IACA,YAAY,aAAa,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;AAC3C;IACA;IACA;IACA,YAAY,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,GAAG,iBAAiB,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;AAChE;IACA;IACA,YAAY,aAAa,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;AAC3C;IACA;IACA;IACA,YAAY,aAAa,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;AAC5C;IACA;IACA,YAAY,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;AACzC;IACA;IACA,YAAY,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AACxC;IACA;IACA,YAAY,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,qBAAqB,EAAE,IAAI,CAAC,CAAC;AAC5D;IACA;IACA,YAAY,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;AACjD;IACA;IACA,YAAY,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,UAAU,GAAG,qBAAqB,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;AAC7E;IACA;IACA,YAAY,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,qBAAqB,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;AAChE;IACA;IACA,YAAY,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;AACzC;IACA;IACA;IACA,YAAY,aAAa,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;AAC5C;IACA;IACA,YAAY,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,iBAAiB,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;AAC5D;IACA;IACA,YAAY,IAAI,GAAG,GAAG,iBAAiB,CAAC;IACxC,YAAY,IAAI,KAAK,GAAG,EAAE,CAAC;IAC3B,YAAY,IAAI,MAAM,GAAG,CAAC,CAAC;IAC3B,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;IAC1C,gBAAgB,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,MAAM,GAAG,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;IAC/E,gBAAgB,KAAK,IAAI,CAAC,CAAC;IAC3B,aAAa;AACb;IACA,YAAY,IAAI,EAAE,EAAE;IACpB,gBAAgB,OAAO,EAAE,CAAC;IAC1B,oBAAoB,MAAM,EAAE,MAAM;IAClC,oBAAoB,IAAI,EAAE,IAAI;IAC9B,iBAAiB,CAAC,CAAC;IACnB,aAAa;AACb;IACA,YAAY,WAAW,CAAC;IACxB,gBAAgB,MAAM,EAAE,MAAM;IAC9B,gBAAgB,IAAI,EAAE,IAAI;IAC1B,aAAa,CAAC,CAAC;IACf,SAAS;AACT;IACA,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAAE;IAC7B,YAAY,iBAAiB,CAAC,MAAM,EAAE,SAAS,IAAI,EAAE;IACrD,gBAAgB,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACjD,aAAa,CAAC,CAAC;IACf,YAAY,OAAO;IACnB,SAAS;AACT;AACA;IACA,QAAQ,IAAI,SAAS,GAAG,kBAAkB,CAAC,iBAAiB,CAAC,CAAC;AAC9D;IACA,QAAQ,SAAS,CAAC,SAAS,GAAG,SAAS,KAAK,EAAE;IAC9C,YAAY,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzD;IACA;IACA,YAAY,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AACrD;IACA;IACA,YAAY,SAAS,CAAC,SAAS,EAAE,CAAC;IAClC,SAAS,CAAC;AACV;IACA,QAAQ,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACtC,KAAK;AACL;IACA,IAAI,SAAS,kBAAkB,CAAC,SAAS,EAAE;IAC3C,QAAQ,IAAI,SAAS,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE;IAC1E,YAAY,qCAAqC,GAAG,SAAS,CAAC,IAAI,GAAG,cAAc;IACnF,SAAS,EAAE;IACX,YAAY,IAAI,EAAE,wBAAwB;IAC1C,SAAS,CAAC,CAAC,CAAC;AACZ;IACA,QAAQ,IAAI,MAAM,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC;IAC3C,QAAQ,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;IACrC,QAAQ,OAAO,MAAM,CAAC;IACtB,KAAK;AACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,IAAI,GAAG,SAAS,QAAQ,EAAE;IACnC,QAAQ,QAAQ,GAAG,QAAQ,IAAI,WAAW,EAAE,CAAC;AAC7C;IACA;IACA,QAAQ,SAAS,GAAG,KAAK,CAAC;AAC1B;IACA,QAAQ,qBAAqB,CAAC;IAC9B,YAAY,eAAe,EAAE,eAAe;IAC5C,YAAY,UAAU,EAAE,UAAU;IAClC,YAAY,qBAAqB,EAAE,qBAAqB;IACxD,YAAY,yBAAyB,EAAE,eAAe;IACtD,YAAY,WAAW,EAAE,WAAW;IACpC,YAAY,YAAY,EAAE,qBAAqB,KAAK,CAAC,GAAG,EAAE,GAAG,YAAY;IACzE,YAAY,QAAQ,EAAE,MAAM,CAAC,QAAQ;IACrC,SAAS,EAAE,SAAS,MAAM,EAAE,IAAI,EAAE;IAClC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,YAAY,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE;IACzC,gBAAgB,IAAI,EAAE,WAAW;IACjC,aAAa,CAAC,CAAC;AACf;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,YAAY,IAAI,CAAC,MAAM,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAClE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,YAAY,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AAC7B;IACA,YAAY,IAAI,CAAC,UAAU,GAAG,eAAe,IAAI,UAAU,CAAC;IAC5D,YAAY,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AACzC;IACA;IACA,YAAY,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC;AAC1C;IACA,YAAY,qBAAqB,GAAG,KAAK,CAAC;AAC1C;IACA,YAAY,IAAI,QAAQ,EAAE;IAC1B,gBAAgB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,aAAa;IACb,SAAS,CAAC,CAAC;IACX,KAAK,CAAC;AACN;IACA,IAAI,IAAI,OAAO,SAAS,CAAC,OAAO,KAAK,WAAW,EAAE;IAClD,QAAQ,SAAS,CAAC,OAAO,GAAG;IAC5B,YAAY,uBAAuB,EAAE,IAAI;IACzC,YAAY,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,kBAAkB;IAC1E,SAAS,CAAC;IACV,KAAK;AACL;IACA,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,uBAAuB,IAAI,SAAS,CAAC,OAAO,CAAC,uBAAuB,CAAC,KAAK,KAAK,QAAQ,EAAE;IACpH,QAAQ,SAAS,CAAC,OAAO,CAAC,uBAAuB,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;IACzF,KAAK;AACL;IACA,IAAI,IAAI,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,uBAAuB,CAAC;AAC5D;IACA;IACA,IAAI,IAAI,UAAU,GAAG,OAAO,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC;AAClE;IACA,IAAI,IAAI,iBAAiB,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AACzE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;AACA;IACA;IACA,IAAI,IAAI,UAAU,GAAG,OAAO,MAAM,CAAC,UAAU,KAAK,WAAW,GAAG,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AACzF;IACA,IAAI,IAAI,iBAAiB,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE;IACtD,QAAQ,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACjC,YAAY,OAAO,CAAC,GAAG,CAAC,mCAAmC,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAC7G,SAAS;IACT,KAAK;AACL;IACA,IAAI,IAAI,OAAO,CAAC,oBAAoB,EAAE;IACtC,QAAQ,WAAW,GAAG,OAAO,CAAC,oBAAoB,CAAC,UAAU,EAAE,qBAAqB,EAAE,qBAAqB,CAAC,CAAC;IAC7G,KAAK,MAAM,IAAI,OAAO,CAAC,qBAAqB,EAAE;IAC9C,QAAQ,WAAW,GAAG,OAAO,CAAC,qBAAqB,CAAC,UAAU,EAAE,qBAAqB,EAAE,qBAAqB,CAAC,CAAC;IAC9G,KAAK,MAAM;IACX,QAAQ,MAAM,8CAA8C,CAAC;IAC7D,KAAK;AACL;IACA;IACA,IAAI,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;AACpC;IACA,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;IAC5B,QAAQ,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC;IAC5C,KAAK;AACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,UAAU,GAAG,OAAO,MAAM,CAAC,UAAU,KAAK,WAAW,GAAG,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,KAAK,CAAC;AAChH;IACA,IAAI,IAAI,UAAU,GAAG,KAAK,IAAI,UAAU,GAAG,KAAK,EAAE;IAClD;IACA,QAAQ,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACjC,YAAY,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;IAC5E,SAAS;IACT,KAAK;AACL;IACA,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IAC7B,QAAQ,IAAI,MAAM,CAAC,eAAe,EAAE;IACpC,YAAY,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;IAC1E,SAAS;IACT,KAAK;AACL;IACA,IAAI,IAAI,QAAQ,GAAG,KAAK,CAAC;IACzB;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,KAAK,GAAG,WAAW;IAC5B,QAAQ,QAAQ,GAAG,IAAI,CAAC;IACxB,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW;IAC7B,QAAQ,IAAI,mBAAmB,EAAE,KAAK,KAAK,EAAE;IAC7C,YAAY,MAAM,yCAAyC,CAAC;IAC5D,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,SAAS,EAAE;IACxB,YAAY,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACrC,gBAAgB,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IACnE,aAAa;IACb,YAAY,IAAI,CAAC,MAAM,EAAE,CAAC;IAC1B,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,QAAQ,GAAG,KAAK,CAAC;IACzB,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,iBAAiB,GAAG,WAAW;IACxC,QAAQ,MAAM,CAAC,sBAAsB,GAAG,KAAK,CAAC;AAC9C;IACA,QAAQ,IAAI,SAAS,EAAE;IACvB,YAAY,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC3C,SAAS;AACT;IACA,QAAQ,mBAAmB,EAAE,CAAC;IAC9B,KAAK,CAAC;AACN;IACA,IAAI,SAAS,cAAc,GAAG;IAC9B,QAAQ,WAAW,GAAG,EAAE,CAAC;IACzB,QAAQ,YAAY,GAAG,EAAE,CAAC;IAC1B,QAAQ,eAAe,GAAG,CAAC,CAAC;IAC5B,QAAQ,qBAAqB,GAAG,KAAK,CAAC;IACtC,QAAQ,SAAS,GAAG,KAAK,CAAC;IAC1B,QAAQ,QAAQ,GAAG,KAAK,CAAC;IACzB,QAAQ,OAAO,GAAG,IAAI,CAAC;AACvB;IACA,QAAQ,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACvC,QAAQ,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACzC,QAAQ,IAAI,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;IAC3D,QAAQ,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;IAC/C,QAAQ,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IACrC,QAAQ,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;AAC/C;IACA,QAAQ,qBAAqB,GAAG;IAChC,YAAY,IAAI,EAAE,EAAE;IACpB,YAAY,KAAK,EAAE,EAAE;IACrB,YAAY,eAAe,EAAE,CAAC;IAC9B,SAAS,CAAC;IACV,KAAK;AACL;IACA,IAAI,SAAS,mBAAmB,GAAG;IACnC,QAAQ,IAAI,WAAW,EAAE;IACzB,YAAY,WAAW,CAAC,cAAc,GAAG,IAAI,CAAC;IAC9C,YAAY,WAAW,CAAC,UAAU,EAAE,CAAC;IACrC,YAAY,WAAW,GAAG,IAAI,CAAC;IAC/B,SAAS;AACT;IACA,QAAQ,IAAI,UAAU,EAAE;IACxB,YAAY,UAAU,CAAC,UAAU,EAAE,CAAC;IACpC,YAAY,UAAU,GAAG,IAAI,CAAC;IAC9B,SAAS;AACT;IACA,QAAQ,cAAc,EAAE,CAAC;IACzB,KAAK;AACL;IACA;IACA,IAAI,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACtC,IAAI,IAAI,CAAC,QAAQ,GAAG,WAAW;IAC/B,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC;IACzB,KAAK,CAAC;AACN;IACA,IAAI,IAAI,qBAAqB,GAAG,KAAK,CAAC;AACtC;IACA,IAAI,SAAS,2BAA2B,CAAC,CAAC,EAAE;IAC5C,QAAQ,IAAI,QAAQ,EAAE;IACtB,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,mBAAmB,EAAE,KAAK,KAAK,EAAE;IAC7C,YAAY,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACrC,gBAAgB,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAC1D,aAAa;IACb,YAAY,WAAW,CAAC,UAAU,EAAE,CAAC;IACrC,YAAY,SAAS,GAAG,KAAK,CAAC;IAC9B,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,SAAS,EAAE;IACxB,YAAY,IAAI,UAAU,EAAE;IAC5B,gBAAgB,UAAU,CAAC,UAAU,EAAE,CAAC;IACxC,gBAAgB,UAAU,GAAG,IAAI,CAAC;IAClC,aAAa;IACb,YAAY,OAAO;IACnB,SAAS;AACT;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,IAAI,CAAC,qBAAqB,EAAE;IACpC,YAAY,qBAAqB,GAAG,IAAI,CAAC;IACzC,YAAY,IAAI,MAAM,CAAC,qBAAqB,EAAE;IAC9C,gBAAgB,MAAM,CAAC,qBAAqB,EAAE,CAAC;IAC/C,aAAa;AACb;IACA,YAAY,IAAI,MAAM,CAAC,YAAY,EAAE;IACrC,gBAAgB,MAAM,CAAC,YAAY,EAAE,CAAC;IACtC,aAAa;IACb,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,GAAG,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;AACnD;IACA;IACA,QAAQ,IAAI,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;IAC5C,QAAQ,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACjC;IACA,QAAQ,IAAI,qBAAqB,KAAK,CAAC,EAAE;IACzC,YAAY,IAAI,KAAK,GAAG,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IACxD,YAAY,IAAI,OAAO,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;IAClD,YAAY,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvC,SAAS;AACT;IACA,QAAQ,eAAe,IAAI,UAAU,CAAC;AACtC;IACA;IACA,QAAQ,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;AAC/C;IACA,QAAQ,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,WAAW,EAAE;IACrD,YAAY,qBAAqB,CAAC,eAAe,IAAI,UAAU,CAAC;IAChE,YAAY,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACpD;IACA,YAAY,IAAI,qBAAqB,KAAK,CAAC,EAAE;IAC7C,gBAAgB,qBAAqB,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1D,aAAa;IACb,SAAS;IACT,KAAK;AACL;IACA,IAAI,WAAW,CAAC,cAAc,GAAG,2BAA2B,CAAC;AAC7D;IACA;IACA,IAAI,IAAI,OAAO,CAAC,4BAA4B,EAAE;IAC9C,QAAQ,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,4BAA4B,EAAE,CAAC,CAAC;IACpE,KAAK,MAAM;IACX,QAAQ,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACjD,KAAK;AACL;IACA;IACA,IAAI,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACnC,IAAI,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACrC,IAAI,IAAI,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;IACvD,IAAI,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;IAC3C,IAAI,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IACjC,IAAI,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;AAC3C;IACA;IACA,IAAI,IAAI,qBAAqB,GAAG;IAChC,QAAQ,IAAI,EAAE,EAAE;IAChB,QAAQ,KAAK,EAAE,EAAE;IACjB,QAAQ,eAAe,EAAE,CAAC;IAC1B,KAAK,CAAC;AACN;IACA;IACA,IAAI,SAAS,MAAM,GAAG;IACtB,QAAQ,IAAI,CAAC,SAAS,IAAI,OAAO,MAAM,CAAC,eAAe,KAAK,UAAU,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,WAAW,EAAE;IACnH,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,qBAAqB,CAAC,IAAI,CAAC,MAAM,EAAE;IAC/C,YAAY,qBAAqB,CAAC;IAClC,gBAAgB,eAAe,EAAE,eAAe;IAChD,gBAAgB,UAAU,EAAE,UAAU;IACtC,gBAAgB,qBAAqB,EAAE,qBAAqB;IAC5D,gBAAgB,yBAAyB,EAAE,qBAAqB,CAAC,eAAe;IAChF,gBAAgB,WAAW,EAAE,qBAAqB,CAAC,IAAI;IACvD,gBAAgB,YAAY,EAAE,qBAAqB,KAAK,CAAC,GAAG,EAAE,GAAG,qBAAqB,CAAC,KAAK;IAC5F,aAAa,EAAE,SAAS,MAAM,EAAE,IAAI,EAAE;IACtC,gBAAgB,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE;IAC5C,oBAAoB,IAAI,EAAE,WAAW;IACrC,iBAAiB,CAAC,CAAC;IACnB,gBAAgB,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AAC7C;IACA,gBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IACrD,aAAa,CAAC,CAAC;AACf;IACA,YAAY,qBAAqB,GAAG;IACpC,gBAAgB,IAAI,EAAE,EAAE;IACxB,gBAAgB,KAAK,EAAE,EAAE;IACzB,gBAAgB,eAAe,EAAE,CAAC;IAClC,aAAa,CAAC;IACd,SAAS,MAAM;IACf,YAAY,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IACjD,SAAS;IACT,KAAK;IACL,CAAC;AACD;IACA,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;IACtC,IAAI,SAAS,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;IACxD,CAAC;AACD;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;AACA;IACA,SAAS,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE;IAC7C,IAAI,IAAI,OAAO,WAAW,KAAK,WAAW,EAAE;IAC5C,QAAQ,MAAM,8DAA8D,CAAC;IAC7E,KAAK;AACL;IACA,IAAI,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;IAC1B,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;IAC/B,QAAQ,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC;IAClC,KAAK;AACL;IACA;IACA,IAAI,IAAI,+BAA+B,GAAG,KAAK,CAAC;IAChD,IAAI,CAAC,eAAe,EAAE,kBAAkB,EAAE,qBAAqB,CAAC,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE;IACxF,QAAQ,IAAI,IAAI,IAAI,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE;IACtD,YAAY,+BAA+B,GAAG,IAAI,CAAC;IACnD,SAAS;IACT,KAAK,CAAC,CAAC;AACP;IACA,IAAI,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,uBAAuB,IAAI,CAAC,CAAC,MAAM,CAAC,kBAAkB,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;AACzG;IACA,IAAI,IAAI,aAAa,GAAG,EAAE,CAAC;IAC3B,IAAI,IAAI,UAAU,GAAG,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC3E,IAAI,IAAI,SAAS,IAAI,UAAU,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE;IAClD,QAAQ,aAAa,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACpD,KAAK;AACL;IACA,IAAI,IAAI,SAAS,IAAI,aAAa,GAAG,EAAE,EAAE;IACzC,QAAQ,+BAA+B,GAAG,KAAK,CAAC;IAChD,KAAK;AACL;IACA,IAAI,IAAI,MAAM,CAAC,iBAAiB,EAAE;IAClC,QAAQ,+BAA+B,GAAG,KAAK,CAAC;IAChD,KAAK;AACL;IACA,IAAI,IAAI,YAAY,EAAE,mBAAmB,CAAC;AAC1C;IACA,IAAI,IAAI,+BAA+B,EAAE;IACzC,QAAQ,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACjC,YAAY,OAAO,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAC;IACjG,SAAS;AACT;IACA,QAAQ,IAAI,WAAW,YAAY,iBAAiB,EAAE;IACtD,YAAY,YAAY,GAAG,WAAW,CAAC;IACvC,SAAS,MAAM,IAAI,WAAW,YAAY,wBAAwB,EAAE;IACpE,YAAY,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC;IAC9C,SAAS,MAAM;IACf,YAAY,MAAM,mEAAmE,CAAC;IACtF,SAAS;IACT,KAAK,MAAM,IAAI,CAAC,CAAC,SAAS,CAAC,eAAe,EAAE;IAC5C,QAAQ,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACjC,YAAY,OAAO,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;IAC3E,SAAS;IACT,KAAK;AACL;IACA,IAAI,IAAI,WAAW,CAAC;AACpB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW;IAC7B,QAAQ,WAAW,GAAG,IAAI,CAAC;AAC3B;IACA,QAAQ,IAAI,+BAA+B,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE;IAC1E;IACA,YAAY,IAAI,iBAAiB,CAAC;IAClC,YAAY,IAAI,eAAe,IAAI,YAAY,EAAE;IACjD,gBAAgB,iBAAiB,GAAG,YAAY,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IACnE,aAAa,MAAM,IAAI,kBAAkB,IAAI,YAAY,EAAE;IAC3D,gBAAgB,iBAAiB,GAAG,YAAY,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACtE,aAAa,MAAM,IAAI,qBAAqB,IAAI,YAAY,EAAE;IAC9D,gBAAgB,iBAAiB,GAAG,YAAY,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;IACzE,aAAa;AACb;IACA,YAAY,IAAI;IAChB,gBAAgB,IAAI,QAAQ,GAAG,IAAI,WAAW,EAAE,CAAC;IACjD,gBAAgB,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5E,gBAAgB,iBAAiB,GAAG,QAAQ,CAAC;IAC7C,aAAa,CAAC,OAAO,CAAC,EAAE,EAAE;AAC1B;IACA,YAAY,IAAI,CAAC,iBAAiB,EAAE;IACpC,gBAAgB,MAAM,sCAAsC,CAAC;IAC7D,aAAa;AACb;IACA;IACA;IACA,YAAY,mBAAmB,GAAG,IAAI,mBAAmB,CAAC,iBAAiB,EAAE;IAC7E,gBAAgB,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,YAAY;IACzD,aAAa,CAAC,CAAC;IACf,YAAY,mBAAmB,CAAC,MAAM,EAAE,CAAC;IACzC,SAAS,MAAM;IACf,YAAY,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC;IAC/B,YAAY,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IAC5C,YAAY,eAAe,EAAE,CAAC;IAC9B,SAAS;AACT;IACA,QAAQ,IAAI,MAAM,CAAC,YAAY,EAAE;IACjC,YAAY,MAAM,CAAC,YAAY,EAAE,CAAC;IAClC,SAAS;IACT,KAAK,CAAC;AACN;IACA,IAAI,IAAI,CAAC,aAAa,GAAG,SAAS,QAAQ,EAAE;IAC5C,QAAQ,IAAI,WAAW,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE;IAC7D,YAAY,QAAQ,EAAE,CAAC;IACvB,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;IAChD,QAAQ,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,KAAK,EAAE,GAAG,EAAE;IACnD,YAAY,IAAI,eAAe,GAAG,YAAY,GAAG,GAAG,CAAC;IACrD,YAAY,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACrC,gBAAgB,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,GAAG,GAAG,YAAY,GAAG,mBAAmB,CAAC,CAAC;IACxF,aAAa;AACb;IACA,YAAY,IAAI,MAAM,CAAC,kBAAkB,EAAE;IAC3C,gBAAgB,MAAM,CAAC,kBAAkB,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;IACzE,aAAa;AACb;IACA,YAAY,IAAI,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;IAC9D,YAAY,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC;IAC5C,SAAS,CAAC,CAAC;AACX;IACA,QAAQ,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACjC,YAAY,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC3C,SAAS;AACT;IACA,QAAQ,QAAQ,EAAE,CAAC;IACnB,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,IAAI,GAAG,SAAS,QAAQ,EAAE;IACnC,QAAQ,WAAW,GAAG,KAAK,CAAC;AAC5B;IACA,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC;AACxB;IACA,QAAQ,IAAI,+BAA+B,IAAI,mBAAmB,EAAE;IACpE,YAAY,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/C,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,aAAa,CAAC,WAAW;IACtC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,YAAY,MAAM,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE;IAC1C,gBAAgB,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACzC,oBAAoB,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACvD,iBAAiB;AACjB;IACA,gBAAgB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjC;IACA,gBAAgB,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;IACvC,oBAAoB,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,EAAE,EAAE;IAC7C,wBAAwB,IAAI,EAAE,YAAY;IAC1C,qBAAqB,CAAC,CAAC;IACvB,iBAAiB;AACjB;IACA,gBAAgB,IAAI,QAAQ,EAAE;IAC9B,oBAAoB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,iBAAiB;AACjB;IACA,gBAAgB,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC;IACnC,aAAa,CAAC,CAAC;IACf,SAAS,CAAC,CAAC;IACX,KAAK,CAAC;AACN;IACA,IAAI,IAAI,iBAAiB,GAAG,KAAK,CAAC;AAClC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,KAAK,GAAG,WAAW;IAC5B,QAAQ,iBAAiB,GAAG,IAAI,CAAC;AACjC;IACA,QAAQ,IAAI,mBAAmB,YAAY,mBAAmB,EAAE;IAChE,YAAY,mBAAmB,CAAC,KAAK,EAAE,CAAC;IACxC,YAAY,OAAO;IACnB,SAAS;IACT,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW;IAC7B,QAAQ,iBAAiB,GAAG,KAAK,CAAC;AAClC;IACA,QAAQ,IAAI,mBAAmB,YAAY,mBAAmB,EAAE;IAChE,YAAY,mBAAmB,CAAC,MAAM,EAAE,CAAC;IACzC,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,WAAW,EAAE;IAC1B,YAAY,IAAI,CAAC,MAAM,EAAE,CAAC;IAC1B,SAAS;IACT,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,iBAAiB,GAAG,WAAW;IACxC,QAAQ,IAAI,WAAW,EAAE;IACzB,YAAY,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC3C,SAAS;IACT,QAAQ,mBAAmB,EAAE,CAAC;IAC9B,KAAK,CAAC;AACN;IACA,IAAI,SAAS,mBAAmB,GAAG;IACnC,QAAQ,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC;IAC3B,QAAQ,WAAW,GAAG,KAAK,CAAC;IAC5B,QAAQ,iBAAiB,GAAG,KAAK,CAAC;IAClC,KAAK;AACL;IACA;IACA,IAAI,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IACjC,IAAI,IAAI,CAAC,QAAQ,GAAG,WAAW;IAC/B,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC;IACzB,KAAK,CAAC;AACN;IACA,IAAI,SAAS,WAAW,GAAG;IAC3B;IACA,QAAQ,IAAI,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACzD,QAAQ,IAAI,OAAO,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACjD;IACA;IACA,QAAQ,SAAS,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;IAC5C,QAAQ,SAAS,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;AAC9C;IACA;IACA,QAAQ,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7C;IACA;IACA,QAAQ,OAAO,SAAS,CAAC;IACzB,KAAK;AACL;IACA,IAAI,SAAS,eAAe,GAAG;IAC/B,QAAQ,IAAI,iBAAiB,EAAE;IAC/B,YAAY,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IAC5C,YAAY,OAAO,UAAU,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;IACpD,SAAS;AACT;IACA,QAAQ,IAAI,WAAW,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE;IAC7D,YAAY,IAAI,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC;IAC3D;IACA,YAAY,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;AAC5C;IACA,YAAY,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;IAC/B,gBAAgB,KAAK,EAAE,WAAW,EAAE;IACpC,gBAAgB,QAAQ,EAAE,QAAQ;IAClC,aAAa,CAAC,CAAC;AACf;IACA,YAAY,IAAI,WAAW,EAAE;IAC7B,gBAAgB,UAAU,CAAC,eAAe,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IAClE,aAAa;IACb,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,WAAW,CAAC,WAAW,EAAE;IACjC,YAAY,SAAS,EAAE,OAAO,MAAM,CAAC,gBAAgB,KAAK,WAAW,IAAI,MAAM,CAAC,gBAAgB;IAChG,YAAY,UAAU,EAAE,SAAS,MAAM,EAAE;IACzC,gBAAgB,IAAI,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC;IAC/D,gBAAgB,IAAI,CAAC,QAAQ,EAAE;IAC/B,oBAAoB,OAAO,UAAU,CAAC,eAAe,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IAC7E,iBAAiB;AACjB;IACA;IACA,gBAAgB,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;AAChD;IACA,gBAAgB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;IACnC,oBAAoB,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5D,oBAAoB,QAAQ,EAAE,QAAQ;IACtC,iBAAiB,CAAC,CAAC;AACnB;IACA,gBAAgB,IAAI,WAAW,EAAE;IACjC,oBAAoB,UAAU,CAAC,eAAe,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IACtE,iBAAiB;IACjB,aAAa;IACb,SAAS,CAAC,CAAC;IACX,KAAK;AACL;IACA,IAAI,IAAI,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;AACxC;IACA,IAAI,IAAI,MAAM,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACvC,CAAC;AACD;IACA,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;IACtC,IAAI,SAAS,CAAC,cAAc,GAAG,cAAc,CAAC;IAC9C,CAAC;AACD;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;AACA;IACA,SAAS,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE;AAC7C;IACA,IAAI,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;AAC1B;IACA,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;IAC/B,QAAQ,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC;IAClC,KAAK;AACL;IACA,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IAC7B,QAAQ,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IACpE,KAAK;AACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW;IAC7B,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;IAC3B,YAAY,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC;IAC/B,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;IAC5B,YAAY,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC;IAChC,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;IAC3B,YAAY,MAAM,CAAC,KAAK,GAAG;IAC3B,gBAAgB,KAAK,EAAE,MAAM,CAAC,KAAK;IACnC,gBAAgB,MAAM,EAAE,MAAM,CAAC,MAAM;IACrC,aAAa,CAAC;IACd,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;IAC5B,YAAY,MAAM,CAAC,MAAM,GAAG;IAC5B,gBAAgB,KAAK,EAAE,MAAM,CAAC,KAAK;IACnC,gBAAgB,MAAM,EAAE,MAAM,CAAC,MAAM;IACrC,aAAa,CAAC;IACd,SAAS;AACT;IACA,QAAQ,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,GAAG,CAAC;IAClD,QAAQ,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC;AACpD;IACA,QAAQ,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC1C;IACA;IACA,QAAQ,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,YAAY,gBAAgB,EAAE;IACtE,YAAY,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;AAC7C;IACA,YAAY,IAAI,MAAM,CAAC,YAAY,EAAE;IACrC,gBAAgB,MAAM,CAAC,YAAY,EAAE,CAAC;IACtC,aAAa;IACb,SAAS,MAAM;IACf,YAAY,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AACpD;IACA,YAAY,YAAY,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;AAC7C;IACA,YAAY,KAAK,CAAC,gBAAgB,GAAG,WAAW;IAChD,gBAAgB,IAAI,MAAM,CAAC,YAAY,EAAE;IACzC,oBAAoB,MAAM,CAAC,YAAY,EAAE,CAAC;IAC1C,iBAAiB;IACjB,aAAa,CAAC;AACd;IACA,YAAY,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;IAC7C,YAAY,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;IAC/C,SAAS;AACT;IACA,QAAQ,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;IAC3B,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;AACrB;IACA,QAAQ,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IACxC,QAAQ,MAAM,GAAG,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;AACpC;IACA,QAAQ,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACjC,YAAY,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAChF,YAAY,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,KAAK,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/G,SAAS;AACT;IACA,QAAQ,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IACzC,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA,IAAI,SAAS,UAAU,CAAC,aAAa,EAAE;IACvC,QAAQ,aAAa,GAAG,OAAO,aAAa,KAAK,WAAW,GAAG,aAAa,GAAG,EAAE,CAAC;AAClF;IACA,QAAQ,IAAI,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC;IACvD,QAAQ,IAAI,CAAC,QAAQ,EAAE;IACvB,YAAY,OAAO,UAAU,CAAC,UAAU,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;IACxE,SAAS;AACT;IACA,QAAQ,IAAI,iBAAiB,EAAE;IAC/B,YAAY,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IAC5C,YAAY,OAAO,UAAU,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IAC/C,SAAS;AACT;IACA;IACA,QAAQ,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;AACxC;IACA,QAAQ,IAAI,KAAK,CAAC,MAAM,EAAE;IAC1B;IACA;IACA,YAAY,KAAK,CAAC,IAAI,EAAE,CAAC;IACzB,SAAS;AACT;IACA,QAAQ,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACpE,QAAQ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;IAC3B,YAAY,QAAQ,EAAE,QAAQ;IAC9B,YAAY,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC;IACjD,SAAS,CAAC,CAAC;AACX;IACA,QAAQ,IAAI,CAAC,aAAa,EAAE;IAC5B,YAAY,UAAU,CAAC,UAAU,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;IACjE,SAAS;IACT,KAAK;AACL;IACA,IAAI,SAAS,SAAS,CAAC,CAAC,EAAE;IAC1B,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC;IAClB,YAAY,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;AAC9B;IACA,QAAQ,CAAC,SAAS,IAAI,GAAG;IACzB,YAAY,CAAC,EAAE,CAAC;IAChB,YAAY,IAAI,CAAC,KAAK,MAAM,EAAE;IAC9B,gBAAgB,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC7B,gBAAgB,OAAO;IACvB,aAAa;AACb;IACA;IACA,YAAY,UAAU,CAAC,WAAW;IAClC,gBAAgB,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC1C,aAAa,EAAE,CAAC,CAAC,CAAC;IAClB,SAAS,GAAG,CAAC;IACb,KAAK;AACL;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,SAAS,eAAe,CAAC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,QAAQ,EAAE;IAChG,QAAQ,IAAI,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC3D,QAAQ,WAAW,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IACzC,QAAQ,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC3C,QAAQ,IAAI,SAAS,GAAG,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACrD,QAAQ,IAAI,YAAY,GAAG,EAAE,CAAC;AAC9B;IACA,QAAQ,IAAI,kBAAkB,GAAG,cAAc,KAAK,CAAC,CAAC,CAAC;IACvD,QAAQ,IAAI,aAAa,GAAG,CAAC,cAAc,IAAI,cAAc,GAAG,CAAC,IAAI,cAAc,IAAI,OAAO,CAAC,MAAM;IACrG,YAAY,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAC5C,QAAQ,IAAI,WAAW,GAAG;IAC1B,YAAY,CAAC,EAAE,CAAC;IAChB,YAAY,CAAC,EAAE,CAAC;IAChB,YAAY,CAAC,EAAE,CAAC;IAChB,SAAS,CAAC;IACV,QAAQ,IAAI,kBAAkB,GAAG,IAAI,CAAC,IAAI;IAC1C,YAAY,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5B,YAAY,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5B,YAAY,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5B,SAAS,CAAC;IACV,QAAQ,IAAI,YAAY,GAAG,aAAa,IAAI,aAAa,IAAI,CAAC,IAAI,aAAa,IAAI,CAAC,GAAG,aAAa,GAAG,CAAC,CAAC;IACzG,QAAQ,IAAI,cAAc,GAAG,eAAe,IAAI,eAAe,IAAI,CAAC,IAAI,eAAe,IAAI,CAAC,GAAG,eAAe,GAAG,CAAC,CAAC;IACnH,QAAQ,IAAI,cAAc,GAAG,KAAK,CAAC;AACnC;IACA,QAAQ,SAAS,CAAC;IAClB,YAAY,MAAM,EAAE,aAAa;IACjC,YAAY,cAAc,EAAE,SAAS,IAAI,EAAE,CAAC,EAAE;IAC9C,gBAAgB,IAAI,aAAa,EAAE,WAAW,EAAE,WAAW,CAAC;AAC5D;IACA,gBAAgB,IAAI,WAAW,GAAG,WAAW;IAC7C,oBAAoB,IAAI,CAAC,cAAc,IAAI,WAAW,GAAG,aAAa,IAAI,WAAW,GAAG,cAAc,EAAE,CAEnF,MAAM;IAC3B;IACA,wBAAwB,IAAI,kBAAkB,EAAE;IAChD,4BAA4B,cAAc,GAAG,IAAI,CAAC;IAClD,yBAAyB;IACzB,wBAAwB,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,qBAAqB;IACrB,oBAAoB,IAAI,EAAE,CAAC;IAC3B,iBAAiB,CAAC;AAClB;IACA,gBAAgB,IAAI,CAAC,cAAc,EAAE;IACrC,oBAAoB,IAAI,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;IAC5C,oBAAoB,KAAK,CAAC,MAAM,GAAG,WAAW;IAC9C,wBAAwB,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACtF,wBAAwB,IAAI,SAAS,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAClG,wBAAwB,aAAa,GAAG,CAAC,CAAC;IAC1C,wBAAwB,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;IAC5D,wBAAwB,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAChE;IACA,wBAAwB,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,WAAW,EAAE,GAAG,IAAI,CAAC,EAAE;IACvE,4BAA4B,IAAI,YAAY,GAAG;IAC/C,gCAAgC,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;IACtD,gCAAgC,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;IAC1D,gCAAgC,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;IAC1D,6BAA6B,CAAC;IAC9B,4BAA4B,IAAI,eAAe,GAAG,IAAI,CAAC,IAAI;IAC3D,gCAAgC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3E,gCAAgC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3E,gCAAgC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3E,6BAA6B,CAAC;IAC9B;IACA,4BAA4B,IAAI,eAAe,IAAI,kBAAkB,GAAG,YAAY,EAAE;IACtF,gCAAgC,aAAa,EAAE,CAAC;IAChD,6BAA6B;IAC7B,yBAAyB;IACzB,wBAAwB,WAAW,EAAE,CAAC;IACtC,qBAAqB,CAAC;IACtB,oBAAoB,KAAK,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACjD,iBAAiB,MAAM;IACvB,oBAAoB,WAAW,EAAE,CAAC;IAClC,iBAAiB;IACjB,aAAa;IACb,YAAY,QAAQ,EAAE,WAAW;IACjC,gBAAgB,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;AACjF;IACA,gBAAgB,IAAI,YAAY,CAAC,MAAM,IAAI,CAAC,EAAE;IAC9C;IACA;IACA,oBAAoB,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACnE,iBAAiB;IACjB,gBAAgB,QAAQ,CAAC,YAAY,CAAC,CAAC;IACvC,aAAa;IACb,SAAS,CAAC,CAAC;IACX,KAAK;AACL;IACA,IAAI,IAAI,aAAa,GAAG,KAAK,CAAC;AAC9B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,IAAI,GAAG,SAAS,QAAQ,EAAE;IACnC,QAAQ,QAAQ,GAAG,QAAQ,IAAI,WAAW,EAAE,CAAC;AAC7C;IACA,QAAQ,aAAa,GAAG,IAAI,CAAC;AAC7B;IACA,QAAQ,IAAI,KAAK,GAAG,IAAI,CAAC;IACzB;IACA,QAAQ,UAAU,CAAC,WAAW;IAC9B;IACA;IACA;IACA,YAAY,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE;IAC5E,gBAAgB,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;AACvC;IACA;IACA,gBAAgB,IAAI,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE;IACzE,oBAAoB,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/E,iBAAiB;AACjB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,gBAAgB,MAAM,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE;IAC9C,oBAAoB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;AACtC;IACA,oBAAoB,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE;IAC5C,wBAAwB,KAAK,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,EAAE,EAAE;IAClD,4BAA4B,IAAI,EAAE,YAAY;IAC9C,yBAAyB,CAAC,CAAC;IAC3B,qBAAqB;AACrB;IACA,oBAAoB,IAAI,QAAQ,EAAE;IAClC,wBAAwB,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7C,qBAAqB;IACrB,iBAAiB,CAAC,CAAC;IACnB,aAAa,CAAC,CAAC;IACf,SAAS,EAAE,EAAE,CAAC,CAAC;IACf,KAAK,CAAC;AACN;IACA,IAAI,IAAI,iBAAiB,GAAG,KAAK,CAAC;AAClC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,KAAK,GAAG,WAAW;IAC5B,QAAQ,iBAAiB,GAAG,IAAI,CAAC;IACjC,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW;IAC7B,QAAQ,iBAAiB,GAAG,KAAK,CAAC;AAClC;IACA,QAAQ,IAAI,aAAa,EAAE;IAC3B,YAAY,IAAI,CAAC,MAAM,EAAE,CAAC;IAC1B,SAAS;IACT,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,iBAAiB,GAAG,WAAW;IACxC,QAAQ,IAAI,CAAC,aAAa,EAAE;IAC5B,YAAY,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC3C,SAAS;IACT,QAAQ,mBAAmB,EAAE,CAAC;IAC9B,KAAK,CAAC;AACN;IACA,IAAI,SAAS,mBAAmB,GAAG;IACnC,QAAQ,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC;IAC3B,QAAQ,aAAa,GAAG,IAAI,CAAC;IAC7B,QAAQ,iBAAiB,GAAG,KAAK,CAAC;IAClC,KAAK;AACL;IACA;IACA,IAAI,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IACjC,IAAI,IAAI,CAAC,QAAQ,GAAG,WAAW;IAC/B,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC;IACzB,KAAK,CAAC;AACN;IACA,IAAI,IAAI,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAClD,IAAI,IAAI,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC1C;IACA,IAAI,IAAI,KAAK,CAAC;IACd,IAAI,IAAI,QAAQ,CAAC;IACjB,IAAI,IAAI,MAAM,CAAC;IACf,CAAC;AACD;IACA,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;IACtC,IAAI,SAAS,CAAC,cAAc,GAAG,cAAc,CAAC;IAC9C,CAAC;AACD;IACA;IACA;IACA;AACA;IACA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;AACA;IACA,IAAI,MAAM,GAAG,CAAC,WAAW;IACzB;AACA;IACA,IAAI,SAAS,WAAW,CAAC,QAAQ,EAAE;IACnC,QAAQ,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACzB,QAAQ,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,CAAC,CAAC;IACtC,QAAQ,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;IAC3B,KAAK;AACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,WAAW,CAAC,SAAS,CAAC,GAAG,GAAG,SAAS,KAAK,EAAE,QAAQ,EAAE;IAC1D,QAAQ,IAAI,QAAQ,IAAI,KAAK,EAAE;IAC/B,YAAY,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;IACjC,SAAS;AACT;IACA,QAAQ,IAAI,WAAW,IAAI,KAAK,EAAE;IAClC,YAAY,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAChE,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,CAAC,6BAA6B,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE;IAC1D,YAAY,MAAM,iFAAiF,CAAC;IACpG,SAAS;IACT,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IACzB,YAAY,KAAK,EAAE,KAAK;IACxB,YAAY,QAAQ,EAAE,QAAQ,IAAI,IAAI,CAAC,QAAQ;IAC/C,SAAS,CAAC,CAAC;IACX,KAAK,CAAC;AACN;IACA,IAAI,SAAS,kBAAkB,CAAC,SAAS,EAAE;IAC3C,QAAQ,IAAI,IAAI,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE;IACrE,YAAY,oCAAoC,GAAG,SAAS,CAAC,IAAI,GAAG,cAAc;IAClF,SAAS,EAAE;IACX,YAAY,IAAI,EAAE,wBAAwB;IAC1C,SAAS,CAAC,CAAC,CAAC;AACZ;IACA,QAAQ,IAAI,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;IACtC,QAAQ,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAClC,QAAQ,OAAO,MAAM,CAAC;IACtB,KAAK;AACL;IACA,IAAI,SAAS,iBAAiB,CAAC,MAAM,EAAE;IACvC,QAAQ,SAAS,WAAW,CAAC,MAAM,EAAE;IACrC,YAAY,IAAI,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAC3C,YAAY,IAAI,CAAC,IAAI,EAAE;IACvB,gBAAgB,OAAO,EAAE,CAAC;IAC1B,aAAa;AACb;IACA,YAAY,IAAI,kBAAkB,GAAG,KAAK,CAAC;AAC3C;IACA,YAAY,IAAI,IAAI,GAAG,CAAC;IACxB,gBAAgB,IAAI,EAAE,UAAU;IAChC,gBAAgB,MAAM,EAAE,CAAC;IACzB,oBAAoB,MAAM,EAAE,CAAC;IAC7B,oBAAoB,IAAI,EAAE,MAAM;IAChC,iBAAiB,EAAE;IACnB,oBAAoB,MAAM,EAAE,CAAC;IAC7B,oBAAoB,IAAI,EAAE,MAAM;IAChC,iBAAiB,EAAE;IACnB,oBAAoB,MAAM,EAAE,CAAC;IAC7B,oBAAoB,IAAI,EAAE,MAAM;IAChC,iBAAiB,EAAE;IACnB,oBAAoB,MAAM,EAAE,CAAC;IAC7B,oBAAoB,IAAI,EAAE,MAAM;IAChC,iBAAiB,EAAE;IACnB,oBAAoB,MAAM,EAAE,MAAM;IAClC,oBAAoB,IAAI,EAAE,MAAM;IAChC,iBAAiB,EAAE;IACnB,oBAAoB,MAAM,EAAE,CAAC;IAC7B,oBAAoB,IAAI,EAAE,MAAM;IAChC,iBAAiB,EAAE;IACnB,oBAAoB,MAAM,EAAE,CAAC;IAC7B,oBAAoB,IAAI,EAAE,MAAM;IAChC,iBAAiB,CAAC;IAClB,aAAa,EAAE;IACf,gBAAgB,IAAI,EAAE,UAAU;IAChC,gBAAgB,MAAM,EAAE,CAAC;IACzB,oBAAoB,IAAI,EAAE,UAAU;IACpC,oBAAoB,MAAM,EAAE,CAAC;IAC7B,wBAAwB,MAAM,EAAE,GAAG;IACnC,wBAAwB,IAAI,EAAE,QAAQ;IACtC,qBAAqB,EAAE;IACvB,wBAAwB,MAAM,EAAE,QAAQ;IACxC,wBAAwB,IAAI,EAAE,MAAM;IACpC,qBAAqB,EAAE;IACvB,wBAAwB,MAAM,EAAE,QAAQ;IACxC,wBAAwB,IAAI,EAAE,MAAM;IACpC,qBAAqB,EAAE;IACvB,wBAAwB,MAAM,EAAE,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC7D,wBAAwB,IAAI,EAAE,MAAM;IACpC,qBAAqB,CAAC;IACtB,iBAAiB,EAAE;IACnB,oBAAoB,IAAI,EAAE,UAAU;IACpC,oBAAoB,MAAM,EAAE,CAAC;IAC7B,wBAAwB,IAAI,EAAE,IAAI;IAClC,wBAAwB,MAAM,EAAE,CAAC;IACjC,4BAA4B,MAAM,EAAE,CAAC;IACrC,4BAA4B,IAAI,EAAE,IAAI;IACtC,yBAAyB,EAAE;IAC3B,4BAA4B,MAAM,EAAE,CAAC;IACrC,4BAA4B,IAAI,EAAE,MAAM;IACxC,yBAAyB,EAAE;IAC3B,4BAA4B,MAAM,EAAE,CAAC;IACrC,4BAA4B,IAAI,EAAE,IAAI;IACtC,yBAAyB,EAAE;IAC3B,4BAA4B,MAAM,EAAE,KAAK;IACzC,4BAA4B,IAAI,EAAE,QAAQ;IAC1C,yBAAyB,EAAE;IAC3B,4BAA4B,MAAM,EAAE,OAAO;IAC3C,4BAA4B,IAAI,EAAE,IAAI;IACtC,yBAAyB,EAAE;IAC3B,4BAA4B,MAAM,EAAE,KAAK;IACzC,4BAA4B,IAAI,EAAE,QAAQ;IAC1C,yBAAyB,EAAE;IAC3B,4BAA4B,MAAM,EAAE,CAAC;IACrC,4BAA4B,IAAI,EAAE,IAAI;IACtC,yBAAyB,EAAE;IAC3B,4BAA4B,IAAI,EAAE,IAAI;IACtC,4BAA4B,MAAM,EAAE,CAAC;IACrC,gCAAgC,MAAM,EAAE,IAAI,CAAC,KAAK;IAClD,gCAAgC,IAAI,EAAE,IAAI;IAC1C,6BAA6B,EAAE;IAC/B,gCAAgC,MAAM,EAAE,IAAI,CAAC,MAAM;IACnD,gCAAgC,IAAI,EAAE,IAAI;IAC1C,6BAA6B,CAAC;IAC9B,yBAAyB,CAAC;IAC1B,qBAAqB,CAAC;IACtB,iBAAiB,CAAC;IAClB,aAAa,CAAC,CAAC;AACf;IACA;IACA,YAAY,IAAI,WAAW,GAAG,CAAC,CAAC;IAChC,YAAY,IAAI,eAAe,GAAG,CAAC,CAAC;IACpC,YAAY,OAAO,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE;AAChD;IACA,gBAAgB,IAAI,aAAa,GAAG,EAAE,CAAC;IACvC,gBAAgB,IAAI,eAAe,GAAG,CAAC,CAAC;IACxC,gBAAgB,GAAG;IACnB,oBAAoB,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;IAC5D,oBAAoB,eAAe,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC;IACpE,oBAAoB,WAAW,EAAE,CAAC;IAClC,iBAAiB,QAAQ,WAAW,GAAG,MAAM,CAAC,MAAM,IAAI,eAAe,GAAG,kBAAkB,EAAE;AAC9F;IACA,gBAAgB,IAAI,cAAc,GAAG,CAAC,CAAC;IACvC,gBAAgB,IAAI,OAAO,GAAG;IAC9B,oBAAoB,IAAI,EAAE,UAAU;IACpC,oBAAoB,MAAM,EAAE,cAAc,CAAC,eAAe,EAAE,cAAc,EAAE,aAAa,CAAC;IAC1F,iBAAiB,CAAC;IAClB,gBAAgB,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3C,gBAAgB,eAAe,IAAI,eAAe,CAAC;IACnD,aAAa;AACb;IACA,YAAY,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;IACtC,SAAS;AACT;IACA,QAAQ,SAAS,cAAc,CAAC,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE;IAChF,YAAY,OAAO,CAAC;IACpB,gBAAgB,MAAM,EAAE,eAAe;IACvC,gBAAgB,IAAI,EAAE,IAAI;IAC1B,aAAa,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE;IACvD,gBAAgB,IAAI,KAAK,GAAG,eAAe,CAAC;IAC5C,oBAAoB,WAAW,EAAE,CAAC;IAClC,oBAAoB,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7C,oBAAoB,SAAS,EAAE,CAAC;IAChC,oBAAoB,QAAQ,EAAE,CAAC;IAC/B,oBAAoB,MAAM,EAAE,CAAC;IAC7B,oBAAoB,QAAQ,EAAE,CAAC;IAC/B,oBAAoB,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC;IACxD,iBAAiB,CAAC,CAAC;IACnB,gBAAgB,cAAc,IAAI,IAAI,CAAC,QAAQ,CAAC;IAChD,gBAAgB,OAAO;IACvB,oBAAoB,IAAI,EAAE,KAAK;IAC/B,oBAAoB,EAAE,EAAE,IAAI;IAC5B,iBAAiB,CAAC;IAClB,aAAa,CAAC,CAAC,CAAC;IAChB,SAAS;AACT;IACA;AACA;IACA,QAAQ,SAAS,WAAW,CAAC,MAAM,EAAE;IACrC,YAAY,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;IAC5B,gBAAgB,WAAW,CAAC;IAC5B,oBAAoB,KAAK,EAAE,kFAAkF;IAC7G,iBAAiB,CAAC,CAAC;IACnB,gBAAgB,OAAO;IACvB,aAAa;AACb;IACA,YAAY,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK;IACvC,gBAAgB,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM;IACzC,gBAAgB,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC9C;IACA,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;IACpD,gBAAgB,QAAQ,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC/C,aAAa;IACb,YAAY,OAAO;IACnB,gBAAgB,QAAQ,EAAE,QAAQ;IAClC,gBAAgB,KAAK,EAAE,KAAK;IAC5B,gBAAgB,MAAM,EAAE,MAAM;IAC9B,aAAa,CAAC;IACd,SAAS;AACT;IACA,QAAQ,SAAS,WAAW,CAAC,GAAG,EAAE;IAClC,YAAY,IAAI,KAAK,GAAG,EAAE,CAAC;IAC3B,YAAY,OAAO,GAAG,GAAG,CAAC,EAAE;IAC5B,gBAAgB,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;IACvC,gBAAgB,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC;IAC/B,aAAa;IACb,YAAY,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACnD,SAAS;AACT;IACA,QAAQ,SAAS,WAAW,CAAC,GAAG,EAAE;IAClC,YAAY,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;IAChE,gBAAgB,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACvC,aAAa,CAAC,CAAC,CAAC;IAChB,SAAS;AACT;IACA,QAAQ,SAAS,YAAY,CAAC,IAAI,EAAE;IACpC,YAAY,IAAI,IAAI,GAAG,EAAE,CAAC;IAC1B,YAAY,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;IAChG,YAAY,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC;IAC9B,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;IACrD,gBAAgB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1D,aAAa;IACb,YAAY,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;IACxC,SAAS;AACT;IACA,QAAQ,SAAS,YAAY,CAAC,IAAI,EAAE;IACpC,YAAY,IAAI,IAAI,GAAG,EAAE,CAAC;IAC1B,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;IAClD,gBAAgB,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACxC;IACA,gBAAgB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;IAC9C,oBAAoB,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAC9C,iBAAiB;AACjB;IACA,gBAAgB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;IAC9C,oBAAoB,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1D,iBAAiB;AACjB;IACA,gBAAgB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;IAC9C,oBAAoB,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAC7C,iBAAiB;AACjB;IACA,gBAAgB,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC;IACtE,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACnF,gBAAgB,IAAI,YAAY,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACnD,gBAAgB,IAAI,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC;IAC9G,gBAAgB,IAAI,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC;AACxE;IACA,gBAAgB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACnD,gBAAgB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9C,gBAAgB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,aAAa;AACb;IACA,YAAY,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE;IAClC,gBAAgB,IAAI,EAAE,YAAY;IAClC,aAAa,CAAC,CAAC;IACf,SAAS;AAWT;IACA,QAAQ,SAAS,eAAe,CAAC,IAAI,EAAE;IACvC,YAAY,IAAI,KAAK,GAAG,CAAC,CAAC;AAC1B;IACA,YAAY,IAAI,IAAI,CAAC,QAAQ,EAAE;IAC/B,gBAAgB,KAAK,IAAI,GAAG,CAAC;IAC7B,aAAa;AACb;IACA,YAAY,IAAI,IAAI,CAAC,SAAS,EAAE;IAChC,gBAAgB,KAAK,IAAI,CAAC,CAAC;IAC3B,aAAa;AACb;IACA,YAAY,IAAI,IAAI,CAAC,MAAM,EAAE;IAC7B,gBAAgB,KAAK,KAAK,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;IAC5C,aAAa;AACb;IACA,YAAY,IAAI,IAAI,CAAC,WAAW,EAAE;IAClC,gBAAgB,KAAK,IAAI,CAAC,CAAC;IAC3B,aAAa;AACb;IACA,YAAY,IAAI,IAAI,CAAC,QAAQ,GAAG,GAAG,EAAE;IACrC,gBAAgB,MAAM,iCAAiC,CAAC;IACxD,aAAa;AACb;IACA,YAAY,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,EAAE,IAAI,CAAC,QAAQ,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;IAC9G,gBAAgB,OAAO,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC9C,aAAa,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;AACrC;IACA,YAAY,OAAO,GAAG,CAAC;IACvB,SAAS;AACT;IACA,QAAQ,SAAS,SAAS,CAAC,IAAI,EAAE;IACjC,YAAY,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC3C;IACA,YAAY,IAAI,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACzD,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;IAChD,gBAAgB,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,aAAa;AACb;IACA,YAAY,IAAI,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC;AACnC;IACA;IACA,YAAY,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,YAAY,KAAK,GAAG,GAAG,GAAG,MAAM,CAAC;IACjC,YAAY,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,YAAY,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC;IAClC,YAAY,OAAO;IACnB,gBAAgB,KAAK,EAAE,KAAK;IAC5B,gBAAgB,MAAM,EAAE,MAAM;IAC9B,gBAAgB,IAAI,EAAE,GAAG;IACzB,gBAAgB,IAAI,EAAE,IAAI;IAC1B,aAAa,CAAC;IACd,SAAS;AACT;IACA,QAAQ,SAAS,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE;IAC9C,YAAY,OAAO,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;IACnF,gBAAgB,IAAI,QAAQ,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC3D,gBAAgB,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;IACjF,aAAa,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,SAAS;AACT;IACA,QAAQ,SAAS,SAAS,CAAC,MAAM,EAAE;IACnC,YAAY,IAAI,MAAM,GAAG,CAAC,CAAC;IAC3B,YAAY,IAAI,MAAM,GAAG,EAAE,CAAC;AAC5B;IACA,YAAY,OAAO,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE;IAC3C,gBAAgB,IAAI,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAClD,gBAAgB,IAAI,GAAG,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvD,gBAAgB,IAAI,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IAC9D,gBAAgB,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IACtC,gBAAgB,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;AAC9C;IACA,gBAAgB,IAAI,EAAE,KAAK,MAAM,IAAI,EAAE,KAAK,MAAM,EAAE;IACpD,oBAAoB,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACrD,iBAAiB,MAAM;IACvB,oBAAoB,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1C,iBAAiB;IACjB,aAAa;IACb,YAAY,OAAO,MAAM,CAAC;IAC1B,SAAS;AACT;IACA,QAAQ,SAAS,cAAc,CAAC,GAAG,EAAE;IACrC,YAAY,OAAO,EAAE,CAAC,KAAK,CAAC,IAAI;IAChC,gBAAgB,IAAI,UAAU,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;IACrF,gBAAgB,OAAO,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC9C,aAAa,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClC,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,KAAK,EAAE;IAC9D,YAAY,IAAI,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACzE,YAAY,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;IAC3C,YAAY,OAAO,IAAI,CAAC;IACxB,SAAS,CAAC,CAAC,CAAC;AACZ;IACA,QAAQ,WAAW,CAAC,IAAI,CAAC,CAAC;IAC1B,KAAK;AACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,WAAW,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,QAAQ,EAAE;IACvD,QAAQ,IAAI,SAAS,GAAG,kBAAkB,CAAC,iBAAiB,CAAC,CAAC;AAC9D;IACA,QAAQ,SAAS,CAAC,SAAS,GAAG,SAAS,KAAK,EAAE;IAC9C,YAAY,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE;IAClC,gBAAgB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChD,gBAAgB,OAAO;IACvB,aAAa;IACb,YAAY,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjC,SAAS,CAAC;AACV;IACA,QAAQ,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3C,KAAK,CAAC;AACN;IACA,IAAI,OAAO;IACX;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,KAAK,EAAE,WAAW;IAC1B,KAAK,CAAC;IACN,CAAC,GAAG,CAAC;AACL;IACA,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;IACtC,IAAI,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC;IAC9B,CAAC;AACD;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;AACA;AACA;IACA,IAAI,WAAW,GAAG;IAClB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,EAAE,WAAW;IACrB,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC;AACxB;IACA,QAAQ,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,OAAO,SAAS,CAAC,IAAI,KAAK,WAAW,EAAE;IACvF,YAAY,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;IAC9E,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,SAAS,GAAG,CAAC,CAAC;IAC1B,QAAQ,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC;IACnF,YAAY,EAAE,CAAC;IACf,QAAQ,IAAI,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AACxD;IACA,QAAQ,SAAS,iBAAiB,CAAC,QAAQ,EAAE;IAC7C,YAAY,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC3D,SAAS;AACT;IACA,QAAQ,SAAS,OAAO,GAAG;IAC3B,YAAY,IAAI,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,WAAW,CAAC,CAAC;AAChF;IACA,YAAY,IAAI,IAAI,CAAC,SAAS,EAAE;IAChC,gBAAgB,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAC7F,aAAa;AACb;IACA,YAAY,IAAI,IAAI,CAAC,OAAO,EAAE;IAC9B,gBAAgB,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACzF,aAAa;AACb;IACA,YAAY,IAAI,IAAI,CAAC,SAAS,EAAE;IAChC,gBAAgB,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAC7F,aAAa;AACb;IACA,YAAY,SAAS,YAAY,CAAC,WAAW,EAAE;IAC/C,gBAAgB,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,SAAS,GAAG,SAAS,KAAK,EAAE;IACzG,oBAAoB,IAAI,IAAI,CAAC,QAAQ,EAAE;IACvC,wBAAwB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACxE,qBAAqB;IACrB,iBAAiB,CAAC;IAClB,aAAa;AACb;IACA,YAAY,YAAY,CAAC,WAAW,CAAC,CAAC;IACtC,YAAY,YAAY,CAAC,WAAW,CAAC,CAAC;IACtC,YAAY,YAAY,CAAC,SAAS,CAAC,CAAC;IACpC,SAAS;AACT;IACA,QAAQ,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AACvC;IACA,QAAQ,OAAO,CAAC,SAAS,GAAG,WAAW;IACvC,YAAY,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAChC,YAAY,EAAE,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AACtC;IACA,YAAY,IAAI,EAAE,CAAC,UAAU,EAAE;IAC/B,gBAAgB,IAAI,EAAE,CAAC,OAAO,KAAK,SAAS,EAAE;IAC9C,oBAAoB,IAAI,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAC9D,oBAAoB,UAAU,CAAC,SAAS,GAAG,WAAW;IACtD,wBAAwB,iBAAiB,CAAC,EAAE,CAAC,CAAC;IAC9C,wBAAwB,OAAO,EAAE,CAAC;IAClC,qBAAqB,CAAC;IACtB,iBAAiB,MAAM;IACvB,oBAAoB,OAAO,EAAE,CAAC;IAC9B,iBAAiB;IACjB,aAAa,MAAM;IACnB,gBAAgB,OAAO,EAAE,CAAC;IAC1B,aAAa;IACb,SAAS,CAAC;IACV,QAAQ,OAAO,CAAC,eAAe,GAAG,SAAS,KAAK,EAAE;IAClD,YAAY,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACnD,SAAS,CAAC;IACV,KAAK;IACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,KAAK,EAAE,SAAS,QAAQ,EAAE;IAC9B,QAAQ,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACjC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;AACpB;IACA,QAAQ,OAAO,IAAI,CAAC;IACpB,KAAK;IACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,KAAK,EAAE,SAAS,MAAM,EAAE;IAC5B,QAAQ,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IAC1C,QAAQ,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IAC1C,QAAQ,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;AACtC;IACA,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;AACpB;IACA,QAAQ,OAAO,IAAI,CAAC;IACpB,KAAK;IACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,EAAE,SAAS,KAAK,EAAE;IAC7B,QAAQ,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IACzD,KAAK;AACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,aAAa,EAAE,WAAW;IAC9B,IAAI,MAAM,EAAE,IAAI;IAChB,CAAC,CAAC;AACF;IACA,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;IACtC,IAAI,SAAS,CAAC,WAAW,GAAG,WAAW,CAAC;IACxC,CAAC;AACD;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;AACA;IACA,SAAS,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE;IAC1C,IAAI,IAAI,OAAO,UAAU,KAAK,WAAW,EAAE;IAC3C,QAAQ,IAAI,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACtD,QAAQ,MAAM,CAAC,GAAG,GAAG,mDAAmD,CAAC;IACzE,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACxE,KAAK;AACL;IACA,IAAI,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;AAC1B;IACA,IAAI,IAAI,YAAY,GAAG,WAAW,YAAY,wBAAwB,IAAI,WAAW,YAAY,iBAAiB,CAAC;AACnH;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW;IAC7B,QAAQ,IAAI,OAAO,UAAU,KAAK,WAAW,EAAE;IAC/C,YAAY,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC1C,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,gBAAgB,EAAE;IAC/B,YAAY,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC1C,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,YAAY,EAAE;IAC3B,YAAY,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;IAC/B,gBAAgB,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,WAAW,IAAI,GAAG,CAAC;IACxD,aAAa;AACb;IACA,YAAY,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;IAChC,gBAAgB,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,YAAY,IAAI,GAAG,CAAC;IAC1D,aAAa;AACb;IACA,YAAY,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;IAC/B,gBAAgB,MAAM,CAAC,KAAK,GAAG;IAC/B,oBAAoB,KAAK,EAAE,MAAM,CAAC,KAAK;IACvC,oBAAoB,MAAM,EAAE,MAAM,CAAC,MAAM;IACzC,iBAAiB,CAAC;IAClB,aAAa;AACb;IACA,YAAY,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;IAChC,gBAAgB,MAAM,CAAC,MAAM,GAAG;IAChC,oBAAoB,KAAK,EAAE,MAAM,CAAC,KAAK;IACvC,oBAAoB,MAAM,EAAE,MAAM,CAAC,MAAM;IACzC,iBAAiB,CAAC;IAClB,aAAa;AACb;IACA,YAAY,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,GAAG,CAAC;IACtD,YAAY,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC;AACxD;IACA,YAAY,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,GAAG,CAAC;IACpD,YAAY,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC;IACtD,SAAS;AACT;IACA;IACA,QAAQ,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;AACtC;IACA;IACA;IACA;IACA,QAAQ,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAChC;IACA;IACA;IACA;IACA;IACA,QAAQ,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,IAAI,GAAG,CAAC,CAAC;AACrD;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;AACpD;IACA;IACA;IACA,QAAQ,UAAU,CAAC,KAAK,EAAE,CAAC;AAC3B;IACA,QAAQ,IAAI,OAAO,MAAM,CAAC,qBAAqB,KAAK,UAAU,EAAE;IAChE,YAAY,MAAM,CAAC,qBAAqB,EAAE,CAAC;IAC3C,SAAS;AAGT;IACA,QAAQ,SAAS,cAAc,CAAC,IAAI,EAAE;IACtC,YAAY,IAAI,IAAI,CAAC,mBAAmB,KAAK,IAAI,EAAE;IACnD,gBAAgB,OAAO;IACvB,aAAa;AACb;IACA,YAAY,IAAI,iBAAiB,EAAE;IACnC,gBAAgB,OAAO,UAAU,CAAC,WAAW;IAC7C,oBAAoB,cAAc,CAAC,IAAI,CAAC,CAAC;IACzC,iBAAiB,EAAE,GAAG,CAAC,CAAC;IACxB,aAAa;AACb;IACA,YAAY,kBAAkB,GAAG,qBAAqB,CAAC,cAAc,CAAC,CAAC;AACvE;IACA,YAAY,IAAI,OAAO,aAAa,KAAK,SAAS,EAAE;IACpD,gBAAgB,aAAa,GAAG,IAAI,CAAC;IACrC,aAAa;AACb;IACA;IACA,YAAY,IAAI,IAAI,GAAG,aAAa,GAAG,EAAE,EAAE;IAC3C,gBAAgB,OAAO;IACvB,aAAa;AACb;IACA,YAAY,IAAI,CAAC,YAAY,IAAI,KAAK,CAAC,MAAM,EAAE;IAC/C;IACA;IACA,gBAAgB,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,aAAa;AACb;IACA,YAAY,IAAI,CAAC,YAAY,EAAE;IAC/B,gBAAgB,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5E,aAAa;AACb;IACA,YAAY,IAAI,MAAM,CAAC,YAAY,EAAE;IACrC,gBAAgB,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;IACnE,aAAa;AACb;IACA,YAAY,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACzC,YAAY,aAAa,GAAG,IAAI,CAAC;IACjC,SAAS;AACT;IACA,QAAQ,kBAAkB,GAAG,qBAAqB,CAAC,cAAc,CAAC,CAAC;AACnE;IACA,QAAQ,IAAI,MAAM,CAAC,YAAY,EAAE;IACjC,YAAY,MAAM,CAAC,YAAY,EAAE,CAAC;IAClC,SAAS;IACT,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,IAAI,GAAG,SAAS,QAAQ,EAAE;IACnC,QAAQ,QAAQ,GAAG,QAAQ,IAAI,WAAW,EAAE,CAAC;AAC7C;IACA,QAAQ,IAAI,kBAAkB,EAAE;IAChC,YAAY,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;IACrD,SAAS;AAGT;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;IACxE,YAAY,IAAI,EAAE,WAAW;IAC7B,SAAS,CAAC,CAAC;AACX;IACA,QAAQ,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B;IACA;IACA,QAAQ,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC;IACrC,KAAK,CAAC;AACN;IACA,IAAI,IAAI,iBAAiB,GAAG,KAAK,CAAC;AAClC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,KAAK,GAAG,WAAW;IAC5B,QAAQ,iBAAiB,GAAG,IAAI,CAAC;IACjC,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW;IAC7B,QAAQ,iBAAiB,GAAG,KAAK,CAAC;IAClC,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,iBAAiB,GAAG,WAAW;IACxC,QAAQ,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;IACxC,QAAQ,mBAAmB,EAAE,CAAC;IAC9B,KAAK,CAAC;AACN;IACA,IAAI,SAAS,mBAAmB,GAAG;IACnC,QAAQ,IAAI,UAAU,EAAE;IACxB,YAAY,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC;IACzC,SAAS;IACT,KAAK;AACL;IACA;IACA,IAAI,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC9B,IAAI,IAAI,CAAC,QAAQ,GAAG,WAAW;IAC/B,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC;IACzB,KAAK,CAAC;AACN;IACA,IAAI,IAAI,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAClD,IAAI,IAAI,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC1C;IACA,IAAI,IAAI,YAAY,EAAE;IACtB,QAAQ,IAAI,WAAW,YAAY,wBAAwB,EAAE;IAC7D,YAAY,OAAO,GAAG,WAAW,CAAC;IAClC,YAAY,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IACpC,SAAS,MAAM,IAAI,WAAW,YAAY,iBAAiB,EAAE;IAC7D,YAAY,OAAO,GAAG,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACnD,YAAY,MAAM,GAAG,WAAW,CAAC;IACjC,SAAS;IACT,KAAK;AACL;IACA,IAAI,IAAI,gBAAgB,GAAG,IAAI,CAAC;AAChC;IACA,IAAI,IAAI,CAAC,YAAY,EAAE;IACvB,QAAQ,IAAI,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACpD,QAAQ,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;IAC3B,QAAQ,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;IAC9B,QAAQ,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;AACjC;IACA,QAAQ,gBAAgB,GAAG,KAAK,CAAC;IACjC,QAAQ,KAAK,CAAC,gBAAgB,GAAG,WAAW;IAC5C,YAAY,gBAAgB,GAAG,IAAI,CAAC;IACpC,SAAS,CAAC;AACV;IACA,QAAQ,YAAY,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;AACzC;IACA,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;IACrB,KAAK;AACL;IACA,IAAI,IAAI,kBAAkB,GAAG,IAAI,CAAC;IAClC,QAA4B,cAAc;AAC1C;IACA,IAAI,IAAI,UAAU,CAAC;AACnB;IACA,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC;IACpB,CAAC;AACD;IACA,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;IACtC,IAAI,SAAS,CAAC,WAAW,GAAG,WAAW,CAAC;IACxC,CAAC;AACD;IACA;AACA;IACA;IACA;AACA;IACA;AACA;IACA;IACA;IACA;IACA;AACA;IACA,SAAS,iBAAiB,CAAC,mBAAmB,EAAE,YAAY,EAAE;AAC9D;IACA,IAAI,IAAI,oBAAoB,GAAG,qFAAqF,CAAC;AACrH;IACA,IAAI,CAAC,SAAS,IAAI,EAAE;IACpB,QAAQ,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;IAC9C,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,IAAI,EAAE;IACnB,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;IAC3C,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,OAAOA,cAAM,KAAK,WAAW,EAAE;IAC3C,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQA,cAAM,CAAC,SAAS,GAAG;IAC3B,YAAY,SAAS,EAAE,oBAAoB;IAC3C,YAAY,YAAY,EAAE,WAAW,EAAE;IACvC,SAAS,CAAC;AACV;IACA,QAAQ,IAAI,CAACA,cAAM,CAAC,OAAO,EAAE;IAC7B,YAAYA,cAAM,CAAC,OAAO,GAAG,EAAE,CAAC;IAChC,SAAS;AACT;IACA,QAAQ,IAAI,OAAOA,cAAM,CAAC,OAAO,CAAC,GAAG,KAAK,WAAW,IAAI,OAAOA,cAAM,CAAC,OAAO,CAAC,KAAK,KAAK,WAAW,EAAE;IACtG,YAAYA,cAAM,CAAC,OAAO,CAAC,KAAK,GAAGA,cAAM,CAAC,OAAO,CAAC,GAAG,GAAGA,cAAM,CAAC,OAAO,CAAC,GAAG,IAAI,WAAW;IACzF,gBAAgB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACvC,aAAa,CAAC;IACd,SAAS;AACT;IACA,QAAQ,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;IAC7C;IACA,YAAY,IAAI,CAAC,QAAQ,GAAG;IAC5B,gBAAgB,eAAe,EAAE;IACjC,oBAAoB,WAAW,EAAE,WAAW;IAC5C,wBAAwB,OAAO,EAAE,CAAC;IAClC,qBAAqB;IACrB,iBAAiB;IACjB,aAAa,CAAC;AACd;IACA,YAAY,QAAQ,CAAC,aAAa,GAAG,QAAQ,CAAC,aAAa,GAAG,QAAQ,CAAC,gBAAgB,GAAG,WAAW;IACrG,gBAAgB,IAAI,GAAG,GAAG;IAC1B,oBAAoB,UAAU,EAAE,WAAW;IAC3C,wBAAwB,OAAO,GAAG,CAAC;IACnC,qBAAqB;IACrB,oBAAoB,IAAI,EAAE,WAAW,EAAE;IACvC,oBAAoB,KAAK,EAAE,WAAW,EAAE;IACxC,oBAAoB,SAAS,EAAE,WAAW,EAAE;IAC5C,oBAAoB,SAAS,EAAE,WAAW;IAC1C,wBAAwB,OAAO,EAAE,CAAC;IAClC,qBAAqB;IACrB,oBAAoB,KAAK,EAAE,EAAE;IAC7B,iBAAiB,CAAC;IAClB,gBAAgB,OAAO,GAAG,CAAC;IAC3B,aAAa,CAAC;AACd;IACA,YAAY,IAAI,CAAC,gBAAgB,GAAG,WAAW,EAAE,CAAC;IAClD,SAAS;AACT;IACA,QAAQ,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;IAC7C;IACA,YAAY,IAAI,CAAC,QAAQ,GAAG;IAC5B,gBAAgB,QAAQ,EAAE,OAAO;IACjC,gBAAgB,IAAI,EAAE,EAAE;IACxB,gBAAgB,IAAI,EAAE,EAAE;IACxB,aAAa,CAAC;IACd,SAAS;AACT;IACA,QAAQ,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;IAC3C;IACA,YAAY,IAAI,CAAC,MAAM,GAAG;IAC1B,gBAAgB,KAAK,EAAE,CAAC;IACxB,gBAAgB,MAAM,EAAE,CAAC;IACzB,aAAa,CAAC;IACd,SAAS;AACT;IACA,QAAQ,IAAI,OAAO,GAAG,KAAK,WAAW,EAAE;IACxC;IACA,YAAY,IAAI,CAAC,GAAG,GAAG;IACvB,gBAAgB,eAAe,EAAE,WAAW;IAC5C,oBAAoB,OAAO,EAAE,CAAC;IAC9B,iBAAiB;IACjB,gBAAgB,eAAe,EAAE,WAAW;IAC5C,oBAAoB,OAAO,EAAE,CAAC;IAC9B,iBAAiB;IACjB,aAAa,CAAC;IACd,SAAS;AACT;IACA;IACA,QAAQ,IAAI,CAAC,MAAM,GAAGA,cAAM,CAAC;IAC7B,KAAK,EAAE,OAAOA,cAAM,KAAK,WAAW,GAAGA,cAAM,GAAG,IAAI,CAAC,CAAC;AACtD;IACA;AACA;IACA,IAAI,YAAY,GAAG,YAAY,IAAI,qBAAqB,CAAC;AACzD;IACA,IAAI,IAAI,MAAM,GAAG,EAAE,CAAC;IACpB,IAAI,IAAI,mBAAmB,GAAG,KAAK,CAAC;AACpC;IACA,IAAI,IAAI,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAClD,IAAI,IAAI,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC;IAC7B,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;IACvC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC7B,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,SAAS,CAAC;IACjC,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC;IAClC,IAAI,MAAM,CAAC,SAAS,GAAG,YAAY,CAAC;IACpC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;AACpE;IACA,IAAI,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC7B,IAAI,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;AAC5B;IACA,IAAI,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;IACrB,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;AACtB;IACA;IACA,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AAC5B;IACA,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC;AACpB;IACA;IACA;AACA;IACA;IACA,IAAI,IAAI,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AAC3C;IACA,IAAI,IAAI,OAAO,YAAY,KAAK,WAAW,EAAE;IAC7C,QAAQ,IAAI,OAAO,kBAAkB,KAAK,WAAW,EAAE;IACvD;IACA,YAAY,YAAY,GAAG,kBAAkB,CAAC;IAC9C,SAAS;AACT;IACA,QAAQ,IAAI,OAAO,eAAe,KAAK,WAAW,EAAE;IACpD;IACA,YAAY,YAAY,GAAG,eAAe,CAAC;IAC3C,SAAS;IACT,KAAK;AACL;IACA;IACA,IAAI,IAAI,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;AACzB;IACA,IAAI,IAAI,OAAO,GAAG,KAAK,WAAW,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;IACxE;IACA,QAAQ,GAAG,GAAG,SAAS,CAAC;IACxB,KAAK;AACL;IACA,IAAI,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,OAAO,SAAS,CAAC,YAAY,KAAK,WAAW,EAAE;IAC3F,QAAQ,IAAI,OAAO,SAAS,CAAC,kBAAkB,KAAK,WAAW,EAAE;IACjE,YAAY,SAAS,CAAC,YAAY,GAAG,SAAS,CAAC,kBAAkB,CAAC;IAClE,SAAS;AACT;IACA,QAAQ,IAAI,OAAO,SAAS,CAAC,eAAe,KAAK,WAAW,EAAE;IAC9D,YAAY,SAAS,CAAC,YAAY,GAAG,SAAS,CAAC,eAAe,CAAC;IAC/D,SAAS;IACT,KAAK;AACL;IACA,IAAI,IAAI,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACzC;IACA,IAAI,IAAI,OAAO,WAAW,KAAK,WAAW,IAAI,OAAO,iBAAiB,KAAK,WAAW,EAAE;IACxF,QAAQ,WAAW,GAAG,iBAAiB,CAAC;IACxC,KAAK;AACL;IACA;IACA,IAAI,IAAI,OAAO,WAAW,KAAK,WAAW,EAAE;IAC5C;IACA,QAAQ,IAAI,OAAO,WAAW,CAAC,SAAS,CAAC,IAAI,KAAK,WAAW,EAAE;IAC/D,YAAY,WAAW,CAAC,SAAS,CAAC,IAAI,GAAG,WAAW;IACpD,gBAAgB,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,SAAS,KAAK,EAAE;IACzD,oBAAoB,KAAK,CAAC,IAAI,EAAE,CAAC;IACjC,iBAAiB,CAAC,CAAC;IACnB,aAAa,CAAC;IACd,SAAS;IACT,KAAK;AACL;IACA,IAAI,IAAI,OAAO,GAAG,EAAE,CAAC;AACrB;IACA,IAAI,IAAI,OAAO,YAAY,KAAK,WAAW,EAAE;IAC7C,QAAQ,OAAO,CAAC,YAAY,GAAG,YAAY,CAAC;IAC5C,KAAK,MAAM,IAAI,OAAO,kBAAkB,KAAK,WAAW,EAAE;IAC1D,QAAQ,OAAO,CAAC,YAAY,GAAG,kBAAkB,CAAC;IAClD,KAAK;AACL;IACA,IAAI,SAAS,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE;IAC3C,QAAQ,IAAI,WAAW,IAAI,OAAO,EAAE;IACpC,YAAY,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC;IACvC,SAAS,MAAM,IAAI,cAAc,IAAI,OAAO,EAAE;IAC9C,YAAY,OAAO,CAAC,YAAY,GAAG,MAAM,CAAC;IAC1C,SAAS,MAAM;IACf,YAAY,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC;IACvC,SAAS;IACT,KAAK;AACL;IACA,IAAI,IAAI,CAAC,kBAAkB,GAAG,WAAW;IACzC,QAAQ,kBAAkB,EAAE,CAAC;IAC7B,KAAK,CAAC;AACN;IACA,IAAI,SAAS,kBAAkB,GAAG;IAClC,QAAQ,IAAI,mBAAmB,EAAE;IACjC,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;AACzC;IACA,QAAQ,IAAI,UAAU,GAAG,KAAK,CAAC;IAC/B,QAAQ,IAAI,SAAS,GAAG,EAAE,CAAC;IAC3B,QAAQ,MAAM,CAAC,OAAO,CAAC,SAAS,KAAK,EAAE;IACvC,YAAY,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;IAC/B,gBAAgB,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;IAClC,aAAa;AACb;IACA,YAAY,IAAI,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE;IACzC,gBAAgB,UAAU,GAAG,KAAK,CAAC;IACnC,aAAa,MAAM;IACnB;IACA,gBAAgB,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtC,aAAa;IACb,SAAS,CAAC,CAAC;AACX;IACA,QAAQ,IAAI,UAAU,EAAE;IACxB,YAAY,MAAM,CAAC,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC;IACnD,YAAY,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;IACrD,SAAS,MAAM,IAAI,SAAS,CAAC,MAAM,EAAE;IACrC,YAAY,MAAM,CAAC,KAAK,GAAG,YAAY,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1F;IACA,YAAY,IAAI,MAAM,GAAG,CAAC,CAAC;IAC3B,YAAY,IAAI,YAAY,KAAK,CAAC,IAAI,YAAY,KAAK,CAAC,EAAE;IAC1D,gBAAgB,MAAM,GAAG,CAAC,CAAC;IAC3B,aAAa;IACb,YAAY,IAAI,YAAY,KAAK,CAAC,IAAI,YAAY,KAAK,CAAC,EAAE;IAC1D,gBAAgB,MAAM,GAAG,CAAC,CAAC;IAC3B,aAAa;IACb,YAAY,IAAI,YAAY,KAAK,CAAC,IAAI,YAAY,KAAK,CAAC,EAAE;IAC1D,gBAAgB,MAAM,GAAG,CAAC,CAAC;IAC3B,aAAa;IACb,YAAY,IAAI,YAAY,KAAK,CAAC,IAAI,YAAY,KAAK,EAAE,EAAE;IAC3D,gBAAgB,MAAM,GAAG,CAAC,CAAC;IAC3B,aAAa;IACb,YAAY,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC;IACzD,SAAS,MAAM;IACf,YAAY,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC;IAC7C,YAAY,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC;IAC/C,SAAS;AACT;IACA,QAAQ,IAAI,UAAU,IAAI,UAAU,YAAY,gBAAgB,EAAE;IAClE,YAAY,SAAS,CAAC,UAAU,CAAC,CAAC;IAClC,SAAS;AACT;IACA,QAAQ,SAAS,CAAC,OAAO,CAAC,SAAS,KAAK,EAAE,GAAG,EAAE;IAC/C,YAAY,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAClC,SAAS,CAAC,CAAC;AACX;IACA,QAAQ,UAAU,CAAC,kBAAkB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAC3D,KAAK;AACL;IACA,IAAI,SAAS,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE;IACnC,QAAQ,IAAI,mBAAmB,EAAE;IACjC,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC;IAClB,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC;IAClB,QAAQ,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAChC,QAAQ,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC;IACA,QAAQ,IAAI,GAAG,KAAK,CAAC,EAAE;IACvB,YAAY,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;IAC5B,SAAS;AACT;IACA,QAAQ,IAAI,GAAG,KAAK,CAAC,EAAE;IACvB,YAAY,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IAC7B,SAAS;AACT;IACA,QAAQ,IAAI,GAAG,KAAK,CAAC,EAAE;IACvB,YAAY,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;IAC5B,YAAY,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IAC7B,SAAS;AACT;IACA,QAAQ,IAAI,GAAG,KAAK,CAAC,EAAE;IACvB,YAAY,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACjC,SAAS;AACT;IACA,QAAQ,IAAI,GAAG,KAAK,CAAC,EAAE;IACvB,YAAY,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;IAC5B,YAAY,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACjC,SAAS;AACT;IACA,QAAQ,IAAI,GAAG,KAAK,CAAC,EAAE;IACvB,YAAY,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACjC,SAAS;AACT;IACA,QAAQ,IAAI,GAAG,KAAK,CAAC,EAAE;IACvB,YAAY,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;IAC5B,YAAY,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACjC,SAAS;AACT;IACA,QAAQ,IAAI,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,WAAW,EAAE;IACtD,YAAY,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;IAClC,SAAS;AACT;IACA,QAAQ,IAAI,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,WAAW,EAAE;IACrD,YAAY,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;IACjC,SAAS;AACT;IACA,QAAQ,IAAI,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,KAAK,WAAW,EAAE;IACvD,YAAY,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;IACvC,SAAS;AACT;IACA,QAAQ,IAAI,OAAO,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE;IACxD,YAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;IACzC,SAAS;AACT;IACA,QAAQ,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AACtD;IACA,QAAQ,IAAI,OAAO,KAAK,CAAC,MAAM,CAAC,QAAQ,KAAK,UAAU,EAAE;IACzD,YAAY,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IACrE,SAAS;IACT,KAAK;AACL;IACA,IAAI,SAAS,cAAc,GAAG;IAC9B,QAAQ,mBAAmB,GAAG,KAAK,CAAC;IACpC,QAAQ,IAAI,gBAAgB,GAAG,mBAAmB,EAAE,CAAC;AACrD;IACA,QAAQ,IAAI,gBAAgB,GAAG,mBAAmB,EAAE,CAAC;IACrD,QAAQ,IAAI,gBAAgB,EAAE;IAC9B,YAAY,gBAAgB,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;IAC5D,gBAAgB,OAAO,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC;IAC1C,aAAa,CAAC,CAAC,OAAO,CAAC,SAAS,KAAK,EAAE;IACvC,gBAAgB,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACjD,aAAa,CAAC,CAAC;IACf,SAAS;IAGT,QAAQ,mBAAmB,CAAC,OAAO,CAAC,SAAS,MAAM,EAAE;IACrD,YAAY,IAAI,MAAM,CAAC,UAAU,EAAE,CAEtB;IACb,SAAS,CAAC,CAAC;AACX;IACA;IACA;IACA;AACA;IACA,QAAQ,OAAO,gBAAgB,CAAC;IAChC,KAAK;AACL;IACA,IAAI,SAAS,mBAAmB,GAAG;IACnC,QAAQ,iBAAiB,EAAE,CAAC;AAC5B;IACA,QAAQ,IAAI,cAAc,CAAC;AAC3B;IACA,QAAQ,IAAI,eAAe,IAAI,MAAM,EAAE;IACvC,YAAY,cAAc,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC;IACpD,SAAS,MAAM,IAAI,kBAAkB,IAAI,MAAM,EAAE;IACjD,YAAY,cAAc,GAAG,MAAM,CAAC,gBAAgB,EAAE,CAAC;IACvD,SAAS,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;IACtC,YAAY,OAAO,CAAC,KAAK,CAAC,mHAAmH,CAAC,CAAC;IAC/I,SAAS;AACT;IACA,QAAQ,IAAI,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AAC5C;IACA,QAAQ,cAAc,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;IACtD,YAAY,OAAO,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC;IACtC,SAAS,CAAC,CAAC,OAAO,CAAC,SAAS,KAAK,EAAE;IACnC,YAAY,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxC,SAAS,CAAC,CAAC;AACX;IACA,QAAQ,MAAM,CAAC,MAAM,GAAG,WAAW,CAAC;AACpC;IACA,QAAQ,OAAO,WAAW,CAAC;IAC3B,KAAK;AACL;IACA,IAAI,SAAS,mBAAmB,GAAG;IACnC;IACA,QAAQ,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE;IAC9C,YAAY,OAAO,CAAC,uBAAuB,GAAG,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IACzE,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,uBAAuB,CAAC;AAC5D;IACA,QAAQ,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;AAC/B;IACA,QAAQ,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE;IACvC,YAAY,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;IAC3D,YAAY,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;IACjE,YAAY,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACzC,SAAS;AACT;IACA,QAAQ,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAClC,QAAQ,mBAAmB,CAAC,OAAO,CAAC,SAAS,MAAM,EAAE;IACrD,YAAY,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;IACvD,oBAAoB,OAAO,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC;IAC9C,iBAAiB,CAAC,CAAC,MAAM,EAAE;IAC3B,gBAAgB,OAAO;IACvB,aAAa;AACb;IACA,YAAY,iBAAiB,EAAE,CAAC;AAChC;IACA,YAAY,IAAI,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;AAChF;IACA,YAAY,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE;IAC3C,gBAAgB,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnD,aAAa;AACb;IACA,YAAY,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAChD,SAAS,CAAC,CAAC;AACX;IACA,QAAQ,IAAI,CAAC,iBAAiB,EAAE;IAChC;IACA;IACA,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,4BAA4B,EAAE,CAAC;IACjF,QAAQ,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,WAAW,EAAE;IACxD,YAAY,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACvD,SAAS,CAAC,CAAC;IACX,QAAQ,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;IAC5C,KAAK;AACL;IACA,IAAI,SAAS,QAAQ,CAAC,MAAM,EAAE;IAC9B,QAAQ,IAAI,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AACpD;IACA,QAAQ,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACpC;IACA,QAAQ,KAAK,CAAC,SAAS,GAAG,YAAY,CAAC;AACvC;IACA,QAAQ,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;IAC3B,QAAQ,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AACzB;IACA,QAAQ,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC;IACxD,QAAQ,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC;AAC3D;IACA,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;AACrB;IACA,QAAQ,OAAO,KAAK,CAAC;IACrB,KAAK;AACL;IACA,IAAI,IAAI,CAAC,aAAa,GAAG,SAAS,OAAO,EAAE;IAC3C,QAAQ,IAAI,CAAC,OAAO,EAAE;IACtB,YAAY,MAAM,8BAA8B,CAAC;IACjD,SAAS;AACT;IACA,QAAQ,IAAI,EAAE,OAAO,YAAY,KAAK,CAAC,EAAE;IACzC,YAAY,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC;IAChC,SAAS;AACT;IACA,QAAQ,OAAO,CAAC,OAAO,CAAC,SAAS,MAAM,EAAE;IACzC,YAAY,IAAI,SAAS,GAAG,IAAI,WAAW,EAAE,CAAC;AAC9C;IACA,YAAY,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;IACtD,oBAAoB,OAAO,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC;IAC9C,iBAAiB,CAAC,CAAC,MAAM,EAAE;IAC3B,gBAAgB,IAAI,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC7C,gBAAgB,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IACtC,gBAAgB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACnC;IACA,gBAAgB,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;IACzE,oBAAoB,OAAO,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC;IAC9C,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvB,aAAa;AACb;IACA,YAAY,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;IACtD,oBAAoB,OAAO,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC;IAC9C,iBAAiB,CAAC,CAAC,MAAM,EAAE;IAC3B,gBAAgB,IAAI,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;IACpF,gBAAgB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,4BAA4B,EAAE,CAAC;IACzF,gBAAgB,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAC3D;IACA,gBAAgB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;IAC/F,oBAAoB,OAAO,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC;IAC9C,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvB,aAAa;AACb;IACA,YAAY,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAChD,SAAS,CAAC,CAAC;IACX,KAAK,CAAC;AACN;IACA,IAAI,IAAI,CAAC,cAAc,GAAG,WAAW;IACrC,QAAQ,MAAM,GAAG,EAAE,CAAC;IACpB,QAAQ,mBAAmB,GAAG,IAAI,CAAC;AACnC;IACA,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;IAC3B,YAAY,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;IACvC,YAAY,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACjC,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;IACtC,YAAY,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,MAAM,EAAE;IACvD,gBAAgB,MAAM,CAAC,UAAU,EAAE,CAAC;IACpC,aAAa,CAAC,CAAC;IACf,YAAY,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;IACnC,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,gBAAgB,EAAE;IACnC,YAAY,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;IAC/C,YAAY,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;IACzC,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE;IAC/B,YAAY,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;IACtC,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACjC;IACA,QAAQ,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;AAC7D;IACA,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE;IAC3B,YAAY,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACjC,YAAY,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;IACjC,SAAS;IACT,KAAK,CAAC;AACN;IACA,IAAI,IAAI,CAAC,iBAAiB,GAAG,SAAS,OAAO,EAAE;IAC/C,QAAQ,IAAI,OAAO,IAAI,EAAE,OAAO,YAAY,KAAK,CAAC,EAAE;IACpD,YAAY,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC;IAChC,SAAS;AACT;IACA,QAAQ,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACnC,KAAK,CAAC;AACN;IACA,IAAI,SAAS,iBAAiB,CAAC,OAAO,EAAE;IACxC,QAAQ,MAAM,GAAG,EAAE,CAAC;IACpB,QAAQ,OAAO,GAAG,OAAO,IAAI,mBAAmB,CAAC;AACjD;IACA;IACA,QAAQ,OAAO,CAAC,OAAO,CAAC,SAAS,MAAM,EAAE;IACzC,YAAY,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;IACvD,oBAAoB,OAAO,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC;IAC9C,iBAAiB,CAAC,CAAC,MAAM,EAAE;IAC3B,gBAAgB,OAAO;IACvB,aAAa;AACb;IACA,YAAY,IAAI,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IACzC,YAAY,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IAClC,YAAY,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/B,SAAS,CAAC,CAAC;IACX,KAAK;AACL;IACA;IACA,IAAI,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IACpC,IAAI,IAAI,CAAC,QAAQ,GAAG,WAAW;IAC/B,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC;IACzB,KAAK,CAAC;AACN;IACA,IAAI,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;AACzC;IACA,CAAC;AACD;IACA,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;IACtC,IAAiE;IACjE,QAAQ,MAAA,CAAA,OAAc,GAAG,iBAAiB,CAAC;IAC3C,KAAK;IAOL,CAAC;AACD;IACA;IACA;AACA;IACA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;AACA;IACA,SAAS,mBAAmB,CAAC,mBAAmB,EAAE,OAAO,EAAE;IAC3D,IAAI,mBAAmB,GAAG,mBAAmB,IAAI,EAAE,CAAC;IACpD,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC;AACpB;IACA,IAAI,IAAI,KAAK,CAAC;IACd,IAAI,IAAI,aAAa,CAAC;AACtB;IACA,IAAI,OAAO,GAAG,OAAO,IAAI;IACzB,QAAQ,YAAY,EAAE,qBAAqB;IAC3C,QAAQ,QAAQ,EAAE,YAAY;IAC9B,QAAQ,KAAK,EAAE;IACf,YAAY,KAAK,EAAE,GAAG;IACtB,YAAY,MAAM,EAAE,GAAG;IACvB,SAAS;IACT,KAAK,CAAC;AACN;IACA,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE;IAChC,QAAQ,OAAO,CAAC,aAAa,GAAG,EAAE,CAAC;IACnC,KAAK;AACL;IACA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;IACxB,QAAQ,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC;IAC3B,KAAK;AACL;IACA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE;IAC9B,QAAQ,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC;IAClC,KAAK;AACL;IACA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE;IAC/B,QAAQ,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;IACnC,KAAK;AACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW;IAC7B;IACA,QAAQ,KAAK,GAAG,IAAI,iBAAiB,CAAC,mBAAmB,EAAE,OAAO,CAAC,YAAY,IAAI,qBAAqB,CAAC,CAAC;AAC1G;IACA,QAAQ,IAAI,iBAAiB,EAAE,CAAC,MAAM,EAAE;IACxC,YAAY,KAAK,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC;IAC9D,YAAY,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,GAAG,CAAC;IACrD,YAAY,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC;IACvD,YAAY,KAAK,CAAC,kBAAkB,EAAE,CAAC;IACvC,SAAS;AACT;IACA,QAAQ,IAAI,OAAO,CAAC,aAAa,IAAI,OAAO,OAAO,CAAC,aAAa,KAAK,UAAU,EAAE;IAClF,YAAY,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC;IAC1D,SAAS;AACT;IACA;IACA,QAAQ,aAAa,GAAG,IAAI,mBAAmB,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,OAAO,CAAC,CAAC;IACjF,QAAQ,aAAa,CAAC,MAAM,EAAE,CAAC;IAC/B,KAAK,CAAC;AACN;IACA,IAAI,SAAS,iBAAiB,GAAG;IACjC,QAAQ,IAAI,MAAM,GAAG,EAAE,CAAC;IACxB,QAAQ,mBAAmB,CAAC,OAAO,CAAC,SAAS,MAAM,EAAE;IACrD,YAAY,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,SAAS,KAAK,EAAE;IAC/D,gBAAgB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnC,aAAa,CAAC,CAAC;IACf,SAAS,CAAC,CAAC;IACX,QAAQ,OAAO,MAAM,CAAC;IACtB,KAAK;AACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,IAAI,GAAG,SAAS,QAAQ,EAAE;IACnC,QAAQ,IAAI,CAAC,aAAa,EAAE;IAC5B,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,aAAa,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE;IAC1C,YAAY,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AAC7B;IACA,YAAY,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC3B;IACA,YAAY,IAAI,CAAC,iBAAiB,EAAE,CAAC;IACrC,SAAS,CAAC,CAAC;IACX,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,KAAK,GAAG,WAAW;IAC5B,QAAQ,IAAI,aAAa,EAAE;IAC3B,YAAY,aAAa,CAAC,KAAK,EAAE,CAAC;IAClC,SAAS;IACT,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW;IAC7B,QAAQ,IAAI,aAAa,EAAE;IAC3B,YAAY,aAAa,CAAC,MAAM,EAAE,CAAC;IACnC,SAAS;IACT,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,iBAAiB,GAAG,WAAW;IACxC,QAAQ,IAAI,aAAa,EAAE;IAC3B,YAAY,aAAa,CAAC,iBAAiB,EAAE,CAAC;IAC9C,YAAY,aAAa,GAAG,IAAI,CAAC;IACjC,SAAS;AACT;IACA,QAAQ,IAAI,KAAK,EAAE;IACnB,YAAY,KAAK,CAAC,cAAc,EAAE,CAAC;IACnC,YAAY,KAAK,GAAG,IAAI,CAAC;IACzB,SAAS;IACT,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,UAAU,GAAG,SAAS,OAAO,EAAE;IACxC,QAAQ,IAAI,CAAC,OAAO,EAAE;IACtB,YAAY,MAAM,8BAA8B,CAAC;IACjD,SAAS;AACT;IACA,QAAQ,IAAI,EAAE,OAAO,YAAY,KAAK,CAAC,EAAE;IACzC,YAAY,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC;IAChC,SAAS;AACT;IACA,QAAQ,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC5C;IACA,QAAQ,IAAI,CAAC,aAAa,IAAI,CAAC,KAAK,EAAE;IACtC,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AACrC;IACA,QAAQ,IAAI,OAAO,CAAC,aAAa,IAAI,OAAO,OAAO,CAAC,aAAa,KAAK,UAAU,EAAE;IAClF,YAAY,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC;IAC1D,SAAS;IACT,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,iBAAiB,GAAG,SAAS,OAAO,EAAE;IAC/C,QAAQ,IAAI,CAAC,KAAK,EAAE;IACpB,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,OAAO,IAAI,EAAE,OAAO,YAAY,KAAK,CAAC,EAAE;IACpD,YAAY,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC;IAChC,SAAS;AACT;IACA,QAAQ,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACzC,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,QAAQ,GAAG,WAAW;IAC/B,QAAQ,OAAO,KAAK,CAAC;IACrB,KAAK,CAAC;AACN;IACA;IACA,IAAI,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACtC,IAAI,IAAI,CAAC,QAAQ,GAAG,WAAW;IAC/B,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC;IACzB,KAAK,CAAC;IACN,CAAC;AACD;IACA,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;IACtC,IAAI,SAAS,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;IACxD,CAAC;AACD;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;AACA;IACA,SAAS,wBAAwB,CAAC,WAAW,EAAE,OAAO,EAAE;IACxD,IAAI,IAAI,CAAC,IAAI,EAAE;IACf,QAAQ,MAAM,sCAAsC,CAAC;IACrD,KAAK;AACL;IACA,IAAI,IAAI,OAAO,WAAW,KAAK,WAAW,EAAE;IAC5C,QAAQ,MAAM,2CAA2C,CAAC;IAC1D,KAAK;AACL;IACA,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC;AACpB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;AACzD;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,cAAc,GAAG,WAAW;IACrC,QAAQ,OAAO,IAAI,OAAO,CAAC,SAAS,OAAO,EAAE,MAAM,EAAE;IACrD,YAAY,IAAI;IAChB,gBAAgB,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC;IAChD,gBAAgB,OAAO,EAAE,CAAC;IAC1B,aAAa,CAAC,OAAO,CAAC,EAAE;IACxB,gBAAgB,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1B,aAAa;IACb,SAAS,CAAC,CAAC;IACX,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,aAAa,GAAG,WAAW;IACpC,QAAQ,OAAO,IAAI,OAAO,CAAC,SAAS,OAAO,EAAE,MAAM,EAAE;IACrD,YAAY,IAAI;IAChB,gBAAgB,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,SAAS,GAAG,EAAE;IAC3D,oBAAoB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;AACzD;IACA,oBAAoB,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;IACvD,wBAAwB,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACzD,wBAAwB,OAAO;IAC/B,qBAAqB;AACrB;IACA,oBAAoB,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,iBAAiB,CAAC,CAAC;IACnB,aAAa,CAAC,OAAO,CAAC,EAAE;IACxB,gBAAgB,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1B,aAAa;IACb,SAAS,CAAC,CAAC;IACX,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,cAAc,GAAG,WAAW;IACrC,QAAQ,OAAO,IAAI,OAAO,CAAC,SAAS,OAAO,EAAE,MAAM,EAAE;IACrD,YAAY,IAAI;IAChB,gBAAgB,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC;IAChD,gBAAgB,OAAO,EAAE,CAAC;IAC1B,aAAa,CAAC,OAAO,CAAC,EAAE;IACxB,gBAAgB,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1B,aAAa;IACb,SAAS,CAAC,CAAC;IACX,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,eAAe,GAAG,WAAW;IACtC,QAAQ,OAAO,IAAI,OAAO,CAAC,SAAS,OAAO,EAAE,MAAM,EAAE;IACrD,YAAY,IAAI;IAChB,gBAAgB,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC;IACjD,gBAAgB,OAAO,EAAE,CAAC;IAC1B,aAAa,CAAC,OAAO,CAAC,EAAE;IACxB,gBAAgB,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1B,aAAa;IACb,SAAS,CAAC,CAAC;IACX,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,UAAU,GAAG,SAAS,QAAQ,EAAE;IACzC,QAAQ,OAAO,IAAI,OAAO,CAAC,SAAS,OAAO,EAAE,MAAM,EAAE;IACrD,YAAY,IAAI;IAChB,gBAAgB,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,OAAO,EAAE;IAC5D,oBAAoB,OAAO,CAAC,OAAO,CAAC,CAAC;IACrC,iBAAiB,CAAC,CAAC;IACnB,aAAa,CAAC,OAAO,CAAC,EAAE;IACxB,gBAAgB,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1B,aAAa;IACb,SAAS,CAAC,CAAC;IACX,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,OAAO,GAAG,WAAW;IAC9B,QAAQ,OAAO,IAAI,OAAO,CAAC,SAAS,OAAO,EAAE,MAAM,EAAE;IACrD,YAAY,IAAI;IAChB,gBAAgB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;IAClD,aAAa,CAAC,OAAO,CAAC,EAAE;IACxB,gBAAgB,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1B,aAAa;IACb,SAAS,CAAC,CAAC;IACX,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,mBAAmB,GAAG,WAAW;IAC1C,QAAQ,OAAO,IAAI,OAAO,CAAC,SAAS,OAAO,EAAE,MAAM,EAAE;IACrD,YAAY,IAAI;IAChB,gBAAgB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC9D,aAAa,CAAC,OAAO,CAAC,EAAE;IACxB,gBAAgB,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1B,aAAa;IACb,SAAS,CAAC,CAAC;IACX,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,KAAK,GAAG,WAAW;IAC5B,QAAQ,OAAO,IAAI,OAAO,CAAC,SAAS,OAAO,EAAE,MAAM,EAAE;IACrD,YAAY,IAAI;IAChB,gBAAgB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;IAChD,aAAa,CAAC,OAAO,CAAC,EAAE;IACxB,gBAAgB,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1B,aAAa;IACb,SAAS,CAAC,CAAC;IACX,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,OAAO,GAAG,WAAW;IAC9B,QAAQ,OAAO,IAAI,OAAO,CAAC,SAAS,OAAO,EAAE,MAAM,EAAE;IACrD,YAAY,IAAI;IAChB,gBAAgB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;IAClD,aAAa,CAAC,OAAO,CAAC,EAAE;IACxB,gBAAgB,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1B,aAAa;IACb,SAAS,CAAC,CAAC;IACX,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,QAAQ,GAAG,WAAW;IAC/B,QAAQ,OAAO,IAAI,OAAO,CAAC,SAAS,OAAO,EAAE,MAAM,EAAE;IACrD,YAAY,IAAI;IAChB,gBAAgB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;IACnD,aAAa,CAAC,OAAO,CAAC,EAAE;IACxB,gBAAgB,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1B,aAAa;IACb,SAAS,CAAC,CAAC;IACX,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACrB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;AACD;IACA,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;IACtC,IAAI,SAAS,CAAC,wBAAwB,GAAG,wBAAwB,CAAC;IAClE,CAAC;AACD;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,SAAS,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE;IAC7C;AACA;IACA,IAAI,IAAI,OAAO,cAAc,KAAK,WAAW,IAAI,OAAO,cAAc,KAAK,WAAW,EAAE;IACxF;IACA,QAAQ,OAAO,CAAC,KAAK,CAAC,yHAAyH,CAAC,CAAC;IACjJ,KAAK;AACL;IACA,IAAI,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;AAC1B;IACA,IAAI,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,GAAG,CAAC;IACvC,IAAI,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC;IACzC,IAAI,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;IAC9C,IAAI,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC;IAC5C,IAAI,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC;AAO9C;IACA,IAAI,IAAI,QAAQ,CAAC;AACjB;IACA,IAAI,SAAS,YAAY,GAAG;IAC5B,QAAQ,OAAO,IAAI,cAAc,CAAC;IAClC,YAAY,KAAK,EAAE,SAAS,UAAU,EAAE;IACxC,gBAAgB,IAAI,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC3D,gBAAgB,IAAI,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC5D,gBAAgB,IAAI,KAAK,GAAG,IAAI,CAAC;IACjC,gBAAgB,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;IACzC,gBAAgB,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;IACnC,gBAAgB,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC7C,gBAAgB,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAC3C,gBAAgB,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACjC,gBAAgB,KAAK,CAAC,SAAS,GAAG,WAAW;IAC7C,oBAAoB,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAC7C,oBAAoB,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC/C,oBAAoB,IAAI,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACnD,oBAAoB,IAAI,YAAY,GAAG,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC;IAC/D,oBAAoB,IAAI,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC,GAAG;IAC/D,wBAAwB,IAAI,QAAQ,EAAE;IACtC,4BAA4B,aAAa,CAAC,WAAW,CAAC,CAAC;IACvD,4BAA4B,UAAU,CAAC,KAAK,EAAE,CAAC;IAC/C,yBAAyB;AACzB;IACA,wBAAwB,IAAI,KAAK,EAAE;IACnC,4BAA4B,KAAK,GAAG,KAAK,CAAC;IAC1C,4BAA4B,IAAI,MAAM,CAAC,qBAAqB,EAAE;IAC9D,gCAAgC,MAAM,CAAC,qBAAqB,EAAE,CAAC;IAC/D,6BAA6B;IAC7B,yBAAyB;AACzB;IACA,wBAAwB,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACnD,wBAAwB,IAAI,UAAU,CAAC,yBAAyB,CAAC,KAAK,KAAK,QAAQ,EAAE;IACrF,4BAA4B,IAAI;IAChC,gCAAgC,UAAU,CAAC,OAAO;IAClD,oCAAoC,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;IACvF,iCAAiC,CAAC;IAClC,6BAA6B,CAAC,OAAO,CAAC,EAAE,EAAE;IAC1C,yBAAyB;IACzB,qBAAqB,EAAE,YAAY,CAAC,CAAC;IACrC,iBAAiB,CAAC;IAClB,gBAAgB,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,aAAa;IACb,SAAS,CAAC,CAAC;IACX,KAAK;AACL;IACA,IAAI,IAAI,MAAM,CAAC;AACf;IACA,IAAI,SAAS,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE;IAC5C,QAAQ,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,MAAM,EAAE;IAC3C,YAAY,QAAQ,GAAG,KAAK,CAAC;AAC7B;IACA;AACA;IACA,YAAY,KAAK;IACjB,gBAAgB,wDAAwD;IACxE,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;IAC/B,gBAAgB,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,SAAS,MAAM,EAAE;IACtD,oBAAoB,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnD,iBAAiB,CAAC,CAAC;IACnB,aAAa,CAAC,CAAC;IACf,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,MAAM,YAAY,WAAW,EAAE;IACjE,YAAY,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE;IAC1C,gBAAgB,IAAI,EAAE,iBAAiB;IACvC,aAAa,CAAC,CAAC;IACf,YAAY,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAC1D,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;IAChC,YAAY,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAC9D,SAAS;AACT;IACA,QAAQ,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAC/C;IACA,QAAQ,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,eAAe,IAAI,wDAAwD,CAAC,CAAC;IAC/G,QAAQ,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,KAAK,EAAE;IAC3D,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE;IACxC,gBAAgB,MAAM,CAAC,WAAW,CAAC;IACnC,oBAAoB,KAAK,EAAE,MAAM,CAAC,KAAK;IACvC,oBAAoB,MAAM,EAAE,MAAM,CAAC,MAAM;IACzC,oBAAoB,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,IAAI;IACnD,oBAAoB,WAAW,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE;IACvD,oBAAoB,QAAQ,EAAE,MAAM,CAAC,QAAQ;IAC7C,iBAAiB,CAAC,CAAC;AACnB;IACA,gBAAgB,YAAY,EAAE,CAAC,MAAM,CAAC,IAAI,cAAc,CAAC;IACzD,oBAAoB,KAAK,EAAE,SAAS,KAAK,EAAE;IAC3C,wBAAwB,IAAI,QAAQ,EAAE;IACtC,4BAA4B,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAClF,4BAA4B,OAAO;IACnC,yBAAyB;AACzB;IACA,wBAAwB,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACnF,qBAAqB;IACrB,iBAAiB,CAAC,CAAC,CAAC;IACpB,aAAa,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE;IACrC,gBAAgB,IAAI,CAAC,QAAQ,EAAE;IAC/B,oBAAoB,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACpD,iBAAiB;IACjB,aAAa;IACb,SAAS,CAAC,CAAC;IACX,KAAK;AACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW;IAC7B,QAAQ,cAAc,GAAG,EAAE,CAAC;IAC5B,QAAQ,QAAQ,GAAG,KAAK,CAAC;IACzB,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACzB,QAAQ,cAAc,CAAC,MAAM,CAAC,CAAC;AAC/B;IACA,QAAQ,IAAI,OAAO,MAAM,CAAC,YAAY,KAAK,UAAU,EAAE;IACvD,YAAY,MAAM,CAAC,YAAY,EAAE,CAAC;IAClC,SAAS;IACT,KAAK,CAAC;AACN;IACA,IAAI,IAAI,QAAQ,CAAC;AACjB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,KAAK,GAAG,WAAW;IAC5B,QAAQ,QAAQ,GAAG,IAAI,CAAC;IACxB,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW;IAC7B,QAAQ,QAAQ,GAAG,KAAK,CAAC;IACzB,KAAK,CAAC;AACN;IACA,IAAI,SAAS,SAAS,CAAC,QAAQ,EAAE;IACjC,QAAQ,IAAI,CAAC,MAAM,EAAE;IACrB,YAAY,IAAI,QAAQ,EAAE;IAC1B,gBAAgB,QAAQ,EAAE,CAAC;IAC3B,aAAa;AACb;IACA,YAAY,OAAO;IACnB,SAAS;AACT;IACA;IACA,QAAQ,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,KAAK,EAAE;IAC3D,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE;IACrC,gBAAgB,MAAM,CAAC,SAAS,EAAE,CAAC;IACnC,gBAAgB,MAAM,GAAG,IAAI,CAAC;AAC9B;IACA,gBAAgB,IAAI,QAAQ,EAAE;IAC9B,oBAAoB,QAAQ,EAAE,CAAC;IAC/B,iBAAiB;IACjB,aAAa;IACb,SAAS,CAAC,CAAC;AACX;IACA,QAAQ,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACjC,KAAK;AACL;IACA,IAAI,IAAI,cAAc,GAAG,EAAE,CAAC;AAC5B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,IAAI,GAAG,SAAS,QAAQ,EAAE;IACnC,QAAQ,QAAQ,GAAG,IAAI,CAAC;AACxB;IACA,QAAQ,IAAI,QAAQ,GAAG,IAAI,CAAC;AAC5B;IACA,QAAQ,SAAS,CAAC,WAAW;IAC7B,YAAY,QAAQ,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,cAAc,EAAE;IACrD,gBAAgB,IAAI,EAAE,YAAY;IAClC,aAAa,CAAC,CAAC;AACf;IACA,YAAY,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACpC,SAAS,CAAC,CAAC;IACX,KAAK,CAAC;AACN;IACA;IACA,IAAI,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACtC,IAAI,IAAI,CAAC,QAAQ,GAAG,WAAW;IAC/B,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC;IACzB,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,iBAAiB,GAAG,WAAW;IACxC,QAAQ,cAAc,GAAG,EAAE,CAAC;IAC5B,QAAQ,QAAQ,GAAG,KAAK,CAAC;IACzB,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACzB;IACA;IACA,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;AACD;IACA,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;IACtC,IAAI,SAAS,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;IACxD,CAAA;;;IC7jMe,MAAMC,eAAN,SAA8BrP,OAA9B,CAAsC;IACjD1L,EAAAA,WAAW,CAACuB,MAAD,EAAS;IAChB,IAAA,KAAA,EAAA,CAAA;IACA,IAAKA,IAAAA,CAAAA,MAAL,GAAcA,MAAd,CAAA;IACA,IAAK8C,IAAAA,CAAAA,QAAL,GAAgB,EAAhB,CAAA;IACA,IAAA,IAAA,CAAK2W,QAAL,GAAgBtc,WAAW,CAACE,IAA5B,CAAA;IACA,IAAKqc,IAAAA,CAAAA,WAAL,GAAmB,KAAnB,CAAA;IACA,IAAK3f,IAAAA,CAAAA,kBAAL,GAA0B,CAA1B,CAAA;IACA,IAAK4f,IAAAA,CAAAA,iBAAL,GAAyB,IAAzB,CAAA;IACA3Z,IAAAA,MAAM,CAAC9K,KAAP,CAAauE,GAAb,CAAiB,UAAjB,EAA6B,MAA7B,CAAA,CAAA;IACH,GAAA;;IAEDoB,EAAAA,OAAO,GAAG;IACN,IAAA,IAAA,CAAK+e,MAAL,EAAA,CAAA;;IACA,IAAK5Z,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,UAAtB,EAAkC,SAAlC,CAAA,CAAA;IACH,GAAA;;IAEDogB,EAAAA,WAAW,CAAC/W,QAAD,EAAW2W,QAAX,EAAqB;IAC5B,IAAK3W,IAAAA,CAAAA,QAAL,GAAgBA,QAAhB,CAAA;;IAEA,IAAI3F,IAAAA,WAAW,CAACC,GAAZ,KAAoBqc,QAApB,IAAgCtc,WAAW,CAACE,IAAZ,KAAqBoc,QAAzD,EAAmE;IAC/D,MAAKA,IAAAA,CAAAA,QAAL,GAAgBA,QAAhB,CAAA;IACH,KAAA;IACJ,GAAA;;IAEY,EAAA,IAAT3f,SAAS,GAAG;IACZ,IAAA,OAAO,KAAK4f,WAAZ,CAAA;IACH,GAAA;;IAEa,EAAA,IAAVI,UAAU,GAAG;IACb,IAAA,OAAO,KAAK/f,kBAAZ,CAAA;IACH,GAAA;;IAEDggB,EAAAA,WAAW,GAAG;IACV,IAAA,MAAM7kB,KAAK,GAAG,IAAK8K,CAAAA,MAAL,CAAY9K,KAA1B,CAAA;IACA,IAAA,MAAM0gB,OAAO,GAAG;IACZvT,MAAAA,IAAI,EAAE,OADM;IAEZ2X,MAAAA,QAAQ,EAAE,wBAFE;IAGZC,MAAAA,WAAW,EAAGC,SAAD,IAAe;IACxBhlB,QAAAA,KAAK,CAACuE,GAAN,CAAU,UAAV,EAAsB,uBAAuBygB,SAA7C,CAAA,CAAA;IACH,OALW;IAMZC,MAAAA,WAAW,EAAE,CAAC,KAAKna,MAAL,CAAYpB,IAAZ,CAAiB1J,KAAAA;IANnB,KAAhB,CAAA;;IASA,IAAI,IAAA;IACA,MAAA,MAAMklB,MAAM,GAAG,IAAKpa,CAAAA,MAAL,CAAYzH,KAAZ,CAAkB2X,aAAlB,CAAgCmK,aAAhC,CAA8C,EAA9C,CAAf,CAAA;;IACA,MAAA,IAAI,KAAKra,MAAL,CAAY3J,KAAZ,IAAqB,IAAA,CAAK2J,MAAL,CAAY3J,KAAZ,CAAkB+e,+BAAvC,IACA,KAAKpV,MAAL,CAAY3J,KAAZ,CAAkB+e,+BAAlB,CAAkDgF,MADlD,IAEA,CAAC,IAAKpa,CAAAA,MAAL,CAAY3J,KAAZ,CAAkB6f,gBAAlB,EAFD,IAGA,KAAKlW,MAAL,CAAY3J,KAAZ,CAAkBN,QAHlB,IAG8B,IAAKiK,CAAAA,MAAL,CAAYpB,IAAZ,CAAiB7I,QAHnD,EAG6D;IACzD,QAAMukB,MAAAA,WAAW,GAAG,IAAKta,CAAAA,MAAL,CAAY3J,KAAZ,CAAkB+e,+BAAlB,CAAkDgF,MAAtE,CAAA;;IACA,QAAA,IAAIE,WAAW,CAACC,cAAZ,GAA6B/Y,MAA7B,GAAsC,CAA1C,EAA6C;IACzC,UAAA,MAAMgZ,UAAU,GAAGF,WAAW,CAACC,cAAZ,EAAA,CAA6B,CAA7B,CAAnB,CAAA;;IACA,UAAA,IAAIC,UAAU,IAAIA,UAAU,CAACC,OAA7B,EAAsC;IAClCL,YAAAA,MAAM,CAACM,QAAP,CAAgBF,UAAhB,CAAA,CAAA;IACH,WAAA;IACJ,SAAA;IACJ,OAAA;;IACD,MAAA,IAAA,CAAKG,QAAL,GAAgBC,WAAS,CAACR,MAAD,EAASxE,OAAT,CAAzB,CAAA;IACH,KAfD,CAeE,OAAO/T,CAAP,EAAU;IACR3M,MAAAA,KAAK,CAACwE,KAAN,CAAY,UAAZ,EAAwBmI,CAAxB,CAAA,CAAA;IACA,MAAA,IAAA,CAAKuH,IAAL,CAAUtQ,MAAM,CAACoB,iBAAjB,CAAA,CAAA;IACH,KAAA;;IACD,IAAI,IAAA,IAAA,CAAKygB,QAAT,EAAmB;IACf,MAAKjB,IAAAA,CAAAA,WAAL,GAAmB,IAAnB,CAAA;IACA,MAAK1Z,IAAAA,CAAAA,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAACgB,SAAxB,EAAmC,IAAnC,CAAA,CAAA;IACA,MAAK6gB,IAAAA,CAAAA,QAAL,CAAcE,cAAd,EAAA,CAAA;IACA3lB,MAAAA,KAAK,CAACuE,GAAN,CAAU,UAAV,EAAsB,iBAAtB,CAAA,CAAA;IACA,MAAA,IAAA,CAAKuG,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAACkB,WAAxB,CAAA,CAAA;IACA,MAAA,IAAA,CAAK2f,iBAAL,GAAyBjU,MAAM,CAACoV,WAAP,CAAmB,MAAM;IAC9C,QAAK/gB,IAAAA,CAAAA,kBAAL,IAA2B,CAA3B,CAAA;IACA,QAAKiG,IAAAA,CAAAA,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAACiB,kBAAxB,EAA4C,IAAA,CAAKA,kBAAjD,CAAA,CAAA;IACH,OAHwB,EAGtB,IAHsB,CAAzB,CAAA;IAIH,KAAA;IACJ,GAAA;;IAEDghB,EAAAA,iBAAiB,GAAG;IAChB,IAAA,IAAI,CAAC,IAAKJ,CAAAA,QAAN,IAAkB,CAAC,IAAA,CAAKjB,WAA5B,EAAyC;IACrC,MAAA,OAAA;IACH,KAAA;;IACD,IAAA,IAAA,CAAKiB,QAAL,CAAcK,aAAd,CAA4B,MAAM;IAC9B,MAAKhb,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,UAAtB,EAAkC,gBAAlC,CAAA,CAAA;IACA,MAAA,IAAA,CAAKuG,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAACmB,SAAxB,CAAA,CAAA;IACAuL,MAAAA,cAAc,CAAC,IAAKmV,CAAAA,QAAL,CAAcM,OAAd,EAAD,EAA0B,IAAKnY,CAAAA,QAA/B,EAAyC,IAAA,CAAK2W,QAA9C,CAAd,CAAA;;IACA,MAAA,IAAA,CAAKG,MAAL,EAAA,CAAA;;IACA,MAAK5Z,IAAAA,CAAAA,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAACgB,SAAxB,EAAmC,KAAnC,CAAA,CAAA;IACH,KAND,CAAA,CAAA;IAOH,GAAA;;IAED8f,EAAAA,MAAM,GAAG;IACL,IAAKF,IAAAA,CAAAA,WAAL,GAAmB,KAAnB,CAAA;IACA,IAAK3f,IAAAA,CAAAA,kBAAL,GAA0B,CAA1B,CAAA;;IAEA,IAAI,IAAA,IAAA,CAAK4gB,QAAT,EAAmB;IACf,MAAKA,IAAAA,CAAAA,QAAL,CAAc9f,OAAd,EAAA,CAAA;IACA,MAAK8f,IAAAA,CAAAA,QAAL,GAAgB,IAAhB,CAAA;IACH,KAAA;;IACD,IAAK7X,IAAAA,CAAAA,QAAL,GAAgB,IAAhB,CAAA;;IACA,IAAI,IAAA,IAAA,CAAK6W,iBAAT,EAA4B;IACxBuB,MAAAA,aAAa,CAAC,IAAKvB,CAAAA,iBAAN,CAAb,CAAA;IACH,KAAA;;IACD,IAAKA,IAAAA,CAAAA,iBAAL,GAAyB,IAAzB,CAAA;IACH,GAAA;;IAtGgD;;ICHtC,MAAMwB,QAAN,CAAe;IAC1B1c,EAAAA,WAAW,CAACuB,MAAD,EAAS;IAChB,IAAA,MAAMiU,MAAM,GAAGkH,QAAQ,CAACjH,gBAAT,EAAf,CAAA;IACA,IAAA,OAAO,IAAID,MAAJ,CAAWjU,MAAX,CAAP,CAAA;IACH,GAAA;;IAEsB,EAAA,OAAhBkU,gBAAgB,GAAG;IACtB,IAAA,OAAOsF,eAAP,CAAA;IACH,GAAA;;IARyB;;ICCf,MAAM4B,aAAN,CAAoB;IAC/B3c,EAAAA,WAAW,CAACuB,MAAD,EAAS;IAChB,IAAKA,IAAAA,CAAAA,MAAL,GAAcA,MAAd,CAAA;IACA,IAAKqb,IAAAA,CAAAA,aAAL,GAAqB,IAAIC,MAAJ,CAAWtb,MAAM,CAACpB,IAAP,CAAYjI,OAAvB,CAArB,CAAA;;IACA,IAAA,IAAA,CAAK4kB,kBAAL,EAAA,CAAA;;IACAvb,IAAAA,MAAM,CAAC9K,KAAP,CAAauE,GAAb,CAAiB,eAAjB,EAAkC,MAAlC,CAAA,CAAA;IACH,GAAA;;IAEDoB,EAAAA,OAAO,GAAG;IACN,IAAKwgB,IAAAA,CAAAA,aAAL,CAAmBG,WAAnB,CAA+B;IAACC,MAAAA,GAAG,EAAEhjB,gBAAgB,CAACG,KAAAA;IAAvB,KAA/B,CAAA,CAAA;IACA,IAAKyiB,IAAAA,CAAAA,aAAL,CAAmBK,SAAnB,EAAA,CAAA;IACA,IAAKL,IAAAA,CAAAA,aAAL,GAAqB,IAArB,CAAA;IACA,IAAKrb,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAuB,CAAA,aAAA,CAAvB,EAAuC,SAAvC,CAAA,CAAA;IACH,GAAA;;IAED8hB,EAAAA,kBAAkB,GAAG;IACjB,IAAM,MAAA;IACFrmB,MAAAA,KADE;IAEFqU,MAAAA,MAAM,EAAE;IAACrK,QAAAA,KAAAA;IAAD,OAAA;IAFN,KAAA,GAGF,KAAKc,MAHT,CAAA;;IAKA,IAAA,IAAA,CAAKqb,aAAL,CAAmBM,SAAnB,GAAgC5b,KAAD,IAAW;IACtC,MAAA,MAAMmR,GAAG,GAAGnR,KAAK,CAAC8K,IAAlB,CAAA;;IACA,MAAQqG,QAAAA,GAAG,CAACuK,GAAZ;IACI,QAAKhkB,KAAAA,eAAe,CAACC,IAArB;IACIxC,UAAAA,KAAK,CAACuE,GAAN,CAAW,CAAA,aAAA,CAAX,EAA2B,YAA3B,EAAyChC,eAAe,CAACC,IAAzD,CAAA,CAAA;;IACA,UAAA,IAAI,CAAC,IAAA,CAAKsI,MAAL,CAAYyJ,MAAjB,EAAyB;IACrB,YAAA,IAAA,CAAKzJ,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAACM,IAAxB,CAAA,CAAA;IACH,WAAA;;IACD,UAAA,IAAA,CAAK4G,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAACE,iBAAxB,CAAA,CAAA;;IACA,UAAA,IAAA,CAAK4iB,SAAL,EAAA,CAAA;;IACA,UAAA,MAAA;;IACJ,QAAKnkB,KAAAA,eAAe,CAACS,SAArB;IACIhD,UAAAA,KAAK,CAACuE,GAAN,CAAW,eAAX,EAA2B,YAA3B,EAAyChC,eAAe,CAACS,SAAzD,EAAoEgZ,GAAG,CAAC2K,IAAxE,CAAA,CAAA;;IACA,UAAA,IAAI,CAAC,IAAK7b,CAAAA,MAAL,CAAYkY,MAAZ,CAAmB9P,WAAxB,EAAqC;IACjC,YAAA,IAAA,CAAKpI,MAAL,CAAYkY,MAAZ,CAAmB9P,WAAnB,GAAiC3E,GAAG,EAApC,CAAA;IACH,WAAA;;IACD,UAAA,IAAA,CAAKzD,MAAL,CAAYzH,KAAZ,CAAkBoX,eAAlB,CAAkC;IAC9BC,YAAAA,WAAW,EAAEsB,GAAG,CAAC2K,IAAAA;IADa,WAAlC,CAAA,CAAA;IAGA,UAAA,MAAA;;IACJ,QAAKpkB,KAAAA,eAAe,CAACQ,SAArB;IACI/C,UAAAA,KAAK,CAACuE,GAAN,CAAW,eAAX,EAA2B,YAA3B,EAAyChC,eAAe,CAACQ,SAAzD,EAAoEiZ,GAAG,CAAC2K,IAAxE,CAAA,CAAA;IACA,UAAK7b,IAAAA,CAAAA,MAAL,CAAY3J,KAAZ,IAAqB,IAAA,CAAK2J,MAAL,CAAY3J,KAAZ,CAAkB0f,eAAlB,CAAkC;IACnDnG,YAAAA,WAAW,EAAEsB,GAAG,CAAC2K,IAAAA;IADkC,WAAlC,CAArB,CAAA;IAGA,UAAA,MAAA;;IACJ,QAAKpkB,KAAAA,eAAe,CAACE,SAArB;IACIzC,UAAAA,KAAK,CAACuE,GAAN,CAAW,eAAX,EAA2B,YAA3B,EAAyChC,eAAe,CAACE,SAAzD,EAAqE,CAAA,MAAA,EAAQuZ,GAAG,CAACzC,CAAE,WAAUyC,GAAG,CAAC1K,CAAE,CAAnG,CAAA,CAAA,CAAA;IACA,UAAA,IAAA,CAAKxG,MAAL,CAAYzH,KAAZ,CAAkBoX,eAAlB,CAAkC;IAC9BpP,YAAAA,KAAK,EAAE2Q,GAAG,CAACzC,CADmB;IAE9B9N,YAAAA,MAAM,EAAEuQ,GAAG,CAAC1K,CAAAA;IAFkB,WAAlC,CAAA,CAAA;IAIA,UAAA,IAAA,CAAKxG,MAAL,CAAYzH,KAAZ,CAAkB0Y,kBAAlB,EAAA,CAAA;IACA,UAAA,MAAA;;IACJ,QAAKxZ,KAAAA,eAAe,CAACK,SAArB;IACI5C,UAAAA,KAAK,CAACuE,GAAN,CAAW,eAAX,EAA2B,YAA3B,EAAyChC,eAAe,CAACK,SAAzD,EAAqE,CAAA,SAAA,EAAWoZ,GAAG,CAACwE,QAAS,eAAcxE,GAAG,CAACyE,UAAW,CAA1H,CAAA,CAAA,CAAA;;IACA,UAAA,IAAI,IAAK3V,CAAAA,MAAL,CAAY3J,KAAhB,EAAuB;IACnB,YAAA,IAAA,CAAK2J,MAAL,CAAY3J,KAAZ,CAAkB0f,eAAlB,CAAkC7E,GAAlC,CAAA,CAAA;IACA,YAAA,IAAA,CAAKlR,MAAL,CAAY3J,KAAZ,CAAkBggB,cAAlB,CAAiCnF,GAAjC,CAAA,CAAA;IACH,WAAA;;IACD,UAAA,MAAA;;IACJ,QAAKzZ,KAAAA,eAAe,CAACG,MAArB;IACI;IACA,UAAKoI,IAAAA,CAAAA,MAAL,CAAY8b,YAAZ,EAAA,CAAA;IACA,UAAA,IAAA,CAAK9b,MAAL,CAAYzH,KAAZ,CAAkBX,MAAlB,CAAyBsZ,GAAzB,CAAA,CAAA;IACA,UAAKlR,IAAAA,CAAAA,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAACS,UAAxB,EAAoC2X,GAAG,CAACC,EAAxC,CAAA,CAAA;IACA,UAAKnR,IAAAA,CAAAA,MAAL,CAAY+b,WAAZ,CAAwB;IAAC7U,YAAAA,GAAG,EAAE,IAAN;IAAYiK,YAAAA,EAAE,EAAED,GAAG,CAACC,EAApB;IAAwB6K,YAAAA,GAAG,EAAE9K,GAAG,CAAC+K,KAAAA;IAAjC,WAAxB,CAAA,CAAA;;IACA,UAAA,IAAI,CAAC,IAAKjc,CAAAA,MAAL,CAAYkY,MAAZ,CAAmB7P,UAAxB,EAAoC;IAChC,YAAA,IAAA,CAAKrI,MAAL,CAAYkY,MAAZ,CAAmB7P,UAAnB,GAAgC5E,GAAG,EAAnC,CAAA;IACA,YAAKzD,IAAAA,CAAAA,MAAL,CAAYkc,uBAAZ,EAAA,CAAA;IACH,WAAA;;IACD,UAAA,MAAA;;IACJ,QAAKzkB,KAAAA,eAAe,CAACI,SAArB;IACI;IACA;IACA,UAAI,IAAA,IAAA,CAAKmI,MAAL,CAAY/G,OAAZ,IAAuB,IAAK+G,CAAAA,MAAL,CAAY3J,KAAvC,EAA8C;IAC1C,YAAA,IAAA,CAAK2J,MAAL,CAAY3J,KAAZ,CAAkBD,IAAlB,CAAuB8a,GAAG,CAAC/W,MAA3B,EAAmC+W,GAAG,CAACC,EAAvC,CAAA,CAAA;IACH,WAAA;;IACD,UAAA,MAAA;;IACJ,QAAK1Z,KAAAA,eAAe,CAACU,SAArB;IACI,UAAI+Y,IAAAA,GAAG,CAACmI,OAAR,EAAiB;IACb,YAAA,IAAInI,GAAG,CAACmI,OAAJ,CAAY8C,OAAZ,CAAoB/jB,UAAU,CAACC,kBAA/B,CAAA,KAAuD,CAAC,CAA5D,EAA+D;IAC3D,cAAK2H,IAAAA,CAAAA,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAACY,KAAxB,EAA+B6B,YAAY,CAACM,eAA5C,CAAA,CAAA;IACA,cAAA,IAAA,CAAKmE,MAAL,CAAYoJ,IAAZ,CAAiB7N,YAAY,CAACM,eAA9B,CAAA,CAAA;IACH,aAAA;IACJ,WAAA;;IACD,UAAA,MAAA;;IACJ,QAAA;IACI,UAAA,IAAA,CAAKmE,MAAL,CAAYkR,GAAG,CAACuK,GAAhB,CAAwB,IAAA,IAAA,CAAKzb,MAAL,CAAYkR,GAAG,CAACuK,GAAhB,CAAA,CAAqBvK,GAArB,CAAxB,CAAA;IAlER,OAAA;IAoEH,KAtED,CAAA;IAuEH,GAAA;;IAED0K,EAAAA,SAAS,GAAG;IACR,IAAA,MAAMzH,GAAG,GAAG;IACRjf,MAAAA,KAAK,EAAE,IAAA,CAAK8K,MAAL,CAAYpB,IAAZ,CAAiB1J,KADhB;IAER4B,MAAAA,gBAAgB,EAAE,IAAA,CAAKkJ,MAAL,CAAYpB,IAAZ,CAAiB9H,gBAF3B;IAGRI,MAAAA,MAAM,EAAE,IAAA,CAAK8I,MAAL,CAAYpB,IAAZ,CAAiB1H,MAHjB;IAIRpC,MAAAA,WAAW,EAAE,IAAA,CAAKkL,MAAL,CAAYpB,IAAZ,CAAiB9J,WAJtB;IAKR0C,MAAAA,kBAAkB,EAAE,IAAA,CAAKwI,MAAL,CAAYpB,IAAZ,CAAiBpH,kBAAAA;IAL7B,KAAZ,CAAA;IAOA,IAAK6jB,IAAAA,CAAAA,aAAL,CAAmBG,WAAnB,CAA+B;IAC3BC,MAAAA,GAAG,EAAEhjB,gBAAgB,CAACf,IADK;IAE3Byc,MAAAA,GAAG,EAAEiI,IAAI,CAACC,SAAL,CAAelI,GAAf,CAFsB;IAG3BwB,MAAAA,UAAU,EAAG,IAAK3V,CAAAA,MAAL,CAAY3J,KAAZ,IAAqB,IAAK2J,CAAAA,MAAL,CAAY3J,KAAZ,CAAkBoe,YAAlB,CAA+BkB,UAArD,IAAoE,CAAA;IAHrD,KAA/B,CAAA,CAAA;IAKH,GAAA;;IAED2G,EAAAA,WAAW,CAACC,WAAD,EAAcpL,EAAd,EAAkBqL,QAAlB,EAA4B;IAEnC,IAAA,MAAM5G,OAAO,GAAG;IACZvT,MAAAA,IAAI,EAAE/J,UAAU,CAACC,KADL;IAEZ4Y,MAAAA,EAAE,EAAE3Q,IAAI,CAACC,GAAL,CAAS0Q,EAAT,EAAa,CAAb,CAFQ;IAGZqL,MAAAA,QAAAA;IAHY,KAAhB,CAFmC;;IAQnC,IAAKnB,IAAAA,CAAAA,aAAL,CAAmBG,WAAnB,CAA+B;IAC3BC,MAAAA,GAAG,EAAEhjB,gBAAgB,CAACT,MADK;IAE3BmC,MAAAA,MAAM,EAAEoiB,WAFmB;IAG3B3G,MAAAA,OAAAA;IAH2B,KAA/B,EAIG,CAAC2G,WAAW,CAACpiB,MAAb,CAJH,CAAA,CAAA;IAKH,GAAA;;IAEDsiB,EAAAA,WAAW,CAACF,WAAD,EAAcpL,EAAd,EAAkB;IACzB,IAAA,IAAI,IAAKnR,CAAAA,MAAL,CAAYpB,IAAZ,CAAiB1H,MAAjB,IAA2B,CAAC,IAAA,CAAK8I,MAAL,CAAYpB,IAAZ,CAAiBvH,YAAjD,EAA+D;IAC3D,MAAA,IAAA,CAAKqlB,mBAAL,CAAyBH,WAAzB,EAAsCpL,EAAtC,CAAA,CAAA;IACH,KAFD,MAEO,IAAI,IAAKnR,CAAAA,MAAL,CAAYpB,IAAZ,CAAiBxH,MAArB,EAA6B;IAChC,MAAA,IAAA,CAAKslB,mBAAL,CAAyBH,WAAzB,EAAsCpL,EAAtC,CAAA,CAAA;IACH,KAFM,MAEA;IACH,MAAA,IAAA,CAAKwL,YAAL,CAAkBJ,WAAlB,EAA+BpL,EAA/B,CAAA,CAAA;IACH,KAAA;IACJ,GApI8B;;;IAuI/BwL,EAAAA,YAAY,CAACJ,WAAD,EAAcpL,EAAd,EAAkB;IAC1B,IAAA,MAAMyE,OAAO,GAAG;IACZvT,MAAAA,IAAI,EAAE/J,UAAU,CAACjC,KADL;IAEZ8a,MAAAA,EAAE,EAAE3Q,IAAI,CAACC,GAAL,CAAS0Q,EAAT,EAAa,CAAb,CAAA;IAFQ,KAAhB,CAD0B;;IAM1B,IAAKkK,IAAAA,CAAAA,aAAL,CAAmBG,WAAnB,CAA+B;IAC3BC,MAAAA,GAAG,EAAEhjB,gBAAgB,CAACT,MADK;IAE3BmC,MAAAA,MAAM,EAAEoiB,WAFmB;IAG3B3G,MAAAA,OAAAA;IAH2B,KAA/B,EAIG,CAAC2G,WAAW,CAACpiB,MAAb,CAJH,CAAA,CAAA;IAKH,GAAA;;IAGDuiB,EAAAA,mBAAmB,CAACH,WAAD,EAAcpL,EAAd,EAAkB;IACjC;IACA,IAAKkK,IAAAA,CAAAA,aAAL,CAAmBG,WAAnB,CAA+B;IAC3BC,MAAAA,GAAG,EAAEhjB,gBAAgB,CAACC,WADK;IAE3ByB,MAAAA,MAAM,EAAEoiB,WAFmB;IAG3BpL,MAAAA,EAAE,EAAE3Q,IAAI,CAACC,GAAL,CAAS0Q,EAAT,EAAa,CAAb,CAAA;IAHuB,KAA/B,EAIG,CAACoL,WAAW,CAACpiB,MAAb,CAJH,CAAA,CAAA;IAKH,GAAA;;IAGDyiB,EAAAA,gBAAgB,CAACC,MAAD,EAAS;IACrB,IAAKxB,IAAAA,CAAAA,aAAL,CAAmBG,WAAnB,CAA+B;IAC3BC,MAAAA,GAAG,EAAEhjB,gBAAgB,CAACI,YADK;IAE3B8E,MAAAA,GAAG,EAAEkf,MAAM,CAAClf,GAFe;IAG3B8G,MAAAA,KAAK,EAAEoY,MAAM,CAACpY,KAAAA;IAHa,KAA/B,CAAA,CAAA;IAKH,GAAA;;IArK8B;;ICApB,MAAMiL,YAAN,SAA2BvF,OAA3B,CAAmC;IAC9C1L,EAAAA,WAAW,CAACuB,MAAD,EAAS;IAChB,IAAA,KAAA,EAAA,CAAA;IACA,IAAKA,IAAAA,CAAAA,MAAL,GAAcA,MAAd,CAAA;IAEA,IAAK8c,IAAAA,CAAAA,MAAL,GAAc,IAAd,CAAA;IACA,IAAKC,IAAAA,CAAAA,cAAL,GAAsB,IAAtB,CAAA;IACA,IAAKC,IAAAA,CAAAA,cAAL,GAAsB,IAAtB,CAAA;IACA,IAAKf,IAAAA,CAAAA,KAAL,GAAa,CAAC,CAAd,CAAA;IACA,IAAK5H,IAAAA,CAAAA,UAAL,GAAkB,EAAlB,CAAA;IACA,IAAK4I,IAAAA,CAAAA,QAAL,GAAgB,KAAhB,CAAA;IACA,IAAA,IAAA,CAAKC,YAAL,EAAA,CAAA;IACH,GAAA;;IAEDriB,EAAAA,OAAO,GAAG;IACN,IAAI,IAAA,IAAA,CAAKiiB,MAAT,EAAiB;IACb5B,MAAAA,aAAa,CAAC,IAAK4B,CAAAA,MAAN,CAAb,CAAA;IACA,MAAKA,IAAAA,CAAAA,MAAL,GAAc,IAAd,CAAA;IACH,KAAA;;IACD,IAAKC,IAAAA,CAAAA,cAAL,GAAsB,IAAtB,CAAA;IACA,IAAKC,IAAAA,CAAAA,cAAL,GAAsB,IAAtB,CAAA;IACA,IAAKf,IAAAA,CAAAA,KAAL,GAAa,CAAC,CAAd,CAAA;IACA,IAAK5H,IAAAA,CAAAA,UAAL,GAAkB,EAAlB,CAAA;IACA,IAAK4I,IAAAA,CAAAA,QAAL,GAAgB,KAAhB,CAAA;IACA,IAAA,IAAA,CAAKzT,GAAL,EAAA,CAAA;IACH,GAAA;;IAED2T,EAAAA,QAAQ,CAACjD,SAAD,EAAY;IAChB,IAAI,IAAA,CAACA,SAAL,EAAgB;IACZ,MAAA,OAAO,CAAC,CAAR,CAAA;IACH,KAAA;;IACD,IAAI,IAAA,CAAC,IAAK6C,CAAAA,cAAV,EAA0B;IACtB,MAAKA,IAAAA,CAAAA,cAAL,GAAsB7C,SAAtB,CAAA;IACA,MAAA,IAAA,CAAK8C,cAAL,GAAsBtZ,IAAI,CAACD,GAAL,EAAtB,CAAA;IACA,MAAKwY,IAAAA,CAAAA,KAAL,GAAa,CAAC,CAAd,CAAA;IACH,KAJD,MAIO;IACH,MAAA,IAAI/B,SAAJ,EAAe;IACX,QAAA,IAAA,CAAK+B,KAAL,GAAcvY,IAAI,CAACD,GAAL,EAAA,GAAa,IAAKuZ,CAAAA,cAAnB,IAAsC9C,SAAS,GAAG,IAAA,CAAK6C,cAAvD,CAAb,CAAA;IACH,OAAA;IACJ,KAAA;;IACD,IAAA,OAAO,KAAKd,KAAZ,CAAA;IACH,GAAA;;IAEDmB,EAAAA,UAAU,GAAG;IACT,IAAKL,IAAAA,CAAAA,cAAL,GAAsB,IAAtB,CAAA;IACA,IAAKC,IAAAA,CAAAA,cAAL,GAAsB,IAAtB,CAAA;IACA,IAAKf,IAAAA,CAAAA,KAAL,GAAa,CAAC,CAAd,CAAA;IACA,IAAKgB,IAAAA,CAAAA,QAAL,GAAgB,KAAhB,CAAA;IACH,GAhD6C;;;IAmD9CC,EAAAA,YAAY,GAAG;IACX,IAAKld,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,cAAtB,EAAuC,CAAvC,aAAA,CAAA,CAAA,CAAA;;IACA,IAAI4jB,IAAAA,KAAK,GAAG,MAAM;IACd,MAAA,IAAIxS,IAAJ,CAAA;IACA,MAAA,MAAM/V,WAAW,GAAG,IAAA,CAAKkL,MAAL,CAAYpB,IAAZ,CAAiB9J,WAArC,CAAA;;IACA,MAAA,IAAI,IAAKuf,CAAAA,UAAL,CAAgB7S,MAApB,EAA4B;IACxB,QAAI,IAAA,IAAA,CAAKyb,QAAT,EAAmB;IACf;IACApS,UAAAA,IAAI,GAAG,IAAA,CAAKwJ,UAAL,CAAgBqC,KAAhB,EAAP,CAAA;;IACA,UAAA,IAAI7L,IAAI,CAACxI,IAAL,KAAc/J,UAAU,CAACjC,KAAzB,IAAkCwU,IAAI,CAACyS,OAAL,CAAa,CAAb,CAAA,KAAoB,CAA1D,EAA6D;IACzD,YAAKC,IAAAA,CAAAA,gBAAL,CAAsB1S,IAAtB,CAAA,CAAA;IACH,WAAA;;IACD,UAAO,OAAA,CAACA,IAAI,CAAC2R,QAAN,IAAkB,IAAKnI,CAAAA,UAAL,CAAgB7S,MAAzC,EAAiD;IAC7CqJ,YAAAA,IAAI,GAAG,IAAA,CAAKwJ,UAAL,CAAgBqC,KAAhB,EAAP,CAAA;;IACA,YAAA,IAAI7L,IAAI,CAACxI,IAAL,KAAc/J,UAAU,CAACjC,KAAzB,IAAkCwU,IAAI,CAACyS,OAAL,CAAa,CAAb,CAAA,KAAoB,CAA1D,EAA6D;IACzD,cAAKC,IAAAA,CAAAA,gBAAL,CAAsB1S,IAAtB,CAAA,CAAA;IACH,aAAA;IACJ,WAXc;;;IAaf,UAAIA,IAAAA,IAAI,CAAC2R,QAAT,EAAmB;IACf,YAAKS,IAAAA,CAAAA,QAAL,GAAgB,KAAhB,CAAA;;IACA,YAAKM,IAAAA,CAAAA,gBAAL,CAAsB1S,IAAtB,CAAA,CAAA;IACH,WAAA;IACJ,SAjBD,MAiBO;IACHA,UAAAA,IAAI,GAAG,IAAA,CAAKwJ,UAAL,CAAgB,CAAhB,CAAP,CAAA;;IACA,UAAI,IAAA,IAAA,CAAK8I,QAAL,CAActS,IAAI,CAACsG,EAAnB,CAAA,KAA2B,CAAC,CAAhC,EAAmC;IAC/B;IACA,YAAKkD,IAAAA,CAAAA,UAAL,CAAgBqC,KAAhB,EAAA,CAAA;;IACA,YAAK6G,IAAAA,CAAAA,gBAAL,CAAsB1S,IAAtB,CAAA,CAAA;IACH,WAJD,MAIO,IAAI,IAAKoR,CAAAA,KAAL,GAAannB,WAAW,GAAG,IAA/B,EAAqC;IACxC;IACA,YAAA,IAAA,CAAKsoB,UAAL,EAAA,CAAA;IACA,YAAKH,IAAAA,CAAAA,QAAL,GAAgB,IAAhB,CAAA;IACH,WAJM,MAIA;IACH,YAAA,OAAO,IAAK5I,CAAAA,UAAL,CAAgB7S,MAAvB,EAA+B;IAC3BqJ,cAAAA,IAAI,GAAG,IAAA,CAAKwJ,UAAL,CAAgB,CAAhB,CAAP,CAAA;;IAEA,cAAI,IAAA,IAAA,CAAK8I,QAAL,CAActS,IAAI,CAACsG,EAAnB,CAAA,GAAyBrc,WAA7B,EAA0C;IACtC;IACA,gBAAKuf,IAAAA,CAAAA,UAAL,CAAgBqC,KAAhB,EAAA,CAAA;;IACA,gBAAK6G,IAAAA,CAAAA,gBAAL,CAAsB1S,IAAtB,CAAA,CAAA;IACH,eAJD,MAIO;IACH;IACA,gBAAA,MAAA;IACH,eAAA;IACJ,aAAA;IACJ,WAAA;IACJ,SAAA;IACJ,OAAA;IACJ,KA/CD,CAAA;;IAgDAwS,IAAAA,KAAK,EAAA,CAAA;;IACL,IAAA,IAAA,CAAKP,MAAL,GAAchC,WAAW,CAACuC,KAAD,EAAQ,EAAR,CAAzB,CAAA;IACH,GAAA;;IAEDG,EAAAA,SAAS,CAACF,OAAD,EAAUjb,IAAV,EAAgB8O,EAAhB,EAAoBqL,QAApB,EAA8B;IACnC,IAAMxc,MAAAA,MAAM,GAAG,IAAA,CAAKA,MAApB,CAAA;IACA,IAAA,IAAI4V,OAAO,GAAG;IACVzE,MAAAA,EAAE,EAAEA,EADM;IAEV9O,MAAAA,IAAI,EAAEA,IAFI;IAGVma,MAAAA,QAAQ,EAAE,KAAA;IAHA,KAAd,CAFmC;;IAQnC,IAAA,IAAIxc,MAAM,CAACpB,IAAP,CAAY1H,MAAZ,IAAsB,CAAC8I,MAAM,CAACpB,IAAP,CAAYvH,YAAvC,EAAqD;IACjD,MAAA,IAAIgL,IAAI,KAAK/J,UAAU,CAACC,KAAxB,EAA+B;IAC3Bqd,QAAAA,OAAO,CAAC4G,QAAR,GAAmBA,QAAnB,CAAA;IACH,OAAA;;IACD,MAAA,IAAA,CAAKiB,UAAL,CAAgBH,OAAhB,EAAyB1H,OAAzB,CAAA,CAAA;IACH,KALD,MAKO,IAAI5V,MAAM,CAACpB,IAAP,CAAYxH,MAAhB,EAAwB;IAC3B;IACA,MAAA,IAAIiL,IAAI,KAAK/J,UAAU,CAACC,KAAxB,EAA+B;IAC3Bqd,QAAAA,OAAO,CAAC4G,QAAR,GAAmBA,QAAnB,CAAA;IACH,OAAA;;IACD,MAAA,IAAA,CAAKiB,UAAL,CAAgBH,OAAhB,EAAyB1H,OAAzB,CAAA,CAAA;IACH,KANM,MAMA;IACH;IACA,MAAA,IAAIvT,IAAI,KAAK/J,UAAU,CAACC,KAAxB,EAA+B;IAC3ByH,QAAAA,MAAM,CAACqb,aAAP,IAAwBrb,MAAM,CAACqb,aAAP,CAAqBiB,WAArB,CAAiCgB,OAAjC,EAA0CnM,EAA1C,EAA8CqL,QAA9C,CAAxB,CAAA;IACH,OAFD,MAEO,IAAIna,IAAI,KAAK/J,UAAU,CAACjC,KAAxB,EAA+B;IAClC,QAAA,IAAI2J,MAAM,CAACpB,IAAP,CAAY7I,QAAhB,EAA0B;IACtBiK,UAAAA,MAAM,CAACqb,aAAP,IAAwBrb,MAAM,CAACqb,aAAP,CAAqBoB,WAArB,CAAiCa,OAAjC,EAA0CnM,EAA1C,CAAxB,CAAA;IACH,SAAA;IACJ,OAAA;IACJ,KAAA;IACJ,GAAA;;IAEDoM,EAAAA,gBAAgB,CAAC1S,IAAD,EAAO;IACnB,IAAM7K,MAAAA,MAAM,GAAG,IAAA,CAAKA,MAApB,CAAA;IACA,IAAM,MAAA;IAAC0d,MAAAA,gBAAD;IAAmBC,MAAAA,UAAAA;IAAnB,KAAA,GAAiC3d,MAAvC,CAAA;;IAEA,IAAA,IAAI6K,IAAI,CAACxI,IAAL,KAAc/J,UAAU,CAACjC,KAA7B,EAAoC;IAChC,MAAA,IAAI2J,MAAM,CAACpB,IAAP,CAAY7I,QAAhB,EAA0B;IACtBiK,QAAAA,MAAM,CAACqb,aAAP,IAAwBrb,MAAM,CAACqb,aAAP,CAAqBoB,WAArB,CAAiC5R,IAAI,CAACyS,OAAtC,EAA+CzS,IAAI,CAACsG,EAApD,CAAxB,CAAA;IACH,OAAA;IACJ,KAJD,MAIO,IAAItG,IAAI,CAACxI,IAAL,KAAc/J,UAAU,CAACC,KAA7B,EAAoC;IACvC,MAAA,IAAIyH,MAAM,CAACpB,IAAP,CAAY1H,MAAZ,IAAsB,CAAC8I,MAAM,CAACpB,IAAP,CAAYvH,YAAvC,EAAqD;IACjDqmB,QAAAA,gBAAgB,CAACpB,WAAjB,CAA6BzR,IAAI,CAACyS,OAAlC,EAA2CzS,IAAI,CAACsG,EAAhD,EAAoDtG,IAAI,CAAC2R,QAAzD,CAAA,CAAA;IACH,OAFD,MAEO,IAAIxc,MAAM,CAACpB,IAAP,CAAYxH,MAAhB,EAAwB;IAC3BumB,QAAAA,UAAU,CAACrB,WAAX,CAAuBzR,IAAI,CAACyS,OAA5B,EAAqCzS,IAAI,CAACsG,EAA1C,EAA8CtG,IAAI,CAAC2R,QAAnD,CAAA,CAAA;IACH,OAAA;IACJ,KAAA;IACJ,GAAA;;IAEDiB,EAAAA,UAAU,CAACH,OAAD,EAAU1H,OAAV,EAAmB;IACzB;IACA,IAAA,IAAIA,OAAO,CAACvT,IAAR,KAAiB/J,UAAU,CAACjC,KAAhC,EAAuC;IACnC,MAAKge,IAAAA,CAAAA,UAAL,CAAgBxU,IAAhB,CAAqB;IACjBsR,QAAAA,EAAE,EAAEyE,OAAO,CAACzE,EADK;IAEjBmM,QAAAA,OAAO,EAAEA,OAFQ;IAGjBjb,QAAAA,IAAI,EAAE/J,UAAU,CAACjC,KAAAA;IAHA,OAArB,CAAA,CAAA;IAKH,KAND,MAMO,IAAIuf,OAAO,CAACvT,IAAR,KAAiB/J,UAAU,CAACC,KAAhC,EAAuC;IAC1C,MAAK8b,IAAAA,CAAAA,UAAL,CAAgBxU,IAAhB,CAAqB;IACjBsR,QAAAA,EAAE,EAAEyE,OAAO,CAACzE,EADK;IAEjBmM,QAAAA,OAAO,EAAEA,OAFQ;IAGjBjb,QAAAA,IAAI,EAAE/J,UAAU,CAACC,KAHA;IAIjBikB,QAAAA,QAAQ,EAAE5G,OAAO,CAAC4G,QAAAA;IAJD,OAArB,CAAA,CAAA;IAMH,KAAA;IACJ,GAAA;;IAED5jB,EAAAA,KAAK,GAAG,EAEP;;IA7K6C;;ICCnC,MAAMglB,SAAN,SAAwBlO,YAAxB,CAAqC;IAChDjR,EAAAA,WAAW,CAACuB,MAAD,EAAS;IAChB,IAAA,KAAA,CAAMA,MAAN,CAAA,CAAA;IACA,IAAA,IAAA,CAAK6d,KAAL,GAAa,IAAKC,CAAAA,SAAL,EAAb,CAAA;IACA,IAAA,IAAA,CAAKC,QAAL,GAAgB,IAAA,CAAKC,eAAL,CAAqB,IAAA,CAAKH,KAA1B,CAAhB,CAAA;IACA7d,IAAAA,MAAM,CAAC9K,KAAP,CAAauE,GAAb,CAAiB,UAAjB,EAA6B,MAA7B,CAAA,CAAA;IACH,GAAA;;IAEDoB,EAAAA,OAAO,GAAG;IACN,IAAA,KAAA,CAAMA,OAAN,EAAA,CAAA;IACA,IAAKgjB,IAAAA,CAAAA,KAAL,GAAa,IAAb,CAAA;IACA,IAAKE,IAAAA,CAAAA,QAAL,GAAgB,IAAhB,CAAA;IACA,IAAK/d,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,UAAtB,EAAkC,SAAlC,CAAA,CAAA;IACH,GAAA;;IAEDmf,EAAAA,QAAQ,CAAC/N,IAAD,EAAO;IACX,IAAKkT,IAAAA,CAAAA,QAAL,CAAclT,IAAd,CAAA,CAAA;IACH,GAAA;;IAEU,EAAA,CAATiT,SAAS,GAAG;IACV,IAAA,MAAM,CAAN,CAAA;IACA,IAAA,MAAMG,GAAG,GAAG,IAAIC,WAAJ,CAAgB,CAAhB,CAAZ,CAAA;IACA,IAAA,MAAMC,IAAI,GAAG,IAAI1b,UAAJ,CAAewb,GAAf,CAAb,CAAA;IACA,IAAA,MAAMG,KAAK,GAAG,IAAIC,WAAJ,CAAgBJ,GAAhB,CAAd,CAAA;IACA,IAAMje,MAAAA,MAAM,GAAG,IAAA,CAAKA,MAApB,CAAA;;IAEA,IAAA,OAAO,IAAP,EAAa;IACTme,MAAAA,IAAI,CAAC,CAAD,CAAJ,GAAU,CAAV,CAAA;IACA,MAAMG,MAAAA,CAAC,GAAG,MAAM,EAAhB,CAAA;IACA,MAAA,MAAMjc,IAAI,GAAGic,CAAC,CAAC,CAAD,CAAd,CAAA;IACAH,MAAAA,IAAI,CAAC,CAAD,CAAJ,GAAUG,CAAC,CAAC,CAAD,CAAX,CAAA;IACAH,MAAAA,IAAI,CAAC,CAAD,CAAJ,GAAUG,CAAC,CAAC,CAAD,CAAX,CAAA;IACAH,MAAAA,IAAI,CAAC,CAAD,CAAJ,GAAUG,CAAC,CAAC,CAAD,CAAX,CAAA;IACA,MAAA,MAAM9c,MAAM,GAAG4c,KAAK,CAAC,CAAD,CAApB,CAAA;IACAD,MAAAA,IAAI,CAAC,CAAD,CAAJ,GAAUG,CAAC,CAAC,EAAD,CAAX,CAAA;IACAH,MAAAA,IAAI,CAAC,CAAD,CAAJ,GAAUG,CAAC,CAAC,CAAD,CAAX,CAAA;IACAH,MAAAA,IAAI,CAAC,CAAD,CAAJ,GAAUG,CAAC,CAAC,CAAD,CAAX,CAAA;IACA,MAAA,IAAInN,EAAE,GAAGiN,KAAK,CAAC,CAAD,CAAd,CAAA;;IACA,MAAIjN,IAAAA,EAAE,KAAK,QAAX,EAAqB;IACjBgN,QAAAA,IAAI,CAAC,CAAD,CAAJ,GAAUG,CAAC,CAAC,EAAD,CAAX,CAAA;IACAnN,QAAAA,EAAE,GAAGiN,KAAK,CAAC,CAAD,CAAV,CAAA;IACH,OAAA;;IACD,MAAMd,MAAAA,OAAO,GAAG,MAAM9b,MAAtB,CAAA;;IACA,MAAA,QAAQa,IAAR;IACI,QAAK7J,KAAAA,cAAc,CAACnC,KAApB;IACI,UAAA,IAAI2J,MAAM,CAACpB,IAAP,CAAY7I,QAAhB,EAA0B;IACtBiK,YAAAA,MAAM,CAAC+b,WAAP,CAAmB;IACfwC,cAAAA,IAAI,EAAEjB,OAAO,CAAC3E,UAAAA;IADC,aAAnB,CAAA,CAAA;;IAGA,YAAA,IAAI2E,OAAO,CAAC3E,UAAR,GAAqB,CAAzB,EAA4B;IACxB,cAAK6E,IAAAA,CAAAA,SAAL,CAAeF,OAAf,EAAwBhlB,UAAU,CAACjC,KAAnC,EAA0C8a,EAA1C,CAAA,CAAA;IACH,aAAA;IACJ,WAAA;;IACD,UAAA,MAAA;;IACJ,QAAK3Y,KAAAA,cAAc,CAACD,KAApB;IACI,UAAA,IAAI,CAACyH,MAAM,CAACkY,MAAP,CAAc/P,UAAnB,EAA+B;IAC3BnI,YAAAA,MAAM,CAACkY,MAAP,CAAc/P,UAAd,GAA2B1E,GAAG,EAA9B,CAAA;IACH,WAAA;;IACD,UAAA,IAAIzD,MAAM,CAACpB,IAAP,CAAY5I,QAAhB,EAA0B;IACtBgK,YAAAA,MAAM,CAAC+b,WAAP,CAAmB;IACfyC,cAAAA,IAAI,EAAElB,OAAO,CAAC3E,UAAAA;IADC,aAAnB,CAAA,CAAA;IAGA,YAAM6D,MAAAA,QAAQ,GAAGc,OAAO,CAAC,CAAD,CAAP,IAAc,CAAd,KAAoB,CAArC,CAAA;;IACA,YAAA,IAAIA,OAAO,CAAC3E,UAAR,GAAqB,CAAzB,EAA4B;IACxB,cAAK6E,IAAAA,CAAAA,SAAL,CAAeF,OAAf,EAAwBhlB,UAAU,CAACC,KAAnC,EAA0C4Y,EAA1C,EAA8CqL,QAA9C,CAAA,CAAA;IACH,aAAA;IACJ,WAAA;;IACD,UAAA,MAAA;IAxBR,OAAA;IA0BH,KAAA;IACJ,GAAA;;IAEDwB,EAAAA,eAAe,CAACH,KAAD,EAAQ;IACnB,IAAA,IAAIY,IAAI,GAAGZ,KAAK,CAACa,IAAN,EAAX,CAAA;IACA,IAAIvkB,IAAAA,MAAM,GAAG,IAAb,CAAA;IACA,IAAA,OAAQsK,KAAD,IAAW;IACd,MAAA,IAAIoG,IAAI,GAAG,IAAIpI,UAAJ,CAAegC,KAAf,CAAX,CAAA;;IACA,MAAA,IAAItK,MAAJ,EAAY;IACR,QAAA,IAAIwkB,OAAO,GAAG,IAAIlc,UAAJ,CAAetI,MAAM,CAACqH,MAAP,GAAgBqJ,IAAI,CAACrJ,MAApC,CAAd,CAAA;IACAmd,QAAAA,OAAO,CAACC,GAAR,CAAYzkB,MAAZ,CAAA,CAAA;IACAwkB,QAAAA,OAAO,CAACC,GAAR,CAAY/T,IAAZ,EAAkB1Q,MAAM,CAACqH,MAAzB,CAAA,CAAA;IACAqJ,QAAAA,IAAI,GAAG8T,OAAP,CAAA;IACAxkB,QAAAA,MAAM,GAAG,IAAT,CAAA;IACH,OAAA;;IACD,MAAA,OAAO0Q,IAAI,CAACrJ,MAAL,IAAeid,IAAI,CAACha,KAA3B,EAAkC;IAC9B,QAAIoa,IAAAA,MAAM,GAAGhU,IAAI,CAACD,KAAL,CAAW6T,IAAI,CAACha,KAAhB,CAAb,CAAA;IACAga,QAAAA,IAAI,GAAGZ,KAAK,CAACa,IAAN,CAAW7T,IAAI,CAACD,KAAL,CAAW,CAAX,EAAc6T,IAAI,CAACha,KAAnB,CAAX,CAAP,CAAA;IACAoG,QAAAA,IAAI,GAAGgU,MAAP,CAAA;IACH,OAAA;;IACD,MAAA,IAAIhU,IAAI,CAACrJ,MAAL,GAAc,CAAlB,EAAqB;IACjBrH,QAAAA,MAAM,GAAG0Q,IAAT,CAAA;IACH,OAAA;IACJ,KAjBD,CAAA;IAkBH,GAAA;;IAEDjS,EAAAA,KAAK,GAAG;IACJ,IAAKilB,IAAAA,CAAAA,KAAL,IAAc,IAAKA,CAAAA,KAAL,CAAWiB,MAAX,CAAkB,IAAlB,CAAd,CAAA;IACH,GAAA;;IAjG+C;;ICArC,MAAMC,SAAN,SAAwBrP,YAAxB,CAAqC;IAChDjR,EAAAA,WAAW,CAACuB,MAAD,EAAS;IAChB,IAAA,KAAA,CAAMA,MAAN,CAAA,CAAA;IACAA,IAAAA,MAAM,CAAC9K,KAAP,CAAauE,GAAb,CAAiB,UAAjB,EAA6B,MAA7B,CAAA,CAAA;IACH,GAAA;;IAEDoB,EAAAA,OAAO,GAAG;IACN,IAAA,KAAA,CAAMA,OAAN,EAAA,CAAA;IACA,IAAKmF,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,UAAtB,EAAkC,SAAlC,CAAA,CAAA;IACH,GAAA;;IAEDmf,EAAAA,QAAQ,CAAC/N,IAAD,EAAO;IACX,IAAM7K,MAAAA,MAAM,GAAG,IAAA,CAAKA,MAApB,CAAA;IACA,IAAA,MAAMgf,EAAE,GAAG,IAAIC,QAAJ,CAAapU,IAAb,CAAX,CAAA;IACA,IAAA,MAAMxI,IAAI,GAAG2c,EAAE,CAACE,QAAH,CAAY,CAAZ,CAAb,CAAA;IACA,IAAM/N,MAAAA,EAAE,GAAG6N,EAAE,CAACG,SAAH,CAAa,CAAb,EAAgB,KAAhB,CAAX,CAAA;;IACA,IAAA,QAAQ9c,IAAR;IACI,MAAK/J,KAAAA,UAAU,CAACjC,KAAhB;IACI,QAAA,IAAI2J,MAAM,CAACpB,IAAP,CAAY7I,QAAhB,EAA0B;IACtB,UAAMunB,MAAAA,OAAO,GAAG,IAAI7a,UAAJ,CAAeoI,IAAf,EAAqB,CAArB,CAAhB,CAAA;IACA7K,UAAAA,MAAM,CAAC+b,WAAP,CAAmB;IACfwC,YAAAA,IAAI,EAAEjB,OAAO,CAAC3E,UAAAA;IADC,WAAnB,CAAA,CAAA;;IAGA,UAAA,IAAI2E,OAAO,CAAC3E,UAAR,GAAqB,CAAzB,EAA4B;IACxB,YAAA,IAAA,CAAK6E,SAAL,CAAeF,OAAf,EAAwBjb,IAAxB,EAA8B8O,EAA9B,CAAA,CAAA;IACH,WAAA;IACJ,SAAA;;IACD,QAAA,MAAA;;IACJ,MAAK7Y,KAAAA,UAAU,CAACC,KAAhB;IACI,QAAA,IAAIyH,MAAM,CAACpB,IAAP,CAAY5I,QAAhB,EAA0B;IACtB,UAAA,IAAI,CAACgK,MAAM,CAACkY,MAAP,CAAc/P,UAAnB,EAA+B;IAC3BnI,YAAAA,MAAM,CAACkY,MAAP,CAAc/P,UAAd,GAA2B1E,GAAG,EAA9B,CAAA;IACH,WAAA;;IACD,UAAA,IAAIub,EAAE,CAACrG,UAAH,GAAgB,CAApB,EAAuB;IACnB,YAAM2E,MAAAA,OAAO,GAAG,IAAI7a,UAAJ,CAAeoI,IAAf,EAAqB,CAArB,CAAhB,CAAA;IACA,YAAMuU,MAAAA,QAAQ,GAAGJ,EAAE,CAACE,QAAH,CAAY,CAAZ,CAAA,IAAkB,CAAlB,KAAwB,CAAzC,CAAA;IACAlf,YAAAA,MAAM,CAAC+b,WAAP,CAAmB;IACfyC,cAAAA,IAAI,EAAElB,OAAO,CAAC3E,UAAAA;IADC,aAAnB,CAAA,CAAA;;IAGA,YAAA,IAAI2E,OAAO,CAAC3E,UAAR,GAAqB,CAAzB,EAA4B;IACxB,cAAK6E,IAAAA,CAAAA,SAAL,CAAeF,OAAf,EAAwBjb,IAAxB,EAA8B8O,EAA9B,EAAkCiO,QAAlC,CAAA,CAAA;IACH,aAAA;IACJ,WAAA;IACJ,SAAA;;IACD,QAAA,MAAA;IA5BR,KAAA;IA8BH,GAAA;;IA9C+C;;ICArC,MAAMC,KAAN,CAAY;IACvB5gB,EAAAA,WAAW,CAACuB,MAAD,EAAS;IAChB,IAAMiU,MAAAA,MAAM,GAAGoL,KAAK,CAACnL,gBAAN,CAAuBlU,MAAM,CAACpB,IAAP,CAAY3H,SAAnC,CAAf,CAAA;IACA,IAAA,OAAO,IAAIgd,MAAJ,CAAWjU,MAAX,CAAP,CAAA;IACH,GAAA;;IAEsB,EAAhBkU,OAAAA,gBAAgB,CAAC7R,IAAD,EAAO;IAC1B,IAAA,IAAIA,IAAI,KAAK3N,UAAU,CAACE,GAAxB,EAA6B;IACzB,MAAA,OAAOmqB,SAAP,CAAA;IACH,KAFD,MAEO,IAAI1c,IAAI,KAAK3N,UAAU,CAACC,GAAxB,EAA6B;IAChC,MAAA,OAAOipB,SAAP,CAAA;IACH,KAAA;IACJ,GAAA;;IAZsB;;ICCZ,MAAM0B,gBAAN,SAA+BnV,OAA/B,CAAuC;IAClD1L,EAAAA,WAAW,CAACuB,MAAD,EAAS;IAChB,IAAA,KAAA,EAAA,CAAA;IACA,IAAKA,IAAAA,CAAAA,MAAL,GAAcA,MAAd,CAAA;IACA,IAAKuf,IAAAA,CAAAA,OAAL,GAAe,KAAf,CAAA;IACA,IAAKC,IAAAA,CAAAA,UAAL,GAAkB,KAAlB,CAAA;IACA,IAAK7oB,IAAAA,CAAAA,OAAL,GAAe,IAAf,CAAA;IACA,IAAA,IAAA,CAAK8oB,WAAL,EAAA,CAAA;IACAzf,IAAAA,MAAM,CAAC9K,KAAP,CAAauE,GAAb,CAAiB,WAAjB,EAA8B,MAA9B,CAAA,CAAA;IACH,GAAA;;IAEDoB,EAAAA,OAAO,GAAG;IACN,IAAI,IAAA,IAAA,CAAKlE,OAAT,EAAkB;IACd,MAAKA,IAAAA,CAAAA,OAAL,CAAaiC,KAAb,EAAA,CAAA;IACA,MAAKjC,IAAAA,CAAAA,OAAL,GAAe,IAAf,CAAA;IACH,KAAA;;IAED,IAAK4oB,IAAAA,CAAAA,OAAL,GAAe,KAAf,CAAA;IACA,IAAKC,IAAAA,CAAAA,UAAL,GAAkB,KAAlB,CAAA;IACA,IAAA,IAAA,CAAKhW,GAAL,EAAA,CAAA;IACA,IAAKxJ,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,WAAtB,EAAmC,SAAnC,CAAA,CAAA;IACH,GAAA;;IAEDgmB,EAAAA,WAAW,GAAG;IACV,IAAMC,MAAAA,KAAK,GAAG,IAAd,CAAA;;IACA,IAAA,IAAA,CAAK/oB,OAAL,GAAe,IAAIgpB,YAAJ,CAAiB;IAC5BtO,MAAAA,MAAM,CAACjX,UAAD,EAAa;IACfslB,QAAAA,KAAK,CAACE,YAAN,CAAmBxlB,UAAnB,CAAA,CAAA;IACH,OAH2B;;IAI5BV,MAAAA,KAAK,CAACA,KAAD,EAAQ;IACTgmB,QAAAA,KAAK,CAACG,WAAN,CAAkBnmB,KAAlB,CAAA,CAAA;IACH,OAAA;;IAN2B,KAAjB,CAAf,CAAA;IAQH,GAAA;;IAEDkmB,EAAAA,YAAY,CAACxlB,UAAD,EAAa;IACrB,IAAI,IAAA,CAAC,IAAKolB,CAAAA,UAAV,EAAsB;IAClB,MAAA,IAAA,CAAKxf,MAAL,CAAYzH,KAAZ,CAAkBoX,eAAlB,CAAkC;IAC9BpP,QAAAA,KAAK,EAAEnG,UAAU,CAAC0lB,UADY;IAE9Bnf,QAAAA,MAAM,EAAEvG,UAAU,CAAC2lB,WAAAA;IAFW,OAAlC,CAAA,CAAA;IAIA,MAAA,IAAA,CAAK/f,MAAL,CAAYzH,KAAZ,CAAkB0Y,kBAAlB,EAAA,CAAA;IACA,MAAKuO,IAAAA,CAAAA,UAAL,GAAkB,IAAlB,CAAA;IACH,KAAA;;IAED,IAAA,IAAI,CAAC,IAAKxf,CAAAA,MAAL,CAAYkY,MAAZ,CAAmB7P,UAAxB,EAAoC;IAChC,MAAA,IAAA,CAAKrI,MAAL,CAAYkY,MAAZ,CAAmB7P,UAAnB,GAAgC5E,GAAG,EAAnC,CAAA;IACA,MAAKzD,IAAAA,CAAAA,MAAL,CAAYkc,uBAAZ,EAAA,CAAA;IACH,KAAA;;IAED,IAAKlc,IAAAA,CAAAA,MAAL,CAAY8b,YAAZ,EAAA,CAAA;IACA,IAAA,IAAA,CAAK9b,MAAL,CAAYzH,KAAZ,CAAkBX,MAAlB,CAAyB;IACrBwC,MAAAA,UAAAA;IADqB,KAAzB,CAAA,CAAA;IAIA,IAAK4F,IAAAA,CAAAA,MAAL,CAAY+b,WAAZ,CAAwB;IAAC7U,MAAAA,GAAG,EAAE,IAAN;IAAYiK,MAAAA,EAAE,EAAE,CAAhB;IAAmB6K,MAAAA,GAAG,EAAE,IAAA,CAAKhc,MAAL,CAAYiY,KAAZ,CAAkBgE,KAAAA;IAA1C,KAAxB,EApBqB;;IAuBrB3Y,IAAAA,UAAU,CAAC,YAAY;IACnB,MAAIlJ,IAAAA,UAAU,CAACxB,KAAf,EAAsB;IAClBwB,QAAAA,UAAU,CAACxB,KAAX,EAAA,CAAA;IACH,OAFD,MAEO;IACHwB,QAAAA,UAAU,CAACS,OAAX,EAAA,CAAA;IACH,OAAA;IACJ,KANS,EAMP,GANO,CAAV,CAAA;IAOH,GAAA;;IAEDglB,EAAAA,WAAW,CAACnmB,KAAD,EAAQ;IACf,IAAKsG,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,WAAtB,EAAmC,0BAAnC,EAA+DC,KAA/D,CAAA,CAAA;IACH,GAAA;;IAED4iB,EAAAA,WAAW,CAACgB,OAAD,EAAUnM,EAAV,EAAciO,QAAd,EAAwB;IAC/B;IACA,IAAI,IAAA,CAAC,IAAKG,CAAAA,OAAV,EAAmB;IACf,MAAIH,IAAAA,QAAQ,IAAI9B,OAAO,CAAC,CAAD,CAAP,KAAe,CAA/B,EAAkC;IAC9B,QAAA,MAAM0C,UAAU,GAAI1C,OAAO,CAAC,CAAD,CAAP,GAAa,IAAjC,CAAA;IACA,QAAA,IAAA,CAAKtd,MAAL,CAAYzH,KAAZ,CAAkBoX,eAAlB,CAAkC;IAC9BC,UAAAA,WAAW,EAAEoQ,UAAAA;IADiB,SAAlC,EAF8B;;IAO9B,QAAA,IAAIA,UAAU,KAAK1jB,cAAc,CAACE,IAAlC,EAAwC;IACpC,UAAA,IAAA,CAAK4M,IAAL,CAAU7N,YAAY,CAACI,uBAAvB,CAAA,CAAA;IACA,UAAA,OAAA;IACH,SAAA;;IACD,QAAA,IAAI,CAAC,IAAKqE,CAAAA,MAAL,CAAYkY,MAAZ,CAAmB9P,WAAxB,EAAqC;IACjC,UAAA,IAAA,CAAKpI,MAAL,CAAYkY,MAAZ,CAAmB9P,WAAnB,GAAiC3E,GAAG,EAApC,CAAA;IACH,SAAA;;IAED,QAAMoZ,MAAAA,MAAM,GAAG3W,2BAA2B,CAACoX,OAAO,CAAC1S,KAAR,CAAc,CAAd,CAAD,CAA1C,CAAA;IACA,QAAA,IAAA,CAAKjU,OAAL,CAAaspB,SAAb,CAAuBpD,MAAvB,CAAA,CAAA;IACA,QAAK0C,IAAAA,CAAAA,OAAL,GAAe,IAAf,CAAA;IACH,OAAA;IACJ,KApBD,MAoBO;IACH,MAAA,MAAMW,KAAK,GAAG,IAAIC,iBAAJ,CAAsB;IAChCtV,QAAAA,IAAI,EAAEyS,OAAO,CAAC1S,KAAR,CAAc,CAAd,CAD0B;IAEhCsP,QAAAA,SAAS,EAAE/I,EAFqB;IAGhC9O,QAAAA,IAAI,EAAE+c,QAAQ,GAAG1hB,kBAAkB,CAACC,GAAtB,GAA4BD,kBAAkB,CAACE,KAAAA;IAH7B,OAAtB,CAAd,CAAA;IAKA,MAAA,IAAA,CAAKjH,OAAL,CAAaqB,MAAb,CAAoBkoB,KAApB,CAAA,CAAA;IACH,KAAA;IACJ,GAAA;;IArGiD;;ICLtD,MAAME,QAAQ,GAAG;IACbhqB,EAAAA,IAAI,EAAE,IADO;IAEb8C,EAAAA,KAAK,EAAE,IAFM;IAGb7C,EAAAA,KAAK,EAAE,EAHM;IAIb8C,EAAAA,IAAI,EAAE,EAJO;IAKbhD,EAAAA,UAAU,EAAE,IALC;IAMbkD,EAAAA,OAAO,EAAE,IANI;IAObnD,EAAAA,UAAU,EAAE,IAPC;IAQbmqB,EAAAA,cAAc,EAAE,MARH;IASb/pB,EAAAA,MAAM,EAAE,IATK;IAUbgqB,EAAAA,UAAU,EAAE,MAAA;IAVC,CAAjB,CAAA;AAaA,gBAAergB,MAAM,CAACyE,IAAP,CAAY0b,QAAZ,CAAA,CAAsBG,MAAtB,CAA6B,CAACC,KAAD,EAAQ7iB,GAAR,KAAgB;IACxD6iB,EAAAA,KAAK,CAAC7iB,GAAD,CAAL,GAAc,CAAA;AAClB,4CAAA,EAA8CA,GAAI,CAAA;AAClD,IAAA,EAAMyiB,QAAQ,CAACziB,GAAD,CAAR,GAAiB,CAAA,uDAAA,EAAyDyiB,QAAQ,CAACziB,GAAD,CAAM,CAAxF,cAAA,CAAA,GAA0G,EAAG,CAAA;AACnH,CAHI,CAAA;IAIA,EAAA,OAAO6iB,KAAP,CAAA;IACH,CANc,EAMZ,EANY,CAAf;;ACXA,mBAAA,CAAe,CAACxgB,MAAD,EAASygB,OAAT,KAAqB;IAEhC,EAAIzgB,IAAAA,MAAM,CAACpB,IAAP,CAAYpI,UAAZ,IAA0BwJ,MAAM,CAACpB,IAAP,CAAYrI,eAA1C,EAA2D;IACvDyJ,IAAAA,MAAM,CAACK,UAAP,CAAkByJ,SAAlB,CAA4BC,GAA5B,CAAgC,mCAAhC,CAAA,CAAA;IACH,GAFD,MAGK;IACD/J,IAAAA,MAAM,CAACK,UAAP,CAAkByJ,SAAlB,CAA4BC,GAA5B,CAAgC,yBAAhC,CAAA,CAAA;IACH,GAAA;;IACD,EAAA,MAAM6L,OAAO,GAAG5V,MAAM,CAACpB,IAAvB,CAAA;IACA,EAAA,MAAM3I,WAAW,GAAG2f,OAAO,CAAC3f,WAA5B,CAAA;IAGA+J,EAAAA,MAAM,CAACK,UAAP,CAAkBqgB,kBAAlB,CACI,WADJ,EAEK,CAAA;AACT,YAAc9K,EAAAA,OAAO,CAAClf,UAAR,GAAsB,CAAA,2DAAA,EAA6Dkf,OAAO,CAAClf,UAAW,CAAtG,SAAA,CAAA,GAAmH,EAAG,CAAA;AACpI;AACA,gBAAkB8pB,EAAAA,KAAK,CAACnnB,OAAQ,CAAA;AAChC,gBAAkBuc,EAAAA,OAAO,CAACnf,WAAR,GAAuB,CAAA,oCAAA,EAAsCmf,OAAO,CAACnf,WAAY,CAAjF,MAAA,CAAA,GAA2F,EAAG,CAAA;AAChH;AACA,YAAcmf,EAAAA,OAAO,CAACpf,UAAR,IAAsBP,WAAW,CAACG,IAAlC,GAA0C,CAA1C,sCAAA,CAAA,GAAoF,EAAG,CAAA;AACrG,YAAcwf,EAAAA,OAAO,CAACpf,UAAR,GAAsB,CAAA;AACpC;AACA;AACA;AACA,oFAAsFgqB,EAAAA,KAAK,CAACF,UAAW,CAAA;AACvG;AACA,YAAA,CANc,GAMA,EAAG,CAAA;AACjB,YAAc1K,EAAAA,OAAO,CAACpf,UAAR,GAAsB,CAAA;AACpC;AACA;AACA;AACA,4BAAA,EAA8Bof,OAAO,CAAChgB,aAAR,GAAyB,CAAA,2DAAA,CAAzB,GAAwF,EAAG,CAAA;AACzH;AACA;AACA,6BAA+BK,EAAAA,WAAW,CAACI,KAAZ,GAAqB,CAAA;AACpD;AACA,qCAAuCmqB,EAAAA,KAAK,CAACnqB,KAAM,CAAA;AACnD,qCAAuCmqB,EAAAA,KAAK,CAACrnB,IAAK,CAAA;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAAA,CAX+B,GAWE,EAAG,CAAA;AACpC,6BAAA,EAA+BlD,WAAW,CAACG,IAAZ,GAAoB,uDAAsDoqB,KAAK,CAACpqB,IAAK,CAAA,2DAAA,EAA6DoqB,KAAK,CAACtnB,KAAM,CAAA,MAAA,CAA9J,GAAwK,EAAG,CAAA;AAC1M,6BAA+BjD,EAAAA,WAAW,CAACE,UAAZ,GAA0B,CAAA,0DAAA,EAA4DqqB,KAAK,CAACrqB,UAAW,CAAvG,MAAA,CAAA,GAAiH,EAAG,CAAA;AACnJ,6BAAA,EAA+BF,WAAW,CAACK,MAAZ,GAAsB,0DAAyDkqB,KAAK,CAAClqB,MAAO,CAAA,iEAAA,EAAmEkqB,KAAK,CAACF,UAAW,CAAA,MAAA,CAAhL,GAA0L,EAAG,CAAA;AAC5N,6BAAA,EAA+BrqB,WAAW,CAACC,UAAZ,GAA0B,6DAA4DsqB,KAAK,CAACtqB,UAAW,CAAA,qEAAA,EAAuEsqB,KAAK,CAACH,cAAe,CAAA,MAAA,CAAnM,GAA6M,EAAG,CAAA;AAC/O;AACA;AACA;AACA,YAAA,CA1Bc,GA0BE,EAAG,CAAA;AACnB;AACA,QA5CI,CAAA,CAAA,CAAA;IA+CApgB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,SAA/B,EAA0C;IACtChc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,mBAAhC,CAAA;IAD+B,GAA1C,CAAA,CAAA;IAIA1gB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,UAA/B,EAA2C;IACvChc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,oBAAhC,CAAA;IADgC,GAA3C,CAAA,CAAA;IAIA1gB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,OAA/B,EAAwC;IACpChc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,iBAAhC,CAAA;IAD6B,GAAxC,CAAA,CAAA;IAIA1gB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,UAA/B,EAA2C;IACvChc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,qBAAhC,CAAA;IADgC,GAA3C,CAAA,CAAA;IAIA1gB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,YAA/B,EAA6C;IACzChc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,sBAAhC,CAAA;IADkC,GAA7C,CAAA,CAAA;IAGA1gB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,gBAA/B,EAAiD;IAC7Chc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,2BAAhC,CAAA;IADsC,GAAjD,CAAA,CAAA;IAIA1gB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,gBAA/B,EAAiD;IAC7Chc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,2BAAhC,CAAA;IADsC,GAAjD,CAAA,CAAA;IAIA1gB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,QAA/B,EAAyC;IACrChc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,kBAAhC,CAAA;IAD8B,GAAzC,CAAA,CAAA;IAIA1gB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,WAA/B,EAA4C;IACxChc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,qBAAhC,CAAA;IADiC,GAA5C,CAAA,CAAA;IAIA1gB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,aAA/B,EAA8C;IAC1Chc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,uBAAhC,CAAA;IADmC,GAA9C,CAAA,CAAA;IAIA1gB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,aAA/B,EAA8C;IAC1Chc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,uBAAhC,CAAA;IADmC,GAA9C,CAAA,CAAA;IAKA1gB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,SAA/B,EAA0C;IACtChc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,mBAAhC,CAAA;IAD+B,GAA1C,CAAA,CAAA;IAIA1gB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,kBAA/B,EAAmD;IAC/Chc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,8BAAhC,CAAA;IADwC,GAAnD,CAAA,CAAA;IAIA1gB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,kBAA/B,EAAmD;IAC/Chc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,8BAAhC,CAAA;IADwC,GAAnD,CAAA,CAAA;IAIA1gB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,cAA/B,EAA+C;IAC3Chc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,yBAAhC,CAAA;IADoC,GAA/C,CAAA,CAAA;IAIA1gB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,eAA/B,EAAgD;IAC5Chc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,gCAAhC,CAAA;IADqC,GAAhD,CAAA,CAAA;IAIA1gB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,WAA/B,EAA4C;IACxChc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,uBAAhC,CAAA;IADiC,GAA5C,CAAA,CAAA;IAIA1gB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,YAA/B,EAA6C;IACzChc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,sBAAhC,CAAA;IADkC,GAA7C,CAAA,CAAA;IAKA1gB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,aAA/B,EAA8C;IAC1Chc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,uBAAhC,CAAA;IADmC,GAA9C,CAAA,CAAA;IAIA1gB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,iBAA/B,EAAkD;IAC9Chc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,4BAAhC,CAAA;IADuC,GAAlD,CAAA,CAAA;IAIA1gB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,SAA/B,EAA0C;IACtChc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,mBAAhC,CAAA;IAD+B,GAA1C,CAAA,CAAA;IAGA1gB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,aAA/B,EAA8C;IAC1Chc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,wBAAhC,CAAA;IADmC,GAA9C,CAAA,CAAA;IAIA1gB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,aAA/B,EAA8C;IAC1Chc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,uBAAhC,CAAA;IADmC,GAA9C,CAAA,CAAA;IAIA1gB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,QAA/B,EAAyC;IACrChc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,kBAAhC,CAAA;IAD8B,GAAzC,CAAA,CAAA;IAGH,CA1JD;;ACEA,qBAAA,CAAe,CAAC3gB,MAAD,EAASygB,OAAT,KAAqB;IAChC,EAAM,MAAA;IACFlX,IAAAA,MAAM,EAAE;IAACrK,MAAAA,KAAAA;IAAD,KAAA;IADN,GAAA,GAEFc,MAFJ,CAAA;IAIA,EAAA,MAAM4gB,MAAM,GAAG5d,QAAQ,CAACC,aAAT,CAAuB,QAAvB,CAAf,CAAA;IACA2d,EAAAA,MAAM,CAACC,YAAP,CAAoB,aAApB,EAAmC,MAAnC,CAAA,CAAA;IACAD,EAAAA,MAAM,CAACC,YAAP,CAAoB,UAApB,EAAgC,CAAC,CAAjC,CAAA,CAAA;IACAD,EAAAA,MAAM,CAACve,IAAP,GAAc,WAAd,CAAA;IACAue,EAAAA,MAAM,CAAC/V,IAAP,GAAc,aAAd,CAAA;IAEAtG,EAAAA,QAAQ,CAACqc,MAAD,EAAS;IACbE,IAAAA,OAAO,EAAE,OADI;IAEb/Q,IAAAA,QAAQ,EAAE,UAFG;IAGbC,IAAAA,GAAG,EAAE,GAHQ;IAIbC,IAAAA,IAAI,EAAE,GAJO;IAKbtP,IAAAA,MAAM,EAAE,MALK;IAMbJ,IAAAA,KAAK,EAAE,MANM;IAObwgB,IAAAA,QAAQ,EAAE,QAPG;IAQbC,IAAAA,aAAa,EAAE,MARF;IASbC,IAAAA,MAAM,EAAE,IAAA;IATK,GAAT,CAAR,CAAA;IAYA,EAAA,IAAIC,WAAW,GAAGlhB,MAAM,CAACO,KAAzB,CAAA;IACA,EAAA,IAAI4gB,YAAY,GAAGnhB,MAAM,CAACW,MAA1B,CAAA;IAEAzB,EAAAA,KAAK,CAAC0hB,MAAD,EAAS,MAAT,EAAiB,MAAM;IACxB1hB,IAAAA,KAAK,CAAC0hB,MAAM,CAACQ,eAAP,CAAuBC,WAAxB,EAAqC,QAArC,EAA+C,MAAM;IACtD,MAAIrhB,IAAAA,MAAM,CAACO,KAAP,KAAiB2gB,WAAjB,IAAgClhB,MAAM,CAACW,MAAP,KAAkBwgB,YAAtD,EAAoE;IAChED,QAAAA,WAAW,GAAGlhB,MAAM,CAACO,KAArB,CAAA;IACA4gB,QAAAA,YAAY,GAAGnhB,MAAM,CAACW,MAAtB,CAAA;IACAX,QAAAA,MAAM,CAACoJ,IAAP,CAAYtQ,MAAM,CAACyB,MAAnB,CAAA,CAAA;IACH,OAAA;IACJ,KANI,CAAL,CAAA;IAOH,GARI,CAAL,CAAA;IASAyF,EAAAA,MAAM,CAACK,UAAP,CAAkB8P,WAAlB,CAA8ByQ,MAA9B,CAAA,CAAA;IAEA5gB,EAAAA,MAAM,CAACsJ,EAAP,CAAUxQ,MAAM,CAAC+B,OAAjB,EAA0B,MAAM;IAC5BmF,IAAAA,MAAM,CAACK,UAAP,CAAkBsQ,WAAlB,CAA8BiQ,MAA9B,CAAA,CAAA;IACH,GAFD,CAAA,CAAA;;IAIA,EAASU,SAAAA,eAAT,CAAyBC,UAAzB,EAAqC;IACjC,IAAIA,IAAAA,UAAU,KAAK,CAAnB,EAAsB;IAClBhd,MAAAA,QAAQ,CAACkc,OAAO,CAACe,SAAT,EAAoB,SAApB,EAA+B,MAA/B,CAAR,CAAA;IACAjd,MAAAA,QAAQ,CAACkc,OAAO,CAACgB,UAAT,EAAqB,SAArB,EAAgC,MAAhC,CAAR,CAAA;IACAld,MAAAA,QAAQ,CAACkc,OAAO,CAACiB,aAAT,EAAwB,KAAxB,EAAgC,CAAA,EAAE,EAAG,CAAA,EAAA,CAArC,CAAR,CAAA;IACH,KAJD,MAIO;IACH,MAAA,IAAIjB,OAAO,CAACiB,aAAR,IAAyBjB,OAAO,CAACkB,YAArC,EAAmD;IAC/C,QAAMC,MAAAA,WAAW,GAAGhd,QAAQ,CAAC6b,OAAO,CAACkB,YAAT,EAAuB,QAAvB,CAAR,IAA4C,EAAhE,CAAA;IACA,QAAME,MAAAA,YAAY,GAAGjd,QAAQ,CAAC6b,OAAO,CAACiB,aAAT,EAAwB,QAAxB,CAA7B,CAAA;IACA,QAAM1R,MAAAA,GAAG,GAAG4R,WAAW,GAAG,CAACA,WAAW,GAAGC,YAAf,IAA+BN,UAA7C,GAA0DM,YAAtE,CAAA;IACAtd,QAAAA,QAAQ,CAACkc,OAAO,CAACiB,aAAT,EAAwB,KAAxB,EAAgC,CAAA,EAAE1R,GAAI,CAAA,EAAA,CAAtC,CAAR,CAAA;IACAzL,QAAAA,QAAQ,CAACkc,OAAO,CAACe,SAAT,EAAoB,SAApB,EAA+B,MAA/B,CAAR,CAAA;IACAjd,QAAAA,QAAQ,CAACkc,OAAO,CAACgB,UAAT,EAAqB,SAArB,EAAgC,MAAhC,CAAR,CAAA;IACH,OAAA;IACJ,KAAA;;IACDhB,IAAAA,OAAO,CAACqB,gBAAR,KAA6BrB,OAAO,CAACqB,gBAAR,CAAyBC,SAAzB,GAAqCC,QAAQ,CAACT,UAAU,GAAG,GAAd,CAA1E,CAAA,CAAA;IACH,GAAA;;IAEDvhB,EAAAA,MAAM,CAACsJ,EAAP,CAAUxQ,MAAM,CAAC8B,YAAjB,EAA+B,MAAM;IACjC0mB,IAAAA,eAAe,CAACthB,MAAM,CAACmW,MAAR,CAAf,CAAA;IACH,GAFD,CAAA,CAAA;IAIAnW,EAAAA,MAAM,CAACsJ,EAAP,CAAUxQ,MAAM,CAACO,OAAjB,EAA2B0d,IAAD,IAAU;IAChCxS,IAAAA,QAAQ,CAACkc,OAAO,CAACwB,QAAT,EAAmB,SAAnB,EAA8BlL,IAAI,GAAG,MAAH,GAAY,MAA9C,CAAR,CAAA;IACAxS,IAAAA,QAAQ,CAACkc,OAAO,CAACyB,OAAT,EAAkB,SAAlB,EAA6B,MAA7B,CAAR,CAAA;;IAEA,IAAA,IAAInL,IAAJ,EAAU;IACNxS,MAAAA,QAAQ,CAACkc,OAAO,CAAC0B,QAAT,EAAmB,SAAnB,EAA8B,MAA9B,CAAR,CAAA;IACH,KAAA;IACJ,GAPD,CAAA,CAAA;;IASA,EAAMhZ,MAAAA,gBAAgB,GAAIjT,UAAD,IAAgB;IACrC,IAAI0Q,IAAAA,YAAY,GAAGgB,SAAS,CAAC1R,UAAD,CAAT,GAAwBA,UAAxB,GAAqC8J,MAAM,CAAC9J,UAA/D,CAAA;IACAqO,IAAAA,QAAQ,CAACkc,OAAO,CAAC2B,eAAT,EAA0B,SAA1B,EAAqCxb,YAAY,GAAG,MAAH,GAAY,MAA7D,CAAR,CAAA;IACArC,IAAAA,QAAQ,CAACkc,OAAO,CAAC4B,WAAT,EAAsB,SAAtB,EAAiCzb,YAAY,GAAG,MAAH,GAAY,MAAzD,CAAR,CAHqC;IAKxC,GALD,CAAA;;IAMA,EAAI,IAAA;IAEAyC,IAAAA,UAAU,CAACC,EAAX,CAAc,QAAd,EAAwBH,gBAAxB,CAAA,CAAA;IACAnJ,IAAAA,MAAM,CAACuJ,MAAP,CAActK,QAAd,CAAuBY,IAAvB,CAA4B,MAAM;IAC9BwJ,MAAAA,UAAU,CAACG,GAAX,CAAe,QAAf,EAAyBL,gBAAzB,CAAA,CAAA;IACH,KAFD,CAAA,CAAA;IAGH,GAND,CAME,OAAOzP,KAAP,EAAc;IAEf,GAtF+B;;;IAyFhCsG,EAAAA,MAAM,CAACsJ,EAAP,CAAUxQ,MAAM,CAACC,aAAjB,EAAiC0L,KAAD,IAAW;IACvC0E,IAAAA,gBAAgB,CAAC1E,KAAD,CAAhB,CAAA;IACH,GAFD,CAAA,CAAA;IAKAzE,EAAAA,MAAM,CAACsJ,EAAP,CAAUxQ,MAAM,CAACgB,SAAjB,EAA4B,MAAM;IAC9ByK,IAAAA,QAAQ,CAACkc,OAAO,CAAC6B,OAAT,EAAkB,SAAlB,EAA6BtiB,MAAM,CAAClG,SAAP,GAAmB,MAAnB,GAA4B,MAAzD,CAAR,CAAA;IACAyK,IAAAA,QAAQ,CAACkc,OAAO,CAAC8B,WAAT,EAAsB,SAAtB,EAAiCviB,MAAM,CAAClG,SAAP,GAAmB,MAAnB,GAA4B,MAA7D,CAAR,CAAA;IACAyK,IAAAA,QAAQ,CAACkc,OAAO,CAAC+B,UAAT,EAAqB,SAArB,EAAgCxiB,MAAM,CAAClG,SAAP,GAAmB,MAAnB,GAA4B,MAA5D,CAAR,CAAA;IACH,GAJD,EA9FgC;;IAqGhCkG,EAAAA,MAAM,CAACsJ,EAAP,CAAUxQ,MAAM,CAACiB,kBAAjB,EAAsCmgB,SAAD,IAAe;IAChD;IACAuG,IAAAA,OAAO,CAACgC,cAAR,KAA2BhC,OAAO,CAACgC,cAAR,CAAuBV,SAAvB,GAAmClZ,cAAc,CAACqR,SAAD,CAA5E,CAAA,CAAA;IACH,GAHD,CAAA,CAAA;IAKAla,EAAAA,MAAM,CAACsJ,EAAP,CAAUxQ,MAAM,CAACG,OAAjB,EAA2B8d,IAAD,IAAU;IAChCxS,IAAAA,QAAQ,CAACkc,OAAO,CAACiC,KAAT,EAAgB,SAAhB,EAA2B3L,IAAI,GAAG,MAAH,GAAY,MAA3C,CAAR,CAAA;IACAxS,IAAAA,QAAQ,CAACkc,OAAO,CAAC0B,QAAT,EAAmB,SAAnB,EAA8BpL,IAAI,GAAG,MAAH,GAAY,OAA9C,CAAR,CAAA;IACAxS,IAAAA,QAAQ,CAACkc,OAAO,CAACkC,MAAT,EAAiB,SAAjB,EAA4B5L,IAAI,GAAG,MAAH,GAAY,MAA5C,CAAR,CAAA;IACAxS,IAAAA,QAAQ,CAACkc,OAAO,CAACmC,WAAT,EAAsB,SAAtB,EAAiC7L,IAAI,GAAG,MAAH,GAAY,MAAjD,CAAR,CAAA;IACAxS,IAAAA,QAAQ,CAACkc,OAAO,CAAC6B,OAAT,EAAkB,SAAlB,EAA6BvL,IAAI,GAAG,MAAH,GAAY,MAA7C,CAAR,CAAA;IACAxS,IAAAA,QAAQ,CAACkc,OAAO,CAAC4B,WAAT,EAAsB,SAAtB,EAAiCtL,IAAI,GAAG,MAAH,GAAY,MAAjD,CAAR,CANgC;;IAShC,IAAI,IAAA,CAACA,IAAL,EAAW;IACP0J,MAAAA,OAAO,CAACoC,MAAR,KAAmBpC,OAAO,CAACoC,MAAR,CAAed,SAAf,GAA2Bhb,OAAO,CAAC,EAAD,CAArD,CAAA,CAAA;IACH,KAAA;IACJ,GAZD,CAAA,CAAA;IAeA/G,EAAAA,MAAM,CAACsJ,EAAP,CAAUxQ,MAAM,CAACf,IAAjB,EAAwB+f,IAAD,IAAU;IAC7B,IAAA,MAAMgL,GAAG,GAAG/b,OAAO,CAAC+Q,IAAD,CAAnB,CAAA;IACA2I,IAAAA,OAAO,CAACoC,MAAR,KAAmBpC,OAAO,CAACoC,MAAR,CAAed,SAAf,GAA2Be,GAA9C,CAAA,CAAA;IACH,GAHD,CAAA,CAAA;IAIH,CA7HD;;ACJA,mBAAA,CAAe,CAAC9iB,MAAD,EAASygB,OAAT,KAAqB;IAEhCxgB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,cAA/B,EAA+C;IAC3CtgB,IAAAA,GAAG,EAAE,MAAM;IACP,MAAA,OAAOsgB,OAAO,CAACsC,SAAR,CAAkBziB,qBAAlB,EAAP,CAAA;IACH,KAAA;IAH0C,GAA/C,CAAA,CAAA;IAMH,CARD;;ACEA,iBAAA,CAAe,CAACN,MAAD,EAASygB,OAAT,KAAqB;IAChC,EAAM,MAAA;IACFlX,IAAAA,MAAM,EAAE;IAACrK,MAAAA,KAAAA;IAAD,KADN;IAEFhK,IAAAA,KAAAA;IAFE,GAAA,GAGF8K,MAHJ,CAAA;;IAKA,EAASgjB,SAAAA,qBAAT,CAA+BjjB,KAA/B,EAAsC;IAClC,IAAM,MAAA;IAACkjB,MAAAA,MAAM,EAAEC,WAAT;IAAsBviB,MAAAA,MAAM,EAAEihB,WAAAA;IAA9B,KAAA,GAA6CnB,OAAO,CAACkB,YAAR,CAAqBrhB,qBAArB,EAAnD,CAAA;IACA,IAAM,MAAA;IAACK,MAAAA,MAAM,EAAEkhB,YAAAA;IAAT,KAAA,GAAyBpB,OAAO,CAACiB,aAAR,CAAsBphB,qBAAtB,EAA/B,CAAA;IAEA,IAAA,IAAI6iB,OAAO,GAAGpjB,KAAK,CAAC2O,CAApB,CAJkC;IAOlC;IACA;;IAEA,IAAM6S,MAAAA,UAAU,GACZrd,KAAK,CAACgf,WAAW,GAAGC,OAAd,GAAwBtB,YAAY,GAAG,CAAxC,EAA2C,CAA3C,EAA8CD,WAAW,GAAGC,YAAY,GAAG,CAA3E,CAAL,IAAsFD,WAAW,GAAGC,YAApG,CADJ,CAAA;IAEA,IAAA,OAAON,UAAP,CAAA;IACH,GAnB+B;;;IAsBhCriB,EAAAA,KAAK,CAACwG,MAAD,EAAS,CAAC,OAAD,EAAU,aAAV,CAAT,EAAmC3F,KAAK,IAAI;IAC7C,IAAA,IAAIA,KAAK,CAACqjB,YAAN,EAAA,CAAqBjH,OAArB,CAA6Bnc,MAAM,CAACK,UAApC,CAAA,GAAkD,CAAC,CAAvD,EAA0D;IACtDogB,MAAAA,OAAO,CAAC4C,OAAR,GAAkB,IAAlB,CAAA;IACH,KAFD,MAEO;IACH5C,MAAAA,OAAO,CAAC4C,OAAR,GAAkB,KAAlB,CAAA;IACH,KAAA;IACJ,GANI,CAAL,CAtBgC;;IA+BhCnkB,EAAAA,KAAK,CAACwG,MAAD,EAAS,mBAAT,EAA8B,MAAM;IACrCpC,IAAAA,UAAU,CAAC,MAAM;IACbtD,MAAAA,MAAM,CAACzF,MAAP,EAAA,CAAA;IACH,KAFS,EAEP,GAFO,CAAV,CAAA;IAGH,GAJI,CAAL,CAAA;IAOA2E,EAAAA,KAAK,CAACuhB,OAAO,CAACsC,SAAT,EAAoB,OAApB,EAA8BlhB,CAAD,IAAO;IACrCA,IAAAA,CAAC,CAACyhB,eAAF,EAAA,CAAA;IACH,GAFI,CAAL,CAAA;IAIApkB,EAAAA,KAAK,CAACuhB,OAAO,CAACkC,MAAT,EAAiB,OAAjB,EAA2B9gB,CAAD,IAAO;IAClC7B,IAAAA,MAAM,CAAC9G,KAAP,EAAA,CAAA;IACH,GAFI,CAAL,CA1CgC;;IA8ChCgG,EAAAA,KAAK,CAACuhB,OAAO,CAACiC,KAAT,EAAgB,OAAhB,EAA0B7gB,CAAD,IAAO;IACjC7B,IAAAA,MAAM,CAAC5J,IAAP,EAAA,CAAA;IACH,GAFI,CAAL,CA9CgC;;IAmDhC8I,EAAAA,KAAK,CAACuhB,OAAO,CAAC0B,QAAT,EAAmB,OAAnB,EAA6BtgB,CAAD,IAAO;IACpC7B,IAAAA,MAAM,CAAC5J,IAAP,EAAA,CAAA;IACH,GAFI,CAAL,CAAA;IAIA8I,EAAAA,KAAK,CAACuhB,OAAO,CAAC8C,OAAT,EAAkB,WAAlB,EAA+B,MAAM;IACtC9C,IAAAA,OAAO,CAAC+C,gBAAR,CAAyB1Z,SAAzB,CAAmCC,GAAnC,CAAuC,kCAAvC,CAAA,CAAA;IACH,GAFI,CAAL,CAAA;IAIA7K,EAAAA,KAAK,CAACuhB,OAAO,CAAC8C,OAAT,EAAkB,UAAlB,EAA8B,MAAM;IACrC9C,IAAAA,OAAO,CAAC+C,gBAAR,CAAyB1Z,SAAzB,CAAmCE,MAAnC,CAA0C,kCAA1C,CAAA,CAAA;IACH,GAFI,CAAL,CAAA;IAIA9K,EAAAA,KAAK,CAACuhB,OAAO,CAACe,SAAT,EAAoB,OAApB,EAA8B3f,CAAD,IAAO;IACrCA,IAAAA,CAAC,CAACyhB,eAAF,EAAA,CAAA;IACA/e,IAAAA,QAAQ,CAACkc,OAAO,CAACe,SAAT,EAAoB,SAApB,EAA+B,MAA/B,CAAR,CAAA;IACAjd,IAAAA,QAAQ,CAACkc,OAAO,CAACgB,UAAT,EAAqB,SAArB,EAAgC,OAAhC,CAAR,CAAA;IACAzhB,IAAAA,MAAM,CAACyjB,UAAP,GAAoBzjB,MAAM,CAACmW,MAA3B,CAAA;IACAnW,IAAAA,MAAM,CAACmW,MAAP,GAAgB,CAAhB,CAAA;IACH,GANI,CAAL,CAAA;IAQAjX,EAAAA,KAAK,CAACuhB,OAAO,CAACgB,UAAT,EAAqB,OAArB,EAA+B5f,CAAD,IAAO;IACtCA,IAAAA,CAAC,CAACyhB,eAAF,EAAA,CAAA;IACA/e,IAAAA,QAAQ,CAACkc,OAAO,CAACe,SAAT,EAAoB,SAApB,EAA+B,OAA/B,CAAR,CAAA;IACAjd,IAAAA,QAAQ,CAACkc,OAAO,CAACgB,UAAT,EAAqB,SAArB,EAAgC,MAAhC,CAAR,CAAA;IACAzhB,IAAAA,MAAM,CAACmW,MAAP,GAAgBnW,MAAM,CAACyjB,UAAP,IAAqB,GAArC,CAAA;IACH,GALI,CAAL,CAAA;IAOAvkB,EAAAA,KAAK,CAACuhB,OAAO,CAACmC,WAAT,EAAsB,OAAtB,EAAgC/gB,CAAD,IAAO;IACvCA,IAAAA,CAAC,CAACyhB,eAAF,EAAA,CAAA;IACAtjB,IAAAA,MAAM,CAACzH,KAAP,CAAapC,UAAb,EAAA,CAAA;IACH,GAHI,CAAL,CAAA;IAKA+I,EAAAA,KAAK,CAACuhB,OAAO,CAACkB,YAAT,EAAuB,OAAvB,EAAgC5hB,KAAK,IAAI;IAC1CA,IAAAA,KAAK,CAACujB,eAAN,EAAA,CAAA;IACAtjB,IAAAA,MAAM,CAACmW,MAAP,GAAgB6M,qBAAqB,CAACjjB,KAAD,CAArC,CAAA;IACH,GAHI,CAAL,CAAA;IAKAb,EAAAA,KAAK,CAACuhB,OAAO,CAACiB,aAAT,EAAwB,WAAxB,EAAqC,MAAM;IAC5CjB,IAAAA,OAAO,CAACiD,eAAR,GAA0B,IAA1B,CAAA;IACH,GAFI,CAAL,CAAA;IAIAxkB,EAAAA,KAAK,CAACuhB,OAAO,CAACiB,aAAT,EAAwB,WAAxB,EAAqC3hB,KAAK,IAAI;IAC/C,IAAI0gB,IAAAA,OAAO,CAACiD,eAAZ,EAA6B;IACzB1jB,MAAAA,MAAM,CAACmW,MAAP,GAAgB6M,qBAAqB,CAACjjB,KAAD,CAArC,CAAA;IACH,KAAA;IACJ,GAJI,CAAL,CAAA;IAMAb,EAAAA,KAAK,CAAC8D,QAAD,EAAW,SAAX,EAAsB,MAAM;IAC7B,IAAIyd,IAAAA,OAAO,CAACiD,eAAZ,EAA6B;IACzBjD,MAAAA,OAAO,CAACiD,eAAR,GAA0B,KAA1B,CAAA;IACH,KAAA;IACJ,GAJI,CAAL,CAAA;IAMAxkB,EAAAA,KAAK,CAACuhB,OAAO,CAAC6B,OAAT,EAAkB,OAAlB,EAA4BzgB,CAAD,IAAO;IACnCA,IAAAA,CAAC,CAACyhB,eAAF,EAAA,CAAA;IACAtjB,IAAAA,MAAM,CAAClG,SAAP,GAAmB,IAAnB,CAAA;IACH,GAHI,CAAL,CAAA;IAKAoF,EAAAA,KAAK,CAACuhB,OAAO,CAAC8B,WAAT,EAAsB,OAAtB,EAAgC1gB,CAAD,IAAO;IACvCA,IAAAA,CAAC,CAACyhB,eAAF,EAAA,CAAA;IACAtjB,IAAAA,MAAM,CAAClG,SAAP,GAAmB,KAAnB,CAAA;IACH,GAHI,CAAL,CAAA;IAKAoF,EAAAA,KAAK,CAACuhB,OAAO,CAACkD,cAAT,EAAyB,OAAzB,EAAmC9hB,CAAD,IAAO;IAC1CA,IAAAA,CAAC,CAACyhB,eAAF,EAAA,CAAA;IACAtjB,IAAAA,MAAM,CAAClG,SAAP,GAAmB,KAAnB,CAAA;IACH,GAHI,CAAL,CAAA;IAKAoF,EAAAA,KAAK,CAACuhB,OAAO,CAAC4B,WAAT,EAAsB,OAAtB,EAAgCxgB,CAAD,IAAO;IACvCA,IAAAA,CAAC,CAACyhB,eAAF,EAAA,CAAA;IACAtjB,IAAAA,MAAM,CAAC9J,UAAP,GAAoB,IAApB,CAAA;IACH,GAHI,CAAL,CAAA;IAKAgJ,EAAAA,KAAK,CAACuhB,OAAO,CAAC2B,eAAT,EAA0B,OAA1B,EAAoCvgB,CAAD,IAAO;IAC3CA,IAAAA,CAAC,CAACyhB,eAAF,EAAA,CAAA;IACAtjB,IAAAA,MAAM,CAAC9J,UAAP,GAAoB,KAApB,CAAA;IACH,GAHI,CAAL,CAAA;;IAKA,EAAI8J,IAAAA,MAAM,CAACpB,IAAP,CAAYpI,UAAZ,IAA0BwJ,MAAM,CAACpB,IAAP,CAAYrI,eAA1C,EAA2D;IACvD;IACA2I,IAAAA,KAAK,CAACc,MAAM,CAACK,UAAR,EAAoB,WAApB,EAAiC,MAAM;IACxC,MAAA,IAAI,CAACL,MAAM,CAAC9J,UAAZ,EAAwB;IACpBqO,QAAAA,QAAQ,CAACkc,OAAO,CAACsC,SAAT,EAAoB,SAApB,EAA+B,OAA/B,CAAR,CAAA;IACH,OAAA;IACJ,KAJI,CAAL,CAAA;IAMA7jB,IAAAA,KAAK,CAACc,MAAM,CAACK,UAAR,EAAoB,UAApB,EAAgC,MAAM;IACvCkE,MAAAA,QAAQ,CAACkc,OAAO,CAACsC,SAAT,EAAoB,SAApB,EAA+B,MAA/B,CAAR,CAAA;IACH,KAFI,CAAL,CAAA;IAGH,GAAA;IACJ,CA7ID;;ICFA,SAAS,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE;IAC/B,EAAE,KAAK,GAAG,KAAK,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC;IACjC,EAAE,IAAI,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;AAC9B;IACA,EAAE,IAAI,CAAC,GAAG,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,EAAE,OAAO,EAAE;AAC1D;IACA,EAAE,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC9C,EAAE,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC;AAC1B;IACA,EAAE,IAAI,QAAQ,KAAK,KAAK,EAAE;IAC1B,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;IACzB,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAChD,KAAK,MAAM;IACX,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC9B,KAAK;IACL,GAAG,MAAM;IACT,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC5B,GAAG;AACH;IACA,EAAE,IAAI,KAAK,CAAC,UAAU,EAAE;IACxB,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,GAAG,GAAG,CAAC;IACnC,GAAG,MAAM;IACT,IAAI,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;IACpD,GAAG;IACH;;;;;ICzBA;AAGA,iBAAA,CAAe,CAAC/iB,MAAD,EAASygB,OAAT,KAAqB;IAChC,EAAM,MAAA;IACFlX,IAAAA,MAAM,EAAE;IAACrK,MAAAA,KAAAA;IAAD,KAAA;IADN,GAAA,GAEFc,MAFJ,CAAA;IAIA,EAAM0E,MAAAA,IAAI,GAAG,EAAb,CAAA;;IAEA,EAAA,SAASkf,SAAT,CAAmBjmB,GAAnB,EAAwBoC,KAAxB,EAA+B;IAC3B,IAAA,IAAI2E,IAAI,CAAC/G,GAAD,CAAR,EAAe;IACX+G,MAAAA,IAAI,CAAC/G,GAAD,CAAJ,CAAUkC,IAAV,CAAeE,KAAf,CAAA,CAAA;IACH,KAFD,MAEO;IACH2E,MAAAA,IAAI,CAAC/G,GAAD,CAAJ,GAAY,CAACoC,KAAD,CAAZ,CAAA;IACH,KAAA;IACJ,GAb+B;;;IAgBhC6jB,EAAAA,SAAS,CAACxlB,OAAO,CAACC,GAAT,EAAc,MAAM;IACzB,IAAI2B,IAAAA,MAAM,CAAC9J,UAAX,EAAuB;IACnB8J,MAAAA,MAAM,CAAC9J,UAAP,GAAoB,KAApB,CAAA;IACH,KAAA;IACJ,GAJQ,CAAT,CAhBgC;;IAuBhC0tB,EAAAA,SAAS,CAACxlB,OAAO,CAACE,OAAT,EAAkB,MAAM;IAC7B0B,IAAAA,MAAM,CAACmW,MAAP,IAAiB,IAAjB,CAAA;IACH,GAFQ,CAAT,CAvBgC;;IA4BhCyN,EAAAA,SAAS,CAACxlB,OAAO,CAACG,SAAT,EAAoB,MAAM;IAC/ByB,IAAAA,MAAM,CAACmW,MAAP,IAAiB,IAAjB,CAAA;IACH,GAFQ,CAAT,CAAA;IAIAjX,EAAAA,KAAK,CAACwG,MAAD,EAAS,SAAT,EAAoB3F,KAAK,IAAI;IAC9B,IAAI0gB,IAAAA,OAAO,CAAC4C,OAAZ,EAAqB;IACjB,MAAMQ,MAAAA,GAAG,GAAG7gB,QAAQ,CAAC8gB,aAAT,CAAuBC,OAAvB,CAA+BC,WAA/B,EAAZ,CAAA;IACA,MAAMC,MAAAA,QAAQ,GAAGjhB,QAAQ,CAAC8gB,aAAT,CAAuBI,YAAvB,CAAoC,iBAApC,CAAjB,CAAA;;IACA,MAAA,IAAIL,GAAG,KAAK,OAAR,IAAmBA,GAAG,KAAK,UAA3B,IAAyCI,QAAQ,KAAK,EAAtD,IAA4DA,QAAQ,KAAK,MAA7E,EAAqF;IACjF,QAAA,MAAM1a,MAAM,GAAG7E,IAAI,CAAC3E,KAAK,CAACokB,OAAP,CAAnB,CAAA;;IACA,QAAA,IAAI5a,MAAJ,EAAY;IACRxJ,UAAAA,KAAK,CAACqkB,cAAN,EAAA,CAAA;IACA7a,UAAAA,MAAM,CAACzJ,OAAP,CAAesK,EAAE,IAAIA,EAAE,EAAvB,CAAA,CAAA;IACH,SAAA;IACJ,OAAA;IACJ,KAAA;IACJ,GAZI,CAAL,CAAA;IAaH,CA7CD;;ICIe,MAAMia,OAAN,CAAc;IACzB5lB,EAAAA,WAAW,CAACuB,MAAD,EAAS;IAChB,IAAKA,IAAAA,CAAAA,MAAL,GAAcA,MAAd,CAAA;IACAskB,IAAAA,QAAQ,CAACtkB,MAAD,EAAS,IAAT,CAAR,CAAA;IACAukB,IAAAA,UAAQ,CAACvkB,MAAD,EAAS,IAAT,CAAR,CAAA;IACAwkB,IAAAA,QAAQ,CAACxkB,MAAD,EAAS,IAAT,CAAR,CAAA;IACAuJ,IAAAA,MAAM,CAACvJ,MAAD,EAAS,IAAT,CAAN,CAAA;;IACA,IAAA,IAAIA,MAAM,CAACpB,IAAP,CAAYzJ,MAAhB,EAAwB;IACpBsvB,MAAAA,MAAM,CAACzkB,MAAD,EAAS,IAAT,CAAN,CAAA;IACH,KAAA;;IACD,IAAKA,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,SAAtB,EAAiC,MAAjC,CAAA,CAAA;IACH,GAAA;;IAEDoB,EAAAA,OAAO,GAAG;IACN,IAAI,IAAA,IAAA,CAAKqnB,OAAT,EAAkB;IACd,MAAA,IAAA,CAAKliB,MAAL,CAAYK,UAAZ,CAAuBsQ,WAAvB,CAAmC,KAAKuR,OAAxC,CAAA,CAAA;IACH,KAAA;;IACD,IAAI,IAAA,IAAA,CAAKD,QAAT,EAAmB;IACf,MAAA,IAAA,CAAKjiB,MAAL,CAAYK,UAAZ,CAAuBsQ,WAAvB,CAAmC,KAAKsR,QAAxC,CAAA,CAAA;IACH,KAAA;;IACD,IAAI,IAAA,IAAA,CAAKc,SAAT,EAAoB;IAChB,MAAA,IAAA,CAAK/iB,MAAL,CAAYK,UAAZ,CAAuBsQ,WAAvB,CAAmC,KAAKoS,SAAxC,CAAA,CAAA;IACH,KAAA;;IAED,IAAG,IAAA,IAAA,CAAKZ,QAAR,EAAiB;IACb,MAAA,IAAA,CAAKniB,MAAL,CAAYK,UAAZ,CAAuBsQ,WAAvB,CAAmC,KAAKwR,QAAxC,CAAA,CAAA;IACH,KAAA;;IAED,IAAKniB,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,SAAtB,EAAiC,SAAjC,CAAA,CAAA;IACH,GAAA;;IAEDirB,EAAAA,QAAQ,GAAG;IACP,IAAM1kB,MAAAA,MAAM,GAAG,IAAA,CAAKA,MAApB,CAAA;IACAA,IAAAA,MAAM,CAACK,UAAP,CAAkBsE,KAAlB,CAAwBggB,OAAxB,GAAkC,KAAlC,CAAA;IACA,IAAA,MAAMzD,WAAW,GAAGlhB,MAAM,CAACO,KAA3B,CAAA;IACA,IAAA,MAAM4gB,YAAY,GAAGnhB,MAAM,CAACW,MAA5B,CAAA;IACA,IAAA,MAAMikB,WAAW,GAAG1D,WAAW,GAAGC,YAAlC,CAAA;IACA,IAAM0D,MAAAA,WAAW,GAAG7kB,MAAM,CAACzH,KAAP,CAAa2X,aAAb,CAA2B3P,KAA/C,CAAA;IACA,IAAMukB,MAAAA,YAAY,GAAG9kB,MAAM,CAACzH,KAAP,CAAa2X,aAAb,CAA2BvP,MAAhD,CAAA;IACA,IAAA,MAAMokB,WAAW,GAAGF,WAAW,GAAGC,YAAlC,CAAA;;IACA,IAAIF,IAAAA,WAAW,GAAGG,WAAlB,EAA+B;IAC3B,MAAMJ,MAAAA,OAAO,GAAG,CAACzD,WAAW,GAAGC,YAAY,GAAG4D,WAA9B,IAA6C,CAA7D,CAAA;IACA/kB,MAAAA,MAAM,CAACK,UAAP,CAAkBsE,KAAlB,CAAwBggB,OAAxB,GAAmC,CAAIA,EAAAA,EAAAA,OAAQ,CAA/C,EAAA,CAAA,CAAA;IACH,KAHD,MAGO;IACH,MAAMA,MAAAA,OAAO,GAAG,CAACxD,YAAY,GAAGD,WAAW,GAAG6D,WAA9B,IAA6C,CAA7D,CAAA;IACA/kB,MAAAA,MAAM,CAACK,UAAP,CAAkBsE,KAAlB,CAAwBggB,OAAxB,GAAmC,CAAEA,EAAAA,OAAQ,CAA7C,IAAA,CAAA,CAAA;IACH,KAAA;IACJ,GAAA;;IA/CwB;;;;;ACP7B,mBAAA,CAAgB3kB,MAAD,IAAY;IAEvB,EAAM,MAAA;IACFpB,IAAAA,IADE;IAEF1J,IAAAA,KAFE;IAGFqU,IAAAA,MAAM,EAAE;IAACrK,MAAAA,KAAAA;IAAD,KAAA;IAHN,GAAA,GAIFc,MAJJ,CAAA;;IAOA,EAAIpB,IAAAA,IAAI,CAACjJ,yBAAT,EAAoC;IAChCuJ,IAAAA,KAAK,CAACc,MAAM,CAACK,UAAR,EAAoB,UAApB,EAAgC,MAAM;IACvCL,MAAAA,MAAM,CAAC9J,UAAP,GAAoB,CAAC8J,MAAM,CAAC9J,UAA5B,CAAA;IACH,KAFI,CAAL,CAAA;IAGH,GAbsB;;;IAiBvBgJ,EAAAA,KAAK,CAAC8D,QAAD,EAAW,kBAAX,EAA+B,MAAM;IACtC,IAAIpE,IAAAA,IAAI,CAAC7H,eAAT,EAA0B;IACtB7B,MAAAA,KAAK,CAACuE,GAAN,CAAU,kBAAV,EAA8BuJ,QAAQ,CAACgiB,eAAvC,EAAwDhlB,MAAM,CAACilB,0BAA/D,CAAA,CAAA;;IAEA,MAAA,IAAI,SAAcjiB,KAAAA,QAAQ,CAACgiB,eAA3B,EAA4C;IACxC,QAAIhlB,IAAAA,MAAM,CAACilB,0BAAX,EAAuC;IACnCjlB,UAAAA,MAAM,CAAC5J,IAAP,EAAA,CAAA;IACH,SAAA;IACJ,OAJD,MAIO;IACH4J,QAAAA,MAAM,CAACilB,0BAAP,GAAoCjlB,MAAM,CAAC/G,OAA3C,CADG;;IAGH,QAAI+G,IAAAA,MAAM,CAAC/G,OAAX,EAAoB;IAChB+G,UAAAA,MAAM,CAAC9G,KAAP,EAAA,CAAA;IACH,SAAA;IACJ,OAAA;IACJ,KAAA;IACJ,GAhBI,CAAL,CAAA;IAkBAgG,EAAAA,KAAK,CAACwG,MAAD,EAAS,kBAAT,EAA6B,MAAM;IACpC;IACA,IAAI1F,IAAAA,MAAM,CAACnK,YAAP,KAAwB,IAAxB,IAAgC,SAAcmN,KAAAA,QAAQ,CAACgiB,eAA3D,EAA4E;IACxEhlB,MAAAA,MAAM,CAACklB,cAAP,EAAA,CAAA;IACH,KAAA;IACJ,GALI,CAAL,CAAA;IAMH,CAzCD;;ICAA,MAAMC,KAAN,CAAU;IAEK,EAAA,OAAJztB,IAAI,GAAG;IACVytB,IAAAA,KAAG,CAACC,KAAJ,GAAY;IACRC,MAAAA,IAAI,EAAE,EADE;IAERlf,MAAAA,IAAI,EAAE,EAFE;IAGRmf,MAAAA,IAAI,EAAE,EAHE;IAIRC,MAAAA,IAAI,EAAE,EAJE;IAKRC,MAAAA,IAAI,EAAE,EALE;IAMRC,MAAAA,IAAI,EAAE,EANE;IAORC,MAAAA,IAAI,EAAE,EAPE;IAQRC,MAAAA,IAAI,EAAE,EARE;IASRC,MAAAA,IAAI,EAAE,EATE;IAURC,MAAAA,IAAI,EAAE,EAVE;IAWRC,MAAAA,IAAI,EAAE,EAXE;IAYRC,MAAAA,IAAI,EAAE,EAZE;IAaRC,MAAAA,IAAI,EAAE,EAbE;IAcRC,MAAAA,IAAI,EAAE,EAdE;IAeRC,MAAAA,IAAI,EAAE,EAfE;IAgBRC,MAAAA,IAAI,EAAE,EAhBE;IAiBRC,MAAAA,IAAI,EAAE,EAjBE;IAkBRC,MAAAA,IAAI,EAAE,EAlBE;IAmBRC,MAAAA,IAAI,EAAE,EAnBE;IAoBRC,MAAAA,IAAI,EAAE,EApBE;IAqBRC,MAAAA,IAAI,EAAE,EArBE;IAsBRC,MAAAA,IAAI,EAAE,EAtBE;IAuBRC,MAAAA,IAAI,EAAE,EAvBE;IAwBRC,MAAAA,IAAI,EAAE,EAxBE;IAyBRC,MAAAA,IAAI,EAAE,EAzBE;IA0BRC,MAAAA,IAAI,EAAE,EA1BE;IA2BRC,MAAAA,IAAI,EAAE,EA3BE;IA4BRC,MAAAA,IAAI,EAAE,EA5BE;IA6BRC,MAAAA,IAAI,EAAE,EA7BE;IA8BRC,MAAAA,IAAI,EAAE,EA9BE;IA+BRC,MAAAA,IAAI,EAAE,EA/BE;IAgCRC,MAAAA,IAAI,EAAE,EAhCE;IAiCRC,MAAAA,IAAI,EAAE,EAjCE;IAkCRC,MAAAA,IAAI,EAAE,EAlCE;IAmCRC,MAAAA,IAAI,EAAE,EAnCE;IAoCRC,MAAAA,IAAI,EAAE,EAAA;IApCE,KAAZ,CAAA;;IAuCA,IAAA,KAAK,IAAI5oB,IAAT,IAAiBwmB,KAAG,CAACC,KAArB,EAA4B;IACxB,MAAID,IAAAA,KAAG,CAACC,KAAJ,CAAUoC,cAAV,CAAyB7oB,IAAzB,CAAJ,EAAoC;IAChCwmB,QAAAA,KAAG,CAACC,KAAJ,CAAUzmB,IAAV,CAAkB,GAAA,CACdA,IAAI,CAAC+D,UAAL,CAAgB,CAAhB,CADc,EAEd/D,IAAI,CAAC+D,UAAL,CAAgB,CAAhB,CAFc,EAGd/D,IAAI,CAAC+D,UAAL,CAAgB,CAAhB,CAHc,EAId/D,IAAI,CAAC+D,UAAL,CAAgB,CAAhB,CAJc,CAAlB,CAAA;IAMH,OAAA;IACJ,KAAA;;IAED,IAAA,IAAI+kB,SAAS,GAAGtC,KAAG,CAACsC,SAAJ,GAAgB,EAAhC,CAAA;IAEAA,IAAAA,SAAS,CAACC,IAAV,GAAiB,IAAIjlB,UAAJ,CAAe,CAC5B,IAD4B,EACtB,IADsB,EAChB,IADgB,EACV,IADU;IAE5B,IAAA,GAF4B,EAEvB,GAFuB,EAElB,GAFkB,EAEb,GAFa;IAG5B,IAAA,IAH4B,EAGtB,IAHsB,EAGhB,IAHgB,EAGV,IAHU;IAI5B,IAAA,IAJ4B,EAItB,IAJsB,EAIhB,IAJgB,EAIV,IAJU;IAAA,KAAf,CAAjB,CAAA;IAOAglB,IAAAA,SAAS,CAACE,WAAV,GAAwB,IAAIllB,UAAJ,CAAe,CACnC,IADmC,EAC7B,IAD6B,EACvB,IADuB,EACjB,IADiB;IAEnC,IAAA,IAFmC,EAE7B,IAF6B,EAEvB,IAFuB,EAEjB,IAFiB;IAAA,KAAf,CAAxB,CAAA;IAKAglB,IAAAA,SAAS,CAACG,IAAV,GAAiB,IAAInlB,UAAJ,CAAe,CAC5B,IAD4B,EACtB,IADsB,EAChB,IADgB,EACV,IADU;IAE5B,IAAA,IAF4B,EAEtB,IAFsB,EAEhB,IAFgB,EAEV,IAFU;IAAA,KAAf,CAAjB,CAAA;IAKAglB,IAAAA,SAAS,CAACI,IAAV,GAAiBJ,SAAS,CAACK,IAAV,GAAiBL,SAAS,CAACG,IAA5C,CAAA;IAEAH,IAAAA,SAAS,CAACM,IAAV,GAAiB,IAAItlB,UAAJ,CAAe,CAC5B,IAD4B,EACtB,IADsB,EAChB,IADgB,EACV,IADU;IAE5B,IAAA,IAF4B,EAEtB,IAFsB,EAEhB,IAFgB,EAEV,IAFU;IAG5B,IAAA,IAH4B,EAGtB,IAHsB,EAGhB,IAHgB,EAGV,IAHU;IAAA,KAAf,CAAjB,CAAA;IAMAglB,IAAAA,SAAS,CAACO,UAAV,GAAuB,IAAIvlB,UAAJ,CAAe,CAClC,IADkC,EAC5B,IAD4B,EACtB,IADsB,EAChB,IADgB;IAElC,IAAA,IAFkC,EAE5B,IAF4B,EAEtB,IAFsB,EAEhB,IAFgB;IAGlC,IAAA,IAHkC,EAG5B,IAH4B,EAGtB,IAHsB,EAGhB,IAHgB;IAIlC,IAAA,IAJkC,EAI5B,IAJ4B,EAItB,IAJsB,EAIhB,IAJgB;IAKlC,IAAA,IALkC,EAK5B,IAL4B,EAKtB,IALsB,EAKhB,IALgB,EAMlC,IANkC,EAM5B,IAN4B,EAMtB,IANsB,EAMhB,IANgB,EAOlC,IAPkC,EAO5B,IAP4B,EAOtB,IAPsB,EAOhB,IAPgB,EAQlC,IARkC,EAQ5B,IAR4B,EAQtB,IARsB,EAQhB,IARgB,EASlC,IATkC,EAS5B,IAT4B,EAStB,IATsB,EAShB,IATgB,EASV,IATU;IAAA,KAAf,CAAvB,CAAA;IAYAglB,IAAAA,SAAS,CAACQ,UAAV,GAAuB,IAAIxlB,UAAJ,CAAe,CAClC,IADkC,EAC5B,IAD4B,EACtB,IADsB,EAChB,IADgB;IAElC,IAAA,IAFkC,EAE5B,IAF4B,EAEtB,IAFsB,EAEhB,IAFgB;IAGlC,IAAA,IAHkC,EAG5B,IAH4B,EAGtB,IAHsB,EAGhB,IAHgB;IAIlC,IAAA,IAJkC,EAI5B,IAJ4B,EAItB,IAJsB,EAIhB,IAJgB;IAKlC,IAAA,IALkC,EAK5B,IAL4B,EAKtB,IALsB,EAKhB,IALgB,EAMlC,IANkC,EAM5B,IAN4B,EAMtB,IANsB,EAMhB,IANgB,EAOlC,IAPkC,EAO5B,IAP4B,EAOtB,IAPsB,EAOhB,IAPgB,EAQlC,IARkC,EAQ5B,IAR4B,EAQtB,IARsB,EAQhB,IARgB,EASlC,IATkC,EAS5B,IAT4B,EAStB,IATsB,EAShB,IATgB,EASV,IATU;IAAA,KAAf,CAAvB,CAAA;IAYAglB,IAAAA,SAAS,CAACS,IAAV,GAAiB,IAAIzlB,UAAJ,CAAe,CAC5B,IAD4B,EACtB,IADsB,EAChB,IADgB,EACV,IADU;IAE5B,IAAA,IAF4B,EAEtB,IAFsB,EAEhB,IAFgB,EAEV,IAFU;IAG5B,IAAA,IAH4B,EAGtB,IAHsB,EAGhB,IAHgB,EAGV,IAHU;IAI5B,IAAA,IAJ4B,EAItB,IAJsB,EAIhB,IAJgB,EAIV,IAJU;IAK5B,IAAA,IAL4B,EAKtB,IALsB,EAKhB,IALgB,EAKV,IALU;IAAA,KAAf,CAAjB,CAtGU;;IA+GVglB,IAAAA,SAAS,CAACU,IAAV,GAAiB,IAAI1lB,UAAJ,CAAe,CAC5B,IAD4B,EACtB,IADsB,EAChB,IADgB,EACV,IADU;IAE5B,IAAA,IAF4B,EAEtB,IAFsB,EAEhB,IAFgB,EAEV,IAFU;IAAA,KAAf,CAAjB,CA/GU;;IAqHVglB,IAAAA,SAAS,CAACW,IAAV,GAAiB,IAAI3lB,UAAJ,CAAe,CAC5B,IAD4B,EACtB,IADsB,EAChB,IADgB,EACV,IADU;IAE5B,IAF4B,IAAA,EAEtB,IAFsB;IAG5B,IAAA,IAH4B,EAGtB,IAHsB,EAGhB,IAHgB,EAGV,IAHU;IAI5B,IAJ4B,IAAA,EAItB,IAJsB,CAAf,CAAjB,CAAA;IAMH,GA7HK;;;IAgII,EAAH4lB,OAAAA,GAAG,CAAChmB,IAAD,EAAO;IACb,IAAIgD,IAAAA,IAAI,GAAG,CAAX,CAAA;IACA,IAAI8B,IAAAA,MAAM,GAAG,IAAb,CAAA;IACA,IAAA,IAAImhB,KAAK,GAAG/oB,KAAK,CAACgpB,SAAN,CAAgB3d,KAAhB,CAAsB4d,IAAtB,CAA2BC,SAA3B,EAAsC,CAAtC,CAAZ,CAAA;IACA,IAAA,IAAIC,UAAU,GAAGJ,KAAK,CAAC9mB,MAAvB,CAAA;;IAEA,IAAK,KAAA,IAAIsJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4d,UAApB,EAAgC5d,CAAC,EAAjC,EAAqC;IACjCzF,MAAAA,IAAI,IAAIijB,KAAK,CAACxd,CAAD,CAAL,CAAS6N,UAAjB,CAAA;IACH,KAAA;;IAEDxR,IAAAA,MAAM,GAAG,IAAI1E,UAAJ,CAAe4C,IAAf,CAAT,CAAA;IACA8B,IAAAA,MAAM,CAAC,CAAD,CAAN,GAAa9B,IAAI,KAAK,EAAV,GAAgB,IAA5B,CAXa;;IAYb8B,IAAAA,MAAM,CAAC,CAAD,CAAN,GAAa9B,IAAI,KAAK,EAAV,GAAgB,IAA5B,CAAA;IACA8B,IAAAA,MAAM,CAAC,CAAD,CAAN,GAAa9B,IAAI,KAAK,CAAV,GAAe,IAA3B,CAAA;IACA8B,IAAAA,MAAM,CAAC,CAAD,CAAN,GAAa9B,IAAD,GAAS,IAArB,CAAA;IAEA8B,IAAAA,MAAM,CAACyX,GAAP,CAAWvc,IAAX,EAAiB,CAAjB,EAhBa;;IAkBb,IAAIsmB,IAAAA,MAAM,GAAG,CAAb,CAAA;;IACA,IAAK,KAAA,IAAI7d,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4d,UAApB,EAAgC5d,CAAC,EAAjC,EAAqC;IAAG;IACpC3D,MAAAA,MAAM,CAACyX,GAAP,CAAW0J,KAAK,CAACxd,CAAD,CAAhB,EAAqB6d,MAArB,CAAA,CAAA;IACAA,MAAAA,MAAM,IAAIL,KAAK,CAACxd,CAAD,CAAL,CAAS6N,UAAnB,CAAA;IACH,KAAA;;IAED,IAAA,OAAOxR,MAAP,CAAA;IACH,GAzJK;;;IA4JoB,EAAnByhB,OAAAA,mBAAmB,CAACC,IAAD,EAAO;IAC7B,IAAA,IAAIjD,IAAI,GAAGT,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUQ,IAAlB,EAAwBT,KAAG,CAACsC,SAAJ,CAAcC,IAAtC,CAAX,CAAA;IACA,IAAA,IAAItB,IAAI,GAAGjB,KAAG,CAACiB,IAAJ,CAASyC,IAAT,CAAX,CAAA;IAEA,IAAA,IAAI1hB,MAAM,GAAG,IAAI1E,UAAJ,CAAemjB,IAAI,CAACjN,UAAL,GAAkByN,IAAI,CAACzN,UAAtC,CAAb,CAAA;IACAxR,IAAAA,MAAM,CAACyX,GAAP,CAAWgH,IAAX,EAAiB,CAAjB,CAAA,CAAA;IACAze,IAAAA,MAAM,CAACyX,GAAP,CAAWwH,IAAX,EAAiBR,IAAI,CAACjN,UAAtB,CAAA,CAAA;IACA,IAAA,OAAOxR,MAAP,CAAA;IACH,GApKK;;;IAuKK,EAAJif,OAAAA,IAAI,CAACyC,IAAD,EAAO;IACd,IAAA,IAAItC,IAAI,GAAGpB,KAAG,CAACoB,IAAJ,CAASsC,IAAI,CAACC,SAAd,EAAyBD,IAAI,CAACE,QAA9B,CAAX,CAAA;IACA,IAAA,IAAI7B,IAAI,GAAG/B,KAAG,CAAC+B,IAAJ,CAAS2B,IAAT,CAAX,CAAA;IACA,IAAA,IAAIvC,IAAI,GAAGnB,KAAG,CAACmB,IAAJ,CAASuC,IAAT,CAAX,CAAA;IACA,IAAA,OAAO1D,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUgB,IAAlB,EAAwBG,IAAxB,EAA8BW,IAA9B,EAAoCZ,IAApC,CAAP,CAAA;IACH,GA5KK;;;IA+KK,EAAA,OAAJC,IAAI,CAACuC,SAAD,EAAYC,QAAZ,EAAsB;IAC7B,IAAO5D,OAAAA,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUmB,IAAlB,EAAwB,IAAI9jB,UAAJ,CAAe,CAC1C,IAD0C,EACpC,IADoC,EAC9B,IAD8B,EACxB,IADwB;IAE1C,IAAA,IAF0C,EAEpC,IAFoC,EAE9B,IAF8B,EAExB,IAFwB;IAG1C,IAAA,IAH0C,EAGpC,IAHoC,EAG9B,IAH8B,EAGxB,IAHwB;IAIzCqmB,IAAAA,SAAS,KAAK,EAAf,GAAqB,IAJqB;IAKzCA,IAAAA,SAAS,KAAK,EAAf,GAAqB,IALqB,EAMzCA,SAAS,KAAK,CAAf,GAAoB,IANsB,EAOzCA,SAAD,GAAc,IAP4B,EAQzCC,QAAQ,KAAK,EAAd,GAAoB,IARsB;IASzCA,IAAAA,QAAQ,KAAK,EAAd,GAAoB,IATsB,EAUzCA,QAAQ,KAAK,CAAd,GAAmB,IAVuB,EAWzCA,QAAD,GAAa,IAX6B,EAY1C,IAZ0C,EAYpC,IAZoC,EAY9B,IAZ8B,EAYxB,IAZwB;IAa1C,IAAA,IAb0C,EAapC,IAboC,EAa9B,IAb8B,EAaxB,IAbwB;IAc1C,IAAA,IAd0C,EAcpC,IAdoC,EAc9B,IAd8B,EAcxB,IAdwB;IAe1C,IAAA,IAf0C,EAepC,IAfoC,EAe9B,IAf8B,EAexB,IAfwB,EAgB1C,IAhB0C,EAgBpC,IAhBoC,EAgB9B,IAhB8B,EAgBxB,IAhBwB;IAiB1C,IAAA,IAjB0C,EAiBpC,IAjBoC,EAiB9B,IAjB8B,EAiBxB,IAjBwB,EAkB1C,IAlB0C,EAkBpC,IAlBoC,EAkB9B,IAlB8B,EAkBxB,IAlBwB,EAmB1C,IAnB0C,EAmBpC,IAnBoC,EAmB9B,IAnB8B,EAmBxB,IAnBwB,EAoB1C,IApB0C,EAoBpC,IApBoC,EAoB9B,IApB8B,EAoBxB,IApBwB,EAqB1C,IArB0C,EAqBpC,IArBoC,EAqB9B,IArB8B,EAqBxB,IArBwB,EAsB1C,IAtB0C,EAsBpC,IAtBoC,EAsB9B,IAtB8B,EAsBxB,IAtBwB,EAuB1C,IAvB0C,EAuBpC,IAvBoC,EAuB9B,IAvB8B,EAuBxB,IAvBwB,EAwB1C,IAxB0C,EAwBpC,IAxBoC,EAwB9B,IAxB8B,EAwBxB,IAxBwB;IAyB1C,IAAA,IAzB0C,EAyBpC,IAzBoC,EAyB9B,IAzB8B,EAyBxB,IAzBwB;IA0B1C,IAAA,IA1B0C,EA0BpC,IA1BoC,EA0B9B,IA1B8B,EA0BxB,IA1BwB,EA2B1C,IA3B0C,EA2BpC,IA3BoC,EA2B9B,IA3B8B,EA2BxB,IA3BwB,EA4B1C,IA5B0C,EA4BpC,IA5BoC,EA4B9B,IA5B8B,EA4BxB,IA5BwB,EA6B1C,IA7B0C,EA6BpC,IA7BoC,EA6B9B,IA7B8B,EA6BxB,IA7BwB,EA8B1C,IA9B0C,EA8BpC,IA9BoC,EA8B9B,IA9B8B,EA8BxB,IA9BwB;IA+B1C,IAAA,IA/B0C,EA+BpC,IA/BoC,EA+B9B,IA/B8B,EA+BxB,IA/BwB;IAAA,KAAf,CAAxB,CAAP,CAAA;IAiCH,GAjNK;;;IAoNK,EAAJ7B,OAAAA,IAAI,CAAC2B,IAAD,EAAO;IACd,IAAO1D,OAAAA,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAU8B,IAAlB,EAAwB/B,KAAG,CAACkC,IAAJ,CAASwB,IAAT,CAAxB,EAAwC1D,KAAG,CAACa,IAAJ,CAAS6C,IAAT,CAAxC,CAAP,CAAA;IACH,GAtNK;;;IAyNK,EAAJxB,OAAAA,IAAI,CAACwB,IAAD,EAAO;IACd,IAAA,IAAIG,OAAO,GAAGH,IAAI,CAACI,EAAnB;IAAA,QAAuBF,QAAQ,GAAGF,IAAI,CAACE,QAAvC,CAAA;IACA,IAAA,IAAIxoB,KAAK,GAAGsoB,IAAI,CAACK,YAAjB;IAAA,QAA+BvoB,MAAM,GAAGkoB,IAAI,CAACM,aAA7C,CAAA;IAEA,IAAOhE,OAAAA,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUiC,IAAlB,EAAwB,IAAI5kB,UAAJ,CAAe,CAC1C,IAD0C,EACpC,IADoC,EAC9B,IAD8B,EACxB,IADwB;IAE1C,IAAA,IAF0C,EAEpC,IAFoC,EAE9B,IAF8B,EAExB,IAFwB;IAG1C,IAAA,IAH0C,EAGpC,IAHoC,EAG9B,IAH8B,EAGxB,IAHwB;IAIzCumB,IAAAA,OAAO,KAAK,EAAb,GAAmB,IAJuB;IAKzCA,IAAAA,OAAO,KAAK,EAAb,GAAmB,IALuB,EAMzCA,OAAO,KAAK,CAAb,GAAkB,IANwB,EAOzCA,OAAD,GAAY,IAP8B,EAQ1C,IAR0C,EAQpC,IARoC,EAQ9B,IAR8B,EAQxB,IARwB;IASzCD,IAAAA,QAAQ,KAAK,EAAd,GAAoB,IATsB;IAUzCA,IAAAA,QAAQ,KAAK,EAAd,GAAoB,IAVsB,EAWzCA,QAAQ,KAAK,CAAd,GAAmB,IAXuB,EAYzCA,QAAD,GAAa,IAZ6B,EAa1C,IAb0C,EAapC,IAboC,EAa9B,IAb8B,EAaxB,IAbwB;IAc1C,IAAA,IAd0C,EAcpC,IAdoC,EAc9B,IAd8B,EAcxB,IAdwB,EAe1C,IAf0C,EAepC,IAfoC,EAe9B,IAf8B,EAexB,IAfwB;IAgB1C,IAAA,IAhB0C,EAgBpC,IAhBoC,EAgB9B,IAhB8B,EAgBxB,IAhBwB;IAiB1C,IAAA,IAjB0C,EAiBpC,IAjBoC,EAiB9B,IAjB8B,EAiBxB,IAjBwB;IAkB1C,IAAA,IAlB0C,EAkBpC,IAlBoC,EAkB9B,IAlB8B,EAkBxB,IAlBwB,EAmB1C,IAnB0C,EAmBpC,IAnBoC,EAmB9B,IAnB8B,EAmBxB,IAnBwB,EAoB1C,IApB0C,EAoBpC,IApBoC,EAoB9B,IApB8B,EAoBxB,IApBwB,EAqB1C,IArB0C,EAqBpC,IArBoC,EAqB9B,IArB8B,EAqBxB,IArBwB,EAsB1C,IAtB0C,EAsBpC,IAtBoC,EAsB9B,IAtB8B,EAsBxB,IAtBwB,EAuB1C,IAvB0C,EAuBpC,IAvBoC,EAuB9B,IAvB8B,EAuBxB,IAvBwB,EAwB1C,IAxB0C,EAwBpC,IAxBoC,EAwB9B,IAxB8B,EAwBxB,IAxBwB,EAyB1C,IAzB0C,EAyBpC,IAzBoC,EAyB9B,IAzB8B,EAyBxB,IAzBwB;IA0BzCxoB,IAAAA,KAAK,KAAK,CAAX,GAAgB,IA1B0B;IA2BzCA,IAAAA,KAAD,GAAU,IA3BgC,EA4B1C,IA5B0C,EA4BpC,IA5BoC,EA6BzCI,MAAM,KAAK,CAAZ,GAAiB,IA7ByB,EA8BzCA,MAAD,GAAW,IA9B+B,EA+B1C,IA/B0C,EA+BpC,IA/BoC,CAAf,CAAxB,CAAP,CAAA;IAiCH,GAAA;;IAEU,EAAJqlB,OAAAA,IAAI,CAAC6C,IAAD,EAAO;IACd,IAAA,OAAO1D,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUY,IAAlB,EAAwBb,KAAG,CAACY,IAAJ,CAAS8C,IAAT,CAAxB,EAAwC1D,KAAG,CAACU,IAAJ,CAASgD,IAAT,CAAxC,EAAwD1D,KAAG,CAACe,IAAJ,CAAS2C,IAAT,CAAxD,CAAP,CAAA;IACH,GAlQK;;;IAqQK,EAAJ9C,OAAAA,IAAI,CAAC8C,IAAD,EAAO;IACd,IAAA,IAAIC,SAAS,GAAGD,IAAI,CAACC,SAArB,CAAA;IACA,IAAA,IAAIC,QAAQ,GAAGF,IAAI,CAACE,QAApB,CAAA;IACA,IAAO5D,OAAAA,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUW,IAAlB,EAAwB,IAAItjB,UAAJ,CAAe,CAC1C,IAD0C,EACpC,IADoC,EAC9B,IAD8B,EACxB,IADwB;IAE1C,IAAA,IAF0C,EAEpC,IAFoC,EAE9B,IAF8B,EAExB,IAFwB;IAG1C,IAAA,IAH0C,EAGpC,IAHoC,EAG9B,IAH8B,EAGxB,IAHwB;IAIzCqmB,IAAAA,SAAS,KAAK,EAAf,GAAqB,IAJqB;IAKzCA,IAAAA,SAAS,KAAK,EAAf,GAAqB,IALqB,EAMzCA,SAAS,KAAK,CAAf,GAAoB,IANsB,EAOzCA,SAAD,GAAc,IAP4B,EAQzCC,QAAQ,KAAK,EAAd,GAAoB,IARsB;IASzCA,IAAAA,QAAQ,KAAK,EAAd,GAAoB,IATsB,EAUzCA,QAAQ,KAAK,CAAd,GAAmB,IAVuB,EAWzCA,QAAD,GAAa,IAX6B,EAY1C,IAZ0C,EAYpC,IAZoC;IAa1C,IAb0C,IAAA,EAapC,IAboC;IAAA,KAAf,CAAxB,CAAP,CAAA;IAeH,GAvRK;;;IA0RK,EAAJlD,OAAAA,IAAI,CAACgD,IAAD,EAAO;IACd,IAAIhe,IAAAA,IAAI,GAAG,IAAX,CAAA;;IACA,IAAA,IAAIge,IAAI,CAACxmB,IAAL,KAAc,OAAlB,EAA2B;IACvBwI,MAAAA,IAAI,GAAGsa,KAAG,CAACsC,SAAJ,CAAcQ,UAArB,CAAA;IACH,KAFD,MAEO;IACHpd,MAAAA,IAAI,GAAGsa,KAAG,CAACsC,SAAJ,CAAcO,UAArB,CAAA;IACH,KAAA;;IACD,IAAO7C,OAAAA,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUS,IAAlB,EAAwBhb,IAAxB,CAAP,CAAA;IACH,GAlSK;;;IAqSK,EAAJqb,OAAAA,IAAI,CAAC2C,IAAD,EAAO;IACd,IAAIO,IAAAA,IAAI,GAAG,IAAX,CAAA;;IACA,IAAA,IAAIP,IAAI,CAACxmB,IAAL,KAAc,OAAlB,EAA2B;IACvB+mB,MAAAA,IAAI,GAAGjE,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUmC,IAAlB,EAAwBpC,KAAG,CAACsC,SAAJ,CAAcU,IAAtC,CAAP,CAAA;IACH,KAFD,MAEO;IACHiB,MAAAA,IAAI,GAAGjE,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUkC,IAAlB,EAAwBnC,KAAG,CAACsC,SAAJ,CAAcW,IAAtC,CAAP,CAAA;IACH,KAAA;;IACD,IAAOjD,OAAAA,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUc,IAAlB,EAAwBkD,IAAxB,EAA8BjE,KAAG,CAACM,IAAJ,EAA9B,EAA0CN,KAAG,CAACsB,IAAJ,CAASoC,IAAT,CAA1C,CAAP,CAAA;IACH,GA7SK;;;IAgTK,EAAA,OAAJpD,IAAI,GAAG;IACV,IAAA,IAAIte,MAAM,GAAGge,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUK,IAAlB,EACTN,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUM,IAAlB,EAAwBP,KAAG,CAACsC,SAAJ,CAAcS,IAAtC,CADS,CAAb,CAAA;IAGA,IAAA,OAAO/gB,MAAP,CAAA;IACH,GArTK;;;IAwTK,EAAJsf,OAAAA,IAAI,CAACoC,IAAD,EAAO;IACd,IAAI1hB,IAAAA,MAAM,GAAGge,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUqB,IAAlB;IACTtB,IAAAA,KAAG,CAACyB,IAAJ,CAASiC,IAAT,CADS;IAET1D,IAAAA,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAU0B,IAAlB,EAAwB3B,KAAG,CAACsC,SAAJ,CAAcG,IAAtC,CAFS;IAGTzC,IAAAA,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUuB,IAAlB,EAAwBxB,KAAG,CAACsC,SAAJ,CAAcI,IAAtC,CAHS;IAIT1C,IAAAA,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUyB,IAAlB,EAAwB1B,KAAG,CAACsC,SAAJ,CAAcM,IAAtC,CAJS;IAKT5C,IAAAA,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUsB,IAAlB,EAAwBvB,KAAG,CAACsC,SAAJ,CAAcK,IAAtC,CALS;IAAA,KAAb,CAAA;IAOA,IAAA,OAAO3gB,MAAP,CAAA;IACH,GAjUK;;;IAoUK,EAAJyf,OAAAA,IAAI,CAACiC,IAAD,EAAO;IACd,IAAA,IAAIA,IAAI,CAACxmB,IAAL,KAAc,OAAlB,EAA2B;IACvB;IACA,MAAO8iB,OAAAA,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUwB,IAAlB,EAAwBzB,KAAG,CAACsC,SAAJ,CAAcE,WAAtC,EAAmDxC,KAAG,CAACkB,IAAJ,CAASwC,IAAT,CAAnD,CAAP,CAAA;IACH,KAHD,MAGO;IACH,MAAA,IAAIA,IAAI,CAACQ,SAAL,KAAmB,KAAvB,EAA8B;IAC1B;IACA,QAAOlE,OAAAA,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUwB,IAAlB,EAAwBzB,KAAG,CAACsC,SAAJ,CAAcE,WAAtC,EAAmDxC,KAAG,CAACE,IAAJ,CAASwD,IAAT,CAAnD,CAAP,CAAA;IACH,OAHD,MAGO;IACH;IACA,QAAO1D,OAAAA,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUwB,IAAlB,EAAwBzB,KAAG,CAACsC,SAAJ,CAAcE,WAAtC,EAAmDxC,KAAG,CAACG,IAAJ,CAASuD,IAAT,CAAnD,CAAP,CAAA;IACH,OAAA;IACJ,KAAA;IACJ,GAAA;;IAEU,EAAJxC,OAAAA,IAAI,CAACwC,IAAD,EAAO;IACd,IAAA,IAAIS,YAAY,GAAGT,IAAI,CAACS,YAAxB,CAAA;IACA,IAAA,IAAI3T,UAAU,GAAGkT,IAAI,CAACU,eAAtB,CAAA;IAEA,IAAA,IAAI1e,IAAI,GAAG,IAAIpI,UAAJ,CAAe,CACtB,IADsB,EAChB,IADgB,EACV,IADU,EACJ,IADI;IAEtB,IAAA,IAFsB,EAEhB,IAFgB,EAEV,IAFU,EAEJ,IAFI;IAGtB,IAAA,IAHsB,EAGhB,IAHgB,EAGV,IAHU,EAGJ,IAHI;IAItB,IAJsB,IAAA,EAIhB,IAJgB,EAIV,IAJU,EAIJ,IAJI,EAKtB,IALsB,EAKhB6mB,YALgB;IAMtB,IANsB,IAAA,EAMhB,IANgB;IAOtB,IAAA,IAPsB,EAOhB,IAPgB,EAOV,IAPU,EAOJ,IAPI;IAQrB3T,IAAAA,UAAU,KAAK,CAAhB,GAAqB,IARC;IASrBA,IAAAA,UAAD,GAAe,IATO,EAUtB,IAVsB,EAUhB,IAVgB,CAAf,CAAX,CAAA;IAaA,IAAA,OAAOwP,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUiB,IAAlB,EAAwBxb,IAAxB,EAA8Bsa,KAAG,CAACQ,IAAJ,CAASkD,IAAT,CAA9B,CAAP,CAAA;IACH,GAAA;;IAEU,EAAJlD,OAAAA,IAAI,CAACkD,IAAD,EAAO;IACd,IAAA,IAAIhM,MAAM,GAAGgM,IAAI,CAAChM,MAAL,IAAe,EAA5B,CAAA;IACA,IAAA,IAAI2M,UAAU,GAAG3M,MAAM,CAACrb,MAAxB,CAAA;IACA,IAAA,IAAIqJ,IAAI,GAAG,IAAIpI,UAAJ,CAAe,CACtB,IADsB,EAChB,IADgB,EACV,IADU,EACJ,IADI;IAGtB,IAAA,IAHsB;IAItB,IAAA,IAAA,GAAO+mB,UAJe;IAKtB,IALsB,IAAA,EAKhB,IALgB;IAMtB,IAAA,IANsB;IAQtB,IAAA,IARsB;IAStB,IAAA,IAAA,GAAOA,UATe;IAUtB,IAAA,IAVsB;IAWtB,IAAA,IAXsB;IAYtB,IAAA,IAZsB,EAYhB,IAZgB,EAYV,IAZU;IAatB,IAAA,IAbsB,EAahB,IAbgB,EAaV,IAbU,EAaJ,IAbI;IActB,IAAA,IAdsB,EAchB,IAdgB,EAcV,IAdU,EAcJ,IAdI;IAgBtB,IAAA,IAhBsB;IAAA,KAAA,CAiBxBC,MAjBwB,CAiBjB,CACLD,UADK,CAjBiB,CAAA,CAmBvBC,MAnBuB,CAoBtB5M,MApBsB,CAqBxB4M,CAAAA,MArBwB,CAqBjB,CACL,IADK,EACC,IADD,EACO,IADP;IAAA,KArBiB,CAAf,CAAX,CAAA;IAwBA,IAAOtE,OAAAA,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUO,IAAlB,EAAwB9a,IAAxB,CAAP,CAAA;IACH,GAnYK;;;IAsYK,EAAJwa,OAAAA,IAAI,CAACwD,IAAD,EAAO;IACd,IAAA,IAAIa,IAAI,GAAGb,IAAI,CAACa,IAAhB,CAAA;IACA,IAAA,MAAMnpB,KAAK,GAAGsoB,IAAI,CAACc,UAAnB,CAAA;IACA,IAAA,MAAMhpB,MAAM,GAAGkoB,IAAI,CAACe,WAApB,CAAA;IACA,IAAA,IAAI/e,IAAI,GAAG,IAAIpI,UAAJ,CAAe,CACtB,CADsB,EACnB,CADmB,EAChB,CADgB,EACb,CADa,EAEtB,CAFsB,EAEnB,CAFmB,EAEhB,CAFgB,EAEb,CAFa,EAGtB,CAHsB,EAGnB,CAHmB,EAGhB,CAHgB,EAGb,CAHa,EAItB,CAJsB,EAInB,CAJmB,EAIhB,CAJgB,EAIb,CAJa,EAKtB,CALsB,EAKnB,CALmB,EAKhB,CALgB,EAKb,CALa,EAMtB,CANsB,EAMnB,CANmB,EAMhB,CANgB,EAMb,CANa,EAOtBlC,KAAK,KAAK,CAAV,GAAc,GAPQ,EAQtBA,KAAK,GAAG,GARc,EAStBI,MAAM,KAAK,CAAX,GAAe,GATO,EAUtBA,MAAM,GAAG,GAVa,EAWtB,CAXsB,EAWnB,EAXmB,EAWf,CAXe,EAWZ,CAXY,EAYtB,CAZsB,EAYnB,EAZmB,EAYf,CAZe,EAYZ,CAZY,EAatB,CAbsB,EAanB,CAbmB,EAahB,CAbgB,EAab,CAba,EActB,CAdsB,EAcnB,CAdmB,EAetB,CAfsB,EAgBtB,CAhBsB,EAgBnB,CAhBmB,EAgBhB,CAhBgB,EAgBb,CAhBa,EAiBtB,CAjBsB,EAiBnB,CAjBmB,EAiBhB,CAjBgB,EAiBb,CAjBa,EAkBtB,CAlBsB,EAkBnB,CAlBmB,EAkBhB,CAlBgB,EAkBb,CAlBa,EAmBtB,CAnBsB,EAmBnB,CAnBmB,EAmBhB,CAnBgB,EAmBb,CAnBa,EAoBtB,CApBsB,EAoBnB,CApBmB,EAoBhB,CApBgB,EAoBb,CApBa,EAqBtB,CArBsB,EAqBnB,CArBmB,EAqBhB,CArBgB,EAqBb,CArBa,EAsBtB,CAtBsB,EAsBnB,CAtBmB,EAsBhB,CAtBgB,EAsBb,CAtBa,EAuBtB,CAvBsB,EAuBnB,CAvBmB,EAuBhB,CAvBgB,EAwBtB,CAxBsB,EAwBnB,EAxBmB,EAyBtB,GAzBsB,EAyBjB,GAzBiB,CAAf,CAAX,CAAA;IA2BA,IAAOwkB,OAAAA,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUC,IAAlB,EAAwBxa,IAAxB,EAA8Bsa,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUjf,IAAlB,EAAwBujB,IAAxB,CAA9B,CAAP,CAAA;IACH,GAtaK;;;IAyaK,EAAJpE,OAAAA,IAAI,CAACuD,IAAD,EAAO;IACd,IAAA,IAAIa,IAAI,GAAGb,IAAI,CAACa,IAAhB,CAAA;IACA,IAAA,MAAMnpB,KAAK,GAAGsoB,IAAI,CAACc,UAAnB,CAAA;IACA,IAAA,MAAMhpB,MAAM,GAAGkoB,IAAI,CAACe,WAApB,CAAA;IACA,IAAA,IAAI/e,IAAI,GAAG,IAAIpI,UAAJ,CAAe,CACtB,CADsB,EACnB,CADmB,EAChB,CADgB,EACb,CADa,EAEtB,CAFsB,EAEnB,CAFmB,EAEhB,CAFgB,EAEb,CAFa,EAGtB,CAHsB,EAGnB,CAHmB,EAGhB,CAHgB,EAGb,CAHa,EAItB,CAJsB,EAInB,CAJmB,EAIhB,CAJgB,EAIb,CAJa,EAKtB,CALsB,EAKnB,CALmB,EAKhB,CALgB,EAKb,CALa,EAMtB,CANsB,EAMnB,CANmB,EAMhB,CANgB,EAMb,CANa,EAOtBlC,KAAK,KAAK,CAAV,GAAc,GAPQ,EAQtBA,KAAK,GAAG,GARc,EAStBI,MAAM,KAAK,CAAX,GAAe,GATO,EAUtBA,MAAM,GAAG,GAVa,EAWtB,CAXsB,EAWnB,EAXmB,EAWf,CAXe,EAWZ,CAXY,EAYtB,CAZsB,EAYnB,EAZmB,EAYf,CAZe,EAYZ,CAZY,EAatB,CAbsB,EAanB,CAbmB,EAahB,CAbgB,EAab,CAba,EActB,CAdsB,EAcnB,CAdmB,EAetB,CAfsB,EAgBtB,CAhBsB,EAgBnB,CAhBmB,EAgBhB,CAhBgB,EAgBb,CAhBa,EAiBtB,CAjBsB,EAiBnB,CAjBmB,EAiBhB,CAjBgB,EAiBb,CAjBa,EAkBtB,CAlBsB,EAkBnB,CAlBmB,EAkBhB,CAlBgB,EAkBb,CAlBa,EAmBtB,CAnBsB,EAmBnB,CAnBmB,EAmBhB,CAnBgB,EAmBb,CAnBa,EAoBtB,CApBsB,EAoBnB,CApBmB,EAoBhB,CApBgB,EAoBb,CApBa,EAqBtB,CArBsB,EAqBnB,CArBmB,EAqBhB,CArBgB,EAqBb,CArBa,EAsBtB,CAtBsB,EAsBnB,CAtBmB,EAsBhB,CAtBgB,EAsBb,CAtBa,EAuBtB,CAvBsB,EAuBnB,CAvBmB,EAuBhB,CAvBgB,EAwBtB,CAxBsB,EAwBnB,EAxBmB,EAyBtB,GAzBsB,EAyBjB,GAzBiB,CAAf,CAAX,CAAA;IA2BA,IAAOwkB,OAAAA,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUE,IAAlB,EAAwBza,IAAxB,EAA8Bsa,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUG,IAAlB,EAAwBmE,IAAxB,CAA9B,CAAP,CAAA;IACH,GAzcK;;;IA4cK,EAAJpD,OAAAA,IAAI,CAACuC,IAAD,EAAO;IACd,IAAA,OAAO1D,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUkB,IAAlB,EAAwBnB,KAAG,CAACiC,IAAJ,CAASyB,IAAT,CAAxB,CAAP,CAAA;IACH,GA9cK;;;IAidK,EAAJzB,OAAAA,IAAI,CAACyB,IAAD,EAAO;IACd,IAAA,IAAIG,OAAO,GAAGH,IAAI,CAACI,EAAnB,CAAA;IACA,IAAA,IAAIpe,IAAI,GAAG,IAAIpI,UAAJ,CAAe,CACtB,IADsB,EAChB,IADgB,EACV,IADU,EACJ,IADI;IAErBumB,IAAAA,OAAO,KAAK,EAAb,GAAmB,IAFG;IAGrBA,IAAAA,OAAO,KAAK,EAAb,GAAmB,IAHG,EAIrBA,OAAO,KAAK,CAAb,GAAkB,IAJI,EAKrBA,OAAD,GAAY,IALU,EAMtB,IANsB,EAMhB,IANgB,EAMV,IANU,EAMJ,IANI;IAOtB,IAAA,IAPsB,EAOhB,IAPgB,EAOV,IAPU,EAOJ,IAPI;IAQtB,IAAA,IARsB,EAQhB,IARgB,EAQV,IARU,EAQJ,IARI;IAStB,IAAA,IATsB,EAShB,IATgB,EASV,IATU,EASJ,IATI;IAAA,KAAf,CAAX,CAAA;IAWA,IAAO7D,OAAAA,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUgC,IAAlB,EAAwBvc,IAAxB,CAAP,CAAA;IACH,GA/dK;;;IAkeK,EAAA,OAAJsb,IAAI,CAAC0D,KAAD,EAAQC,mBAAR,EAA6B;IACpC,IAAO3E,OAAAA,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUe,IAAlB,EAAwBhB,KAAG,CAACc,IAAJ,CAAS4D,KAAK,CAACE,cAAf,CAAxB,EAAwD5E,KAAG,CAAC8B,IAAJ,CAAS4C,KAAT,EAAgBC,mBAAhB,CAAxD,CAAP,CAAA;IACH,GApeK;;;IAseK,EAAJ7D,OAAAA,IAAI,CAAC8D,cAAD,EAAiB;IACxB,IAAA,IAAIlf,IAAI,GAAG,IAAIpI,UAAJ,CAAe,CACtB,IADsB,EAChB,IADgB,EACV,IADU,EACJ,IADI,EAErBsnB,cAAc,KAAK,EAApB,GAA0B,IAFJ;IAGrBA,IAAAA,cAAc,KAAK,EAApB,GAA0B,IAHJ,EAIrBA,cAAc,KAAK,CAApB,GAAyB,IAJH,EAKrBA,cAAD,GAAmB,IALG,CAAf,CAAX,CAAA;IAOA,IAAO5E,OAAAA,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUa,IAAlB,EAAwBpb,IAAxB,CAAP,CAAA;IACH,GA/eK;;;IAkfK,EAAA,OAAJoc,IAAI,CAAC4C,KAAD,EAAQC,mBAAR,EAA6B;IACpC,IAAA,IAAId,OAAO,GAAGa,KAAK,CAACZ,EAApB,CADoC;;IAIpC,IAAIjC,IAAAA,IAAI,GAAG7B,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAU4B,IAAlB,EAAwB,IAAIvkB,UAAJ,CAAe,CAC9C,IAD8C,EACxC,IADwC,EAClC,IADkC,EAC5B,IAD4B;IAE7CumB,IAAAA,OAAO,KAAK,EAAb,GAAmB,IAF2B;IAG7CA,IAAAA,OAAO,KAAK,EAAb,GAAmB,IAH2B,EAI7CA,OAAO,KAAK,CAAb,GAAkB,IAJ4B,EAK7CA,OAAD,GAAY,IALkC,CAAf,CAAxB,CAAX,CAJoC;;IAYpC,IAAIjC,IAAAA,IAAI,GAAG5B,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAU2B,IAAlB,EAAwB,IAAItkB,UAAJ,CAAe,CAC9C,IAD8C,EACxC,IADwC,EAClC,IADkC,EAC5B,IAD4B;IAE7CqnB,IAAAA,mBAAmB,KAAK,EAAzB,GAA+B,IAFe;IAG7CA,IAAAA,mBAAmB,KAAK,EAAzB,GAA+B,IAHe,EAI7CA,mBAAmB,KAAK,CAAzB,GAA8B,IAJgB,EAK7CA,mBAAD,GAAwB,IALsB,CAAf,CAAxB,CAAX,CAAA;IAOA,IAAA,IAAItD,IAAI,GAAGrB,KAAG,CAACqB,IAAJ,CAASqD,KAAT,CAAX,CAAA;IACA,IAAI1C,IAAAA,IAAI,GAAGhC,KAAG,CAACgC,IAAJ,CAAS0C,KAAT,EAAgBrD,IAAI,CAAC7N,UAAL,GAAkB,EAAlB,GAAuB,EAAvB,GAA4B,CAA5B,GAAgC,EAAhC,GAAqC,CAArC,GAAyC,CAAzD,CAAX,CAAA;IAEA,IAAA,OAAOwM,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAU6B,IAAlB,EAAwBD,IAAxB,EAA8BD,IAA9B,EAAoCI,IAApC,EAA0CX,IAA1C,CAAP,CAAA;IACH,GAzgBK;;;IA4gBK,EAAJA,OAAAA,IAAI,CAACqD,KAAD,EAAQ;IACf,IAAA,IAAIhf,IAAI,GAAG,IAAIpI,UAAJ,CAAe,CAAA,GAAI,CAAnB,CAAX,CAAA;IACA,IAAA,IAAIunB,KAAK,GAAGH,KAAK,CAACG,KAAlB,CAAA;IACAnf,IAAAA,IAAI,CAAC,CAAD,CAAJ,GAAUmf,KAAK,CAACC,SAAN,IAAmB,CAAnB,GACJD,KAAK,CAACE,SAAN,IAAmB,CADf,GAEJF,KAAK,CAACG,YAAN,IAAsB,CAFlB,GAGJH,KAAK,CAACI,aAHZ,CAAA;IAIA,IAAOjF,OAAAA,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUoB,IAAlB,EAAwB3b,IAAxB,CAAP,CAAA;IACH,GAphBK;;;IAshBK,EAAA,OAAJsc,IAAI,CAAC0C,KAAD,EAAQlB,MAAR,EAAgB;IACvB,IAAI0B,IAAAA,QAAQ,GAAG,EAAA,GAAK,EAApB,CAAA;IACA,IAAA,IAAIxf,IAAI,GAAG,IAAIpI,UAAJ,CAAe4nB,QAAf,CAAX,CAAA;IACA1B,IAAAA,MAAM,IAAI,CAAA,GAAI0B,QAAd,CAAA;IAEAxf,IAAAA,IAAI,CAAC+T,GAAL,CAAS,CACL,IADK,EACC,IADD,EACO,IADP,EACa,IADb;IAEL,IAAA,IAFK,EAEC,IAFD,EAEO,IAFP,EAEa,IAFb;IAGJ+J,IAAAA,MAAM,KAAK,EAAZ,GAAkB,IAHb;IAIJA,IAAAA,MAAM,KAAK,EAAZ,GAAkB,IAJb,EAKJA,MAAM,KAAK,CAAZ,GAAiB,IALZ,EAMJA,MAAD,GAAW,IANN,CAAT,EAOG,CAPH,CAAA,CAAA;IASA,IAAA,IAAII,QAAQ,GAAGc,KAAK,CAACd,QAArB,CAAA;IACA,IAAA,IAAI1jB,IAAI,GAAGwkB,KAAK,CAACxkB,IAAjB,CAAA;IACA,IAAA,IAAI2kB,KAAK,GAAGH,KAAK,CAACG,KAAlB,CAAA;IACA,IAAA,IAAIM,GAAG,GAAGT,KAAK,CAACS,GAAhB,CAAA;IAEAzf,IAAAA,IAAI,CAAC+T,GAAL,CAAS,CACJmK,QAAQ,KAAK,EAAd,GAAoB,IADf;IAEJA,IAAAA,QAAQ,KAAK,EAAd,GAAoB,IAFf,EAGJA,QAAQ,KAAK,CAAd,GAAmB,IAHd,EAIJA,QAAD,GAAa,IAJR,EAKJ1jB,IAAI,KAAK,EAAV,GAAgB,IALX;IAMJA,IAAAA,IAAI,KAAK,EAAV,GAAgB,IANX,EAOJA,IAAI,KAAK,CAAV,GAAe,IAPV,EAQJA,IAAD,GAAS,IARJ,EASJ2kB,KAAK,CAACC,SAAN,IAAmB,CAApB,GAAyBD,KAAK,CAACE,SAT1B;IAUJF,IAAAA,KAAK,CAACG,YAAN,IAAsB,CAAvB,GAA6BH,KAAK,CAACI,aAAN,IAAuB,CAApD,GAAyDJ,KAAK,CAACO,SAV1D,EAWL,IAXK,EAWC,IAXD;IAYJD,IAAAA,GAAG,KAAK,EAAT,GAAe,IAZV;IAaJA,IAAAA,GAAG,KAAK,EAAT,GAAe,IAbV,EAcJA,GAAG,KAAK,CAAT,GAAc,IAdT,EAeJA,GAAD,GAAQ,IAfH,CAAT,EAgBG,EAhBH,CAAA,CAAA;IAkBA,IAAOnF,OAAAA,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAU+B,IAAlB,EAAwBtc,IAAxB,CAAP,CAAA;IACH,GA5jBK;;;IA8jBK,EAAJib,OAAAA,IAAI,CAACjb,IAAD,EAAO;IACd,IAAOsa,OAAAA,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUU,IAAlB,EAAwBjb,IAAxB,CAAP,CAAA;IACH,GAAA;;IAhkBK,CAAA;;AAmkBVsa,SAAG,CAACztB,IAAJ,EAAA;;ICnkBA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IAGA;IACA,MAAM8yB,SAAN,CAAgB;IAEZ/rB,EAAAA,WAAW,CAACgsB,UAAD,EAAa;IACpB,IAAKC,IAAAA,CAAAA,GAAL,GAAW,WAAX,CAAA;IAEA,IAAKC,IAAAA,CAAAA,OAAL,GAAeF,UAAf,CAAA;IACA,IAAKG,IAAAA,CAAAA,aAAL,GAAqB,CAArB,CAAA;IACA,IAAA,IAAA,CAAKC,YAAL,GAAoBJ,UAAU,CAAC9R,UAA/B,CAAA;IACA,IAAA,IAAA,CAAKmS,WAAL,GAAmBL,UAAU,CAAC9R,UAAX,GAAwB,CAA3C,CAAA;IACA,IAAKoS,IAAAA,CAAAA,aAAL,GAAqB,CAArB,CAAA;IACA,IAAKC,IAAAA,CAAAA,uBAAL,GAA+B,CAA/B,CAAA;IACH,GAAA;;IAEDnwB,EAAAA,OAAO,GAAG;IACN,IAAK8vB,IAAAA,CAAAA,OAAL,GAAe,IAAf,CAAA;IACH,GAAA;;IAEDM,EAAAA,gBAAgB,GAAG;IACf,IAAA,IAAIC,iBAAiB,GAAG,IAAA,CAAKL,YAAL,GAAoB,KAAKD,aAAjD,CAAA;;IAKA,IAAIO,IAAAA,UAAU,GAAG3qB,IAAI,CAAC8D,GAAL,CAAS,CAAT,EAAY4mB,iBAAZ,CAAjB,CAAA;IACA,IAAA,IAAIE,IAAI,GAAG,IAAI3oB,UAAJ,CAAe,CAAf,CAAX,CAAA;IACA2oB,IAAAA,IAAI,CAACxM,GAAL,CAAS,IAAA,CAAK+L,OAAL,CAAatkB,QAAb,CAAsB,IAAA,CAAKukB,aAA3B,EAA0C,IAAA,CAAKA,aAAL,GAAqBO,UAA/D,CAAT,CAAA,CAAA;IACA,IAAA,IAAA,CAAKJ,aAAL,GAAqB,IAAI9L,QAAJ,CAAamM,IAAI,CAACjxB,MAAlB,CAAA,CAA0BglB,SAA1B,CAAoC,CAApC,EAAuC,KAAvC,CAArB,CAAA;IAEA,IAAKyL,IAAAA,CAAAA,aAAL,IAAsBO,UAAtB,CAAA;IACA,IAAA,IAAA,CAAKH,uBAAL,GAA+BG,UAAU,GAAG,CAA5C,CAAA;IACH,GAAA;;IAEDE,EAAAA,QAAQ,CAACC,IAAD,EAAO;;IAKX,IAAA,IAAIA,IAAI,IAAI,IAAKN,CAAAA,uBAAjB,EAA0C;IACtC,MAAA,IAAI7jB,MAAM,GAAG,IAAA,CAAK4jB,aAAL,KAAwB,KAAKO,IAA1C,CAAA;IACA,MAAKP,IAAAA,CAAAA,aAAL,KAAuBO,IAAvB,CAAA;IACA,MAAKN,IAAAA,CAAAA,uBAAL,IAAgCM,IAAhC,CAAA;IACA,MAAA,OAAOnkB,MAAP,CAAA;IACH,KAAA;;IAED,IAAIA,IAAAA,MAAM,GAAG,IAAK6jB,CAAAA,uBAAL,GAA+B,IAAKD,CAAAA,aAApC,GAAoD,CAAjE,CAAA;IACA5jB,IAAAA,MAAM,GAAGA,MAAM,KAAM,EAAA,GAAK,KAAK6jB,uBAA/B,CAAA;IACA,IAAA,IAAIO,cAAc,GAAGD,IAAI,GAAG,KAAKN,uBAAjC,CAAA;;IAEA,IAAA,IAAA,CAAKC,gBAAL,EAAA,CAAA;;IACA,IAAIO,IAAAA,cAAc,GAAGhrB,IAAI,CAAC8D,GAAL,CAASinB,cAAT,EAAyB,IAAKP,CAAAA,uBAA9B,CAArB,CAAA;IAEA,IAAA,IAAIS,OAAO,GAAG,IAAA,CAAKV,aAAL,KAAwB,KAAKS,cAA3C,CAAA;IACA,IAAKT,IAAAA,CAAAA,aAAL,KAAuBS,cAAvB,CAAA;IACA,IAAKR,IAAAA,CAAAA,uBAAL,IAAgCQ,cAAhC,CAAA;IAEArkB,IAAAA,MAAM,GAAIA,MAAM,IAAIqkB,cAAX,GAA6BC,OAAtC,CAAA;IACA,IAAA,OAAOtkB,MAAP,CAAA;IACH,GAAA;;IAEDukB,EAAAA,QAAQ,GAAG;IACP,IAAA,OAAO,IAAKL,CAAAA,QAAL,CAAc,CAAd,MAAqB,CAA5B,CAAA;IACH,GAAA;;IAEDM,EAAAA,QAAQ,GAAG;IACP,IAAA,OAAO,IAAKN,CAAAA,QAAL,CAAc,CAAd,CAAP,CAAA;IACH,GAAA;;IAEDO,EAAAA,gBAAgB,GAAG;IACf,IAAA,IAAIC,UAAJ,CAAA;;IACA,IAAKA,KAAAA,UAAU,GAAG,CAAlB,EAAqBA,UAAU,GAAG,IAAA,CAAKb,uBAAvC,EAAgEa,UAAU,EAA1E,EAA8E;IAC1E,MAAA,IAAI,OAAO,IAAKd,CAAAA,aAAL,GAAsB,UAAec,KAAAA,UAA5C,CAAJ,EAA8D;IAC1D,QAAKd,IAAAA,CAAAA,aAAL,KAAuBc,UAAvB,CAAA;IACA,QAAKb,IAAAA,CAAAA,uBAAL,IAAgCa,UAAhC,CAAA;IACA,QAAA,OAAOA,UAAP,CAAA;IACH,OAAA;IACJ,KAAA;;IACD,IAAA,IAAA,CAAKZ,gBAAL,EAAA,CAAA;;IACA,IAAA,OAAOY,UAAU,GAAG,IAAKD,CAAAA,gBAAL,EAApB,CAAA;IACH,GAAA;;IAEDE,EAAAA,OAAO,GAAG;IAAG;IACT,IAAA,IAAIC,aAAa,GAAG,IAAKH,CAAAA,gBAAL,EAApB,CAAA;;IACA,IAAA,OAAO,KAAKP,QAAL,CAAcU,aAAa,GAAG,CAA9B,IAAmC,CAA1C,CAAA;IACH,GAAA;;IAEDC,EAAAA,OAAO,GAAG;IAAG;IACT,IAAA,IAAIvnB,KAAK,GAAG,IAAKqnB,CAAAA,OAAL,EAAZ,CAAA;;IACA,IAAIrnB,IAAAA,KAAK,GAAG,IAAZ,EAAkB;IACd,MAAA,OAAQA,KAAK,GAAG,CAAT,KAAgB,CAAvB,CAAA;IACH,KAFD,MAEO;IACH,MAAA,OAAO,CAAC,CAAD,IAAMA,KAAK,KAAK,CAAhB,CAAP,CAAA;IACH,KAAA;IACJ,GAAA;;IA5FW;;ICpBhB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;IAIA,MAAMwnB,WAAN,CAAgB;IAEK,EAAVC,OAAAA,UAAU,CAACzB,UAAD,EAAa;IAC1B,IAAIlX,IAAAA,GAAG,GAAGkX,UAAV,CAAA;IACA,IAAA,IAAI0B,UAAU,GAAG5Y,GAAG,CAACoF,UAArB,CAAA;IACA,IAAA,IAAIyT,GAAG,GAAG,IAAI3pB,UAAJ,CAAe0pB,UAAf,CAAV,CAAA;IACA,IAAIE,IAAAA,OAAO,GAAG,CAAd,CAAA;;IAEA,IAAK,KAAA,IAAIvhB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqhB,UAApB,EAAgCrhB,CAAC,EAAjC,EAAqC;IACjC,MAAIA,IAAAA,CAAC,IAAI,CAAT,EAAY;IACR;IACA,QAAIyI,IAAAA,GAAG,CAACzI,CAAD,CAAH,KAAW,IAAX,IAAmByI,GAAG,CAACzI,CAAC,GAAG,CAAL,CAAH,KAAe,IAAlC,IAA0CyI,GAAG,CAACzI,CAAC,GAAG,CAAL,CAAH,KAAe,IAA7D,EAAmE;IAC/D,UAAA,SAAA;IACH,SAAA;IACJ,OAAA;;IACDshB,MAAAA,GAAG,CAACC,OAAD,CAAH,GAAe9Y,GAAG,CAACzI,CAAD,CAAlB,CAAA;IACAuhB,MAAAA,OAAO,EAAA,CAAA;IACV,KAAA;;IAED,IAAO,OAAA,IAAI5pB,UAAJ,CAAe2pB,GAAG,CAACjyB,MAAnB,EAA2B,CAA3B,EAA8BkyB,OAA9B,CAAP,CAAA;IACH,GApBW;IAuBZ;;;IACe,EAARC,OAAAA,QAAQ,CAAC7B,UAAD,EAAa;IACxB,IAAA,IAAI8B,IAAI,GAAGN,WAAS,CAACC,UAAV,CAAqBzB,UAArB,CAAX,CAAA;;IACA,IAAA,IAAI+B,EAAE,GAAG,IAAIhC,SAAJ,CAAc+B,IAAd,CAAT,CAAA;IAEAC,IAAAA,EAAE,CAACb,QAAH,EAAA,CAJwB;IAMxB;;IAEA,IAAA,IAAIc,WAAW,GAAGD,EAAE,CAACb,QAAH,EAAlB,CARwB;;IASxBa,IAAAA,EAAE,CAACb,QAAH,EAAA,CATwB;IAUxB;;IACA,IAAA,IAAIe,SAAS,GAAGF,EAAE,CAACb,QAAH,EAAhB,CAXwB;IAYxB;;IACAa,IAAAA,EAAE,CAACV,OAAH,EAAA,CAbwB;;IAexB,IAAA,IAAIa,cAAc,GAAGV,WAAS,CAACW,gBAAV,CAA2BH,WAA3B,CAArB,CAAA;IAEA,IAAA,IAAII,YAAY,GAAGZ,WAAS,CAACa,cAAV,CAAyBJ,SAAzB,CAAnB,CAAA;IAEA,IAAIK,IAAAA,iBAAiB,GAAG,CAAxB,CAAA;IACA,IAAIC,IAAAA,aAAa,GAAG,GAApB,CAAA;IACA,IAAIC,IAAAA,mBAAmB,GAAG,CAAC,CAAD,EAAI,GAAJ,EAAS,GAAT,EAAc,GAAd,CAA1B,CAAA;IACA,IAAA,IAAIC,SAAS,GAAG,CAAhB,CAtBwB;;IAyBxB,IAAA,IAAIT,WAAW,KAAK,GAAhB,IAAuBA,WAAW,KAAK,GAAvC,IAA8CA,WAAW,KAAK,GAA9D,IACAA,WAAW,KAAK,GADhB,IACuBA,WAAW,KAAK,EADvC,IAC6CA,WAAW,KAAK,EAD7D,IAEAA,WAAW,KAAK,EAFhB,IAEsBA,WAAW,KAAK,GAFtC,IAE6CA,WAAW,KAAK,GAF7D,IAGAA,WAAW,KAAK,GAHhB,IAGuBA,WAAW,KAAK,GAH3C,EAGgD;IAC5C;IACAM,MAAAA,iBAAiB,GAAGP,EAAE,CAACV,OAAH,EAApB,CAAA;;IAEA,MAAIiB,IAAAA,iBAAiB,KAAK,CAA1B,EAA6B;IACzBP,QAAAA,EAAE,CAACnB,QAAH,CAAY,CAAZ,EADyB;IAE5B,OAAA;;IACD,MAAI0B,IAAAA,iBAAiB,IAAI,CAAzB,EAA4B;IACxBC,QAAAA,aAAa,GAAGC,mBAAmB,CAACF,iBAAD,CAAnC,CAAA;IACH,OAAA;;IAEDG,MAAAA,SAAS,GAAGV,EAAE,CAACV,OAAH,EAAe,GAAA,CAA3B,CAX4C;;IAY5CU,MAAAA,EAAE,CAACV,OAAH,EAAA,CAZ4C;;IAa5CU,MAAAA,EAAE,CAACnB,QAAH,CAAY,CAAZ,EAb4C;;IAc5C,MAAA,IAAImB,EAAE,CAACd,QAAH,EAAJ,EAAmB;IAAG;IAClB,QAAIyB,IAAAA,kBAAkB,GAAIJ,iBAAiB,KAAK,CAAvB,GAA4B,CAA5B,GAAgC,EAAzD,CAAA;;IACA,QAAK,KAAA,IAAIjiB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqiB,kBAApB,EAAwCriB,CAAC,EAAzC,EAA6C;IACzC,UAAA,IAAI0hB,EAAE,CAACd,QAAH,EAAJ,EAAmB;IAAG;IAClB,YAAI5gB,IAAAA,CAAC,GAAG,CAAR,EAAW;IACPmhB,cAAAA,WAAS,CAACmB,gBAAV,CAA2BZ,EAA3B,EAA+B,EAA/B,CAAA,CAAA;IACH,aAFD,MAEO;IACHP,cAAAA,WAAS,CAACmB,gBAAV,CAA2BZ,EAA3B,EAA+B,EAA/B,CAAA,CAAA;IACH,aAAA;IACJ,WAAA;IACJ,SAAA;IACJ,OAAA;IACJ,KAtDuB;;;IAwDxBA,IAAAA,EAAE,CAACV,OAAH,EAAA,CAxDwB;IAyDxB;;IACA,IAAA,IAAIuB,kBAAkB,GAAGb,EAAE,CAACV,OAAH,EAAzB,CAAA;;IACA,IAAIuB,IAAAA,kBAAkB,KAAK,CAA3B,EAA8B;IAC1Bb,MAAAA,EAAE,CAACV,OAAH,EAAA,CAD0B;IAE7B,KAFD,MAEO,IAAIuB,kBAAkB,KAAK,CAA3B,EAA8B;IACjCb,MAAAA,EAAE,CAACnB,QAAH,CAAY,CAAZ,EADiC;;IAEjCmB,MAAAA,EAAE,CAACR,OAAH,EAAA,CAFiC;;IAGjCQ,MAAAA,EAAE,CAACR,OAAH,EAAA,CAHiC;;IAIjC,MAAA,IAAIsB,qCAAqC,GAAGd,EAAE,CAACV,OAAH,EAA5C,CAAA;;IACA,MAAK,KAAA,IAAIhhB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwiB,qCAApB,EAA2DxiB,CAAC,EAA5D,EAAgE;IAC5D0hB,QAAAA,EAAE,CAACR,OAAH,EAAA,CAD4D;IAE/D,OAAA;IACJ,KArEuB;;;IAuExB,IAAA,IAAIuB,UAAU,GAAGf,EAAE,CAACV,OAAH,EAAjB,CAvEwB;IAwExB;;IACAU,IAAAA,EAAE,CAACnB,QAAH,CAAY,CAAZ,EAzEwB;IA0ExB;;IACA,IAAA,IAAImC,uBAAuB,GAAGhB,EAAE,CAACV,OAAH,EAA9B,CA3EwB;IA6ExB;;IACA,IAAA,IAAI2B,8BAA8B,GAAGjB,EAAE,CAACV,OAAH,EAArC,CA9EwB;IAgFxB;IACA;;IACA,IAAA,IAAI4B,mBAAmB,GAAGlB,EAAE,CAACnB,QAAH,CAAY,CAAZ,CAA1B,CAAA;;IACA,IAAIqC,IAAAA,mBAAmB,KAAK,CAA5B,EAA+B;IAC3B;IACAlB,MAAAA,EAAE,CAACnB,QAAH,CAAY,CAAZ,EAF2B;IAG9B,KAtFuB;;;IAwFxBmB,IAAAA,EAAE,CAACnB,QAAH,CAAY,CAAZ,EAxFwB;;IA0FxB,IAAIsC,IAAAA,sBAAsB,GAAG,CAA7B,CAAA;IACA,IAAIC,IAAAA,uBAAuB,GAAG,CAA9B,CAAA;IACA,IAAIC,IAAAA,qBAAqB,GAAG,CAA5B,CAAA;IACA,IAAIC,IAAAA,wBAAwB,GAAG,CAA/B,CAAA;IAEA,IAAA,IAAIC,mBAAmB,GAAGvB,EAAE,CAACd,QAAH,EAA1B,CAAA;;IACA,IAAA,IAAIqC,mBAAJ,EAAyB;IACrBJ,MAAAA,sBAAsB,GAAGnB,EAAE,CAACV,OAAH,EAAzB,CAAA;IACA8B,MAAAA,uBAAuB,GAAGpB,EAAE,CAACV,OAAH,EAA1B,CAAA;IACA+B,MAAAA,qBAAqB,GAAGrB,EAAE,CAACV,OAAH,EAAxB,CAAA;IACAgC,MAAAA,wBAAwB,GAAGtB,EAAE,CAACV,OAAH,EAA3B,CAAA;IACH,KAAA;;IAED,IAAIkC,IAAAA,SAAS,GAAG,CAAhB;IAAA,QAAmBC,UAAU,GAAG,CAAhC,CAAA;IACA,IAAI/mB,IAAAA,GAAG,GAAG,CAAV;IAAA,QAAagnB,SAAS,GAAG,IAAzB;IAAA,QAA+BC,OAAO,GAAG,CAAzC;IAAA,QAA4CC,OAAO,GAAG,CAAtD,CAxGwB;;IA0GxB,IAAA,IAAIC,2BAA2B,GAAG7B,EAAE,CAACd,QAAH,EAAlC,CAAA;;IACA,IAAA,IAAI2C,2BAAJ,EAAiC;IAC7B,MAAA,IAAI7B,EAAE,CAACd,QAAH,EAAJ,EAAmB;IAAG;IAClB,QAAA,IAAI4C,gBAAgB,GAAG9B,EAAE,CAACb,QAAH,EAAvB,CAAA;IACA,QAAA,IAAI4C,WAAW,GAAG,CAAC,CAAD,EAAI,EAAJ,EAAQ,EAAR,EAAY,EAAZ,EAAgB,EAAhB,EAAoB,EAApB,EAAwB,EAAxB,EAA4B,EAA5B,EAAgC,EAAhC,EAAoC,EAApC,EAAwC,EAAxC,EAA4C,EAA5C,EAAgD,GAAhD,EAAqD,CAArD,EAAwD,CAAxD,EAA2D,CAA3D,CAAlB,CAAA;IACA,QAAA,IAAIC,WAAW,GAAG,CAAC,CAAD,EAAI,EAAJ,EAAQ,EAAR,EAAY,EAAZ,EAAgB,EAAhB,EAAoB,EAApB,EAAwB,EAAxB,EAA4B,EAA5B,EAAgC,EAAhC,EAAoC,EAApC,EAAwC,EAAxC,EAA4C,EAA5C,EAAiD,EAAjD,EAAqD,CAArD,EAAwD,CAAxD,EAA2D,CAA3D,CAAlB,CAAA;;IAEA,QAAA,IAAIF,gBAAgB,GAAG,CAAnB,IAAwBA,gBAAgB,GAAG,EAA/C,EAAmD;IAC/CN,UAAAA,SAAS,GAAGO,WAAW,CAACD,gBAAgB,GAAG,CAApB,CAAvB,CAAA;IACAL,UAAAA,UAAU,GAAGO,WAAW,CAACF,gBAAgB,GAAG,CAApB,CAAxB,CAAA;IACH,SAHD,MAGO,IAAIA,gBAAgB,KAAK,GAAzB,EAA8B;IACjCN,UAAAA,SAAS,GAAGxB,EAAE,CAACb,QAAH,EAAiB,IAAA,CAAjB,GAAqBa,EAAE,CAACb,QAAH,EAAjC,CAAA;IACAsC,UAAAA,UAAU,GAAGzB,EAAE,CAACb,QAAH,EAAiB,IAAA,CAAjB,GAAqBa,EAAE,CAACb,QAAH,EAAlC,CAAA;IACH,SAAA;IACJ,OAAA;;IAED,MAAA,IAAIa,EAAE,CAACd,QAAH,EAAJ,EAAmB;IAAG;IAClBc,QAAAA,EAAE,CAACd,QAAH,EAAA,CADe;IAElB,OAAA;;IACD,MAAA,IAAIc,EAAE,CAACd,QAAH,EAAJ,EAAmB;IAAG;IAClBc,QAAAA,EAAE,CAACnB,QAAH,CAAY,CAAZ,EADe;;IAEf,QAAA,IAAImB,EAAE,CAACd,QAAH,EAAJ,EAAmB;IAAG;IAClBc,UAAAA,EAAE,CAACnB,QAAH,CAAY,EAAZ,EADe;IAElB,SAAA;IACJ,OAAA;;IACD,MAAA,IAAImB,EAAE,CAACd,QAAH,EAAJ,EAAmB;IAAG;IAClBc,QAAAA,EAAE,CAACV,OAAH,EAAA,CADe;;IAEfU,QAAAA,EAAE,CAACV,OAAH,EAAA,CAFe;IAGlB,OAAA;;IACD,MAAA,IAAIU,EAAE,CAACd,QAAH,EAAJ,EAAmB;IAAG;IAClB,QAAA,IAAI+C,iBAAiB,GAAGjC,EAAE,CAACnB,QAAH,CAAY,EAAZ,CAAxB,CAAA;IACA,QAAA,IAAIqD,UAAU,GAAGlC,EAAE,CAACnB,QAAH,CAAY,EAAZ,CAAjB,CAAA;IACA6C,QAAAA,SAAS,GAAG1B,EAAE,CAACd,QAAH,EAAZ,CAHe;;IAKfyC,QAAAA,OAAO,GAAGO,UAAV,CAAA;IACAN,QAAAA,OAAO,GAAGK,iBAAiB,GAAG,CAA9B,CAAA;IACAvnB,QAAAA,GAAG,GAAGinB,OAAO,GAAGC,OAAhB,CAAA;IACH,OAAA;IACJ,KAAA;;IAED,IAAIO,IAAAA,QAAQ,GAAG,CAAf,CAAA;;IACA,IAAA,IAAIX,SAAS,KAAK,CAAd,IAAmBC,UAAU,KAAK,CAAtC,EAAyC;IACrCU,MAAAA,QAAQ,GAAGX,SAAS,GAAGC,UAAvB,CAAA;IACH,KAAA;;IAED,IAAIW,IAAAA,WAAW,GAAG,CAAlB;IAAA,QAAqBC,WAAW,GAAG,CAAnC,CAAA;;IACA,IAAI9B,IAAAA,iBAAiB,KAAK,CAA1B,EAA6B;IACzB6B,MAAAA,WAAW,GAAG,CAAd,CAAA;IACAC,MAAAA,WAAW,GAAG,CAAA,GAAInB,mBAAlB,CAAA;IACH,KAHD,MAGO;IACH,MAAIoB,IAAAA,MAAM,GAAI/B,iBAAiB,KAAK,CAAvB,GAA4B,CAA5B,GAAgC,CAA7C,CAAA;IACA,MAAIgC,IAAAA,MAAM,GAAIhC,iBAAiB,KAAK,CAAvB,GAA4B,CAA5B,GAAgC,CAA7C,CAAA;IACA6B,MAAAA,WAAW,GAAGE,MAAd,CAAA;IACAD,MAAAA,WAAW,GAAGE,MAAM,IAAI,CAAA,GAAIrB,mBAAR,CAApB,CAAA;IACH,KAAA;;IAED,IAAA,IAAIsB,WAAW,GAAG,CAACxB,uBAAuB,GAAG,CAA3B,IAAgC,EAAlD,CAAA;IACA,IAAA,IAAIyB,YAAY,GAAG,CAAC,CAAA,GAAIvB,mBAAL,KAA6B,CAACD,8BAA8B,GAAG,CAAlC,IAAuC,EAApE,CAAnB,CAAA;IAEAuB,IAAAA,WAAW,IAAI,CAACrB,sBAAsB,GAAGC,uBAA1B,IAAqDgB,WAApE,CAAA;IACAK,IAAAA,YAAY,IAAI,CAACpB,qBAAqB,GAAGC,wBAAzB,IAAqDe,WAArE,CAAA;IAEA,IAAIK,IAAAA,aAAa,GAAG1uB,IAAI,CAAC2uB,IAAL,CAAUH,WAAW,GAAGL,QAAxB,CAApB,CAAA;IAEAnC,IAAAA,EAAE,CAAC3xB,OAAH,EAAA,CAAA;IACA2xB,IAAAA,EAAE,GAAG,IAAL,CA3KwB;;IA+KxB,IAAO,OAAA;IACHG,MAAAA,cAAc,EAAEA,cADb;IAC8B;IACjCE,MAAAA,YAAY,EAAEA,YAFX;IAE0B;IAC7BK,MAAAA,SAAS,EAAEA,SAHR;IAGoB;IACvBK,MAAAA,UAAU,EAAEA,UAJT;IAKHP,MAAAA,aAAa,EAAEA,aALZ;IAK4B;IAC/BoC,MAAAA,oBAAoB,EAAEnD,WAAS,CAACoD,qBAAV,CAAgCrC,aAAhC,CANnB;IAQHsC,MAAAA,UAAU,EAAE;IACRC,QAAAA,KAAK,EAAErB,SADC;IAERhnB,QAAAA,GAAG,EAAEA,GAFG;IAGRknB,QAAAA,OAAO,EAAEA,OAHD;IAIRD,QAAAA,OAAO,EAAEA,OAAAA;IAJD,OART;IAeHqB,MAAAA,SAAS,EAAE;IACPjvB,QAAAA,KAAK,EAAEytB,SADA;IAEPrtB,QAAAA,MAAM,EAAEstB,UAAAA;IAFD,OAfR;IAoBHwB,MAAAA,UAAU,EAAE;IACRlvB,QAAAA,KAAK,EAAEyuB,WADC;IAERruB,QAAAA,MAAM,EAAEsuB,YAAAA;IAFA,OApBT;IAyBHS,MAAAA,YAAY,EAAE;IACVnvB,QAAAA,KAAK,EAAE2uB,aADG;IAEVvuB,QAAAA,MAAM,EAAEsuB,YAAAA;IAFE,OAAA;IAzBX,KAAP,CAAA;IA8BH,GAAA;;IAEsB,EAAA,OAAhB7B,gBAAgB,CAACZ,EAAD,EAAKmD,KAAL,EAAY;IAC/B,IAAIC,IAAAA,UAAU,GAAG,CAAjB;IAAA,QAAoBC,UAAU,GAAG,CAAjC,CAAA;IACA,IAAIC,IAAAA,WAAW,GAAG,CAAlB,CAAA;;IACA,IAAK,KAAA,IAAIhlB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6kB,KAApB,EAA2B7kB,CAAC,EAA5B,EAAgC;IAC5B,MAAI+kB,IAAAA,UAAU,KAAK,CAAnB,EAAsB;IAClBC,QAAAA,WAAW,GAAGtD,EAAE,CAACR,OAAH,EAAd,CAAA;IACA6D,QAAAA,UAAU,GAAG,CAACD,UAAU,GAAGE,WAAb,GAA2B,GAA5B,IAAmC,GAAhD,CAAA;IACH,OAAA;;IACDF,MAAAA,UAAU,GAAIC,UAAU,KAAK,CAAhB,GAAqBD,UAArB,GAAkCC,UAA/C,CAAA;IACH,KAAA;IACJ,GAjPW;IAoPZ;IACA;IACA;IACA;;;IACuB,EAAhBjD,OAAAA,gBAAgB,CAACH,WAAD,EAAc;IACjC,IAAA,QAAQA,WAAR;IACI,MAAA,KAAK,EAAL;IACI,QAAA,OAAO,UAAP,CAAA;;IACJ,MAAA,KAAK,EAAL;IACI,QAAA,OAAO,MAAP,CAAA;;IACJ,MAAA,KAAK,EAAL;IACI,QAAA,OAAO,UAAP,CAAA;;IACJ,MAAA,KAAK,GAAL;IACI,QAAA,OAAO,MAAP,CAAA;;IACJ,MAAA,KAAK,GAAL;IACI,QAAA,OAAO,QAAP,CAAA;;IACJ,MAAA,KAAK,GAAL;IACI,QAAA,OAAO,SAAP,CAAA;;IACJ,MAAA,KAAK,GAAL;IACI,QAAA,OAAO,SAAP,CAAA;;IACJ,MAAA;IACI,QAAA,OAAO,SAAP,CAAA;IAhBR,KAAA;IAkBH,GAAA;;IAEoB,EAAdK,OAAAA,cAAc,CAACJ,SAAD,EAAY;IAC7B,IAAO,OAAA,CAACA,SAAS,GAAG,EAAb,EAAiB1lB,OAAjB,CAAyB,CAAzB,CAAP,CAAA;IACH,GAAA;;IAE2B,EAArBqoB,OAAAA,qBAAqB,CAACU,MAAD,EAAS;IACjC,IAAA,QAAQA,MAAR;IACI,MAAA,KAAK,GAAL;IACI,QAAA,OAAO,OAAP,CAAA;;IACJ,MAAA,KAAK,GAAL;IACI,QAAA,OAAO,OAAP,CAAA;;IACJ,MAAA,KAAK,GAAL;IACI,QAAA,OAAO,OAAP,CAAA;;IACJ,MAAA;IACI,QAAA,OAAO,SAAP,CAAA;IARR,KAAA;IAUH,GAAA;;IA5RW;;ICjBT,SAASC,kCAAT,CAA4CzT,WAA5C,EAAyD;IAC5D,EAAMsM,MAAAA,IAAI,GAAG,EAAb,CAAA;IACA,EAAMja,MAAAA,CAAC,GAAG,IAAIqQ,QAAJ,CAAa1C,WAAW,CAACpiB,MAAzB,CAAV,CAAA;IACA,EAAI81B,IAAAA,OAAO,GAAGrhB,CAAC,CAACsQ,QAAF,CAAW,CAAX,CAAd,CAH4D;;IAI5D,EAAIgR,IAAAA,UAAU,GAAGthB,CAAC,CAACsQ,QAAF,CAAW,CAAX,CAAjB,CAJ4D;;IAK5D,EAA2BtQ,CAAC,CAACsQ,QAAF,CAAW,CAAX,EALiC;;IAM5D,EAAetQ,CAAC,CAACsQ,QAAF,CAAW,CAAX,EAN6C;;IAQ5D,EAAA,IAAI+Q,OAAO,KAAK,CAAZ,IAAiBC,UAAU,KAAK,CAApC,EAAuC;IACnC;IAEA,IAAA,OAAA;IACH,GAAA;;IAED,EAAA,MAAMC,eAAe,GAAG,CAACvhB,CAAC,CAACsQ,QAAF,CAAW,CAAX,CAAgB,GAAA,CAAjB,IAAsB,CAA9C,CAd4D;;;IAgB5D,EAAA,IAAIiR,eAAe,KAAK,CAApB,IAAyBA,eAAe,KAAK,CAAjD,EAAoD;IAAG;IACnD;IACA,IAAA,OAAA;IACH,GAAA;;IACD,EAAIC,IAAAA,QAAQ,GAAGxhB,CAAC,CAACsQ,QAAF,CAAW,CAAX,CAAA,GAAgB,EAA/B,CApB4D;;IAsB5D,EAAIkR,IAAAA,QAAQ,KAAK,CAAjB,EAAoB;IAChB;IACA,IAAA,OAAA;IACH,GAEA;;IAED,EAAIzH,IAAAA,MAAM,GAAG,CAAb,CAAA;;IACA,EAAK,KAAA,IAAI7d,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGslB,QAApB,EAA8BtlB,CAAC,EAA/B,EAAmC;IAC/B,IAAIG,IAAAA,GAAG,GAAG2D,CAAC,CAACyhB,SAAF,CAAY1H,MAAZ,EAAoB,KAApB,CAAV,CAD+B;;IAE/BA,IAAAA,MAAM,IAAI,CAAV,CAAA;;IAEA,IAAI1d,IAAAA,GAAG,KAAK,CAAZ,EAAe;IACX,MAAA,SAAA;IACH,KAN8B;;;IAS/B,IAAA,IAAIrO,GAAG,GAAG,IAAI6F,UAAJ,CAAe8Z,WAAW,CAACpiB,MAA3B,EAAmCwuB,MAAnC,EAA2C1d,GAA3C,CAAV,CAAA;IACA0d,IAAAA,MAAM,IAAI1d,GAAV,CAV+B;IAY/B;IACA;IACA;;IACA,IAAA,IAAI4R,MAAM,GAAGoP,WAAS,CAACK,QAAV,CAAmB1vB,GAAnB,CAAb,CAAA;;IACA,IAAIkO,IAAAA,CAAC,KAAK,CAAV,EAAa;IACT;IACA,MAAA,SAAA;IACH,KAAA;;IAED+d,IAAAA,IAAI,CAACc,UAAL,GAAkB9M,MAAM,CAAC4S,UAAP,CAAkBlvB,KAApC,CAAA;IACAsoB,IAAAA,IAAI,CAACe,WAAL,GAAmB/M,MAAM,CAAC4S,UAAP,CAAkB9uB,MAArC,CAAA;IACAkoB,IAAAA,IAAI,CAACK,YAAL,GAAoBrM,MAAM,CAAC6S,YAAP,CAAoBnvB,KAAxC,CAAA;IACAsoB,IAAAA,IAAI,CAACM,aAAL,GAAqBtM,MAAM,CAAC6S,YAAP,CAAoB/uB,MAAzC,CAAA;IAEAkoB,IAAAA,IAAI,CAACyH,OAAL,GAAezT,MAAM,CAAC8P,cAAtB,CAAA;IACA9D,IAAAA,IAAI,CAAC0H,KAAL,GAAa1T,MAAM,CAACgQ,YAApB,CAAA;IACAhE,IAAAA,IAAI,CAAC2H,QAAL,GAAgB3T,MAAM,CAACqQ,SAAvB,CAAA;IACArE,IAAAA,IAAI,CAAC4H,YAAL,GAAoB5T,MAAM,CAACmQ,aAA3B,CAAA;IACAnE,IAAAA,IAAI,CAAC6H,QAAL,GAAgB7T,MAAM,CAAC2S,SAAvB,CAAA;IACA3G,IAAAA,IAAI,CAAC8H,SAAL,GAAiB9T,MAAM,CAACyS,UAAxB,CAAA;;IAEA,IAAIzS,IAAAA,MAAM,CAACyS,UAAP,CAAkBC,KAAlB,KAA4B,KAA5B,IACA1S,MAAM,CAACyS,UAAP,CAAkBnB,OAAlB,KAA8B,CAD9B,IAEAtR,MAAM,CAACyS,UAAP,CAAkBlB,OAAlB,KAA8B,CAFlC,EAEqC;IACjCvF,MAAAA,IAAI,CAAC8H,SAAL,GAAiB,EAAjB,CAAA;IACH,KAAA;;IAED,IAAA,IAAIvC,OAAO,GAAGvF,IAAI,CAAC8H,SAAL,CAAevC,OAA7B,CAAA;IACA,IAAA,IAAID,OAAO,GAAGtF,IAAI,CAAC8H,SAAL,CAAexC,OAA7B,CAAA;IAEAtF,IAAAA,IAAI,CAAC+H,iBAAL,GAAyB/H,IAAI,CAACC,SAAL,IAAkBsF,OAAO,GAAGD,OAA5B,CAAzB,CAAA;IAEA,IAAI/nB,IAAAA,UAAU,GAAGxJ,GAAG,CAACyJ,QAAJ,CAAa,CAAb,EAAgB,CAAhB,CAAjB,CAAA;IAEA,IAAIC,IAAAA,WAAW,GAAG,OAAlB,CAAA;;IACA,IAAK,KAAA,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EAA4B;IACxB,MAAIC,IAAAA,CAAC,GAAGJ,UAAU,CAACG,CAAD,CAAV,CAAcE,QAAd,CAAuB,EAAvB,CAAR,CAAA;;IACA,MAAA,IAAID,CAAC,CAAChF,MAAF,GAAW,CAAf,EAAkB;IACdgF,QAAAA,CAAC,GAAG,GAAA,GAAMA,CAAV,CAAA;IACH,OAAA;;IACDF,MAAAA,WAAW,IAAIE,CAAf,CAAA;IACH,KArD8B;;;IAuD/BqiB,IAAAA,IAAI,CAACniB,KAAL,GAAaJ,WAAb,CAAA;IACH,GAAA;;IAED,EAAIuqB,IAAAA,QAAQ,GAAGjiB,CAAC,CAACsQ,QAAF,CAAWyJ,MAAX,CAAf,CAxF4D;;IAyF5D,EAAIkI,IAAAA,QAAQ,KAAK,CAAjB,EAAoB;IAChB;IACA,IAAA,OAAA;IACH,GAEA;;IAEDlI,EAAAA,MAAM,EAAA,CAAA;;IACN,EAAK,KAAA,IAAI7d,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+lB,QAApB,EAA8B/lB,CAAC,EAA/B,EAAmC;IAC/B,IAAIG,IAAAA,GAAG,GAAG2D,CAAC,CAACyhB,SAAF,CAAY1H,MAAZ,EAAoB,KAApB,CAAV,CAD+B;;IAE/BA,IAAAA,MAAM,IAAI,CAAV,CAAA;;IAEA,IAAI1d,IAAAA,GAAG,KAAK,CAAZ,EAAe;IACX,MAAA,SAAA;IACH,KAAA;;IACD,IAAU,IAAIxI,UAAJ,CAAe8Z,WAAW,CAACpiB,MAA3B,EAAmCwuB,MAAnC,EAA2C1d,GAA3C,EAPqB;;IAU/B0d,IAAAA,MAAM,IAAI1d,GAAV,CAAA;IACH,GAAA;;IAED4d,EAAAA,IAAI,CAACQ,SAAL,GAAiB,KAAjB,CA9G4D;;IAiH5D,EAAA,OAAOR,IAAP,CAAA;IACH;;ICrHD,MAAMoD,SAAN,CAAgB;IACG,EAAA,OAARK,QAAQ,CAAC7B,UAAD,EAAa,EAE3B;;IAHW;;ICGT,SAASqG,mCAAT,CAA6CvU,WAA7C,EAA0D;IAC7D,EAAMsM,MAAAA,IAAI,GAAG,EAAb,CAAA;IACAA,EAAAA,IAAI,CAACQ,SAAL,GAAiB,MAAjB,CAAA;IACA,EAAA,IAAIV,MAAM,GAAG,EAAK,GAAA,CAAlB,CAH6D;;IAK7D,EAAA,MAAMoI,MAAM,GAAGxU,WAAW,CAACoM,MAAD,CAA1B,CAAA;;IAEA,EAAA,IAAIoI,MAAM,KAAKr0B,aAAa,CAACC,GAA7B,EAAkC;IAC9B,IAAA,OAAOksB,IAAP,CAAA;IACH,GAAA;;IAEDF,EAAAA,MAAM,IAAI,CAAV,CAAA;IACAA,EAAAA,MAAM,IAAI,CAAV,CAAA;IACA,EAAA,MAAMqI,SAAS,GAAGzU,WAAW,CAACoM,MAAM,GAAG,CAAV,CAAX,GAA2BpM,WAAW,CAACoM,MAAD,CAAX,IAAuB,CAApE,CAAA;IACAA,EAAAA,MAAM,IAAI,CAAV,CAAA;IACA,EAAMsI,MAAAA,OAAO,GAAG1U,WAAW,CAAC3R,KAAZ,CAAkB+d,MAAlB,EAA2BA,MAAM,GAAGqI,SAApC,CAAhB,CAAA;IACAlyB,EAAAA,OAAO,CAACrF,GAAR,CAAYgJ,UAAU,CAACyuB,IAAX,CAAgBD,OAAhB,CAAZ,CAAA,CAAA;IACAtI,EAAAA,MAAM,IAAIqI,SAAV,CAAA;IAEA,EAAA,MAAMG,MAAM,GAAG5U,WAAW,CAACoM,MAAD,CAA1B,CAAA;;IACA,EAAA,IAAIwI,MAAM,KAAKz0B,aAAa,CAACE,GAA7B,EAAkC;IAC9B,IAAA,OAAOisB,IAAP,CAAA;IACH,GAAA;;IACDF,EAAAA,MAAM,IAAI,CAAV,CAAA;IACAA,EAAAA,MAAM,IAAI,CAAV,CAAA;IACA,EAAA,MAAMyI,SAAS,GAAG7U,WAAW,CAACoM,MAAM,GAAG,CAAV,CAAX,GAA2BpM,WAAW,CAACoM,MAAD,CAAX,IAAuB,CAApE,CAAA;IAEAA,EAAAA,MAAM,IAAI,CAAV,CAAA;IACA,EAAM0I,MAAAA,OAAO,GAAG9U,WAAW,CAAC3R,KAAZ,CAAkB+d,MAAlB,EAA2BA,MAAM,GAAGyI,SAApC,CAAhB,CAAA;IACAtyB,EAAAA,OAAO,CAACrF,GAAR,CAAYgJ,UAAU,CAACyuB,IAAX,CAAgBG,OAAhB,CAAZ,CAAA,CAAA;IAEA1I,EAAAA,MAAM,IAAIyI,SAAV,CAAA;IAEA,EAAA,MAAME,MAAM,GAAG/U,WAAW,CAACoM,MAAD,CAA1B,CAAA;;IAEA,EAAA,IAAI2I,MAAM,KAAK50B,aAAa,CAACG,GAA7B,EAAkC;IAC9B,IAAA,OAAOgsB,IAAP,CAAA;IACH,GAAA;;IACDF,EAAAA,MAAM,IAAI,CAAV,CAAA;IACAA,EAAAA,MAAM,IAAI,CAAV,CAAA;IACA,EAAA,MAAM4I,SAAS,GAAGhV,WAAW,CAACoM,MAAM,GAAG,CAAV,CAAX,GAA2BpM,WAAW,CAACoM,MAAD,CAAX,IAAuB,CAApE,CAAA;IACAA,EAAAA,MAAM,IAAI,CAAV,CAAA;IACA,EAAM6I,MAAAA,OAAO,GAAGjV,WAAW,CAAC3R,KAAZ,CAAkB+d,MAAlB,EAA2BA,MAAM,GAAG4I,SAApC,CAAhB,CAAA;IACAzyB,EAAAA,OAAO,CAACrF,GAAR,CAAYgJ,UAAU,CAACyuB,IAAX,CAAgBM,OAAhB,CAAZ,CAAA,CAAA;IAEA,EAAA,IAAI50B,GAAG,GAAG6F,UAAU,CAACyuB,IAAX,CAAgBG,OAAhB,CAAV,CAAA;IACA,EAAA,IAAIxU,MAAM,GAAGoP,SAAS,CAACK,QAAV,CAAmB1vB,GAAnB,CAAb,CAAA;IAEAisB,EAAAA,IAAI,CAACc,UAAL,GAAkB9M,MAAM,CAAC4S,UAAP,CAAkBlvB,KAApC,CAAA;IACAsoB,EAAAA,IAAI,CAACe,WAAL,GAAmB/M,MAAM,CAAC4S,UAAP,CAAkB9uB,MAArC,CAAA;IAEAkoB,EAAAA,IAAI,CAACK,YAAL,GAAoBrM,MAAM,CAAC6S,YAAP,CAAoBnvB,KAAxC,CAAA;IACAsoB,EAAAA,IAAI,CAACM,aAAL,GAAqBtM,MAAM,CAAC6S,YAAP,CAAoB/uB,MAAzC,CAAA;IAEAkoB,EAAAA,IAAI,CAACyH,OAAL,GAAezT,MAAM,CAAC8P,cAAtB,CAAA;IACA9D,EAAAA,IAAI,CAAC0H,KAAL,GAAa1T,MAAM,CAACgQ,YAApB,CAAA;IACAhE,EAAAA,IAAI,CAAC2H,QAAL,GAAgB3T,MAAM,CAACqQ,SAAvB,CAAA;IACArE,EAAAA,IAAI,CAAC4H,YAAL,GAAoB5T,MAAM,CAACmQ,aAA3B,CAAA;IACAnE,EAAAA,IAAI,CAAC6H,QAAL,GAAgB7T,MAAM,CAAC2S,SAAvB,CAAA;IAEA,EAAA,OAAO3G,IAAP,CAAA;IACH;;ICzDc,MAAM4I,UAAN,SAAyBtnB,OAAzB,CAAiC;IAC5C1L,EAAAA,WAAW,CAACuB,MAAD,EAAS;IAChB,IAAA,KAAA,EAAA,CAAA;IACA,IAAKA,IAAAA,CAAAA,MAAL,GAAcA,MAAd,CAAA;IACA,IAAK0xB,IAAAA,CAAAA,KAAL,GAAa,IAAb,CAAA;IACA,IAAA,IAAA,CAAKC,WAAL,GAAmB,IAAIjsB,MAAM,CAAC8B,WAAX,EAAnB,CAAA;IACA,IAAKoqB,IAAAA,CAAAA,YAAL,GAAoB,IAApB,CAAA;IACA,IAAKrS,IAAAA,CAAAA,OAAL,GAAe,KAAf,CAAA;IACA,IAAKC,IAAAA,CAAAA,UAAL,GAAkB,KAAlB,CAAA;IACA,IAAKqS,IAAAA,CAAAA,UAAL,GAAkB,EAAlB,CAAA;IACA,IAAKC,IAAAA,CAAAA,QAAL,GAAgB,KAAhB,CAAA;IACA,IAAK/H,IAAAA,CAAAA,cAAL,GAAsB,CAAtB,CAAA;IACA,IAAKgI,IAAAA,CAAAA,eAAL,GAAuB,KAAvB,CAAA;IACA,IAAK1d,IAAAA,CAAAA,UAAL,GAAkB,EAAlB,CAAA;IACA,IAAK4I,IAAAA,CAAAA,QAAL,GAAgB,KAAhB,CAAA;IACA,IAAA,IAAA,CAAKjd,MAAL,CAAYzH,KAAZ,CAAkB2X,aAAlB,CAAgCqD,GAAhC,GAAsC7N,MAAM,CAACvC,GAAP,CAAWC,eAAX,CAA2B,IAAA,CAAKuuB,WAAhC,CAAtC,CAAA;IACA,IAAM,MAAA;IACFz8B,MAAAA,KADE;IAEFqU,MAAAA,MAAM,EAAE;IAACrK,QAAAA,KAAAA;IAAD,OAAA;IAFN,KAAA,GAGFc,MAHJ,CAAA;IAMAd,IAAAA,KAAK,CAAC,IAAA,CAAKyyB,WAAN,EAAmB,YAAnB,EAAiC,MAAM;IACxC,MAAKI,IAAAA,CAAAA,eAAL,GAAuB,IAAvB,CAAA;IACA,MAAA,IAAA,CAAK/xB,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAACgC,aAAxB,CAAA,CAAA;IACH,KAHI,CAAL,CAAA;IAKAoE,IAAAA,KAAK,CAAC,IAAA,CAAKyyB,WAAN,EAAmB,aAAnB,EAAkC,MAAM;IACzC,MAAA,IAAA,CAAK3xB,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAACiC,cAAxB,CAAA,CAAA;IACH,KAFI,CAAL,CAAA;IAIAiF,IAAAA,MAAM,CAAC9K,KAAP,CAAauE,GAAb,CAAiB,aAAjB,EAAgC,MAAhC,CAAA,CAAA;IACH,GAAA;;IAEDoB,EAAAA,OAAO,GAAG;IACN,IAAA,IAAA,CAAKm3B,IAAL,EAAA,CAAA;IACA,IAAK3d,IAAAA,CAAAA,UAAL,GAAkB,EAAlB,CAAA;IACA,IAAKsd,IAAAA,CAAAA,WAAL,GAAmB,IAAnB,CAAA;IACA,IAAKI,IAAAA,CAAAA,eAAL,GAAuB,KAAvB,CAAA;IACA,IAAKH,IAAAA,CAAAA,YAAL,GAAoB,IAApB,CAAA;IACA,IAAKrS,IAAAA,CAAAA,OAAL,GAAe,KAAf,CAAA;IACA,IAAKC,IAAAA,CAAAA,UAAL,GAAkB,KAAlB,CAAA;IACA,IAAKuK,IAAAA,CAAAA,cAAL,GAAsB,CAAtB,CAAA;IACA,IAAK8H,IAAAA,CAAAA,UAAL,GAAkB,IAAlB,CAAA;IACA,IAAKC,IAAAA,CAAAA,QAAL,GAAgB,KAAhB,CAAA;IACA,IAAA,IAAA,CAAKtoB,GAAL,EAAA,CAAA;IACA,IAAKxJ,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,aAAtB,EAAqC,SAArC,CAAA,CAAA;IACH,GAAA;;IAEQ,EAAA,IAAL4d,KAAK,GAAG;IACR,IAAO,OAAA,IAAA,CAAKsa,WAAL,CAAiBM,UAAxB,CAAA;IACH,GAAA;;IAEc,EAAA,IAAXC,WAAW,GAAG;IACd,IAAA,OAAO,IAAK7a,CAAAA,KAAL,KAAerZ,kBAAkB,CAAChC,IAAzC,CAAA;IACH,GAAA;;IAEgB,EAAA,IAAbm2B,aAAa,GAAG;IAChB,IAAA,OAAO,IAAK9a,CAAAA,KAAL,KAAerZ,kBAAkB,CAACE,MAAzC,CAAA;IACH,GAAA;;IAEe,EAAA,IAAZk0B,YAAY,GAAG;IACf,IAAA,OAAO,IAAK/a,CAAAA,KAAL,KAAerZ,kBAAkB,CAACC,KAAzC,CAAA;IACH,GAAA;;IAEW,EAAA,IAAR8qB,QAAQ,GAAG;IACX,IAAO,OAAA,IAAA,CAAK4I,WAAL,CAAiB5I,QAAxB,CAAA;IACH,GAAA;;IAEW,EAARA,IAAAA,QAAQ,CAACA,QAAD,EAAW;IACnB,IAAA,IAAA,CAAK4I,WAAL,CAAiB5I,QAAjB,GAA4BA,QAA5B,CAAA;IACH,GAAA;;IAEDzM,EAAAA,WAAW,CAACgB,OAAD,EAAUnM,EAAV,EAAciO,QAAd,EAAwB;IAC/B,IAAMpf,MAAAA,MAAM,GAAG,IAAA,CAAKA,MAApB,CAAA;;IAEA,IAAI,IAAA,CAAC,IAAKuf,CAAAA,OAAV,EAAmB;IACf,MAAIH,IAAAA,QAAQ,IAAI9B,OAAO,CAAC,CAAD,CAAP,KAAe,CAA/B,EAAkC;IAC9B,QAAA,MAAM0C,UAAU,GAAI1C,OAAO,CAAC,CAAD,CAAP,GAAa,IAAjC,CAAA;IACAtd,QAAAA,MAAM,CAACzH,KAAP,CAAaoX,eAAb,CAA6B;IACzBC,UAAAA,WAAW,EAAEoQ,UAAAA;IADY,SAA7B,EAF8B;;IAO9B,QAAA,IAAIA,UAAU,KAAK1jB,cAAc,CAACE,IAAlC,EAAwC;IACpC,UAAA,IAAA,CAAK4M,IAAL,CAAU7N,YAAY,CAACK,yBAAvB,CAAA,CAAA;IACA,UAAA,OAAA;IACH,SAAA;;IACD,QAAA,IAAI,CAACoE,MAAM,CAACkY,MAAP,CAAc9P,WAAnB,EAAgC;IAC5BpI,UAAAA,MAAM,CAACkY,MAAP,CAAc9P,WAAd,GAA4B3E,GAAG,EAA/B,CAAA;IACH,SAAA;;IAED,QAAK4uB,IAAAA,CAAAA,0BAAL,CAAgC/U,OAAhC,EAAyCnM,EAAzC,EAA6CiO,QAA7C,EAAuDY,UAAvD,CAAA,CAAA;;IACA,QAAKT,IAAAA,CAAAA,OAAL,GAAe,IAAf,CAAA;IACH,OAAA;IACJ,KAnBD,MAmBO;IACH,MAAA,IAAA,CAAK+S,YAAL,CAAkBhV,OAAlB,EAA2BnM,EAA3B,EAA+BiO,QAA/B,CAAA,CAAA;IACH,KAAA;IACJ,GAAA;;IAED5B,EAAAA,SAAS,GAAG;IACR,IAAA,MAAM/G,UAAU,GAAG,IAAA,CAAKpC,UAAL,CAAgBqC,KAAhB,EAAnB,CAAA;;IACA,IAAA,IAAID,UAAJ,EAAgB;IACZ,MAAA,IAAA,CAAK6b,YAAL,CAAkB7b,UAAU,CAAC6G,OAA7B,EAAsC7G,UAAU,CAACtF,EAAjD,EAAqDsF,UAAU,CAAC2I,QAAhE,CAAA,CAAA;IACH,KAAA;IACJ,GAAA;;IAGDiT,EAAAA,0BAA0B,CAAC/U,OAAD,EAAUnM,EAAV,EAAciO,QAAd,EAAwBY,UAAxB,EAAoC;IAC1D,IAAA,IAAInV,IAAI,GAAGyS,OAAO,CAAC1S,KAAR,CAAc,CAAd,CAAX,CAAA;IACA,IAAIiS,IAAAA,MAAM,GAAG,EAAb,CAAA;;IAEA,IAAA,IAAImD,UAAU,KAAK1jB,cAAc,CAACC,IAAlC,EAAwC;IACpCsgB,MAAAA,MAAM,GAAGmT,kCAAkC,CAACnlB,IAAD,CAA3C,CAAA;IACH,KAFD,MAEO,IAAImV,UAAU,KAAK1jB,cAAc,CAACE,IAAlC,EAAwC;IAC3CqgB,MAAAA,MAAM,GAAGiU,mCAAmC,CAACjmB,IAAD,CAA5C,CAAA;IACH,KAAA;;IACD,IAAA,MAAM0nB,QAAQ,GAAG;IACbtJ,MAAAA,EAAE,EAAE,CADS;IACN;IACP5mB,MAAAA,IAAI,EAAE,OAFO;IAGbymB,MAAAA,SAAS,EAAE,IAHE;IAIbC,MAAAA,QAAQ,EAAE,CAJG;IAKbW,MAAAA,IAAI,EAAE7e,IALO;IAMb8e,MAAAA,UAAU,EAAE9M,MAAM,CAAC8M,UANN;IAObC,MAAAA,WAAW,EAAE/M,MAAM,CAAC+M,WAPP;IAQbP,MAAAA,SAAS,EAAExM,MAAM,CAACwM,SAAAA;IARL,KAAjB,CAT0D;;IAoB1D,IAAA,MAAMmJ,OAAO,GAAGrN,KAAG,CAACyD,mBAAJ,CAAwB2J,QAAxB,CAAhB,CAAA;IACA,IAAKb,IAAAA,CAAAA,KAAL,GAAa,IAAb,CAAA;IACA,IAAA,IAAA,CAAKe,YAAL,CAAkBD,OAAO,CAACr4B,MAA1B,CAAA,CAAA;IACA,IAAK4vB,IAAAA,CAAAA,cAAL,GAAsB,CAAtB,CAAA;IACA,IAAK8H,IAAAA,CAAAA,UAAL,GAAkB,IAAlB,CAAA;IACA,IAAKC,IAAAA,CAAAA,QAAL,GAAgB,KAAhB,CAAA;IACH,GAtI2C;;;IAyI5CQ,EAAAA,YAAY,CAAChV,OAAD,EAAUnM,EAAV,EAAciO,QAAd,EAAwB;IAChC,IAAMpf,MAAAA,MAAM,GAAG,IAAA,CAAKA,MAApB,CAAA;IACA,IAAA,IAAIuc,WAAW,GAAGe,OAAO,CAAC1S,KAAR,CAAc,CAAd,CAAlB,CAAA;IACA,IAAA,IAAI8nB,KAAK,GAAGnW,WAAW,CAAC5D,UAAxB,CAAA;IACA,IAAI2R,IAAAA,GAAG,GAAG,CAAV,CAAA;IACA,IAAA,IAAIqI,GAAG,GAAGxhB,EAAV,CALgC;;IAOhC,IAAA,MAAMqC,MAAM,GAAGxT,MAAM,CAACzH,KAAP,CAAa2X,aAA5B,CAAA;;IAEA,IAAA,IAAIsD,MAAM,CAACof,QAAP,CAAgBpxB,MAAhB,GAAyB,CAA7B,EAAgC;IAC5B,MAAA,IAAA,CAAKqxB,YAAL,CAAkBrf,MAAM,CAACof,QAAP,CAAgBv4B,KAAhB,CAAsB,CAAtB,CAAlB,EAA4CmZ,MAAM,CAACof,QAAP,CAAgBE,GAAhB,CAAoB,CAApB,CAA5C,CAAA,CAAA;IACA,MAAKhB,IAAAA,CAAAA,QAAL,GAAgB,KAAhB,CAAA;IACH,KAAA;;IACD,IAAI,IAAA,IAAA,CAAK7U,QAAL,IAAiB0V,GAAG,GAAG,IAAKd,CAAAA,UAAL,CAAgBc,GAAtB,GAA4B,IAAjD,EAAuD;IACnD,MAAK1V,IAAAA,CAAAA,QAAL,GAAgB,KAAhB,CAAA;IACA,MAAK4U,IAAAA,CAAAA,UAAL,GAAkB,EAAlB,CAAA;IACH,KAHD,MAGO,IAAI,IAAA,CAAKA,UAAL,IAAmBc,GAAG,GAAG,IAAKd,CAAAA,UAAL,CAAgBc,GAA7C,EAAkD;IACrD;IACA,MAAA,IAAII,SAAS,GAAG,CAAA,GAAI,IAAKlB,CAAAA,UAAL,CAAgBxsB,IAApC,CAAA;IACA,MAAA,IAAI2tB,OAAO,GAAG,IAAIvwB,UAAJ,CAAeswB,SAAf,CAAd,CAAA;IACAC,MAAAA,OAAO,CAAC,CAAD,CAAP,GAAaD,SAAS,KAAK,EAAd,GAAmB,GAAhC,CAAA;IACAC,MAAAA,OAAO,CAAC,CAAD,CAAP,GAAaD,SAAS,KAAK,EAAd,GAAmB,GAAhC,CAAA;IACAC,MAAAA,OAAO,CAAC,CAAD,CAAP,GAAaD,SAAS,KAAK,CAAd,GAAkB,GAA/B,CAAA;IACAC,MAAAA,OAAO,CAAC,CAAD,CAAP,GAAaD,SAAS,GAAG,GAAzB,CAAA;IACAC,MAAAA,OAAO,CAACpU,GAAR,CAAYuG,KAAG,CAACC,KAAJ,CAAUU,IAAtB,EAA4B,CAA5B,CAAA,CAAA;IACAkN,MAAAA,OAAO,CAACpU,GAAR,CAAY,KAAKiT,UAAL,CAAgBhnB,IAA5B,EAAkC,CAAlC,CAAA,CAAA;IAEA,MAAKgnB,IAAAA,CAAAA,UAAL,CAAgB9I,QAAhB,GAA2B4J,GAAG,GAAG,IAAA,CAAKd,UAAL,CAAgBc,GAAjD,CAXqD;;IAarD,MAAA,IAAIM,OAAO,GAAG9N,KAAG,CAACgB,IAAJ,CAAS,IAAK0L,CAAAA,UAAd,EAA0B,IAAA,CAAKA,UAAL,CAAgBc,GAA1C,CAAd,CAAA;IACA,MAAA,IAAIxrB,MAAM,GAAG,IAAI1E,UAAJ,CAAewwB,OAAO,CAACta,UAAR,GAAqBqa,OAAO,CAACra,UAA5C,CAAb,CAAA;IACAxR,MAAAA,MAAM,CAACyX,GAAP,CAAWqU,OAAX,EAAoB,CAApB,CAAA,CAAA;IACA9rB,MAAAA,MAAM,CAACyX,GAAP,CAAWoU,OAAX,EAAoBC,OAAO,CAACta,UAA5B,CAAA,CAhBqD;;IAkBrD,MAAA,IAAA,CAAK8Z,YAAL,CAAkBtrB,MAAM,CAAChN,MAAzB,CAAA,CAAA;IACA6F,MAAAA,MAAM,CAAC8b,YAAP,EAAA,CAAA;IACA9b,MAAAA,MAAM,CAAC+b,WAAP,CAAmB;IAAC7U,QAAAA,GAAG,EAAE,IAAN;IAAYiK,QAAAA,EAAE,EAAEA,EAAhB;IAAoB6K,QAAAA,GAAG,EAAEhc,MAAM,CAACiY,KAAP,CAAagE,KAAAA;IAAtC,OAAnB,CAAA,CAAA;;IACA,MAAA,IAAI,CAACjc,MAAM,CAACkY,MAAP,CAAc7P,UAAnB,EAA+B;IAC3BrI,QAAAA,MAAM,CAACkY,MAAP,CAAc7P,UAAd,GAA2B5E,GAAG,EAA9B,CAAA;IACAzD,QAAAA,MAAM,CAACkc,uBAAP,EAAA,CAAA;IACH,OAAA;IACJ,KAzBM,MAyBA;IACHlc,MAAAA,MAAM,CAAC9K,KAAP,CAAauE,GAAb,CAAiB,aAAjB,EAAgC,sCAAhC,CAAA,CAAA;IACA,MAAKq4B,IAAAA,CAAAA,QAAL,GAAgB,KAAhB,CAAA;IACA,MAAKD,IAAAA,CAAAA,UAAL,GAAkB,EAAlB,CAAA;IACH,KAAA;;IAED,IAAA,IAAA,CAAKA,UAAL,CAAgB5I,EAAhB,GAAqB,CAArB,CAAA;IACA,IAAA,IAAA,CAAK4I,UAAL,CAAgB9H,cAAhB,GAAiC,EAAE,KAAKA,cAAxC,CAAA;IACA,IAAA,IAAA,CAAK8H,UAAL,CAAgBxsB,IAAhB,GAAuBqtB,KAAvB,CAAA;IACA,IAAA,IAAA,CAAKb,UAAL,CAAgBc,GAAhB,GAAsBA,GAAtB,CAAA;IACA,IAAA,IAAA,CAAKd,UAAL,CAAgBvH,GAAhB,GAAsBA,GAAtB,CAAA;IACA,IAAA,IAAA,CAAKuH,UAAL,CAAgBqB,UAAhB,GAA6B9T,QAA7B,CAAA;IACA,IAAA,IAAA,CAAKyS,UAAL,CAAgBhnB,IAAhB,GAAuB0R,WAAvB,CArDgC;;IAuDhC,IAAKsV,IAAAA,CAAAA,UAAL,CAAgB7H,KAAhB,GAAwB;IACpBC,MAAAA,SAAS,EAAE,CADS;IAEpBC,MAAAA,SAAS,EAAE9K,QAAQ,GAAG,CAAH,GAAO,CAFN;IAGpB+K,MAAAA,YAAY,EAAE/K,QAAQ,GAAG,CAAH,GAAO,CAHT;IAIpBgL,MAAAA,aAAa,EAAE,CAJK;IAKpBG,MAAAA,SAAS,EAAEnL,QAAQ,GAAG,CAAH,GAAO,CAAA;IALN,KAAxB,CAvDgC;;IAgEhC,IAAI,IAAA,CAAC,IAAK0S,CAAAA,QAAN,IAAkBte,MAAM,CAACof,QAAP,CAAgBpxB,MAAhB,KAA2B,CAAjD,EAAoD;IAChDxB,MAAAA,MAAM,CAAC9K,KAAP,CAAauE,GAAb,CAAiB,aAAjB,EAAgC,mBAAhC,CAAA,CAAA;IACA,MAAKq4B,IAAAA,CAAAA,QAAL,GAAgB,IAAhB,CAAA;IACAte,MAAAA,MAAM,CAAC2D,WAAP,GAAqB3D,MAAM,CAACof,QAAP,CAAgBE,GAAhB,CAAoB,CAApB,CAArB,CAAA;IACH,KAAA;;IAED,IAAA,IAAI,CAAC,IAAA,CAAKtT,UAAN,IAAoBhM,MAAM,CAACE,UAAP,GAAoB,CAAxC,IAA6CF,MAAM,CAACG,WAAP,GAAqB,CAAtE,EAAyE;IACrE3T,MAAAA,MAAM,CAAC9K,KAAP,CAAauE,GAAb,CAAiB,aAAjB,EAAiC,CAAmB+Z,iBAAAA,EAAAA,MAAM,CAACE,UAAW,CAAA,CAAA,EAAGF,MAAM,CAACG,WAAY,CAA5F,CAAA,CAAA,CAAA;IACA3T,MAAAA,MAAM,CAACzH,KAAP,CAAaoX,eAAb,CAA6B;IACzBpP,QAAAA,KAAK,EAAEiT,MAAM,CAACE,UADW;IAEzB/S,QAAAA,MAAM,EAAE6S,MAAM,CAACG,WAAAA;IAFU,OAA7B,CAAA,CAAA;IAIA3T,MAAAA,MAAM,CAACzH,KAAP,CAAa0Y,kBAAb,EAAA,CAAA;IACA,MAAKuO,IAAAA,CAAAA,UAAL,GAAkB,IAAlB,CAAA;IACH,KAAA;IACJ,GAAA;;IAEDiT,EAAAA,YAAY,CAACt4B,MAAD,EAAS;IACjB,IAAM,MAAA;IACFjF,MAAAA,KADE;IAEFqU,MAAAA,MAAM,EAAE;IAACrK,QAAAA,KAAAA;IAAD,OAAA;IAFN,KAAA,GAGF,KAAKc,MAHT,CAAA;;IAKA,IAAA,IAAI,IAAK4xB,CAAAA,YAAL,KAAsB,IAA1B,EAAgC;IAC5B,MAAKA,IAAAA,CAAAA,YAAL,GAAoB,IAAA,CAAKD,WAAL,CAAiBwB,eAAjB,CAAiCt1B,UAAU,CAACC,GAA5C,CAApB,CAAA;IACAoB,MAAAA,KAAK,CAAC,IAAK0yB,CAAAA,YAAN,EAAoB,OAApB,EAA8Bl4B,KAAD,IAAW;IACzC,QAAKsG,IAAAA,CAAAA,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAACkC,oBAAxB,EAA8CtB,KAA9C,CAAA,CADyC;IAG5C,OAHI,CAAL,CAAA;IAIH,KAAA;;IAED,IAAI,IAAA,IAAA,CAAKk4B,YAAL,CAAkBwB,QAAlB,KAA+B,KAA/B,IAAwC,IAAKlB,CAAAA,WAAjD,EAA8D;IAC1D,MAAA,IAAA,CAAKN,YAAL,CAAkBa,YAAlB,CAA+Bt4B,MAA/B,CAAA,CAAA;IACA,MAAA,OAAA;IACH,KAAA;;IAED,IAAI,IAAA,IAAA,CAAKg4B,aAAT,EAAwB;IACpB,MAAKnyB,IAAAA,CAAAA,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAACkC,oBAAxB,EAA8C,+DAA9C,CAAA,CAAA;IACH,KAFD,MAEO,IAAI,IAAKo3B,CAAAA,YAAT,EAAuB;IAC1B,MAAKpyB,IAAAA,CAAAA,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAACkC,oBAAxB,EAA8C,uBAA9C,CAAA,CAAA;IACH,KAFM,MAEA;IACH,MAAA,IAAI,KAAK42B,YAAL,CAAkBwB,QAAlB,KAA+B,IAAnC,EAAyC;IACrC,QAAKpzB,IAAAA,CAAAA,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAACmC,mBAAxB,EADqC;IAGxC,OAAA;IACJ,KAAA;IACJ,GAAA;;IAED+2B,EAAAA,IAAI,GAAG;IACH,IAAI,IAAA,IAAA,CAAKE,WAAT,EAAsB;IAClB,MAAI,IAAA,IAAA,CAAKN,YAAT,EAAuB;IACnB,QAAKA,IAAAA,CAAAA,YAAL,CAAkB7Z,KAAlB,EAAA,CAAA;IACH,OAAA;IACJ,KAAA;;IACD,IAAA,IAAA,CAAKsb,WAAL,EAAA,CAAA;IACH,GAAA;;IAEDC,EAAAA,gBAAgB,CAACvc,IAAD,EAAO;IACnB,IAAA,MAAMxe,KAAK,GAAG,IAAKyH,CAAAA,MAAL,CAAYzH,KAA1B,CAAA;IACA,IAAA,MAAMib,MAAM,GAAGjb,KAAK,CAAC2X,aAArB,CAAA;IACA,IAAK+M,IAAAA,CAAAA,QAAL,GAAgBlG,IAAhB,CAAA;;IACA,IAAA,IAAIvD,MAAM,CAACof,QAAP,CAAgBpxB,MAAhB,GAAyB,CAA7B,EAAgC;IAC5B,MAAA,IAAIgS,MAAM,CAACof,QAAP,CAAgBE,GAAhB,CAAoB,CAApB,CAAA,GAAyBtf,MAAM,CAAC2D,WAAhC,GAA8C,CAAlD,EAAqD;IACjD3D,QAAAA,MAAM,CAAC2D,WAAP,GAAqB3D,MAAM,CAACof,QAAP,CAAgBE,GAAhB,CAAoB,CAApB,CAArB,CAAA;IACH,OAAA;IACJ,KAAA;IACJ,GAAA;;IAGDD,EAAAA,YAAY,CAACx4B,KAAD,EAAQy4B,GAAR,EAAa;IAErB,IAAI,IAAA,IAAA,CAAKZ,WAAL,IAAoB,IAAA,CAAKN,YAAL,CAAkBwB,QAAlB,KAA+B,KAAvD,EAA8D;IAC1D,MAAI,IAAA;IACA,QAAA,IAAA,CAAKxB,YAAL,CAAkB5nB,MAAlB,CAAyB3P,KAAzB,EAAgCy4B,GAAhC,CAAA,CAAA;IACH,OAFD,CAEE,OAAOjxB,CAAP,EAAU;IACR/C,QAAAA,OAAO,CAACpF,KAAR,CAAcmI,CAAd,CAAA,CAAA;IACH,OAAA;IACJ,KAAA;IACJ,GAAA;;IAEDwxB,EAAAA,WAAW,GAAG;IACV,IAAI,IAAA,IAAA,CAAKnB,WAAT,EAAsB;IAClB,MAAKP,IAAAA,CAAAA,WAAL,CAAiB0B,WAAjB,EAAA,CAAA;IACH,KAAA;IACJ,GAAA;;IA7R2C;;ICPhD;IAEA,MAAME,IAAI,GAAG,qyOAAb,CAAA;IACA,MAAMpO,GAAG,GAAG,o6JAAZ;;IAIA,MACIqO,MAAM,GAAG,MACL,OAAO3tB,SAAP,KAAqB,WAArB,IACAb,UAAU,CACN,CACI,EACA,GAAA,CAAC,oEAAoEyuB,IAApE,CACG5tB,SAAS,CAACC,SADb,CAAA,IAEI,CAAC,CAAD,EAAI,EAAJ,CAFL,EAEc,CAFd,CAFJ,EAMKxD,OANL,CAMa,WANb,EAM0B,KAN1B,CAAA,CAOKA,OAPL,CAOa,GAPb,EAOkB,GAPlB,CAAA,CAQKA,OARL,CAQa,GARb,EAQkB,EARlB,CADM,CAAV,GAUI,EAXJ,IAYA,CAACoD,MAAM,CAACguB,QAdhB;;;IAiBA,MAAMC,cAAc,GAAG,MAAM,UAAA,IAAc9tB,SAA3C,CAAA;;IAEe,MAAM+tB,OAAN,CAAc;IACzBn1B,EAAAA,WAAW,CAACuB,MAAD,EAAS;IAChB,IAAKA,IAAAA,CAAAA,MAAL,GAAcA,MAAd,CAAA;IACA,IAAKya,IAAAA,CAAAA,OAAL,GAAe,KAAf,CAAA;;IACA,IAAIkZ,IAAAA,cAAc,EAAlB,EAAsB;IAClB,MAAKE,IAAAA,CAAAA,SAAL,GAAiB,IAAjB,CAAA;;IACA,MAAMC,MAAAA,sBAAsB,GAAG,MAAM;IACjC,QAAI,IAAA,IAAA,CAAKD,SAAL,KAAmB,IAAnB,IAA2B7wB,QAAQ,CAACgiB,eAAT,KAA6B,SAA5D,EAAuE;IACnE,UAAA,IAAA,CAAK+O,MAAL,EAAA,CAAA;IACH,SAAA;IACJ,OAJD,CAAA;;IAKA/wB,MAAAA,QAAQ,CAACrD,gBAAT,CAA0B,kBAA1B,EAA8Cm0B,sBAA9C,CAAA,CAAA;IACA9wB,MAAAA,QAAQ,CAACrD,gBAAT,CAA0B,kBAA1B,EAA8Cm0B,sBAA9C,CAAA,CAAA;IACH,KATD,MASO,IAAIN,MAAM,EAAV,EAAc;IACjB,MAAKQ,IAAAA,CAAAA,YAAL,GAAoB,IAApB,CAAA;IACH,KAFM,MAEA;IACH;IACA,MAAA,IAAA,CAAKC,YAAL,GAAoBjxB,QAAQ,CAACC,aAAT,CAAuB,OAAvB,CAApB,CAAA;IAEA,MAAA,IAAA,CAAKgxB,YAAL,CAAkBpT,YAAlB,CAA+B,OAA/B,EAAwC,UAAxC,CAAA,CAAA;IACA,MAAA,IAAA,CAAKoT,YAAL,CAAkBpT,YAAlB,CAA+B,aAA/B,EAA8C,EAA9C,CAAA,CAAA;;IAEA,MAAA,IAAA,CAAKqT,iBAAL,CAAuB,IAAA,CAAKD,YAA5B,EAA0C,MAA1C,EAAkDV,IAAlD,CAAA,CAAA;;IACA,MAAA,IAAA,CAAKW,iBAAL,CAAuB,IAAA,CAAKD,YAA5B,EAA0C,KAA1C,EAAiD9O,GAAjD,CAAA,CAAA;;IAEA,MAAA,IAAA,CAAK8O,YAAL,CAAkBt0B,gBAAlB,CAAmC,gBAAnC,EAAqD,MAAM;IACvD,QAAA,IAAI,KAAKs0B,YAAL,CAAkBlL,QAAlB,IAA8B,CAAlC,EAAqC;IACjC;IACA,UAAA,IAAA,CAAKkL,YAAL,CAAkBpT,YAAlB,CAA+B,MAA/B,EAAuC,EAAvC,CAAA,CAAA;IACH,SAHD,MAGO;IACH;IACA,UAAA,IAAA,CAAKoT,YAAL,CAAkBt0B,gBAAlB,CAAmC,YAAnC,EAAiD,MAAM;IACnD,YAAA,IAAI,KAAKs0B,YAAL,CAAkB9c,WAAlB,GAAgC,GAApC,EAAyC;IACrC,cAAA,IAAA,CAAK8c,YAAL,CAAkB9c,WAAlB,GAAgC3W,IAAI,CAAC2zB,MAAL,EAAhC,CAAA;IACH,aAAA;IACJ,WAJD,CAAA,CAAA;IAKH,SAAA;IACJ,OAZD,CAAA,CAAA;IAaH,KAAA;IACJ,GAAA;;IAEDD,EAAAA,iBAAiB,CAAC1vB,OAAD,EAAUnC,IAAV,EAAgB+xB,OAAhB,EAAyB;IACtC,IAAA,IAAItf,MAAM,GAAG9R,QAAQ,CAACC,aAAT,CAAuB,QAAvB,CAAb,CAAA;IACA6R,IAAAA,MAAM,CAACvB,GAAP,GAAa6gB,OAAb,CAAA;IACAtf,IAAAA,MAAM,CAACzS,IAAP,GAAe,CAAA,MAAA,EAAQA,IAAK,CAA5B,CAAA,CAAA;IACAmC,IAAAA,OAAO,CAAC2L,WAAR,CAAoB2E,MAApB,CAAA,CAAA;IACH,GAAA;;IAEY,EAAA,IAATuf,SAAS,GAAG;IACZ,IAAA,OAAO,KAAK5Z,OAAZ,CAAA;IACH,GAAA;;IAEDsZ,EAAAA,MAAM,GAAG;IACL,IAAA,MAAM7+B,KAAK,GAAG,IAAK8K,CAAAA,MAAL,CAAY9K,KAA1B,CAAA;;IACA,IAAIy+B,IAAAA,cAAc,EAAlB,EAAsB;IAClB,MAAO9tB,OAAAA,SAAS,CAACyuB,QAAV,CACF5qB,OADE,CACM,QADN,CAEFC,CAAAA,IAFE,CAEI2qB,QAAD,IAAc;IAChB,QAAKT,IAAAA,CAAAA,SAAL,GAAiBS,QAAjB,CAAA;IACA,QAAK7Z,IAAAA,CAAAA,OAAL,GAAe,IAAf,CAAA;IACAvlB,QAAAA,KAAK,CAACuE,GAAN,CAAU,UAAV,EAAsB,mBAAtB,CAAA,CAAA;;IACA,QAAA,IAAA,CAAKo6B,SAAL,CAAel0B,gBAAf,CAAgC,SAAhC,EAA2C,MAAM;IAC7C;IACA;IACA;IACAzK,UAAAA,KAAK,CAACuE,GAAN,CAAU,UAAV,EAAsB,qBAAtB,CAAA,CAAA;IACH,SALD,CAAA,CAAA;IAMH,OAZE,CAaFmQ,CAAAA,KAbE,CAaK2qB,GAAD,IAAS;IACZ,QAAK9Z,IAAAA,CAAAA,OAAL,GAAe,KAAf,CAAA;IACAvlB,QAAAA,KAAK,CAACwE,KAAN,CAAY,UAAZ,EAAyB,CAAA,EAAE66B,GAAG,CAAC51B,IAAK,CAAA,EAAA,EAAI41B,GAAG,CAAClb,OAAQ,CAApD,CAAA,CAAA,CAAA;IACA,QAAA,MAAMkb,GAAN,CAAA;IACH,OAjBE,CAAP,CAAA;IAkBH,KAnBD,MAmBO,IAAIf,MAAM,EAAV,EAAc;IACjB,MAAA,IAAA,CAAKgB,OAAL,EAAA,CAAA;IACA,MAAA,IAAA,CAAKR,YAAL,GAAoBtuB,MAAM,CAACoV,WAAP,CAAmB,MAAM;IACzC,QAAA,IAAI,CAAC9X,QAAQ,CAACyxB,MAAd,EAAsB;IAClB/uB,UAAAA,MAAM,CAACgvB,QAAP,CAAgBxxB,IAAhB,GAAuBwC,MAAM,CAACgvB,QAAP,CAAgBxxB,IAAhB,CAAqBhB,KAArB,CAA2B,GAA3B,CAAA,CAAgC,CAAhC,CAAvB,CAAA;IACAwD,UAAAA,MAAM,CAACpC,UAAP,CAAkBoC,MAAM,CAACssB,IAAzB,EAA+B,CAA/B,CAAA,CAAA;IACH,SAAA;IACJ,OALmB,EAKjB,KALiB,CAApB,CAAA;IAMA,MAAKvX,IAAAA,CAAAA,OAAL,GAAe,IAAf,CAAA;IACA,MAAOka,OAAAA,OAAO,CAACC,OAAR,EAAP,CAAA;IACH,KAVM,MAUA;IACH,MAAA,IAAIC,WAAW,GAAG,IAAA,CAAKZ,YAAL,CAAkB79B,IAAlB,EAAlB,CAAA;IACA,MAAA,OAAOy+B,WAAW,CACblrB,IADE,CACIyO,GAAD,IAAS;IACX,QAAKqC,IAAAA,CAAAA,OAAL,GAAe,IAAf,CAAA;IACA,QAAA,OAAOrC,GAAP,CAAA;IACH,OAJE,CAKFxO,CAAAA,KALE,CAKK2qB,GAAD,IAAS;IACZ,QAAK9Z,IAAAA,CAAAA,OAAL,GAAe,KAAf,CAAA;IACA,QAAA,MAAM8Z,GAAN,CAAA;IACH,OARE,CAAP,CAAA;IASH,KAAA;IACJ,GAAA;;IAEDC,EAAAA,OAAO,GAAG;IACN,IAAA,MAAMt/B,KAAK,GAAG,IAAK8K,CAAAA,MAAL,CAAY9K,KAA1B,CAAA;;IACA,IAAIy+B,IAAAA,cAAc,EAAlB,EAAsB;IAClB,MAAI,IAAA,IAAA,CAAKE,SAAT,EAAoB;IAChB,QAAKA,IAAAA,CAAAA,SAAL,CAAeiB,OAAf,EAAA,CAAA;IACH,OAAA;;IACD,MAAKjB,IAAAA,CAAAA,SAAL,GAAiB,IAAjB,CAAA;IACH,KALD,MAKO,IAAIL,MAAM,EAAV,EAAc;IACjB,MAAI,IAAA,IAAA,CAAKQ,YAAT,EAAuB;IACnB9+B,QAAAA,KAAK,CAAC6J,IAAN,CAAW,UAAX,EAAuB,6CAAvB,CAAA,CAAA;IAEA2G,QAAAA,MAAM,CAACwV,aAAP,CAAqB,KAAK8Y,YAA1B,CAAA,CAAA;IACA,QAAKA,IAAAA,CAAAA,YAAL,GAAoB,IAApB,CAAA;IACH,OAAA;IACJ,KAPM,MAOA;IACH,MAAKC,IAAAA,CAAAA,YAAL,CAAkB/6B,KAAlB,EAAA,CAAA;IACH,KAAA;;IACD,IAAKuhB,IAAAA,CAAAA,OAAL,GAAe,KAAf,CAAA;IACH,GAAA;;IAnHwB;;ICId,MAAMsa,MAAN,SAAqB5qB,OAArB,CAA6B;IACxC1L,EAAAA,WAAW,CAACu2B,SAAD,EAAYpf,OAAZ,EAAqB;IAC5B,IAAA,KAAA,EAAA,CAAA;IACA,IAAKvV,IAAAA,CAAAA,UAAL,GAAkB20B,SAAlB,CAAA;IACA,IAAKp2B,IAAAA,CAAAA,IAAL,GAAYqB,MAAM,CAACg1B,MAAP,CAAc,EAAd,EAAkBpgC,sBAAlB,EAA0C+gB,OAA1C,CAAZ,CAAA;IACA,IAAA,IAAA,CAAK1gB,KAAL,GAAa,IAAIsJ,KAAJ,CAAU,IAAV,CAAb,CAAA;;IAGA,IAAA,IAAI,IAAKI,CAAAA,IAAL,CAAU1H,MAAd,EAAsB;IAClB,MAAA,IAAA,CAAK0H,IAAL,CAAU1H,MAAV,GAAmB+O,UAAU,EAA7B,CAAA;IACH,KAAA;;IAED,IAAA,IAAI,IAAKrH,CAAAA,IAAL,CAAUxH,MAAd,EAAsB;IAClB,MAAA,IAAA,CAAKwH,IAAL,CAAUxH,MAAV,GAAmBmQ,UAAU,EAA7B,CAAA;IACH,KAb2B;;;IAgB5B,IAAA,IAAI,IAAK3I,CAAAA,IAAL,CAAUxH,MAAd,EAAsB;IAClB,MAAA,IAAI,IAAKwH,CAAAA,IAAL,CAAU1H,MAAd,EAAsB;IAClB,QAAA,IAAA,CAAKhC,KAAL,CAAWuE,GAAX,CAAe,QAAf,EAAyB,wBAAzB,CAAA,CAAA;IACH,OAAA;;IAED,MAAA,IAAI,CAAC,IAAA,CAAKmF,IAAL,CAAU9H,gBAAf,EAAiC;IAC7B,QAAA,IAAA,CAAK5B,KAAL,CAAWuE,GAAX,CAAe,QAAf,EAAyB,kCAAzB,CAAA,CAAA;IACH,OAAA;;IAED,MAAA,IAAA,CAAKmF,IAAL,CAAU1H,MAAV,GAAmB,KAAnB,CAAA;IACA,MAAA,IAAA,CAAK0H,IAAL,CAAU9H,gBAAV,GAA6B,IAA7B,CAAA;IACH,KAXD,MAWO,IAAI,IAAA,CAAK8H,IAAL,CAAU1H,MAAd,EAAsB,CAE5B;;IAGD,IAAA,IAAI,CAAC,IAAA,CAAK0H,IAAL,CAAU9H,gBAAf,EAAiC;IAC7B,MAAI,IAAA,CAACoK,kBAAkB,EAAvB,EAA2B;IACvB,QAAA,IAAA,CAAKtC,IAAL,CAAU9H,gBAAV,GAA6B,IAA7B,CAAA;IACA,QAAA,IAAA,CAAK8H,IAAL,CAAUvH,YAAV,GAAyB,KAAzB,CAAA;IACH,OAHD,MAGO;IACH,QAAA,IAAA,CAAKuH,IAAL,CAAUvH,YAAV,GAAyB,IAAzB,CAAA;IACH,OAAA;IACJ,KAAA;;IAED,IAAA,IAAI,CAAC,IAAA,CAAKuH,IAAL,CAAU7I,QAAf,EAAyB;IACrB,MAAA,IAAA,CAAK6I,IAAL,CAAU3I,WAAV,CAAsBI,KAAtB,GAA8B,KAA9B,CAAA;IACH,KAAA;;IAED,IAAKuI,IAAAA,CAAAA,IAAL,CAAUpI,UAAV,GAAuB,KAAK0+B,WAAL,EAAvB,CA7C4B;;IA+C5B,IAAKC,IAAAA,CAAAA,QAAL,GAAgB,KAAhB,CAAA;IACA,IAAKC,IAAAA,CAAAA,QAAL,GAAgB,KAAhB,CAAA;IACA,IAAA,IAAA,CAAKC,UAAL,GAAkB,KAAlB,CAjD4B;;IAoD5B,IAAKC,IAAAA,CAAAA,kBAAL,GAA0B,IAA1B,CAAA;IACA,IAAA,IAAA,CAAKC,oBAAL,GAA4B,IAA5B,CArD4B;;IAwD5B,IAAKC,IAAAA,CAAAA,aAAL,GAAqB,IAArB,CAAA;IACA,IAAKvQ,IAAAA,CAAAA,0BAAL,GAAkC,KAAlC,CAAA;IACA,IAAA,IAAA,CAAKwQ,MAAL,GAAc;IACVzZ,MAAAA,GAAG,EAAE,CADK;IACF;IACR9U,MAAAA,GAAG,EAAE,CAFK;IAEF;IACRqX,MAAAA,IAAI,EAAE,CAHI;IAGD;IACTC,MAAAA,IAAI,EAAE,CAJI;IAID;IACTrN,MAAAA,EAAE,EAAE,CALM;;IAAA,KAAd,CA1D4B;;IAmE5B,IAAA,IAAA,CAAK+G,MAAL,GAAcpQ,aAAa,EAA3B,CAnE4B;;IAsE5B,IAAK4tB,IAAAA,CAAAA,eAAL,GAAuB,CAAvB,CAAA;IACA,IAAKC,IAAAA,CAAAA,eAAL,GAAuB,CAAvB,CAAA;IAEAnR,IAAAA,UAAQ,CAAC,IAAD,CAAR,CAAA;IAEA,IAAA,IAAA,CAAKjb,MAAL,GAAc,IAAIvK,MAAJ,CAAW,IAAX,CAAd,CAAA;IACA,IAAA,IAAA,CAAKzG,KAAL,GAAa,IAAIyb,KAAJ,CAAU,IAAV,CAAb,CAAA;;IAEA,IAAA,IAAI,IAAKpV,CAAAA,IAAL,CAAU7I,QAAd,EAAwB;IACpB,MAAA,IAAA,CAAKM,KAAL,GAAa,IAAIohB,KAAJ,CAAU,IAAV,CAAb,CAAA;IACH,KAAA;;IACD,IAAA,IAAA,CAAKkD,QAAL,GAAgB,IAAIQ,QAAJ,CAAa,IAAb,CAAhB,CAAA;;IAEA,IAAA,IAAI,CAAC,IAAA,CAAKya,kBAAL,EAAL,EAAgC;IAC5B,MAAA,IAAA,CAAKva,aAAL,GAAqB,IAAID,aAAJ,CAAkB,IAAlB,CAArB,CAAA;IACH,KAFD,MAEO;IACH,MAAK3R,IAAAA,CAAAA,MAAL,GAAc,IAAd,CAAA;IACH,KAAA;;IAED,IAAK2Q,IAAAA,CAAAA,MAAL,GAAc,IAAd,CAAA;IACA,IAAKnC,IAAAA,CAAAA,KAAL,GAAa,IAAb,CAAA;;IAEA,IAAA,IAAI,IAAKrZ,CAAAA,IAAL,CAAU1H,MAAd,EAAsB;IAClB,MAAA,IAAA,CAAKwmB,gBAAL,GAAwB,IAAI4B,gBAAJ,CAAqB,IAArB,CAAxB,CAAA;IACH,KAAA;;IAED,IAAA,IAAI,IAAK1gB,CAAAA,IAAL,CAAUxH,MAAd,EAAsB;IAClB,MAAA,IAAA,CAAKumB,UAAL,GAAkB,IAAI8T,UAAJ,CAAe,IAAf,CAAlB,CAAA;IACH,KAlG2B;;;IAqG5B,IAAA,IAAA,CAAKhR,OAAL,GAAe,IAAI4D,OAAJ,CAAY,IAAZ,CAAf,CAAA;IAEA,IAAA,IAAA,CAAKxuB,YAAL,GAAoB,IAAI+9B,OAAJ,CAAY,IAAZ,CAApB,CAAA;IAGArqB,IAAAA,QAAM,CAAC,IAAD,CAAN,CAAA;IACAgb,IAAAA,QAAQ,CAAC,IAAD,CAAR,CAAA;;IAGA,IAAA,IAAI,IAAK3lB,CAAAA,IAAL,CAAU1H,MAAd,EAAsB;IAClB,MAAA,IAAA,CAAKhC,KAAL,CAAWuE,GAAX,CAAe,QAAf,EAAyB,SAAzB,CAAA,CAAA;IACH,KAAA;;IAED,IAAA,IAAI,IAAKmF,CAAAA,IAAL,CAAUxH,MAAd,EAAsB;IAClB,MAAA,IAAA,CAAKlC,KAAL,CAAWuE,GAAX,CAAe,QAAf,EAAyB,SAAzB,CAAA,CAAA;IACH,KAAA;;IAED,IAAA,IAAI,IAAKmF,CAAAA,IAAL,CAAUvH,YAAd,EAA4B;IACxB,MAAA,IAAA,CAAKnC,KAAL,CAAWuE,GAAX,CAAe,QAAf,EAAyB,eAAzB,CAAA,CAAA;IACH,KAAA;;IAED,IAAA,IAAA,CAAKvE,KAAL,CAAWuE,GAAX,CAAe,gBAAf,EAAiC,KAAKmF,IAAtC,CAAA,CAAA;IACH,GAAA;;IAGD/D,EAAAA,OAAO,GAAG;IACN,IAAKs6B,IAAAA,CAAAA,QAAL,GAAgB,KAAhB,CAAA;IACA,IAAKC,IAAAA,CAAAA,QAAL,GAAgB,KAAhB,CAAA;IACA,IAAKC,IAAAA,CAAAA,UAAL,GAAkB,KAAlB,CAAA;IAEA,IAAKnd,IAAAA,CAAAA,MAAL,GAAcpQ,aAAa,EAA3B,CAAA;;IAEA,IAAI,IAAA,IAAA,CAAKuT,aAAT,EAAwB;IACpB,MAAKA,IAAAA,CAAAA,aAAL,CAAmBxgB,OAAnB,EAAA,CAAA;IACA,MAAKwgB,IAAAA,CAAAA,aAAL,GAAqB,IAArB,CAAA;IACH,KAAA;;IACD,IAAI,IAAA,IAAA,CAAK9iB,KAAT,EAAgB;IACZ,MAAKA,IAAAA,CAAAA,KAAL,CAAWsC,OAAX,EAAA,CAAA;IACA,MAAKtC,IAAAA,CAAAA,KAAL,GAAa,IAAb,CAAA;IACH,KAAA;;IAED,IAAI,IAAA,IAAA,CAAKlC,KAAT,EAAgB;IACZ,MAAKA,IAAAA,CAAAA,KAAL,CAAWwE,OAAX,EAAA,CAAA;IACA,MAAKxE,IAAAA,CAAAA,KAAL,GAAa,IAAb,CAAA;IACH,KAAA;;IAED,IAAI,IAAA,IAAA,CAAK+jB,MAAT,EAAiB;IACb,MAAKA,IAAAA,CAAAA,MAAL,CAAYvf,OAAZ,EAAA,CAAA;IACA,MAAKuf,IAAAA,CAAAA,MAAL,GAAc,IAAd,CAAA;IACH,KAAA;;IAED,IAAI,IAAA,IAAA,CAAKO,QAAT,EAAmB;IACf,MAAKA,IAAAA,CAAAA,QAAL,CAAc9f,OAAd,EAAA,CAAA;IACA,MAAK8f,IAAAA,CAAAA,QAAL,GAAgB,IAAhB,CAAA;IACH,KAAA;;IAED,IAAI,IAAA,IAAA,CAAK8F,OAAT,EAAkB;IACd,MAAKA,IAAAA,CAAAA,OAAL,CAAa5lB,OAAb,EAAA,CAAA;IACA,MAAK4lB,IAAAA,CAAAA,OAAL,GAAe,IAAf,CAAA;IACH,KAAA;;IAED,IAAI,IAAA,IAAA,CAAK/C,gBAAT,EAA2B;IACvB,MAAKA,IAAAA,CAAAA,gBAAL,CAAsB7iB,OAAtB,EAAA,CAAA;IACA,MAAK6iB,IAAAA,CAAAA,gBAAL,GAAwB,IAAxB,CAAA;IACH,KAAA;;IAED,IAAI,IAAA,IAAA,CAAKC,UAAT,EAAqB;IACjB,MAAKA,IAAAA,CAAAA,UAAL,CAAgB9iB,OAAhB,EAAA,CAAA;IACA,MAAK8iB,IAAAA,CAAAA,UAAL,GAAkB,IAAlB,CAAA;IACH,KAAA;;IAED,IAAI,IAAA,IAAA,CAAK1F,KAAT,EAAgB;IACZ,MAAKA,IAAAA,CAAAA,KAAL,CAAWpd,OAAX,EAAA,CAAA;IACA,MAAKod,IAAAA,CAAAA,KAAL,GAAa,IAAb,CAAA;IACH,KAAA;;IAGD,IAAI,IAAA,IAAA,CAAK1O,MAAT,EAAiB;IACb,MAAKA,IAAAA,CAAAA,MAAL,CAAY1O,OAAZ,EAAA,CAAA;IACA,MAAK0O,IAAAA,CAAAA,MAAL,GAAc,IAAd,CAAA;IACH,KAAA;;IAED,IAAA,IAAA,CAAKssB,sBAAL,EAAA,CAAA;IACA,IAAKC,IAAAA,CAAAA,wBAAL,GA1DM;;IA4DN,IAAA,IAAA,CAAKC,eAAL,EAAA,CAAA;IACA,IAAA,IAAA,CAAKlgC,YAAL,GAAoB,IAApB,CA7DM;;IA+DN,IAAA,IAAA,CAAKmgC,UAAL,EAAA,CAAA;IACA,IAAKL,IAAAA,CAAAA,eAAL,GAAuB,CAAvB,CAAA;IACA,IAAA,IAAA,CAAKD,eAAL,GAAuB,CAAvB,CAjEM;;IAoEN,IAAA,IAAA,CAAKtsB,IAAL,CAAU,SAAV,CAAA,CApEM;;IAsEN,IAAA,IAAA,CAAKI,GAAL,EAAA,CAAA;IAEA,IAAA,IAAA,CAAKtU,KAAL,CAAWuE,GAAX,CAAe,MAAf,EAAuB,aAAvB,CAAA,CAAA;IACH,GAAA;;IAEa,EAAVvD,IAAAA,UAAU,CAACuO,KAAD,EAAQ;IAClB,IAAIkB,IAAAA,QAAQ,EAAZ,EAAgB;IACZ,MAAA,IAAA,CAAKyD,IAAL,CAAUtQ,MAAM,CAACC,aAAjB,EAAgC0L,KAAhC,CAAA,CAAA;IACAnB,MAAAA,UAAU,CAAC,MAAM;IACb,QAAA,IAAA,CAAK2yB,YAAL,CAAkB;IACdp/B,UAAAA,MAAM,EAAE4N,KAAK,GAAG,GAAH,GAAS,CAAA;IADR,SAAlB,CAAA,CAAA;IAGA,QAAA,IAAA,CAAKlK,MAAL,EAAA,CAAA;IACH,OALS,EAKP,EALO,CAAV,CAAA;IAMH,KARD,MAQO;IACH,MAAA,IAAA,CAAK6O,IAAL,CAAUtQ,MAAM,CAAC5C,UAAjB,EAA6BuO,KAA7B,CAAA,CAAA;IACH,KAAA;IACJ,GAAA;;IAEa,EAAA,IAAVvO,UAAU,GAAG;IACb,IAAO0Q,OAAAA,YAAY,EAAM,IAAA,IAAA,CAAK7N,aAA9B,CAAA;IACH,GAAA;;IAEgB,EAAbA,IAAAA,aAAa,CAAC0L,KAAD,EAAQ;IACrB,IAAA,IAAA,CAAK2E,IAAL,CAAUtQ,MAAM,CAACC,aAAjB,EAAgC0L,KAAhC,CAAA,CAAA;IACH,GAAA;;IAEgB,EAAA,IAAb1L,aAAa,GAAG;IAChB,IAAO,OAAA,IAAA,CAAKsH,UAAL,CAAgByJ,SAAhB,CAA0BosB,QAA1B,CAAmC,0BAAnC,CAAP,CAAA;IACH,GAAA;;IAES,EAANzsB,IAAAA,MAAM,CAAChF,KAAD,EAAQ;IACd,IAAK4wB,IAAAA,CAAAA,UAAL,GAAkB5wB,KAAlB,CAAA;IACH,GAAA;;IAES,EAAA,IAANgF,MAAM,GAAG;IACT,IAAA,OAAO,KAAK4rB,UAAZ,CAAA;IACH,GA1OuC;;;IA6O7B,EAAPp8B,IAAAA,OAAO,CAACwL,KAAD,EAAQ;IAEf,IAAA,IAAIA,KAAJ,EAAW;IACP;IACA,MAAKpL,IAAAA,CAAAA,OAAL,GAAe,KAAf,CAAA;IACH,KAAA;;IAED,IAAA,IAAI,IAAKJ,CAAAA,OAAL,KAAiBwL,KAArB,EAA4B;IACxB,MAAK2wB,IAAAA,CAAAA,QAAL,GAAgB3wB,KAAhB,CAAA;IACA,MAAA,IAAA,CAAK2E,IAAL,CAAUtQ,MAAM,CAACG,OAAjB,EAA0BwL,KAA1B,CAAA,CAAA;IACA,MAAA,IAAA,CAAK2E,IAAL,CAAUtQ,MAAM,CAAC8B,YAAjB,EAA+B,KAAKub,MAApC,CAAA,CAAA;;IAEA,MAAA,IAAI1R,KAAJ,EAAW;IACP,QAAA,IAAA,CAAK2E,IAAL,CAAUtQ,MAAM,CAAC1C,IAAjB,CAAA,CAAA;IACH,OAFD,MAEO;IACH,QAAA,IAAA,CAAKgT,IAAL,CAAUtQ,MAAM,CAACI,KAAjB,CAAA,CAAA;IACH,OAAA;IACJ,KAAA;IAEJ,GAAA;;IAEU,EAAA,IAAPD,OAAO,GAAG;IACV,IAAA,OAAO,KAAKm8B,QAAZ,CAAA;IACH,GAAA;;IAES,EAAA,IAANjf,MAAM,GAAG;IACT,IAAQ,OAAA,IAAA,CAAK9f,KAAL,IAAc,IAAA,CAAKA,KAAL,CAAW8f,MAA1B,IAAqC,CAA5C,CAAA;IACH,GAAA;;IAES,EAANA,IAAAA,MAAM,CAAC1R,KAAD,EAAQ;IACd,IAAKpO,IAAAA,CAAAA,KAAL,IAAc,IAAKA,CAAAA,KAAL,CAAW2gB,SAAX,CAAqBvS,KAArB,CAAd,CAAA;IACH,GAAA;;IAEU,EAAPpL,IAAAA,OAAO,CAACoL,KAAD,EAAQ;IACf,IAAA,IAAI,IAAKpL,CAAAA,OAAL,KAAiBoL,KAArB,EAA4B;IACxB,MAAK0wB,IAAAA,CAAAA,QAAL,GAAgB1wB,KAAhB,CAAA;IACA,MAAA,IAAA,CAAK2E,IAAL,CAAUtQ,MAAM,CAACO,OAAjB,EAA0B,KAAK87B,QAA/B,CAAA,CAAA;IACH,KAAA;IACJ,GAAA;;IAEU,EAAA,IAAP97B,OAAO,GAAG;IACV,IAAA,OAAO,KAAK87B,QAAZ,CAAA;IACH,GAAA;;IAEY,EAATr7B,IAAAA,SAAS,CAAC2K,KAAD,EAAQ;IACjB,IAAA,IAAIA,KAAJ,EAAW;IACP,MAAI,IAAA,IAAA,CAAKxL,OAAT,EAAkB;IACd,QAAK0hB,IAAAA,CAAAA,QAAL,CAAcZ,WAAd,EAAA,CAAA;IACH,OAAA;IACJ,KAJD,MAIO;IACH,MAAKY,IAAAA,CAAAA,QAAL,CAAcI,iBAAd,EAAA,CAAA;IACH,KAAA;IACJ,GAAA;;IAEY,EAAA,IAATjhB,SAAS,GAAG;IACZ,IAAA,OAAO,KAAK6gB,QAAL,IAAiB,IAAKA,CAAAA,QAAL,CAAc7gB,SAAtC,CAAA;IACH,GAAA;;IAEiB,EAAd6c,IAAAA,cAAc,CAAClS,KAAD,EAAQ;IACtB,IAAIA,IAAAA,KAAK,KAAK,IAAd,EAAoB;IAChB,MAAA,OAAA;IACH,KAAA;;IACD,IAAKkxB,IAAAA,CAAAA,eAAL,GAAuBlxB,KAAvB,CAAA;IACH,GA5SuC;;;IA+StB,EAAA,IAAdkS,cAAc,GAAG;IACjB,IAAA,OAAO,KAAKgf,eAAZ,CAAA;IACH,GAjTuC;;;IAoTtB,EAAdhtB,IAAAA,cAAc,CAAClE,KAAD,EAAQ;IACtB,IAAIA,IAAAA,KAAK,KAAK,IAAd,EAAoB;IAChB,MAAA,OAAA;IACH,KAAA;;IACD,IAAA,IAAA,CAAKixB,eAAL,GAAuBjxB,KAAvB,CAJsB;;IAMtB,IAAI,IAAA,CAAC,IAAK7F,CAAAA,IAAL,CAAU1H,MAAX,IAAqB,CAAC,IAAK0H,CAAAA,IAAL,CAAUxH,MAApC,EAA4C;IACxC,MAAA,IAAI,IAAKuf,CAAAA,cAAL,IAAuB,IAAA,CAAKhO,cAAhC,EAAgD;IAC5C,QAAKtS,IAAAA,CAAAA,KAAL,IAAc,IAAA,CAAKA,KAAL,CAAW+S,IAAX,CAAgBtQ,MAAM,CAACsC,cAAvB,EAAuC;IACjDub,UAAAA,cAAc,EAAE,IAAA,CAAKA,cAD4B;IAEjDhO,UAAAA,cAAc,EAAE,IAAA,CAAKA,cAF4B;IAGjD8M,UAAAA,IAAI,EAAE,IAAKkB,CAAAA,cAAL,GAAsB,IAAKhO,CAAAA,cAAAA;IAHgB,SAAvC,CAAd,CAAA;IAKH,OAAA;IACJ,KAAA;IACJ,GAnUuC;;;IAsUtB,EAAA,IAAdA,cAAc,GAAG;IACjB,IAAA,OAAO,KAAK+sB,eAAZ,CAAA;IACH,GAAA;IAGD;IACJ;IACA;IACA;;;IACIO,EAAAA,YAAY,CAACrgB,OAAD,EAAU;IAClB,IAAA,IAAA,CAAKhX,IAAL,GAAYqB,MAAM,CAACg1B,MAAP,CAAc,EAAd,EAAkB,IAAKr2B,CAAAA,IAAvB,EAA6BgX,OAA7B,CAAZ,CAAA;IACH,GAAA;IAED;IACJ;IACA;IACA;;;IACIle,EAAAA,IAAI,GAAG;IACH,IAAA,OAAO,IAAIi9B,OAAJ,CAAY,CAACC,OAAD,EAAUuB,MAAV,KAAqB;IACpC,MAAI,IAAA,CAAC,IAAK/b,CAAAA,MAAV,EAAkB;IACd,QAAA,IAAA,CAAKA,MAAL,GAAc,IAAId,MAAJ,CAAW,IAAX,CAAd,CAAA;IACH,OAAA;;IAED,MAAI,IAAA,CAAC,IAAKrB,CAAAA,KAAV,EAAiB;IACb,QAAA,IAAA,CAAKA,KAAL,GAAa,IAAIoH,KAAJ,CAAU,IAAV,CAAb,CAAA;IACH,OAAA;;IAED,MAAA,IAAI,IAAKzgB,CAAAA,IAAL,CAAU1H,MAAd,EAAsB;IAClB,QAAI,IAAA,CAAC,IAAKwmB,CAAAA,gBAAV,EAA4B;IACxB,UAAA,IAAA,CAAKA,gBAAL,GAAwB,IAAI4B,gBAAJ,CAAqB,IAArB,CAAxB,CAAA;IACH,SAAA;IACJ,OAAA;;IAED,MAAA,IAAI,IAAK1gB,CAAAA,IAAL,CAAUxH,MAAd,EAAsB;IAClB,QAAI,IAAA,CAAC,IAAKumB,CAAAA,UAAV,EAAsB;IAClB,UAAA,IAAA,CAAKA,UAAL,GAAkB,IAAI8T,UAAJ,CAAe,IAAf,CAAlB,CAAA;IACH,SAAA;IACJ,OAAA;;IAED,MAAI,IAAA,CAAC,KAAKpW,aAAN,IAAuB,CAAC,IAAKua,CAAAA,kBAAL,EAA5B,EAAuD;IACnD,QAAA,IAAA,CAAKva,aAAL,GAAqB,IAAID,aAAJ,CAAkB,IAAlB,CAArB,CAAA;IAEA,QAAA,IAAA,CAAK9Q,IAAL,CAAUxR,MAAM,CAACE,iBAAjB,EAAoC,MAAM;IACtC47B,UAAAA,OAAO,EAAA,CAAA;IACV,SAFD,CAAA,CAAA;IAGH,OAND,MAMO;IACHA,QAAAA,OAAO,EAAA,CAAA;IACV,OAAA;IAEJ,KA/BM,CAAP,CAAA;IAgCH,GAAA;IAGD;IACJ;IACA;IACA;IACA;;;IACIx+B,EAAAA,IAAI,CAACQ,GAAD,EAAM;IACN,IAAA,OAAO,IAAI+9B,OAAJ,CAAY,CAACC,OAAD,EAAUuB,MAAV,KAAqB;IACpC,MAAI,IAAA,CAACv/B,GAAD,IAAQ,CAAC,KAAKgI,IAAL,CAAUhI,GAAvB,EAA4B;IACxB,QAAA,OAAOu/B,MAAM,EAAb,CAAA;IACH,OAAA;;IAED,MAAK98B,IAAAA,CAAAA,OAAL,GAAe,IAAf,CAAA;IACA,MAAKJ,IAAAA,CAAAA,OAAL,GAAe,KAAf,CAAA;IACA,MAAA,IAAA,CAAKif,MAAL,CAAYnQ,aAAZ,GAA4BtE,GAAG,EAA/B,CAAA;;IACA,MAAI,IAAA,CAAC7M,GAAL,EAAU;IACNA,QAAAA,GAAG,GAAG,IAAKgI,CAAAA,IAAL,CAAUhI,GAAhB,CAAA;IACH,OAAA;;IACD,MAAA,IAAA,CAAKgI,IAAL,CAAUhI,GAAV,GAAgBA,GAAhB,CAAA;IAEA,MAAA,IAAA,CAAKi/B,sBAAL,EAAA,CAAA;IAEA,MAAA,IAAA,CAAKn+B,IAAL,EAAA,CAAYiS,IAAZ,CAAiB,MAAM;IACnB,QAAA,IAAA,CAAKuO,MAAL,CAAYlQ,SAAZ,GAAwBvE,GAAG,EAA3B,CADmB;;IAGnB,QAAA,IAAI,IAAK7E,CAAAA,IAAL,CAAU9I,SAAd,EAAyB;IACrB,UAAKqD,IAAAA,CAAAA,IAAL,CAAU,KAAV,CAAA,CAAA;IACH,SAAA;;IAGD,QAAI,IAAA,IAAA,CAAKukB,gBAAT,EAA2B;IACvB,UAAKA,IAAAA,CAAAA,gBAAL,CAAsBpT,IAAtB,CAA2B/O,YAAY,CAACI,uBAAxC,EAAiE,MAAM;IACnE,YAAA,IAAA,CAAKyN,IAAL,CAAU7N,YAAY,CAACI,uBAAvB,CAAA,CAAA;;IACA,YAAA,IAAI,CAAC,IAAA,CAAKiD,IAAL,CAAUtH,QAAf,EAAyB;IACrB,cAAK8R,IAAAA,CAAAA,IAAL,CAAUtQ,MAAM,CAACY,KAAjB,EAAwB6B,YAAY,CAACI,uBAArC,CAAA,CAAA;IACH,aAAA;IACJ,WALD,CAAA,CAAA;IAMH,SAAA;;IAED,QAAI,IAAA,IAAA,CAAKgiB,UAAT,EAAqB;IACjB,UAAKA,IAAAA,CAAAA,UAAL,CAAgBrT,IAAhB,CAAqB/O,YAAY,CAACK,yBAAlC,EAA6D,MAAM;IAC/D,YAAA,IAAA,CAAKwN,IAAL,CAAU7N,YAAY,CAACK,yBAAvB,CAAA,CAAA;;IACA,YAAA,IAAI,CAAC,IAAA,CAAKgD,IAAL,CAAUtH,QAAf,EAAyB;IACrB,cAAK8R,IAAAA,CAAAA,IAAL,CAAUtQ,MAAM,CAACY,KAAjB,EAAwB6B,YAAY,CAACK,yBAArC,CAAA,CAAA;IACH,aAAA;IACJ,WALD,CAAA,CAAA;IAMH,SAAA;;IAED,QAAA,IAAA,CAAKspB,cAAL,EAAA,CAAA;IAEA,QAAA,IAAA,CAAK9K,MAAL,CAAYpC,WAAZ,CAAwBphB,GAAxB,EA5BmB;;IA+BnB,QAAKw/B,IAAAA,CAAAA,mBAAL,GA/BmB;;IAiCnB,QAAKhc,IAAAA,CAAAA,MAAL,CAAY9P,IAAZ,CAAiB/O,YAAY,CAACE,UAA9B,EAA2C/B,KAAD,IAAW;IACjDy8B,UAAAA,MAAM,CAACz8B,KAAD,CAAN,CAAA;IACH,SAFD,EAjCmB;;IAsCnB,QAAK0gB,IAAAA,CAAAA,MAAL,CAAY9P,IAAZ,CAAiB/O,YAAY,CAACG,cAA9B,EAA+ChC,KAAD,IAAW;IACrDy8B,UAAAA,MAAM,CAACz8B,KAAD,CAAN,CAAA;IACH,SAFD,EAtCmB;;IA2CnB,QAAK0gB,IAAAA,CAAAA,MAAL,CAAY9P,IAAZ,CAAiBxR,MAAM,CAAC2B,aAAxB,EAAuC,MAAM;IACzCm6B,UAAAA,OAAO,EAAA,CAAA;IACP,UAAA,IAAA,CAAK1c,MAAL,CAAYhQ,cAAZ,GAA6BzE,GAAG,EAAhC,CAFyC;;IAIzC,UAAKlL,IAAAA,CAAAA,KAAL,CAAWnC,IAAX,EAAA,CAAA;IACH,SALD,CAAA,CAAA;IAOH,OAlDD,CAkDGwT,CAAAA,KAlDH,CAkDU/H,CAAD,IAAO;IACZs0B,QAAAA,MAAM,CAACt0B,CAAD,CAAN,CAAA;IACH,OApDD,CAAA,CAAA;IAqDH,KApEM,CAAP,CAAA;IAqEH,GAAA;IAED;IACJ;IACA;;;IACIjJ,EAAAA,KAAK,GAAG;IACJ,IAAA,OAAO,IAAI+7B,OAAJ,CAAY,CAACC,OAAD,EAAUuB,MAAV,KAAqB;IACpC,MAAA,IAAA,CAAKE,MAAL,EAAA,CAAc1sB,IAAd,CAAmB,MAAM;IACrB,QAAKpR,IAAAA,CAAAA,KAAL,CAAW2Z,SAAX,EAAA,CAAA;IACA0iB,QAAAA,OAAO,EAAA,CAAA;IACV,OAHD,CAAA,CAAA;IAIH,KALM,CAAP,CAAA;IAMH,GAAA;;IAEDyB,EAAAA,MAAM,GAAG;IACL,IAAA,OAAO,IAAI1B,OAAJ,CAAY,CAACC,OAAD,EAAUuB,MAAV,KAAqB;IACpC;IACA,MAAI,IAAA,IAAA,CAAK/b,MAAT,EAAiB;IACb,QAAKA,IAAAA,CAAAA,MAAL,CAAYvf,OAAZ,EAAA,CAAA;IACA,QAAKuf,IAAAA,CAAAA,MAAL,GAAc,IAAd,CAAA;IACH,OAAA;;IAED,MAAI,IAAA,IAAA,CAAKnC,KAAT,EAAgB;IACZ,QAAKA,IAAAA,CAAAA,KAAL,CAAWpd,OAAX,EAAA,CAAA;IACA,QAAKod,IAAAA,CAAAA,KAAL,GAAa,IAAb,CAAA;IACH,OAVmC;;;IAapC,MAAI,IAAA,IAAA,CAAKoD,aAAT,EAAwB;IACpB,QAAKA,IAAAA,CAAAA,aAAL,CAAmBxgB,OAAnB,EAAA,CAAA;IACA,QAAKwgB,IAAAA,CAAAA,aAAL,GAAqB,IAArB,CAAA;IACH,OAAA;;IAED,MAAI,IAAA,IAAA,CAAKqC,gBAAT,EAA2B;IACvB,QAAKA,IAAAA,CAAAA,gBAAL,CAAsB7iB,OAAtB,EAAA,CAAA;IACA,QAAK6iB,IAAAA,CAAAA,gBAAL,GAAwB,IAAxB,CAAA;IACH,OAAA;;IAED,MAAI,IAAA,IAAA,CAAKC,UAAT,EAAqB;IACjB,QAAKA,IAAAA,CAAAA,UAAL,CAAgB9iB,OAAhB,EAAA,CAAA;IACA,QAAK8iB,IAAAA,CAAAA,UAAL,GAAkB,IAAlB,CAAA;IACH,OAAA;;IAED,MAAA,IAAA,CAAKkY,sBAAL,EAAA,CAAA;IACA,MAAA,IAAA,CAAKC,wBAAL,EAAA,CAAA;IACA,MAAK78B,IAAAA,CAAAA,OAAL,GAAe,KAAf,CAAA;IACA,MAAKI,IAAAA,CAAAA,OAAL,GAAe,KAAf,CAAA;IACA,MAAA,IAAA,CAAKS,SAAL,GAAiB,KAAjB,CAhCoC;;IAkCpC,MAAA,IAAA,CAAKzD,KAAL,IAAc,IAAA,CAAKA,KAAL,CAAW6C,KAAX,EAAd,CAAA;IACA,MAAKX,IAAAA,CAAAA,KAAL,IAAc,IAAKA,CAAAA,KAAL,CAAWW,KAAX,EAAd,CAnCoC;;IAqCpC,MAAK68B,IAAAA,CAAAA,eAAL,GArCoC;;IAuCpC,MAAKC,IAAAA,CAAAA,UAAL,GAvCoC;;IAyCpC,MAAKL,IAAAA,CAAAA,eAAL,GAAuB,CAAvB,CAAA;IACA,MAAA,IAAA,CAAKD,eAAL,GAAuB,CAAvB,CA1CoC;;IA4CpC,MAAA,IAAA,CAAKxd,MAAL,GAAcpQ,aAAa,EAA3B,CA5CoC;;IA8CpCxE,MAAAA,UAAU,CAAC,MAAM;IACbsxB,QAAAA,OAAO,EAAA,CAAA;IACV,OAFS,EAEP,CAFO,CAAV,CAAA;IAGH,KAjDM,CAAP,CAAA;IAkDH,GAAA;IAED;IACJ;IACA;IACA;IACA;;;IACI17B,EAAAA,KAAK,CAAC6d,IAAD,EAAO;IACR,IAAA,IAAIA,IAAJ,EAAU;IACN,MAAO,OAAA,IAAA,CAAKne,KAAL,EAAP,CAAA;IACH,KAFD,MAEO;IACH,MAAO,OAAA,IAAA,CAAKy9B,MAAL,EAAP,CAAA;IACH,KAAA;IACJ,GAAA;IAED;IACJ;IACA;IACA;;;IACIl9B,EAAAA,IAAI,CAAC4d,IAAD,EAAO;IACP,IAAK1gB,IAAAA,CAAAA,KAAL,IAAc,IAAKA,CAAAA,KAAL,CAAW8C,IAAX,CAAgB4d,IAAhB,CAAd,CAAA;IACH,GAAA;IAED;IACJ;IACA;;;IACIxc,EAAAA,MAAM,GAAG;IACL,IAAKhC,IAAAA,CAAAA,KAAL,CAAWgC,MAAX,EAAA,CAAA;IACH,GAAA;IAED;IACJ;IACA;IACA;IACA;;;IACIwf,EAAAA,WAAW,CAACjX,QAAD,EAAW2W,QAAX,EAAqB;IAC5B,IAAI,IAAA,IAAA,CAAK3f,SAAT,EAAoB;IAChB,MAAA,OAAA;IACH,KAAA;;IAED,IAAA,IAAA,CAAK6gB,QAAL,CAAcd,WAAd,CAA0B/W,QAA1B,EAAoC2W,QAApC,CAAA,CAAA;IACA,IAAK3f,IAAAA,CAAAA,SAAL,GAAiB,IAAjB,CAAA;IACH,GAAA;IAED;IACJ;IACA;;;IACIihB,EAAAA,iBAAiB,GAAG;IAChB,IAAI,IAAA,IAAA,CAAKjhB,SAAT,EAAoB;IAChB,MAAKA,IAAAA,CAAAA,SAAL,GAAiB,KAAjB,CAAA;IACH,KAAA;IACJ,GAAA;;IAEDo7B,EAAAA,WAAW,GAAG;IACV,IAAI/tB,IAAAA,MAAM,GAAG,KAAb,CAAA;IAEA,IAAImvB,IAAAA,UAAU,GAAG,KAAjB,CAAA;IACAr2B,IAAAA,MAAM,CAACyE,IAAP,CAAY,IAAK9F,CAAAA,IAAL,CAAU3I,WAAtB,CAAmC6J,CAAAA,OAAnC,CAA4CnC,GAAD,IAAS;IAChD,MAAA,IAAI,KAAKiB,IAAL,CAAU3I,WAAV,CAAsB0H,GAAtB,CAAJ,EAAgC;IAC5B24B,QAAAA,UAAU,GAAG,IAAb,CAAA;IACH,OAAA;IACJ,KAJD,CAAA,CAAA;;IAMA,IAAI,IAAA,IAAA,CAAK13B,IAAL,CAAUhJ,aAAV,IAA2B,IAAKgJ,CAAAA,IAAL,CAAU23B,IAArC,IAA6CD,UAAjD,EAA6D;IACzDnvB,MAAAA,MAAM,GAAG,IAAT,CAAA;IACH,KAAA;;IAED,IAAA,OAAOA,MAAP,CAAA;IACH,GAAA;;IAEDyuB,EAAAA,kBAAkB,GAAG;IACjB,IAAO,OAAA,IAAA,CAAKh3B,IAAL,CAAU7I,QAAV,KAAuB,KAAvB,KAAiC,IAAK6I,CAAAA,IAAL,CAAUxH,MAAV,IAAqB,IAAKwH,CAAAA,IAAL,CAAU1H,MAAV,IAAoB,CAAC,IAAK0H,CAAAA,IAAL,CAAUvH,YAArF,CAAP,CAAA;IACH,GAAA;;IAEDm/B,EAAAA,UAAU,GAAG;IACT,IAAA,IAAA,CAAKX,sBAAL,EAAA,CAAA;IACA,IAAA,IAAA,CAAKY,iBAAL,EAAA,CAAA;IACH,GAplBuC;;;IAulBxCA,EAAAA,iBAAiB,GAAG;IAChB,IAAA,IAAA,CAAKnB,kBAAL,GAA0BhyB,UAAU,CAAC,MAAM;IACvC,MAAA,IAAA,CAAKpK,KAAL,CAAW,KAAX,CAAkByQ,CAAAA,IAAlB,CAAuB,MAAM;IACzB,QAAKP,IAAAA,CAAAA,IAAL,CAAUtQ,MAAM,CAACxD,OAAjB,EAA0BwD,MAAM,CAACa,YAAjC,CAAA,CAAA;IACA,QAAA,IAAA,CAAKyP,IAAL,CAAUtQ,MAAM,CAACa,YAAjB,CAAA,CAAA;IACH,OAHD,CAAA,CAAA;IAIH,KALmC,EAKjC,IAAKiF,CAAAA,IAAL,CAAUvJ,YAAV,GAAyB,IALQ,CAApC,CAAA;IAMH,GA9lBuC;;;IAimBxCwgC,EAAAA,sBAAsB,GAAG;IACrB,IAAI,IAAA,IAAA,CAAKP,kBAAT,EAA6B;IACzBoB,MAAAA,YAAY,CAAC,IAAKpB,CAAAA,kBAAN,CAAZ,CAAA;IACA,MAAKA,IAAAA,CAAAA,kBAAL,GAA0B,IAA1B,CAAA;IACH,KAAA;IACJ,GAtmBuC;;;IAymBxCc,EAAAA,mBAAmB,GAAG;IAClB,IAAA,IAAA,CAAKb,oBAAL,GAA4BjyB,UAAU,CAAC,MAAM;IACzC,MAAA,IAAA,CAAKpK,KAAL,CAAW,KAAX,CAAkByQ,CAAAA,IAAlB,CAAuB,MAAM;IACzB,QAAKP,IAAAA,CAAAA,IAAL,CAAUtQ,MAAM,CAACxD,OAAjB,EAA0BwD,MAAM,CAAC1D,cAAjC,CAAA,CAAA;IACA,QAAA,IAAA,CAAKgU,IAAL,CAAUtQ,MAAM,CAAC1D,cAAjB,CAAA,CAAA;IACH,OAHD,CAAA,CAAA;IAIH,KALqC,EAKnC,IAAKwJ,CAAAA,IAAL,CAAUxJ,cAAV,GAA2B,IALQ,CAAtC,CAAA;IAMH,GAAA;;IAED0gC,EAAAA,wBAAwB,GAAG;IACvB,IAAI,IAAA,IAAA,CAAKP,oBAAT,EAA+B;IAC3BmB,MAAAA,YAAY,CAAC,IAAKnB,CAAAA,oBAAN,CAAZ,CAAA;IACA,MAAKA,IAAAA,CAAAA,oBAAL,GAA4B,IAA5B,CAAA;IACH,KAAA;IACJ,GAAA;;IAEDzZ,EAAAA,YAAY,GAAG;IACX,IAAI,IAAA,IAAA,CAAKziB,OAAT,EAAkB;IACd,MAAA,IAAA,CAAK+P,IAAL,CAAUtQ,MAAM,CAACuB,KAAjB,CAAA,CAAA;IACA,MAAKhB,IAAAA,CAAAA,OAAL,GAAe,KAAf,CAAA;IACA,MAAA,IAAA,CAAKy8B,wBAAL,EAAA,CAAA;IACH,KAAA;;IACD,IAAI,IAAA,CAAC,IAAK78B,CAAAA,OAAV,EAAmB;IACf,MAAKA,IAAAA,CAAAA,OAAL,GAAe,IAAf,CAAA;IACH,KAAA;;IACD,IAAA,IAAA,CAAKu9B,UAAL,EAAA,CAAA;IACH,GAnoBuC;;;IAuoBxCza,EAAAA,WAAW,CAACnG,OAAD,EAAU;IACjBA,IAAAA,OAAO,GAAGA,OAAO,IAAI,EAArB,CAAA;;IAEA,IAAI,IAAA,CAAC,IAAK4f,CAAAA,aAAV,EAAyB;IACrB,MAAKA,IAAAA,CAAAA,aAAL,GAAqB/xB,GAAG,EAAxB,CAAA;IACH,KAAA;;IAED,IAAA,IAAIoE,UAAU,CAAC+N,OAAO,CAACzE,EAAT,CAAd,EAA4B;IACxB,MAAA,IAAA,CAAKskB,MAAL,CAAYtkB,EAAZ,GAAiByE,OAAO,CAACzE,EAAzB,CAAA;IACH,KAAA;;IAED,IAAA,IAAItJ,UAAU,CAAC+N,OAAO,CAACoG,GAAT,CAAd,EAA6B;IACzB,MAAA,IAAA,CAAKyZ,MAAL,CAAYzZ,GAAZ,GAAkBpG,OAAO,CAACoG,GAA1B,CAAA;IACH,KAAA;;IAED,IAAIpG,IAAAA,OAAO,CAAC1O,GAAZ,EAAiB;IACb,MAAA,IAAA,CAAKuuB,MAAL,CAAYvuB,GAAZ,IAAmB,CAAnB,CAAA;IACH,KAAA;;IACD,IAAI0O,IAAAA,OAAO,CAAC2I,IAAZ,EAAkB;IACd,MAAA,IAAA,CAAKkX,MAAL,CAAYlX,IAAZ,IAAoB3I,OAAO,CAAC2I,IAA5B,CAAA;IACH,KAAA;;IACD,IAAI3I,IAAAA,OAAO,CAAC4I,IAAZ,EAAkB;IACd,MAAA,IAAA,CAAKiX,MAAL,CAAYjX,IAAZ,IAAoB5I,OAAO,CAAC4I,IAA5B,CAAA;IACH,KAAA;;IAED,IAAMmY,MAAAA,QAAQ,GAAGlzB,GAAG,EAApB,CAAA;;IACA,IAAA,MAAMyW,SAAS,GAAGyc,QAAQ,GAAG,KAAKnB,aAAlC,CAAA;;IAEA,IAAA,IAAItb,SAAS,GAAG,CAAI,GAAA,IAApB,EAA0B;IACtB,MAAA,OAAA;IACH,KAAA;;IAED,IAAA,IAAA,CAAK9Q,IAAL,CAAUtQ,MAAM,CAACc,KAAjB,EAAwB,KAAK67B,MAA7B,CAAA,CAAA;IACA,IAAA,IAAA,CAAKrsB,IAAL,CAAUtQ,MAAM,CAACe,WAAjB,EAA8BoN,SAAS,CAAC,IAAKwuB,CAAAA,MAAL,CAAYvuB,GAAb,CAAvC,CAAA,CAAA;IACA,IAAA,IAAA,CAAKuuB,MAAL,CAAYvuB,GAAZ,GAAkB,CAAlB,CAAA;IACA,IAAA,IAAA,CAAKuuB,MAAL,CAAYlX,IAAZ,GAAmB,CAAnB,CAAA;IACA,IAAA,IAAA,CAAKkX,MAAL,CAAYjX,IAAZ,GAAmB,CAAnB,CAAA;IACA,IAAKgX,IAAAA,CAAAA,aAAL,GAAqBmB,QAArB,CAAA;IACH,GAAA;;IAEDX,EAAAA,UAAU,GAAG;IACT,IAAKR,IAAAA,CAAAA,aAAL,GAAqB,IAArB,CAAA;IACA,IAAA,IAAA,CAAKC,MAAL,GAAc;IACVzZ,MAAAA,GAAG,EAAE,CADK;IACF;IACR9U,MAAAA,GAAG,EAAE,CAFK;IAGVqX,MAAAA,IAAI,EAAE,CAHI;IAIVC,MAAAA,IAAI,EAAE,CAJI;IAKVrN,MAAAA,EAAE,EAAE,CAAA;IALM,KAAd,CAAA;IAOH,GAAA;;IAED+T,EAAAA,cAAc,GAAG;IACb,IAAA,IAAI,IAAKtmB,CAAAA,IAAL,CAAU/I,YAAd,EAA4B;IACxB,MAAKA,IAAAA,CAAAA,YAAL,CAAkBk+B,MAAlB,EAAA,CAAA;IACH,KAAA;IACJ,GAAA;;IAEDgC,EAAAA,eAAe,GAAG;IACd,IAAA,IAAI,IAAKn3B,CAAAA,IAAL,CAAU/I,YAAd,EAA4B;IACxB,MAAKA,IAAAA,CAAAA,YAAL,CAAkB2+B,OAAlB,EAAA,CAAA;IACH,KAAA;IACJ,GAAA;;IAEDtY,EAAAA,uBAAuB,GAAG;IACtB,IAAMhE,MAAAA,MAAM,GAAG,IAAA,CAAKA,MAApB,CAAA;IACAA,IAAAA,MAAM,CAAC5P,aAAP,GAAuB4P,MAAM,CAAClQ,SAAP,GAAmBkQ,MAAM,CAACnQ,aAAjD,CAAA;IACAmQ,IAAAA,MAAM,CAAC3P,eAAP,GAAyB2P,MAAM,CAACjQ,WAAP,GAAqBiQ,MAAM,CAAClQ,SAArD,CAAA;IACAkQ,IAAAA,MAAM,CAAC1P,uBAAP,GAAiC0P,MAAM,CAAChQ,cAAP,GAAwBgQ,MAAM,CAACjQ,WAAhE,CAAA;IACAiQ,IAAAA,MAAM,CAACzP,cAAP,GAAwByP,MAAM,CAAC/P,UAAP,GAAoB+P,MAAM,CAAChQ,cAAnD,CAAA;IACAgQ,IAAAA,MAAM,CAACxP,eAAP,GAAyBwP,MAAM,CAAC9P,WAAP,GAAqB8P,MAAM,CAAC/P,UAArD,CAAA;IACA+P,IAAAA,MAAM,CAACvP,cAAP,GAAwBuP,MAAM,CAAC7P,UAAP,GAAoB6P,MAAM,CAAC9P,WAAnD,CAAA;IACA8P,IAAAA,MAAM,CAACtP,YAAP,GAAsBsP,MAAM,CAAC7P,UAAP,GAAoB6P,MAAM,CAACnQ,aAAjD,CAAA;IACA,IAAA,IAAA,CAAKqB,IAAL,CAAUtQ,MAAM,CAACuC,iBAAjB,EAAoC6c,MAApC,CAAA,CAAA;IACH,GAAA;;IAhtBuC;;ICvB5C,MAAM0e,SAAN,SAAwBzsB,OAAxB,CAAgC;IAChB,EAAL0sB,OAAAA,KAAK,GAAGt7B,YAAH,CAAA;IAEE,EAAA,OAAPu7B,OAAO,GAAG;IACb1hC,IAAAA,cAAc,EAAE0D,MAAM,CAAC1D,cADV;IAEbuE,IAAAA,YAAY,EAAEb,MAAM,CAACa,YAAAA;IAFR,GAAH,CAAA;;IAKd8E,EAAAA,WAAW,CAACmX,OAAD,EAAU;IACjB,IAAA,KAAA,EAAA,CAAA;IACA,IAAIhX,IAAAA,IAAI,GAAGgX,OAAX,CAAA;IACA,IAAA,IAAIvV,UAAU,GAAGuV,OAAO,CAACof,SAAzB,CAAA;;IACA,IAAA,IAAI,OAAOpf,OAAO,CAACof,SAAf,KAA6B,QAAjC,EAA2C;IACvC30B,MAAAA,UAAU,GAAG2C,QAAQ,CAAC2d,aAAT,CAAuB/K,OAAO,CAACof,SAA/B,CAAb,CAAA;IACH,KAAA;;IACD,IAAI,IAAA,CAAC30B,UAAL,EAAiB;IACb,MAAA,MAAM,IAAI02B,KAAJ,CAAU,iCAAV,CAAN,CAAA;IAEH,KAAA;;IAED12B,IAAAA,UAAU,CAACyJ,SAAX,CAAqBC,GAArB,CAAyB,qBAAzB,CAAA,CAAA;IAEA,IAAA,OAAOnL,IAAI,CAACo2B,SAAZ,CAdiB;;IAiBjB,IAAA,IAAIntB,UAAU,CAACjJ,IAAI,CAAC9J,WAAN,CAAd,EAAkC;IAC9B8J,MAAAA,IAAI,CAAC9J,WAAL,GAAmBid,MAAM,CAACnT,IAAI,CAAC9J,WAAN,CAAN,GAA2B,IAA9C,CAAA;IACH,KAnBgB;;;IAsBjB,IAAA,IAAI+S,UAAU,CAACjJ,IAAI,CAACtJ,OAAN,CAAd,EAA8B;IAC1B,MAAA,IAAIoS,OAAO,CAAC9I,IAAI,CAACxJ,cAAN,CAAX,EAAkC;IAC9BwJ,QAAAA,IAAI,CAACxJ,cAAL,GAAsBwJ,IAAI,CAACtJ,OAA3B,CAAA;IACH,OAAA;;IAED,MAAA,IAAIoS,OAAO,CAAC9I,IAAI,CAACvJ,YAAN,CAAX,EAAgC;IAC5BuJ,QAAAA,IAAI,CAACvJ,YAAL,GAAoBuJ,IAAI,CAACtJ,OAAzB,CAAA;IACH,OAAA;IACJ,KAAA;;IAED,IAAKsJ,IAAAA,CAAAA,IAAL,GAAYA,IAAZ,CAAA;IACA,IAAKyB,IAAAA,CAAAA,UAAL,GAAkBA,UAAlB,CAAA;IACA,IAAK22B,IAAAA,CAAAA,0BAAL,GAAkC,CAAlC,CAAA;IACA,IAAKC,IAAAA,CAAAA,wBAAL,GAAgC,CAAhC,CAAA;IACA,IAAA,IAAA,CAAK1tB,MAAL,GAAc,IAAIvK,MAAJ,CAAW,IAAX,CAAd,CAAA;;IACA,IAAA,IAAA,CAAKk4B,WAAL,CAAiB72B,UAAjB,EAA6BzB,IAA7B,CAAA,CAAA;IACH,GAAA;IAED;IACJ;IACA;;;IACI/D,EAAAA,OAAO,GAAG;IACN,IAAI,IAAA,IAAA,CAAK0O,MAAT,EAAiB;IACb,MAAKA,IAAAA,CAAAA,MAAL,CAAY1O,OAAZ,EAAA,CAAA;IACA,MAAK0O,IAAAA,CAAAA,MAAL,GAAc,IAAd,CAAA;IACH,KAAA;;IAED,IAAI,IAAA,IAAA,CAAKvJ,MAAT,EAAiB;IACb,MAAKA,IAAAA,CAAAA,MAAL,CAAYnF,OAAZ,EAAA,CAAA;IACA,MAAKmF,IAAAA,CAAAA,MAAL,GAAc,IAAd,CAAA;IACH,KAAA;;IACD,IAAKK,IAAAA,CAAAA,UAAL,GAAkB,IAAlB,CAAA;IACA,IAAKzB,IAAAA,CAAAA,IAAL,GAAY,IAAZ,CAAA;IACA,IAAKo4B,IAAAA,CAAAA,0BAAL,GAAkC,CAAlC,CAAA;IACA,IAAKC,IAAAA,CAAAA,wBAAL,GAAgC,CAAhC,CAAA;IACA,IAAA,IAAA,CAAKztB,GAAL,EAAA,CAAA;IACH,GAAA;;IAED0tB,EAAAA,WAAW,CAAC72B,UAAD,EAAauV,OAAb,EAAsB;IAC7B,IAAK5V,IAAAA,CAAAA,MAAL,GAAc,IAAI+0B,MAAJ,CAAW10B,UAAX,EAAuBuV,OAAvB,CAAd,CAAA;;IACA,IAAA,IAAA,CAAKuhB,WAAL,EAAA,CAAA;IACH,GAAA;;IAEDC,EAAAA,YAAY,GAAe;IAAA,IAAdxhB,IAAAA,OAAc,uEAAJ,EAAI,CAAA;IACvB,IAAK5V,IAAAA,CAAAA,MAAL,CAAYnF,OAAZ,EAAA,CAAA;IACA,IAAKmF,IAAAA,CAAAA,MAAL,GAAc,IAAd,CAAA;;IACA,IAAMq3B,MAAAA,QAAQ,GAAGp3B,MAAM,CAACg1B,MAAP,CAAc,IAAKr2B,CAAAA,IAAnB,EAAyBgX,OAAzB,CAAjB,CAAA;;IACA,IAAA,IAAA,CAAKshB,WAAL,CAAiB,IAAK72B,CAAAA,UAAtB,EAAkCg3B,QAAlC,CAAA,CAAA;IACH,GAAA;;IAEDF,EAAAA,WAAW,GAAG;IACV;IACAl3B,IAAAA,MAAM,CAACyE,IAAP,CAAYpJ,gBAAZ,CAA8BwE,CAAAA,OAA9B,CAAuCnC,GAAD,IAAS;IAC3C,MAAKqC,IAAAA,CAAAA,MAAL,CAAYsJ,EAAZ,CAAehO,gBAAgB,CAACqC,GAAD,CAA/B,EAAuC8G,KAAD,IAAW;IAC7C,QAAA,IAAA,CAAK2E,IAAL,CAAUzL,GAAV,EAAe8G,KAAf,CAAA,CAAA;IACH,OAFD,CAAA,CAAA;IAGH,KAJD,CAAA,CAAA;IAKH,GAAA;IAED;IACJ;IACA;IACA;;;IACI6yB,EAAAA,QAAQ,CAAC7yB,KAAD,EAAQ;IACZ,IAAKzE,IAAAA,CAAAA,MAAL,CAAYi2B,YAAZ,CAAyB;IACrBsB,MAAAA,OAAO,EAAE,CAAC,CAAC9yB,KAAAA;IADU,KAAzB,CAAA,CAAA;IAGH,GAAA;IAED;IACJ;IACA;;;IACItL,EAAAA,IAAI,GAAG;IACH,IAAA,IAAA,CAAK6G,MAAL,CAAY7G,IAAZ,CAAiB,IAAjB,CAAA,CAAA;IACH,GAAA;IAED;IACJ;IACA;;;IACIq+B,EAAAA,UAAU,GAAG;IACT,IAAA,IAAA,CAAKx3B,MAAL,CAAY7G,IAAZ,CAAiB,KAAjB,CAAA,CAAA;IACH,GAAA;IAED;IACJ;IACA;IACA;;;IACI6d,EAAAA,SAAS,CAACvS,KAAD,EAAQ;IACb,IAAA,IAAA,CAAKzE,MAAL,CAAYmW,MAAZ,GAAqB1R,KAArB,CAAA;IACH,GAAA;IAED;IACJ;IACA;;;IACIgzB,EAAAA,WAAW,GAAG;IACV,IAAA,IAAA,CAAKz3B,MAAL,CAAY3J,KAAZ,IAAqB,IAAK2J,CAAAA,MAAL,CAAY3J,KAAZ,CAAkBif,YAAlB,CAA+B,IAA/B,CAArB,CAAA;IACH,GAAA;IAED;IACJ;IACA;IACA;;;IACIhS,EAAAA,UAAU,CAACwF,IAAD,EAAO;IACbA,IAAAA,IAAI,GAAGiJ,MAAM,CAACjJ,IAAD,CAAb,CAAA;IACA,IAAK9I,IAAAA,CAAAA,MAAL,CAAYi2B,YAAZ,CAAyB;IACrB3gC,MAAAA,OAAO,EAAEwT,IADY;IAErB1T,MAAAA,cAAc,EAAE0T,IAFK;IAGrBzT,MAAAA,YAAY,EAAEyT,IAAAA;IAHO,KAAzB,CAAA,CAAA;IAKH,GAAA;IAED;IACJ;IACA;IACA;;;IACI4uB,EAAAA,YAAY,CAACr1B,IAAD,EAAO;IACfA,IAAAA,IAAI,GAAG0P,MAAM,CAAC1P,IAAD,CAAb,CAAA;IACA,IAAA,IAAIuT,OAAO,GAAG;IACV5gB,MAAAA,YAAY,EAAE,KADJ;IAEVD,MAAAA,QAAQ,EAAE,KAAA;IAFA,KAAd,CAAA;;IAIA,IAAA,QAAQsN,IAAR;IACI,MAAKtF,KAAAA,eAAe,CAACC,IAArB;IACI4Y,QAAAA,OAAO,CAAC5gB,YAAR,GAAuB,KAAvB,CAAA;IACA4gB,QAAAA,OAAO,CAAC7gB,QAAR,GAAmB,KAAnB,CAAA;IACA,QAAA,MAAA;;IACJ,MAAKgI,KAAAA,eAAe,CAACE,IAArB;IACI2Y,QAAAA,OAAO,CAAC5gB,YAAR,GAAuB,KAAvB,CAAA;IACA4gB,QAAAA,OAAO,CAAC7gB,QAAR,GAAmB,IAAnB,CAAA;IACA,QAAA,MAAA;;IACJ,MAAKgI,KAAAA,eAAe,CAACG,QAArB;IACI0Y,QAAAA,OAAO,CAAC5gB,YAAR,GAAuB,IAAvB,CAAA;IACA4gB,QAAAA,OAAO,CAAC7gB,QAAR,GAAmB,IAAnB,CAAA;IACA,QAAA,MAAA;IAZR,KAAA;;IAeA,IAAA,IAAA,CAAKiL,MAAL,CAAYi2B,YAAZ,CAAyBrgB,OAAzB,CAAA,CAAA;IACA,IAAA,IAAA,CAAKrb,MAAL,EAAA,CAAA;IACH,GAAA;IAED;IACJ;IACA;IACA;;;IACIrB,EAAAA,KAAK,GAAG;IACJ,IAAA,OAAO,IAAK8G,CAAAA,MAAL,CAAY9G,KAAZ,EAAP,CAAA;IACH,GAAA;IAED;IACJ;IACA;;;IACIN,EAAAA,KAAK,GAAG;IACJ;IACA,IAAA,IAAA,CAAKgG,IAAL,CAAUhI,GAAV,GAAgB,EAAhB,CAAA;IACA,IAAA,OAAO,IAAKoJ,CAAAA,MAAL,CAAYpH,KAAZ,EAAP,CAAA;IACH,GAAA;IAGD;IACJ;IACA;;;IACIsZ,EAAAA,SAAS,GAAG;IACR,IAAA,IAAA,CAAKlS,MAAL,CAAYzH,KAAZ,CAAkB2Z,SAAlB,EAAA,CAAA;IACH,GAAA;IAED;IACJ;IACA;IACA;IACA;;;IACI9b,EAAAA,IAAI,CAACQ,GAAD,EAAM;IACN,IAAA,OAAO,IAAI+9B,OAAJ,CAAY,CAACC,OAAD,EAAUuB,MAAV,KAAqB;IACpC,MAAI,IAAA,CAACv/B,GAAD,IAAQ,CAAC,KAAKgI,IAAL,CAAUhI,GAAvB,EAA4B;IACxB,QAAKwS,IAAAA,CAAAA,IAAL,CAAUtQ,MAAM,CAACY,KAAjB,EAAwB6B,YAAY,CAACC,SAArC,CAAA,CAAA;IACA26B,QAAAA,MAAM,EAAA,CAAA;IACN,QAAA,OAAA;IACH,OAAA;;IAED,MAAA,IAAIv/B,GAAJ,EAAS;IACL;IACA,QAAA,IAAI,IAAKgI,CAAAA,IAAL,CAAUhI,GAAd,EAAmB;IACf;IACA,UAAA,IAAIA,GAAG,KAAK,IAAA,CAAKgI,IAAL,CAAUhI,GAAtB,EAA2B;IACvB;IACA,YAAA,IAAI,IAAKoJ,CAAAA,MAAL,CAAY/G,OAAhB,EAAyB;IACrB27B,cAAAA,OAAO,EAAA,CAAA;IACV,aAFD,MAEO;IACH;IACA,cAAA,IAAA,CAAK1iB,SAAL,EAAA,CAAA;IACA,cAAKlS,IAAAA,CAAAA,MAAL,CAAY5J,IAAZ,CAAiB,IAAA,CAAKwI,IAAL,CAAUhI,GAA3B,CAAA,CAAgC+S,IAAhC,CAAqC,MAAM;IACvCirB,gBAAAA,OAAO,EAAA,CAAA;IACV,eAFD,CAAA,CAEGhrB,KAFH,CAES,MAAM;IACX,gBAAA,IAAA,CAAK5J,MAAL,CAAY9G,KAAZ,EAAoByQ,CAAAA,IAApB,CAAyB,MAAM;IAC3BwsB,kBAAAA,MAAM,EAAA,CAAA;IACT,iBAFD,CAAA,CAAA;IAGH,eAND,CAAA,CAAA;IAOH,aAAA;IACJ,WAfD,MAeO;IACH;IACA,YAAA,IAAA,CAAKn2B,MAAL,CAAY9G,KAAZ,EAAoByQ,CAAAA,IAApB,CAAyB,MAAM;IAC3B;IACA,cAAA,IAAA,CAAKuI,SAAL,EAAA,CAAA;IACA,cAAA,OAAO,IAAKylB,CAAAA,KAAL,CAAW/gC,GAAX,CAAP,CAAA;IACH,aAJD,CAAA,CAIGgT,KAJH,CAIS,MAAM;IACXusB,cAAAA,MAAM,EAAA,CAAA;IACT,aAND,CAAA,CAAA;IAOH,WAAA;IACJ,SA3BD,MA2BO;IACH,UAAA,OAAO,IAAKwB,CAAAA,KAAL,CAAW/gC,GAAX,CAAP,CAAA;IACH,SAAA;IACJ,OAhCD,MAgCO;IACH;IACA;IACA,QAAKoJ,IAAAA,CAAAA,MAAL,CAAY5J,IAAZ,CAAiB,IAAA,CAAKwI,IAAL,CAAUhI,GAA3B,CAAA,CAAgC+S,IAAhC,CAAqC,MAAM;IACvCirB,UAAAA,OAAO,EAAA,CAAA;IACV,SAFD,CAAA,CAEGhrB,KAFH,CAES,MAAM;IACX,UAAA,IAAA,CAAK5J,MAAL,CAAY9G,KAAZ,EAAoByQ,CAAAA,IAApB,CAAyB,MAAM;IAC3BwsB,YAAAA,MAAM,EAAA,CAAA;IACT,WAFD,CAAA,CAAA;IAGH,SAND,CAAA,CAAA;IAOH,OAAA;IACJ,KAlDM,CAAP,CAAA;IAmDH,GAAA;IAED;IACJ;IACA;IACA;IACA;IACA;;;IACIwB,EAAAA,KAAK,CAAC/gC,GAAD,EAAM;IACP,IAAA,OAAO,IAAI+9B,OAAJ,CAAY,CAACC,OAAD,EAAUuB,MAAV,KAAqB;IACpC,MAAA,IAAA,CAAKv3B,IAAL,CAAUhI,GAAV,GAAgBA,GAAhB,CADoC;;IAGpC,MAAMghC,MAAAA,MAAM,GAAGhhC,GAAG,CAACulB,OAAJ,CAAY,MAAZ,CAAA,KAAwB,CAAvC,CAHoC;;IAKpC,MAAA,MAAMnlB,QAAQ,GAAG4gC,MAAM,GAAGtjC,oBAAoB,CAACE,KAAxB,GAAgCF,oBAAoB,CAACC,SAA5E,CALoC;;IAOpC,MAAM0C,MAAAA,SAAS,GAAI2gC,MAAM,IAAIhhC,GAAG,CAACulB,OAAJ,CAAY,MAAZ,CAAA,KAAwB,CAAC,CAAnC,IAAwC,IAAKvd,CAAAA,IAAL,CAAU3J,KAAnD,GAA4DP,UAAU,CAACC,GAAvE,GAA6ED,UAAU,CAACE,GAA1G,CAAA;IAEA,MAAKoL,IAAAA,CAAAA,MAAL,CAAYi2B,YAAZ,CAAyB;IACrBj/B,QAAAA,QADqB;IAErBC,QAAAA,SAAAA;IAFqB,OAAzB,CAAA,CAAA;IAKA,MAAK+I,IAAAA,CAAAA,MAAL,CAAYsK,IAAZ,CAAiB/O,YAAY,CAACK,yBAA9B,EAAyD,MAAM;IAC3D,QAAA,IAAA,CAAKhD,KAAL,EAAA,CAAa+Q,IAAb,CAAkB,MAAM;IACpB,UAAA,IAAI,KAAK3J,MAAL,CAAYpB,IAAZ,CAAiBtH,QAArB,EAA+B;IAC3B,YAAK0I,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,WAAtB,EAAmC,8CAAnC,CAAA,CAAA;;IACA,YAAA,IAAA,CAAK29B,YAAL,CAAkB;IAAChgC,cAAAA,MAAM,EAAE,KAAA;IAAT,aAAlB,CAAA,CAAA;;IACA,YAAA,IAAA,CAAKhB,IAAL,CAAUQ,GAAV,CAAe+S,CAAAA,IAAf,CAAoB,MAAM;IACtB;IACA,cAAK3J,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,WAAtB,EAAmC,sDAAnC,CAAA,CAAA;IACH,aAHD,CAAA,CAGGmQ,KAHH,CAGS,MAAM;IACX;IACA,cAAK5J,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,WAAtB,EAAmC,oDAAnC,CAAA,CAAA;IACH,aAND,CAAA,CAAA;IAOH,WAAA;IACJ,SAZD,CAAA,CAAA;IAaH,OAdD,CAAA,CAAA;IAgBA,MAAKuG,IAAAA,CAAAA,MAAL,CAAYsK,IAAZ,CAAiB/O,YAAY,CAACI,uBAA9B,EAAuD,MAAM;IACzD,QAAA,IAAA,CAAK/C,KAAL,EAAA,CAAa+Q,IAAb,CAAkB,MAAM;IACpB,UAAA,IAAI,KAAK3J,MAAL,CAAYpB,IAAZ,CAAiBtH,QAArB,EAA+B;IAC3B,YAAK0I,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,WAAtB,EAAmC,8CAAnC,CAAA,CAAA;;IACA,YAAA,IAAA,CAAK29B,YAAL,CAAkB;IAAClgC,cAAAA,MAAM,EAAE,KAAA;IAAT,aAAlB,CAAA,CAAA;;IACA,YAAA,IAAA,CAAKd,IAAL,CAAUQ,GAAV,CAAe+S,CAAAA,IAAf,CAAoB,MAAM;IACtB;IACA,cAAK3J,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,WAAtB,EAAmC,sDAAnC,CAAA,CAAA;IACH,aAHD,CAAA,CAGGmQ,KAHH,CAGS,MAAM;IACX;IACA,cAAK5J,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,WAAtB,EAAmC,oDAAnC,CAAA,CAAA;IACH,aAND,CAAA,CAAA;IAOH,WAAA;IACJ,SAZD,CAAA,CAAA;IAaH,OAdD,EA9BoC;;IA+CpC,MAAKuG,IAAAA,CAAAA,MAAL,CAAYsK,IAAZ,CAAiB/O,YAAY,CAACM,eAA9B,EAA+C,MAAM;IACjD,QAAA,IAAI,KAAKmE,MAAL,CAAYpB,IAAZ,CAAiBrH,qBAArB,EAA4C;IACxC,UAAA,IAAA,CAAKqB,KAAL,EAAA,CAAa+Q,IAAb,CAAkB,MAAM;IACpB,YAAK3J,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,WAAtB,EAAmC,6CAAnC,CAAA,CAAA;;IACA,YAAA,IAAA,CAAK29B,YAAL,CAAkB;IAAClgC,cAAAA,MAAM,EAAE,KAAA;IAAT,aAAlB,CAAA,CAAA;;IACA,YAAA,IAAA,CAAKd,IAAL,CAAUQ,GAAV,CAAe+S,CAAAA,IAAf,CAAoB,MAAM;IACtB;IACA,cAAK3J,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,WAAtB,EAAmC,qDAAnC,CAAA,CAAA;IACH,aAHD,CAAA,CAGGmQ,KAHH,CAGS,MAAM;IACX;IACA,cAAK5J,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,WAAtB,EAAmC,mDAAnC,CAAA,CAAA;IACH,aAND,CAAA,CAAA;IAOH,WAVD,CAAA,CAAA;IAWH,SAAA;IACJ,OAdD,EA/CoC;;IAgEpC,MAAKuG,IAAAA,CAAAA,MAAL,CAAYsK,IAAZ,CAAiBxR,MAAM,CAACa,YAAxB,EAAsC,MAAM;IACxC,QAAA,IAAI,KAAKqG,MAAL,CAAYpB,IAAZ,CAAiBpJ,kBAAjB,IAAuC,IAAA,CAAKyhC,wBAAL,GAAgC,KAAKj3B,MAAL,CAAYpB,IAAZ,CAAiBlJ,uBAA5F,EAAqH;IACjH,UAAKuhC,IAAAA,CAAAA,wBAAL,IAAiC,CAAjC,CAAA;IACA,UAAA,IAAA,CAAK7gC,IAAL,CAAUQ,GAAV,CAAe+S,CAAAA,IAAf,CAAoB,MAAM;IACtB;IACA,YAAKstB,IAAAA,CAAAA,wBAAL,GAAgC,CAAhC,CAAA;IACH,WAHD,CAGGrtB,CAAAA,KAHH,CAGS,MAAM;IAEd,WALD,CAAA,CAAA;IAMH,SAAA;IACJ,OAVD,EAhEoC;;IA6EpC,MAAK5J,IAAAA,CAAAA,MAAL,CAAYsK,IAAZ,CAAiBxR,MAAM,CAAC1D,cAAxB,EAAwC,MAAM;IAC1C,QAAA,IAAI,KAAK4K,MAAL,CAAYpB,IAAZ,CAAiBrJ,oBAAjB,IAAyC,IAAA,CAAKyhC,0BAAL,GAAkC,KAAKh3B,MAAL,CAAYpB,IAAZ,CAAiBnJ,yBAAhG,EAA2H;IACvH,UAAKuhC,IAAAA,CAAAA,0BAAL,IAAmC,CAAnC,CAAA;IACA,UAAA,IAAA,CAAK5gC,IAAL,CAAUQ,GAAV,CAAe+S,CAAAA,IAAf,CAAoB,MAAM;IACtB;IACA,YAAKqtB,IAAAA,CAAAA,0BAAL,GAAkC,CAAlC,CAAA;IACH,WAHD,CAGGptB,CAAAA,KAHH,CAGS,MAAM;IAEd,WALD,CAAA,CAAA;IAMH,SAAA;IACJ,OAVD,CAAA,CAAA;;IAaA,MAAI,IAAA,IAAA,CAAKiuB,SAAL,EAAJ,EAAsB;IAClB,QAAK73B,IAAAA,CAAAA,MAAL,CAAY5J,IAAZ,CAAiBQ,GAAjB,CAAsB+S,CAAAA,IAAtB,CAA2B,MAAM;IAC7BirB,UAAAA,OAAO,EAAA,CAAA;IACV,SAFD,CAAA,CAEGhrB,KAFH,CAES,MAAM;IACX,UAAA,IAAA,CAAK5J,MAAL,CAAY9G,KAAZ,EAAoByQ,CAAAA,IAApB,CAAyB,MAAM;IAC3BwsB,YAAAA,MAAM,EAAA,CAAA;IACT,WAFD,CAAA,CAAA;IAGH,SAND,CAAA,CAAA;IAOH,OARD,MAQO;IACH,QAAKn2B,IAAAA,CAAAA,MAAL,CAAYsK,IAAZ,CAAiBxR,MAAM,CAACE,iBAAxB,EAA2C,MAAM;IAC7C,UAAKgH,IAAAA,CAAAA,MAAL,CAAY5J,IAAZ,CAAiBQ,GAAjB,CAAsB+S,CAAAA,IAAtB,CAA2B,MAAM;IAC7BirB,YAAAA,OAAO,EAAA,CAAA;IACV,WAFD,CAAA,CAEGhrB,KAFH,CAES,MAAM;IACX,YAAA,IAAA,CAAK5J,MAAL,CAAY9G,KAAZ,EAAoByQ,CAAAA,IAApB,CAAyB,MAAM;IAC3BwsB,cAAAA,MAAM,EAAA,CAAA;IACT,aAFD,CAAA,CAAA;IAGH,WAND,CAAA,CAAA;IAOH,SARD,CAAA,CAAA;IASH,OAAA;IACJ,KA7GM,CAAP,CAAA;IA8GH,GAAA;IAED;IACJ;IACA;;;IACI57B,EAAAA,MAAM,GAAG;IACL,IAAKyF,IAAAA,CAAAA,MAAL,CAAYzF,MAAZ,EAAA,CAAA;IACH,GAAA;IAED;IACJ;IACA;IACA;;;IACIu9B,EAAAA,aAAa,CAAChvB,IAAD,EAAO;IAChBA,IAAAA,IAAI,GAAGiJ,MAAM,CAACjJ,IAAD,CAAb,CADgB;;IAGhB,IAAK9I,IAAAA,CAAAA,MAAL,CAAYi2B,YAAZ,CAAyB;IACrBnhC,MAAAA,WAAW,EAAEgU,IAAI,GAAG,IAAA;IADC,KAAzB,EAHgB;;IAOhB,IAAK9I,IAAAA,CAAAA,MAAL,CAAYqb,aAAZ,IAA6B,IAAA,CAAKrb,MAAL,CAAYqb,aAAZ,CAA0BuB,gBAA1B,CAA2C;IACpEjf,MAAAA,GAAG,EAAE,aAD+D;IAEpE8G,MAAAA,KAAK,EAAEqE,IAAI,GAAG,IAAA;IAFsD,KAA3C,CAA7B,CAAA;IAIH,GAAA;IAED;IACJ;IACA;IACA;;;IACIivB,EAAAA,SAAS,CAACC,GAAD,EAAM;IACXA,IAAAA,GAAG,GAAGhW,QAAQ,CAACgW,GAAD,EAAM,EAAN,CAAd,CAAA;IACA,IAAMC,MAAAA,IAAI,GAAG,CAAC,CAAD,EAAI,EAAJ,EAAQ,GAAR,CAAb,CAAA;;IACA,IAAA,IAAI,IAAKr5B,CAAAA,IAAL,CAAU/H,MAAV,KAAqBmhC,GAArB,IAA4BC,IAAI,CAAC9b,OAAL,CAAa6b,GAAb,CAAsB,KAAA,CAAC,CAAvD,EAA0D;IACtD,MAAA,OAAA;IACH,KAAA;;IACD,IAAKh4B,IAAAA,CAAAA,MAAL,CAAYi2B,YAAZ,CAAyB;IACrBp/B,MAAAA,MAAM,EAAEmhC,GAAAA;IADa,KAAzB,CAAA,CAAA;IAGA,IAAA,IAAA,CAAKz9B,MAAL,EAAA,CAAA;IACH,GAAA;IAED;IACJ;IACA;IACA;;;IACIs9B,EAAAA,SAAS,GAAG;IACR,IAAO,OAAA,IAAA,CAAK73B,MAAL,CAAYyJ,MAAnB,CAAA;IACH,GAAA;IAED;IACJ;IACA;;;IACIyuB,EAAAA,eAAe,GAAG;IACd,IAAKl4B,IAAAA,CAAAA,MAAL,CAAYi2B,YAAZ,CAAyB;IACrBpgC,MAAAA,YAAY,EAAE,IAAA;IADO,KAAzB,CAAA,CAAA;IAGH,GAAA;IAED;IACJ;IACA;IACA;;;IACIsiC,EAAAA,aAAa,CAACphB,IAAD,EAAO;IAChB,IAAA,MAAM7gB,UAAU,GAAG,CAAC,CAAC6gB,IAArB,CAAA;;IACA,IAAA,IAAI,KAAK/W,MAAL,CAAY9J,UAAZ,KAA2BA,UAA/B,EAA2C;IACvC,MAAA,IAAA,CAAK8J,MAAL,CAAY9J,UAAZ,GAAyBA,UAAzB,CAAA;IACH,KAAA;IACJ,GAAA;IAED;IACJ;IACA;IACA;IACA;IACA;IACA;;;IACIC,EAAAA,UAAU,CAACob,QAAD,EAAWC,MAAX,EAAmBC,OAAnB,EAA4BpP,IAA5B,EAAkC;IACxC,IAAA,OAAO,IAAKrC,CAAAA,MAAL,CAAYzH,KAAZ,CAAkBpC,UAAlB,CAA6Bob,QAA7B,EAAuCC,MAAvC,EAA+CC,OAA/C,EAAwDpP,IAAxD,CAAP,CAAA;IACH,GAAA;IAED;IACJ;IACA;IACA;IACA;IACA;;;IACI0X,EAAAA,WAAW,CAACjX,QAAD,EAAW2W,QAAX,EAAqB;IAC5B,IAAA,OAAO,IAAIkb,OAAJ,CAAY,CAACC,OAAD,EAAUuB,MAAV,KAAqB;IACpC,MAAA,IAAI,IAAKn2B,CAAAA,MAAL,CAAY/G,OAAhB,EAAyB;IACrB,QAAA,IAAA,CAAK+G,MAAL,CAAY+Z,WAAZ,CAAwBjX,QAAxB,EAAkC2W,QAAlC,CAAA,CAAA;IACAmb,QAAAA,OAAO,EAAA,CAAA;IACV,OAHD,MAGO;IACHuB,QAAAA,MAAM,EAAA,CAAA;IACT,OAAA;IACJ,KAPM,CAAP,CAAA;IAQH,GAAA;;IAEDpb,EAAAA,iBAAiB,GAAG;IAChB,IAAA,IAAI,IAAK/a,CAAAA,MAAL,CAAYlG,SAAhB,EAA2B;IACvB,MAAKkG,IAAAA,CAAAA,MAAL,CAAY+a,iBAAZ,EAAA,CAAA;IACH,KAAA;IACJ,GAAA;IAED;IACJ;IACA;IACA;;;IACI/E,EAAAA,SAAS,GAAG;IACR,IAAO,OAAA,IAAA,CAAKhW,MAAL,CAAY/G,OAAnB,CAAA;IACH,GAAA;IAED;IACJ;IACA;IACA;;;IACIgd,EAAAA,MAAM,GAAG;IACL,IAAA,OAAO,IAAKjW,CAAAA,MAAL,CAAY3J,KAAZ,GAAoB,IAAA,CAAK2J,MAAL,CAAY3J,KAAZ,CAAkB4f,MAAtC,GAA+C,IAAtD,CAAA;IACH,GAAA;IAED;IACJ;IACA;IACA;;;IACIyD,EAAAA,WAAW,GAAG;IACV,IAAA,OAAO,IAAK1Z,CAAAA,MAAL,CAAY2a,QAAZ,CAAqB7gB,SAA5B,CAAA;IACH,GAAA;;IAjf2B,CAAA;;IAufhC4L,MAAM,CAACkxB,SAAP,GAAmBA,SAAnB;;;;;;;;"} \ No newline at end of file +{"version":3,"file":"jessibuca.js","sources":["../../src/constant/index.js","../../src/utils/debug.js","../../src/utils/events.js","../../src/player/property.js","../../node_modules/.pnpm/screenfull@5.1.0/node_modules/screenfull/dist/screenfull.js","../../src/utils/index.js","../../src/player/events.js","../../src/utils/emitter.js","../../src/utils/webgl.js","../../src/video/commonLoader.js","../../src/video/canvasLoader.js","../../src/video/videoLoader.js","../../src/video/index.js","../../src/audio/audioContextLoader.js","../../src/audio/index.js","../../src/stream/fetchLoader.js","../../src/stream/websocketLoader.js","../../src/stream/index.js","../../node_modules/.pnpm/recordrtc@5.6.2/node_modules/recordrtc/RecordRTC.js","../../src/recorder/recordRTCLoader.js","../../src/recorder/index.js","../../src/worker/index.js","../../src/demux/commonLoader.js","../../src/demux/flvLoader.js","../../src/demux/m7sLoader.js","../../src/demux/index.js","../../src/decoder/webcodecs.js","../../src/control/icons.js","../../src/control/template.js","../../src/control/observer.js","../../src/control/property.js","../../src/control/events.js","../../node_modules/.pnpm/style-inject@0.3.0/node_modules/style-inject/dist/style-inject.es.js","../../src/control/hotkey.js","../../src/control/index.js","../../src/player/observer.js","../../src/remux/fmp4-generator.js","../../src/utils/exp-golomb.js","../../src/utils/h264-sps-parser.js","../../src/utils/h264.js","../../src/utils/h265-sps-parser.js","../../src/utils/h265.js","../../src/decoder/mediaSource.js","../../src/utils/noSleep.js","../../src/player/index.js","../../src/jessibuca.js"],"sourcesContent":["// 播放协议\nexport const PLAYER_PLAY_PROTOCOL = {\n websocket: 0,\n fetch: 1,\n webrtc: 2,\n}\n\nexport const DEMUX_TYPE = {\n flv: 'flv',\n m7s: 'm7s'\n}\n\n\n// default player options\nexport const DEFAULT_PLAYER_OPTIONS = {\n videoBuffer: 1000, //1000ms == 1 second\n isResize: true,\n isFullResize: false, //\n isFlv: false,\n debug: false,\n hotKey: false, // 快捷键\n loadingTimeout: 10, // loading timeout\n heartTimeout: 5, // heart timeout\n timeout: 10, // second\n loadingTimeoutReplay: false, // loading timeout replay\n heartTimeoutReplay: false,// heart timeout replay。\n loadingTimeoutReplayTimes: 3, // loading timeout replay fail times\n heartTimeoutReplayTimes: 3, // heart timeout replay fail times\n supportDblclickFullscreen: false,\n showBandwidth: false, //\n keepScreenOn: false,\n isNotMute: false,\n hasAudio: true,\n hasVideo: true,\n operateBtns: {\n fullscreen: false,\n screenshot: false,\n play: false,\n audio: false,\n record: false,\n },\n controlAutoHide: false,\n hasControl: false,\n loadingText: '',\n background: '',\n decoder: 'decoder.js',\n url: '',//\n rotate: 0,\n // text: '',\n forceNoOffscreen: true, // 默认是不采用\n hiddenAutoPause: false,\n protocol: PLAYER_PLAY_PROTOCOL.fetch,\n demuxType: DEMUX_TYPE.flv, //\n useWCS: false, //\n wcsUseVideoRender: false,\n useMSE: false, //\n useOffscreen: false, //\n autoWasm: true, // 自动降级到 wasm 模式\n wasmDecodeErrorReplay: true, // 解码失败重新播放。\n openWebglAlignment: false,// https://github.com/langhuihui/jessibuca/issues/152\n}\n\n\nexport const WORKER_CMD_TYPE = {\n init: 'init',\n initVideo: 'initVideo',\n render: 'render',\n playAudio: 'playAudio',\n initAudio: 'initAudio',\n kBps: 'kBps',\n decode: 'decode',\n audioCode: 'audioCode',\n videoCode: 'videoCode',\n wasmError: 'wasmError'\n}\n\nexport const WASM_ERROR = {\n invalidNalUnitSize: 'Invalid NAL unit size',\n // errorSplittingTheInputIntoNALUnits: 'Error splitting the input into NAL units'\n}\n\nexport const MEDIA_TYPE = {\n audio: 1,\n video: 2\n}\n\nexport const FLV_MEDIA_TYPE = {\n audio: 8,\n video: 9\n}\n\nexport const WORKER_SEND_TYPE = {\n init: 'init',\n decode: 'decode',\n audioDecode: 'audioDecode',\n videoDecode: 'videoDecode',\n close: 'close',\n updateConfig: 'updateConfig'\n}\n\n\n//\nexport const EVENTS = {\n fullscreen: 'fullscreen$2',\n webFullscreen: 'webFullscreen',\n decoderWorkerInit: 'decoderWorkerInit',\n play: 'play',\n playing: 'playing',\n pause: 'pause',\n mute: 'mute',\n load: 'load',\n loading: 'loading',\n videoInfo: 'videoInfo',\n timeUpdate: 'timeUpdate',\n audioInfo: \"audioInfo\",\n log: 'log',\n error: \"error\",\n kBps: 'kBps',\n timeout: 'timeout',\n delayTimeout: 'delayTimeout',\n loadingTimeout: 'loadingTimeout',\n stats: 'stats',\n performance: \"performance\",\n record: 'record',\n recording: 'recording',\n recordingTimestamp: 'recordingTimestamp',\n recordStart: 'recordStart',\n recordEnd: 'recordEnd',\n recordCreateError: 'recordCreateError',\n buffer: 'buffer',\n videoFrame: 'videoFrame',\n start: 'start',\n metadata: 'metadata',\n resize: 'resize',\n streamEnd: 'streamEnd',\n streamSuccess: 'streamSuccess',\n streamMessage: 'streamMessage',\n streamError: 'streamError',\n volumechange: 'volumechange',\n destroy: 'destroy',\n mseSourceOpen: 'mseSourceOpen',\n mseSourceClose: 'mseSourceClose',\n mseSourceBufferError: 'mseSourceBufferError',\n mseSourceBufferBusy: 'mseSourceBufferBusy',\n videoWaiting: 'videoWaiting',\n videoTimeUpdate: 'videoTimeUpdate',\n videoSyncAudio: 'videoSyncAudio',\n playToRenderTimes: 'playToRenderTimes'\n}\n\n\nexport const JESSIBUCA_EVENTS = {\n load: EVENTS.load,\n timeUpdate: EVENTS.timeUpdate,\n videoInfo: EVENTS.videoInfo,\n audioInfo: EVENTS.audioInfo,\n error: EVENTS.error,\n kBps: EVENTS.kBps,\n log: EVENTS.log,\n start: EVENTS.start,\n timeout: EVENTS.timeout,\n loadingTimeout: EVENTS.loadingTimeout,\n delayTimeout: EVENTS.delayTimeout,\n fullscreen: 'fullscreen',\n play: EVENTS.play,\n pause: EVENTS.pause,\n mute: EVENTS.mute,\n stats: EVENTS.stats,\n performance: EVENTS.performance,\n recordingTimestamp: EVENTS.recordingTimestamp,\n recordStart: EVENTS.recordStart,\n recordEnd: EVENTS.recordEnd,\n playToRenderTimes: EVENTS.playToRenderTimes\n}\n\nexport const EVENTS_ERROR = {\n playError: 'playIsNotPauseOrUrlIsNull',\n fetchError: \"fetchError\",\n websocketError: 'websocketError',\n webcodecsH265NotSupport: 'webcodecsH265NotSupport',\n mediaSourceH265NotSupport: 'mediaSourceH265NotSupport',\n wasmDecodeError: 'wasmDecodeError'\n}\n\n\nexport const WEBSOCKET_STATUS = {\n notConnect: 'notConnect',\n open: 'open',\n close: 'close',\n error: 'error'\n}\n\nexport const BUFFER_STATUS = {\n empty: 'empty',\n buffering: 'buffering',\n full: 'full'\n}\n\n\nexport const SCREENSHOT_TYPE = {\n download: 'download',\n base64: 'base64',\n blob: 'blob'\n}\n\n\nexport const VIDEO_ENC_TYPE = {\n 7: 'H264(AVC)', //\n 12: 'H265(HEVC)' //\n}\n\nexport const VIDEO_ENC_CODE = {\n h264: 7,\n h265: 12\n}\n\n\nexport const AUDIO_ENC_TYPE = {\n 10: 'AAC',\n 7: 'ALAW',\n 8: 'MULAW'\n}\n\nexport const H265_NAL_TYPE = {\n vps: 32,\n sps: 33,\n pps: 34\n}\n\nexport const CONTROL_HEIGHT = 38\n\nexport const SCALE_MODE_TYPE = {\n full: 0, // 视频画面完全填充canvas区域,画面会被拉伸\n auto: 1, // 视频画面做等比缩放后,高或宽对齐canvas区域,画面不被拉伸,但有黑边\n fullAuto: 2 // 视频画面做等比缩放后,完全填充canvas区域,画面不被拉伸,没有黑边,但画面显示不全\n}\n\n\nexport const FILE_SUFFIX = {\n mp4: 'mp4',\n webm: 'webm'\n};\n\n\nexport const CANVAS_RENDER_TYPE = {\n webcodecs: 'webcodecs',\n webgl: 'webgl',\n offscreen: 'offscreen'\n}\n\nexport const ENCODED_VIDEO_TYPE = {\n key: 'key',\n delta: 'delta'\n}\n\n\nexport const MP4_CODECS = {\n avc: 'video/mp4; codecs=\"avc1.64002A\"',\n hev: 'video/mp4; codecs=\"hev1.1.6.L123.b0\"',\n}\n\n\nexport const MEDIA_SOURCE_STATE = {\n ended: 'ended',\n open: 'open',\n closed: 'closed'\n}\n\n\n// frag duration\nexport const FRAG_DURATION = Math.ceil(1000 / 25)\n\n\nexport const AUDIO_SYNC_VIDEO_DIFF = 1000;\n\n\nexport const HOT_KEY = {\n esc: 27, //\n arrowUp: 38, //\n arrowDown: 40, //\n}\n","export default class Debug {\n constructor(master) {\n this.log = (name, ...args) => {\n if (master._opt.debug) {\n console.log(`Jessibuca: [${name}]`, ...args);\n }\n };\n\n this.warn = (name, ...args) => {\n if (master._opt.debug) {\n console.warn(`Jessibuca: [${name}]`, ...args);\n }\n };\n\n this.error = (name, ...args) => {\n if (master._opt.debug) {\n console.error(`Jessibuca: [${name}]`, ...args);\n }\n };\n }\n}\n","export default class Events {\n constructor(master) {\n this.destroys = [];\n this.proxy = this.proxy.bind(this);\n this.master = master;\n }\n\n proxy(target, name, callback, option = {}) {\n if (!target) {\n return;\n }\n if (Array.isArray(name)) {\n return name.map(item => this.proxy(target, item, callback, option));\n }\n target.addEventListener(name, callback, option);\n const destroy = () => target.removeEventListener(name, callback, option);\n this.destroys.push(destroy);\n return destroy;\n }\n\n destroy() {\n this.master.debug && this.master.debug.log(`Events`, 'destroy');\n this.destroys.forEach(event => event());\n }\n}\n","export default (player) => {\n Object.defineProperty(player, 'rect', {\n get: () => {\n const clientRect = player.$container.getBoundingClientRect()\n clientRect.width = Math.max(clientRect.width, player.$container.clientWidth);\n clientRect.height = Math.max(clientRect.height, player.$container.clientHeight);\n return clientRect;\n },\n });\n\n ['bottom', 'height', 'left', 'right', 'top', 'width'].forEach(key => {\n Object.defineProperty(player, key, {\n get: () => {\n return player.rect[key];\n },\n });\n });\n}\n","/*!\n* screenfull\n* v5.1.0 - 2020-12-24\n* (c) Sindre Sorhus; MIT License\n*/\n(function () {\n\t'use strict';\n\n\tvar document = typeof window !== 'undefined' && typeof window.document !== 'undefined' ? window.document : {};\n\tvar isCommonjs = typeof module !== 'undefined' && module.exports;\n\n\tvar fn = (function () {\n\t\tvar val;\n\n\t\tvar fnMap = [\n\t\t\t[\n\t\t\t\t'requestFullscreen',\n\t\t\t\t'exitFullscreen',\n\t\t\t\t'fullscreenElement',\n\t\t\t\t'fullscreenEnabled',\n\t\t\t\t'fullscreenchange',\n\t\t\t\t'fullscreenerror'\n\t\t\t],\n\t\t\t// New WebKit\n\t\t\t[\n\t\t\t\t'webkitRequestFullscreen',\n\t\t\t\t'webkitExitFullscreen',\n\t\t\t\t'webkitFullscreenElement',\n\t\t\t\t'webkitFullscreenEnabled',\n\t\t\t\t'webkitfullscreenchange',\n\t\t\t\t'webkitfullscreenerror'\n\n\t\t\t],\n\t\t\t// Old WebKit\n\t\t\t[\n\t\t\t\t'webkitRequestFullScreen',\n\t\t\t\t'webkitCancelFullScreen',\n\t\t\t\t'webkitCurrentFullScreenElement',\n\t\t\t\t'webkitCancelFullScreen',\n\t\t\t\t'webkitfullscreenchange',\n\t\t\t\t'webkitfullscreenerror'\n\n\t\t\t],\n\t\t\t[\n\t\t\t\t'mozRequestFullScreen',\n\t\t\t\t'mozCancelFullScreen',\n\t\t\t\t'mozFullScreenElement',\n\t\t\t\t'mozFullScreenEnabled',\n\t\t\t\t'mozfullscreenchange',\n\t\t\t\t'mozfullscreenerror'\n\t\t\t],\n\t\t\t[\n\t\t\t\t'msRequestFullscreen',\n\t\t\t\t'msExitFullscreen',\n\t\t\t\t'msFullscreenElement',\n\t\t\t\t'msFullscreenEnabled',\n\t\t\t\t'MSFullscreenChange',\n\t\t\t\t'MSFullscreenError'\n\t\t\t]\n\t\t];\n\n\t\tvar i = 0;\n\t\tvar l = fnMap.length;\n\t\tvar ret = {};\n\n\t\tfor (; i < l; i++) {\n\t\t\tval = fnMap[i];\n\t\t\tif (val && val[1] in document) {\n\t\t\t\tfor (i = 0; i < val.length; i++) {\n\t\t\t\t\tret[fnMap[0][i]] = val[i];\n\t\t\t\t}\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t})();\n\n\tvar eventNameMap = {\n\t\tchange: fn.fullscreenchange,\n\t\terror: fn.fullscreenerror\n\t};\n\n\tvar screenfull = {\n\t\trequest: function (element, options) {\n\t\t\treturn new Promise(function (resolve, reject) {\n\t\t\t\tvar onFullScreenEntered = function () {\n\t\t\t\t\tthis.off('change', onFullScreenEntered);\n\t\t\t\t\tresolve();\n\t\t\t\t}.bind(this);\n\n\t\t\t\tthis.on('change', onFullScreenEntered);\n\n\t\t\t\telement = element || document.documentElement;\n\n\t\t\t\tvar returnPromise = element[fn.requestFullscreen](options);\n\n\t\t\t\tif (returnPromise instanceof Promise) {\n\t\t\t\t\treturnPromise.then(onFullScreenEntered).catch(reject);\n\t\t\t\t}\n\t\t\t}.bind(this));\n\t\t},\n\t\texit: function () {\n\t\t\treturn new Promise(function (resolve, reject) {\n\t\t\t\tif (!this.isFullscreen) {\n\t\t\t\t\tresolve();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar onFullScreenExit = function () {\n\t\t\t\t\tthis.off('change', onFullScreenExit);\n\t\t\t\t\tresolve();\n\t\t\t\t}.bind(this);\n\n\t\t\t\tthis.on('change', onFullScreenExit);\n\n\t\t\t\tvar returnPromise = document[fn.exitFullscreen]();\n\n\t\t\t\tif (returnPromise instanceof Promise) {\n\t\t\t\t\treturnPromise.then(onFullScreenExit).catch(reject);\n\t\t\t\t}\n\t\t\t}.bind(this));\n\t\t},\n\t\ttoggle: function (element, options) {\n\t\t\treturn this.isFullscreen ? this.exit() : this.request(element, options);\n\t\t},\n\t\tonchange: function (callback) {\n\t\t\tthis.on('change', callback);\n\t\t},\n\t\tonerror: function (callback) {\n\t\t\tthis.on('error', callback);\n\t\t},\n\t\ton: function (event, callback) {\n\t\t\tvar eventName = eventNameMap[event];\n\t\t\tif (eventName) {\n\t\t\t\tdocument.addEventListener(eventName, callback, false);\n\t\t\t}\n\t\t},\n\t\toff: function (event, callback) {\n\t\t\tvar eventName = eventNameMap[event];\n\t\t\tif (eventName) {\n\t\t\t\tdocument.removeEventListener(eventName, callback, false);\n\t\t\t}\n\t\t},\n\t\traw: fn\n\t};\n\n\tif (!fn) {\n\t\tif (isCommonjs) {\n\t\t\tmodule.exports = {isEnabled: false};\n\t\t} else {\n\t\t\twindow.screenfull = {isEnabled: false};\n\t\t}\n\n\t\treturn;\n\t}\n\n\tObject.defineProperties(screenfull, {\n\t\tisFullscreen: {\n\t\t\tget: function () {\n\t\t\t\treturn Boolean(document[fn.fullscreenElement]);\n\t\t\t}\n\t\t},\n\t\telement: {\n\t\t\tenumerable: true,\n\t\t\tget: function () {\n\t\t\t\treturn document[fn.fullscreenElement];\n\t\t\t}\n\t\t},\n\t\tisEnabled: {\n\t\t\tenumerable: true,\n\t\t\tget: function () {\n\t\t\t\t// Coerce to boolean in case of old WebKit\n\t\t\t\treturn Boolean(document[fn.fullscreenEnabled]);\n\t\t\t}\n\t\t}\n\t});\n\n\tif (isCommonjs) {\n\t\tmodule.exports = screenfull;\n\t} else {\n\t\twindow.screenfull = screenfull;\n\t}\n})();\n","import {MP4_CODECS, FILE_SUFFIX} from \"../constant\";\n\nexport function noop() {\n}\n\n\nexport function supportOffscreen($canvas) {\n return typeof $canvas.transferControlToOffscreen === 'function';\n}\n\n\nexport function supportOffscreenV2() {\n return typeof OffscreenCanvas !== \"undefined\";\n}\n\n\nexport function createContextGL($canvas) {\n let gl = null;\n\n const validContextNames = [\"webgl\", \"experimental-webgl\", \"moz-webgl\", \"webkit-3d\"];\n let nameIndex = 0;\n\n while (!gl && nameIndex < validContextNames.length) {\n const contextName = validContextNames[nameIndex];\n\n try {\n let contextOptions = {preserveDrawingBuffer: true};\n gl = $canvas.getContext(contextName, contextOptions);\n } catch (e) {\n gl = null;\n }\n\n if (!gl || typeof gl.getParameter !== \"function\") {\n gl = null;\n }\n\n ++nameIndex;\n }\n\n\n return gl;\n}\n\n\nexport function audioContextUnlock(context) {\n context.resume();\n const source = context.createBufferSource();\n source.buffer = context.createBuffer(1, 1, 22050);\n source.connect(context.destination);\n if (source.noteOn) {\n source.noteOn(0);\n } else {\n source.start(0);\n }\n}\n\nexport function dataURLToFile(dataURL = '') {\n const arr = dataURL.split(\",\");\n const bstr = atob(arr[1]);\n const type = arr[0].replace(\"data:\", \"\").replace(\";base64\", \"\")\n let n = bstr.length, u8arr = new Uint8Array(n);\n while (n--) {\n u8arr[n] = bstr.charCodeAt(n);\n }\n return new File([u8arr], 'file', {type});\n}\n\nexport function downloadFile(file, fileName) {\n if (file instanceof Blob || file instanceof File) {\n file = new Blob([file]);\n }\n const aLink = document.createElement(\"a\");\n aLink.download = fileName;\n aLink.href = file;\n aLink.click();\n}\n\n\nexport function downloadImg(content, fileName) {\n const aLink = document.createElement(\"a\");\n aLink.download = fileName;\n aLink.href = URL.createObjectURL(content);\n aLink.click();\n setTimeout(() => {\n URL.revokeObjectURL(content);\n }, isIOS() ? 1000 : 0)\n}\n\nexport function checkFull() {\n let isFull = document.fullscreenElement || window.webkitFullscreenElement || document.msFullscreenElement;\n if (isFull === undefined) isFull = false;\n return !!isFull;\n}\n\nexport function now() {\n return new Date().getTime();\n}\n\nexport const supportedWasm = (() => {\n try {\n if (typeof WebAssembly === \"object\"\n && typeof WebAssembly.instantiate === \"function\") {\n const module = new WebAssembly.Module(Uint8Array.of(0x0, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00));\n if (module instanceof WebAssembly.Module)\n return new WebAssembly.Instance(module) instanceof WebAssembly.Instance;\n }\n } catch (e) {\n }\n return false;\n})();\n\nexport function clamp(num, a, b) {\n return Math.max(Math.min(num, Math.max(a, b)), Math.min(a, b));\n}\n\nexport function setStyle(element, key, value) {\n if (!element) {\n return\n }\n if (typeof key === 'object') {\n Object.keys(key).forEach(item => {\n setStyle(element, item, key[item]);\n });\n }\n element.style[key] = value;\n return element;\n}\n\n\nexport function getStyle(element, key, numberType = true) {\n if (!element) {\n return 0\n }\n\n const value = getComputedStyle(element, null).getPropertyValue(key);\n return numberType ? parseFloat(value) : value;\n}\n\nexport function getNowTime() {\n if (performance && typeof performance.now === 'function') {\n return performance.now();\n }\n return Date.now();\n}\n\nexport function calculationRate(callback) {\n let totalSize = 0;\n let lastTime = getNowTime();\n return size => {\n totalSize += size;\n const thisTime = getNowTime();\n const diffTime = thisTime - lastTime;\n if (diffTime >= 1000) {\n callback((totalSize / diffTime) * 1000);\n lastTime = thisTime;\n totalSize = 0;\n }\n };\n}\n\nexport function downloadRecord(blob, name, suffix) {\n const url = window.URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = (name || now()) + '.' + (suffix || FILE_SUFFIX.webm);\n a.click();\n setTimeout(() => {\n window.URL.revokeObjectURL(url);\n }, isIOS() ? 1000 : 0)\n}\n\nexport const env = '__ENV__';\n\nexport function isMobile() {\n return (/iphone|ipod|android.*mobile|windows.*phone|blackberry.*mobile/i.test(window.navigator.userAgent.toLowerCase()));\n}\n\nexport function isAndroid() {\n const UA = window.navigator.userAgent.toLowerCase();\n return (/android/i.test(UA));\n}\n\nexport function isIOS() {\n const UA = window.navigator.userAgent.toLowerCase();\n return UA && /iphone|ipad|ipod|ios/.test(UA);\n}\n\n\nexport function parseTime(time, cFormat) {\n if (arguments.length === 0) {\n return null\n }\n var format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}'\n var date;\n if (typeof time === 'object') {\n date = time\n } else {\n if (('' + time).length === 10) time = parseInt(time) * 1000;\n time = +time; // 转成int 型\n date = new Date(time)\n }\n var formatObj = {\n y: date.getFullYear(),\n m: date.getMonth() + 1,\n d: date.getDate(),\n h: date.getHours(),\n i: date.getMinutes(),\n s: date.getSeconds(),\n a: date.getDay()\n };\n var time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {\n var value = formatObj[key]\n if (key === 'a') return ['一', '二', '三', '四', '五', '六', '日'][value - 1]\n if (result.length > 0 && value < 10) {\n value = '0' + value\n }\n return value || 0\n });\n return time_str\n}\n\n// 是否支持 webcodecs\nexport function supportWCS() {\n return \"VideoEncoder\" in window;\n}\n\nexport function toNumber(value) {\n if (typeof value !== 'string') {\n return value;\n } else {\n // 转换成 number 类型\n var parsed = Number(value);\n return isNaN(parsed) ? value : parsed;\n }\n}\n\nexport function uuid16() {\n return 'xxxxxxxxxxxx4xxx'.replace(/[xy]/g, function (c) {\n var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8)\n return v.toString(16)\n })\n}\n\nexport function throttle(callback, delay) {\n let isThrottled = false;\n let args;\n let context;\n\n function fn(...args2) {\n if (isThrottled) {\n args = args2;\n context = this;\n return;\n }\n\n isThrottled = true;\n callback.apply(this, args2);\n setTimeout(() => {\n isThrottled = false;\n if (args) {\n fn.apply(context, args);\n args = null;\n context = null;\n }\n }, delay);\n }\n\n return fn;\n}\n\n\nexport function isDef(v) {\n return v !== undefined && v !== null;\n}\n\nexport function formatVideoDecoderConfigure(avcC) {\n let codecArray = avcC.subarray(1, 4);\n let codecString = \"avc1.\";\n for (let j = 0; j < 3; j++) {\n let h = codecArray[j].toString(16);\n if (h.length < 2) {\n h = \"0\" + h\n }\n codecString += h\n }\n\n return {\n codec: codecString,\n description: avcC\n }\n}\n\nexport function isFullScreen() {\n return document.isFullScreen || document.mozIsFullScreen || document.webkitIsFullScreen;\n}\n\nexport function bpsSize(value) {\n if (null == value || value === '') {\n return \"0 KB/S\";\n }\n let size = parseFloat(value);\n size = size.toFixed(2);\n return size + 'KB/S';\n}\n\n\nexport function fpsStatus(fps) {\n let result = 0;\n if (fps >= 24) {\n result = 2;\n } else if (fps >= 15) {\n result = 1;\n }\n\n return result;\n}\n\nexport function createEmptyImageBitmap(width, height) {\n const $canvasElement = document.createElement(\"canvas\");\n $canvasElement.width = width;\n $canvasElement.height = height;\n return createImageBitmap($canvasElement, 0, 0, width, height);\n}\n\n\nexport function supportMSE() {\n return window.MediaSource && window.MediaSource.isTypeSupported(MP4_CODECS.avc);\n}\n\n\nexport function formatMp4VideoCodec(codec) {\n return `video/mp4; codecs=\"${codec}\"`\n}\n\n\nexport function saveBlobToFile(fileName, blob) {\n let url = window.URL.createObjectURL(blob);\n let aLink = window.document.createElement('a');\n aLink.download = fileName;\n aLink.href = url;\n //创建内置事件并触发\n let evt = window.document.createEvent('MouseEvents');\n evt.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n aLink.dispatchEvent(evt);\n}\n\nexport function isEmpty(value) {\n return value === null || value === undefined\n}\n\nexport function isBoolean(value) {\n return value === true || value === false;\n}\n\nexport function isNotEmpty(value) {\n return !isEmpty(value)\n}\n\nexport function initPlayTimes() {\n return {\n playInitStart: '', //1\n playStart: '', // 2\n streamStart: '', //3\n streamResponse: '', // 4\n demuxStart: '', // 5\n decodeStart: '', // 6\n videoStart: '', // 7\n playTimestamp: '',// playStart- playInitStart\n streamTimestamp: '',// streamStart - playStart\n streamResponseTimestamp: '',// streamResponse - streamStart\n demuxTimestamp: '', // demuxStart - streamResponse\n decodeTimestamp: '', // decodeStart - demuxStart\n videoTimestamp: '',// videoStart - decodeStart\n allTimestamp: '' // videoStart - playInitStart\n }\n}\n\n// create watermark\nexport function createWatermark(options) {\n let defaultConfig = {\n container: '',\n left: '',\n right: '',\n top: '',\n bottom: '',\n image: {\n src: '',\n width: '100',\n height: '60',\n },\n text: {\n content: '',\n fontSize: '14',\n color: '#000'\n },\n }\n defaultConfig = Object.assign(defaultConfig, options)\n\n const $container = defaultConfig.container;\n\n if ($container) {\n return\n }\n\n let shadowRoot = null;\n const otDiv = document.createElement('div');\n otDiv.setAttribute('style', 'pointer-events: none !important; display: block !important');\n\n if (typeof otDiv.attachShadow === \"function\") {\n shadowRoot = otDiv.attachShadow({mode: 'open'});\n } else if (otDiv.shadowRoot) {\n shadowRoot = otDiv.shadowRoot;\n } else {\n shadowRoot = otDiv;\n }\n\n const nodeList = $container.children;\n const index = Math.floor(Math.random() * (nodeList.length - 1));\n\n if (nodeList[index]) {\n $container.insertBefore(otDiv, nodeList[index]);\n } else {\n $container.appendChild(otDiv);\n }\n\n\n const maskDiv = document.createElement('div');\n let innerDom = null;\n if (defaultConfig.text && defaultConfig.text.content) {\n innerDom = document.createTextNode(defaultConfig.text);\n } else if (defaultConfig.image && defaultConfig.image.src) {\n innerDom = document.createElement('img')\n innerDom.style.height = '100%'\n innerDom.style.width = '100%'\n innerDom.src = defaultConfig.image.src;\n }\n\n if (!innerDom) {\n return;\n }\n\n maskDiv.appendChild(innerDom);\n\n maskDiv.style.visibility = '';\n maskDiv.style.position = \"absolute\";\n maskDiv.style.display = 'block'\n maskDiv.style['-ms-user-select'] = \"none\";\n maskDiv.style.left = defaultConfig.left;\n maskDiv.style.right = defaultConfig.right;\n maskDiv.style.top = defaultConfig.top;\n maskDiv.style.bottom = defaultConfig.bottom;\n maskDiv.style.overflow = 'hidden';\n maskDiv.style.zIndex = \"9999999\";\n if (defaultConfig.text && defaultConfig.text.content) {\n maskDiv.style.fontSize = defaultConfig.text.fontSize;\n maskDiv.style.color = defaultConfig.text.color;\n } else if (defaultConfig.image && defaultConfig.image.src) {\n maskDiv.style.width = defaultConfig.image.width + 'px';\n maskDiv.style.height = defaultConfig.image.height + 'px';\n }\n\n shadowRoot.appendChild(maskDiv)\n\n // remove function\n return () => {\n $container.removeChild(otDiv);\n }\n}\n\nexport function formatTimeTips(time) {\n var result;\n\n //\n if (time > -1) {\n var hour = Math.floor(time / 3600);\n var min = Math.floor(time / 60) % 60;\n var sec = time % 60;\n\n sec = Math.round(sec);\n\n if (hour < 10) {\n result = '0' + hour + \":\";\n } else {\n result = hour + \":\";\n }\n\n if (min < 10) {\n result += \"0\";\n }\n result += min + \":\";\n if (sec < 10) {\n result += \"0\";\n }\n result += sec.toFixed(0);\n }\n\n return result;\n}\n","import {EVENTS, EVENTS_ERROR, JESSIBUCA_EVENTS} from \"../constant\";\nimport screenfull from \"screenfull\";\nimport {setStyle} from \"../utils\";\n\nexport default (player) => {\n\n\n try {\n const screenfullChange = () => {\n player.emit(JESSIBUCA_EVENTS.fullscreen, player.fullscreen)\n\n // 如果不是fullscreen,则触发下 resize 方法\n if (!player.fullscreen) {\n player.resize();\n } else {\n if(player._opt.useMSE){\n player.resize();\n }\n }\n\n };\n screenfull.on('change', screenfullChange);\n player.events.destroys.push(() => {\n screenfull.off('change', screenfullChange);\n });\n } catch (error) {\n //\n }\n //\n player.on(EVENTS.decoderWorkerInit, () => {\n player.debug.log('player', 'has loaded');\n player.loaded = true;\n })\n\n //\n player.on(EVENTS.play, () => {\n player.loading = false;\n })\n\n //\n player.on(EVENTS.fullscreen, (value) => {\n if (value) {\n try {\n screenfull.request(player.$container).then(() => {\n\n }).catch((e) => {\n player.webFullscreen = true;\n });\n\n } catch (e) {\n player.webFullscreen = true;\n }\n } else {\n try {\n screenfull.exit().then(() => {\n }).catch(() => {\n player.webFullscreen = false;\n\n });\n } catch (e) {\n player.webFullscreen = false;\n }\n }\n })\n\n player.on(EVENTS.webFullscreen, (value) => {\n if (value) {\n player.$container.classList.add('jessibuca-fullscreen-web')\n } else {\n player.$container.classList.remove('jessibuca-fullscreen-web')\n }\n })\n\n //\n player.on(EVENTS.resize, () => {\n player.video.resize();\n })\n\n\n if (player._opt.debug) {\n const ignoreList = [EVENTS.timeUpdate];\n Object.keys(EVENTS).forEach((key) => {\n player.on(EVENTS[key], (value) => {\n if (ignoreList.includes(key)) {\n return;\n }\n\n player.debug.log('player events', EVENTS[key], value);\n })\n })\n\n Object.keys(EVENTS_ERROR).forEach((key) => {\n player.on(EVENTS_ERROR[key], (value) => {\n player.debug.log('player event error', EVENTS_ERROR[key], value);\n })\n })\n }\n}\n","export default class Emitter {\n on(name, fn, ctx) {\n const e = this.e || (this.e = {});\n (e[name] || (e[name] = [])).push({fn, ctx});\n return this;\n }\n\n once(name, fn, ctx) {\n const self = this;\n\n function listener(...args) {\n self.off(name, listener);\n fn.apply(ctx, args);\n }\n\n listener._ = fn;\n return this.on(name, listener, ctx);\n }\n\n emit(name, ...data) {\n const evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n for (let i = 0; i < evtArr.length; i += 1) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n return this;\n }\n\n off(name, callback) {\n const e = this.e || (this.e = {});\n\n if (!name) {\n Object.keys(e).forEach((key) => {\n delete e[key];\n })\n delete this.e\n return;\n }\n\n const evts = e[name];\n const liveEvents = [];\n if (evts && callback) {\n for (let i = 0, len = evts.length; i < len; i += 1) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback) liveEvents.push(evts[i]);\n }\n }\n if (liveEvents.length) {\n e[name] = liveEvents;\n } else {\n delete e[name];\n }\n return this;\n }\n}\n","export default (gl, openWebglAlignment) => {\n var vertexShaderScript = [\n 'attribute vec4 vertexPos;',\n 'attribute vec4 texturePos;',\n 'varying vec2 textureCoord;',\n\n 'void main()',\n '{',\n 'gl_Position = vertexPos;',\n 'textureCoord = texturePos.xy;',\n '}'\n ].join('\\n');\n\n var fragmentShaderScript = [\n 'precision highp float;',\n 'varying highp vec2 textureCoord;',\n 'uniform sampler2D ySampler;',\n 'uniform sampler2D uSampler;',\n 'uniform sampler2D vSampler;',\n 'const mat4 YUV2RGB = mat4',\n '(',\n '1.1643828125, 0, 1.59602734375, -.87078515625,',\n '1.1643828125, -.39176171875, -.81296875, .52959375,',\n '1.1643828125, 2.017234375, 0, -1.081390625,',\n '0, 0, 0, 1',\n ');',\n\n 'void main(void) {',\n 'highp float y = texture2D(ySampler, textureCoord).r;',\n 'highp float u = texture2D(uSampler, textureCoord).r;',\n 'highp float v = texture2D(vSampler, textureCoord).r;',\n 'gl_FragColor = vec4(y, u, v, 1) * YUV2RGB;',\n '}'\n ].join('\\n');\n\n if (openWebglAlignment) {\n gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1);\n }\n var vertexShader = gl.createShader(gl.VERTEX_SHADER);\n gl.shaderSource(vertexShader, vertexShaderScript);\n gl.compileShader(vertexShader);\n if (!gl.getShaderParameter(vertexShader, gl.COMPILE_STATUS)) {\n console.log('Vertex shader failed to compile: ' + gl.getShaderInfoLog(vertexShader));\n }\n\n var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);\n gl.shaderSource(fragmentShader, fragmentShaderScript);\n gl.compileShader(fragmentShader);\n if (!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS)) {\n console.log('Fragment shader failed to compile: ' + gl.getShaderInfoLog(fragmentShader));\n }\n\n var program = gl.createProgram();\n gl.attachShader(program, vertexShader);\n gl.attachShader(program, fragmentShader);\n gl.linkProgram(program);\n if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n console.log('Program failed to compile: ' + gl.getProgramInfoLog(program));\n }\n\n gl.useProgram(program);\n\n // initBuffers\n var vertexPosBuffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, vertexPosBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([1, 1, -1, 1, 1, -1, -1, -1]), gl.STATIC_DRAW);\n\n var vertexPosRef = gl.getAttribLocation(program, 'vertexPos');\n gl.enableVertexAttribArray(vertexPosRef);\n gl.vertexAttribPointer(vertexPosRef, 2, gl.FLOAT, false, 0, 0);\n\n var texturePosBuffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, texturePosBuffer);\n gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([1, 0, 0, 0, 1, 1, 0, 1]), gl.STATIC_DRAW);\n\n var texturePosRef = gl.getAttribLocation(program, 'texturePos');\n gl.enableVertexAttribArray(texturePosRef);\n gl.vertexAttribPointer(texturePosRef, 2, gl.FLOAT, false, 0, 0);\n\n function _initTexture(name, index) {\n var textureRef = gl.createTexture();\n gl.bindTexture(gl.TEXTURE_2D, textureRef);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.bindTexture(gl.TEXTURE_2D, null);\n gl.uniform1i(gl.getUniformLocation(program, name), index);\n return textureRef;\n }\n\n var yTextureRef = _initTexture('ySampler', 0);\n var uTextureRef = _initTexture('uSampler', 1);\n var vTextureRef = _initTexture('vSampler', 2);\n\n return {\n render: function (w, h, y, u, v) {\n gl.viewport(0, 0, w, h);\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, yTextureRef);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.LUMINANCE, w, h, 0, gl.LUMINANCE, gl.UNSIGNED_BYTE, y);\n gl.activeTexture(gl.TEXTURE1);\n gl.bindTexture(gl.TEXTURE_2D, uTextureRef);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.LUMINANCE, w / 2, h / 2, 0, gl.LUMINANCE, gl.UNSIGNED_BYTE, u);\n gl.activeTexture(gl.TEXTURE2);\n gl.bindTexture(gl.TEXTURE_2D, vTextureRef);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.LUMINANCE, w / 2, h / 2, 0, gl.LUMINANCE, gl.UNSIGNED_BYTE, v);\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n },\n destroy: function () {\n try {\n gl.deleteProgram(program);\n\n gl.deleteBuffer(vertexPosBuffer)\n gl.deleteBuffer(texturePosBuffer);\n\n gl.deleteTexture(yTextureRef);\n gl.deleteTexture(uTextureRef);\n gl.deleteBuffer(vTextureRef);\n } catch (e) {\n // console.error(e);\n }\n\n }\n }\n};\n","import Emitter from \"../utils/emitter\";\nimport {CONTROL_HEIGHT, EVENTS, VIDEO_ENC_TYPE} from \"../constant\";\n\nexport default class CommonLoader extends Emitter {\n constructor() {\n super();\n this.init = false;\n }\n\n //\n updateVideoInfo(data) {\n if (data.encTypeCode) {\n this.videoInfo.encType = VIDEO_ENC_TYPE[data.encTypeCode];\n }\n\n if (data.width) {\n this.videoInfo.width = data.width;\n }\n\n if (data.height) {\n this.videoInfo.height = data.height;\n }\n\n // video 基本信息\n if (this.videoInfo.encType && this.videoInfo.height && this.videoInfo.width && !this.init) {\n this.player.emit(EVENTS.videoInfo, this.videoInfo);\n this.init = true;\n }\n }\n\n play(){\n\n }\n\n pause() {\n\n }\n\n clearView() {\n\n }\n}\n","import Emitter from \"../utils/emitter\";\nimport {\n createContextGL,\n createEmptyImageBitmap,\n dataURLToFile,\n downloadImg,\n isMobile,\n now,\n supportOffscreen\n} from \"../utils\";\nimport createWebGL from \"../utils/webgl\";\nimport {CANVAS_RENDER_TYPE, CONTROL_HEIGHT, EVENTS, SCREENSHOT_TYPE, VIDEO_ENC_TYPE} from \"../constant\";\nimport CommonLoader from \"./commonLoader\";\n\nexport default class CanvasVideoLoader extends CommonLoader {\n\n constructor(player) {\n super()\n this.player = player;\n const $canvasElement = document.createElement(\"canvas\");\n $canvasElement.style.position = \"absolute\";\n $canvasElement.style.top = 0;\n $canvasElement.style.left = 0;\n this.$videoElement = $canvasElement;\n player.$container.appendChild(this.$videoElement);\n\n this.context2D = null;\n this.contextGl = null;\n this.contextGlRender = null;\n this.contextGlDestroy = null;\n this.bitmaprenderer = null;\n this.renderType = null;\n this.videoInfo = {\n width: '',\n height: '',\n encType: '',\n }\n //\n this._initCanvasRender();\n this.player.debug.log('CanvasVideo', 'init');\n }\n\n destroy() {\n if (this.contextGl) {\n this.contextGl = null;\n }\n\n if (this.context2D) {\n this.context2D = null;\n }\n\n if (this.contextGlRender) {\n this.contextGlDestroy && this.contextGlDestroy();\n this.contextGlDestroy = null;\n this.contextGlRender = null;\n }\n if (this.bitmaprenderer) {\n this.bitmaprenderer = null;\n }\n\n this.renderType = null;\n\n this.videoInfo = {\n width: '',\n height: '',\n encType: '',\n encTypeCode: ''\n }\n\n this.player.$container.removeChild(this.$videoElement);\n this.init = false;\n this.off();\n this.player.debug.log(`CanvasVideoLoader`, 'destroy');\n }\n\n\n _initContextGl() {\n this.contextGl = createContextGL(this.$videoElement);\n const webgl = createWebGL(this.contextGl, this.player._opt.openWebglAlignment);\n this.contextGlRender = webgl.render;\n this.contextGlDestroy = webgl.destroy\n }\n\n _initContext2D() {\n this.context2D = this.$videoElement.getContext('2d');\n }\n\n\n // 渲染类型\n _initCanvasRender() {\n if (this.player._opt.useWCS && !this._supportOffscreen()) {\n this.renderType = CANVAS_RENDER_TYPE.webcodecs;\n this._initContext2D();\n } else if (this._supportOffscreen()) {\n this.renderType = CANVAS_RENDER_TYPE.offscreen;\n this._bindOffscreen();\n } else {\n this.renderType = CANVAS_RENDER_TYPE.webgl;\n this._initContextGl();\n }\n }\n\n _supportOffscreen() {\n return supportOffscreen(this.$videoElement) && this.player._opt.useOffscreen;\n }\n\n //\n _bindOffscreen() {\n this.bitmaprenderer = this.$videoElement.getContext('bitmaprenderer');\n }\n\n initCanvasViewSize() {\n this.$videoElement.width = this.videoInfo.width;\n this.$videoElement.height = this.videoInfo.height;\n this.resize();\n }\n\n //\n render(msg) {\n this.player.videoTimestamp = msg.ts;\n switch (this.renderType) {\n case CANVAS_RENDER_TYPE.offscreen:\n this.bitmaprenderer.transferFromImageBitmap(msg.buffer);\n break;\n case CANVAS_RENDER_TYPE.webgl:\n this.contextGlRender(this.$videoElement.width, this.$videoElement.height, msg.output[0], msg.output[1], msg.output[2]);\n break;\n case CANVAS_RENDER_TYPE.webcodecs:\n this.context2D.drawImage(msg.videoFrame, 0, 0, this.$videoElement.width, this.$videoElement.height);\n break;\n }\n }\n\n screenshot(filename, format, quality, type) {\n filename = filename || now();\n type = type || SCREENSHOT_TYPE.download;\n const formatType = {\n png: 'image/png',\n jpeg: 'image/jpeg',\n webp: 'image/webp'\n };\n let encoderOptions = 0.92;\n if (!formatType[format] && SCREENSHOT_TYPE[format]) {\n type = format;\n format = 'png';\n quality = undefined\n }\n\n if (typeof quality === \"string\") {\n type = quality;\n quality = undefined;\n }\n\n if (typeof quality !== 'undefined') {\n encoderOptions = Number(quality);\n }\n const dataURL = this.$videoElement.toDataURL(formatType[format] || formatType.png, encoderOptions);\n\n const file = dataURLToFile(dataURL)\n if (type === SCREENSHOT_TYPE.base64) {\n return dataURL;\n } else if (type === SCREENSHOT_TYPE.blob) {\n return file;\n } else if (type === SCREENSHOT_TYPE.download) {\n downloadImg(file, filename);\n }\n }\n\n //\n clearView() {\n switch (this.renderType) {\n case CANVAS_RENDER_TYPE.offscreen:\n createEmptyImageBitmap(this.$videoElement.width, this.$videoElement.height).then((imageBitMap) => {\n this.bitmaprenderer.transferFromImageBitmap(imageBitMap);\n })\n break;\n case CANVAS_RENDER_TYPE.webgl:\n this.contextGl.clear(this.contextGl.COLOR_BUFFER_BIT);\n break;\n case CANVAS_RENDER_TYPE.webcodecs:\n this.context2D.clearRect(0, 0, this.$videoElement.width, this.$videoElement.height)\n break;\n }\n }\n\n resize() {\n this.player.debug.log('canvasVideo', 'resize');\n const option = this.player._opt;\n let width = this.player.width;\n let height = this.player.height;\n if (option.hasControl && !option.controlAutoHide) {\n if (isMobile() && this.player.fullscreen) {\n width -= CONTROL_HEIGHT;\n } else {\n height -= CONTROL_HEIGHT;\n }\n }\n let resizeWidth = this.$videoElement.width;\n let resizeHeight = this.$videoElement.height;\n const rotate = option.rotate;\n let left = ((width - resizeWidth) / 2)\n let top = ((height - resizeHeight) / 2)\n if (rotate === 270 || rotate === 90) {\n resizeWidth = this.$videoElement.height;\n resizeHeight = this.$videoElement.width;\n }\n\n const wScale = width / resizeWidth;\n const hScale = height / resizeHeight;\n\n let scale = wScale > hScale ? hScale : wScale;\n //\n if (!option.isResize) {\n if (wScale !== hScale) {\n scale = wScale + ',' + hScale;\n }\n }\n //\n if (option.isFullResize) {\n scale = wScale > hScale ? wScale : hScale;\n }\n let transform = \"scale(\" + scale + \")\";\n\n if (rotate) {\n transform += ' rotate(' + rotate + 'deg)'\n }\n\n this.$videoElement.style.transform = transform;\n this.$videoElement.style.left = left + \"px\"\n this.$videoElement.style.top = top + \"px\"\n }\n\n\n}\n","import Emitter from \"../utils/emitter\";\nimport {CONTROL_HEIGHT, EVENTS, SCREENSHOT_TYPE, VIDEO_ENC_TYPE} from \"../constant\";\nimport {dataURLToFile, downloadImg, isMobile, now} from \"../utils\";\nimport CommonLoader from \"./commonLoader\";\n\nexport default class VideoLoader extends CommonLoader {\n constructor(player) {\n super();\n this.player = player;\n const $videoElement = document.createElement('video');\n $videoElement.muted = true;\n $videoElement.style.position = \"absolute\";\n $videoElement.style.top = 0;\n $videoElement.style.left = 0;\n player.$container.appendChild($videoElement);\n this.$videoElement = $videoElement;\n this.videoInfo = {\n width: '',\n height: '',\n encType: '',\n }\n const _opt = this.player._opt;\n if (_opt.useWCS && _opt.wcsUseVideoRender) {\n this.trackGenerator = new MediaStreamTrackGenerator({kind: 'video'});\n $videoElement.srcObject = new MediaStream([this.trackGenerator]);\n this.vwriter = this.trackGenerator.writable.getWriter();\n }\n\n this.resize();\n\n const {proxy} = this.player.events;\n\n proxy(this.$videoElement, 'canplay', () => {\n this.player.debug.log('Video', 'canplay');\n })\n\n proxy(this.$videoElement, 'waiting', () => {\n this.player.emit(EVENTS.videoWaiting);\n })\n\n proxy(this.$videoElement, 'timeupdate', (event) => {\n // this.player.emit(EVENTS.videoTimeUpdate, event.timeStamp);\n })\n\n this.player.debug.log('Video', 'init');\n }\n\n destroy() {\n this.player.$container.removeChild(this.$videoElement);\n if (this.$videoElement) {\n this.$videoElement.src = ''\n this.$videoElement = null;\n }\n if (this.trackGenerator) {\n this.trackGenerator = null;\n }\n if (this.vwriter) {\n this.trackGenerator = null;\n }\n\n\n this.init = false;\n this.off();\n this.player.debug.log('Video', 'destroy');\n }\n\n play() {\n // this.$videoElement.autoplay = true;\n this.$videoElement.play();\n }\n\n clearView() {\n\n }\n\n screenshot(filename, format, quality, type) {\n filename = filename || now();\n type = type || SCREENSHOT_TYPE.download;\n const formatType = {\n png: 'image/png',\n jpeg: 'image/jpeg',\n webp: 'image/webp'\n };\n let encoderOptions = 0.92;\n if (!formatType[format] && SCREENSHOT_TYPE[format]) {\n type = format;\n format = 'png';\n quality = undefined\n }\n if (typeof quality === \"string\") {\n type = quality;\n quality = undefined;\n }\n\n if (typeof quality !== 'undefined') {\n encoderOptions = Number(quality);\n }\n const $video = this.$videoElement;\n let canvas = document.createElement('canvas');\n canvas.width = $video.videoWidth;\n canvas.height = $video.videoHeight;\n const context = canvas.getContext('2d');\n context.drawImage($video, 0, 0, canvas.width, canvas.height);\n const dataURL = canvas.toDataURL(SCREENSHOT_TYPE[format] || SCREENSHOT_TYPE.png, encoderOptions);\n const file = dataURLToFile(dataURL)\n if (type === SCREENSHOT_TYPE.base64) {\n return dataURL;\n } else if (type === SCREENSHOT_TYPE.blob) {\n return file;\n } else if (type === SCREENSHOT_TYPE.download) {\n downloadImg(file, filename);\n }\n }\n\n initCanvasViewSize() {\n this.resize();\n }\n\n //\n render(msg) {\n if (this.vwriter) {\n this.vwriter.write(msg.videoFrame);\n }\n }\n\n resize() {\n let width = this.player.width;\n let height = this.player.height;\n const option = this.player._opt;\n const rotate = option.rotate;\n if (option.hasControl && !option.controlAutoHide) {\n if (isMobile() && this.player.fullscreen) {\n width -= CONTROL_HEIGHT;\n } else {\n height -= CONTROL_HEIGHT;\n }\n }\n\n this.$videoElement.width = width;\n this.$videoElement.height = height;\n\n if (rotate === 270 || rotate === 90) {\n this.$videoElement.width = height;\n this.$videoElement.height = width;\n }\n let resizeWidth = this.$videoElement.width;\n let resizeHeight = this.$videoElement.height;\n let left = ((width - resizeWidth) / 2)\n let top = ((height - resizeHeight) / 2)\n let objectFill = 'contain';\n\n // 默认是true\n // 视频画面做等比缩放后,高或宽对齐canvas区域,画面不被拉伸,但有黑边\n\n // 视频画面完全填充canvas区域,画面会被拉伸\n if (!option.isResize) {\n objectFill = 'fill';\n }\n\n // 视频画面做等比缩放后,完全填充canvas区域,画面不被拉伸,没有黑边,但画面显示不全\n if (option.isFullResize) {\n objectFill = 'none';\n }\n this.$videoElement.style.objectFit = objectFill;\n this.$videoElement.style.transform = 'rotate(' + rotate + 'deg)';\n this.$videoElement.style.left = left + \"px\"\n this.$videoElement.style.top = top + \"px\"\n }\n}\n","import CanvasVideoLoader from './canvasLoader';\nimport VideoLoader from \"./videoLoader\";\n\nexport default class Video {\n constructor(player) {\n const Loader = Video.getLoaderFactory(player._opt);\n return new Loader(player);\n }\n\n static getLoaderFactory(opt) {\n if (opt.useMSE || (opt.useWCS && !opt.useOffscreen && opt.wcsUseVideoRender)) {\n return VideoLoader;\n } else {\n return CanvasVideoLoader;\n }\n }\n}\n","import Emitter from \"../utils/emitter\";\nimport {AUDIO_ENC_TYPE, AUDIO_SYNC_VIDEO_DIFF, EVENTS, VIDEO_ENC_TYPE} from \"../constant\";\nimport {clamp, noop} from \"../utils\";\n\nexport default class AudioContextLoader extends Emitter {\n constructor(player) {\n super();\n this.bufferList = [];\n this.player = player;\n this.scriptNode = null;\n this.hasInitScriptNode = false;\n this.audioContextChannel = null;\n\n this.audioContext = new (window.AudioContext || window.webkitAudioContext)();\n //\n this.gainNode = this.audioContext.createGain();\n // Get an AudioBufferSourceNode.\n // This is the AudioNode to use when we want to play an AudioBuffer\n const source = this.audioContext.createBufferSource();\n // set the buffer in the AudioBufferSourceNode\n source.buffer = this.audioContext.createBuffer(1, 1, 22050);\n // connect the AudioBufferSourceNode to the\n // destination so we can hear the sound\n source.connect(this.audioContext.destination);\n // noteOn as start\n // start the source playing\n if (source.noteOn) {\n source.noteOn(0);\n } else {\n source.start(0);\n }\n this.audioBufferSourceNode = source;\n //\n this.mediaStreamAudioDestinationNode = this.audioContext.createMediaStreamDestination();\n //\n this.audioEnabled(true);\n // default setting 0\n this.gainNode.gain.value = 0;\n\n this.playing = false;\n //\n this.audioSyncVideoOption = {\n diff: null\n };\n\n\n this.audioInfo = {\n encType: '',\n channels: '',\n sampleRate: ''\n }\n this.init = false;\n this.hasAudio = false;\n\n // update\n this.on(EVENTS.videoSyncAudio, (options) => {\n // this.player.debug.log('AudioContext', `videoSyncAudio , audioTimestamp: ${options.audioTimestamp},videoTimestamp: ${options.videoTimestamp},diff:${options.diff}`)\n this.audioSyncVideoOption = options;\n })\n\n this.player.debug.log('AudioContext', 'init');\n }\n\n\n destroy() {\n this.closeAudio();\n this.audioContext.close();\n this.audioContext = null;\n this.gainNode = null;\n this.init = false;\n this.hasAudio = false;\n this.playing = false;\n\n if (this.scriptNode) {\n this.scriptNode.onaudioprocess = noop;\n this.scriptNode = null;\n }\n this.audioBufferSourceNode = null;\n this.mediaStreamAudioDestinationNode = null;\n this.hasInitScriptNode = false;\n this.audioSyncVideoOption = {\n diff: null\n };\n this.audioInfo = {\n encType: '',\n channels: '',\n sampleRate: ''\n }\n this.off();\n this.player.debug.log('AudioContext', 'destroy');\n }\n\n updateAudioInfo(data) {\n if (data.encTypeCode) {\n this.audioInfo.encType = AUDIO_ENC_TYPE[data.encTypeCode];\n }\n\n if (data.channels) {\n this.audioInfo.channels = data.channels;\n }\n\n if (data.sampleRate) {\n this.audioInfo.sampleRate = data.sampleRate;\n }\n\n // audio 基本信息\n if (this.audioInfo.sampleRate && this.audioInfo.channels && this.audioInfo.encType && !this.init) {\n this.player.emit(EVENTS.audioInfo, this.audioInfo);\n this.init = true;\n }\n }\n\n //\n get isPlaying() {\n return this.playing;\n }\n\n get isMute() {\n return this.gainNode.gain.value === 0 || this.isStateSuspended();\n }\n\n get volume() {\n return this.gainNode.gain.value;\n }\n\n get bufferSize() {\n return this.bufferList.length;\n }\n\n\n initScriptNode() {\n this.playing = true;\n\n if (this.hasInitScriptNode) {\n return;\n }\n const channels = this.audioInfo.channels;\n\n const scriptNode = this.audioContext.createScriptProcessor(1024, 0, channels);\n // tips: if audio isStateSuspended onaudioprocess method not working\n scriptNode.onaudioprocess = (audioProcessingEvent) => {\n const outputBuffer = audioProcessingEvent.outputBuffer;\n\n if (this.bufferList.length && this.playing) {\n // just for wasm\n if (!this.player._opt.useWCS && !this.player._opt.useMSE) {\n // audio > video\n // wait\n if (this.audioSyncVideoOption.diff > AUDIO_SYNC_VIDEO_DIFF) {\n this.player.debug.warn('AudioContext', `audioSyncVideoOption more than diff :${this.audioSyncVideoOption.diff}, waiting`)\n // wait\n return;\n }\n // audio < video\n // throw away then chase video\n else if (this.audioSyncVideoOption.diff < -AUDIO_SYNC_VIDEO_DIFF) {\n this.player.debug.warn('AudioContext', `audioSyncVideoOption less than diff :${this.audioSyncVideoOption.diff}, dropping`)\n\n //\n let bufferItem = this.bufferList.shift();\n //\n while ((bufferItem.ts - this.player.videoTimestamp < -AUDIO_SYNC_VIDEO_DIFF) && this.bufferList.length > 0) {\n // this.player.debug.warn('AudioContext', `audioSyncVideoOption less than inner ts is:${bufferItem.ts}, videoTimestamp is ${this.player.videoTimestamp},diff:${bufferItem.ts - this.player.videoTimestamp}`)\n bufferItem = this.bufferList.shift();\n }\n\n if (this.bufferList.length === 0) {\n return;\n }\n }\n }\n\n if (this.bufferList.length === 0) {\n return;\n }\n\n const bufferItem = this.bufferList.shift();\n\n // update audio time stamp\n if (bufferItem && bufferItem.ts) {\n this.player.audioTimestamp = bufferItem.ts;\n }\n\n for (let channel = 0; channel < channels; channel++) {\n const b = bufferItem.buffer[channel]\n const nowBuffering = outputBuffer.getChannelData(channel);\n for (let i = 0; i < 1024; i++) {\n nowBuffering[i] = b[i] || 0\n }\n }\n }\n }\n\n scriptNode.connect(this.gainNode);\n this.scriptNode = scriptNode;\n this.gainNode.connect(this.audioContext.destination);\n this.gainNode.connect(this.mediaStreamAudioDestinationNode);\n this.hasInitScriptNode = true;\n }\n\n mute(flag) {\n if (flag) {\n if (!this.isMute) {\n this.player.emit(EVENTS.mute, flag);\n }\n this.setVolume(0);\n this.audioEnabled(false);\n this.clear();\n } else {\n if (this.isMute) {\n this.player.emit(EVENTS.mute, flag);\n }\n this.setVolume(0.5);\n this.audioEnabled(true);\n }\n }\n\n setVolume(volume) {\n volume = parseFloat(volume).toFixed(2);\n if (isNaN(volume)) {\n return;\n }\n this.audioEnabled(true);\n volume = clamp(volume, 0, 1);\n this.gainNode.gain.value = volume;\n this.gainNode.gain.setValueAtTime(volume, this.audioContext.currentTime);\n this.player.emit(EVENTS.volumechange, this.player.volume);\n }\n\n closeAudio() {\n if (this.hasInitScriptNode) {\n this.scriptNode && this.scriptNode.disconnect(this.gainNode);\n this.gainNode && this.gainNode.disconnect(this.audioContext.destination);\n this.gainNode && this.gainNode.disconnect(this.mediaStreamAudioDestinationNode);\n }\n this.clear();\n }\n\n // 是否播放。。。\n audioEnabled(flag) {\n if (flag) {\n if (this.audioContext.state === 'suspended') {\n // resume\n this.audioContext.resume();\n }\n } else {\n if (this.audioContext.state === 'running') {\n // suspend\n this.audioContext.suspend();\n }\n }\n }\n\n isStateRunning() {\n return this.audioContext.state === 'running';\n }\n\n isStateSuspended() {\n return this.audioContext.state === 'suspended';\n }\n\n clear() {\n this.bufferList = [];\n }\n\n play(buffer, ts) {\n // if is mute\n if (this.isMute) {\n return;\n }\n\n this.hasAudio = true;\n\n this.bufferList.push({\n buffer,\n ts\n });\n\n if (this.bufferList.length > 20) {\n this.player.debug.warn('AudioContext', `bufferList is large: ${this.bufferList.length}`)\n\n // out of memory\n if (this.bufferList.length > 50) {\n this.bufferList.shift();\n }\n }\n // this.player.debug.log('AudioContext', `bufferList is ${this.bufferList.length}`)\n }\n\n pause() {\n this.audioSyncVideoOption = {\n diff: null\n };\n this.playing = false;\n this.clear();\n }\n\n resume() {\n this.playing = true;\n }\n\n\n\n\n}\n","import AudioContextLoader from \"./audioContextLoader\";\nimport AudioLoader from \"./audioLoader\";\n\nexport default class Audio {\n constructor(player) {\n const Loader = Audio.getLoaderFactory();\n return new Loader(player);\n }\n\n static getLoaderFactory() {\n return AudioContextLoader;\n }\n}\n","import Emitter from \"../utils/emitter\";\nimport {EVENTS, EVENTS_ERROR, JESSIBUCA_EVENTS} from \"../constant\";\nimport {calculationRate, now} from \"../utils\";\n\nexport default class FetchLoader extends Emitter {\n constructor(player) {\n super();\n this.player = player;\n this.playing = false;\n\n this.abortController = new AbortController();\n //\n this.streamRate = calculationRate(rate => {\n player.emit(EVENTS.kBps, (rate / 1024).toFixed(2));\n });\n player.debug.log('FetchStream', 'init');\n }\n\n destroy() {\n this.abort()\n this.off();\n this.streamRate = null;\n this.player.debug.log('FetchStream', 'destroy');\n }\n\n fetchStream(url) {\n const {demux} = this.player;\n this.player._times.streamStart = now();\n fetch(url, {signal: this.abortController.signal}).then((res) => {\n const reader = res.body.getReader();\n this.emit(EVENTS.streamSuccess);\n const fetchNext = () => {\n reader.read().then(({done, value}) => {\n if (done) {\n demux.close();\n } else {\n this.streamRate && this.streamRate(value.byteLength);\n demux.dispatch(value);\n fetchNext();\n }\n }\n ).catch((e) => {\n demux.close();\n // 这边会报用户 aborted a request 错误。\n this.emit(EVENTS_ERROR.fetchError, e);\n this.player.emit(EVENTS.error, EVENTS_ERROR.fetchError);\n this.abort();\n })\n }\n fetchNext();\n }).catch((e) => {\n this.abort();\n this.emit(EVENTS_ERROR.fetchError, e)\n this.player.emit(EVENTS.error, EVENTS_ERROR.fetchError);\n })\n }\n\n abort() {\n if (this.abortController) {\n this.abortController.abort();\n this.abortController = null\n }\n }\n\n\n}\n","import Emitter from \"../utils/emitter\";\nimport {EVENTS, EVENTS_ERROR, WEBSOCKET_STATUS} from \"../constant\";\nimport {calculationRate, now} from \"../utils\";\n\nexport default class WebsocketLoader extends Emitter {\n constructor(player) {\n super();\n this.player = player;\n this.socket = null;\n this.socketStatus = WEBSOCKET_STATUS.notConnect;\n this.wsUrl = null;\n //\n this.streamRate = calculationRate(rate => {\n player.emit(EVENTS.kBps, (rate / 1024).toFixed(2));\n });\n\n player.debug.log('WebsocketLoader', 'init');\n }\n\n destroy() {\n if (this.socket) {\n this.socket.close();\n this.socket = null;\n }\n this.socketStatus = WEBSOCKET_STATUS.notConnect;\n this.streamRate = null;\n this.wsUrl = null;\n this.off();\n this.player.debug.log('websocketLoader', 'destroy');\n }\n\n _createWebSocket() {\n const player = this.player;\n const {\n debug,\n events: {proxy},\n demux,\n } = player;\n\n this.socket = new WebSocket(this.wsUrl);\n this.socket.binaryType = 'arraybuffer';\n proxy(this.socket, 'open', () => {\n this.emit(EVENTS.streamSuccess);\n debug.log('websocketLoader', 'socket open');\n this.socketStatus = WEBSOCKET_STATUS.open;\n });\n\n proxy(this.socket, 'message', event => {\n this.streamRate && this.streamRate(event.data.byteLength);\n this._handleMessage(event.data);\n });\n\n\n proxy(this.socket, 'close', () => {\n debug.log('websocketLoader', 'socket close');\n this.emit(EVENTS.streamEnd);\n this.socketStatus = WEBSOCKET_STATUS.close;\n });\n\n proxy(this.socket, 'error', error => {\n debug.log('websocketLoader', 'socket error');\n this.emit(EVENTS_ERROR.websocketError, error);\n this.player.emit(EVENTS.error, EVENTS_ERROR.websocketError);\n this.socketStatus = WEBSOCKET_STATUS.error;\n demux.close();\n debug.log('websocketLoader', `socket error:`, error);\n });\n }\n\n //\n _handleMessage(message) {\n const {demux} = this.player;\n if (!demux) {\n this.player.debug.warn('websocketLoader', 'websocket handle message demux is null');\n return;\n }\n demux.dispatch(message);\n }\n\n\n fetchStream(url) {\n this.player._times.streamStart = now();\n this.wsUrl = url;\n this._createWebSocket();\n }\n\n\n}\n","import FetchLoader from \"./fetchLoader\";\nimport WebsocketLoader from \"./websocketLoader\";\nimport {PLAYER_PLAY_PROTOCOL} from \"../constant\";\n\nexport default class Stream {\n constructor(player) {\n const Loader = Stream.getLoaderFactory(player._opt.protocol);\n return new Loader(player);\n }\n\n static getLoaderFactory(protocol) {\n if (protocol === PLAYER_PLAY_PROTOCOL.fetch) {\n return FetchLoader;\n } else if (protocol === PLAYER_PLAY_PROTOCOL.websocket) {\n return WebsocketLoader;\n }\n }\n}\n","'use strict';\r\n\r\n// Last time updated: 2021-03-09 3:20:22 AM UTC\r\n\r\n// ________________\r\n// RecordRTC v5.6.2\r\n\r\n// Open-Sourced: https://github.com/muaz-khan/RecordRTC\r\n\r\n// --------------------------------------------------\r\n// Muaz Khan - www.MuazKhan.com\r\n// MIT License - www.WebRTC-Experiment.com/licence\r\n// --------------------------------------------------\r\n\r\n// ____________\r\n// RecordRTC.js\r\n\r\n/**\r\n * {@link https://github.com/muaz-khan/RecordRTC|RecordRTC} is a WebRTC JavaScript library for audio/video as well as screen activity recording. It supports Chrome, Firefox, Opera, Android, and Microsoft Edge. Platforms: Linux, Mac and Windows. \r\n * @summary Record audio, video or screen inside the browser.\r\n * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT}\r\n * @author {@link https://MuazKhan.com|Muaz Khan}\r\n * @typedef RecordRTC\r\n * @class\r\n * @example\r\n * var recorder = RecordRTC(mediaStream or [arrayOfMediaStream], {\r\n * type: 'video', // audio or video or gif or canvas\r\n * recorderType: MediaStreamRecorder || CanvasRecorder || StereoAudioRecorder || Etc\r\n * });\r\n * recorder.startRecording();\r\n * @see For further information:\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n * @param {MediaStream} mediaStream - Single media-stream object, array of media-streams, html-canvas-element, etc.\r\n * @param {object} config - {type:\"video\", recorderType: MediaStreamRecorder, disableLogs: true, numberOfAudioChannels: 1, bufferSize: 0, sampleRate: 0, desiredSampRate: 16000, video: HTMLVideoElement, etc.}\r\n */\r\n\r\nfunction RecordRTC(mediaStream, config) {\r\n if (!mediaStream) {\r\n throw 'First parameter is required.';\r\n }\r\n\r\n config = config || {\r\n type: 'video'\r\n };\r\n\r\n config = new RecordRTCConfiguration(mediaStream, config);\r\n\r\n // a reference to user's recordRTC object\r\n var self = this;\r\n\r\n function startRecording(config2) {\r\n if (!config.disableLogs) {\r\n console.log('RecordRTC version: ', self.version);\r\n }\r\n\r\n if (!!config2) {\r\n // allow users to set options using startRecording method\r\n // config2 is similar to main \"config\" object (second parameter over RecordRTC constructor)\r\n config = new RecordRTCConfiguration(mediaStream, config2);\r\n }\r\n\r\n if (!config.disableLogs) {\r\n console.log('started recording ' + config.type + ' stream.');\r\n }\r\n\r\n if (mediaRecorder) {\r\n mediaRecorder.clearRecordedData();\r\n mediaRecorder.record();\r\n\r\n setState('recording');\r\n\r\n if (self.recordingDuration) {\r\n handleRecordingDuration();\r\n }\r\n return self;\r\n }\r\n\r\n initRecorder(function() {\r\n if (self.recordingDuration) {\r\n handleRecordingDuration();\r\n }\r\n });\r\n\r\n return self;\r\n }\r\n\r\n function initRecorder(initCallback) {\r\n if (initCallback) {\r\n config.initCallback = function() {\r\n initCallback();\r\n initCallback = config.initCallback = null; // recorder.initRecorder should be call-backed once.\r\n };\r\n }\r\n\r\n var Recorder = new GetRecorderType(mediaStream, config);\r\n\r\n mediaRecorder = new Recorder(mediaStream, config);\r\n mediaRecorder.record();\r\n\r\n setState('recording');\r\n\r\n if (!config.disableLogs) {\r\n console.log('Initialized recorderType:', mediaRecorder.constructor.name, 'for output-type:', config.type);\r\n }\r\n }\r\n\r\n function stopRecording(callback) {\r\n callback = callback || function() {};\r\n\r\n if (!mediaRecorder) {\r\n warningLog();\r\n return;\r\n }\r\n\r\n if (self.state === 'paused') {\r\n self.resumeRecording();\r\n\r\n setTimeout(function() {\r\n stopRecording(callback);\r\n }, 1);\r\n return;\r\n }\r\n\r\n if (self.state !== 'recording' && !config.disableLogs) {\r\n console.warn('Recording state should be: \"recording\", however current state is: ', self.state);\r\n }\r\n\r\n if (!config.disableLogs) {\r\n console.log('Stopped recording ' + config.type + ' stream.');\r\n }\r\n\r\n if (config.type !== 'gif') {\r\n mediaRecorder.stop(_callback);\r\n } else {\r\n mediaRecorder.stop();\r\n _callback();\r\n }\r\n\r\n setState('stopped');\r\n\r\n function _callback(__blob) {\r\n if (!mediaRecorder) {\r\n if (typeof callback.call === 'function') {\r\n callback.call(self, '');\r\n } else {\r\n callback('');\r\n }\r\n return;\r\n }\r\n\r\n Object.keys(mediaRecorder).forEach(function(key) {\r\n if (typeof mediaRecorder[key] === 'function') {\r\n return;\r\n }\r\n\r\n self[key] = mediaRecorder[key];\r\n });\r\n\r\n var blob = mediaRecorder.blob;\r\n\r\n if (!blob) {\r\n if (__blob) {\r\n mediaRecorder.blob = blob = __blob;\r\n } else {\r\n throw 'Recording failed.';\r\n }\r\n }\r\n\r\n if (blob && !config.disableLogs) {\r\n console.log(blob.type, '->', bytesToSize(blob.size));\r\n }\r\n\r\n if (callback) {\r\n var url;\r\n\r\n try {\r\n url = URL.createObjectURL(blob);\r\n } catch (e) {}\r\n\r\n if (typeof callback.call === 'function') {\r\n callback.call(self, url);\r\n } else {\r\n callback(url);\r\n }\r\n }\r\n\r\n if (!config.autoWriteToDisk) {\r\n return;\r\n }\r\n\r\n getDataURL(function(dataURL) {\r\n var parameter = {};\r\n parameter[config.type + 'Blob'] = dataURL;\r\n DiskStorage.Store(parameter);\r\n });\r\n }\r\n }\r\n\r\n function pauseRecording() {\r\n if (!mediaRecorder) {\r\n warningLog();\r\n return;\r\n }\r\n\r\n if (self.state !== 'recording') {\r\n if (!config.disableLogs) {\r\n console.warn('Unable to pause the recording. Recording state: ', self.state);\r\n }\r\n return;\r\n }\r\n\r\n setState('paused');\r\n\r\n mediaRecorder.pause();\r\n\r\n if (!config.disableLogs) {\r\n console.log('Paused recording.');\r\n }\r\n }\r\n\r\n function resumeRecording() {\r\n if (!mediaRecorder) {\r\n warningLog();\r\n return;\r\n }\r\n\r\n if (self.state !== 'paused') {\r\n if (!config.disableLogs) {\r\n console.warn('Unable to resume the recording. Recording state: ', self.state);\r\n }\r\n return;\r\n }\r\n\r\n setState('recording');\r\n\r\n // not all libs have this method yet\r\n mediaRecorder.resume();\r\n\r\n if (!config.disableLogs) {\r\n console.log('Resumed recording.');\r\n }\r\n }\r\n\r\n function readFile(_blob) {\r\n postMessage(new FileReaderSync().readAsDataURL(_blob));\r\n }\r\n\r\n function getDataURL(callback, _mediaRecorder) {\r\n if (!callback) {\r\n throw 'Pass a callback function over getDataURL.';\r\n }\r\n\r\n var blob = _mediaRecorder ? _mediaRecorder.blob : (mediaRecorder || {}).blob;\r\n\r\n if (!blob) {\r\n if (!config.disableLogs) {\r\n console.warn('Blob encoder did not finish its job yet.');\r\n }\r\n\r\n setTimeout(function() {\r\n getDataURL(callback, _mediaRecorder);\r\n }, 1000);\r\n return;\r\n }\r\n\r\n if (typeof Worker !== 'undefined' && !navigator.mozGetUserMedia) {\r\n var webWorker = processInWebWorker(readFile);\r\n\r\n webWorker.onmessage = function(event) {\r\n callback(event.data);\r\n };\r\n\r\n webWorker.postMessage(blob);\r\n } else {\r\n var reader = new FileReader();\r\n reader.readAsDataURL(blob);\r\n reader.onload = function(event) {\r\n callback(event.target.result);\r\n };\r\n }\r\n\r\n function processInWebWorker(_function) {\r\n try {\r\n var blob = URL.createObjectURL(new Blob([_function.toString(),\r\n 'this.onmessage = function (eee) {' + _function.name + '(eee.data);}'\r\n ], {\r\n type: 'application/javascript'\r\n }));\r\n\r\n var worker = new Worker(blob);\r\n URL.revokeObjectURL(blob);\r\n return worker;\r\n } catch (e) {}\r\n }\r\n }\r\n\r\n function handleRecordingDuration(counter) {\r\n counter = counter || 0;\r\n\r\n if (self.state === 'paused') {\r\n setTimeout(function() {\r\n handleRecordingDuration(counter);\r\n }, 1000);\r\n return;\r\n }\r\n\r\n if (self.state === 'stopped') {\r\n return;\r\n }\r\n\r\n if (counter >= self.recordingDuration) {\r\n stopRecording(self.onRecordingStopped);\r\n return;\r\n }\r\n\r\n counter += 1000; // 1-second\r\n\r\n setTimeout(function() {\r\n handleRecordingDuration(counter);\r\n }, 1000);\r\n }\r\n\r\n function setState(state) {\r\n if (!self) {\r\n return;\r\n }\r\n\r\n self.state = state;\r\n\r\n if (typeof self.onStateChanged.call === 'function') {\r\n self.onStateChanged.call(self, state);\r\n } else {\r\n self.onStateChanged(state);\r\n }\r\n }\r\n\r\n var WARNING = 'It seems that recorder is destroyed or \"startRecording\" is not invoked for ' + config.type + ' recorder.';\r\n\r\n function warningLog() {\r\n if (config.disableLogs === true) {\r\n return;\r\n }\r\n\r\n console.warn(WARNING);\r\n }\r\n\r\n var mediaRecorder;\r\n\r\n var returnObject = {\r\n /**\r\n * This method starts the recording.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @example\r\n * var recorder = RecordRTC(mediaStream, {\r\n * type: 'video'\r\n * });\r\n * recorder.startRecording();\r\n */\r\n startRecording: startRecording,\r\n\r\n /**\r\n * This method stops the recording. It is strongly recommended to get \"blob\" or \"URI\" inside the callback to make sure all recorders finished their job.\r\n * @param {function} callback - Callback to get the recorded blob.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @example\r\n * recorder.stopRecording(function() {\r\n * // use either \"this\" or \"recorder\" object; both are identical\r\n * video.src = this.toURL();\r\n * var blob = this.getBlob();\r\n * });\r\n */\r\n stopRecording: stopRecording,\r\n\r\n /**\r\n * This method pauses the recording. You can resume recording using \"resumeRecording\" method.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @todo Firefox is unable to pause the recording. Fix it.\r\n * @example\r\n * recorder.pauseRecording(); // pause the recording\r\n * recorder.resumeRecording(); // resume again\r\n */\r\n pauseRecording: pauseRecording,\r\n\r\n /**\r\n * This method resumes the recording.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @example\r\n * recorder.pauseRecording(); // first of all, pause the recording\r\n * recorder.resumeRecording(); // now resume it\r\n */\r\n resumeRecording: resumeRecording,\r\n\r\n /**\r\n * This method initializes the recording.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @todo This method should be deprecated.\r\n * @example\r\n * recorder.initRecorder();\r\n */\r\n initRecorder: initRecorder,\r\n\r\n /**\r\n * Ask RecordRTC to auto-stop the recording after 5 minutes.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @example\r\n * var fiveMinutes = 5 * 1000 * 60;\r\n * recorder.setRecordingDuration(fiveMinutes, function() {\r\n * var blob = this.getBlob();\r\n * video.src = this.toURL();\r\n * });\r\n * \r\n * // or otherwise\r\n * recorder.setRecordingDuration(fiveMinutes).onRecordingStopped(function() {\r\n * var blob = this.getBlob();\r\n * video.src = this.toURL();\r\n * });\r\n */\r\n setRecordingDuration: function(recordingDuration, callback) {\r\n if (typeof recordingDuration === 'undefined') {\r\n throw 'recordingDuration is required.';\r\n }\r\n\r\n if (typeof recordingDuration !== 'number') {\r\n throw 'recordingDuration must be a number.';\r\n }\r\n\r\n self.recordingDuration = recordingDuration;\r\n self.onRecordingStopped = callback || function() {};\r\n\r\n return {\r\n onRecordingStopped: function(callback) {\r\n self.onRecordingStopped = callback;\r\n }\r\n };\r\n },\r\n\r\n /**\r\n * This method can be used to clear/reset all the recorded data.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @todo Figure out the difference between \"reset\" and \"clearRecordedData\" methods.\r\n * @example\r\n * recorder.clearRecordedData();\r\n */\r\n clearRecordedData: function() {\r\n if (!mediaRecorder) {\r\n warningLog();\r\n return;\r\n }\r\n\r\n mediaRecorder.clearRecordedData();\r\n\r\n if (!config.disableLogs) {\r\n console.log('Cleared old recorded data.');\r\n }\r\n },\r\n\r\n /**\r\n * Get the recorded blob. Use this method inside the \"stopRecording\" callback.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @example\r\n * recorder.stopRecording(function() {\r\n * var blob = this.getBlob();\r\n *\r\n * var file = new File([blob], 'filename.webm', {\r\n * type: 'video/webm'\r\n * });\r\n *\r\n * var formData = new FormData();\r\n * formData.append('file', file); // upload \"File\" object rather than a \"Blob\"\r\n * uploadToServer(formData);\r\n * });\r\n * @returns {Blob} Returns recorded data as \"Blob\" object.\r\n */\r\n getBlob: function() {\r\n if (!mediaRecorder) {\r\n warningLog();\r\n return;\r\n }\r\n\r\n return mediaRecorder.blob;\r\n },\r\n\r\n /**\r\n * Get data-URI instead of Blob.\r\n * @param {function} callback - Callback to get the Data-URI.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @example\r\n * recorder.stopRecording(function() {\r\n * recorder.getDataURL(function(dataURI) {\r\n * video.src = dataURI;\r\n * });\r\n * });\r\n */\r\n getDataURL: getDataURL,\r\n\r\n /**\r\n * Get virtual/temporary URL. Usage of this URL is limited to current tab.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @example\r\n * recorder.stopRecording(function() {\r\n * video.src = this.toURL();\r\n * });\r\n * @returns {String} Returns a virtual/temporary URL for the recorded \"Blob\".\r\n */\r\n toURL: function() {\r\n if (!mediaRecorder) {\r\n warningLog();\r\n return;\r\n }\r\n\r\n return URL.createObjectURL(mediaRecorder.blob);\r\n },\r\n\r\n /**\r\n * Get internal recording object (i.e. internal module) e.g. MutliStreamRecorder, MediaStreamRecorder, StereoAudioRecorder or WhammyRecorder etc.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @example\r\n * var internalRecorder = recorder.getInternalRecorder();\r\n * if(internalRecorder instanceof MultiStreamRecorder) {\r\n * internalRecorder.addStreams([newAudioStream]);\r\n * internalRecorder.resetVideoStreams([screenStream]);\r\n * }\r\n * @returns {Object} Returns internal recording object.\r\n */\r\n getInternalRecorder: function() {\r\n return mediaRecorder;\r\n },\r\n\r\n /**\r\n * Invoke save-as dialog to save the recorded blob into your disk.\r\n * @param {string} fileName - Set your own file name.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @example\r\n * recorder.stopRecording(function() {\r\n * this.save('file-name');\r\n *\r\n * // or manually:\r\n * invokeSaveAsDialog(this.getBlob(), 'filename.webm');\r\n * });\r\n */\r\n save: function(fileName) {\r\n if (!mediaRecorder) {\r\n warningLog();\r\n return;\r\n }\r\n\r\n invokeSaveAsDialog(mediaRecorder.blob, fileName);\r\n },\r\n\r\n /**\r\n * This method gets a blob from indexed-DB storage.\r\n * @param {function} callback - Callback to get the recorded blob.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @example\r\n * recorder.getFromDisk(function(dataURL) {\r\n * video.src = dataURL;\r\n * });\r\n */\r\n getFromDisk: function(callback) {\r\n if (!mediaRecorder) {\r\n warningLog();\r\n return;\r\n }\r\n\r\n RecordRTC.getFromDisk(config.type, callback);\r\n },\r\n\r\n /**\r\n * This method appends an array of webp images to the recorded video-blob. It takes an \"array\" object.\r\n * @type {Array.}\r\n * @param {Array} arrayOfWebPImages - Array of webp images.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @todo This method should be deprecated.\r\n * @example\r\n * var arrayOfWebPImages = [];\r\n * arrayOfWebPImages.push({\r\n * duration: index,\r\n * image: 'data:image/webp;base64,...'\r\n * });\r\n * recorder.setAdvertisementArray(arrayOfWebPImages);\r\n */\r\n setAdvertisementArray: function(arrayOfWebPImages) {\r\n config.advertisement = [];\r\n\r\n var length = arrayOfWebPImages.length;\r\n for (var i = 0; i < length; i++) {\r\n config.advertisement.push({\r\n duration: i,\r\n image: arrayOfWebPImages[i]\r\n });\r\n }\r\n },\r\n\r\n /**\r\n * It is equivalent to \"recorder.getBlob()\" method. Usage of \"getBlob\" is recommended, though.\r\n * @property {Blob} blob - Recorded Blob can be accessed using this property.\r\n * @memberof RecordRTC\r\n * @instance\r\n * @readonly\r\n * @example\r\n * recorder.stopRecording(function() {\r\n * var blob = this.blob;\r\n *\r\n * // below one is recommended\r\n * var blob = this.getBlob();\r\n * });\r\n */\r\n blob: null,\r\n\r\n /**\r\n * This works only with {recorderType:StereoAudioRecorder}. Use this property on \"stopRecording\" to verify the encoder's sample-rates.\r\n * @property {number} bufferSize - Buffer-size used to encode the WAV container\r\n * @memberof RecordRTC\r\n * @instance\r\n * @readonly\r\n * @example\r\n * recorder.stopRecording(function() {\r\n * alert('Recorder used this buffer-size: ' + this.bufferSize);\r\n * });\r\n */\r\n bufferSize: 0,\r\n\r\n /**\r\n * This works only with {recorderType:StereoAudioRecorder}. Use this property on \"stopRecording\" to verify the encoder's sample-rates.\r\n * @property {number} sampleRate - Sample-rates used to encode the WAV container\r\n * @memberof RecordRTC\r\n * @instance\r\n * @readonly\r\n * @example\r\n * recorder.stopRecording(function() {\r\n * alert('Recorder used these sample-rates: ' + this.sampleRate);\r\n * });\r\n */\r\n sampleRate: 0,\r\n\r\n /**\r\n * {recorderType:StereoAudioRecorder} returns ArrayBuffer object.\r\n * @property {ArrayBuffer} buffer - Audio ArrayBuffer, supported only in Chrome.\r\n * @memberof RecordRTC\r\n * @instance\r\n * @readonly\r\n * @example\r\n * recorder.stopRecording(function() {\r\n * var arrayBuffer = this.buffer;\r\n * alert(arrayBuffer.byteLength);\r\n * });\r\n */\r\n buffer: null,\r\n\r\n /**\r\n * This method resets the recorder. So that you can reuse single recorder instance many times.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @example\r\n * recorder.reset();\r\n * recorder.startRecording();\r\n */\r\n reset: function() {\r\n if (self.state === 'recording' && !config.disableLogs) {\r\n console.warn('Stop an active recorder.');\r\n }\r\n\r\n if (mediaRecorder && typeof mediaRecorder.clearRecordedData === 'function') {\r\n mediaRecorder.clearRecordedData();\r\n }\r\n mediaRecorder = null;\r\n setState('inactive');\r\n self.blob = null;\r\n },\r\n\r\n /**\r\n * This method is called whenever recorder's state changes. Use this as an \"event\".\r\n * @property {String} state - A recorder's state can be: recording, paused, stopped or inactive.\r\n * @method\r\n * @memberof RecordRTC\r\n * @instance\r\n * @example\r\n * recorder.onStateChanged = function(state) {\r\n * console.log('Recorder state: ', state);\r\n * };\r\n */\r\n onStateChanged: function(state) {\r\n if (!config.disableLogs) {\r\n console.log('Recorder state changed:', state);\r\n }\r\n },\r\n\r\n /**\r\n * A recorder can have inactive, recording, paused or stopped states.\r\n * @property {String} state - A recorder's state can be: recording, paused, stopped or inactive.\r\n * @memberof RecordRTC\r\n * @static\r\n * @readonly\r\n * @example\r\n * // this looper function will keep you updated about the recorder's states.\r\n * (function looper() {\r\n * document.querySelector('h1').innerHTML = 'Recorder\\'s state is: ' + recorder.state;\r\n * if(recorder.state === 'stopped') return; // ignore+stop\r\n * setTimeout(looper, 1000); // update after every 3-seconds\r\n * })();\r\n * recorder.startRecording();\r\n */\r\n state: 'inactive',\r\n\r\n /**\r\n * Get recorder's readonly state.\r\n * @method\r\n * @memberof RecordRTC\r\n * @example\r\n * var state = recorder.getState();\r\n * @returns {String} Returns recording state.\r\n */\r\n getState: function() {\r\n return self.state;\r\n },\r\n\r\n /**\r\n * Destroy RecordRTC instance. Clear all recorders and objects.\r\n * @method\r\n * @memberof RecordRTC\r\n * @example\r\n * recorder.destroy();\r\n */\r\n destroy: function() {\r\n var disableLogsCache = config.disableLogs;\r\n\r\n config = {\r\n disableLogs: true\r\n };\r\n self.reset();\r\n setState('destroyed');\r\n returnObject = self = null;\r\n\r\n if (Storage.AudioContextConstructor) {\r\n Storage.AudioContextConstructor.close();\r\n Storage.AudioContextConstructor = null;\r\n }\r\n\r\n config.disableLogs = disableLogsCache;\r\n\r\n if (!config.disableLogs) {\r\n console.log('RecordRTC is destroyed.');\r\n }\r\n },\r\n\r\n /**\r\n * RecordRTC version number\r\n * @property {String} version - Release version number.\r\n * @memberof RecordRTC\r\n * @static\r\n * @readonly\r\n * @example\r\n * alert(recorder.version);\r\n */\r\n version: '5.6.2'\r\n };\r\n\r\n if (!this) {\r\n self = returnObject;\r\n return returnObject;\r\n }\r\n\r\n // if someone wants to use RecordRTC with the \"new\" keyword.\r\n for (var prop in returnObject) {\r\n this[prop] = returnObject[prop];\r\n }\r\n\r\n self = this;\r\n\r\n return returnObject;\r\n}\r\n\r\nRecordRTC.version = '5.6.2';\r\n\r\nif (typeof module !== 'undefined' /* && !!module.exports*/ ) {\r\n module.exports = RecordRTC;\r\n}\r\n\r\nif (typeof define === 'function' && define.amd) {\r\n define('RecordRTC', [], function() {\r\n return RecordRTC;\r\n });\r\n}\n\r\nRecordRTC.getFromDisk = function(type, callback) {\r\n if (!callback) {\r\n throw 'callback is mandatory.';\r\n }\r\n\r\n console.log('Getting recorded ' + (type === 'all' ? 'blobs' : type + ' blob ') + ' from disk!');\r\n DiskStorage.Fetch(function(dataURL, _type) {\r\n if (type !== 'all' && _type === type + 'Blob' && callback) {\r\n callback(dataURL);\r\n }\r\n\r\n if (type === 'all' && callback) {\r\n callback(dataURL, _type.replace('Blob', ''));\r\n }\r\n });\r\n};\r\n\r\n/**\r\n * This method can be used to store recorded blobs into IndexedDB storage.\r\n * @param {object} options - {audio: Blob, video: Blob, gif: Blob}\r\n * @method\r\n * @memberof RecordRTC\r\n * @example\r\n * RecordRTC.writeToDisk({\r\n * audio: audioBlob,\r\n * video: videoBlob,\r\n * gif : gifBlob\r\n * });\r\n */\r\nRecordRTC.writeToDisk = function(options) {\r\n console.log('Writing recorded blob(s) to disk!');\r\n options = options || {};\r\n if (options.audio && options.video && options.gif) {\r\n options.audio.getDataURL(function(audioDataURL) {\r\n options.video.getDataURL(function(videoDataURL) {\r\n options.gif.getDataURL(function(gifDataURL) {\r\n DiskStorage.Store({\r\n audioBlob: audioDataURL,\r\n videoBlob: videoDataURL,\r\n gifBlob: gifDataURL\r\n });\r\n });\r\n });\r\n });\r\n } else if (options.audio && options.video) {\r\n options.audio.getDataURL(function(audioDataURL) {\r\n options.video.getDataURL(function(videoDataURL) {\r\n DiskStorage.Store({\r\n audioBlob: audioDataURL,\r\n videoBlob: videoDataURL\r\n });\r\n });\r\n });\r\n } else if (options.audio && options.gif) {\r\n options.audio.getDataURL(function(audioDataURL) {\r\n options.gif.getDataURL(function(gifDataURL) {\r\n DiskStorage.Store({\r\n audioBlob: audioDataURL,\r\n gifBlob: gifDataURL\r\n });\r\n });\r\n });\r\n } else if (options.video && options.gif) {\r\n options.video.getDataURL(function(videoDataURL) {\r\n options.gif.getDataURL(function(gifDataURL) {\r\n DiskStorage.Store({\r\n videoBlob: videoDataURL,\r\n gifBlob: gifDataURL\r\n });\r\n });\r\n });\r\n } else if (options.audio) {\r\n options.audio.getDataURL(function(audioDataURL) {\r\n DiskStorage.Store({\r\n audioBlob: audioDataURL\r\n });\r\n });\r\n } else if (options.video) {\r\n options.video.getDataURL(function(videoDataURL) {\r\n DiskStorage.Store({\r\n videoBlob: videoDataURL\r\n });\r\n });\r\n } else if (options.gif) {\r\n options.gif.getDataURL(function(gifDataURL) {\r\n DiskStorage.Store({\r\n gifBlob: gifDataURL\r\n });\r\n });\r\n }\r\n};\n\r\n// __________________________\r\n// RecordRTC-Configuration.js\r\n\r\n/**\r\n * {@link RecordRTCConfiguration} is an inner/private helper for {@link RecordRTC}.\r\n * @summary It configures the 2nd parameter passed over {@link RecordRTC} and returns a valid \"config\" object.\r\n * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT}\r\n * @author {@link https://MuazKhan.com|Muaz Khan}\r\n * @typedef RecordRTCConfiguration\r\n * @class\r\n * @example\r\n * var options = RecordRTCConfiguration(mediaStream, options);\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n * @param {MediaStream} mediaStream - MediaStream object fetched using getUserMedia API or generated using captureStreamUntilEnded or WebAudio API.\r\n * @param {object} config - {type:\"video\", disableLogs: true, numberOfAudioChannels: 1, bufferSize: 0, sampleRate: 0, video: HTMLVideoElement, getNativeBlob:true, etc.}\r\n */\r\n\r\nfunction RecordRTCConfiguration(mediaStream, config) {\r\n if (!config.recorderType && !config.type) {\r\n if (!!config.audio && !!config.video) {\r\n config.type = 'video';\r\n } else if (!!config.audio && !config.video) {\r\n config.type = 'audio';\r\n }\r\n }\r\n\r\n if (config.recorderType && !config.type) {\r\n if (config.recorderType === WhammyRecorder || config.recorderType === CanvasRecorder || (typeof WebAssemblyRecorder !== 'undefined' && config.recorderType === WebAssemblyRecorder)) {\r\n config.type = 'video';\r\n } else if (config.recorderType === GifRecorder) {\r\n config.type = 'gif';\r\n } else if (config.recorderType === StereoAudioRecorder) {\r\n config.type = 'audio';\r\n } else if (config.recorderType === MediaStreamRecorder) {\r\n if (getTracks(mediaStream, 'audio').length && getTracks(mediaStream, 'video').length) {\r\n config.type = 'video';\r\n } else if (!getTracks(mediaStream, 'audio').length && getTracks(mediaStream, 'video').length) {\r\n config.type = 'video';\r\n } else if (getTracks(mediaStream, 'audio').length && !getTracks(mediaStream, 'video').length) {\r\n config.type = 'audio';\r\n } else {\r\n // config.type = 'UnKnown';\r\n }\r\n }\r\n }\r\n\r\n if (typeof MediaStreamRecorder !== 'undefined' && typeof MediaRecorder !== 'undefined' && 'requestData' in MediaRecorder.prototype) {\r\n if (!config.mimeType) {\r\n config.mimeType = 'video/webm';\r\n }\r\n\r\n if (!config.type) {\r\n config.type = config.mimeType.split('/')[0];\r\n }\r\n\r\n if (!config.bitsPerSecond) {\r\n // config.bitsPerSecond = 128000;\r\n }\r\n }\r\n\r\n // consider default type=audio\r\n if (!config.type) {\r\n if (config.mimeType) {\r\n config.type = config.mimeType.split('/')[0];\r\n }\r\n if (!config.type) {\r\n config.type = 'audio';\r\n }\r\n }\r\n\r\n return config;\r\n}\n\r\n// __________________\r\n// GetRecorderType.js\r\n\r\n/**\r\n * {@link GetRecorderType} is an inner/private helper for {@link RecordRTC}.\r\n * @summary It returns best recorder-type available for your browser.\r\n * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT}\r\n * @author {@link https://MuazKhan.com|Muaz Khan}\r\n * @typedef GetRecorderType\r\n * @class\r\n * @example\r\n * var RecorderType = GetRecorderType(options);\r\n * var recorder = new RecorderType(options);\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n * @param {MediaStream} mediaStream - MediaStream object fetched using getUserMedia API or generated using captureStreamUntilEnded or WebAudio API.\r\n * @param {object} config - {type:\"video\", disableLogs: true, numberOfAudioChannels: 1, bufferSize: 0, sampleRate: 0, video: HTMLVideoElement, etc.}\r\n */\r\n\r\nfunction GetRecorderType(mediaStream, config) {\r\n var recorder;\r\n\r\n // StereoAudioRecorder can work with all three: Edge, Firefox and Chrome\r\n // todo: detect if it is Edge, then auto use: StereoAudioRecorder\r\n if (isChrome || isEdge || isOpera) {\r\n // Media Stream Recording API has not been implemented in chrome yet;\r\n // That's why using WebAudio API to record stereo audio in WAV format\r\n recorder = StereoAudioRecorder;\r\n }\r\n\r\n if (typeof MediaRecorder !== 'undefined' && 'requestData' in MediaRecorder.prototype && !isChrome) {\r\n recorder = MediaStreamRecorder;\r\n }\r\n\r\n // video recorder (in WebM format)\r\n if (config.type === 'video' && (isChrome || isOpera)) {\r\n recorder = WhammyRecorder;\r\n\r\n if (typeof WebAssemblyRecorder !== 'undefined' && typeof ReadableStream !== 'undefined') {\r\n recorder = WebAssemblyRecorder;\r\n }\r\n }\r\n\r\n // video recorder (in Gif format)\r\n if (config.type === 'gif') {\r\n recorder = GifRecorder;\r\n }\r\n\r\n // html2canvas recording!\r\n if (config.type === 'canvas') {\r\n recorder = CanvasRecorder;\r\n }\r\n\r\n if (isMediaRecorderCompatible() && recorder !== CanvasRecorder && recorder !== GifRecorder && typeof MediaRecorder !== 'undefined' && 'requestData' in MediaRecorder.prototype) {\r\n if (getTracks(mediaStream, 'video').length || getTracks(mediaStream, 'audio').length) {\r\n // audio-only recording\r\n if (config.type === 'audio') {\r\n if (typeof MediaRecorder.isTypeSupported === 'function' && MediaRecorder.isTypeSupported('audio/webm')) {\r\n recorder = MediaStreamRecorder;\r\n }\r\n // else recorder = StereoAudioRecorder;\r\n } else {\r\n // video or screen tracks\r\n if (typeof MediaRecorder.isTypeSupported === 'function' && MediaRecorder.isTypeSupported('video/webm')) {\r\n recorder = MediaStreamRecorder;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (mediaStream instanceof Array && mediaStream.length) {\r\n recorder = MultiStreamRecorder;\r\n }\r\n\r\n if (config.recorderType) {\r\n recorder = config.recorderType;\r\n }\r\n\r\n if (!config.disableLogs && !!recorder && !!recorder.name) {\r\n console.log('Using recorderType:', recorder.name || recorder.constructor.name);\r\n }\r\n\r\n if (!recorder && isSafari) {\r\n recorder = MediaStreamRecorder;\r\n }\r\n\r\n return recorder;\r\n}\n\r\n// _____________\r\n// MRecordRTC.js\r\n\r\n/**\r\n * MRecordRTC runs on top of {@link RecordRTC} to bring multiple recordings in a single place, by providing simple API.\r\n * @summary MRecordRTC stands for \"Multiple-RecordRTC\".\r\n * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT}\r\n * @author {@link https://MuazKhan.com|Muaz Khan}\r\n * @typedef MRecordRTC\r\n * @class\r\n * @example\r\n * var recorder = new MRecordRTC();\r\n * recorder.addStream(MediaStream);\r\n * recorder.mediaType = {\r\n * audio: true, // or StereoAudioRecorder or MediaStreamRecorder\r\n * video: true, // or WhammyRecorder or MediaStreamRecorder or WebAssemblyRecorder or CanvasRecorder\r\n * gif: true // or GifRecorder\r\n * };\r\n * // mimeType is optional and should be set only in advance cases.\r\n * recorder.mimeType = {\r\n * audio: 'audio/wav',\r\n * video: 'video/webm',\r\n * gif: 'image/gif'\r\n * };\r\n * recorder.startRecording();\r\n * @see For further information:\r\n * @see {@link https://github.com/muaz-khan/RecordRTC/tree/master/MRecordRTC|MRecordRTC Source Code}\r\n * @param {MediaStream} mediaStream - MediaStream object fetched using getUserMedia API or generated using captureStreamUntilEnded or WebAudio API.\r\n * @requires {@link RecordRTC}\r\n */\r\n\r\nfunction MRecordRTC(mediaStream) {\r\n\r\n /**\r\n * This method attaches MediaStream object to {@link MRecordRTC}.\r\n * @param {MediaStream} mediaStream - A MediaStream object, either fetched using getUserMedia API, or generated using captureStreamUntilEnded or WebAudio API.\r\n * @method\r\n * @memberof MRecordRTC\r\n * @example\r\n * recorder.addStream(MediaStream);\r\n */\r\n this.addStream = function(_mediaStream) {\r\n if (_mediaStream) {\r\n mediaStream = _mediaStream;\r\n }\r\n };\r\n\r\n /**\r\n * This property can be used to set the recording type e.g. audio, or video, or gif, or canvas.\r\n * @property {object} mediaType - {audio: true, video: true, gif: true}\r\n * @memberof MRecordRTC\r\n * @example\r\n * var recorder = new MRecordRTC();\r\n * recorder.mediaType = {\r\n * audio: true, // TRUE or StereoAudioRecorder or MediaStreamRecorder\r\n * video: true, // TRUE or WhammyRecorder or MediaStreamRecorder or WebAssemblyRecorder or CanvasRecorder\r\n * gif : true // TRUE or GifRecorder\r\n * };\r\n */\r\n this.mediaType = {\r\n audio: true,\r\n video: true\r\n };\r\n\r\n /**\r\n * This method starts recording.\r\n * @method\r\n * @memberof MRecordRTC\r\n * @example\r\n * recorder.startRecording();\r\n */\r\n this.startRecording = function() {\r\n var mediaType = this.mediaType;\r\n var recorderType;\r\n var mimeType = this.mimeType || {\r\n audio: null,\r\n video: null,\r\n gif: null\r\n };\r\n\r\n if (typeof mediaType.audio !== 'function' && isMediaRecorderCompatible() && !getTracks(mediaStream, 'audio').length) {\r\n mediaType.audio = false;\r\n }\r\n\r\n if (typeof mediaType.video !== 'function' && isMediaRecorderCompatible() && !getTracks(mediaStream, 'video').length) {\r\n mediaType.video = false;\r\n }\r\n\r\n if (typeof mediaType.gif !== 'function' && isMediaRecorderCompatible() && !getTracks(mediaStream, 'video').length) {\r\n mediaType.gif = false;\r\n }\r\n\r\n if (!mediaType.audio && !mediaType.video && !mediaType.gif) {\r\n throw 'MediaStream must have either audio or video tracks.';\r\n }\r\n\r\n if (!!mediaType.audio) {\r\n recorderType = null;\r\n if (typeof mediaType.audio === 'function') {\r\n recorderType = mediaType.audio;\r\n }\r\n\r\n this.audioRecorder = new RecordRTC(mediaStream, {\r\n type: 'audio',\r\n bufferSize: this.bufferSize,\r\n sampleRate: this.sampleRate,\r\n numberOfAudioChannels: this.numberOfAudioChannels || 2,\r\n disableLogs: this.disableLogs,\r\n recorderType: recorderType,\r\n mimeType: mimeType.audio,\r\n timeSlice: this.timeSlice,\r\n onTimeStamp: this.onTimeStamp\r\n });\r\n\r\n if (!mediaType.video) {\r\n this.audioRecorder.startRecording();\r\n }\r\n }\r\n\r\n if (!!mediaType.video) {\r\n recorderType = null;\r\n if (typeof mediaType.video === 'function') {\r\n recorderType = mediaType.video;\r\n }\r\n\r\n var newStream = mediaStream;\r\n\r\n if (isMediaRecorderCompatible() && !!mediaType.audio && typeof mediaType.audio === 'function') {\r\n var videoTrack = getTracks(mediaStream, 'video')[0];\r\n\r\n if (isFirefox) {\r\n newStream = new MediaStream();\r\n newStream.addTrack(videoTrack);\r\n\r\n if (recorderType && recorderType === WhammyRecorder) {\r\n // Firefox does NOT supports webp-encoding yet\r\n // But Firefox do supports WebAssemblyRecorder\r\n recorderType = MediaStreamRecorder;\r\n }\r\n } else {\r\n newStream = new MediaStream();\r\n newStream.addTrack(videoTrack);\r\n }\r\n }\r\n\r\n this.videoRecorder = new RecordRTC(newStream, {\r\n type: 'video',\r\n video: this.video,\r\n canvas: this.canvas,\r\n frameInterval: this.frameInterval || 10,\r\n disableLogs: this.disableLogs,\r\n recorderType: recorderType,\r\n mimeType: mimeType.video,\r\n timeSlice: this.timeSlice,\r\n onTimeStamp: this.onTimeStamp,\r\n workerPath: this.workerPath,\r\n webAssemblyPath: this.webAssemblyPath,\r\n frameRate: this.frameRate, // used by WebAssemblyRecorder; values: usually 30; accepts any.\r\n bitrate: this.bitrate // used by WebAssemblyRecorder; values: 0 to 1000+\r\n });\r\n\r\n if (!mediaType.audio) {\r\n this.videoRecorder.startRecording();\r\n }\r\n }\r\n\r\n if (!!mediaType.audio && !!mediaType.video) {\r\n var self = this;\r\n\r\n var isSingleRecorder = isMediaRecorderCompatible() === true;\r\n\r\n if (mediaType.audio instanceof StereoAudioRecorder && !!mediaType.video) {\r\n isSingleRecorder = false;\r\n } else if (mediaType.audio !== true && mediaType.video !== true && mediaType.audio !== mediaType.video) {\r\n isSingleRecorder = false;\r\n }\r\n\r\n if (isSingleRecorder === true) {\r\n self.audioRecorder = null;\r\n self.videoRecorder.startRecording();\r\n } else {\r\n self.videoRecorder.initRecorder(function() {\r\n self.audioRecorder.initRecorder(function() {\r\n // Both recorders are ready to record things accurately\r\n self.videoRecorder.startRecording();\r\n self.audioRecorder.startRecording();\r\n });\r\n });\r\n }\r\n }\r\n\r\n if (!!mediaType.gif) {\r\n recorderType = null;\r\n if (typeof mediaType.gif === 'function') {\r\n recorderType = mediaType.gif;\r\n }\r\n this.gifRecorder = new RecordRTC(mediaStream, {\r\n type: 'gif',\r\n frameRate: this.frameRate || 200,\r\n quality: this.quality || 10,\r\n disableLogs: this.disableLogs,\r\n recorderType: recorderType,\r\n mimeType: mimeType.gif\r\n });\r\n this.gifRecorder.startRecording();\r\n }\r\n };\r\n\r\n /**\r\n * This method stops recording.\r\n * @param {function} callback - Callback function is invoked when all encoders finished their jobs.\r\n * @method\r\n * @memberof MRecordRTC\r\n * @example\r\n * recorder.stopRecording(function(recording){\r\n * var audioBlob = recording.audio;\r\n * var videoBlob = recording.video;\r\n * var gifBlob = recording.gif;\r\n * });\r\n */\r\n this.stopRecording = function(callback) {\r\n callback = callback || function() {};\r\n\r\n if (this.audioRecorder) {\r\n this.audioRecorder.stopRecording(function(blobURL) {\r\n callback(blobURL, 'audio');\r\n });\r\n }\r\n\r\n if (this.videoRecorder) {\r\n this.videoRecorder.stopRecording(function(blobURL) {\r\n callback(blobURL, 'video');\r\n });\r\n }\r\n\r\n if (this.gifRecorder) {\r\n this.gifRecorder.stopRecording(function(blobURL) {\r\n callback(blobURL, 'gif');\r\n });\r\n }\r\n };\r\n\r\n /**\r\n * This method pauses recording.\r\n * @method\r\n * @memberof MRecordRTC\r\n * @example\r\n * recorder.pauseRecording();\r\n */\r\n this.pauseRecording = function() {\r\n if (this.audioRecorder) {\r\n this.audioRecorder.pauseRecording();\r\n }\r\n\r\n if (this.videoRecorder) {\r\n this.videoRecorder.pauseRecording();\r\n }\r\n\r\n if (this.gifRecorder) {\r\n this.gifRecorder.pauseRecording();\r\n }\r\n };\r\n\r\n /**\r\n * This method resumes recording.\r\n * @method\r\n * @memberof MRecordRTC\r\n * @example\r\n * recorder.resumeRecording();\r\n */\r\n this.resumeRecording = function() {\r\n if (this.audioRecorder) {\r\n this.audioRecorder.resumeRecording();\r\n }\r\n\r\n if (this.videoRecorder) {\r\n this.videoRecorder.resumeRecording();\r\n }\r\n\r\n if (this.gifRecorder) {\r\n this.gifRecorder.resumeRecording();\r\n }\r\n };\r\n\r\n /**\r\n * This method can be used to manually get all recorded blobs.\r\n * @param {function} callback - All recorded blobs are passed back to the \"callback\" function.\r\n * @method\r\n * @memberof MRecordRTC\r\n * @example\r\n * recorder.getBlob(function(recording){\r\n * var audioBlob = recording.audio;\r\n * var videoBlob = recording.video;\r\n * var gifBlob = recording.gif;\r\n * });\r\n * // or\r\n * var audioBlob = recorder.getBlob().audio;\r\n * var videoBlob = recorder.getBlob().video;\r\n */\r\n this.getBlob = function(callback) {\r\n var output = {};\r\n\r\n if (this.audioRecorder) {\r\n output.audio = this.audioRecorder.getBlob();\r\n }\r\n\r\n if (this.videoRecorder) {\r\n output.video = this.videoRecorder.getBlob();\r\n }\r\n\r\n if (this.gifRecorder) {\r\n output.gif = this.gifRecorder.getBlob();\r\n }\r\n\r\n if (callback) {\r\n callback(output);\r\n }\r\n\r\n return output;\r\n };\r\n\r\n /**\r\n * Destroy all recorder instances.\r\n * @method\r\n * @memberof MRecordRTC\r\n * @example\r\n * recorder.destroy();\r\n */\r\n this.destroy = function() {\r\n if (this.audioRecorder) {\r\n this.audioRecorder.destroy();\r\n this.audioRecorder = null;\r\n }\r\n\r\n if (this.videoRecorder) {\r\n this.videoRecorder.destroy();\r\n this.videoRecorder = null;\r\n }\r\n\r\n if (this.gifRecorder) {\r\n this.gifRecorder.destroy();\r\n this.gifRecorder = null;\r\n }\r\n };\r\n\r\n /**\r\n * This method can be used to manually get all recorded blobs' DataURLs.\r\n * @param {function} callback - All recorded blobs' DataURLs are passed back to the \"callback\" function.\r\n * @method\r\n * @memberof MRecordRTC\r\n * @example\r\n * recorder.getDataURL(function(recording){\r\n * var audioDataURL = recording.audio;\r\n * var videoDataURL = recording.video;\r\n * var gifDataURL = recording.gif;\r\n * });\r\n */\r\n this.getDataURL = function(callback) {\r\n this.getBlob(function(blob) {\r\n if (blob.audio && blob.video) {\r\n getDataURL(blob.audio, function(_audioDataURL) {\r\n getDataURL(blob.video, function(_videoDataURL) {\r\n callback({\r\n audio: _audioDataURL,\r\n video: _videoDataURL\r\n });\r\n });\r\n });\r\n } else if (blob.audio) {\r\n getDataURL(blob.audio, function(_audioDataURL) {\r\n callback({\r\n audio: _audioDataURL\r\n });\r\n });\r\n } else if (blob.video) {\r\n getDataURL(blob.video, function(_videoDataURL) {\r\n callback({\r\n video: _videoDataURL\r\n });\r\n });\r\n }\r\n });\r\n\r\n function getDataURL(blob, callback00) {\r\n if (typeof Worker !== 'undefined') {\r\n var webWorker = processInWebWorker(function readFile(_blob) {\r\n postMessage(new FileReaderSync().readAsDataURL(_blob));\r\n });\r\n\r\n webWorker.onmessage = function(event) {\r\n callback00(event.data);\r\n };\r\n\r\n webWorker.postMessage(blob);\r\n } else {\r\n var reader = new FileReader();\r\n reader.readAsDataURL(blob);\r\n reader.onload = function(event) {\r\n callback00(event.target.result);\r\n };\r\n }\r\n }\r\n\r\n function processInWebWorker(_function) {\r\n var blob = URL.createObjectURL(new Blob([_function.toString(),\r\n 'this.onmessage = function (eee) {' + _function.name + '(eee.data);}'\r\n ], {\r\n type: 'application/javascript'\r\n }));\r\n\r\n var worker = new Worker(blob);\r\n var url;\r\n if (typeof URL !== 'undefined') {\r\n url = URL;\r\n } else if (typeof webkitURL !== 'undefined') {\r\n url = webkitURL;\r\n } else {\r\n throw 'Neither URL nor webkitURL detected.';\r\n }\r\n url.revokeObjectURL(blob);\r\n return worker;\r\n }\r\n };\r\n\r\n /**\r\n * This method can be used to ask {@link MRecordRTC} to write all recorded blobs into IndexedDB storage.\r\n * @method\r\n * @memberof MRecordRTC\r\n * @example\r\n * recorder.writeToDisk();\r\n */\r\n this.writeToDisk = function() {\r\n RecordRTC.writeToDisk({\r\n audio: this.audioRecorder,\r\n video: this.videoRecorder,\r\n gif: this.gifRecorder\r\n });\r\n };\r\n\r\n /**\r\n * This method can be used to invoke a save-as dialog for all recorded blobs.\r\n * @param {object} args - {audio: 'audio-name', video: 'video-name', gif: 'gif-name'}\r\n * @method\r\n * @memberof MRecordRTC\r\n * @example\r\n * recorder.save({\r\n * audio: 'audio-file-name',\r\n * video: 'video-file-name',\r\n * gif : 'gif-file-name'\r\n * });\r\n */\r\n this.save = function(args) {\r\n args = args || {\r\n audio: true,\r\n video: true,\r\n gif: true\r\n };\r\n\r\n if (!!args.audio && this.audioRecorder) {\r\n this.audioRecorder.save(typeof args.audio === 'string' ? args.audio : '');\r\n }\r\n\r\n if (!!args.video && this.videoRecorder) {\r\n this.videoRecorder.save(typeof args.video === 'string' ? args.video : '');\r\n }\r\n if (!!args.gif && this.gifRecorder) {\r\n this.gifRecorder.save(typeof args.gif === 'string' ? args.gif : '');\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * This method can be used to get all recorded blobs from IndexedDB storage.\r\n * @param {string} type - 'all' or 'audio' or 'video' or 'gif'\r\n * @param {function} callback - Callback function to get all stored blobs.\r\n * @method\r\n * @memberof MRecordRTC\r\n * @example\r\n * MRecordRTC.getFromDisk('all', function(dataURL, type){\r\n * if(type === 'audio') { }\r\n * if(type === 'video') { }\r\n * if(type === 'gif') { }\r\n * });\r\n */\r\nMRecordRTC.getFromDisk = RecordRTC.getFromDisk;\r\n\r\n/**\r\n * This method can be used to store recorded blobs into IndexedDB storage.\r\n * @param {object} options - {audio: Blob, video: Blob, gif: Blob}\r\n * @method\r\n * @memberof MRecordRTC\r\n * @example\r\n * MRecordRTC.writeToDisk({\r\n * audio: audioBlob,\r\n * video: videoBlob,\r\n * gif : gifBlob\r\n * });\r\n */\r\nMRecordRTC.writeToDisk = RecordRTC.writeToDisk;\r\n\r\nif (typeof RecordRTC !== 'undefined') {\r\n RecordRTC.MRecordRTC = MRecordRTC;\r\n}\n\r\nvar browserFakeUserAgent = 'Fake/5.0 (FakeOS) AppleWebKit/123 (KHTML, like Gecko) Fake/12.3.4567.89 Fake/123.45';\r\n\r\n(function(that) {\r\n if (!that) {\r\n return;\r\n }\r\n\r\n if (typeof window !== 'undefined') {\r\n return;\r\n }\r\n\r\n if (typeof global === 'undefined') {\r\n return;\r\n }\r\n\r\n global.navigator = {\r\n userAgent: browserFakeUserAgent,\r\n getUserMedia: function() {}\r\n };\r\n\r\n if (!global.console) {\r\n global.console = {};\r\n }\r\n\r\n if (typeof global.console.log === 'undefined' || typeof global.console.error === 'undefined') {\r\n global.console.error = global.console.log = global.console.log || function() {\r\n console.log(arguments);\r\n };\r\n }\r\n\r\n if (typeof document === 'undefined') {\r\n /*global document:true */\r\n that.document = {\r\n documentElement: {\r\n appendChild: function() {\r\n return '';\r\n }\r\n }\r\n };\r\n\r\n document.createElement = document.captureStream = document.mozCaptureStream = function() {\r\n var obj = {\r\n getContext: function() {\r\n return obj;\r\n },\r\n play: function() {},\r\n pause: function() {},\r\n drawImage: function() {},\r\n toDataURL: function() {\r\n return '';\r\n },\r\n style: {}\r\n };\r\n return obj;\r\n };\r\n\r\n that.HTMLVideoElement = function() {};\r\n }\r\n\r\n if (typeof location === 'undefined') {\r\n /*global location:true */\r\n that.location = {\r\n protocol: 'file:',\r\n href: '',\r\n hash: ''\r\n };\r\n }\r\n\r\n if (typeof screen === 'undefined') {\r\n /*global screen:true */\r\n that.screen = {\r\n width: 0,\r\n height: 0\r\n };\r\n }\r\n\r\n if (typeof URL === 'undefined') {\r\n /*global screen:true */\r\n that.URL = {\r\n createObjectURL: function() {\r\n return '';\r\n },\r\n revokeObjectURL: function() {\r\n return '';\r\n }\r\n };\r\n }\r\n\r\n /*global window:true */\r\n that.window = global;\r\n})(typeof global !== 'undefined' ? global : null);\n\r\n// _____________________________\r\n// Cross-Browser-Declarations.js\r\n\r\n// animation-frame used in WebM recording\r\n\r\n/*jshint -W079 */\r\nvar requestAnimationFrame = window.requestAnimationFrame;\r\nif (typeof requestAnimationFrame === 'undefined') {\r\n if (typeof webkitRequestAnimationFrame !== 'undefined') {\r\n /*global requestAnimationFrame:true */\r\n requestAnimationFrame = webkitRequestAnimationFrame;\r\n } else if (typeof mozRequestAnimationFrame !== 'undefined') {\r\n /*global requestAnimationFrame:true */\r\n requestAnimationFrame = mozRequestAnimationFrame;\r\n } else if (typeof msRequestAnimationFrame !== 'undefined') {\r\n /*global requestAnimationFrame:true */\r\n requestAnimationFrame = msRequestAnimationFrame;\r\n } else if (typeof requestAnimationFrame === 'undefined') {\r\n // via: https://gist.github.com/paulirish/1579671\r\n var lastTime = 0;\r\n\r\n /*global requestAnimationFrame:true */\r\n requestAnimationFrame = function(callback, element) {\r\n var currTime = new Date().getTime();\r\n var timeToCall = Math.max(0, 16 - (currTime - lastTime));\r\n var id = setTimeout(function() {\r\n callback(currTime + timeToCall);\r\n }, timeToCall);\r\n lastTime = currTime + timeToCall;\r\n return id;\r\n };\r\n }\r\n}\r\n\r\n/*jshint -W079 */\r\nvar cancelAnimationFrame = window.cancelAnimationFrame;\r\nif (typeof cancelAnimationFrame === 'undefined') {\r\n if (typeof webkitCancelAnimationFrame !== 'undefined') {\r\n /*global cancelAnimationFrame:true */\r\n cancelAnimationFrame = webkitCancelAnimationFrame;\r\n } else if (typeof mozCancelAnimationFrame !== 'undefined') {\r\n /*global cancelAnimationFrame:true */\r\n cancelAnimationFrame = mozCancelAnimationFrame;\r\n } else if (typeof msCancelAnimationFrame !== 'undefined') {\r\n /*global cancelAnimationFrame:true */\r\n cancelAnimationFrame = msCancelAnimationFrame;\r\n } else if (typeof cancelAnimationFrame === 'undefined') {\r\n /*global cancelAnimationFrame:true */\r\n cancelAnimationFrame = function(id) {\r\n clearTimeout(id);\r\n };\r\n }\r\n}\r\n\r\n// WebAudio API representer\r\nvar AudioContext = window.AudioContext;\r\n\r\nif (typeof AudioContext === 'undefined') {\r\n if (typeof webkitAudioContext !== 'undefined') {\r\n /*global AudioContext:true */\r\n AudioContext = webkitAudioContext;\r\n }\r\n\r\n if (typeof mozAudioContext !== 'undefined') {\r\n /*global AudioContext:true */\r\n AudioContext = mozAudioContext;\r\n }\r\n}\r\n\r\n/*jshint -W079 */\r\nvar URL = window.URL;\r\n\r\nif (typeof URL === 'undefined' && typeof webkitURL !== 'undefined') {\r\n /*global URL:true */\r\n URL = webkitURL;\r\n}\r\n\r\nif (typeof navigator !== 'undefined' && typeof navigator.getUserMedia === 'undefined') { // maybe window.navigator?\r\n if (typeof navigator.webkitGetUserMedia !== 'undefined') {\r\n navigator.getUserMedia = navigator.webkitGetUserMedia;\r\n }\r\n\r\n if (typeof navigator.mozGetUserMedia !== 'undefined') {\r\n navigator.getUserMedia = navigator.mozGetUserMedia;\r\n }\r\n}\r\n\r\nvar isEdge = navigator.userAgent.indexOf('Edge') !== -1 && (!!navigator.msSaveBlob || !!navigator.msSaveOrOpenBlob);\r\nvar isOpera = !!window.opera || navigator.userAgent.indexOf('OPR/') !== -1;\r\nvar isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1 && ('netscape' in window) && / rv:/.test(navigator.userAgent);\r\nvar isChrome = (!isOpera && !isEdge && !!navigator.webkitGetUserMedia) || isElectron() || navigator.userAgent.toLowerCase().indexOf('chrome/') !== -1;\r\n\r\nvar isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\r\n\r\nif (isSafari && !isChrome && navigator.userAgent.indexOf('CriOS') !== -1) {\r\n isSafari = false;\r\n isChrome = true;\r\n}\r\n\r\nvar MediaStream = window.MediaStream;\r\n\r\nif (typeof MediaStream === 'undefined' && typeof webkitMediaStream !== 'undefined') {\r\n MediaStream = webkitMediaStream;\r\n}\r\n\r\n/*global MediaStream:true */\r\nif (typeof MediaStream !== 'undefined') {\r\n // override \"stop\" method for all browsers\r\n if (typeof MediaStream.prototype.stop === 'undefined') {\r\n MediaStream.prototype.stop = function() {\r\n this.getTracks().forEach(function(track) {\r\n track.stop();\r\n });\r\n };\r\n }\r\n}\r\n\r\n// below function via: http://goo.gl/B3ae8c\r\n/**\r\n * Return human-readable file size.\r\n * @param {number} bytes - Pass bytes and get formatted string.\r\n * @returns {string} - formatted string\r\n * @example\r\n * bytesToSize(1024*1024*5) === '5 GB'\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n */\r\nfunction bytesToSize(bytes) {\r\n var k = 1000;\r\n var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];\r\n if (bytes === 0) {\r\n return '0 Bytes';\r\n }\r\n var i = parseInt(Math.floor(Math.log(bytes) / Math.log(k)), 10);\r\n return (bytes / Math.pow(k, i)).toPrecision(3) + ' ' + sizes[i];\r\n}\r\n\r\n/**\r\n * @param {Blob} file - File or Blob object. This parameter is required.\r\n * @param {string} fileName - Optional file name e.g. \"Recorded-Video.webm\"\r\n * @example\r\n * invokeSaveAsDialog(blob or file, [optional] fileName);\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n */\r\nfunction invokeSaveAsDialog(file, fileName) {\r\n if (!file) {\r\n throw 'Blob object is required.';\r\n }\r\n\r\n if (!file.type) {\r\n try {\r\n file.type = 'video/webm';\r\n } catch (e) {}\r\n }\r\n\r\n var fileExtension = (file.type || 'video/webm').split('/')[1];\r\n if (fileExtension.indexOf(';') !== -1) {\r\n // extended mimetype, e.g. 'video/webm;codecs=vp8,opus'\r\n fileExtension = fileExtension.split(';')[0];\r\n }\r\n if (fileName && fileName.indexOf('.') !== -1) {\r\n var splitted = fileName.split('.');\r\n fileName = splitted[0];\r\n fileExtension = splitted[1];\r\n }\r\n\r\n var fileFullName = (fileName || (Math.round(Math.random() * 9999999999) + 888888888)) + '.' + fileExtension;\r\n\r\n if (typeof navigator.msSaveOrOpenBlob !== 'undefined') {\r\n return navigator.msSaveOrOpenBlob(file, fileFullName);\r\n } else if (typeof navigator.msSaveBlob !== 'undefined') {\r\n return navigator.msSaveBlob(file, fileFullName);\r\n }\r\n\r\n var hyperlink = document.createElement('a');\r\n hyperlink.href = URL.createObjectURL(file);\r\n hyperlink.download = fileFullName;\r\n\r\n hyperlink.style = 'display:none;opacity:0;color:transparent;';\r\n (document.body || document.documentElement).appendChild(hyperlink);\r\n\r\n if (typeof hyperlink.click === 'function') {\r\n hyperlink.click();\r\n } else {\r\n hyperlink.target = '_blank';\r\n hyperlink.dispatchEvent(new MouseEvent('click', {\r\n view: window,\r\n bubbles: true,\r\n cancelable: true\r\n }));\r\n }\r\n\r\n URL.revokeObjectURL(hyperlink.href);\r\n}\r\n\r\n/**\r\n * from: https://github.com/cheton/is-electron/blob/master/index.js\r\n **/\r\nfunction isElectron() {\r\n // Renderer process\r\n if (typeof window !== 'undefined' && typeof window.process === 'object' && window.process.type === 'renderer') {\r\n return true;\r\n }\r\n\r\n // Main process\r\n if (typeof process !== 'undefined' && typeof process.versions === 'object' && !!process.versions.electron) {\r\n return true;\r\n }\r\n\r\n // Detect the user agent when the `nodeIntegration` option is set to true\r\n if (typeof navigator === 'object' && typeof navigator.userAgent === 'string' && navigator.userAgent.indexOf('Electron') >= 0) {\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nfunction getTracks(stream, kind) {\r\n if (!stream || !stream.getTracks) {\r\n return [];\r\n }\r\n\r\n return stream.getTracks().filter(function(t) {\r\n return t.kind === (kind || 'audio');\r\n });\r\n}\r\n\r\nfunction setSrcObject(stream, element) {\r\n if ('srcObject' in element) {\r\n element.srcObject = stream;\r\n } else if ('mozSrcObject' in element) {\r\n element.mozSrcObject = stream;\r\n } else {\r\n element.srcObject = stream;\r\n }\r\n}\r\n\r\n/**\r\n * @param {Blob} file - File or Blob object.\r\n * @param {function} callback - Callback function.\r\n * @example\r\n * getSeekableBlob(blob or file, callback);\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n */\r\nfunction getSeekableBlob(inputBlob, callback) {\r\n // EBML.js copyrights goes to: https://github.com/legokichi/ts-ebml\r\n if (typeof EBML === 'undefined') {\r\n throw new Error('Please link: https://www.webrtc-experiment.com/EBML.js');\r\n }\r\n\r\n var reader = new EBML.Reader();\r\n var decoder = new EBML.Decoder();\r\n var tools = EBML.tools;\r\n\r\n var fileReader = new FileReader();\r\n fileReader.onload = function(e) {\r\n var ebmlElms = decoder.decode(this.result);\r\n ebmlElms.forEach(function(element) {\r\n reader.read(element);\r\n });\r\n reader.stop();\r\n var refinedMetadataBuf = tools.makeMetadataSeekable(reader.metadatas, reader.duration, reader.cues);\r\n var body = this.result.slice(reader.metadataSize);\r\n var newBlob = new Blob([refinedMetadataBuf, body], {\r\n type: 'video/webm'\r\n });\r\n\r\n callback(newBlob);\r\n };\r\n fileReader.readAsArrayBuffer(inputBlob);\r\n}\r\n\r\nif (typeof RecordRTC !== 'undefined') {\r\n RecordRTC.invokeSaveAsDialog = invokeSaveAsDialog;\r\n RecordRTC.getTracks = getTracks;\r\n RecordRTC.getSeekableBlob = getSeekableBlob;\r\n RecordRTC.bytesToSize = bytesToSize;\r\n RecordRTC.isElectron = isElectron;\r\n}\r\n\r\n// __________ (used to handle stuff like http://goo.gl/xmE5eg) issue #129\r\n// Storage.js\r\n\r\n/**\r\n * Storage is a standalone object used by {@link RecordRTC} to store reusable objects e.g. \"new AudioContext\".\r\n * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT}\r\n * @author {@link https://MuazKhan.com|Muaz Khan}\r\n * @example\r\n * Storage.AudioContext === webkitAudioContext\r\n * @property {webkitAudioContext} AudioContext - Keeps a reference to AudioContext object.\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n */\r\n\r\nvar Storage = {};\r\n\r\nif (typeof AudioContext !== 'undefined') {\r\n Storage.AudioContext = AudioContext;\r\n} else if (typeof webkitAudioContext !== 'undefined') {\r\n Storage.AudioContext = webkitAudioContext;\r\n}\r\n\r\nif (typeof RecordRTC !== 'undefined') {\r\n RecordRTC.Storage = Storage;\r\n}\n\r\nfunction isMediaRecorderCompatible() {\r\n if (isFirefox || isSafari || isEdge) {\r\n return true;\r\n }\r\n\r\n var nVer = navigator.appVersion;\r\n var nAgt = navigator.userAgent;\r\n var fullVersion = '' + parseFloat(navigator.appVersion);\r\n var majorVersion = parseInt(navigator.appVersion, 10);\r\n var nameOffset, verOffset, ix;\r\n\r\n if (isChrome || isOpera) {\r\n verOffset = nAgt.indexOf('Chrome');\r\n fullVersion = nAgt.substring(verOffset + 7);\r\n }\r\n\r\n // trim the fullVersion string at semicolon/space if present\r\n if ((ix = fullVersion.indexOf(';')) !== -1) {\r\n fullVersion = fullVersion.substring(0, ix);\r\n }\r\n\r\n if ((ix = fullVersion.indexOf(' ')) !== -1) {\r\n fullVersion = fullVersion.substring(0, ix);\r\n }\r\n\r\n majorVersion = parseInt('' + fullVersion, 10);\r\n\r\n if (isNaN(majorVersion)) {\r\n fullVersion = '' + parseFloat(navigator.appVersion);\r\n majorVersion = parseInt(navigator.appVersion, 10);\r\n }\r\n\r\n return majorVersion >= 49;\r\n}\n\r\n// ______________________\r\n// MediaStreamRecorder.js\r\n\r\n/**\r\n * MediaStreamRecorder is an abstraction layer for {@link https://w3c.github.io/mediacapture-record/MediaRecorder.html|MediaRecorder API}. It is used by {@link RecordRTC} to record MediaStream(s) in both Chrome and Firefox.\r\n * @summary Runs top over {@link https://w3c.github.io/mediacapture-record/MediaRecorder.html|MediaRecorder API}.\r\n * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT}\r\n * @author {@link https://github.com/muaz-khan|Muaz Khan}\r\n * @typedef MediaStreamRecorder\r\n * @class\r\n * @example\r\n * var config = {\r\n * mimeType: 'video/webm', // vp8, vp9, h264, mkv, opus/vorbis\r\n * audioBitsPerSecond : 256 * 8 * 1024,\r\n * videoBitsPerSecond : 256 * 8 * 1024,\r\n * bitsPerSecond: 256 * 8 * 1024, // if this is provided, skip above two\r\n * checkForInactiveTracks: true,\r\n * timeSlice: 1000, // concatenate intervals based blobs\r\n * ondataavailable: function() {} // get intervals based blobs\r\n * }\r\n * var recorder = new MediaStreamRecorder(mediaStream, config);\r\n * recorder.record();\r\n * recorder.stop(function(blob) {\r\n * video.src = URL.createObjectURL(blob);\r\n *\r\n * // or\r\n * var blob = recorder.blob;\r\n * });\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n * @param {MediaStream} mediaStream - MediaStream object fetched using getUserMedia API or generated using captureStreamUntilEnded or WebAudio API.\r\n * @param {object} config - {disableLogs:true, initCallback: function, mimeType: \"video/webm\", timeSlice: 1000}\r\n * @throws Will throw an error if first argument \"MediaStream\" is missing. Also throws error if \"MediaRecorder API\" are not supported by the browser.\r\n */\r\n\r\nfunction MediaStreamRecorder(mediaStream, config) {\r\n var self = this;\r\n\r\n if (typeof mediaStream === 'undefined') {\r\n throw 'First argument \"MediaStream\" is required.';\r\n }\r\n\r\n if (typeof MediaRecorder === 'undefined') {\r\n throw 'Your browser does not support the Media Recorder API. Please try other modules e.g. WhammyRecorder or StereoAudioRecorder.';\r\n }\r\n\r\n config = config || {\r\n // bitsPerSecond: 256 * 8 * 1024,\r\n mimeType: 'video/webm'\r\n };\r\n\r\n if (config.type === 'audio') {\r\n if (getTracks(mediaStream, 'video').length && getTracks(mediaStream, 'audio').length) {\r\n var stream;\r\n if (!!navigator.mozGetUserMedia) {\r\n stream = new MediaStream();\r\n stream.addTrack(getTracks(mediaStream, 'audio')[0]);\r\n } else {\r\n // webkitMediaStream\r\n stream = new MediaStream(getTracks(mediaStream, 'audio'));\r\n }\r\n mediaStream = stream;\r\n }\r\n\r\n if (!config.mimeType || config.mimeType.toString().toLowerCase().indexOf('audio') === -1) {\r\n config.mimeType = isChrome ? 'audio/webm' : 'audio/ogg';\r\n }\r\n\r\n if (config.mimeType && config.mimeType.toString().toLowerCase() !== 'audio/ogg' && !!navigator.mozGetUserMedia) {\r\n // forcing better codecs on Firefox (via #166)\r\n config.mimeType = 'audio/ogg';\r\n }\r\n }\r\n\r\n var arrayOfBlobs = [];\r\n\r\n /**\r\n * This method returns array of blobs. Use only with \"timeSlice\". Its useful to preview recording anytime, without using the \"stop\" method.\r\n * @method\r\n * @memberof MediaStreamRecorder\r\n * @example\r\n * var arrayOfBlobs = recorder.getArrayOfBlobs();\r\n * @returns {Array} Returns array of recorded blobs.\r\n */\r\n this.getArrayOfBlobs = function() {\r\n return arrayOfBlobs;\r\n };\r\n\r\n /**\r\n * This method records MediaStream.\r\n * @method\r\n * @memberof MediaStreamRecorder\r\n * @example\r\n * recorder.record();\r\n */\r\n this.record = function() {\r\n // set defaults\r\n self.blob = null;\r\n self.clearRecordedData();\r\n self.timestamps = [];\r\n allStates = [];\r\n arrayOfBlobs = [];\r\n\r\n var recorderHints = config;\r\n\r\n if (!config.disableLogs) {\r\n console.log('Passing following config over MediaRecorder API.', recorderHints);\r\n }\r\n\r\n if (mediaRecorder) {\r\n // mandatory to make sure Firefox doesn't fails to record streams 3-4 times without reloading the page.\r\n mediaRecorder = null;\r\n }\r\n\r\n if (isChrome && !isMediaRecorderCompatible()) {\r\n // to support video-only recording on stable\r\n recorderHints = 'video/vp8';\r\n }\r\n\r\n if (typeof MediaRecorder.isTypeSupported === 'function' && recorderHints.mimeType) {\r\n if (!MediaRecorder.isTypeSupported(recorderHints.mimeType)) {\r\n if (!config.disableLogs) {\r\n console.warn('MediaRecorder API seems unable to record mimeType:', recorderHints.mimeType);\r\n }\r\n\r\n recorderHints.mimeType = config.type === 'audio' ? 'audio/webm' : 'video/webm';\r\n }\r\n }\r\n\r\n // using MediaRecorder API here\r\n try {\r\n mediaRecorder = new MediaRecorder(mediaStream, recorderHints);\r\n\r\n // reset\r\n config.mimeType = recorderHints.mimeType;\r\n } catch (e) {\r\n // chrome-based fallback\r\n mediaRecorder = new MediaRecorder(mediaStream);\r\n }\r\n\r\n // old hack?\r\n if (recorderHints.mimeType && !MediaRecorder.isTypeSupported && 'canRecordMimeType' in mediaRecorder && mediaRecorder.canRecordMimeType(recorderHints.mimeType) === false) {\r\n if (!config.disableLogs) {\r\n console.warn('MediaRecorder API seems unable to record mimeType:', recorderHints.mimeType);\r\n }\r\n }\r\n\r\n // Dispatching OnDataAvailable Handler\r\n mediaRecorder.ondataavailable = function(e) {\r\n if (e.data) {\r\n allStates.push('ondataavailable: ' + bytesToSize(e.data.size));\r\n }\r\n\r\n if (typeof config.timeSlice === 'number') {\r\n if (e.data && e.data.size) {\r\n arrayOfBlobs.push(e.data);\r\n updateTimeStamp();\r\n\r\n if (typeof config.ondataavailable === 'function') {\r\n // intervals based blobs\r\n var blob = config.getNativeBlob ? e.data : new Blob([e.data], {\r\n type: getMimeType(recorderHints)\r\n });\r\n config.ondataavailable(blob);\r\n }\r\n }\r\n return;\r\n }\r\n\r\n if (!e.data || !e.data.size || e.data.size < 100 || self.blob) {\r\n // make sure that stopRecording always getting fired\r\n // even if there is invalid data\r\n if (self.recordingCallback) {\r\n self.recordingCallback(new Blob([], {\r\n type: getMimeType(recorderHints)\r\n }));\r\n self.recordingCallback = null;\r\n }\r\n return;\r\n }\r\n\r\n self.blob = config.getNativeBlob ? e.data : new Blob([e.data], {\r\n type: getMimeType(recorderHints)\r\n });\r\n\r\n if (self.recordingCallback) {\r\n self.recordingCallback(self.blob);\r\n self.recordingCallback = null;\r\n }\r\n };\r\n\r\n mediaRecorder.onstart = function() {\r\n allStates.push('started');\r\n };\r\n\r\n mediaRecorder.onpause = function() {\r\n allStates.push('paused');\r\n };\r\n\r\n mediaRecorder.onresume = function() {\r\n allStates.push('resumed');\r\n };\r\n\r\n mediaRecorder.onstop = function() {\r\n allStates.push('stopped');\r\n };\r\n\r\n mediaRecorder.onerror = function(error) {\r\n if (!error) {\r\n return;\r\n }\r\n\r\n if (!error.name) {\r\n error.name = 'UnknownError';\r\n }\r\n\r\n allStates.push('error: ' + error);\r\n\r\n if (!config.disableLogs) {\r\n // via: https://w3c.github.io/mediacapture-record/MediaRecorder.html#exception-summary\r\n if (error.name.toString().toLowerCase().indexOf('invalidstate') !== -1) {\r\n console.error('The MediaRecorder is not in a state in which the proposed operation is allowed to be executed.', error);\r\n } else if (error.name.toString().toLowerCase().indexOf('notsupported') !== -1) {\r\n console.error('MIME type (', recorderHints.mimeType, ') is not supported.', error);\r\n } else if (error.name.toString().toLowerCase().indexOf('security') !== -1) {\r\n console.error('MediaRecorder security error', error);\r\n }\r\n\r\n // older code below\r\n else if (error.name === 'OutOfMemory') {\r\n console.error('The UA has exhaused the available memory. User agents SHOULD provide as much additional information as possible in the message attribute.', error);\r\n } else if (error.name === 'IllegalStreamModification') {\r\n console.error('A modification to the stream has occurred that makes it impossible to continue recording. An example would be the addition of a Track while recording is occurring. User agents SHOULD provide as much additional information as possible in the message attribute.', error);\r\n } else if (error.name === 'OtherRecordingError') {\r\n console.error('Used for an fatal error other than those listed above. User agents SHOULD provide as much additional information as possible in the message attribute.', error);\r\n } else if (error.name === 'GenericError') {\r\n console.error('The UA cannot provide the codec or recording option that has been requested.', error);\r\n } else {\r\n console.error('MediaRecorder Error', error);\r\n }\r\n }\r\n\r\n (function(looper) {\r\n if (!self.manuallyStopped && mediaRecorder && mediaRecorder.state === 'inactive') {\r\n delete config.timeslice;\r\n\r\n // 10 minutes, enough?\r\n mediaRecorder.start(10 * 60 * 1000);\r\n return;\r\n }\r\n\r\n setTimeout(looper, 1000);\r\n })();\r\n\r\n if (mediaRecorder.state !== 'inactive' && mediaRecorder.state !== 'stopped') {\r\n mediaRecorder.stop();\r\n }\r\n };\r\n\r\n if (typeof config.timeSlice === 'number') {\r\n updateTimeStamp();\r\n mediaRecorder.start(config.timeSlice);\r\n } else {\r\n // default is 60 minutes; enough?\r\n // use config => {timeSlice: 1000} otherwise\r\n\r\n mediaRecorder.start(3.6e+6);\r\n }\r\n\r\n if (config.initCallback) {\r\n config.initCallback(); // old code\r\n }\r\n };\r\n\r\n /**\r\n * @property {Array} timestamps - Array of time stamps\r\n * @memberof MediaStreamRecorder\r\n * @example\r\n * console.log(recorder.timestamps);\r\n */\r\n this.timestamps = [];\r\n\r\n function updateTimeStamp() {\r\n self.timestamps.push(new Date().getTime());\r\n\r\n if (typeof config.onTimeStamp === 'function') {\r\n config.onTimeStamp(self.timestamps[self.timestamps.length - 1], self.timestamps);\r\n }\r\n }\r\n\r\n function getMimeType(secondObject) {\r\n if (mediaRecorder && mediaRecorder.mimeType) {\r\n return mediaRecorder.mimeType;\r\n }\r\n\r\n return secondObject.mimeType || 'video/webm';\r\n }\r\n\r\n /**\r\n * This method stops recording MediaStream.\r\n * @param {function} callback - Callback function, that is used to pass recorded blob back to the callee.\r\n * @method\r\n * @memberof MediaStreamRecorder\r\n * @example\r\n * recorder.stop(function(blob) {\r\n * video.src = URL.createObjectURL(blob);\r\n * });\r\n */\r\n this.stop = function(callback) {\r\n callback = callback || function() {};\r\n\r\n self.manuallyStopped = true; // used inside the mediaRecorder.onerror\r\n\r\n if (!mediaRecorder) {\r\n return;\r\n }\r\n\r\n this.recordingCallback = callback;\r\n\r\n if (mediaRecorder.state === 'recording') {\r\n mediaRecorder.stop();\r\n }\r\n\r\n if (typeof config.timeSlice === 'number') {\r\n setTimeout(function() {\r\n self.blob = new Blob(arrayOfBlobs, {\r\n type: getMimeType(config)\r\n });\r\n\r\n self.recordingCallback(self.blob);\r\n }, 100);\r\n }\r\n };\r\n\r\n /**\r\n * This method pauses the recording process.\r\n * @method\r\n * @memberof MediaStreamRecorder\r\n * @example\r\n * recorder.pause();\r\n */\r\n this.pause = function() {\r\n if (!mediaRecorder) {\r\n return;\r\n }\r\n\r\n if (mediaRecorder.state === 'recording') {\r\n mediaRecorder.pause();\r\n }\r\n };\r\n\r\n /**\r\n * This method resumes the recording process.\r\n * @method\r\n * @memberof MediaStreamRecorder\r\n * @example\r\n * recorder.resume();\r\n */\r\n this.resume = function() {\r\n if (!mediaRecorder) {\r\n return;\r\n }\r\n\r\n if (mediaRecorder.state === 'paused') {\r\n mediaRecorder.resume();\r\n }\r\n };\r\n\r\n /**\r\n * This method resets currently recorded data.\r\n * @method\r\n * @memberof MediaStreamRecorder\r\n * @example\r\n * recorder.clearRecordedData();\r\n */\r\n this.clearRecordedData = function() {\r\n if (mediaRecorder && mediaRecorder.state === 'recording') {\r\n self.stop(clearRecordedDataCB);\r\n }\r\n\r\n clearRecordedDataCB();\r\n };\r\n\r\n function clearRecordedDataCB() {\r\n arrayOfBlobs = [];\r\n mediaRecorder = null;\r\n self.timestamps = [];\r\n }\r\n\r\n // Reference to \"MediaRecorder\" object\r\n var mediaRecorder;\r\n\r\n /**\r\n * Access to native MediaRecorder API\r\n * @method\r\n * @memberof MediaStreamRecorder\r\n * @instance\r\n * @example\r\n * var internal = recorder.getInternalRecorder();\r\n * internal.ondataavailable = function() {}; // override\r\n * internal.stream, internal.onpause, internal.onstop, etc.\r\n * @returns {Object} Returns internal recording object.\r\n */\r\n this.getInternalRecorder = function() {\r\n return mediaRecorder;\r\n };\r\n\r\n function isMediaStreamActive() {\r\n if ('active' in mediaStream) {\r\n if (!mediaStream.active) {\r\n return false;\r\n }\r\n } else if ('ended' in mediaStream) { // old hack\r\n if (mediaStream.ended) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * @property {Blob} blob - Recorded data as \"Blob\" object.\r\n * @memberof MediaStreamRecorder\r\n * @example\r\n * recorder.stop(function() {\r\n * var blob = recorder.blob;\r\n * });\r\n */\r\n this.blob = null;\r\n\r\n\r\n /**\r\n * Get MediaRecorder readonly state.\r\n * @method\r\n * @memberof MediaStreamRecorder\r\n * @example\r\n * var state = recorder.getState();\r\n * @returns {String} Returns recording state.\r\n */\r\n this.getState = function() {\r\n if (!mediaRecorder) {\r\n return 'inactive';\r\n }\r\n\r\n return mediaRecorder.state || 'inactive';\r\n };\r\n\r\n // list of all recording states\r\n var allStates = [];\r\n\r\n /**\r\n * Get MediaRecorder all recording states.\r\n * @method\r\n * @memberof MediaStreamRecorder\r\n * @example\r\n * var state = recorder.getAllStates();\r\n * @returns {Array} Returns all recording states\r\n */\r\n this.getAllStates = function() {\r\n return allStates;\r\n };\r\n\r\n // if any Track within the MediaStream is muted or not enabled at any time, \r\n // the browser will only record black frames \r\n // or silence since that is the content produced by the Track\r\n // so we need to stopRecording as soon as any single track ends.\r\n if (typeof config.checkForInactiveTracks === 'undefined') {\r\n config.checkForInactiveTracks = false; // disable to minimize CPU usage\r\n }\r\n\r\n var self = this;\r\n\r\n // this method checks if media stream is stopped\r\n // or if any track is ended.\r\n (function looper() {\r\n if (!mediaRecorder || config.checkForInactiveTracks === false) {\r\n return;\r\n }\r\n\r\n if (isMediaStreamActive() === false) {\r\n if (!config.disableLogs) {\r\n console.log('MediaStream seems stopped.');\r\n }\r\n self.stop();\r\n return;\r\n }\r\n\r\n setTimeout(looper, 1000); // check every second\r\n })();\r\n\r\n // for debugging\r\n this.name = 'MediaStreamRecorder';\r\n this.toString = function() {\r\n return this.name;\r\n };\r\n}\r\n\r\nif (typeof RecordRTC !== 'undefined') {\r\n RecordRTC.MediaStreamRecorder = MediaStreamRecorder;\r\n}\r\n\r\n// source code from: http://typedarray.org/wp-content/projects/WebAudioRecorder/script.js\r\n// https://github.com/mattdiamond/Recorderjs#license-mit\r\n// ______________________\r\n// StereoAudioRecorder.js\r\n\r\n/**\r\n * StereoAudioRecorder is a standalone class used by {@link RecordRTC} to bring \"stereo\" audio-recording in chrome.\r\n * @summary JavaScript standalone object for stereo audio recording.\r\n * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT}\r\n * @author {@link https://MuazKhan.com|Muaz Khan}\r\n * @typedef StereoAudioRecorder\r\n * @class\r\n * @example\r\n * var recorder = new StereoAudioRecorder(MediaStream, {\r\n * sampleRate: 44100,\r\n * bufferSize: 4096\r\n * });\r\n * recorder.record();\r\n * recorder.stop(function(blob) {\r\n * video.src = URL.createObjectURL(blob);\r\n * });\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n * @param {MediaStream} mediaStream - MediaStream object fetched using getUserMedia API or generated using captureStreamUntilEnded or WebAudio API.\r\n * @param {object} config - {sampleRate: 44100, bufferSize: 4096, numberOfAudioChannels: 1, etc.}\r\n */\r\n\r\nfunction StereoAudioRecorder(mediaStream, config) {\r\n if (!getTracks(mediaStream, 'audio').length) {\r\n throw 'Your stream has no audio tracks.';\r\n }\r\n\r\n config = config || {};\r\n\r\n var self = this;\r\n\r\n // variables\r\n var leftchannel = [];\r\n var rightchannel = [];\r\n var recording = false;\r\n var recordingLength = 0;\r\n var jsAudioNode;\r\n\r\n var numberOfAudioChannels = 2;\r\n\r\n /**\r\n * Set sample rates such as 8K or 16K. Reference: http://stackoverflow.com/a/28977136/552182\r\n * @property {number} desiredSampRate - Desired Bits per sample * 1000\r\n * @memberof StereoAudioRecorder\r\n * @instance\r\n * @example\r\n * var recorder = StereoAudioRecorder(mediaStream, {\r\n * desiredSampRate: 16 * 1000 // bits-per-sample * 1000\r\n * });\r\n */\r\n var desiredSampRate = config.desiredSampRate;\r\n\r\n // backward compatibility\r\n if (config.leftChannel === true) {\r\n numberOfAudioChannels = 1;\r\n }\r\n\r\n if (config.numberOfAudioChannels === 1) {\r\n numberOfAudioChannels = 1;\r\n }\r\n\r\n if (!numberOfAudioChannels || numberOfAudioChannels < 1) {\r\n numberOfAudioChannels = 2;\r\n }\r\n\r\n if (!config.disableLogs) {\r\n console.log('StereoAudioRecorder is set to record number of channels: ' + numberOfAudioChannels);\r\n }\r\n\r\n // if any Track within the MediaStream is muted or not enabled at any time, \r\n // the browser will only record black frames \r\n // or silence since that is the content produced by the Track\r\n // so we need to stopRecording as soon as any single track ends.\r\n if (typeof config.checkForInactiveTracks === 'undefined') {\r\n config.checkForInactiveTracks = true;\r\n }\r\n\r\n function isMediaStreamActive() {\r\n if (config.checkForInactiveTracks === false) {\r\n // always return \"true\"\r\n return true;\r\n }\r\n\r\n if ('active' in mediaStream) {\r\n if (!mediaStream.active) {\r\n return false;\r\n }\r\n } else if ('ended' in mediaStream) { // old hack\r\n if (mediaStream.ended) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * This method records MediaStream.\r\n * @method\r\n * @memberof StereoAudioRecorder\r\n * @example\r\n * recorder.record();\r\n */\r\n this.record = function() {\r\n if (isMediaStreamActive() === false) {\r\n throw 'Please make sure MediaStream is active.';\r\n }\r\n\r\n resetVariables();\r\n\r\n isAudioProcessStarted = isPaused = false;\r\n recording = true;\r\n\r\n if (typeof config.timeSlice !== 'undefined') {\r\n looper();\r\n }\r\n };\r\n\r\n function mergeLeftRightBuffers(config, callback) {\r\n function mergeAudioBuffers(config, cb) {\r\n var numberOfAudioChannels = config.numberOfAudioChannels;\r\n\r\n // todo: \"slice(0)\" --- is it causes loop? Should be removed?\r\n var leftBuffers = config.leftBuffers.slice(0);\r\n var rightBuffers = config.rightBuffers.slice(0);\r\n var sampleRate = config.sampleRate;\r\n var internalInterleavedLength = config.internalInterleavedLength;\r\n var desiredSampRate = config.desiredSampRate;\r\n\r\n if (numberOfAudioChannels === 2) {\r\n leftBuffers = mergeBuffers(leftBuffers, internalInterleavedLength);\r\n rightBuffers = mergeBuffers(rightBuffers, internalInterleavedLength);\r\n\r\n if (desiredSampRate) {\r\n leftBuffers = interpolateArray(leftBuffers, desiredSampRate, sampleRate);\r\n rightBuffers = interpolateArray(rightBuffers, desiredSampRate, sampleRate);\r\n }\r\n }\r\n\r\n if (numberOfAudioChannels === 1) {\r\n leftBuffers = mergeBuffers(leftBuffers, internalInterleavedLength);\r\n\r\n if (desiredSampRate) {\r\n leftBuffers = interpolateArray(leftBuffers, desiredSampRate, sampleRate);\r\n }\r\n }\r\n\r\n // set sample rate as desired sample rate\r\n if (desiredSampRate) {\r\n sampleRate = desiredSampRate;\r\n }\r\n\r\n // for changing the sampling rate, reference:\r\n // http://stackoverflow.com/a/28977136/552182\r\n function interpolateArray(data, newSampleRate, oldSampleRate) {\r\n var fitCount = Math.round(data.length * (newSampleRate / oldSampleRate));\r\n var newData = [];\r\n var springFactor = Number((data.length - 1) / (fitCount - 1));\r\n newData[0] = data[0];\r\n for (var i = 1; i < fitCount - 1; i++) {\r\n var tmp = i * springFactor;\r\n var before = Number(Math.floor(tmp)).toFixed();\r\n var after = Number(Math.ceil(tmp)).toFixed();\r\n var atPoint = tmp - before;\r\n newData[i] = linearInterpolate(data[before], data[after], atPoint);\r\n }\r\n newData[fitCount - 1] = data[data.length - 1];\r\n return newData;\r\n }\r\n\r\n function linearInterpolate(before, after, atPoint) {\r\n return before + (after - before) * atPoint;\r\n }\r\n\r\n function mergeBuffers(channelBuffer, rLength) {\r\n var result = new Float64Array(rLength);\r\n var offset = 0;\r\n var lng = channelBuffer.length;\r\n\r\n for (var i = 0; i < lng; i++) {\r\n var buffer = channelBuffer[i];\r\n result.set(buffer, offset);\r\n offset += buffer.length;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n function interleave(leftChannel, rightChannel) {\r\n var length = leftChannel.length + rightChannel.length;\r\n\r\n var result = new Float64Array(length);\r\n\r\n var inputIndex = 0;\r\n\r\n for (var index = 0; index < length;) {\r\n result[index++] = leftChannel[inputIndex];\r\n result[index++] = rightChannel[inputIndex];\r\n inputIndex++;\r\n }\r\n return result;\r\n }\r\n\r\n function writeUTFBytes(view, offset, string) {\r\n var lng = string.length;\r\n for (var i = 0; i < lng; i++) {\r\n view.setUint8(offset + i, string.charCodeAt(i));\r\n }\r\n }\r\n\r\n // interleave both channels together\r\n var interleaved;\r\n\r\n if (numberOfAudioChannels === 2) {\r\n interleaved = interleave(leftBuffers, rightBuffers);\r\n }\r\n\r\n if (numberOfAudioChannels === 1) {\r\n interleaved = leftBuffers;\r\n }\r\n\r\n var interleavedLength = interleaved.length;\r\n\r\n // create wav file\r\n var resultingBufferLength = 44 + interleavedLength * 2;\r\n\r\n var buffer = new ArrayBuffer(resultingBufferLength);\r\n\r\n var view = new DataView(buffer);\r\n\r\n // RIFF chunk descriptor/identifier \r\n writeUTFBytes(view, 0, 'RIFF');\r\n\r\n // RIFF chunk length\r\n // changed \"44\" to \"36\" via #401\r\n view.setUint32(4, 36 + interleavedLength * 2, true);\r\n\r\n // RIFF type \r\n writeUTFBytes(view, 8, 'WAVE');\r\n\r\n // format chunk identifier \r\n // FMT sub-chunk\r\n writeUTFBytes(view, 12, 'fmt ');\r\n\r\n // format chunk length \r\n view.setUint32(16, 16, true);\r\n\r\n // sample format (raw)\r\n view.setUint16(20, 1, true);\r\n\r\n // stereo (2 channels)\r\n view.setUint16(22, numberOfAudioChannels, true);\r\n\r\n // sample rate \r\n view.setUint32(24, sampleRate, true);\r\n\r\n // byte rate (sample rate * block align)\r\n view.setUint32(28, sampleRate * numberOfAudioChannels * 2, true);\r\n\r\n // block align (channel count * bytes per sample) \r\n view.setUint16(32, numberOfAudioChannels * 2, true);\r\n\r\n // bits per sample \r\n view.setUint16(34, 16, true);\r\n\r\n // data sub-chunk\r\n // data chunk identifier \r\n writeUTFBytes(view, 36, 'data');\r\n\r\n // data chunk length \r\n view.setUint32(40, interleavedLength * 2, true);\r\n\r\n // write the PCM samples\r\n var lng = interleavedLength;\r\n var index = 44;\r\n var volume = 1;\r\n for (var i = 0; i < lng; i++) {\r\n view.setInt16(index, interleaved[i] * (0x7FFF * volume), true);\r\n index += 2;\r\n }\r\n\r\n if (cb) {\r\n return cb({\r\n buffer: buffer,\r\n view: view\r\n });\r\n }\r\n\r\n postMessage({\r\n buffer: buffer,\r\n view: view\r\n });\r\n }\r\n\r\n if (config.noWorker) {\r\n mergeAudioBuffers(config, function(data) {\r\n callback(data.buffer, data.view);\r\n });\r\n return;\r\n }\r\n\r\n\r\n var webWorker = processInWebWorker(mergeAudioBuffers);\r\n\r\n webWorker.onmessage = function(event) {\r\n callback(event.data.buffer, event.data.view);\r\n\r\n // release memory\r\n URL.revokeObjectURL(webWorker.workerURL);\r\n\r\n // kill webworker (or Chrome will kill your page after ~25 calls)\r\n webWorker.terminate();\r\n };\r\n\r\n webWorker.postMessage(config);\r\n }\r\n\r\n function processInWebWorker(_function) {\r\n var workerURL = URL.createObjectURL(new Blob([_function.toString(),\r\n ';this.onmessage = function (eee) {' + _function.name + '(eee.data);}'\r\n ], {\r\n type: 'application/javascript'\r\n }));\r\n\r\n var worker = new Worker(workerURL);\r\n worker.workerURL = workerURL;\r\n return worker;\r\n }\r\n\r\n /**\r\n * This method stops recording MediaStream.\r\n * @param {function} callback - Callback function, that is used to pass recorded blob back to the callee.\r\n * @method\r\n * @memberof StereoAudioRecorder\r\n * @example\r\n * recorder.stop(function(blob) {\r\n * video.src = URL.createObjectURL(blob);\r\n * });\r\n */\r\n this.stop = function(callback) {\r\n callback = callback || function() {};\r\n\r\n // stop recording\r\n recording = false;\r\n\r\n mergeLeftRightBuffers({\r\n desiredSampRate: desiredSampRate,\r\n sampleRate: sampleRate,\r\n numberOfAudioChannels: numberOfAudioChannels,\r\n internalInterleavedLength: recordingLength,\r\n leftBuffers: leftchannel,\r\n rightBuffers: numberOfAudioChannels === 1 ? [] : rightchannel,\r\n noWorker: config.noWorker\r\n }, function(buffer, view) {\r\n /**\r\n * @property {Blob} blob - The recorded blob object.\r\n * @memberof StereoAudioRecorder\r\n * @example\r\n * recorder.stop(function(){\r\n * var blob = recorder.blob;\r\n * });\r\n */\r\n self.blob = new Blob([view], {\r\n type: 'audio/wav'\r\n });\r\n\r\n /**\r\n * @property {ArrayBuffer} buffer - The recorded buffer object.\r\n * @memberof StereoAudioRecorder\r\n * @example\r\n * recorder.stop(function(){\r\n * var buffer = recorder.buffer;\r\n * });\r\n */\r\n self.buffer = new ArrayBuffer(view.buffer.byteLength);\r\n\r\n /**\r\n * @property {DataView} view - The recorded data-view object.\r\n * @memberof StereoAudioRecorder\r\n * @example\r\n * recorder.stop(function(){\r\n * var view = recorder.view;\r\n * });\r\n */\r\n self.view = view;\r\n\r\n self.sampleRate = desiredSampRate || sampleRate;\r\n self.bufferSize = bufferSize;\r\n\r\n // recorded audio length\r\n self.length = recordingLength;\r\n\r\n isAudioProcessStarted = false;\r\n\r\n if (callback) {\r\n callback(self.blob);\r\n }\r\n });\r\n };\r\n\r\n if (typeof RecordRTC.Storage === 'undefined') {\r\n RecordRTC.Storage = {\r\n AudioContextConstructor: null,\r\n AudioContext: window.AudioContext || window.webkitAudioContext\r\n };\r\n }\r\n\r\n if (!RecordRTC.Storage.AudioContextConstructor || RecordRTC.Storage.AudioContextConstructor.state === 'closed') {\r\n RecordRTC.Storage.AudioContextConstructor = new RecordRTC.Storage.AudioContext();\r\n }\r\n\r\n var context = RecordRTC.Storage.AudioContextConstructor;\r\n\r\n // creates an audio node from the microphone incoming stream\r\n var audioInput = context.createMediaStreamSource(mediaStream);\r\n\r\n var legalBufferValues = [0, 256, 512, 1024, 2048, 4096, 8192, 16384];\r\n\r\n /**\r\n * From the spec: This value controls how frequently the audioprocess event is\r\n * dispatched and how many sample-frames need to be processed each call.\r\n * Lower values for buffer size will result in a lower (better) latency.\r\n * Higher values will be necessary to avoid audio breakup and glitches\r\n * The size of the buffer (in sample-frames) which needs to\r\n * be processed each time onprocessaudio is called.\r\n * Legal values are (256, 512, 1024, 2048, 4096, 8192, 16384).\r\n * @property {number} bufferSize - Buffer-size for how frequently the audioprocess event is dispatched.\r\n * @memberof StereoAudioRecorder\r\n * @example\r\n * recorder = new StereoAudioRecorder(mediaStream, {\r\n * bufferSize: 4096\r\n * });\r\n */\r\n\r\n // \"0\" means, let chrome decide the most accurate buffer-size for current platform.\r\n var bufferSize = typeof config.bufferSize === 'undefined' ? 4096 : config.bufferSize;\r\n\r\n if (legalBufferValues.indexOf(bufferSize) === -1) {\r\n if (!config.disableLogs) {\r\n console.log('Legal values for buffer-size are ' + JSON.stringify(legalBufferValues, null, '\\t'));\r\n }\r\n }\r\n\r\n if (context.createJavaScriptNode) {\r\n jsAudioNode = context.createJavaScriptNode(bufferSize, numberOfAudioChannels, numberOfAudioChannels);\r\n } else if (context.createScriptProcessor) {\r\n jsAudioNode = context.createScriptProcessor(bufferSize, numberOfAudioChannels, numberOfAudioChannels);\r\n } else {\r\n throw 'WebAudio API has no support on this browser.';\r\n }\r\n\r\n // connect the stream to the script processor\r\n audioInput.connect(jsAudioNode);\r\n\r\n if (!config.bufferSize) {\r\n bufferSize = jsAudioNode.bufferSize; // device buffer-size\r\n }\r\n\r\n /**\r\n * The sample rate (in sample-frames per second) at which the\r\n * AudioContext handles audio. It is assumed that all AudioNodes\r\n * in the context run at this rate. In making this assumption,\r\n * sample-rate converters or \"varispeed\" processors are not supported\r\n * in real-time processing.\r\n * The sampleRate parameter describes the sample-rate of the\r\n * linear PCM audio data in the buffer in sample-frames per second.\r\n * An implementation must support sample-rates in at least\r\n * the range 22050 to 96000.\r\n * @property {number} sampleRate - Buffer-size for how frequently the audioprocess event is dispatched.\r\n * @memberof StereoAudioRecorder\r\n * @example\r\n * recorder = new StereoAudioRecorder(mediaStream, {\r\n * sampleRate: 44100\r\n * });\r\n */\r\n var sampleRate = typeof config.sampleRate !== 'undefined' ? config.sampleRate : context.sampleRate || 44100;\r\n\r\n if (sampleRate < 22050 || sampleRate > 96000) {\r\n // Ref: http://stackoverflow.com/a/26303918/552182\r\n if (!config.disableLogs) {\r\n console.log('sample-rate must be under range 22050 and 96000.');\r\n }\r\n }\r\n\r\n if (!config.disableLogs) {\r\n if (config.desiredSampRate) {\r\n console.log('Desired sample-rate: ' + config.desiredSampRate);\r\n }\r\n }\r\n\r\n var isPaused = false;\r\n /**\r\n * This method pauses the recording process.\r\n * @method\r\n * @memberof StereoAudioRecorder\r\n * @example\r\n * recorder.pause();\r\n */\r\n this.pause = function() {\r\n isPaused = true;\r\n };\r\n\r\n /**\r\n * This method resumes the recording process.\r\n * @method\r\n * @memberof StereoAudioRecorder\r\n * @example\r\n * recorder.resume();\r\n */\r\n this.resume = function() {\r\n if (isMediaStreamActive() === false) {\r\n throw 'Please make sure MediaStream is active.';\r\n }\r\n\r\n if (!recording) {\r\n if (!config.disableLogs) {\r\n console.log('Seems recording has been restarted.');\r\n }\r\n this.record();\r\n return;\r\n }\r\n\r\n isPaused = false;\r\n };\r\n\r\n /**\r\n * This method resets currently recorded data.\r\n * @method\r\n * @memberof StereoAudioRecorder\r\n * @example\r\n * recorder.clearRecordedData();\r\n */\r\n this.clearRecordedData = function() {\r\n config.checkForInactiveTracks = false;\r\n\r\n if (recording) {\r\n this.stop(clearRecordedDataCB);\r\n }\r\n\r\n clearRecordedDataCB();\r\n };\r\n\r\n function resetVariables() {\r\n leftchannel = [];\r\n rightchannel = [];\r\n recordingLength = 0;\r\n isAudioProcessStarted = false;\r\n recording = false;\r\n isPaused = false;\r\n context = null;\r\n\r\n self.leftchannel = leftchannel;\r\n self.rightchannel = rightchannel;\r\n self.numberOfAudioChannels = numberOfAudioChannels;\r\n self.desiredSampRate = desiredSampRate;\r\n self.sampleRate = sampleRate;\r\n self.recordingLength = recordingLength;\r\n\r\n intervalsBasedBuffers = {\r\n left: [],\r\n right: [],\r\n recordingLength: 0\r\n };\r\n }\r\n\r\n function clearRecordedDataCB() {\r\n if (jsAudioNode) {\r\n jsAudioNode.onaudioprocess = null;\r\n jsAudioNode.disconnect();\r\n jsAudioNode = null;\r\n }\r\n\r\n if (audioInput) {\r\n audioInput.disconnect();\r\n audioInput = null;\r\n }\r\n\r\n resetVariables();\r\n }\r\n\r\n // for debugging\r\n this.name = 'StereoAudioRecorder';\r\n this.toString = function() {\r\n return this.name;\r\n };\r\n\r\n var isAudioProcessStarted = false;\r\n\r\n function onAudioProcessDataAvailable(e) {\r\n if (isPaused) {\r\n return;\r\n }\r\n\r\n if (isMediaStreamActive() === false) {\r\n if (!config.disableLogs) {\r\n console.log('MediaStream seems stopped.');\r\n }\r\n jsAudioNode.disconnect();\r\n recording = false;\r\n }\r\n\r\n if (!recording) {\r\n if (audioInput) {\r\n audioInput.disconnect();\r\n audioInput = null;\r\n }\r\n return;\r\n }\r\n\r\n /**\r\n * This method is called on \"onaudioprocess\" event's first invocation.\r\n * @method {function} onAudioProcessStarted\r\n * @memberof StereoAudioRecorder\r\n * @example\r\n * recorder.onAudioProcessStarted: function() { };\r\n */\r\n if (!isAudioProcessStarted) {\r\n isAudioProcessStarted = true;\r\n if (config.onAudioProcessStarted) {\r\n config.onAudioProcessStarted();\r\n }\r\n\r\n if (config.initCallback) {\r\n config.initCallback();\r\n }\r\n }\r\n\r\n var left = e.inputBuffer.getChannelData(0);\r\n\r\n // we clone the samples\r\n var chLeft = new Float32Array(left);\r\n leftchannel.push(chLeft);\r\n\r\n if (numberOfAudioChannels === 2) {\r\n var right = e.inputBuffer.getChannelData(1);\r\n var chRight = new Float32Array(right);\r\n rightchannel.push(chRight);\r\n }\r\n\r\n recordingLength += bufferSize;\r\n\r\n // export raw PCM\r\n self.recordingLength = recordingLength;\r\n\r\n if (typeof config.timeSlice !== 'undefined') {\r\n intervalsBasedBuffers.recordingLength += bufferSize;\r\n intervalsBasedBuffers.left.push(chLeft);\r\n\r\n if (numberOfAudioChannels === 2) {\r\n intervalsBasedBuffers.right.push(chRight);\r\n }\r\n }\r\n }\r\n\r\n jsAudioNode.onaudioprocess = onAudioProcessDataAvailable;\r\n\r\n // to prevent self audio to be connected with speakers\r\n if (context.createMediaStreamDestination) {\r\n jsAudioNode.connect(context.createMediaStreamDestination());\r\n } else {\r\n jsAudioNode.connect(context.destination);\r\n }\r\n\r\n // export raw PCM\r\n this.leftchannel = leftchannel;\r\n this.rightchannel = rightchannel;\r\n this.numberOfAudioChannels = numberOfAudioChannels;\r\n this.desiredSampRate = desiredSampRate;\r\n this.sampleRate = sampleRate;\r\n self.recordingLength = recordingLength;\r\n\r\n // helper for intervals based blobs\r\n var intervalsBasedBuffers = {\r\n left: [],\r\n right: [],\r\n recordingLength: 0\r\n };\r\n\r\n // this looper is used to support intervals based blobs (via timeSlice+ondataavailable)\r\n function looper() {\r\n if (!recording || typeof config.ondataavailable !== 'function' || typeof config.timeSlice === 'undefined') {\r\n return;\r\n }\r\n\r\n if (intervalsBasedBuffers.left.length) {\r\n mergeLeftRightBuffers({\r\n desiredSampRate: desiredSampRate,\r\n sampleRate: sampleRate,\r\n numberOfAudioChannels: numberOfAudioChannels,\r\n internalInterleavedLength: intervalsBasedBuffers.recordingLength,\r\n leftBuffers: intervalsBasedBuffers.left,\r\n rightBuffers: numberOfAudioChannels === 1 ? [] : intervalsBasedBuffers.right\r\n }, function(buffer, view) {\r\n var blob = new Blob([view], {\r\n type: 'audio/wav'\r\n });\r\n config.ondataavailable(blob);\r\n\r\n setTimeout(looper, config.timeSlice);\r\n });\r\n\r\n intervalsBasedBuffers = {\r\n left: [],\r\n right: [],\r\n recordingLength: 0\r\n };\r\n } else {\r\n setTimeout(looper, config.timeSlice);\r\n }\r\n }\r\n}\r\n\r\nif (typeof RecordRTC !== 'undefined') {\r\n RecordRTC.StereoAudioRecorder = StereoAudioRecorder;\r\n}\r\n\r\n// _________________\r\n// CanvasRecorder.js\r\n\r\n/**\r\n * CanvasRecorder is a standalone class used by {@link RecordRTC} to bring HTML5-Canvas recording into video WebM. It uses HTML2Canvas library and runs top over {@link Whammy}.\r\n * @summary HTML2Canvas recording into video WebM.\r\n * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT}\r\n * @author {@link https://MuazKhan.com|Muaz Khan}\r\n * @typedef CanvasRecorder\r\n * @class\r\n * @example\r\n * var recorder = new CanvasRecorder(htmlElement, { disableLogs: true, useWhammyRecorder: true });\r\n * recorder.record();\r\n * recorder.stop(function(blob) {\r\n * video.src = URL.createObjectURL(blob);\r\n * });\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n * @param {HTMLElement} htmlElement - querySelector/getElementById/getElementsByTagName[0]/etc.\r\n * @param {object} config - {disableLogs:true, initCallback: function}\r\n */\r\n\r\nfunction CanvasRecorder(htmlElement, config) {\r\n if (typeof html2canvas === 'undefined') {\r\n throw 'Please link: https://www.webrtc-experiment.com/screenshot.js';\r\n }\r\n\r\n config = config || {};\r\n if (!config.frameInterval) {\r\n config.frameInterval = 10;\r\n }\r\n\r\n // via DetectRTC.js\r\n var isCanvasSupportsStreamCapturing = false;\r\n ['captureStream', 'mozCaptureStream', 'webkitCaptureStream'].forEach(function(item) {\r\n if (item in document.createElement('canvas')) {\r\n isCanvasSupportsStreamCapturing = true;\r\n }\r\n });\r\n\r\n var _isChrome = (!!window.webkitRTCPeerConnection || !!window.webkitGetUserMedia) && !!window.chrome;\r\n\r\n var chromeVersion = 50;\r\n var matchArray = navigator.userAgent.match(/Chrom(e|ium)\\/([0-9]+)\\./);\r\n if (_isChrome && matchArray && matchArray[2]) {\r\n chromeVersion = parseInt(matchArray[2], 10);\r\n }\r\n\r\n if (_isChrome && chromeVersion < 52) {\r\n isCanvasSupportsStreamCapturing = false;\r\n }\r\n\r\n if (config.useWhammyRecorder) {\r\n isCanvasSupportsStreamCapturing = false;\r\n }\r\n\r\n var globalCanvas, mediaStreamRecorder;\r\n\r\n if (isCanvasSupportsStreamCapturing) {\r\n if (!config.disableLogs) {\r\n console.log('Your browser supports both MediRecorder API and canvas.captureStream!');\r\n }\r\n\r\n if (htmlElement instanceof HTMLCanvasElement) {\r\n globalCanvas = htmlElement;\r\n } else if (htmlElement instanceof CanvasRenderingContext2D) {\r\n globalCanvas = htmlElement.canvas;\r\n } else {\r\n throw 'Please pass either HTMLCanvasElement or CanvasRenderingContext2D.';\r\n }\r\n } else if (!!navigator.mozGetUserMedia) {\r\n if (!config.disableLogs) {\r\n console.error('Canvas recording is NOT supported in Firefox.');\r\n }\r\n }\r\n\r\n var isRecording;\r\n\r\n /**\r\n * This method records Canvas.\r\n * @method\r\n * @memberof CanvasRecorder\r\n * @example\r\n * recorder.record();\r\n */\r\n this.record = function() {\r\n isRecording = true;\r\n\r\n if (isCanvasSupportsStreamCapturing && !config.useWhammyRecorder) {\r\n // CanvasCaptureMediaStream\r\n var canvasMediaStream;\r\n if ('captureStream' in globalCanvas) {\r\n canvasMediaStream = globalCanvas.captureStream(25); // 25 FPS\r\n } else if ('mozCaptureStream' in globalCanvas) {\r\n canvasMediaStream = globalCanvas.mozCaptureStream(25);\r\n } else if ('webkitCaptureStream' in globalCanvas) {\r\n canvasMediaStream = globalCanvas.webkitCaptureStream(25);\r\n }\r\n\r\n try {\r\n var mdStream = new MediaStream();\r\n mdStream.addTrack(getTracks(canvasMediaStream, 'video')[0]);\r\n canvasMediaStream = mdStream;\r\n } catch (e) {}\r\n\r\n if (!canvasMediaStream) {\r\n throw 'captureStream API are NOT available.';\r\n }\r\n\r\n // Note: Jan 18, 2016 status is that, \r\n // Firefox MediaRecorder API can't record CanvasCaptureMediaStream object.\r\n mediaStreamRecorder = new MediaStreamRecorder(canvasMediaStream, {\r\n mimeType: config.mimeType || 'video/webm'\r\n });\r\n mediaStreamRecorder.record();\r\n } else {\r\n whammy.frames = [];\r\n lastTime = new Date().getTime();\r\n drawCanvasFrame();\r\n }\r\n\r\n if (config.initCallback) {\r\n config.initCallback();\r\n }\r\n };\r\n\r\n this.getWebPImages = function(callback) {\r\n if (htmlElement.nodeName.toLowerCase() !== 'canvas') {\r\n callback();\r\n return;\r\n }\r\n\r\n var framesLength = whammy.frames.length;\r\n whammy.frames.forEach(function(frame, idx) {\r\n var framesRemaining = framesLength - idx;\r\n if (!config.disableLogs) {\r\n console.log(framesRemaining + '/' + framesLength + ' frames remaining');\r\n }\r\n\r\n if (config.onEncodingCallback) {\r\n config.onEncodingCallback(framesRemaining, framesLength);\r\n }\r\n\r\n var webp = frame.image.toDataURL('image/webp', 1);\r\n whammy.frames[idx].image = webp;\r\n });\r\n\r\n if (!config.disableLogs) {\r\n console.log('Generating WebM');\r\n }\r\n\r\n callback();\r\n };\r\n\r\n /**\r\n * This method stops recording Canvas.\r\n * @param {function} callback - Callback function, that is used to pass recorded blob back to the callee.\r\n * @method\r\n * @memberof CanvasRecorder\r\n * @example\r\n * recorder.stop(function(blob) {\r\n * video.src = URL.createObjectURL(blob);\r\n * });\r\n */\r\n this.stop = function(callback) {\r\n isRecording = false;\r\n\r\n var that = this;\r\n\r\n if (isCanvasSupportsStreamCapturing && mediaStreamRecorder) {\r\n mediaStreamRecorder.stop(callback);\r\n return;\r\n }\r\n\r\n this.getWebPImages(function() {\r\n /**\r\n * @property {Blob} blob - Recorded frames in video/webm blob.\r\n * @memberof CanvasRecorder\r\n * @example\r\n * recorder.stop(function() {\r\n * var blob = recorder.blob;\r\n * });\r\n */\r\n whammy.compile(function(blob) {\r\n if (!config.disableLogs) {\r\n console.log('Recording finished!');\r\n }\r\n\r\n that.blob = blob;\r\n\r\n if (that.blob.forEach) {\r\n that.blob = new Blob([], {\r\n type: 'video/webm'\r\n });\r\n }\r\n\r\n if (callback) {\r\n callback(that.blob);\r\n }\r\n\r\n whammy.frames = [];\r\n });\r\n });\r\n };\r\n\r\n var isPausedRecording = false;\r\n\r\n /**\r\n * This method pauses the recording process.\r\n * @method\r\n * @memberof CanvasRecorder\r\n * @example\r\n * recorder.pause();\r\n */\r\n this.pause = function() {\r\n isPausedRecording = true;\r\n\r\n if (mediaStreamRecorder instanceof MediaStreamRecorder) {\r\n mediaStreamRecorder.pause();\r\n return;\r\n }\r\n };\r\n\r\n /**\r\n * This method resumes the recording process.\r\n * @method\r\n * @memberof CanvasRecorder\r\n * @example\r\n * recorder.resume();\r\n */\r\n this.resume = function() {\r\n isPausedRecording = false;\r\n\r\n if (mediaStreamRecorder instanceof MediaStreamRecorder) {\r\n mediaStreamRecorder.resume();\r\n return;\r\n }\r\n\r\n if (!isRecording) {\r\n this.record();\r\n }\r\n };\r\n\r\n /**\r\n * This method resets currently recorded data.\r\n * @method\r\n * @memberof CanvasRecorder\r\n * @example\r\n * recorder.clearRecordedData();\r\n */\r\n this.clearRecordedData = function() {\r\n if (isRecording) {\r\n this.stop(clearRecordedDataCB);\r\n }\r\n clearRecordedDataCB();\r\n };\r\n\r\n function clearRecordedDataCB() {\r\n whammy.frames = [];\r\n isRecording = false;\r\n isPausedRecording = false;\r\n }\r\n\r\n // for debugging\r\n this.name = 'CanvasRecorder';\r\n this.toString = function() {\r\n return this.name;\r\n };\r\n\r\n function cloneCanvas() {\r\n //create a new canvas\r\n var newCanvas = document.createElement('canvas');\r\n var context = newCanvas.getContext('2d');\r\n\r\n //set dimensions\r\n newCanvas.width = htmlElement.width;\r\n newCanvas.height = htmlElement.height;\r\n\r\n //apply the old canvas to the new one\r\n context.drawImage(htmlElement, 0, 0);\r\n\r\n //return the new canvas\r\n return newCanvas;\r\n }\r\n\r\n function drawCanvasFrame() {\r\n if (isPausedRecording) {\r\n lastTime = new Date().getTime();\r\n return setTimeout(drawCanvasFrame, 500);\r\n }\r\n\r\n if (htmlElement.nodeName.toLowerCase() === 'canvas') {\r\n var duration = new Date().getTime() - lastTime;\r\n // via #206, by Jack i.e. @Seymourr\r\n lastTime = new Date().getTime();\r\n\r\n whammy.frames.push({\r\n image: cloneCanvas(),\r\n duration: duration\r\n });\r\n\r\n if (isRecording) {\r\n setTimeout(drawCanvasFrame, config.frameInterval);\r\n }\r\n return;\r\n }\r\n\r\n html2canvas(htmlElement, {\r\n grabMouse: typeof config.showMousePointer === 'undefined' || config.showMousePointer,\r\n onrendered: function(canvas) {\r\n var duration = new Date().getTime() - lastTime;\r\n if (!duration) {\r\n return setTimeout(drawCanvasFrame, config.frameInterval);\r\n }\r\n\r\n // via #206, by Jack i.e. @Seymourr\r\n lastTime = new Date().getTime();\r\n\r\n whammy.frames.push({\r\n image: canvas.toDataURL('image/webp', 1),\r\n duration: duration\r\n });\r\n\r\n if (isRecording) {\r\n setTimeout(drawCanvasFrame, config.frameInterval);\r\n }\r\n }\r\n });\r\n }\r\n\r\n var lastTime = new Date().getTime();\r\n\r\n var whammy = new Whammy.Video(100);\r\n}\r\n\r\nif (typeof RecordRTC !== 'undefined') {\r\n RecordRTC.CanvasRecorder = CanvasRecorder;\r\n}\n\r\n// _________________\r\n// WhammyRecorder.js\r\n\r\n/**\r\n * WhammyRecorder is a standalone class used by {@link RecordRTC} to bring video recording in Chrome. It runs top over {@link Whammy}.\r\n * @summary Video recording feature in Chrome.\r\n * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT}\r\n * @author {@link https://MuazKhan.com|Muaz Khan}\r\n * @typedef WhammyRecorder\r\n * @class\r\n * @example\r\n * var recorder = new WhammyRecorder(mediaStream);\r\n * recorder.record();\r\n * recorder.stop(function(blob) {\r\n * video.src = URL.createObjectURL(blob);\r\n * });\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n * @param {MediaStream} mediaStream - MediaStream object fetched using getUserMedia API or generated using captureStreamUntilEnded or WebAudio API.\r\n * @param {object} config - {disableLogs: true, initCallback: function, video: HTMLVideoElement, etc.}\r\n */\r\n\r\nfunction WhammyRecorder(mediaStream, config) {\r\n\r\n config = config || {};\r\n\r\n if (!config.frameInterval) {\r\n config.frameInterval = 10;\r\n }\r\n\r\n if (!config.disableLogs) {\r\n console.log('Using frames-interval:', config.frameInterval);\r\n }\r\n\r\n /**\r\n * This method records video.\r\n * @method\r\n * @memberof WhammyRecorder\r\n * @example\r\n * recorder.record();\r\n */\r\n this.record = function() {\r\n if (!config.width) {\r\n config.width = 320;\r\n }\r\n\r\n if (!config.height) {\r\n config.height = 240;\r\n }\r\n\r\n if (!config.video) {\r\n config.video = {\r\n width: config.width,\r\n height: config.height\r\n };\r\n }\r\n\r\n if (!config.canvas) {\r\n config.canvas = {\r\n width: config.width,\r\n height: config.height\r\n };\r\n }\r\n\r\n canvas.width = config.canvas.width || 320;\r\n canvas.height = config.canvas.height || 240;\r\n\r\n context = canvas.getContext('2d');\r\n\r\n // setting defaults\r\n if (config.video && config.video instanceof HTMLVideoElement) {\r\n video = config.video.cloneNode();\r\n\r\n if (config.initCallback) {\r\n config.initCallback();\r\n }\r\n } else {\r\n video = document.createElement('video');\r\n\r\n setSrcObject(mediaStream, video);\r\n\r\n video.onloadedmetadata = function() { // \"onloadedmetadata\" may NOT work in FF?\r\n if (config.initCallback) {\r\n config.initCallback();\r\n }\r\n };\r\n\r\n video.width = config.video.width;\r\n video.height = config.video.height;\r\n }\r\n\r\n video.muted = true;\r\n video.play();\r\n\r\n lastTime = new Date().getTime();\r\n whammy = new Whammy.Video();\r\n\r\n if (!config.disableLogs) {\r\n console.log('canvas resolutions', canvas.width, '*', canvas.height);\r\n console.log('video width/height', video.width || canvas.width, '*', video.height || canvas.height);\r\n }\r\n\r\n drawFrames(config.frameInterval);\r\n };\r\n\r\n /**\r\n * Draw and push frames to Whammy\r\n * @param {integer} frameInterval - set minimum interval (in milliseconds) between each time we push a frame to Whammy\r\n */\r\n function drawFrames(frameInterval) {\r\n frameInterval = typeof frameInterval !== 'undefined' ? frameInterval : 10;\r\n\r\n var duration = new Date().getTime() - lastTime;\r\n if (!duration) {\r\n return setTimeout(drawFrames, frameInterval, frameInterval);\r\n }\r\n\r\n if (isPausedRecording) {\r\n lastTime = new Date().getTime();\r\n return setTimeout(drawFrames, 100);\r\n }\r\n\r\n // via #206, by Jack i.e. @Seymourr\r\n lastTime = new Date().getTime();\r\n\r\n if (video.paused) {\r\n // via: https://github.com/muaz-khan/WebRTC-Experiment/pull/316\r\n // Tweak for Android Chrome\r\n video.play();\r\n }\r\n\r\n context.drawImage(video, 0, 0, canvas.width, canvas.height);\r\n whammy.frames.push({\r\n duration: duration,\r\n image: canvas.toDataURL('image/webp')\r\n });\r\n\r\n if (!isStopDrawing) {\r\n setTimeout(drawFrames, frameInterval, frameInterval);\r\n }\r\n }\r\n\r\n function asyncLoop(o) {\r\n var i = -1,\r\n length = o.length;\r\n\r\n (function loop() {\r\n i++;\r\n if (i === length) {\r\n o.callback();\r\n return;\r\n }\r\n\r\n // \"setTimeout\" added by Jim McLeod\r\n setTimeout(function() {\r\n o.functionToLoop(loop, i);\r\n }, 1);\r\n })();\r\n }\r\n\r\n\r\n /**\r\n * remove black frames from the beginning to the specified frame\r\n * @param {Array} _frames - array of frames to be checked\r\n * @param {number} _framesToCheck - number of frame until check will be executed (-1 - will drop all frames until frame not matched will be found)\r\n * @param {number} _pixTolerance - 0 - very strict (only black pixel color) ; 1 - all\r\n * @param {number} _frameTolerance - 0 - very strict (only black frame color) ; 1 - all\r\n * @returns {Array} - array of frames\r\n */\r\n // pull#293 by @volodalexey\r\n function dropBlackFrames(_frames, _framesToCheck, _pixTolerance, _frameTolerance, callback) {\r\n var localCanvas = document.createElement('canvas');\r\n localCanvas.width = canvas.width;\r\n localCanvas.height = canvas.height;\r\n var context2d = localCanvas.getContext('2d');\r\n var resultFrames = [];\r\n\r\n var checkUntilNotBlack = _framesToCheck === -1;\r\n var endCheckFrame = (_framesToCheck && _framesToCheck > 0 && _framesToCheck <= _frames.length) ?\r\n _framesToCheck : _frames.length;\r\n var sampleColor = {\r\n r: 0,\r\n g: 0,\r\n b: 0\r\n };\r\n var maxColorDifference = Math.sqrt(\r\n Math.pow(255, 2) +\r\n Math.pow(255, 2) +\r\n Math.pow(255, 2)\r\n );\r\n var pixTolerance = _pixTolerance && _pixTolerance >= 0 && _pixTolerance <= 1 ? _pixTolerance : 0;\r\n var frameTolerance = _frameTolerance && _frameTolerance >= 0 && _frameTolerance <= 1 ? _frameTolerance : 0;\r\n var doNotCheckNext = false;\r\n\r\n asyncLoop({\r\n length: endCheckFrame,\r\n functionToLoop: function(loop, f) {\r\n var matchPixCount, endPixCheck, maxPixCount;\r\n\r\n var finishImage = function() {\r\n if (!doNotCheckNext && maxPixCount - matchPixCount <= maxPixCount * frameTolerance) {\r\n // console.log('removed black frame : ' + f + ' ; frame duration ' + _frames[f].duration);\r\n } else {\r\n // console.log('frame is passed : ' + f);\r\n if (checkUntilNotBlack) {\r\n doNotCheckNext = true;\r\n }\r\n resultFrames.push(_frames[f]);\r\n }\r\n loop();\r\n };\r\n\r\n if (!doNotCheckNext) {\r\n var image = new Image();\r\n image.onload = function() {\r\n context2d.drawImage(image, 0, 0, canvas.width, canvas.height);\r\n var imageData = context2d.getImageData(0, 0, canvas.width, canvas.height);\r\n matchPixCount = 0;\r\n endPixCheck = imageData.data.length;\r\n maxPixCount = imageData.data.length / 4;\r\n\r\n for (var pix = 0; pix < endPixCheck; pix += 4) {\r\n var currentColor = {\r\n r: imageData.data[pix],\r\n g: imageData.data[pix + 1],\r\n b: imageData.data[pix + 2]\r\n };\r\n var colorDifference = Math.sqrt(\r\n Math.pow(currentColor.r - sampleColor.r, 2) +\r\n Math.pow(currentColor.g - sampleColor.g, 2) +\r\n Math.pow(currentColor.b - sampleColor.b, 2)\r\n );\r\n // difference in color it is difference in color vectors (r1,g1,b1) <=> (r2,g2,b2)\r\n if (colorDifference <= maxColorDifference * pixTolerance) {\r\n matchPixCount++;\r\n }\r\n }\r\n finishImage();\r\n };\r\n image.src = _frames[f].image;\r\n } else {\r\n finishImage();\r\n }\r\n },\r\n callback: function() {\r\n resultFrames = resultFrames.concat(_frames.slice(endCheckFrame));\r\n\r\n if (resultFrames.length <= 0) {\r\n // at least one last frame should be available for next manipulation\r\n // if total duration of all frames will be < 1000 than ffmpeg doesn't work well...\r\n resultFrames.push(_frames[_frames.length - 1]);\r\n }\r\n callback(resultFrames);\r\n }\r\n });\r\n }\r\n\r\n var isStopDrawing = false;\r\n\r\n /**\r\n * This method stops recording video.\r\n * @param {function} callback - Callback function, that is used to pass recorded blob back to the callee.\r\n * @method\r\n * @memberof WhammyRecorder\r\n * @example\r\n * recorder.stop(function(blob) {\r\n * video.src = URL.createObjectURL(blob);\r\n * });\r\n */\r\n this.stop = function(callback) {\r\n callback = callback || function() {};\r\n\r\n isStopDrawing = true;\r\n\r\n var _this = this;\r\n // analyse of all frames takes some time!\r\n setTimeout(function() {\r\n // e.g. dropBlackFrames(frames, 10, 1, 1) - will cut all 10 frames\r\n // e.g. dropBlackFrames(frames, 10, 0.5, 0.5) - will analyse 10 frames\r\n // e.g. dropBlackFrames(frames, 10) === dropBlackFrames(frames, 10, 0, 0) - will analyse 10 frames with strict black color\r\n dropBlackFrames(whammy.frames, -1, null, null, function(frames) {\r\n whammy.frames = frames;\r\n\r\n // to display advertisement images!\r\n if (config.advertisement && config.advertisement.length) {\r\n whammy.frames = config.advertisement.concat(whammy.frames);\r\n }\r\n\r\n /**\r\n * @property {Blob} blob - Recorded frames in video/webm blob.\r\n * @memberof WhammyRecorder\r\n * @example\r\n * recorder.stop(function() {\r\n * var blob = recorder.blob;\r\n * });\r\n */\r\n whammy.compile(function(blob) {\r\n _this.blob = blob;\r\n\r\n if (_this.blob.forEach) {\r\n _this.blob = new Blob([], {\r\n type: 'video/webm'\r\n });\r\n }\r\n\r\n if (callback) {\r\n callback(_this.blob);\r\n }\r\n });\r\n });\r\n }, 10);\r\n };\r\n\r\n var isPausedRecording = false;\r\n\r\n /**\r\n * This method pauses the recording process.\r\n * @method\r\n * @memberof WhammyRecorder\r\n * @example\r\n * recorder.pause();\r\n */\r\n this.pause = function() {\r\n isPausedRecording = true;\r\n };\r\n\r\n /**\r\n * This method resumes the recording process.\r\n * @method\r\n * @memberof WhammyRecorder\r\n * @example\r\n * recorder.resume();\r\n */\r\n this.resume = function() {\r\n isPausedRecording = false;\r\n\r\n if (isStopDrawing) {\r\n this.record();\r\n }\r\n };\r\n\r\n /**\r\n * This method resets currently recorded data.\r\n * @method\r\n * @memberof WhammyRecorder\r\n * @example\r\n * recorder.clearRecordedData();\r\n */\r\n this.clearRecordedData = function() {\r\n if (!isStopDrawing) {\r\n this.stop(clearRecordedDataCB);\r\n }\r\n clearRecordedDataCB();\r\n };\r\n\r\n function clearRecordedDataCB() {\r\n whammy.frames = [];\r\n isStopDrawing = true;\r\n isPausedRecording = false;\r\n }\r\n\r\n // for debugging\r\n this.name = 'WhammyRecorder';\r\n this.toString = function() {\r\n return this.name;\r\n };\r\n\r\n var canvas = document.createElement('canvas');\r\n var context = canvas.getContext('2d');\r\n\r\n var video;\r\n var lastTime;\r\n var whammy;\r\n}\r\n\r\nif (typeof RecordRTC !== 'undefined') {\r\n RecordRTC.WhammyRecorder = WhammyRecorder;\r\n}\n\r\n// https://github.com/antimatter15/whammy/blob/master/LICENSE\r\n// _________\r\n// Whammy.js\r\n\r\n// todo: Firefox now supports webp for webm containers!\r\n// their MediaRecorder implementation works well!\r\n// should we provide an option to record via Whammy.js or MediaRecorder API is a better solution?\r\n\r\n/**\r\n * Whammy is a standalone class used by {@link RecordRTC} to bring video recording in Chrome. It is written by {@link https://github.com/antimatter15|antimatter15}\r\n * @summary A real time javascript webm encoder based on a canvas hack.\r\n * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT}\r\n * @author {@link https://MuazKhan.com|Muaz Khan}\r\n * @typedef Whammy\r\n * @class\r\n * @example\r\n * var recorder = new Whammy().Video(15);\r\n * recorder.add(context || canvas || dataURL);\r\n * var output = recorder.compile();\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n */\r\n\r\nvar Whammy = (function() {\r\n // a more abstract-ish API\r\n\r\n function WhammyVideo(duration) {\r\n this.frames = [];\r\n this.duration = duration || 1;\r\n this.quality = 0.8;\r\n }\r\n\r\n /**\r\n * Pass Canvas or Context or image/webp(string) to {@link Whammy} encoder.\r\n * @method\r\n * @memberof Whammy\r\n * @example\r\n * recorder = new Whammy().Video(0.8, 100);\r\n * recorder.add(canvas || context || 'image/webp');\r\n * @param {string} frame - Canvas || Context || image/webp\r\n * @param {number} duration - Stick a duration (in milliseconds)\r\n */\r\n WhammyVideo.prototype.add = function(frame, duration) {\r\n if ('canvas' in frame) { //CanvasRenderingContext2D\r\n frame = frame.canvas;\r\n }\r\n\r\n if ('toDataURL' in frame) {\r\n frame = frame.toDataURL('image/webp', this.quality);\r\n }\r\n\r\n if (!(/^data:image\\/webp;base64,/ig).test(frame)) {\r\n throw 'Input must be formatted properly as a base64 encoded DataURI of type image/webp';\r\n }\r\n this.frames.push({\r\n image: frame,\r\n duration: duration || this.duration\r\n });\r\n };\r\n\r\n function processInWebWorker(_function) {\r\n var blob = URL.createObjectURL(new Blob([_function.toString(),\r\n 'this.onmessage = function (eee) {' + _function.name + '(eee.data);}'\r\n ], {\r\n type: 'application/javascript'\r\n }));\r\n\r\n var worker = new Worker(blob);\r\n URL.revokeObjectURL(blob);\r\n return worker;\r\n }\r\n\r\n function whammyInWebWorker(frames) {\r\n function ArrayToWebM(frames) {\r\n var info = checkFrames(frames);\r\n if (!info) {\r\n return [];\r\n }\r\n\r\n var clusterMaxDuration = 30000;\r\n\r\n var EBML = [{\r\n 'id': 0x1a45dfa3, // EBML\r\n 'data': [{\r\n 'data': 1,\r\n 'id': 0x4286 // EBMLVersion\r\n }, {\r\n 'data': 1,\r\n 'id': 0x42f7 // EBMLReadVersion\r\n }, {\r\n 'data': 4,\r\n 'id': 0x42f2 // EBMLMaxIDLength\r\n }, {\r\n 'data': 8,\r\n 'id': 0x42f3 // EBMLMaxSizeLength\r\n }, {\r\n 'data': 'webm',\r\n 'id': 0x4282 // DocType\r\n }, {\r\n 'data': 2,\r\n 'id': 0x4287 // DocTypeVersion\r\n }, {\r\n 'data': 2,\r\n 'id': 0x4285 // DocTypeReadVersion\r\n }]\r\n }, {\r\n 'id': 0x18538067, // Segment\r\n 'data': [{\r\n 'id': 0x1549a966, // Info\r\n 'data': [{\r\n 'data': 1e6, //do things in millisecs (num of nanosecs for duration scale)\r\n 'id': 0x2ad7b1 // TimecodeScale\r\n }, {\r\n 'data': 'whammy',\r\n 'id': 0x4d80 // MuxingApp\r\n }, {\r\n 'data': 'whammy',\r\n 'id': 0x5741 // WritingApp\r\n }, {\r\n 'data': doubleToString(info.duration),\r\n 'id': 0x4489 // Duration\r\n }]\r\n }, {\r\n 'id': 0x1654ae6b, // Tracks\r\n 'data': [{\r\n 'id': 0xae, // TrackEntry\r\n 'data': [{\r\n 'data': 1,\r\n 'id': 0xd7 // TrackNumber\r\n }, {\r\n 'data': 1,\r\n 'id': 0x73c5 // TrackUID\r\n }, {\r\n 'data': 0,\r\n 'id': 0x9c // FlagLacing\r\n }, {\r\n 'data': 'und',\r\n 'id': 0x22b59c // Language\r\n }, {\r\n 'data': 'V_VP8',\r\n 'id': 0x86 // CodecID\r\n }, {\r\n 'data': 'VP8',\r\n 'id': 0x258688 // CodecName\r\n }, {\r\n 'data': 1,\r\n 'id': 0x83 // TrackType\r\n }, {\r\n 'id': 0xe0, // Video\r\n 'data': [{\r\n 'data': info.width,\r\n 'id': 0xb0 // PixelWidth\r\n }, {\r\n 'data': info.height,\r\n 'id': 0xba // PixelHeight\r\n }]\r\n }]\r\n }]\r\n }]\r\n }];\r\n\r\n //Generate clusters (max duration)\r\n var frameNumber = 0;\r\n var clusterTimecode = 0;\r\n while (frameNumber < frames.length) {\r\n\r\n var clusterFrames = [];\r\n var clusterDuration = 0;\r\n do {\r\n clusterFrames.push(frames[frameNumber]);\r\n clusterDuration += frames[frameNumber].duration;\r\n frameNumber++;\r\n } while (frameNumber < frames.length && clusterDuration < clusterMaxDuration);\r\n\r\n var clusterCounter = 0;\r\n var cluster = {\r\n 'id': 0x1f43b675, // Cluster\r\n 'data': getClusterData(clusterTimecode, clusterCounter, clusterFrames)\r\n }; //Add cluster to segment\r\n EBML[1].data.push(cluster);\r\n clusterTimecode += clusterDuration;\r\n }\r\n\r\n return generateEBML(EBML);\r\n }\r\n\r\n function getClusterData(clusterTimecode, clusterCounter, clusterFrames) {\r\n return [{\r\n 'data': clusterTimecode,\r\n 'id': 0xe7 // Timecode\r\n }].concat(clusterFrames.map(function(webp) {\r\n var block = makeSimpleBlock({\r\n discardable: 0,\r\n frame: webp.data.slice(4),\r\n invisible: 0,\r\n keyframe: 1,\r\n lacing: 0,\r\n trackNum: 1,\r\n timecode: Math.round(clusterCounter)\r\n });\r\n clusterCounter += webp.duration;\r\n return {\r\n data: block,\r\n id: 0xa3\r\n };\r\n }));\r\n }\r\n\r\n // sums the lengths of all the frames and gets the duration\r\n\r\n function checkFrames(frames) {\r\n if (!frames[0]) {\r\n postMessage({\r\n error: 'Something went wrong. Maybe WebP format is not supported in the current browser.'\r\n });\r\n return;\r\n }\r\n\r\n var width = frames[0].width,\r\n height = frames[0].height,\r\n duration = frames[0].duration;\r\n\r\n for (var i = 1; i < frames.length; i++) {\r\n duration += frames[i].duration;\r\n }\r\n return {\r\n duration: duration,\r\n width: width,\r\n height: height\r\n };\r\n }\r\n\r\n function numToBuffer(num) {\r\n var parts = [];\r\n while (num > 0) {\r\n parts.push(num & 0xff);\r\n num = num >> 8;\r\n }\r\n return new Uint8Array(parts.reverse());\r\n }\r\n\r\n function strToBuffer(str) {\r\n return new Uint8Array(str.split('').map(function(e) {\r\n return e.charCodeAt(0);\r\n }));\r\n }\r\n\r\n function bitsToBuffer(bits) {\r\n var data = [];\r\n var pad = (bits.length % 8) ? (new Array(1 + 8 - (bits.length % 8))).join('0') : '';\r\n bits = pad + bits;\r\n for (var i = 0; i < bits.length; i += 8) {\r\n data.push(parseInt(bits.substr(i, 8), 2));\r\n }\r\n return new Uint8Array(data);\r\n }\r\n\r\n function generateEBML(json) {\r\n var ebml = [];\r\n for (var i = 0; i < json.length; i++) {\r\n var data = json[i].data;\r\n\r\n if (typeof data === 'object') {\r\n data = generateEBML(data);\r\n }\r\n\r\n if (typeof data === 'number') {\r\n data = bitsToBuffer(data.toString(2));\r\n }\r\n\r\n if (typeof data === 'string') {\r\n data = strToBuffer(data);\r\n }\r\n\r\n var len = data.size || data.byteLength || data.length;\r\n var zeroes = Math.ceil(Math.ceil(Math.log(len) / Math.log(2)) / 8);\r\n var sizeToString = len.toString(2);\r\n var padded = (new Array((zeroes * 7 + 7 + 1) - sizeToString.length)).join('0') + sizeToString;\r\n var size = (new Array(zeroes)).join('0') + '1' + padded;\r\n\r\n ebml.push(numToBuffer(json[i].id));\r\n ebml.push(bitsToBuffer(size));\r\n ebml.push(data);\r\n }\r\n\r\n return new Blob(ebml, {\r\n type: 'video/webm'\r\n });\r\n }\r\n\r\n function toBinStrOld(bits) {\r\n var data = '';\r\n var pad = (bits.length % 8) ? (new Array(1 + 8 - (bits.length % 8))).join('0') : '';\r\n bits = pad + bits;\r\n for (var i = 0; i < bits.length; i += 8) {\r\n data += String.fromCharCode(parseInt(bits.substr(i, 8), 2));\r\n }\r\n return data;\r\n }\r\n\r\n function makeSimpleBlock(data) {\r\n var flags = 0;\r\n\r\n if (data.keyframe) {\r\n flags |= 128;\r\n }\r\n\r\n if (data.invisible) {\r\n flags |= 8;\r\n }\r\n\r\n if (data.lacing) {\r\n flags |= (data.lacing << 1);\r\n }\r\n\r\n if (data.discardable) {\r\n flags |= 1;\r\n }\r\n\r\n if (data.trackNum > 127) {\r\n throw 'TrackNumber > 127 not supported';\r\n }\r\n\r\n var out = [data.trackNum | 0x80, data.timecode >> 8, data.timecode & 0xff, flags].map(function(e) {\r\n return String.fromCharCode(e);\r\n }).join('') + data.frame;\r\n\r\n return out;\r\n }\r\n\r\n function parseWebP(riff) {\r\n var VP8 = riff.RIFF[0].WEBP[0];\r\n\r\n var frameStart = VP8.indexOf('\\x9d\\x01\\x2a'); // A VP8 keyframe starts with the 0x9d012a header\r\n for (var i = 0, c = []; i < 4; i++) {\r\n c[i] = VP8.charCodeAt(frameStart + 3 + i);\r\n }\r\n\r\n var width, height, tmp;\r\n\r\n //the code below is literally copied verbatim from the bitstream spec\r\n tmp = (c[1] << 8) | c[0];\r\n width = tmp & 0x3FFF;\r\n tmp = (c[3] << 8) | c[2];\r\n height = tmp & 0x3FFF;\r\n return {\r\n width: width,\r\n height: height,\r\n data: VP8,\r\n riff: riff\r\n };\r\n }\r\n\r\n function getStrLength(string, offset) {\r\n return parseInt(string.substr(offset + 4, 4).split('').map(function(i) {\r\n var unpadded = i.charCodeAt(0).toString(2);\r\n return (new Array(8 - unpadded.length + 1)).join('0') + unpadded;\r\n }).join(''), 2);\r\n }\r\n\r\n function parseRIFF(string) {\r\n var offset = 0;\r\n var chunks = {};\r\n\r\n while (offset < string.length) {\r\n var id = string.substr(offset, 4);\r\n var len = getStrLength(string, offset);\r\n var data = string.substr(offset + 4 + 4, len);\r\n offset += 4 + 4 + len;\r\n chunks[id] = chunks[id] || [];\r\n\r\n if (id === 'RIFF' || id === 'LIST') {\r\n chunks[id].push(parseRIFF(data));\r\n } else {\r\n chunks[id].push(data);\r\n }\r\n }\r\n return chunks;\r\n }\r\n\r\n function doubleToString(num) {\r\n return [].slice.call(\r\n new Uint8Array((new Float64Array([num])).buffer), 0).map(function(e) {\r\n return String.fromCharCode(e);\r\n }).reverse().join('');\r\n }\r\n\r\n var webm = new ArrayToWebM(frames.map(function(frame) {\r\n var webp = parseWebP(parseRIFF(atob(frame.image.slice(23))));\r\n webp.duration = frame.duration;\r\n return webp;\r\n }));\r\n\r\n postMessage(webm);\r\n }\r\n\r\n /**\r\n * Encodes frames in WebM container. It uses WebWorkinvoke to invoke 'ArrayToWebM' method.\r\n * @param {function} callback - Callback function, that is used to pass recorded blob back to the callee.\r\n * @method\r\n * @memberof Whammy\r\n * @example\r\n * recorder = new Whammy().Video(0.8, 100);\r\n * recorder.compile(function(blob) {\r\n * // blob.size - blob.type\r\n * });\r\n */\r\n WhammyVideo.prototype.compile = function(callback) {\r\n var webWorker = processInWebWorker(whammyInWebWorker);\r\n\r\n webWorker.onmessage = function(event) {\r\n if (event.data.error) {\r\n console.error(event.data.error);\r\n return;\r\n }\r\n callback(event.data);\r\n };\r\n\r\n webWorker.postMessage(this.frames);\r\n };\r\n\r\n return {\r\n /**\r\n * A more abstract-ish API.\r\n * @method\r\n * @memberof Whammy\r\n * @example\r\n * recorder = new Whammy().Video(0.8, 100);\r\n * @param {?number} speed - 0.8\r\n * @param {?number} quality - 100\r\n */\r\n Video: WhammyVideo\r\n };\r\n})();\r\n\r\nif (typeof RecordRTC !== 'undefined') {\r\n RecordRTC.Whammy = Whammy;\r\n}\n\r\n// ______________ (indexed-db)\r\n// DiskStorage.js\r\n\r\n/**\r\n * DiskStorage is a standalone object used by {@link RecordRTC} to store recorded blobs in IndexedDB storage.\r\n * @summary Writing blobs into IndexedDB.\r\n * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT}\r\n * @author {@link https://MuazKhan.com|Muaz Khan}\r\n * @example\r\n * DiskStorage.Store({\r\n * audioBlob: yourAudioBlob,\r\n * videoBlob: yourVideoBlob,\r\n * gifBlob : yourGifBlob\r\n * });\r\n * DiskStorage.Fetch(function(dataURL, type) {\r\n * if(type === 'audioBlob') { }\r\n * if(type === 'videoBlob') { }\r\n * if(type === 'gifBlob') { }\r\n * });\r\n * // DiskStorage.dataStoreName = 'recordRTC';\r\n * // DiskStorage.onError = function(error) { };\r\n * @property {function} init - This method must be called once to initialize IndexedDB ObjectStore. Though, it is auto-used internally.\r\n * @property {function} Fetch - This method fetches stored blobs from IndexedDB.\r\n * @property {function} Store - This method stores blobs in IndexedDB.\r\n * @property {function} onError - This function is invoked for any known/unknown error.\r\n * @property {string} dataStoreName - Name of the ObjectStore created in IndexedDB storage.\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n */\r\n\r\n\r\nvar DiskStorage = {\r\n /**\r\n * This method must be called once to initialize IndexedDB ObjectStore. Though, it is auto-used internally.\r\n * @method\r\n * @memberof DiskStorage\r\n * @internal\r\n * @example\r\n * DiskStorage.init();\r\n */\r\n init: function() {\r\n var self = this;\r\n\r\n if (typeof indexedDB === 'undefined' || typeof indexedDB.open === 'undefined') {\r\n console.error('IndexedDB API are not available in this browser.');\r\n return;\r\n }\r\n\r\n var dbVersion = 1;\r\n var dbName = this.dbName || location.href.replace(/\\/|:|#|%|\\.|\\[|\\]/g, ''),\r\n db;\r\n var request = indexedDB.open(dbName, dbVersion);\r\n\r\n function createObjectStore(dataBase) {\r\n dataBase.createObjectStore(self.dataStoreName);\r\n }\r\n\r\n function putInDB() {\r\n var transaction = db.transaction([self.dataStoreName], 'readwrite');\r\n\r\n if (self.videoBlob) {\r\n transaction.objectStore(self.dataStoreName).put(self.videoBlob, 'videoBlob');\r\n }\r\n\r\n if (self.gifBlob) {\r\n transaction.objectStore(self.dataStoreName).put(self.gifBlob, 'gifBlob');\r\n }\r\n\r\n if (self.audioBlob) {\r\n transaction.objectStore(self.dataStoreName).put(self.audioBlob, 'audioBlob');\r\n }\r\n\r\n function getFromStore(portionName) {\r\n transaction.objectStore(self.dataStoreName).get(portionName).onsuccess = function(event) {\r\n if (self.callback) {\r\n self.callback(event.target.result, portionName);\r\n }\r\n };\r\n }\r\n\r\n getFromStore('audioBlob');\r\n getFromStore('videoBlob');\r\n getFromStore('gifBlob');\r\n }\r\n\r\n request.onerror = self.onError;\r\n\r\n request.onsuccess = function() {\r\n db = request.result;\r\n db.onerror = self.onError;\r\n\r\n if (db.setVersion) {\r\n if (db.version !== dbVersion) {\r\n var setVersion = db.setVersion(dbVersion);\r\n setVersion.onsuccess = function() {\r\n createObjectStore(db);\r\n putInDB();\r\n };\r\n } else {\r\n putInDB();\r\n }\r\n } else {\r\n putInDB();\r\n }\r\n };\r\n request.onupgradeneeded = function(event) {\r\n createObjectStore(event.target.result);\r\n };\r\n },\r\n /**\r\n * This method fetches stored blobs from IndexedDB.\r\n * @method\r\n * @memberof DiskStorage\r\n * @internal\r\n * @example\r\n * DiskStorage.Fetch(function(dataURL, type) {\r\n * if(type === 'audioBlob') { }\r\n * if(type === 'videoBlob') { }\r\n * if(type === 'gifBlob') { }\r\n * });\r\n */\r\n Fetch: function(callback) {\r\n this.callback = callback;\r\n this.init();\r\n\r\n return this;\r\n },\r\n /**\r\n * This method stores blobs in IndexedDB.\r\n * @method\r\n * @memberof DiskStorage\r\n * @internal\r\n * @example\r\n * DiskStorage.Store({\r\n * audioBlob: yourAudioBlob,\r\n * videoBlob: yourVideoBlob,\r\n * gifBlob : yourGifBlob\r\n * });\r\n */\r\n Store: function(config) {\r\n this.audioBlob = config.audioBlob;\r\n this.videoBlob = config.videoBlob;\r\n this.gifBlob = config.gifBlob;\r\n\r\n this.init();\r\n\r\n return this;\r\n },\r\n /**\r\n * This function is invoked for any known/unknown error.\r\n * @method\r\n * @memberof DiskStorage\r\n * @internal\r\n * @example\r\n * DiskStorage.onError = function(error){\r\n * alerot( JSON.stringify(error) );\r\n * };\r\n */\r\n onError: function(error) {\r\n console.error(JSON.stringify(error, null, '\\t'));\r\n },\r\n\r\n /**\r\n * @property {string} dataStoreName - Name of the ObjectStore created in IndexedDB storage.\r\n * @memberof DiskStorage\r\n * @internal\r\n * @example\r\n * DiskStorage.dataStoreName = 'recordRTC';\r\n */\r\n dataStoreName: 'recordRTC',\r\n dbName: null\r\n};\r\n\r\nif (typeof RecordRTC !== 'undefined') {\r\n RecordRTC.DiskStorage = DiskStorage;\r\n}\n\r\n// ______________\r\n// GifRecorder.js\r\n\r\n/**\r\n * GifRecorder is standalone calss used by {@link RecordRTC} to record video or canvas into animated gif.\r\n * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT}\r\n * @author {@link https://MuazKhan.com|Muaz Khan}\r\n * @typedef GifRecorder\r\n * @class\r\n * @example\r\n * var recorder = new GifRecorder(mediaStream || canvas || context, { onGifPreview: function, onGifRecordingStarted: function, width: 1280, height: 720, frameRate: 200, quality: 10 });\r\n * recorder.record();\r\n * recorder.stop(function(blob) {\r\n * img.src = URL.createObjectURL(blob);\r\n * });\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n * @param {MediaStream} mediaStream - MediaStream object or HTMLCanvasElement or CanvasRenderingContext2D.\r\n * @param {object} config - {disableLogs:true, initCallback: function, width: 320, height: 240, frameRate: 200, quality: 10}\r\n */\r\n\r\nfunction GifRecorder(mediaStream, config) {\r\n if (typeof GIFEncoder === 'undefined') {\r\n var script = document.createElement('script');\r\n script.src = 'https://www.webrtc-experiment.com/gif-recorder.js';\r\n (document.body || document.documentElement).appendChild(script);\r\n }\r\n\r\n config = config || {};\r\n\r\n var isHTMLObject = mediaStream instanceof CanvasRenderingContext2D || mediaStream instanceof HTMLCanvasElement;\r\n\r\n /**\r\n * This method records MediaStream.\r\n * @method\r\n * @memberof GifRecorder\r\n * @example\r\n * recorder.record();\r\n */\r\n this.record = function() {\r\n if (typeof GIFEncoder === 'undefined') {\r\n setTimeout(self.record, 1000);\r\n return;\r\n }\r\n\r\n if (!isLoadedMetaData) {\r\n setTimeout(self.record, 1000);\r\n return;\r\n }\r\n\r\n if (!isHTMLObject) {\r\n if (!config.width) {\r\n config.width = video.offsetWidth || 320;\r\n }\r\n\r\n if (!config.height) {\r\n config.height = video.offsetHeight || 240;\r\n }\r\n\r\n if (!config.video) {\r\n config.video = {\r\n width: config.width,\r\n height: config.height\r\n };\r\n }\r\n\r\n if (!config.canvas) {\r\n config.canvas = {\r\n width: config.width,\r\n height: config.height\r\n };\r\n }\r\n\r\n canvas.width = config.canvas.width || 320;\r\n canvas.height = config.canvas.height || 240;\r\n\r\n video.width = config.video.width || 320;\r\n video.height = config.video.height || 240;\r\n }\r\n\r\n // external library to record as GIF images\r\n gifEncoder = new GIFEncoder();\r\n\r\n // void setRepeat(int iter) \r\n // Sets the number of times the set of GIF frames should be played. \r\n // Default is 1; 0 means play indefinitely.\r\n gifEncoder.setRepeat(0);\r\n\r\n // void setFrameRate(Number fps) \r\n // Sets frame rate in frames per second. \r\n // Equivalent to setDelay(1000/fps).\r\n // Using \"setDelay\" instead of \"setFrameRate\"\r\n gifEncoder.setDelay(config.frameRate || 200);\r\n\r\n // void setQuality(int quality) \r\n // Sets quality of color quantization (conversion of images to the \r\n // maximum 256 colors allowed by the GIF specification). \r\n // Lower values (minimum = 1) produce better colors, \r\n // but slow processing significantly. 10 is the default, \r\n // and produces good color mapping at reasonable speeds. \r\n // Values greater than 20 do not yield significant improvements in speed.\r\n gifEncoder.setQuality(config.quality || 10);\r\n\r\n // Boolean start() \r\n // This writes the GIF Header and returns false if it fails.\r\n gifEncoder.start();\r\n\r\n if (typeof config.onGifRecordingStarted === 'function') {\r\n config.onGifRecordingStarted();\r\n }\r\n\r\n startTime = Date.now();\r\n\r\n function drawVideoFrame(time) {\r\n if (self.clearedRecordedData === true) {\r\n return;\r\n }\r\n\r\n if (isPausedRecording) {\r\n return setTimeout(function() {\r\n drawVideoFrame(time);\r\n }, 100);\r\n }\r\n\r\n lastAnimationFrame = requestAnimationFrame(drawVideoFrame);\r\n\r\n if (typeof lastFrameTime === undefined) {\r\n lastFrameTime = time;\r\n }\r\n\r\n // ~10 fps\r\n if (time - lastFrameTime < 90) {\r\n return;\r\n }\r\n\r\n if (!isHTMLObject && video.paused) {\r\n // via: https://github.com/muaz-khan/WebRTC-Experiment/pull/316\r\n // Tweak for Android Chrome\r\n video.play();\r\n }\r\n\r\n if (!isHTMLObject) {\r\n context.drawImage(video, 0, 0, canvas.width, canvas.height);\r\n }\r\n\r\n if (config.onGifPreview) {\r\n config.onGifPreview(canvas.toDataURL('image/png'));\r\n }\r\n\r\n gifEncoder.addFrame(context);\r\n lastFrameTime = time;\r\n }\r\n\r\n lastAnimationFrame = requestAnimationFrame(drawVideoFrame);\r\n\r\n if (config.initCallback) {\r\n config.initCallback();\r\n }\r\n };\r\n\r\n /**\r\n * This method stops recording MediaStream.\r\n * @param {function} callback - Callback function, that is used to pass recorded blob back to the callee.\r\n * @method\r\n * @memberof GifRecorder\r\n * @example\r\n * recorder.stop(function(blob) {\r\n * img.src = URL.createObjectURL(blob);\r\n * });\r\n */\r\n this.stop = function(callback) {\r\n callback = callback || function() {};\r\n\r\n if (lastAnimationFrame) {\r\n cancelAnimationFrame(lastAnimationFrame);\r\n }\r\n\r\n endTime = Date.now();\r\n\r\n /**\r\n * @property {Blob} blob - The recorded blob object.\r\n * @memberof GifRecorder\r\n * @example\r\n * recorder.stop(function(){\r\n * var blob = recorder.blob;\r\n * });\r\n */\r\n this.blob = new Blob([new Uint8Array(gifEncoder.stream().bin)], {\r\n type: 'image/gif'\r\n });\r\n\r\n callback(this.blob);\r\n\r\n // bug: find a way to clear old recorded blobs\r\n gifEncoder.stream().bin = [];\r\n };\r\n\r\n var isPausedRecording = false;\r\n\r\n /**\r\n * This method pauses the recording process.\r\n * @method\r\n * @memberof GifRecorder\r\n * @example\r\n * recorder.pause();\r\n */\r\n this.pause = function() {\r\n isPausedRecording = true;\r\n };\r\n\r\n /**\r\n * This method resumes the recording process.\r\n * @method\r\n * @memberof GifRecorder\r\n * @example\r\n * recorder.resume();\r\n */\r\n this.resume = function() {\r\n isPausedRecording = false;\r\n };\r\n\r\n /**\r\n * This method resets currently recorded data.\r\n * @method\r\n * @memberof GifRecorder\r\n * @example\r\n * recorder.clearRecordedData();\r\n */\r\n this.clearRecordedData = function() {\r\n self.clearedRecordedData = true;\r\n clearRecordedDataCB();\r\n };\r\n\r\n function clearRecordedDataCB() {\r\n if (gifEncoder) {\r\n gifEncoder.stream().bin = [];\r\n }\r\n }\r\n\r\n // for debugging\r\n this.name = 'GifRecorder';\r\n this.toString = function() {\r\n return this.name;\r\n };\r\n\r\n var canvas = document.createElement('canvas');\r\n var context = canvas.getContext('2d');\r\n\r\n if (isHTMLObject) {\r\n if (mediaStream instanceof CanvasRenderingContext2D) {\r\n context = mediaStream;\r\n canvas = context.canvas;\r\n } else if (mediaStream instanceof HTMLCanvasElement) {\r\n context = mediaStream.getContext('2d');\r\n canvas = mediaStream;\r\n }\r\n }\r\n\r\n var isLoadedMetaData = true;\r\n\r\n if (!isHTMLObject) {\r\n var video = document.createElement('video');\r\n video.muted = true;\r\n video.autoplay = true;\r\n video.playsInline = true;\r\n\r\n isLoadedMetaData = false;\r\n video.onloadedmetadata = function() {\r\n isLoadedMetaData = true;\r\n };\r\n\r\n setSrcObject(mediaStream, video);\r\n\r\n video.play();\r\n }\r\n\r\n var lastAnimationFrame = null;\r\n var startTime, endTime, lastFrameTime;\r\n\r\n var gifEncoder;\r\n\r\n var self = this;\r\n}\r\n\r\nif (typeof RecordRTC !== 'undefined') {\r\n RecordRTC.GifRecorder = GifRecorder;\r\n}\n\r\n// Last time updated: 2019-06-21 4:09:42 AM UTC\r\n\r\n// ________________________\r\n// MultiStreamsMixer v1.2.2\r\n\r\n// Open-Sourced: https://github.com/muaz-khan/MultiStreamsMixer\r\n\r\n// --------------------------------------------------\r\n// Muaz Khan - www.MuazKhan.com\r\n// MIT License - www.WebRTC-Experiment.com/licence\r\n// --------------------------------------------------\r\n\r\nfunction MultiStreamsMixer(arrayOfMediaStreams, elementClass) {\r\n\r\n var browserFakeUserAgent = 'Fake/5.0 (FakeOS) AppleWebKit/123 (KHTML, like Gecko) Fake/12.3.4567.89 Fake/123.45';\r\n\r\n (function(that) {\r\n if (typeof RecordRTC !== 'undefined') {\r\n return;\r\n }\r\n\r\n if (!that) {\r\n return;\r\n }\r\n\r\n if (typeof window !== 'undefined') {\r\n return;\r\n }\r\n\r\n if (typeof global === 'undefined') {\r\n return;\r\n }\r\n\r\n global.navigator = {\r\n userAgent: browserFakeUserAgent,\r\n getUserMedia: function() {}\r\n };\r\n\r\n if (!global.console) {\r\n global.console = {};\r\n }\r\n\r\n if (typeof global.console.log === 'undefined' || typeof global.console.error === 'undefined') {\r\n global.console.error = global.console.log = global.console.log || function() {\r\n console.log(arguments);\r\n };\r\n }\r\n\r\n if (typeof document === 'undefined') {\r\n /*global document:true */\r\n that.document = {\r\n documentElement: {\r\n appendChild: function() {\r\n return '';\r\n }\r\n }\r\n };\r\n\r\n document.createElement = document.captureStream = document.mozCaptureStream = function() {\r\n var obj = {\r\n getContext: function() {\r\n return obj;\r\n },\r\n play: function() {},\r\n pause: function() {},\r\n drawImage: function() {},\r\n toDataURL: function() {\r\n return '';\r\n },\r\n style: {}\r\n };\r\n return obj;\r\n };\r\n\r\n that.HTMLVideoElement = function() {};\r\n }\r\n\r\n if (typeof location === 'undefined') {\r\n /*global location:true */\r\n that.location = {\r\n protocol: 'file:',\r\n href: '',\r\n hash: ''\r\n };\r\n }\r\n\r\n if (typeof screen === 'undefined') {\r\n /*global screen:true */\r\n that.screen = {\r\n width: 0,\r\n height: 0\r\n };\r\n }\r\n\r\n if (typeof URL === 'undefined') {\r\n /*global screen:true */\r\n that.URL = {\r\n createObjectURL: function() {\r\n return '';\r\n },\r\n revokeObjectURL: function() {\r\n return '';\r\n }\r\n };\r\n }\r\n\r\n /*global window:true */\r\n that.window = global;\r\n })(typeof global !== 'undefined' ? global : null);\r\n\r\n // requires: chrome://flags/#enable-experimental-web-platform-features\r\n\r\n elementClass = elementClass || 'multi-streams-mixer';\r\n\r\n var videos = [];\r\n var isStopDrawingFrames = false;\r\n\r\n var canvas = document.createElement('canvas');\r\n var context = canvas.getContext('2d');\r\n canvas.style.opacity = 0;\r\n canvas.style.position = 'absolute';\r\n canvas.style.zIndex = -1;\r\n canvas.style.top = '-1000em';\r\n canvas.style.left = '-1000em';\r\n canvas.className = elementClass;\r\n (document.body || document.documentElement).appendChild(canvas);\r\n\r\n this.disableLogs = false;\r\n this.frameInterval = 10;\r\n\r\n this.width = 360;\r\n this.height = 240;\r\n\r\n // use gain node to prevent echo\r\n this.useGainNode = true;\r\n\r\n var self = this;\r\n\r\n // _____________________________\r\n // Cross-Browser-Declarations.js\r\n\r\n // WebAudio API representer\r\n var AudioContext = window.AudioContext;\r\n\r\n if (typeof AudioContext === 'undefined') {\r\n if (typeof webkitAudioContext !== 'undefined') {\r\n /*global AudioContext:true */\r\n AudioContext = webkitAudioContext;\r\n }\r\n\r\n if (typeof mozAudioContext !== 'undefined') {\r\n /*global AudioContext:true */\r\n AudioContext = mozAudioContext;\r\n }\r\n }\r\n\r\n /*jshint -W079 */\r\n var URL = window.URL;\r\n\r\n if (typeof URL === 'undefined' && typeof webkitURL !== 'undefined') {\r\n /*global URL:true */\r\n URL = webkitURL;\r\n }\r\n\r\n if (typeof navigator !== 'undefined' && typeof navigator.getUserMedia === 'undefined') { // maybe window.navigator?\r\n if (typeof navigator.webkitGetUserMedia !== 'undefined') {\r\n navigator.getUserMedia = navigator.webkitGetUserMedia;\r\n }\r\n\r\n if (typeof navigator.mozGetUserMedia !== 'undefined') {\r\n navigator.getUserMedia = navigator.mozGetUserMedia;\r\n }\r\n }\r\n\r\n var MediaStream = window.MediaStream;\r\n\r\n if (typeof MediaStream === 'undefined' && typeof webkitMediaStream !== 'undefined') {\r\n MediaStream = webkitMediaStream;\r\n }\r\n\r\n /*global MediaStream:true */\r\n if (typeof MediaStream !== 'undefined') {\r\n // override \"stop\" method for all browsers\r\n if (typeof MediaStream.prototype.stop === 'undefined') {\r\n MediaStream.prototype.stop = function() {\r\n this.getTracks().forEach(function(track) {\r\n track.stop();\r\n });\r\n };\r\n }\r\n }\r\n\r\n var Storage = {};\r\n\r\n if (typeof AudioContext !== 'undefined') {\r\n Storage.AudioContext = AudioContext;\r\n } else if (typeof webkitAudioContext !== 'undefined') {\r\n Storage.AudioContext = webkitAudioContext;\r\n }\r\n\r\n function setSrcObject(stream, element) {\r\n if ('srcObject' in element) {\r\n element.srcObject = stream;\r\n } else if ('mozSrcObject' in element) {\r\n element.mozSrcObject = stream;\r\n } else {\r\n element.srcObject = stream;\r\n }\r\n }\r\n\r\n this.startDrawingFrames = function() {\r\n drawVideosToCanvas();\r\n };\r\n\r\n function drawVideosToCanvas() {\r\n if (isStopDrawingFrames) {\r\n return;\r\n }\r\n\r\n var videosLength = videos.length;\r\n\r\n var fullcanvas = false;\r\n var remaining = [];\r\n videos.forEach(function(video) {\r\n if (!video.stream) {\r\n video.stream = {};\r\n }\r\n\r\n if (video.stream.fullcanvas) {\r\n fullcanvas = video;\r\n } else {\r\n // todo: video.stream.active or video.stream.live to fix blank frames issues?\r\n remaining.push(video);\r\n }\r\n });\r\n\r\n if (fullcanvas) {\r\n canvas.width = fullcanvas.stream.width;\r\n canvas.height = fullcanvas.stream.height;\r\n } else if (remaining.length) {\r\n canvas.width = videosLength > 1 ? remaining[0].width * 2 : remaining[0].width;\r\n\r\n var height = 1;\r\n if (videosLength === 3 || videosLength === 4) {\r\n height = 2;\r\n }\r\n if (videosLength === 5 || videosLength === 6) {\r\n height = 3;\r\n }\r\n if (videosLength === 7 || videosLength === 8) {\r\n height = 4;\r\n }\r\n if (videosLength === 9 || videosLength === 10) {\r\n height = 5;\r\n }\r\n canvas.height = remaining[0].height * height;\r\n } else {\r\n canvas.width = self.width || 360;\r\n canvas.height = self.height || 240;\r\n }\r\n\r\n if (fullcanvas && fullcanvas instanceof HTMLVideoElement) {\r\n drawImage(fullcanvas);\r\n }\r\n\r\n remaining.forEach(function(video, idx) {\r\n drawImage(video, idx);\r\n });\r\n\r\n setTimeout(drawVideosToCanvas, self.frameInterval);\r\n }\r\n\r\n function drawImage(video, idx) {\r\n if (isStopDrawingFrames) {\r\n return;\r\n }\r\n\r\n var x = 0;\r\n var y = 0;\r\n var width = video.width;\r\n var height = video.height;\r\n\r\n if (idx === 1) {\r\n x = video.width;\r\n }\r\n\r\n if (idx === 2) {\r\n y = video.height;\r\n }\r\n\r\n if (idx === 3) {\r\n x = video.width;\r\n y = video.height;\r\n }\r\n\r\n if (idx === 4) {\r\n y = video.height * 2;\r\n }\r\n\r\n if (idx === 5) {\r\n x = video.width;\r\n y = video.height * 2;\r\n }\r\n\r\n if (idx === 6) {\r\n y = video.height * 3;\r\n }\r\n\r\n if (idx === 7) {\r\n x = video.width;\r\n y = video.height * 3;\r\n }\r\n\r\n if (typeof video.stream.left !== 'undefined') {\r\n x = video.stream.left;\r\n }\r\n\r\n if (typeof video.stream.top !== 'undefined') {\r\n y = video.stream.top;\r\n }\r\n\r\n if (typeof video.stream.width !== 'undefined') {\r\n width = video.stream.width;\r\n }\r\n\r\n if (typeof video.stream.height !== 'undefined') {\r\n height = video.stream.height;\r\n }\r\n\r\n context.drawImage(video, x, y, width, height);\r\n\r\n if (typeof video.stream.onRender === 'function') {\r\n video.stream.onRender(context, x, y, width, height, idx);\r\n }\r\n }\r\n\r\n function getMixedStream() {\r\n isStopDrawingFrames = false;\r\n var mixedVideoStream = getMixedVideoStream();\r\n\r\n var mixedAudioStream = getMixedAudioStream();\r\n if (mixedAudioStream) {\r\n mixedAudioStream.getTracks().filter(function(t) {\r\n return t.kind === 'audio';\r\n }).forEach(function(track) {\r\n mixedVideoStream.addTrack(track);\r\n });\r\n }\r\n\r\n var fullcanvas;\r\n arrayOfMediaStreams.forEach(function(stream) {\r\n if (stream.fullcanvas) {\r\n fullcanvas = true;\r\n }\r\n });\r\n\r\n // mixedVideoStream.prototype.appendStreams = appendStreams;\r\n // mixedVideoStream.prototype.resetVideoStreams = resetVideoStreams;\r\n // mixedVideoStream.prototype.clearRecordedData = clearRecordedData;\r\n\r\n return mixedVideoStream;\r\n }\r\n\r\n function getMixedVideoStream() {\r\n resetVideoStreams();\r\n\r\n var capturedStream;\r\n\r\n if ('captureStream' in canvas) {\r\n capturedStream = canvas.captureStream();\r\n } else if ('mozCaptureStream' in canvas) {\r\n capturedStream = canvas.mozCaptureStream();\r\n } else if (!self.disableLogs) {\r\n console.error('Upgrade to latest Chrome or otherwise enable this flag: chrome://flags/#enable-experimental-web-platform-features');\r\n }\r\n\r\n var videoStream = new MediaStream();\r\n\r\n capturedStream.getTracks().filter(function(t) {\r\n return t.kind === 'video';\r\n }).forEach(function(track) {\r\n videoStream.addTrack(track);\r\n });\r\n\r\n canvas.stream = videoStream;\r\n\r\n return videoStream;\r\n }\r\n\r\n function getMixedAudioStream() {\r\n // via: @pehrsons\r\n if (!Storage.AudioContextConstructor) {\r\n Storage.AudioContextConstructor = new Storage.AudioContext();\r\n }\r\n\r\n self.audioContext = Storage.AudioContextConstructor;\r\n\r\n self.audioSources = [];\r\n\r\n if (self.useGainNode === true) {\r\n self.gainNode = self.audioContext.createGain();\r\n self.gainNode.connect(self.audioContext.destination);\r\n self.gainNode.gain.value = 0; // don't hear self\r\n }\r\n\r\n var audioTracksLength = 0;\r\n arrayOfMediaStreams.forEach(function(stream) {\r\n if (!stream.getTracks().filter(function(t) {\r\n return t.kind === 'audio';\r\n }).length) {\r\n return;\r\n }\r\n\r\n audioTracksLength++;\r\n\r\n var audioSource = self.audioContext.createMediaStreamSource(stream);\r\n\r\n if (self.useGainNode === true) {\r\n audioSource.connect(self.gainNode);\r\n }\r\n\r\n self.audioSources.push(audioSource);\r\n });\r\n\r\n if (!audioTracksLength) {\r\n // because \"self.audioContext\" is not initialized\r\n // that's why we've to ignore rest of the code\r\n return;\r\n }\r\n\r\n self.audioDestination = self.audioContext.createMediaStreamDestination();\r\n self.audioSources.forEach(function(audioSource) {\r\n audioSource.connect(self.audioDestination);\r\n });\r\n return self.audioDestination.stream;\r\n }\r\n\r\n function getVideo(stream) {\r\n var video = document.createElement('video');\r\n\r\n setSrcObject(stream, video);\r\n\r\n video.className = elementClass;\r\n\r\n video.muted = true;\r\n video.volume = 0;\r\n\r\n video.width = stream.width || self.width || 360;\r\n video.height = stream.height || self.height || 240;\r\n\r\n video.play();\r\n\r\n return video;\r\n }\r\n\r\n this.appendStreams = function(streams) {\r\n if (!streams) {\r\n throw 'First parameter is required.';\r\n }\r\n\r\n if (!(streams instanceof Array)) {\r\n streams = [streams];\r\n }\r\n\r\n streams.forEach(function(stream) {\r\n var newStream = new MediaStream();\r\n\r\n if (stream.getTracks().filter(function(t) {\r\n return t.kind === 'video';\r\n }).length) {\r\n var video = getVideo(stream);\r\n video.stream = stream;\r\n videos.push(video);\r\n\r\n newStream.addTrack(stream.getTracks().filter(function(t) {\r\n return t.kind === 'video';\r\n })[0]);\r\n }\r\n\r\n if (stream.getTracks().filter(function(t) {\r\n return t.kind === 'audio';\r\n }).length) {\r\n var audioSource = self.audioContext.createMediaStreamSource(stream);\r\n self.audioDestination = self.audioContext.createMediaStreamDestination();\r\n audioSource.connect(self.audioDestination);\r\n\r\n newStream.addTrack(self.audioDestination.stream.getTracks().filter(function(t) {\r\n return t.kind === 'audio';\r\n })[0]);\r\n }\r\n\r\n arrayOfMediaStreams.push(newStream);\r\n });\r\n };\r\n\r\n this.releaseStreams = function() {\r\n videos = [];\r\n isStopDrawingFrames = true;\r\n\r\n if (self.gainNode) {\r\n self.gainNode.disconnect();\r\n self.gainNode = null;\r\n }\r\n\r\n if (self.audioSources.length) {\r\n self.audioSources.forEach(function(source) {\r\n source.disconnect();\r\n });\r\n self.audioSources = [];\r\n }\r\n\r\n if (self.audioDestination) {\r\n self.audioDestination.disconnect();\r\n self.audioDestination = null;\r\n }\r\n\r\n if (self.audioContext) {\r\n self.audioContext.close();\r\n }\r\n\r\n self.audioContext = null;\r\n\r\n context.clearRect(0, 0, canvas.width, canvas.height);\r\n\r\n if (canvas.stream) {\r\n canvas.stream.stop();\r\n canvas.stream = null;\r\n }\r\n };\r\n\r\n this.resetVideoStreams = function(streams) {\r\n if (streams && !(streams instanceof Array)) {\r\n streams = [streams];\r\n }\r\n\r\n resetVideoStreams(streams);\r\n };\r\n\r\n function resetVideoStreams(streams) {\r\n videos = [];\r\n streams = streams || arrayOfMediaStreams;\r\n\r\n // via: @adrian-ber\r\n streams.forEach(function(stream) {\r\n if (!stream.getTracks().filter(function(t) {\r\n return t.kind === 'video';\r\n }).length) {\r\n return;\r\n }\r\n\r\n var video = getVideo(stream);\r\n video.stream = stream;\r\n videos.push(video);\r\n });\r\n }\r\n\r\n // for debugging\r\n this.name = 'MultiStreamsMixer';\r\n this.toString = function() {\r\n return this.name;\r\n };\r\n\r\n this.getMixedStream = getMixedStream;\r\n\r\n}\r\n\r\nif (typeof RecordRTC === 'undefined') {\r\n if (typeof module !== 'undefined' /* && !!module.exports*/ ) {\r\n module.exports = MultiStreamsMixer;\r\n }\r\n\r\n if (typeof define === 'function' && define.amd) {\r\n define('MultiStreamsMixer', [], function() {\r\n return MultiStreamsMixer;\r\n });\r\n }\r\n}\n\r\n// ______________________\r\n// MultiStreamRecorder.js\r\n\r\n/*\r\n * Video conference recording, using captureStream API along with WebAudio and Canvas2D API.\r\n */\r\n\r\n/**\r\n * MultiStreamRecorder can record multiple videos in single container.\r\n * @summary Multi-videos recorder.\r\n * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT}\r\n * @author {@link https://MuazKhan.com|Muaz Khan}\r\n * @typedef MultiStreamRecorder\r\n * @class\r\n * @example\r\n * var options = {\r\n * mimeType: 'video/webm'\r\n * }\r\n * var recorder = new MultiStreamRecorder(ArrayOfMediaStreams, options);\r\n * recorder.record();\r\n * recorder.stop(function(blob) {\r\n * video.src = URL.createObjectURL(blob);\r\n *\r\n * // or\r\n * var blob = recorder.blob;\r\n * });\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n * @param {MediaStreams} mediaStreams - Array of MediaStreams.\r\n * @param {object} config - {disableLogs:true, frameInterval: 1, mimeType: \"video/webm\"}\r\n */\r\n\r\nfunction MultiStreamRecorder(arrayOfMediaStreams, options) {\r\n arrayOfMediaStreams = arrayOfMediaStreams || [];\r\n var self = this;\r\n\r\n var mixer;\r\n var mediaRecorder;\r\n\r\n options = options || {\r\n elementClass: 'multi-streams-mixer',\r\n mimeType: 'video/webm',\r\n video: {\r\n width: 360,\r\n height: 240\r\n }\r\n };\r\n\r\n if (!options.frameInterval) {\r\n options.frameInterval = 10;\r\n }\r\n\r\n if (!options.video) {\r\n options.video = {};\r\n }\r\n\r\n if (!options.video.width) {\r\n options.video.width = 360;\r\n }\r\n\r\n if (!options.video.height) {\r\n options.video.height = 240;\r\n }\r\n\r\n /**\r\n * This method records all MediaStreams.\r\n * @method\r\n * @memberof MultiStreamRecorder\r\n * @example\r\n * recorder.record();\r\n */\r\n this.record = function() {\r\n // github/muaz-khan/MultiStreamsMixer\r\n mixer = new MultiStreamsMixer(arrayOfMediaStreams, options.elementClass || 'multi-streams-mixer');\r\n\r\n if (getAllVideoTracks().length) {\r\n mixer.frameInterval = options.frameInterval || 10;\r\n mixer.width = options.video.width || 360;\r\n mixer.height = options.video.height || 240;\r\n mixer.startDrawingFrames();\r\n }\r\n\r\n if (options.previewStream && typeof options.previewStream === 'function') {\r\n options.previewStream(mixer.getMixedStream());\r\n }\r\n\r\n // record using MediaRecorder API\r\n mediaRecorder = new MediaStreamRecorder(mixer.getMixedStream(), options);\r\n mediaRecorder.record();\r\n };\r\n\r\n function getAllVideoTracks() {\r\n var tracks = [];\r\n arrayOfMediaStreams.forEach(function(stream) {\r\n getTracks(stream, 'video').forEach(function(track) {\r\n tracks.push(track);\r\n });\r\n });\r\n return tracks;\r\n }\r\n\r\n /**\r\n * This method stops recording MediaStream.\r\n * @param {function} callback - Callback function, that is used to pass recorded blob back to the callee.\r\n * @method\r\n * @memberof MultiStreamRecorder\r\n * @example\r\n * recorder.stop(function(blob) {\r\n * video.src = URL.createObjectURL(blob);\r\n * });\r\n */\r\n this.stop = function(callback) {\r\n if (!mediaRecorder) {\r\n return;\r\n }\r\n\r\n mediaRecorder.stop(function(blob) {\r\n self.blob = blob;\r\n\r\n callback(blob);\r\n\r\n self.clearRecordedData();\r\n });\r\n };\r\n\r\n /**\r\n * This method pauses the recording process.\r\n * @method\r\n * @memberof MultiStreamRecorder\r\n * @example\r\n * recorder.pause();\r\n */\r\n this.pause = function() {\r\n if (mediaRecorder) {\r\n mediaRecorder.pause();\r\n }\r\n };\r\n\r\n /**\r\n * This method resumes the recording process.\r\n * @method\r\n * @memberof MultiStreamRecorder\r\n * @example\r\n * recorder.resume();\r\n */\r\n this.resume = function() {\r\n if (mediaRecorder) {\r\n mediaRecorder.resume();\r\n }\r\n };\r\n\r\n /**\r\n * This method resets currently recorded data.\r\n * @method\r\n * @memberof MultiStreamRecorder\r\n * @example\r\n * recorder.clearRecordedData();\r\n */\r\n this.clearRecordedData = function() {\r\n if (mediaRecorder) {\r\n mediaRecorder.clearRecordedData();\r\n mediaRecorder = null;\r\n }\r\n\r\n if (mixer) {\r\n mixer.releaseStreams();\r\n mixer = null;\r\n }\r\n };\r\n\r\n /**\r\n * Add extra media-streams to existing recordings.\r\n * @method\r\n * @memberof MultiStreamRecorder\r\n * @param {MediaStreams} mediaStreams - Array of MediaStreams\r\n * @example\r\n * recorder.addStreams([newAudioStream, newVideoStream]);\r\n */\r\n this.addStreams = function(streams) {\r\n if (!streams) {\r\n throw 'First parameter is required.';\r\n }\r\n\r\n if (!(streams instanceof Array)) {\r\n streams = [streams];\r\n }\r\n\r\n arrayOfMediaStreams.concat(streams);\r\n\r\n if (!mediaRecorder || !mixer) {\r\n return;\r\n }\r\n\r\n mixer.appendStreams(streams);\r\n\r\n if (options.previewStream && typeof options.previewStream === 'function') {\r\n options.previewStream(mixer.getMixedStream());\r\n }\r\n };\r\n\r\n /**\r\n * Reset videos during live recording. Replace old videos e.g. replace cameras with full-screen.\r\n * @method\r\n * @memberof MultiStreamRecorder\r\n * @param {MediaStreams} mediaStreams - Array of MediaStreams\r\n * @example\r\n * recorder.resetVideoStreams([newVideo1, newVideo2]);\r\n */\r\n this.resetVideoStreams = function(streams) {\r\n if (!mixer) {\r\n return;\r\n }\r\n\r\n if (streams && !(streams instanceof Array)) {\r\n streams = [streams];\r\n }\r\n\r\n mixer.resetVideoStreams(streams);\r\n };\r\n\r\n /**\r\n * Returns MultiStreamsMixer\r\n * @method\r\n * @memberof MultiStreamRecorder\r\n * @example\r\n * let mixer = recorder.getMixer();\r\n * mixer.appendStreams([newStream]);\r\n */\r\n this.getMixer = function() {\r\n return mixer;\r\n };\r\n\r\n // for debugging\r\n this.name = 'MultiStreamRecorder';\r\n this.toString = function() {\r\n return this.name;\r\n };\r\n}\r\n\r\nif (typeof RecordRTC !== 'undefined') {\r\n RecordRTC.MultiStreamRecorder = MultiStreamRecorder;\r\n}\n\r\n// _____________________\r\n// RecordRTC.promises.js\r\n\r\n/**\r\n * RecordRTCPromisesHandler adds promises support in {@link RecordRTC}. Try a {@link https://github.com/muaz-khan/RecordRTC/blob/master/simple-demos/RecordRTCPromisesHandler.html|demo here}\r\n * @summary Promises for {@link RecordRTC}\r\n * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT}\r\n * @author {@link https://MuazKhan.com|Muaz Khan}\r\n * @typedef RecordRTCPromisesHandler\r\n * @class\r\n * @example\r\n * var recorder = new RecordRTCPromisesHandler(mediaStream, options);\r\n * recorder.startRecording()\r\n * .then(successCB)\r\n * .catch(errorCB);\r\n * // Note: You can access all RecordRTC API using \"recorder.recordRTC\" e.g. \r\n * recorder.recordRTC.onStateChanged = function(state) {};\r\n * recorder.recordRTC.setRecordingDuration(5000);\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n * @param {MediaStream} mediaStream - Single media-stream object, array of media-streams, html-canvas-element, etc.\r\n * @param {object} config - {type:\"video\", recorderType: MediaStreamRecorder, disableLogs: true, numberOfAudioChannels: 1, bufferSize: 0, sampleRate: 0, video: HTMLVideoElement, etc.}\r\n * @throws Will throw an error if \"new\" keyword is not used to initiate \"RecordRTCPromisesHandler\". Also throws error if first argument \"MediaStream\" is missing.\r\n * @requires {@link RecordRTC}\r\n */\r\n\r\nfunction RecordRTCPromisesHandler(mediaStream, options) {\r\n if (!this) {\r\n throw 'Use \"new RecordRTCPromisesHandler()\"';\r\n }\r\n\r\n if (typeof mediaStream === 'undefined') {\r\n throw 'First argument \"MediaStream\" is required.';\r\n }\r\n\r\n var self = this;\r\n\r\n /**\r\n * @property {Blob} blob - Access/reach the native {@link RecordRTC} object.\r\n * @memberof RecordRTCPromisesHandler\r\n * @example\r\n * let internal = recorder.recordRTC.getInternalRecorder();\r\n * alert(internal instanceof MediaStreamRecorder);\r\n * recorder.recordRTC.onStateChanged = function(state) {};\r\n */\r\n self.recordRTC = new RecordRTC(mediaStream, options);\r\n\r\n /**\r\n * This method records MediaStream.\r\n * @method\r\n * @memberof RecordRTCPromisesHandler\r\n * @example\r\n * recorder.startRecording()\r\n * .then(successCB)\r\n * .catch(errorCB);\r\n */\r\n this.startRecording = function() {\r\n return new Promise(function(resolve, reject) {\r\n try {\r\n self.recordRTC.startRecording();\r\n resolve();\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * This method stops the recording.\r\n * @method\r\n * @memberof RecordRTCPromisesHandler\r\n * @example\r\n * recorder.stopRecording().then(function() {\r\n * var blob = recorder.getBlob();\r\n * }).catch(errorCB);\r\n */\r\n this.stopRecording = function() {\r\n return new Promise(function(resolve, reject) {\r\n try {\r\n self.recordRTC.stopRecording(function(url) {\r\n self.blob = self.recordRTC.getBlob();\r\n\r\n if (!self.blob || !self.blob.size) {\r\n reject('Empty blob.', self.blob);\r\n return;\r\n }\r\n\r\n resolve(url);\r\n });\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * This method pauses the recording. You can resume recording using \"resumeRecording\" method.\r\n * @method\r\n * @memberof RecordRTCPromisesHandler\r\n * @example\r\n * recorder.pauseRecording()\r\n * .then(successCB)\r\n * .catch(errorCB);\r\n */\r\n this.pauseRecording = function() {\r\n return new Promise(function(resolve, reject) {\r\n try {\r\n self.recordRTC.pauseRecording();\r\n resolve();\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * This method resumes the recording.\r\n * @method\r\n * @memberof RecordRTCPromisesHandler\r\n * @example\r\n * recorder.resumeRecording()\r\n * .then(successCB)\r\n * .catch(errorCB);\r\n */\r\n this.resumeRecording = function() {\r\n return new Promise(function(resolve, reject) {\r\n try {\r\n self.recordRTC.resumeRecording();\r\n resolve();\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * This method returns data-url for the recorded blob.\r\n * @method\r\n * @memberof RecordRTCPromisesHandler\r\n * @example\r\n * recorder.stopRecording().then(function() {\r\n * recorder.getDataURL().then(function(dataURL) {\r\n * window.open(dataURL);\r\n * }).catch(errorCB);;\r\n * }).catch(errorCB);\r\n */\r\n this.getDataURL = function(callback) {\r\n return new Promise(function(resolve, reject) {\r\n try {\r\n self.recordRTC.getDataURL(function(dataURL) {\r\n resolve(dataURL);\r\n });\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * This method returns the recorded blob.\r\n * @method\r\n * @memberof RecordRTCPromisesHandler\r\n * @example\r\n * recorder.stopRecording().then(function() {\r\n * recorder.getBlob().then(function(blob) {})\r\n * }).catch(errorCB);\r\n */\r\n this.getBlob = function() {\r\n return new Promise(function(resolve, reject) {\r\n try {\r\n resolve(self.recordRTC.getBlob());\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * This method returns the internal recording object.\r\n * @method\r\n * @memberof RecordRTCPromisesHandler\r\n * @example\r\n * let internalRecorder = await recorder.getInternalRecorder();\r\n * if(internalRecorder instanceof MultiStreamRecorder) {\r\n * internalRecorder.addStreams([newAudioStream]);\r\n * internalRecorder.resetVideoStreams([screenStream]);\r\n * }\r\n * @returns {Object} \r\n */\r\n this.getInternalRecorder = function() {\r\n return new Promise(function(resolve, reject) {\r\n try {\r\n resolve(self.recordRTC.getInternalRecorder());\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * This method resets the recorder. So that you can reuse single recorder instance many times.\r\n * @method\r\n * @memberof RecordRTCPromisesHandler\r\n * @example\r\n * await recorder.reset();\r\n * recorder.startRecording(); // record again\r\n */\r\n this.reset = function() {\r\n return new Promise(function(resolve, reject) {\r\n try {\r\n resolve(self.recordRTC.reset());\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * Destroy RecordRTC instance. Clear all recorders and objects.\r\n * @method\r\n * @memberof RecordRTCPromisesHandler\r\n * @example\r\n * recorder.destroy().then(successCB).catch(errorCB);\r\n */\r\n this.destroy = function() {\r\n return new Promise(function(resolve, reject) {\r\n try {\r\n resolve(self.recordRTC.destroy());\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * Get recorder's readonly state.\r\n * @method\r\n * @memberof RecordRTCPromisesHandler\r\n * @example\r\n * let state = await recorder.getState();\r\n * // or\r\n * recorder.getState().then(state => { console.log(state); })\r\n * @returns {String} Returns recording state.\r\n */\r\n this.getState = function() {\r\n return new Promise(function(resolve, reject) {\r\n try {\r\n resolve(self.recordRTC.getState());\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * @property {Blob} blob - Recorded data as \"Blob\" object.\r\n * @memberof RecordRTCPromisesHandler\r\n * @example\r\n * await recorder.stopRecording();\r\n * let blob = recorder.getBlob(); // or \"recorder.recordRTC.blob\"\r\n * invokeSaveAsDialog(blob);\r\n */\r\n this.blob = null;\r\n\r\n /**\r\n * RecordRTC version number\r\n * @property {String} version - Release version number.\r\n * @memberof RecordRTCPromisesHandler\r\n * @static\r\n * @readonly\r\n * @example\r\n * alert(recorder.version);\r\n */\r\n this.version = '5.6.2';\r\n}\r\n\r\nif (typeof RecordRTC !== 'undefined') {\r\n RecordRTC.RecordRTCPromisesHandler = RecordRTCPromisesHandler;\r\n}\n\r\n// ______________________\r\n// WebAssemblyRecorder.js\r\n\r\n/**\r\n * WebAssemblyRecorder lets you create webm videos in JavaScript via WebAssembly. The library consumes raw RGBA32 buffers (4 bytes per pixel) and turns them into a webm video with the given framerate and quality. This makes it compatible out-of-the-box with ImageData from a CANVAS. With realtime mode you can also use webm-wasm for streaming webm videos.\r\n * @summary Video recording feature in Chrome, Firefox and maybe Edge.\r\n * @license {@link https://github.com/muaz-khan/RecordRTC/blob/master/LICENSE|MIT}\r\n * @author {@link https://MuazKhan.com|Muaz Khan}\r\n * @typedef WebAssemblyRecorder\r\n * @class\r\n * @example\r\n * var recorder = new WebAssemblyRecorder(mediaStream);\r\n * recorder.record();\r\n * recorder.stop(function(blob) {\r\n * video.src = URL.createObjectURL(blob);\r\n * });\r\n * @see {@link https://github.com/muaz-khan/RecordRTC|RecordRTC Source Code}\r\n * @param {MediaStream} mediaStream - MediaStream object fetched using getUserMedia API or generated using captureStreamUntilEnded or WebAudio API.\r\n * @param {object} config - {webAssemblyPath:'webm-wasm.wasm',workerPath: 'webm-worker.js', frameRate: 30, width: 1920, height: 1080, bitrate: 1024, realtime: true}\r\n */\r\nfunction WebAssemblyRecorder(stream, config) {\r\n // based on: github.com/GoogleChromeLabs/webm-wasm\r\n\r\n if (typeof ReadableStream === 'undefined' || typeof WritableStream === 'undefined') {\r\n // because it fixes readable/writable streams issues\r\n console.error('Following polyfill is strongly recommended: https://unpkg.com/@mattiasbuelens/web-streams-polyfill/dist/polyfill.min.js');\r\n }\r\n\r\n config = config || {};\r\n\r\n config.width = config.width || 640;\r\n config.height = config.height || 480;\r\n config.frameRate = config.frameRate || 30;\r\n config.bitrate = config.bitrate || 1200;\r\n config.realtime = config.realtime || true;\r\n\r\n function createBufferURL(buffer, type) {\r\n return URL.createObjectURL(new Blob([buffer], {\r\n type: type || ''\r\n }));\r\n }\r\n\r\n var finished;\r\n\r\n function cameraStream() {\r\n return new ReadableStream({\r\n start: function(controller) {\r\n var cvs = document.createElement('canvas');\r\n var video = document.createElement('video');\r\n var first = true;\r\n video.srcObject = stream;\r\n video.muted = true;\r\n video.height = config.height;\r\n video.width = config.width;\r\n video.volume = 0;\r\n video.onplaying = function() {\r\n cvs.width = config.width;\r\n cvs.height = config.height;\r\n var ctx = cvs.getContext('2d');\r\n var frameTimeout = 1000 / config.frameRate;\r\n var cameraTimer = setInterval(function f() {\r\n if (finished) {\r\n clearInterval(cameraTimer);\r\n controller.close();\r\n }\r\n\r\n if (first) {\r\n first = false;\r\n if (config.onVideoProcessStarted) {\r\n config.onVideoProcessStarted();\r\n }\r\n }\r\n\r\n ctx.drawImage(video, 0, 0);\r\n if (controller._controlledReadableStream.state !== 'closed') {\r\n try {\r\n controller.enqueue(\r\n ctx.getImageData(0, 0, config.width, config.height)\r\n );\r\n } catch (e) {}\r\n }\r\n }, frameTimeout);\r\n };\r\n video.play();\r\n }\r\n });\r\n }\r\n\r\n var worker;\r\n\r\n function startRecording(stream, buffer) {\r\n if (!config.workerPath && !buffer) {\r\n finished = false;\r\n\r\n // is it safe to use @latest ?\r\n\r\n fetch(\r\n 'https://unpkg.com/webm-wasm@latest/dist/webm-worker.js'\r\n ).then(function(r) {\r\n r.arrayBuffer().then(function(buffer) {\r\n startRecording(stream, buffer);\r\n });\r\n });\r\n return;\r\n }\r\n\r\n if (!config.workerPath && buffer instanceof ArrayBuffer) {\r\n var blob = new Blob([buffer], {\r\n type: 'text/javascript'\r\n });\r\n config.workerPath = URL.createObjectURL(blob);\r\n }\r\n\r\n if (!config.workerPath) {\r\n console.error('workerPath parameter is missing.');\r\n }\r\n\r\n worker = new Worker(config.workerPath);\r\n\r\n worker.postMessage(config.webAssemblyPath || 'https://unpkg.com/webm-wasm@latest/dist/webm-wasm.wasm');\r\n worker.addEventListener('message', function(event) {\r\n if (event.data === 'READY') {\r\n worker.postMessage({\r\n width: config.width,\r\n height: config.height,\r\n bitrate: config.bitrate || 1200,\r\n timebaseDen: config.frameRate || 30,\r\n realtime: config.realtime\r\n });\r\n\r\n cameraStream().pipeTo(new WritableStream({\r\n write: function(image) {\r\n if (finished) {\r\n console.error('Got image, but recorder is finished!');\r\n return;\r\n }\r\n\r\n worker.postMessage(image.data.buffer, [image.data.buffer]);\r\n }\r\n }));\r\n } else if (!!event.data) {\r\n if (!isPaused) {\r\n arrayOfBuffers.push(event.data);\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * This method records video.\r\n * @method\r\n * @memberof WebAssemblyRecorder\r\n * @example\r\n * recorder.record();\r\n */\r\n this.record = function() {\r\n arrayOfBuffers = [];\r\n isPaused = false;\r\n this.blob = null;\r\n startRecording(stream);\r\n\r\n if (typeof config.initCallback === 'function') {\r\n config.initCallback();\r\n }\r\n };\r\n\r\n var isPaused;\r\n\r\n /**\r\n * This method pauses the recording process.\r\n * @method\r\n * @memberof WebAssemblyRecorder\r\n * @example\r\n * recorder.pause();\r\n */\r\n this.pause = function() {\r\n isPaused = true;\r\n };\r\n\r\n /**\r\n * This method resumes the recording process.\r\n * @method\r\n * @memberof WebAssemblyRecorder\r\n * @example\r\n * recorder.resume();\r\n */\r\n this.resume = function() {\r\n isPaused = false;\r\n };\r\n\r\n function terminate(callback) {\r\n if (!worker) {\r\n if (callback) {\r\n callback();\r\n }\r\n\r\n return;\r\n }\r\n\r\n // Wait for null event data to indicate that the encoding is complete\r\n worker.addEventListener('message', function(event) {\r\n if (event.data === null) {\r\n worker.terminate();\r\n worker = null;\r\n\r\n if (callback) {\r\n callback();\r\n }\r\n }\r\n });\r\n\r\n worker.postMessage(null);\r\n }\r\n\r\n var arrayOfBuffers = [];\r\n\r\n /**\r\n * This method stops recording video.\r\n * @param {function} callback - Callback function, that is used to pass recorded blob back to the callee.\r\n * @method\r\n * @memberof WebAssemblyRecorder\r\n * @example\r\n * recorder.stop(function(blob) {\r\n * video.src = URL.createObjectURL(blob);\r\n * });\r\n */\r\n this.stop = function(callback) {\r\n finished = true;\r\n\r\n var recorder = this;\r\n\r\n terminate(function() {\r\n recorder.blob = new Blob(arrayOfBuffers, {\r\n type: 'video/webm'\r\n });\r\n\r\n callback(recorder.blob);\r\n });\r\n };\r\n\r\n // for debugging\r\n this.name = 'WebAssemblyRecorder';\r\n this.toString = function() {\r\n return this.name;\r\n };\r\n\r\n /**\r\n * This method resets currently recorded data.\r\n * @method\r\n * @memberof WebAssemblyRecorder\r\n * @example\r\n * recorder.clearRecordedData();\r\n */\r\n this.clearRecordedData = function() {\r\n arrayOfBuffers = [];\r\n isPaused = false;\r\n this.blob = null;\r\n\r\n // todo: if recording-ON then STOP it first\r\n };\r\n\r\n /**\r\n * @property {Blob} blob - The recorded blob object.\r\n * @memberof WebAssemblyRecorder\r\n * @example\r\n * recorder.stop(function(){\r\n * var blob = recorder.blob;\r\n * });\r\n */\r\n this.blob = null;\r\n}\r\n\r\nif (typeof RecordRTC !== 'undefined') {\r\n RecordRTC.WebAssemblyRecorder = WebAssemblyRecorder;\r\n}\n","import {downloadRecord} from \"../utils\";\nimport RecordRTC from 'recordrtc';\nimport {EVENTS, FILE_SUFFIX} from \"../constant\";\nimport Emitter from \"../utils/emitter\";\n\nexport default class RecordRTCLoader extends Emitter {\n constructor(player) {\n super();\n this.player = player;\n this.fileName = '';\n this.fileType = FILE_SUFFIX.webm;\n this.isRecording = false;\n this.recordingTimestamp = 0;\n this.recordingInterval = null;\n player.debug.log('Recorder', 'init');\n }\n\n destroy() {\n this._reset();\n this.player.debug.log('Recorder', 'destroy');\n }\n\n setFileName(fileName, fileType) {\n this.fileName = fileName;\n\n if (FILE_SUFFIX.mp4 === fileType || FILE_SUFFIX.webm === fileType) {\n this.fileType = fileType;\n }\n }\n\n get recording() {\n return this.isRecording;\n }\n\n get recordTime() {\n return this.recordingTimestamp;\n }\n\n startRecord() {\n const debug = this.player.debug;\n const options = {\n type: 'video',\n mimeType: 'video/webm;codecs=h264',\n onTimeStamp: (timestamp) => {\n debug.log('Recorder', 'record timestamp :' + timestamp);\n },\n disableLogs: !this.player._opt.debug\n }\n\n try {\n const stream = this.player.video.$videoElement.captureStream(25);\n if (this.player.audio && this.player.audio.mediaStreamAudioDestinationNode &&\n this.player.audio.mediaStreamAudioDestinationNode.stream &&\n !this.player.audio.isStateSuspended() &&\n this.player.audio.hasAudio && this.player._opt.hasAudio) {\n const audioStream = this.player.audio.mediaStreamAudioDestinationNode.stream;\n if (audioStream.getAudioTracks().length > 0) {\n const audioTrack = audioStream.getAudioTracks()[0];\n if (audioTrack && audioTrack.enabled) {\n stream.addTrack(audioTrack);\n }\n }\n }\n this.recorder = RecordRTC(stream, options);\n } catch (e) {\n debug.error('Recorder', e);\n this.emit(EVENTS.recordCreateError);\n }\n if (this.recorder) {\n this.isRecording = true;\n this.player.emit(EVENTS.recording, true);\n this.recorder.startRecording();\n debug.log('Recorder', 'start recording');\n this.player.emit(EVENTS.recordStart);\n this.recordingInterval = window.setInterval(() => {\n this.recordingTimestamp += 1;\n this.player.emit(EVENTS.recordingTimestamp, this.recordingTimestamp);\n }, 1000);\n }\n }\n\n stopRecordAndSave() {\n if (!this.recorder || !this.isRecording) {\n return;\n }\n this.recorder.stopRecording(() => {\n this.player.debug.log('Recorder', 'stop recording');\n this.player.emit(EVENTS.recordEnd)\n downloadRecord(this.recorder.getBlob(), this.fileName, this.fileType);\n this._reset();\n this.player.emit(EVENTS.recording, false);\n })\n }\n\n _reset() {\n this.isRecording = false;\n this.recordingTimestamp = 0;\n\n if (this.recorder) {\n this.recorder.destroy();\n this.recorder = null;\n }\n this.fileName = null;\n if (this.recordingInterval) {\n clearInterval(this.recordingInterval);\n }\n this.recordingInterval = null;\n }\n\n\n}\n","import RecordRTCLoader from \"./recordRTCLoader\";\n\nexport default class Recorder {\n constructor(player) {\n const Loader = Recorder.getLoaderFactory();\n return new Loader(player);\n }\n\n static getLoaderFactory() {\n return RecordRTCLoader;\n }\n}\n","import {EVENTS, EVENTS_ERROR, MEDIA_TYPE, WASM_ERROR, WORKER_CMD_TYPE, WORKER_SEND_TYPE} from \"../constant\";\nimport {now} from \"../utils\";\n\nexport default class DecoderWorker {\n constructor(player) {\n this.player = player;\n this.decoderWorker = new Worker(player._opt.decoder)\n this._initDecoderWorker();\n player.debug.log('decoderWorker', 'init')\n }\n\n destroy() {\n this.decoderWorker.postMessage({cmd: WORKER_SEND_TYPE.close})\n this.decoderWorker.terminate();\n this.decoderWorker = null;\n this.player.debug.log(`decoderWorker`, 'destroy');\n }\n\n _initDecoderWorker() {\n const {\n debug,\n events: {proxy},\n } = this.player;\n\n this.decoderWorker.onmessage = (event) => {\n const msg = event.data;\n switch (msg.cmd) {\n case WORKER_CMD_TYPE.init:\n debug.log(`decoderWorker`, 'onmessage:', WORKER_CMD_TYPE.init);\n if (!this.player.loaded) {\n this.player.emit(EVENTS.load);\n }\n this.player.emit(EVENTS.decoderWorkerInit);\n this._initWork();\n break;\n case WORKER_CMD_TYPE.videoCode:\n debug.log(`decoderWorker`, 'onmessage:', WORKER_CMD_TYPE.videoCode, msg.code);\n if (!this.player._times.decodeStart) {\n this.player._times.decodeStart = now();\n }\n this.player.video.updateVideoInfo({\n encTypeCode: msg.code\n })\n break;\n case WORKER_CMD_TYPE.audioCode:\n debug.log(`decoderWorker`, 'onmessage:', WORKER_CMD_TYPE.audioCode, msg.code);\n this.player.audio && this.player.audio.updateAudioInfo({\n encTypeCode: msg.code\n })\n break;\n case WORKER_CMD_TYPE.initVideo:\n debug.log(`decoderWorker`, 'onmessage:', WORKER_CMD_TYPE.initVideo, `width:${msg.w},height:${msg.h}`);\n this.player.video.updateVideoInfo({\n width: msg.w,\n height: msg.h\n })\n this.player.video.initCanvasViewSize();\n break;\n case WORKER_CMD_TYPE.initAudio:\n debug.log(`decoderWorker`, 'onmessage:', WORKER_CMD_TYPE.initAudio, `channels:${msg.channels},sampleRate:${msg.sampleRate}`);\n if (this.player.audio) {\n this.player.audio.updateAudioInfo(msg);\n this.player.audio.initScriptNode(msg);\n }\n break;\n case WORKER_CMD_TYPE.render:\n // debug.log(`decoderWorker`, 'onmessage:', WORKER_CMD_TYPE.render, `msg ts:${msg.ts}`);\n this.player.handleRender();\n this.player.video.render(msg);\n this.player.emit(EVENTS.timeUpdate, msg.ts)\n this.player.updateStats({fps: true, ts: msg.ts, buf: msg.delay})\n if (!this.player._times.videoStart) {\n this.player._times.videoStart = now();\n this.player.handlePlayToRenderTimes();\n }\n break;\n case WORKER_CMD_TYPE.playAudio:\n // debug.log(`decoderWorker`, 'onmessage:', WORKER_CMD_TYPE.playAudio, `msg ts:${msg.ts}`);\n // 只有在 playing 的时候。\n if (this.player.playing && this.player.audio) {\n this.player.audio.play(msg.buffer, msg.ts);\n }\n break;\n case WORKER_CMD_TYPE.wasmError:\n if (msg.message) {\n if (msg.message.indexOf(WASM_ERROR.invalidNalUnitSize) !== -1) {\n this.player.emit(EVENTS.error, EVENTS_ERROR.wasmDecodeError);\n this.player.emit(EVENTS_ERROR.wasmDecodeError);\n }\n }\n break;\n default:\n this.player[msg.cmd] && this.player[msg.cmd](msg);\n }\n }\n }\n\n _initWork() {\n const opt = {\n debug: this.player._opt.debug,\n forceNoOffscreen: this.player._opt.forceNoOffscreen,\n useWCS: this.player._opt.useWCS,\n videoBuffer: this.player._opt.videoBuffer,\n openWebglAlignment: this.player._opt.openWebglAlignment\n }\n this.decoderWorker.postMessage({\n cmd: WORKER_SEND_TYPE.init,\n opt: JSON.stringify(opt),\n sampleRate: (this.player.audio && this.player.audio.audioContext.sampleRate) || 0\n })\n }\n\n decodeVideo(arrayBuffer, ts, isIFrame) {\n\n const options = {\n type: MEDIA_TYPE.video,\n ts: Math.max(ts, 0),\n isIFrame\n }\n // this.player.debug.log('decoderWorker', 'decodeVideo', options);\n this.decoderWorker.postMessage({\n cmd: WORKER_SEND_TYPE.decode,\n buffer: arrayBuffer,\n options\n }, [arrayBuffer.buffer])\n }\n\n decodeAudio(arrayBuffer, ts) {\n if (this.player._opt.useWCS && !this.player._opt.useOffscreen) {\n this._decodeAudioNoDelay(arrayBuffer, ts);\n } else if (this.player._opt.useMSE) {\n this._decodeAudioNoDelay(arrayBuffer, ts);\n } else {\n this._decodeAudio(arrayBuffer, ts);\n }\n }\n\n //\n _decodeAudio(arrayBuffer, ts) {\n const options = {\n type: MEDIA_TYPE.audio,\n ts: Math.max(ts, 0)\n }\n // this.player.debug.log('decoderWorker', 'decodeAudio',options);\n this.decoderWorker.postMessage({\n cmd: WORKER_SEND_TYPE.decode,\n buffer: arrayBuffer,\n options\n }, [arrayBuffer.buffer])\n }\n\n\n _decodeAudioNoDelay(arrayBuffer, ts) {\n // console.log('_decodeAudioNoDelay', arrayBuffer);\n this.decoderWorker.postMessage({\n cmd: WORKER_SEND_TYPE.audioDecode,\n buffer: arrayBuffer,\n ts: Math.max(ts, 0)\n }, [arrayBuffer.buffer])\n }\n\n\n updateWorkConfig(config) {\n this.decoderWorker.postMessage({\n cmd: WORKER_SEND_TYPE.updateConfig,\n key: config.key,\n value: config.value\n })\n }\n\n}\n","import Emitter from \"../utils/emitter\";\nimport {MEDIA_TYPE} from \"../constant\";\n\nexport default class CommonLoader extends Emitter {\n constructor(player) {\n super();\n this.player = player;\n\n this.stopId = null;\n this.firstTimestamp = null;\n this.startTimestamp = null;\n this.delay = -1;\n this.bufferList = [];\n this.dropping = false;\n this.initInterval();\n }\n\n destroy() {\n if (this.stopId) {\n clearInterval(this.stopId);\n this.stopId = null;\n }\n this.firstTimestamp = null;\n this.startTimestamp = null;\n this.delay = -1;\n this.bufferList = [];\n this.dropping = false;\n this.off();\n }\n\n getDelay(timestamp) {\n if (!timestamp) {\n return -1\n }\n if (!this.firstTimestamp) {\n this.firstTimestamp = timestamp\n this.startTimestamp = Date.now()\n this.delay = -1;\n } else {\n if (timestamp) {\n this.delay = (Date.now() - this.startTimestamp) - (timestamp - this.firstTimestamp)\n }\n }\n return this.delay\n }\n\n resetDelay() {\n this.firstTimestamp = null;\n this.startTimestamp = null;\n this.delay = -1;\n this.dropping = false;\n }\n\n //\n initInterval() {\n this.player.debug.log('common dumex', `init Interval`);\n let _loop = () => {\n let data;\n const videoBuffer = this.player._opt.videoBuffer;\n if (this.bufferList.length) {\n if (this.dropping) {\n // this.player.debug.log('common dumex', `is dropping`);\n data = this.bufferList.shift();\n if (data.type === MEDIA_TYPE.audio && data.payload[1] === 0) {\n this._doDecoderDecode(data);\n }\n while (!data.isIFrame && this.bufferList.length) {\n data = this.bufferList.shift();\n if (data.type === MEDIA_TYPE.audio && data.payload[1] === 0) {\n this._doDecoderDecode(data);\n }\n }\n // i frame\n if (data.isIFrame) {\n this.dropping = false;\n this._doDecoderDecode(data);\n }\n } else {\n data = this.bufferList[0];\n if (this.getDelay(data.ts) === -1) {\n // this.player.debug.log('common dumex', `delay is -1`);\n this.bufferList.shift()\n this._doDecoderDecode(data);\n } else if (this.delay > videoBuffer + 1000) {\n // this.player.debug.log('common dumex', `delay is ${this.delay}, set dropping is true`);\n this.resetDelay();\n this.dropping = true\n } else {\n while (this.bufferList.length) {\n data = this.bufferList[0]\n\n if (this.getDelay(data.ts) > videoBuffer) {\n // drop frame\n this.bufferList.shift()\n this._doDecoderDecode(data);\n } else {\n // this.player.debug.log('common dumex', `delay is ${this.delay}`);\n break;\n }\n }\n }\n }\n }\n }\n _loop();\n this.stopId = setInterval(_loop, 10)\n }\n\n _doDecode(payload, type, ts, isIFrame) {\n const player = this.player;\n let options = {\n ts: ts,\n type: type,\n isIFrame: false\n }\n // use offscreen\n if (player._opt.useWCS && !player._opt.useOffscreen) {\n if (type === MEDIA_TYPE.video) {\n options.isIFrame = isIFrame;\n }\n this.pushBuffer(payload, options)\n } else if (player._opt.useMSE) {\n // use mse\n if (type === MEDIA_TYPE.video) {\n options.isIFrame = isIFrame;\n }\n this.pushBuffer(payload, options)\n } else {\n //\n if (type === MEDIA_TYPE.video) {\n player.decoderWorker && player.decoderWorker.decodeVideo(payload, ts, isIFrame);\n } else if (type === MEDIA_TYPE.audio) {\n if (player._opt.hasAudio) {\n player.decoderWorker && player.decoderWorker.decodeAudio(payload, ts);\n }\n }\n }\n }\n\n _doDecoderDecode(data) {\n const player = this.player;\n const {webcodecsDecoder, mseDecoder} = player;\n\n if (data.type === MEDIA_TYPE.audio) {\n if (player._opt.hasAudio) {\n player.decoderWorker && player.decoderWorker.decodeAudio(data.payload, data.ts)\n }\n } else if (data.type === MEDIA_TYPE.video) {\n if (player._opt.useWCS && !player._opt.useOffscreen) {\n webcodecsDecoder.decodeVideo(data.payload, data.ts, data.isIFrame);\n } else if (player._opt.useMSE) {\n mseDecoder.decodeVideo(data.payload, data.ts, data.isIFrame);\n }\n }\n }\n\n pushBuffer(payload, options) {\n // 音频\n if (options.type === MEDIA_TYPE.audio) {\n this.bufferList.push({\n ts: options.ts,\n payload: payload,\n type: MEDIA_TYPE.audio,\n })\n } else if (options.type === MEDIA_TYPE.video) {\n this.bufferList.push({\n ts: options.ts,\n payload: payload,\n type: MEDIA_TYPE.video,\n isIFrame: options.isIFrame\n })\n }\n }\n\n close() {\n\n }\n\n\n}\n","import {FLV_MEDIA_TYPE, MEDIA_TYPE} from \"../constant\";\nimport CommonLoader from \"./commonLoader\";\nimport {now} from \"../utils\";\n\nexport default class FlvLoader extends CommonLoader {\n constructor(player) {\n super(player);\n this.input = this._inputFlv();\n this.flvDemux = this.dispatchFlvData(this.input);\n player.debug.log('FlvDemux', 'init')\n }\n\n destroy() {\n super.destroy();\n this.input = null;\n this.flvDemux = null;\n this.player.debug.log('FlvDemux', 'destroy')\n }\n\n dispatch(data) {\n this.flvDemux(data);\n }\n\n * _inputFlv() {\n yield 9;\n const tmp = new ArrayBuffer(4)\n const tmp8 = new Uint8Array(tmp)\n const tmp32 = new Uint32Array(tmp)\n const player = this.player;\n\n while (true) {\n tmp8[3] = 0\n const t = yield 15\n const type = t[4]\n tmp8[0] = t[7]\n tmp8[1] = t[6]\n tmp8[2] = t[5]\n const length = tmp32[0]\n tmp8[0] = t[10]\n tmp8[1] = t[9]\n tmp8[2] = t[8]\n let ts = tmp32[0]\n if (ts === 0xFFFFFF) {\n tmp8[3] = t[11]\n ts = tmp32[0]\n }\n const payload = yield length\n switch (type) {\n case FLV_MEDIA_TYPE.audio:\n if (player._opt.hasAudio) {\n player.updateStats({\n abps: payload.byteLength\n })\n if (payload.byteLength > 0) {\n this._doDecode(payload, MEDIA_TYPE.audio, ts)\n }\n }\n break\n case FLV_MEDIA_TYPE.video:\n if (!player._times.demuxStart) {\n player._times.demuxStart = now();\n }\n if (player._opt.hasVideo) {\n player.updateStats({\n vbps: payload.byteLength\n })\n const isIFrame = payload[0] >> 4 === 1;\n if (payload.byteLength > 0) {\n this._doDecode(payload, MEDIA_TYPE.video, ts, isIFrame);\n }\n }\n break\n }\n }\n }\n\n dispatchFlvData(input) {\n let need = input.next()\n let buffer = null\n return (value) => {\n let data = new Uint8Array(value)\n if (buffer) {\n let combine = new Uint8Array(buffer.length + data.length)\n combine.set(buffer)\n combine.set(data, buffer.length)\n data = combine\n buffer = null\n }\n while (data.length >= need.value) {\n let remain = data.slice(need.value)\n need = input.next(data.slice(0, need.value))\n data = remain\n }\n if (data.length > 0) {\n buffer = data\n }\n }\n }\n\n close() {\n this.input && this.input.return(null)\n }\n\n\n}\n","import {FLV_MEDIA_TYPE, MEDIA_TYPE} from \"../constant\";\nimport CommonLoader from \"./commonLoader\";\nimport {now} from \"../utils\";\n\nexport default class M7sLoader extends CommonLoader {\n constructor(player) {\n super(player);\n player.debug.log('M7sDemux', 'init')\n }\n\n destroy() {\n super.destroy();\n this.player.debug.log('M7sDemux', 'destroy')\n }\n\n dispatch(data) {\n const player = this.player;\n const dv = new DataView(data)\n const type = dv.getUint8(0);\n const ts = dv.getUint32(1, false);\n switch (type) {\n case MEDIA_TYPE.audio:\n if (player._opt.hasAudio) {\n const payload = new Uint8Array(data, 5)\n player.updateStats({\n abps: payload.byteLength\n })\n if (payload.byteLength > 0) {\n this._doDecode(payload, type, ts)\n }\n }\n break;\n case MEDIA_TYPE.video:\n if (player._opt.hasVideo) {\n if (!player._times.demuxStart) {\n player._times.demuxStart = now();\n }\n if (dv.byteLength > 5) {\n const payload = new Uint8Array(data, 5);\n const isIframe = dv.getUint8(5) >> 4 === 1;\n player.updateStats({\n vbps: payload.byteLength\n })\n if (payload.byteLength > 0) {\n this._doDecode(payload, type, ts, isIframe)\n }\n }\n }\n break;\n }\n }\n\n\n}\n","import FlvLoader from \"./flvLoader\";\nimport M7sLoader from \"./m7sLoader\";\nimport {DEMUX_TYPE} from \"../constant\";\n\nexport default class Demux {\n constructor(player) {\n const Loader = Demux.getLoaderFactory(player._opt.demuxType);\n return new Loader(player);\n }\n\n static getLoaderFactory(type) {\n if (type === DEMUX_TYPE.m7s) {\n return M7sLoader;\n } else if (type === DEMUX_TYPE.flv) {\n return FlvLoader;\n }\n }\n}\n","import {formatVideoDecoderConfigure, noop, now} from \"../utils\";\nimport Emitter from \"../utils/emitter\";\nimport {ENCODED_VIDEO_TYPE, EVENTS, EVENTS_ERROR, VIDEO_ENC_CODE} from \"../constant\";\n\n\nexport default class WebcodecsDecoder extends Emitter {\n constructor(player) {\n super();\n this.player = player;\n this.hasInit = false;\n this.isInitInfo = false;\n this.decoder = null;\n this.initDecoder();\n player.debug.log('Webcodecs', 'init')\n }\n\n destroy() {\n if (this.decoder) {\n this.decoder.close();\n this.decoder = null;\n }\n\n this.hasInit = false;\n this.isInitInfo = false;\n this.off();\n this.player.debug.log('Webcodecs', 'destroy')\n }\n\n initDecoder() {\n const _this = this;\n this.decoder = new VideoDecoder({\n output(videoFrame) {\n _this.handleDecode(videoFrame)\n },\n error(error) {\n _this.handleError(error)\n }\n })\n }\n\n handleDecode(videoFrame) {\n if (!this.isInitInfo) {\n this.player.video.updateVideoInfo({\n width: videoFrame.codedWidth,\n height: videoFrame.codedHeight\n })\n this.player.video.initCanvasViewSize();\n this.isInitInfo = true;\n }\n\n if (!this.player._times.videoStart) {\n this.player._times.videoStart = now();\n this.player.handlePlayToRenderTimes();\n }\n\n this.player.handleRender();\n this.player.video.render({\n videoFrame\n })\n\n this.player.updateStats({fps: true, ts: 0, buf: this.player.demux.delay})\n\n // release resource\n setTimeout(function () {\n if (videoFrame.close) {\n videoFrame.close()\n } else {\n videoFrame.destroy()\n }\n }, 100)\n }\n\n handleError(error) {\n this.player.debug.log('Webcodecs', 'VideoDecoder handleError', error)\n }\n\n decodeVideo(payload, ts, isIframe) {\n // this.player.debug.log('Webcodecs decoder', 'decodeVideo', ts, isIframe);\n if (!this.hasInit) {\n if (isIframe && payload[1] === 0) {\n const videoCodec = (payload[0] & 0x0F);\n this.player.video.updateVideoInfo({\n encTypeCode: videoCodec\n })\n\n // 如果解码出来的是\n if (videoCodec === VIDEO_ENC_CODE.h265) {\n this.emit(EVENTS_ERROR.webcodecsH265NotSupport)\n return;\n }\n if (!this.player._times.decodeStart) {\n this.player._times.decodeStart = now();\n }\n\n const config = formatVideoDecoderConfigure(payload.slice(5));\n this.decoder.configure(config);\n this.hasInit = true;\n }\n } else {\n const chunk = new EncodedVideoChunk({\n data: payload.slice(5),\n timestamp: ts,\n type: isIframe ? ENCODED_VIDEO_TYPE.key : ENCODED_VIDEO_TYPE.delta\n })\n this.decoder.decode(chunk);\n }\n }\n\n\n}\n","const iconsMap = {\n play: '播放',\n pause: '暂停',\n audio: '',\n mute: '',\n screenshot: '截图',\n loading: '加载',\n fullscreen: '全屏',\n fullscreenExit: '退出全屏',\n record: '录制',\n recordStop: '停止录制',\n}\n\nexport default Object.keys(iconsMap).reduce((icons, key) => {\n icons[key] = `\n \n ${iconsMap[key] ? `${iconsMap[key]}` : ''}\n`;\n return icons;\n}, {});\n","import icons from './icons';\n\nexport default (player, control) => {\n\n if (player._opt.hasControl && player._opt.controlAutoHide) {\n player.$container.classList.add('jessibuca-controls-show-auto-hide');\n }\n else {\n player.$container.classList.add('jessibuca-controls-show');\n }\n const options = player._opt;\n const operateBtns = options.operateBtns;\n\n\n player.$container.insertAdjacentHTML(\n 'beforeend',\n `\n ${options.background ? `
` : ''}\n
\n ${icons.loading}\n ${options.loadingText ? `
${options.loadingText}
` : ''}\n
\n ${options.hasControl && operateBtns.play ? `
` : ''}\n ${options.hasControl ? `\n
\n
\n
00:00:01
\n
${icons.recordStop}
\n
\n `:''}\n ${options.hasControl ? `\n
\n
\n
\n ${options.showBandwidth ? `
` : ''}\n
\n
\n ${operateBtns.audio ? `\n
\n ${icons.audio}\n ${icons.mute}\n
\n
\n
\n
\n
\n
\n
\n ` : ''}\n ${operateBtns.play ? `
${icons.play}
${icons.pause}
` : ''}\n ${operateBtns.screenshot ? `
${icons.screenshot}
` : ''}\n ${operateBtns.record ? `
${icons.record}
${icons.recordStop}
` : ''}\n ${operateBtns.fullscreen ? `
${icons.fullscreen}
${icons.fullscreenExit}
` : ''}\n
\n
\n
\n ` : ''}\n\n `\n )\n\n Object.defineProperty(control, '$poster', {\n value: player.$container.querySelector('.jessibuca-poster'),\n });\n\n Object.defineProperty(control, '$loading', {\n value: player.$container.querySelector('.jessibuca-loading'),\n });\n\n Object.defineProperty(control, '$play', {\n value: player.$container.querySelector('.jessibuca-play'),\n });\n\n Object.defineProperty(control, '$playBig', {\n value: player.$container.querySelector('.jessibuca-play-big'),\n });\n\n Object.defineProperty(control, '$recording', {\n value: player.$container.querySelector('.jessibuca-recording'),\n });\n Object.defineProperty(control, '$recordingTime', {\n value: player.$container.querySelector('.jessibuca-recording-time'),\n });\n\n Object.defineProperty(control, '$recordingStop', {\n value: player.$container.querySelector('.jessibuca-recording-stop'),\n });\n\n Object.defineProperty(control, '$pause', {\n value: player.$container.querySelector('.jessibuca-pause'),\n });\n\n Object.defineProperty(control, '$controls', {\n value: player.$container.querySelector('.jessibuca-controls'),\n });\n\n Object.defineProperty(control, '$fullscreen', {\n value: player.$container.querySelector('.jessibuca-fullscreen'),\n });\n\n Object.defineProperty(control, '$fullscreen', {\n value: player.$container.querySelector('.jessibuca-fullscreen'),\n });\n\n\n Object.defineProperty(control, '$volume', {\n value: player.$container.querySelector('.jessibuca-volume'),\n });\n\n Object.defineProperty(control, '$volumePanelWrap', {\n value: player.$container.querySelector('.jessibuca-volume-panel-wrap'),\n });\n\n Object.defineProperty(control, '$volumePanelText', {\n value: player.$container.querySelector('.jessibuca-volume-panel-text'),\n });\n\n Object.defineProperty(control, '$volumePanel', {\n value: player.$container.querySelector('.jessibuca-volume-panel'),\n });\n\n Object.defineProperty(control, '$volumeHandle', {\n value: player.$container.querySelector('.jessibuca-volume-panel-handle'),\n });\n\n Object.defineProperty(control, '$volumeOn', {\n value: player.$container.querySelector('.jessibuca-icon-audio'),\n });\n\n Object.defineProperty(control, '$volumeOff', {\n value: player.$container.querySelector('.jessibuca-icon-mute'),\n });\n\n\n Object.defineProperty(control, '$fullscreen', {\n value: player.$container.querySelector('.jessibuca-fullscreen'),\n });\n\n Object.defineProperty(control, '$fullscreenExit', {\n value: player.$container.querySelector('.jessibuca-fullscreen-exit'),\n });\n\n Object.defineProperty(control, '$record', {\n value: player.$container.querySelector('.jessibuca-record'),\n });\n Object.defineProperty(control, '$recordStop', {\n value: player.$container.querySelector('.jessibuca-record-stop'),\n });\n\n Object.defineProperty(control, '$screenshot', {\n value: player.$container.querySelector('.jessibuca-screenshot'),\n });\n\n Object.defineProperty(control, '$speed', {\n value: player.$container.querySelector('.jessibuca-speed'),\n });\n}\n","import {EVENTS} from \"../constant\";\nimport {bpsSize, formatTimeTips, getStyle, isBoolean, setStyle} from \"../utils\";\nimport screenfull from \"screenfull\";\n\nexport default (player, control) => {\n const {\n events: {proxy},\n } = player;\n\n const object = document.createElement('object');\n object.setAttribute('aria-hidden', 'true');\n object.setAttribute('tabindex', -1);\n object.type = 'text/html';\n object.data = 'about:blank';\n\n setStyle(object, {\n display: 'block',\n position: 'absolute',\n top: '0',\n left: '0',\n height: '100%',\n width: '100%',\n overflow: 'hidden',\n pointerEvents: 'none',\n zIndex: '-1',\n });\n\n let playerWidth = player.width;\n let playerHeight = player.height;\n\n proxy(object, 'load', () => {\n proxy(object.contentDocument.defaultView, 'resize', () => {\n if (player.width !== playerWidth || player.height !== playerHeight) {\n playerWidth = player.width;\n playerHeight = player.height;\n player.emit(EVENTS.resize);\n }\n });\n });\n player.$container.appendChild(object);\n\n player.on(EVENTS.destroy, () => {\n player.$container.removeChild(object);\n })\n\n function setVolumeHandle(percentage) {\n if (percentage === 0) {\n setStyle(control.$volumeOn, 'display', 'none');\n setStyle(control.$volumeOff, 'display', 'flex');\n setStyle(control.$volumeHandle, 'top', `${48}px`);\n } else {\n if (control.$volumeHandle && control.$volumePanel) {\n const panelHeight = getStyle(control.$volumePanel, 'height') || 60;\n const handleHeight = getStyle(control.$volumeHandle, 'height');\n const top = panelHeight - (panelHeight - handleHeight) * percentage - handleHeight;\n setStyle(control.$volumeHandle, 'top', `${top}px`);\n setStyle(control.$volumeOn, 'display', 'flex');\n setStyle(control.$volumeOff, 'display', 'none');\n }\n }\n control.$volumePanelText && (control.$volumePanelText.innerHTML = parseInt(percentage * 100))\n }\n\n player.on(EVENTS.volumechange, () => {\n setVolumeHandle(player.volume);\n });\n\n player.on(EVENTS.loading, (flag) => {\n setStyle(control.$loading, 'display', flag ? 'flex' : 'none');\n setStyle(control.$poster, 'display', 'none')\n\n if (flag) {\n setStyle(control.$playBig, 'display', 'none');\n }\n })\n\n const screenfullChange = (fullscreen) => {\n let isFullScreen = isBoolean(fullscreen) ? fullscreen : player.fullscreen\n setStyle(control.$fullscreenExit, 'display', isFullScreen ? 'flex' : 'none');\n setStyle(control.$fullscreen, 'display', isFullScreen ? 'none' : 'flex');\n // control.autoSize();\n };\n try {\n\n screenfull.on('change', screenfullChange);\n player.events.destroys.push(() => {\n screenfull.off('change', screenfullChange);\n });\n } catch (error) {\n //\n }\n\n //\n player.on(EVENTS.webFullscreen, (value) => {\n screenfullChange(value);\n })\n\n\n player.on(EVENTS.recording, () => {\n setStyle(control.$record, 'display', player.recording ? 'none' : 'flex');\n setStyle(control.$recordStop, 'display', player.recording ? 'flex' : 'none');\n setStyle(control.$recording, 'display', player.recording ? 'flex' : 'none')\n })\n\n //\n player.on(EVENTS.recordingTimestamp, (timestamp) => {\n // console.log(timestamp);\n control.$recordingTime && (control.$recordingTime.innerHTML = formatTimeTips(timestamp))\n })\n\n player.on(EVENTS.playing, (flag) => {\n setStyle(control.$play, 'display', flag ? 'none' : 'flex');\n setStyle(control.$playBig, 'display', flag ? 'none' : 'block');\n setStyle(control.$pause, 'display', flag ? 'flex' : 'none');\n setStyle(control.$screenshot, 'display', flag ? 'flex' : 'none');\n setStyle(control.$record, 'display', flag ? 'flex' : 'none');\n setStyle(control.$fullscreen, 'display', flag ? 'flex' : 'none');\n\n // 不在播放\n if (!flag) {\n control.$speed && (control.$speed.innerHTML = bpsSize(''));\n }\n })\n\n\n player.on(EVENTS.kBps, (rate) => {\n const bps = bpsSize(rate);\n control.$speed && (control.$speed.innerHTML = bps);\n })\n}\n","export default (player, control) => {\n\n Object.defineProperty(control, 'controlsRect', {\n get: () => {\n return control.$controls.getBoundingClientRect();\n },\n });\n\n}\n","import {clamp, isMobile, setStyle} from \"../utils\";\n\nexport default (player, control) => {\n const {\n events: {proxy},\n debug\n } = player;\n\n function volumeChangeFromEvent(event) {\n const {bottom: panelBottom, height: panelHeight} = control.$volumePanel.getBoundingClientRect();\n const {height: handleHeight} = control.$volumeHandle.getBoundingClientRect();\n\n let moveLen = event.y;\n\n // if (isMobile() && player.fullscreen) {\n // moveLen = event.x;\n // }\n\n const percentage =\n clamp(panelBottom - moveLen - handleHeight / 2, 0, panelHeight - handleHeight / 2) / (panelHeight - handleHeight);\n return percentage;\n }\n\n //\n proxy(window, ['click', 'contextmenu'], event => {\n if (event.composedPath().indexOf(player.$container) > -1) {\n control.isFocus = true;\n } else {\n control.isFocus = false;\n }\n });\n\n //\n proxy(window, 'orientationchange', () => {\n setTimeout(() => {\n player.resize();\n }, 300);\n });\n\n\n proxy(control.$controls, 'click', (e) => {\n e.stopPropagation();\n })\n\n proxy(control.$pause, 'click', (e) => {\n player.pause();\n })\n // 监听 play 方法\n proxy(control.$play, 'click', (e) => {\n player.play();\n })\n\n // 监听 play 方法\n proxy(control.$playBig, 'click', (e) => {\n player.play();\n })\n\n proxy(control.$volume, 'mouseover', () => {\n control.$volumePanelWrap.classList.add('jessibuca-volume-panel-wrap-show');\n })\n\n proxy(control.$volume, 'mouseout', () => {\n control.$volumePanelWrap.classList.remove('jessibuca-volume-panel-wrap-show');\n })\n\n proxy(control.$volumeOn, 'click', (e) => {\n e.stopPropagation();\n setStyle(control.$volumeOn, 'display', 'none');\n setStyle(control.$volumeOff, 'display', 'block');\n player.lastVolume = player.volume;\n player.volume = 0;\n })\n\n proxy(control.$volumeOff, 'click', (e) => {\n e.stopPropagation();\n setStyle(control.$volumeOn, 'display', 'block');\n setStyle(control.$volumeOff, 'display', 'none');\n player.volume = player.lastVolume || 0.5;\n })\n\n proxy(control.$screenshot, 'click', (e) => {\n e.stopPropagation();\n player.video.screenshot();\n })\n\n proxy(control.$volumePanel, 'click', event => {\n event.stopPropagation();\n player.volume = volumeChangeFromEvent(event);\n });\n\n proxy(control.$volumeHandle, 'mousedown', () => {\n control.isVolumeDroging = true;\n });\n\n proxy(control.$volumeHandle, 'mousemove', event => {\n if (control.isVolumeDroging) {\n player.volume = volumeChangeFromEvent(event);\n }\n });\n\n proxy(document, 'mouseup', () => {\n if (control.isVolumeDroging) {\n control.isVolumeDroging = false;\n }\n });\n\n proxy(control.$record, 'click', (e) => {\n e.stopPropagation();\n player.recording = true;\n })\n\n proxy(control.$recordStop, 'click', (e) => {\n e.stopPropagation();\n player.recording = false;\n })\n\n proxy(control.$recordingStop, 'click', (e) => {\n e.stopPropagation();\n player.recording = false;\n })\n\n proxy(control.$fullscreen, 'click', (e) => {\n e.stopPropagation();\n player.fullscreen = true;\n })\n\n proxy(control.$fullscreenExit, 'click', (e) => {\n e.stopPropagation();\n player.fullscreen = false;\n })\n\n if (player._opt.hasControl && player._opt.controlAutoHide) {\n //\n proxy(player.$container, 'mouseover', () => {\n if (!player.fullscreen) {\n setStyle(control.$controls, 'display', 'block');\n }\n })\n\n proxy(player.$container, 'mouseout', () => {\n setStyle(control.$controls, 'display', 'none');\n })\n }\n}\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","// todo: 待定\nimport {HOT_KEY} from \"../constant\";\n\nexport default (player, control) => {\n const {\n events: {proxy}\n } = player;\n\n const keys = {};\n\n function addHotkey(key, event) {\n if (keys[key]) {\n keys[key].push(event);\n } else {\n keys[key] = [event];\n }\n }\n\n //\n addHotkey(HOT_KEY.esc, () => {\n if (player.fullscreen) {\n player.fullscreen = false;\n }\n })\n\n //\n addHotkey(HOT_KEY.arrowUp, () => {\n player.volume += 0.05;\n })\n\n //\n addHotkey(HOT_KEY.arrowDown, () => {\n player.volume -= 0.05;\n })\n\n proxy(window, 'keydown', event => {\n if (control.isFocus) {\n const tag = document.activeElement.tagName.toUpperCase();\n const editable = document.activeElement.getAttribute('contenteditable');\n if (tag !== 'INPUT' && tag !== 'TEXTAREA' && editable !== '' && editable !== 'true') {\n const events = keys[event.keyCode];\n if (events) {\n event.preventDefault();\n events.forEach(fn => fn());\n }\n }\n }\n });\n}\n","import template from \"./template\";\nimport observer from './observer';\nimport property from './property';\nimport events from './events';\nimport './style.scss'\nimport hotkey from \"./hotkey\";\n\nexport default class Control {\n constructor(player) {\n this.player = player;\n template(player, this);\n observer(player, this);\n property(player, this);\n events(player, this);\n if (player._opt.hotKey) {\n hotkey(player, this);\n }\n this.player.debug.log('Control', 'init');\n }\n\n destroy() {\n if (this.$poster) {\n this.player.$container.removeChild(this.$poster);\n }\n if (this.$loading) {\n this.player.$container.removeChild(this.$loading);\n }\n if (this.$controls) {\n this.player.$container.removeChild(this.$controls);\n }\n\n if(this.$playBig){\n this.player.$container.removeChild(this.$playBig);\n }\n\n this.player.debug.log('control', 'destroy');\n }\n\n autoSize() {\n const player = this.player;\n player.$container.style.padding = '0 0';\n const playerWidth = player.width;\n const playerHeight = player.height;\n const playerRatio = playerWidth / playerHeight;\n const canvasWidth = player.video.$videoElement.width;\n const canvasHeight = player.video.$videoElement.height;\n const canvasRatio = canvasWidth / canvasHeight;\n if (playerRatio > canvasRatio) {\n const padding = (playerWidth - playerHeight * canvasRatio) / 2;\n player.$container.style.padding = `0 ${padding}px`;\n } else {\n const padding = (playerHeight - playerWidth / canvasRatio) / 2;\n player.$container.style.padding = `${padding}px 0`;\n }\n }\n\n\n}\n","export default (player) => {\n\n const {\n _opt,\n debug,\n events: {proxy},\n } = player;\n\n\n if (_opt.supportDblclickFullscreen) {\n proxy(player.$container, 'dblclick', () => {\n player.fullscreen = !player.fullscreen;\n })\n }\n\n\n //\n proxy(document, 'visibilitychange', () => {\n if (_opt.hiddenAutoPause) {\n debug.log('visibilitychange', document.visibilityState, player._isPlayingBeforePageHidden)\n\n if (\"visible\" === document.visibilityState) {\n if (player._isPlayingBeforePageHidden) {\n player.play();\n }\n } else {\n player._isPlayingBeforePageHidden = player.playing;\n // hidden\n if (player.playing) {\n player.pause();\n }\n }\n }\n })\n\n proxy(window, 'fullscreenchange', () => {\n //\n if (player.keepScreenOn !== null && \"visible\" === document.visibilityState) {\n player.enableWakeLock();\n }\n })\n}\n","class MP4 {\n\n static init() {\n MP4.types = {\n avc1: [],\n avcC: [],\n hvc1: [],\n hvcC: [],\n btrt: [],\n dinf: [],\n dref: [],\n esds: [],\n ftyp: [],\n hdlr: [],\n mdat: [],\n mdhd: [],\n mdia: [],\n mfhd: [],\n minf: [],\n moof: [],\n moov: [],\n mp4a: [],\n mvex: [],\n mvhd: [],\n sdtp: [],\n stbl: [],\n stco: [],\n stsc: [],\n stsd: [],\n stsz: [],\n stts: [],\n tfdt: [],\n tfhd: [],\n traf: [],\n trak: [],\n trun: [],\n trex: [],\n tkhd: [],\n vmhd: [],\n smhd: []\n };\n\n for (let name in MP4.types) {\n if (MP4.types.hasOwnProperty(name)) {\n MP4.types[name] = [\n name.charCodeAt(0),\n name.charCodeAt(1),\n name.charCodeAt(2),\n name.charCodeAt(3)\n ];\n }\n }\n\n let constants = MP4.constants = {};\n\n constants.FTYP = new Uint8Array([\n 0x69, 0x73, 0x6F, 0x6D, // major_brand: isom\n 0x0, 0x0, 0x0, 0x1, // minor_version: 0x01\n 0x69, 0x73, 0x6F, 0x6D, // isom\n 0x61, 0x76, 0x63, 0x31 // avc1\n ]);\n\n constants.STSD_PREFIX = new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // version(0) + flags\n 0x00, 0x00, 0x00, 0x01 // entry_count\n ]);\n\n constants.STTS = new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // version(0) + flags\n 0x00, 0x00, 0x00, 0x00 // entry_count\n ]);\n\n constants.STSC = constants.STCO = constants.STTS;\n\n constants.STSZ = new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // version(0) + flags\n 0x00, 0x00, 0x00, 0x00, // sample_size\n 0x00, 0x00, 0x00, 0x00 // sample_count\n ]);\n\n constants.HDLR_VIDEO = new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // version(0) + flags\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n 0x76, 0x69, 0x64, 0x65, // handler_type: 'vide'\n 0x00, 0x00, 0x00, 0x00, // reserved: 3 * 4 bytes\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x56, 0x69, 0x64, 0x65,\n 0x6F, 0x48, 0x61, 0x6E,\n 0x64, 0x6C, 0x65, 0x72, 0x00 // name: VideoHandler\n ]);\n\n constants.HDLR_AUDIO = new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // version(0) + flags\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n 0x73, 0x6F, 0x75, 0x6E, // handler_type: 'soun'\n 0x00, 0x00, 0x00, 0x00, // reserved: 3 * 4 bytes\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x53, 0x6F, 0x75, 0x6E,\n 0x64, 0x48, 0x61, 0x6E,\n 0x64, 0x6C, 0x65, 0x72, 0x00 // name: SoundHandler\n ]);\n\n constants.DREF = new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // version(0) + flags\n 0x00, 0x00, 0x00, 0x01, // entry_count\n 0x00, 0x00, 0x00, 0x0C, // entry_size\n 0x75, 0x72, 0x6C, 0x20, // type 'url '\n 0x00, 0x00, 0x00, 0x01 // version(0) + flags\n ]);\n\n // Sound media header\n constants.SMHD = new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // version(0) + flags\n 0x00, 0x00, 0x00, 0x00 // balance(2) + reserved(2)\n ]);\n\n // video media header\n constants.VMHD = new Uint8Array([\n 0x00, 0x00, 0x00, 0x01, // version(0) + flags\n 0x00, 0x00, // graphicsmode: 2 bytes\n 0x00, 0x00, 0x00, 0x00, // opcolor: 3 * 2 bytes\n 0x00, 0x00\n ]);\n }\n\n // Generate a box\n static box(type) {\n let size = 8;\n let result = null;\n let datas = Array.prototype.slice.call(arguments, 1);\n let arrayCount = datas.length;\n\n for (let i = 0; i < arrayCount; i++) {\n size += datas[i].byteLength;\n }\n\n result = new Uint8Array(size);\n result[0] = (size >>> 24) & 0xFF; // size\n result[1] = (size >>> 16) & 0xFF;\n result[2] = (size >>> 8) & 0xFF;\n result[3] = (size) & 0xFF;\n\n result.set(type, 4); // type\n\n let offset = 8;\n for (let i = 0; i < arrayCount; i++) { // data body\n result.set(datas[i], offset);\n offset += datas[i].byteLength;\n }\n\n return result;\n }\n\n // emit ftyp & moov\n static generateInitSegment(meta) {\n let ftyp = MP4.box(MP4.types.ftyp, MP4.constants.FTYP);\n let moov = MP4.moov(meta);\n\n let result = new Uint8Array(ftyp.byteLength + moov.byteLength);\n result.set(ftyp, 0);\n result.set(moov, ftyp.byteLength);\n return result;\n }\n\n // Movie metadata box\n static moov(meta) {\n let mvhd = MP4.mvhd(meta.timescale, meta.duration);\n let trak = MP4.trak(meta);\n let mvex = MP4.mvex(meta);\n return MP4.box(MP4.types.moov, mvhd, trak, mvex);\n }\n\n // Movie header box\n static mvhd(timescale, duration) {\n return MP4.box(MP4.types.mvhd, new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // version(0) + flags\n 0x00, 0x00, 0x00, 0x00, // creation_time\n 0x00, 0x00, 0x00, 0x00, // modification_time\n (timescale >>> 24) & 0xFF, // timescale: 4 bytes\n (timescale >>> 16) & 0xFF,\n (timescale >>> 8) & 0xFF,\n (timescale) & 0xFF,\n (duration >>> 24) & 0xFF, // duration: 4 bytes\n (duration >>> 16) & 0xFF,\n (duration >>> 8) & 0xFF,\n (duration) & 0xFF,\n 0x00, 0x01, 0x00, 0x00, // Preferred rate: 1.0\n 0x01, 0x00, 0x00, 0x00, // PreferredVolume(1.0, 2bytes) + reserved(2bytes)\n 0x00, 0x00, 0x00, 0x00, // reserved: 4 + 4 bytes\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x01, 0x00, 0x00, // ----begin composition matrix----\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x01, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x40, 0x00, 0x00, 0x00, // ----end composition matrix----\n 0x00, 0x00, 0x00, 0x00, // ----begin pre_defined 6 * 4 bytes----\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // ----end pre_defined 6 * 4 bytes----\n 0xFF, 0xFF, 0xFF, 0xFF // next_track_ID\n ]));\n }\n\n // Track box\n static trak(meta) {\n return MP4.box(MP4.types.trak, MP4.tkhd(meta), MP4.mdia(meta));\n }\n\n // Track header box\n static tkhd(meta) {\n let trackId = meta.id, duration = meta.duration;\n let width = meta.presentWidth, height = meta.presentHeight;\n\n return MP4.box(MP4.types.tkhd, new Uint8Array([\n 0x00, 0x00, 0x00, 0x07, // version(0) + flags\n 0x00, 0x00, 0x00, 0x00, // creation_time\n 0x00, 0x00, 0x00, 0x00, // modification_time\n (trackId >>> 24) & 0xFF, // track_ID: 4 bytes\n (trackId >>> 16) & 0xFF,\n (trackId >>> 8) & 0xFF,\n (trackId) & 0xFF,\n 0x00, 0x00, 0x00, 0x00, // reserved: 4 bytes\n (duration >>> 24) & 0xFF, // duration: 4 bytes\n (duration >>> 16) & 0xFF,\n (duration >>> 8) & 0xFF,\n (duration) & 0xFF,\n 0x00, 0x00, 0x00, 0x00, // reserved: 2 * 4 bytes\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // layer(2bytes) + alternate_group(2bytes)\n 0x00, 0x00, 0x00, 0x00, // volume(2bytes) + reserved(2bytes)\n 0x00, 0x01, 0x00, 0x00, // ----begin composition matrix----\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x01, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x40, 0x00, 0x00, 0x00, // ----end composition matrix----\n (width >>> 8) & 0xFF, // width and height\n (width) & 0xFF,\n 0x00, 0x00,\n (height >>> 8) & 0xFF,\n (height) & 0xFF,\n 0x00, 0x00\n ]));\n }\n\n static mdia(meta) {\n return MP4.box(MP4.types.mdia, MP4.mdhd(meta), MP4.hdlr(meta), MP4.minf(meta))\n }\n\n // Media header box\n static mdhd(meta) {\n let timescale = meta.timescale;\n let duration = meta.duration;\n return MP4.box(MP4.types.mdhd, new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // version(0) + flags\n 0x00, 0x00, 0x00, 0x00, // creation_time\n 0x00, 0x00, 0x00, 0x00, // modification_time\n (timescale >>> 24) & 0xFF, // timescale: 4 bytes\n (timescale >>> 16) & 0xFF,\n (timescale >>> 8) & 0xFF,\n (timescale) & 0xFF,\n (duration >>> 24) & 0xFF, // duration: 4 bytes\n (duration >>> 16) & 0xFF,\n (duration >>> 8) & 0xFF,\n (duration) & 0xFF,\n 0x55, 0xC4, // language: und (undetermined)\n 0x00, 0x00 // pre_defined = 0\n ]));\n }\n\n // Media handler reference box\n static hdlr(meta) {\n let data = null;\n if (meta.type === 'audio') {\n data = MP4.constants.HDLR_AUDIO;\n } else {\n data = MP4.constants.HDLR_VIDEO;\n }\n return MP4.box(MP4.types.hdlr, data);\n }\n\n // Media infomation box\n static minf(meta) {\n let xmhd = null;\n if (meta.type === 'audio') {\n xmhd = MP4.box(MP4.types.smhd, MP4.constants.SMHD);\n } else {\n xmhd = MP4.box(MP4.types.vmhd, MP4.constants.VMHD);\n }\n return MP4.box(MP4.types.minf, xmhd, MP4.dinf(), MP4.stbl(meta));\n }\n\n // Data infomation box\n static dinf() {\n let result = MP4.box(MP4.types.dinf,\n MP4.box(MP4.types.dref, MP4.constants.DREF)\n );\n return result;\n }\n\n // Sample table box\n static stbl(meta) {\n let result = MP4.box(MP4.types.stbl, // type: stbl\n MP4.stsd(meta), // Sample Description Table\n MP4.box(MP4.types.stts, MP4.constants.STTS), // Time-To-Sample\n MP4.box(MP4.types.stsc, MP4.constants.STSC), // Sample-To-Chunk\n MP4.box(MP4.types.stsz, MP4.constants.STSZ), // Sample size\n MP4.box(MP4.types.stco, MP4.constants.STCO) // Chunk offset\n );\n return result;\n }\n\n // Sample description box\n static stsd(meta) {\n if (meta.type === 'audio') {\n // else: aac -> mp4a\n return MP4.box(MP4.types.stsd, MP4.constants.STSD_PREFIX, MP4.mp4a(meta));\n } else {\n if (meta.videoType === 'avc') {\n //\n return MP4.box(MP4.types.stsd, MP4.constants.STSD_PREFIX, MP4.avc1(meta));\n } else {\n //\n return MP4.box(MP4.types.stsd, MP4.constants.STSD_PREFIX, MP4.hvc1(meta))\n }\n }\n }\n\n static mp4a(meta) {\n let channelCount = meta.channelCount;\n let sampleRate = meta.audioSampleRate;\n\n let data = new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // reserved(4)\n 0x00, 0x00, 0x00, 0x01, // reserved(2) + data_reference_index(2)\n 0x00, 0x00, 0x00, 0x00, // reserved: 2 * 4 bytes\n 0x00, 0x00, 0x00, 0x00,\n 0x00, channelCount, // channelCount(2)\n 0x00, 0x10, // sampleSize(2)\n 0x00, 0x00, 0x00, 0x00, // reserved(4)\n (sampleRate >>> 8) & 0xFF, // Audio sample rate\n (sampleRate) & 0xFF,\n 0x00, 0x00\n ]);\n\n return MP4.box(MP4.types.mp4a, data, MP4.esds(meta));\n }\n\n static esds(meta) {\n let config = meta.config || [];\n let configSize = config.length;\n let data = new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // version 0 + flags\n\n 0x03, // descriptor_type\n 0x17 + configSize, // length3\n 0x00, 0x01, // es_id\n 0x00, // stream_priority\n\n 0x04, // descriptor_type\n 0x0F + configSize, // length\n 0x40, // codec: mpeg4_audio\n 0x15, // stream_type: Audio\n 0x00, 0x00, 0x00, // buffer_size\n 0x00, 0x00, 0x00, 0x00, // maxBitrate\n 0x00, 0x00, 0x00, 0x00, // avgBitrate\n\n 0x05 // descriptor_type\n ].concat([\n configSize\n ]).concat(\n config\n ).concat([\n 0x06, 0x01, 0x02 // GASpecificConfig\n ]));\n return MP4.box(MP4.types.esds, data);\n }\n\n // avc\n static avc1(meta) {\n let avcc = meta.avcc;\n const width = meta.codecWidth;\n const height = meta.codecHeight;\n let data = new Uint8Array([\n 0, 0, 0, 0,\n 0, 0, 0, 1,\n 0, 0, 0, 0,\n 0, 0, 0, 0,\n 0, 0, 0, 0,\n 0, 0, 0, 0,\n width >>> 8 & 255,\n width & 255,\n height >>> 8 & 255,\n height & 255,\n 0, 72, 0, 0,\n 0, 72, 0, 0,\n 0, 0, 0, 0,\n 0, 1,\n 0,\n 0, 0, 0, 0,\n 0, 0, 0, 0,\n 0, 0, 0, 0,\n 0, 0, 0, 0,\n 0, 0, 0, 0,\n 0, 0, 0, 0,\n 0, 0, 0, 0,\n 0, 0, 0,\n 0, 24,\n 255, 255]\n );\n return MP4.box(MP4.types.avc1, data, MP4.box(MP4.types.avcC, avcc))\n }\n\n // hvc\n static hvc1(meta) {\n let avcc = meta.avcc;\n const width = meta.codecWidth;\n const height = meta.codecHeight;\n let data = new Uint8Array([\n 0, 0, 0, 0,\n 0, 0, 0, 1,\n 0, 0, 0, 0,\n 0, 0, 0, 0,\n 0, 0, 0, 0,\n 0, 0, 0, 0,\n width >>> 8 & 255,\n width & 255,\n height >>> 8 & 255,\n height & 255,\n 0, 72, 0, 0,\n 0, 72, 0, 0,\n 0, 0, 0, 0,\n 0, 1,\n 0,\n 0, 0, 0, 0,\n 0, 0, 0, 0,\n 0, 0, 0, 0,\n 0, 0, 0, 0,\n 0, 0, 0, 0,\n 0, 0, 0, 0,\n 0, 0, 0, 0,\n 0, 0, 0,\n 0, 24,\n 255, 255\n ]);\n return MP4.box(MP4.types.hvc1, data, MP4.box(MP4.types.hvcC, avcc))\n }\n\n // Movie Extends box\n static mvex(meta) {\n return MP4.box(MP4.types.mvex, MP4.trex(meta))\n }\n\n // Track Extends box\n static trex(meta) {\n let trackId = meta.id;\n let data = new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // version(0) + flags\n (trackId >>> 24) & 0xFF, // track_ID\n (trackId >>> 16) & 0xFF,\n (trackId >>> 8) & 0xFF,\n (trackId) & 0xFF,\n 0x00, 0x00, 0x00, 0x01, // default_sample_description_index\n 0x00, 0x00, 0x00, 0x00, // default_sample_duration\n 0x00, 0x00, 0x00, 0x00, // default_sample_size\n 0x00, 0x01, 0x00, 0x01 // default_sample_flags\n ]);\n return MP4.box(MP4.types.trex, data);\n }\n\n // Movie fragment box\n static moof(track, baseMediaDecodeTime) {\n return MP4.box(MP4.types.moof, MP4.mfhd(track.sequenceNumber), MP4.traf(track, baseMediaDecodeTime))\n }\n //\n static mfhd(sequenceNumber) {\n let data = new Uint8Array([\n 0x00, 0x00, 0x00, 0x00,\n (sequenceNumber >>> 24) & 0xFF, // sequence_number: int32\n (sequenceNumber >>> 16) & 0xFF,\n (sequenceNumber >>> 8) & 0xFF,\n (sequenceNumber) & 0xFF\n ]);\n return MP4.box(MP4.types.mfhd, data);\n }\n\n // Track fragment box\n static traf(track, baseMediaDecodeTime) {\n let trackId = track.id;\n\n // Track fragment header box\n let tfhd = MP4.box(MP4.types.tfhd, new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // version(0) & flags\n (trackId >>> 24) & 0xFF, // track_ID\n (trackId >>> 16) & 0xFF,\n (trackId >>> 8) & 0xFF,\n (trackId) & 0xFF\n ]));\n // Track Fragment Decode Time\n let tfdt = MP4.box(MP4.types.tfdt, new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // version(0) & flags\n (baseMediaDecodeTime >>> 24) & 0xFF, // baseMediaDecodeTime: int32\n (baseMediaDecodeTime >>> 16) & 0xFF,\n (baseMediaDecodeTime >>> 8) & 0xFF,\n (baseMediaDecodeTime) & 0xFF\n ]));\n let sdtp = MP4.sdtp(track);\n let trun = MP4.trun(track, sdtp.byteLength + 16 + 16 + 8 + 16 + 8 + 8);\n\n return MP4.box(MP4.types.traf, tfhd, tfdt, trun, sdtp);\n }\n\n // Sample Dependency Type box\n static sdtp(track) {\n let data = new Uint8Array(4 + 1);\n let flags = track.flags;\n data[4] = flags.isLeading << 6\n | flags.dependsOn << 4\n | flags.isDependedOn << 2\n | flags.hasRedundancy;\n return MP4.box(MP4.types.sdtp, data);\n }\n // trun\n static trun(track, offset) {\n let dataSize = 12 + 16;\n let data = new Uint8Array(dataSize);\n offset += 8 + dataSize;\n\n data.set([\n 0x00, 0x00, 0x0F, 0x01, // version(0) & flags\n 0x00, 0x00, 0x00, 0x01, // sample_count\n (offset >>> 24) & 0xFF, // data_offset\n (offset >>> 16) & 0xFF,\n (offset >>> 8) & 0xFF,\n (offset) & 0xFF\n ], 0);\n\n let duration = track.duration;\n let size = track.size;\n let flags = track.flags;\n let cts = track.cts;\n\n data.set([\n (duration >>> 24) & 0xFF, // sample_duration\n (duration >>> 16) & 0xFF,\n (duration >>> 8) & 0xFF,\n (duration) & 0xFF,\n (size >>> 24) & 0xFF, // sample_size\n (size >>> 16) & 0xFF,\n (size >>> 8) & 0xFF,\n (size) & 0xFF,\n (flags.isLeading << 2) | flags.dependsOn, // sample_flags\n (flags.isDependedOn << 6) | (flags.hasRedundancy << 4) | flags.isNonSync,\n 0x00, 0x00, // sample_degradation_priority\n (cts >>> 24) & 0xFF, // sample_composition_time_offset\n (cts >>> 16) & 0xFF,\n (cts >>> 8) & 0xFF,\n (cts) & 0xFF\n ], 12);\n\n return MP4.box(MP4.types.trun, data);\n }\n // mdat\n static mdat(data) {\n return MP4.box(MP4.types.mdat, data)\n }\n}\n\nMP4.init();\n\nexport default MP4;\n","/*\n * Copyright (C) 2016 Bilibili. All Rights Reserved.\n *\n * @author zheng qian \n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n// Exponential-Golomb buffer decoder\nclass ExpGolomb {\n\n constructor(uint8array) {\n this.TAG = 'ExpGolomb';\n\n this._buffer = uint8array;\n this._buffer_index = 0;\n this._total_bytes = uint8array.byteLength;\n this._total_bits = uint8array.byteLength * 8;\n this._current_word = 0;\n this._current_word_bits_left = 0;\n }\n\n destroy() {\n this._buffer = null;\n }\n\n _fillCurrentWord() {\n let buffer_bytes_left = this._total_bytes - this._buffer_index;\n if (buffer_bytes_left <= 0) {\n // throw new IllegalStateException('ExpGolomb: _fillCurrentWord() but no bytes available');\n }\n\n let bytes_read = Math.min(4, buffer_bytes_left);\n let word = new Uint8Array(4);\n word.set(this._buffer.subarray(this._buffer_index, this._buffer_index + bytes_read));\n this._current_word = new DataView(word.buffer).getUint32(0, false);\n\n this._buffer_index += bytes_read;\n this._current_word_bits_left = bytes_read * 8;\n }\n\n readBits(bits) {\n if (bits > 32) {\n // throw new InvalidArgumentException('ExpGolomb: readBits() bits exceeded max 32bits!');\n }\n\n if (bits <= this._current_word_bits_left) {\n let result = this._current_word >>> (32 - bits);\n this._current_word <<= bits;\n this._current_word_bits_left -= bits;\n return result;\n }\n\n let result = this._current_word_bits_left ? this._current_word : 0;\n result = result >>> (32 - this._current_word_bits_left);\n let bits_need_left = bits - this._current_word_bits_left;\n\n this._fillCurrentWord();\n let bits_read_next = Math.min(bits_need_left, this._current_word_bits_left);\n\n let result2 = this._current_word >>> (32 - bits_read_next);\n this._current_word <<= bits_read_next;\n this._current_word_bits_left -= bits_read_next;\n\n result = (result << bits_read_next) | result2;\n return result;\n }\n\n readBool() {\n return this.readBits(1) === 1;\n }\n\n readByte() {\n return this.readBits(8);\n }\n\n _skipLeadingZero() {\n let zero_count;\n for (zero_count = 0; zero_count < this._current_word_bits_left; zero_count++) {\n if (0 !== (this._current_word & (0x80000000 >>> zero_count))) {\n this._current_word <<= zero_count;\n this._current_word_bits_left -= zero_count;\n return zero_count;\n }\n }\n this._fillCurrentWord();\n return zero_count + this._skipLeadingZero();\n }\n\n readUEG() { // unsigned exponential golomb\n let leading_zeros = this._skipLeadingZero();\n return this.readBits(leading_zeros + 1) - 1;\n }\n\n readSEG() { // signed exponential golomb\n let value = this.readUEG();\n if (value & 0x01) {\n return (value + 1) >>> 1;\n } else {\n return -1 * (value >>> 1);\n }\n }\n\n}\n\nexport default ExpGolomb;\n","/*\n * Copyright (C) 2016 Bilibili. All Rights Reserved.\n *\n * @author zheng qian \n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport ExpGolomb from './exp-golomb.js';\n\nclass SPSParser {\n\n static _ebsp2rbsp(uint8array) {\n let src = uint8array;\n let src_length = src.byteLength;\n let dst = new Uint8Array(src_length);\n let dst_idx = 0;\n\n for (let i = 0; i < src_length; i++) {\n if (i >= 2) {\n // Unescape: Skip 0x03 after 00 00\n if (src[i] === 0x03 && src[i - 1] === 0x00 && src[i - 2] === 0x00) {\n continue;\n }\n }\n dst[dst_idx] = src[i];\n dst_idx++;\n }\n\n return new Uint8Array(dst.buffer, 0, dst_idx);\n }\n\n // 解析 SPS\n // https://zhuanlan.zhihu.com/p/27896239\n static parseSPS(uint8array) {\n let rbsp = SPSParser._ebsp2rbsp(uint8array);\n let gb = new ExpGolomb(rbsp);\n\n gb.readByte();\n // 标识当前H.264码流的profile。\n // 我们知道,H.264中定义了三种常用的档次profile: 基准档次:baseline profile;主要档次:main profile; 扩展档次:extended profile;\n\n let profile_idc = gb.readByte(); // profile_idc\n gb.readByte(); // constraint_set_flags[5] + reserved_zero[3]\n // 标识当前码流的Level。编码的Level定义了某种条件下的最大视频分辨率、最大视频帧率等参数,码流所遵从的level由level_idc指定。\n let level_idc = gb.readByte(); // level_idc\n // 表示当前的序列参数集的id。通过该id值,图像参数集pps可以引用其代表的sps中的参数。\n gb.readUEG(); // seq_parameter_set_id\n\n let profile_string = SPSParser.getProfileString(profile_idc);\n\n let level_string = SPSParser.getLevelString(level_idc);\n\n let chroma_format_idc = 1;\n let chroma_format = 420;\n let chroma_format_table = [0, 420, 422, 444];\n let bit_depth = 8;\n\n //\n if (profile_idc === 100 || profile_idc === 110 || profile_idc === 122 ||\n profile_idc === 244 || profile_idc === 44 || profile_idc === 83 ||\n profile_idc === 86 || profile_idc === 118 || profile_idc === 128 ||\n profile_idc === 138 || profile_idc === 144) {\n //\n chroma_format_idc = gb.readUEG();\n\n if (chroma_format_idc === 3) {\n gb.readBits(1); // separate_colour_plane_flag\n }\n if (chroma_format_idc <= 3) {\n chroma_format = chroma_format_table[chroma_format_idc];\n }\n\n bit_depth = gb.readUEG() + 8; // bit_depth_luma_minus8\n gb.readUEG(); // bit_depth_chroma_minus8\n gb.readBits(1); // qpprime_y_zero_transform_bypass_flag\n if (gb.readBool()) { // seq_scaling_matrix_present_flag\n let scaling_list_count = (chroma_format_idc !== 3) ? 8 : 12;\n for (let i = 0; i < scaling_list_count; i++) {\n if (gb.readBool()) { // seq_scaling_list_present_flag\n if (i < 6) {\n SPSParser._skipScalingList(gb, 16);\n } else {\n SPSParser._skipScalingList(gb, 64);\n }\n }\n }\n }\n }\n // 用于计算MaxFrameNum的值。计算公式为MaxFrameNum = 2^(log2_max_frame_num_minus4 +\n gb.readUEG(); // log2_max_frame_num_minus4\n // 表示解码picture order count(POC)的方法。POC是另一种计量图像序号的方式,与frame_num有着不同的计算方法。该语法元素的取值为0、1或2。\n let pic_order_cnt_type = gb.readUEG();\n if (pic_order_cnt_type === 0) {\n gb.readUEG(); // log2_max_pic_order_cnt_lsb_minus_4\n } else if (pic_order_cnt_type === 1) {\n gb.readBits(1); // delta_pic_order_always_zero_flag\n gb.readSEG(); // offset_for_non_ref_pic\n gb.readSEG(); // offset_for_top_to_bottom_field\n let num_ref_frames_in_pic_order_cnt_cycle = gb.readUEG();\n for (let i = 0; i < num_ref_frames_in_pic_order_cnt_cycle; i++) {\n gb.readSEG(); // offset_for_ref_frame\n }\n }\n // 用于表示参考帧的最大数目。\n let ref_frames = gb.readUEG(); // max_num_ref_frames\n // 标识位,说明frame_num中是否允许不连续的值。\n gb.readBits(1); // gaps_in_frame_num_value_allowed_flag\n // 用于计算图像的宽度。单位为宏块个数,因此图像的实际宽度为:\n let pic_width_in_mbs_minus1 = gb.readUEG();\n // 使用PicHeightInMapUnits来度量视频中一帧图像的高度。\n // PicHeightInMapUnits并非图像明确的以像素或宏块为单位的高度,而需要考虑该宏块是帧编码或场编码。PicHeightInMapUnits的计算方式为:\n let pic_height_in_map_units_minus1 = gb.readUEG();\n // 标识位,说明宏块的编码方式。当该标识位为0时,宏块可能为帧编码或场编码;\n // 该标识位为1时,所有宏块都采用帧编码。根据该标识位取值不同,PicHeightInMapUnits的含义也不同,\n // 为0时表示一场数据按宏块计算的高度,为1时表示一帧数据按宏块计算的高度。\n let frame_mbs_only_flag = gb.readBits(1);\n if (frame_mbs_only_flag === 0) {\n // 标识位,说明是否采用了宏块级的帧场自适应编码。当该标识位为0时,不存在帧编码和场编码之间的切换;当标识位为1时,宏块可能在帧编码和场编码模式之间进行选择。\n gb.readBits(1); // mb_adaptive_frame_field_flag\n }\n // 标识位,用于B_Skip、B_Direct模式运动矢量的推导计算。\n gb.readBits(1); // direct_8x8_inference_flag\n\n let frame_crop_left_offset = 0;\n let frame_crop_right_offset = 0;\n let frame_crop_top_offset = 0;\n let frame_crop_bottom_offset = 0;\n\n let frame_cropping_flag = gb.readBool();\n if (frame_cropping_flag) {\n frame_crop_left_offset = gb.readUEG();\n frame_crop_right_offset = gb.readUEG();\n frame_crop_top_offset = gb.readUEG();\n frame_crop_bottom_offset = gb.readUEG();\n }\n\n let sar_width = 1, sar_height = 1;\n let fps = 0, fps_fixed = true, fps_num = 0, fps_den = 0;\n // 标识位,说明SPS中是否存在VUI信息。\n let vui_parameters_present_flag = gb.readBool();\n if (vui_parameters_present_flag) {\n if (gb.readBool()) { // aspect_ratio_info_present_flag\n let aspect_ratio_idc = gb.readByte();\n let sar_w_table = [1, 12, 10, 16, 40, 24, 20, 32, 80, 18, 15, 64, 160, 4, 3, 2];\n let sar_h_table = [1, 11, 11, 11, 33, 11, 11, 11, 33, 11, 11, 33, 99, 3, 2, 1];\n\n if (aspect_ratio_idc > 0 && aspect_ratio_idc < 16) {\n sar_width = sar_w_table[aspect_ratio_idc - 1];\n sar_height = sar_h_table[aspect_ratio_idc - 1];\n } else if (aspect_ratio_idc === 255) {\n sar_width = gb.readByte() << 8 | gb.readByte();\n sar_height = gb.readByte() << 8 | gb.readByte();\n }\n }\n\n if (gb.readBool()) { // overscan_info_present_flag\n gb.readBool(); // overscan_appropriate_flag\n }\n if (gb.readBool()) { // video_signal_type_present_flag\n gb.readBits(4); // video_format & video_full_range_flag\n if (gb.readBool()) { // colour_description_present_flag\n gb.readBits(24); // colour_primaries & transfer_characteristics & matrix_coefficients\n }\n }\n if (gb.readBool()) { // chroma_loc_info_present_flag\n gb.readUEG(); // chroma_sample_loc_type_top_field\n gb.readUEG(); // chroma_sample_loc_type_bottom_field\n }\n if (gb.readBool()) { // timing_info_present_flag\n let num_units_in_tick = gb.readBits(32);\n let time_scale = gb.readBits(32);\n fps_fixed = gb.readBool(); // fixed_frame_rate_flag\n\n fps_num = time_scale;\n fps_den = num_units_in_tick * 2;\n fps = fps_num / fps_den;\n }\n }\n\n let sarScale = 1;\n if (sar_width !== 1 || sar_height !== 1) {\n sarScale = sar_width / sar_height;\n }\n\n let crop_unit_x = 0, crop_unit_y = 0;\n if (chroma_format_idc === 0) {\n crop_unit_x = 1;\n crop_unit_y = 2 - frame_mbs_only_flag;\n } else {\n let sub_wc = (chroma_format_idc === 3) ? 1 : 2;\n let sub_hc = (chroma_format_idc === 1) ? 2 : 1;\n crop_unit_x = sub_wc;\n crop_unit_y = sub_hc * (2 - frame_mbs_only_flag);\n }\n\n let codec_width = (pic_width_in_mbs_minus1 + 1) * 16;\n let codec_height = (2 - frame_mbs_only_flag) * ((pic_height_in_map_units_minus1 + 1) * 16);\n\n codec_width -= (frame_crop_left_offset + frame_crop_right_offset) * crop_unit_x;\n codec_height -= (frame_crop_top_offset + frame_crop_bottom_offset) * crop_unit_y;\n\n let present_width = Math.ceil(codec_width * sarScale);\n\n gb.destroy();\n gb = null;\n\n\n // 解析出来的SPS 内容。\n return {\n profile_string: profile_string, // baseline, high, high10, ...\n level_string: level_string, // 3, 3.1, 4, 4.1, 5, 5.1, ...\n bit_depth: bit_depth, // 8bit, 10bit, ...\n ref_frames: ref_frames,\n chroma_format: chroma_format, // 4:2:0, 4:2:2, ...\n chroma_format_string: SPSParser.getChromaFormatString(chroma_format),\n\n frame_rate: {\n fixed: fps_fixed,\n fps: fps,\n fps_den: fps_den,\n fps_num: fps_num\n },\n\n sar_ratio: {\n width: sar_width,\n height: sar_height\n },\n\n codec_size: {\n width: codec_width,\n height: codec_height\n },\n\n present_size: {\n width: present_width,\n height: codec_height\n }\n };\n }\n\n static _skipScalingList(gb, count) {\n let last_scale = 8, next_scale = 8;\n let delta_scale = 0;\n for (let i = 0; i < count; i++) {\n if (next_scale !== 0) {\n delta_scale = gb.readSEG();\n next_scale = (last_scale + delta_scale + 256) % 256;\n }\n last_scale = (next_scale === 0) ? last_scale : next_scale;\n }\n }\n\n // profile_idc = 66 → baseline profile;\n // profile_idc = 77 → main profile;\n // profile_idc = 88 → extended profile;\n // 在新版的标准中,还包括了High、High 10、High 4:2:2、High 4:4:4、High 10 Intra、High\n // 4:2:2 Intra、High 4:4:4 Intra、CAVLC 4:4:4 Intra\n static getProfileString(profile_idc) {\n switch (profile_idc) {\n case 66:\n return 'Baseline';\n case 77:\n return 'Main';\n case 88:\n return 'Extended';\n case 100:\n return 'High';\n case 110:\n return 'High10';\n case 122:\n return 'High422';\n case 244:\n return 'High444';\n default:\n return 'Unknown';\n }\n }\n\n static getLevelString(level_idc) {\n return (level_idc / 10).toFixed(1);\n }\n\n static getChromaFormatString(chroma) {\n switch (chroma) {\n case 420:\n return '4:2:0';\n case 422:\n return '4:2:2';\n case 444:\n return '4:4:4';\n default:\n return 'Unknown';\n }\n }\n\n}\n\nexport default SPSParser;","import SPSParser from './h264-sps-parser.js';\n\n//\nexport function parseAVCDecoderConfigurationRecord(arrayBuffer) {\n const meta = {}\n const v = new DataView(arrayBuffer.buffer);\n let version = v.getUint8(0); // configurationVersion\n let avcProfile = v.getUint8(1); // avcProfileIndication\n let profileCompatibility = v.getUint8(2); // profile_compatibil\n let avcLevel = v.getUint8(3); // AVCLevelIndication\n\n if (version !== 1 || avcProfile === 0) {\n // this._onError(DemuxErrors.FORMAT_ERROR, 'Flv: Invalid AVCDecoderConfigurationRecord');\n\n return;\n }\n\n const _naluLengthSize = (v.getUint8(4) & 3) + 1; // lengthSizeMinusOne\n\n if (_naluLengthSize !== 3 && _naluLengthSize !== 4) { // holy shit!!!\n // this._onError(DemuxErrors.FORMAT_ERROR, `Flv: Strange NaluLengthSizeMinusOne: ${_naluLengthSize - 1}`);\n return;\n }\n let spsCount = v.getUint8(5) & 31; // numOfSequenceParameterSets\n\n if (spsCount === 0) {\n // this._onError(DemuxErrors.FORMAT_ERROR, 'Flv: Invalid AVCDecoderConfigurationRecord: No SPS');\n return;\n } else if (spsCount > 1) {\n // Log.w(this.TAG, `Flv: Strange AVCDecoderConfigurationRecord: SPS Count = ${spsCount}`);\n }\n\n let offset = 6;\n for (let i = 0; i < spsCount; i++) {\n let len = v.getUint16(offset, false); // sequenceParameterSetLength\n offset += 2;\n\n if (len === 0) {\n continue;\n }\n\n // Notice: Nalu without startcode header (00 00 00 01)\n let sps = new Uint8Array(arrayBuffer.buffer, offset, len);\n offset += len;\n // flv.js作者选择了自己来解析这个数据结构,也是迫不得已,因为JS环境下没有ffmpeg,解析这个结构主要是为了提取 sps和pps。虽然理论上sps允许有多个,但其实一般就一个。\n // packetTtype 为 1 表示 NALU,NALU= network abstract layer unit,这是H.264的概念,网络抽象层数据单元,其实简单理解就是一帧视频数据。\n // pps的信息没什么用,所以作者只实现了sps的分析器,说明作者下了很大功夫去学习264的标准,其中的Golomb解码还是挺复杂的,能解对不容易,我在PC和手机平台都是用ffmpeg去解析的。\n // SPS里面包括了视频分辨率,帧率,profile level等视频重要信息。\n let config = SPSParser.parseSPS(sps);\n if (i !== 0) {\n // ignore other sps's config\n continue;\n }\n\n meta.codecWidth = config.codec_size.width;\n meta.codecHeight = config.codec_size.height;\n meta.presentWidth = config.present_size.width;\n meta.presentHeight = config.present_size.height;\n\n meta.profile = config.profile_string;\n meta.level = config.level_string;\n meta.bitDepth = config.bit_depth;\n meta.chromaFormat = config.chroma_format;\n meta.sarRatio = config.sar_ratio;\n meta.frameRate = config.frame_rate;\n\n if (config.frame_rate.fixed === false ||\n config.frame_rate.fps_num === 0 ||\n config.frame_rate.fps_den === 0) {\n meta.frameRate = {};\n }\n\n let fps_den = meta.frameRate.fps_den;\n let fps_num = meta.frameRate.fps_num;\n\n meta.refSampleDuration = meta.timescale * (fps_den / fps_num);\n\n let codecArray = sps.subarray(1, 4);\n\n let codecString = 'avc1.';\n for (let j = 0; j < 3; j++) {\n let h = codecArray[j].toString(16);\n if (h.length < 2) {\n h = '0' + h;\n }\n codecString += h;\n }\n // codec\n meta.codec = codecString;\n }\n\n let ppsCount = v.getUint8(offset); // numOfPictureParameterSets\n if (ppsCount === 0) {\n // this._onError(DemuxErrors.FORMAT_ERROR, 'Flv: Invalid AVCDecoderConfigurationRecord: No PPS');\n return;\n } else if (ppsCount > 1) {\n // Log.w(this.TAG, `Flv: Strange AVCDecoderConfigurationRecord: PPS Count = ${ppsCount}`);\n }\n\n offset++;\n for (let i = 0; i < ppsCount; i++) {\n let len = v.getUint16(offset, false); // pictureParameterSetLength\n offset += 2;\n\n if (len === 0) {\n continue;\n }\n let pps = new Uint8Array(arrayBuffer.buffer, offset, len);\n\n // pps is useless for extracting video information\n offset += len;\n }\n\n meta.videoType = 'avc';\n\n // meta.avcc = arrayBuffer;\n return meta;\n}\n","class SPSParser {\n static parseSPS(uint8array) {\n\n }\n}\n\nexport default SPSParser\n","import {H265_NAL_TYPE} from \"../constant\";\nimport SPSParser from \"./h265-sps-parser\";\n\nexport function parseHEVCDecoderConfigurationRecord(arrayBuffer) {\n const meta = {}\n meta.videoType = 'hevc'\n let offset = 28 - 5;\n //\n const vpsTag = arrayBuffer[offset];\n\n if (vpsTag !== H265_NAL_TYPE.vps) {\n return meta;\n }\n\n offset += 2;\n offset += 1;\n const vpsLength = arrayBuffer[offset + 1] | (arrayBuffer[offset] << 8);\n offset += 2;\n const vpsData = arrayBuffer.slice(offset, (offset + vpsLength));\n console.log(Uint8Array.from(vpsData));\n offset += vpsLength;\n\n const spsTag = arrayBuffer[offset]\n if (spsTag !== H265_NAL_TYPE.sps) {\n return meta;\n }\n offset += 2;\n offset += 1;\n const spsLength = arrayBuffer[offset + 1] | (arrayBuffer[offset] << 8);\n\n offset += 2;\n const spsData = arrayBuffer.slice(offset, (offset + spsLength))\n console.log(Uint8Array.from(spsData));\n\n offset += spsLength;\n\n const ppsTag = arrayBuffer[offset];\n\n if (ppsTag !== H265_NAL_TYPE.pps) {\n return meta;\n }\n offset += 2;\n offset += 1;\n const ppsLength = arrayBuffer[offset + 1] | (arrayBuffer[offset] << 8);\n offset += 2;\n const ppsData = arrayBuffer.slice(offset, (offset + ppsLength))\n console.log(Uint8Array.from(ppsData));\n\n let sps = Uint8Array.from(spsData);\n let config = SPSParser.parseSPS(sps);\n\n meta.codecWidth = config.codec_size.width;\n meta.codecHeight = config.codec_size.height;\n\n meta.presentWidth = config.present_size.width;\n meta.presentHeight = config.present_size.height;\n\n meta.profile = config.profile_string;\n meta.level = config.level_string;\n meta.bitDepth = config.bit_depth;\n meta.chromaFormat = config.chroma_format;\n meta.sarRatio = config.sar_ratio;\n\n return meta;\n}\n","import Emitter from \"../utils/emitter\";\nimport {EVENTS, EVENTS_ERROR, FRAG_DURATION, MEDIA_SOURCE_STATE, MP4_CODECS, VIDEO_ENC_CODE} from \"../constant\";\nimport MP4 from \"../remux/fmp4-generator\";\nimport {parseAVCDecoderConfigurationRecord} from \"../utils/h264\";\nimport {parseHEVCDecoderConfigurationRecord} from \"../utils/h265\";\nimport {now} from \"../utils\";\n\nexport default class MseDecoder extends Emitter {\n constructor(player) {\n super();\n this.player = player;\n this.isAvc = true;\n this.mediaSource = new window.MediaSource();\n this.sourceBuffer = null;\n this.hasInit = false;\n this.isInitInfo = false;\n this.cacheTrack = {};\n this.timeInit = false;\n this.sequenceNumber = 0;\n this.mediaSourceOpen = false;\n this.bufferList = [];\n this.dropping = false;\n this.player.video.$videoElement.src = window.URL.createObjectURL(this.mediaSource);\n const {\n debug,\n events: {proxy},\n } = player;\n\n\n proxy(this.mediaSource, 'sourceopen', () => {\n this.mediaSourceOpen = true;\n this.player.emit(EVENTS.mseSourceOpen)\n })\n\n proxy(this.mediaSource, 'sourceclose', () => {\n this.player.emit(EVENTS.mseSourceClose);\n })\n\n player.debug.log('MediaSource', 'init')\n }\n\n destroy() {\n this.stop();\n this.bufferList = [];\n this.mediaSource = null;\n this.mediaSourceOpen = false;\n this.sourceBuffer = null;\n this.hasInit = false;\n this.isInitInfo = false;\n this.sequenceNumber = 0;\n this.cacheTrack = null;\n this.timeInit = false;\n this.off();\n this.player.debug.log('MediaSource', 'destroy')\n }\n\n get state() {\n return this.mediaSource.readyState\n }\n\n get isStateOpen() {\n return this.state === MEDIA_SOURCE_STATE.open;\n }\n\n get isStateClosed() {\n return this.state === MEDIA_SOURCE_STATE.closed;\n }\n\n get isStateEnded() {\n return this.state === MEDIA_SOURCE_STATE.ended;\n }\n\n get duration() {\n return this.mediaSource.duration\n }\n\n set duration(duration) {\n this.mediaSource.duration = duration\n }\n\n decodeVideo(payload, ts, isIframe) {\n const player = this.player;\n\n if (!this.hasInit) {\n if (isIframe && payload[1] === 0) {\n const videoCodec = (payload[0] & 0x0F);\n player.video.updateVideoInfo({\n encTypeCode: videoCodec\n })\n\n // 如果解码出来的是\n if (videoCodec === VIDEO_ENC_CODE.h265) {\n this.emit(EVENTS_ERROR.mediaSourceH265NotSupport)\n return;\n }\n if (!player._times.decodeStart) {\n player._times.decodeStart = now();\n }\n\n this._decodeConfigurationRecord(payload, ts, isIframe, videoCodec)\n this.hasInit = true;\n }\n } else {\n this._decodeVideo(payload, ts, isIframe);\n }\n }\n\n _doDecode() {\n const bufferItem = this.bufferList.shift();\n if (bufferItem) {\n this._decodeVideo(bufferItem.payload, bufferItem.ts, bufferItem.isIframe);\n }\n }\n\n\n _decodeConfigurationRecord(payload, ts, isIframe, videoCodec) {\n let data = payload.slice(5);\n let config = {};\n\n if (videoCodec === VIDEO_ENC_CODE.h264) {\n config = parseAVCDecoderConfigurationRecord(data)\n } else if (videoCodec === VIDEO_ENC_CODE.h265) {\n config = parseHEVCDecoderConfigurationRecord(data);\n }\n const metaData = {\n id: 1, // video tag data\n type: 'video',\n timescale: 1000,\n duration: 0,\n avcc: data,\n codecWidth: config.codecWidth,\n codecHeight: config.codecHeight,\n videoType: config.videoType\n }\n // ftyp\n const metaBox = MP4.generateInitSegment(metaData);\n this.isAvc = true;\n this.appendBuffer(metaBox.buffer);\n this.sequenceNumber = 0;\n this.cacheTrack = null;\n this.timeInit = false;\n }\n\n //\n _decodeVideo(payload, ts, isIframe) {\n const player = this.player;\n let arrayBuffer = payload.slice(5);\n let bytes = arrayBuffer.byteLength;\n let cts = 0;\n let dts = ts;\n // player.debug.log('MediaSource', '_decodeVideo', ts);\n const $video = player.video.$videoElement;\n\n if ($video.buffered.length > 1) {\n this.removeBuffer($video.buffered.start(0), $video.buffered.end(0));\n this.timeInit = false;\n }\n if (this.dropping && dts - this.cacheTrack.dts > 1000) {\n this.dropping = false;\n this.cacheTrack = {};\n } else if (this.cacheTrack && dts > this.cacheTrack.dts) {\n // 需要额外加8个size\n let mdatBytes = 8 + this.cacheTrack.size;\n let mdatbox = new Uint8Array(mdatBytes);\n mdatbox[0] = mdatBytes >>> 24 & 255;\n mdatbox[1] = mdatBytes >>> 16 & 255;\n mdatbox[2] = mdatBytes >>> 8 & 255;\n mdatbox[3] = mdatBytes & 255;\n mdatbox.set(MP4.types.mdat, 4);\n mdatbox.set(this.cacheTrack.data, 8);\n\n this.cacheTrack.duration = dts - this.cacheTrack.dts;\n // moof\n let moofbox = MP4.moof(this.cacheTrack, this.cacheTrack.dts);\n let result = new Uint8Array(moofbox.byteLength + mdatbox.byteLength);\n result.set(moofbox, 0);\n result.set(mdatbox, moofbox.byteLength);\n // appendBuffer\n this.appendBuffer(result.buffer)\n player.handleRender();\n player.updateStats({fps: true, ts: ts, buf: player.demux.delay})\n if (!player._times.videoStart) {\n player._times.videoStart = now();\n player.handlePlayToRenderTimes()\n }\n } else {\n player.debug.log('MediaSource', 'timeInit set false , cacheTrack = {}');\n this.timeInit = false;\n this.cacheTrack = {};\n }\n\n this.cacheTrack.id = 1;\n this.cacheTrack.sequenceNumber = ++this.sequenceNumber;\n this.cacheTrack.size = bytes;\n this.cacheTrack.dts = dts;\n this.cacheTrack.cts = cts;\n this.cacheTrack.isKeyframe = isIframe;\n this.cacheTrack.data = arrayBuffer;\n //\n this.cacheTrack.flags = {\n isLeading: 0,\n dependsOn: isIframe ? 2 : 1,\n isDependedOn: isIframe ? 1 : 0,\n hasRedundancy: 0,\n isNonSync: isIframe ? 0 : 1\n }\n\n //\n if (!this.timeInit && $video.buffered.length === 1) {\n player.debug.log('MediaSource', 'timeInit set true');\n this.timeInit = true;\n $video.currentTime = $video.buffered.end(0);\n }\n\n if (!this.isInitInfo && $video.videoWidth > 0 && $video.videoHeight > 0) {\n player.debug.log('MediaSource', `updateVideoInfo: ${$video.videoWidth},${$video.videoHeight}`);\n player.video.updateVideoInfo({\n width: $video.videoWidth,\n height: $video.videoHeight\n })\n player.video.initCanvasViewSize();\n this.isInitInfo = true;\n }\n }\n\n appendBuffer(buffer) {\n const {\n debug,\n events: {proxy},\n } = this.player;\n\n if (this.sourceBuffer === null) {\n this.sourceBuffer = this.mediaSource.addSourceBuffer(MP4_CODECS.avc);\n proxy(this.sourceBuffer, 'error', (error) => {\n this.player.emit(EVENTS.mseSourceBufferError, error);\n // this.dropSourceBuffer(false)\n })\n }\n\n if (this.sourceBuffer.updating === false && this.isStateOpen) {\n this.sourceBuffer.appendBuffer(buffer);\n return;\n }\n\n if (this.isStateClosed) {\n this.player.emit(EVENTS.mseSourceBufferError, 'mediaSource is not attached to video or mediaSource is closed')\n } else if (this.isStateEnded) {\n this.player.emit(EVENTS.mseSourceBufferError, 'mediaSource is closed')\n } else {\n if (this.sourceBuffer.updating === true) {\n this.player.emit(EVENTS.mseSourceBufferBusy);\n // this.dropSourceBuffer(false);\n }\n }\n }\n\n stop() {\n if (this.isStateOpen) {\n if (this.sourceBuffer) {\n this.sourceBuffer.abort();\n }\n }\n this.endOfStream();\n }\n\n dropSourceBuffer(flag) {\n const video = this.player.video;\n const $video = video.$videoElement;\n this.dropping = flag;\n if ($video.buffered.length > 0) {\n if ($video.buffered.end(0) - $video.currentTime > 1) {\n $video.currentTime = $video.buffered.end(0);\n }\n }\n }\n\n\n removeBuffer(start, end) {\n\n if (this.isStateOpen && this.sourceBuffer.updating === false) {\n try {\n this.sourceBuffer.remove(start, end)\n } catch (e) {\n console.error(e)\n }\n }\n }\n\n endOfStream() {\n if (this.isStateOpen) {\n this.mediaSource.endOfStream();\n }\n }\n}\n","// tks: https://github.com/richtr/NoSleep.js\n\nconst WEBM = \"data:video/webm;base64,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\";\nconst MP4 = \"data:video/mp4;base64,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\";\n\n\n// Detect iOS browsers < version 10\nconst\n oldIOS = () =>\n typeof navigator !== \"undefined\" &&\n parseFloat(\n (\n \"\" +\n (/CPU.*OS ([0-9_]{3,4})[0-9_]{0,1}|(CPU like).*AppleWebKit.*Mobile/i.exec(\n navigator.userAgent\n ) || [0, \"\"])[1]\n )\n .replace(\"undefined\", \"3_2\")\n .replace(\"_\", \".\")\n .replace(\"_\", \"\")\n ) < 10 &&\n !window.MSStream;\n\n// Detect native Wake Lock API support\nconst nativeWakeLock = () => \"wakeLock\" in navigator;\n\nexport default class NoSleep {\n constructor(player) {\n this.player = player;\n this.enabled = false;\n if (nativeWakeLock()) {\n this._wakeLock = null;\n const handleVisibilityChange = () => {\n if (this._wakeLock !== null && document.visibilityState === \"visible\") {\n this.enable();\n }\n };\n document.addEventListener(\"visibilitychange\", handleVisibilityChange);\n document.addEventListener(\"fullscreenchange\", handleVisibilityChange);\n } else if (oldIOS()) {\n this.noSleepTimer = null;\n } else {\n // Set up no sleep video element\n this.noSleepVideo = document.createElement(\"video\");\n\n this.noSleepVideo.setAttribute(\"title\", \"No Sleep\");\n this.noSleepVideo.setAttribute(\"playsinline\", \"\");\n\n this._addSourceToVideo(this.noSleepVideo, \"webm\", WEBM);\n this._addSourceToVideo(this.noSleepVideo, \"mp4\", MP4);\n\n this.noSleepVideo.addEventListener(\"loadedmetadata\", () => {\n if (this.noSleepVideo.duration <= 1) {\n // webm source\n this.noSleepVideo.setAttribute(\"loop\", \"\");\n } else {\n // mp4 source\n this.noSleepVideo.addEventListener(\"timeupdate\", () => {\n if (this.noSleepVideo.currentTime > 0.5) {\n this.noSleepVideo.currentTime = Math.random();\n }\n });\n }\n });\n }\n }\n\n _addSourceToVideo(element, type, dataURI) {\n var source = document.createElement(\"source\");\n source.src = dataURI;\n source.type = `video/${type}`;\n element.appendChild(source);\n }\n\n get isEnabled() {\n return this.enabled;\n }\n\n enable() {\n const debug = this.player.debug;\n if (nativeWakeLock()) {\n return navigator.wakeLock\n .request(\"screen\")\n .then((wakeLock) => {\n this._wakeLock = wakeLock;\n this.enabled = true;\n debug.log('wakeLock', 'Wake Lock active.')\n this._wakeLock.addEventListener(\"release\", () => {\n // ToDo: Potentially emit an event for the page to observe since\n // Wake Lock releases happen when page visibility changes.\n // (https://web.dev/wakelock/#wake-lock-lifecycle)\n debug.log('wakeLock', 'Wake Lock released.')\n });\n })\n .catch((err) => {\n this.enabled = false;\n debug.error('wakeLock', `${err.name}, ${err.message}`)\n throw err;\n });\n } else if (oldIOS()) {\n this.disable();\n this.noSleepTimer = window.setInterval(() => {\n if (!document.hidden) {\n window.location.href = window.location.href.split(\"#\")[0];\n window.setTimeout(window.stop, 0);\n }\n }, 15000);\n this.enabled = true;\n return Promise.resolve();\n } else {\n let playPromise = this.noSleepVideo.play();\n return playPromise\n .then((res) => {\n this.enabled = true;\n return res;\n })\n .catch((err) => {\n this.enabled = false;\n throw err;\n });\n }\n }\n\n disable() {\n const debug = this.player.debug;\n if (nativeWakeLock()) {\n if (this._wakeLock) {\n this._wakeLock.release();\n }\n this._wakeLock = null;\n } else if (oldIOS()) {\n if (this.noSleepTimer) {\n debug.warn('wakeLock', 'NoSleep now disabled for older iOS devices.')\n\n window.clearInterval(this.noSleepTimer);\n this.noSleepTimer = null;\n }\n } else {\n this.noSleepVideo.pause();\n }\n this.enabled = false;\n }\n}\n","import {DEFAULT_PLAYER_OPTIONS, EVENTS, EVENTS_ERROR, JESSIBUCA_EVENTS} from \"../constant\";\nimport Debug from \"../utils/debug\";\nimport Events from \"../utils/events\";\nimport property from './property';\nimport events from './events';\nimport {\n fpsStatus,\n initPlayTimes,\n isEmpty,\n isFullScreen, isMobile,\n isNotEmpty,\n now,\n supportMSE,\n supportOffscreenV2,\n supportWCS\n} from \"../utils\";\nimport Video from \"../video\";\nimport Audio from \"../audio\";\nimport Stream from \"../stream\";\nimport Recorder from \"../recorder\";\nimport DecoderWorker from \"../worker/index\";\nimport Emitter from \"../utils/emitter\";\nimport Demux from \"../demux\";\nimport WebcodecsDecoder from \"../decoder/webcodecs\";\nimport Control from \"../control\";\nimport './style.scss'\nimport observer from \"./observer\";\nimport MseDecoder from \"../decoder/mediaSource\";\nimport NoSleep from \"../utils/noSleep\";\n\nexport default class Player extends Emitter {\n constructor(container, options) {\n super()\n this.$container = container;\n this._opt = Object.assign({}, DEFAULT_PLAYER_OPTIONS, options)\n this.debug = new Debug(this);\n\n\n if (this._opt.useWCS) {\n this._opt.useWCS = supportWCS();\n }\n\n if (this._opt.useMSE) {\n this._opt.useMSE = supportMSE();\n }\n\n // 如果使用mse则强制不允许 webcodecs\n if (this._opt.useMSE) {\n if (this._opt.useWCS) {\n this.debug.log('Player', 'useWCS set true->false')\n }\n\n if (!this._opt.forceNoOffscreen) {\n this.debug.log('Player', 'forceNoOffscreen set false->true')\n }\n\n this._opt.useWCS = false;\n this._opt.forceNoOffscreen = true;\n } else if (this._opt.useWCS) {\n\n }\n\n\n if (!this._opt.forceNoOffscreen) {\n if (!supportOffscreenV2()) {\n this._opt.forceNoOffscreen = true;\n this._opt.useOffscreen = false;\n } else {\n this._opt.useOffscreen = true;\n }\n }\n\n if (!this._opt.hasAudio) {\n this._opt.operateBtns.audio = false\n }\n\n this._opt.hasControl = this._hasControl();\n //\n this._loading = false;\n this._playing = false;\n this._hasLoaded = false;\n\n //\n this._checkHeartTimeout = null;\n this._checkLoadingTimeout = null;\n\n //\n this._startBpsTime = null;\n this._isPlayingBeforePageHidden = false;\n this._stats = {\n buf: 0, // 当前缓冲区时长,单位毫秒,\n fps: 0, // 当前视频帧率\n abps: 0, // 当前音频码率,单位bit\n vbps: 0, // 当前视频码率,单位bit\n ts: 0 // 当前视频帧pts,单位毫秒\n }\n\n // 各个步骤的时间统计\n this._times = initPlayTimes();\n\n //\n this._videoTimestamp = 0;\n this._audioTimestamp = 0;\n\n property(this);\n\n this.events = new Events(this);\n this.video = new Video(this);\n\n if (this._opt.hasAudio) {\n this.audio = new Audio(this);\n }\n this.recorder = new Recorder(this);\n\n if (!this._onlyMseOrWcsVideo()) {\n this.decoderWorker = new DecoderWorker(this);\n } else {\n this.loaded = true;\n }\n\n this.stream = null;\n this.demux = null;\n\n if (this._opt.useWCS) {\n this.webcodecsDecoder = new WebcodecsDecoder(this)\n }\n\n if (this._opt.useMSE) {\n this.mseDecoder = new MseDecoder(this);\n }\n\n //\n this.control = new Control(this);\n\n this.keepScreenOn = new NoSleep(this);\n\n\n events(this);\n observer(this);\n\n\n if (this._opt.useWCS) {\n this.debug.log('Player', 'use WCS')\n }\n\n if (this._opt.useMSE) {\n this.debug.log('Player', 'use MSE')\n }\n\n if (this._opt.useOffscreen) {\n this.debug.log('Player', 'use offscreen')\n }\n\n this.debug.log('Player options', this._opt);\n }\n\n\n destroy() {\n this._loading = false;\n this._playing = false;\n this._hasLoaded = false;\n\n this._times = initPlayTimes();\n\n if (this.decoderWorker) {\n this.decoderWorker.destroy();\n this.decoderWorker = null;\n }\n if (this.video) {\n this.video.destroy();\n this.video = null;\n }\n\n if (this.audio) {\n this.audio.destroy();\n this.audio = null;\n }\n\n if (this.stream) {\n this.stream.destroy();\n this.stream = null;\n }\n\n if (this.recorder) {\n this.recorder.destroy();\n this.recorder = null;\n }\n\n if (this.control) {\n this.control.destroy();\n this.control = null;\n }\n\n if (this.webcodecsDecoder) {\n this.webcodecsDecoder.destroy();\n this.webcodecsDecoder = null;\n }\n\n if (this.mseDecoder) {\n this.mseDecoder.destroy();\n this.mseDecoder = null;\n }\n\n if (this.demux) {\n this.demux.destroy();\n this.demux = null;\n }\n\n\n if (this.events) {\n this.events.destroy();\n this.events = null;\n }\n\n this.clearCheckHeartTimeout();\n this.clearCheckLoadingTimeout();\n //\n this.releaseWakeLock();\n this.keepScreenOn = null;\n // reset stats\n this.resetStats();\n this._audioTimestamp = 0;\n this._videoTimestamp = 0;\n\n // 其他没法解耦的,通过 destroy 方式\n this.emit('destroy');\n // 接触所有绑定事件\n this.off();\n\n this.debug.log('play', 'destroy end');\n }\n\n set fullscreen(value) {\n if (isMobile()) {\n this.emit(EVENTS.webFullscreen, value);\n setTimeout(() => {\n this.updateOption({\n rotate: value ? 270 : 0,\n })\n this.resize();\n }, 10)\n } else {\n this.emit(EVENTS.fullscreen, value);\n }\n }\n\n get fullscreen() {\n return isFullScreen() || this.webFullscreen;\n }\n\n set webFullscreen(value) {\n this.emit(EVENTS.webFullscreen, value);\n }\n\n get webFullscreen() {\n return this.$container.classList.contains('jessibuca-fullscreen-web')\n }\n\n set loaded(value) {\n this._hasLoaded = value;\n }\n\n get loaded() {\n return this._hasLoaded;\n }\n\n //\n set playing(value) {\n\n if (value) {\n // 将loading 设置为 false\n this.loading = false;\n }\n\n if (this.playing !== value) {\n this._playing = value;\n this.emit(EVENTS.playing, value);\n this.emit(EVENTS.volumechange, this.volume);\n\n if (value) {\n this.emit(EVENTS.play);\n } else {\n this.emit(EVENTS.pause);\n }\n }\n\n }\n\n get playing() {\n return this._playing;\n }\n\n get volume() {\n return (this.audio && this.audio.volume) || 0;\n }\n\n set volume(value) {\n this.audio && this.audio.setVolume(value);\n }\n\n set loading(value) {\n if (this.loading !== value) {\n this._loading = value;\n this.emit(EVENTS.loading, this._loading);\n }\n }\n\n get loading() {\n return this._loading;\n }\n\n set recording(value) {\n if (value) {\n if (this.playing) {\n this.recorder.startRecord();\n }\n } else {\n this.recorder.stopRecordAndSave();\n }\n }\n\n get recording() {\n return this.recorder && this.recorder.recording;\n }\n\n set audioTimestamp(value) {\n if (value === null) {\n return;\n }\n this._audioTimestamp = value;\n }\n\n //\n get audioTimestamp() {\n return this._audioTimestamp;\n }\n\n //\n set videoTimestamp(value) {\n if (value === null) {\n return;\n }\n this._videoTimestamp = value;\n // just for wasm\n if (!this._opt.useWCS && !this._opt.useMSE) {\n if (this.audioTimestamp && this.videoTimestamp) {\n this.audio && this.audio.emit(EVENTS.videoSyncAudio, {\n audioTimestamp: this.audioTimestamp,\n videoTimestamp: this.videoTimestamp,\n diff: this.audioTimestamp - this.videoTimestamp\n })\n }\n }\n }\n\n //\n get videoTimestamp() {\n return this._videoTimestamp;\n }\n\n\n /**\n *\n * @param options\n */\n updateOption(options) {\n this._opt = Object.assign({}, this._opt, options)\n }\n\n /**\n *\n * @returns {Promise}\n */\n init() {\n return new Promise((resolve, reject) => {\n if (!this.stream) {\n this.stream = new Stream(this);\n }\n\n if (!this.demux) {\n this.demux = new Demux(this);\n }\n\n if (this._opt.useWCS) {\n if (!this.webcodecsDecoder) {\n this.webcodecsDecoder = new WebcodecsDecoder(this)\n }\n }\n\n if (this._opt.useMSE) {\n if (!this.mseDecoder) {\n this.mseDecoder = new MseDecoder(this);\n }\n }\n\n if (!this.decoderWorker && !this._onlyMseOrWcsVideo()) {\n this.decoderWorker = new DecoderWorker(this);\n\n this.once(EVENTS.decoderWorkerInit, () => {\n resolve()\n })\n } else {\n resolve()\n }\n\n })\n }\n\n\n /**\n *\n * @param url\n * @returns {Promise}\n */\n play(url) {\n return new Promise((resolve, reject) => {\n if (!url && !this._opt.url) {\n return reject();\n }\n\n this.loading = true;\n this.playing = false;\n this._times.playInitStart = now();\n if (!url) {\n url = this._opt.url;\n }\n this._opt.url = url;\n\n this.clearCheckHeartTimeout();\n\n this.init().then(() => {\n this._times.playStart = now();\n //\n if (this._opt.isNotMute) {\n this.mute(false);\n }\n\n\n if (this.webcodecsDecoder) {\n this.webcodecsDecoder.once(EVENTS_ERROR.webcodecsH265NotSupport, () => {\n this.emit(EVENTS_ERROR.webcodecsH265NotSupport)\n if (!this._opt.autoWasm) {\n this.emit(EVENTS.error, EVENTS_ERROR.webcodecsH265NotSupport);\n }\n })\n }\n\n if (this.mseDecoder) {\n this.mseDecoder.once(EVENTS_ERROR.mediaSourceH265NotSupport, () => {\n this.emit(EVENTS_ERROR.mediaSourceH265NotSupport)\n if (!this._opt.autoWasm) {\n this.emit(EVENTS.error, EVENTS_ERROR.mediaSourceH265NotSupport);\n }\n })\n }\n\n this.enableWakeLock();\n\n this.stream.fetchStream(url);\n\n //\n this.checkLoadingTimeout();\n // fetch error\n this.stream.once(EVENTS_ERROR.fetchError, (error) => {\n reject(error)\n })\n\n // ws\n this.stream.once(EVENTS_ERROR.websocketError, (error) => {\n reject(error)\n })\n\n // success\n this.stream.once(EVENTS.streamSuccess, () => {\n resolve();\n this._times.streamResponse = now();\n //\n this.video.play();\n })\n\n }).catch((e) => {\n reject(e)\n })\n })\n }\n\n /**\n *\n */\n close() {\n return new Promise((resolve, reject) => {\n this._close().then(() => {\n this.video.clearView();\n resolve()\n })\n })\n }\n\n _close() {\n return new Promise((resolve, reject) => {\n //\n if (this.stream) {\n this.stream.destroy();\n this.stream = null;\n }\n\n if (this.demux) {\n this.demux.destroy();\n this.demux = null;\n }\n\n //\n if (this.decoderWorker) {\n this.decoderWorker.destroy();\n this.decoderWorker = null;\n }\n\n if (this.webcodecsDecoder) {\n this.webcodecsDecoder.destroy();\n this.webcodecsDecoder = null;\n }\n\n if (this.mseDecoder) {\n this.mseDecoder.destroy();\n this.mseDecoder = null;\n }\n\n this.clearCheckHeartTimeout();\n this.clearCheckLoadingTimeout();\n this.playing = false;\n this.loading = false;\n this.recording = false;\n // release audio buffer\n this.audio && this.audio.pause();\n this.video && this.video.pause();\n // release lock\n this.releaseWakeLock();\n // reset stats\n this.resetStats();\n //\n this._audioTimestamp = 0;\n this._videoTimestamp = 0;\n //\n this._times = initPlayTimes();\n //\n setTimeout(() => {\n resolve()\n }, 0)\n })\n }\n\n /**\n *\n * @param flag {boolean} 是否清除画面\n * @returns {Promise}\n */\n pause(flag) {\n if (flag) {\n return this.close();\n } else {\n return this._close();\n }\n }\n\n /**\n *\n * @param flag\n */\n mute(flag) {\n this.audio && this.audio.mute(flag)\n }\n\n /**\n *\n */\n resize() {\n this.video.resize();\n }\n\n /**\n *\n * @param fileName\n * @param fileType\n */\n startRecord(fileName, fileType) {\n if (this.recording) {\n return;\n }\n\n this.recorder.setFileName(fileName, fileType);\n this.recording = true;\n }\n\n /**\n *\n */\n stopRecordAndSave() {\n if (this.recording) {\n this.recording = false;\n }\n }\n\n _hasControl() {\n let result = false;\n\n let hasBtnShow = false;\n Object.keys(this._opt.operateBtns).forEach((key) => {\n if (this._opt.operateBtns[key]) {\n hasBtnShow = true;\n }\n });\n\n if (this._opt.showBandwidth || this._opt.text || hasBtnShow) {\n result = true;\n }\n\n return result;\n }\n\n _onlyMseOrWcsVideo() {\n return this._opt.hasAudio === false && (this._opt.useMSE || (this._opt.useWCS && !this._opt.useOffscreen))\n }\n\n checkHeart() {\n this.clearCheckHeartTimeout();\n this.checkHeartTimeout();\n }\n\n // 心跳检查,如果渲染间隔暂停了多少时间之后,就会抛出异常\n checkHeartTimeout() {\n this._checkHeartTimeout = setTimeout(() => {\n this.pause(false).then(() => {\n this.emit(EVENTS.timeout, EVENTS.delayTimeout);\n this.emit(EVENTS.delayTimeout);\n });\n }, this._opt.heartTimeout * 1000)\n }\n\n //\n clearCheckHeartTimeout() {\n if (this._checkHeartTimeout) {\n clearTimeout(this._checkHeartTimeout);\n this._checkHeartTimeout = null;\n }\n }\n\n // loading 等待时间\n checkLoadingTimeout() {\n this._checkLoadingTimeout = setTimeout(() => {\n this.pause(false).then(() => {\n this.emit(EVENTS.timeout, EVENTS.loadingTimeout);\n this.emit(EVENTS.loadingTimeout);\n });\n }, this._opt.loadingTimeout * 1000)\n }\n\n clearCheckLoadingTimeout() {\n if (this._checkLoadingTimeout) {\n clearTimeout(this._checkLoadingTimeout);\n this._checkLoadingTimeout = null;\n }\n }\n\n handleRender() {\n if (this.loading) {\n this.emit(EVENTS.start);\n this.loading = false;\n this.clearCheckLoadingTimeout();\n }\n if (!this.playing) {\n this.playing = true;\n }\n this.checkHeart();\n }\n\n\n //\n updateStats(options) {\n options = options || {};\n\n if (!this._startBpsTime) {\n this._startBpsTime = now();\n }\n\n if (isNotEmpty(options.ts)) {\n this._stats.ts = options.ts;\n }\n\n if (isNotEmpty(options.buf)) {\n this._stats.buf = options.buf;\n }\n\n if (options.fps) {\n this._stats.fps += 1;\n }\n if (options.abps) {\n this._stats.abps += options.abps;\n }\n if (options.vbps) {\n this._stats.vbps += options.vbps;\n }\n\n const _nowTime = now();\n const timestamp = _nowTime - this._startBpsTime;\n\n if (timestamp < 1 * 1000) {\n return;\n }\n\n this.emit(EVENTS.stats, this._stats);\n this.emit(EVENTS.performance, fpsStatus(this._stats.fps));\n this._stats.fps = 0;\n this._stats.abps = 0;\n this._stats.vbps = 0;\n this._startBpsTime = _nowTime;\n }\n\n resetStats() {\n this._startBpsTime = null;\n this._stats = {\n buf: 0, //ms\n fps: 0,\n abps: 0,\n vbps: 0,\n ts: 0\n }\n }\n\n enableWakeLock() {\n if (this._opt.keepScreenOn) {\n this.keepScreenOn.enable();\n }\n }\n\n releaseWakeLock() {\n if (this._opt.keepScreenOn) {\n this.keepScreenOn.disable();\n }\n }\n\n handlePlayToRenderTimes() {\n const _times = this._times;\n _times.playTimestamp = _times.playStart - _times.playInitStart;\n _times.streamTimestamp = _times.streamStart - _times.playStart;\n _times.streamResponseTimestamp = _times.streamResponse - _times.streamStart;\n _times.demuxTimestamp = _times.demuxStart - _times.streamResponse;\n _times.decodeTimestamp = _times.decodeStart - _times.demuxStart;\n _times.videoTimestamp = _times.videoStart - _times.decodeStart;\n _times.allTimestamp = _times.videoStart - _times.playInitStart;\n this.emit(EVENTS.playToRenderTimes, _times);\n }\n}\n","import Player from './player';\nimport Events from \"./utils/events\";\nimport {DEMUX_TYPE, EVENTS, EVENTS_ERROR, JESSIBUCA_EVENTS, PLAYER_PLAY_PROTOCOL, SCALE_MODE_TYPE} from \"./constant\";\nimport {isEmpty, isNotEmpty, supportWCS, uuid16} from \"./utils\";\nimport Emitter from \"./utils/emitter\";\n\n\nclass Jessibuca extends Emitter {\n static ERROR = EVENTS_ERROR\n\n static TIMEOUT = {\n loadingTimeout: EVENTS.loadingTimeout,\n delayTimeout: EVENTS.delayTimeout,\n }\n\n constructor(options) {\n super()\n let _opt = options;\n let $container = options.container;\n if (typeof options.container === 'string') {\n $container = document.querySelector(options.container);\n }\n if (!$container) {\n throw new Error('Jessibuca need container option');\n return;\n }\n\n $container.classList.add('jessibuca-container');\n\n delete _opt.container;\n\n // s -> ms\n if (isNotEmpty(_opt.videoBuffer)) {\n _opt.videoBuffer = Number(_opt.videoBuffer) * 1000\n }\n\n // setting\n if (isNotEmpty(_opt.timeout)) {\n if (isEmpty(_opt.loadingTimeout)) {\n _opt.loadingTimeout = _opt.timeout;\n }\n\n if (isEmpty(_opt.heartTimeout)) {\n _opt.heartTimeout = _opt.timeout\n }\n }\n\n this._opt = _opt;\n this.$container = $container;\n this._loadingTimeoutReplayTimes = 0;\n this._heartTimeoutReplayTimes = 0;\n this.events = new Events(this);\n this._initPlayer($container, _opt);\n }\n\n /**\n *\n */\n destroy() {\n if (this.events) {\n this.events.destroy();\n this.events = null;\n }\n\n if (this.player) {\n this.player.destroy();\n this.player = null;\n }\n this.$container = null;\n this._opt = null;\n this._loadingTimeoutReplayTimes = 0;\n this._heartTimeoutReplayTimes = 0;\n this.off();\n }\n\n _initPlayer($container, options) {\n this.player = new Player($container, options);\n this._bindEvents();\n }\n\n _resetPlayer(options = {}) {\n this.player.destroy();\n this.player = null;\n const _options = Object.assign(this._opt, options);\n this._initPlayer(this.$container, _options);\n }\n\n _bindEvents() {\n // 对外的事件\n Object.keys(JESSIBUCA_EVENTS).forEach((key) => {\n this.player.on(JESSIBUCA_EVENTS[key], (value) => {\n this.emit(key, value)\n })\n })\n }\n\n /**\n * 是否开启控制台调试打印\n * @param value {Boolean}\n */\n setDebug(value) {\n this.player.updateOption({\n isDebug: !!value\n })\n }\n\n /**\n *\n */\n mute() {\n this.player.mute(true);\n }\n\n /**\n *\n */\n cancelMute() {\n this.player.mute(false);\n }\n\n /**\n *\n * @param value {number}\n */\n setVolume(value) {\n this.player.volume = value;\n }\n\n /**\n *\n */\n audioResume() {\n this.player.audio && this.player.audio.audioEnabled(true);\n }\n\n /**\n * 设置超时时长, 单位秒 在连接成功之前和播放中途,如果超过设定时长无数据返回,则回调timeout事件\n * @param value {number}\n */\n setTimeout(time) {\n time = Number(time);\n this.player.updateOption({\n timeout: time,\n loadingTimeout: time,\n heartTimeout: time\n })\n }\n\n /**\n *\n * @param type {number}: 0,1,2\n */\n setScaleMode(type) {\n type = Number(type);\n let options = {\n isFullResize: false,\n isResize: false\n }\n switch (type) {\n case SCALE_MODE_TYPE.full:\n options.isFullResize = false;\n options.isResize = false;\n break;\n case SCALE_MODE_TYPE.auto:\n options.isFullResize = false;\n options.isResize = true;\n break;\n case SCALE_MODE_TYPE.fullAuto:\n options.isFullResize = true;\n options.isResize = true;\n break;\n }\n\n this.player.updateOption(options);\n this.resize();\n }\n\n /**\n *\n * @returns {Promise}\n */\n pause() {\n return this.player.pause();\n }\n\n /**\n *\n */\n close() {\n // clear url\n this._opt.url = '';\n return this.player.close();\n }\n\n\n /**\n *\n */\n clearView() {\n this.player.video.clearView()\n }\n\n /**\n *\n * @param url {string}\n * @returns {Promise}\n */\n play(url) {\n return new Promise((resolve, reject) => {\n if (!url && !this._opt.url) {\n this.emit(EVENTS.error, EVENTS_ERROR.playError)\n reject();\n return;\n }\n\n if (url) {\n // url 相等的时候。\n if (this._opt.url) {\n // 存在相同的 url\n if (url === this._opt.url) {\n // 正在播放\n if (this.player.playing) {\n resolve();\n } else {\n // pause -> play\n this.clearView();\n this.player.play(this._opt.url).then(() => {\n resolve();\n }).catch(() => {\n this.player.pause().then(() => {\n reject();\n })\n })\n }\n } else {\n // url 发生改变了\n this.player.pause().then(() => {\n // 清除 画面\n this.clearView();\n return this._play(url);\n }).catch(() => {\n reject();\n })\n }\n } else {\n return this._play(url);\n }\n } else {\n // url 不存在的时候\n // 就是从 play -> pause -> play\n this.player.play(this._opt.url).then(() => {\n resolve();\n }).catch(() => {\n this.player.pause().then(() => {\n reject();\n })\n })\n }\n })\n }\n\n /**\n *\n * @param url {string}\n * @returns {Promise}\n * @private\n */\n _play(url) {\n return new Promise((resolve, reject) => {\n this._opt.url = url;\n // 新的url\n const isHttp = url.indexOf(\"http\") === 0;\n //\n const protocol = isHttp ? PLAYER_PLAY_PROTOCOL.fetch : PLAYER_PLAY_PROTOCOL.websocket\n //\n const demuxType = (isHttp || url.indexOf(\".flv\") !== -1 || this._opt.isFlv) ? DEMUX_TYPE.flv : DEMUX_TYPE.m7s;\n\n this.player.updateOption({\n protocol,\n demuxType\n })\n\n this.player.once(EVENTS_ERROR.mediaSourceH265NotSupport, () => {\n this.close().then(() => {\n if (this.player._opt.autoWasm) {\n this.player.debug.log('Jessibuca', 'auto wasm [mse-> wasm] reset player and play')\n this._resetPlayer({useMSE: false})\n this.play(url).then(() => {\n // resolve();\n this.player.debug.log('Jessibuca', 'auto wasm [mse-> wasm] reset player and play success')\n }).catch(() => {\n // reject();\n this.player.debug.log('Jessibuca', 'auto wasm [mse-> wasm] reset player and play error')\n });\n }\n });\n })\n\n this.player.once(EVENTS_ERROR.webcodecsH265NotSupport, () => {\n this.close().then(() => {\n if (this.player._opt.autoWasm) {\n this.player.debug.log('Jessibuca', 'auto wasm [wcs-> wasm] reset player and play')\n this._resetPlayer({useWCS: false})\n this.play(url).then(() => {\n // resolve();\n this.player.debug.log('Jessibuca', 'auto wasm [wcs-> wasm] reset player and play success')\n }).catch(() => {\n // reject();\n this.player.debug.log('Jessibuca', 'auto wasm [wcs-> wasm] reset player and play error')\n });\n }\n });\n })\n\n // 解码报错。\n this.player.once(EVENTS_ERROR.wasmDecodeError, () => {\n if (this.player._opt.wasmDecodeErrorReplay) {\n this.close().then(() => {\n this.player.debug.log('Jessibuca', 'wasm decode error and reset player and play')\n this._resetPlayer({useWCS: false})\n this.play(url).then(() => {\n // resolve();\n this.player.debug.log('Jessibuca', 'wasm decode error and reset player and play success')\n }).catch(() => {\n // reject();\n this.player.debug.log('Jessibuca', 'wasm decode error and reset player and play error')\n });\n })\n }\n })\n\n // 监听 delay timeout\n this.player.once(EVENTS.delayTimeout, () => {\n if (this.player._opt.heartTimeoutReplay && this._heartTimeoutReplayTimes < this.player._opt.heartTimeoutReplayTimes) {\n this._heartTimeoutReplayTimes += 1;\n this.play(url).then(() => {\n // resolve();\n this._heartTimeoutReplayTimes = 0;\n }).catch(() => {\n // reject();\n });\n }\n })\n\n // 监听 loading timeout\n this.player.once(EVENTS.loadingTimeout, () => {\n if (this.player._opt.loadingTimeoutReplay && this._loadingTimeoutReplayTimes < this.player._opt.loadingTimeoutReplayTimes) {\n this._loadingTimeoutReplayTimes += 1;\n this.play(url).then(() => {\n // resolve();\n this._loadingTimeoutReplayTimes = 0;\n }).catch(() => {\n // reject();\n });\n }\n })\n\n\n if (this.hasLoaded()) {\n this.player.play(url).then(() => {\n resolve();\n }).catch(() => {\n this.player.pause().then(() => {\n reject();\n })\n })\n } else {\n this.player.once(EVENTS.decoderWorkerInit, () => {\n this.player.play(url).then(() => {\n resolve();\n }).catch(() => {\n this.player.pause().then(() => {\n reject();\n })\n })\n })\n }\n })\n }\n\n /**\n *\n */\n resize() {\n this.player.resize();\n }\n\n /**\n *\n * @param time {number} s\n */\n setBufferTime(time) {\n time = Number(time)\n // s -> ms\n this.player.updateOption({\n videoBuffer: time * 1000\n })\n // update worker config\n this.player.decoderWorker && this.player.decoderWorker.updateWorkConfig({\n key: 'videoBuffer',\n value: time * 1000\n })\n }\n\n /**\n *\n * @param deg {number}\n */\n setRotate(deg) {\n deg = parseInt(deg, 10)\n const list = [0, 90, 270];\n if (this._opt.rotate === deg || list.indexOf(deg) === -1) {\n return;\n }\n this.player.updateOption({\n rotate: deg\n })\n this.resize();\n }\n\n /**\n *\n * @returns {boolean}\n */\n hasLoaded() {\n return this.player.loaded;\n }\n\n /**\n *\n */\n setKeepScreenOn() {\n this.player.updateOption({\n keepScreenOn: true\n })\n }\n\n /**\n *\n * @param flag {Boolean}\n */\n setFullscreen(flag) {\n const fullscreen = !!flag;\n if (this.player.fullscreen !== fullscreen) {\n this.player.fullscreen = fullscreen;\n }\n }\n\n /**\n *\n * @param filename {string}\n * @param format {string}\n * @param quality {number}\n * @param type {string} download,base64,blob\n */\n screenshot(filename, format, quality, type) {\n return this.player.video.screenshot(filename, format, quality, type)\n }\n\n /**\n *\n * @param fileName {string}\n * @param fileType {string}\n * @returns {Promise}\n */\n startRecord(fileName, fileType) {\n return new Promise((resolve, reject) => {\n if (this.player.playing) {\n this.player.startRecord(fileName, fileType)\n resolve();\n } else {\n reject();\n }\n })\n }\n\n stopRecordAndSave() {\n if (this.player.recording) {\n this.player.stopRecordAndSave();\n }\n }\n\n /**\n *\n * @returns {Boolean}\n */\n isPlaying() {\n return this.player.playing;\n }\n\n /**\n * 是否静音状态\n * @returns {Boolean}\n */\n isMute() {\n return this.player.audio ? this.player.audio.isMute : true;\n }\n\n /**\n * 是否在录制视频\n * @returns {*}\n */\n isRecording() {\n return this.player.recorder.recording;\n }\n\n\n}\n\n\nwindow.Jessibuca = Jessibuca;\n\nexport default Jessibuca;\n"],"names":["PLAYER_PLAY_PROTOCOL","websocket","fetch","webrtc","DEMUX_TYPE","flv","m7s","DEFAULT_PLAYER_OPTIONS","videoBuffer","isResize","isFullResize","isFlv","debug","hotKey","loadingTimeout","heartTimeout","timeout","loadingTimeoutReplay","heartTimeoutReplay","loadingTimeoutReplayTimes","heartTimeoutReplayTimes","supportDblclickFullscreen","showBandwidth","keepScreenOn","isNotMute","hasAudio","hasVideo","operateBtns","fullscreen","screenshot","play","audio","record","controlAutoHide","hasControl","loadingText","background","decoder","url","rotate","forceNoOffscreen","hiddenAutoPause","protocol","demuxType","useWCS","wcsUseVideoRender","useMSE","useOffscreen","autoWasm","wasmDecodeErrorReplay","openWebglAlignment","WORKER_CMD_TYPE","init","initVideo","render","playAudio","initAudio","kBps","decode","audioCode","videoCode","wasmError","WASM_ERROR","invalidNalUnitSize","MEDIA_TYPE","video","FLV_MEDIA_TYPE","WORKER_SEND_TYPE","audioDecode","videoDecode","close","updateConfig","EVENTS","webFullscreen","decoderWorkerInit","playing","pause","mute","load","loading","videoInfo","timeUpdate","audioInfo","log","error","delayTimeout","stats","performance","recording","recordingTimestamp","recordStart","recordEnd","recordCreateError","buffer","videoFrame","start","metadata","resize","streamEnd","streamSuccess","streamMessage","streamError","volumechange","destroy","mseSourceOpen","mseSourceClose","mseSourceBufferError","mseSourceBufferBusy","videoWaiting","videoTimeUpdate","videoSyncAudio","playToRenderTimes","JESSIBUCA_EVENTS","EVENTS_ERROR","playError","fetchError","websocketError","webcodecsH265NotSupport","mediaSourceH265NotSupport","wasmDecodeError","WEBSOCKET_STATUS","notConnect","open","SCREENSHOT_TYPE","download","base64","blob","VIDEO_ENC_TYPE","VIDEO_ENC_CODE","h264","h265","AUDIO_ENC_TYPE","H265_NAL_TYPE","vps","sps","pps","CONTROL_HEIGHT","SCALE_MODE_TYPE","full","auto","fullAuto","FILE_SUFFIX","mp4","webm","CANVAS_RENDER_TYPE","webcodecs","webgl","offscreen","ENCODED_VIDEO_TYPE","key","delta","MP4_CODECS","avc","hev","MEDIA_SOURCE_STATE","ended","closed","AUDIO_SYNC_VIDEO_DIFF","HOT_KEY","esc","arrowUp","arrowDown","Debug","constructor","master","name","_opt","args","console","warn","Events","destroys","proxy","bind","target","callback","option","Array","isArray","map","item","addEventListener","removeEventListener","push","forEach","event","player","Object","defineProperty","get","clientRect","$container","getBoundingClientRect","width","Math","max","clientWidth","height","clientHeight","rect","noop","supportOffscreen","$canvas","transferControlToOffscreen","supportOffscreenV2","OffscreenCanvas","createContextGL","gl","validContextNames","nameIndex","length","contextName","contextOptions","preserveDrawingBuffer","getContext","e","getParameter","dataURLToFile","dataURL","arr","split","bstr","atob","type","replace","n","u8arr","Uint8Array","charCodeAt","File","downloadImg","content","fileName","aLink","document","createElement","href","URL","createObjectURL","click","setTimeout","revokeObjectURL","isIOS","now","Date","getTime","WebAssembly","instantiate","module","Module","of","Instance","clamp","num","a","b","min","setStyle","element","value","keys","style","getStyle","numberType","getComputedStyle","getPropertyValue","parseFloat","getNowTime","calculationRate","totalSize","lastTime","size","thisTime","diffTime","downloadRecord","suffix","window","isMobile","test","navigator","userAgent","toLowerCase","UA","supportWCS","formatVideoDecoderConfigure","avcC","codecArray","subarray","codecString","j","h","toString","codec","description","isFullScreen","mozIsFullScreen","webkitIsFullScreen","bpsSize","toFixed","fpsStatus","fps","result","createEmptyImageBitmap","$canvasElement","createImageBitmap","supportMSE","MediaSource","isTypeSupported","isEmpty","undefined","isBoolean","isNotEmpty","initPlayTimes","playInitStart","playStart","streamStart","streamResponse","demuxStart","decodeStart","videoStart","playTimestamp","streamTimestamp","streamResponseTimestamp","demuxTimestamp","decodeTimestamp","videoTimestamp","allTimestamp","formatTimeTips","time","hour","floor","sec","round","screenfullChange","emit","screenfull","on","events","off","loaded","request","then","catch","exit","classList","add","remove","ignoreList","includes","Emitter","fn","ctx","once","self","listener","apply","_","evtArr","slice","data","i","evts","liveEvents","len","vertexShaderScript","join","fragmentShaderScript","pixelStorei","UNPACK_ALIGNMENT","vertexShader","createShader","VERTEX_SHADER","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","getShaderInfoLog","fragmentShader","FRAGMENT_SHADER","program","createProgram","attachShader","linkProgram","getProgramParameter","LINK_STATUS","getProgramInfoLog","useProgram","vertexPosBuffer","createBuffer","bindBuffer","ARRAY_BUFFER","bufferData","Float32Array","STATIC_DRAW","vertexPosRef","getAttribLocation","enableVertexAttribArray","vertexAttribPointer","FLOAT","texturePosBuffer","texturePosRef","_initTexture","index","textureRef","createTexture","bindTexture","TEXTURE_2D","texParameteri","TEXTURE_MAG_FILTER","LINEAR","TEXTURE_MIN_FILTER","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","uniform1i","getUniformLocation","yTextureRef","uTextureRef","vTextureRef","w","y","u","v","viewport","activeTexture","TEXTURE0","texImage2D","LUMINANCE","UNSIGNED_BYTE","TEXTURE1","TEXTURE2","drawArrays","TRIANGLE_STRIP","deleteProgram","deleteBuffer","deleteTexture","CommonLoader","updateVideoInfo","encTypeCode","encType","clearView","CanvasVideoLoader","position","top","left","$videoElement","appendChild","context2D","contextGl","contextGlRender","contextGlDestroy","bitmaprenderer","renderType","_initCanvasRender","removeChild","_initContextGl","createWebGL","_initContext2D","_supportOffscreen","_bindOffscreen","initCanvasViewSize","msg","ts","transferFromImageBitmap","output","drawImage","filename","format","quality","formatType","png","jpeg","webp","encoderOptions","Number","toDataURL","file","imageBitMap","clear","COLOR_BUFFER_BIT","clearRect","resizeWidth","resizeHeight","wScale","hScale","scale","transform","VideoLoader","muted","trackGenerator","MediaStreamTrackGenerator","kind","srcObject","MediaStream","vwriter","writable","getWriter","src","$video","canvas","videoWidth","videoHeight","context","write","objectFill","objectFit","Video","Loader","getLoaderFactory","opt","AudioContextLoader","bufferList","scriptNode","hasInitScriptNode","audioContextChannel","audioContext","AudioContext","webkitAudioContext","gainNode","createGain","source","createBufferSource","connect","destination","noteOn","audioBufferSourceNode","mediaStreamAudioDestinationNode","createMediaStreamDestination","audioEnabled","gain","audioSyncVideoOption","diff","channels","sampleRate","options","closeAudio","onaudioprocess","updateAudioInfo","isPlaying","isMute","isStateSuspended","volume","bufferSize","initScriptNode","createScriptProcessor","audioProcessingEvent","outputBuffer","bufferItem","shift","audioTimestamp","channel","nowBuffering","getChannelData","flag","setVolume","isNaN","setValueAtTime","currentTime","disconnect","state","resume","suspend","isStateRunning","Audio","FetchLoader","abortController","AbortController","streamRate","rate","abort","fetchStream","demux","_times","signal","res","reader","body","getReader","fetchNext","read","done","byteLength","dispatch","WebsocketLoader","socket","socketStatus","wsUrl","_createWebSocket","WebSocket","binaryType","_handleMessage","message","Stream","global","RecordRTCLoader","fileType","isRecording","recordingInterval","_reset","setFileName","recordTime","startRecord","mimeType","onTimeStamp","timestamp","disableLogs","stream","captureStream","audioStream","getAudioTracks","audioTrack","enabled","addTrack","recorder","RecordRTC","startRecording","setInterval","stopRecordAndSave","stopRecording","getBlob","clearInterval","Recorder","DecoderWorker","decoderWorker","Worker","_initDecoderWorker","postMessage","cmd","terminate","onmessage","_initWork","code","handleRender","updateStats","buf","delay","handlePlayToRenderTimes","indexOf","JSON","stringify","decodeVideo","arrayBuffer","isIFrame","decodeAudio","_decodeAudioNoDelay","_decodeAudio","updateWorkConfig","config","stopId","firstTimestamp","startTimestamp","dropping","initInterval","getDelay","resetDelay","_loop","payload","_doDecoderDecode","_doDecode","pushBuffer","webcodecsDecoder","mseDecoder","FlvLoader","input","_inputFlv","flvDemux","dispatchFlvData","tmp","ArrayBuffer","tmp8","tmp32","Uint32Array","t","abps","vbps","need","next","combine","set","remain","return","M7sLoader","dv","DataView","getUint8","getUint32","isIframe","Demux","WebcodecsDecoder","hasInit","isInitInfo","initDecoder","_this","VideoDecoder","handleDecode","handleError","codedWidth","codedHeight","videoCodec","configure","chunk","EncodedVideoChunk","iconsMap","fullscreenExit","recordStop","reduce","icons","control","insertAdjacentHTML","querySelector","object","setAttribute","display","overflow","pointerEvents","zIndex","playerWidth","playerHeight","contentDocument","defaultView","setVolumeHandle","percentage","$volumeOn","$volumeOff","$volumeHandle","$volumePanel","panelHeight","handleHeight","$volumePanelText","innerHTML","parseInt","$loading","$poster","$playBig","$fullscreenExit","$fullscreen","$record","$recordStop","$recording","$recordingTime","$play","$pause","$screenshot","$speed","bps","$controls","volumeChangeFromEvent","bottom","panelBottom","moveLen","composedPath","isFocus","stopPropagation","$volume","$volumePanelWrap","lastVolume","isVolumeDroging","$recordingStop","addHotkey","tag","activeElement","tagName","toUpperCase","editable","getAttribute","keyCode","preventDefault","Control","template","observer","property","hotkey","autoSize","padding","playerRatio","canvasWidth","canvasHeight","canvasRatio","visibilityState","_isPlayingBeforePageHidden","enableWakeLock","MP4","types","avc1","hvc1","hvcC","btrt","dinf","dref","esds","ftyp","hdlr","mdat","mdhd","mdia","mfhd","minf","moof","moov","mp4a","mvex","mvhd","sdtp","stbl","stco","stsc","stsd","stsz","stts","tfdt","tfhd","traf","trak","trun","trex","tkhd","vmhd","smhd","hasOwnProperty","constants","FTYP","STSD_PREFIX","STTS","STSC","STCO","STSZ","HDLR_VIDEO","HDLR_AUDIO","DREF","SMHD","VMHD","box","datas","prototype","call","arguments","arrayCount","offset","generateInitSegment","meta","timescale","duration","trackId","id","presentWidth","presentHeight","xmhd","videoType","channelCount","audioSampleRate","configSize","concat","avcc","codecWidth","codecHeight","track","baseMediaDecodeTime","sequenceNumber","flags","isLeading","dependsOn","isDependedOn","hasRedundancy","dataSize","cts","isNonSync","ExpGolomb","uint8array","TAG","_buffer","_buffer_index","_total_bytes","_total_bits","_current_word","_current_word_bits_left","_fillCurrentWord","buffer_bytes_left","bytes_read","word","readBits","bits","bits_need_left","bits_read_next","result2","readBool","readByte","_skipLeadingZero","zero_count","readUEG","leading_zeros","readSEG","SPSParser","_ebsp2rbsp","src_length","dst","dst_idx","parseSPS","rbsp","gb","profile_idc","level_idc","profile_string","getProfileString","level_string","getLevelString","chroma_format_idc","chroma_format","chroma_format_table","bit_depth","scaling_list_count","_skipScalingList","pic_order_cnt_type","num_ref_frames_in_pic_order_cnt_cycle","ref_frames","pic_width_in_mbs_minus1","pic_height_in_map_units_minus1","frame_mbs_only_flag","frame_crop_left_offset","frame_crop_right_offset","frame_crop_top_offset","frame_crop_bottom_offset","frame_cropping_flag","sar_width","sar_height","fps_fixed","fps_num","fps_den","vui_parameters_present_flag","aspect_ratio_idc","sar_w_table","sar_h_table","num_units_in_tick","time_scale","sarScale","crop_unit_x","crop_unit_y","sub_wc","sub_hc","codec_width","codec_height","present_width","ceil","chroma_format_string","getChromaFormatString","frame_rate","fixed","sar_ratio","codec_size","present_size","count","last_scale","next_scale","delta_scale","chroma","parseAVCDecoderConfigurationRecord","version","avcProfile","_naluLengthSize","spsCount","getUint16","profile","level","bitDepth","chromaFormat","sarRatio","frameRate","refSampleDuration","ppsCount","parseHEVCDecoderConfigurationRecord","vpsTag","vpsLength","vpsData","from","spsTag","spsLength","spsData","ppsTag","ppsLength","ppsData","MseDecoder","isAvc","mediaSource","sourceBuffer","cacheTrack","timeInit","mediaSourceOpen","stop","readyState","isStateOpen","isStateClosed","isStateEnded","_decodeConfigurationRecord","_decodeVideo","metaData","metaBox","appendBuffer","bytes","dts","buffered","removeBuffer","end","mdatBytes","mdatbox","moofbox","isKeyframe","addSourceBuffer","updating","endOfStream","dropSourceBuffer","WEBM","oldIOS","exec","MSStream","nativeWakeLock","NoSleep","_wakeLock","handleVisibilityChange","enable","noSleepTimer","noSleepVideo","_addSourceToVideo","random","dataURI","isEnabled","wakeLock","err","disable","hidden","location","Promise","resolve","playPromise","release","Player","container","assign","_hasControl","_loading","_playing","_hasLoaded","_checkHeartTimeout","_checkLoadingTimeout","_startBpsTime","_stats","_videoTimestamp","_audioTimestamp","_onlyMseOrWcsVideo","clearCheckHeartTimeout","clearCheckLoadingTimeout","releaseWakeLock","resetStats","updateOption","contains","reject","checkLoadingTimeout","_close","hasBtnShow","text","checkHeart","checkHeartTimeout","clearTimeout","_nowTime","Jessibuca","ERROR","TIMEOUT","Error","_loadingTimeoutReplayTimes","_heartTimeoutReplayTimes","_initPlayer","_bindEvents","_resetPlayer","_options","setDebug","isDebug","cancelMute","audioResume","setScaleMode","_play","isHttp","hasLoaded","setBufferTime","setRotate","deg","list","setKeepScreenOn","setFullscreen"],"mappings":";;;;;;IAAA;IACO,MAAMA,oBAAoB,GAAG;IAChCC,EAAAA,SAAS,EAAE,CADqB;IAEhCC,EAAAA,KAAK,EAAE,CAFyB;IAGhCC,EAAAA,MAAM,EAAE,CAAA;IAHwB,CAA7B,CAAA;IAMA,MAAMC,UAAU,GAAG;IACtBC,EAAAA,GAAG,EAAE,KADiB;IAEtBC,EAAAA,GAAG,EAAE,KAAA;IAFiB,CAAnB;;IAOA,MAAMC,sBAAsB,GAAG;IAClCC,EAAAA,WAAW,EAAE,IADqB;IACf;IACnBC,EAAAA,QAAQ,EAAE,IAFwB;IAGlCC,EAAAA,YAAY,EAAE,KAHoB;IAGb;IACrBC,EAAAA,KAAK,EAAE,KAJ2B;IAKlCC,EAAAA,KAAK,EAAE,KAL2B;IAMlCC,EAAAA,MAAM,EAAE,KAN0B;IAMnB;IACfC,EAAAA,cAAc,EAAE,EAPkB;IAOd;IACpBC,EAAAA,YAAY,EAAE,CARoB;IAQhB;IAClBC,EAAAA,OAAO,EAAE,EATyB;IASrB;IACbC,EAAAA,oBAAoB,EAAE,KAVY;IAUL;IAC7BC,EAAAA,kBAAkB,EAAE,KAXc;IAWR;IAC1BC,EAAAA,yBAAyB,EAAE,CAZO;IAYJ;IAC9BC,EAAAA,uBAAuB,EAAE,CAbS;IAaN;IAC5BC,EAAAA,yBAAyB,EAAE,KAdO;IAelCC,EAAAA,aAAa,EAAE,KAfmB;IAeZ;IACtBC,EAAAA,YAAY,EAAE,KAhBoB;IAiBlCC,EAAAA,SAAS,EAAE,KAjBuB;IAkBlCC,EAAAA,QAAQ,EAAE,IAlBwB;IAmBlCC,EAAAA,QAAQ,EAAE,IAnBwB;IAoBlCC,EAAAA,WAAW,EAAE;IACTC,IAAAA,UAAU,EAAE,KADH;IAETC,IAAAA,UAAU,EAAE,KAFH;IAGTC,IAAAA,IAAI,EAAE,KAHG;IAITC,IAAAA,KAAK,EAAE,KAJE;IAKTC,IAAAA,MAAM,EAAE,KAAA;IALC,GApBqB;IA2BlCC,EAAAA,eAAe,EAAE,KA3BiB;IA4BlCC,EAAAA,UAAU,EAAE,KA5BsB;IA6BlCC,EAAAA,WAAW,EAAE,EA7BqB;IA8BlCC,EAAAA,UAAU,EAAE,EA9BsB;IA+BlCC,EAAAA,OAAO,EAAE,YA/ByB;IAgClCC,EAAAA,GAAG,EAAE,EAhC6B;IAgC1B;IACRC,EAAAA,MAAM,EAAE,CAjC0B;IAkClC;IACAC,EAAAA,gBAAgB,EAAE,IAnCgB;IAmCV;IACxBC,EAAAA,eAAe,EAAE,KApCiB;IAqClCC,EAAAA,QAAQ,EAAE1C,oBAAoB,CAACE,KArCG;IAsClCyC,EAAAA,SAAS,EAAEvC,UAAU,CAACC,GAtCY;IAsCP;IAC3BuC,EAAAA,MAAM,EAAE,KAvC0B;IAuCnB;IACfC,EAAAA,iBAAiB,EAAE,KAxCe;IAyClCC,EAAAA,MAAM,EAAE,KAzC0B;IAyCnB;IACfC,EAAAA,YAAY,EAAE,KA1CoB;IA0Cb;IACrBC,EAAAA,QAAQ,EAAE,IA3CwB;IA2ClB;IAChBC,EAAAA,qBAAqB,EAAE,IA5CW;IA4CL;IAC7BC,EAAAA,kBAAkB,EAAE,KA7Cc;;IAAA,CAA/B,CAAA;IAiDA,MAAMC,eAAe,GAAG;IAC3BC,EAAAA,IAAI,EAAE,MADqB;IAE3BC,EAAAA,SAAS,EAAE,WAFgB;IAG3BC,EAAAA,MAAM,EAAE,QAHmB;IAI3BC,EAAAA,SAAS,EAAE,WAJgB;IAK3BC,EAAAA,SAAS,EAAE,WALgB;IAM3BC,EAAAA,IAAI,EAAE,MANqB;IAO3BC,EAAAA,MAAM,EAAE,QAPmB;IAQ3BC,EAAAA,SAAS,EAAE,WARgB;IAS3BC,EAAAA,SAAS,EAAE,WATgB;IAU3BC,EAAAA,SAAS,EAAE,WAAA;IAVgB,CAAxB,CAAA;IAaA,MAAMC,UAAU,GAAG;IACtBC,EAAAA,kBAAkB,EAAE,uBADE;;IAAA,CAAnB,CAAA;IAKA,MAAMC,UAAU,GAAG;IACtBjC,EAAAA,KAAK,EAAE,CADe;IAEtBkC,EAAAA,KAAK,EAAE,CAAA;IAFe,CAAnB,CAAA;IAKA,MAAMC,cAAc,GAAG;IAC1BnC,EAAAA,KAAK,EAAE,CADmB;IAE1BkC,EAAAA,KAAK,EAAE,CAAA;IAFmB,CAAvB,CAAA;IAKA,MAAME,gBAAgB,GAAG;IAC5Bf,EAAAA,IAAI,EAAE,MADsB;IAE5BM,EAAAA,MAAM,EAAE,QAFoB;IAG5BU,EAAAA,WAAW,EAAE,aAHe;IAI5BC,EAAAA,WAAW,EAAE,aAJe;IAK5BC,EAAAA,KAAK,EAAE,OALqB;IAM5BC,EAAAA,YAAY,EAAE,cAAA;IANc,CAAzB;;IAWA,MAAMC,MAAM,GAAG;IAClB5C,EAAAA,UAAU,EAAE,cADM;IAElB6C,EAAAA,aAAa,EAAE,eAFG;IAGlBC,EAAAA,iBAAiB,EAAE,mBAHD;IAIlB5C,EAAAA,IAAI,EAAE,MAJY;IAKlB6C,EAAAA,OAAO,EAAE,SALS;IAMlBC,EAAAA,KAAK,EAAE,OANW;IAOlBC,EAAAA,IAAI,EAAE,MAPY;IAQlBC,EAAAA,IAAI,EAAE,MARY;IASlBC,EAAAA,OAAO,EAAE,SATS;IAUlBC,EAAAA,SAAS,EAAE,WAVO;IAWlBC,EAAAA,UAAU,EAAE,YAXM;IAYlBC,EAAAA,SAAS,EAAE,WAZO;IAalBC,EAAAA,GAAG,EAAE,KAba;IAclBC,EAAAA,KAAK,EAAE,OAdW;IAelB3B,EAAAA,IAAI,EAAE,MAfY;IAgBlBzC,EAAAA,OAAO,EAAE,SAhBS;IAiBlBqE,EAAAA,YAAY,EAAE,cAjBI;IAkBlBvE,EAAAA,cAAc,EAAE,gBAlBE;IAmBlBwE,EAAAA,KAAK,EAAE,OAnBW;IAoBlBC,EAAAA,WAAW,EAAE,aApBK;IAqBlBvD,EAAAA,MAAM,EAAE,QArBU;IAsBlBwD,EAAAA,SAAS,EAAE,WAtBO;IAuBlBC,EAAAA,kBAAkB,EAAE,oBAvBF;IAwBlBC,EAAAA,WAAW,EAAE,aAxBK;IAyBlBC,EAAAA,SAAS,EAAE,WAzBO;IA0BlBC,EAAAA,iBAAiB,EAAE,mBA1BD;IA2BlBC,EAAAA,MAAM,EAAE,QA3BU;IA4BlBC,EAAAA,UAAU,EAAE,YA5BM;IA6BlBC,EAAAA,KAAK,EAAE,OA7BW;IA8BlBC,EAAAA,QAAQ,EAAE,UA9BQ;IA+BlBC,EAAAA,MAAM,EAAE,QA/BU;IAgClBC,EAAAA,SAAS,EAAE,WAhCO;IAiClBC,EAAAA,aAAa,EAAE,eAjCG;IAkClBC,EAAAA,aAAa,EAAE,eAlCG;IAmClBC,EAAAA,WAAW,EAAE,aAnCK;IAoClBC,EAAAA,YAAY,EAAE,cApCI;IAqClBC,EAAAA,OAAO,EAAE,SArCS;IAsClBC,EAAAA,aAAa,EAAE,eAtCG;IAuClBC,EAAAA,cAAc,EAAE,gBAvCE;IAwClBC,EAAAA,oBAAoB,EAAE,sBAxCJ;IAyClBC,EAAAA,mBAAmB,EAAE,qBAzCH;IA0ClBC,EAAAA,YAAY,EAAE,cA1CI;IA2ClBC,EAAAA,eAAe,EAAE,iBA3CC;IA4ClBC,EAAAA,cAAc,EAAE,gBA5CE;IA6ClBC,EAAAA,iBAAiB,EAAE,mBAAA;IA7CD,CAAf,CAAA;IAiDA,MAAMC,gBAAgB,GAAG;IAC5BlC,EAAAA,IAAI,EAAEN,MAAM,CAACM,IADe;IAE5BG,EAAAA,UAAU,EAAET,MAAM,CAACS,UAFS;IAG5BD,EAAAA,SAAS,EAAER,MAAM,CAACQ,SAHU;IAI5BE,EAAAA,SAAS,EAAEV,MAAM,CAACU,SAJU;IAK5BE,EAAAA,KAAK,EAAEZ,MAAM,CAACY,KALc;IAM5B3B,EAAAA,IAAI,EAAEe,MAAM,CAACf,IANe;IAO5B0B,EAAAA,GAAG,EAAEX,MAAM,CAACW,GAPgB;IAQ5BY,EAAAA,KAAK,EAAEvB,MAAM,CAACuB,KARc;IAS5B/E,EAAAA,OAAO,EAAEwD,MAAM,CAACxD,OATY;IAU5BF,EAAAA,cAAc,EAAE0D,MAAM,CAAC1D,cAVK;IAW5BuE,EAAAA,YAAY,EAAEb,MAAM,CAACa,YAXO;IAY5BzD,EAAAA,UAAU,EAAE,YAZgB;IAa5BE,EAAAA,IAAI,EAAE0C,MAAM,CAAC1C,IAbe;IAc5B8C,EAAAA,KAAK,EAAEJ,MAAM,CAACI,KAdc;IAe5BC,EAAAA,IAAI,EAAEL,MAAM,CAACK,IAfe;IAgB5BS,EAAAA,KAAK,EAAEd,MAAM,CAACc,KAhBc;IAiB5BC,EAAAA,WAAW,EAAEf,MAAM,CAACe,WAjBQ;IAkB5BE,EAAAA,kBAAkB,EAAEjB,MAAM,CAACiB,kBAlBC;IAmB5BC,EAAAA,WAAW,EAAElB,MAAM,CAACkB,WAnBQ;IAoB5BC,EAAAA,SAAS,EAAEnB,MAAM,CAACmB,SApBU;IAqB5BoB,EAAAA,iBAAiB,EAAEvC,MAAM,CAACuC,iBAAAA;IArBE,CAAzB,CAAA;IAwBA,MAAME,YAAY,GAAG;IACxBC,EAAAA,SAAS,EAAE,2BADa;IAExBC,EAAAA,UAAU,EAAE,YAFY;IAGxBC,EAAAA,cAAc,EAAE,gBAHQ;IAIxBC,EAAAA,uBAAuB,EAAE,yBAJD;IAKxBC,EAAAA,yBAAyB,EAAE,2BALH;IAMxBC,EAAAA,eAAe,EAAE,iBAAA;IANO,CAArB,CAAA;IAUA,MAAMC,gBAAgB,GAAG;IAC5BC,EAAAA,UAAU,EAAE,YADgB;IAE5BC,EAAAA,IAAI,EAAE,MAFsB;IAG5BpD,EAAAA,KAAK,EAAE,OAHqB;IAI5Bc,EAAAA,KAAK,EAAE,OAAA;IAJqB,CAAzB,CAAA;IAcA,MAAMuC,eAAe,GAAG;IAC3BC,EAAAA,QAAQ,EAAE,UADiB;IAE3BC,EAAAA,MAAM,EAAE,QAFmB;IAG3BC,EAAAA,IAAI,EAAE,MAAA;IAHqB,CAAxB,CAAA;IAOA,MAAMC,cAAc,GAAG;IAC1B,EAAA,CAAA,EAAG,WADuB;IACV;IAChB,EAAA,EAAA,EAAI,YAFsB;;IAAA,CAAvB,CAAA;IAKA,MAAMC,cAAc,GAAG;IAC1BC,EAAAA,IAAI,EAAE,CADoB;IAE1BC,EAAAA,IAAI,EAAE,EAAA;IAFoB,CAAvB,CAAA;IAMA,MAAMC,cAAc,GAAG;IAC1B,EAAA,EAAA,EAAI,KADsB;IAE1B,EAAA,CAAA,EAAG,MAFuB;IAG1B,EAAG,CAAA,EAAA,OAAA;IAHuB,CAAvB,CAAA;IAMA,MAAMC,aAAa,GAAG;IACzBC,EAAAA,GAAG,EAAE,EADoB;IAEzBC,EAAAA,GAAG,EAAE,EAFoB;IAGzBC,EAAAA,GAAG,EAAE,EAAA;IAHoB,CAAtB,CAAA;IAMA,MAAMC,cAAc,GAAG,EAAvB,CAAA;IAEA,MAAMC,eAAe,GAAG;IAC3BC,EAAAA,IAAI,EAAE,CADqB;IAClB;IACTC,EAAAA,IAAI,EAAE,CAFqB;IAElB;IACTC,EAAAA,QAAQ,EAAE,CAHiB;;IAAA,CAAxB,CAAA;IAOA,MAAMC,WAAW,GAAG;IACvBC,EAAAA,GAAG,EAAE,KADkB;IAEvBC,EAAAA,IAAI,EAAE,MAAA;IAFiB,CAApB,CAAA;IAMA,MAAMC,kBAAkB,GAAG;IAC9BC,EAAAA,SAAS,EAAE,WADmB;IAE9BC,EAAAA,KAAK,EAAE,OAFuB;IAG9BC,EAAAA,SAAS,EAAE,WAAA;IAHmB,CAA3B,CAAA;IAMA,MAAMC,kBAAkB,GAAG;IAC9BC,EAAAA,GAAG,EAAE,KADyB;IAE9BC,EAAAA,KAAK,EAAE,OAAA;IAFuB,CAA3B,CAAA;IAMA,MAAMC,UAAU,GAAG;IACtBC,EAAAA,GAAG,EAAE,iCADiB;IAEtBC,EAAAA,GAAG,EAAE,sCAAA;IAFiB,CAAnB,CAAA;IAMA,MAAMC,kBAAkB,GAAG;IAC9BC,EAAAA,KAAK,EAAE,OADuB;IAE9BjC,EAAAA,IAAI,EAAE,MAFwB;IAG9BkC,EAAAA,MAAM,EAAE,QAAA;IAHsB,CAA3B;IAWA,MAAMC,qBAAqB,GAAG,IAA9B,CAAA;IAGA,MAAMC,OAAO,GAAG;IACnBC,EAAAA,GAAG,EAAE,EADc;IACV;IACTC,EAAAA,OAAO,EAAE,EAFU;IAEN;IACbC,EAAAA,SAAS,EAAE,EAHQ;;IAAA,CAAhB;;ICpRQ,MAAMC,KAAN,CAAY;IACvBC,EAAAA,WAAW,CAACC,MAAD,EAAS;IAChB,IAAA,IAAA,CAAKjF,GAAL,GAAW,UAACkF,IAAD,EAAmB;IAC1B,MAAA,IAAID,MAAM,CAACE,IAAP,CAAY1J,KAAhB,EAAuB;IAAA,QAAA,KAAA,IAAA,IAAA,GAAA,SAAA,CAAA,MAAA,EADN2J,IACM,GAAA,IAAA,KAAA,CAAA,IAAA,GAAA,CAAA,GAAA,IAAA,GAAA,CAAA,GAAA,CAAA,CAAA,EAAA,IAAA,GAAA,CAAA,EAAA,IAAA,GAAA,IAAA,EAAA,IAAA,EAAA,EAAA;IADNA,UAAAA,IACM,CAAA,IAAA,GAAA,CAAA,CAAA,GAAA,SAAA,CAAA,IAAA,CAAA,CAAA;IAAA,SAAA;;IACnBC,QAAAA,OAAO,CAACrF,GAAR,CAAa,eAAckF,IAAK,CAAA,CAAA,CAAhC,EAAoC,GAAGE,IAAvC,CAAA,CAAA;IACH,OAAA;IACJ,KAJD,CAAA;;IAMA,IAAA,IAAA,CAAKE,IAAL,GAAY,UAACJ,IAAD,EAAmB;IAC3B,MAAA,IAAID,MAAM,CAACE,IAAP,CAAY1J,KAAhB,EAAuB;IAAA,QAAA,KAAA,IAAA,KAAA,GAAA,SAAA,CAAA,MAAA,EADL2J,IACK,GAAA,IAAA,KAAA,CAAA,KAAA,GAAA,CAAA,GAAA,KAAA,GAAA,CAAA,GAAA,CAAA,CAAA,EAAA,KAAA,GAAA,CAAA,EAAA,KAAA,GAAA,KAAA,EAAA,KAAA,EAAA,EAAA;IADLA,UAAAA,IACK,CAAA,KAAA,GAAA,CAAA,CAAA,GAAA,SAAA,CAAA,KAAA,CAAA,CAAA;IAAA,SAAA;;IACnBC,QAAAA,OAAO,CAACC,IAAR,CAAc,eAAcJ,IAAK,CAAA,CAAA,CAAjC,EAAqC,GAAGE,IAAxC,CAAA,CAAA;IACH,OAAA;IACJ,KAJD,CAAA;;IAMA,IAAA,IAAA,CAAKnF,KAAL,GAAa,UAACiF,IAAD,EAAmB;IAC5B,MAAA,IAAID,MAAM,CAACE,IAAP,CAAY1J,KAAhB,EAAuB;IAAA,QAAA,KAAA,IAAA,KAAA,GAAA,SAAA,CAAA,MAAA,EADJ2J,IACI,GAAA,IAAA,KAAA,CAAA,KAAA,GAAA,CAAA,GAAA,KAAA,GAAA,CAAA,GAAA,CAAA,CAAA,EAAA,KAAA,GAAA,CAAA,EAAA,KAAA,GAAA,KAAA,EAAA,KAAA,EAAA,EAAA;IADJA,UAAAA,IACI,CAAA,KAAA,GAAA,CAAA,CAAA,GAAA,SAAA,CAAA,KAAA,CAAA,CAAA;IAAA,SAAA;;IACnBC,QAAAA,OAAO,CAACpF,KAAR,CAAe,eAAciF,IAAK,CAAA,CAAA,CAAlC,EAAsC,GAAGE,IAAzC,CAAA,CAAA;IACH,OAAA;IACJ,KAJD,CAAA;IAKH,GAAA;;IAnBsB;;ICAZ,MAAMG,MAAN,CAAa;IACxBP,EAAAA,WAAW,CAACC,MAAD,EAAS;IAChB,IAAKO,IAAAA,CAAAA,QAAL,GAAgB,EAAhB,CAAA;IACA,IAAKC,IAAAA,CAAAA,KAAL,GAAa,IAAKA,CAAAA,KAAL,CAAWC,IAAX,CAAgB,IAAhB,CAAb,CAAA;IACA,IAAKT,IAAAA,CAAAA,MAAL,GAAcA,MAAd,CAAA;IACH,GAAA;;IAEDQ,EAAAA,KAAK,CAACE,MAAD,EAAST,IAAT,EAAeU,QAAf,EAAsC;IAAA,IAAbC,IAAAA,MAAa,uEAAJ,EAAI,CAAA;;IACvC,IAAI,IAAA,CAACF,MAAL,EAAa;IACT,MAAA,OAAA;IACH,KAAA;;IACD,IAAA,IAAIG,KAAK,CAACC,OAAN,CAAcb,IAAd,CAAJ,EAAyB;IACrB,MAAA,OAAOA,IAAI,CAACc,GAAL,CAASC,IAAI,IAAI,IAAKR,CAAAA,KAAL,CAAWE,MAAX,EAAmBM,IAAnB,EAAyBL,QAAzB,EAAmCC,MAAnC,CAAjB,CAAP,CAAA;IACH,KAAA;;IACDF,IAAAA,MAAM,CAACO,gBAAP,CAAwBhB,IAAxB,EAA8BU,QAA9B,EAAwCC,MAAxC,CAAA,CAAA;;IACA,IAAA,MAAMzE,OAAO,GAAG,MAAMuE,MAAM,CAACQ,mBAAP,CAA2BjB,IAA3B,EAAiCU,QAAjC,EAA2CC,MAA3C,CAAtB,CAAA;;IACA,IAAA,IAAA,CAAKL,QAAL,CAAcY,IAAd,CAAmBhF,OAAnB,CAAA,CAAA;IACA,IAAA,OAAOA,OAAP,CAAA;IACH,GAAA;;IAEDA,EAAAA,OAAO,GAAG;IACN,IAAA,IAAA,CAAK6D,MAAL,CAAYxJ,KAAZ,IAAqB,KAAKwJ,MAAL,CAAYxJ,KAAZ,CAAkBuE,GAAlB,CAAuB,CAAvB,MAAA,CAAA,EAAgC,SAAhC,CAArB,CAAA;IACA,IAAA,IAAA,CAAKwF,QAAL,CAAca,OAAd,CAAsBC,KAAK,IAAIA,KAAK,EAApC,CAAA,CAAA;IACH,GAAA;;IAvBuB;;ACA5B,qBAAA,CAAgBC,MAAD,IAAY;IACvBC,EAAAA,MAAM,CAACC,cAAP,CAAsBF,MAAtB,EAA8B,MAA9B,EAAsC;IAClCG,IAAAA,GAAG,EAAE,MAAM;IACP,MAAA,MAAMC,UAAU,GAAGJ,MAAM,CAACK,UAAP,CAAkBC,qBAAlB,EAAnB,CAAA;IACAF,MAAAA,UAAU,CAACG,KAAX,GAAmBC,IAAI,CAACC,GAAL,CAASL,UAAU,CAACG,KAApB,EAA2BP,MAAM,CAACK,UAAP,CAAkBK,WAA7C,CAAnB,CAAA;IACAN,MAAAA,UAAU,CAACO,MAAX,GAAoBH,IAAI,CAACC,GAAL,CAASL,UAAU,CAACO,MAApB,EAA4BX,MAAM,CAACK,UAAP,CAAkBO,YAA9C,CAApB,CAAA;IACA,MAAA,OAAOR,UAAP,CAAA;IACH,KAAA;IANiC,GAAtC,CAAA,CAAA;IASA,EAAA,CAAC,QAAD,EAAW,QAAX,EAAqB,MAArB,EAA6B,OAA7B,EAAsC,KAAtC,EAA6C,OAA7C,CAAA,CAAsDN,OAAtD,CAA8DnC,GAAG,IAAI;IACjEsC,IAAAA,MAAM,CAACC,cAAP,CAAsBF,MAAtB,EAA8BrC,GAA9B,EAAmC;IAC/BwC,MAAAA,GAAG,EAAE,MAAM;IACP,QAAA,OAAOH,MAAM,CAACa,IAAP,CAAYlD,GAAZ,CAAP,CAAA;IACH,OAAA;IAH8B,KAAnC,CAAA,CAAA;IAKH,GAND,CAAA,CAAA;IAOH,CAjBD;;;;;;;;;ICAA;IACA;IACA;IACA;IACA;IACA,CAAC,YAAY;AAEb;IACA,CAAC,IAAI,QAAQ,GAAG,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,WAAW,GAAG,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC;IAC/G,CAAC,IAAI,UAAU,GAAoC,MAAM,CAAC,OAAO,CAAC;AAClE;IACA,CAAC,IAAI,EAAE,GAAG,CAAC,YAAY;IACvB,EAAE,IAAI,GAAG,CAAC;AACV;IACA,EAAE,IAAI,KAAK,GAAG;IACd,GAAG;IACH,IAAI,mBAAmB;IACvB,IAAI,gBAAgB;IACpB,IAAI,mBAAmB;IACvB,IAAI,mBAAmB;IACvB,IAAI,kBAAkB;IACtB,IAAI,iBAAiB;IACrB,IAAI;IACJ;IACA,GAAG;IACH,IAAI,yBAAyB;IAC7B,IAAI,sBAAsB;IAC1B,IAAI,yBAAyB;IAC7B,IAAI,yBAAyB;IAC7B,IAAI,wBAAwB;IAC5B,IAAI,uBAAuB;AAC3B;IACA,IAAI;IACJ;IACA,GAAG;IACH,IAAI,yBAAyB;IAC7B,IAAI,wBAAwB;IAC5B,IAAI,gCAAgC;IACpC,IAAI,wBAAwB;IAC5B,IAAI,wBAAwB;IAC5B,IAAI,uBAAuB;AAC3B;IACA,IAAI;IACJ,GAAG;IACH,IAAI,sBAAsB;IAC1B,IAAI,qBAAqB;IACzB,IAAI,sBAAsB;IAC1B,IAAI,sBAAsB;IAC1B,IAAI,qBAAqB;IACzB,IAAI,oBAAoB;IACxB,IAAI;IACJ,GAAG;IACH,IAAI,qBAAqB;IACzB,IAAI,kBAAkB;IACtB,IAAI,qBAAqB;IACzB,IAAI,qBAAqB;IACzB,IAAI,oBAAoB;IACxB,IAAI,mBAAmB;IACvB,IAAI;IACJ,GAAG,CAAC;AACJ;IACA,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IACZ,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IACvB,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC;AACf;IACA,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;IACrB,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAClB,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE;IAClC,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;IACrC,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/B,KAAK;IACL,IAAI,OAAO,GAAG,CAAC;IACf,IAAI;IACJ,GAAG;AACH;IACA,EAAE,OAAO,KAAK,CAAC;IACf,EAAE,GAAG,CAAC;AACN;IACA,CAAC,IAAI,YAAY,GAAG;IACpB,EAAE,MAAM,EAAE,EAAE,CAAC,gBAAgB;IAC7B,EAAE,KAAK,EAAE,EAAE,CAAC,eAAe;IAC3B,EAAE,CAAC;AACH;IACA,CAAC,IAAI,UAAU,GAAG;IAClB,EAAE,OAAO,EAAE,UAAU,OAAO,EAAE,OAAO,EAAE;IACvC,GAAG,OAAO,IAAI,OAAO,CAAC,UAAU,OAAO,EAAE,MAAM,EAAE;IACjD,IAAI,IAAI,mBAAmB,GAAG,YAAY;IAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;IAC7C,KAAK,OAAO,EAAE,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB;IACA,IAAI,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;AAC3C;IACA,IAAI,OAAO,GAAG,OAAO,IAAI,QAAQ,CAAC,eAAe,CAAC;AAClD;IACA,IAAI,IAAI,aAAa,GAAG,OAAO,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC;AAC/D;IACA,IAAI,IAAI,aAAa,YAAY,OAAO,EAAE;IAC1C,KAAK,aAAa,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3D,KAAK;IACL,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACjB,GAAG;IACH,EAAE,IAAI,EAAE,YAAY;IACpB,GAAG,OAAO,IAAI,OAAO,CAAC,UAAU,OAAO,EAAE,MAAM,EAAE;IACjD,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;IAC5B,KAAK,OAAO,EAAE,CAAC;IACf,KAAK,OAAO;IACZ,KAAK;AACL;IACA,IAAI,IAAI,gBAAgB,GAAG,YAAY;IACvC,KAAK,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IAC1C,KAAK,OAAO,EAAE,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjB;IACA,IAAI,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;AACxC;IACA,IAAI,IAAI,aAAa,GAAG,QAAQ,CAAC,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC;AACtD;IACA,IAAI,IAAI,aAAa,YAAY,OAAO,EAAE;IAC1C,KAAK,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACxD,KAAK;IACL,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACjB,GAAG;IACH,EAAE,MAAM,EAAE,UAAU,OAAO,EAAE,OAAO,EAAE;IACtC,GAAG,OAAO,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC3E,GAAG;IACH,EAAE,QAAQ,EAAE,UAAU,QAAQ,EAAE;IAChC,GAAG,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,GAAG;IACH,EAAE,OAAO,EAAE,UAAU,QAAQ,EAAE;IAC/B,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC9B,GAAG;IACH,EAAE,EAAE,EAAE,UAAU,KAAK,EAAE,QAAQ,EAAE;IACjC,GAAG,IAAI,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACvC,GAAG,IAAI,SAAS,EAAE;IAClB,IAAI,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC1D,IAAI;IACJ,GAAG;IACH,EAAE,GAAG,EAAE,UAAU,KAAK,EAAE,QAAQ,EAAE;IAClC,GAAG,IAAI,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACvC,GAAG,IAAI,SAAS,EAAE;IAClB,IAAI,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC7D,IAAI;IACJ,GAAG;IACH,EAAE,GAAG,EAAE,EAAE;IACT,EAAE,CAAC;AACH;IACA,CAAC,IAAI,CAAC,EAAE,EAAE;IACV,EAAE,IAAI,UAAU,EAAE;IAClB,GAAG,cAAc,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACvC,GAAG,MAAM;IACT,GAAG,MAAM,CAAC,UAAU,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC1C,GAAG;AACH;IACA,EAAE,OAAO;IACT,EAAE;AACF;IACA,CAAC,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE;IACrC,EAAE,YAAY,EAAE;IAChB,GAAG,GAAG,EAAE,YAAY;IACpB,IAAI,OAAO,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACnD,IAAI;IACJ,GAAG;IACH,EAAE,OAAO,EAAE;IACX,GAAG,UAAU,EAAE,IAAI;IACnB,GAAG,GAAG,EAAE,YAAY;IACpB,IAAI,OAAO,QAAQ,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC;IAC1C,IAAI;IACJ,GAAG;IACH,EAAE,SAAS,EAAE;IACb,GAAG,UAAU,EAAE,IAAI;IACnB,GAAG,GAAG,EAAE,YAAY;IACpB;IACA,IAAI,OAAO,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACnD,IAAI;IACJ,GAAG;IACH,EAAE,CAAC,CAAC;AACJ;IACA,CAAC,IAAI,UAAU,EAAE;IACjB,EAAE,MAAA,CAAA,OAAc,GAAG,UAAU,CAAC;IAC9B,EAAE,MAAM;IACR,EAAE,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;IACjC,EAAE;IACF,CAAC,GAAG,CAAA;;;;ICrLG,SAASmD,IAAT,GAAgB,EACtB;IAGM,SAASC,gBAAT,CAA0BC,OAA1B,EAAmC;IACtC,EAAA,OAAO,OAAOA,OAAO,CAACC,0BAAf,KAA8C,UAArD,CAAA;IACH,CAAA;IAGM,SAASC,kBAAT,GAA8B;IACjC,EAAO,OAAA,OAAOC,eAAP,KAA2B,WAAlC,CAAA;IACH,CAAA;IAGM,SAASC,eAAT,CAAyBJ,OAAzB,EAAkC;IACrC,EAAIK,IAAAA,EAAE,GAAG,IAAT,CAAA;IAEA,EAAMC,MAAAA,iBAAiB,GAAG,CAAC,OAAD,EAAU,oBAAV,EAAgC,WAAhC,EAA6C,WAA7C,CAA1B,CAAA;IACA,EAAIC,IAAAA,SAAS,GAAG,CAAhB,CAAA;;IAEA,EAAO,OAAA,CAACF,EAAD,IAAOE,SAAS,GAAGD,iBAAiB,CAACE,MAA5C,EAAoD;IAChD,IAAA,MAAMC,WAAW,GAAGH,iBAAiB,CAACC,SAAD,CAArC,CAAA;;IAEA,IAAI,IAAA;IACA,MAAA,IAAIG,cAAc,GAAG;IAACC,QAAAA,qBAAqB,EAAE,IAAA;IAAxB,OAArB,CAAA;IACAN,MAAAA,EAAE,GAAGL,OAAO,CAACY,UAAR,CAAmBH,WAAnB,EAAgCC,cAAhC,CAAL,CAAA;IACH,KAHD,CAGE,OAAOG,CAAP,EAAU;IACRR,MAAAA,EAAE,GAAG,IAAL,CAAA;IACH,KAAA;;IAED,IAAI,IAAA,CAACA,EAAD,IAAO,OAAOA,EAAE,CAACS,YAAV,KAA2B,UAAtC,EAAkD;IAC9CT,MAAAA,EAAE,GAAG,IAAL,CAAA;IACH,KAAA;;IAED,IAAA,EAAEE,SAAF,CAAA;IACH,GAAA;;IAGD,EAAA,OAAOF,EAAP,CAAA;IACH,CAAA;IAeM,SAASU,aAAT,GAAqC;IAAA,EAAdC,IAAAA,OAAc,uEAAJ,EAAI,CAAA;IACxC,EAAA,MAAMC,GAAG,GAAGD,OAAO,CAACE,KAAR,CAAc,GAAd,CAAZ,CAAA;IACA,EAAMC,MAAAA,IAAI,GAAGC,IAAI,CAACH,GAAG,CAAC,CAAD,CAAJ,CAAjB,CAAA;IACA,EAAA,MAAMI,IAAI,GAAGJ,GAAG,CAAC,CAAD,CAAH,CAAOK,OAAP,CAAe,OAAf,EAAwB,EAAxB,CAA4BA,CAAAA,OAA5B,CAAoC,SAApC,EAA+C,EAA/C,CAAb,CAAA;IACA,EAAA,IAAIC,CAAC,GAAGJ,IAAI,CAACX,MAAb;IAAA,MAAqBgB,KAAK,GAAG,IAAIC,UAAJ,CAAeF,CAAf,CAA7B,CAAA;;IACA,EAAOA,OAAAA,CAAC,EAAR,EAAY;IACRC,IAAAA,KAAK,CAACD,CAAD,CAAL,GAAWJ,IAAI,CAACO,UAAL,CAAgBH,CAAhB,CAAX,CAAA;IACH,GAAA;;IACD,EAAO,OAAA,IAAII,IAAJ,CAAS,CAACH,KAAD,CAAT,EAAkB,MAAlB,EAA0B;IAACH,IAAAA,IAAAA;IAAD,GAA1B,CAAP,CAAA;IACH,CAAA;IAaM,SAASO,WAAT,CAAqBC,OAArB,EAA8BC,QAA9B,EAAwC;IAC3C,EAAA,MAAMC,KAAK,GAAGC,QAAQ,CAACC,aAAT,CAAuB,GAAvB,CAAd,CAAA;IACAF,EAAAA,KAAK,CAAC7G,QAAN,GAAiB4G,QAAjB,CAAA;IACAC,EAAAA,KAAK,CAACG,IAAN,GAAaC,GAAG,CAACC,eAAJ,CAAoBP,OAApB,CAAb,CAAA;IACAE,EAAAA,KAAK,CAACM,KAAN,EAAA,CAAA;IACAC,EAAAA,UAAU,CAAC,MAAM;IACbH,IAAAA,GAAG,CAACI,eAAJ,CAAoBV,OAApB,CAAA,CAAA;IACH,GAFS,EAEPW,KAAK,EAAA,GAAK,IAAL,GAAY,CAFV,CAAV,CAAA;IAGH,CAAA;IAQM,SAASC,GAAT,GAAe;IAClB,EAAA,OAAO,IAAIC,IAAJ,EAAWC,CAAAA,OAAX,EAAP,CAAA;IACH,CAAA;IAE4B,CAAC,MAAM;IAChC,EAAI,IAAA;IACA,IAAI,IAAA,OAAOC,WAAP,KAAuB,QAAvB,IACG,OAAOA,WAAW,CAACC,WAAnB,KAAmC,UAD1C,EACsD;IAClD,MAAMC,MAAAA,MAAM,GAAG,IAAIF,WAAW,CAACG,MAAhB,CAAuBtB,UAAU,CAACuB,EAAX,CAAc,GAAd,EAAmB,IAAnB,EAAyB,IAAzB,EAA+B,IAA/B,EAAqC,IAArC,EAA2C,IAA3C,EAAiD,IAAjD,EAAuD,IAAvD,CAAvB,CAAf,CAAA;IACA,MAAA,IAAIF,MAAM,YAAYF,WAAW,CAACG,MAAlC,EACI,OAAO,IAAIH,WAAW,CAACK,QAAhB,CAAyBH,MAAzB,CAA4CF,YAAAA,WAAW,CAACK,QAA/D,CAAA;IACP,KAAA;IACJ,GAPD,CAOE,OAAOpC,CAAP,EAAU,EACX;;IACD,EAAA,OAAO,KAAP,CAAA;IACH,CAX4B,IAAtB;IAaA,SAASqC,KAAT,CAAeC,GAAf,EAAoBC,CAApB,EAAuBC,CAAvB,EAA0B;IAC7B,EAAA,OAAO7D,IAAI,CAACC,GAAL,CAASD,IAAI,CAAC8D,GAAL,CAASH,GAAT,EAAc3D,IAAI,CAACC,GAAL,CAAS2D,CAAT,EAAYC,CAAZ,CAAd,CAAT,EAAwC7D,IAAI,CAAC8D,GAAL,CAASF,CAAT,EAAYC,CAAZ,CAAxC,CAAP,CAAA;IACH,CAAA;IAEM,SAASE,QAAT,CAAkBC,OAAlB,EAA2B7G,GAA3B,EAAgC8G,KAAhC,EAAuC;IAC1C,EAAI,IAAA,CAACD,OAAL,EAAc;IACV,IAAA,OAAA;IACH,GAAA;;IACD,EAAA,IAAI,OAAO7G,GAAP,KAAe,QAAnB,EAA6B;IACzBsC,IAAAA,MAAM,CAACyE,IAAP,CAAY/G,GAAZ,CAAiBmC,CAAAA,OAAjB,CAAyBJ,IAAI,IAAI;IAC7B6E,MAAAA,QAAQ,CAACC,OAAD,EAAU9E,IAAV,EAAgB/B,GAAG,CAAC+B,IAAD,CAAnB,CAAR,CAAA;IACH,KAFD,CAAA,CAAA;IAGH,GAAA;;IACD8E,EAAAA,OAAO,CAACG,KAAR,CAAchH,GAAd,IAAqB8G,KAArB,CAAA;IACA,EAAA,OAAOD,OAAP,CAAA;IACH,CAAA;IAGM,SAASI,QAAT,CAAkBJ,OAAlB,EAA2B7G,GAA3B,EAAmD;IAAA,EAAnBkH,IAAAA,UAAmB,uEAAN,IAAM,CAAA;;IACtD,EAAI,IAAA,CAACL,OAAL,EAAc;IACV,IAAA,OAAO,CAAP,CAAA;IACH,GAAA;;IAED,EAAA,MAAMC,KAAK,GAAGK,gBAAgB,CAACN,OAAD,EAAU,IAAV,CAAhB,CAAgCO,gBAAhC,CAAiDpH,GAAjD,CAAd,CAAA;IACA,EAAA,OAAOkH,UAAU,GAAGG,UAAU,CAACP,KAAD,CAAb,GAAuBA,KAAxC,CAAA;IACH,CAAA;IAEM,SAASQ,UAAT,GAAsB;IACzB,EAAIpL,IAAAA,WAAW,IAAI,OAAOA,WAAW,CAAC4J,GAAnB,KAA2B,UAA9C,EAA0D;IACtD,IAAO5J,OAAAA,WAAW,CAAC4J,GAAZ,EAAP,CAAA;IACH,GAAA;;IACD,EAAOC,OAAAA,IAAI,CAACD,GAAL,EAAP,CAAA;IACH,CAAA;IAEM,SAASyB,eAAT,CAAyB7F,QAAzB,EAAmC;IACtC,EAAI8F,IAAAA,SAAS,GAAG,CAAhB,CAAA;IACA,EAAIC,IAAAA,QAAQ,GAAGH,UAAU,EAAzB,CAAA;IACA,EAAA,OAAOI,IAAI,IAAI;IACXF,IAAAA,SAAS,IAAIE,IAAb,CAAA;IACA,IAAMC,MAAAA,QAAQ,GAAGL,UAAU,EAA3B,CAAA;IACA,IAAA,MAAMM,QAAQ,GAAGD,QAAQ,GAAGF,QAA5B,CAAA;;IACA,IAAIG,IAAAA,QAAQ,IAAI,IAAhB,EAAsB;IAClBlG,MAAAA,QAAQ,CAAE8F,SAAS,GAAGI,QAAb,GAAyB,IAA1B,CAAR,CAAA;IACAH,MAAAA,QAAQ,GAAGE,QAAX,CAAA;IACAH,MAAAA,SAAS,GAAG,CAAZ,CAAA;IACH,KAAA;IACJ,GATD,CAAA;IAUH,CAAA;IAEM,SAASK,cAAT,CAAwBpJ,IAAxB,EAA8BuC,IAA9B,EAAoC8G,MAApC,EAA4C;IAC/C,EAAM7O,MAAAA,GAAG,GAAG8O,MAAM,CAACvC,GAAP,CAAWC,eAAX,CAA2BhH,IAA3B,CAAZ,CAAA;IACA,EAAA,MAAMgI,CAAC,GAAGpB,QAAQ,CAACC,aAAT,CAAuB,GAAvB,CAAV,CAAA;IACAmB,EAAAA,CAAC,CAAClB,IAAF,GAAStM,GAAT,CAAA;IACAwN,EAAAA,CAAC,CAAClI,QAAF,GAAa,CAACyC,IAAI,IAAI8E,GAAG,EAAZ,IAAkB,GAAlB,IAAyBgC,MAAM,IAAItI,WAAW,CAACE,IAA/C,CAAb,CAAA;IACA+G,EAAAA,CAAC,CAACf,KAAF,EAAA,CAAA;IACAC,EAAAA,UAAU,CAAC,MAAM;IACboC,IAAAA,MAAM,CAACvC,GAAP,CAAWI,eAAX,CAA2B3M,GAA3B,CAAA,CAAA;IACH,GAFS,EAEP4M,KAAK,EAAA,GAAK,IAAL,GAAY,CAFV,CAAV,CAAA;IAGH,CAAA;IAIM,SAASmC,QAAT,GAAoB;IACvB,EAAQ,OAAA,gEAAA,CAAiEC,IAAjE,CAAsEF,MAAM,CAACG,SAAP,CAAiBC,SAAjB,CAA2BC,WAA3B,EAAtE,CAAR,CAAA;IACH,CAAA;IAOM,SAASvC,KAAT,GAAiB;IACpB,EAAMwC,MAAAA,EAAE,GAAGN,MAAM,CAACG,SAAP,CAAiBC,SAAjB,CAA2BC,WAA3B,EAAX,CAAA;IACA,EAAA,OAAOC,EAAE,IAAI,sBAAA,CAAuBJ,IAAvB,CAA4BI,EAA5B,CAAb,CAAA;IACH,CAAA;;IAqCM,SAASC,UAAT,GAAsB;IACzB,EAAA,OAAO,kBAAkBP,MAAzB,CAAA;IACH,CAAA;IAmDM,SAASQ,2BAAT,CAAqCC,IAArC,EAA2C;IAC9C,EAAIC,IAAAA,UAAU,GAAGD,IAAI,CAACE,QAAL,CAAc,CAAd,EAAiB,CAAjB,CAAjB,CAAA;IACA,EAAIC,IAAAA,WAAW,GAAG,OAAlB,CAAA;;IACA,EAAK,KAAA,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EAA4B;IACxB,IAAIC,IAAAA,CAAC,GAAGJ,UAAU,CAACG,CAAD,CAAV,CAAcE,QAAd,CAAuB,EAAvB,CAAR,CAAA;;IACA,IAAA,IAAID,CAAC,CAAChF,MAAF,GAAW,CAAf,EAAkB;IACdgF,MAAAA,CAAC,GAAG,GAAA,GAAMA,CAAV,CAAA;IACH,KAAA;;IACDF,IAAAA,WAAW,IAAIE,CAAf,CAAA;IACH,GAAA;;IAED,EAAO,OAAA;IACHE,IAAAA,KAAK,EAAEJ,WADJ;IAEHK,IAAAA,WAAW,EAAER,IAAAA;IAFV,GAAP,CAAA;IAIH,CAAA;IAEM,SAASS,YAAT,GAAwB;IAC3B,EAAO5D,OAAAA,QAAQ,CAAC4D,YAAT,IAAyB5D,QAAQ,CAAC6D,eAAlC,IAAqD7D,QAAQ,CAAC8D,kBAArE,CAAA;IACH,CAAA;IAEM,SAASC,OAAT,CAAiBtC,KAAjB,EAAwB;IAC3B,EAAA,IAAI,QAAQA,KAAR,IAAiBA,KAAK,KAAK,EAA/B,EAAmC;IAC/B,IAAA,OAAO,QAAP,CAAA;IACH,GAAA;;IACD,EAAA,IAAIY,IAAI,GAAGL,UAAU,CAACP,KAAD,CAArB,CAAA;IACAY,EAAAA,IAAI,GAAGA,IAAI,CAAC2B,OAAL,CAAa,CAAb,CAAP,CAAA;IACA,EAAO3B,OAAAA,IAAI,GAAG,MAAd,CAAA;IACH,CAAA;IAGM,SAAS4B,SAAT,CAAmBC,GAAnB,EAAwB;IAC3B,EAAIC,IAAAA,MAAM,GAAG,CAAb,CAAA;;IACA,EAAID,IAAAA,GAAG,IAAI,EAAX,EAAe;IACXC,IAAAA,MAAM,GAAG,CAAT,CAAA;IACH,GAFD,MAEO,IAAID,GAAG,IAAI,EAAX,EAAe;IAClBC,IAAAA,MAAM,GAAG,CAAT,CAAA;IACH,GAAA;;IAED,EAAA,OAAOA,MAAP,CAAA;IACH,CAAA;IAEM,SAASC,sBAAT,CAAgC7G,KAAhC,EAAuCI,MAAvC,EAA+C;IAClD,EAAA,MAAM0G,cAAc,GAAGrE,QAAQ,CAACC,aAAT,CAAuB,QAAvB,CAAvB,CAAA;IACAoE,EAAAA,cAAc,CAAC9G,KAAf,GAAuBA,KAAvB,CAAA;IACA8G,EAAAA,cAAc,CAAC1G,MAAf,GAAwBA,MAAxB,CAAA;IACA,EAAO2G,OAAAA,iBAAiB,CAACD,cAAD,EAAiB,CAAjB,EAAoB,CAApB,EAAuB9G,KAAvB,EAA8BI,MAA9B,CAAxB,CAAA;IACH,CAAA;IAGM,SAAS4G,UAAT,GAAsB;IACzB,EAAA,OAAO7B,MAAM,CAAC8B,WAAP,IAAsB9B,MAAM,CAAC8B,WAAP,CAAmBC,eAAnB,CAAmC5J,UAAU,CAACC,GAA9C,CAA7B,CAAA;IACH,CAAA;IAmBM,SAAS4J,OAAT,CAAiBjD,KAAjB,EAAwB;IAC3B,EAAA,OAAOA,KAAK,KAAK,IAAV,IAAkBA,KAAK,KAAKkD,SAAnC,CAAA;IACH,CAAA;IAEM,SAASC,SAAT,CAAmBnD,KAAnB,EAA0B;IAC7B,EAAA,OAAOA,KAAK,KAAK,IAAV,IAAkBA,KAAK,KAAK,KAAnC,CAAA;IACH,CAAA;IAEM,SAASoD,UAAT,CAAoBpD,KAApB,EAA2B;IAC9B,EAAA,OAAO,CAACiD,OAAO,CAACjD,KAAD,CAAf,CAAA;IACH,CAAA;IAEM,SAASqD,aAAT,GAAyB;IAC5B,EAAO,OAAA;IACHC,IAAAA,aAAa,EAAE,EADZ;IACgB;IACnBC,IAAAA,SAAS,EAAE,EAFR;IAEY;IACfC,IAAAA,WAAW,EAAE,EAHV;IAGc;IACjBC,IAAAA,cAAc,EAAE,EAJb;IAIiB;IACpBC,IAAAA,UAAU,EAAE,EALT;IAKa;IAChBC,IAAAA,WAAW,EAAE,EANV;IAMc;IACjBC,IAAAA,UAAU,EAAE,EAPT;IAOa;IAChBC,IAAAA,aAAa,EAAE,EARZ;IAQe;IAClBC,IAAAA,eAAe,EAAE,EATd;IASiB;IACpBC,IAAAA,uBAAuB,EAAE,EAVtB;IAUyB;IAC5BC,IAAAA,cAAc,EAAE,EAXb;IAWiB;IACpBC,IAAAA,eAAe,EAAE,EAZd;IAYkB;IACrBC,IAAAA,cAAc,EAAE,EAbb;IAagB;IACnBC,IAAAA,YAAY,EAAE,EAdX;;IAAA,GAAP,CAAA;IAgBH;IA8FM,SAASC,cAAT,CAAwBC,IAAxB,EAA8B;IACjC,EAAI3B,IAAAA,MAAJ,CADiC;;IAIjC,EAAA,IAAI2B,IAAI,GAAG,CAAC,CAAZ,EAAe;IACX,IAAIC,IAAAA,IAAI,GAAGvI,IAAI,CAACwI,KAAL,CAAWF,IAAI,GAAG,IAAlB,CAAX,CAAA;IACA,IAAIxE,IAAAA,GAAG,GAAG9D,IAAI,CAACwI,KAAL,CAAWF,IAAI,GAAG,EAAlB,CAAA,GAAwB,EAAlC,CAAA;IACA,IAAA,IAAIG,GAAG,GAAGH,IAAI,GAAG,EAAjB,CAAA;IAEAG,IAAAA,GAAG,GAAGzI,IAAI,CAAC0I,KAAL,CAAWD,GAAX,CAAN,CAAA;;IAEA,IAAIF,IAAAA,IAAI,GAAG,EAAX,EAAe;IACX5B,MAAAA,MAAM,GAAG,GAAM4B,GAAAA,IAAN,GAAa,GAAtB,CAAA;IACH,KAFD,MAEO;IACH5B,MAAAA,MAAM,GAAG4B,IAAI,GAAG,GAAhB,CAAA;IACH,KAAA;;IAED,IAAIzE,IAAAA,GAAG,GAAG,EAAV,EAAc;IACV6C,MAAAA,MAAM,IAAI,GAAV,CAAA;IACH,KAAA;;IACDA,IAAAA,MAAM,IAAI7C,GAAG,GAAG,GAAhB,CAAA;;IACA,IAAI2E,IAAAA,GAAG,GAAG,EAAV,EAAc;IACV9B,MAAAA,MAAM,IAAI,GAAV,CAAA;IACH,KAAA;;IACDA,IAAAA,MAAM,IAAI8B,GAAG,CAACjC,OAAJ,CAAY,CAAZ,CAAV,CAAA;IACH,GAAA;;IAED,EAAA,OAAOG,MAAP,CAAA;IACH;;AC7eD,mBAAA,CAAgBnH,MAAD,IAAY;IAGvB,EAAI,IAAA;IACA,IAAMmJ,MAAAA,gBAAgB,GAAG,MAAM;IAC3BnJ,MAAAA,MAAM,CAACoJ,IAAP,CAAY9N,gBAAgB,CAACpF,UAA7B,EAAyC8J,MAAM,CAAC9J,UAAhD,CAAA,CAD2B;;IAI3B,MAAA,IAAI,CAAC8J,MAAM,CAAC9J,UAAZ,EAAwB;IACpB8J,QAAAA,MAAM,CAACzF,MAAP,EAAA,CAAA;IACH,OAFD,MAEO;IACH,QAAA,IAAGyF,MAAM,CAACpB,IAAP,CAAYxH,MAAf,EAAsB;IAClB4I,UAAAA,MAAM,CAACzF,MAAP,EAAA,CAAA;IACH,SAAA;IACJ,OAAA;IAEJ,KAZD,CAAA;;IAaA8O,IAAAA,UAAU,CAACC,EAAX,CAAc,QAAd,EAAwBH,gBAAxB,CAAA,CAAA;IACAnJ,IAAAA,MAAM,CAACuJ,MAAP,CAActK,QAAd,CAAuBY,IAAvB,CAA4B,MAAM;IAC9BwJ,MAAAA,UAAU,CAACG,GAAX,CAAe,QAAf,EAAyBL,gBAAzB,CAAA,CAAA;IACH,KAFD,CAAA,CAAA;IAGH,GAlBD,CAkBE,OAAOzP,KAAP,EAAc;IAEf,GAvBsB;;;IAyBvBsG,EAAAA,MAAM,CAACsJ,EAAP,CAAUxQ,MAAM,CAACE,iBAAjB,EAAoC,MAAM;IACtCgH,IAAAA,MAAM,CAAC9K,KAAP,CAAauE,GAAb,CAAiB,QAAjB,EAA2B,YAA3B,CAAA,CAAA;IACAuG,IAAAA,MAAM,CAACyJ,MAAP,GAAgB,IAAhB,CAAA;IACH,GAHD,EAzBuB;;IA+BvBzJ,EAAAA,MAAM,CAACsJ,EAAP,CAAUxQ,MAAM,CAAC1C,IAAjB,EAAuB,MAAM;IACzB4J,IAAAA,MAAM,CAAC3G,OAAP,GAAiB,KAAjB,CAAA;IACH,GAFD,EA/BuB;;IAoCvB2G,EAAAA,MAAM,CAACsJ,EAAP,CAAUxQ,MAAM,CAAC5C,UAAjB,EAA8BuO,KAAD,IAAW;IACpC,IAAA,IAAIA,KAAJ,EAAW;IACP,MAAI,IAAA;IACA4E,QAAAA,UAAU,CAACK,OAAX,CAAmB1J,MAAM,CAACK,UAA1B,CAAA,CAAsCsJ,IAAtC,CAA2C,MAAM,EAAjD,EAEGC,KAFH,CAEU/H,CAAD,IAAO;IACZ7B,UAAAA,MAAM,CAACjH,aAAP,GAAuB,IAAvB,CAAA;IACH,SAJD,CAAA,CAAA;IAMH,OAPD,CAOE,OAAO8I,CAAP,EAAU;IACR7B,QAAAA,MAAM,CAACjH,aAAP,GAAuB,IAAvB,CAAA;IACH,OAAA;IACJ,KAXD,MAWO;IACH,MAAI,IAAA;IACAsQ,QAAAA,UAAU,CAACQ,IAAX,EAAA,CAAkBF,IAAlB,CAAuB,MAAM,EAA7B,CAAA,CACGC,KADH,CACS,MAAM;IACX5J,UAAAA,MAAM,CAACjH,aAAP,GAAuB,KAAvB,CAAA;IAEH,SAJD,CAAA,CAAA;IAKH,OAND,CAME,OAAO8I,CAAP,EAAU;IACR7B,QAAAA,MAAM,CAACjH,aAAP,GAAuB,KAAvB,CAAA;IACH,OAAA;IACJ,KAAA;IACJ,GAvBD,CAAA,CAAA;IAyBAiH,EAAAA,MAAM,CAACsJ,EAAP,CAAUxQ,MAAM,CAACC,aAAjB,EAAiC0L,KAAD,IAAW;IACvC,IAAA,IAAIA,KAAJ,EAAW;IACPzE,MAAAA,MAAM,CAACK,UAAP,CAAkByJ,SAAlB,CAA4BC,GAA5B,CAAgC,0BAAhC,CAAA,CAAA;IACH,KAFD,MAEO;IACH/J,MAAAA,MAAM,CAACK,UAAP,CAAkByJ,SAAlB,CAA4BE,MAA5B,CAAmC,0BAAnC,CAAA,CAAA;IACH,KAAA;IACJ,GAND,EA7DuB;;IAsEvBhK,EAAAA,MAAM,CAACsJ,EAAP,CAAUxQ,MAAM,CAACyB,MAAjB,EAAyB,MAAM;IAC3ByF,IAAAA,MAAM,CAACzH,KAAP,CAAagC,MAAb,EAAA,CAAA;IACH,GAFD,CAAA,CAAA;;IAKA,EAAA,IAAIyF,MAAM,CAACpB,IAAP,CAAY1J,KAAhB,EAAuB;IACnB,IAAA,MAAM+U,UAAU,GAAG,CAACnR,MAAM,CAACS,UAAR,CAAnB,CAAA;IACA0G,IAAAA,MAAM,CAACyE,IAAP,CAAY5L,MAAZ,CAAoBgH,CAAAA,OAApB,CAA6BnC,GAAD,IAAS;IACjCqC,MAAAA,MAAM,CAACsJ,EAAP,CAAUxQ,MAAM,CAAC6E,GAAD,CAAhB,EAAwB8G,KAAD,IAAW;IAC9B,QAAA,IAAIwF,UAAU,CAACC,QAAX,CAAoBvM,GAApB,CAAJ,EAA8B;IAC1B,UAAA,OAAA;IACH,SAAA;;IAEDqC,QAAAA,MAAM,CAAC9K,KAAP,CAAauE,GAAb,CAAiB,eAAjB,EAAkCX,MAAM,CAAC6E,GAAD,CAAxC,EAA+C8G,KAA/C,CAAA,CAAA;IACH,OAND,CAAA,CAAA;IAOH,KARD,CAAA,CAAA;IAUAxE,IAAAA,MAAM,CAACyE,IAAP,CAAYnJ,YAAZ,CAA0BuE,CAAAA,OAA1B,CAAmCnC,GAAD,IAAS;IACvCqC,MAAAA,MAAM,CAACsJ,EAAP,CAAU/N,YAAY,CAACoC,GAAD,CAAtB,EAA8B8G,KAAD,IAAW;IACpCzE,QAAAA,MAAM,CAAC9K,KAAP,CAAauE,GAAb,CAAiB,oBAAjB,EAAuC8B,YAAY,CAACoC,GAAD,CAAnD,EAA0D8G,KAA1D,CAAA,CAAA;IACH,OAFD,CAAA,CAAA;IAGH,KAJD,CAAA,CAAA;IAKH,GAAA;IACJ,CA7FD;;ICJe,MAAM0F,OAAN,CAAc;IACzBb,EAAAA,EAAE,CAAC3K,IAAD,EAAOyL,EAAP,EAAWC,GAAX,EAAgB;IACd,IAAMxI,MAAAA,CAAC,GAAG,IAAKA,CAAAA,CAAL,KAAW,IAAKA,CAAAA,CAAL,GAAS,EAApB,CAAV,CAAA;IACA,IAAA,CAACA,CAAC,CAAClD,IAAD,CAAD,KAAYkD,CAAC,CAAClD,IAAD,CAAD,GAAU,EAAtB,CAAD,EAA4BkB,IAA5B,CAAiC;IAACuK,MAAAA,EAAD;IAAKC,MAAAA,GAAAA;IAAL,KAAjC,CAAA,CAAA;IACA,IAAA,OAAO,IAAP,CAAA;IACH,GAAA;;IAEDC,EAAAA,IAAI,CAAC3L,IAAD,EAAOyL,EAAP,EAAWC,GAAX,EAAgB;IAChB,IAAME,MAAAA,IAAI,GAAG,IAAb,CAAA;;IAEA,IAAA,SAASC,QAAT,GAA2B;IACvBD,MAAAA,IAAI,CAACf,GAAL,CAAS7K,IAAT,EAAe6L,QAAf,CAAA,CAAA;;IADuB,MAAA,KAAA,IAAA,IAAA,GAAA,SAAA,CAAA,MAAA,EAAN3L,IAAM,GAAA,IAAA,KAAA,CAAA,IAAA,CAAA,EAAA,IAAA,GAAA,CAAA,EAAA,IAAA,GAAA,IAAA,EAAA,IAAA,EAAA,EAAA;IAANA,QAAAA,IAAM,CAAA,IAAA,CAAA,GAAA,SAAA,CAAA,IAAA,CAAA,CAAA;IAAA,OAAA;;IAEvBuL,MAAAA,EAAE,CAACK,KAAH,CAASJ,GAAT,EAAcxL,IAAd,CAAA,CAAA;IACH,KAAA;;IAED2L,IAAAA,QAAQ,CAACE,CAAT,GAAaN,EAAb,CAAA;IACA,IAAO,OAAA,IAAA,CAAKd,EAAL,CAAQ3K,IAAR,EAAc6L,QAAd,EAAwBH,GAAxB,CAAP,CAAA;IACH,GAAA;;IAEDjB,EAAAA,IAAI,CAACzK,IAAD,EAAgB;IAChB,IAAA,MAAMgM,MAAM,GAAG,CAAC,CAAC,IAAK9I,CAAAA,CAAL,KAAW,IAAKA,CAAAA,CAAL,GAAS,EAApB,CAAD,EAA0BlD,IAA1B,KAAmC,EAApC,EAAwCiM,KAAxC,EAAf,CAAA;;IADgB,IAAA,KAAA,IAAA,KAAA,GAAA,SAAA,CAAA,MAAA,EAANC,IAAM,GAAA,IAAA,KAAA,CAAA,KAAA,GAAA,CAAA,GAAA,KAAA,GAAA,CAAA,GAAA,CAAA,CAAA,EAAA,KAAA,GAAA,CAAA,EAAA,KAAA,GAAA,KAAA,EAAA,KAAA,EAAA,EAAA;IAANA,MAAAA,IAAM,CAAA,KAAA,GAAA,CAAA,CAAA,GAAA,SAAA,CAAA,KAAA,CAAA,CAAA;IAAA,KAAA;;IAEhB,IAAA,KAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGH,MAAM,CAACnJ,MAA3B,EAAmCsJ,CAAC,IAAI,CAAxC,EAA2C;IACvCH,MAAAA,MAAM,CAACG,CAAD,CAAN,CAAUV,EAAV,CAAaK,KAAb,CAAmBE,MAAM,CAACG,CAAD,CAAN,CAAUT,GAA7B,EAAkCQ,IAAlC,CAAA,CAAA;IACH,KAAA;;IACD,IAAA,OAAO,IAAP,CAAA;IACH,GAAA;;IAEDrB,EAAAA,GAAG,CAAC7K,IAAD,EAAOU,QAAP,EAAiB;IAChB,IAAMwC,MAAAA,CAAC,GAAG,IAAKA,CAAAA,CAAL,KAAW,IAAKA,CAAAA,CAAL,GAAS,EAApB,CAAV,CAAA;;IAEA,IAAI,IAAA,CAAClD,IAAL,EAAW;IACPsB,MAAAA,MAAM,CAACyE,IAAP,CAAY7C,CAAZ,CAAe/B,CAAAA,OAAf,CAAwBnC,GAAD,IAAS;IAC5B,QAAOkE,OAAAA,CAAC,CAAClE,GAAD,CAAR,CAAA;IACH,OAFD,CAAA,CAAA;IAGA,MAAA,OAAO,KAAKkE,CAAZ,CAAA;IACA,MAAA,OAAA;IACH,KAAA;;IAED,IAAA,MAAMkJ,IAAI,GAAGlJ,CAAC,CAAClD,IAAD,CAAd,CAAA;IACA,IAAMqM,MAAAA,UAAU,GAAG,EAAnB,CAAA;;IACA,IAAID,IAAAA,IAAI,IAAI1L,QAAZ,EAAsB;IAClB,MAAA,KAAK,IAAIyL,CAAC,GAAG,CAAR,EAAWG,GAAG,GAAGF,IAAI,CAACvJ,MAA3B,EAAmCsJ,CAAC,GAAGG,GAAvC,EAA4CH,CAAC,IAAI,CAAjD,EAAoD;IAChD,QAAIC,IAAAA,IAAI,CAACD,CAAD,CAAJ,CAAQV,EAAR,KAAe/K,QAAf,IAA2B0L,IAAI,CAACD,CAAD,CAAJ,CAAQV,EAAR,CAAWM,CAAX,KAAiBrL,QAAhD,EAA0D2L,UAAU,CAACnL,IAAX,CAAgBkL,IAAI,CAACD,CAAD,CAApB,CAAA,CAAA;IAC7D,OAAA;IACJ,KAAA;;IACD,IAAIE,IAAAA,UAAU,CAACxJ,MAAf,EAAuB;IACnBK,MAAAA,CAAC,CAAClD,IAAD,CAAD,GAAUqM,UAAV,CAAA;IACH,KAFD,MAEO;IACH,MAAOnJ,OAAAA,CAAC,CAAClD,IAAD,CAAR,CAAA;IACH,KAAA;;IACD,IAAA,OAAO,IAAP,CAAA;IACH,GAAA;;IAnDwB;;ACA7B,sBAAA,CAAe,CAAC0C,EAAD,EAAK7J,kBAAL,KAA4B;IACvC,EAAI0T,IAAAA,kBAAkB,GAAG,CACrB,2BADqB,EAErB,4BAFqB,EAGrB,4BAHqB,EAKrB,aALqB,EAMrB,GANqB,EAOrB,0BAPqB,EAQrB,+BARqB,EASrB,GATqB,CAUvBC,CAAAA,IAVuB,CAUlB,IAVkB,CAAzB,CAAA;IAYA,EAAA,IAAIC,oBAAoB,GAAG,CACvB,wBADuB,EAEvB,kCAFuB,EAGvB,6BAHuB,EAIvB,6BAJuB,EAKvB,6BALuB,EAMvB,2BANuB,EAOvB,GAPuB,EAQvB,gDARuB,EASvB,qDATuB,EAUvB,6CAVuB,EAWvB,YAXuB,EAYvB,IAZuB,EAcvB,mBAduB,EAevB,uDAfuB,EAgBvB,uDAhBuB,EAiBvB,uDAjBuB,EAkBvB,4CAlBuB,EAmBvB,GAnBuB,EAoBzBD,IApByB,CAoBpB,IApBoB,CAA3B,CAAA;;IAsBA,EAAA,IAAI3T,kBAAJ,EAAwB;IACpB6J,IAAAA,EAAE,CAACgK,WAAH,CAAehK,EAAE,CAACiK,gBAAlB,EAAoC,CAApC,CAAA,CAAA;IACH,GAAA;;IACD,EAAIC,IAAAA,YAAY,GAAGlK,EAAE,CAACmK,YAAH,CAAgBnK,EAAE,CAACoK,aAAnB,CAAnB,CAAA;IACApK,EAAAA,EAAE,CAACqK,YAAH,CAAgBH,YAAhB,EAA8BL,kBAA9B,CAAA,CAAA;IACA7J,EAAAA,EAAE,CAACsK,aAAH,CAAiBJ,YAAjB,CAAA,CAAA;;IACA,EAAI,IAAA,CAAClK,EAAE,CAACuK,kBAAH,CAAsBL,YAAtB,EAAoClK,EAAE,CAACwK,cAAvC,CAAL,EAA6D;IACzD/M,IAAAA,OAAO,CAACrF,GAAR,CAAY,mCAAA,GAAsC4H,EAAE,CAACyK,gBAAH,CAAoBP,YAApB,CAAlD,CAAA,CAAA;IACH,GAAA;;IAED,EAAIQ,IAAAA,cAAc,GAAG1K,EAAE,CAACmK,YAAH,CAAgBnK,EAAE,CAAC2K,eAAnB,CAArB,CAAA;IACA3K,EAAAA,EAAE,CAACqK,YAAH,CAAgBK,cAAhB,EAAgCX,oBAAhC,CAAA,CAAA;IACA/J,EAAAA,EAAE,CAACsK,aAAH,CAAiBI,cAAjB,CAAA,CAAA;;IACA,EAAI,IAAA,CAAC1K,EAAE,CAACuK,kBAAH,CAAsBG,cAAtB,EAAsC1K,EAAE,CAACwK,cAAzC,CAAL,EAA+D;IAC3D/M,IAAAA,OAAO,CAACrF,GAAR,CAAY,qCAAA,GAAwC4H,EAAE,CAACyK,gBAAH,CAAoBC,cAApB,CAApD,CAAA,CAAA;IACH,GAAA;;IAED,EAAA,IAAIE,OAAO,GAAG5K,EAAE,CAAC6K,aAAH,EAAd,CAAA;IACA7K,EAAAA,EAAE,CAAC8K,YAAH,CAAgBF,OAAhB,EAAyBV,YAAzB,CAAA,CAAA;IACAlK,EAAAA,EAAE,CAAC8K,YAAH,CAAgBF,OAAhB,EAAyBF,cAAzB,CAAA,CAAA;IACA1K,EAAAA,EAAE,CAAC+K,WAAH,CAAeH,OAAf,CAAA,CAAA;;IACA,EAAI,IAAA,CAAC5K,EAAE,CAACgL,mBAAH,CAAuBJ,OAAvB,EAAgC5K,EAAE,CAACiL,WAAnC,CAAL,EAAsD;IAClDxN,IAAAA,OAAO,CAACrF,GAAR,CAAY,6BAAA,GAAgC4H,EAAE,CAACkL,iBAAH,CAAqBN,OAArB,CAA5C,CAAA,CAAA;IACH,GAAA;;IAED5K,EAAAA,EAAE,CAACmL,UAAH,CAAcP,OAAd,EA5DuC;;IA+DvC,EAAA,IAAIQ,eAAe,GAAGpL,EAAE,CAACqL,YAAH,EAAtB,CAAA;IACArL,EAAAA,EAAE,CAACsL,UAAH,CAActL,EAAE,CAACuL,YAAjB,EAA+BH,eAA/B,CAAA,CAAA;IACApL,EAAAA,EAAE,CAACwL,UAAH,CAAcxL,EAAE,CAACuL,YAAjB,EAA+B,IAAIE,YAAJ,CAAiB,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAC,CAAR,EAAW,CAAX,EAAc,CAAd,EAAiB,CAAC,CAAlB,EAAqB,CAAC,CAAtB,EAAyB,CAAC,CAA1B,CAAjB,CAA/B,EAA+EzL,EAAE,CAAC0L,WAAlF,CAAA,CAAA;IAEA,EAAIC,IAAAA,YAAY,GAAG3L,EAAE,CAAC4L,iBAAH,CAAqBhB,OAArB,EAA8B,WAA9B,CAAnB,CAAA;IACA5K,EAAAA,EAAE,CAAC6L,uBAAH,CAA2BF,YAA3B,CAAA,CAAA;IACA3L,EAAAA,EAAE,CAAC8L,mBAAH,CAAuBH,YAAvB,EAAqC,CAArC,EAAwC3L,EAAE,CAAC+L,KAA3C,EAAkD,KAAlD,EAAyD,CAAzD,EAA4D,CAA5D,CAAA,CAAA;IAEA,EAAA,IAAIC,gBAAgB,GAAGhM,EAAE,CAACqL,YAAH,EAAvB,CAAA;IACArL,EAAAA,EAAE,CAACsL,UAAH,CAActL,EAAE,CAACuL,YAAjB,EAA+BS,gBAA/B,CAAA,CAAA;IACAhM,EAAAA,EAAE,CAACwL,UAAH,CAAcxL,EAAE,CAACuL,YAAjB,EAA+B,IAAIE,YAAJ,CAAiB,CAAC,CAAD,EAAI,CAAJ,EAAO,CAAP,EAAU,CAAV,EAAa,CAAb,EAAgB,CAAhB,EAAmB,CAAnB,EAAsB,CAAtB,CAAjB,CAA/B,EAA2EzL,EAAE,CAAC0L,WAA9E,CAAA,CAAA;IAEA,EAAIO,IAAAA,aAAa,GAAGjM,EAAE,CAAC4L,iBAAH,CAAqBhB,OAArB,EAA8B,YAA9B,CAApB,CAAA;IACA5K,EAAAA,EAAE,CAAC6L,uBAAH,CAA2BI,aAA3B,CAAA,CAAA;IACAjM,EAAAA,EAAE,CAAC8L,mBAAH,CAAuBG,aAAvB,EAAsC,CAAtC,EAAyCjM,EAAE,CAAC+L,KAA5C,EAAmD,KAAnD,EAA0D,CAA1D,EAA6D,CAA7D,CAAA,CAAA;;IAEA,EAAA,SAASG,YAAT,CAAsB5O,IAAtB,EAA4B6O,KAA5B,EAAmC;IAC/B,IAAA,IAAIC,UAAU,GAAGpM,EAAE,CAACqM,aAAH,EAAjB,CAAA;IACArM,IAAAA,EAAE,CAACsM,WAAH,CAAetM,EAAE,CAACuM,UAAlB,EAA8BH,UAA9B,CAAA,CAAA;IACApM,IAAAA,EAAE,CAACwM,aAAH,CAAiBxM,EAAE,CAACuM,UAApB,EAAgCvM,EAAE,CAACyM,kBAAnC,EAAuDzM,EAAE,CAAC0M,MAA1D,CAAA,CAAA;IACA1M,IAAAA,EAAE,CAACwM,aAAH,CAAiBxM,EAAE,CAACuM,UAApB,EAAgCvM,EAAE,CAAC2M,kBAAnC,EAAuD3M,EAAE,CAAC0M,MAA1D,CAAA,CAAA;IACA1M,IAAAA,EAAE,CAACwM,aAAH,CAAiBxM,EAAE,CAACuM,UAApB,EAAgCvM,EAAE,CAAC4M,cAAnC,EAAmD5M,EAAE,CAAC6M,aAAtD,CAAA,CAAA;IACA7M,IAAAA,EAAE,CAACwM,aAAH,CAAiBxM,EAAE,CAACuM,UAApB,EAAgCvM,EAAE,CAAC8M,cAAnC,EAAmD9M,EAAE,CAAC6M,aAAtD,CAAA,CAAA;IACA7M,IAAAA,EAAE,CAACsM,WAAH,CAAetM,EAAE,CAACuM,UAAlB,EAA8B,IAA9B,CAAA,CAAA;IACAvM,IAAAA,EAAE,CAAC+M,SAAH,CAAa/M,EAAE,CAACgN,kBAAH,CAAsBpC,OAAtB,EAA+BtN,IAA/B,CAAb,EAAmD6O,KAAnD,CAAA,CAAA;IACA,IAAA,OAAOC,UAAP,CAAA;IACH,GAAA;;IAED,EAAA,IAAIa,WAAW,GAAGf,YAAY,CAAC,UAAD,EAAa,CAAb,CAA9B,CAAA;;IACA,EAAA,IAAIgB,WAAW,GAAGhB,YAAY,CAAC,UAAD,EAAa,CAAb,CAA9B,CAAA;;IACA,EAAA,IAAIiB,WAAW,GAAGjB,YAAY,CAAC,UAAD,EAAa,CAAb,CAA9B,CAAA;;IAEA,EAAO,OAAA;IACH3V,IAAAA,MAAM,EAAE,UAAU6W,CAAV,EAAajI,CAAb,EAAgBkI,CAAhB,EAAmBC,CAAnB,EAAsBC,CAAtB,EAAyB;IAC7BvN,MAAAA,EAAE,CAACwN,QAAH,CAAY,CAAZ,EAAe,CAAf,EAAkBJ,CAAlB,EAAqBjI,CAArB,CAAA,CAAA;IACAnF,MAAAA,EAAE,CAACyN,aAAH,CAAiBzN,EAAE,CAAC0N,QAApB,CAAA,CAAA;IACA1N,MAAAA,EAAE,CAACsM,WAAH,CAAetM,EAAE,CAACuM,UAAlB,EAA8BU,WAA9B,CAAA,CAAA;IACAjN,MAAAA,EAAE,CAAC2N,UAAH,CAAc3N,EAAE,CAACuM,UAAjB,EAA6B,CAA7B,EAAgCvM,EAAE,CAAC4N,SAAnC,EAA8CR,CAA9C,EAAiDjI,CAAjD,EAAoD,CAApD,EAAuDnF,EAAE,CAAC4N,SAA1D,EAAqE5N,EAAE,CAAC6N,aAAxE,EAAuFR,CAAvF,CAAA,CAAA;IACArN,MAAAA,EAAE,CAACyN,aAAH,CAAiBzN,EAAE,CAAC8N,QAApB,CAAA,CAAA;IACA9N,MAAAA,EAAE,CAACsM,WAAH,CAAetM,EAAE,CAACuM,UAAlB,EAA8BW,WAA9B,CAAA,CAAA;IACAlN,MAAAA,EAAE,CAAC2N,UAAH,CAAc3N,EAAE,CAACuM,UAAjB,EAA6B,CAA7B,EAAgCvM,EAAE,CAAC4N,SAAnC,EAA8CR,CAAC,GAAG,CAAlD,EAAqDjI,CAAC,GAAG,CAAzD,EAA4D,CAA5D,EAA+DnF,EAAE,CAAC4N,SAAlE,EAA6E5N,EAAE,CAAC6N,aAAhF,EAA+FP,CAA/F,CAAA,CAAA;IACAtN,MAAAA,EAAE,CAACyN,aAAH,CAAiBzN,EAAE,CAAC+N,QAApB,CAAA,CAAA;IACA/N,MAAAA,EAAE,CAACsM,WAAH,CAAetM,EAAE,CAACuM,UAAlB,EAA8BY,WAA9B,CAAA,CAAA;IACAnN,MAAAA,EAAE,CAAC2N,UAAH,CAAc3N,EAAE,CAACuM,UAAjB,EAA6B,CAA7B,EAAgCvM,EAAE,CAAC4N,SAAnC,EAA8CR,CAAC,GAAG,CAAlD,EAAqDjI,CAAC,GAAG,CAAzD,EAA4D,CAA5D,EAA+DnF,EAAE,CAAC4N,SAAlE,EAA6E5N,EAAE,CAAC6N,aAAhF,EAA+FN,CAA/F,CAAA,CAAA;IACAvN,MAAAA,EAAE,CAACgO,UAAH,CAAchO,EAAE,CAACiO,cAAjB,EAAiC,CAAjC,EAAoC,CAApC,CAAA,CAAA;IACH,KAbE;IAcHzU,IAAAA,OAAO,EAAE,YAAY;IACjB,MAAI,IAAA;IACAwG,QAAAA,EAAE,CAACkO,aAAH,CAAiBtD,OAAjB,CAAA,CAAA;IAEA5K,QAAAA,EAAE,CAACmO,YAAH,CAAgB/C,eAAhB,CAAA,CAAA;IACApL,QAAAA,EAAE,CAACmO,YAAH,CAAgBnC,gBAAhB,CAAA,CAAA;IAEAhM,QAAAA,EAAE,CAACoO,aAAH,CAAiBnB,WAAjB,CAAA,CAAA;IACAjN,QAAAA,EAAE,CAACoO,aAAH,CAAiBlB,WAAjB,CAAA,CAAA;IACAlN,QAAAA,EAAE,CAACmO,YAAH,CAAgBhB,WAAhB,CAAA,CAAA;IACH,OATD,CASE,OAAO3M,CAAP,EAAU;IAEX,OAAA;IAEJ,KAAA;IA5BE,GAAP,CAAA;IA8BH,CA7HD;;ICGe,MAAM6N,cAAN,SAA2BvF,OAA3B,CAAmC;IAC9C1L,EAAAA,WAAW,GAAG;IACV,IAAA,KAAA,EAAA,CAAA;IACA,IAAK/G,IAAAA,CAAAA,IAAL,GAAY,KAAZ,CAAA;IACH,GAJ6C;;;IAO9CiY,EAAAA,eAAe,CAAC9E,IAAD,EAAO;IAClB,IAAIA,IAAAA,IAAI,CAAC+E,WAAT,EAAsB;IAClB,MAAKtW,IAAAA,CAAAA,SAAL,CAAeuW,OAAf,GAAyBxT,cAAc,CAACwO,IAAI,CAAC+E,WAAN,CAAvC,CAAA;IACH,KAAA;;IAED,IAAI/E,IAAAA,IAAI,CAACtK,KAAT,EAAgB;IACZ,MAAA,IAAA,CAAKjH,SAAL,CAAeiH,KAAf,GAAuBsK,IAAI,CAACtK,KAA5B,CAAA;IACH,KAAA;;IAED,IAAIsK,IAAAA,IAAI,CAAClK,MAAT,EAAiB;IACb,MAAA,IAAA,CAAKrH,SAAL,CAAeqH,MAAf,GAAwBkK,IAAI,CAAClK,MAA7B,CAAA;IACH,KAXiB;;;IAclB,IAAA,IAAI,KAAKrH,SAAL,CAAeuW,OAAf,IAA0B,IAAA,CAAKvW,SAAL,CAAeqH,MAAzC,IAAmD,IAAA,CAAKrH,SAAL,CAAeiH,KAAlE,IAA2E,CAAC,IAAA,CAAK7I,IAArF,EAA2F;IACvF,MAAKsI,IAAAA,CAAAA,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAACQ,SAAxB,EAAmC,IAAA,CAAKA,SAAxC,CAAA,CAAA;IACA,MAAK5B,IAAAA,CAAAA,IAAL,GAAY,IAAZ,CAAA;IACH,KAAA;IACJ,GAAA;;IAEDtB,EAAAA,IAAI,GAAE,EAEL;;IAED8C,EAAAA,KAAK,GAAG,EAEP;;IAED4W,EAAAA,SAAS,GAAG,EAEX;;IArC6C;;ICWnC,MAAMC,iBAAN,SAAgCL,cAAhC,CAA6C;IAExDjR,EAAAA,WAAW,CAACuB,MAAD,EAAS;IAChB,IAAA,KAAA,EAAA,CAAA;IACA,IAAKA,IAAAA,CAAAA,MAAL,GAAcA,MAAd,CAAA;IACA,IAAA,MAAMqH,cAAc,GAAGrE,QAAQ,CAACC,aAAT,CAAuB,QAAvB,CAAvB,CAAA;IACAoE,IAAAA,cAAc,CAAC1C,KAAf,CAAqBqL,QAArB,GAAgC,UAAhC,CAAA;IACA3I,IAAAA,cAAc,CAAC1C,KAAf,CAAqBsL,GAArB,GAA2B,CAA3B,CAAA;IACA5I,IAAAA,cAAc,CAAC1C,KAAf,CAAqBuL,IAArB,GAA4B,CAA5B,CAAA;IACA,IAAKC,IAAAA,CAAAA,aAAL,GAAqB9I,cAArB,CAAA;IACArH,IAAAA,MAAM,CAACK,UAAP,CAAkB+P,WAAlB,CAA8B,KAAKD,aAAnC,CAAA,CAAA;IAEA,IAAKE,IAAAA,CAAAA,SAAL,GAAiB,IAAjB,CAAA;IACA,IAAKC,IAAAA,CAAAA,SAAL,GAAiB,IAAjB,CAAA;IACA,IAAKC,IAAAA,CAAAA,eAAL,GAAuB,IAAvB,CAAA;IACA,IAAKC,IAAAA,CAAAA,gBAAL,GAAwB,IAAxB,CAAA;IACA,IAAKC,IAAAA,CAAAA,cAAL,GAAsB,IAAtB,CAAA;IACA,IAAKC,IAAAA,CAAAA,UAAL,GAAkB,IAAlB,CAAA;IACA,IAAA,IAAA,CAAKpX,SAAL,GAAiB;IACbiH,MAAAA,KAAK,EAAE,EADM;IAEbI,MAAAA,MAAM,EAAE,EAFK;IAGbkP,MAAAA,OAAO,EAAE,EAAA;IAHI,KAAjB,CAhBgB;;IAsBhB,IAAA,IAAA,CAAKc,iBAAL,EAAA,CAAA;;IACA,IAAK3Q,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,aAAtB,EAAqC,MAArC,CAAA,CAAA;IACH,GAAA;;IAEDoB,EAAAA,OAAO,GAAG;IACN,IAAI,IAAA,IAAA,CAAKyV,SAAT,EAAoB;IAChB,MAAKA,IAAAA,CAAAA,SAAL,GAAiB,IAAjB,CAAA;IACH,KAAA;;IAED,IAAI,IAAA,IAAA,CAAKD,SAAT,EAAoB;IAChB,MAAKA,IAAAA,CAAAA,SAAL,GAAiB,IAAjB,CAAA;IACH,KAAA;;IAED,IAAI,IAAA,IAAA,CAAKE,eAAT,EAA0B;IACtB,MAAA,IAAA,CAAKC,gBAAL,IAAyB,IAAKA,CAAAA,gBAAL,EAAzB,CAAA;IACA,MAAKA,IAAAA,CAAAA,gBAAL,GAAwB,IAAxB,CAAA;IACA,MAAKD,IAAAA,CAAAA,eAAL,GAAuB,IAAvB,CAAA;IACH,KAAA;;IACD,IAAI,IAAA,IAAA,CAAKE,cAAT,EAAyB;IACrB,MAAKA,IAAAA,CAAAA,cAAL,GAAsB,IAAtB,CAAA;IACH,KAAA;;IAED,IAAKC,IAAAA,CAAAA,UAAL,GAAkB,IAAlB,CAAA;IAEA,IAAA,IAAA,CAAKpX,SAAL,GAAiB;IACbiH,MAAAA,KAAK,EAAE,EADM;IAEbI,MAAAA,MAAM,EAAE,EAFK;IAGbkP,MAAAA,OAAO,EAAE,EAHI;IAIbD,MAAAA,WAAW,EAAE,EAAA;IAJA,KAAjB,CAAA;IAOA,IAAA,IAAA,CAAK5P,MAAL,CAAYK,UAAZ,CAAuBuQ,WAAvB,CAAmC,KAAKT,aAAxC,CAAA,CAAA;IACA,IAAKzY,IAAAA,CAAAA,IAAL,GAAY,KAAZ,CAAA;IACA,IAAA,IAAA,CAAK8R,GAAL,EAAA,CAAA;IACA,IAAKxJ,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAuB,CAAA,iBAAA,CAAvB,EAA2C,SAA3C,CAAA,CAAA;IACH,GAAA;;IAGDoX,EAAAA,cAAc,GAAG;IACb,IAAA,IAAA,CAAKP,SAAL,GAAiBlP,eAAe,CAAC,IAAA,CAAK+O,aAAN,CAAhC,CAAA;IACA,IAAA,MAAM3S,KAAK,GAAGsT,WAAW,CAAC,IAAKR,CAAAA,SAAN,EAAiB,IAAA,CAAKtQ,MAAL,CAAYpB,IAAZ,CAAiBpH,kBAAlC,CAAzB,CAAA;IACA,IAAA,IAAA,CAAK+Y,eAAL,GAAuB/S,KAAK,CAAC5F,MAA7B,CAAA;IACA,IAAA,IAAA,CAAK4Y,gBAAL,GAAwBhT,KAAK,CAAC3C,OAA9B,CAAA;IACH,GAAA;;IAEDkW,EAAAA,cAAc,GAAG;IACb,IAAKV,IAAAA,CAAAA,SAAL,GAAiB,IAAKF,CAAAA,aAAL,CAAmBvO,UAAnB,CAA8B,IAA9B,CAAjB,CAAA;IACH,GAvEuD;;;IA2ExD+O,EAAAA,iBAAiB,GAAG;IAChB,IAAI,IAAA,IAAA,CAAK3Q,MAAL,CAAYpB,IAAZ,CAAiB1H,MAAjB,IAA2B,CAAC,IAAA,CAAK8Z,iBAAL,EAAhC,EAA0D;IACtD,MAAA,IAAA,CAAKN,UAAL,GAAkBpT,kBAAkB,CAACC,SAArC,CAAA;;IACA,MAAA,IAAA,CAAKwT,cAAL,EAAA,CAAA;IACH,KAHD,MAGO,IAAI,IAAKC,CAAAA,iBAAL,EAAJ,EAA8B;IACjC,MAAA,IAAA,CAAKN,UAAL,GAAkBpT,kBAAkB,CAACG,SAArC,CAAA;;IACA,MAAA,IAAA,CAAKwT,cAAL,EAAA,CAAA;IACH,KAHM,MAGA;IACH,MAAA,IAAA,CAAKP,UAAL,GAAkBpT,kBAAkB,CAACE,KAArC,CAAA;;IACA,MAAA,IAAA,CAAKqT,cAAL,EAAA,CAAA;IACH,KAAA;IACJ,GAAA;;IAEDG,EAAAA,iBAAiB,GAAG;IAChB,IAAOjQ,OAAAA,gBAAgB,CAAC,IAAA,CAAKoP,aAAN,CAAhB,IAAwC,IAAA,CAAKnQ,MAAL,CAAYpB,IAAZ,CAAiBvH,YAAhE,CAAA;IACH,GA1FuD;;;IA6FxD4Z,EAAAA,cAAc,GAAG;IACb,IAAKR,IAAAA,CAAAA,cAAL,GAAsB,IAAKN,CAAAA,aAAL,CAAmBvO,UAAnB,CAA8B,gBAA9B,CAAtB,CAAA;IACH,GAAA;;IAEDsP,EAAAA,kBAAkB,GAAG;IACjB,IAAA,IAAA,CAAKf,aAAL,CAAmB5P,KAAnB,GAA2B,IAAKjH,CAAAA,SAAL,CAAeiH,KAA1C,CAAA;IACA,IAAA,IAAA,CAAK4P,aAAL,CAAmBxP,MAAnB,GAA4B,IAAKrH,CAAAA,SAAL,CAAeqH,MAA3C,CAAA;IACA,IAAA,IAAA,CAAKpG,MAAL,EAAA,CAAA;IACH,GArGuD;;;IAwGxD3C,EAAAA,MAAM,CAACuZ,GAAD,EAAM;IACR,IAAA,IAAA,CAAKnR,MAAL,CAAY2I,cAAZ,GAA6BwI,GAAG,CAACC,EAAjC,CAAA;;IACA,IAAA,QAAQ,KAAKV,UAAb;IACI,MAAKpT,KAAAA,kBAAkB,CAACG,SAAxB;IACI,QAAA,IAAA,CAAKgT,cAAL,CAAoBY,uBAApB,CAA4CF,GAAG,CAAChX,MAAhD,CAAA,CAAA;IACA,QAAA,MAAA;;IACJ,MAAKmD,KAAAA,kBAAkB,CAACE,KAAxB;IACI,QAAA,IAAA,CAAK+S,eAAL,CAAqB,IAAKJ,CAAAA,aAAL,CAAmB5P,KAAxC,EAA+C,IAAA,CAAK4P,aAAL,CAAmBxP,MAAlE,EAA0EwQ,GAAG,CAACG,MAAJ,CAAW,CAAX,CAA1E,EAAyFH,GAAG,CAACG,MAAJ,CAAW,CAAX,CAAzF,EAAwGH,GAAG,CAACG,MAAJ,CAAW,CAAX,CAAxG,CAAA,CAAA;IACA,QAAA,MAAA;;IACJ,MAAKhU,KAAAA,kBAAkB,CAACC,SAAxB;IACI,QAAK8S,IAAAA,CAAAA,SAAL,CAAekB,SAAf,CAAyBJ,GAAG,CAAC/W,UAA7B,EAAyC,CAAzC,EAA4C,CAA5C,EAA+C,IAAA,CAAK+V,aAAL,CAAmB5P,KAAlE,EAAyE,IAAK4P,CAAAA,aAAL,CAAmBxP,MAA5F,CAAA,CAAA;IACA,QAAA,MAAA;IATR,KAAA;IAWH,GAAA;;IAEDxK,EAAAA,UAAU,CAACqb,QAAD,EAAWC,MAAX,EAAmBC,OAAnB,EAA4BrP,IAA5B,EAAkC;IACxCmP,IAAAA,QAAQ,GAAGA,QAAQ,IAAI/N,GAAG,EAA1B,CAAA;IACApB,IAAAA,IAAI,GAAGA,IAAI,IAAIpG,eAAe,CAACC,QAA/B,CAAA;IACA,IAAA,MAAMyV,UAAU,GAAG;IACfC,MAAAA,GAAG,EAAE,WADU;IAEfC,MAAAA,IAAI,EAAE,YAFS;IAGfC,MAAAA,IAAI,EAAE,YAAA;IAHS,KAAnB,CAAA;IAKA,IAAIC,IAAAA,cAAc,GAAG,IAArB,CAAA;;IACA,IAAI,IAAA,CAACJ,UAAU,CAACF,MAAD,CAAX,IAAuBxV,eAAe,CAACwV,MAAD,CAA1C,EAAoD;IAChDpP,MAAAA,IAAI,GAAGoP,MAAP,CAAA;IACAA,MAAAA,MAAM,GAAG,KAAT,CAAA;IACAC,MAAAA,OAAO,GAAG/J,SAAV,CAAA;IACH,KAAA;;IAED,IAAA,IAAI,OAAO+J,OAAP,KAAmB,QAAvB,EAAiC;IAC7BrP,MAAAA,IAAI,GAAGqP,OAAP,CAAA;IACAA,MAAAA,OAAO,GAAG/J,SAAV,CAAA;IACH,KAAA;;IAED,IAAA,IAAI,OAAO+J,OAAP,KAAmB,WAAvB,EAAoC;IAChCK,MAAAA,cAAc,GAAGC,MAAM,CAACN,OAAD,CAAvB,CAAA;IACH,KAAA;;IACD,IAAA,MAAM1P,OAAO,GAAG,IAAA,CAAKmO,aAAL,CAAmB8B,SAAnB,CAA6BN,UAAU,CAACF,MAAD,CAAV,IAAsBE,UAAU,CAACC,GAA9D,EAAmEG,cAAnE,CAAhB,CAAA;IAEA,IAAA,MAAMG,IAAI,GAAGnQ,aAAa,CAACC,OAAD,CAA1B,CAAA;;IACA,IAAA,IAAIK,IAAI,KAAKpG,eAAe,CAACE,MAA7B,EAAqC;IACjC,MAAA,OAAO6F,OAAP,CAAA;IACH,KAFD,MAEO,IAAIK,IAAI,KAAKpG,eAAe,CAACG,IAA7B,EAAmC;IACtC,MAAA,OAAO8V,IAAP,CAAA;IACH,KAFM,MAEA,IAAI7P,IAAI,KAAKpG,eAAe,CAACC,QAA7B,EAAuC;IAC1C0G,MAAAA,WAAW,CAACsP,IAAD,EAAOV,QAAP,CAAX,CAAA;IACH,KAAA;IACJ,GAxJuD;;;IA2JxD1B,EAAAA,SAAS,GAAG;IACR,IAAA,QAAQ,KAAKY,UAAb;IACI,MAAKpT,KAAAA,kBAAkB,CAACG,SAAxB;IACI2J,QAAAA,sBAAsB,CAAC,IAAA,CAAK+I,aAAL,CAAmB5P,KAApB,EAA2B,IAAA,CAAK4P,aAAL,CAAmBxP,MAA9C,CAAtB,CAA4EgJ,IAA5E,CAAkFwI,WAAD,IAAiB;IAC9F,UAAA,IAAA,CAAK1B,cAAL,CAAoBY,uBAApB,CAA4Cc,WAA5C,CAAA,CAAA;IACH,SAFD,CAAA,CAAA;IAGA,QAAA,MAAA;;IACJ,MAAK7U,KAAAA,kBAAkB,CAACE,KAAxB;IACI,QAAA,IAAA,CAAK8S,SAAL,CAAe8B,KAAf,CAAqB,IAAK9B,CAAAA,SAAL,CAAe+B,gBAApC,CAAA,CAAA;IACA,QAAA,MAAA;;IACJ,MAAK/U,KAAAA,kBAAkB,CAACC,SAAxB;IACI,QAAA,IAAA,CAAK8S,SAAL,CAAeiC,SAAf,CAAyB,CAAzB,EAA4B,CAA5B,EAA+B,IAAKnC,CAAAA,aAAL,CAAmB5P,KAAlD,EAAyD,IAAK4P,CAAAA,aAAL,CAAmBxP,MAA5E,CAAA,CAAA;IACA,QAAA,MAAA;IAXR,KAAA;IAaH,GAAA;;IAEDpG,EAAAA,MAAM,GAAG;IACL,IAAKyF,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,aAAtB,EAAqC,QAArC,CAAA,CAAA;IACA,IAAA,MAAM6F,MAAM,GAAG,IAAKU,CAAAA,MAAL,CAAYpB,IAA3B,CAAA;IACA,IAAA,IAAI2B,KAAK,GAAG,IAAKP,CAAAA,MAAL,CAAYO,KAAxB,CAAA;IACA,IAAA,IAAII,MAAM,GAAG,IAAKX,CAAAA,MAAL,CAAYW,MAAzB,CAAA;;IACA,IAAIrB,IAAAA,MAAM,CAAC9I,UAAP,IAAqB,CAAC8I,MAAM,CAAC/I,eAAjC,EAAkD;IAC9C,MAAA,IAAIoP,QAAQ,EAAM,IAAA,IAAA,CAAK3F,MAAL,CAAY9J,UAA9B,EAA0C;IACtCqK,QAAAA,KAAK,IAAIzD,cAAT,CAAA;IACH,OAFD,MAEO;IACH6D,QAAAA,MAAM,IAAI7D,cAAV,CAAA;IACH,OAAA;IACJ,KAAA;;IACD,IAAA,IAAIyV,WAAW,GAAG,IAAKpC,CAAAA,aAAL,CAAmB5P,KAArC,CAAA;IACA,IAAA,IAAIiS,YAAY,GAAG,IAAKrC,CAAAA,aAAL,CAAmBxP,MAAtC,CAAA;IACA,IAAA,MAAM9J,MAAM,GAAGyI,MAAM,CAACzI,MAAtB,CAAA;IACA,IAAA,IAAIqZ,IAAI,GAAI,CAAC3P,KAAK,GAAGgS,WAAT,IAAwB,CAApC,CAAA;IACA,IAAA,IAAItC,GAAG,GAAI,CAACtP,MAAM,GAAG6R,YAAV,IAA0B,CAArC,CAAA;;IACA,IAAA,IAAI3b,MAAM,KAAK,GAAX,IAAkBA,MAAM,KAAK,EAAjC,EAAqC;IACjC0b,MAAAA,WAAW,GAAG,IAAKpC,CAAAA,aAAL,CAAmBxP,MAAjC,CAAA;IACA6R,MAAAA,YAAY,GAAG,IAAKrC,CAAAA,aAAL,CAAmB5P,KAAlC,CAAA;IACH,KAAA;;IAED,IAAA,MAAMkS,MAAM,GAAGlS,KAAK,GAAGgS,WAAvB,CAAA;IACA,IAAA,MAAMG,MAAM,GAAG/R,MAAM,GAAG6R,YAAxB,CAAA;IAEA,IAAIG,IAAAA,KAAK,GAAGF,MAAM,GAAGC,MAAT,GAAkBA,MAAlB,GAA2BD,MAAvC,CAzBK;;IA2BL,IAAA,IAAI,CAACnT,MAAM,CAACvK,QAAZ,EAAsB;IAClB,MAAI0d,IAAAA,MAAM,KAAKC,MAAf,EAAuB;IACnBC,QAAAA,KAAK,GAAGF,MAAM,GAAG,GAAT,GAAeC,MAAvB,CAAA;IACH,OAAA;IACJ,KA/BI;;;IAiCL,IAAIpT,IAAAA,MAAM,CAACtK,YAAX,EAAyB;IACrB2d,MAAAA,KAAK,GAAGF,MAAM,GAAGC,MAAT,GAAkBD,MAAlB,GAA2BC,MAAnC,CAAA;IACH,KAAA;;IACD,IAAA,IAAIE,SAAS,GAAG,QAAWD,GAAAA,KAAX,GAAmB,GAAnC,CAAA;;IAEA,IAAA,IAAI9b,MAAJ,EAAY;IACR+b,MAAAA,SAAS,IAAI,UAAa/b,GAAAA,MAAb,GAAsB,MAAnC,CAAA;IACH,KAAA;;IAED,IAAA,IAAA,CAAKsZ,aAAL,CAAmBxL,KAAnB,CAAyBiO,SAAzB,GAAqCA,SAArC,CAAA;IACA,IAAKzC,IAAAA,CAAAA,aAAL,CAAmBxL,KAAnB,CAAyBuL,IAAzB,GAAgCA,IAAI,GAAG,IAAvC,CAAA;IACA,IAAKC,IAAAA,CAAAA,aAAL,CAAmBxL,KAAnB,CAAyBsL,GAAzB,GAA+BA,GAAG,GAAG,IAArC,CAAA;IACH,GAAA;;IAxNuD;;ICT7C,MAAM4C,WAAN,SAA0BnD,cAA1B,CAAuC;IAClDjR,EAAAA,WAAW,CAACuB,MAAD,EAAS;IAChB,IAAA,KAAA,EAAA,CAAA;IACA,IAAKA,IAAAA,CAAAA,MAAL,GAAcA,MAAd,CAAA;IACA,IAAA,MAAMmQ,aAAa,GAAGnN,QAAQ,CAACC,aAAT,CAAuB,OAAvB,CAAtB,CAAA;IACAkN,IAAAA,aAAa,CAAC2C,KAAd,GAAsB,IAAtB,CAAA;IACA3C,IAAAA,aAAa,CAACxL,KAAd,CAAoBqL,QAApB,GAA+B,UAA/B,CAAA;IACAG,IAAAA,aAAa,CAACxL,KAAd,CAAoBsL,GAApB,GAA0B,CAA1B,CAAA;IACAE,IAAAA,aAAa,CAACxL,KAAd,CAAoBuL,IAApB,GAA2B,CAA3B,CAAA;IACAlQ,IAAAA,MAAM,CAACK,UAAP,CAAkB+P,WAAlB,CAA8BD,aAA9B,CAAA,CAAA;IACA,IAAKA,IAAAA,CAAAA,aAAL,GAAqBA,aAArB,CAAA;IACA,IAAA,IAAA,CAAK7W,SAAL,GAAiB;IACbiH,MAAAA,KAAK,EAAE,EADM;IAEbI,MAAAA,MAAM,EAAE,EAFK;IAGbkP,MAAAA,OAAO,EAAE,EAAA;IAHI,KAAjB,CAAA;IAKA,IAAA,MAAMjR,IAAI,GAAG,IAAKoB,CAAAA,MAAL,CAAYpB,IAAzB,CAAA;;IACA,IAAA,IAAIA,IAAI,CAAC1H,MAAL,IAAe0H,IAAI,CAACzH,iBAAxB,EAA2C;IACvC,MAAA,IAAA,CAAK4b,cAAL,GAAsB,IAAIC,yBAAJ,CAA8B;IAACC,QAAAA,IAAI,EAAE,OAAA;IAAP,OAA9B,CAAtB,CAAA;IACA9C,MAAAA,aAAa,CAAC+C,SAAd,GAA0B,IAAIC,WAAJ,CAAgB,CAAC,IAAA,CAAKJ,cAAN,CAAhB,CAA1B,CAAA;IACA,MAAKK,IAAAA,CAAAA,OAAL,GAAe,IAAKL,CAAAA,cAAL,CAAoBM,QAApB,CAA6BC,SAA7B,EAAf,CAAA;IACH,KAAA;;IAED,IAAA,IAAA,CAAK/Y,MAAL,EAAA,CAAA;IAEA,IAAM,MAAA;IAAC2E,MAAAA,KAAAA;IAAD,KAAU,GAAA,IAAA,CAAKc,MAAL,CAAYuJ,MAA5B,CAAA;IAEArK,IAAAA,KAAK,CAAC,IAAA,CAAKiR,aAAN,EAAqB,SAArB,EAAgC,MAAM;IACvC,MAAKnQ,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,OAAtB,EAA+B,SAA/B,CAAA,CAAA;IACH,KAFI,CAAL,CAAA;IAIAyF,IAAAA,KAAK,CAAC,IAAA,CAAKiR,aAAN,EAAqB,SAArB,EAAgC,MAAM;IACvC,MAAA,IAAA,CAAKnQ,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAACoC,YAAxB,CAAA,CAAA;IACH,KAFI,CAAL,CAAA;IAIAgE,IAAAA,KAAK,CAAC,IAAKiR,CAAAA,aAAN,EAAqB,YAArB,EAAoCpQ,KAAD,IAAW;IAElD,KAFI,CAAL,CAAA;IAIA,IAAKC,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,OAAtB,EAA+B,MAA/B,CAAA,CAAA;IACH,GAAA;;IAEDoB,EAAAA,OAAO,GAAG;IACN,IAAA,IAAA,CAAKmF,MAAL,CAAYK,UAAZ,CAAuBuQ,WAAvB,CAAmC,KAAKT,aAAxC,CAAA,CAAA;;IACA,IAAI,IAAA,IAAA,CAAKA,aAAT,EAAwB;IACpB,MAAA,IAAA,CAAKA,aAAL,CAAmBoD,GAAnB,GAAyB,EAAzB,CAAA;IACA,MAAKpD,IAAAA,CAAAA,aAAL,GAAqB,IAArB,CAAA;IACH,KAAA;;IACD,IAAI,IAAA,IAAA,CAAK4C,cAAT,EAAyB;IACrB,MAAKA,IAAAA,CAAAA,cAAL,GAAsB,IAAtB,CAAA;IACH,KAAA;;IACD,IAAI,IAAA,IAAA,CAAKK,OAAT,EAAkB;IACd,MAAKL,IAAAA,CAAAA,cAAL,GAAsB,IAAtB,CAAA;IACH,KAAA;;IAGD,IAAKrb,IAAAA,CAAAA,IAAL,GAAY,KAAZ,CAAA;IACA,IAAA,IAAA,CAAK8R,GAAL,EAAA,CAAA;IACA,IAAKxJ,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,OAAtB,EAA+B,SAA/B,CAAA,CAAA;IACH,GAAA;;IAEDrD,EAAAA,IAAI,GAAG;IACH;IACA,IAAK+Z,IAAAA,CAAAA,aAAL,CAAmB/Z,IAAnB,EAAA,CAAA;IACH,GAAA;;IAED0Z,EAAAA,SAAS,GAAG,EAEX;;IAED3Z,EAAAA,UAAU,CAACqb,QAAD,EAAWC,MAAX,EAAmBC,OAAnB,EAA4BrP,IAA5B,EAAkC;IACxCmP,IAAAA,QAAQ,GAAGA,QAAQ,IAAI/N,GAAG,EAA1B,CAAA;IACApB,IAAAA,IAAI,GAAGA,IAAI,IAAIpG,eAAe,CAACC,QAA/B,CAAA;IACA,IAAA,MAAMyV,UAAU,GAAG;IACfC,MAAAA,GAAG,EAAE,WADU;IAEfC,MAAAA,IAAI,EAAE,YAFS;IAGfC,MAAAA,IAAI,EAAE,YAAA;IAHS,KAAnB,CAAA;IAKA,IAAIC,IAAAA,cAAc,GAAG,IAArB,CAAA;;IACA,IAAI,IAAA,CAACJ,UAAU,CAACF,MAAD,CAAX,IAAuBxV,eAAe,CAACwV,MAAD,CAA1C,EAAoD;IAChDpP,MAAAA,IAAI,GAAGoP,MAAP,CAAA;IACAA,MAAAA,MAAM,GAAG,KAAT,CAAA;IACAC,MAAAA,OAAO,GAAG/J,SAAV,CAAA;IACH,KAAA;;IACD,IAAA,IAAI,OAAO+J,OAAP,KAAmB,QAAvB,EAAiC;IAC7BrP,MAAAA,IAAI,GAAGqP,OAAP,CAAA;IACAA,MAAAA,OAAO,GAAG/J,SAAV,CAAA;IACH,KAAA;;IAED,IAAA,IAAI,OAAO+J,OAAP,KAAmB,WAAvB,EAAoC;IAChCK,MAAAA,cAAc,GAAGC,MAAM,CAACN,OAAD,CAAvB,CAAA;IACH,KAAA;;IACD,IAAM8B,MAAAA,MAAM,GAAG,IAAA,CAAKrD,aAApB,CAAA;IACA,IAAA,IAAIsD,MAAM,GAAGzQ,QAAQ,CAACC,aAAT,CAAuB,QAAvB,CAAb,CAAA;IACAwQ,IAAAA,MAAM,CAAClT,KAAP,GAAeiT,MAAM,CAACE,UAAtB,CAAA;IACAD,IAAAA,MAAM,CAAC9S,MAAP,GAAgB6S,MAAM,CAACG,WAAvB,CAAA;IACA,IAAA,MAAMC,OAAO,GAAGH,MAAM,CAAC7R,UAAP,CAAkB,IAAlB,CAAhB,CAAA;IACAgS,IAAAA,OAAO,CAACrC,SAAR,CAAkBiC,MAAlB,EAA0B,CAA1B,EAA6B,CAA7B,EAAgCC,MAAM,CAAClT,KAAvC,EAA8CkT,MAAM,CAAC9S,MAArD,CAAA,CAAA;IACA,IAAA,MAAMqB,OAAO,GAAGyR,MAAM,CAACxB,SAAP,CAAiBhW,eAAe,CAACwV,MAAD,CAAf,IAA2BxV,eAAe,CAAC2V,GAA5D,EAAiEG,cAAjE,CAAhB,CAAA;IACA,IAAA,MAAMG,IAAI,GAAGnQ,aAAa,CAACC,OAAD,CAA1B,CAAA;;IACA,IAAA,IAAIK,IAAI,KAAKpG,eAAe,CAACE,MAA7B,EAAqC;IACjC,MAAA,OAAO6F,OAAP,CAAA;IACH,KAFD,MAEO,IAAIK,IAAI,KAAKpG,eAAe,CAACG,IAA7B,EAAmC;IACtC,MAAA,OAAO8V,IAAP,CAAA;IACH,KAFM,MAEA,IAAI7P,IAAI,KAAKpG,eAAe,CAACC,QAA7B,EAAuC;IAC1C0G,MAAAA,WAAW,CAACsP,IAAD,EAAOV,QAAP,CAAX,CAAA;IACH,KAAA;IACJ,GAAA;;IAEDN,EAAAA,kBAAkB,GAAG;IACjB,IAAA,IAAA,CAAK3W,MAAL,EAAA,CAAA;IACH,GA/GiD;;;IAkHlD3C,EAAAA,MAAM,CAACuZ,GAAD,EAAM;IACR,IAAI,IAAA,IAAA,CAAKiC,OAAT,EAAkB;IACd,MAAA,IAAA,CAAKA,OAAL,CAAaS,KAAb,CAAmB1C,GAAG,CAAC/W,UAAvB,CAAA,CAAA;IACH,KAAA;IACJ,GAAA;;IAEDG,EAAAA,MAAM,GAAG;IACL,IAAA,IAAIgG,KAAK,GAAG,IAAKP,CAAAA,MAAL,CAAYO,KAAxB,CAAA;IACA,IAAA,IAAII,MAAM,GAAG,IAAKX,CAAAA,MAAL,CAAYW,MAAzB,CAAA;IACA,IAAA,MAAMrB,MAAM,GAAG,IAAKU,CAAAA,MAAL,CAAYpB,IAA3B,CAAA;IACA,IAAA,MAAM/H,MAAM,GAAGyI,MAAM,CAACzI,MAAtB,CAAA;;IACA,IAAIyI,IAAAA,MAAM,CAAC9I,UAAP,IAAqB,CAAC8I,MAAM,CAAC/I,eAAjC,EAAkD;IAC9C,MAAA,IAAIoP,QAAQ,EAAM,IAAA,IAAA,CAAK3F,MAAL,CAAY9J,UAA9B,EAA0C;IACtCqK,QAAAA,KAAK,IAAIzD,cAAT,CAAA;IACH,OAFD,MAEO;IACH6D,QAAAA,MAAM,IAAI7D,cAAV,CAAA;IACH,OAAA;IACJ,KAAA;;IAED,IAAA,IAAA,CAAKqT,aAAL,CAAmB5P,KAAnB,GAA2BA,KAA3B,CAAA;IACA,IAAA,IAAA,CAAK4P,aAAL,CAAmBxP,MAAnB,GAA4BA,MAA5B,CAAA;;IAEA,IAAA,IAAI9J,MAAM,KAAK,GAAX,IAAkBA,MAAM,KAAK,EAAjC,EAAqC;IACjC,MAAA,IAAA,CAAKsZ,aAAL,CAAmB5P,KAAnB,GAA2BI,MAA3B,CAAA;IACA,MAAA,IAAA,CAAKwP,aAAL,CAAmBxP,MAAnB,GAA4BJ,KAA5B,CAAA;IACH,KAAA;;IACD,IAAA,IAAIgS,WAAW,GAAG,IAAKpC,CAAAA,aAAL,CAAmB5P,KAArC,CAAA;IACA,IAAA,IAAIiS,YAAY,GAAG,IAAKrC,CAAAA,aAAL,CAAmBxP,MAAtC,CAAA;IACA,IAAA,IAAIuP,IAAI,GAAI,CAAC3P,KAAK,GAAGgS,WAAT,IAAwB,CAApC,CAAA;IACA,IAAA,IAAItC,GAAG,GAAI,CAACtP,MAAM,GAAG6R,YAAV,IAA0B,CAArC,CAAA;IACA,IAAA,IAAIsB,UAAU,GAAG,SAAjB,CAxBK;IA2BL;IAEA;;IACA,IAAA,IAAI,CAACxU,MAAM,CAACvK,QAAZ,EAAsB;IAClB+e,MAAAA,UAAU,GAAG,MAAb,CAAA;IACH,KAhCI;;;IAmCL,IAAIxU,IAAAA,MAAM,CAACtK,YAAX,EAAyB;IACrB8e,MAAAA,UAAU,GAAG,MAAb,CAAA;IACH,KAAA;;IACD,IAAA,IAAA,CAAK3D,aAAL,CAAmBxL,KAAnB,CAAyBoP,SAAzB,GAAqCD,UAArC,CAAA;IACA,IAAK3D,IAAAA,CAAAA,aAAL,CAAmBxL,KAAnB,CAAyBiO,SAAzB,GAAqC,SAAA,GAAY/b,MAAZ,GAAqB,MAA1D,CAAA;IACA,IAAKsZ,IAAAA,CAAAA,aAAL,CAAmBxL,KAAnB,CAAyBuL,IAAzB,GAAgCA,IAAI,GAAG,IAAvC,CAAA;IACA,IAAKC,IAAAA,CAAAA,aAAL,CAAmBxL,KAAnB,CAAyBsL,GAAzB,GAA+BA,GAAG,GAAG,IAArC,CAAA;IACH,GAAA;;IAlKiD;;ICFvC,MAAM+D,KAAN,CAAY;IACvBvV,EAAAA,WAAW,CAACuB,MAAD,EAAS;IAChB,IAAMiU,MAAAA,MAAM,GAAGD,KAAK,CAACE,gBAAN,CAAuBlU,MAAM,CAACpB,IAA9B,CAAf,CAAA;IACA,IAAA,OAAO,IAAIqV,MAAJ,CAAWjU,MAAX,CAAP,CAAA;IACH,GAAA;;IAEsB,EAAhBkU,OAAAA,gBAAgB,CAACC,GAAD,EAAM;IACzB,IAAA,IAAIA,GAAG,CAAC/c,MAAJ,IAAe+c,GAAG,CAACjd,MAAJ,IAAc,CAACid,GAAG,CAAC9c,YAAnB,IAAmC8c,GAAG,CAAChd,iBAA1D,EAA8E;IAC1E,MAAA,OAAO0b,WAAP,CAAA;IACH,KAFD,MAEO;IACH,MAAA,OAAO9C,iBAAP,CAAA;IACH,KAAA;IACJ,GAAA;;IAZsB;;ICCZ,MAAMqE,kBAAN,SAAiCjK,OAAjC,CAAyC;IACpD1L,EAAAA,WAAW,CAACuB,MAAD,EAAS;IAChB,IAAA,KAAA,EAAA,CAAA;IACA,IAAKqU,IAAAA,CAAAA,UAAL,GAAkB,EAAlB,CAAA;IACA,IAAKrU,IAAAA,CAAAA,MAAL,GAAcA,MAAd,CAAA;IACA,IAAKsU,IAAAA,CAAAA,UAAL,GAAkB,IAAlB,CAAA;IACA,IAAKC,IAAAA,CAAAA,iBAAL,GAAyB,KAAzB,CAAA;IACA,IAAKC,IAAAA,CAAAA,mBAAL,GAA2B,IAA3B,CAAA;IAEA,IAAA,IAAA,CAAKC,YAAL,GAAoB,KAAK/O,MAAM,CAACgP,YAAP,IAAuBhP,MAAM,CAACiP,kBAAnC,GAApB,CARgB;;IAUhB,IAAKC,IAAAA,CAAAA,QAAL,GAAgB,IAAKH,CAAAA,YAAL,CAAkBI,UAAlB,EAAhB,CAVgB;IAYhB;;IACA,IAAMC,MAAAA,MAAM,GAAG,IAAKL,CAAAA,YAAL,CAAkBM,kBAAlB,EAAf,CAbgB;;IAehBD,IAAAA,MAAM,CAAC3a,MAAP,GAAgB,IAAA,CAAKsa,YAAL,CAAkB/H,YAAlB,CAA+B,CAA/B,EAAkC,CAAlC,EAAqC,KAArC,CAAhB,CAfgB;IAiBhB;;IACAoI,IAAAA,MAAM,CAACE,OAAP,CAAe,KAAKP,YAAL,CAAkBQ,WAAjC,CAAA,CAlBgB;IAoBhB;;IACA,IAAIH,IAAAA,MAAM,CAACI,MAAX,EAAmB;IACfJ,MAAAA,MAAM,CAACI,MAAP,CAAc,CAAd,CAAA,CAAA;IACH,KAFD,MAEO;IACHJ,MAAAA,MAAM,CAACza,KAAP,CAAa,CAAb,CAAA,CAAA;IACH,KAAA;;IACD,IAAA,IAAA,CAAK8a,qBAAL,GAA6BL,MAA7B,CA1BgB;;IA4BhB,IAAKM,IAAAA,CAAAA,+BAAL,GAAuC,IAAKX,CAAAA,YAAL,CAAkBY,4BAAlB,EAAvC,CA5BgB;;IA8BhB,IAAA,IAAA,CAAKC,YAAL,CAAkB,IAAlB,CAAA,CA9BgB;;IAgChB,IAAA,IAAA,CAAKV,QAAL,CAAcW,IAAd,CAAmB9Q,KAAnB,GAA2B,CAA3B,CAAA;IAEA,IAAA,IAAA,CAAKxL,OAAL,GAAe,KAAf,CAlCgB;;IAoChB,IAAA,IAAA,CAAKuc,oBAAL,GAA4B;IACxBC,MAAAA,IAAI,EAAE,IAAA;IADkB,KAA5B,CAAA;IAKA,IAAA,IAAA,CAAKjc,SAAL,GAAiB;IACbqW,MAAAA,OAAO,EAAE,EADI;IAEb6F,MAAAA,QAAQ,EAAE,EAFG;IAGbC,MAAAA,UAAU,EAAE,EAAA;IAHC,KAAjB,CAAA;IAKA,IAAKje,IAAAA,CAAAA,IAAL,GAAY,KAAZ,CAAA;IACA,IAAA,IAAA,CAAK3B,QAAL,GAAgB,KAAhB,CA/CgB;;IAkDhB,IAAA,IAAA,CAAKuT,EAAL,CAAQxQ,MAAM,CAACsC,cAAf,EAAgCwa,OAAD,IAAa;IACxC;IACA,MAAKJ,IAAAA,CAAAA,oBAAL,GAA4BI,OAA5B,CAAA;IACH,KAHD,CAAA,CAAA;IAKA,IAAK5V,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,cAAtB,EAAsC,MAAtC,CAAA,CAAA;IACH,GAAA;;IAGDoB,EAAAA,OAAO,GAAG;IACN,IAAA,IAAA,CAAKgb,UAAL,EAAA,CAAA;IACA,IAAKpB,IAAAA,CAAAA,YAAL,CAAkB7b,KAAlB,EAAA,CAAA;IACA,IAAK6b,IAAAA,CAAAA,YAAL,GAAoB,IAApB,CAAA;IACA,IAAKG,IAAAA,CAAAA,QAAL,GAAgB,IAAhB,CAAA;IACA,IAAKld,IAAAA,CAAAA,IAAL,GAAY,KAAZ,CAAA;IACA,IAAK3B,IAAAA,CAAAA,QAAL,GAAgB,KAAhB,CAAA;IACA,IAAKkD,IAAAA,CAAAA,OAAL,GAAe,KAAf,CAAA;;IAEA,IAAI,IAAA,IAAA,CAAKqb,UAAT,EAAqB;IACjB,MAAA,IAAA,CAAKA,UAAL,CAAgBwB,cAAhB,GAAiChV,IAAjC,CAAA;IACA,MAAKwT,IAAAA,CAAAA,UAAL,GAAkB,IAAlB,CAAA;IACH,KAAA;;IACD,IAAKa,IAAAA,CAAAA,qBAAL,GAA6B,IAA7B,CAAA;IACA,IAAKC,IAAAA,CAAAA,+BAAL,GAAuC,IAAvC,CAAA;IACA,IAAKb,IAAAA,CAAAA,iBAAL,GAAyB,KAAzB,CAAA;IACA,IAAA,IAAA,CAAKiB,oBAAL,GAA4B;IACxBC,MAAAA,IAAI,EAAE,IAAA;IADkB,KAA5B,CAAA;IAGA,IAAA,IAAA,CAAKjc,SAAL,GAAiB;IACbqW,MAAAA,OAAO,EAAE,EADI;IAEb6F,MAAAA,QAAQ,EAAE,EAFG;IAGbC,MAAAA,UAAU,EAAE,EAAA;IAHC,KAAjB,CAAA;IAKA,IAAA,IAAA,CAAKnM,GAAL,EAAA,CAAA;IACA,IAAKxJ,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,cAAtB,EAAsC,SAAtC,CAAA,CAAA;IACH,GAAA;;IAEDsc,EAAAA,eAAe,CAAClL,IAAD,EAAO;IAClB,IAAIA,IAAAA,IAAI,CAAC+E,WAAT,EAAsB;IAClB,MAAKpW,IAAAA,CAAAA,SAAL,CAAeqW,OAAf,GAAyBpT,cAAc,CAACoO,IAAI,CAAC+E,WAAN,CAAvC,CAAA;IACH,KAAA;;IAED,IAAI/E,IAAAA,IAAI,CAAC6K,QAAT,EAAmB;IACf,MAAA,IAAA,CAAKlc,SAAL,CAAekc,QAAf,GAA0B7K,IAAI,CAAC6K,QAA/B,CAAA;IACH,KAAA;;IAED,IAAI7K,IAAAA,IAAI,CAAC8K,UAAT,EAAqB;IACjB,MAAA,IAAA,CAAKnc,SAAL,CAAemc,UAAf,GAA4B9K,IAAI,CAAC8K,UAAjC,CAAA;IACH,KAXiB;;;IAclB,IAAA,IAAI,KAAKnc,SAAL,CAAemc,UAAf,IAA6B,IAAA,CAAKnc,SAAL,CAAekc,QAA5C,IAAwD,IAAA,CAAKlc,SAAL,CAAeqW,OAAvE,IAAkF,CAAC,IAAA,CAAKnY,IAA5F,EAAkG;IAC9F,MAAKsI,IAAAA,CAAAA,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAACU,SAAxB,EAAmC,IAAA,CAAKA,SAAxC,CAAA,CAAA;IACA,MAAK9B,IAAAA,CAAAA,IAAL,GAAY,IAAZ,CAAA;IACH,KAAA;IACJ,GA1GmD;;;IA6GvC,EAAA,IAATse,SAAS,GAAG;IACZ,IAAA,OAAO,KAAK/c,OAAZ,CAAA;IACH,GAAA;;IAES,EAAA,IAANgd,MAAM,GAAG;IACT,IAAO,OAAA,IAAA,CAAKrB,QAAL,CAAcW,IAAd,CAAmB9Q,KAAnB,KAA6B,CAA7B,IAAkC,IAAKyR,CAAAA,gBAAL,EAAzC,CAAA;IACH,GAAA;;IAES,EAAA,IAANC,MAAM,GAAG;IACT,IAAA,OAAO,IAAKvB,CAAAA,QAAL,CAAcW,IAAd,CAAmB9Q,KAA1B,CAAA;IACH,GAAA;;IAEa,EAAA,IAAV2R,UAAU,GAAG;IACb,IAAO,OAAA,IAAA,CAAK/B,UAAL,CAAgB7S,MAAvB,CAAA;IACH,GAAA;;IAGD6U,EAAAA,cAAc,GAAG;IACb,IAAKpd,IAAAA,CAAAA,OAAL,GAAe,IAAf,CAAA;;IAEA,IAAI,IAAA,IAAA,CAAKsb,iBAAT,EAA4B;IACxB,MAAA,OAAA;IACH,KAAA;;IACD,IAAA,MAAMmB,QAAQ,GAAG,IAAKlc,CAAAA,SAAL,CAAekc,QAAhC,CAAA;IAEA,IAAA,MAAMpB,UAAU,GAAG,IAAKG,CAAAA,YAAL,CAAkB6B,qBAAlB,CAAwC,IAAxC,EAA8C,CAA9C,EAAiDZ,QAAjD,CAAnB,CARa;;IAUbpB,IAAAA,UAAU,CAACwB,cAAX,GAA6BS,oBAAD,IAA0B;IAClD,MAAA,MAAMC,YAAY,GAAGD,oBAAoB,CAACC,YAA1C,CAAA;;IAEA,MAAA,IAAI,KAAKnC,UAAL,CAAgB7S,MAAhB,IAA0B,IAAA,CAAKvI,OAAnC,EAA4C;IACxC;IACA,QAAA,IAAI,CAAC,IAAA,CAAK+G,MAAL,CAAYpB,IAAZ,CAAiB1H,MAAlB,IAA4B,CAAC,KAAK8I,MAAL,CAAYpB,IAAZ,CAAiBxH,MAAlD,EAA0D;IACtD;IACA;IACA,UAAA,IAAI,KAAKoe,oBAAL,CAA0BC,IAA1B,GAAiCtX,qBAArC,EAA4D;IACxD,YAAA,IAAA,CAAK6B,MAAL,CAAY9K,KAAZ,CAAkB6J,IAAlB,CAAuB,cAAvB,EAAwC,CAAA,qCAAA,EAAuC,KAAKyW,oBAAL,CAA0BC,IAAK,CAAA,SAAA,CAA9G,EADwD;;IAGxD,YAAA,OAAA;IACH,WAJD;IAMA;IANA,eAOK,IAAI,KAAKD,oBAAL,CAA0BC,IAA1B,GAAiC,CAACtX,qBAAtC,EAA6D;IAC9D,YAAA,IAAA,CAAK6B,MAAL,CAAY9K,KAAZ,CAAkB6J,IAAlB,CAAuB,cAAvB,EAAwC,CAAA,qCAAA,EAAuC,KAAKyW,oBAAL,CAA0BC,IAAK,CAAA,UAAA,CAA9G,EAD8D;;IAI9D,YAAIgB,IAAAA,UAAU,GAAG,IAAKpC,CAAAA,UAAL,CAAgBqC,KAAhB,EAAjB,CAJ8D;;IAM9D,YAAA,OAAQD,UAAU,CAACrF,EAAX,GAAgB,IAAKpR,CAAAA,MAAL,CAAY2I,cAA5B,GAA6C,CAACxK,qBAA/C,IAAyE,IAAKkW,CAAAA,UAAL,CAAgB7S,MAAhB,GAAyB,CAAzG,EAA4G;IACxG;IACAiV,cAAAA,UAAU,GAAG,IAAA,CAAKpC,UAAL,CAAgBqC,KAAhB,EAAb,CAAA;IACH,aAAA;;IAED,YAAA,IAAI,KAAKrC,UAAL,CAAgB7S,MAAhB,KAA2B,CAA/B,EAAkC;IAC9B,cAAA,OAAA;IACH,aAAA;IACJ,WAAA;IACJ,SAAA;;IAED,QAAA,IAAI,KAAK6S,UAAL,CAAgB7S,MAAhB,KAA2B,CAA/B,EAAkC;IAC9B,UAAA,OAAA;IACH,SAAA;;IAED,QAAMiV,MAAAA,UAAU,GAAG,IAAKpC,CAAAA,UAAL,CAAgBqC,KAAhB,EAAnB,CAjCwC;;IAoCxC,QAAA,IAAID,UAAU,IAAIA,UAAU,CAACrF,EAA7B,EAAiC;IAC7B,UAAA,IAAA,CAAKpR,MAAL,CAAY2W,cAAZ,GAA6BF,UAAU,CAACrF,EAAxC,CAAA;IACH,SAAA;;IAED,QAAK,KAAA,IAAIwF,OAAO,GAAG,CAAnB,EAAsBA,OAAO,GAAGlB,QAAhC,EAA0CkB,OAAO,EAAjD,EAAqD;IACjD,UAAA,MAAMvS,CAAC,GAAGoS,UAAU,CAACtc,MAAX,CAAkByc,OAAlB,CAAV,CAAA;IACA,UAAA,MAAMC,YAAY,GAAGL,YAAY,CAACM,cAAb,CAA4BF,OAA5B,CAArB,CAAA;;IACA,UAAK,KAAA,IAAI9L,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,IAApB,EAA0BA,CAAC,EAA3B,EAA+B;IAC3B+L,YAAAA,YAAY,CAAC/L,CAAD,CAAZ,GAAkBzG,CAAC,CAACyG,CAAD,CAAD,IAAQ,CAA1B,CAAA;IACH,WAAA;IACJ,SAAA;IACJ,OAAA;IACJ,KAnDD,CAAA;;IAqDAwJ,IAAAA,UAAU,CAACU,OAAX,CAAmB,KAAKJ,QAAxB,CAAA,CAAA;IACA,IAAKN,IAAAA,CAAAA,UAAL,GAAkBA,UAAlB,CAAA;IACA,IAAA,IAAA,CAAKM,QAAL,CAAcI,OAAd,CAAsB,IAAKP,CAAAA,YAAL,CAAkBQ,WAAxC,CAAA,CAAA;IACA,IAAA,IAAA,CAAKL,QAAL,CAAcI,OAAd,CAAsB,KAAKI,+BAA3B,CAAA,CAAA;IACA,IAAKb,IAAAA,CAAAA,iBAAL,GAAyB,IAAzB,CAAA;IACH,GAAA;;IAEDpb,EAAAA,IAAI,CAAC4d,IAAD,EAAO;IACP,IAAA,IAAIA,IAAJ,EAAU;IACN,MAAI,IAAA,CAAC,IAAKd,CAAAA,MAAV,EAAkB;IACd,QAAKjW,IAAAA,CAAAA,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAACK,IAAxB,EAA8B4d,IAA9B,CAAA,CAAA;IACH,OAAA;;IACD,MAAKC,IAAAA,CAAAA,SAAL,CAAe,CAAf,CAAA,CAAA;IACA,MAAK1B,IAAAA,CAAAA,YAAL,CAAkB,KAAlB,CAAA,CAAA;IACA,MAAA,IAAA,CAAKlD,KAAL,EAAA,CAAA;IACH,KAPD,MAOO;IACH,MAAI,IAAA,IAAA,CAAK6D,MAAT,EAAiB;IACb,QAAKjW,IAAAA,CAAAA,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAACK,IAAxB,EAA8B4d,IAA9B,CAAA,CAAA;IACH,OAAA;;IACD,MAAKC,IAAAA,CAAAA,SAAL,CAAe,GAAf,CAAA,CAAA;IACA,MAAK1B,IAAAA,CAAAA,YAAL,CAAkB,IAAlB,CAAA,CAAA;IACH,KAAA;IACJ,GAAA;;IAED0B,EAAAA,SAAS,CAACb,MAAD,EAAS;IACdA,IAAAA,MAAM,GAAGnR,UAAU,CAACmR,MAAD,CAAV,CAAmBnP,OAAnB,CAA2B,CAA3B,CAAT,CAAA;;IACA,IAAA,IAAIiQ,KAAK,CAACd,MAAD,CAAT,EAAmB;IACf,MAAA,OAAA;IACH,KAAA;;IACD,IAAKb,IAAAA,CAAAA,YAAL,CAAkB,IAAlB,CAAA,CAAA;IACAa,IAAAA,MAAM,GAAGjS,KAAK,CAACiS,MAAD,EAAS,CAAT,EAAY,CAAZ,CAAd,CAAA;IACA,IAAA,IAAA,CAAKvB,QAAL,CAAcW,IAAd,CAAmB9Q,KAAnB,GAA2B0R,MAA3B,CAAA;IACA,IAAKvB,IAAAA,CAAAA,QAAL,CAAcW,IAAd,CAAmB2B,cAAnB,CAAkCf,MAAlC,EAA0C,IAAA,CAAK1B,YAAL,CAAkB0C,WAA5D,CAAA,CAAA;IACA,IAAKnX,IAAAA,CAAAA,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAAC8B,YAAxB,EAAsC,IAAA,CAAKoF,MAAL,CAAYmW,MAAlD,CAAA,CAAA;IACH,GAAA;;IAEDN,EAAAA,UAAU,GAAG;IACT,IAAI,IAAA,IAAA,CAAKtB,iBAAT,EAA4B;IACxB,MAAKD,IAAAA,CAAAA,UAAL,IAAmB,IAAKA,CAAAA,UAAL,CAAgB8C,UAAhB,CAA2B,IAAKxC,CAAAA,QAAhC,CAAnB,CAAA;IACA,MAAKA,IAAAA,CAAAA,QAAL,IAAiB,IAAA,CAAKA,QAAL,CAAcwC,UAAd,CAAyB,IAAK3C,CAAAA,YAAL,CAAkBQ,WAA3C,CAAjB,CAAA;IACA,MAAKL,IAAAA,CAAAA,QAAL,IAAiB,IAAKA,CAAAA,QAAL,CAAcwC,UAAd,CAAyB,IAAKhC,CAAAA,+BAA9B,CAAjB,CAAA;IACH,KAAA;;IACD,IAAA,IAAA,CAAKhD,KAAL,EAAA,CAAA;IACH,GAxOmD;;;IA2OpDkD,EAAAA,YAAY,CAACyB,IAAD,EAAO;IACf,IAAA,IAAIA,IAAJ,EAAU;IACN,MAAA,IAAI,KAAKtC,YAAL,CAAkB4C,KAAlB,KAA4B,WAAhC,EAA6C;IACzC;IACA,QAAK5C,IAAAA,CAAAA,YAAL,CAAkB6C,MAAlB,EAAA,CAAA;IACH,OAAA;IACJ,KALD,MAKO;IACH,MAAA,IAAI,KAAK7C,YAAL,CAAkB4C,KAAlB,KAA4B,SAAhC,EAA2C;IACvC;IACA,QAAK5C,IAAAA,CAAAA,YAAL,CAAkB8C,OAAlB,EAAA,CAAA;IACH,OAAA;IACJ,KAAA;IACJ,GAAA;;IAEDC,EAAAA,cAAc,GAAG;IACb,IAAA,OAAO,IAAK/C,CAAAA,YAAL,CAAkB4C,KAAlB,KAA4B,SAAnC,CAAA;IACH,GAAA;;IAEDnB,EAAAA,gBAAgB,GAAG;IACf,IAAA,OAAO,IAAKzB,CAAAA,YAAL,CAAkB4C,KAAlB,KAA4B,WAAnC,CAAA;IACH,GAAA;;IAEDjF,EAAAA,KAAK,GAAG;IACJ,IAAKiC,IAAAA,CAAAA,UAAL,GAAkB,EAAlB,CAAA;IACH,GAAA;;IAEDje,EAAAA,IAAI,CAAC+D,MAAD,EAASiX,EAAT,EAAa;IACb;IACA,IAAI,IAAA,IAAA,CAAK6E,MAAT,EAAiB;IACb,MAAA,OAAA;IACH,KAAA;;IAED,IAAKlgB,IAAAA,CAAAA,QAAL,GAAgB,IAAhB,CAAA;IAEA,IAAKse,IAAAA,CAAAA,UAAL,CAAgBxU,IAAhB,CAAqB;IACjB1F,MAAAA,MADiB;IAEjBiX,MAAAA,EAAAA;IAFiB,KAArB,CAAA,CAAA;;IAKA,IAAA,IAAI,KAAKiD,UAAL,CAAgB7S,MAAhB,GAAyB,EAA7B,EAAiC;IAC7B,MAAA,IAAA,CAAKxB,MAAL,CAAY9K,KAAZ,CAAkB6J,IAAlB,CAAuB,cAAvB,EAAwC,CAAA,qBAAA,EAAuB,KAAKsV,UAAL,CAAgB7S,MAAO,CAAA,CAAtF,EAD6B;;IAI7B,MAAA,IAAI,KAAK6S,UAAL,CAAgB7S,MAAhB,GAAyB,EAA7B,EAAiC;IAC7B,QAAK6S,IAAAA,CAAAA,UAAL,CAAgBqC,KAAhB,EAAA,CAAA;IACH,OAAA;IACJ,KApBY;;IAsBhB,GAAA;;IAEDxd,EAAAA,KAAK,GAAG;IACJ,IAAA,IAAA,CAAKsc,oBAAL,GAA4B;IACxBC,MAAAA,IAAI,EAAE,IAAA;IADkB,KAA5B,CAAA;IAGA,IAAKxc,IAAAA,CAAAA,OAAL,GAAe,KAAf,CAAA;IACA,IAAA,IAAA,CAAKmZ,KAAL,EAAA,CAAA;IACH,GAAA;;IAEDkF,EAAAA,MAAM,GAAG;IACL,IAAKre,IAAAA,CAAAA,OAAL,GAAe,IAAf,CAAA;IACH,GAAA;;IAvSmD;;ICDzC,MAAMwe,KAAN,CAAY;IACvBhZ,EAAAA,WAAW,CAACuB,MAAD,EAAS;IAChB,IAAA,MAAMiU,MAAM,GAAGwD,KAAK,CAACvD,gBAAN,EAAf,CAAA;IACA,IAAA,OAAO,IAAID,MAAJ,CAAWjU,MAAX,CAAP,CAAA;IACH,GAAA;;IAEsB,EAAA,OAAhBkU,gBAAgB,GAAG;IACtB,IAAA,OAAOE,kBAAP,CAAA;IACH,GAAA;;IARsB;;ICCZ,MAAMsD,WAAN,SAA0BvN,OAA1B,CAAkC;IAC7C1L,EAAAA,WAAW,CAACuB,MAAD,EAAS;IAChB,IAAA,KAAA,EAAA,CAAA;IACA,IAAKA,IAAAA,CAAAA,MAAL,GAAcA,MAAd,CAAA;IACA,IAAK/G,IAAAA,CAAAA,OAAL,GAAe,KAAf,CAAA;IAEA,IAAA,IAAA,CAAK0e,eAAL,GAAuB,IAAIC,eAAJ,EAAvB,CALgB;;IAOhB,IAAA,IAAA,CAAKC,UAAL,GAAkB3S,eAAe,CAAC4S,IAAI,IAAI;IACtC9X,MAAAA,MAAM,CAACoJ,IAAP,CAAYtQ,MAAM,CAACf,IAAnB,EAAyB,CAAC+f,IAAI,GAAG,IAAR,EAAc9Q,OAAd,CAAsB,CAAtB,CAAzB,CAAA,CAAA;IACH,KAFgC,CAAjC,CAAA;IAGAhH,IAAAA,MAAM,CAAC9K,KAAP,CAAauE,GAAb,CAAiB,aAAjB,EAAgC,MAAhC,CAAA,CAAA;IACH,GAAA;;IAEDoB,EAAAA,OAAO,GAAG;IACN,IAAA,IAAA,CAAKkd,KAAL,EAAA,CAAA;IACA,IAAA,IAAA,CAAKvO,GAAL,EAAA,CAAA;IACA,IAAKqO,IAAAA,CAAAA,UAAL,GAAkB,IAAlB,CAAA;IACA,IAAK7X,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,aAAtB,EAAqC,SAArC,CAAA,CAAA;IACH,GAAA;;IAEDue,EAAAA,WAAW,CAACphB,GAAD,EAAM;IACb,IAAM,MAAA;IAACqhB,MAAAA,KAAAA;IAAD,KAAA,GAAU,KAAKjY,MAArB,CAAA;IACA,IAAA,IAAA,CAAKA,MAAL,CAAYkY,MAAZ,CAAmBjQ,WAAnB,GAAiCxE,GAAG,EAApC,CAAA;IACAjP,IAAAA,KAAK,CAACoC,GAAD,EAAM;IAACuhB,MAAAA,MAAM,EAAE,IAAKR,CAAAA,eAAL,CAAqBQ,MAAAA;IAA9B,KAAN,CAAL,CAAkDxO,IAAlD,CAAwDyO,GAAD,IAAS;IAC5D,MAAA,MAAMC,MAAM,GAAGD,GAAG,CAACE,IAAJ,CAASC,SAAT,EAAf,CAAA;IACA,MAAA,IAAA,CAAKnP,IAAL,CAAUtQ,MAAM,CAAC2B,aAAjB,CAAA,CAAA;;IACA,MAAM+d,MAAAA,SAAS,GAAG,MAAM;IACpBH,QAAAA,MAAM,CAACI,IAAP,EAAc9O,CAAAA,IAAd,CAAmB,IAAmB,IAAA;IAAA,UAAlB,IAAA;IAAC+O,YAAAA,IAAD;IAAOjU,YAAAA,KAAAA;IAAP,WAAkB,GAAA,IAAA,CAAA;;IAC9B,UAAA,IAAIiU,IAAJ,EAAU;IACNT,YAAAA,KAAK,CAACrf,KAAN,EAAA,CAAA;IACH,WAFD,MAEO;IACH,YAAKif,IAAAA,CAAAA,UAAL,IAAmB,IAAKA,CAAAA,UAAL,CAAgBpT,KAAK,CAACkU,UAAtB,CAAnB,CAAA;IACAV,YAAAA,KAAK,CAACW,QAAN,CAAenU,KAAf,CAAA,CAAA;IACA+T,YAAAA,SAAS,EAAA,CAAA;IACZ,WAAA;IACJ,SARL,CASE5O,CAAAA,KATF,CASS/H,CAAD,IAAO;IACXoW,UAAAA,KAAK,CAACrf,KAAN,EAAA,CADW;;IAGX,UAAA,IAAA,CAAKwQ,IAAL,CAAU7N,YAAY,CAACE,UAAvB,EAAmCoG,CAAnC,CAAA,CAAA;IACA,UAAK7B,IAAAA,CAAAA,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAACY,KAAxB,EAA+B6B,YAAY,CAACE,UAA5C,CAAA,CAAA;IACA,UAAA,IAAA,CAAKsc,KAAL,EAAA,CAAA;IACH,SAfD,CAAA,CAAA;IAgBH,OAjBD,CAAA;;IAkBAS,MAAAA,SAAS,EAAA,CAAA;IACZ,KAtBD,CAsBG5O,CAAAA,KAtBH,CAsBU/H,CAAD,IAAO;IACZ,MAAA,IAAA,CAAKkW,KAAL,EAAA,CAAA;IACA,MAAA,IAAA,CAAK3O,IAAL,CAAU7N,YAAY,CAACE,UAAvB,EAAmCoG,CAAnC,CAAA,CAAA;IACA,MAAK7B,IAAAA,CAAAA,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAACY,KAAxB,EAA+B6B,YAAY,CAACE,UAA5C,CAAA,CAAA;IACH,KA1BD,CAAA,CAAA;IA2BH,GAAA;;IAEDsc,EAAAA,KAAK,GAAG;IACJ,IAAI,IAAA,IAAA,CAAKJ,eAAT,EAA0B;IACtB,MAAKA,IAAAA,CAAAA,eAAL,CAAqBI,KAArB,EAAA,CAAA;IACA,MAAKJ,IAAAA,CAAAA,eAAL,GAAuB,IAAvB,CAAA;IACH,KAAA;IACJ,GAAA;;IA1D4C;;ICAlC,MAAMkB,eAAN,SAA8B1O,OAA9B,CAAsC;IACjD1L,EAAAA,WAAW,CAACuB,MAAD,EAAS;IAChB,IAAA,KAAA,EAAA,CAAA;IACA,IAAKA,IAAAA,CAAAA,MAAL,GAAcA,MAAd,CAAA;IACA,IAAK8Y,IAAAA,CAAAA,MAAL,GAAc,IAAd,CAAA;IACA,IAAA,IAAA,CAAKC,YAAL,GAAoBjd,gBAAgB,CAACC,UAArC,CAAA;IACA,IAAA,IAAA,CAAKid,KAAL,GAAa,IAAb,CALgB;;IAOhB,IAAA,IAAA,CAAKnB,UAAL,GAAkB3S,eAAe,CAAC4S,IAAI,IAAI;IACtC9X,MAAAA,MAAM,CAACoJ,IAAP,CAAYtQ,MAAM,CAACf,IAAnB,EAAyB,CAAC+f,IAAI,GAAG,IAAR,EAAc9Q,OAAd,CAAsB,CAAtB,CAAzB,CAAA,CAAA;IACH,KAFgC,CAAjC,CAAA;IAIAhH,IAAAA,MAAM,CAAC9K,KAAP,CAAauE,GAAb,CAAiB,iBAAjB,EAAoC,MAApC,CAAA,CAAA;IACH,GAAA;;IAEDoB,EAAAA,OAAO,GAAG;IACN,IAAI,IAAA,IAAA,CAAKie,MAAT,EAAiB;IACb,MAAKA,IAAAA,CAAAA,MAAL,CAAYlgB,KAAZ,EAAA,CAAA;IACA,MAAKkgB,IAAAA,CAAAA,MAAL,GAAc,IAAd,CAAA;IACH,KAAA;;IACD,IAAA,IAAA,CAAKC,YAAL,GAAoBjd,gBAAgB,CAACC,UAArC,CAAA;IACA,IAAK8b,IAAAA,CAAAA,UAAL,GAAkB,IAAlB,CAAA;IACA,IAAKmB,IAAAA,CAAAA,KAAL,GAAa,IAAb,CAAA;IACA,IAAA,IAAA,CAAKxP,GAAL,EAAA,CAAA;IACA,IAAKxJ,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,iBAAtB,EAAyC,SAAzC,CAAA,CAAA;IACH,GAAA;;IAEDwf,EAAAA,gBAAgB,GAAG;IACf,IAAMjZ,MAAAA,MAAM,GAAG,IAAA,CAAKA,MAApB,CAAA;IACA,IAAM,MAAA;IACF9K,MAAAA,KADE;IAEFqU,MAAAA,MAAM,EAAE;IAACrK,QAAAA,KAAAA;IAAD,OAFN;IAGF+Y,MAAAA,KAAAA;IAHE,KAAA,GAIFjY,MAJJ,CAAA;IAMA,IAAA,IAAA,CAAK8Y,MAAL,GAAc,IAAII,SAAJ,CAAc,IAAA,CAAKF,KAAnB,CAAd,CAAA;IACA,IAAA,IAAA,CAAKF,MAAL,CAAYK,UAAZ,GAAyB,aAAzB,CAAA;IACAja,IAAAA,KAAK,CAAC,IAAA,CAAK4Z,MAAN,EAAc,MAAd,EAAsB,MAAM;IAC7B,MAAA,IAAA,CAAK1P,IAAL,CAAUtQ,MAAM,CAAC2B,aAAjB,CAAA,CAAA;IACAvF,MAAAA,KAAK,CAACuE,GAAN,CAAU,iBAAV,EAA6B,aAA7B,CAAA,CAAA;IACA,MAAA,IAAA,CAAKsf,YAAL,GAAoBjd,gBAAgB,CAACE,IAArC,CAAA;IACH,KAJI,CAAL,CAAA;IAMAkD,IAAAA,KAAK,CAAC,IAAK4Z,CAAAA,MAAN,EAAc,SAAd,EAAyB/Y,KAAK,IAAI;IACnC,MAAK8X,IAAAA,CAAAA,UAAL,IAAmB,IAAA,CAAKA,UAAL,CAAgB9X,KAAK,CAAC8K,IAAN,CAAW8N,UAA3B,CAAnB,CAAA;;IACA,MAAA,IAAA,CAAKS,cAAL,CAAoBrZ,KAAK,CAAC8K,IAA1B,CAAA,CAAA;IACH,KAHI,CAAL,CAAA;IAMA3L,IAAAA,KAAK,CAAC,IAAA,CAAK4Z,MAAN,EAAc,OAAd,EAAuB,MAAM;IAC9B5jB,MAAAA,KAAK,CAACuE,GAAN,CAAU,iBAAV,EAA6B,cAA7B,CAAA,CAAA;IACA,MAAA,IAAA,CAAK2P,IAAL,CAAUtQ,MAAM,CAAC0B,SAAjB,CAAA,CAAA;IACA,MAAA,IAAA,CAAKue,YAAL,GAAoBjd,gBAAgB,CAAClD,KAArC,CAAA;IACH,KAJI,CAAL,CAAA;IAMAsG,IAAAA,KAAK,CAAC,IAAK4Z,CAAAA,MAAN,EAAc,OAAd,EAAuBpf,KAAK,IAAI;IACjCxE,MAAAA,KAAK,CAACuE,GAAN,CAAU,iBAAV,EAA6B,cAA7B,CAAA,CAAA;IACA,MAAA,IAAA,CAAK2P,IAAL,CAAU7N,YAAY,CAACG,cAAvB,EAAuChC,KAAvC,CAAA,CAAA;IACA,MAAKsG,IAAAA,CAAAA,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAACY,KAAxB,EAA+B6B,YAAY,CAACG,cAA5C,CAAA,CAAA;IACA,MAAA,IAAA,CAAKqd,YAAL,GAAoBjd,gBAAgB,CAACpC,KAArC,CAAA;IACAue,MAAAA,KAAK,CAACrf,KAAN,EAAA,CAAA;IACA1D,MAAAA,KAAK,CAACuE,GAAN,CAAU,iBAAV,EAA8B,CAAA,aAAA,CAA9B,EAA8CC,KAA9C,CAAA,CAAA;IACH,KAPI,CAAL,CAAA;IAQH,GA/DgD;;;IAkEjD0f,EAAAA,cAAc,CAACC,OAAD,EAAU;IACpB,IAAM,MAAA;IAACpB,MAAAA,KAAAA;IAAD,KAAA,GAAU,KAAKjY,MAArB,CAAA;;IACA,IAAI,IAAA,CAACiY,KAAL,EAAY;IACR,MAAKjY,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkB6J,IAAlB,CAAuB,iBAAvB,EAA0C,wCAA1C,CAAA,CAAA;IACA,MAAA,OAAA;IACH,KAAA;;IACDkZ,IAAAA,KAAK,CAACW,QAAN,CAAeS,OAAf,CAAA,CAAA;IACH,GAAA;;IAGDrB,EAAAA,WAAW,CAACphB,GAAD,EAAM;IACb,IAAA,IAAA,CAAKoJ,MAAL,CAAYkY,MAAZ,CAAmBjQ,WAAnB,GAAiCxE,GAAG,EAApC,CAAA;IACA,IAAKuV,IAAAA,CAAAA,KAAL,GAAapiB,GAAb,CAAA;;IACA,IAAA,IAAA,CAAKqiB,gBAAL,EAAA,CAAA;IACH,GAAA;;IAhFgD;;ICAtC,MAAMK,MAAN,CAAa;IACxB7a,EAAAA,WAAW,CAACuB,MAAD,EAAS;IAChB,IAAMiU,MAAAA,MAAM,GAAGqF,MAAM,CAACpF,gBAAP,CAAwBlU,MAAM,CAACpB,IAAP,CAAY5H,QAApC,CAAf,CAAA;IACA,IAAA,OAAO,IAAIid,MAAJ,CAAWjU,MAAX,CAAP,CAAA;IACH,GAAA;;IAEsB,EAAhBkU,OAAAA,gBAAgB,CAACld,QAAD,EAAW;IAC9B,IAAA,IAAIA,QAAQ,KAAK1C,oBAAoB,CAACE,KAAtC,EAA6C;IACzC,MAAA,OAAOkjB,WAAP,CAAA;IACH,KAFD,MAEO,IAAI1gB,QAAQ,KAAK1C,oBAAoB,CAACC,SAAtC,EAAiD;IACpD,MAAA,OAAOskB,eAAP,CAAA;IACH,KAAA;IACJ,GAAA;;IAZuB;;;ACH5B;IACA;AACA;IACA;IACA;AACA;IACA;AACA;IACA;IACA;IACA;IACA;AACA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;AACA;IACA,SAAS,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE;IACxC,IAAI,IAAI,CAAC,WAAW,EAAE;IACtB,QAAQ,MAAM,8BAA8B,CAAC;IAC7C,KAAK;AACL;IACA,IAAI,MAAM,GAAG,MAAM,IAAI;IACvB,QAAQ,IAAI,EAAE,OAAO;IACrB,KAAK,CAAC;AACN;IACA,IAAI,MAAM,GAAG,IAAI,sBAAsB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AAC7D;IACA;IACA,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC;AACpB;IACA,IAAI,SAAS,cAAc,CAAC,OAAO,EAAE;IACrC,QAAQ,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACjC,YAAY,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7D,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,CAAC,OAAO,EAAE;IACvB;IACA;IACA,YAAY,MAAM,GAAG,IAAI,sBAAsB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACtE,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACjC,YAAY,OAAO,CAAC,GAAG,CAAC,oBAAoB,GAAG,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC,CAAC;IACzE,SAAS;AACT;IACA,QAAQ,IAAI,aAAa,EAAE;IAC3B,YAAY,aAAa,CAAC,iBAAiB,EAAE,CAAC;IAC9C,YAAY,aAAa,CAAC,MAAM,EAAE,CAAC;AACnC;IACA,YAAY,QAAQ,CAAC,WAAW,CAAC,CAAC;AAClC;IACA,YAAY,IAAI,IAAI,CAAC,iBAAiB,EAAE;IACxC,gBAAgB,uBAAuB,EAAE,CAAC;IAC1C,aAAa;IACb,YAAY,OAAO,IAAI,CAAC;IACxB,SAAS;AACT;IACA,QAAQ,YAAY,CAAC,WAAW;IAChC,YAAY,IAAI,IAAI,CAAC,iBAAiB,EAAE;IACxC,gBAAgB,uBAAuB,EAAE,CAAC;IAC1C,aAAa;IACb,SAAS,CAAC,CAAC;AACX;IACA,QAAQ,OAAO,IAAI,CAAC;IACpB,KAAK;AACL;IACA,IAAI,SAAS,YAAY,CAAC,YAAY,EAAE;IACxC,QAAQ,IAAI,YAAY,EAAE;IAC1B,YAAY,MAAM,CAAC,YAAY,GAAG,WAAW;IAC7C,gBAAgB,YAAY,EAAE,CAAC;IAC/B,gBAAgB,YAAY,GAAG,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC;IAC1D,aAAa,CAAC;IACd,SAAS;AACT;IACA,QAAQ,IAAI,QAAQ,GAAG,IAAI,eAAe,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AAChE;IACA,QAAQ,aAAa,GAAG,IAAI,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAC1D,QAAQ,aAAa,CAAC,MAAM,EAAE,CAAC;AAC/B;IACA,QAAQ,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC9B;IACA,QAAQ,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACjC,YAAY,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,aAAa,CAAC,WAAW,CAAC,IAAI,EAAE,kBAAkB,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IACtH,SAAS;IACT,KAAK;AACL;IACA,IAAI,SAAS,aAAa,CAAC,QAAQ,EAAE;IACrC,QAAQ,QAAQ,GAAG,QAAQ,IAAI,WAAW,EAAE,CAAC;AAC7C;IACA,QAAQ,IAAI,CAAC,aAAa,EAAE;IAC5B,YAAY,UAAU,EAAE,CAAC;IACzB,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE;IACrC,YAAY,IAAI,CAAC,eAAe,EAAE,CAAC;AACnC;IACA,YAAY,UAAU,CAAC,WAAW;IAClC,gBAAgB,aAAa,CAAC,QAAQ,CAAC,CAAC;IACxC,aAAa,EAAE,CAAC,CAAC,CAAC;IAClB,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IAC/D,YAAY,OAAO,CAAC,IAAI,CAAC,oEAAoE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3G,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACjC,YAAY,OAAO,CAAC,GAAG,CAAC,oBAAoB,GAAG,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC,CAAC;IACzE,SAAS;AACT;IACA,QAAQ,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE;IACnC,YAAY,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC1C,SAAS,MAAM;IACf,YAAY,aAAa,CAAC,IAAI,EAAE,CAAC;IACjC,YAAY,SAAS,EAAE,CAAC;IACxB,SAAS;AACT;IACA,QAAQ,QAAQ,CAAC,SAAS,CAAC,CAAC;AAC5B;IACA,QAAQ,SAAS,SAAS,CAAC,MAAM,EAAE;IACnC,YAAY,IAAI,CAAC,aAAa,EAAE;IAChC,gBAAgB,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE;IACzD,oBAAoB,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC5C,iBAAiB,MAAM;IACvB,oBAAoB,QAAQ,CAAC,EAAE,CAAC,CAAC;IACjC,iBAAiB;IACjB,gBAAgB,OAAO;IACvB,aAAa;AACb;IACA,YAAY,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,SAAS,GAAG,EAAE;IAC7D,gBAAgB,IAAI,OAAO,aAAa,CAAC,GAAG,CAAC,KAAK,UAAU,EAAE;IAC9D,oBAAoB,OAAO;IAC3B,iBAAiB;AACjB;IACA,gBAAgB,IAAI,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IAC/C,aAAa,CAAC,CAAC;AACf;IACA,YAAY,IAAI,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC;AAC1C;IACA,YAAY,IAAI,CAAC,IAAI,EAAE;IACvB,gBAAgB,IAAI,MAAM,EAAE;IAC5B,oBAAoB,aAAa,CAAC,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;IACvD,iBAAiB,MAAM;IACvB,oBAAoB,MAAM,mBAAmB,CAAC;IAC9C,iBAAiB;IACjB,aAAa;AACb;IACA,YAAY,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IAC7C,gBAAgB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACrE,aAAa;AACb;IACA,YAAY,IAAI,QAAQ,EAAE;IAC1B,gBAAgB,IAAI,GAAG,CAAC;AACxB;IACA,gBAAgB,IAAI;IACpB,oBAAoB,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACpD,iBAAiB,CAAC,OAAO,CAAC,EAAE,EAAE;AAC9B;IACA,gBAAgB,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE;IACzD,oBAAoB,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC7C,iBAAiB,MAAM;IACvB,oBAAoB,QAAQ,CAAC,GAAG,CAAC,CAAC;IAClC,iBAAiB;IACjB,aAAa;AACb;IACA,YAAY,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE;IACzC,gBAAgB,OAAO;IACvB,aAAa;AACb;IACA,YAAY,UAAU,CAAC,SAAS,OAAO,EAAE;IACzC,gBAAgB,IAAI,SAAS,GAAG,EAAE,CAAC;IACnC,gBAAgB,SAAS,CAAC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,OAAO,CAAC;IAC1D,gBAAgB,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC7C,aAAa,CAAC,CAAC;IACf,SAAS;IACT,KAAK;AACL;IACA,IAAI,SAAS,cAAc,GAAG;IAC9B,QAAQ,IAAI,CAAC,aAAa,EAAE;IAC5B,YAAY,UAAU,EAAE,CAAC;IACzB,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW,EAAE;IACxC,YAAY,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACrC,gBAAgB,OAAO,CAAC,IAAI,CAAC,kDAAkD,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7F,aAAa;IACb,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC3B;IACA,QAAQ,aAAa,CAAC,KAAK,EAAE,CAAC;AAC9B;IACA,QAAQ,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACjC,YAAY,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAC7C,SAAS;IACT,KAAK;AACL;IACA,IAAI,SAAS,eAAe,GAAG;IAC/B,QAAQ,IAAI,CAAC,aAAa,EAAE;IAC5B,YAAY,UAAU,EAAE,CAAC;IACzB,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE;IACrC,YAAY,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACrC,gBAAgB,OAAO,CAAC,IAAI,CAAC,mDAAmD,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9F,aAAa;IACb,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC9B;IACA;IACA,QAAQ,aAAa,CAAC,MAAM,EAAE,CAAC;AAC/B;IACA,QAAQ,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACjC,YAAY,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAC9C,SAAS;IACT,KAAK;AACL;IACA,IAAI,SAAS,QAAQ,CAAC,KAAK,EAAE;IAC7B,QAAQ,WAAW,CAAC,IAAI,cAAc,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/D,KAAK;AACL;IACA,IAAI,SAAS,UAAU,CAAC,QAAQ,EAAE,cAAc,EAAE;IAClD,QAAQ,IAAI,CAAC,QAAQ,EAAE;IACvB,YAAY,MAAM,2CAA2C,CAAC;IAC9D,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,GAAG,cAAc,GAAG,cAAc,CAAC,IAAI,GAAG,CAAC,aAAa,IAAI,EAAE,EAAE,IAAI,CAAC;AACrF;IACA,QAAQ,IAAI,CAAC,IAAI,EAAE;IACnB,YAAY,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACrC,gBAAgB,OAAO,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;IACzE,aAAa;AACb;IACA,YAAY,UAAU,CAAC,WAAW;IAClC,gBAAgB,UAAU,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IACrD,aAAa,EAAE,IAAI,CAAC,CAAC;IACrB,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE;IACzE,YAAY,IAAI,SAAS,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;AACzD;IACA,YAAY,SAAS,CAAC,SAAS,GAAG,SAAS,KAAK,EAAE;IAClD,gBAAgB,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrC,aAAa,CAAC;AACd;IACA,YAAY,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACxC,SAAS,MAAM;IACf,YAAY,IAAI,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;IAC1C,YAAY,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IACvC,YAAY,MAAM,CAAC,MAAM,GAAG,SAAS,KAAK,EAAE;IAC5C,gBAAgB,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9C,aAAa,CAAC;IACd,SAAS;AACT;IACA,QAAQ,SAAS,kBAAkB,CAAC,SAAS,EAAE;IAC/C,YAAY,IAAI;IAChB,gBAAgB,IAAI,IAAI,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE;IAC7E,oBAAoB,oCAAoC,GAAG,SAAS,CAAC,IAAI,GAAG,cAAc;IAC1F,iBAAiB,EAAE;IACnB,oBAAoB,IAAI,EAAE,wBAAwB;IAClD,iBAAiB,CAAC,CAAC,CAAC;AACpB;IACA,gBAAgB,IAAI,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;IAC9C,gBAAgB,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAC1C,gBAAgB,OAAO,MAAM,CAAC;IAC9B,aAAa,CAAC,OAAO,CAAC,EAAE,EAAE;IAC1B,SAAS;IACT,KAAK;AACL;IACA,IAAI,SAAS,uBAAuB,CAAC,OAAO,EAAE;IAC9C,QAAQ,OAAO,GAAG,OAAO,IAAI,CAAC,CAAC;AAC/B;IACA,QAAQ,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE;IACrC,YAAY,UAAU,CAAC,WAAW;IAClC,gBAAgB,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACjD,aAAa,EAAE,IAAI,CAAC,CAAC;IACrB,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE;IACtC,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,OAAO,IAAI,IAAI,CAAC,iBAAiB,EAAE;IAC/C,YAAY,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACnD,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,OAAO,IAAI,IAAI,CAAC;AACxB;IACA,QAAQ,UAAU,CAAC,WAAW;IAC9B,YAAY,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAC7C,SAAS,EAAE,IAAI,CAAC,CAAC;IACjB,KAAK;AACL;IACA,IAAI,SAAS,QAAQ,CAAC,KAAK,EAAE;IAC7B,QAAQ,IAAI,CAAC,IAAI,EAAE;IACnB,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AAC3B;IACA,QAAQ,IAAI,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,KAAK,UAAU,EAAE;IAC5D,YAAY,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAClD,SAAS,MAAM;IACf,YAAY,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IACvC,SAAS;IACT,KAAK;AACL;IACA,IAAI,IAAI,OAAO,GAAG,6EAA6E,GAAG,MAAM,CAAC,IAAI,GAAG,YAAY,CAAC;AAC7H;IACA,IAAI,SAAS,UAAU,GAAG;IAC1B,QAAQ,IAAI,MAAM,CAAC,WAAW,KAAK,IAAI,EAAE;IACzC,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9B,KAAK;AACL;IACA,IAAI,IAAI,aAAa,CAAC;AACtB;IACA,IAAI,IAAI,YAAY,GAAG;IACvB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,cAAc,EAAE,cAAc;AACtC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,aAAa,EAAE,aAAa;AACpC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,cAAc,EAAE,cAAc;AACtC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,eAAe,EAAE,eAAe;AACxC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,YAAY,EAAE,YAAY;AAClC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,oBAAoB,EAAE,SAAS,iBAAiB,EAAE,QAAQ,EAAE;IACpE,YAAY,IAAI,OAAO,iBAAiB,KAAK,WAAW,EAAE;IAC1D,gBAAgB,MAAM,gCAAgC,CAAC;IACvD,aAAa;AACb;IACA,YAAY,IAAI,OAAO,iBAAiB,KAAK,QAAQ,EAAE;IACvD,gBAAgB,MAAM,qCAAqC,CAAC;IAC5D,aAAa;AACb;IACA,YAAY,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;IACvD,YAAY,IAAI,CAAC,kBAAkB,GAAG,QAAQ,IAAI,WAAW,EAAE,CAAC;AAChE;IACA,YAAY,OAAO;IACnB,gBAAgB,kBAAkB,EAAE,SAAS,QAAQ,EAAE;IACvD,oBAAoB,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC;IACvD,iBAAiB;IACjB,aAAa,CAAC;IACd,SAAS;AACT;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,iBAAiB,EAAE,WAAW;IACtC,YAAY,IAAI,CAAC,aAAa,EAAE;IAChC,gBAAgB,UAAU,EAAE,CAAC;IAC7B,gBAAgB,OAAO;IACvB,aAAa;AACb;IACA,YAAY,aAAa,CAAC,iBAAiB,EAAE,CAAC;AAC9C;IACA,YAAY,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACrC,gBAAgB,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAC1D,aAAa;IACb,SAAS;AACT;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,OAAO,EAAE,WAAW;IAC5B,YAAY,IAAI,CAAC,aAAa,EAAE;IAChC,gBAAgB,UAAU,EAAE,CAAC;IAC7B,gBAAgB,OAAO;IACvB,aAAa;AACb;IACA,YAAY,OAAO,aAAa,CAAC,IAAI,CAAC;IACtC,SAAS;AACT;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,UAAU,EAAE,UAAU;AAC9B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,KAAK,EAAE,WAAW;IAC1B,YAAY,IAAI,CAAC,aAAa,EAAE;IAChC,gBAAgB,UAAU,EAAE,CAAC;IAC7B,gBAAgB,OAAO;IACvB,aAAa;AACb;IACA,YAAY,OAAO,GAAG,CAAC,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC3D,SAAS;AACT;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,mBAAmB,EAAE,WAAW;IACxC,YAAY,OAAO,aAAa,CAAC;IACjC,SAAS;AACT;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,IAAI,EAAE,SAAS,QAAQ,EAAE;IACjC,YAAY,IAAI,CAAC,aAAa,EAAE;IAChC,gBAAgB,UAAU,EAAE,CAAC;IAC7B,gBAAgB,OAAO;IACvB,aAAa;AACb;IACA,YAAY,kBAAkB,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC7D,SAAS;AACT;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,WAAW,EAAE,SAAS,QAAQ,EAAE;IACxC,YAAY,IAAI,CAAC,aAAa,EAAE;IAChC,gBAAgB,UAAU,EAAE,CAAC;IAC7B,gBAAgB,OAAO;IACvB,aAAa;AACb;IACA,YAAY,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACzD,SAAS;AACT;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,qBAAqB,EAAE,SAAS,iBAAiB,EAAE;IAC3D,YAAY,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC;AACtC;IACA,YAAY,IAAI,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC;IAClD,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;IAC7C,gBAAgB,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;IAC1C,oBAAoB,QAAQ,EAAE,CAAC;IAC/B,oBAAoB,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAC/C,iBAAiB,CAAC,CAAC;IACnB,aAAa;IACb,SAAS;AACT;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,IAAI,EAAE,IAAI;AAClB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,UAAU,EAAE,CAAC;AACrB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,UAAU,EAAE,CAAC;AACrB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,MAAM,EAAE,IAAI;AACpB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,KAAK,EAAE,WAAW;IAC1B,YAAY,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACnE,gBAAgB,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACzD,aAAa;AACb;IACA,YAAY,IAAI,aAAa,IAAI,OAAO,aAAa,CAAC,iBAAiB,KAAK,UAAU,EAAE;IACxF,gBAAgB,aAAa,CAAC,iBAAiB,EAAE,CAAC;IAClD,aAAa;IACb,YAAY,aAAa,GAAG,IAAI,CAAC;IACjC,YAAY,QAAQ,CAAC,UAAU,CAAC,CAAC;IACjC,YAAY,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IAC7B,SAAS;AACT;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,cAAc,EAAE,SAAS,KAAK,EAAE;IACxC,YAAY,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACrC,gBAAgB,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;IAC9D,aAAa;IACb,SAAS;AACT;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,KAAK,EAAE,UAAU;AACzB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,QAAQ,EAAE,WAAW;IAC7B,YAAY,OAAO,IAAI,CAAC,KAAK,CAAC;IAC9B,SAAS;AACT;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,OAAO,EAAE,WAAW;IAC5B,YAAY,IAAI,gBAAgB,GAAG,MAAM,CAAC,WAAW,CAAC;AACtD;IACA,YAAY,MAAM,GAAG;IACrB,gBAAgB,WAAW,EAAE,IAAI;IACjC,aAAa,CAAC;IACd,YAAY,IAAI,CAAC,KAAK,EAAE,CAAC;IACzB,YAAY,QAAQ,CAAC,WAAW,CAAC,CAAC;IAClC,YAAY,YAAY,GAAG,IAAI,GAAG,IAAI,CAAC;AACvC;IACA,YAAY,IAAI,OAAO,CAAC,uBAAuB,EAAE;IACjD,gBAAgB,OAAO,CAAC,uBAAuB,CAAC,KAAK,EAAE,CAAC;IACxD,gBAAgB,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC;IACvD,aAAa;AACb;IACA,YAAY,MAAM,CAAC,WAAW,GAAG,gBAAgB,CAAC;AAClD;IACA,YAAY,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACrC,gBAAgB,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IACvD,aAAa;IACb,SAAS;AACT;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,OAAO,EAAE,OAAO;IACxB,KAAK,CAAC;AACN;IACA,IAAI,IAAI,CAAC,IAAI,EAAE;IACf,QAAQ,IAAI,GAAG,YAAY,CAAC;IAC5B,QAAQ,OAAO,YAAY,CAAC;IAC5B,KAAK;AACL;IACA;IACA,IAAI,KAAK,IAAI,IAAI,IAAI,YAAY,EAAE;IACnC,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACxC,KAAK;AACL;IACA,IAAI,IAAI,GAAG,IAAI,CAAC;AAChB;IACA,IAAI,OAAO,YAAY,CAAC;IACxB,CAAC;AACD;IACA,SAAS,CAAC,OAAO,GAAG,OAAO,CAAC;AAC5B;IAC6D;IAC7D,IAAI,MAAA,CAAA,OAAc,GAAG,SAAS,CAAC;IAC/B,CAAC;AAOD;IACA,SAAS,CAAC,WAAW,GAAG,SAAS,IAAI,EAAE,QAAQ,EAAE;IACjD,IAAI,IAAI,CAAC,QAAQ,EAAE;IACnB,QAAQ,MAAM,wBAAwB,CAAC;IACvC,KAAK;AACL;IACA,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,IAAI,KAAK,KAAK,GAAG,OAAO,GAAG,IAAI,GAAG,QAAQ,CAAC,GAAG,aAAa,CAAC,CAAC;IACpG,IAAI,WAAW,CAAC,KAAK,CAAC,SAAS,OAAO,EAAE,KAAK,EAAE;IAC/C,QAAQ,IAAI,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,GAAG,MAAM,IAAI,QAAQ,EAAE;IACnE,YAAY,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC9B,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,KAAK,KAAK,IAAI,QAAQ,EAAE;IACxC,YAAY,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;IACzD,SAAS;IACT,KAAK,CAAC,CAAC;IACP,CAAC,CAAC;AACF;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,SAAS,CAAC,WAAW,GAAG,SAAS,OAAO,EAAE;IAC1C,IAAI,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IACrD,IAAI,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;IAC5B,IAAI,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,EAAE;IACvD,QAAQ,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,YAAY,EAAE;IACxD,YAAY,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,YAAY,EAAE;IAC5D,gBAAgB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,UAAU,EAAE;IAC5D,oBAAoB,WAAW,CAAC,KAAK,CAAC;IACtC,wBAAwB,SAAS,EAAE,YAAY;IAC/C,wBAAwB,SAAS,EAAE,YAAY;IAC/C,wBAAwB,OAAO,EAAE,UAAU;IAC3C,qBAAqB,CAAC,CAAC;IACvB,iBAAiB,CAAC,CAAC;IACnB,aAAa,CAAC,CAAC;IACf,SAAS,CAAC,CAAC;IACX,KAAK,MAAM,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE;IAC/C,QAAQ,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,YAAY,EAAE;IACxD,YAAY,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,YAAY,EAAE;IAC5D,gBAAgB,WAAW,CAAC,KAAK,CAAC;IAClC,oBAAoB,SAAS,EAAE,YAAY;IAC3C,oBAAoB,SAAS,EAAE,YAAY;IAC3C,iBAAiB,CAAC,CAAC;IACnB,aAAa,CAAC,CAAC;IACf,SAAS,CAAC,CAAC;IACX,KAAK,MAAM,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,EAAE;IAC7C,QAAQ,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,YAAY,EAAE;IACxD,YAAY,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,UAAU,EAAE;IACxD,gBAAgB,WAAW,CAAC,KAAK,CAAC;IAClC,oBAAoB,SAAS,EAAE,YAAY;IAC3C,oBAAoB,OAAO,EAAE,UAAU;IACvC,iBAAiB,CAAC,CAAC;IACnB,aAAa,CAAC,CAAC;IACf,SAAS,CAAC,CAAC;IACX,KAAK,MAAM,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,EAAE;IAC7C,QAAQ,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,YAAY,EAAE;IACxD,YAAY,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,UAAU,EAAE;IACxD,gBAAgB,WAAW,CAAC,KAAK,CAAC;IAClC,oBAAoB,SAAS,EAAE,YAAY;IAC3C,oBAAoB,OAAO,EAAE,UAAU;IACvC,iBAAiB,CAAC,CAAC;IACnB,aAAa,CAAC,CAAC;IACf,SAAS,CAAC,CAAC;IACX,KAAK,MAAM,IAAI,OAAO,CAAC,KAAK,EAAE;IAC9B,QAAQ,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,YAAY,EAAE;IACxD,YAAY,WAAW,CAAC,KAAK,CAAC;IAC9B,gBAAgB,SAAS,EAAE,YAAY;IACvC,aAAa,CAAC,CAAC;IACf,SAAS,CAAC,CAAC;IACX,KAAK,MAAM,IAAI,OAAO,CAAC,KAAK,EAAE;IAC9B,QAAQ,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,YAAY,EAAE;IACxD,YAAY,WAAW,CAAC,KAAK,CAAC;IAC9B,gBAAgB,SAAS,EAAE,YAAY;IACvC,aAAa,CAAC,CAAC;IACf,SAAS,CAAC,CAAC;IACX,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE;IAC5B,QAAQ,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,UAAU,EAAE;IACpD,YAAY,WAAW,CAAC,KAAK,CAAC;IAC9B,gBAAgB,OAAO,EAAE,UAAU;IACnC,aAAa,CAAC,CAAC;IACf,SAAS,CAAC,CAAC;IACX,KAAK;IACL,CAAC,CAAC;AACF;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;AACA;IACA,SAAS,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE;IACrD,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IAC9C,QAAQ,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE;IAC9C,YAAY,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC;IAClC,SAAS,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;IACpD,YAAY,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC;IAClC,SAAS;IACT,KAAK;AACL;IACA,IAAI,IAAI,MAAM,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IAC7C,QAAQ,IAAI,MAAM,CAAC,YAAY,KAAK,cAAc,IAAI,MAAM,CAAC,YAAY,KAAK,cAAc,KAAK,OAAO,mBAAmB,KAAK,WAAW,IAAI,MAAM,CAAC,YAAY,KAAK,mBAAmB,CAAC,EAAE;IAC7L,YAAY,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC;IAClC,SAAS,MAAM,IAAI,MAAM,CAAC,YAAY,KAAK,WAAW,EAAE;IACxD,YAAY,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC;IAChC,SAAS,MAAM,IAAI,MAAM,CAAC,YAAY,KAAK,mBAAmB,EAAE;IAChE,YAAY,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC;IAClC,SAAS,MAAM,IAAI,MAAM,CAAC,YAAY,KAAK,mBAAmB,EAAE;IAChE,YAAY,IAAI,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,MAAM,IAAI,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE;IAClG,gBAAgB,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC;IACtC,aAAa,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,MAAM,IAAI,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE;IAC1G,gBAAgB,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC;IACtC,aAAa,MAAM,IAAI,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE;IAC1G,gBAAgB,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC;IACtC,aAAa,MAAM,CAEN;IACb,SAAS;IACT,KAAK;AACL;IACA,IAAI,IAAI,OAAO,mBAAmB,KAAK,WAAW,IAAI,OAAO,aAAa,KAAK,WAAW,IAAI,aAAa,IAAI,aAAa,CAAC,SAAS,EAAE;IACxI,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;IAC9B,YAAY,MAAM,CAAC,QAAQ,GAAG,YAAY,CAAC;IAC3C,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IAC1B,YAAY,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAE1B;IACT,KAAK;AACL;IACA;IACA,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IACtB,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAAE;IAC7B,YAAY,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,SAAS;IACT,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;IAC1B,YAAY,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC;IAClC,SAAS;IACT,KAAK;AACL;IACA,IAAI,OAAO,MAAM,CAAC;IAClB,CAAC;AACD;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;AACA;IACA,SAAS,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE;IAC9C,IAAI,IAAI,QAAQ,CAAC;AACjB;IACA;IACA;IACA,IAAI,IAAI,QAAQ,IAAI,MAAM,IAAI,OAAO,EAAE;IACvC;IACA;IACA,QAAQ,QAAQ,GAAG,mBAAmB,CAAC;IACvC,KAAK;AACL;IACA,IAAI,IAAI,OAAO,aAAa,KAAK,WAAW,IAAI,aAAa,IAAI,aAAa,CAAC,SAAS,IAAI,CAAC,QAAQ,EAAE;IACvG,QAAQ,QAAQ,GAAG,mBAAmB,CAAC;IACvC,KAAK;AACL;IACA;IACA,IAAI,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,EAAE;IAC1D,QAAQ,QAAQ,GAAG,cAAc,CAAC;AAClC;IACA,QAAQ,IAAI,OAAO,mBAAmB,KAAK,WAAW,IAAI,OAAO,cAAc,KAAK,WAAW,EAAE;IACjG,YAAY,QAAQ,GAAG,mBAAmB,CAAC;IAC3C,SAAS;IACT,KAAK;AACL;IACA;IACA,IAAI,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE;IAC/B,QAAQ,QAAQ,GAAG,WAAW,CAAC;IAC/B,KAAK;AACL;IACA;IACA,IAAI,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE;IAClC,QAAQ,QAAQ,GAAG,cAAc,CAAC;IAClC,KAAK;AACL;IACA,IAAI,IAAI,yBAAyB,EAAE,IAAI,QAAQ,KAAK,cAAc,IAAI,QAAQ,KAAK,WAAW,IAAI,OAAO,aAAa,KAAK,WAAW,IAAI,aAAa,IAAI,aAAa,CAAC,SAAS,EAAE;IACpL,QAAQ,IAAI,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,MAAM,IAAI,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE;IAC9F;IACA,YAAY,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;IACzC,gBAAgB,IAAI,OAAO,aAAa,CAAC,eAAe,KAAK,UAAU,IAAI,aAAa,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE;IACxH,oBAAoB,QAAQ,GAAG,mBAAmB,CAAC;IACnD,iBAAiB;IACjB;IACA,aAAa,MAAM;IACnB;IACA,gBAAgB,IAAI,OAAO,aAAa,CAAC,eAAe,KAAK,UAAU,IAAI,aAAa,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE;IACxH,oBAAoB,QAAQ,GAAG,mBAAmB,CAAC;IACnD,iBAAiB;IACjB,aAAa;IACb,SAAS;IACT,KAAK;AACL;IACA,IAAI,IAAI,WAAW,YAAY,KAAK,IAAI,WAAW,CAAC,MAAM,EAAE;IAC5D,QAAQ,QAAQ,GAAG,mBAAmB,CAAC;IACvC,KAAK;AACL;IACA,IAAI,IAAI,MAAM,CAAC,YAAY,EAAE;IAC7B,QAAQ,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC;IACvC,KAAK;AACL;IACA,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE;IAC9D,QAAQ,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACvF,KAAK;AACL;IACA,IAAI,IAAI,CAAC,QAAQ,IAAI,QAAQ,EAAE;IAC/B,QAAQ,QAAQ,GAAG,mBAAmB,CAAC;IACvC,KAAK;AACL;IACA,IAAI,OAAO,QAAQ,CAAC;IACpB,CAAC;AACD;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;AACA;IACA,SAAS,UAAU,CAAC,WAAW,EAAE;AACjC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,SAAS,GAAG,SAAS,YAAY,EAAE;IAC5C,QAAQ,IAAI,YAAY,EAAE;IAC1B,YAAY,WAAW,GAAG,YAAY,CAAC;IACvC,SAAS;IACT,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,SAAS,GAAG;IACrB,QAAQ,KAAK,EAAE,IAAI;IACnB,QAAQ,KAAK,EAAE,IAAI;IACnB,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,cAAc,GAAG,WAAW;IACrC,QAAQ,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IACvC,QAAQ,IAAI,YAAY,CAAC;IACzB,QAAQ,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI;IACxC,YAAY,KAAK,EAAE,IAAI;IACvB,YAAY,KAAK,EAAE,IAAI;IACvB,YAAY,GAAG,EAAE,IAAI;IACrB,SAAS,CAAC;AACV;IACA,QAAQ,IAAI,OAAO,SAAS,CAAC,KAAK,KAAK,UAAU,IAAI,yBAAyB,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE;IAC7H,YAAY,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC;IACpC,SAAS;AACT;IACA,QAAQ,IAAI,OAAO,SAAS,CAAC,KAAK,KAAK,UAAU,IAAI,yBAAyB,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE;IAC7H,YAAY,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC;IACpC,SAAS;AACT;IACA,QAAQ,IAAI,OAAO,SAAS,CAAC,GAAG,KAAK,UAAU,IAAI,yBAAyB,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE;IAC3H,YAAY,SAAS,CAAC,GAAG,GAAG,KAAK,CAAC;IAClC,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE;IACpE,YAAY,MAAM,qDAAqD,CAAC;IACxE,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE;IAC/B,YAAY,YAAY,GAAG,IAAI,CAAC;IAChC,YAAY,IAAI,OAAO,SAAS,CAAC,KAAK,KAAK,UAAU,EAAE;IACvD,gBAAgB,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC;IAC/C,aAAa;AACb;IACA,YAAY,IAAI,CAAC,aAAa,GAAG,IAAI,SAAS,CAAC,WAAW,EAAE;IAC5D,gBAAgB,IAAI,EAAE,OAAO;IAC7B,gBAAgB,UAAU,EAAE,IAAI,CAAC,UAAU;IAC3C,gBAAgB,UAAU,EAAE,IAAI,CAAC,UAAU;IAC3C,gBAAgB,qBAAqB,EAAE,IAAI,CAAC,qBAAqB,IAAI,CAAC;IACtE,gBAAgB,WAAW,EAAE,IAAI,CAAC,WAAW;IAC7C,gBAAgB,YAAY,EAAE,YAAY;IAC1C,gBAAgB,QAAQ,EAAE,QAAQ,CAAC,KAAK;IACxC,gBAAgB,SAAS,EAAE,IAAI,CAAC,SAAS;IACzC,gBAAgB,WAAW,EAAE,IAAI,CAAC,WAAW;IAC7C,aAAa,CAAC,CAAC;AACf;IACA,YAAY,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;IAClC,gBAAgB,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;IACpD,aAAa;IACb,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE;IAC/B,YAAY,YAAY,GAAG,IAAI,CAAC;IAChC,YAAY,IAAI,OAAO,SAAS,CAAC,KAAK,KAAK,UAAU,EAAE;IACvD,gBAAgB,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC;IAC/C,aAAa;AACb;IACA,YAAY,IAAI,SAAS,GAAG,WAAW,CAAC;AACxC;IACA,YAAY,IAAI,yBAAyB,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,IAAI,OAAO,SAAS,CAAC,KAAK,KAAK,UAAU,EAAE;IAC3G,gBAAgB,IAAI,UAAU,GAAG,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACpE;IACA,gBAAgB,IAAI,SAAS,EAAE;IAC/B,oBAAoB,SAAS,GAAG,IAAI,WAAW,EAAE,CAAC;IAClD,oBAAoB,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AACnD;IACA,oBAAoB,IAAI,YAAY,IAAI,YAAY,KAAK,cAAc,EAAE;IACzE;IACA;IACA,wBAAwB,YAAY,GAAG,mBAAmB,CAAC;IAC3D,qBAAqB;IACrB,iBAAiB,MAAM;IACvB,oBAAoB,SAAS,GAAG,IAAI,WAAW,EAAE,CAAC;IAClD,oBAAoB,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACnD,iBAAiB;IACjB,aAAa;AACb;IACA,YAAY,IAAI,CAAC,aAAa,GAAG,IAAI,SAAS,CAAC,SAAS,EAAE;IAC1D,gBAAgB,IAAI,EAAE,OAAO;IAC7B,gBAAgB,KAAK,EAAE,IAAI,CAAC,KAAK;IACjC,gBAAgB,MAAM,EAAE,IAAI,CAAC,MAAM;IACnC,gBAAgB,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,EAAE;IACvD,gBAAgB,WAAW,EAAE,IAAI,CAAC,WAAW;IAC7C,gBAAgB,YAAY,EAAE,YAAY;IAC1C,gBAAgB,QAAQ,EAAE,QAAQ,CAAC,KAAK;IACxC,gBAAgB,SAAS,EAAE,IAAI,CAAC,SAAS;IACzC,gBAAgB,WAAW,EAAE,IAAI,CAAC,WAAW;IAC7C,gBAAgB,UAAU,EAAE,IAAI,CAAC,UAAU;IAC3C,gBAAgB,eAAe,EAAE,IAAI,CAAC,eAAe;IACrD,gBAAgB,SAAS,EAAE,IAAI,CAAC,SAAS;IACzC,gBAAgB,OAAO,EAAE,IAAI,CAAC,OAAO;IACrC,aAAa,CAAC,CAAC;AACf;IACA,YAAY,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;IAClC,gBAAgB,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;IACpD,aAAa;IACb,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE;IACpD,YAAY,IAAI,IAAI,GAAG,IAAI,CAAC;AAC5B;IACA,YAAY,IAAI,gBAAgB,GAAG,yBAAyB,EAAE,KAAK,IAAI,CAAC;AACxE;IACA,YAAY,IAAI,SAAS,CAAC,KAAK,YAAY,mBAAmB,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE;IACrF,gBAAgB,gBAAgB,GAAG,KAAK,CAAC;IACzC,aAAa,MAAM,IAAI,SAAS,CAAC,KAAK,KAAK,IAAI,IAAI,SAAS,CAAC,KAAK,KAAK,IAAI,IAAI,SAAS,CAAC,KAAK,KAAK,SAAS,CAAC,KAAK,EAAE;IACpH,gBAAgB,gBAAgB,GAAG,KAAK,CAAC;IACzC,aAAa;AACb;IACA,YAAY,IAAI,gBAAgB,KAAK,IAAI,EAAE;IAC3C,gBAAgB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;IAC1C,gBAAgB,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;IACpD,aAAa,MAAM;IACnB,gBAAgB,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,WAAW;IAC3D,oBAAoB,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,WAAW;IAC/D;IACA,wBAAwB,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;IAC5D,wBAAwB,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;IAC5D,qBAAqB,CAAC,CAAC;IACvB,iBAAiB,CAAC,CAAC;IACnB,aAAa;IACb,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,CAAC,SAAS,CAAC,GAAG,EAAE;IAC7B,YAAY,YAAY,GAAG,IAAI,CAAC;IAChC,YAAY,IAAI,OAAO,SAAS,CAAC,GAAG,KAAK,UAAU,EAAE;IACrD,gBAAgB,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC;IAC7C,aAAa;IACb,YAAY,IAAI,CAAC,WAAW,GAAG,IAAI,SAAS,CAAC,WAAW,EAAE;IAC1D,gBAAgB,IAAI,EAAE,KAAK;IAC3B,gBAAgB,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,GAAG;IAChD,gBAAgB,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE;IAC3C,gBAAgB,WAAW,EAAE,IAAI,CAAC,WAAW;IAC7C,gBAAgB,YAAY,EAAE,YAAY;IAC1C,gBAAgB,QAAQ,EAAE,QAAQ,CAAC,GAAG;IACtC,aAAa,CAAC,CAAC;IACf,YAAY,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC;IAC9C,SAAS;IACT,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,aAAa,GAAG,SAAS,QAAQ,EAAE;IAC5C,QAAQ,QAAQ,GAAG,QAAQ,IAAI,WAAW,EAAE,CAAC;AAC7C;IACA,QAAQ,IAAI,IAAI,CAAC,aAAa,EAAE;IAChC,YAAY,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,SAAS,OAAO,EAAE;IAC/D,gBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC3C,aAAa,CAAC,CAAC;IACf,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,aAAa,EAAE;IAChC,YAAY,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,SAAS,OAAO,EAAE;IAC/D,gBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC3C,aAAa,CAAC,CAAC;IACf,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE;IAC9B,YAAY,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS,OAAO,EAAE;IAC7D,gBAAgB,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACzC,aAAa,CAAC,CAAC;IACf,SAAS;IACT,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,cAAc,GAAG,WAAW;IACrC,QAAQ,IAAI,IAAI,CAAC,aAAa,EAAE;IAChC,YAAY,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;IAChD,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,aAAa,EAAE;IAChC,YAAY,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;IAChD,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE;IAC9B,YAAY,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC;IAC9C,SAAS;IACT,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,eAAe,GAAG,WAAW;IACtC,QAAQ,IAAI,IAAI,CAAC,aAAa,EAAE;IAChC,YAAY,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE,CAAC;IACjD,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,aAAa,EAAE;IAChC,YAAY,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE,CAAC;IACjD,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE;IAC9B,YAAY,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC;IAC/C,SAAS;IACT,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,OAAO,GAAG,SAAS,QAAQ,EAAE;IACtC,QAAQ,IAAI,MAAM,GAAG,EAAE,CAAC;AACxB;IACA,QAAQ,IAAI,IAAI,CAAC,aAAa,EAAE;IAChC,YAAY,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;IACxD,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,aAAa,EAAE;IAChC,YAAY,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;IACxD,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE;IAC9B,YAAY,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;IACpD,SAAS;AACT;IACA,QAAQ,IAAI,QAAQ,EAAE;IACtB,YAAY,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC7B,SAAS;AACT;IACA,QAAQ,OAAO,MAAM,CAAC;IACtB,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,OAAO,GAAG,WAAW;IAC9B,QAAQ,IAAI,IAAI,CAAC,aAAa,EAAE;IAChC,YAAY,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;IACzC,YAAY,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;IACtC,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,aAAa,EAAE;IAChC,YAAY,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;IACzC,YAAY,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;IACtC,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE;IAC9B,YAAY,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;IACvC,YAAY,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IACpC,SAAS;IACT,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,UAAU,GAAG,SAAS,QAAQ,EAAE;IACzC,QAAQ,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE;IACpC,YAAY,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE;IAC1C,gBAAgB,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE;IAC/D,oBAAoB,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE;IACnE,wBAAwB,QAAQ,CAAC;IACjC,4BAA4B,KAAK,EAAE,aAAa;IAChD,4BAA4B,KAAK,EAAE,aAAa;IAChD,yBAAyB,CAAC,CAAC;IAC3B,qBAAqB,CAAC,CAAC;IACvB,iBAAiB,CAAC,CAAC;IACnB,aAAa,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE;IACnC,gBAAgB,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE;IAC/D,oBAAoB,QAAQ,CAAC;IAC7B,wBAAwB,KAAK,EAAE,aAAa;IAC5C,qBAAqB,CAAC,CAAC;IACvB,iBAAiB,CAAC,CAAC;IACnB,aAAa,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE;IACnC,gBAAgB,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE;IAC/D,oBAAoB,QAAQ,CAAC;IAC7B,wBAAwB,KAAK,EAAE,aAAa;IAC5C,qBAAqB,CAAC,CAAC;IACvB,iBAAiB,CAAC,CAAC;IACnB,aAAa;IACb,SAAS,CAAC,CAAC;AACX;IACA,QAAQ,SAAS,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE;IAC9C,YAAY,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;IAC/C,gBAAgB,IAAI,SAAS,GAAG,kBAAkB,CAAC,SAAS,QAAQ,CAAC,KAAK,EAAE;IAC5E,oBAAoB,WAAW,CAAC,IAAI,cAAc,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3E,iBAAiB,CAAC,CAAC;AACnB;IACA,gBAAgB,SAAS,CAAC,SAAS,GAAG,SAAS,KAAK,EAAE;IACtD,oBAAoB,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3C,iBAAiB,CAAC;AAClB;IACA,gBAAgB,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAC5C,aAAa,MAAM;IACnB,gBAAgB,IAAI,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;IAC9C,gBAAgB,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC3C,gBAAgB,MAAM,CAAC,MAAM,GAAG,SAAS,KAAK,EAAE;IAChD,oBAAoB,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACpD,iBAAiB,CAAC;IAClB,aAAa;IACb,SAAS;AACT;IACA,QAAQ,SAAS,kBAAkB,CAAC,SAAS,EAAE;IAC/C,YAAY,IAAI,IAAI,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE;IACzE,gBAAgB,oCAAoC,GAAG,SAAS,CAAC,IAAI,GAAG,cAAc;IACtF,aAAa,EAAE;IACf,gBAAgB,IAAI,EAAE,wBAAwB;IAC9C,aAAa,CAAC,CAAC,CAAC;AAChB;IACA,YAAY,IAAI,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;IAC1C,YAAY,IAAI,GAAG,CAAC;IACpB,YAAY,IAAI,OAAO,GAAG,KAAK,WAAW,EAAE;IAC5C,gBAAgB,GAAG,GAAG,GAAG,CAAC;IAC1B,aAAa,MAAM,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;IACzD,gBAAgB,GAAG,GAAG,SAAS,CAAC;IAChC,aAAa,MAAM;IACnB,gBAAgB,MAAM,qCAAqC,CAAC;IAC5D,aAAa;IACb,YAAY,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACtC,YAAY,OAAO,MAAM,CAAC;IAC1B,SAAS;IACT,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,WAAW,GAAG,WAAW;IAClC,QAAQ,SAAS,CAAC,WAAW,CAAC;IAC9B,YAAY,KAAK,EAAE,IAAI,CAAC,aAAa;IACrC,YAAY,KAAK,EAAE,IAAI,CAAC,aAAa;IACrC,YAAY,GAAG,EAAE,IAAI,CAAC,WAAW;IACjC,SAAS,CAAC,CAAC;IACX,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,IAAI,GAAG,SAAS,IAAI,EAAE;IAC/B,QAAQ,IAAI,GAAG,IAAI,IAAI;IACvB,YAAY,KAAK,EAAE,IAAI;IACvB,YAAY,KAAK,EAAE,IAAI;IACvB,YAAY,GAAG,EAAE,IAAI;IACrB,SAAS,CAAC;AACV;IACA,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE;IAChD,YAAY,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;IACtF,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE;IAChD,YAAY,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;IACtF,SAAS;IACT,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,WAAW,EAAE;IAC5C,YAAY,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ,GAAG,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;IAChF,SAAS;IACT,KAAK,CAAC;IACN,CAAC;AACD;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,UAAU,CAAC,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC;AAC/C;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,UAAU,CAAC,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC;AAC/C;IACA,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;IACtC,IAAI,SAAS,CAAC,UAAU,GAAG,UAAU,CAAC;IACtC,CAAC;AACD;IACA,IAAI,oBAAoB,GAAG,qFAAqF,CAAC;AACjH;IACA,CAAC,SAAS,IAAI,EAAE;IAChB,IAAI,IAAI,CAAC,IAAI,EAAE;IACf,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;IACvC,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAI,IAAI,OAAOU,cAAM,KAAK,WAAW,EAAE;IACvC,QAAQ,OAAO;IACf,KAAK;AACL;IACA,IAAIA,cAAM,CAAC,SAAS,GAAG;IACvB,QAAQ,SAAS,EAAE,oBAAoB;IACvC,QAAQ,YAAY,EAAE,WAAW,EAAE;IACnC,KAAK,CAAC;AACN;IACA,IAAI,IAAI,CAACA,cAAM,CAAC,OAAO,EAAE;IACzB,QAAQA,cAAM,CAAC,OAAO,GAAG,EAAE,CAAC;IAC5B,KAAK;AACL;IACA,IAAI,IAAI,OAAOA,cAAM,CAAC,OAAO,CAAC,GAAG,KAAK,WAAW,IAAI,OAAOA,cAAM,CAAC,OAAO,CAAC,KAAK,KAAK,WAAW,EAAE;IAClG,QAAQA,cAAM,CAAC,OAAO,CAAC,KAAK,GAAGA,cAAM,CAAC,OAAO,CAAC,GAAG,GAAGA,cAAM,CAAC,OAAO,CAAC,GAAG,IAAI,WAAW;IACrF,YAAY,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACnC,SAAS,CAAC;IACV,KAAK;AACL;IACA,IAAI,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;IACzC;IACA,QAAQ,IAAI,CAAC,QAAQ,GAAG;IACxB,YAAY,eAAe,EAAE;IAC7B,gBAAgB,WAAW,EAAE,WAAW;IACxC,oBAAoB,OAAO,EAAE,CAAC;IAC9B,iBAAiB;IACjB,aAAa;IACb,SAAS,CAAC;AACV;IACA,QAAQ,QAAQ,CAAC,aAAa,GAAG,QAAQ,CAAC,aAAa,GAAG,QAAQ,CAAC,gBAAgB,GAAG,WAAW;IACjG,YAAY,IAAI,GAAG,GAAG;IACtB,gBAAgB,UAAU,EAAE,WAAW;IACvC,oBAAoB,OAAO,GAAG,CAAC;IAC/B,iBAAiB;IACjB,gBAAgB,IAAI,EAAE,WAAW,EAAE;IACnC,gBAAgB,KAAK,EAAE,WAAW,EAAE;IACpC,gBAAgB,SAAS,EAAE,WAAW,EAAE;IACxC,gBAAgB,SAAS,EAAE,WAAW;IACtC,oBAAoB,OAAO,EAAE,CAAC;IAC9B,iBAAiB;IACjB,gBAAgB,KAAK,EAAE,EAAE;IACzB,aAAa,CAAC;IACd,YAAY,OAAO,GAAG,CAAC;IACvB,SAAS,CAAC;AACV;IACA,QAAQ,IAAI,CAAC,gBAAgB,GAAG,WAAW,EAAE,CAAC;IAC9C,KAAK;AACL;IACA,IAAI,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;IACzC;IACA,QAAQ,IAAI,CAAC,QAAQ,GAAG;IACxB,YAAY,QAAQ,EAAE,OAAO;IAC7B,YAAY,IAAI,EAAE,EAAE;IACpB,YAAY,IAAI,EAAE,EAAE;IACpB,SAAS,CAAC;IACV,KAAK;AACL;IACA,IAAI,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;IACvC;IACA,QAAQ,IAAI,CAAC,MAAM,GAAG;IACtB,YAAY,KAAK,EAAE,CAAC;IACpB,YAAY,MAAM,EAAE,CAAC;IACrB,SAAS,CAAC;IACV,KAAK;AACL;IACA,IAAI,IAAI,OAAO,GAAG,KAAK,WAAW,EAAE;IACpC;IACA,QAAQ,IAAI,CAAC,GAAG,GAAG;IACnB,YAAY,eAAe,EAAE,WAAW;IACxC,gBAAgB,OAAO,EAAE,CAAC;IAC1B,aAAa;IACb,YAAY,eAAe,EAAE,WAAW;IACxC,gBAAgB,OAAO,EAAE,CAAC;IAC1B,aAAa;IACb,SAAS,CAAC;IACV,KAAK;AACL;IACA;IACA,IAAI,IAAI,CAAC,MAAM,GAAGA,cAAM,CAAC;IACzB,CAAC,EAAE,OAAOA,cAAM,KAAK,WAAW,GAAGA,cAAM,GAAG,IAAI,CAAC,CAAC;AAClD;IACA;IACA;AACA;IACA;AACA;IACA;IACA,IAAI,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC;IACzD,IAAI,OAAO,qBAAqB,KAAK,WAAW,EAAE;IAClD,IAAI,IAAI,OAAO,2BAA2B,KAAK,WAAW,EAAE;IAC5D;IACA,QAAQ,qBAAqB,GAAG,2BAA2B,CAAC;IAC5D,KAAK,MAAM,IAAI,OAAO,wBAAwB,KAAK,WAAW,EAAE;IAChE;IACA,QAAQ,qBAAqB,GAAG,wBAAwB,CAAC;IACzD,KAAK,MAAM,IAAI,OAAO,uBAAuB,KAAK,WAAW,EAAE;IAC/D;IACA,QAAQ,qBAAqB,GAAG,uBAAuB,CAAC;IACxD,KAAK,MAAM,IAAI,OAAO,qBAAqB,KAAK,WAAW,EAAE;IAC7D;IACA,QAAQ,IAAI,QAAQ,GAAG,CAAC,CAAC;AACzB;IACA;IACA,QAAQ,qBAAqB,GAAG,SAAS,QAAQ,EAAE,OAAO,EAAE;IAC5D,YAAY,IAAI,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IAChD,YAAY,IAAI,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,IAAI,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC;IACrE,YAAY,IAAI,EAAE,GAAG,UAAU,CAAC,WAAW;IAC3C,gBAAgB,QAAQ,CAAC,QAAQ,GAAG,UAAU,CAAC,CAAC;IAChD,aAAa,EAAE,UAAU,CAAC,CAAC;IAC3B,YAAY,QAAQ,GAAG,QAAQ,GAAG,UAAU,CAAC;IAC7C,YAAY,OAAO,EAAE,CAAC;IACtB,SAAS,CAAC;IACV,KAAK;IACL,CAAC;AACD;IACA;IACA,IAAI,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;IACvD,IAAI,OAAO,oBAAoB,KAAK,WAAW,EAAE;IACjD,IAAI,IAAI,OAAO,0BAA0B,KAAK,WAAW,EAAE;IAC3D;IACA,QAAQ,oBAAoB,GAAG,0BAA0B,CAAC;IAC1D,KAAK,MAAM,IAAI,OAAO,uBAAuB,KAAK,WAAW,EAAE;IAC/D;IACA,QAAQ,oBAAoB,GAAG,uBAAuB,CAAC;IACvD,KAAK,MAAM,IAAI,OAAO,sBAAsB,KAAK,WAAW,EAAE;IAC9D;IACA,QAAQ,oBAAoB,GAAG,sBAAsB,CAAC;IACtD,KAAK,MAAM,IAAI,OAAO,oBAAoB,KAAK,WAAW,EAAE;IAC5D;IACA,QAAQ,oBAAoB,GAAG,SAAS,EAAE,EAAE;IAC5C,YAAY,YAAY,CAAC,EAAE,CAAC,CAAC;IAC7B,SAAS,CAAC;IACV,KAAK;IACL,CAAC;AACD;IACA;IACA,IAAI,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACvC;IACA,IAAI,OAAO,YAAY,KAAK,WAAW,EAAE;IACzC,IAAI,IAAI,OAAO,kBAAkB,KAAK,WAAW,EAAE;IACnD;IACA,QAAQ,YAAY,GAAG,kBAAkB,CAAC;IAC1C,KAAK;AACL;IACA,IAAI,IAAI,OAAO,eAAe,KAAK,WAAW,EAAE;IAChD;IACA,QAAQ,YAAY,GAAG,eAAe,CAAC;IACvC,KAAK;IACL,CAAC;AACD;IACA;IACA,IAAI,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;AACrB;IACA,IAAI,OAAO,GAAG,KAAK,WAAW,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;IACpE;IACA,IAAI,GAAG,GAAG,SAAS,CAAC;IACpB,CAAC;AACD;IACA,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,OAAO,SAAS,CAAC,YAAY,KAAK,WAAW,EAAE;IACvF,IAAI,IAAI,OAAO,SAAS,CAAC,kBAAkB,KAAK,WAAW,EAAE;IAC7D,QAAQ,SAAS,CAAC,YAAY,GAAG,SAAS,CAAC,kBAAkB,CAAC;IAC9D,KAAK;AACL;IACA,IAAI,IAAI,OAAO,SAAS,CAAC,eAAe,KAAK,WAAW,EAAE;IAC1D,QAAQ,SAAS,CAAC,YAAY,GAAG,SAAS,CAAC,eAAe,CAAC;IAC3D,KAAK;IACL,CAAC;AACD;IACA,IAAI,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,UAAU,IAAI,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IACpH,IAAI,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3E,IAAI,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,UAAU,IAAI,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACxI,IAAI,QAAQ,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,SAAS,CAAC,kBAAkB,KAAK,UAAU,EAAE,IAAI,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AACtJ;IACA,IAAI,QAAQ,GAAG,gCAAgC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AAC1E;IACA,IAAI,QAAQ,IAAI,CAAC,QAAQ,IAAI,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE;IAC1E,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,QAAQ,GAAG,IAAI,CAAC;IACpB,CAAC;AACD;IACA,IAAI,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACrC;IACA,IAAI,OAAO,WAAW,KAAK,WAAW,IAAI,OAAO,iBAAiB,KAAK,WAAW,EAAE;IACpF,IAAI,WAAW,GAAG,iBAAiB,CAAC;IACpC,CAAC;AACD;IACA;IACA,IAAI,OAAO,WAAW,KAAK,WAAW,EAAE;IACxC;IACA,IAAI,IAAI,OAAO,WAAW,CAAC,SAAS,CAAC,IAAI,KAAK,WAAW,EAAE;IAC3D,QAAQ,WAAW,CAAC,SAAS,CAAC,IAAI,GAAG,WAAW;IAChD,YAAY,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,SAAS,KAAK,EAAE;IACrD,gBAAgB,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,aAAa,CAAC,CAAC;IACf,SAAS,CAAC;IACV,KAAK;IACL,CAAC;AACD;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,SAAS,WAAW,CAAC,KAAK,EAAE;IAC5B,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC;IACjB,IAAI,IAAI,KAAK,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAClD,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE;IACrB,QAAQ,OAAO,SAAS,CAAC;IACzB,KAAK;IACL,IAAI,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACpE,IAAI,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACpE,CAAC;AACD;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,SAAS,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE;IAC5C,IAAI,IAAI,CAAC,IAAI,EAAE;IACf,QAAQ,MAAM,0BAA0B,CAAC;IACzC,KAAK;AACL;IACA,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;IACpB,QAAQ,IAAI;IACZ,YAAY,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IACrC,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE;IACtB,KAAK;AACL;IACA,IAAI,IAAI,aAAa,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,YAAY,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,IAAI,IAAI,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;IAC3C;IACA,QAAQ,aAAa,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,KAAK;IACL,IAAI,IAAI,QAAQ,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE;IAClD,QAAQ,IAAI,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3C,QAAQ,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC/B,QAAQ,aAAa,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACpC,KAAK;AACL;IACA,IAAI,IAAI,YAAY,GAAG,CAAC,QAAQ,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,SAAS,CAAC,IAAI,GAAG,GAAG,aAAa,CAAC;AAChH;IACA,IAAI,IAAI,OAAO,SAAS,CAAC,gBAAgB,KAAK,WAAW,EAAE;IAC3D,QAAQ,OAAO,SAAS,CAAC,gBAAgB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC9D,KAAK,MAAM,IAAI,OAAO,SAAS,CAAC,UAAU,KAAK,WAAW,EAAE;IAC5D,QAAQ,OAAO,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACxD,KAAK;AACL;IACA,IAAI,IAAI,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAChD,IAAI,SAAS,CAAC,IAAI,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAC/C,IAAI,SAAS,CAAC,QAAQ,GAAG,YAAY,CAAC;AACtC;IACA,IAAI,SAAS,CAAC,KAAK,GAAG,2CAA2C,CAAC;IAClE,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;AACvE;IACA,IAAI,IAAI,OAAO,SAAS,CAAC,KAAK,KAAK,UAAU,EAAE;IAC/C,QAAQ,SAAS,CAAC,KAAK,EAAE,CAAC;IAC1B,KAAK,MAAM;IACX,QAAQ,SAAS,CAAC,MAAM,GAAG,QAAQ,CAAC;IACpC,QAAQ,SAAS,CAAC,aAAa,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE;IACxD,YAAY,IAAI,EAAE,MAAM;IACxB,YAAY,OAAO,EAAE,IAAI;IACzB,YAAY,UAAU,EAAE,IAAI;IAC5B,SAAS,CAAC,CAAC,CAAC;IACZ,KAAK;AACL;IACA,IAAI,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;AACD;IACA;IACA;IACA;IACA,SAAS,UAAU,GAAG;IACtB;IACA,IAAI,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,UAAU,EAAE;IACnH,QAAQ,OAAO,IAAI,CAAC;IACpB,KAAK;AACL;IACA;IACA,IAAI,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE;IAC/G,QAAQ,OAAO,IAAI,CAAC;IACpB,KAAK;AACL;IACA;IACA,IAAI,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,OAAO,SAAS,CAAC,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;IAClI,QAAQ,OAAO,IAAI,CAAC;IACpB,KAAK;AACL;IACA,IAAI,OAAO,KAAK,CAAC;IACjB,CAAC;AACD;IACA,SAAS,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE;IACjC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;IACtC,QAAQ,OAAO,EAAE,CAAC;IAClB,KAAK;AACL;IACA,IAAI,OAAO,MAAM,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;IACjD,QAAQ,OAAO,CAAC,CAAC,IAAI,MAAM,IAAI,IAAI,OAAO,CAAC,CAAC;IAC5C,KAAK,CAAC,CAAC;IACP,CAAC;AACD;IACA,SAAS,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE;IACvC,IAAI,IAAI,WAAW,IAAI,OAAO,EAAE;IAChC,QAAQ,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC;IACnC,KAAK,MAAM,IAAI,cAAc,IAAI,OAAO,EAAE;IAC1C,QAAQ,OAAO,CAAC,YAAY,GAAG,MAAM,CAAC;IACtC,KAAK,MAAM;IACX,QAAQ,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC;IACnC,KAAK;IACL,CAAC;AACD;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,SAAS,eAAe,CAAC,SAAS,EAAE,QAAQ,EAAE;IAC9C;IACA,IAAI,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE;IACrC,QAAQ,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAClF,KAAK;AACL;IACA,IAAI,IAAI,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;IACnC,IAAI,IAAI,OAAO,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;IACrC,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AAC3B;IACA,IAAI,IAAI,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;IACtC,IAAI,UAAU,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE;IACpC,QAAQ,IAAI,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnD,QAAQ,QAAQ,CAAC,OAAO,CAAC,SAAS,OAAO,EAAE;IAC3C,YAAY,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjC,SAAS,CAAC,CAAC;IACX,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;IACtB,QAAQ,IAAI,kBAAkB,GAAG,KAAK,CAAC,oBAAoB,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAC5G,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAC1D,QAAQ,IAAI,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC,kBAAkB,EAAE,IAAI,CAAC,EAAE;IAC3D,YAAY,IAAI,EAAE,YAAY;IAC9B,SAAS,CAAC,CAAC;AACX;IACA,QAAQ,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC1B,KAAK,CAAC;IACN,IAAI,UAAU,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;AACD;IACA,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;IACtC,IAAI,SAAS,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;IACtD,IAAI,SAAS,CAAC,SAAS,GAAG,SAAS,CAAC;IACpC,IAAI,SAAS,CAAC,eAAe,GAAG,eAAe,CAAC;IAChD,IAAI,SAAS,CAAC,WAAW,GAAG,WAAW,CAAC;IACxC,IAAI,SAAS,CAAC,UAAU,GAAG,UAAU,CAAC;IACtC,CAAC;AACD;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;AACA;IACA,IAAI,OAAO,GAAG,EAAE,CAAC;AACjB;IACA,IAAI,OAAO,YAAY,KAAK,WAAW,EAAE;IACzC,IAAI,OAAO,CAAC,YAAY,GAAG,YAAY,CAAC;IACxC,CAAC,MAAM,IAAI,OAAO,kBAAkB,KAAK,WAAW,EAAE;IACtD,IAAI,OAAO,CAAC,YAAY,GAAG,kBAAkB,CAAC;IAC9C,CAAC;AACD;IACA,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;IACtC,IAAI,SAAS,CAAC,OAAO,GAAG,OAAO,CAAC;IAChC,CAAC;AACD;IACA,SAAS,yBAAyB,GAAG;IACrC,IAAI,IAAI,SAAS,IAAI,QAAQ,IAAI,MAAM,EAAE;IACzC,QAAQ,OAAO,IAAI,CAAC;IACpB,KAAK;IAGL,IAAI,IAAI,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC;IACnC,IAAI,IAAI,WAAW,GAAG,EAAE,GAAG,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAC5D,IAAI,IAAI,YAAY,GAAG,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC1D,QAAoB,SAAS,CAAA,CAAE,GAAG;AAClC;IACA,IAAI,IAAI,QAAQ,IAAI,OAAO,EAAE;IAC7B,QAAQ,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3C,QAAQ,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;IACpD,KAAK;AACL;IACA;IACA,IAAI,IAAI,CAAC,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE;IAChD,QAAQ,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACnD,KAAK;AACL;IACA,IAAI,IAAI,CAAC,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE;IAChD,QAAQ,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACnD,KAAK;AACL;IACA,IAAI,YAAY,GAAG,QAAQ,CAAC,EAAE,GAAG,WAAW,EAAE,EAAE,CAAC,CAAC;AAClD;IACA,IAAI,IAAI,KAAK,CAAC,YAAY,CAAC,EAAE;IAC7B,QAAQ,WAAW,GAAG,EAAE,GAAG,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAC5D,QAAQ,YAAY,GAAG,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC1D,KAAK;AACL;IACA,IAAI,OAAO,YAAY,IAAI,EAAE,CAAC;IAC9B,CAAC;AACD;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;AACA;IACA,SAAS,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE;IAClD,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC;AACpB;IACA,IAAI,IAAI,OAAO,WAAW,KAAK,WAAW,EAAE;IAC5C,QAAQ,MAAM,2CAA2C,CAAC;IAC1D,KAAK;AACL;IACA,IAAI,IAAI,OAAO,aAAa,KAAK,WAAW,EAAE;IAC9C,QAAQ,MAAM,4HAA4H,CAAC;IAC3I,KAAK;AACL;IACA,IAAI,MAAM,GAAG,MAAM,IAAI;IACvB;IACA,QAAQ,QAAQ,EAAE,YAAY;IAC9B,KAAK,CAAC;AACN;IACA,IAAI,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE;IACjC,QAAQ,IAAI,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,MAAM,IAAI,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE;IAC9F,YAAY,IAAI,MAAM,CAAC;IACvB,YAAY,IAAI,CAAC,CAAC,SAAS,CAAC,eAAe,EAAE;IAC7C,gBAAgB,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;IAC3C,gBAAgB,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,aAAa,MAAM;IACnB;IACA,gBAAgB,MAAM,GAAG,IAAI,WAAW,CAAC,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1E,aAAa;IACb,YAAY,WAAW,GAAG,MAAM,CAAC;IACjC,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE;IAClG,YAAY,MAAM,CAAC,QAAQ,GAAG,QAAQ,GAAG,YAAY,GAAG,WAAW,CAAC;IACpE,SAAS;AACT;IACA,QAAQ,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,KAAK,WAAW,IAAI,CAAC,CAAC,SAAS,CAAC,eAAe,EAAE;IACxH;IACA,YAAY,MAAM,CAAC,QAAQ,GAAG,WAAW,CAAC;IAC1C,SAAS;IACT,KAAK;AACL;IACA,IAAI,IAAI,YAAY,GAAG,EAAE,CAAC;AAC1B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,eAAe,GAAG,WAAW;IACtC,QAAQ,OAAO,YAAY,CAAC;IAC5B,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW;IAC7B;IACA,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACzB,QAAQ,IAAI,CAAC,iBAAiB,EAAE,CAAC;IACjC,QAAQ,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;IAC7B,QAAQ,SAAS,GAAG,EAAE,CAAC;IACvB,QAAQ,YAAY,GAAG,EAAE,CAAC;AAC1B;IACA,QAAQ,IAAI,aAAa,GAAG,MAAM,CAAC;AACnC;IACA,QAAQ,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACjC,YAAY,OAAO,CAAC,GAAG,CAAC,kDAAkD,EAAE,aAAa,CAAC,CAAC;IAC3F,SAAS;AACT;IACA,QAAQ,IAAI,aAAa,EAAE;IAC3B;IACA,YAAY,aAAa,GAAG,IAAI,CAAC;IACjC,SAAS;AACT;IACA,QAAQ,IAAI,QAAQ,IAAI,CAAC,yBAAyB,EAAE,EAAE;IACtD;IACA,YAAY,aAAa,GAAG,WAAW,CAAC;IACxC,SAAS;AACT;IACA,QAAQ,IAAI,OAAO,aAAa,CAAC,eAAe,KAAK,UAAU,IAAI,aAAa,CAAC,QAAQ,EAAE;IAC3F,YAAY,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE;IACxE,gBAAgB,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACzC,oBAAoB,OAAO,CAAC,IAAI,CAAC,oDAAoD,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC/G,iBAAiB;AACjB;IACA,gBAAgB,aAAa,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI,KAAK,OAAO,GAAG,YAAY,GAAG,YAAY,CAAC;IAC/F,aAAa;IACb,SAAS;AACT;IACA;IACA,QAAQ,IAAI;IACZ,YAAY,aAAa,GAAG,IAAI,aAAa,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;AAC1E;IACA;IACA,YAAY,MAAM,CAAC,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC;IACrD,SAAS,CAAC,OAAO,CAAC,EAAE;IACpB;IACA,YAAY,aAAa,GAAG,IAAI,aAAa,CAAC,WAAW,CAAC,CAAC;IAC3D,SAAS;AACT;IACA;IACA,QAAQ,IAAI,aAAa,CAAC,QAAQ,IAAI,CAAC,aAAa,CAAC,eAAe,IAAI,mBAAmB,IAAI,aAAa,IAAI,aAAa,CAAC,iBAAiB,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,KAAK,EAAE;IACnL,YAAY,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACrC,gBAAgB,OAAO,CAAC,IAAI,CAAC,oDAAoD,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC3G,aAAa;IACb,SAAS;AACT;IACA;IACA,QAAQ,aAAa,CAAC,eAAe,GAAG,SAAS,CAAC,EAAE;IACpD,YAAY,IAAI,CAAC,CAAC,IAAI,EAAE;IACxB,gBAAgB,SAAS,CAAC,IAAI,CAAC,mBAAmB,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/E,aAAa;AACb;IACA,YAAY,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,EAAE;IACtD,gBAAgB,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE;IAC3C,oBAAoB,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC9C,oBAAoB,eAAe,EAAE,CAAC;AACtC;IACA,oBAAoB,IAAI,OAAO,MAAM,CAAC,eAAe,KAAK,UAAU,EAAE;IACtE;IACA,wBAAwB,IAAI,IAAI,GAAG,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;IACtF,4BAA4B,IAAI,EAAE,WAAW,CAAC,aAAa,CAAC;IAC5D,yBAAyB,CAAC,CAAC;IAC3B,wBAAwB,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACrD,qBAAqB;IACrB,iBAAiB;IACjB,gBAAgB,OAAO;IACvB,aAAa;AACb;IACA,YAAY,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE;IAC3E;IACA;IACA,gBAAgB,IAAI,IAAI,CAAC,iBAAiB,EAAE;IAC5C,oBAAoB,IAAI,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC,EAAE,EAAE;IACxD,wBAAwB,IAAI,EAAE,WAAW,CAAC,aAAa,CAAC;IACxD,qBAAqB,CAAC,CAAC,CAAC;IACxB,oBAAoB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAClD,iBAAiB;IACjB,gBAAgB,OAAO;IACvB,aAAa;AACb;IACA,YAAY,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;IAC3E,gBAAgB,IAAI,EAAE,WAAW,CAAC,aAAa,CAAC;IAChD,aAAa,CAAC,CAAC;AACf;IACA,YAAY,IAAI,IAAI,CAAC,iBAAiB,EAAE;IACxC,gBAAgB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClD,gBAAgB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAC9C,aAAa;IACb,SAAS,CAAC;AACV;IACA,QAAQ,aAAa,CAAC,OAAO,GAAG,WAAW;IAC3C,YAAY,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtC,SAAS,CAAC;AACV;IACA,QAAQ,aAAa,CAAC,OAAO,GAAG,WAAW;IAC3C,YAAY,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrC,SAAS,CAAC;AACV;IACA,QAAQ,aAAa,CAAC,QAAQ,GAAG,WAAW;IAC5C,YAAY,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtC,SAAS,CAAC;AACV;IACA,QAAQ,aAAa,CAAC,MAAM,GAAG,WAAW;IAC1C,YAAY,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtC,SAAS,CAAC;AACV;IACA,QAAQ,aAAa,CAAC,OAAO,GAAG,SAAS,KAAK,EAAE;IAChD,YAAY,IAAI,CAAC,KAAK,EAAE;IACxB,gBAAgB,OAAO;IACvB,aAAa;AACb;IACA,YAAY,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;IAC7B,gBAAgB,KAAK,CAAC,IAAI,GAAG,cAAc,CAAC;IAC5C,aAAa;AACb;IACA,YAAY,SAAS,CAAC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC;AAC9C;IACA,YAAY,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACrC;IACA,gBAAgB,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE;IACxF,oBAAoB,OAAO,CAAC,KAAK,CAAC,gGAAgG,EAAE,KAAK,CAAC,CAAC;IAC3I,iBAAiB,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE;IAC/F,oBAAoB,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,aAAa,CAAC,QAAQ,EAAE,qBAAqB,EAAE,KAAK,CAAC,CAAC;IACvG,iBAAiB,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE;IAC3F,oBAAoB,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;IACzE,iBAAiB;AACjB;IACA;IACA,qBAAqB,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE;IACvD,oBAAoB,OAAO,CAAC,KAAK,CAAC,2IAA2I,EAAE,KAAK,CAAC,CAAC;IACtL,iBAAiB,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,2BAA2B,EAAE;IACvE,oBAAoB,OAAO,CAAC,KAAK,CAAC,qQAAqQ,EAAE,KAAK,CAAC,CAAC;IAChT,iBAAiB,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,qBAAqB,EAAE;IACjE,oBAAoB,OAAO,CAAC,KAAK,CAAC,wJAAwJ,EAAE,KAAK,CAAC,CAAC;IACnM,iBAAiB,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE;IAC1D,oBAAoB,OAAO,CAAC,KAAK,CAAC,8EAA8E,EAAE,KAAK,CAAC,CAAC;IACzH,iBAAiB,MAAM;IACvB,oBAAoB,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;IAChE,iBAAiB;IACjB,aAAa;AACb;IACA,YAAY,CAAC,SAAS,MAAM,EAAE;IAC9B,gBAAgB,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,aAAa,IAAI,aAAa,CAAC,KAAK,KAAK,UAAU,EAAE;IAClG,oBAAoB,OAAO,MAAM,CAAC,SAAS,CAAC;AAC5C;IACA;IACA,oBAAoB,aAAa,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IACxD,oBAAoB,OAAO;IAC3B,iBAAiB;AACjB;IACA,gBAAgB,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACzC,aAAa,GAAG,CAAC;AACjB;IACA,YAAY,IAAI,aAAa,CAAC,KAAK,KAAK,UAAU,IAAI,aAAa,CAAC,KAAK,KAAK,SAAS,EAAE;IACzF,gBAAgB,aAAa,CAAC,IAAI,EAAE,CAAC;IACrC,aAAa;IACb,SAAS,CAAC;AACV;IACA,QAAQ,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,EAAE;IAClD,YAAY,eAAe,EAAE,CAAC;IAC9B,YAAY,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAClD,SAAS,MAAM;IACf;IACA;AACA;IACA,YAAY,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACxC,SAAS;AACT;IACA,QAAQ,IAAI,MAAM,CAAC,YAAY,EAAE;IACjC,YAAY,MAAM,CAAC,YAAY,EAAE,CAAC;IAClC,SAAS;IACT,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AACzB;IACA,IAAI,SAAS,eAAe,GAAG;IAC/B,QAAQ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;AACnD;IACA,QAAQ,IAAI,OAAO,MAAM,CAAC,WAAW,KAAK,UAAU,EAAE;IACtD,YAAY,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAC7F,SAAS;IACT,KAAK;AACL;IACA,IAAI,SAAS,WAAW,CAAC,YAAY,EAAE;IACvC,QAAQ,IAAI,aAAa,IAAI,aAAa,CAAC,QAAQ,EAAE;IACrD,YAAY,OAAO,aAAa,CAAC,QAAQ,CAAC;IAC1C,SAAS;AACT;IACA,QAAQ,OAAO,YAAY,CAAC,QAAQ,IAAI,YAAY,CAAC;IACrD,KAAK;AACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,IAAI,GAAG,SAAS,QAAQ,EAAE;IACnC,QAAQ,QAAQ,GAAG,QAAQ,IAAI,WAAW,EAAE,CAAC;AAC7C;IACA,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;AACpC;IACA,QAAQ,IAAI,CAAC,aAAa,EAAE;IAC5B,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC;AAC1C;IACA,QAAQ,IAAI,aAAa,CAAC,KAAK,KAAK,WAAW,EAAE;IACjD,YAAY,aAAa,CAAC,IAAI,EAAE,CAAC;IACjC,SAAS;AACT;IACA,QAAQ,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,QAAQ,EAAE;IAClD,YAAY,UAAU,CAAC,WAAW;IAClC,gBAAgB,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,YAAY,EAAE;IACnD,oBAAoB,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC;IAC7C,iBAAiB,CAAC,CAAC;AACnB;IACA,gBAAgB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClD,aAAa,EAAE,GAAG,CAAC,CAAC;IACpB,SAAS;IACT,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,KAAK,GAAG,WAAW;IAC5B,QAAQ,IAAI,CAAC,aAAa,EAAE;IAC5B,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,aAAa,CAAC,KAAK,KAAK,WAAW,EAAE;IACjD,YAAY,aAAa,CAAC,KAAK,EAAE,CAAC;IAClC,SAAS;IACT,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW;IAC7B,QAAQ,IAAI,CAAC,aAAa,EAAE;IAC5B,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,aAAa,CAAC,KAAK,KAAK,QAAQ,EAAE;IAC9C,YAAY,aAAa,CAAC,MAAM,EAAE,CAAC;IACnC,SAAS;IACT,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,iBAAiB,GAAG,WAAW;IACxC,QAAQ,IAAI,aAAa,IAAI,aAAa,CAAC,KAAK,KAAK,WAAW,EAAE;IAClE,YAAY,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC3C,SAAS;AACT;IACA,QAAQ,mBAAmB,EAAE,CAAC;IAC9B,KAAK,CAAC;AACN;IACA,IAAI,SAAS,mBAAmB,GAAG;IACnC,QAAQ,YAAY,GAAG,EAAE,CAAC;IAC1B,QAAQ,aAAa,GAAG,IAAI,CAAC;IAC7B,QAAQ,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;IAC7B,KAAK;AACL;IACA;IACA,IAAI,IAAI,aAAa,CAAC;AACtB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,mBAAmB,GAAG,WAAW;IAC1C,QAAQ,OAAO,aAAa,CAAC;IAC7B,KAAK,CAAC;AACN;IACA,IAAI,SAAS,mBAAmB,GAAG;IACnC,QAAQ,IAAI,QAAQ,IAAI,WAAW,EAAE;IACrC,YAAY,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;IACrC,gBAAgB,OAAO,KAAK,CAAC;IAC7B,aAAa;IACb,SAAS,MAAM,IAAI,OAAO,IAAI,WAAW,EAAE;IAC3C,YAAY,IAAI,WAAW,CAAC,KAAK,EAAE;IACnC,gBAAgB,OAAO,KAAK,CAAC;IAC7B,aAAa;IACb,SAAS;IACT,QAAQ,OAAO,IAAI,CAAC;IACpB,KAAK;AACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACrB;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,QAAQ,GAAG,WAAW;IAC/B,QAAQ,IAAI,CAAC,aAAa,EAAE;IAC5B,YAAY,OAAO,UAAU,CAAC;IAC9B,SAAS;AACT;IACA,QAAQ,OAAO,aAAa,CAAC,KAAK,IAAI,UAAU,CAAC;IACjD,KAAK,CAAC;AACN;IACA;IACA,IAAI,IAAI,SAAS,GAAG,EAAE,CAAC;AACvB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,YAAY,GAAG,WAAW;IACnC,QAAQ,OAAO,SAAS,CAAC;IACzB,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,OAAO,MAAM,CAAC,sBAAsB,KAAK,WAAW,EAAE;IAC9D,QAAQ,MAAM,CAAC,sBAAsB,GAAG,KAAK,CAAC;IAC9C,KAAK;AACL;IACA,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC;AACpB;IACA;IACA;IACA,IAAI,CAAC,SAAS,MAAM,GAAG;IACvB,QAAQ,IAAI,CAAC,aAAa,IAAI,MAAM,CAAC,sBAAsB,KAAK,KAAK,EAAE;IACvE,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,mBAAmB,EAAE,KAAK,KAAK,EAAE;IAC7C,YAAY,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACrC,gBAAgB,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAC1D,aAAa;IACb,YAAY,IAAI,CAAC,IAAI,EAAE,CAAC;IACxB,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACjC,KAAK,GAAG,CAAC;AACT;IACA;IACA,IAAI,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACtC,IAAI,IAAI,CAAC,QAAQ,GAAG,WAAW;IAC/B,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC;IACzB,KAAK,CAAC;IACN,CAAC;AACD;IACA,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;IACtC,IAAI,SAAS,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;IACxD,CAAC;AACD;IACA;IACA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;AACA;IACA,SAAS,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE;IAClD,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE;IACjD,QAAQ,MAAM,kCAAkC,CAAC;IACjD,KAAK;AACL;IACA,IAAI,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;AAC1B;IACA,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC;AACpB;IACA;IACA,IAAI,IAAI,WAAW,GAAG,EAAE,CAAC;IACzB,IAAI,IAAI,YAAY,GAAG,EAAE,CAAC;IAC1B,IAAI,IAAI,SAAS,GAAG,KAAK,CAAC;IAC1B,IAAI,IAAI,eAAe,GAAG,CAAC,CAAC;IAC5B,IAAI,IAAI,WAAW,CAAC;AACpB;IACA,IAAI,IAAI,qBAAqB,GAAG,CAAC,CAAC;AAClC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACjD;IACA;IACA,IAAI,IAAI,MAAM,CAAC,WAAW,KAAK,IAAI,EAAE;IACrC,QAAQ,qBAAqB,GAAG,CAAC,CAAC;IAClC,KAAK;AACL;IACA,IAAI,IAAI,MAAM,CAAC,qBAAqB,KAAK,CAAC,EAAE;IAC5C,QAAQ,qBAAqB,GAAG,CAAC,CAAC;IAClC,KAAK;AACL;IACA,IAAI,IAAI,CAAC,qBAAqB,IAAI,qBAAqB,GAAG,CAAC,EAAE;IAC7D,QAAQ,qBAAqB,GAAG,CAAC,CAAC;IAClC,KAAK;AACL;IACA,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IAC7B,QAAQ,OAAO,CAAC,GAAG,CAAC,2DAA2D,GAAG,qBAAqB,CAAC,CAAC;IACzG,KAAK;AACL;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,OAAO,MAAM,CAAC,sBAAsB,KAAK,WAAW,EAAE;IAC9D,QAAQ,MAAM,CAAC,sBAAsB,GAAG,IAAI,CAAC;IAC7C,KAAK;AACL;IACA,IAAI,SAAS,mBAAmB,GAAG;IACnC,QAAQ,IAAI,MAAM,CAAC,sBAAsB,KAAK,KAAK,EAAE;IACrD;IACA,YAAY,OAAO,IAAI,CAAC;IACxB,SAAS;AACT;IACA,QAAQ,IAAI,QAAQ,IAAI,WAAW,EAAE;IACrC,YAAY,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;IACrC,gBAAgB,OAAO,KAAK,CAAC;IAC7B,aAAa;IACb,SAAS,MAAM,IAAI,OAAO,IAAI,WAAW,EAAE;IAC3C,YAAY,IAAI,WAAW,CAAC,KAAK,EAAE;IACnC,gBAAgB,OAAO,KAAK,CAAC;IAC7B,aAAa;IACb,SAAS;IACT,QAAQ,OAAO,IAAI,CAAC;IACpB,KAAK;AACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW;IAC7B,QAAQ,IAAI,mBAAmB,EAAE,KAAK,KAAK,EAAE;IAC7C,YAAY,MAAM,yCAAyC,CAAC;IAC5D,SAAS;AACT;IACA,QAAQ,cAAc,EAAE,CAAC;AACzB;IACA,QAAQ,qBAAqB,GAAG,QAAQ,GAAG,KAAK,CAAC;IACjD,QAAQ,SAAS,GAAG,IAAI,CAAC;AACzB;IACA,QAAQ,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,WAAW,EAAE;IACrD,YAAY,MAAM,EAAE,CAAC;IACrB,SAAS;IACT,KAAK,CAAC;AACN;IACA,IAAI,SAAS,qBAAqB,CAAC,MAAM,EAAE,QAAQ,EAAE;IACrD,QAAQ,SAAS,iBAAiB,CAAC,MAAM,EAAE,EAAE,EAAE;IAC/C,YAAY,IAAI,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACrE;IACA;IACA,YAAY,IAAI,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1D,YAAY,IAAI,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5D,YAAY,IAAI,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IAC/C,YAAY,IAAI,yBAAyB,GAAG,MAAM,CAAC,yBAAyB,CAAC;IAC7E,YAAY,IAAI,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACzD;IACA,YAAY,IAAI,qBAAqB,KAAK,CAAC,EAAE;IAC7C,gBAAgB,WAAW,GAAG,YAAY,CAAC,WAAW,EAAE,yBAAyB,CAAC,CAAC;IACnF,gBAAgB,YAAY,GAAG,YAAY,CAAC,YAAY,EAAE,yBAAyB,CAAC,CAAC;AACrF;IACA,gBAAgB,IAAI,eAAe,EAAE;IACrC,oBAAoB,WAAW,GAAG,gBAAgB,CAAC,WAAW,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC;IAC7F,oBAAoB,YAAY,GAAG,gBAAgB,CAAC,YAAY,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC;IAC/F,iBAAiB;IACjB,aAAa;AACb;IACA,YAAY,IAAI,qBAAqB,KAAK,CAAC,EAAE;IAC7C,gBAAgB,WAAW,GAAG,YAAY,CAAC,WAAW,EAAE,yBAAyB,CAAC,CAAC;AACnF;IACA,gBAAgB,IAAI,eAAe,EAAE;IACrC,oBAAoB,WAAW,GAAG,gBAAgB,CAAC,WAAW,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC;IAC7F,iBAAiB;IACjB,aAAa;AACb;IACA;IACA,YAAY,IAAI,eAAe,EAAE;IACjC,gBAAgB,UAAU,GAAG,eAAe,CAAC;IAC7C,aAAa;AACb;IACA;IACA;IACA,YAAY,SAAS,gBAAgB,CAAC,IAAI,EAAE,aAAa,EAAE,aAAa,EAAE;IAC1E,gBAAgB,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,aAAa,GAAG,aAAa,CAAC,CAAC,CAAC;IACzF,gBAAgB,IAAI,OAAO,GAAG,EAAE,CAAC;IACjC,gBAAgB,IAAI,YAAY,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,KAAK,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;IAC9E,gBAAgB,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACrC,gBAAgB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;IACvD,oBAAoB,IAAI,GAAG,GAAG,CAAC,GAAG,YAAY,CAAC;IAC/C,oBAAoB,IAAI,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IACnE,oBAAoB,IAAI,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IACjE,oBAAoB,IAAI,OAAO,GAAG,GAAG,GAAG,MAAM,CAAC;IAC/C,oBAAoB,OAAO,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;IACvF,iBAAiB;IACjB,gBAAgB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC9D,gBAAgB,OAAO,OAAO,CAAC;IAC/B,aAAa;AACb;IACA,YAAY,SAAS,iBAAiB,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE;IAC/D,gBAAgB,OAAO,MAAM,GAAG,CAAC,KAAK,GAAG,MAAM,IAAI,OAAO,CAAC;IAC3D,aAAa;AACb;IACA,YAAY,SAAS,YAAY,CAAC,aAAa,EAAE,OAAO,EAAE;IAC1D,gBAAgB,IAAI,MAAM,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC;IACvD,gBAAgB,IAAI,MAAM,GAAG,CAAC,CAAC;IAC/B,gBAAgB,IAAI,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC;AAC/C;IACA,gBAAgB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;IAC9C,oBAAoB,IAAI,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;IAClD,oBAAoB,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,oBAAoB,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC;IAC5C,iBAAiB;AACjB;IACA,gBAAgB,OAAO,MAAM,CAAC;IAC9B,aAAa;AACb;IACA,YAAY,SAAS,UAAU,CAAC,WAAW,EAAE,YAAY,EAAE;IAC3D,gBAAgB,IAAI,MAAM,GAAG,WAAW,CAAC,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;AACtE;IACA,gBAAgB,IAAI,MAAM,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;AACtD;IACA,gBAAgB,IAAI,UAAU,GAAG,CAAC,CAAC;AACnC;IACA,gBAAgB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG;IACrD,oBAAoB,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;IAC9D,oBAAoB,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;IAC/D,oBAAoB,UAAU,EAAE,CAAC;IACjC,iBAAiB;IACjB,gBAAgB,OAAO,MAAM,CAAC;IAC9B,aAAa;AACb;IACA,YAAY,SAAS,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE;IACzD,gBAAgB,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;IACxC,gBAAgB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;IAC9C,oBAAoB,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,iBAAiB;IACjB,aAAa;AACb;IACA;IACA,YAAY,IAAI,WAAW,CAAC;AAC5B;IACA,YAAY,IAAI,qBAAqB,KAAK,CAAC,EAAE;IAC7C,gBAAgB,WAAW,GAAG,UAAU,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IACpE,aAAa;AACb;IACA,YAAY,IAAI,qBAAqB,KAAK,CAAC,EAAE;IAC7C,gBAAgB,WAAW,GAAG,WAAW,CAAC;IAC1C,aAAa;AACb;IACA,YAAY,IAAI,iBAAiB,GAAG,WAAW,CAAC,MAAM,CAAC;AACvD;IACA;IACA,YAAY,IAAI,qBAAqB,GAAG,EAAE,GAAG,iBAAiB,GAAG,CAAC,CAAC;AACnE;IACA,YAAY,IAAI,MAAM,GAAG,IAAI,WAAW,CAAC,qBAAqB,CAAC,CAAC;AAChE;IACA,YAAY,IAAI,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC5C;IACA;IACA,YAAY,aAAa,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;AAC3C;IACA;IACA;IACA,YAAY,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,GAAG,iBAAiB,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;AAChE;IACA;IACA,YAAY,aAAa,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;AAC3C;IACA;IACA;IACA,YAAY,aAAa,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;AAC5C;IACA;IACA,YAAY,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;AACzC;IACA;IACA,YAAY,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AACxC;IACA;IACA,YAAY,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,qBAAqB,EAAE,IAAI,CAAC,CAAC;AAC5D;IACA;IACA,YAAY,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;AACjD;IACA;IACA,YAAY,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,UAAU,GAAG,qBAAqB,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;AAC7E;IACA;IACA,YAAY,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,qBAAqB,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;AAChE;IACA;IACA,YAAY,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;AACzC;IACA;IACA;IACA,YAAY,aAAa,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;AAC5C;IACA;IACA,YAAY,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,iBAAiB,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;AAC5D;IACA;IACA,YAAY,IAAI,GAAG,GAAG,iBAAiB,CAAC;IACxC,YAAY,IAAI,KAAK,GAAG,EAAE,CAAC;IAC3B,YAAY,IAAI,MAAM,GAAG,CAAC,CAAC;IAC3B,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;IAC1C,gBAAgB,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,MAAM,GAAG,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;IAC/E,gBAAgB,KAAK,IAAI,CAAC,CAAC;IAC3B,aAAa;AACb;IACA,YAAY,IAAI,EAAE,EAAE;IACpB,gBAAgB,OAAO,EAAE,CAAC;IAC1B,oBAAoB,MAAM,EAAE,MAAM;IAClC,oBAAoB,IAAI,EAAE,IAAI;IAC9B,iBAAiB,CAAC,CAAC;IACnB,aAAa;AACb;IACA,YAAY,WAAW,CAAC;IACxB,gBAAgB,MAAM,EAAE,MAAM;IAC9B,gBAAgB,IAAI,EAAE,IAAI;IAC1B,aAAa,CAAC,CAAC;IACf,SAAS;AACT;IACA,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAAE;IAC7B,YAAY,iBAAiB,CAAC,MAAM,EAAE,SAAS,IAAI,EAAE;IACrD,gBAAgB,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACjD,aAAa,CAAC,CAAC;IACf,YAAY,OAAO;IACnB,SAAS;AACT;AACA;IACA,QAAQ,IAAI,SAAS,GAAG,kBAAkB,CAAC,iBAAiB,CAAC,CAAC;AAC9D;IACA,QAAQ,SAAS,CAAC,SAAS,GAAG,SAAS,KAAK,EAAE;IAC9C,YAAY,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzD;IACA;IACA,YAAY,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AACrD;IACA;IACA,YAAY,SAAS,CAAC,SAAS,EAAE,CAAC;IAClC,SAAS,CAAC;AACV;IACA,QAAQ,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACtC,KAAK;AACL;IACA,IAAI,SAAS,kBAAkB,CAAC,SAAS,EAAE;IAC3C,QAAQ,IAAI,SAAS,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE;IAC1E,YAAY,qCAAqC,GAAG,SAAS,CAAC,IAAI,GAAG,cAAc;IACnF,SAAS,EAAE;IACX,YAAY,IAAI,EAAE,wBAAwB;IAC1C,SAAS,CAAC,CAAC,CAAC;AACZ;IACA,QAAQ,IAAI,MAAM,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC;IAC3C,QAAQ,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;IACrC,QAAQ,OAAO,MAAM,CAAC;IACtB,KAAK;AACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,IAAI,GAAG,SAAS,QAAQ,EAAE;IACnC,QAAQ,QAAQ,GAAG,QAAQ,IAAI,WAAW,EAAE,CAAC;AAC7C;IACA;IACA,QAAQ,SAAS,GAAG,KAAK,CAAC;AAC1B;IACA,QAAQ,qBAAqB,CAAC;IAC9B,YAAY,eAAe,EAAE,eAAe;IAC5C,YAAY,UAAU,EAAE,UAAU;IAClC,YAAY,qBAAqB,EAAE,qBAAqB;IACxD,YAAY,yBAAyB,EAAE,eAAe;IACtD,YAAY,WAAW,EAAE,WAAW;IACpC,YAAY,YAAY,EAAE,qBAAqB,KAAK,CAAC,GAAG,EAAE,GAAG,YAAY;IACzE,YAAY,QAAQ,EAAE,MAAM,CAAC,QAAQ;IACrC,SAAS,EAAE,SAAS,MAAM,EAAE,IAAI,EAAE;IAClC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,YAAY,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE;IACzC,gBAAgB,IAAI,EAAE,WAAW;IACjC,aAAa,CAAC,CAAC;AACf;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,YAAY,IAAI,CAAC,MAAM,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAClE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,YAAY,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AAC7B;IACA,YAAY,IAAI,CAAC,UAAU,GAAG,eAAe,IAAI,UAAU,CAAC;IAC5D,YAAY,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;AACzC;IACA;IACA,YAAY,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC;AAC1C;IACA,YAAY,qBAAqB,GAAG,KAAK,CAAC;AAC1C;IACA,YAAY,IAAI,QAAQ,EAAE;IAC1B,gBAAgB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,aAAa;IACb,SAAS,CAAC,CAAC;IACX,KAAK,CAAC;AACN;IACA,IAAI,IAAI,OAAO,SAAS,CAAC,OAAO,KAAK,WAAW,EAAE;IAClD,QAAQ,SAAS,CAAC,OAAO,GAAG;IAC5B,YAAY,uBAAuB,EAAE,IAAI;IACzC,YAAY,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,kBAAkB;IAC1E,SAAS,CAAC;IACV,KAAK;AACL;IACA,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,uBAAuB,IAAI,SAAS,CAAC,OAAO,CAAC,uBAAuB,CAAC,KAAK,KAAK,QAAQ,EAAE;IACpH,QAAQ,SAAS,CAAC,OAAO,CAAC,uBAAuB,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;IACzF,KAAK;AACL;IACA,IAAI,IAAI,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,uBAAuB,CAAC;AAC5D;IACA;IACA,IAAI,IAAI,UAAU,GAAG,OAAO,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC;AAClE;IACA,IAAI,IAAI,iBAAiB,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AACzE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;AACA;IACA;IACA,IAAI,IAAI,UAAU,GAAG,OAAO,MAAM,CAAC,UAAU,KAAK,WAAW,GAAG,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AACzF;IACA,IAAI,IAAI,iBAAiB,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE;IACtD,QAAQ,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACjC,YAAY,OAAO,CAAC,GAAG,CAAC,mCAAmC,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IAC7G,SAAS;IACT,KAAK;AACL;IACA,IAAI,IAAI,OAAO,CAAC,oBAAoB,EAAE;IACtC,QAAQ,WAAW,GAAG,OAAO,CAAC,oBAAoB,CAAC,UAAU,EAAE,qBAAqB,EAAE,qBAAqB,CAAC,CAAC;IAC7G,KAAK,MAAM,IAAI,OAAO,CAAC,qBAAqB,EAAE;IAC9C,QAAQ,WAAW,GAAG,OAAO,CAAC,qBAAqB,CAAC,UAAU,EAAE,qBAAqB,EAAE,qBAAqB,CAAC,CAAC;IAC9G,KAAK,MAAM;IACX,QAAQ,MAAM,8CAA8C,CAAC;IAC7D,KAAK;AACL;IACA;IACA,IAAI,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;AACpC;IACA,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;IAC5B,QAAQ,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC;IAC5C,KAAK;AACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,UAAU,GAAG,OAAO,MAAM,CAAC,UAAU,KAAK,WAAW,GAAG,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,KAAK,CAAC;AAChH;IACA,IAAI,IAAI,UAAU,GAAG,KAAK,IAAI,UAAU,GAAG,KAAK,EAAE;IAClD;IACA,QAAQ,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACjC,YAAY,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;IAC5E,SAAS;IACT,KAAK;AACL;IACA,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IAC7B,QAAQ,IAAI,MAAM,CAAC,eAAe,EAAE;IACpC,YAAY,OAAO,CAAC,GAAG,CAAC,uBAAuB,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;IAC1E,SAAS;IACT,KAAK;AACL;IACA,IAAI,IAAI,QAAQ,GAAG,KAAK,CAAC;IACzB;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,KAAK,GAAG,WAAW;IAC5B,QAAQ,QAAQ,GAAG,IAAI,CAAC;IACxB,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW;IAC7B,QAAQ,IAAI,mBAAmB,EAAE,KAAK,KAAK,EAAE;IAC7C,YAAY,MAAM,yCAAyC,CAAC;IAC5D,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,SAAS,EAAE;IACxB,YAAY,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACrC,gBAAgB,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;IACnE,aAAa;IACb,YAAY,IAAI,CAAC,MAAM,EAAE,CAAC;IAC1B,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,QAAQ,GAAG,KAAK,CAAC;IACzB,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,iBAAiB,GAAG,WAAW;IACxC,QAAQ,MAAM,CAAC,sBAAsB,GAAG,KAAK,CAAC;AAC9C;IACA,QAAQ,IAAI,SAAS,EAAE;IACvB,YAAY,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC3C,SAAS;AACT;IACA,QAAQ,mBAAmB,EAAE,CAAC;IAC9B,KAAK,CAAC;AACN;IACA,IAAI,SAAS,cAAc,GAAG;IAC9B,QAAQ,WAAW,GAAG,EAAE,CAAC;IACzB,QAAQ,YAAY,GAAG,EAAE,CAAC;IAC1B,QAAQ,eAAe,GAAG,CAAC,CAAC;IAC5B,QAAQ,qBAAqB,GAAG,KAAK,CAAC;IACtC,QAAQ,SAAS,GAAG,KAAK,CAAC;IAC1B,QAAQ,QAAQ,GAAG,KAAK,CAAC;IACzB,QAAQ,OAAO,GAAG,IAAI,CAAC;AACvB;IACA,QAAQ,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACvC,QAAQ,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACzC,QAAQ,IAAI,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;IAC3D,QAAQ,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;IAC/C,QAAQ,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IACrC,QAAQ,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;AAC/C;IACA,QAAQ,qBAAqB,GAAG;IAChC,YAAY,IAAI,EAAE,EAAE;IACpB,YAAY,KAAK,EAAE,EAAE;IACrB,YAAY,eAAe,EAAE,CAAC;IAC9B,SAAS,CAAC;IACV,KAAK;AACL;IACA,IAAI,SAAS,mBAAmB,GAAG;IACnC,QAAQ,IAAI,WAAW,EAAE;IACzB,YAAY,WAAW,CAAC,cAAc,GAAG,IAAI,CAAC;IAC9C,YAAY,WAAW,CAAC,UAAU,EAAE,CAAC;IACrC,YAAY,WAAW,GAAG,IAAI,CAAC;IAC/B,SAAS;AACT;IACA,QAAQ,IAAI,UAAU,EAAE;IACxB,YAAY,UAAU,CAAC,UAAU,EAAE,CAAC;IACpC,YAAY,UAAU,GAAG,IAAI,CAAC;IAC9B,SAAS;AACT;IACA,QAAQ,cAAc,EAAE,CAAC;IACzB,KAAK;AACL;IACA;IACA,IAAI,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACtC,IAAI,IAAI,CAAC,QAAQ,GAAG,WAAW;IAC/B,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC;IACzB,KAAK,CAAC;AACN;IACA,IAAI,IAAI,qBAAqB,GAAG,KAAK,CAAC;AACtC;IACA,IAAI,SAAS,2BAA2B,CAAC,CAAC,EAAE;IAC5C,QAAQ,IAAI,QAAQ,EAAE;IACtB,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,mBAAmB,EAAE,KAAK,KAAK,EAAE;IAC7C,YAAY,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACrC,gBAAgB,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAC1D,aAAa;IACb,YAAY,WAAW,CAAC,UAAU,EAAE,CAAC;IACrC,YAAY,SAAS,GAAG,KAAK,CAAC;IAC9B,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,SAAS,EAAE;IACxB,YAAY,IAAI,UAAU,EAAE;IAC5B,gBAAgB,UAAU,CAAC,UAAU,EAAE,CAAC;IACxC,gBAAgB,UAAU,GAAG,IAAI,CAAC;IAClC,aAAa;IACb,YAAY,OAAO;IACnB,SAAS;AACT;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,IAAI,CAAC,qBAAqB,EAAE;IACpC,YAAY,qBAAqB,GAAG,IAAI,CAAC;IACzC,YAAY,IAAI,MAAM,CAAC,qBAAqB,EAAE;IAC9C,gBAAgB,MAAM,CAAC,qBAAqB,EAAE,CAAC;IAC/C,aAAa;AACb;IACA,YAAY,IAAI,MAAM,CAAC,YAAY,EAAE;IACrC,gBAAgB,MAAM,CAAC,YAAY,EAAE,CAAC;IACtC,aAAa;IACb,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,GAAG,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;AACnD;IACA;IACA,QAAQ,IAAI,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;IAC5C,QAAQ,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACjC;IACA,QAAQ,IAAI,qBAAqB,KAAK,CAAC,EAAE;IACzC,YAAY,IAAI,KAAK,GAAG,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IACxD,YAAY,IAAI,OAAO,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;IAClD,YAAY,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvC,SAAS;AACT;IACA,QAAQ,eAAe,IAAI,UAAU,CAAC;AACtC;IACA;IACA,QAAQ,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;AAC/C;IACA,QAAQ,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,WAAW,EAAE;IACrD,YAAY,qBAAqB,CAAC,eAAe,IAAI,UAAU,CAAC;IAChE,YAAY,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACpD;IACA,YAAY,IAAI,qBAAqB,KAAK,CAAC,EAAE;IAC7C,gBAAgB,qBAAqB,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1D,aAAa;IACb,SAAS;IACT,KAAK;AACL;IACA,IAAI,WAAW,CAAC,cAAc,GAAG,2BAA2B,CAAC;AAC7D;IACA;IACA,IAAI,IAAI,OAAO,CAAC,4BAA4B,EAAE;IAC9C,QAAQ,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,4BAA4B,EAAE,CAAC,CAAC;IACpE,KAAK,MAAM;IACX,QAAQ,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACjD,KAAK;AACL;IACA;IACA,IAAI,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACnC,IAAI,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACrC,IAAI,IAAI,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;IACvD,IAAI,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;IAC3C,IAAI,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IACjC,IAAI,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;AAC3C;IACA;IACA,IAAI,IAAI,qBAAqB,GAAG;IAChC,QAAQ,IAAI,EAAE,EAAE;IAChB,QAAQ,KAAK,EAAE,EAAE;IACjB,QAAQ,eAAe,EAAE,CAAC;IAC1B,KAAK,CAAC;AACN;IACA;IACA,IAAI,SAAS,MAAM,GAAG;IACtB,QAAQ,IAAI,CAAC,SAAS,IAAI,OAAO,MAAM,CAAC,eAAe,KAAK,UAAU,IAAI,OAAO,MAAM,CAAC,SAAS,KAAK,WAAW,EAAE;IACnH,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,qBAAqB,CAAC,IAAI,CAAC,MAAM,EAAE;IAC/C,YAAY,qBAAqB,CAAC;IAClC,gBAAgB,eAAe,EAAE,eAAe;IAChD,gBAAgB,UAAU,EAAE,UAAU;IACtC,gBAAgB,qBAAqB,EAAE,qBAAqB;IAC5D,gBAAgB,yBAAyB,EAAE,qBAAqB,CAAC,eAAe;IAChF,gBAAgB,WAAW,EAAE,qBAAqB,CAAC,IAAI;IACvD,gBAAgB,YAAY,EAAE,qBAAqB,KAAK,CAAC,GAAG,EAAE,GAAG,qBAAqB,CAAC,KAAK;IAC5F,aAAa,EAAE,SAAS,MAAM,EAAE,IAAI,EAAE;IACtC,gBAAgB,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE;IAC5C,oBAAoB,IAAI,EAAE,WAAW;IACrC,iBAAiB,CAAC,CAAC;IACnB,gBAAgB,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AAC7C;IACA,gBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IACrD,aAAa,CAAC,CAAC;AACf;IACA,YAAY,qBAAqB,GAAG;IACpC,gBAAgB,IAAI,EAAE,EAAE;IACxB,gBAAgB,KAAK,EAAE,EAAE;IACzB,gBAAgB,eAAe,EAAE,CAAC;IAClC,aAAa,CAAC;IACd,SAAS,MAAM;IACf,YAAY,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IACjD,SAAS;IACT,KAAK;IACL,CAAC;AACD;IACA,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;IACtC,IAAI,SAAS,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;IACxD,CAAC;AACD;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;AACA;IACA,SAAS,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE;IAC7C,IAAI,IAAI,OAAO,WAAW,KAAK,WAAW,EAAE;IAC5C,QAAQ,MAAM,8DAA8D,CAAC;IAC7E,KAAK;AACL;IACA,IAAI,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;IAC1B,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;IAC/B,QAAQ,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC;IAClC,KAAK;AACL;IACA;IACA,IAAI,IAAI,+BAA+B,GAAG,KAAK,CAAC;IAChD,IAAI,CAAC,eAAe,EAAE,kBAAkB,EAAE,qBAAqB,CAAC,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE;IACxF,QAAQ,IAAI,IAAI,IAAI,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE;IACtD,YAAY,+BAA+B,GAAG,IAAI,CAAC;IACnD,SAAS;IACT,KAAK,CAAC,CAAC;AACP;IACA,IAAI,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,uBAAuB,IAAI,CAAC,CAAC,MAAM,CAAC,kBAAkB,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;AACzG;IACA,IAAI,IAAI,aAAa,GAAG,EAAE,CAAC;IAC3B,IAAI,IAAI,UAAU,GAAG,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC3E,IAAI,IAAI,SAAS,IAAI,UAAU,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE;IAClD,QAAQ,aAAa,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACpD,KAAK;AACL;IACA,IAAI,IAAI,SAAS,IAAI,aAAa,GAAG,EAAE,EAAE;IACzC,QAAQ,+BAA+B,GAAG,KAAK,CAAC;IAChD,KAAK;AACL;IACA,IAAI,IAAI,MAAM,CAAC,iBAAiB,EAAE;IAClC,QAAQ,+BAA+B,GAAG,KAAK,CAAC;IAChD,KAAK;AACL;IACA,IAAI,IAAI,YAAY,EAAE,mBAAmB,CAAC;AAC1C;IACA,IAAI,IAAI,+BAA+B,EAAE;IACzC,QAAQ,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACjC,YAAY,OAAO,CAAC,GAAG,CAAC,uEAAuE,CAAC,CAAC;IACjG,SAAS;AACT;IACA,QAAQ,IAAI,WAAW,YAAY,iBAAiB,EAAE;IACtD,YAAY,YAAY,GAAG,WAAW,CAAC;IACvC,SAAS,MAAM,IAAI,WAAW,YAAY,wBAAwB,EAAE;IACpE,YAAY,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC;IAC9C,SAAS,MAAM;IACf,YAAY,MAAM,mEAAmE,CAAC;IACtF,SAAS;IACT,KAAK,MAAM,IAAI,CAAC,CAAC,SAAS,CAAC,eAAe,EAAE;IAC5C,QAAQ,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACjC,YAAY,OAAO,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;IAC3E,SAAS;IACT,KAAK;AACL;IACA,IAAI,IAAI,WAAW,CAAC;AACpB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW;IAC7B,QAAQ,WAAW,GAAG,IAAI,CAAC;AAC3B;IACA,QAAQ,IAAI,+BAA+B,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE;IAC1E;IACA,YAAY,IAAI,iBAAiB,CAAC;IAClC,YAAY,IAAI,eAAe,IAAI,YAAY,EAAE;IACjD,gBAAgB,iBAAiB,GAAG,YAAY,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IACnE,aAAa,MAAM,IAAI,kBAAkB,IAAI,YAAY,EAAE;IAC3D,gBAAgB,iBAAiB,GAAG,YAAY,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACtE,aAAa,MAAM,IAAI,qBAAqB,IAAI,YAAY,EAAE;IAC9D,gBAAgB,iBAAiB,GAAG,YAAY,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;IACzE,aAAa;AACb;IACA,YAAY,IAAI;IAChB,gBAAgB,IAAI,QAAQ,GAAG,IAAI,WAAW,EAAE,CAAC;IACjD,gBAAgB,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5E,gBAAgB,iBAAiB,GAAG,QAAQ,CAAC;IAC7C,aAAa,CAAC,OAAO,CAAC,EAAE,EAAE;AAC1B;IACA,YAAY,IAAI,CAAC,iBAAiB,EAAE;IACpC,gBAAgB,MAAM,sCAAsC,CAAC;IAC7D,aAAa;AACb;IACA;IACA;IACA,YAAY,mBAAmB,GAAG,IAAI,mBAAmB,CAAC,iBAAiB,EAAE;IAC7E,gBAAgB,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,YAAY;IACzD,aAAa,CAAC,CAAC;IACf,YAAY,mBAAmB,CAAC,MAAM,EAAE,CAAC;IACzC,SAAS,MAAM;IACf,YAAY,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC;IAC/B,YAAY,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IAC5C,YAAY,eAAe,EAAE,CAAC;IAC9B,SAAS;AACT;IACA,QAAQ,IAAI,MAAM,CAAC,YAAY,EAAE;IACjC,YAAY,MAAM,CAAC,YAAY,EAAE,CAAC;IAClC,SAAS;IACT,KAAK,CAAC;AACN;IACA,IAAI,IAAI,CAAC,aAAa,GAAG,SAAS,QAAQ,EAAE;IAC5C,QAAQ,IAAI,WAAW,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE;IAC7D,YAAY,QAAQ,EAAE,CAAC;IACvB,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;IAChD,QAAQ,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,KAAK,EAAE,GAAG,EAAE;IACnD,YAAY,IAAI,eAAe,GAAG,YAAY,GAAG,GAAG,CAAC;IACrD,YAAY,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACrC,gBAAgB,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,GAAG,GAAG,YAAY,GAAG,mBAAmB,CAAC,CAAC;IACxF,aAAa;AACb;IACA,YAAY,IAAI,MAAM,CAAC,kBAAkB,EAAE;IAC3C,gBAAgB,MAAM,CAAC,kBAAkB,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;IACzE,aAAa;AACb;IACA,YAAY,IAAI,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;IAC9D,YAAY,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC;IAC5C,SAAS,CAAC,CAAC;AACX;IACA,QAAQ,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACjC,YAAY,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC3C,SAAS;AACT;IACA,QAAQ,QAAQ,EAAE,CAAC;IACnB,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,IAAI,GAAG,SAAS,QAAQ,EAAE;IACnC,QAAQ,WAAW,GAAG,KAAK,CAAC;AAC5B;IACA,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC;AACxB;IACA,QAAQ,IAAI,+BAA+B,IAAI,mBAAmB,EAAE;IACpE,YAAY,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/C,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,aAAa,CAAC,WAAW;IACtC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,YAAY,MAAM,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE;IAC1C,gBAAgB,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACzC,oBAAoB,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACvD,iBAAiB;AACjB;IACA,gBAAgB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjC;IACA,gBAAgB,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;IACvC,oBAAoB,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,EAAE,EAAE;IAC7C,wBAAwB,IAAI,EAAE,YAAY;IAC1C,qBAAqB,CAAC,CAAC;IACvB,iBAAiB;AACjB;IACA,gBAAgB,IAAI,QAAQ,EAAE;IAC9B,oBAAoB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,iBAAiB;AACjB;IACA,gBAAgB,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC;IACnC,aAAa,CAAC,CAAC;IACf,SAAS,CAAC,CAAC;IACX,KAAK,CAAC;AACN;IACA,IAAI,IAAI,iBAAiB,GAAG,KAAK,CAAC;AAClC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,KAAK,GAAG,WAAW;IAC5B,QAAQ,iBAAiB,GAAG,IAAI,CAAC;AACjC;IACA,QAAQ,IAAI,mBAAmB,YAAY,mBAAmB,EAAE;IAChE,YAAY,mBAAmB,CAAC,KAAK,EAAE,CAAC;IACxC,YAAY,OAAO;IACnB,SAAS;IACT,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW;IAC7B,QAAQ,iBAAiB,GAAG,KAAK,CAAC;AAClC;IACA,QAAQ,IAAI,mBAAmB,YAAY,mBAAmB,EAAE;IAChE,YAAY,mBAAmB,CAAC,MAAM,EAAE,CAAC;IACzC,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,WAAW,EAAE;IAC1B,YAAY,IAAI,CAAC,MAAM,EAAE,CAAC;IAC1B,SAAS;IACT,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,iBAAiB,GAAG,WAAW;IACxC,QAAQ,IAAI,WAAW,EAAE;IACzB,YAAY,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC3C,SAAS;IACT,QAAQ,mBAAmB,EAAE,CAAC;IAC9B,KAAK,CAAC;AACN;IACA,IAAI,SAAS,mBAAmB,GAAG;IACnC,QAAQ,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC;IAC3B,QAAQ,WAAW,GAAG,KAAK,CAAC;IAC5B,QAAQ,iBAAiB,GAAG,KAAK,CAAC;IAClC,KAAK;AACL;IACA;IACA,IAAI,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IACjC,IAAI,IAAI,CAAC,QAAQ,GAAG,WAAW;IAC/B,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC;IACzB,KAAK,CAAC;AACN;IACA,IAAI,SAAS,WAAW,GAAG;IAC3B;IACA,QAAQ,IAAI,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACzD,QAAQ,IAAI,OAAO,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AACjD;IACA;IACA,QAAQ,SAAS,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;IAC5C,QAAQ,SAAS,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;AAC9C;IACA;IACA,QAAQ,OAAO,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7C;IACA;IACA,QAAQ,OAAO,SAAS,CAAC;IACzB,KAAK;AACL;IACA,IAAI,SAAS,eAAe,GAAG;IAC/B,QAAQ,IAAI,iBAAiB,EAAE;IAC/B,YAAY,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IAC5C,YAAY,OAAO,UAAU,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;IACpD,SAAS;AACT;IACA,QAAQ,IAAI,WAAW,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE;IAC7D,YAAY,IAAI,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC;IAC3D;IACA,YAAY,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;AAC5C;IACA,YAAY,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;IAC/B,gBAAgB,KAAK,EAAE,WAAW,EAAE;IACpC,gBAAgB,QAAQ,EAAE,QAAQ;IAClC,aAAa,CAAC,CAAC;AACf;IACA,YAAY,IAAI,WAAW,EAAE;IAC7B,gBAAgB,UAAU,CAAC,eAAe,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IAClE,aAAa;IACb,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,WAAW,CAAC,WAAW,EAAE;IACjC,YAAY,SAAS,EAAE,OAAO,MAAM,CAAC,gBAAgB,KAAK,WAAW,IAAI,MAAM,CAAC,gBAAgB;IAChG,YAAY,UAAU,EAAE,SAAS,MAAM,EAAE;IACzC,gBAAgB,IAAI,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC;IAC/D,gBAAgB,IAAI,CAAC,QAAQ,EAAE;IAC/B,oBAAoB,OAAO,UAAU,CAAC,eAAe,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IAC7E,iBAAiB;AACjB;IACA;IACA,gBAAgB,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;AAChD;IACA,gBAAgB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;IACnC,oBAAoB,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5D,oBAAoB,QAAQ,EAAE,QAAQ;IACtC,iBAAiB,CAAC,CAAC;AACnB;IACA,gBAAgB,IAAI,WAAW,EAAE;IACjC,oBAAoB,UAAU,CAAC,eAAe,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IACtE,iBAAiB;IACjB,aAAa;IACb,SAAS,CAAC,CAAC;IACX,KAAK;AACL;IACA,IAAI,IAAI,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;AACxC;IACA,IAAI,IAAI,MAAM,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACvC,CAAC;AACD;IACA,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;IACtC,IAAI,SAAS,CAAC,cAAc,GAAG,cAAc,CAAC;IAC9C,CAAC;AACD;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;AACA;IACA,SAAS,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE;AAC7C;IACA,IAAI,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;AAC1B;IACA,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE;IAC/B,QAAQ,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC;IAClC,KAAK;AACL;IACA,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IAC7B,QAAQ,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IACpE,KAAK;AACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW;IAC7B,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;IAC3B,YAAY,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC;IAC/B,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;IAC5B,YAAY,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC;IAChC,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;IAC3B,YAAY,MAAM,CAAC,KAAK,GAAG;IAC3B,gBAAgB,KAAK,EAAE,MAAM,CAAC,KAAK;IACnC,gBAAgB,MAAM,EAAE,MAAM,CAAC,MAAM;IACrC,aAAa,CAAC;IACd,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;IAC5B,YAAY,MAAM,CAAC,MAAM,GAAG;IAC5B,gBAAgB,KAAK,EAAE,MAAM,CAAC,KAAK;IACnC,gBAAgB,MAAM,EAAE,MAAM,CAAC,MAAM;IACrC,aAAa,CAAC;IACd,SAAS;AACT;IACA,QAAQ,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,GAAG,CAAC;IAClD,QAAQ,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC;AACpD;IACA,QAAQ,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC1C;IACA;IACA,QAAQ,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,YAAY,gBAAgB,EAAE;IACtE,YAAY,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;AAC7C;IACA,YAAY,IAAI,MAAM,CAAC,YAAY,EAAE;IACrC,gBAAgB,MAAM,CAAC,YAAY,EAAE,CAAC;IACtC,aAAa;IACb,SAAS,MAAM;IACf,YAAY,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AACpD;IACA,YAAY,YAAY,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;AAC7C;IACA,YAAY,KAAK,CAAC,gBAAgB,GAAG,WAAW;IAChD,gBAAgB,IAAI,MAAM,CAAC,YAAY,EAAE;IACzC,oBAAoB,MAAM,CAAC,YAAY,EAAE,CAAC;IAC1C,iBAAiB;IACjB,aAAa,CAAC;AACd;IACA,YAAY,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;IAC7C,YAAY,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;IAC/C,SAAS;AACT;IACA,QAAQ,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;IAC3B,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;AACrB;IACA,QAAQ,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IACxC,QAAQ,MAAM,GAAG,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;AACpC;IACA,QAAQ,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IACjC,YAAY,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAChF,YAAY,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,KAAK,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/G,SAAS;AACT;IACA,QAAQ,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IACzC,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA,IAAI,SAAS,UAAU,CAAC,aAAa,EAAE;IACvC,QAAQ,aAAa,GAAG,OAAO,aAAa,KAAK,WAAW,GAAG,aAAa,GAAG,EAAE,CAAC;AAClF;IACA,QAAQ,IAAI,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC;IACvD,QAAQ,IAAI,CAAC,QAAQ,EAAE;IACvB,YAAY,OAAO,UAAU,CAAC,UAAU,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;IACxE,SAAS;AACT;IACA,QAAQ,IAAI,iBAAiB,EAAE;IAC/B,YAAY,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IAC5C,YAAY,OAAO,UAAU,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IAC/C,SAAS;AACT;IACA;IACA,QAAQ,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;AACxC;IACA,QAAQ,IAAI,KAAK,CAAC,MAAM,EAAE;IAC1B;IACA;IACA,YAAY,KAAK,CAAC,IAAI,EAAE,CAAC;IACzB,SAAS;AACT;IACA,QAAQ,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACpE,QAAQ,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;IAC3B,YAAY,QAAQ,EAAE,QAAQ;IAC9B,YAAY,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC;IACjD,SAAS,CAAC,CAAC;AACX;IACA,QAAQ,IAAI,CAAC,aAAa,EAAE;IAC5B,YAAY,UAAU,CAAC,UAAU,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;IACjE,SAAS;IACT,KAAK;AACL;IACA,IAAI,SAAS,SAAS,CAAC,CAAC,EAAE;IAC1B,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC;IAClB,YAAY,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;AAC9B;IACA,QAAQ,CAAC,SAAS,IAAI,GAAG;IACzB,YAAY,CAAC,EAAE,CAAC;IAChB,YAAY,IAAI,CAAC,KAAK,MAAM,EAAE;IAC9B,gBAAgB,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC7B,gBAAgB,OAAO;IACvB,aAAa;AACb;IACA;IACA,YAAY,UAAU,CAAC,WAAW;IAClC,gBAAgB,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC1C,aAAa,EAAE,CAAC,CAAC,CAAC;IAClB,SAAS,GAAG,CAAC;IACb,KAAK;AACL;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,SAAS,eAAe,CAAC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,QAAQ,EAAE;IAChG,QAAQ,IAAI,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC3D,QAAQ,WAAW,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IACzC,QAAQ,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC3C,QAAQ,IAAI,SAAS,GAAG,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACrD,QAAQ,IAAI,YAAY,GAAG,EAAE,CAAC;AAC9B;IACA,QAAQ,IAAI,kBAAkB,GAAG,cAAc,KAAK,CAAC,CAAC,CAAC;IACvD,QAAQ,IAAI,aAAa,GAAG,CAAC,cAAc,IAAI,cAAc,GAAG,CAAC,IAAI,cAAc,IAAI,OAAO,CAAC,MAAM;IACrG,YAAY,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAC5C,QAAQ,IAAI,WAAW,GAAG;IAC1B,YAAY,CAAC,EAAE,CAAC;IAChB,YAAY,CAAC,EAAE,CAAC;IAChB,YAAY,CAAC,EAAE,CAAC;IAChB,SAAS,CAAC;IACV,QAAQ,IAAI,kBAAkB,GAAG,IAAI,CAAC,IAAI;IAC1C,YAAY,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5B,YAAY,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5B,YAAY,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5B,SAAS,CAAC;IACV,QAAQ,IAAI,YAAY,GAAG,aAAa,IAAI,aAAa,IAAI,CAAC,IAAI,aAAa,IAAI,CAAC,GAAG,aAAa,GAAG,CAAC,CAAC;IACzG,QAAQ,IAAI,cAAc,GAAG,eAAe,IAAI,eAAe,IAAI,CAAC,IAAI,eAAe,IAAI,CAAC,GAAG,eAAe,GAAG,CAAC,CAAC;IACnH,QAAQ,IAAI,cAAc,GAAG,KAAK,CAAC;AACnC;IACA,QAAQ,SAAS,CAAC;IAClB,YAAY,MAAM,EAAE,aAAa;IACjC,YAAY,cAAc,EAAE,SAAS,IAAI,EAAE,CAAC,EAAE;IAC9C,gBAAgB,IAAI,aAAa,EAAE,WAAW,EAAE,WAAW,CAAC;AAC5D;IACA,gBAAgB,IAAI,WAAW,GAAG,WAAW;IAC7C,oBAAoB,IAAI,CAAC,cAAc,IAAI,WAAW,GAAG,aAAa,IAAI,WAAW,GAAG,cAAc,EAAE,CAEnF,MAAM;IAC3B;IACA,wBAAwB,IAAI,kBAAkB,EAAE;IAChD,4BAA4B,cAAc,GAAG,IAAI,CAAC;IAClD,yBAAyB;IACzB,wBAAwB,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,qBAAqB;IACrB,oBAAoB,IAAI,EAAE,CAAC;IAC3B,iBAAiB,CAAC;AAClB;IACA,gBAAgB,IAAI,CAAC,cAAc,EAAE;IACrC,oBAAoB,IAAI,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;IAC5C,oBAAoB,KAAK,CAAC,MAAM,GAAG,WAAW;IAC9C,wBAAwB,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACtF,wBAAwB,IAAI,SAAS,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAClG,wBAAwB,aAAa,GAAG,CAAC,CAAC;IAC1C,wBAAwB,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;IAC5D,wBAAwB,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAChE;IACA,wBAAwB,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,WAAW,EAAE,GAAG,IAAI,CAAC,EAAE;IACvE,4BAA4B,IAAI,YAAY,GAAG;IAC/C,gCAAgC,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;IACtD,gCAAgC,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;IAC1D,gCAAgC,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;IAC1D,6BAA6B,CAAC;IAC9B,4BAA4B,IAAI,eAAe,GAAG,IAAI,CAAC,IAAI;IAC3D,gCAAgC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3E,gCAAgC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3E,gCAAgC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3E,6BAA6B,CAAC;IAC9B;IACA,4BAA4B,IAAI,eAAe,IAAI,kBAAkB,GAAG,YAAY,EAAE;IACtF,gCAAgC,aAAa,EAAE,CAAC;IAChD,6BAA6B;IAC7B,yBAAyB;IACzB,wBAAwB,WAAW,EAAE,CAAC;IACtC,qBAAqB,CAAC;IACtB,oBAAoB,KAAK,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACjD,iBAAiB,MAAM;IACvB,oBAAoB,WAAW,EAAE,CAAC;IAClC,iBAAiB;IACjB,aAAa;IACb,YAAY,QAAQ,EAAE,WAAW;IACjC,gBAAgB,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;AACjF;IACA,gBAAgB,IAAI,YAAY,CAAC,MAAM,IAAI,CAAC,EAAE;IAC9C;IACA;IACA,oBAAoB,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACnE,iBAAiB;IACjB,gBAAgB,QAAQ,CAAC,YAAY,CAAC,CAAC;IACvC,aAAa;IACb,SAAS,CAAC,CAAC;IACX,KAAK;AACL;IACA,IAAI,IAAI,aAAa,GAAG,KAAK,CAAC;AAC9B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,IAAI,GAAG,SAAS,QAAQ,EAAE;IACnC,QAAQ,QAAQ,GAAG,QAAQ,IAAI,WAAW,EAAE,CAAC;AAC7C;IACA,QAAQ,aAAa,GAAG,IAAI,CAAC;AAC7B;IACA,QAAQ,IAAI,KAAK,GAAG,IAAI,CAAC;IACzB;IACA,QAAQ,UAAU,CAAC,WAAW;IAC9B;IACA;IACA;IACA,YAAY,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE;IAC5E,gBAAgB,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;AACvC;IACA;IACA,gBAAgB,IAAI,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE;IACzE,oBAAoB,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/E,iBAAiB;AACjB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,gBAAgB,MAAM,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE;IAC9C,oBAAoB,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;AACtC;IACA,oBAAoB,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE;IAC5C,wBAAwB,KAAK,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,EAAE,EAAE;IAClD,4BAA4B,IAAI,EAAE,YAAY;IAC9C,yBAAyB,CAAC,CAAC;IAC3B,qBAAqB;AACrB;IACA,oBAAoB,IAAI,QAAQ,EAAE;IAClC,wBAAwB,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7C,qBAAqB;IACrB,iBAAiB,CAAC,CAAC;IACnB,aAAa,CAAC,CAAC;IACf,SAAS,EAAE,EAAE,CAAC,CAAC;IACf,KAAK,CAAC;AACN;IACA,IAAI,IAAI,iBAAiB,GAAG,KAAK,CAAC;AAClC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,KAAK,GAAG,WAAW;IAC5B,QAAQ,iBAAiB,GAAG,IAAI,CAAC;IACjC,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW;IAC7B,QAAQ,iBAAiB,GAAG,KAAK,CAAC;AAClC;IACA,QAAQ,IAAI,aAAa,EAAE;IAC3B,YAAY,IAAI,CAAC,MAAM,EAAE,CAAC;IAC1B,SAAS;IACT,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,iBAAiB,GAAG,WAAW;IACxC,QAAQ,IAAI,CAAC,aAAa,EAAE;IAC5B,YAAY,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC3C,SAAS;IACT,QAAQ,mBAAmB,EAAE,CAAC;IAC9B,KAAK,CAAC;AACN;IACA,IAAI,SAAS,mBAAmB,GAAG;IACnC,QAAQ,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC;IAC3B,QAAQ,aAAa,GAAG,IAAI,CAAC;IAC7B,QAAQ,iBAAiB,GAAG,KAAK,CAAC;IAClC,KAAK;AACL;IACA;IACA,IAAI,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IACjC,IAAI,IAAI,CAAC,QAAQ,GAAG,WAAW;IAC/B,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC;IACzB,KAAK,CAAC;AACN;IACA,IAAI,IAAI,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAClD,IAAI,IAAI,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC1C;IACA,IAAI,IAAI,KAAK,CAAC;IACd,IAAI,IAAI,QAAQ,CAAC;IACjB,IAAI,IAAI,MAAM,CAAC;IACf,CAAC;AACD;IACA,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;IACtC,IAAI,SAAS,CAAC,cAAc,GAAG,cAAc,CAAC;IAC9C,CAAC;AACD;IACA;IACA;IACA;AACA;IACA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;AACA;IACA,IAAI,MAAM,GAAG,CAAC,WAAW;IACzB;AACA;IACA,IAAI,SAAS,WAAW,CAAC,QAAQ,EAAE;IACnC,QAAQ,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACzB,QAAQ,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,CAAC,CAAC;IACtC,QAAQ,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;IAC3B,KAAK;AACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,WAAW,CAAC,SAAS,CAAC,GAAG,GAAG,SAAS,KAAK,EAAE,QAAQ,EAAE;IAC1D,QAAQ,IAAI,QAAQ,IAAI,KAAK,EAAE;IAC/B,YAAY,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;IACjC,SAAS;AACT;IACA,QAAQ,IAAI,WAAW,IAAI,KAAK,EAAE;IAClC,YAAY,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAChE,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,CAAC,6BAA6B,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE;IAC1D,YAAY,MAAM,iFAAiF,CAAC;IACpG,SAAS;IACT,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IACzB,YAAY,KAAK,EAAE,KAAK;IACxB,YAAY,QAAQ,EAAE,QAAQ,IAAI,IAAI,CAAC,QAAQ;IAC/C,SAAS,CAAC,CAAC;IACX,KAAK,CAAC;AACN;IACA,IAAI,SAAS,kBAAkB,CAAC,SAAS,EAAE;IAC3C,QAAQ,IAAI,IAAI,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,CAAC,SAAS,CAAC,QAAQ,EAAE;IACrE,YAAY,oCAAoC,GAAG,SAAS,CAAC,IAAI,GAAG,cAAc;IAClF,SAAS,EAAE;IACX,YAAY,IAAI,EAAE,wBAAwB;IAC1C,SAAS,CAAC,CAAC,CAAC;AACZ;IACA,QAAQ,IAAI,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;IACtC,QAAQ,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAClC,QAAQ,OAAO,MAAM,CAAC;IACtB,KAAK;AACL;IACA,IAAI,SAAS,iBAAiB,CAAC,MAAM,EAAE;IACvC,QAAQ,SAAS,WAAW,CAAC,MAAM,EAAE;IACrC,YAAY,IAAI,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAC3C,YAAY,IAAI,CAAC,IAAI,EAAE;IACvB,gBAAgB,OAAO,EAAE,CAAC;IAC1B,aAAa;AACb;IACA,YAAY,IAAI,kBAAkB,GAAG,KAAK,CAAC;AAC3C;IACA,YAAY,IAAI,IAAI,GAAG,CAAC;IACxB,gBAAgB,IAAI,EAAE,UAAU;IAChC,gBAAgB,MAAM,EAAE,CAAC;IACzB,oBAAoB,MAAM,EAAE,CAAC;IAC7B,oBAAoB,IAAI,EAAE,MAAM;IAChC,iBAAiB,EAAE;IACnB,oBAAoB,MAAM,EAAE,CAAC;IAC7B,oBAAoB,IAAI,EAAE,MAAM;IAChC,iBAAiB,EAAE;IACnB,oBAAoB,MAAM,EAAE,CAAC;IAC7B,oBAAoB,IAAI,EAAE,MAAM;IAChC,iBAAiB,EAAE;IACnB,oBAAoB,MAAM,EAAE,CAAC;IAC7B,oBAAoB,IAAI,EAAE,MAAM;IAChC,iBAAiB,EAAE;IACnB,oBAAoB,MAAM,EAAE,MAAM;IAClC,oBAAoB,IAAI,EAAE,MAAM;IAChC,iBAAiB,EAAE;IACnB,oBAAoB,MAAM,EAAE,CAAC;IAC7B,oBAAoB,IAAI,EAAE,MAAM;IAChC,iBAAiB,EAAE;IACnB,oBAAoB,MAAM,EAAE,CAAC;IAC7B,oBAAoB,IAAI,EAAE,MAAM;IAChC,iBAAiB,CAAC;IAClB,aAAa,EAAE;IACf,gBAAgB,IAAI,EAAE,UAAU;IAChC,gBAAgB,MAAM,EAAE,CAAC;IACzB,oBAAoB,IAAI,EAAE,UAAU;IACpC,oBAAoB,MAAM,EAAE,CAAC;IAC7B,wBAAwB,MAAM,EAAE,GAAG;IACnC,wBAAwB,IAAI,EAAE,QAAQ;IACtC,qBAAqB,EAAE;IACvB,wBAAwB,MAAM,EAAE,QAAQ;IACxC,wBAAwB,IAAI,EAAE,MAAM;IACpC,qBAAqB,EAAE;IACvB,wBAAwB,MAAM,EAAE,QAAQ;IACxC,wBAAwB,IAAI,EAAE,MAAM;IACpC,qBAAqB,EAAE;IACvB,wBAAwB,MAAM,EAAE,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC;IAC7D,wBAAwB,IAAI,EAAE,MAAM;IACpC,qBAAqB,CAAC;IACtB,iBAAiB,EAAE;IACnB,oBAAoB,IAAI,EAAE,UAAU;IACpC,oBAAoB,MAAM,EAAE,CAAC;IAC7B,wBAAwB,IAAI,EAAE,IAAI;IAClC,wBAAwB,MAAM,EAAE,CAAC;IACjC,4BAA4B,MAAM,EAAE,CAAC;IACrC,4BAA4B,IAAI,EAAE,IAAI;IACtC,yBAAyB,EAAE;IAC3B,4BAA4B,MAAM,EAAE,CAAC;IACrC,4BAA4B,IAAI,EAAE,MAAM;IACxC,yBAAyB,EAAE;IAC3B,4BAA4B,MAAM,EAAE,CAAC;IACrC,4BAA4B,IAAI,EAAE,IAAI;IACtC,yBAAyB,EAAE;IAC3B,4BAA4B,MAAM,EAAE,KAAK;IACzC,4BAA4B,IAAI,EAAE,QAAQ;IAC1C,yBAAyB,EAAE;IAC3B,4BAA4B,MAAM,EAAE,OAAO;IAC3C,4BAA4B,IAAI,EAAE,IAAI;IACtC,yBAAyB,EAAE;IAC3B,4BAA4B,MAAM,EAAE,KAAK;IACzC,4BAA4B,IAAI,EAAE,QAAQ;IAC1C,yBAAyB,EAAE;IAC3B,4BAA4B,MAAM,EAAE,CAAC;IACrC,4BAA4B,IAAI,EAAE,IAAI;IACtC,yBAAyB,EAAE;IAC3B,4BAA4B,IAAI,EAAE,IAAI;IACtC,4BAA4B,MAAM,EAAE,CAAC;IACrC,gCAAgC,MAAM,EAAE,IAAI,CAAC,KAAK;IAClD,gCAAgC,IAAI,EAAE,IAAI;IAC1C,6BAA6B,EAAE;IAC/B,gCAAgC,MAAM,EAAE,IAAI,CAAC,MAAM;IACnD,gCAAgC,IAAI,EAAE,IAAI;IAC1C,6BAA6B,CAAC;IAC9B,yBAAyB,CAAC;IAC1B,qBAAqB,CAAC;IACtB,iBAAiB,CAAC;IAClB,aAAa,CAAC,CAAC;AACf;IACA;IACA,YAAY,IAAI,WAAW,GAAG,CAAC,CAAC;IAChC,YAAY,IAAI,eAAe,GAAG,CAAC,CAAC;IACpC,YAAY,OAAO,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE;AAChD;IACA,gBAAgB,IAAI,aAAa,GAAG,EAAE,CAAC;IACvC,gBAAgB,IAAI,eAAe,GAAG,CAAC,CAAC;IACxC,gBAAgB,GAAG;IACnB,oBAAoB,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;IAC5D,oBAAoB,eAAe,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC;IACpE,oBAAoB,WAAW,EAAE,CAAC;IAClC,iBAAiB,QAAQ,WAAW,GAAG,MAAM,CAAC,MAAM,IAAI,eAAe,GAAG,kBAAkB,EAAE;AAC9F;IACA,gBAAgB,IAAI,cAAc,GAAG,CAAC,CAAC;IACvC,gBAAgB,IAAI,OAAO,GAAG;IAC9B,oBAAoB,IAAI,EAAE,UAAU;IACpC,oBAAoB,MAAM,EAAE,cAAc,CAAC,eAAe,EAAE,cAAc,EAAE,aAAa,CAAC;IAC1F,iBAAiB,CAAC;IAClB,gBAAgB,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3C,gBAAgB,eAAe,IAAI,eAAe,CAAC;IACnD,aAAa;AACb;IACA,YAAY,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;IACtC,SAAS;AACT;IACA,QAAQ,SAAS,cAAc,CAAC,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE;IAChF,YAAY,OAAO,CAAC;IACpB,gBAAgB,MAAM,EAAE,eAAe;IACvC,gBAAgB,IAAI,EAAE,IAAI;IAC1B,aAAa,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE;IACvD,gBAAgB,IAAI,KAAK,GAAG,eAAe,CAAC;IAC5C,oBAAoB,WAAW,EAAE,CAAC;IAClC,oBAAoB,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7C,oBAAoB,SAAS,EAAE,CAAC;IAChC,oBAAoB,QAAQ,EAAE,CAAC;IAC/B,oBAAoB,MAAM,EAAE,CAAC;IAC7B,oBAAoB,QAAQ,EAAE,CAAC;IAC/B,oBAAoB,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC;IACxD,iBAAiB,CAAC,CAAC;IACnB,gBAAgB,cAAc,IAAI,IAAI,CAAC,QAAQ,CAAC;IAChD,gBAAgB,OAAO;IACvB,oBAAoB,IAAI,EAAE,KAAK;IAC/B,oBAAoB,EAAE,EAAE,IAAI;IAC5B,iBAAiB,CAAC;IAClB,aAAa,CAAC,CAAC,CAAC;IAChB,SAAS;AACT;IACA;AACA;IACA,QAAQ,SAAS,WAAW,CAAC,MAAM,EAAE;IACrC,YAAY,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;IAC5B,gBAAgB,WAAW,CAAC;IAC5B,oBAAoB,KAAK,EAAE,kFAAkF;IAC7G,iBAAiB,CAAC,CAAC;IACnB,gBAAgB,OAAO;IACvB,aAAa;AACb;IACA,YAAY,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK;IACvC,gBAAgB,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM;IACzC,gBAAgB,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC9C;IACA,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;IACpD,gBAAgB,QAAQ,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC/C,aAAa;IACb,YAAY,OAAO;IACnB,gBAAgB,QAAQ,EAAE,QAAQ;IAClC,gBAAgB,KAAK,EAAE,KAAK;IAC5B,gBAAgB,MAAM,EAAE,MAAM;IAC9B,aAAa,CAAC;IACd,SAAS;AACT;IACA,QAAQ,SAAS,WAAW,CAAC,GAAG,EAAE;IAClC,YAAY,IAAI,KAAK,GAAG,EAAE,CAAC;IAC3B,YAAY,OAAO,GAAG,GAAG,CAAC,EAAE;IAC5B,gBAAgB,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;IACvC,gBAAgB,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC;IAC/B,aAAa;IACb,YAAY,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACnD,SAAS;AACT;IACA,QAAQ,SAAS,WAAW,CAAC,GAAG,EAAE;IAClC,YAAY,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;IAChE,gBAAgB,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACvC,aAAa,CAAC,CAAC,CAAC;IAChB,SAAS;AACT;IACA,QAAQ,SAAS,YAAY,CAAC,IAAI,EAAE;IACpC,YAAY,IAAI,IAAI,GAAG,EAAE,CAAC;IAC1B,YAAY,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;IAChG,YAAY,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC;IAC9B,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;IACrD,gBAAgB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1D,aAAa;IACb,YAAY,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;IACxC,SAAS;AACT;IACA,QAAQ,SAAS,YAAY,CAAC,IAAI,EAAE;IACpC,YAAY,IAAI,IAAI,GAAG,EAAE,CAAC;IAC1B,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;IAClD,gBAAgB,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACxC;IACA,gBAAgB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;IAC9C,oBAAoB,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAC9C,iBAAiB;AACjB;IACA,gBAAgB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;IAC9C,oBAAoB,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1D,iBAAiB;AACjB;IACA,gBAAgB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;IAC9C,oBAAoB,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAC7C,iBAAiB;AACjB;IACA,gBAAgB,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC;IACtE,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACnF,gBAAgB,IAAI,YAAY,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACnD,gBAAgB,IAAI,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC;IAC9G,gBAAgB,IAAI,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC;AACxE;IACA,gBAAgB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACnD,gBAAgB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9C,gBAAgB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChC,aAAa;AACb;IACA,YAAY,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE;IAClC,gBAAgB,IAAI,EAAE,YAAY;IAClC,aAAa,CAAC,CAAC;IACf,SAAS;AAWT;IACA,QAAQ,SAAS,eAAe,CAAC,IAAI,EAAE;IACvC,YAAY,IAAI,KAAK,GAAG,CAAC,CAAC;AAC1B;IACA,YAAY,IAAI,IAAI,CAAC,QAAQ,EAAE;IAC/B,gBAAgB,KAAK,IAAI,GAAG,CAAC;IAC7B,aAAa;AACb;IACA,YAAY,IAAI,IAAI,CAAC,SAAS,EAAE;IAChC,gBAAgB,KAAK,IAAI,CAAC,CAAC;IAC3B,aAAa;AACb;IACA,YAAY,IAAI,IAAI,CAAC,MAAM,EAAE;IAC7B,gBAAgB,KAAK,KAAK,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;IAC5C,aAAa;AACb;IACA,YAAY,IAAI,IAAI,CAAC,WAAW,EAAE;IAClC,gBAAgB,KAAK,IAAI,CAAC,CAAC;IAC3B,aAAa;AACb;IACA,YAAY,IAAI,IAAI,CAAC,QAAQ,GAAG,GAAG,EAAE;IACrC,gBAAgB,MAAM,iCAAiC,CAAC;IACxD,aAAa;AACb;IACA,YAAY,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,EAAE,IAAI,CAAC,QAAQ,IAAI,CAAC,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;IAC9G,gBAAgB,OAAO,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC9C,aAAa,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;AACrC;IACA,YAAY,OAAO,GAAG,CAAC;IACvB,SAAS;AACT;IACA,QAAQ,SAAS,SAAS,CAAC,IAAI,EAAE;IACjC,YAAY,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC3C;IACA,YAAY,IAAI,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACzD,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;IAChD,gBAAgB,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,aAAa;AACb;IACA,YAAY,IAAI,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC;AACnC;IACA;IACA,YAAY,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,YAAY,KAAK,GAAG,GAAG,GAAG,MAAM,CAAC;IACjC,YAAY,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,YAAY,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC;IAClC,YAAY,OAAO;IACnB,gBAAgB,KAAK,EAAE,KAAK;IAC5B,gBAAgB,MAAM,EAAE,MAAM;IAC9B,gBAAgB,IAAI,EAAE,GAAG;IACzB,gBAAgB,IAAI,EAAE,IAAI;IAC1B,aAAa,CAAC;IACd,SAAS;AACT;IACA,QAAQ,SAAS,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE;IAC9C,YAAY,OAAO,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;IACnF,gBAAgB,IAAI,QAAQ,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC3D,gBAAgB,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;IACjF,aAAa,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,SAAS;AACT;IACA,QAAQ,SAAS,SAAS,CAAC,MAAM,EAAE;IACnC,YAAY,IAAI,MAAM,GAAG,CAAC,CAAC;IAC3B,YAAY,IAAI,MAAM,GAAG,EAAE,CAAC;AAC5B;IACA,YAAY,OAAO,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE;IAC3C,gBAAgB,IAAI,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAClD,gBAAgB,IAAI,GAAG,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvD,gBAAgB,IAAI,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IAC9D,gBAAgB,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IACtC,gBAAgB,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;AAC9C;IACA,gBAAgB,IAAI,EAAE,KAAK,MAAM,IAAI,EAAE,KAAK,MAAM,EAAE;IACpD,oBAAoB,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACrD,iBAAiB,MAAM;IACvB,oBAAoB,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1C,iBAAiB;IACjB,aAAa;IACb,YAAY,OAAO,MAAM,CAAC;IAC1B,SAAS;AACT;IACA,QAAQ,SAAS,cAAc,CAAC,GAAG,EAAE;IACrC,YAAY,OAAO,EAAE,CAAC,KAAK,CAAC,IAAI;IAChC,gBAAgB,IAAI,UAAU,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;IACrF,gBAAgB,OAAO,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC9C,aAAa,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClC,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,KAAK,EAAE;IAC9D,YAAY,IAAI,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACzE,YAAY,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;IAC3C,YAAY,OAAO,IAAI,CAAC;IACxB,SAAS,CAAC,CAAC,CAAC;AACZ;IACA,QAAQ,WAAW,CAAC,IAAI,CAAC,CAAC;IAC1B,KAAK;AACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,WAAW,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,QAAQ,EAAE;IACvD,QAAQ,IAAI,SAAS,GAAG,kBAAkB,CAAC,iBAAiB,CAAC,CAAC;AAC9D;IACA,QAAQ,SAAS,CAAC,SAAS,GAAG,SAAS,KAAK,EAAE;IAC9C,YAAY,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE;IAClC,gBAAgB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChD,gBAAgB,OAAO;IACvB,aAAa;IACb,YAAY,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjC,SAAS,CAAC;AACV;IACA,QAAQ,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3C,KAAK,CAAC;AACN;IACA,IAAI,OAAO;IACX;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,KAAK,EAAE,WAAW;IAC1B,KAAK,CAAC;IACN,CAAC,GAAG,CAAC;AACL;IACA,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;IACtC,IAAI,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC;IAC9B,CAAC;AACD;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;AACA;AACA;IACA,IAAI,WAAW,GAAG;IAClB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,EAAE,WAAW;IACrB,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC;AACxB;IACA,QAAQ,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,OAAO,SAAS,CAAC,IAAI,KAAK,WAAW,EAAE;IACvF,YAAY,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;IAC9E,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,SAAS,GAAG,CAAC,CAAC;IAC1B,QAAQ,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC;IACnF,YAAY,EAAE,CAAC;IACf,QAAQ,IAAI,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AACxD;IACA,QAAQ,SAAS,iBAAiB,CAAC,QAAQ,EAAE;IAC7C,YAAY,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC3D,SAAS;AACT;IACA,QAAQ,SAAS,OAAO,GAAG;IAC3B,YAAY,IAAI,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,WAAW,CAAC,CAAC;AAChF;IACA,YAAY,IAAI,IAAI,CAAC,SAAS,EAAE;IAChC,gBAAgB,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAC7F,aAAa;AACb;IACA,YAAY,IAAI,IAAI,CAAC,OAAO,EAAE;IAC9B,gBAAgB,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACzF,aAAa;AACb;IACA,YAAY,IAAI,IAAI,CAAC,SAAS,EAAE;IAChC,gBAAgB,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAC7F,aAAa;AACb;IACA,YAAY,SAAS,YAAY,CAAC,WAAW,EAAE;IAC/C,gBAAgB,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,SAAS,GAAG,SAAS,KAAK,EAAE;IACzG,oBAAoB,IAAI,IAAI,CAAC,QAAQ,EAAE;IACvC,wBAAwB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACxE,qBAAqB;IACrB,iBAAiB,CAAC;IAClB,aAAa;AACb;IACA,YAAY,YAAY,CAAC,WAAW,CAAC,CAAC;IACtC,YAAY,YAAY,CAAC,WAAW,CAAC,CAAC;IACtC,YAAY,YAAY,CAAC,SAAS,CAAC,CAAC;IACpC,SAAS;AACT;IACA,QAAQ,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AACvC;IACA,QAAQ,OAAO,CAAC,SAAS,GAAG,WAAW;IACvC,YAAY,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAChC,YAAY,EAAE,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AACtC;IACA,YAAY,IAAI,EAAE,CAAC,UAAU,EAAE;IAC/B,gBAAgB,IAAI,EAAE,CAAC,OAAO,KAAK,SAAS,EAAE;IAC9C,oBAAoB,IAAI,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAC9D,oBAAoB,UAAU,CAAC,SAAS,GAAG,WAAW;IACtD,wBAAwB,iBAAiB,CAAC,EAAE,CAAC,CAAC;IAC9C,wBAAwB,OAAO,EAAE,CAAC;IAClC,qBAAqB,CAAC;IACtB,iBAAiB,MAAM;IACvB,oBAAoB,OAAO,EAAE,CAAC;IAC9B,iBAAiB;IACjB,aAAa,MAAM;IACnB,gBAAgB,OAAO,EAAE,CAAC;IAC1B,aAAa;IACb,SAAS,CAAC;IACV,QAAQ,OAAO,CAAC,eAAe,GAAG,SAAS,KAAK,EAAE;IAClD,YAAY,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACnD,SAAS,CAAC;IACV,KAAK;IACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,KAAK,EAAE,SAAS,QAAQ,EAAE;IAC9B,QAAQ,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACjC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;AACpB;IACA,QAAQ,OAAO,IAAI,CAAC;IACpB,KAAK;IACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,KAAK,EAAE,SAAS,MAAM,EAAE;IAC5B,QAAQ,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IAC1C,QAAQ,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;IAC1C,QAAQ,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;AACtC;IACA,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;AACpB;IACA,QAAQ,OAAO,IAAI,CAAC;IACpB,KAAK;IACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,EAAE,SAAS,KAAK,EAAE;IAC7B,QAAQ,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IACzD,KAAK;AACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,aAAa,EAAE,WAAW;IAC9B,IAAI,MAAM,EAAE,IAAI;IAChB,CAAC,CAAC;AACF;IACA,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;IACtC,IAAI,SAAS,CAAC,WAAW,GAAG,WAAW,CAAC;IACxC,CAAC;AACD;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;AACA;IACA,SAAS,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE;IAC1C,IAAI,IAAI,OAAO,UAAU,KAAK,WAAW,EAAE;IAC3C,QAAQ,IAAI,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACtD,QAAQ,MAAM,CAAC,GAAG,GAAG,mDAAmD,CAAC;IACzE,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACxE,KAAK;AACL;IACA,IAAI,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;AAC1B;IACA,IAAI,IAAI,YAAY,GAAG,WAAW,YAAY,wBAAwB,IAAI,WAAW,YAAY,iBAAiB,CAAC;AACnH;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW;IAC7B,QAAQ,IAAI,OAAO,UAAU,KAAK,WAAW,EAAE;IAC/C,YAAY,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC1C,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,gBAAgB,EAAE;IAC/B,YAAY,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC1C,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,YAAY,EAAE;IAC3B,YAAY,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;IAC/B,gBAAgB,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,WAAW,IAAI,GAAG,CAAC;IACxD,aAAa;AACb;IACA,YAAY,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;IAChC,gBAAgB,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,YAAY,IAAI,GAAG,CAAC;IAC1D,aAAa;AACb;IACA,YAAY,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;IAC/B,gBAAgB,MAAM,CAAC,KAAK,GAAG;IAC/B,oBAAoB,KAAK,EAAE,MAAM,CAAC,KAAK;IACvC,oBAAoB,MAAM,EAAE,MAAM,CAAC,MAAM;IACzC,iBAAiB,CAAC;IAClB,aAAa;AACb;IACA,YAAY,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;IAChC,gBAAgB,MAAM,CAAC,MAAM,GAAG;IAChC,oBAAoB,KAAK,EAAE,MAAM,CAAC,KAAK;IACvC,oBAAoB,MAAM,EAAE,MAAM,CAAC,MAAM;IACzC,iBAAiB,CAAC;IAClB,aAAa;AACb;IACA,YAAY,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,GAAG,CAAC;IACtD,YAAY,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC;AACxD;IACA,YAAY,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,GAAG,CAAC;IACpD,YAAY,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC;IACtD,SAAS;AACT;IACA;IACA,QAAQ,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;AACtC;IACA;IACA;IACA;IACA,QAAQ,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAChC;IACA;IACA;IACA;IACA;IACA,QAAQ,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,IAAI,GAAG,CAAC,CAAC;AACrD;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;AACpD;IACA;IACA;IACA,QAAQ,UAAU,CAAC,KAAK,EAAE,CAAC;AAC3B;IACA,QAAQ,IAAI,OAAO,MAAM,CAAC,qBAAqB,KAAK,UAAU,EAAE;IAChE,YAAY,MAAM,CAAC,qBAAqB,EAAE,CAAC;IAC3C,SAAS;AAGT;IACA,QAAQ,SAAS,cAAc,CAAC,IAAI,EAAE;IACtC,YAAY,IAAI,IAAI,CAAC,mBAAmB,KAAK,IAAI,EAAE;IACnD,gBAAgB,OAAO;IACvB,aAAa;AACb;IACA,YAAY,IAAI,iBAAiB,EAAE;IACnC,gBAAgB,OAAO,UAAU,CAAC,WAAW;IAC7C,oBAAoB,cAAc,CAAC,IAAI,CAAC,CAAC;IACzC,iBAAiB,EAAE,GAAG,CAAC,CAAC;IACxB,aAAa;AACb;IACA,YAAY,kBAAkB,GAAG,qBAAqB,CAAC,cAAc,CAAC,CAAC;AACvE;IACA,YAAY,IAAI,OAAO,aAAa,KAAK,SAAS,EAAE;IACpD,gBAAgB,aAAa,GAAG,IAAI,CAAC;IACrC,aAAa;AACb;IACA;IACA,YAAY,IAAI,IAAI,GAAG,aAAa,GAAG,EAAE,EAAE;IAC3C,gBAAgB,OAAO;IACvB,aAAa;AACb;IACA,YAAY,IAAI,CAAC,YAAY,IAAI,KAAK,CAAC,MAAM,EAAE;IAC/C;IACA;IACA,gBAAgB,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,aAAa;AACb;IACA,YAAY,IAAI,CAAC,YAAY,EAAE;IAC/B,gBAAgB,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5E,aAAa;AACb;IACA,YAAY,IAAI,MAAM,CAAC,YAAY,EAAE;IACrC,gBAAgB,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;IACnE,aAAa;AACb;IACA,YAAY,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACzC,YAAY,aAAa,GAAG,IAAI,CAAC;IACjC,SAAS;AACT;IACA,QAAQ,kBAAkB,GAAG,qBAAqB,CAAC,cAAc,CAAC,CAAC;AACnE;IACA,QAAQ,IAAI,MAAM,CAAC,YAAY,EAAE;IACjC,YAAY,MAAM,CAAC,YAAY,EAAE,CAAC;IAClC,SAAS;IACT,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,IAAI,GAAG,SAAS,QAAQ,EAAE;IACnC,QAAQ,QAAQ,GAAG,QAAQ,IAAI,WAAW,EAAE,CAAC;AAC7C;IACA,QAAQ,IAAI,kBAAkB,EAAE;IAChC,YAAY,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;IACrD,SAAS;AAGT;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE;IACxE,YAAY,IAAI,EAAE,WAAW;IAC7B,SAAS,CAAC,CAAC;AACX;IACA,QAAQ,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B;IACA;IACA,QAAQ,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC;IACrC,KAAK,CAAC;AACN;IACA,IAAI,IAAI,iBAAiB,GAAG,KAAK,CAAC;AAClC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,KAAK,GAAG,WAAW;IAC5B,QAAQ,iBAAiB,GAAG,IAAI,CAAC;IACjC,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW;IAC7B,QAAQ,iBAAiB,GAAG,KAAK,CAAC;IAClC,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,iBAAiB,GAAG,WAAW;IACxC,QAAQ,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;IACxC,QAAQ,mBAAmB,EAAE,CAAC;IAC9B,KAAK,CAAC;AACN;IACA,IAAI,SAAS,mBAAmB,GAAG;IACnC,QAAQ,IAAI,UAAU,EAAE;IACxB,YAAY,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC;IACzC,SAAS;IACT,KAAK;AACL;IACA;IACA,IAAI,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC9B,IAAI,IAAI,CAAC,QAAQ,GAAG,WAAW;IAC/B,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC;IACzB,KAAK,CAAC;AACN;IACA,IAAI,IAAI,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAClD,IAAI,IAAI,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC1C;IACA,IAAI,IAAI,YAAY,EAAE;IACtB,QAAQ,IAAI,WAAW,YAAY,wBAAwB,EAAE;IAC7D,YAAY,OAAO,GAAG,WAAW,CAAC;IAClC,YAAY,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IACpC,SAAS,MAAM,IAAI,WAAW,YAAY,iBAAiB,EAAE;IAC7D,YAAY,OAAO,GAAG,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACnD,YAAY,MAAM,GAAG,WAAW,CAAC;IACjC,SAAS;IACT,KAAK;AACL;IACA,IAAI,IAAI,gBAAgB,GAAG,IAAI,CAAC;AAChC;IACA,IAAI,IAAI,CAAC,YAAY,EAAE;IACvB,QAAQ,IAAI,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACpD,QAAQ,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;IAC3B,QAAQ,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;IAC9B,QAAQ,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;AACjC;IACA,QAAQ,gBAAgB,GAAG,KAAK,CAAC;IACjC,QAAQ,KAAK,CAAC,gBAAgB,GAAG,WAAW;IAC5C,YAAY,gBAAgB,GAAG,IAAI,CAAC;IACpC,SAAS,CAAC;AACV;IACA,QAAQ,YAAY,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;AACzC;IACA,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;IACrB,KAAK;AACL;IACA,IAAI,IAAI,kBAAkB,GAAG,IAAI,CAAC;IAClC,QAA4B,cAAc;AAC1C;IACA,IAAI,IAAI,UAAU,CAAC;AACnB;IACA,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC;IACpB,CAAC;AACD;IACA,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;IACtC,IAAI,SAAS,CAAC,WAAW,GAAG,WAAW,CAAC;IACxC,CAAC;AACD;IACA;AACA;IACA;IACA;AACA;IACA;AACA;IACA;IACA;IACA;IACA;AACA;IACA,SAAS,iBAAiB,CAAC,mBAAmB,EAAE,YAAY,EAAE;AAC9D;IACA,IAAI,IAAI,oBAAoB,GAAG,qFAAqF,CAAC;AACrH;IACA,IAAI,CAAC,SAAS,IAAI,EAAE;IACpB,QAAQ,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;IAC9C,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,IAAI,EAAE;IACnB,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;IAC3C,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,OAAOA,cAAM,KAAK,WAAW,EAAE;IAC3C,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQA,cAAM,CAAC,SAAS,GAAG;IAC3B,YAAY,SAAS,EAAE,oBAAoB;IAC3C,YAAY,YAAY,EAAE,WAAW,EAAE;IACvC,SAAS,CAAC;AACV;IACA,QAAQ,IAAI,CAACA,cAAM,CAAC,OAAO,EAAE;IAC7B,YAAYA,cAAM,CAAC,OAAO,GAAG,EAAE,CAAC;IAChC,SAAS;AACT;IACA,QAAQ,IAAI,OAAOA,cAAM,CAAC,OAAO,CAAC,GAAG,KAAK,WAAW,IAAI,OAAOA,cAAM,CAAC,OAAO,CAAC,KAAK,KAAK,WAAW,EAAE;IACtG,YAAYA,cAAM,CAAC,OAAO,CAAC,KAAK,GAAGA,cAAM,CAAC,OAAO,CAAC,GAAG,GAAGA,cAAM,CAAC,OAAO,CAAC,GAAG,IAAI,WAAW;IACzF,gBAAgB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACvC,aAAa,CAAC;IACd,SAAS;AACT;IACA,QAAQ,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;IAC7C;IACA,YAAY,IAAI,CAAC,QAAQ,GAAG;IAC5B,gBAAgB,eAAe,EAAE;IACjC,oBAAoB,WAAW,EAAE,WAAW;IAC5C,wBAAwB,OAAO,EAAE,CAAC;IAClC,qBAAqB;IACrB,iBAAiB;IACjB,aAAa,CAAC;AACd;IACA,YAAY,QAAQ,CAAC,aAAa,GAAG,QAAQ,CAAC,aAAa,GAAG,QAAQ,CAAC,gBAAgB,GAAG,WAAW;IACrG,gBAAgB,IAAI,GAAG,GAAG;IAC1B,oBAAoB,UAAU,EAAE,WAAW;IAC3C,wBAAwB,OAAO,GAAG,CAAC;IACnC,qBAAqB;IACrB,oBAAoB,IAAI,EAAE,WAAW,EAAE;IACvC,oBAAoB,KAAK,EAAE,WAAW,EAAE;IACxC,oBAAoB,SAAS,EAAE,WAAW,EAAE;IAC5C,oBAAoB,SAAS,EAAE,WAAW;IAC1C,wBAAwB,OAAO,EAAE,CAAC;IAClC,qBAAqB;IACrB,oBAAoB,KAAK,EAAE,EAAE;IAC7B,iBAAiB,CAAC;IAClB,gBAAgB,OAAO,GAAG,CAAC;IAC3B,aAAa,CAAC;AACd;IACA,YAAY,IAAI,CAAC,gBAAgB,GAAG,WAAW,EAAE,CAAC;IAClD,SAAS;AACT;IACA,QAAQ,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;IAC7C;IACA,YAAY,IAAI,CAAC,QAAQ,GAAG;IAC5B,gBAAgB,QAAQ,EAAE,OAAO;IACjC,gBAAgB,IAAI,EAAE,EAAE;IACxB,gBAAgB,IAAI,EAAE,EAAE;IACxB,aAAa,CAAC;IACd,SAAS;AACT;IACA,QAAQ,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;IAC3C;IACA,YAAY,IAAI,CAAC,MAAM,GAAG;IAC1B,gBAAgB,KAAK,EAAE,CAAC;IACxB,gBAAgB,MAAM,EAAE,CAAC;IACzB,aAAa,CAAC;IACd,SAAS;AACT;IACA,QAAQ,IAAI,OAAO,GAAG,KAAK,WAAW,EAAE;IACxC;IACA,YAAY,IAAI,CAAC,GAAG,GAAG;IACvB,gBAAgB,eAAe,EAAE,WAAW;IAC5C,oBAAoB,OAAO,EAAE,CAAC;IAC9B,iBAAiB;IACjB,gBAAgB,eAAe,EAAE,WAAW;IAC5C,oBAAoB,OAAO,EAAE,CAAC;IAC9B,iBAAiB;IACjB,aAAa,CAAC;IACd,SAAS;AACT;IACA;IACA,QAAQ,IAAI,CAAC,MAAM,GAAGA,cAAM,CAAC;IAC7B,KAAK,EAAE,OAAOA,cAAM,KAAK,WAAW,GAAGA,cAAM,GAAG,IAAI,CAAC,CAAC;AACtD;IACA;AACA;IACA,IAAI,YAAY,GAAG,YAAY,IAAI,qBAAqB,CAAC;AACzD;IACA,IAAI,IAAI,MAAM,GAAG,EAAE,CAAC;IACpB,IAAI,IAAI,mBAAmB,GAAG,KAAK,CAAC;AACpC;IACA,IAAI,IAAI,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAClD,IAAI,IAAI,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC;IAC7B,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;IACvC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC7B,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,SAAS,CAAC;IACjC,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC;IAClC,IAAI,MAAM,CAAC,SAAS,GAAG,YAAY,CAAC;IACpC,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;AACpE;IACA,IAAI,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC7B,IAAI,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;AAC5B;IACA,IAAI,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;IACrB,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC;AACtB;IACA;IACA,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AAC5B;IACA,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC;AACpB;IACA;IACA;AACA;IACA;IACA,IAAI,IAAI,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AAC3C;IACA,IAAI,IAAI,OAAO,YAAY,KAAK,WAAW,EAAE;IAC7C,QAAQ,IAAI,OAAO,kBAAkB,KAAK,WAAW,EAAE;IACvD;IACA,YAAY,YAAY,GAAG,kBAAkB,CAAC;IAC9C,SAAS;AACT;IACA,QAAQ,IAAI,OAAO,eAAe,KAAK,WAAW,EAAE;IACpD;IACA,YAAY,YAAY,GAAG,eAAe,CAAC;IAC3C,SAAS;IACT,KAAK;AACL;IACA;IACA,IAAI,IAAI,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;AACzB;IACA,IAAI,IAAI,OAAO,GAAG,KAAK,WAAW,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;IACxE;IACA,QAAQ,GAAG,GAAG,SAAS,CAAC;IACxB,KAAK;AACL;IACA,IAAI,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,OAAO,SAAS,CAAC,YAAY,KAAK,WAAW,EAAE;IAC3F,QAAQ,IAAI,OAAO,SAAS,CAAC,kBAAkB,KAAK,WAAW,EAAE;IACjE,YAAY,SAAS,CAAC,YAAY,GAAG,SAAS,CAAC,kBAAkB,CAAC;IAClE,SAAS;AACT;IACA,QAAQ,IAAI,OAAO,SAAS,CAAC,eAAe,KAAK,WAAW,EAAE;IAC9D,YAAY,SAAS,CAAC,YAAY,GAAG,SAAS,CAAC,eAAe,CAAC;IAC/D,SAAS;IACT,KAAK;AACL;IACA,IAAI,IAAI,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACzC;IACA,IAAI,IAAI,OAAO,WAAW,KAAK,WAAW,IAAI,OAAO,iBAAiB,KAAK,WAAW,EAAE;IACxF,QAAQ,WAAW,GAAG,iBAAiB,CAAC;IACxC,KAAK;AACL;IACA;IACA,IAAI,IAAI,OAAO,WAAW,KAAK,WAAW,EAAE;IAC5C;IACA,QAAQ,IAAI,OAAO,WAAW,CAAC,SAAS,CAAC,IAAI,KAAK,WAAW,EAAE;IAC/D,YAAY,WAAW,CAAC,SAAS,CAAC,IAAI,GAAG,WAAW;IACpD,gBAAgB,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,SAAS,KAAK,EAAE;IACzD,oBAAoB,KAAK,CAAC,IAAI,EAAE,CAAC;IACjC,iBAAiB,CAAC,CAAC;IACnB,aAAa,CAAC;IACd,SAAS;IACT,KAAK;AACL;IACA,IAAI,IAAI,OAAO,GAAG,EAAE,CAAC;AACrB;IACA,IAAI,IAAI,OAAO,YAAY,KAAK,WAAW,EAAE;IAC7C,QAAQ,OAAO,CAAC,YAAY,GAAG,YAAY,CAAC;IAC5C,KAAK,MAAM,IAAI,OAAO,kBAAkB,KAAK,WAAW,EAAE;IAC1D,QAAQ,OAAO,CAAC,YAAY,GAAG,kBAAkB,CAAC;IAClD,KAAK;AACL;IACA,IAAI,SAAS,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE;IAC3C,QAAQ,IAAI,WAAW,IAAI,OAAO,EAAE;IACpC,YAAY,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC;IACvC,SAAS,MAAM,IAAI,cAAc,IAAI,OAAO,EAAE;IAC9C,YAAY,OAAO,CAAC,YAAY,GAAG,MAAM,CAAC;IAC1C,SAAS,MAAM;IACf,YAAY,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC;IACvC,SAAS;IACT,KAAK;AACL;IACA,IAAI,IAAI,CAAC,kBAAkB,GAAG,WAAW;IACzC,QAAQ,kBAAkB,EAAE,CAAC;IAC7B,KAAK,CAAC;AACN;IACA,IAAI,SAAS,kBAAkB,GAAG;IAClC,QAAQ,IAAI,mBAAmB,EAAE;IACjC,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;AACzC;IACA,QAAQ,IAAI,UAAU,GAAG,KAAK,CAAC;IAC/B,QAAQ,IAAI,SAAS,GAAG,EAAE,CAAC;IAC3B,QAAQ,MAAM,CAAC,OAAO,CAAC,SAAS,KAAK,EAAE;IACvC,YAAY,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;IAC/B,gBAAgB,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;IAClC,aAAa;AACb;IACA,YAAY,IAAI,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE;IACzC,gBAAgB,UAAU,GAAG,KAAK,CAAC;IACnC,aAAa,MAAM;IACnB;IACA,gBAAgB,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtC,aAAa;IACb,SAAS,CAAC,CAAC;AACX;IACA,QAAQ,IAAI,UAAU,EAAE;IACxB,YAAY,MAAM,CAAC,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC;IACnD,YAAY,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;IACrD,SAAS,MAAM,IAAI,SAAS,CAAC,MAAM,EAAE;IACrC,YAAY,MAAM,CAAC,KAAK,GAAG,YAAY,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1F;IACA,YAAY,IAAI,MAAM,GAAG,CAAC,CAAC;IAC3B,YAAY,IAAI,YAAY,KAAK,CAAC,IAAI,YAAY,KAAK,CAAC,EAAE;IAC1D,gBAAgB,MAAM,GAAG,CAAC,CAAC;IAC3B,aAAa;IACb,YAAY,IAAI,YAAY,KAAK,CAAC,IAAI,YAAY,KAAK,CAAC,EAAE;IAC1D,gBAAgB,MAAM,GAAG,CAAC,CAAC;IAC3B,aAAa;IACb,YAAY,IAAI,YAAY,KAAK,CAAC,IAAI,YAAY,KAAK,CAAC,EAAE;IAC1D,gBAAgB,MAAM,GAAG,CAAC,CAAC;IAC3B,aAAa;IACb,YAAY,IAAI,YAAY,KAAK,CAAC,IAAI,YAAY,KAAK,EAAE,EAAE;IAC3D,gBAAgB,MAAM,GAAG,CAAC,CAAC;IAC3B,aAAa;IACb,YAAY,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC;IACzD,SAAS,MAAM;IACf,YAAY,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC;IAC7C,YAAY,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC;IAC/C,SAAS;AACT;IACA,QAAQ,IAAI,UAAU,IAAI,UAAU,YAAY,gBAAgB,EAAE;IAClE,YAAY,SAAS,CAAC,UAAU,CAAC,CAAC;IAClC,SAAS;AACT;IACA,QAAQ,SAAS,CAAC,OAAO,CAAC,SAAS,KAAK,EAAE,GAAG,EAAE;IAC/C,YAAY,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAClC,SAAS,CAAC,CAAC;AACX;IACA,QAAQ,UAAU,CAAC,kBAAkB,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAC3D,KAAK;AACL;IACA,IAAI,SAAS,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE;IACnC,QAAQ,IAAI,mBAAmB,EAAE;IACjC,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC;IAClB,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC;IAClB,QAAQ,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAChC,QAAQ,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC;IACA,QAAQ,IAAI,GAAG,KAAK,CAAC,EAAE;IACvB,YAAY,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;IAC5B,SAAS;AACT;IACA,QAAQ,IAAI,GAAG,KAAK,CAAC,EAAE;IACvB,YAAY,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IAC7B,SAAS;AACT;IACA,QAAQ,IAAI,GAAG,KAAK,CAAC,EAAE;IACvB,YAAY,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;IAC5B,YAAY,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IAC7B,SAAS;AACT;IACA,QAAQ,IAAI,GAAG,KAAK,CAAC,EAAE;IACvB,YAAY,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACjC,SAAS;AACT;IACA,QAAQ,IAAI,GAAG,KAAK,CAAC,EAAE;IACvB,YAAY,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;IAC5B,YAAY,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACjC,SAAS;AACT;IACA,QAAQ,IAAI,GAAG,KAAK,CAAC,EAAE;IACvB,YAAY,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACjC,SAAS;AACT;IACA,QAAQ,IAAI,GAAG,KAAK,CAAC,EAAE;IACvB,YAAY,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;IAC5B,YAAY,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACjC,SAAS;AACT;IACA,QAAQ,IAAI,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,WAAW,EAAE;IACtD,YAAY,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;IAClC,SAAS;AACT;IACA,QAAQ,IAAI,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,WAAW,EAAE;IACrD,YAAY,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;IACjC,SAAS;AACT;IACA,QAAQ,IAAI,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,KAAK,WAAW,EAAE;IACvD,YAAY,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;IACvC,SAAS;AACT;IACA,QAAQ,IAAI,OAAO,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE;IACxD,YAAY,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;IACzC,SAAS;AACT;IACA,QAAQ,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AACtD;IACA,QAAQ,IAAI,OAAO,KAAK,CAAC,MAAM,CAAC,QAAQ,KAAK,UAAU,EAAE;IACzD,YAAY,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IACrE,SAAS;IACT,KAAK;AACL;IACA,IAAI,SAAS,cAAc,GAAG;IAC9B,QAAQ,mBAAmB,GAAG,KAAK,CAAC;IACpC,QAAQ,IAAI,gBAAgB,GAAG,mBAAmB,EAAE,CAAC;AACrD;IACA,QAAQ,IAAI,gBAAgB,GAAG,mBAAmB,EAAE,CAAC;IACrD,QAAQ,IAAI,gBAAgB,EAAE;IAC9B,YAAY,gBAAgB,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;IAC5D,gBAAgB,OAAO,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC;IAC1C,aAAa,CAAC,CAAC,OAAO,CAAC,SAAS,KAAK,EAAE;IACvC,gBAAgB,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACjD,aAAa,CAAC,CAAC;IACf,SAAS;IAGT,QAAQ,mBAAmB,CAAC,OAAO,CAAC,SAAS,MAAM,EAAE;IACrD,YAAY,IAAI,MAAM,CAAC,UAAU,EAAE,CAEtB;IACb,SAAS,CAAC,CAAC;AACX;IACA;IACA;IACA;AACA;IACA,QAAQ,OAAO,gBAAgB,CAAC;IAChC,KAAK;AACL;IACA,IAAI,SAAS,mBAAmB,GAAG;IACnC,QAAQ,iBAAiB,EAAE,CAAC;AAC5B;IACA,QAAQ,IAAI,cAAc,CAAC;AAC3B;IACA,QAAQ,IAAI,eAAe,IAAI,MAAM,EAAE;IACvC,YAAY,cAAc,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC;IACpD,SAAS,MAAM,IAAI,kBAAkB,IAAI,MAAM,EAAE;IACjD,YAAY,cAAc,GAAG,MAAM,CAAC,gBAAgB,EAAE,CAAC;IACvD,SAAS,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;IACtC,YAAY,OAAO,CAAC,KAAK,CAAC,mHAAmH,CAAC,CAAC;IAC/I,SAAS;AACT;IACA,QAAQ,IAAI,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AAC5C;IACA,QAAQ,cAAc,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;IACtD,YAAY,OAAO,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC;IACtC,SAAS,CAAC,CAAC,OAAO,CAAC,SAAS,KAAK,EAAE;IACnC,YAAY,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxC,SAAS,CAAC,CAAC;AACX;IACA,QAAQ,MAAM,CAAC,MAAM,GAAG,WAAW,CAAC;AACpC;IACA,QAAQ,OAAO,WAAW,CAAC;IAC3B,KAAK;AACL;IACA,IAAI,SAAS,mBAAmB,GAAG;IACnC;IACA,QAAQ,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE;IAC9C,YAAY,OAAO,CAAC,uBAAuB,GAAG,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IACzE,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,uBAAuB,CAAC;AAC5D;IACA,QAAQ,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;AAC/B;IACA,QAAQ,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE;IACvC,YAAY,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;IAC3D,YAAY,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;IACjE,YAAY,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACzC,SAAS;AACT;IACA,QAAQ,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAClC,QAAQ,mBAAmB,CAAC,OAAO,CAAC,SAAS,MAAM,EAAE;IACrD,YAAY,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;IACvD,oBAAoB,OAAO,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC;IAC9C,iBAAiB,CAAC,CAAC,MAAM,EAAE;IAC3B,gBAAgB,OAAO;IACvB,aAAa;AACb;IACA,YAAY,iBAAiB,EAAE,CAAC;AAChC;IACA,YAAY,IAAI,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;AAChF;IACA,YAAY,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE;IAC3C,gBAAgB,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnD,aAAa;AACb;IACA,YAAY,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAChD,SAAS,CAAC,CAAC;AACX;IACA,QAAQ,IAAI,CAAC,iBAAiB,EAAE;IAChC;IACA;IACA,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,4BAA4B,EAAE,CAAC;IACjF,QAAQ,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,WAAW,EAAE;IACxD,YAAY,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACvD,SAAS,CAAC,CAAC;IACX,QAAQ,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;IAC5C,KAAK;AACL;IACA,IAAI,SAAS,QAAQ,CAAC,MAAM,EAAE;IAC9B,QAAQ,IAAI,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AACpD;IACA,QAAQ,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACpC;IACA,QAAQ,KAAK,CAAC,SAAS,GAAG,YAAY,CAAC;AACvC;IACA,QAAQ,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;IAC3B,QAAQ,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AACzB;IACA,QAAQ,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC;IACxD,QAAQ,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC;AAC3D;IACA,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;AACrB;IACA,QAAQ,OAAO,KAAK,CAAC;IACrB,KAAK;AACL;IACA,IAAI,IAAI,CAAC,aAAa,GAAG,SAAS,OAAO,EAAE;IAC3C,QAAQ,IAAI,CAAC,OAAO,EAAE;IACtB,YAAY,MAAM,8BAA8B,CAAC;IACjD,SAAS;AACT;IACA,QAAQ,IAAI,EAAE,OAAO,YAAY,KAAK,CAAC,EAAE;IACzC,YAAY,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC;IAChC,SAAS;AACT;IACA,QAAQ,OAAO,CAAC,OAAO,CAAC,SAAS,MAAM,EAAE;IACzC,YAAY,IAAI,SAAS,GAAG,IAAI,WAAW,EAAE,CAAC;AAC9C;IACA,YAAY,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;IACtD,oBAAoB,OAAO,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC;IAC9C,iBAAiB,CAAC,CAAC,MAAM,EAAE;IAC3B,gBAAgB,IAAI,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC7C,gBAAgB,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IACtC,gBAAgB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACnC;IACA,gBAAgB,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;IACzE,oBAAoB,OAAO,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC;IAC9C,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvB,aAAa;AACb;IACA,YAAY,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;IACtD,oBAAoB,OAAO,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC;IAC9C,iBAAiB,CAAC,CAAC,MAAM,EAAE;IAC3B,gBAAgB,IAAI,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;IACpF,gBAAgB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,4BAA4B,EAAE,CAAC;IACzF,gBAAgB,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAC3D;IACA,gBAAgB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;IAC/F,oBAAoB,OAAO,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC;IAC9C,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvB,aAAa;AACb;IACA,YAAY,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAChD,SAAS,CAAC,CAAC;IACX,KAAK,CAAC;AACN;IACA,IAAI,IAAI,CAAC,cAAc,GAAG,WAAW;IACrC,QAAQ,MAAM,GAAG,EAAE,CAAC;IACpB,QAAQ,mBAAmB,GAAG,IAAI,CAAC;AACnC;IACA,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE;IAC3B,YAAY,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;IACvC,YAAY,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACjC,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;IACtC,YAAY,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,MAAM,EAAE;IACvD,gBAAgB,MAAM,CAAC,UAAU,EAAE,CAAC;IACpC,aAAa,CAAC,CAAC;IACf,YAAY,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;IACnC,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,gBAAgB,EAAE;IACnC,YAAY,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;IAC/C,YAAY,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;IACzC,SAAS;AACT;IACA,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE;IAC/B,YAAY,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;IACtC,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACjC;IACA,QAAQ,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;AAC7D;IACA,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE;IAC3B,YAAY,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACjC,YAAY,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;IACjC,SAAS;IACT,KAAK,CAAC;AACN;IACA,IAAI,IAAI,CAAC,iBAAiB,GAAG,SAAS,OAAO,EAAE;IAC/C,QAAQ,IAAI,OAAO,IAAI,EAAE,OAAO,YAAY,KAAK,CAAC,EAAE;IACpD,YAAY,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC;IAChC,SAAS;AACT;IACA,QAAQ,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACnC,KAAK,CAAC;AACN;IACA,IAAI,SAAS,iBAAiB,CAAC,OAAO,EAAE;IACxC,QAAQ,MAAM,GAAG,EAAE,CAAC;IACpB,QAAQ,OAAO,GAAG,OAAO,IAAI,mBAAmB,CAAC;AACjD;IACA;IACA,QAAQ,OAAO,CAAC,OAAO,CAAC,SAAS,MAAM,EAAE;IACzC,YAAY,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE;IACvD,oBAAoB,OAAO,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC;IAC9C,iBAAiB,CAAC,CAAC,MAAM,EAAE;IAC3B,gBAAgB,OAAO;IACvB,aAAa;AACb;IACA,YAAY,IAAI,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IACzC,YAAY,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IAClC,YAAY,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/B,SAAS,CAAC,CAAC;IACX,KAAK;AACL;IACA;IACA,IAAI,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IACpC,IAAI,IAAI,CAAC,QAAQ,GAAG,WAAW;IAC/B,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC;IACzB,KAAK,CAAC;AACN;IACA,IAAI,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;AACzC;IACA,CAAC;AACD;IACA,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;IACtC,IAAiE;IACjE,QAAQ,MAAA,CAAA,OAAc,GAAG,iBAAiB,CAAC;IAC3C,KAAK;IAOL,CAAC;AACD;IACA;IACA;AACA;IACA;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;AACA;IACA,SAAS,mBAAmB,CAAC,mBAAmB,EAAE,OAAO,EAAE;IAC3D,IAAI,mBAAmB,GAAG,mBAAmB,IAAI,EAAE,CAAC;IACpD,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC;AACpB;IACA,IAAI,IAAI,KAAK,CAAC;IACd,IAAI,IAAI,aAAa,CAAC;AACtB;IACA,IAAI,OAAO,GAAG,OAAO,IAAI;IACzB,QAAQ,YAAY,EAAE,qBAAqB;IAC3C,QAAQ,QAAQ,EAAE,YAAY;IAC9B,QAAQ,KAAK,EAAE;IACf,YAAY,KAAK,EAAE,GAAG;IACtB,YAAY,MAAM,EAAE,GAAG;IACvB,SAAS;IACT,KAAK,CAAC;AACN;IACA,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE;IAChC,QAAQ,OAAO,CAAC,aAAa,GAAG,EAAE,CAAC;IACnC,KAAK;AACL;IACA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;IACxB,QAAQ,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC;IAC3B,KAAK;AACL;IACA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE;IAC9B,QAAQ,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC;IAClC,KAAK;AACL;IACA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE;IAC/B,QAAQ,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;IACnC,KAAK;AACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW;IAC7B;IACA,QAAQ,KAAK,GAAG,IAAI,iBAAiB,CAAC,mBAAmB,EAAE,OAAO,CAAC,YAAY,IAAI,qBAAqB,CAAC,CAAC;AAC1G;IACA,QAAQ,IAAI,iBAAiB,EAAE,CAAC,MAAM,EAAE;IACxC,YAAY,KAAK,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC;IAC9D,YAAY,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,GAAG,CAAC;IACrD,YAAY,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,GAAG,CAAC;IACvD,YAAY,KAAK,CAAC,kBAAkB,EAAE,CAAC;IACvC,SAAS;AACT;IACA,QAAQ,IAAI,OAAO,CAAC,aAAa,IAAI,OAAO,OAAO,CAAC,aAAa,KAAK,UAAU,EAAE;IAClF,YAAY,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC;IAC1D,SAAS;AACT;IACA;IACA,QAAQ,aAAa,GAAG,IAAI,mBAAmB,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,OAAO,CAAC,CAAC;IACjF,QAAQ,aAAa,CAAC,MAAM,EAAE,CAAC;IAC/B,KAAK,CAAC;AACN;IACA,IAAI,SAAS,iBAAiB,GAAG;IACjC,QAAQ,IAAI,MAAM,GAAG,EAAE,CAAC;IACxB,QAAQ,mBAAmB,CAAC,OAAO,CAAC,SAAS,MAAM,EAAE;IACrD,YAAY,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,SAAS,KAAK,EAAE;IAC/D,gBAAgB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnC,aAAa,CAAC,CAAC;IACf,SAAS,CAAC,CAAC;IACX,QAAQ,OAAO,MAAM,CAAC;IACtB,KAAK;AACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,IAAI,GAAG,SAAS,QAAQ,EAAE;IACnC,QAAQ,IAAI,CAAC,aAAa,EAAE;IAC5B,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,aAAa,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE;IAC1C,YAAY,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AAC7B;IACA,YAAY,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC3B;IACA,YAAY,IAAI,CAAC,iBAAiB,EAAE,CAAC;IACrC,SAAS,CAAC,CAAC;IACX,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,KAAK,GAAG,WAAW;IAC5B,QAAQ,IAAI,aAAa,EAAE;IAC3B,YAAY,aAAa,CAAC,KAAK,EAAE,CAAC;IAClC,SAAS;IACT,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW;IAC7B,QAAQ,IAAI,aAAa,EAAE;IAC3B,YAAY,aAAa,CAAC,MAAM,EAAE,CAAC;IACnC,SAAS;IACT,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,iBAAiB,GAAG,WAAW;IACxC,QAAQ,IAAI,aAAa,EAAE;IAC3B,YAAY,aAAa,CAAC,iBAAiB,EAAE,CAAC;IAC9C,YAAY,aAAa,GAAG,IAAI,CAAC;IACjC,SAAS;AACT;IACA,QAAQ,IAAI,KAAK,EAAE;IACnB,YAAY,KAAK,CAAC,cAAc,EAAE,CAAC;IACnC,YAAY,KAAK,GAAG,IAAI,CAAC;IACzB,SAAS;IACT,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,UAAU,GAAG,SAAS,OAAO,EAAE;IACxC,QAAQ,IAAI,CAAC,OAAO,EAAE;IACtB,YAAY,MAAM,8BAA8B,CAAC;IACjD,SAAS;AACT;IACA,QAAQ,IAAI,EAAE,OAAO,YAAY,KAAK,CAAC,EAAE;IACzC,YAAY,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC;IAChC,SAAS;AACT;IACA,QAAQ,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC5C;IACA,QAAQ,IAAI,CAAC,aAAa,IAAI,CAAC,KAAK,EAAE;IACtC,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AACrC;IACA,QAAQ,IAAI,OAAO,CAAC,aAAa,IAAI,OAAO,OAAO,CAAC,aAAa,KAAK,UAAU,EAAE;IAClF,YAAY,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC;IAC1D,SAAS;IACT,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,iBAAiB,GAAG,SAAS,OAAO,EAAE;IAC/C,QAAQ,IAAI,CAAC,KAAK,EAAE;IACpB,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,OAAO,IAAI,EAAE,OAAO,YAAY,KAAK,CAAC,EAAE;IACpD,YAAY,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC;IAChC,SAAS;AACT;IACA,QAAQ,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACzC,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,QAAQ,GAAG,WAAW;IAC/B,QAAQ,OAAO,KAAK,CAAC;IACrB,KAAK,CAAC;AACN;IACA;IACA,IAAI,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACtC,IAAI,IAAI,CAAC,QAAQ,GAAG,WAAW;IAC/B,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC;IACzB,KAAK,CAAC;IACN,CAAC;AACD;IACA,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;IACtC,IAAI,SAAS,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;IACxD,CAAC;AACD;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;AACA;IACA,SAAS,wBAAwB,CAAC,WAAW,EAAE,OAAO,EAAE;IACxD,IAAI,IAAI,CAAC,IAAI,EAAE;IACf,QAAQ,MAAM,sCAAsC,CAAC;IACrD,KAAK;AACL;IACA,IAAI,IAAI,OAAO,WAAW,KAAK,WAAW,EAAE;IAC5C,QAAQ,MAAM,2CAA2C,CAAC;IAC1D,KAAK;AACL;IACA,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC;AACpB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;AACzD;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,cAAc,GAAG,WAAW;IACrC,QAAQ,OAAO,IAAI,OAAO,CAAC,SAAS,OAAO,EAAE,MAAM,EAAE;IACrD,YAAY,IAAI;IAChB,gBAAgB,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC;IAChD,gBAAgB,OAAO,EAAE,CAAC;IAC1B,aAAa,CAAC,OAAO,CAAC,EAAE;IACxB,gBAAgB,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1B,aAAa;IACb,SAAS,CAAC,CAAC;IACX,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,aAAa,GAAG,WAAW;IACpC,QAAQ,OAAO,IAAI,OAAO,CAAC,SAAS,OAAO,EAAE,MAAM,EAAE;IACrD,YAAY,IAAI;IAChB,gBAAgB,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,SAAS,GAAG,EAAE;IAC3D,oBAAoB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;AACzD;IACA,oBAAoB,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;IACvD,wBAAwB,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACzD,wBAAwB,OAAO;IAC/B,qBAAqB;AACrB;IACA,oBAAoB,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,iBAAiB,CAAC,CAAC;IACnB,aAAa,CAAC,OAAO,CAAC,EAAE;IACxB,gBAAgB,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1B,aAAa;IACb,SAAS,CAAC,CAAC;IACX,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,cAAc,GAAG,WAAW;IACrC,QAAQ,OAAO,IAAI,OAAO,CAAC,SAAS,OAAO,EAAE,MAAM,EAAE;IACrD,YAAY,IAAI;IAChB,gBAAgB,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC;IAChD,gBAAgB,OAAO,EAAE,CAAC;IAC1B,aAAa,CAAC,OAAO,CAAC,EAAE;IACxB,gBAAgB,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1B,aAAa;IACb,SAAS,CAAC,CAAC;IACX,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,eAAe,GAAG,WAAW;IACtC,QAAQ,OAAO,IAAI,OAAO,CAAC,SAAS,OAAO,EAAE,MAAM,EAAE;IACrD,YAAY,IAAI;IAChB,gBAAgB,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC;IACjD,gBAAgB,OAAO,EAAE,CAAC;IAC1B,aAAa,CAAC,OAAO,CAAC,EAAE;IACxB,gBAAgB,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1B,aAAa;IACb,SAAS,CAAC,CAAC;IACX,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,UAAU,GAAG,SAAS,QAAQ,EAAE;IACzC,QAAQ,OAAO,IAAI,OAAO,CAAC,SAAS,OAAO,EAAE,MAAM,EAAE;IACrD,YAAY,IAAI;IAChB,gBAAgB,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,OAAO,EAAE;IAC5D,oBAAoB,OAAO,CAAC,OAAO,CAAC,CAAC;IACrC,iBAAiB,CAAC,CAAC;IACnB,aAAa,CAAC,OAAO,CAAC,EAAE;IACxB,gBAAgB,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1B,aAAa;IACb,SAAS,CAAC,CAAC;IACX,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,OAAO,GAAG,WAAW;IAC9B,QAAQ,OAAO,IAAI,OAAO,CAAC,SAAS,OAAO,EAAE,MAAM,EAAE;IACrD,YAAY,IAAI;IAChB,gBAAgB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;IAClD,aAAa,CAAC,OAAO,CAAC,EAAE;IACxB,gBAAgB,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1B,aAAa;IACb,SAAS,CAAC,CAAC;IACX,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,mBAAmB,GAAG,WAAW;IAC1C,QAAQ,OAAO,IAAI,OAAO,CAAC,SAAS,OAAO,EAAE,MAAM,EAAE;IACrD,YAAY,IAAI;IAChB,gBAAgB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAC9D,aAAa,CAAC,OAAO,CAAC,EAAE;IACxB,gBAAgB,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1B,aAAa;IACb,SAAS,CAAC,CAAC;IACX,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,KAAK,GAAG,WAAW;IAC5B,QAAQ,OAAO,IAAI,OAAO,CAAC,SAAS,OAAO,EAAE,MAAM,EAAE;IACrD,YAAY,IAAI;IAChB,gBAAgB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;IAChD,aAAa,CAAC,OAAO,CAAC,EAAE;IACxB,gBAAgB,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1B,aAAa;IACb,SAAS,CAAC,CAAC;IACX,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,OAAO,GAAG,WAAW;IAC9B,QAAQ,OAAO,IAAI,OAAO,CAAC,SAAS,OAAO,EAAE,MAAM,EAAE;IACrD,YAAY,IAAI;IAChB,gBAAgB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;IAClD,aAAa,CAAC,OAAO,CAAC,EAAE;IACxB,gBAAgB,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1B,aAAa;IACb,SAAS,CAAC,CAAC;IACX,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,QAAQ,GAAG,WAAW;IAC/B,QAAQ,OAAO,IAAI,OAAO,CAAC,SAAS,OAAO,EAAE,MAAM,EAAE;IACrD,YAAY,IAAI;IAChB,gBAAgB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;IACnD,aAAa,CAAC,OAAO,CAAC,EAAE;IACxB,gBAAgB,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1B,aAAa;IACb,SAAS,CAAC,CAAC;IACX,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACrB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAC3B,CAAC;AACD;IACA,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;IACtC,IAAI,SAAS,CAAC,wBAAwB,GAAG,wBAAwB,CAAC;IAClE,CAAC;AACD;IACA;IACA;AACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,SAAS,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE;IAC7C;AACA;IACA,IAAI,IAAI,OAAO,cAAc,KAAK,WAAW,IAAI,OAAO,cAAc,KAAK,WAAW,EAAE;IACxF;IACA,QAAQ,OAAO,CAAC,KAAK,CAAC,yHAAyH,CAAC,CAAC;IACjJ,KAAK;AACL;IACA,IAAI,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;AAC1B;IACA,IAAI,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,GAAG,CAAC;IACvC,IAAI,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC;IACzC,IAAI,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;IAC9C,IAAI,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC;IAC5C,IAAI,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC;AAO9C;IACA,IAAI,IAAI,QAAQ,CAAC;AACjB;IACA,IAAI,SAAS,YAAY,GAAG;IAC5B,QAAQ,OAAO,IAAI,cAAc,CAAC;IAClC,YAAY,KAAK,EAAE,SAAS,UAAU,EAAE;IACxC,gBAAgB,IAAI,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC3D,gBAAgB,IAAI,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC5D,gBAAgB,IAAI,KAAK,GAAG,IAAI,CAAC;IACjC,gBAAgB,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC;IACzC,gBAAgB,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;IACnC,gBAAgB,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC7C,gBAAgB,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAC3C,gBAAgB,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACjC,gBAAgB,KAAK,CAAC,SAAS,GAAG,WAAW;IAC7C,oBAAoB,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAC7C,oBAAoB,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC/C,oBAAoB,IAAI,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACnD,oBAAoB,IAAI,YAAY,GAAG,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC;IAC/D,oBAAoB,IAAI,WAAW,GAAG,WAAW,CAAC,SAAS,CAAC,GAAG;IAC/D,wBAAwB,IAAI,QAAQ,EAAE;IACtC,4BAA4B,aAAa,CAAC,WAAW,CAAC,CAAC;IACvD,4BAA4B,UAAU,CAAC,KAAK,EAAE,CAAC;IAC/C,yBAAyB;AACzB;IACA,wBAAwB,IAAI,KAAK,EAAE;IACnC,4BAA4B,KAAK,GAAG,KAAK,CAAC;IAC1C,4BAA4B,IAAI,MAAM,CAAC,qBAAqB,EAAE;IAC9D,gCAAgC,MAAM,CAAC,qBAAqB,EAAE,CAAC;IAC/D,6BAA6B;IAC7B,yBAAyB;AACzB;IACA,wBAAwB,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACnD,wBAAwB,IAAI,UAAU,CAAC,yBAAyB,CAAC,KAAK,KAAK,QAAQ,EAAE;IACrF,4BAA4B,IAAI;IAChC,gCAAgC,UAAU,CAAC,OAAO;IAClD,oCAAoC,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;IACvF,iCAAiC,CAAC;IAClC,6BAA6B,CAAC,OAAO,CAAC,EAAE,EAAE;IAC1C,yBAAyB;IACzB,qBAAqB,EAAE,YAAY,CAAC,CAAC;IACrC,iBAAiB,CAAC;IAClB,gBAAgB,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,aAAa;IACb,SAAS,CAAC,CAAC;IACX,KAAK;AACL;IACA,IAAI,IAAI,MAAM,CAAC;AACf;IACA,IAAI,SAAS,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE;IAC5C,QAAQ,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,MAAM,EAAE;IAC3C,YAAY,QAAQ,GAAG,KAAK,CAAC;AAC7B;IACA;AACA;IACA,YAAY,KAAK;IACjB,gBAAgB,wDAAwD;IACxE,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;IAC/B,gBAAgB,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,SAAS,MAAM,EAAE;IACtD,oBAAoB,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnD,iBAAiB,CAAC,CAAC;IACnB,aAAa,CAAC,CAAC;IACf,YAAY,OAAO;IACnB,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,MAAM,YAAY,WAAW,EAAE;IACjE,YAAY,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE;IAC1C,gBAAgB,IAAI,EAAE,iBAAiB;IACvC,aAAa,CAAC,CAAC;IACf,YAAY,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAC1D,SAAS;AACT;IACA,QAAQ,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE;IAChC,YAAY,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAC9D,SAAS;AACT;IACA,QAAQ,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAC/C;IACA,QAAQ,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,eAAe,IAAI,wDAAwD,CAAC,CAAC;IAC/G,QAAQ,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,KAAK,EAAE;IAC3D,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE;IACxC,gBAAgB,MAAM,CAAC,WAAW,CAAC;IACnC,oBAAoB,KAAK,EAAE,MAAM,CAAC,KAAK;IACvC,oBAAoB,MAAM,EAAE,MAAM,CAAC,MAAM;IACzC,oBAAoB,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,IAAI;IACnD,oBAAoB,WAAW,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE;IACvD,oBAAoB,QAAQ,EAAE,MAAM,CAAC,QAAQ;IAC7C,iBAAiB,CAAC,CAAC;AACnB;IACA,gBAAgB,YAAY,EAAE,CAAC,MAAM,CAAC,IAAI,cAAc,CAAC;IACzD,oBAAoB,KAAK,EAAE,SAAS,KAAK,EAAE;IAC3C,wBAAwB,IAAI,QAAQ,EAAE;IACtC,4BAA4B,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAClF,4BAA4B,OAAO;IACnC,yBAAyB;AACzB;IACA,wBAAwB,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACnF,qBAAqB;IACrB,iBAAiB,CAAC,CAAC,CAAC;IACpB,aAAa,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE;IACrC,gBAAgB,IAAI,CAAC,QAAQ,EAAE;IAC/B,oBAAoB,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACpD,iBAAiB;IACjB,aAAa;IACb,SAAS,CAAC,CAAC;IACX,KAAK;AACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW;IAC7B,QAAQ,cAAc,GAAG,EAAE,CAAC;IAC5B,QAAQ,QAAQ,GAAG,KAAK,CAAC;IACzB,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACzB,QAAQ,cAAc,CAAC,MAAM,CAAC,CAAC;AAC/B;IACA,QAAQ,IAAI,OAAO,MAAM,CAAC,YAAY,KAAK,UAAU,EAAE;IACvD,YAAY,MAAM,CAAC,YAAY,EAAE,CAAC;IAClC,SAAS;IACT,KAAK,CAAC;AACN;IACA,IAAI,IAAI,QAAQ,CAAC;AACjB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,KAAK,GAAG,WAAW;IAC5B,QAAQ,QAAQ,GAAG,IAAI,CAAC;IACxB,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW;IAC7B,QAAQ,QAAQ,GAAG,KAAK,CAAC;IACzB,KAAK,CAAC;AACN;IACA,IAAI,SAAS,SAAS,CAAC,QAAQ,EAAE;IACjC,QAAQ,IAAI,CAAC,MAAM,EAAE;IACrB,YAAY,IAAI,QAAQ,EAAE;IAC1B,gBAAgB,QAAQ,EAAE,CAAC;IAC3B,aAAa;AACb;IACA,YAAY,OAAO;IACnB,SAAS;AACT;IACA;IACA,QAAQ,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,KAAK,EAAE;IAC3D,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE;IACrC,gBAAgB,MAAM,CAAC,SAAS,EAAE,CAAC;IACnC,gBAAgB,MAAM,GAAG,IAAI,CAAC;AAC9B;IACA,gBAAgB,IAAI,QAAQ,EAAE;IAC9B,oBAAoB,QAAQ,EAAE,CAAC;IAC/B,iBAAiB;IACjB,aAAa;IACb,SAAS,CAAC,CAAC;AACX;IACA,QAAQ,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACjC,KAAK;AACL;IACA,IAAI,IAAI,cAAc,GAAG,EAAE,CAAC;AAC5B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,IAAI,GAAG,SAAS,QAAQ,EAAE;IACnC,QAAQ,QAAQ,GAAG,IAAI,CAAC;AACxB;IACA,QAAQ,IAAI,QAAQ,GAAG,IAAI,CAAC;AAC5B;IACA,QAAQ,SAAS,CAAC,WAAW;IAC7B,YAAY,QAAQ,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,cAAc,EAAE;IACrD,gBAAgB,IAAI,EAAE,YAAY;IAClC,aAAa,CAAC,CAAC;AACf;IACA,YAAY,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACpC,SAAS,CAAC,CAAC;IACX,KAAK,CAAC;AACN;IACA;IACA,IAAI,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACtC,IAAI,IAAI,CAAC,QAAQ,GAAG,WAAW;IAC/B,QAAQ,OAAO,IAAI,CAAC,IAAI,CAAC;IACzB,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,iBAAiB,GAAG,WAAW;IACxC,QAAQ,cAAc,GAAG,EAAE,CAAC;IAC5B,QAAQ,QAAQ,GAAG,KAAK,CAAC;IACzB,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACzB;IACA;IACA,KAAK,CAAC;AACN;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;AACD;IACA,IAAI,OAAO,SAAS,KAAK,WAAW,EAAE;IACtC,IAAI,SAAS,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;IACxD,CAAA;;;IC7jMe,MAAMC,eAAN,SAA8BrP,OAA9B,CAAsC;IACjD1L,EAAAA,WAAW,CAACuB,MAAD,EAAS;IAChB,IAAA,KAAA,EAAA,CAAA;IACA,IAAKA,IAAAA,CAAAA,MAAL,GAAcA,MAAd,CAAA;IACA,IAAK8C,IAAAA,CAAAA,QAAL,GAAgB,EAAhB,CAAA;IACA,IAAA,IAAA,CAAK2W,QAAL,GAAgBtc,WAAW,CAACE,IAA5B,CAAA;IACA,IAAKqc,IAAAA,CAAAA,WAAL,GAAmB,KAAnB,CAAA;IACA,IAAK3f,IAAAA,CAAAA,kBAAL,GAA0B,CAA1B,CAAA;IACA,IAAK4f,IAAAA,CAAAA,iBAAL,GAAyB,IAAzB,CAAA;IACA3Z,IAAAA,MAAM,CAAC9K,KAAP,CAAauE,GAAb,CAAiB,UAAjB,EAA6B,MAA7B,CAAA,CAAA;IACH,GAAA;;IAEDoB,EAAAA,OAAO,GAAG;IACN,IAAA,IAAA,CAAK+e,MAAL,EAAA,CAAA;;IACA,IAAK5Z,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,UAAtB,EAAkC,SAAlC,CAAA,CAAA;IACH,GAAA;;IAEDogB,EAAAA,WAAW,CAAC/W,QAAD,EAAW2W,QAAX,EAAqB;IAC5B,IAAK3W,IAAAA,CAAAA,QAAL,GAAgBA,QAAhB,CAAA;;IAEA,IAAI3F,IAAAA,WAAW,CAACC,GAAZ,KAAoBqc,QAApB,IAAgCtc,WAAW,CAACE,IAAZ,KAAqBoc,QAAzD,EAAmE;IAC/D,MAAKA,IAAAA,CAAAA,QAAL,GAAgBA,QAAhB,CAAA;IACH,KAAA;IACJ,GAAA;;IAEY,EAAA,IAAT3f,SAAS,GAAG;IACZ,IAAA,OAAO,KAAK4f,WAAZ,CAAA;IACH,GAAA;;IAEa,EAAA,IAAVI,UAAU,GAAG;IACb,IAAA,OAAO,KAAK/f,kBAAZ,CAAA;IACH,GAAA;;IAEDggB,EAAAA,WAAW,GAAG;IACV,IAAA,MAAM7kB,KAAK,GAAG,IAAK8K,CAAAA,MAAL,CAAY9K,KAA1B,CAAA;IACA,IAAA,MAAM0gB,OAAO,GAAG;IACZvT,MAAAA,IAAI,EAAE,OADM;IAEZ2X,MAAAA,QAAQ,EAAE,wBAFE;IAGZC,MAAAA,WAAW,EAAGC,SAAD,IAAe;IACxBhlB,QAAAA,KAAK,CAACuE,GAAN,CAAU,UAAV,EAAsB,uBAAuBygB,SAA7C,CAAA,CAAA;IACH,OALW;IAMZC,MAAAA,WAAW,EAAE,CAAC,KAAKna,MAAL,CAAYpB,IAAZ,CAAiB1J,KAAAA;IANnB,KAAhB,CAAA;;IASA,IAAI,IAAA;IACA,MAAA,MAAMklB,MAAM,GAAG,IAAKpa,CAAAA,MAAL,CAAYzH,KAAZ,CAAkB4X,aAAlB,CAAgCkK,aAAhC,CAA8C,EAA9C,CAAf,CAAA;;IACA,MAAA,IAAI,KAAKra,MAAL,CAAY3J,KAAZ,IAAqB,IAAA,CAAK2J,MAAL,CAAY3J,KAAZ,CAAkB+e,+BAAvC,IACA,KAAKpV,MAAL,CAAY3J,KAAZ,CAAkB+e,+BAAlB,CAAkDgF,MADlD,IAEA,CAAC,IAAKpa,CAAAA,MAAL,CAAY3J,KAAZ,CAAkB6f,gBAAlB,EAFD,IAGA,KAAKlW,MAAL,CAAY3J,KAAZ,CAAkBN,QAHlB,IAG8B,IAAKiK,CAAAA,MAAL,CAAYpB,IAAZ,CAAiB7I,QAHnD,EAG6D;IACzD,QAAMukB,MAAAA,WAAW,GAAG,IAAKta,CAAAA,MAAL,CAAY3J,KAAZ,CAAkB+e,+BAAlB,CAAkDgF,MAAtE,CAAA;;IACA,QAAA,IAAIE,WAAW,CAACC,cAAZ,GAA6B/Y,MAA7B,GAAsC,CAA1C,EAA6C;IACzC,UAAA,MAAMgZ,UAAU,GAAGF,WAAW,CAACC,cAAZ,EAAA,CAA6B,CAA7B,CAAnB,CAAA;;IACA,UAAA,IAAIC,UAAU,IAAIA,UAAU,CAACC,OAA7B,EAAsC;IAClCL,YAAAA,MAAM,CAACM,QAAP,CAAgBF,UAAhB,CAAA,CAAA;IACH,WAAA;IACJ,SAAA;IACJ,OAAA;;IACD,MAAA,IAAA,CAAKG,QAAL,GAAgBC,WAAS,CAACR,MAAD,EAASxE,OAAT,CAAzB,CAAA;IACH,KAfD,CAeE,OAAO/T,CAAP,EAAU;IACR3M,MAAAA,KAAK,CAACwE,KAAN,CAAY,UAAZ,EAAwBmI,CAAxB,CAAA,CAAA;IACA,MAAA,IAAA,CAAKuH,IAAL,CAAUtQ,MAAM,CAACoB,iBAAjB,CAAA,CAAA;IACH,KAAA;;IACD,IAAI,IAAA,IAAA,CAAKygB,QAAT,EAAmB;IACf,MAAKjB,IAAAA,CAAAA,WAAL,GAAmB,IAAnB,CAAA;IACA,MAAK1Z,IAAAA,CAAAA,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAACgB,SAAxB,EAAmC,IAAnC,CAAA,CAAA;IACA,MAAK6gB,IAAAA,CAAAA,QAAL,CAAcE,cAAd,EAAA,CAAA;IACA3lB,MAAAA,KAAK,CAACuE,GAAN,CAAU,UAAV,EAAsB,iBAAtB,CAAA,CAAA;IACA,MAAA,IAAA,CAAKuG,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAACkB,WAAxB,CAAA,CAAA;IACA,MAAA,IAAA,CAAK2f,iBAAL,GAAyBjU,MAAM,CAACoV,WAAP,CAAmB,MAAM;IAC9C,QAAK/gB,IAAAA,CAAAA,kBAAL,IAA2B,CAA3B,CAAA;IACA,QAAKiG,IAAAA,CAAAA,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAACiB,kBAAxB,EAA4C,IAAA,CAAKA,kBAAjD,CAAA,CAAA;IACH,OAHwB,EAGtB,IAHsB,CAAzB,CAAA;IAIH,KAAA;IACJ,GAAA;;IAEDghB,EAAAA,iBAAiB,GAAG;IAChB,IAAA,IAAI,CAAC,IAAKJ,CAAAA,QAAN,IAAkB,CAAC,IAAA,CAAKjB,WAA5B,EAAyC;IACrC,MAAA,OAAA;IACH,KAAA;;IACD,IAAA,IAAA,CAAKiB,QAAL,CAAcK,aAAd,CAA4B,MAAM;IAC9B,MAAKhb,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,UAAtB,EAAkC,gBAAlC,CAAA,CAAA;IACA,MAAA,IAAA,CAAKuG,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAACmB,SAAxB,CAAA,CAAA;IACAuL,MAAAA,cAAc,CAAC,IAAKmV,CAAAA,QAAL,CAAcM,OAAd,EAAD,EAA0B,IAAKnY,CAAAA,QAA/B,EAAyC,IAAA,CAAK2W,QAA9C,CAAd,CAAA;;IACA,MAAA,IAAA,CAAKG,MAAL,EAAA,CAAA;;IACA,MAAK5Z,IAAAA,CAAAA,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAACgB,SAAxB,EAAmC,KAAnC,CAAA,CAAA;IACH,KAND,CAAA,CAAA;IAOH,GAAA;;IAED8f,EAAAA,MAAM,GAAG;IACL,IAAKF,IAAAA,CAAAA,WAAL,GAAmB,KAAnB,CAAA;IACA,IAAK3f,IAAAA,CAAAA,kBAAL,GAA0B,CAA1B,CAAA;;IAEA,IAAI,IAAA,IAAA,CAAK4gB,QAAT,EAAmB;IACf,MAAKA,IAAAA,CAAAA,QAAL,CAAc9f,OAAd,EAAA,CAAA;IACA,MAAK8f,IAAAA,CAAAA,QAAL,GAAgB,IAAhB,CAAA;IACH,KAAA;;IACD,IAAK7X,IAAAA,CAAAA,QAAL,GAAgB,IAAhB,CAAA;;IACA,IAAI,IAAA,IAAA,CAAK6W,iBAAT,EAA4B;IACxBuB,MAAAA,aAAa,CAAC,IAAKvB,CAAAA,iBAAN,CAAb,CAAA;IACH,KAAA;;IACD,IAAKA,IAAAA,CAAAA,iBAAL,GAAyB,IAAzB,CAAA;IACH,GAAA;;IAtGgD;;ICHtC,MAAMwB,QAAN,CAAe;IAC1B1c,EAAAA,WAAW,CAACuB,MAAD,EAAS;IAChB,IAAA,MAAMiU,MAAM,GAAGkH,QAAQ,CAACjH,gBAAT,EAAf,CAAA;IACA,IAAA,OAAO,IAAID,MAAJ,CAAWjU,MAAX,CAAP,CAAA;IACH,GAAA;;IAEsB,EAAA,OAAhBkU,gBAAgB,GAAG;IACtB,IAAA,OAAOsF,eAAP,CAAA;IACH,GAAA;;IARyB;;ICCf,MAAM4B,aAAN,CAAoB;IAC/B3c,EAAAA,WAAW,CAACuB,MAAD,EAAS;IAChB,IAAKA,IAAAA,CAAAA,MAAL,GAAcA,MAAd,CAAA;IACA,IAAKqb,IAAAA,CAAAA,aAAL,GAAqB,IAAIC,MAAJ,CAAWtb,MAAM,CAACpB,IAAP,CAAYjI,OAAvB,CAArB,CAAA;;IACA,IAAA,IAAA,CAAK4kB,kBAAL,EAAA,CAAA;;IACAvb,IAAAA,MAAM,CAAC9K,KAAP,CAAauE,GAAb,CAAiB,eAAjB,EAAkC,MAAlC,CAAA,CAAA;IACH,GAAA;;IAEDoB,EAAAA,OAAO,GAAG;IACN,IAAKwgB,IAAAA,CAAAA,aAAL,CAAmBG,WAAnB,CAA+B;IAACC,MAAAA,GAAG,EAAEhjB,gBAAgB,CAACG,KAAAA;IAAvB,KAA/B,CAAA,CAAA;IACA,IAAKyiB,IAAAA,CAAAA,aAAL,CAAmBK,SAAnB,EAAA,CAAA;IACA,IAAKL,IAAAA,CAAAA,aAAL,GAAqB,IAArB,CAAA;IACA,IAAKrb,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAuB,CAAA,aAAA,CAAvB,EAAuC,SAAvC,CAAA,CAAA;IACH,GAAA;;IAED8hB,EAAAA,kBAAkB,GAAG;IACjB,IAAM,MAAA;IACFrmB,MAAAA,KADE;IAEFqU,MAAAA,MAAM,EAAE;IAACrK,QAAAA,KAAAA;IAAD,OAAA;IAFN,KAAA,GAGF,KAAKc,MAHT,CAAA;;IAKA,IAAA,IAAA,CAAKqb,aAAL,CAAmBM,SAAnB,GAAgC5b,KAAD,IAAW;IACtC,MAAA,MAAMoR,GAAG,GAAGpR,KAAK,CAAC8K,IAAlB,CAAA;;IACA,MAAQsG,QAAAA,GAAG,CAACsK,GAAZ;IACI,QAAKhkB,KAAAA,eAAe,CAACC,IAArB;IACIxC,UAAAA,KAAK,CAACuE,GAAN,CAAW,CAAA,aAAA,CAAX,EAA2B,YAA3B,EAAyChC,eAAe,CAACC,IAAzD,CAAA,CAAA;;IACA,UAAA,IAAI,CAAC,IAAA,CAAKsI,MAAL,CAAYyJ,MAAjB,EAAyB;IACrB,YAAA,IAAA,CAAKzJ,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAACM,IAAxB,CAAA,CAAA;IACH,WAAA;;IACD,UAAA,IAAA,CAAK4G,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAACE,iBAAxB,CAAA,CAAA;;IACA,UAAA,IAAA,CAAK4iB,SAAL,EAAA,CAAA;;IACA,UAAA,MAAA;;IACJ,QAAKnkB,KAAAA,eAAe,CAACS,SAArB;IACIhD,UAAAA,KAAK,CAACuE,GAAN,CAAW,eAAX,EAA2B,YAA3B,EAAyChC,eAAe,CAACS,SAAzD,EAAoEiZ,GAAG,CAAC0K,IAAxE,CAAA,CAAA;;IACA,UAAA,IAAI,CAAC,IAAK7b,CAAAA,MAAL,CAAYkY,MAAZ,CAAmB9P,WAAxB,EAAqC;IACjC,YAAA,IAAA,CAAKpI,MAAL,CAAYkY,MAAZ,CAAmB9P,WAAnB,GAAiC3E,GAAG,EAApC,CAAA;IACH,WAAA;;IACD,UAAA,IAAA,CAAKzD,MAAL,CAAYzH,KAAZ,CAAkBoX,eAAlB,CAAkC;IAC9BC,YAAAA,WAAW,EAAEuB,GAAG,CAAC0K,IAAAA;IADa,WAAlC,CAAA,CAAA;IAGA,UAAA,MAAA;;IACJ,QAAKpkB,KAAAA,eAAe,CAACQ,SAArB;IACI/C,UAAAA,KAAK,CAACuE,GAAN,CAAW,eAAX,EAA2B,YAA3B,EAAyChC,eAAe,CAACQ,SAAzD,EAAoEkZ,GAAG,CAAC0K,IAAxE,CAAA,CAAA;IACA,UAAK7b,IAAAA,CAAAA,MAAL,CAAY3J,KAAZ,IAAqB,IAAA,CAAK2J,MAAL,CAAY3J,KAAZ,CAAkB0f,eAAlB,CAAkC;IACnDnG,YAAAA,WAAW,EAAEuB,GAAG,CAAC0K,IAAAA;IADkC,WAAlC,CAArB,CAAA;IAGA,UAAA,MAAA;;IACJ,QAAKpkB,KAAAA,eAAe,CAACE,SAArB;IACIzC,UAAAA,KAAK,CAACuE,GAAN,CAAW,eAAX,EAA2B,YAA3B,EAAyChC,eAAe,CAACE,SAAzD,EAAqE,CAAA,MAAA,EAAQwZ,GAAG,CAAC1C,CAAE,WAAU0C,GAAG,CAAC3K,CAAE,CAAnG,CAAA,CAAA,CAAA;IACA,UAAA,IAAA,CAAKxG,MAAL,CAAYzH,KAAZ,CAAkBoX,eAAlB,CAAkC;IAC9BpP,YAAAA,KAAK,EAAE4Q,GAAG,CAAC1C,CADmB;IAE9B9N,YAAAA,MAAM,EAAEwQ,GAAG,CAAC3K,CAAAA;IAFkB,WAAlC,CAAA,CAAA;IAIA,UAAA,IAAA,CAAKxG,MAAL,CAAYzH,KAAZ,CAAkB2Y,kBAAlB,EAAA,CAAA;IACA,UAAA,MAAA;;IACJ,QAAKzZ,KAAAA,eAAe,CAACK,SAArB;IACI5C,UAAAA,KAAK,CAACuE,GAAN,CAAW,eAAX,EAA2B,YAA3B,EAAyChC,eAAe,CAACK,SAAzD,EAAqE,CAAA,SAAA,EAAWqZ,GAAG,CAACuE,QAAS,eAAcvE,GAAG,CAACwE,UAAW,CAA1H,CAAA,CAAA,CAAA;;IACA,UAAA,IAAI,IAAK3V,CAAAA,MAAL,CAAY3J,KAAhB,EAAuB;IACnB,YAAA,IAAA,CAAK2J,MAAL,CAAY3J,KAAZ,CAAkB0f,eAAlB,CAAkC5E,GAAlC,CAAA,CAAA;IACA,YAAA,IAAA,CAAKnR,MAAL,CAAY3J,KAAZ,CAAkBggB,cAAlB,CAAiClF,GAAjC,CAAA,CAAA;IACH,WAAA;;IACD,UAAA,MAAA;;IACJ,QAAK1Z,KAAAA,eAAe,CAACG,MAArB;IACI;IACA,UAAKoI,IAAAA,CAAAA,MAAL,CAAY8b,YAAZ,EAAA,CAAA;IACA,UAAA,IAAA,CAAK9b,MAAL,CAAYzH,KAAZ,CAAkBX,MAAlB,CAAyBuZ,GAAzB,CAAA,CAAA;IACA,UAAKnR,IAAAA,CAAAA,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAACS,UAAxB,EAAoC4X,GAAG,CAACC,EAAxC,CAAA,CAAA;IACA,UAAKpR,IAAAA,CAAAA,MAAL,CAAY+b,WAAZ,CAAwB;IAAC7U,YAAAA,GAAG,EAAE,IAAN;IAAYkK,YAAAA,EAAE,EAAED,GAAG,CAACC,EAApB;IAAwB4K,YAAAA,GAAG,EAAE7K,GAAG,CAAC8K,KAAAA;IAAjC,WAAxB,CAAA,CAAA;;IACA,UAAA,IAAI,CAAC,IAAKjc,CAAAA,MAAL,CAAYkY,MAAZ,CAAmB7P,UAAxB,EAAoC;IAChC,YAAA,IAAA,CAAKrI,MAAL,CAAYkY,MAAZ,CAAmB7P,UAAnB,GAAgC5E,GAAG,EAAnC,CAAA;IACA,YAAKzD,IAAAA,CAAAA,MAAL,CAAYkc,uBAAZ,EAAA,CAAA;IACH,WAAA;;IACD,UAAA,MAAA;;IACJ,QAAKzkB,KAAAA,eAAe,CAACI,SAArB;IACI;IACA;IACA,UAAI,IAAA,IAAA,CAAKmI,MAAL,CAAY/G,OAAZ,IAAuB,IAAK+G,CAAAA,MAAL,CAAY3J,KAAvC,EAA8C;IAC1C,YAAA,IAAA,CAAK2J,MAAL,CAAY3J,KAAZ,CAAkBD,IAAlB,CAAuB+a,GAAG,CAAChX,MAA3B,EAAmCgX,GAAG,CAACC,EAAvC,CAAA,CAAA;IACH,WAAA;;IACD,UAAA,MAAA;;IACJ,QAAK3Z,KAAAA,eAAe,CAACU,SAArB;IACI,UAAIgZ,IAAAA,GAAG,CAACkI,OAAR,EAAiB;IACb,YAAA,IAAIlI,GAAG,CAACkI,OAAJ,CAAY8C,OAAZ,CAAoB/jB,UAAU,CAACC,kBAA/B,CAAA,KAAuD,CAAC,CAA5D,EAA+D;IAC3D,cAAK2H,IAAAA,CAAAA,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAACY,KAAxB,EAA+B6B,YAAY,CAACM,eAA5C,CAAA,CAAA;IACA,cAAA,IAAA,CAAKmE,MAAL,CAAYoJ,IAAZ,CAAiB7N,YAAY,CAACM,eAA9B,CAAA,CAAA;IACH,aAAA;IACJ,WAAA;;IACD,UAAA,MAAA;;IACJ,QAAA;IACI,UAAA,IAAA,CAAKmE,MAAL,CAAYmR,GAAG,CAACsK,GAAhB,CAAwB,IAAA,IAAA,CAAKzb,MAAL,CAAYmR,GAAG,CAACsK,GAAhB,CAAA,CAAqBtK,GAArB,CAAxB,CAAA;IAlER,OAAA;IAoEH,KAtED,CAAA;IAuEH,GAAA;;IAEDyK,EAAAA,SAAS,GAAG;IACR,IAAA,MAAMzH,GAAG,GAAG;IACRjf,MAAAA,KAAK,EAAE,IAAA,CAAK8K,MAAL,CAAYpB,IAAZ,CAAiB1J,KADhB;IAER4B,MAAAA,gBAAgB,EAAE,IAAA,CAAKkJ,MAAL,CAAYpB,IAAZ,CAAiB9H,gBAF3B;IAGRI,MAAAA,MAAM,EAAE,IAAA,CAAK8I,MAAL,CAAYpB,IAAZ,CAAiB1H,MAHjB;IAIRpC,MAAAA,WAAW,EAAE,IAAA,CAAKkL,MAAL,CAAYpB,IAAZ,CAAiB9J,WAJtB;IAKR0C,MAAAA,kBAAkB,EAAE,IAAA,CAAKwI,MAAL,CAAYpB,IAAZ,CAAiBpH,kBAAAA;IAL7B,KAAZ,CAAA;IAOA,IAAK6jB,IAAAA,CAAAA,aAAL,CAAmBG,WAAnB,CAA+B;IAC3BC,MAAAA,GAAG,EAAEhjB,gBAAgB,CAACf,IADK;IAE3Byc,MAAAA,GAAG,EAAEiI,IAAI,CAACC,SAAL,CAAelI,GAAf,CAFsB;IAG3BwB,MAAAA,UAAU,EAAG,IAAK3V,CAAAA,MAAL,CAAY3J,KAAZ,IAAqB,IAAK2J,CAAAA,MAAL,CAAY3J,KAAZ,CAAkBoe,YAAlB,CAA+BkB,UAArD,IAAoE,CAAA;IAHrD,KAA/B,CAAA,CAAA;IAKH,GAAA;;IAED2G,EAAAA,WAAW,CAACC,WAAD,EAAcnL,EAAd,EAAkBoL,QAAlB,EAA4B;IAEnC,IAAA,MAAM5G,OAAO,GAAG;IACZvT,MAAAA,IAAI,EAAE/J,UAAU,CAACC,KADL;IAEZ6Y,MAAAA,EAAE,EAAE5Q,IAAI,CAACC,GAAL,CAAS2Q,EAAT,EAAa,CAAb,CAFQ;IAGZoL,MAAAA,QAAAA;IAHY,KAAhB,CAFmC;;IAQnC,IAAKnB,IAAAA,CAAAA,aAAL,CAAmBG,WAAnB,CAA+B;IAC3BC,MAAAA,GAAG,EAAEhjB,gBAAgB,CAACT,MADK;IAE3BmC,MAAAA,MAAM,EAAEoiB,WAFmB;IAG3B3G,MAAAA,OAAAA;IAH2B,KAA/B,EAIG,CAAC2G,WAAW,CAACpiB,MAAb,CAJH,CAAA,CAAA;IAKH,GAAA;;IAEDsiB,EAAAA,WAAW,CAACF,WAAD,EAAcnL,EAAd,EAAkB;IACzB,IAAA,IAAI,IAAKpR,CAAAA,MAAL,CAAYpB,IAAZ,CAAiB1H,MAAjB,IAA2B,CAAC,IAAA,CAAK8I,MAAL,CAAYpB,IAAZ,CAAiBvH,YAAjD,EAA+D;IAC3D,MAAA,IAAA,CAAKqlB,mBAAL,CAAyBH,WAAzB,EAAsCnL,EAAtC,CAAA,CAAA;IACH,KAFD,MAEO,IAAI,IAAKpR,CAAAA,MAAL,CAAYpB,IAAZ,CAAiBxH,MAArB,EAA6B;IAChC,MAAA,IAAA,CAAKslB,mBAAL,CAAyBH,WAAzB,EAAsCnL,EAAtC,CAAA,CAAA;IACH,KAFM,MAEA;IACH,MAAA,IAAA,CAAKuL,YAAL,CAAkBJ,WAAlB,EAA+BnL,EAA/B,CAAA,CAAA;IACH,KAAA;IACJ,GApI8B;;;IAuI/BuL,EAAAA,YAAY,CAACJ,WAAD,EAAcnL,EAAd,EAAkB;IAC1B,IAAA,MAAMwE,OAAO,GAAG;IACZvT,MAAAA,IAAI,EAAE/J,UAAU,CAACjC,KADL;IAEZ+a,MAAAA,EAAE,EAAE5Q,IAAI,CAACC,GAAL,CAAS2Q,EAAT,EAAa,CAAb,CAAA;IAFQ,KAAhB,CAD0B;;IAM1B,IAAKiK,IAAAA,CAAAA,aAAL,CAAmBG,WAAnB,CAA+B;IAC3BC,MAAAA,GAAG,EAAEhjB,gBAAgB,CAACT,MADK;IAE3BmC,MAAAA,MAAM,EAAEoiB,WAFmB;IAG3B3G,MAAAA,OAAAA;IAH2B,KAA/B,EAIG,CAAC2G,WAAW,CAACpiB,MAAb,CAJH,CAAA,CAAA;IAKH,GAAA;;IAGDuiB,EAAAA,mBAAmB,CAACH,WAAD,EAAcnL,EAAd,EAAkB;IACjC;IACA,IAAKiK,IAAAA,CAAAA,aAAL,CAAmBG,WAAnB,CAA+B;IAC3BC,MAAAA,GAAG,EAAEhjB,gBAAgB,CAACC,WADK;IAE3ByB,MAAAA,MAAM,EAAEoiB,WAFmB;IAG3BnL,MAAAA,EAAE,EAAE5Q,IAAI,CAACC,GAAL,CAAS2Q,EAAT,EAAa,CAAb,CAAA;IAHuB,KAA/B,EAIG,CAACmL,WAAW,CAACpiB,MAAb,CAJH,CAAA,CAAA;IAKH,GAAA;;IAGDyiB,EAAAA,gBAAgB,CAACC,MAAD,EAAS;IACrB,IAAKxB,IAAAA,CAAAA,aAAL,CAAmBG,WAAnB,CAA+B;IAC3BC,MAAAA,GAAG,EAAEhjB,gBAAgB,CAACI,YADK;IAE3B8E,MAAAA,GAAG,EAAEkf,MAAM,CAAClf,GAFe;IAG3B8G,MAAAA,KAAK,EAAEoY,MAAM,CAACpY,KAAAA;IAHa,KAA/B,CAAA,CAAA;IAKH,GAAA;;IArK8B;;ICApB,MAAMiL,YAAN,SAA2BvF,OAA3B,CAAmC;IAC9C1L,EAAAA,WAAW,CAACuB,MAAD,EAAS;IAChB,IAAA,KAAA,EAAA,CAAA;IACA,IAAKA,IAAAA,CAAAA,MAAL,GAAcA,MAAd,CAAA;IAEA,IAAK8c,IAAAA,CAAAA,MAAL,GAAc,IAAd,CAAA;IACA,IAAKC,IAAAA,CAAAA,cAAL,GAAsB,IAAtB,CAAA;IACA,IAAKC,IAAAA,CAAAA,cAAL,GAAsB,IAAtB,CAAA;IACA,IAAKf,IAAAA,CAAAA,KAAL,GAAa,CAAC,CAAd,CAAA;IACA,IAAK5H,IAAAA,CAAAA,UAAL,GAAkB,EAAlB,CAAA;IACA,IAAK4I,IAAAA,CAAAA,QAAL,GAAgB,KAAhB,CAAA;IACA,IAAA,IAAA,CAAKC,YAAL,EAAA,CAAA;IACH,GAAA;;IAEDriB,EAAAA,OAAO,GAAG;IACN,IAAI,IAAA,IAAA,CAAKiiB,MAAT,EAAiB;IACb5B,MAAAA,aAAa,CAAC,IAAK4B,CAAAA,MAAN,CAAb,CAAA;IACA,MAAKA,IAAAA,CAAAA,MAAL,GAAc,IAAd,CAAA;IACH,KAAA;;IACD,IAAKC,IAAAA,CAAAA,cAAL,GAAsB,IAAtB,CAAA;IACA,IAAKC,IAAAA,CAAAA,cAAL,GAAsB,IAAtB,CAAA;IACA,IAAKf,IAAAA,CAAAA,KAAL,GAAa,CAAC,CAAd,CAAA;IACA,IAAK5H,IAAAA,CAAAA,UAAL,GAAkB,EAAlB,CAAA;IACA,IAAK4I,IAAAA,CAAAA,QAAL,GAAgB,KAAhB,CAAA;IACA,IAAA,IAAA,CAAKzT,GAAL,EAAA,CAAA;IACH,GAAA;;IAED2T,EAAAA,QAAQ,CAACjD,SAAD,EAAY;IAChB,IAAI,IAAA,CAACA,SAAL,EAAgB;IACZ,MAAA,OAAO,CAAC,CAAR,CAAA;IACH,KAAA;;IACD,IAAI,IAAA,CAAC,IAAK6C,CAAAA,cAAV,EAA0B;IACtB,MAAKA,IAAAA,CAAAA,cAAL,GAAsB7C,SAAtB,CAAA;IACA,MAAA,IAAA,CAAK8C,cAAL,GAAsBtZ,IAAI,CAACD,GAAL,EAAtB,CAAA;IACA,MAAKwY,IAAAA,CAAAA,KAAL,GAAa,CAAC,CAAd,CAAA;IACH,KAJD,MAIO;IACH,MAAA,IAAI/B,SAAJ,EAAe;IACX,QAAA,IAAA,CAAK+B,KAAL,GAAcvY,IAAI,CAACD,GAAL,EAAA,GAAa,IAAKuZ,CAAAA,cAAnB,IAAsC9C,SAAS,GAAG,IAAA,CAAK6C,cAAvD,CAAb,CAAA;IACH,OAAA;IACJ,KAAA;;IACD,IAAA,OAAO,KAAKd,KAAZ,CAAA;IACH,GAAA;;IAEDmB,EAAAA,UAAU,GAAG;IACT,IAAKL,IAAAA,CAAAA,cAAL,GAAsB,IAAtB,CAAA;IACA,IAAKC,IAAAA,CAAAA,cAAL,GAAsB,IAAtB,CAAA;IACA,IAAKf,IAAAA,CAAAA,KAAL,GAAa,CAAC,CAAd,CAAA;IACA,IAAKgB,IAAAA,CAAAA,QAAL,GAAgB,KAAhB,CAAA;IACH,GAhD6C;;;IAmD9CC,EAAAA,YAAY,GAAG;IACX,IAAKld,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,cAAtB,EAAuC,CAAvC,aAAA,CAAA,CAAA,CAAA;;IACA,IAAI4jB,IAAAA,KAAK,GAAG,MAAM;IACd,MAAA,IAAIxS,IAAJ,CAAA;IACA,MAAA,MAAM/V,WAAW,GAAG,IAAA,CAAKkL,MAAL,CAAYpB,IAAZ,CAAiB9J,WAArC,CAAA;;IACA,MAAA,IAAI,IAAKuf,CAAAA,UAAL,CAAgB7S,MAApB,EAA4B;IACxB,QAAI,IAAA,IAAA,CAAKyb,QAAT,EAAmB;IACf;IACApS,UAAAA,IAAI,GAAG,IAAA,CAAKwJ,UAAL,CAAgBqC,KAAhB,EAAP,CAAA;;IACA,UAAA,IAAI7L,IAAI,CAACxI,IAAL,KAAc/J,UAAU,CAACjC,KAAzB,IAAkCwU,IAAI,CAACyS,OAAL,CAAa,CAAb,CAAA,KAAoB,CAA1D,EAA6D;IACzD,YAAKC,IAAAA,CAAAA,gBAAL,CAAsB1S,IAAtB,CAAA,CAAA;IACH,WAAA;;IACD,UAAO,OAAA,CAACA,IAAI,CAAC2R,QAAN,IAAkB,IAAKnI,CAAAA,UAAL,CAAgB7S,MAAzC,EAAiD;IAC7CqJ,YAAAA,IAAI,GAAG,IAAA,CAAKwJ,UAAL,CAAgBqC,KAAhB,EAAP,CAAA;;IACA,YAAA,IAAI7L,IAAI,CAACxI,IAAL,KAAc/J,UAAU,CAACjC,KAAzB,IAAkCwU,IAAI,CAACyS,OAAL,CAAa,CAAb,CAAA,KAAoB,CAA1D,EAA6D;IACzD,cAAKC,IAAAA,CAAAA,gBAAL,CAAsB1S,IAAtB,CAAA,CAAA;IACH,aAAA;IACJ,WAXc;;;IAaf,UAAIA,IAAAA,IAAI,CAAC2R,QAAT,EAAmB;IACf,YAAKS,IAAAA,CAAAA,QAAL,GAAgB,KAAhB,CAAA;;IACA,YAAKM,IAAAA,CAAAA,gBAAL,CAAsB1S,IAAtB,CAAA,CAAA;IACH,WAAA;IACJ,SAjBD,MAiBO;IACHA,UAAAA,IAAI,GAAG,IAAA,CAAKwJ,UAAL,CAAgB,CAAhB,CAAP,CAAA;;IACA,UAAI,IAAA,IAAA,CAAK8I,QAAL,CAActS,IAAI,CAACuG,EAAnB,CAAA,KAA2B,CAAC,CAAhC,EAAmC;IAC/B;IACA,YAAKiD,IAAAA,CAAAA,UAAL,CAAgBqC,KAAhB,EAAA,CAAA;;IACA,YAAK6G,IAAAA,CAAAA,gBAAL,CAAsB1S,IAAtB,CAAA,CAAA;IACH,WAJD,MAIO,IAAI,IAAKoR,CAAAA,KAAL,GAAannB,WAAW,GAAG,IAA/B,EAAqC;IACxC;IACA,YAAA,IAAA,CAAKsoB,UAAL,EAAA,CAAA;IACA,YAAKH,IAAAA,CAAAA,QAAL,GAAgB,IAAhB,CAAA;IACH,WAJM,MAIA;IACH,YAAA,OAAO,IAAK5I,CAAAA,UAAL,CAAgB7S,MAAvB,EAA+B;IAC3BqJ,cAAAA,IAAI,GAAG,IAAA,CAAKwJ,UAAL,CAAgB,CAAhB,CAAP,CAAA;;IAEA,cAAI,IAAA,IAAA,CAAK8I,QAAL,CAActS,IAAI,CAACuG,EAAnB,CAAA,GAAyBtc,WAA7B,EAA0C;IACtC;IACA,gBAAKuf,IAAAA,CAAAA,UAAL,CAAgBqC,KAAhB,EAAA,CAAA;;IACA,gBAAK6G,IAAAA,CAAAA,gBAAL,CAAsB1S,IAAtB,CAAA,CAAA;IACH,eAJD,MAIO;IACH;IACA,gBAAA,MAAA;IACH,eAAA;IACJ,aAAA;IACJ,WAAA;IACJ,SAAA;IACJ,OAAA;IACJ,KA/CD,CAAA;;IAgDAwS,IAAAA,KAAK,EAAA,CAAA;;IACL,IAAA,IAAA,CAAKP,MAAL,GAAchC,WAAW,CAACuC,KAAD,EAAQ,EAAR,CAAzB,CAAA;IACH,GAAA;;IAEDG,EAAAA,SAAS,CAACF,OAAD,EAAUjb,IAAV,EAAgB+O,EAAhB,EAAoBoL,QAApB,EAA8B;IACnC,IAAMxc,MAAAA,MAAM,GAAG,IAAA,CAAKA,MAApB,CAAA;IACA,IAAA,IAAI4V,OAAO,GAAG;IACVxE,MAAAA,EAAE,EAAEA,EADM;IAEV/O,MAAAA,IAAI,EAAEA,IAFI;IAGVma,MAAAA,QAAQ,EAAE,KAAA;IAHA,KAAd,CAFmC;;IAQnC,IAAA,IAAIxc,MAAM,CAACpB,IAAP,CAAY1H,MAAZ,IAAsB,CAAC8I,MAAM,CAACpB,IAAP,CAAYvH,YAAvC,EAAqD;IACjD,MAAA,IAAIgL,IAAI,KAAK/J,UAAU,CAACC,KAAxB,EAA+B;IAC3Bqd,QAAAA,OAAO,CAAC4G,QAAR,GAAmBA,QAAnB,CAAA;IACH,OAAA;;IACD,MAAA,IAAA,CAAKiB,UAAL,CAAgBH,OAAhB,EAAyB1H,OAAzB,CAAA,CAAA;IACH,KALD,MAKO,IAAI5V,MAAM,CAACpB,IAAP,CAAYxH,MAAhB,EAAwB;IAC3B;IACA,MAAA,IAAIiL,IAAI,KAAK/J,UAAU,CAACC,KAAxB,EAA+B;IAC3Bqd,QAAAA,OAAO,CAAC4G,QAAR,GAAmBA,QAAnB,CAAA;IACH,OAAA;;IACD,MAAA,IAAA,CAAKiB,UAAL,CAAgBH,OAAhB,EAAyB1H,OAAzB,CAAA,CAAA;IACH,KANM,MAMA;IACH;IACA,MAAA,IAAIvT,IAAI,KAAK/J,UAAU,CAACC,KAAxB,EAA+B;IAC3ByH,QAAAA,MAAM,CAACqb,aAAP,IAAwBrb,MAAM,CAACqb,aAAP,CAAqBiB,WAArB,CAAiCgB,OAAjC,EAA0ClM,EAA1C,EAA8CoL,QAA9C,CAAxB,CAAA;IACH,OAFD,MAEO,IAAIna,IAAI,KAAK/J,UAAU,CAACjC,KAAxB,EAA+B;IAClC,QAAA,IAAI2J,MAAM,CAACpB,IAAP,CAAY7I,QAAhB,EAA0B;IACtBiK,UAAAA,MAAM,CAACqb,aAAP,IAAwBrb,MAAM,CAACqb,aAAP,CAAqBoB,WAArB,CAAiCa,OAAjC,EAA0ClM,EAA1C,CAAxB,CAAA;IACH,SAAA;IACJ,OAAA;IACJ,KAAA;IACJ,GAAA;;IAEDmM,EAAAA,gBAAgB,CAAC1S,IAAD,EAAO;IACnB,IAAM7K,MAAAA,MAAM,GAAG,IAAA,CAAKA,MAApB,CAAA;IACA,IAAM,MAAA;IAAC0d,MAAAA,gBAAD;IAAmBC,MAAAA,UAAAA;IAAnB,KAAA,GAAiC3d,MAAvC,CAAA;;IAEA,IAAA,IAAI6K,IAAI,CAACxI,IAAL,KAAc/J,UAAU,CAACjC,KAA7B,EAAoC;IAChC,MAAA,IAAI2J,MAAM,CAACpB,IAAP,CAAY7I,QAAhB,EAA0B;IACtBiK,QAAAA,MAAM,CAACqb,aAAP,IAAwBrb,MAAM,CAACqb,aAAP,CAAqBoB,WAArB,CAAiC5R,IAAI,CAACyS,OAAtC,EAA+CzS,IAAI,CAACuG,EAApD,CAAxB,CAAA;IACH,OAAA;IACJ,KAJD,MAIO,IAAIvG,IAAI,CAACxI,IAAL,KAAc/J,UAAU,CAACC,KAA7B,EAAoC;IACvC,MAAA,IAAIyH,MAAM,CAACpB,IAAP,CAAY1H,MAAZ,IAAsB,CAAC8I,MAAM,CAACpB,IAAP,CAAYvH,YAAvC,EAAqD;IACjDqmB,QAAAA,gBAAgB,CAACpB,WAAjB,CAA6BzR,IAAI,CAACyS,OAAlC,EAA2CzS,IAAI,CAACuG,EAAhD,EAAoDvG,IAAI,CAAC2R,QAAzD,CAAA,CAAA;IACH,OAFD,MAEO,IAAIxc,MAAM,CAACpB,IAAP,CAAYxH,MAAhB,EAAwB;IAC3BumB,QAAAA,UAAU,CAACrB,WAAX,CAAuBzR,IAAI,CAACyS,OAA5B,EAAqCzS,IAAI,CAACuG,EAA1C,EAA8CvG,IAAI,CAAC2R,QAAnD,CAAA,CAAA;IACH,OAAA;IACJ,KAAA;IACJ,GAAA;;IAEDiB,EAAAA,UAAU,CAACH,OAAD,EAAU1H,OAAV,EAAmB;IACzB;IACA,IAAA,IAAIA,OAAO,CAACvT,IAAR,KAAiB/J,UAAU,CAACjC,KAAhC,EAAuC;IACnC,MAAKge,IAAAA,CAAAA,UAAL,CAAgBxU,IAAhB,CAAqB;IACjBuR,QAAAA,EAAE,EAAEwE,OAAO,CAACxE,EADK;IAEjBkM,QAAAA,OAAO,EAAEA,OAFQ;IAGjBjb,QAAAA,IAAI,EAAE/J,UAAU,CAACjC,KAAAA;IAHA,OAArB,CAAA,CAAA;IAKH,KAND,MAMO,IAAIuf,OAAO,CAACvT,IAAR,KAAiB/J,UAAU,CAACC,KAAhC,EAAuC;IAC1C,MAAK8b,IAAAA,CAAAA,UAAL,CAAgBxU,IAAhB,CAAqB;IACjBuR,QAAAA,EAAE,EAAEwE,OAAO,CAACxE,EADK;IAEjBkM,QAAAA,OAAO,EAAEA,OAFQ;IAGjBjb,QAAAA,IAAI,EAAE/J,UAAU,CAACC,KAHA;IAIjBikB,QAAAA,QAAQ,EAAE5G,OAAO,CAAC4G,QAAAA;IAJD,OAArB,CAAA,CAAA;IAMH,KAAA;IACJ,GAAA;;IAED5jB,EAAAA,KAAK,GAAG,EAEP;;IA7K6C;;ICCnC,MAAMglB,SAAN,SAAwBlO,YAAxB,CAAqC;IAChDjR,EAAAA,WAAW,CAACuB,MAAD,EAAS;IAChB,IAAA,KAAA,CAAMA,MAAN,CAAA,CAAA;IACA,IAAA,IAAA,CAAK6d,KAAL,GAAa,IAAKC,CAAAA,SAAL,EAAb,CAAA;IACA,IAAA,IAAA,CAAKC,QAAL,GAAgB,IAAA,CAAKC,eAAL,CAAqB,IAAA,CAAKH,KAA1B,CAAhB,CAAA;IACA7d,IAAAA,MAAM,CAAC9K,KAAP,CAAauE,GAAb,CAAiB,UAAjB,EAA6B,MAA7B,CAAA,CAAA;IACH,GAAA;;IAEDoB,EAAAA,OAAO,GAAG;IACN,IAAA,KAAA,CAAMA,OAAN,EAAA,CAAA;IACA,IAAKgjB,IAAAA,CAAAA,KAAL,GAAa,IAAb,CAAA;IACA,IAAKE,IAAAA,CAAAA,QAAL,GAAgB,IAAhB,CAAA;IACA,IAAK/d,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,UAAtB,EAAkC,SAAlC,CAAA,CAAA;IACH,GAAA;;IAEDmf,EAAAA,QAAQ,CAAC/N,IAAD,EAAO;IACX,IAAKkT,IAAAA,CAAAA,QAAL,CAAclT,IAAd,CAAA,CAAA;IACH,GAAA;;IAEU,EAAA,CAATiT,SAAS,GAAG;IACV,IAAA,MAAM,CAAN,CAAA;IACA,IAAA,MAAMG,GAAG,GAAG,IAAIC,WAAJ,CAAgB,CAAhB,CAAZ,CAAA;IACA,IAAA,MAAMC,IAAI,GAAG,IAAI1b,UAAJ,CAAewb,GAAf,CAAb,CAAA;IACA,IAAA,MAAMG,KAAK,GAAG,IAAIC,WAAJ,CAAgBJ,GAAhB,CAAd,CAAA;IACA,IAAMje,MAAAA,MAAM,GAAG,IAAA,CAAKA,MAApB,CAAA;;IAEA,IAAA,OAAO,IAAP,EAAa;IACTme,MAAAA,IAAI,CAAC,CAAD,CAAJ,GAAU,CAAV,CAAA;IACA,MAAMG,MAAAA,CAAC,GAAG,MAAM,EAAhB,CAAA;IACA,MAAA,MAAMjc,IAAI,GAAGic,CAAC,CAAC,CAAD,CAAd,CAAA;IACAH,MAAAA,IAAI,CAAC,CAAD,CAAJ,GAAUG,CAAC,CAAC,CAAD,CAAX,CAAA;IACAH,MAAAA,IAAI,CAAC,CAAD,CAAJ,GAAUG,CAAC,CAAC,CAAD,CAAX,CAAA;IACAH,MAAAA,IAAI,CAAC,CAAD,CAAJ,GAAUG,CAAC,CAAC,CAAD,CAAX,CAAA;IACA,MAAA,MAAM9c,MAAM,GAAG4c,KAAK,CAAC,CAAD,CAApB,CAAA;IACAD,MAAAA,IAAI,CAAC,CAAD,CAAJ,GAAUG,CAAC,CAAC,EAAD,CAAX,CAAA;IACAH,MAAAA,IAAI,CAAC,CAAD,CAAJ,GAAUG,CAAC,CAAC,CAAD,CAAX,CAAA;IACAH,MAAAA,IAAI,CAAC,CAAD,CAAJ,GAAUG,CAAC,CAAC,CAAD,CAAX,CAAA;IACA,MAAA,IAAIlN,EAAE,GAAGgN,KAAK,CAAC,CAAD,CAAd,CAAA;;IACA,MAAIhN,IAAAA,EAAE,KAAK,QAAX,EAAqB;IACjB+M,QAAAA,IAAI,CAAC,CAAD,CAAJ,GAAUG,CAAC,CAAC,EAAD,CAAX,CAAA;IACAlN,QAAAA,EAAE,GAAGgN,KAAK,CAAC,CAAD,CAAV,CAAA;IACH,OAAA;;IACD,MAAMd,MAAAA,OAAO,GAAG,MAAM9b,MAAtB,CAAA;;IACA,MAAA,QAAQa,IAAR;IACI,QAAK7J,KAAAA,cAAc,CAACnC,KAApB;IACI,UAAA,IAAI2J,MAAM,CAACpB,IAAP,CAAY7I,QAAhB,EAA0B;IACtBiK,YAAAA,MAAM,CAAC+b,WAAP,CAAmB;IACfwC,cAAAA,IAAI,EAAEjB,OAAO,CAAC3E,UAAAA;IADC,aAAnB,CAAA,CAAA;;IAGA,YAAA,IAAI2E,OAAO,CAAC3E,UAAR,GAAqB,CAAzB,EAA4B;IACxB,cAAK6E,IAAAA,CAAAA,SAAL,CAAeF,OAAf,EAAwBhlB,UAAU,CAACjC,KAAnC,EAA0C+a,EAA1C,CAAA,CAAA;IACH,aAAA;IACJ,WAAA;;IACD,UAAA,MAAA;;IACJ,QAAK5Y,KAAAA,cAAc,CAACD,KAApB;IACI,UAAA,IAAI,CAACyH,MAAM,CAACkY,MAAP,CAAc/P,UAAnB,EAA+B;IAC3BnI,YAAAA,MAAM,CAACkY,MAAP,CAAc/P,UAAd,GAA2B1E,GAAG,EAA9B,CAAA;IACH,WAAA;;IACD,UAAA,IAAIzD,MAAM,CAACpB,IAAP,CAAY5I,QAAhB,EAA0B;IACtBgK,YAAAA,MAAM,CAAC+b,WAAP,CAAmB;IACfyC,cAAAA,IAAI,EAAElB,OAAO,CAAC3E,UAAAA;IADC,aAAnB,CAAA,CAAA;IAGA,YAAM6D,MAAAA,QAAQ,GAAGc,OAAO,CAAC,CAAD,CAAP,IAAc,CAAd,KAAoB,CAArC,CAAA;;IACA,YAAA,IAAIA,OAAO,CAAC3E,UAAR,GAAqB,CAAzB,EAA4B;IACxB,cAAK6E,IAAAA,CAAAA,SAAL,CAAeF,OAAf,EAAwBhlB,UAAU,CAACC,KAAnC,EAA0C6Y,EAA1C,EAA8CoL,QAA9C,CAAA,CAAA;IACH,aAAA;IACJ,WAAA;;IACD,UAAA,MAAA;IAxBR,OAAA;IA0BH,KAAA;IACJ,GAAA;;IAEDwB,EAAAA,eAAe,CAACH,KAAD,EAAQ;IACnB,IAAA,IAAIY,IAAI,GAAGZ,KAAK,CAACa,IAAN,EAAX,CAAA;IACA,IAAIvkB,IAAAA,MAAM,GAAG,IAAb,CAAA;IACA,IAAA,OAAQsK,KAAD,IAAW;IACd,MAAA,IAAIoG,IAAI,GAAG,IAAIpI,UAAJ,CAAegC,KAAf,CAAX,CAAA;;IACA,MAAA,IAAItK,MAAJ,EAAY;IACR,QAAA,IAAIwkB,OAAO,GAAG,IAAIlc,UAAJ,CAAetI,MAAM,CAACqH,MAAP,GAAgBqJ,IAAI,CAACrJ,MAApC,CAAd,CAAA;IACAmd,QAAAA,OAAO,CAACC,GAAR,CAAYzkB,MAAZ,CAAA,CAAA;IACAwkB,QAAAA,OAAO,CAACC,GAAR,CAAY/T,IAAZ,EAAkB1Q,MAAM,CAACqH,MAAzB,CAAA,CAAA;IACAqJ,QAAAA,IAAI,GAAG8T,OAAP,CAAA;IACAxkB,QAAAA,MAAM,GAAG,IAAT,CAAA;IACH,OAAA;;IACD,MAAA,OAAO0Q,IAAI,CAACrJ,MAAL,IAAeid,IAAI,CAACha,KAA3B,EAAkC;IAC9B,QAAIoa,IAAAA,MAAM,GAAGhU,IAAI,CAACD,KAAL,CAAW6T,IAAI,CAACha,KAAhB,CAAb,CAAA;IACAga,QAAAA,IAAI,GAAGZ,KAAK,CAACa,IAAN,CAAW7T,IAAI,CAACD,KAAL,CAAW,CAAX,EAAc6T,IAAI,CAACha,KAAnB,CAAX,CAAP,CAAA;IACAoG,QAAAA,IAAI,GAAGgU,MAAP,CAAA;IACH,OAAA;;IACD,MAAA,IAAIhU,IAAI,CAACrJ,MAAL,GAAc,CAAlB,EAAqB;IACjBrH,QAAAA,MAAM,GAAG0Q,IAAT,CAAA;IACH,OAAA;IACJ,KAjBD,CAAA;IAkBH,GAAA;;IAEDjS,EAAAA,KAAK,GAAG;IACJ,IAAKilB,IAAAA,CAAAA,KAAL,IAAc,IAAKA,CAAAA,KAAL,CAAWiB,MAAX,CAAkB,IAAlB,CAAd,CAAA;IACH,GAAA;;IAjG+C;;ICArC,MAAMC,SAAN,SAAwBrP,YAAxB,CAAqC;IAChDjR,EAAAA,WAAW,CAACuB,MAAD,EAAS;IAChB,IAAA,KAAA,CAAMA,MAAN,CAAA,CAAA;IACAA,IAAAA,MAAM,CAAC9K,KAAP,CAAauE,GAAb,CAAiB,UAAjB,EAA6B,MAA7B,CAAA,CAAA;IACH,GAAA;;IAEDoB,EAAAA,OAAO,GAAG;IACN,IAAA,KAAA,CAAMA,OAAN,EAAA,CAAA;IACA,IAAKmF,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,UAAtB,EAAkC,SAAlC,CAAA,CAAA;IACH,GAAA;;IAEDmf,EAAAA,QAAQ,CAAC/N,IAAD,EAAO;IACX,IAAM7K,MAAAA,MAAM,GAAG,IAAA,CAAKA,MAApB,CAAA;IACA,IAAA,MAAMgf,EAAE,GAAG,IAAIC,QAAJ,CAAapU,IAAb,CAAX,CAAA;IACA,IAAA,MAAMxI,IAAI,GAAG2c,EAAE,CAACE,QAAH,CAAY,CAAZ,CAAb,CAAA;IACA,IAAM9N,MAAAA,EAAE,GAAG4N,EAAE,CAACG,SAAH,CAAa,CAAb,EAAgB,KAAhB,CAAX,CAAA;;IACA,IAAA,QAAQ9c,IAAR;IACI,MAAK/J,KAAAA,UAAU,CAACjC,KAAhB;IACI,QAAA,IAAI2J,MAAM,CAACpB,IAAP,CAAY7I,QAAhB,EAA0B;IACtB,UAAMunB,MAAAA,OAAO,GAAG,IAAI7a,UAAJ,CAAeoI,IAAf,EAAqB,CAArB,CAAhB,CAAA;IACA7K,UAAAA,MAAM,CAAC+b,WAAP,CAAmB;IACfwC,YAAAA,IAAI,EAAEjB,OAAO,CAAC3E,UAAAA;IADC,WAAnB,CAAA,CAAA;;IAGA,UAAA,IAAI2E,OAAO,CAAC3E,UAAR,GAAqB,CAAzB,EAA4B;IACxB,YAAA,IAAA,CAAK6E,SAAL,CAAeF,OAAf,EAAwBjb,IAAxB,EAA8B+O,EAA9B,CAAA,CAAA;IACH,WAAA;IACJ,SAAA;;IACD,QAAA,MAAA;;IACJ,MAAK9Y,KAAAA,UAAU,CAACC,KAAhB;IACI,QAAA,IAAIyH,MAAM,CAACpB,IAAP,CAAY5I,QAAhB,EAA0B;IACtB,UAAA,IAAI,CAACgK,MAAM,CAACkY,MAAP,CAAc/P,UAAnB,EAA+B;IAC3BnI,YAAAA,MAAM,CAACkY,MAAP,CAAc/P,UAAd,GAA2B1E,GAAG,EAA9B,CAAA;IACH,WAAA;;IACD,UAAA,IAAIub,EAAE,CAACrG,UAAH,GAAgB,CAApB,EAAuB;IACnB,YAAM2E,MAAAA,OAAO,GAAG,IAAI7a,UAAJ,CAAeoI,IAAf,EAAqB,CAArB,CAAhB,CAAA;IACA,YAAMuU,MAAAA,QAAQ,GAAGJ,EAAE,CAACE,QAAH,CAAY,CAAZ,CAAA,IAAkB,CAAlB,KAAwB,CAAzC,CAAA;IACAlf,YAAAA,MAAM,CAAC+b,WAAP,CAAmB;IACfyC,cAAAA,IAAI,EAAElB,OAAO,CAAC3E,UAAAA;IADC,aAAnB,CAAA,CAAA;;IAGA,YAAA,IAAI2E,OAAO,CAAC3E,UAAR,GAAqB,CAAzB,EAA4B;IACxB,cAAK6E,IAAAA,CAAAA,SAAL,CAAeF,OAAf,EAAwBjb,IAAxB,EAA8B+O,EAA9B,EAAkCgO,QAAlC,CAAA,CAAA;IACH,aAAA;IACJ,WAAA;IACJ,SAAA;;IACD,QAAA,MAAA;IA5BR,KAAA;IA8BH,GAAA;;IA9C+C;;ICArC,MAAMC,KAAN,CAAY;IACvB5gB,EAAAA,WAAW,CAACuB,MAAD,EAAS;IAChB,IAAMiU,MAAAA,MAAM,GAAGoL,KAAK,CAACnL,gBAAN,CAAuBlU,MAAM,CAACpB,IAAP,CAAY3H,SAAnC,CAAf,CAAA;IACA,IAAA,OAAO,IAAIgd,MAAJ,CAAWjU,MAAX,CAAP,CAAA;IACH,GAAA;;IAEsB,EAAhBkU,OAAAA,gBAAgB,CAAC7R,IAAD,EAAO;IAC1B,IAAA,IAAIA,IAAI,KAAK3N,UAAU,CAACE,GAAxB,EAA6B;IACzB,MAAA,OAAOmqB,SAAP,CAAA;IACH,KAFD,MAEO,IAAI1c,IAAI,KAAK3N,UAAU,CAACC,GAAxB,EAA6B;IAChC,MAAA,OAAOipB,SAAP,CAAA;IACH,KAAA;IACJ,GAAA;;IAZsB;;ICCZ,MAAM0B,gBAAN,SAA+BnV,OAA/B,CAAuC;IAClD1L,EAAAA,WAAW,CAACuB,MAAD,EAAS;IAChB,IAAA,KAAA,EAAA,CAAA;IACA,IAAKA,IAAAA,CAAAA,MAAL,GAAcA,MAAd,CAAA;IACA,IAAKuf,IAAAA,CAAAA,OAAL,GAAe,KAAf,CAAA;IACA,IAAKC,IAAAA,CAAAA,UAAL,GAAkB,KAAlB,CAAA;IACA,IAAK7oB,IAAAA,CAAAA,OAAL,GAAe,IAAf,CAAA;IACA,IAAA,IAAA,CAAK8oB,WAAL,EAAA,CAAA;IACAzf,IAAAA,MAAM,CAAC9K,KAAP,CAAauE,GAAb,CAAiB,WAAjB,EAA8B,MAA9B,CAAA,CAAA;IACH,GAAA;;IAEDoB,EAAAA,OAAO,GAAG;IACN,IAAI,IAAA,IAAA,CAAKlE,OAAT,EAAkB;IACd,MAAKA,IAAAA,CAAAA,OAAL,CAAaiC,KAAb,EAAA,CAAA;IACA,MAAKjC,IAAAA,CAAAA,OAAL,GAAe,IAAf,CAAA;IACH,KAAA;;IAED,IAAK4oB,IAAAA,CAAAA,OAAL,GAAe,KAAf,CAAA;IACA,IAAKC,IAAAA,CAAAA,UAAL,GAAkB,KAAlB,CAAA;IACA,IAAA,IAAA,CAAKhW,GAAL,EAAA,CAAA;IACA,IAAKxJ,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,WAAtB,EAAmC,SAAnC,CAAA,CAAA;IACH,GAAA;;IAEDgmB,EAAAA,WAAW,GAAG;IACV,IAAMC,MAAAA,KAAK,GAAG,IAAd,CAAA;;IACA,IAAA,IAAA,CAAK/oB,OAAL,GAAe,IAAIgpB,YAAJ,CAAiB;IAC5BrO,MAAAA,MAAM,CAAClX,UAAD,EAAa;IACfslB,QAAAA,KAAK,CAACE,YAAN,CAAmBxlB,UAAnB,CAAA,CAAA;IACH,OAH2B;;IAI5BV,MAAAA,KAAK,CAACA,KAAD,EAAQ;IACTgmB,QAAAA,KAAK,CAACG,WAAN,CAAkBnmB,KAAlB,CAAA,CAAA;IACH,OAAA;;IAN2B,KAAjB,CAAf,CAAA;IAQH,GAAA;;IAEDkmB,EAAAA,YAAY,CAACxlB,UAAD,EAAa;IACrB,IAAI,IAAA,CAAC,IAAKolB,CAAAA,UAAV,EAAsB;IAClB,MAAA,IAAA,CAAKxf,MAAL,CAAYzH,KAAZ,CAAkBoX,eAAlB,CAAkC;IAC9BpP,QAAAA,KAAK,EAAEnG,UAAU,CAAC0lB,UADY;IAE9Bnf,QAAAA,MAAM,EAAEvG,UAAU,CAAC2lB,WAAAA;IAFW,OAAlC,CAAA,CAAA;IAIA,MAAA,IAAA,CAAK/f,MAAL,CAAYzH,KAAZ,CAAkB2Y,kBAAlB,EAAA,CAAA;IACA,MAAKsO,IAAAA,CAAAA,UAAL,GAAkB,IAAlB,CAAA;IACH,KAAA;;IAED,IAAA,IAAI,CAAC,IAAKxf,CAAAA,MAAL,CAAYkY,MAAZ,CAAmB7P,UAAxB,EAAoC;IAChC,MAAA,IAAA,CAAKrI,MAAL,CAAYkY,MAAZ,CAAmB7P,UAAnB,GAAgC5E,GAAG,EAAnC,CAAA;IACA,MAAKzD,IAAAA,CAAAA,MAAL,CAAYkc,uBAAZ,EAAA,CAAA;IACH,KAAA;;IAED,IAAKlc,IAAAA,CAAAA,MAAL,CAAY8b,YAAZ,EAAA,CAAA;IACA,IAAA,IAAA,CAAK9b,MAAL,CAAYzH,KAAZ,CAAkBX,MAAlB,CAAyB;IACrBwC,MAAAA,UAAAA;IADqB,KAAzB,CAAA,CAAA;IAIA,IAAK4F,IAAAA,CAAAA,MAAL,CAAY+b,WAAZ,CAAwB;IAAC7U,MAAAA,GAAG,EAAE,IAAN;IAAYkK,MAAAA,EAAE,EAAE,CAAhB;IAAmB4K,MAAAA,GAAG,EAAE,IAAA,CAAKhc,MAAL,CAAYiY,KAAZ,CAAkBgE,KAAAA;IAA1C,KAAxB,EApBqB;;IAuBrB3Y,IAAAA,UAAU,CAAC,YAAY;IACnB,MAAIlJ,IAAAA,UAAU,CAACxB,KAAf,EAAsB;IAClBwB,QAAAA,UAAU,CAACxB,KAAX,EAAA,CAAA;IACH,OAFD,MAEO;IACHwB,QAAAA,UAAU,CAACS,OAAX,EAAA,CAAA;IACH,OAAA;IACJ,KANS,EAMP,GANO,CAAV,CAAA;IAOH,GAAA;;IAEDglB,EAAAA,WAAW,CAACnmB,KAAD,EAAQ;IACf,IAAKsG,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,WAAtB,EAAmC,0BAAnC,EAA+DC,KAA/D,CAAA,CAAA;IACH,GAAA;;IAED4iB,EAAAA,WAAW,CAACgB,OAAD,EAAUlM,EAAV,EAAcgO,QAAd,EAAwB;IAC/B;IACA,IAAI,IAAA,CAAC,IAAKG,CAAAA,OAAV,EAAmB;IACf,MAAIH,IAAAA,QAAQ,IAAI9B,OAAO,CAAC,CAAD,CAAP,KAAe,CAA/B,EAAkC;IAC9B,QAAA,MAAM0C,UAAU,GAAI1C,OAAO,CAAC,CAAD,CAAP,GAAa,IAAjC,CAAA;IACA,QAAA,IAAA,CAAKtd,MAAL,CAAYzH,KAAZ,CAAkBoX,eAAlB,CAAkC;IAC9BC,UAAAA,WAAW,EAAEoQ,UAAAA;IADiB,SAAlC,EAF8B;;IAO9B,QAAA,IAAIA,UAAU,KAAK1jB,cAAc,CAACE,IAAlC,EAAwC;IACpC,UAAA,IAAA,CAAK4M,IAAL,CAAU7N,YAAY,CAACI,uBAAvB,CAAA,CAAA;IACA,UAAA,OAAA;IACH,SAAA;;IACD,QAAA,IAAI,CAAC,IAAKqE,CAAAA,MAAL,CAAYkY,MAAZ,CAAmB9P,WAAxB,EAAqC;IACjC,UAAA,IAAA,CAAKpI,MAAL,CAAYkY,MAAZ,CAAmB9P,WAAnB,GAAiC3E,GAAG,EAApC,CAAA;IACH,SAAA;;IAED,QAAMoZ,MAAAA,MAAM,GAAG3W,2BAA2B,CAACoX,OAAO,CAAC1S,KAAR,CAAc,CAAd,CAAD,CAA1C,CAAA;IACA,QAAA,IAAA,CAAKjU,OAAL,CAAaspB,SAAb,CAAuBpD,MAAvB,CAAA,CAAA;IACA,QAAK0C,IAAAA,CAAAA,OAAL,GAAe,IAAf,CAAA;IACH,OAAA;IACJ,KApBD,MAoBO;IACH,MAAA,MAAMW,KAAK,GAAG,IAAIC,iBAAJ,CAAsB;IAChCtV,QAAAA,IAAI,EAAEyS,OAAO,CAAC1S,KAAR,CAAc,CAAd,CAD0B;IAEhCsP,QAAAA,SAAS,EAAE9I,EAFqB;IAGhC/O,QAAAA,IAAI,EAAE+c,QAAQ,GAAG1hB,kBAAkB,CAACC,GAAtB,GAA4BD,kBAAkB,CAACE,KAAAA;IAH7B,OAAtB,CAAd,CAAA;IAKA,MAAA,IAAA,CAAKjH,OAAL,CAAaqB,MAAb,CAAoBkoB,KAApB,CAAA,CAAA;IACH,KAAA;IACJ,GAAA;;IArGiD;;ICLtD,MAAME,QAAQ,GAAG;IACbhqB,EAAAA,IAAI,EAAE,IADO;IAEb8C,EAAAA,KAAK,EAAE,IAFM;IAGb7C,EAAAA,KAAK,EAAE,EAHM;IAIb8C,EAAAA,IAAI,EAAE,EAJO;IAKbhD,EAAAA,UAAU,EAAE,IALC;IAMbkD,EAAAA,OAAO,EAAE,IANI;IAObnD,EAAAA,UAAU,EAAE,IAPC;IAQbmqB,EAAAA,cAAc,EAAE,MARH;IASb/pB,EAAAA,MAAM,EAAE,IATK;IAUbgqB,EAAAA,UAAU,EAAE,MAAA;IAVC,CAAjB,CAAA;AAaA,gBAAergB,MAAM,CAACyE,IAAP,CAAY0b,QAAZ,CAAA,CAAsBG,MAAtB,CAA6B,CAACC,KAAD,EAAQ7iB,GAAR,KAAgB;IACxD6iB,EAAAA,KAAK,CAAC7iB,GAAD,CAAL,GAAc,CAAA;AAClB,4CAAA,EAA8CA,GAAI,CAAA;AAClD,IAAA,EAAMyiB,QAAQ,CAACziB,GAAD,CAAR,GAAiB,CAAA,uDAAA,EAAyDyiB,QAAQ,CAACziB,GAAD,CAAM,CAAxF,cAAA,CAAA,GAA0G,EAAG,CAAA;AACnH,CAHI,CAAA;IAIA,EAAA,OAAO6iB,KAAP,CAAA;IACH,CANc,EAMZ,EANY,CAAf;;ACXA,mBAAA,CAAe,CAACxgB,MAAD,EAASygB,OAAT,KAAqB;IAEhC,EAAIzgB,IAAAA,MAAM,CAACpB,IAAP,CAAYpI,UAAZ,IAA0BwJ,MAAM,CAACpB,IAAP,CAAYrI,eAA1C,EAA2D;IACvDyJ,IAAAA,MAAM,CAACK,UAAP,CAAkByJ,SAAlB,CAA4BC,GAA5B,CAAgC,mCAAhC,CAAA,CAAA;IACH,GAFD,MAGK;IACD/J,IAAAA,MAAM,CAACK,UAAP,CAAkByJ,SAAlB,CAA4BC,GAA5B,CAAgC,yBAAhC,CAAA,CAAA;IACH,GAAA;;IACD,EAAA,MAAM6L,OAAO,GAAG5V,MAAM,CAACpB,IAAvB,CAAA;IACA,EAAA,MAAM3I,WAAW,GAAG2f,OAAO,CAAC3f,WAA5B,CAAA;IAGA+J,EAAAA,MAAM,CAACK,UAAP,CAAkBqgB,kBAAlB,CACI,WADJ,EAEK,CAAA;AACT,YAAc9K,EAAAA,OAAO,CAAClf,UAAR,GAAsB,CAAA,2DAAA,EAA6Dkf,OAAO,CAAClf,UAAW,CAAtG,SAAA,CAAA,GAAmH,EAAG,CAAA;AACpI;AACA,gBAAkB8pB,EAAAA,KAAK,CAACnnB,OAAQ,CAAA;AAChC,gBAAkBuc,EAAAA,OAAO,CAACnf,WAAR,GAAuB,CAAA,oCAAA,EAAsCmf,OAAO,CAACnf,WAAY,CAAjF,MAAA,CAAA,GAA2F,EAAG,CAAA;AAChH;AACA,YAAcmf,EAAAA,OAAO,CAACpf,UAAR,IAAsBP,WAAW,CAACG,IAAlC,GAA0C,CAA1C,sCAAA,CAAA,GAAoF,EAAG,CAAA;AACrG,YAAcwf,EAAAA,OAAO,CAACpf,UAAR,GAAsB,CAAA;AACpC;AACA;AACA;AACA,oFAAsFgqB,EAAAA,KAAK,CAACF,UAAW,CAAA;AACvG;AACA,YAAA,CANc,GAMA,EAAG,CAAA;AACjB,YAAc1K,EAAAA,OAAO,CAACpf,UAAR,GAAsB,CAAA;AACpC;AACA;AACA;AACA,4BAAA,EAA8Bof,OAAO,CAAChgB,aAAR,GAAyB,CAAA,2DAAA,CAAzB,GAAwF,EAAG,CAAA;AACzH;AACA;AACA,6BAA+BK,EAAAA,WAAW,CAACI,KAAZ,GAAqB,CAAA;AACpD;AACA,qCAAuCmqB,EAAAA,KAAK,CAACnqB,KAAM,CAAA;AACnD,qCAAuCmqB,EAAAA,KAAK,CAACrnB,IAAK,CAAA;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAAA,CAX+B,GAWE,EAAG,CAAA;AACpC,6BAAA,EAA+BlD,WAAW,CAACG,IAAZ,GAAoB,uDAAsDoqB,KAAK,CAACpqB,IAAK,CAAA,2DAAA,EAA6DoqB,KAAK,CAACtnB,KAAM,CAAA,MAAA,CAA9J,GAAwK,EAAG,CAAA;AAC1M,6BAA+BjD,EAAAA,WAAW,CAACE,UAAZ,GAA0B,CAAA,0DAAA,EAA4DqqB,KAAK,CAACrqB,UAAW,CAAvG,MAAA,CAAA,GAAiH,EAAG,CAAA;AACnJ,6BAAA,EAA+BF,WAAW,CAACK,MAAZ,GAAsB,0DAAyDkqB,KAAK,CAAClqB,MAAO,CAAA,iEAAA,EAAmEkqB,KAAK,CAACF,UAAW,CAAA,MAAA,CAAhL,GAA0L,EAAG,CAAA;AAC5N,6BAAA,EAA+BrqB,WAAW,CAACC,UAAZ,GAA0B,6DAA4DsqB,KAAK,CAACtqB,UAAW,CAAA,qEAAA,EAAuEsqB,KAAK,CAACH,cAAe,CAAA,MAAA,CAAnM,GAA6M,EAAG,CAAA;AAC/O;AACA;AACA;AACA,YAAA,CA1Bc,GA0BE,EAAG,CAAA;AACnB;AACA,QA5CI,CAAA,CAAA,CAAA;IA+CApgB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,SAA/B,EAA0C;IACtChc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,mBAAhC,CAAA;IAD+B,GAA1C,CAAA,CAAA;IAIA1gB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,UAA/B,EAA2C;IACvChc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,oBAAhC,CAAA;IADgC,GAA3C,CAAA,CAAA;IAIA1gB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,OAA/B,EAAwC;IACpChc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,iBAAhC,CAAA;IAD6B,GAAxC,CAAA,CAAA;IAIA1gB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,UAA/B,EAA2C;IACvChc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,qBAAhC,CAAA;IADgC,GAA3C,CAAA,CAAA;IAIA1gB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,YAA/B,EAA6C;IACzChc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,sBAAhC,CAAA;IADkC,GAA7C,CAAA,CAAA;IAGA1gB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,gBAA/B,EAAiD;IAC7Chc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,2BAAhC,CAAA;IADsC,GAAjD,CAAA,CAAA;IAIA1gB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,gBAA/B,EAAiD;IAC7Chc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,2BAAhC,CAAA;IADsC,GAAjD,CAAA,CAAA;IAIA1gB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,QAA/B,EAAyC;IACrChc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,kBAAhC,CAAA;IAD8B,GAAzC,CAAA,CAAA;IAIA1gB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,WAA/B,EAA4C;IACxChc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,qBAAhC,CAAA;IADiC,GAA5C,CAAA,CAAA;IAIA1gB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,aAA/B,EAA8C;IAC1Chc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,uBAAhC,CAAA;IADmC,GAA9C,CAAA,CAAA;IAIA1gB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,aAA/B,EAA8C;IAC1Chc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,uBAAhC,CAAA;IADmC,GAA9C,CAAA,CAAA;IAKA1gB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,SAA/B,EAA0C;IACtChc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,mBAAhC,CAAA;IAD+B,GAA1C,CAAA,CAAA;IAIA1gB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,kBAA/B,EAAmD;IAC/Chc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,8BAAhC,CAAA;IADwC,GAAnD,CAAA,CAAA;IAIA1gB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,kBAA/B,EAAmD;IAC/Chc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,8BAAhC,CAAA;IADwC,GAAnD,CAAA,CAAA;IAIA1gB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,cAA/B,EAA+C;IAC3Chc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,yBAAhC,CAAA;IADoC,GAA/C,CAAA,CAAA;IAIA1gB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,eAA/B,EAAgD;IAC5Chc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,gCAAhC,CAAA;IADqC,GAAhD,CAAA,CAAA;IAIA1gB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,WAA/B,EAA4C;IACxChc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,uBAAhC,CAAA;IADiC,GAA5C,CAAA,CAAA;IAIA1gB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,YAA/B,EAA6C;IACzChc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,sBAAhC,CAAA;IADkC,GAA7C,CAAA,CAAA;IAKA1gB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,aAA/B,EAA8C;IAC1Chc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,uBAAhC,CAAA;IADmC,GAA9C,CAAA,CAAA;IAIA1gB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,iBAA/B,EAAkD;IAC9Chc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,4BAAhC,CAAA;IADuC,GAAlD,CAAA,CAAA;IAIA1gB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,SAA/B,EAA0C;IACtChc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,mBAAhC,CAAA;IAD+B,GAA1C,CAAA,CAAA;IAGA1gB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,aAA/B,EAA8C;IAC1Chc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,wBAAhC,CAAA;IADmC,GAA9C,CAAA,CAAA;IAIA1gB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,aAA/B,EAA8C;IAC1Chc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,uBAAhC,CAAA;IADmC,GAA9C,CAAA,CAAA;IAIA1gB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,QAA/B,EAAyC;IACrChc,IAAAA,KAAK,EAAEzE,MAAM,CAACK,UAAP,CAAkBsgB,aAAlB,CAAgC,kBAAhC,CAAA;IAD8B,GAAzC,CAAA,CAAA;IAGH,CA1JD;;ACEA,qBAAA,CAAe,CAAC3gB,MAAD,EAASygB,OAAT,KAAqB;IAChC,EAAM,MAAA;IACFlX,IAAAA,MAAM,EAAE;IAACrK,MAAAA,KAAAA;IAAD,KAAA;IADN,GAAA,GAEFc,MAFJ,CAAA;IAIA,EAAA,MAAM4gB,MAAM,GAAG5d,QAAQ,CAACC,aAAT,CAAuB,QAAvB,CAAf,CAAA;IACA2d,EAAAA,MAAM,CAACC,YAAP,CAAoB,aAApB,EAAmC,MAAnC,CAAA,CAAA;IACAD,EAAAA,MAAM,CAACC,YAAP,CAAoB,UAApB,EAAgC,CAAC,CAAjC,CAAA,CAAA;IACAD,EAAAA,MAAM,CAACve,IAAP,GAAc,WAAd,CAAA;IACAue,EAAAA,MAAM,CAAC/V,IAAP,GAAc,aAAd,CAAA;IAEAtG,EAAAA,QAAQ,CAACqc,MAAD,EAAS;IACbE,IAAAA,OAAO,EAAE,OADI;IAEb9Q,IAAAA,QAAQ,EAAE,UAFG;IAGbC,IAAAA,GAAG,EAAE,GAHQ;IAIbC,IAAAA,IAAI,EAAE,GAJO;IAKbvP,IAAAA,MAAM,EAAE,MALK;IAMbJ,IAAAA,KAAK,EAAE,MANM;IAObwgB,IAAAA,QAAQ,EAAE,QAPG;IAQbC,IAAAA,aAAa,EAAE,MARF;IASbC,IAAAA,MAAM,EAAE,IAAA;IATK,GAAT,CAAR,CAAA;IAYA,EAAA,IAAIC,WAAW,GAAGlhB,MAAM,CAACO,KAAzB,CAAA;IACA,EAAA,IAAI4gB,YAAY,GAAGnhB,MAAM,CAACW,MAA1B,CAAA;IAEAzB,EAAAA,KAAK,CAAC0hB,MAAD,EAAS,MAAT,EAAiB,MAAM;IACxB1hB,IAAAA,KAAK,CAAC0hB,MAAM,CAACQ,eAAP,CAAuBC,WAAxB,EAAqC,QAArC,EAA+C,MAAM;IACtD,MAAIrhB,IAAAA,MAAM,CAACO,KAAP,KAAiB2gB,WAAjB,IAAgClhB,MAAM,CAACW,MAAP,KAAkBwgB,YAAtD,EAAoE;IAChED,QAAAA,WAAW,GAAGlhB,MAAM,CAACO,KAArB,CAAA;IACA4gB,QAAAA,YAAY,GAAGnhB,MAAM,CAACW,MAAtB,CAAA;IACAX,QAAAA,MAAM,CAACoJ,IAAP,CAAYtQ,MAAM,CAACyB,MAAnB,CAAA,CAAA;IACH,OAAA;IACJ,KANI,CAAL,CAAA;IAOH,GARI,CAAL,CAAA;IASAyF,EAAAA,MAAM,CAACK,UAAP,CAAkB+P,WAAlB,CAA8BwQ,MAA9B,CAAA,CAAA;IAEA5gB,EAAAA,MAAM,CAACsJ,EAAP,CAAUxQ,MAAM,CAAC+B,OAAjB,EAA0B,MAAM;IAC5BmF,IAAAA,MAAM,CAACK,UAAP,CAAkBuQ,WAAlB,CAA8BgQ,MAA9B,CAAA,CAAA;IACH,GAFD,CAAA,CAAA;;IAIA,EAASU,SAAAA,eAAT,CAAyBC,UAAzB,EAAqC;IACjC,IAAIA,IAAAA,UAAU,KAAK,CAAnB,EAAsB;IAClBhd,MAAAA,QAAQ,CAACkc,OAAO,CAACe,SAAT,EAAoB,SAApB,EAA+B,MAA/B,CAAR,CAAA;IACAjd,MAAAA,QAAQ,CAACkc,OAAO,CAACgB,UAAT,EAAqB,SAArB,EAAgC,MAAhC,CAAR,CAAA;IACAld,MAAAA,QAAQ,CAACkc,OAAO,CAACiB,aAAT,EAAwB,KAAxB,EAAgC,CAAA,EAAE,EAAG,CAAA,EAAA,CAArC,CAAR,CAAA;IACH,KAJD,MAIO;IACH,MAAA,IAAIjB,OAAO,CAACiB,aAAR,IAAyBjB,OAAO,CAACkB,YAArC,EAAmD;IAC/C,QAAMC,MAAAA,WAAW,GAAGhd,QAAQ,CAAC6b,OAAO,CAACkB,YAAT,EAAuB,QAAvB,CAAR,IAA4C,EAAhE,CAAA;IACA,QAAME,MAAAA,YAAY,GAAGjd,QAAQ,CAAC6b,OAAO,CAACiB,aAAT,EAAwB,QAAxB,CAA7B,CAAA;IACA,QAAMzR,MAAAA,GAAG,GAAG2R,WAAW,GAAG,CAACA,WAAW,GAAGC,YAAf,IAA+BN,UAA7C,GAA0DM,YAAtE,CAAA;IACAtd,QAAAA,QAAQ,CAACkc,OAAO,CAACiB,aAAT,EAAwB,KAAxB,EAAgC,CAAA,EAAEzR,GAAI,CAAA,EAAA,CAAtC,CAAR,CAAA;IACA1L,QAAAA,QAAQ,CAACkc,OAAO,CAACe,SAAT,EAAoB,SAApB,EAA+B,MAA/B,CAAR,CAAA;IACAjd,QAAAA,QAAQ,CAACkc,OAAO,CAACgB,UAAT,EAAqB,SAArB,EAAgC,MAAhC,CAAR,CAAA;IACH,OAAA;IACJ,KAAA;;IACDhB,IAAAA,OAAO,CAACqB,gBAAR,KAA6BrB,OAAO,CAACqB,gBAAR,CAAyBC,SAAzB,GAAqCC,QAAQ,CAACT,UAAU,GAAG,GAAd,CAA1E,CAAA,CAAA;IACH,GAAA;;IAEDvhB,EAAAA,MAAM,CAACsJ,EAAP,CAAUxQ,MAAM,CAAC8B,YAAjB,EAA+B,MAAM;IACjC0mB,IAAAA,eAAe,CAACthB,MAAM,CAACmW,MAAR,CAAf,CAAA;IACH,GAFD,CAAA,CAAA;IAIAnW,EAAAA,MAAM,CAACsJ,EAAP,CAAUxQ,MAAM,CAACO,OAAjB,EAA2B0d,IAAD,IAAU;IAChCxS,IAAAA,QAAQ,CAACkc,OAAO,CAACwB,QAAT,EAAmB,SAAnB,EAA8BlL,IAAI,GAAG,MAAH,GAAY,MAA9C,CAAR,CAAA;IACAxS,IAAAA,QAAQ,CAACkc,OAAO,CAACyB,OAAT,EAAkB,SAAlB,EAA6B,MAA7B,CAAR,CAAA;;IAEA,IAAA,IAAInL,IAAJ,EAAU;IACNxS,MAAAA,QAAQ,CAACkc,OAAO,CAAC0B,QAAT,EAAmB,SAAnB,EAA8B,MAA9B,CAAR,CAAA;IACH,KAAA;IACJ,GAPD,CAAA,CAAA;;IASA,EAAMhZ,MAAAA,gBAAgB,GAAIjT,UAAD,IAAgB;IACrC,IAAI0Q,IAAAA,YAAY,GAAGgB,SAAS,CAAC1R,UAAD,CAAT,GAAwBA,UAAxB,GAAqC8J,MAAM,CAAC9J,UAA/D,CAAA;IACAqO,IAAAA,QAAQ,CAACkc,OAAO,CAAC2B,eAAT,EAA0B,SAA1B,EAAqCxb,YAAY,GAAG,MAAH,GAAY,MAA7D,CAAR,CAAA;IACArC,IAAAA,QAAQ,CAACkc,OAAO,CAAC4B,WAAT,EAAsB,SAAtB,EAAiCzb,YAAY,GAAG,MAAH,GAAY,MAAzD,CAAR,CAHqC;IAKxC,GALD,CAAA;;IAMA,EAAI,IAAA;IAEAyC,IAAAA,UAAU,CAACC,EAAX,CAAc,QAAd,EAAwBH,gBAAxB,CAAA,CAAA;IACAnJ,IAAAA,MAAM,CAACuJ,MAAP,CAActK,QAAd,CAAuBY,IAAvB,CAA4B,MAAM;IAC9BwJ,MAAAA,UAAU,CAACG,GAAX,CAAe,QAAf,EAAyBL,gBAAzB,CAAA,CAAA;IACH,KAFD,CAAA,CAAA;IAGH,GAND,CAME,OAAOzP,KAAP,EAAc;IAEf,GAtF+B;;;IAyFhCsG,EAAAA,MAAM,CAACsJ,EAAP,CAAUxQ,MAAM,CAACC,aAAjB,EAAiC0L,KAAD,IAAW;IACvC0E,IAAAA,gBAAgB,CAAC1E,KAAD,CAAhB,CAAA;IACH,GAFD,CAAA,CAAA;IAKAzE,EAAAA,MAAM,CAACsJ,EAAP,CAAUxQ,MAAM,CAACgB,SAAjB,EAA4B,MAAM;IAC9ByK,IAAAA,QAAQ,CAACkc,OAAO,CAAC6B,OAAT,EAAkB,SAAlB,EAA6BtiB,MAAM,CAAClG,SAAP,GAAmB,MAAnB,GAA4B,MAAzD,CAAR,CAAA;IACAyK,IAAAA,QAAQ,CAACkc,OAAO,CAAC8B,WAAT,EAAsB,SAAtB,EAAiCviB,MAAM,CAAClG,SAAP,GAAmB,MAAnB,GAA4B,MAA7D,CAAR,CAAA;IACAyK,IAAAA,QAAQ,CAACkc,OAAO,CAAC+B,UAAT,EAAqB,SAArB,EAAgCxiB,MAAM,CAAClG,SAAP,GAAmB,MAAnB,GAA4B,MAA5D,CAAR,CAAA;IACH,GAJD,EA9FgC;;IAqGhCkG,EAAAA,MAAM,CAACsJ,EAAP,CAAUxQ,MAAM,CAACiB,kBAAjB,EAAsCmgB,SAAD,IAAe;IAChD;IACAuG,IAAAA,OAAO,CAACgC,cAAR,KAA2BhC,OAAO,CAACgC,cAAR,CAAuBV,SAAvB,GAAmClZ,cAAc,CAACqR,SAAD,CAA5E,CAAA,CAAA;IACH,GAHD,CAAA,CAAA;IAKAla,EAAAA,MAAM,CAACsJ,EAAP,CAAUxQ,MAAM,CAACG,OAAjB,EAA2B8d,IAAD,IAAU;IAChCxS,IAAAA,QAAQ,CAACkc,OAAO,CAACiC,KAAT,EAAgB,SAAhB,EAA2B3L,IAAI,GAAG,MAAH,GAAY,MAA3C,CAAR,CAAA;IACAxS,IAAAA,QAAQ,CAACkc,OAAO,CAAC0B,QAAT,EAAmB,SAAnB,EAA8BpL,IAAI,GAAG,MAAH,GAAY,OAA9C,CAAR,CAAA;IACAxS,IAAAA,QAAQ,CAACkc,OAAO,CAACkC,MAAT,EAAiB,SAAjB,EAA4B5L,IAAI,GAAG,MAAH,GAAY,MAA5C,CAAR,CAAA;IACAxS,IAAAA,QAAQ,CAACkc,OAAO,CAACmC,WAAT,EAAsB,SAAtB,EAAiC7L,IAAI,GAAG,MAAH,GAAY,MAAjD,CAAR,CAAA;IACAxS,IAAAA,QAAQ,CAACkc,OAAO,CAAC6B,OAAT,EAAkB,SAAlB,EAA6BvL,IAAI,GAAG,MAAH,GAAY,MAA7C,CAAR,CAAA;IACAxS,IAAAA,QAAQ,CAACkc,OAAO,CAAC4B,WAAT,EAAsB,SAAtB,EAAiCtL,IAAI,GAAG,MAAH,GAAY,MAAjD,CAAR,CANgC;;IAShC,IAAI,IAAA,CAACA,IAAL,EAAW;IACP0J,MAAAA,OAAO,CAACoC,MAAR,KAAmBpC,OAAO,CAACoC,MAAR,CAAed,SAAf,GAA2Bhb,OAAO,CAAC,EAAD,CAArD,CAAA,CAAA;IACH,KAAA;IACJ,GAZD,CAAA,CAAA;IAeA/G,EAAAA,MAAM,CAACsJ,EAAP,CAAUxQ,MAAM,CAACf,IAAjB,EAAwB+f,IAAD,IAAU;IAC7B,IAAA,MAAMgL,GAAG,GAAG/b,OAAO,CAAC+Q,IAAD,CAAnB,CAAA;IACA2I,IAAAA,OAAO,CAACoC,MAAR,KAAmBpC,OAAO,CAACoC,MAAR,CAAed,SAAf,GAA2Be,GAA9C,CAAA,CAAA;IACH,GAHD,CAAA,CAAA;IAIH,CA7HD;;ACJA,mBAAA,CAAe,CAAC9iB,MAAD,EAASygB,OAAT,KAAqB;IAEhCxgB,EAAAA,MAAM,CAACC,cAAP,CAAsBugB,OAAtB,EAA+B,cAA/B,EAA+C;IAC3CtgB,IAAAA,GAAG,EAAE,MAAM;IACP,MAAA,OAAOsgB,OAAO,CAACsC,SAAR,CAAkBziB,qBAAlB,EAAP,CAAA;IACH,KAAA;IAH0C,GAA/C,CAAA,CAAA;IAMH,CARD;;ACEA,iBAAA,CAAe,CAACN,MAAD,EAASygB,OAAT,KAAqB;IAChC,EAAM,MAAA;IACFlX,IAAAA,MAAM,EAAE;IAACrK,MAAAA,KAAAA;IAAD,KADN;IAEFhK,IAAAA,KAAAA;IAFE,GAAA,GAGF8K,MAHJ,CAAA;;IAKA,EAASgjB,SAAAA,qBAAT,CAA+BjjB,KAA/B,EAAsC;IAClC,IAAM,MAAA;IAACkjB,MAAAA,MAAM,EAAEC,WAAT;IAAsBviB,MAAAA,MAAM,EAAEihB,WAAAA;IAA9B,KAAA,GAA6CnB,OAAO,CAACkB,YAAR,CAAqBrhB,qBAArB,EAAnD,CAAA;IACA,IAAM,MAAA;IAACK,MAAAA,MAAM,EAAEkhB,YAAAA;IAAT,KAAA,GAAyBpB,OAAO,CAACiB,aAAR,CAAsBphB,qBAAtB,EAA/B,CAAA;IAEA,IAAA,IAAI6iB,OAAO,GAAGpjB,KAAK,CAAC2O,CAApB,CAJkC;IAOlC;IACA;;IAEA,IAAM6S,MAAAA,UAAU,GACZrd,KAAK,CAACgf,WAAW,GAAGC,OAAd,GAAwBtB,YAAY,GAAG,CAAxC,EAA2C,CAA3C,EAA8CD,WAAW,GAAGC,YAAY,GAAG,CAA3E,CAAL,IAAsFD,WAAW,GAAGC,YAApG,CADJ,CAAA;IAEA,IAAA,OAAON,UAAP,CAAA;IACH,GAnB+B;;;IAsBhCriB,EAAAA,KAAK,CAACwG,MAAD,EAAS,CAAC,OAAD,EAAU,aAAV,CAAT,EAAmC3F,KAAK,IAAI;IAC7C,IAAA,IAAIA,KAAK,CAACqjB,YAAN,EAAA,CAAqBjH,OAArB,CAA6Bnc,MAAM,CAACK,UAApC,CAAA,GAAkD,CAAC,CAAvD,EAA0D;IACtDogB,MAAAA,OAAO,CAAC4C,OAAR,GAAkB,IAAlB,CAAA;IACH,KAFD,MAEO;IACH5C,MAAAA,OAAO,CAAC4C,OAAR,GAAkB,KAAlB,CAAA;IACH,KAAA;IACJ,GANI,CAAL,CAtBgC;;IA+BhCnkB,EAAAA,KAAK,CAACwG,MAAD,EAAS,mBAAT,EAA8B,MAAM;IACrCpC,IAAAA,UAAU,CAAC,MAAM;IACbtD,MAAAA,MAAM,CAACzF,MAAP,EAAA,CAAA;IACH,KAFS,EAEP,GAFO,CAAV,CAAA;IAGH,GAJI,CAAL,CAAA;IAOA2E,EAAAA,KAAK,CAACuhB,OAAO,CAACsC,SAAT,EAAoB,OAApB,EAA8BlhB,CAAD,IAAO;IACrCA,IAAAA,CAAC,CAACyhB,eAAF,EAAA,CAAA;IACH,GAFI,CAAL,CAAA;IAIApkB,EAAAA,KAAK,CAACuhB,OAAO,CAACkC,MAAT,EAAiB,OAAjB,EAA2B9gB,CAAD,IAAO;IAClC7B,IAAAA,MAAM,CAAC9G,KAAP,EAAA,CAAA;IACH,GAFI,CAAL,CA1CgC;;IA8ChCgG,EAAAA,KAAK,CAACuhB,OAAO,CAACiC,KAAT,EAAgB,OAAhB,EAA0B7gB,CAAD,IAAO;IACjC7B,IAAAA,MAAM,CAAC5J,IAAP,EAAA,CAAA;IACH,GAFI,CAAL,CA9CgC;;IAmDhC8I,EAAAA,KAAK,CAACuhB,OAAO,CAAC0B,QAAT,EAAmB,OAAnB,EAA6BtgB,CAAD,IAAO;IACpC7B,IAAAA,MAAM,CAAC5J,IAAP,EAAA,CAAA;IACH,GAFI,CAAL,CAAA;IAIA8I,EAAAA,KAAK,CAACuhB,OAAO,CAAC8C,OAAT,EAAkB,WAAlB,EAA+B,MAAM;IACtC9C,IAAAA,OAAO,CAAC+C,gBAAR,CAAyB1Z,SAAzB,CAAmCC,GAAnC,CAAuC,kCAAvC,CAAA,CAAA;IACH,GAFI,CAAL,CAAA;IAIA7K,EAAAA,KAAK,CAACuhB,OAAO,CAAC8C,OAAT,EAAkB,UAAlB,EAA8B,MAAM;IACrC9C,IAAAA,OAAO,CAAC+C,gBAAR,CAAyB1Z,SAAzB,CAAmCE,MAAnC,CAA0C,kCAA1C,CAAA,CAAA;IACH,GAFI,CAAL,CAAA;IAIA9K,EAAAA,KAAK,CAACuhB,OAAO,CAACe,SAAT,EAAoB,OAApB,EAA8B3f,CAAD,IAAO;IACrCA,IAAAA,CAAC,CAACyhB,eAAF,EAAA,CAAA;IACA/e,IAAAA,QAAQ,CAACkc,OAAO,CAACe,SAAT,EAAoB,SAApB,EAA+B,MAA/B,CAAR,CAAA;IACAjd,IAAAA,QAAQ,CAACkc,OAAO,CAACgB,UAAT,EAAqB,SAArB,EAAgC,OAAhC,CAAR,CAAA;IACAzhB,IAAAA,MAAM,CAACyjB,UAAP,GAAoBzjB,MAAM,CAACmW,MAA3B,CAAA;IACAnW,IAAAA,MAAM,CAACmW,MAAP,GAAgB,CAAhB,CAAA;IACH,GANI,CAAL,CAAA;IAQAjX,EAAAA,KAAK,CAACuhB,OAAO,CAACgB,UAAT,EAAqB,OAArB,EAA+B5f,CAAD,IAAO;IACtCA,IAAAA,CAAC,CAACyhB,eAAF,EAAA,CAAA;IACA/e,IAAAA,QAAQ,CAACkc,OAAO,CAACe,SAAT,EAAoB,SAApB,EAA+B,OAA/B,CAAR,CAAA;IACAjd,IAAAA,QAAQ,CAACkc,OAAO,CAACgB,UAAT,EAAqB,SAArB,EAAgC,MAAhC,CAAR,CAAA;IACAzhB,IAAAA,MAAM,CAACmW,MAAP,GAAgBnW,MAAM,CAACyjB,UAAP,IAAqB,GAArC,CAAA;IACH,GALI,CAAL,CAAA;IAOAvkB,EAAAA,KAAK,CAACuhB,OAAO,CAACmC,WAAT,EAAsB,OAAtB,EAAgC/gB,CAAD,IAAO;IACvCA,IAAAA,CAAC,CAACyhB,eAAF,EAAA,CAAA;IACAtjB,IAAAA,MAAM,CAACzH,KAAP,CAAapC,UAAb,EAAA,CAAA;IACH,GAHI,CAAL,CAAA;IAKA+I,EAAAA,KAAK,CAACuhB,OAAO,CAACkB,YAAT,EAAuB,OAAvB,EAAgC5hB,KAAK,IAAI;IAC1CA,IAAAA,KAAK,CAACujB,eAAN,EAAA,CAAA;IACAtjB,IAAAA,MAAM,CAACmW,MAAP,GAAgB6M,qBAAqB,CAACjjB,KAAD,CAArC,CAAA;IACH,GAHI,CAAL,CAAA;IAKAb,EAAAA,KAAK,CAACuhB,OAAO,CAACiB,aAAT,EAAwB,WAAxB,EAAqC,MAAM;IAC5CjB,IAAAA,OAAO,CAACiD,eAAR,GAA0B,IAA1B,CAAA;IACH,GAFI,CAAL,CAAA;IAIAxkB,EAAAA,KAAK,CAACuhB,OAAO,CAACiB,aAAT,EAAwB,WAAxB,EAAqC3hB,KAAK,IAAI;IAC/C,IAAI0gB,IAAAA,OAAO,CAACiD,eAAZ,EAA6B;IACzB1jB,MAAAA,MAAM,CAACmW,MAAP,GAAgB6M,qBAAqB,CAACjjB,KAAD,CAArC,CAAA;IACH,KAAA;IACJ,GAJI,CAAL,CAAA;IAMAb,EAAAA,KAAK,CAAC8D,QAAD,EAAW,SAAX,EAAsB,MAAM;IAC7B,IAAIyd,IAAAA,OAAO,CAACiD,eAAZ,EAA6B;IACzBjD,MAAAA,OAAO,CAACiD,eAAR,GAA0B,KAA1B,CAAA;IACH,KAAA;IACJ,GAJI,CAAL,CAAA;IAMAxkB,EAAAA,KAAK,CAACuhB,OAAO,CAAC6B,OAAT,EAAkB,OAAlB,EAA4BzgB,CAAD,IAAO;IACnCA,IAAAA,CAAC,CAACyhB,eAAF,EAAA,CAAA;IACAtjB,IAAAA,MAAM,CAAClG,SAAP,GAAmB,IAAnB,CAAA;IACH,GAHI,CAAL,CAAA;IAKAoF,EAAAA,KAAK,CAACuhB,OAAO,CAAC8B,WAAT,EAAsB,OAAtB,EAAgC1gB,CAAD,IAAO;IACvCA,IAAAA,CAAC,CAACyhB,eAAF,EAAA,CAAA;IACAtjB,IAAAA,MAAM,CAAClG,SAAP,GAAmB,KAAnB,CAAA;IACH,GAHI,CAAL,CAAA;IAKAoF,EAAAA,KAAK,CAACuhB,OAAO,CAACkD,cAAT,EAAyB,OAAzB,EAAmC9hB,CAAD,IAAO;IAC1CA,IAAAA,CAAC,CAACyhB,eAAF,EAAA,CAAA;IACAtjB,IAAAA,MAAM,CAAClG,SAAP,GAAmB,KAAnB,CAAA;IACH,GAHI,CAAL,CAAA;IAKAoF,EAAAA,KAAK,CAACuhB,OAAO,CAAC4B,WAAT,EAAsB,OAAtB,EAAgCxgB,CAAD,IAAO;IACvCA,IAAAA,CAAC,CAACyhB,eAAF,EAAA,CAAA;IACAtjB,IAAAA,MAAM,CAAC9J,UAAP,GAAoB,IAApB,CAAA;IACH,GAHI,CAAL,CAAA;IAKAgJ,EAAAA,KAAK,CAACuhB,OAAO,CAAC2B,eAAT,EAA0B,OAA1B,EAAoCvgB,CAAD,IAAO;IAC3CA,IAAAA,CAAC,CAACyhB,eAAF,EAAA,CAAA;IACAtjB,IAAAA,MAAM,CAAC9J,UAAP,GAAoB,KAApB,CAAA;IACH,GAHI,CAAL,CAAA;;IAKA,EAAI8J,IAAAA,MAAM,CAACpB,IAAP,CAAYpI,UAAZ,IAA0BwJ,MAAM,CAACpB,IAAP,CAAYrI,eAA1C,EAA2D;IACvD;IACA2I,IAAAA,KAAK,CAACc,MAAM,CAACK,UAAR,EAAoB,WAApB,EAAiC,MAAM;IACxC,MAAA,IAAI,CAACL,MAAM,CAAC9J,UAAZ,EAAwB;IACpBqO,QAAAA,QAAQ,CAACkc,OAAO,CAACsC,SAAT,EAAoB,SAApB,EAA+B,OAA/B,CAAR,CAAA;IACH,OAAA;IACJ,KAJI,CAAL,CAAA;IAMA7jB,IAAAA,KAAK,CAACc,MAAM,CAACK,UAAR,EAAoB,UAApB,EAAgC,MAAM;IACvCkE,MAAAA,QAAQ,CAACkc,OAAO,CAACsC,SAAT,EAAoB,SAApB,EAA+B,MAA/B,CAAR,CAAA;IACH,KAFI,CAAL,CAAA;IAGH,GAAA;IACJ,CA7ID;;ICFA,SAAS,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE;IAC/B,EAAE,KAAK,GAAG,KAAK,KAAK,CAAC,GAAG,GAAG,GAAG,EAAE,CAAC;IACjC,EAAE,IAAI,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;AAC9B;IACA,EAAE,IAAI,CAAC,GAAG,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,EAAE,OAAO,EAAE;AAC1D;IACA,EAAE,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC9C,EAAE,KAAK,CAAC,IAAI,GAAG,UAAU,CAAC;AAC1B;IACA,EAAE,IAAI,QAAQ,KAAK,KAAK,EAAE;IAC1B,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;IACzB,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAChD,KAAK,MAAM;IACX,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC9B,KAAK;IACL,GAAG,MAAM;IACT,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC5B,GAAG;AACH;IACA,EAAE,IAAI,KAAK,CAAC,UAAU,EAAE;IACxB,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,GAAG,GAAG,CAAC;IACnC,GAAG,MAAM;IACT,IAAI,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;IACpD,GAAG;IACH;;;;;ICzBA;AAGA,iBAAA,CAAe,CAAC/iB,MAAD,EAASygB,OAAT,KAAqB;IAChC,EAAM,MAAA;IACFlX,IAAAA,MAAM,EAAE;IAACrK,MAAAA,KAAAA;IAAD,KAAA;IADN,GAAA,GAEFc,MAFJ,CAAA;IAIA,EAAM0E,MAAAA,IAAI,GAAG,EAAb,CAAA;;IAEA,EAAA,SAASkf,SAAT,CAAmBjmB,GAAnB,EAAwBoC,KAAxB,EAA+B;IAC3B,IAAA,IAAI2E,IAAI,CAAC/G,GAAD,CAAR,EAAe;IACX+G,MAAAA,IAAI,CAAC/G,GAAD,CAAJ,CAAUkC,IAAV,CAAeE,KAAf,CAAA,CAAA;IACH,KAFD,MAEO;IACH2E,MAAAA,IAAI,CAAC/G,GAAD,CAAJ,GAAY,CAACoC,KAAD,CAAZ,CAAA;IACH,KAAA;IACJ,GAb+B;;;IAgBhC6jB,EAAAA,SAAS,CAACxlB,OAAO,CAACC,GAAT,EAAc,MAAM;IACzB,IAAI2B,IAAAA,MAAM,CAAC9J,UAAX,EAAuB;IACnB8J,MAAAA,MAAM,CAAC9J,UAAP,GAAoB,KAApB,CAAA;IACH,KAAA;IACJ,GAJQ,CAAT,CAhBgC;;IAuBhC0tB,EAAAA,SAAS,CAACxlB,OAAO,CAACE,OAAT,EAAkB,MAAM;IAC7B0B,IAAAA,MAAM,CAACmW,MAAP,IAAiB,IAAjB,CAAA;IACH,GAFQ,CAAT,CAvBgC;;IA4BhCyN,EAAAA,SAAS,CAACxlB,OAAO,CAACG,SAAT,EAAoB,MAAM;IAC/ByB,IAAAA,MAAM,CAACmW,MAAP,IAAiB,IAAjB,CAAA;IACH,GAFQ,CAAT,CAAA;IAIAjX,EAAAA,KAAK,CAACwG,MAAD,EAAS,SAAT,EAAoB3F,KAAK,IAAI;IAC9B,IAAI0gB,IAAAA,OAAO,CAAC4C,OAAZ,EAAqB;IACjB,MAAMQ,MAAAA,GAAG,GAAG7gB,QAAQ,CAAC8gB,aAAT,CAAuBC,OAAvB,CAA+BC,WAA/B,EAAZ,CAAA;IACA,MAAMC,MAAAA,QAAQ,GAAGjhB,QAAQ,CAAC8gB,aAAT,CAAuBI,YAAvB,CAAoC,iBAApC,CAAjB,CAAA;;IACA,MAAA,IAAIL,GAAG,KAAK,OAAR,IAAmBA,GAAG,KAAK,UAA3B,IAAyCI,QAAQ,KAAK,EAAtD,IAA4DA,QAAQ,KAAK,MAA7E,EAAqF;IACjF,QAAA,MAAM1a,MAAM,GAAG7E,IAAI,CAAC3E,KAAK,CAACokB,OAAP,CAAnB,CAAA;;IACA,QAAA,IAAI5a,MAAJ,EAAY;IACRxJ,UAAAA,KAAK,CAACqkB,cAAN,EAAA,CAAA;IACA7a,UAAAA,MAAM,CAACzJ,OAAP,CAAesK,EAAE,IAAIA,EAAE,EAAvB,CAAA,CAAA;IACH,SAAA;IACJ,OAAA;IACJ,KAAA;IACJ,GAZI,CAAL,CAAA;IAaH,CA7CD;;ICIe,MAAMia,OAAN,CAAc;IACzB5lB,EAAAA,WAAW,CAACuB,MAAD,EAAS;IAChB,IAAKA,IAAAA,CAAAA,MAAL,GAAcA,MAAd,CAAA;IACAskB,IAAAA,QAAQ,CAACtkB,MAAD,EAAS,IAAT,CAAR,CAAA;IACAukB,IAAAA,UAAQ,CAACvkB,MAAD,EAAS,IAAT,CAAR,CAAA;IACAwkB,IAAAA,QAAQ,CAACxkB,MAAD,EAAS,IAAT,CAAR,CAAA;IACAuJ,IAAAA,MAAM,CAACvJ,MAAD,EAAS,IAAT,CAAN,CAAA;;IACA,IAAA,IAAIA,MAAM,CAACpB,IAAP,CAAYzJ,MAAhB,EAAwB;IACpBsvB,MAAAA,MAAM,CAACzkB,MAAD,EAAS,IAAT,CAAN,CAAA;IACH,KAAA;;IACD,IAAKA,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,SAAtB,EAAiC,MAAjC,CAAA,CAAA;IACH,GAAA;;IAEDoB,EAAAA,OAAO,GAAG;IACN,IAAI,IAAA,IAAA,CAAKqnB,OAAT,EAAkB;IACd,MAAA,IAAA,CAAKliB,MAAL,CAAYK,UAAZ,CAAuBuQ,WAAvB,CAAmC,KAAKsR,OAAxC,CAAA,CAAA;IACH,KAAA;;IACD,IAAI,IAAA,IAAA,CAAKD,QAAT,EAAmB;IACf,MAAA,IAAA,CAAKjiB,MAAL,CAAYK,UAAZ,CAAuBuQ,WAAvB,CAAmC,KAAKqR,QAAxC,CAAA,CAAA;IACH,KAAA;;IACD,IAAI,IAAA,IAAA,CAAKc,SAAT,EAAoB;IAChB,MAAA,IAAA,CAAK/iB,MAAL,CAAYK,UAAZ,CAAuBuQ,WAAvB,CAAmC,KAAKmS,SAAxC,CAAA,CAAA;IACH,KAAA;;IAED,IAAG,IAAA,IAAA,CAAKZ,QAAR,EAAiB;IACb,MAAA,IAAA,CAAKniB,MAAL,CAAYK,UAAZ,CAAuBuQ,WAAvB,CAAmC,KAAKuR,QAAxC,CAAA,CAAA;IACH,KAAA;;IAED,IAAKniB,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,SAAtB,EAAiC,SAAjC,CAAA,CAAA;IACH,GAAA;;IAEDirB,EAAAA,QAAQ,GAAG;IACP,IAAM1kB,MAAAA,MAAM,GAAG,IAAA,CAAKA,MAApB,CAAA;IACAA,IAAAA,MAAM,CAACK,UAAP,CAAkBsE,KAAlB,CAAwBggB,OAAxB,GAAkC,KAAlC,CAAA;IACA,IAAA,MAAMzD,WAAW,GAAGlhB,MAAM,CAACO,KAA3B,CAAA;IACA,IAAA,MAAM4gB,YAAY,GAAGnhB,MAAM,CAACW,MAA5B,CAAA;IACA,IAAA,MAAMikB,WAAW,GAAG1D,WAAW,GAAGC,YAAlC,CAAA;IACA,IAAM0D,MAAAA,WAAW,GAAG7kB,MAAM,CAACzH,KAAP,CAAa4X,aAAb,CAA2B5P,KAA/C,CAAA;IACA,IAAMukB,MAAAA,YAAY,GAAG9kB,MAAM,CAACzH,KAAP,CAAa4X,aAAb,CAA2BxP,MAAhD,CAAA;IACA,IAAA,MAAMokB,WAAW,GAAGF,WAAW,GAAGC,YAAlC,CAAA;;IACA,IAAIF,IAAAA,WAAW,GAAGG,WAAlB,EAA+B;IAC3B,MAAMJ,MAAAA,OAAO,GAAG,CAACzD,WAAW,GAAGC,YAAY,GAAG4D,WAA9B,IAA6C,CAA7D,CAAA;IACA/kB,MAAAA,MAAM,CAACK,UAAP,CAAkBsE,KAAlB,CAAwBggB,OAAxB,GAAmC,CAAIA,EAAAA,EAAAA,OAAQ,CAA/C,EAAA,CAAA,CAAA;IACH,KAHD,MAGO;IACH,MAAMA,MAAAA,OAAO,GAAG,CAACxD,YAAY,GAAGD,WAAW,GAAG6D,WAA9B,IAA6C,CAA7D,CAAA;IACA/kB,MAAAA,MAAM,CAACK,UAAP,CAAkBsE,KAAlB,CAAwBggB,OAAxB,GAAmC,CAAEA,EAAAA,OAAQ,CAA7C,IAAA,CAAA,CAAA;IACH,KAAA;IACJ,GAAA;;IA/CwB;;;;;ACP7B,mBAAA,CAAgB3kB,MAAD,IAAY;IAEvB,EAAM,MAAA;IACFpB,IAAAA,IADE;IAEF1J,IAAAA,KAFE;IAGFqU,IAAAA,MAAM,EAAE;IAACrK,MAAAA,KAAAA;IAAD,KAAA;IAHN,GAAA,GAIFc,MAJJ,CAAA;;IAOA,EAAIpB,IAAAA,IAAI,CAACjJ,yBAAT,EAAoC;IAChCuJ,IAAAA,KAAK,CAACc,MAAM,CAACK,UAAR,EAAoB,UAApB,EAAgC,MAAM;IACvCL,MAAAA,MAAM,CAAC9J,UAAP,GAAoB,CAAC8J,MAAM,CAAC9J,UAA5B,CAAA;IACH,KAFI,CAAL,CAAA;IAGH,GAbsB;;;IAiBvBgJ,EAAAA,KAAK,CAAC8D,QAAD,EAAW,kBAAX,EAA+B,MAAM;IACtC,IAAIpE,IAAAA,IAAI,CAAC7H,eAAT,EAA0B;IACtB7B,MAAAA,KAAK,CAACuE,GAAN,CAAU,kBAAV,EAA8BuJ,QAAQ,CAACgiB,eAAvC,EAAwDhlB,MAAM,CAACilB,0BAA/D,CAAA,CAAA;;IAEA,MAAA,IAAI,SAAcjiB,KAAAA,QAAQ,CAACgiB,eAA3B,EAA4C;IACxC,QAAIhlB,IAAAA,MAAM,CAACilB,0BAAX,EAAuC;IACnCjlB,UAAAA,MAAM,CAAC5J,IAAP,EAAA,CAAA;IACH,SAAA;IACJ,OAJD,MAIO;IACH4J,QAAAA,MAAM,CAACilB,0BAAP,GAAoCjlB,MAAM,CAAC/G,OAA3C,CADG;;IAGH,QAAI+G,IAAAA,MAAM,CAAC/G,OAAX,EAAoB;IAChB+G,UAAAA,MAAM,CAAC9G,KAAP,EAAA,CAAA;IACH,SAAA;IACJ,OAAA;IACJ,KAAA;IACJ,GAhBI,CAAL,CAAA;IAkBAgG,EAAAA,KAAK,CAACwG,MAAD,EAAS,kBAAT,EAA6B,MAAM;IACpC;IACA,IAAI1F,IAAAA,MAAM,CAACnK,YAAP,KAAwB,IAAxB,IAAgC,SAAcmN,KAAAA,QAAQ,CAACgiB,eAA3D,EAA4E;IACxEhlB,MAAAA,MAAM,CAACklB,cAAP,EAAA,CAAA;IACH,KAAA;IACJ,GALI,CAAL,CAAA;IAMH,CAzCD;;ICAA,MAAMC,KAAN,CAAU;IAEK,EAAA,OAAJztB,IAAI,GAAG;IACVytB,IAAAA,KAAG,CAACC,KAAJ,GAAY;IACRC,MAAAA,IAAI,EAAE,EADE;IAERlf,MAAAA,IAAI,EAAE,EAFE;IAGRmf,MAAAA,IAAI,EAAE,EAHE;IAIRC,MAAAA,IAAI,EAAE,EAJE;IAKRC,MAAAA,IAAI,EAAE,EALE;IAMRC,MAAAA,IAAI,EAAE,EANE;IAORC,MAAAA,IAAI,EAAE,EAPE;IAQRC,MAAAA,IAAI,EAAE,EARE;IASRC,MAAAA,IAAI,EAAE,EATE;IAURC,MAAAA,IAAI,EAAE,EAVE;IAWRC,MAAAA,IAAI,EAAE,EAXE;IAYRC,MAAAA,IAAI,EAAE,EAZE;IAaRC,MAAAA,IAAI,EAAE,EAbE;IAcRC,MAAAA,IAAI,EAAE,EAdE;IAeRC,MAAAA,IAAI,EAAE,EAfE;IAgBRC,MAAAA,IAAI,EAAE,EAhBE;IAiBRC,MAAAA,IAAI,EAAE,EAjBE;IAkBRC,MAAAA,IAAI,EAAE,EAlBE;IAmBRC,MAAAA,IAAI,EAAE,EAnBE;IAoBRC,MAAAA,IAAI,EAAE,EApBE;IAqBRC,MAAAA,IAAI,EAAE,EArBE;IAsBRC,MAAAA,IAAI,EAAE,EAtBE;IAuBRC,MAAAA,IAAI,EAAE,EAvBE;IAwBRC,MAAAA,IAAI,EAAE,EAxBE;IAyBRC,MAAAA,IAAI,EAAE,EAzBE;IA0BRC,MAAAA,IAAI,EAAE,EA1BE;IA2BRC,MAAAA,IAAI,EAAE,EA3BE;IA4BRC,MAAAA,IAAI,EAAE,EA5BE;IA6BRC,MAAAA,IAAI,EAAE,EA7BE;IA8BRC,MAAAA,IAAI,EAAE,EA9BE;IA+BRC,MAAAA,IAAI,EAAE,EA/BE;IAgCRC,MAAAA,IAAI,EAAE,EAhCE;IAiCRC,MAAAA,IAAI,EAAE,EAjCE;IAkCRC,MAAAA,IAAI,EAAE,EAlCE;IAmCRC,MAAAA,IAAI,EAAE,EAnCE;IAoCRC,MAAAA,IAAI,EAAE,EAAA;IApCE,KAAZ,CAAA;;IAuCA,IAAA,KAAK,IAAI5oB,IAAT,IAAiBwmB,KAAG,CAACC,KAArB,EAA4B;IACxB,MAAID,IAAAA,KAAG,CAACC,KAAJ,CAAUoC,cAAV,CAAyB7oB,IAAzB,CAAJ,EAAoC;IAChCwmB,QAAAA,KAAG,CAACC,KAAJ,CAAUzmB,IAAV,CAAkB,GAAA,CACdA,IAAI,CAAC+D,UAAL,CAAgB,CAAhB,CADc,EAEd/D,IAAI,CAAC+D,UAAL,CAAgB,CAAhB,CAFc,EAGd/D,IAAI,CAAC+D,UAAL,CAAgB,CAAhB,CAHc,EAId/D,IAAI,CAAC+D,UAAL,CAAgB,CAAhB,CAJc,CAAlB,CAAA;IAMH,OAAA;IACJ,KAAA;;IAED,IAAA,IAAI+kB,SAAS,GAAGtC,KAAG,CAACsC,SAAJ,GAAgB,EAAhC,CAAA;IAEAA,IAAAA,SAAS,CAACC,IAAV,GAAiB,IAAIjlB,UAAJ,CAAe,CAC5B,IAD4B,EACtB,IADsB,EAChB,IADgB,EACV,IADU;IAE5B,IAAA,GAF4B,EAEvB,GAFuB,EAElB,GAFkB,EAEb,GAFa;IAG5B,IAAA,IAH4B,EAGtB,IAHsB,EAGhB,IAHgB,EAGV,IAHU;IAI5B,IAAA,IAJ4B,EAItB,IAJsB,EAIhB,IAJgB,EAIV,IAJU;IAAA,KAAf,CAAjB,CAAA;IAOAglB,IAAAA,SAAS,CAACE,WAAV,GAAwB,IAAIllB,UAAJ,CAAe,CACnC,IADmC,EAC7B,IAD6B,EACvB,IADuB,EACjB,IADiB;IAEnC,IAAA,IAFmC,EAE7B,IAF6B,EAEvB,IAFuB,EAEjB,IAFiB;IAAA,KAAf,CAAxB,CAAA;IAKAglB,IAAAA,SAAS,CAACG,IAAV,GAAiB,IAAInlB,UAAJ,CAAe,CAC5B,IAD4B,EACtB,IADsB,EAChB,IADgB,EACV,IADU;IAE5B,IAAA,IAF4B,EAEtB,IAFsB,EAEhB,IAFgB,EAEV,IAFU;IAAA,KAAf,CAAjB,CAAA;IAKAglB,IAAAA,SAAS,CAACI,IAAV,GAAiBJ,SAAS,CAACK,IAAV,GAAiBL,SAAS,CAACG,IAA5C,CAAA;IAEAH,IAAAA,SAAS,CAACM,IAAV,GAAiB,IAAItlB,UAAJ,CAAe,CAC5B,IAD4B,EACtB,IADsB,EAChB,IADgB,EACV,IADU;IAE5B,IAAA,IAF4B,EAEtB,IAFsB,EAEhB,IAFgB,EAEV,IAFU;IAG5B,IAAA,IAH4B,EAGtB,IAHsB,EAGhB,IAHgB,EAGV,IAHU;IAAA,KAAf,CAAjB,CAAA;IAMAglB,IAAAA,SAAS,CAACO,UAAV,GAAuB,IAAIvlB,UAAJ,CAAe,CAClC,IADkC,EAC5B,IAD4B,EACtB,IADsB,EAChB,IADgB;IAElC,IAAA,IAFkC,EAE5B,IAF4B,EAEtB,IAFsB,EAEhB,IAFgB;IAGlC,IAAA,IAHkC,EAG5B,IAH4B,EAGtB,IAHsB,EAGhB,IAHgB;IAIlC,IAAA,IAJkC,EAI5B,IAJ4B,EAItB,IAJsB,EAIhB,IAJgB;IAKlC,IAAA,IALkC,EAK5B,IAL4B,EAKtB,IALsB,EAKhB,IALgB,EAMlC,IANkC,EAM5B,IAN4B,EAMtB,IANsB,EAMhB,IANgB,EAOlC,IAPkC,EAO5B,IAP4B,EAOtB,IAPsB,EAOhB,IAPgB,EAQlC,IARkC,EAQ5B,IAR4B,EAQtB,IARsB,EAQhB,IARgB,EASlC,IATkC,EAS5B,IAT4B,EAStB,IATsB,EAShB,IATgB,EASV,IATU;IAAA,KAAf,CAAvB,CAAA;IAYAglB,IAAAA,SAAS,CAACQ,UAAV,GAAuB,IAAIxlB,UAAJ,CAAe,CAClC,IADkC,EAC5B,IAD4B,EACtB,IADsB,EAChB,IADgB;IAElC,IAAA,IAFkC,EAE5B,IAF4B,EAEtB,IAFsB,EAEhB,IAFgB;IAGlC,IAAA,IAHkC,EAG5B,IAH4B,EAGtB,IAHsB,EAGhB,IAHgB;IAIlC,IAAA,IAJkC,EAI5B,IAJ4B,EAItB,IAJsB,EAIhB,IAJgB;IAKlC,IAAA,IALkC,EAK5B,IAL4B,EAKtB,IALsB,EAKhB,IALgB,EAMlC,IANkC,EAM5B,IAN4B,EAMtB,IANsB,EAMhB,IANgB,EAOlC,IAPkC,EAO5B,IAP4B,EAOtB,IAPsB,EAOhB,IAPgB,EAQlC,IARkC,EAQ5B,IAR4B,EAQtB,IARsB,EAQhB,IARgB,EASlC,IATkC,EAS5B,IAT4B,EAStB,IATsB,EAShB,IATgB,EASV,IATU;IAAA,KAAf,CAAvB,CAAA;IAYAglB,IAAAA,SAAS,CAACS,IAAV,GAAiB,IAAIzlB,UAAJ,CAAe,CAC5B,IAD4B,EACtB,IADsB,EAChB,IADgB,EACV,IADU;IAE5B,IAAA,IAF4B,EAEtB,IAFsB,EAEhB,IAFgB,EAEV,IAFU;IAG5B,IAAA,IAH4B,EAGtB,IAHsB,EAGhB,IAHgB,EAGV,IAHU;IAI5B,IAAA,IAJ4B,EAItB,IAJsB,EAIhB,IAJgB,EAIV,IAJU;IAK5B,IAAA,IAL4B,EAKtB,IALsB,EAKhB,IALgB,EAKV,IALU;IAAA,KAAf,CAAjB,CAtGU;;IA+GVglB,IAAAA,SAAS,CAACU,IAAV,GAAiB,IAAI1lB,UAAJ,CAAe,CAC5B,IAD4B,EACtB,IADsB,EAChB,IADgB,EACV,IADU;IAE5B,IAAA,IAF4B,EAEtB,IAFsB,EAEhB,IAFgB,EAEV,IAFU;IAAA,KAAf,CAAjB,CA/GU;;IAqHVglB,IAAAA,SAAS,CAACW,IAAV,GAAiB,IAAI3lB,UAAJ,CAAe,CAC5B,IAD4B,EACtB,IADsB,EAChB,IADgB,EACV,IADU;IAE5B,IAF4B,IAAA,EAEtB,IAFsB;IAG5B,IAAA,IAH4B,EAGtB,IAHsB,EAGhB,IAHgB,EAGV,IAHU;IAI5B,IAJ4B,IAAA,EAItB,IAJsB,CAAf,CAAjB,CAAA;IAMH,GA7HK;;;IAgII,EAAH4lB,OAAAA,GAAG,CAAChmB,IAAD,EAAO;IACb,IAAIgD,IAAAA,IAAI,GAAG,CAAX,CAAA;IACA,IAAI8B,IAAAA,MAAM,GAAG,IAAb,CAAA;IACA,IAAA,IAAImhB,KAAK,GAAG/oB,KAAK,CAACgpB,SAAN,CAAgB3d,KAAhB,CAAsB4d,IAAtB,CAA2BC,SAA3B,EAAsC,CAAtC,CAAZ,CAAA;IACA,IAAA,IAAIC,UAAU,GAAGJ,KAAK,CAAC9mB,MAAvB,CAAA;;IAEA,IAAK,KAAA,IAAIsJ,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4d,UAApB,EAAgC5d,CAAC,EAAjC,EAAqC;IACjCzF,MAAAA,IAAI,IAAIijB,KAAK,CAACxd,CAAD,CAAL,CAAS6N,UAAjB,CAAA;IACH,KAAA;;IAEDxR,IAAAA,MAAM,GAAG,IAAI1E,UAAJ,CAAe4C,IAAf,CAAT,CAAA;IACA8B,IAAAA,MAAM,CAAC,CAAD,CAAN,GAAa9B,IAAI,KAAK,EAAV,GAAgB,IAA5B,CAXa;;IAYb8B,IAAAA,MAAM,CAAC,CAAD,CAAN,GAAa9B,IAAI,KAAK,EAAV,GAAgB,IAA5B,CAAA;IACA8B,IAAAA,MAAM,CAAC,CAAD,CAAN,GAAa9B,IAAI,KAAK,CAAV,GAAe,IAA3B,CAAA;IACA8B,IAAAA,MAAM,CAAC,CAAD,CAAN,GAAa9B,IAAD,GAAS,IAArB,CAAA;IAEA8B,IAAAA,MAAM,CAACyX,GAAP,CAAWvc,IAAX,EAAiB,CAAjB,EAhBa;;IAkBb,IAAIsmB,IAAAA,MAAM,GAAG,CAAb,CAAA;;IACA,IAAK,KAAA,IAAI7d,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4d,UAApB,EAAgC5d,CAAC,EAAjC,EAAqC;IAAG;IACpC3D,MAAAA,MAAM,CAACyX,GAAP,CAAW0J,KAAK,CAACxd,CAAD,CAAhB,EAAqB6d,MAArB,CAAA,CAAA;IACAA,MAAAA,MAAM,IAAIL,KAAK,CAACxd,CAAD,CAAL,CAAS6N,UAAnB,CAAA;IACH,KAAA;;IAED,IAAA,OAAOxR,MAAP,CAAA;IACH,GAzJK;;;IA4JoB,EAAnByhB,OAAAA,mBAAmB,CAACC,IAAD,EAAO;IAC7B,IAAA,IAAIjD,IAAI,GAAGT,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUQ,IAAlB,EAAwBT,KAAG,CAACsC,SAAJ,CAAcC,IAAtC,CAAX,CAAA;IACA,IAAA,IAAItB,IAAI,GAAGjB,KAAG,CAACiB,IAAJ,CAASyC,IAAT,CAAX,CAAA;IAEA,IAAA,IAAI1hB,MAAM,GAAG,IAAI1E,UAAJ,CAAemjB,IAAI,CAACjN,UAAL,GAAkByN,IAAI,CAACzN,UAAtC,CAAb,CAAA;IACAxR,IAAAA,MAAM,CAACyX,GAAP,CAAWgH,IAAX,EAAiB,CAAjB,CAAA,CAAA;IACAze,IAAAA,MAAM,CAACyX,GAAP,CAAWwH,IAAX,EAAiBR,IAAI,CAACjN,UAAtB,CAAA,CAAA;IACA,IAAA,OAAOxR,MAAP,CAAA;IACH,GApKK;;;IAuKK,EAAJif,OAAAA,IAAI,CAACyC,IAAD,EAAO;IACd,IAAA,IAAItC,IAAI,GAAGpB,KAAG,CAACoB,IAAJ,CAASsC,IAAI,CAACC,SAAd,EAAyBD,IAAI,CAACE,QAA9B,CAAX,CAAA;IACA,IAAA,IAAI7B,IAAI,GAAG/B,KAAG,CAAC+B,IAAJ,CAAS2B,IAAT,CAAX,CAAA;IACA,IAAA,IAAIvC,IAAI,GAAGnB,KAAG,CAACmB,IAAJ,CAASuC,IAAT,CAAX,CAAA;IACA,IAAA,OAAO1D,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUgB,IAAlB,EAAwBG,IAAxB,EAA8BW,IAA9B,EAAoCZ,IAApC,CAAP,CAAA;IACH,GA5KK;;;IA+KK,EAAA,OAAJC,IAAI,CAACuC,SAAD,EAAYC,QAAZ,EAAsB;IAC7B,IAAO5D,OAAAA,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUmB,IAAlB,EAAwB,IAAI9jB,UAAJ,CAAe,CAC1C,IAD0C,EACpC,IADoC,EAC9B,IAD8B,EACxB,IADwB;IAE1C,IAAA,IAF0C,EAEpC,IAFoC,EAE9B,IAF8B,EAExB,IAFwB;IAG1C,IAAA,IAH0C,EAGpC,IAHoC,EAG9B,IAH8B,EAGxB,IAHwB;IAIzCqmB,IAAAA,SAAS,KAAK,EAAf,GAAqB,IAJqB;IAKzCA,IAAAA,SAAS,KAAK,EAAf,GAAqB,IALqB,EAMzCA,SAAS,KAAK,CAAf,GAAoB,IANsB,EAOzCA,SAAD,GAAc,IAP4B,EAQzCC,QAAQ,KAAK,EAAd,GAAoB,IARsB;IASzCA,IAAAA,QAAQ,KAAK,EAAd,GAAoB,IATsB,EAUzCA,QAAQ,KAAK,CAAd,GAAmB,IAVuB,EAWzCA,QAAD,GAAa,IAX6B,EAY1C,IAZ0C,EAYpC,IAZoC,EAY9B,IAZ8B,EAYxB,IAZwB;IAa1C,IAAA,IAb0C,EAapC,IAboC,EAa9B,IAb8B,EAaxB,IAbwB;IAc1C,IAAA,IAd0C,EAcpC,IAdoC,EAc9B,IAd8B,EAcxB,IAdwB;IAe1C,IAAA,IAf0C,EAepC,IAfoC,EAe9B,IAf8B,EAexB,IAfwB,EAgB1C,IAhB0C,EAgBpC,IAhBoC,EAgB9B,IAhB8B,EAgBxB,IAhBwB;IAiB1C,IAAA,IAjB0C,EAiBpC,IAjBoC,EAiB9B,IAjB8B,EAiBxB,IAjBwB,EAkB1C,IAlB0C,EAkBpC,IAlBoC,EAkB9B,IAlB8B,EAkBxB,IAlBwB,EAmB1C,IAnB0C,EAmBpC,IAnBoC,EAmB9B,IAnB8B,EAmBxB,IAnBwB,EAoB1C,IApB0C,EAoBpC,IApBoC,EAoB9B,IApB8B,EAoBxB,IApBwB,EAqB1C,IArB0C,EAqBpC,IArBoC,EAqB9B,IArB8B,EAqBxB,IArBwB,EAsB1C,IAtB0C,EAsBpC,IAtBoC,EAsB9B,IAtB8B,EAsBxB,IAtBwB,EAuB1C,IAvB0C,EAuBpC,IAvBoC,EAuB9B,IAvB8B,EAuBxB,IAvBwB,EAwB1C,IAxB0C,EAwBpC,IAxBoC,EAwB9B,IAxB8B,EAwBxB,IAxBwB;IAyB1C,IAAA,IAzB0C,EAyBpC,IAzBoC,EAyB9B,IAzB8B,EAyBxB,IAzBwB;IA0B1C,IAAA,IA1B0C,EA0BpC,IA1BoC,EA0B9B,IA1B8B,EA0BxB,IA1BwB,EA2B1C,IA3B0C,EA2BpC,IA3BoC,EA2B9B,IA3B8B,EA2BxB,IA3BwB,EA4B1C,IA5B0C,EA4BpC,IA5BoC,EA4B9B,IA5B8B,EA4BxB,IA5BwB,EA6B1C,IA7B0C,EA6BpC,IA7BoC,EA6B9B,IA7B8B,EA6BxB,IA7BwB,EA8B1C,IA9B0C,EA8BpC,IA9BoC,EA8B9B,IA9B8B,EA8BxB,IA9BwB;IA+B1C,IAAA,IA/B0C,EA+BpC,IA/BoC,EA+B9B,IA/B8B,EA+BxB,IA/BwB;IAAA,KAAf,CAAxB,CAAP,CAAA;IAiCH,GAjNK;;;IAoNK,EAAJ7B,OAAAA,IAAI,CAAC2B,IAAD,EAAO;IACd,IAAO1D,OAAAA,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAU8B,IAAlB,EAAwB/B,KAAG,CAACkC,IAAJ,CAASwB,IAAT,CAAxB,EAAwC1D,KAAG,CAACa,IAAJ,CAAS6C,IAAT,CAAxC,CAAP,CAAA;IACH,GAtNK;;;IAyNK,EAAJxB,OAAAA,IAAI,CAACwB,IAAD,EAAO;IACd,IAAA,IAAIG,OAAO,GAAGH,IAAI,CAACI,EAAnB;IAAA,QAAuBF,QAAQ,GAAGF,IAAI,CAACE,QAAvC,CAAA;IACA,IAAA,IAAIxoB,KAAK,GAAGsoB,IAAI,CAACK,YAAjB;IAAA,QAA+BvoB,MAAM,GAAGkoB,IAAI,CAACM,aAA7C,CAAA;IAEA,IAAOhE,OAAAA,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUiC,IAAlB,EAAwB,IAAI5kB,UAAJ,CAAe,CAC1C,IAD0C,EACpC,IADoC,EAC9B,IAD8B,EACxB,IADwB;IAE1C,IAAA,IAF0C,EAEpC,IAFoC,EAE9B,IAF8B,EAExB,IAFwB;IAG1C,IAAA,IAH0C,EAGpC,IAHoC,EAG9B,IAH8B,EAGxB,IAHwB;IAIzCumB,IAAAA,OAAO,KAAK,EAAb,GAAmB,IAJuB;IAKzCA,IAAAA,OAAO,KAAK,EAAb,GAAmB,IALuB,EAMzCA,OAAO,KAAK,CAAb,GAAkB,IANwB,EAOzCA,OAAD,GAAY,IAP8B,EAQ1C,IAR0C,EAQpC,IARoC,EAQ9B,IAR8B,EAQxB,IARwB;IASzCD,IAAAA,QAAQ,KAAK,EAAd,GAAoB,IATsB;IAUzCA,IAAAA,QAAQ,KAAK,EAAd,GAAoB,IAVsB,EAWzCA,QAAQ,KAAK,CAAd,GAAmB,IAXuB,EAYzCA,QAAD,GAAa,IAZ6B,EAa1C,IAb0C,EAapC,IAboC,EAa9B,IAb8B,EAaxB,IAbwB;IAc1C,IAAA,IAd0C,EAcpC,IAdoC,EAc9B,IAd8B,EAcxB,IAdwB,EAe1C,IAf0C,EAepC,IAfoC,EAe9B,IAf8B,EAexB,IAfwB;IAgB1C,IAAA,IAhB0C,EAgBpC,IAhBoC,EAgB9B,IAhB8B,EAgBxB,IAhBwB;IAiB1C,IAAA,IAjB0C,EAiBpC,IAjBoC,EAiB9B,IAjB8B,EAiBxB,IAjBwB;IAkB1C,IAAA,IAlB0C,EAkBpC,IAlBoC,EAkB9B,IAlB8B,EAkBxB,IAlBwB,EAmB1C,IAnB0C,EAmBpC,IAnBoC,EAmB9B,IAnB8B,EAmBxB,IAnBwB,EAoB1C,IApB0C,EAoBpC,IApBoC,EAoB9B,IApB8B,EAoBxB,IApBwB,EAqB1C,IArB0C,EAqBpC,IArBoC,EAqB9B,IArB8B,EAqBxB,IArBwB,EAsB1C,IAtB0C,EAsBpC,IAtBoC,EAsB9B,IAtB8B,EAsBxB,IAtBwB,EAuB1C,IAvB0C,EAuBpC,IAvBoC,EAuB9B,IAvB8B,EAuBxB,IAvBwB,EAwB1C,IAxB0C,EAwBpC,IAxBoC,EAwB9B,IAxB8B,EAwBxB,IAxBwB,EAyB1C,IAzB0C,EAyBpC,IAzBoC,EAyB9B,IAzB8B,EAyBxB,IAzBwB;IA0BzCxoB,IAAAA,KAAK,KAAK,CAAX,GAAgB,IA1B0B;IA2BzCA,IAAAA,KAAD,GAAU,IA3BgC,EA4B1C,IA5B0C,EA4BpC,IA5BoC,EA6BzCI,MAAM,KAAK,CAAZ,GAAiB,IA7ByB,EA8BzCA,MAAD,GAAW,IA9B+B,EA+B1C,IA/B0C,EA+BpC,IA/BoC,CAAf,CAAxB,CAAP,CAAA;IAiCH,GAAA;;IAEU,EAAJqlB,OAAAA,IAAI,CAAC6C,IAAD,EAAO;IACd,IAAA,OAAO1D,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUY,IAAlB,EAAwBb,KAAG,CAACY,IAAJ,CAAS8C,IAAT,CAAxB,EAAwC1D,KAAG,CAACU,IAAJ,CAASgD,IAAT,CAAxC,EAAwD1D,KAAG,CAACe,IAAJ,CAAS2C,IAAT,CAAxD,CAAP,CAAA;IACH,GAlQK;;;IAqQK,EAAJ9C,OAAAA,IAAI,CAAC8C,IAAD,EAAO;IACd,IAAA,IAAIC,SAAS,GAAGD,IAAI,CAACC,SAArB,CAAA;IACA,IAAA,IAAIC,QAAQ,GAAGF,IAAI,CAACE,QAApB,CAAA;IACA,IAAO5D,OAAAA,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUW,IAAlB,EAAwB,IAAItjB,UAAJ,CAAe,CAC1C,IAD0C,EACpC,IADoC,EAC9B,IAD8B,EACxB,IADwB;IAE1C,IAAA,IAF0C,EAEpC,IAFoC,EAE9B,IAF8B,EAExB,IAFwB;IAG1C,IAAA,IAH0C,EAGpC,IAHoC,EAG9B,IAH8B,EAGxB,IAHwB;IAIzCqmB,IAAAA,SAAS,KAAK,EAAf,GAAqB,IAJqB;IAKzCA,IAAAA,SAAS,KAAK,EAAf,GAAqB,IALqB,EAMzCA,SAAS,KAAK,CAAf,GAAoB,IANsB,EAOzCA,SAAD,GAAc,IAP4B,EAQzCC,QAAQ,KAAK,EAAd,GAAoB,IARsB;IASzCA,IAAAA,QAAQ,KAAK,EAAd,GAAoB,IATsB,EAUzCA,QAAQ,KAAK,CAAd,GAAmB,IAVuB,EAWzCA,QAAD,GAAa,IAX6B,EAY1C,IAZ0C,EAYpC,IAZoC;IAa1C,IAb0C,IAAA,EAapC,IAboC;IAAA,KAAf,CAAxB,CAAP,CAAA;IAeH,GAvRK;;;IA0RK,EAAJlD,OAAAA,IAAI,CAACgD,IAAD,EAAO;IACd,IAAIhe,IAAAA,IAAI,GAAG,IAAX,CAAA;;IACA,IAAA,IAAIge,IAAI,CAACxmB,IAAL,KAAc,OAAlB,EAA2B;IACvBwI,MAAAA,IAAI,GAAGsa,KAAG,CAACsC,SAAJ,CAAcQ,UAArB,CAAA;IACH,KAFD,MAEO;IACHpd,MAAAA,IAAI,GAAGsa,KAAG,CAACsC,SAAJ,CAAcO,UAArB,CAAA;IACH,KAAA;;IACD,IAAO7C,OAAAA,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUS,IAAlB,EAAwBhb,IAAxB,CAAP,CAAA;IACH,GAlSK;;;IAqSK,EAAJqb,OAAAA,IAAI,CAAC2C,IAAD,EAAO;IACd,IAAIO,IAAAA,IAAI,GAAG,IAAX,CAAA;;IACA,IAAA,IAAIP,IAAI,CAACxmB,IAAL,KAAc,OAAlB,EAA2B;IACvB+mB,MAAAA,IAAI,GAAGjE,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUmC,IAAlB,EAAwBpC,KAAG,CAACsC,SAAJ,CAAcU,IAAtC,CAAP,CAAA;IACH,KAFD,MAEO;IACHiB,MAAAA,IAAI,GAAGjE,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUkC,IAAlB,EAAwBnC,KAAG,CAACsC,SAAJ,CAAcW,IAAtC,CAAP,CAAA;IACH,KAAA;;IACD,IAAOjD,OAAAA,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUc,IAAlB,EAAwBkD,IAAxB,EAA8BjE,KAAG,CAACM,IAAJ,EAA9B,EAA0CN,KAAG,CAACsB,IAAJ,CAASoC,IAAT,CAA1C,CAAP,CAAA;IACH,GA7SK;;;IAgTK,EAAA,OAAJpD,IAAI,GAAG;IACV,IAAA,IAAIte,MAAM,GAAGge,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUK,IAAlB,EACTN,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUM,IAAlB,EAAwBP,KAAG,CAACsC,SAAJ,CAAcS,IAAtC,CADS,CAAb,CAAA;IAGA,IAAA,OAAO/gB,MAAP,CAAA;IACH,GArTK;;;IAwTK,EAAJsf,OAAAA,IAAI,CAACoC,IAAD,EAAO;IACd,IAAI1hB,IAAAA,MAAM,GAAGge,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUqB,IAAlB;IACTtB,IAAAA,KAAG,CAACyB,IAAJ,CAASiC,IAAT,CADS;IAET1D,IAAAA,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAU0B,IAAlB,EAAwB3B,KAAG,CAACsC,SAAJ,CAAcG,IAAtC,CAFS;IAGTzC,IAAAA,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUuB,IAAlB,EAAwBxB,KAAG,CAACsC,SAAJ,CAAcI,IAAtC,CAHS;IAIT1C,IAAAA,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUyB,IAAlB,EAAwB1B,KAAG,CAACsC,SAAJ,CAAcM,IAAtC,CAJS;IAKT5C,IAAAA,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUsB,IAAlB,EAAwBvB,KAAG,CAACsC,SAAJ,CAAcK,IAAtC,CALS;IAAA,KAAb,CAAA;IAOA,IAAA,OAAO3gB,MAAP,CAAA;IACH,GAjUK;;;IAoUK,EAAJyf,OAAAA,IAAI,CAACiC,IAAD,EAAO;IACd,IAAA,IAAIA,IAAI,CAACxmB,IAAL,KAAc,OAAlB,EAA2B;IACvB;IACA,MAAO8iB,OAAAA,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUwB,IAAlB,EAAwBzB,KAAG,CAACsC,SAAJ,CAAcE,WAAtC,EAAmDxC,KAAG,CAACkB,IAAJ,CAASwC,IAAT,CAAnD,CAAP,CAAA;IACH,KAHD,MAGO;IACH,MAAA,IAAIA,IAAI,CAACQ,SAAL,KAAmB,KAAvB,EAA8B;IAC1B;IACA,QAAOlE,OAAAA,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUwB,IAAlB,EAAwBzB,KAAG,CAACsC,SAAJ,CAAcE,WAAtC,EAAmDxC,KAAG,CAACE,IAAJ,CAASwD,IAAT,CAAnD,CAAP,CAAA;IACH,OAHD,MAGO;IACH;IACA,QAAO1D,OAAAA,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUwB,IAAlB,EAAwBzB,KAAG,CAACsC,SAAJ,CAAcE,WAAtC,EAAmDxC,KAAG,CAACG,IAAJ,CAASuD,IAAT,CAAnD,CAAP,CAAA;IACH,OAAA;IACJ,KAAA;IACJ,GAAA;;IAEU,EAAJxC,OAAAA,IAAI,CAACwC,IAAD,EAAO;IACd,IAAA,IAAIS,YAAY,GAAGT,IAAI,CAACS,YAAxB,CAAA;IACA,IAAA,IAAI3T,UAAU,GAAGkT,IAAI,CAACU,eAAtB,CAAA;IAEA,IAAA,IAAI1e,IAAI,GAAG,IAAIpI,UAAJ,CAAe,CACtB,IADsB,EAChB,IADgB,EACV,IADU,EACJ,IADI;IAEtB,IAAA,IAFsB,EAEhB,IAFgB,EAEV,IAFU,EAEJ,IAFI;IAGtB,IAAA,IAHsB,EAGhB,IAHgB,EAGV,IAHU,EAGJ,IAHI;IAItB,IAJsB,IAAA,EAIhB,IAJgB,EAIV,IAJU,EAIJ,IAJI,EAKtB,IALsB,EAKhB6mB,YALgB;IAMtB,IANsB,IAAA,EAMhB,IANgB;IAOtB,IAAA,IAPsB,EAOhB,IAPgB,EAOV,IAPU,EAOJ,IAPI;IAQrB3T,IAAAA,UAAU,KAAK,CAAhB,GAAqB,IARC;IASrBA,IAAAA,UAAD,GAAe,IATO,EAUtB,IAVsB,EAUhB,IAVgB,CAAf,CAAX,CAAA;IAaA,IAAA,OAAOwP,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUiB,IAAlB,EAAwBxb,IAAxB,EAA8Bsa,KAAG,CAACQ,IAAJ,CAASkD,IAAT,CAA9B,CAAP,CAAA;IACH,GAAA;;IAEU,EAAJlD,OAAAA,IAAI,CAACkD,IAAD,EAAO;IACd,IAAA,IAAIhM,MAAM,GAAGgM,IAAI,CAAChM,MAAL,IAAe,EAA5B,CAAA;IACA,IAAA,IAAI2M,UAAU,GAAG3M,MAAM,CAACrb,MAAxB,CAAA;IACA,IAAA,IAAIqJ,IAAI,GAAG,IAAIpI,UAAJ,CAAe,CACtB,IADsB,EAChB,IADgB,EACV,IADU,EACJ,IADI;IAGtB,IAAA,IAHsB;IAItB,IAAA,IAAA,GAAO+mB,UAJe;IAKtB,IALsB,IAAA,EAKhB,IALgB;IAMtB,IAAA,IANsB;IAQtB,IAAA,IARsB;IAStB,IAAA,IAAA,GAAOA,UATe;IAUtB,IAAA,IAVsB;IAWtB,IAAA,IAXsB;IAYtB,IAAA,IAZsB,EAYhB,IAZgB,EAYV,IAZU;IAatB,IAAA,IAbsB,EAahB,IAbgB,EAaV,IAbU,EAaJ,IAbI;IActB,IAAA,IAdsB,EAchB,IAdgB,EAcV,IAdU,EAcJ,IAdI;IAgBtB,IAAA,IAhBsB;IAAA,KAAA,CAiBxBC,MAjBwB,CAiBjB,CACLD,UADK,CAjBiB,CAAA,CAmBvBC,MAnBuB,CAoBtB5M,MApBsB,CAqBxB4M,CAAAA,MArBwB,CAqBjB,CACL,IADK,EACC,IADD,EACO,IADP;IAAA,KArBiB,CAAf,CAAX,CAAA;IAwBA,IAAOtE,OAAAA,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUO,IAAlB,EAAwB9a,IAAxB,CAAP,CAAA;IACH,GAnYK;;;IAsYK,EAAJwa,OAAAA,IAAI,CAACwD,IAAD,EAAO;IACd,IAAA,IAAIa,IAAI,GAAGb,IAAI,CAACa,IAAhB,CAAA;IACA,IAAA,MAAMnpB,KAAK,GAAGsoB,IAAI,CAACc,UAAnB,CAAA;IACA,IAAA,MAAMhpB,MAAM,GAAGkoB,IAAI,CAACe,WAApB,CAAA;IACA,IAAA,IAAI/e,IAAI,GAAG,IAAIpI,UAAJ,CAAe,CACtB,CADsB,EACnB,CADmB,EAChB,CADgB,EACb,CADa,EAEtB,CAFsB,EAEnB,CAFmB,EAEhB,CAFgB,EAEb,CAFa,EAGtB,CAHsB,EAGnB,CAHmB,EAGhB,CAHgB,EAGb,CAHa,EAItB,CAJsB,EAInB,CAJmB,EAIhB,CAJgB,EAIb,CAJa,EAKtB,CALsB,EAKnB,CALmB,EAKhB,CALgB,EAKb,CALa,EAMtB,CANsB,EAMnB,CANmB,EAMhB,CANgB,EAMb,CANa,EAOtBlC,KAAK,KAAK,CAAV,GAAc,GAPQ,EAQtBA,KAAK,GAAG,GARc,EAStBI,MAAM,KAAK,CAAX,GAAe,GATO,EAUtBA,MAAM,GAAG,GAVa,EAWtB,CAXsB,EAWnB,EAXmB,EAWf,CAXe,EAWZ,CAXY,EAYtB,CAZsB,EAYnB,EAZmB,EAYf,CAZe,EAYZ,CAZY,EAatB,CAbsB,EAanB,CAbmB,EAahB,CAbgB,EAab,CAba,EActB,CAdsB,EAcnB,CAdmB,EAetB,CAfsB,EAgBtB,CAhBsB,EAgBnB,CAhBmB,EAgBhB,CAhBgB,EAgBb,CAhBa,EAiBtB,CAjBsB,EAiBnB,CAjBmB,EAiBhB,CAjBgB,EAiBb,CAjBa,EAkBtB,CAlBsB,EAkBnB,CAlBmB,EAkBhB,CAlBgB,EAkBb,CAlBa,EAmBtB,CAnBsB,EAmBnB,CAnBmB,EAmBhB,CAnBgB,EAmBb,CAnBa,EAoBtB,CApBsB,EAoBnB,CApBmB,EAoBhB,CApBgB,EAoBb,CApBa,EAqBtB,CArBsB,EAqBnB,CArBmB,EAqBhB,CArBgB,EAqBb,CArBa,EAsBtB,CAtBsB,EAsBnB,CAtBmB,EAsBhB,CAtBgB,EAsBb,CAtBa,EAuBtB,CAvBsB,EAuBnB,CAvBmB,EAuBhB,CAvBgB,EAwBtB,CAxBsB,EAwBnB,EAxBmB,EAyBtB,GAzBsB,EAyBjB,GAzBiB,CAAf,CAAX,CAAA;IA2BA,IAAOwkB,OAAAA,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUC,IAAlB,EAAwBxa,IAAxB,EAA8Bsa,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUjf,IAAlB,EAAwBujB,IAAxB,CAA9B,CAAP,CAAA;IACH,GAtaK;;;IAyaK,EAAJpE,OAAAA,IAAI,CAACuD,IAAD,EAAO;IACd,IAAA,IAAIa,IAAI,GAAGb,IAAI,CAACa,IAAhB,CAAA;IACA,IAAA,MAAMnpB,KAAK,GAAGsoB,IAAI,CAACc,UAAnB,CAAA;IACA,IAAA,MAAMhpB,MAAM,GAAGkoB,IAAI,CAACe,WAApB,CAAA;IACA,IAAA,IAAI/e,IAAI,GAAG,IAAIpI,UAAJ,CAAe,CACtB,CADsB,EACnB,CADmB,EAChB,CADgB,EACb,CADa,EAEtB,CAFsB,EAEnB,CAFmB,EAEhB,CAFgB,EAEb,CAFa,EAGtB,CAHsB,EAGnB,CAHmB,EAGhB,CAHgB,EAGb,CAHa,EAItB,CAJsB,EAInB,CAJmB,EAIhB,CAJgB,EAIb,CAJa,EAKtB,CALsB,EAKnB,CALmB,EAKhB,CALgB,EAKb,CALa,EAMtB,CANsB,EAMnB,CANmB,EAMhB,CANgB,EAMb,CANa,EAOtBlC,KAAK,KAAK,CAAV,GAAc,GAPQ,EAQtBA,KAAK,GAAG,GARc,EAStBI,MAAM,KAAK,CAAX,GAAe,GATO,EAUtBA,MAAM,GAAG,GAVa,EAWtB,CAXsB,EAWnB,EAXmB,EAWf,CAXe,EAWZ,CAXY,EAYtB,CAZsB,EAYnB,EAZmB,EAYf,CAZe,EAYZ,CAZY,EAatB,CAbsB,EAanB,CAbmB,EAahB,CAbgB,EAab,CAba,EActB,CAdsB,EAcnB,CAdmB,EAetB,CAfsB,EAgBtB,CAhBsB,EAgBnB,CAhBmB,EAgBhB,CAhBgB,EAgBb,CAhBa,EAiBtB,CAjBsB,EAiBnB,CAjBmB,EAiBhB,CAjBgB,EAiBb,CAjBa,EAkBtB,CAlBsB,EAkBnB,CAlBmB,EAkBhB,CAlBgB,EAkBb,CAlBa,EAmBtB,CAnBsB,EAmBnB,CAnBmB,EAmBhB,CAnBgB,EAmBb,CAnBa,EAoBtB,CApBsB,EAoBnB,CApBmB,EAoBhB,CApBgB,EAoBb,CApBa,EAqBtB,CArBsB,EAqBnB,CArBmB,EAqBhB,CArBgB,EAqBb,CArBa,EAsBtB,CAtBsB,EAsBnB,CAtBmB,EAsBhB,CAtBgB,EAsBb,CAtBa,EAuBtB,CAvBsB,EAuBnB,CAvBmB,EAuBhB,CAvBgB,EAwBtB,CAxBsB,EAwBnB,EAxBmB,EAyBtB,GAzBsB,EAyBjB,GAzBiB,CAAf,CAAX,CAAA;IA2BA,IAAOwkB,OAAAA,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUE,IAAlB,EAAwBza,IAAxB,EAA8Bsa,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUG,IAAlB,EAAwBmE,IAAxB,CAA9B,CAAP,CAAA;IACH,GAzcK;;;IA4cK,EAAJpD,OAAAA,IAAI,CAACuC,IAAD,EAAO;IACd,IAAA,OAAO1D,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUkB,IAAlB,EAAwBnB,KAAG,CAACiC,IAAJ,CAASyB,IAAT,CAAxB,CAAP,CAAA;IACH,GA9cK;;;IAidK,EAAJzB,OAAAA,IAAI,CAACyB,IAAD,EAAO;IACd,IAAA,IAAIG,OAAO,GAAGH,IAAI,CAACI,EAAnB,CAAA;IACA,IAAA,IAAIpe,IAAI,GAAG,IAAIpI,UAAJ,CAAe,CACtB,IADsB,EAChB,IADgB,EACV,IADU,EACJ,IADI;IAErBumB,IAAAA,OAAO,KAAK,EAAb,GAAmB,IAFG;IAGrBA,IAAAA,OAAO,KAAK,EAAb,GAAmB,IAHG,EAIrBA,OAAO,KAAK,CAAb,GAAkB,IAJI,EAKrBA,OAAD,GAAY,IALU,EAMtB,IANsB,EAMhB,IANgB,EAMV,IANU,EAMJ,IANI;IAOtB,IAAA,IAPsB,EAOhB,IAPgB,EAOV,IAPU,EAOJ,IAPI;IAQtB,IAAA,IARsB,EAQhB,IARgB,EAQV,IARU,EAQJ,IARI;IAStB,IAAA,IATsB,EAShB,IATgB,EASV,IATU,EASJ,IATI;IAAA,KAAf,CAAX,CAAA;IAWA,IAAO7D,OAAAA,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUgC,IAAlB,EAAwBvc,IAAxB,CAAP,CAAA;IACH,GA/dK;;;IAkeK,EAAA,OAAJsb,IAAI,CAAC0D,KAAD,EAAQC,mBAAR,EAA6B;IACpC,IAAO3E,OAAAA,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUe,IAAlB,EAAwBhB,KAAG,CAACc,IAAJ,CAAS4D,KAAK,CAACE,cAAf,CAAxB,EAAwD5E,KAAG,CAAC8B,IAAJ,CAAS4C,KAAT,EAAgBC,mBAAhB,CAAxD,CAAP,CAAA;IACH,GApeK;;;IAseK,EAAJ7D,OAAAA,IAAI,CAAC8D,cAAD,EAAiB;IACxB,IAAA,IAAIlf,IAAI,GAAG,IAAIpI,UAAJ,CAAe,CACtB,IADsB,EAChB,IADgB,EACV,IADU,EACJ,IADI,EAErBsnB,cAAc,KAAK,EAApB,GAA0B,IAFJ;IAGrBA,IAAAA,cAAc,KAAK,EAApB,GAA0B,IAHJ,EAIrBA,cAAc,KAAK,CAApB,GAAyB,IAJH,EAKrBA,cAAD,GAAmB,IALG,CAAf,CAAX,CAAA;IAOA,IAAO5E,OAAAA,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUa,IAAlB,EAAwBpb,IAAxB,CAAP,CAAA;IACH,GA/eK;;;IAkfK,EAAA,OAAJoc,IAAI,CAAC4C,KAAD,EAAQC,mBAAR,EAA6B;IACpC,IAAA,IAAId,OAAO,GAAGa,KAAK,CAACZ,EAApB,CADoC;;IAIpC,IAAIjC,IAAAA,IAAI,GAAG7B,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAU4B,IAAlB,EAAwB,IAAIvkB,UAAJ,CAAe,CAC9C,IAD8C,EACxC,IADwC,EAClC,IADkC,EAC5B,IAD4B;IAE7CumB,IAAAA,OAAO,KAAK,EAAb,GAAmB,IAF2B;IAG7CA,IAAAA,OAAO,KAAK,EAAb,GAAmB,IAH2B,EAI7CA,OAAO,KAAK,CAAb,GAAkB,IAJ4B,EAK7CA,OAAD,GAAY,IALkC,CAAf,CAAxB,CAAX,CAJoC;;IAYpC,IAAIjC,IAAAA,IAAI,GAAG5B,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAU2B,IAAlB,EAAwB,IAAItkB,UAAJ,CAAe,CAC9C,IAD8C,EACxC,IADwC,EAClC,IADkC,EAC5B,IAD4B;IAE7CqnB,IAAAA,mBAAmB,KAAK,EAAzB,GAA+B,IAFe;IAG7CA,IAAAA,mBAAmB,KAAK,EAAzB,GAA+B,IAHe,EAI7CA,mBAAmB,KAAK,CAAzB,GAA8B,IAJgB,EAK7CA,mBAAD,GAAwB,IALsB,CAAf,CAAxB,CAAX,CAAA;IAOA,IAAA,IAAItD,IAAI,GAAGrB,KAAG,CAACqB,IAAJ,CAASqD,KAAT,CAAX,CAAA;IACA,IAAI1C,IAAAA,IAAI,GAAGhC,KAAG,CAACgC,IAAJ,CAAS0C,KAAT,EAAgBrD,IAAI,CAAC7N,UAAL,GAAkB,EAAlB,GAAuB,EAAvB,GAA4B,CAA5B,GAAgC,EAAhC,GAAqC,CAArC,GAAyC,CAAzD,CAAX,CAAA;IAEA,IAAA,OAAOwM,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAU6B,IAAlB,EAAwBD,IAAxB,EAA8BD,IAA9B,EAAoCI,IAApC,EAA0CX,IAA1C,CAAP,CAAA;IACH,GAzgBK;;;IA4gBK,EAAJA,OAAAA,IAAI,CAACqD,KAAD,EAAQ;IACf,IAAA,IAAIhf,IAAI,GAAG,IAAIpI,UAAJ,CAAe,CAAA,GAAI,CAAnB,CAAX,CAAA;IACA,IAAA,IAAIunB,KAAK,GAAGH,KAAK,CAACG,KAAlB,CAAA;IACAnf,IAAAA,IAAI,CAAC,CAAD,CAAJ,GAAUmf,KAAK,CAACC,SAAN,IAAmB,CAAnB,GACJD,KAAK,CAACE,SAAN,IAAmB,CADf,GAEJF,KAAK,CAACG,YAAN,IAAsB,CAFlB,GAGJH,KAAK,CAACI,aAHZ,CAAA;IAIA,IAAOjF,OAAAA,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUoB,IAAlB,EAAwB3b,IAAxB,CAAP,CAAA;IACH,GAphBK;;;IAshBK,EAAA,OAAJsc,IAAI,CAAC0C,KAAD,EAAQlB,MAAR,EAAgB;IACvB,IAAI0B,IAAAA,QAAQ,GAAG,EAAA,GAAK,EAApB,CAAA;IACA,IAAA,IAAIxf,IAAI,GAAG,IAAIpI,UAAJ,CAAe4nB,QAAf,CAAX,CAAA;IACA1B,IAAAA,MAAM,IAAI,CAAA,GAAI0B,QAAd,CAAA;IAEAxf,IAAAA,IAAI,CAAC+T,GAAL,CAAS,CACL,IADK,EACC,IADD,EACO,IADP,EACa,IADb;IAEL,IAAA,IAFK,EAEC,IAFD,EAEO,IAFP,EAEa,IAFb;IAGJ+J,IAAAA,MAAM,KAAK,EAAZ,GAAkB,IAHb;IAIJA,IAAAA,MAAM,KAAK,EAAZ,GAAkB,IAJb,EAKJA,MAAM,KAAK,CAAZ,GAAiB,IALZ,EAMJA,MAAD,GAAW,IANN,CAAT,EAOG,CAPH,CAAA,CAAA;IASA,IAAA,IAAII,QAAQ,GAAGc,KAAK,CAACd,QAArB,CAAA;IACA,IAAA,IAAI1jB,IAAI,GAAGwkB,KAAK,CAACxkB,IAAjB,CAAA;IACA,IAAA,IAAI2kB,KAAK,GAAGH,KAAK,CAACG,KAAlB,CAAA;IACA,IAAA,IAAIM,GAAG,GAAGT,KAAK,CAACS,GAAhB,CAAA;IAEAzf,IAAAA,IAAI,CAAC+T,GAAL,CAAS,CACJmK,QAAQ,KAAK,EAAd,GAAoB,IADf;IAEJA,IAAAA,QAAQ,KAAK,EAAd,GAAoB,IAFf,EAGJA,QAAQ,KAAK,CAAd,GAAmB,IAHd,EAIJA,QAAD,GAAa,IAJR,EAKJ1jB,IAAI,KAAK,EAAV,GAAgB,IALX;IAMJA,IAAAA,IAAI,KAAK,EAAV,GAAgB,IANX,EAOJA,IAAI,KAAK,CAAV,GAAe,IAPV,EAQJA,IAAD,GAAS,IARJ,EASJ2kB,KAAK,CAACC,SAAN,IAAmB,CAApB,GAAyBD,KAAK,CAACE,SAT1B;IAUJF,IAAAA,KAAK,CAACG,YAAN,IAAsB,CAAvB,GAA6BH,KAAK,CAACI,aAAN,IAAuB,CAApD,GAAyDJ,KAAK,CAACO,SAV1D,EAWL,IAXK,EAWC,IAXD;IAYJD,IAAAA,GAAG,KAAK,EAAT,GAAe,IAZV;IAaJA,IAAAA,GAAG,KAAK,EAAT,GAAe,IAbV,EAcJA,GAAG,KAAK,CAAT,GAAc,IAdT,EAeJA,GAAD,GAAQ,IAfH,CAAT,EAgBG,EAhBH,CAAA,CAAA;IAkBA,IAAOnF,OAAAA,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAU+B,IAAlB,EAAwBtc,IAAxB,CAAP,CAAA;IACH,GA5jBK;;;IA8jBK,EAAJib,OAAAA,IAAI,CAACjb,IAAD,EAAO;IACd,IAAOsa,OAAAA,KAAG,CAACkD,GAAJ,CAAQlD,KAAG,CAACC,KAAJ,CAAUU,IAAlB,EAAwBjb,IAAxB,CAAP,CAAA;IACH,GAAA;;IAhkBK,CAAA;;AAmkBVsa,SAAG,CAACztB,IAAJ,EAAA;;ICnkBA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IAGA;IACA,MAAM8yB,SAAN,CAAgB;IAEZ/rB,EAAAA,WAAW,CAACgsB,UAAD,EAAa;IACpB,IAAKC,IAAAA,CAAAA,GAAL,GAAW,WAAX,CAAA;IAEA,IAAKC,IAAAA,CAAAA,OAAL,GAAeF,UAAf,CAAA;IACA,IAAKG,IAAAA,CAAAA,aAAL,GAAqB,CAArB,CAAA;IACA,IAAA,IAAA,CAAKC,YAAL,GAAoBJ,UAAU,CAAC9R,UAA/B,CAAA;IACA,IAAA,IAAA,CAAKmS,WAAL,GAAmBL,UAAU,CAAC9R,UAAX,GAAwB,CAA3C,CAAA;IACA,IAAKoS,IAAAA,CAAAA,aAAL,GAAqB,CAArB,CAAA;IACA,IAAKC,IAAAA,CAAAA,uBAAL,GAA+B,CAA/B,CAAA;IACH,GAAA;;IAEDnwB,EAAAA,OAAO,GAAG;IACN,IAAK8vB,IAAAA,CAAAA,OAAL,GAAe,IAAf,CAAA;IACH,GAAA;;IAEDM,EAAAA,gBAAgB,GAAG;IACf,IAAA,IAAIC,iBAAiB,GAAG,IAAA,CAAKL,YAAL,GAAoB,KAAKD,aAAjD,CAAA;;IAKA,IAAIO,IAAAA,UAAU,GAAG3qB,IAAI,CAAC8D,GAAL,CAAS,CAAT,EAAY4mB,iBAAZ,CAAjB,CAAA;IACA,IAAA,IAAIE,IAAI,GAAG,IAAI3oB,UAAJ,CAAe,CAAf,CAAX,CAAA;IACA2oB,IAAAA,IAAI,CAACxM,GAAL,CAAS,IAAA,CAAK+L,OAAL,CAAatkB,QAAb,CAAsB,IAAA,CAAKukB,aAA3B,EAA0C,IAAA,CAAKA,aAAL,GAAqBO,UAA/D,CAAT,CAAA,CAAA;IACA,IAAA,IAAA,CAAKJ,aAAL,GAAqB,IAAI9L,QAAJ,CAAamM,IAAI,CAACjxB,MAAlB,CAAA,CAA0BglB,SAA1B,CAAoC,CAApC,EAAuC,KAAvC,CAArB,CAAA;IAEA,IAAKyL,IAAAA,CAAAA,aAAL,IAAsBO,UAAtB,CAAA;IACA,IAAA,IAAA,CAAKH,uBAAL,GAA+BG,UAAU,GAAG,CAA5C,CAAA;IACH,GAAA;;IAEDE,EAAAA,QAAQ,CAACC,IAAD,EAAO;;IAKX,IAAA,IAAIA,IAAI,IAAI,IAAKN,CAAAA,uBAAjB,EAA0C;IACtC,MAAA,IAAI7jB,MAAM,GAAG,IAAA,CAAK4jB,aAAL,KAAwB,KAAKO,IAA1C,CAAA;IACA,MAAKP,IAAAA,CAAAA,aAAL,KAAuBO,IAAvB,CAAA;IACA,MAAKN,IAAAA,CAAAA,uBAAL,IAAgCM,IAAhC,CAAA;IACA,MAAA,OAAOnkB,MAAP,CAAA;IACH,KAAA;;IAED,IAAIA,IAAAA,MAAM,GAAG,IAAK6jB,CAAAA,uBAAL,GAA+B,IAAKD,CAAAA,aAApC,GAAoD,CAAjE,CAAA;IACA5jB,IAAAA,MAAM,GAAGA,MAAM,KAAM,EAAA,GAAK,KAAK6jB,uBAA/B,CAAA;IACA,IAAA,IAAIO,cAAc,GAAGD,IAAI,GAAG,KAAKN,uBAAjC,CAAA;;IAEA,IAAA,IAAA,CAAKC,gBAAL,EAAA,CAAA;;IACA,IAAIO,IAAAA,cAAc,GAAGhrB,IAAI,CAAC8D,GAAL,CAASinB,cAAT,EAAyB,IAAKP,CAAAA,uBAA9B,CAArB,CAAA;IAEA,IAAA,IAAIS,OAAO,GAAG,IAAA,CAAKV,aAAL,KAAwB,KAAKS,cAA3C,CAAA;IACA,IAAKT,IAAAA,CAAAA,aAAL,KAAuBS,cAAvB,CAAA;IACA,IAAKR,IAAAA,CAAAA,uBAAL,IAAgCQ,cAAhC,CAAA;IAEArkB,IAAAA,MAAM,GAAIA,MAAM,IAAIqkB,cAAX,GAA6BC,OAAtC,CAAA;IACA,IAAA,OAAOtkB,MAAP,CAAA;IACH,GAAA;;IAEDukB,EAAAA,QAAQ,GAAG;IACP,IAAA,OAAO,IAAKL,CAAAA,QAAL,CAAc,CAAd,MAAqB,CAA5B,CAAA;IACH,GAAA;;IAEDM,EAAAA,QAAQ,GAAG;IACP,IAAA,OAAO,IAAKN,CAAAA,QAAL,CAAc,CAAd,CAAP,CAAA;IACH,GAAA;;IAEDO,EAAAA,gBAAgB,GAAG;IACf,IAAA,IAAIC,UAAJ,CAAA;;IACA,IAAKA,KAAAA,UAAU,GAAG,CAAlB,EAAqBA,UAAU,GAAG,IAAA,CAAKb,uBAAvC,EAAgEa,UAAU,EAA1E,EAA8E;IAC1E,MAAA,IAAI,OAAO,IAAKd,CAAAA,aAAL,GAAsB,UAAec,KAAAA,UAA5C,CAAJ,EAA8D;IAC1D,QAAKd,IAAAA,CAAAA,aAAL,KAAuBc,UAAvB,CAAA;IACA,QAAKb,IAAAA,CAAAA,uBAAL,IAAgCa,UAAhC,CAAA;IACA,QAAA,OAAOA,UAAP,CAAA;IACH,OAAA;IACJ,KAAA;;IACD,IAAA,IAAA,CAAKZ,gBAAL,EAAA,CAAA;;IACA,IAAA,OAAOY,UAAU,GAAG,IAAKD,CAAAA,gBAAL,EAApB,CAAA;IACH,GAAA;;IAEDE,EAAAA,OAAO,GAAG;IAAG;IACT,IAAA,IAAIC,aAAa,GAAG,IAAKH,CAAAA,gBAAL,EAApB,CAAA;;IACA,IAAA,OAAO,KAAKP,QAAL,CAAcU,aAAa,GAAG,CAA9B,IAAmC,CAA1C,CAAA;IACH,GAAA;;IAEDC,EAAAA,OAAO,GAAG;IAAG;IACT,IAAA,IAAIvnB,KAAK,GAAG,IAAKqnB,CAAAA,OAAL,EAAZ,CAAA;;IACA,IAAIrnB,IAAAA,KAAK,GAAG,IAAZ,EAAkB;IACd,MAAA,OAAQA,KAAK,GAAG,CAAT,KAAgB,CAAvB,CAAA;IACH,KAFD,MAEO;IACH,MAAA,OAAO,CAAC,CAAD,IAAMA,KAAK,KAAK,CAAhB,CAAP,CAAA;IACH,KAAA;IACJ,GAAA;;IA5FW;;ICpBhB;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;IAIA,MAAMwnB,WAAN,CAAgB;IAEK,EAAVC,OAAAA,UAAU,CAACzB,UAAD,EAAa;IAC1B,IAAIlX,IAAAA,GAAG,GAAGkX,UAAV,CAAA;IACA,IAAA,IAAI0B,UAAU,GAAG5Y,GAAG,CAACoF,UAArB,CAAA;IACA,IAAA,IAAIyT,GAAG,GAAG,IAAI3pB,UAAJ,CAAe0pB,UAAf,CAAV,CAAA;IACA,IAAIE,IAAAA,OAAO,GAAG,CAAd,CAAA;;IAEA,IAAK,KAAA,IAAIvhB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqhB,UAApB,EAAgCrhB,CAAC,EAAjC,EAAqC;IACjC,MAAIA,IAAAA,CAAC,IAAI,CAAT,EAAY;IACR;IACA,QAAIyI,IAAAA,GAAG,CAACzI,CAAD,CAAH,KAAW,IAAX,IAAmByI,GAAG,CAACzI,CAAC,GAAG,CAAL,CAAH,KAAe,IAAlC,IAA0CyI,GAAG,CAACzI,CAAC,GAAG,CAAL,CAAH,KAAe,IAA7D,EAAmE;IAC/D,UAAA,SAAA;IACH,SAAA;IACJ,OAAA;;IACDshB,MAAAA,GAAG,CAACC,OAAD,CAAH,GAAe9Y,GAAG,CAACzI,CAAD,CAAlB,CAAA;IACAuhB,MAAAA,OAAO,EAAA,CAAA;IACV,KAAA;;IAED,IAAO,OAAA,IAAI5pB,UAAJ,CAAe2pB,GAAG,CAACjyB,MAAnB,EAA2B,CAA3B,EAA8BkyB,OAA9B,CAAP,CAAA;IACH,GApBW;IAuBZ;;;IACe,EAARC,OAAAA,QAAQ,CAAC7B,UAAD,EAAa;IACxB,IAAA,IAAI8B,IAAI,GAAGN,WAAS,CAACC,UAAV,CAAqBzB,UAArB,CAAX,CAAA;;IACA,IAAA,IAAI+B,EAAE,GAAG,IAAIhC,SAAJ,CAAc+B,IAAd,CAAT,CAAA;IAEAC,IAAAA,EAAE,CAACb,QAAH,EAAA,CAJwB;IAMxB;;IAEA,IAAA,IAAIc,WAAW,GAAGD,EAAE,CAACb,QAAH,EAAlB,CARwB;;IASxBa,IAAAA,EAAE,CAACb,QAAH,EAAA,CATwB;IAUxB;;IACA,IAAA,IAAIe,SAAS,GAAGF,EAAE,CAACb,QAAH,EAAhB,CAXwB;IAYxB;;IACAa,IAAAA,EAAE,CAACV,OAAH,EAAA,CAbwB;;IAexB,IAAA,IAAIa,cAAc,GAAGV,WAAS,CAACW,gBAAV,CAA2BH,WAA3B,CAArB,CAAA;IAEA,IAAA,IAAII,YAAY,GAAGZ,WAAS,CAACa,cAAV,CAAyBJ,SAAzB,CAAnB,CAAA;IAEA,IAAIK,IAAAA,iBAAiB,GAAG,CAAxB,CAAA;IACA,IAAIC,IAAAA,aAAa,GAAG,GAApB,CAAA;IACA,IAAIC,IAAAA,mBAAmB,GAAG,CAAC,CAAD,EAAI,GAAJ,EAAS,GAAT,EAAc,GAAd,CAA1B,CAAA;IACA,IAAA,IAAIC,SAAS,GAAG,CAAhB,CAtBwB;;IAyBxB,IAAA,IAAIT,WAAW,KAAK,GAAhB,IAAuBA,WAAW,KAAK,GAAvC,IAA8CA,WAAW,KAAK,GAA9D,IACAA,WAAW,KAAK,GADhB,IACuBA,WAAW,KAAK,EADvC,IAC6CA,WAAW,KAAK,EAD7D,IAEAA,WAAW,KAAK,EAFhB,IAEsBA,WAAW,KAAK,GAFtC,IAE6CA,WAAW,KAAK,GAF7D,IAGAA,WAAW,KAAK,GAHhB,IAGuBA,WAAW,KAAK,GAH3C,EAGgD;IAC5C;IACAM,MAAAA,iBAAiB,GAAGP,EAAE,CAACV,OAAH,EAApB,CAAA;;IAEA,MAAIiB,IAAAA,iBAAiB,KAAK,CAA1B,EAA6B;IACzBP,QAAAA,EAAE,CAACnB,QAAH,CAAY,CAAZ,EADyB;IAE5B,OAAA;;IACD,MAAI0B,IAAAA,iBAAiB,IAAI,CAAzB,EAA4B;IACxBC,QAAAA,aAAa,GAAGC,mBAAmB,CAACF,iBAAD,CAAnC,CAAA;IACH,OAAA;;IAEDG,MAAAA,SAAS,GAAGV,EAAE,CAACV,OAAH,EAAe,GAAA,CAA3B,CAX4C;;IAY5CU,MAAAA,EAAE,CAACV,OAAH,EAAA,CAZ4C;;IAa5CU,MAAAA,EAAE,CAACnB,QAAH,CAAY,CAAZ,EAb4C;;IAc5C,MAAA,IAAImB,EAAE,CAACd,QAAH,EAAJ,EAAmB;IAAG;IAClB,QAAIyB,IAAAA,kBAAkB,GAAIJ,iBAAiB,KAAK,CAAvB,GAA4B,CAA5B,GAAgC,EAAzD,CAAA;;IACA,QAAK,KAAA,IAAIjiB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGqiB,kBAApB,EAAwCriB,CAAC,EAAzC,EAA6C;IACzC,UAAA,IAAI0hB,EAAE,CAACd,QAAH,EAAJ,EAAmB;IAAG;IAClB,YAAI5gB,IAAAA,CAAC,GAAG,CAAR,EAAW;IACPmhB,cAAAA,WAAS,CAACmB,gBAAV,CAA2BZ,EAA3B,EAA+B,EAA/B,CAAA,CAAA;IACH,aAFD,MAEO;IACHP,cAAAA,WAAS,CAACmB,gBAAV,CAA2BZ,EAA3B,EAA+B,EAA/B,CAAA,CAAA;IACH,aAAA;IACJ,WAAA;IACJ,SAAA;IACJ,OAAA;IACJ,KAtDuB;;;IAwDxBA,IAAAA,EAAE,CAACV,OAAH,EAAA,CAxDwB;IAyDxB;;IACA,IAAA,IAAIuB,kBAAkB,GAAGb,EAAE,CAACV,OAAH,EAAzB,CAAA;;IACA,IAAIuB,IAAAA,kBAAkB,KAAK,CAA3B,EAA8B;IAC1Bb,MAAAA,EAAE,CAACV,OAAH,EAAA,CAD0B;IAE7B,KAFD,MAEO,IAAIuB,kBAAkB,KAAK,CAA3B,EAA8B;IACjCb,MAAAA,EAAE,CAACnB,QAAH,CAAY,CAAZ,EADiC;;IAEjCmB,MAAAA,EAAE,CAACR,OAAH,EAAA,CAFiC;;IAGjCQ,MAAAA,EAAE,CAACR,OAAH,EAAA,CAHiC;;IAIjC,MAAA,IAAIsB,qCAAqC,GAAGd,EAAE,CAACV,OAAH,EAA5C,CAAA;;IACA,MAAK,KAAA,IAAIhhB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGwiB,qCAApB,EAA2DxiB,CAAC,EAA5D,EAAgE;IAC5D0hB,QAAAA,EAAE,CAACR,OAAH,EAAA,CAD4D;IAE/D,OAAA;IACJ,KArEuB;;;IAuExB,IAAA,IAAIuB,UAAU,GAAGf,EAAE,CAACV,OAAH,EAAjB,CAvEwB;IAwExB;;IACAU,IAAAA,EAAE,CAACnB,QAAH,CAAY,CAAZ,EAzEwB;IA0ExB;;IACA,IAAA,IAAImC,uBAAuB,GAAGhB,EAAE,CAACV,OAAH,EAA9B,CA3EwB;IA6ExB;;IACA,IAAA,IAAI2B,8BAA8B,GAAGjB,EAAE,CAACV,OAAH,EAArC,CA9EwB;IAgFxB;IACA;;IACA,IAAA,IAAI4B,mBAAmB,GAAGlB,EAAE,CAACnB,QAAH,CAAY,CAAZ,CAA1B,CAAA;;IACA,IAAIqC,IAAAA,mBAAmB,KAAK,CAA5B,EAA+B;IAC3B;IACAlB,MAAAA,EAAE,CAACnB,QAAH,CAAY,CAAZ,EAF2B;IAG9B,KAtFuB;;;IAwFxBmB,IAAAA,EAAE,CAACnB,QAAH,CAAY,CAAZ,EAxFwB;;IA0FxB,IAAIsC,IAAAA,sBAAsB,GAAG,CAA7B,CAAA;IACA,IAAIC,IAAAA,uBAAuB,GAAG,CAA9B,CAAA;IACA,IAAIC,IAAAA,qBAAqB,GAAG,CAA5B,CAAA;IACA,IAAIC,IAAAA,wBAAwB,GAAG,CAA/B,CAAA;IAEA,IAAA,IAAIC,mBAAmB,GAAGvB,EAAE,CAACd,QAAH,EAA1B,CAAA;;IACA,IAAA,IAAIqC,mBAAJ,EAAyB;IACrBJ,MAAAA,sBAAsB,GAAGnB,EAAE,CAACV,OAAH,EAAzB,CAAA;IACA8B,MAAAA,uBAAuB,GAAGpB,EAAE,CAACV,OAAH,EAA1B,CAAA;IACA+B,MAAAA,qBAAqB,GAAGrB,EAAE,CAACV,OAAH,EAAxB,CAAA;IACAgC,MAAAA,wBAAwB,GAAGtB,EAAE,CAACV,OAAH,EAA3B,CAAA;IACH,KAAA;;IAED,IAAIkC,IAAAA,SAAS,GAAG,CAAhB;IAAA,QAAmBC,UAAU,GAAG,CAAhC,CAAA;IACA,IAAI/mB,IAAAA,GAAG,GAAG,CAAV;IAAA,QAAagnB,SAAS,GAAG,IAAzB;IAAA,QAA+BC,OAAO,GAAG,CAAzC;IAAA,QAA4CC,OAAO,GAAG,CAAtD,CAxGwB;;IA0GxB,IAAA,IAAIC,2BAA2B,GAAG7B,EAAE,CAACd,QAAH,EAAlC,CAAA;;IACA,IAAA,IAAI2C,2BAAJ,EAAiC;IAC7B,MAAA,IAAI7B,EAAE,CAACd,QAAH,EAAJ,EAAmB;IAAG;IAClB,QAAA,IAAI4C,gBAAgB,GAAG9B,EAAE,CAACb,QAAH,EAAvB,CAAA;IACA,QAAA,IAAI4C,WAAW,GAAG,CAAC,CAAD,EAAI,EAAJ,EAAQ,EAAR,EAAY,EAAZ,EAAgB,EAAhB,EAAoB,EAApB,EAAwB,EAAxB,EAA4B,EAA5B,EAAgC,EAAhC,EAAoC,EAApC,EAAwC,EAAxC,EAA4C,EAA5C,EAAgD,GAAhD,EAAqD,CAArD,EAAwD,CAAxD,EAA2D,CAA3D,CAAlB,CAAA;IACA,QAAA,IAAIC,WAAW,GAAG,CAAC,CAAD,EAAI,EAAJ,EAAQ,EAAR,EAAY,EAAZ,EAAgB,EAAhB,EAAoB,EAApB,EAAwB,EAAxB,EAA4B,EAA5B,EAAgC,EAAhC,EAAoC,EAApC,EAAwC,EAAxC,EAA4C,EAA5C,EAAiD,EAAjD,EAAqD,CAArD,EAAwD,CAAxD,EAA2D,CAA3D,CAAlB,CAAA;;IAEA,QAAA,IAAIF,gBAAgB,GAAG,CAAnB,IAAwBA,gBAAgB,GAAG,EAA/C,EAAmD;IAC/CN,UAAAA,SAAS,GAAGO,WAAW,CAACD,gBAAgB,GAAG,CAApB,CAAvB,CAAA;IACAL,UAAAA,UAAU,GAAGO,WAAW,CAACF,gBAAgB,GAAG,CAApB,CAAxB,CAAA;IACH,SAHD,MAGO,IAAIA,gBAAgB,KAAK,GAAzB,EAA8B;IACjCN,UAAAA,SAAS,GAAGxB,EAAE,CAACb,QAAH,EAAiB,IAAA,CAAjB,GAAqBa,EAAE,CAACb,QAAH,EAAjC,CAAA;IACAsC,UAAAA,UAAU,GAAGzB,EAAE,CAACb,QAAH,EAAiB,IAAA,CAAjB,GAAqBa,EAAE,CAACb,QAAH,EAAlC,CAAA;IACH,SAAA;IACJ,OAAA;;IAED,MAAA,IAAIa,EAAE,CAACd,QAAH,EAAJ,EAAmB;IAAG;IAClBc,QAAAA,EAAE,CAACd,QAAH,EAAA,CADe;IAElB,OAAA;;IACD,MAAA,IAAIc,EAAE,CAACd,QAAH,EAAJ,EAAmB;IAAG;IAClBc,QAAAA,EAAE,CAACnB,QAAH,CAAY,CAAZ,EADe;;IAEf,QAAA,IAAImB,EAAE,CAACd,QAAH,EAAJ,EAAmB;IAAG;IAClBc,UAAAA,EAAE,CAACnB,QAAH,CAAY,EAAZ,EADe;IAElB,SAAA;IACJ,OAAA;;IACD,MAAA,IAAImB,EAAE,CAACd,QAAH,EAAJ,EAAmB;IAAG;IAClBc,QAAAA,EAAE,CAACV,OAAH,EAAA,CADe;;IAEfU,QAAAA,EAAE,CAACV,OAAH,EAAA,CAFe;IAGlB,OAAA;;IACD,MAAA,IAAIU,EAAE,CAACd,QAAH,EAAJ,EAAmB;IAAG;IAClB,QAAA,IAAI+C,iBAAiB,GAAGjC,EAAE,CAACnB,QAAH,CAAY,EAAZ,CAAxB,CAAA;IACA,QAAA,IAAIqD,UAAU,GAAGlC,EAAE,CAACnB,QAAH,CAAY,EAAZ,CAAjB,CAAA;IACA6C,QAAAA,SAAS,GAAG1B,EAAE,CAACd,QAAH,EAAZ,CAHe;;IAKfyC,QAAAA,OAAO,GAAGO,UAAV,CAAA;IACAN,QAAAA,OAAO,GAAGK,iBAAiB,GAAG,CAA9B,CAAA;IACAvnB,QAAAA,GAAG,GAAGinB,OAAO,GAAGC,OAAhB,CAAA;IACH,OAAA;IACJ,KAAA;;IAED,IAAIO,IAAAA,QAAQ,GAAG,CAAf,CAAA;;IACA,IAAA,IAAIX,SAAS,KAAK,CAAd,IAAmBC,UAAU,KAAK,CAAtC,EAAyC;IACrCU,MAAAA,QAAQ,GAAGX,SAAS,GAAGC,UAAvB,CAAA;IACH,KAAA;;IAED,IAAIW,IAAAA,WAAW,GAAG,CAAlB;IAAA,QAAqBC,WAAW,GAAG,CAAnC,CAAA;;IACA,IAAI9B,IAAAA,iBAAiB,KAAK,CAA1B,EAA6B;IACzB6B,MAAAA,WAAW,GAAG,CAAd,CAAA;IACAC,MAAAA,WAAW,GAAG,CAAA,GAAInB,mBAAlB,CAAA;IACH,KAHD,MAGO;IACH,MAAIoB,IAAAA,MAAM,GAAI/B,iBAAiB,KAAK,CAAvB,GAA4B,CAA5B,GAAgC,CAA7C,CAAA;IACA,MAAIgC,IAAAA,MAAM,GAAIhC,iBAAiB,KAAK,CAAvB,GAA4B,CAA5B,GAAgC,CAA7C,CAAA;IACA6B,MAAAA,WAAW,GAAGE,MAAd,CAAA;IACAD,MAAAA,WAAW,GAAGE,MAAM,IAAI,CAAA,GAAIrB,mBAAR,CAApB,CAAA;IACH,KAAA;;IAED,IAAA,IAAIsB,WAAW,GAAG,CAACxB,uBAAuB,GAAG,CAA3B,IAAgC,EAAlD,CAAA;IACA,IAAA,IAAIyB,YAAY,GAAG,CAAC,CAAA,GAAIvB,mBAAL,KAA6B,CAACD,8BAA8B,GAAG,CAAlC,IAAuC,EAApE,CAAnB,CAAA;IAEAuB,IAAAA,WAAW,IAAI,CAACrB,sBAAsB,GAAGC,uBAA1B,IAAqDgB,WAApE,CAAA;IACAK,IAAAA,YAAY,IAAI,CAACpB,qBAAqB,GAAGC,wBAAzB,IAAqDe,WAArE,CAAA;IAEA,IAAIK,IAAAA,aAAa,GAAG1uB,IAAI,CAAC2uB,IAAL,CAAUH,WAAW,GAAGL,QAAxB,CAApB,CAAA;IAEAnC,IAAAA,EAAE,CAAC3xB,OAAH,EAAA,CAAA;IACA2xB,IAAAA,EAAE,GAAG,IAAL,CA3KwB;;IA+KxB,IAAO,OAAA;IACHG,MAAAA,cAAc,EAAEA,cADb;IAC8B;IACjCE,MAAAA,YAAY,EAAEA,YAFX;IAE0B;IAC7BK,MAAAA,SAAS,EAAEA,SAHR;IAGoB;IACvBK,MAAAA,UAAU,EAAEA,UAJT;IAKHP,MAAAA,aAAa,EAAEA,aALZ;IAK4B;IAC/BoC,MAAAA,oBAAoB,EAAEnD,WAAS,CAACoD,qBAAV,CAAgCrC,aAAhC,CANnB;IAQHsC,MAAAA,UAAU,EAAE;IACRC,QAAAA,KAAK,EAAErB,SADC;IAERhnB,QAAAA,GAAG,EAAEA,GAFG;IAGRknB,QAAAA,OAAO,EAAEA,OAHD;IAIRD,QAAAA,OAAO,EAAEA,OAAAA;IAJD,OART;IAeHqB,MAAAA,SAAS,EAAE;IACPjvB,QAAAA,KAAK,EAAEytB,SADA;IAEPrtB,QAAAA,MAAM,EAAEstB,UAAAA;IAFD,OAfR;IAoBHwB,MAAAA,UAAU,EAAE;IACRlvB,QAAAA,KAAK,EAAEyuB,WADC;IAERruB,QAAAA,MAAM,EAAEsuB,YAAAA;IAFA,OApBT;IAyBHS,MAAAA,YAAY,EAAE;IACVnvB,QAAAA,KAAK,EAAE2uB,aADG;IAEVvuB,QAAAA,MAAM,EAAEsuB,YAAAA;IAFE,OAAA;IAzBX,KAAP,CAAA;IA8BH,GAAA;;IAEsB,EAAA,OAAhB7B,gBAAgB,CAACZ,EAAD,EAAKmD,KAAL,EAAY;IAC/B,IAAIC,IAAAA,UAAU,GAAG,CAAjB;IAAA,QAAoBC,UAAU,GAAG,CAAjC,CAAA;IACA,IAAIC,IAAAA,WAAW,GAAG,CAAlB,CAAA;;IACA,IAAK,KAAA,IAAIhlB,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG6kB,KAApB,EAA2B7kB,CAAC,EAA5B,EAAgC;IAC5B,MAAI+kB,IAAAA,UAAU,KAAK,CAAnB,EAAsB;IAClBC,QAAAA,WAAW,GAAGtD,EAAE,CAACR,OAAH,EAAd,CAAA;IACA6D,QAAAA,UAAU,GAAG,CAACD,UAAU,GAAGE,WAAb,GAA2B,GAA5B,IAAmC,GAAhD,CAAA;IACH,OAAA;;IACDF,MAAAA,UAAU,GAAIC,UAAU,KAAK,CAAhB,GAAqBD,UAArB,GAAkCC,UAA/C,CAAA;IACH,KAAA;IACJ,GAjPW;IAoPZ;IACA;IACA;IACA;;;IACuB,EAAhBjD,OAAAA,gBAAgB,CAACH,WAAD,EAAc;IACjC,IAAA,QAAQA,WAAR;IACI,MAAA,KAAK,EAAL;IACI,QAAA,OAAO,UAAP,CAAA;;IACJ,MAAA,KAAK,EAAL;IACI,QAAA,OAAO,MAAP,CAAA;;IACJ,MAAA,KAAK,EAAL;IACI,QAAA,OAAO,UAAP,CAAA;;IACJ,MAAA,KAAK,GAAL;IACI,QAAA,OAAO,MAAP,CAAA;;IACJ,MAAA,KAAK,GAAL;IACI,QAAA,OAAO,QAAP,CAAA;;IACJ,MAAA,KAAK,GAAL;IACI,QAAA,OAAO,SAAP,CAAA;;IACJ,MAAA,KAAK,GAAL;IACI,QAAA,OAAO,SAAP,CAAA;;IACJ,MAAA;IACI,QAAA,OAAO,SAAP,CAAA;IAhBR,KAAA;IAkBH,GAAA;;IAEoB,EAAdK,OAAAA,cAAc,CAACJ,SAAD,EAAY;IAC7B,IAAO,OAAA,CAACA,SAAS,GAAG,EAAb,EAAiB1lB,OAAjB,CAAyB,CAAzB,CAAP,CAAA;IACH,GAAA;;IAE2B,EAArBqoB,OAAAA,qBAAqB,CAACU,MAAD,EAAS;IACjC,IAAA,QAAQA,MAAR;IACI,MAAA,KAAK,GAAL;IACI,QAAA,OAAO,OAAP,CAAA;;IACJ,MAAA,KAAK,GAAL;IACI,QAAA,OAAO,OAAP,CAAA;;IACJ,MAAA,KAAK,GAAL;IACI,QAAA,OAAO,OAAP,CAAA;;IACJ,MAAA;IACI,QAAA,OAAO,SAAP,CAAA;IARR,KAAA;IAUH,GAAA;;IA5RW;;ICjBT,SAASC,kCAAT,CAA4CzT,WAA5C,EAAyD;IAC5D,EAAMsM,MAAAA,IAAI,GAAG,EAAb,CAAA;IACA,EAAMja,MAAAA,CAAC,GAAG,IAAIqQ,QAAJ,CAAa1C,WAAW,CAACpiB,MAAzB,CAAV,CAAA;IACA,EAAI81B,IAAAA,OAAO,GAAGrhB,CAAC,CAACsQ,QAAF,CAAW,CAAX,CAAd,CAH4D;;IAI5D,EAAIgR,IAAAA,UAAU,GAAGthB,CAAC,CAACsQ,QAAF,CAAW,CAAX,CAAjB,CAJ4D;;IAK5D,EAA2BtQ,CAAC,CAACsQ,QAAF,CAAW,CAAX,EALiC;;IAM5D,EAAetQ,CAAC,CAACsQ,QAAF,CAAW,CAAX,EAN6C;;IAQ5D,EAAA,IAAI+Q,OAAO,KAAK,CAAZ,IAAiBC,UAAU,KAAK,CAApC,EAAuC;IACnC;IAEA,IAAA,OAAA;IACH,GAAA;;IAED,EAAA,MAAMC,eAAe,GAAG,CAACvhB,CAAC,CAACsQ,QAAF,CAAW,CAAX,CAAgB,GAAA,CAAjB,IAAsB,CAA9C,CAd4D;;;IAgB5D,EAAA,IAAIiR,eAAe,KAAK,CAApB,IAAyBA,eAAe,KAAK,CAAjD,EAAoD;IAAG;IACnD;IACA,IAAA,OAAA;IACH,GAAA;;IACD,EAAIC,IAAAA,QAAQ,GAAGxhB,CAAC,CAACsQ,QAAF,CAAW,CAAX,CAAA,GAAgB,EAA/B,CApB4D;;IAsB5D,EAAIkR,IAAAA,QAAQ,KAAK,CAAjB,EAAoB;IAChB;IACA,IAAA,OAAA;IACH,GAEA;;IAED,EAAIzH,IAAAA,MAAM,GAAG,CAAb,CAAA;;IACA,EAAK,KAAA,IAAI7d,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGslB,QAApB,EAA8BtlB,CAAC,EAA/B,EAAmC;IAC/B,IAAIG,IAAAA,GAAG,GAAG2D,CAAC,CAACyhB,SAAF,CAAY1H,MAAZ,EAAoB,KAApB,CAAV,CAD+B;;IAE/BA,IAAAA,MAAM,IAAI,CAAV,CAAA;;IAEA,IAAI1d,IAAAA,GAAG,KAAK,CAAZ,EAAe;IACX,MAAA,SAAA;IACH,KAN8B;;;IAS/B,IAAA,IAAIrO,GAAG,GAAG,IAAI6F,UAAJ,CAAe8Z,WAAW,CAACpiB,MAA3B,EAAmCwuB,MAAnC,EAA2C1d,GAA3C,CAAV,CAAA;IACA0d,IAAAA,MAAM,IAAI1d,GAAV,CAV+B;IAY/B;IACA;IACA;;IACA,IAAA,IAAI4R,MAAM,GAAGoP,WAAS,CAACK,QAAV,CAAmB1vB,GAAnB,CAAb,CAAA;;IACA,IAAIkO,IAAAA,CAAC,KAAK,CAAV,EAAa;IACT;IACA,MAAA,SAAA;IACH,KAAA;;IAED+d,IAAAA,IAAI,CAACc,UAAL,GAAkB9M,MAAM,CAAC4S,UAAP,CAAkBlvB,KAApC,CAAA;IACAsoB,IAAAA,IAAI,CAACe,WAAL,GAAmB/M,MAAM,CAAC4S,UAAP,CAAkB9uB,MAArC,CAAA;IACAkoB,IAAAA,IAAI,CAACK,YAAL,GAAoBrM,MAAM,CAAC6S,YAAP,CAAoBnvB,KAAxC,CAAA;IACAsoB,IAAAA,IAAI,CAACM,aAAL,GAAqBtM,MAAM,CAAC6S,YAAP,CAAoB/uB,MAAzC,CAAA;IAEAkoB,IAAAA,IAAI,CAACyH,OAAL,GAAezT,MAAM,CAAC8P,cAAtB,CAAA;IACA9D,IAAAA,IAAI,CAAC0H,KAAL,GAAa1T,MAAM,CAACgQ,YAApB,CAAA;IACAhE,IAAAA,IAAI,CAAC2H,QAAL,GAAgB3T,MAAM,CAACqQ,SAAvB,CAAA;IACArE,IAAAA,IAAI,CAAC4H,YAAL,GAAoB5T,MAAM,CAACmQ,aAA3B,CAAA;IACAnE,IAAAA,IAAI,CAAC6H,QAAL,GAAgB7T,MAAM,CAAC2S,SAAvB,CAAA;IACA3G,IAAAA,IAAI,CAAC8H,SAAL,GAAiB9T,MAAM,CAACyS,UAAxB,CAAA;;IAEA,IAAIzS,IAAAA,MAAM,CAACyS,UAAP,CAAkBC,KAAlB,KAA4B,KAA5B,IACA1S,MAAM,CAACyS,UAAP,CAAkBnB,OAAlB,KAA8B,CAD9B,IAEAtR,MAAM,CAACyS,UAAP,CAAkBlB,OAAlB,KAA8B,CAFlC,EAEqC;IACjCvF,MAAAA,IAAI,CAAC8H,SAAL,GAAiB,EAAjB,CAAA;IACH,KAAA;;IAED,IAAA,IAAIvC,OAAO,GAAGvF,IAAI,CAAC8H,SAAL,CAAevC,OAA7B,CAAA;IACA,IAAA,IAAID,OAAO,GAAGtF,IAAI,CAAC8H,SAAL,CAAexC,OAA7B,CAAA;IAEAtF,IAAAA,IAAI,CAAC+H,iBAAL,GAAyB/H,IAAI,CAACC,SAAL,IAAkBsF,OAAO,GAAGD,OAA5B,CAAzB,CAAA;IAEA,IAAI/nB,IAAAA,UAAU,GAAGxJ,GAAG,CAACyJ,QAAJ,CAAa,CAAb,EAAgB,CAAhB,CAAjB,CAAA;IAEA,IAAIC,IAAAA,WAAW,GAAG,OAAlB,CAAA;;IACA,IAAK,KAAA,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,CAApB,EAAuBA,CAAC,EAAxB,EAA4B;IACxB,MAAIC,IAAAA,CAAC,GAAGJ,UAAU,CAACG,CAAD,CAAV,CAAcE,QAAd,CAAuB,EAAvB,CAAR,CAAA;;IACA,MAAA,IAAID,CAAC,CAAChF,MAAF,GAAW,CAAf,EAAkB;IACdgF,QAAAA,CAAC,GAAG,GAAA,GAAMA,CAAV,CAAA;IACH,OAAA;;IACDF,MAAAA,WAAW,IAAIE,CAAf,CAAA;IACH,KArD8B;;;IAuD/BqiB,IAAAA,IAAI,CAACniB,KAAL,GAAaJ,WAAb,CAAA;IACH,GAAA;;IAED,EAAIuqB,IAAAA,QAAQ,GAAGjiB,CAAC,CAACsQ,QAAF,CAAWyJ,MAAX,CAAf,CAxF4D;;IAyF5D,EAAIkI,IAAAA,QAAQ,KAAK,CAAjB,EAAoB;IAChB;IACA,IAAA,OAAA;IACH,GAEA;;IAEDlI,EAAAA,MAAM,EAAA,CAAA;;IACN,EAAK,KAAA,IAAI7d,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG+lB,QAApB,EAA8B/lB,CAAC,EAA/B,EAAmC;IAC/B,IAAIG,IAAAA,GAAG,GAAG2D,CAAC,CAACyhB,SAAF,CAAY1H,MAAZ,EAAoB,KAApB,CAAV,CAD+B;;IAE/BA,IAAAA,MAAM,IAAI,CAAV,CAAA;;IAEA,IAAI1d,IAAAA,GAAG,KAAK,CAAZ,EAAe;IACX,MAAA,SAAA;IACH,KAAA;;IACD,IAAU,IAAIxI,UAAJ,CAAe8Z,WAAW,CAACpiB,MAA3B,EAAmCwuB,MAAnC,EAA2C1d,GAA3C,EAPqB;;IAU/B0d,IAAAA,MAAM,IAAI1d,GAAV,CAAA;IACH,GAAA;;IAED4d,EAAAA,IAAI,CAACQ,SAAL,GAAiB,KAAjB,CA9G4D;;IAiH5D,EAAA,OAAOR,IAAP,CAAA;IACH;;ICrHD,MAAMoD,SAAN,CAAgB;IACG,EAAA,OAARK,QAAQ,CAAC7B,UAAD,EAAa,EAE3B;;IAHW;;ICGT,SAASqG,mCAAT,CAA6CvU,WAA7C,EAA0D;IAC7D,EAAMsM,MAAAA,IAAI,GAAG,EAAb,CAAA;IACAA,EAAAA,IAAI,CAACQ,SAAL,GAAiB,MAAjB,CAAA;IACA,EAAA,IAAIV,MAAM,GAAG,EAAK,GAAA,CAAlB,CAH6D;;IAK7D,EAAA,MAAMoI,MAAM,GAAGxU,WAAW,CAACoM,MAAD,CAA1B,CAAA;;IAEA,EAAA,IAAIoI,MAAM,KAAKr0B,aAAa,CAACC,GAA7B,EAAkC;IAC9B,IAAA,OAAOksB,IAAP,CAAA;IACH,GAAA;;IAEDF,EAAAA,MAAM,IAAI,CAAV,CAAA;IACAA,EAAAA,MAAM,IAAI,CAAV,CAAA;IACA,EAAA,MAAMqI,SAAS,GAAGzU,WAAW,CAACoM,MAAM,GAAG,CAAV,CAAX,GAA2BpM,WAAW,CAACoM,MAAD,CAAX,IAAuB,CAApE,CAAA;IACAA,EAAAA,MAAM,IAAI,CAAV,CAAA;IACA,EAAMsI,MAAAA,OAAO,GAAG1U,WAAW,CAAC3R,KAAZ,CAAkB+d,MAAlB,EAA2BA,MAAM,GAAGqI,SAApC,CAAhB,CAAA;IACAlyB,EAAAA,OAAO,CAACrF,GAAR,CAAYgJ,UAAU,CAACyuB,IAAX,CAAgBD,OAAhB,CAAZ,CAAA,CAAA;IACAtI,EAAAA,MAAM,IAAIqI,SAAV,CAAA;IAEA,EAAA,MAAMG,MAAM,GAAG5U,WAAW,CAACoM,MAAD,CAA1B,CAAA;;IACA,EAAA,IAAIwI,MAAM,KAAKz0B,aAAa,CAACE,GAA7B,EAAkC;IAC9B,IAAA,OAAOisB,IAAP,CAAA;IACH,GAAA;;IACDF,EAAAA,MAAM,IAAI,CAAV,CAAA;IACAA,EAAAA,MAAM,IAAI,CAAV,CAAA;IACA,EAAA,MAAMyI,SAAS,GAAG7U,WAAW,CAACoM,MAAM,GAAG,CAAV,CAAX,GAA2BpM,WAAW,CAACoM,MAAD,CAAX,IAAuB,CAApE,CAAA;IAEAA,EAAAA,MAAM,IAAI,CAAV,CAAA;IACA,EAAM0I,MAAAA,OAAO,GAAG9U,WAAW,CAAC3R,KAAZ,CAAkB+d,MAAlB,EAA2BA,MAAM,GAAGyI,SAApC,CAAhB,CAAA;IACAtyB,EAAAA,OAAO,CAACrF,GAAR,CAAYgJ,UAAU,CAACyuB,IAAX,CAAgBG,OAAhB,CAAZ,CAAA,CAAA;IAEA1I,EAAAA,MAAM,IAAIyI,SAAV,CAAA;IAEA,EAAA,MAAME,MAAM,GAAG/U,WAAW,CAACoM,MAAD,CAA1B,CAAA;;IAEA,EAAA,IAAI2I,MAAM,KAAK50B,aAAa,CAACG,GAA7B,EAAkC;IAC9B,IAAA,OAAOgsB,IAAP,CAAA;IACH,GAAA;;IACDF,EAAAA,MAAM,IAAI,CAAV,CAAA;IACAA,EAAAA,MAAM,IAAI,CAAV,CAAA;IACA,EAAA,MAAM4I,SAAS,GAAGhV,WAAW,CAACoM,MAAM,GAAG,CAAV,CAAX,GAA2BpM,WAAW,CAACoM,MAAD,CAAX,IAAuB,CAApE,CAAA;IACAA,EAAAA,MAAM,IAAI,CAAV,CAAA;IACA,EAAM6I,MAAAA,OAAO,GAAGjV,WAAW,CAAC3R,KAAZ,CAAkB+d,MAAlB,EAA2BA,MAAM,GAAG4I,SAApC,CAAhB,CAAA;IACAzyB,EAAAA,OAAO,CAACrF,GAAR,CAAYgJ,UAAU,CAACyuB,IAAX,CAAgBM,OAAhB,CAAZ,CAAA,CAAA;IAEA,EAAA,IAAI50B,GAAG,GAAG6F,UAAU,CAACyuB,IAAX,CAAgBG,OAAhB,CAAV,CAAA;IACA,EAAA,IAAIxU,MAAM,GAAGoP,SAAS,CAACK,QAAV,CAAmB1vB,GAAnB,CAAb,CAAA;IAEAisB,EAAAA,IAAI,CAACc,UAAL,GAAkB9M,MAAM,CAAC4S,UAAP,CAAkBlvB,KAApC,CAAA;IACAsoB,EAAAA,IAAI,CAACe,WAAL,GAAmB/M,MAAM,CAAC4S,UAAP,CAAkB9uB,MAArC,CAAA;IAEAkoB,EAAAA,IAAI,CAACK,YAAL,GAAoBrM,MAAM,CAAC6S,YAAP,CAAoBnvB,KAAxC,CAAA;IACAsoB,EAAAA,IAAI,CAACM,aAAL,GAAqBtM,MAAM,CAAC6S,YAAP,CAAoB/uB,MAAzC,CAAA;IAEAkoB,EAAAA,IAAI,CAACyH,OAAL,GAAezT,MAAM,CAAC8P,cAAtB,CAAA;IACA9D,EAAAA,IAAI,CAAC0H,KAAL,GAAa1T,MAAM,CAACgQ,YAApB,CAAA;IACAhE,EAAAA,IAAI,CAAC2H,QAAL,GAAgB3T,MAAM,CAACqQ,SAAvB,CAAA;IACArE,EAAAA,IAAI,CAAC4H,YAAL,GAAoB5T,MAAM,CAACmQ,aAA3B,CAAA;IACAnE,EAAAA,IAAI,CAAC6H,QAAL,GAAgB7T,MAAM,CAAC2S,SAAvB,CAAA;IAEA,EAAA,OAAO3G,IAAP,CAAA;IACH;;ICzDc,MAAM4I,UAAN,SAAyBtnB,OAAzB,CAAiC;IAC5C1L,EAAAA,WAAW,CAACuB,MAAD,EAAS;IAChB,IAAA,KAAA,EAAA,CAAA;IACA,IAAKA,IAAAA,CAAAA,MAAL,GAAcA,MAAd,CAAA;IACA,IAAK0xB,IAAAA,CAAAA,KAAL,GAAa,IAAb,CAAA;IACA,IAAA,IAAA,CAAKC,WAAL,GAAmB,IAAIjsB,MAAM,CAAC8B,WAAX,EAAnB,CAAA;IACA,IAAKoqB,IAAAA,CAAAA,YAAL,GAAoB,IAApB,CAAA;IACA,IAAKrS,IAAAA,CAAAA,OAAL,GAAe,KAAf,CAAA;IACA,IAAKC,IAAAA,CAAAA,UAAL,GAAkB,KAAlB,CAAA;IACA,IAAKqS,IAAAA,CAAAA,UAAL,GAAkB,EAAlB,CAAA;IACA,IAAKC,IAAAA,CAAAA,QAAL,GAAgB,KAAhB,CAAA;IACA,IAAK/H,IAAAA,CAAAA,cAAL,GAAsB,CAAtB,CAAA;IACA,IAAKgI,IAAAA,CAAAA,eAAL,GAAuB,KAAvB,CAAA;IACA,IAAK1d,IAAAA,CAAAA,UAAL,GAAkB,EAAlB,CAAA;IACA,IAAK4I,IAAAA,CAAAA,QAAL,GAAgB,KAAhB,CAAA;IACA,IAAA,IAAA,CAAKjd,MAAL,CAAYzH,KAAZ,CAAkB4X,aAAlB,CAAgCoD,GAAhC,GAAsC7N,MAAM,CAACvC,GAAP,CAAWC,eAAX,CAA2B,IAAA,CAAKuuB,WAAhC,CAAtC,CAAA;IACA,IAAM,MAAA;IACFz8B,MAAAA,KADE;IAEFqU,MAAAA,MAAM,EAAE;IAACrK,QAAAA,KAAAA;IAAD,OAAA;IAFN,KAAA,GAGFc,MAHJ,CAAA;IAMAd,IAAAA,KAAK,CAAC,IAAA,CAAKyyB,WAAN,EAAmB,YAAnB,EAAiC,MAAM;IACxC,MAAKI,IAAAA,CAAAA,eAAL,GAAuB,IAAvB,CAAA;IACA,MAAA,IAAA,CAAK/xB,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAACgC,aAAxB,CAAA,CAAA;IACH,KAHI,CAAL,CAAA;IAKAoE,IAAAA,KAAK,CAAC,IAAA,CAAKyyB,WAAN,EAAmB,aAAnB,EAAkC,MAAM;IACzC,MAAA,IAAA,CAAK3xB,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAACiC,cAAxB,CAAA,CAAA;IACH,KAFI,CAAL,CAAA;IAIAiF,IAAAA,MAAM,CAAC9K,KAAP,CAAauE,GAAb,CAAiB,aAAjB,EAAgC,MAAhC,CAAA,CAAA;IACH,GAAA;;IAEDoB,EAAAA,OAAO,GAAG;IACN,IAAA,IAAA,CAAKm3B,IAAL,EAAA,CAAA;IACA,IAAK3d,IAAAA,CAAAA,UAAL,GAAkB,EAAlB,CAAA;IACA,IAAKsd,IAAAA,CAAAA,WAAL,GAAmB,IAAnB,CAAA;IACA,IAAKI,IAAAA,CAAAA,eAAL,GAAuB,KAAvB,CAAA;IACA,IAAKH,IAAAA,CAAAA,YAAL,GAAoB,IAApB,CAAA;IACA,IAAKrS,IAAAA,CAAAA,OAAL,GAAe,KAAf,CAAA;IACA,IAAKC,IAAAA,CAAAA,UAAL,GAAkB,KAAlB,CAAA;IACA,IAAKuK,IAAAA,CAAAA,cAAL,GAAsB,CAAtB,CAAA;IACA,IAAK8H,IAAAA,CAAAA,UAAL,GAAkB,IAAlB,CAAA;IACA,IAAKC,IAAAA,CAAAA,QAAL,GAAgB,KAAhB,CAAA;IACA,IAAA,IAAA,CAAKtoB,GAAL,EAAA,CAAA;IACA,IAAKxJ,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,aAAtB,EAAqC,SAArC,CAAA,CAAA;IACH,GAAA;;IAEQ,EAAA,IAAL4d,KAAK,GAAG;IACR,IAAO,OAAA,IAAA,CAAKsa,WAAL,CAAiBM,UAAxB,CAAA;IACH,GAAA;;IAEc,EAAA,IAAXC,WAAW,GAAG;IACd,IAAA,OAAO,IAAK7a,CAAAA,KAAL,KAAerZ,kBAAkB,CAAChC,IAAzC,CAAA;IACH,GAAA;;IAEgB,EAAA,IAAbm2B,aAAa,GAAG;IAChB,IAAA,OAAO,IAAK9a,CAAAA,KAAL,KAAerZ,kBAAkB,CAACE,MAAzC,CAAA;IACH,GAAA;;IAEe,EAAA,IAAZk0B,YAAY,GAAG;IACf,IAAA,OAAO,IAAK/a,CAAAA,KAAL,KAAerZ,kBAAkB,CAACC,KAAzC,CAAA;IACH,GAAA;;IAEW,EAAA,IAAR8qB,QAAQ,GAAG;IACX,IAAO,OAAA,IAAA,CAAK4I,WAAL,CAAiB5I,QAAxB,CAAA;IACH,GAAA;;IAEW,EAARA,IAAAA,QAAQ,CAACA,QAAD,EAAW;IACnB,IAAA,IAAA,CAAK4I,WAAL,CAAiB5I,QAAjB,GAA4BA,QAA5B,CAAA;IACH,GAAA;;IAEDzM,EAAAA,WAAW,CAACgB,OAAD,EAAUlM,EAAV,EAAcgO,QAAd,EAAwB;IAC/B,IAAMpf,MAAAA,MAAM,GAAG,IAAA,CAAKA,MAApB,CAAA;;IAEA,IAAI,IAAA,CAAC,IAAKuf,CAAAA,OAAV,EAAmB;IACf,MAAIH,IAAAA,QAAQ,IAAI9B,OAAO,CAAC,CAAD,CAAP,KAAe,CAA/B,EAAkC;IAC9B,QAAA,MAAM0C,UAAU,GAAI1C,OAAO,CAAC,CAAD,CAAP,GAAa,IAAjC,CAAA;IACAtd,QAAAA,MAAM,CAACzH,KAAP,CAAaoX,eAAb,CAA6B;IACzBC,UAAAA,WAAW,EAAEoQ,UAAAA;IADY,SAA7B,EAF8B;;IAO9B,QAAA,IAAIA,UAAU,KAAK1jB,cAAc,CAACE,IAAlC,EAAwC;IACpC,UAAA,IAAA,CAAK4M,IAAL,CAAU7N,YAAY,CAACK,yBAAvB,CAAA,CAAA;IACA,UAAA,OAAA;IACH,SAAA;;IACD,QAAA,IAAI,CAACoE,MAAM,CAACkY,MAAP,CAAc9P,WAAnB,EAAgC;IAC5BpI,UAAAA,MAAM,CAACkY,MAAP,CAAc9P,WAAd,GAA4B3E,GAAG,EAA/B,CAAA;IACH,SAAA;;IAED,QAAK4uB,IAAAA,CAAAA,0BAAL,CAAgC/U,OAAhC,EAAyClM,EAAzC,EAA6CgO,QAA7C,EAAuDY,UAAvD,CAAA,CAAA;;IACA,QAAKT,IAAAA,CAAAA,OAAL,GAAe,IAAf,CAAA;IACH,OAAA;IACJ,KAnBD,MAmBO;IACH,MAAA,IAAA,CAAK+S,YAAL,CAAkBhV,OAAlB,EAA2BlM,EAA3B,EAA+BgO,QAA/B,CAAA,CAAA;IACH,KAAA;IACJ,GAAA;;IAED5B,EAAAA,SAAS,GAAG;IACR,IAAA,MAAM/G,UAAU,GAAG,IAAA,CAAKpC,UAAL,CAAgBqC,KAAhB,EAAnB,CAAA;;IACA,IAAA,IAAID,UAAJ,EAAgB;IACZ,MAAA,IAAA,CAAK6b,YAAL,CAAkB7b,UAAU,CAAC6G,OAA7B,EAAsC7G,UAAU,CAACrF,EAAjD,EAAqDqF,UAAU,CAAC2I,QAAhE,CAAA,CAAA;IACH,KAAA;IACJ,GAAA;;IAGDiT,EAAAA,0BAA0B,CAAC/U,OAAD,EAAUlM,EAAV,EAAcgO,QAAd,EAAwBY,UAAxB,EAAoC;IAC1D,IAAA,IAAInV,IAAI,GAAGyS,OAAO,CAAC1S,KAAR,CAAc,CAAd,CAAX,CAAA;IACA,IAAIiS,IAAAA,MAAM,GAAG,EAAb,CAAA;;IAEA,IAAA,IAAImD,UAAU,KAAK1jB,cAAc,CAACC,IAAlC,EAAwC;IACpCsgB,MAAAA,MAAM,GAAGmT,kCAAkC,CAACnlB,IAAD,CAA3C,CAAA;IACH,KAFD,MAEO,IAAImV,UAAU,KAAK1jB,cAAc,CAACE,IAAlC,EAAwC;IAC3CqgB,MAAAA,MAAM,GAAGiU,mCAAmC,CAACjmB,IAAD,CAA5C,CAAA;IACH,KAAA;;IACD,IAAA,MAAM0nB,QAAQ,GAAG;IACbtJ,MAAAA,EAAE,EAAE,CADS;IACN;IACP5mB,MAAAA,IAAI,EAAE,OAFO;IAGbymB,MAAAA,SAAS,EAAE,IAHE;IAIbC,MAAAA,QAAQ,EAAE,CAJG;IAKbW,MAAAA,IAAI,EAAE7e,IALO;IAMb8e,MAAAA,UAAU,EAAE9M,MAAM,CAAC8M,UANN;IAObC,MAAAA,WAAW,EAAE/M,MAAM,CAAC+M,WAPP;IAQbP,MAAAA,SAAS,EAAExM,MAAM,CAACwM,SAAAA;IARL,KAAjB,CAT0D;;IAoB1D,IAAA,MAAMmJ,OAAO,GAAGrN,KAAG,CAACyD,mBAAJ,CAAwB2J,QAAxB,CAAhB,CAAA;IACA,IAAKb,IAAAA,CAAAA,KAAL,GAAa,IAAb,CAAA;IACA,IAAA,IAAA,CAAKe,YAAL,CAAkBD,OAAO,CAACr4B,MAA1B,CAAA,CAAA;IACA,IAAK4vB,IAAAA,CAAAA,cAAL,GAAsB,CAAtB,CAAA;IACA,IAAK8H,IAAAA,CAAAA,UAAL,GAAkB,IAAlB,CAAA;IACA,IAAKC,IAAAA,CAAAA,QAAL,GAAgB,KAAhB,CAAA;IACH,GAtI2C;;;IAyI5CQ,EAAAA,YAAY,CAAChV,OAAD,EAAUlM,EAAV,EAAcgO,QAAd,EAAwB;IAChC,IAAMpf,MAAAA,MAAM,GAAG,IAAA,CAAKA,MAApB,CAAA;IACA,IAAA,IAAIuc,WAAW,GAAGe,OAAO,CAAC1S,KAAR,CAAc,CAAd,CAAlB,CAAA;IACA,IAAA,IAAI8nB,KAAK,GAAGnW,WAAW,CAAC5D,UAAxB,CAAA;IACA,IAAI2R,IAAAA,GAAG,GAAG,CAAV,CAAA;IACA,IAAA,IAAIqI,GAAG,GAAGvhB,EAAV,CALgC;;IAOhC,IAAA,MAAMoC,MAAM,GAAGxT,MAAM,CAACzH,KAAP,CAAa4X,aAA5B,CAAA;;IAEA,IAAA,IAAIqD,MAAM,CAACof,QAAP,CAAgBpxB,MAAhB,GAAyB,CAA7B,EAAgC;IAC5B,MAAA,IAAA,CAAKqxB,YAAL,CAAkBrf,MAAM,CAACof,QAAP,CAAgBv4B,KAAhB,CAAsB,CAAtB,CAAlB,EAA4CmZ,MAAM,CAACof,QAAP,CAAgBE,GAAhB,CAAoB,CAApB,CAA5C,CAAA,CAAA;IACA,MAAKhB,IAAAA,CAAAA,QAAL,GAAgB,KAAhB,CAAA;IACH,KAAA;;IACD,IAAI,IAAA,IAAA,CAAK7U,QAAL,IAAiB0V,GAAG,GAAG,IAAKd,CAAAA,UAAL,CAAgBc,GAAtB,GAA4B,IAAjD,EAAuD;IACnD,MAAK1V,IAAAA,CAAAA,QAAL,GAAgB,KAAhB,CAAA;IACA,MAAK4U,IAAAA,CAAAA,UAAL,GAAkB,EAAlB,CAAA;IACH,KAHD,MAGO,IAAI,IAAA,CAAKA,UAAL,IAAmBc,GAAG,GAAG,IAAKd,CAAAA,UAAL,CAAgBc,GAA7C,EAAkD;IACrD;IACA,MAAA,IAAII,SAAS,GAAG,CAAA,GAAI,IAAKlB,CAAAA,UAAL,CAAgBxsB,IAApC,CAAA;IACA,MAAA,IAAI2tB,OAAO,GAAG,IAAIvwB,UAAJ,CAAeswB,SAAf,CAAd,CAAA;IACAC,MAAAA,OAAO,CAAC,CAAD,CAAP,GAAaD,SAAS,KAAK,EAAd,GAAmB,GAAhC,CAAA;IACAC,MAAAA,OAAO,CAAC,CAAD,CAAP,GAAaD,SAAS,KAAK,EAAd,GAAmB,GAAhC,CAAA;IACAC,MAAAA,OAAO,CAAC,CAAD,CAAP,GAAaD,SAAS,KAAK,CAAd,GAAkB,GAA/B,CAAA;IACAC,MAAAA,OAAO,CAAC,CAAD,CAAP,GAAaD,SAAS,GAAG,GAAzB,CAAA;IACAC,MAAAA,OAAO,CAACpU,GAAR,CAAYuG,KAAG,CAACC,KAAJ,CAAUU,IAAtB,EAA4B,CAA5B,CAAA,CAAA;IACAkN,MAAAA,OAAO,CAACpU,GAAR,CAAY,KAAKiT,UAAL,CAAgBhnB,IAA5B,EAAkC,CAAlC,CAAA,CAAA;IAEA,MAAKgnB,IAAAA,CAAAA,UAAL,CAAgB9I,QAAhB,GAA2B4J,GAAG,GAAG,IAAA,CAAKd,UAAL,CAAgBc,GAAjD,CAXqD;;IAarD,MAAA,IAAIM,OAAO,GAAG9N,KAAG,CAACgB,IAAJ,CAAS,IAAK0L,CAAAA,UAAd,EAA0B,IAAA,CAAKA,UAAL,CAAgBc,GAA1C,CAAd,CAAA;IACA,MAAA,IAAIxrB,MAAM,GAAG,IAAI1E,UAAJ,CAAewwB,OAAO,CAACta,UAAR,GAAqBqa,OAAO,CAACra,UAA5C,CAAb,CAAA;IACAxR,MAAAA,MAAM,CAACyX,GAAP,CAAWqU,OAAX,EAAoB,CAApB,CAAA,CAAA;IACA9rB,MAAAA,MAAM,CAACyX,GAAP,CAAWoU,OAAX,EAAoBC,OAAO,CAACta,UAA5B,CAAA,CAhBqD;;IAkBrD,MAAA,IAAA,CAAK8Z,YAAL,CAAkBtrB,MAAM,CAAChN,MAAzB,CAAA,CAAA;IACA6F,MAAAA,MAAM,CAAC8b,YAAP,EAAA,CAAA;IACA9b,MAAAA,MAAM,CAAC+b,WAAP,CAAmB;IAAC7U,QAAAA,GAAG,EAAE,IAAN;IAAYkK,QAAAA,EAAE,EAAEA,EAAhB;IAAoB4K,QAAAA,GAAG,EAAEhc,MAAM,CAACiY,KAAP,CAAagE,KAAAA;IAAtC,OAAnB,CAAA,CAAA;;IACA,MAAA,IAAI,CAACjc,MAAM,CAACkY,MAAP,CAAc7P,UAAnB,EAA+B;IAC3BrI,QAAAA,MAAM,CAACkY,MAAP,CAAc7P,UAAd,GAA2B5E,GAAG,EAA9B,CAAA;IACAzD,QAAAA,MAAM,CAACkc,uBAAP,EAAA,CAAA;IACH,OAAA;IACJ,KAzBM,MAyBA;IACHlc,MAAAA,MAAM,CAAC9K,KAAP,CAAauE,GAAb,CAAiB,aAAjB,EAAgC,sCAAhC,CAAA,CAAA;IACA,MAAKq4B,IAAAA,CAAAA,QAAL,GAAgB,KAAhB,CAAA;IACA,MAAKD,IAAAA,CAAAA,UAAL,GAAkB,EAAlB,CAAA;IACH,KAAA;;IAED,IAAA,IAAA,CAAKA,UAAL,CAAgB5I,EAAhB,GAAqB,CAArB,CAAA;IACA,IAAA,IAAA,CAAK4I,UAAL,CAAgB9H,cAAhB,GAAiC,EAAE,KAAKA,cAAxC,CAAA;IACA,IAAA,IAAA,CAAK8H,UAAL,CAAgBxsB,IAAhB,GAAuBqtB,KAAvB,CAAA;IACA,IAAA,IAAA,CAAKb,UAAL,CAAgBc,GAAhB,GAAsBA,GAAtB,CAAA;IACA,IAAA,IAAA,CAAKd,UAAL,CAAgBvH,GAAhB,GAAsBA,GAAtB,CAAA;IACA,IAAA,IAAA,CAAKuH,UAAL,CAAgBqB,UAAhB,GAA6B9T,QAA7B,CAAA;IACA,IAAA,IAAA,CAAKyS,UAAL,CAAgBhnB,IAAhB,GAAuB0R,WAAvB,CArDgC;;IAuDhC,IAAKsV,IAAAA,CAAAA,UAAL,CAAgB7H,KAAhB,GAAwB;IACpBC,MAAAA,SAAS,EAAE,CADS;IAEpBC,MAAAA,SAAS,EAAE9K,QAAQ,GAAG,CAAH,GAAO,CAFN;IAGpB+K,MAAAA,YAAY,EAAE/K,QAAQ,GAAG,CAAH,GAAO,CAHT;IAIpBgL,MAAAA,aAAa,EAAE,CAJK;IAKpBG,MAAAA,SAAS,EAAEnL,QAAQ,GAAG,CAAH,GAAO,CAAA;IALN,KAAxB,CAvDgC;;IAgEhC,IAAI,IAAA,CAAC,IAAK0S,CAAAA,QAAN,IAAkBte,MAAM,CAACof,QAAP,CAAgBpxB,MAAhB,KAA2B,CAAjD,EAAoD;IAChDxB,MAAAA,MAAM,CAAC9K,KAAP,CAAauE,GAAb,CAAiB,aAAjB,EAAgC,mBAAhC,CAAA,CAAA;IACA,MAAKq4B,IAAAA,CAAAA,QAAL,GAAgB,IAAhB,CAAA;IACAte,MAAAA,MAAM,CAAC2D,WAAP,GAAqB3D,MAAM,CAACof,QAAP,CAAgBE,GAAhB,CAAoB,CAApB,CAArB,CAAA;IACH,KAAA;;IAED,IAAA,IAAI,CAAC,IAAA,CAAKtT,UAAN,IAAoBhM,MAAM,CAACE,UAAP,GAAoB,CAAxC,IAA6CF,MAAM,CAACG,WAAP,GAAqB,CAAtE,EAAyE;IACrE3T,MAAAA,MAAM,CAAC9K,KAAP,CAAauE,GAAb,CAAiB,aAAjB,EAAiC,CAAmB+Z,iBAAAA,EAAAA,MAAM,CAACE,UAAW,CAAA,CAAA,EAAGF,MAAM,CAACG,WAAY,CAA5F,CAAA,CAAA,CAAA;IACA3T,MAAAA,MAAM,CAACzH,KAAP,CAAaoX,eAAb,CAA6B;IACzBpP,QAAAA,KAAK,EAAEiT,MAAM,CAACE,UADW;IAEzB/S,QAAAA,MAAM,EAAE6S,MAAM,CAACG,WAAAA;IAFU,OAA7B,CAAA,CAAA;IAIA3T,MAAAA,MAAM,CAACzH,KAAP,CAAa2Y,kBAAb,EAAA,CAAA;IACA,MAAKsO,IAAAA,CAAAA,UAAL,GAAkB,IAAlB,CAAA;IACH,KAAA;IACJ,GAAA;;IAEDiT,EAAAA,YAAY,CAACt4B,MAAD,EAAS;IACjB,IAAM,MAAA;IACFjF,MAAAA,KADE;IAEFqU,MAAAA,MAAM,EAAE;IAACrK,QAAAA,KAAAA;IAAD,OAAA;IAFN,KAAA,GAGF,KAAKc,MAHT,CAAA;;IAKA,IAAA,IAAI,IAAK4xB,CAAAA,YAAL,KAAsB,IAA1B,EAAgC;IAC5B,MAAKA,IAAAA,CAAAA,YAAL,GAAoB,IAAA,CAAKD,WAAL,CAAiBwB,eAAjB,CAAiCt1B,UAAU,CAACC,GAA5C,CAApB,CAAA;IACAoB,MAAAA,KAAK,CAAC,IAAK0yB,CAAAA,YAAN,EAAoB,OAApB,EAA8Bl4B,KAAD,IAAW;IACzC,QAAKsG,IAAAA,CAAAA,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAACkC,oBAAxB,EAA8CtB,KAA9C,CAAA,CADyC;IAG5C,OAHI,CAAL,CAAA;IAIH,KAAA;;IAED,IAAI,IAAA,IAAA,CAAKk4B,YAAL,CAAkBwB,QAAlB,KAA+B,KAA/B,IAAwC,IAAKlB,CAAAA,WAAjD,EAA8D;IAC1D,MAAA,IAAA,CAAKN,YAAL,CAAkBa,YAAlB,CAA+Bt4B,MAA/B,CAAA,CAAA;IACA,MAAA,OAAA;IACH,KAAA;;IAED,IAAI,IAAA,IAAA,CAAKg4B,aAAT,EAAwB;IACpB,MAAKnyB,IAAAA,CAAAA,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAACkC,oBAAxB,EAA8C,+DAA9C,CAAA,CAAA;IACH,KAFD,MAEO,IAAI,IAAKo3B,CAAAA,YAAT,EAAuB;IAC1B,MAAKpyB,IAAAA,CAAAA,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAACkC,oBAAxB,EAA8C,uBAA9C,CAAA,CAAA;IACH,KAFM,MAEA;IACH,MAAA,IAAI,KAAK42B,YAAL,CAAkBwB,QAAlB,KAA+B,IAAnC,EAAyC;IACrC,QAAKpzB,IAAAA,CAAAA,MAAL,CAAYoJ,IAAZ,CAAiBtQ,MAAM,CAACmC,mBAAxB,EADqC;IAGxC,OAAA;IACJ,KAAA;IACJ,GAAA;;IAED+2B,EAAAA,IAAI,GAAG;IACH,IAAI,IAAA,IAAA,CAAKE,WAAT,EAAsB;IAClB,MAAI,IAAA,IAAA,CAAKN,YAAT,EAAuB;IACnB,QAAKA,IAAAA,CAAAA,YAAL,CAAkB7Z,KAAlB,EAAA,CAAA;IACH,OAAA;IACJ,KAAA;;IACD,IAAA,IAAA,CAAKsb,WAAL,EAAA,CAAA;IACH,GAAA;;IAEDC,EAAAA,gBAAgB,CAACvc,IAAD,EAAO;IACnB,IAAA,MAAMxe,KAAK,GAAG,IAAKyH,CAAAA,MAAL,CAAYzH,KAA1B,CAAA;IACA,IAAA,MAAMib,MAAM,GAAGjb,KAAK,CAAC4X,aAArB,CAAA;IACA,IAAK8M,IAAAA,CAAAA,QAAL,GAAgBlG,IAAhB,CAAA;;IACA,IAAA,IAAIvD,MAAM,CAACof,QAAP,CAAgBpxB,MAAhB,GAAyB,CAA7B,EAAgC;IAC5B,MAAA,IAAIgS,MAAM,CAACof,QAAP,CAAgBE,GAAhB,CAAoB,CAApB,CAAA,GAAyBtf,MAAM,CAAC2D,WAAhC,GAA8C,CAAlD,EAAqD;IACjD3D,QAAAA,MAAM,CAAC2D,WAAP,GAAqB3D,MAAM,CAACof,QAAP,CAAgBE,GAAhB,CAAoB,CAApB,CAArB,CAAA;IACH,OAAA;IACJ,KAAA;IACJ,GAAA;;IAGDD,EAAAA,YAAY,CAACx4B,KAAD,EAAQy4B,GAAR,EAAa;IAErB,IAAI,IAAA,IAAA,CAAKZ,WAAL,IAAoB,IAAA,CAAKN,YAAL,CAAkBwB,QAAlB,KAA+B,KAAvD,EAA8D;IAC1D,MAAI,IAAA;IACA,QAAA,IAAA,CAAKxB,YAAL,CAAkB5nB,MAAlB,CAAyB3P,KAAzB,EAAgCy4B,GAAhC,CAAA,CAAA;IACH,OAFD,CAEE,OAAOjxB,CAAP,EAAU;IACR/C,QAAAA,OAAO,CAACpF,KAAR,CAAcmI,CAAd,CAAA,CAAA;IACH,OAAA;IACJ,KAAA;IACJ,GAAA;;IAEDwxB,EAAAA,WAAW,GAAG;IACV,IAAI,IAAA,IAAA,CAAKnB,WAAT,EAAsB;IAClB,MAAKP,IAAAA,CAAAA,WAAL,CAAiB0B,WAAjB,EAAA,CAAA;IACH,KAAA;IACJ,GAAA;;IA7R2C;;ICPhD;IAEA,MAAME,IAAI,GAAG,qyOAAb,CAAA;IACA,MAAMpO,GAAG,GAAG,o6JAAZ;;IAIA,MACIqO,MAAM,GAAG,MACL,OAAO3tB,SAAP,KAAqB,WAArB,IACAb,UAAU,CACN,CACI,EACA,GAAA,CAAC,oEAAoEyuB,IAApE,CACG5tB,SAAS,CAACC,SADb,CAAA,IAEI,CAAC,CAAD,EAAI,EAAJ,CAFL,EAEc,CAFd,CAFJ,EAMKxD,OANL,CAMa,WANb,EAM0B,KAN1B,CAAA,CAOKA,OAPL,CAOa,GAPb,EAOkB,GAPlB,CAAA,CAQKA,OARL,CAQa,GARb,EAQkB,EARlB,CADM,CAAV,GAUI,EAXJ,IAYA,CAACoD,MAAM,CAACguB,QAdhB;;;IAiBA,MAAMC,cAAc,GAAG,MAAM,UAAA,IAAc9tB,SAA3C,CAAA;;IAEe,MAAM+tB,OAAN,CAAc;IACzBn1B,EAAAA,WAAW,CAACuB,MAAD,EAAS;IAChB,IAAKA,IAAAA,CAAAA,MAAL,GAAcA,MAAd,CAAA;IACA,IAAKya,IAAAA,CAAAA,OAAL,GAAe,KAAf,CAAA;;IACA,IAAIkZ,IAAAA,cAAc,EAAlB,EAAsB;IAClB,MAAKE,IAAAA,CAAAA,SAAL,GAAiB,IAAjB,CAAA;;IACA,MAAMC,MAAAA,sBAAsB,GAAG,MAAM;IACjC,QAAI,IAAA,IAAA,CAAKD,SAAL,KAAmB,IAAnB,IAA2B7wB,QAAQ,CAACgiB,eAAT,KAA6B,SAA5D,EAAuE;IACnE,UAAA,IAAA,CAAK+O,MAAL,EAAA,CAAA;IACH,SAAA;IACJ,OAJD,CAAA;;IAKA/wB,MAAAA,QAAQ,CAACrD,gBAAT,CAA0B,kBAA1B,EAA8Cm0B,sBAA9C,CAAA,CAAA;IACA9wB,MAAAA,QAAQ,CAACrD,gBAAT,CAA0B,kBAA1B,EAA8Cm0B,sBAA9C,CAAA,CAAA;IACH,KATD,MASO,IAAIN,MAAM,EAAV,EAAc;IACjB,MAAKQ,IAAAA,CAAAA,YAAL,GAAoB,IAApB,CAAA;IACH,KAFM,MAEA;IACH;IACA,MAAA,IAAA,CAAKC,YAAL,GAAoBjxB,QAAQ,CAACC,aAAT,CAAuB,OAAvB,CAApB,CAAA;IAEA,MAAA,IAAA,CAAKgxB,YAAL,CAAkBpT,YAAlB,CAA+B,OAA/B,EAAwC,UAAxC,CAAA,CAAA;IACA,MAAA,IAAA,CAAKoT,YAAL,CAAkBpT,YAAlB,CAA+B,aAA/B,EAA8C,EAA9C,CAAA,CAAA;;IAEA,MAAA,IAAA,CAAKqT,iBAAL,CAAuB,IAAA,CAAKD,YAA5B,EAA0C,MAA1C,EAAkDV,IAAlD,CAAA,CAAA;;IACA,MAAA,IAAA,CAAKW,iBAAL,CAAuB,IAAA,CAAKD,YAA5B,EAA0C,KAA1C,EAAiD9O,GAAjD,CAAA,CAAA;;IAEA,MAAA,IAAA,CAAK8O,YAAL,CAAkBt0B,gBAAlB,CAAmC,gBAAnC,EAAqD,MAAM;IACvD,QAAA,IAAI,KAAKs0B,YAAL,CAAkBlL,QAAlB,IAA8B,CAAlC,EAAqC;IACjC;IACA,UAAA,IAAA,CAAKkL,YAAL,CAAkBpT,YAAlB,CAA+B,MAA/B,EAAuC,EAAvC,CAAA,CAAA;IACH,SAHD,MAGO;IACH;IACA,UAAA,IAAA,CAAKoT,YAAL,CAAkBt0B,gBAAlB,CAAmC,YAAnC,EAAiD,MAAM;IACnD,YAAA,IAAI,KAAKs0B,YAAL,CAAkB9c,WAAlB,GAAgC,GAApC,EAAyC;IACrC,cAAA,IAAA,CAAK8c,YAAL,CAAkB9c,WAAlB,GAAgC3W,IAAI,CAAC2zB,MAAL,EAAhC,CAAA;IACH,aAAA;IACJ,WAJD,CAAA,CAAA;IAKH,SAAA;IACJ,OAZD,CAAA,CAAA;IAaH,KAAA;IACJ,GAAA;;IAEDD,EAAAA,iBAAiB,CAAC1vB,OAAD,EAAUnC,IAAV,EAAgB+xB,OAAhB,EAAyB;IACtC,IAAA,IAAItf,MAAM,GAAG9R,QAAQ,CAACC,aAAT,CAAuB,QAAvB,CAAb,CAAA;IACA6R,IAAAA,MAAM,CAACvB,GAAP,GAAa6gB,OAAb,CAAA;IACAtf,IAAAA,MAAM,CAACzS,IAAP,GAAe,CAAA,MAAA,EAAQA,IAAK,CAA5B,CAAA,CAAA;IACAmC,IAAAA,OAAO,CAAC4L,WAAR,CAAoB0E,MAApB,CAAA,CAAA;IACH,GAAA;;IAEY,EAAA,IAATuf,SAAS,GAAG;IACZ,IAAA,OAAO,KAAK5Z,OAAZ,CAAA;IACH,GAAA;;IAEDsZ,EAAAA,MAAM,GAAG;IACL,IAAA,MAAM7+B,KAAK,GAAG,IAAK8K,CAAAA,MAAL,CAAY9K,KAA1B,CAAA;;IACA,IAAIy+B,IAAAA,cAAc,EAAlB,EAAsB;IAClB,MAAO9tB,OAAAA,SAAS,CAACyuB,QAAV,CACF5qB,OADE,CACM,QADN,CAEFC,CAAAA,IAFE,CAEI2qB,QAAD,IAAc;IAChB,QAAKT,IAAAA,CAAAA,SAAL,GAAiBS,QAAjB,CAAA;IACA,QAAK7Z,IAAAA,CAAAA,OAAL,GAAe,IAAf,CAAA;IACAvlB,QAAAA,KAAK,CAACuE,GAAN,CAAU,UAAV,EAAsB,mBAAtB,CAAA,CAAA;;IACA,QAAA,IAAA,CAAKo6B,SAAL,CAAel0B,gBAAf,CAAgC,SAAhC,EAA2C,MAAM;IAC7C;IACA;IACA;IACAzK,UAAAA,KAAK,CAACuE,GAAN,CAAU,UAAV,EAAsB,qBAAtB,CAAA,CAAA;IACH,SALD,CAAA,CAAA;IAMH,OAZE,CAaFmQ,CAAAA,KAbE,CAaK2qB,GAAD,IAAS;IACZ,QAAK9Z,IAAAA,CAAAA,OAAL,GAAe,KAAf,CAAA;IACAvlB,QAAAA,KAAK,CAACwE,KAAN,CAAY,UAAZ,EAAyB,CAAA,EAAE66B,GAAG,CAAC51B,IAAK,CAAA,EAAA,EAAI41B,GAAG,CAAClb,OAAQ,CAApD,CAAA,CAAA,CAAA;IACA,QAAA,MAAMkb,GAAN,CAAA;IACH,OAjBE,CAAP,CAAA;IAkBH,KAnBD,MAmBO,IAAIf,MAAM,EAAV,EAAc;IACjB,MAAA,IAAA,CAAKgB,OAAL,EAAA,CAAA;IACA,MAAA,IAAA,CAAKR,YAAL,GAAoBtuB,MAAM,CAACoV,WAAP,CAAmB,MAAM;IACzC,QAAA,IAAI,CAAC9X,QAAQ,CAACyxB,MAAd,EAAsB;IAClB/uB,UAAAA,MAAM,CAACgvB,QAAP,CAAgBxxB,IAAhB,GAAuBwC,MAAM,CAACgvB,QAAP,CAAgBxxB,IAAhB,CAAqBhB,KAArB,CAA2B,GAA3B,CAAA,CAAgC,CAAhC,CAAvB,CAAA;IACAwD,UAAAA,MAAM,CAACpC,UAAP,CAAkBoC,MAAM,CAACssB,IAAzB,EAA+B,CAA/B,CAAA,CAAA;IACH,SAAA;IACJ,OALmB,EAKjB,KALiB,CAApB,CAAA;IAMA,MAAKvX,IAAAA,CAAAA,OAAL,GAAe,IAAf,CAAA;IACA,MAAOka,OAAAA,OAAO,CAACC,OAAR,EAAP,CAAA;IACH,KAVM,MAUA;IACH,MAAA,IAAIC,WAAW,GAAG,IAAA,CAAKZ,YAAL,CAAkB79B,IAAlB,EAAlB,CAAA;IACA,MAAA,OAAOy+B,WAAW,CACblrB,IADE,CACIyO,GAAD,IAAS;IACX,QAAKqC,IAAAA,CAAAA,OAAL,GAAe,IAAf,CAAA;IACA,QAAA,OAAOrC,GAAP,CAAA;IACH,OAJE,CAKFxO,CAAAA,KALE,CAKK2qB,GAAD,IAAS;IACZ,QAAK9Z,IAAAA,CAAAA,OAAL,GAAe,KAAf,CAAA;IACA,QAAA,MAAM8Z,GAAN,CAAA;IACH,OARE,CAAP,CAAA;IASH,KAAA;IACJ,GAAA;;IAEDC,EAAAA,OAAO,GAAG;IACN,IAAA,MAAMt/B,KAAK,GAAG,IAAK8K,CAAAA,MAAL,CAAY9K,KAA1B,CAAA;;IACA,IAAIy+B,IAAAA,cAAc,EAAlB,EAAsB;IAClB,MAAI,IAAA,IAAA,CAAKE,SAAT,EAAoB;IAChB,QAAKA,IAAAA,CAAAA,SAAL,CAAeiB,OAAf,EAAA,CAAA;IACH,OAAA;;IACD,MAAKjB,IAAAA,CAAAA,SAAL,GAAiB,IAAjB,CAAA;IACH,KALD,MAKO,IAAIL,MAAM,EAAV,EAAc;IACjB,MAAI,IAAA,IAAA,CAAKQ,YAAT,EAAuB;IACnB9+B,QAAAA,KAAK,CAAC6J,IAAN,CAAW,UAAX,EAAuB,6CAAvB,CAAA,CAAA;IAEA2G,QAAAA,MAAM,CAACwV,aAAP,CAAqB,KAAK8Y,YAA1B,CAAA,CAAA;IACA,QAAKA,IAAAA,CAAAA,YAAL,GAAoB,IAApB,CAAA;IACH,OAAA;IACJ,KAPM,MAOA;IACH,MAAKC,IAAAA,CAAAA,YAAL,CAAkB/6B,KAAlB,EAAA,CAAA;IACH,KAAA;;IACD,IAAKuhB,IAAAA,CAAAA,OAAL,GAAe,KAAf,CAAA;IACH,GAAA;;IAnHwB;;ICId,MAAMsa,MAAN,SAAqB5qB,OAArB,CAA6B;IACxC1L,EAAAA,WAAW,CAACu2B,SAAD,EAAYpf,OAAZ,EAAqB;IAC5B,IAAA,KAAA,EAAA,CAAA;IACA,IAAKvV,IAAAA,CAAAA,UAAL,GAAkB20B,SAAlB,CAAA;IACA,IAAKp2B,IAAAA,CAAAA,IAAL,GAAYqB,MAAM,CAACg1B,MAAP,CAAc,EAAd,EAAkBpgC,sBAAlB,EAA0C+gB,OAA1C,CAAZ,CAAA;IACA,IAAA,IAAA,CAAK1gB,KAAL,GAAa,IAAIsJ,KAAJ,CAAU,IAAV,CAAb,CAAA;;IAGA,IAAA,IAAI,IAAKI,CAAAA,IAAL,CAAU1H,MAAd,EAAsB;IAClB,MAAA,IAAA,CAAK0H,IAAL,CAAU1H,MAAV,GAAmB+O,UAAU,EAA7B,CAAA;IACH,KAAA;;IAED,IAAA,IAAI,IAAKrH,CAAAA,IAAL,CAAUxH,MAAd,EAAsB;IAClB,MAAA,IAAA,CAAKwH,IAAL,CAAUxH,MAAV,GAAmBmQ,UAAU,EAA7B,CAAA;IACH,KAb2B;;;IAgB5B,IAAA,IAAI,IAAK3I,CAAAA,IAAL,CAAUxH,MAAd,EAAsB;IAClB,MAAA,IAAI,IAAKwH,CAAAA,IAAL,CAAU1H,MAAd,EAAsB;IAClB,QAAA,IAAA,CAAKhC,KAAL,CAAWuE,GAAX,CAAe,QAAf,EAAyB,wBAAzB,CAAA,CAAA;IACH,OAAA;;IAED,MAAA,IAAI,CAAC,IAAA,CAAKmF,IAAL,CAAU9H,gBAAf,EAAiC;IAC7B,QAAA,IAAA,CAAK5B,KAAL,CAAWuE,GAAX,CAAe,QAAf,EAAyB,kCAAzB,CAAA,CAAA;IACH,OAAA;;IAED,MAAA,IAAA,CAAKmF,IAAL,CAAU1H,MAAV,GAAmB,KAAnB,CAAA;IACA,MAAA,IAAA,CAAK0H,IAAL,CAAU9H,gBAAV,GAA6B,IAA7B,CAAA;IACH,KAXD,MAWO,IAAI,IAAA,CAAK8H,IAAL,CAAU1H,MAAd,EAAsB,CAE5B;;IAGD,IAAA,IAAI,CAAC,IAAA,CAAK0H,IAAL,CAAU9H,gBAAf,EAAiC;IAC7B,MAAI,IAAA,CAACoK,kBAAkB,EAAvB,EAA2B;IACvB,QAAA,IAAA,CAAKtC,IAAL,CAAU9H,gBAAV,GAA6B,IAA7B,CAAA;IACA,QAAA,IAAA,CAAK8H,IAAL,CAAUvH,YAAV,GAAyB,KAAzB,CAAA;IACH,OAHD,MAGO;IACH,QAAA,IAAA,CAAKuH,IAAL,CAAUvH,YAAV,GAAyB,IAAzB,CAAA;IACH,OAAA;IACJ,KAAA;;IAED,IAAA,IAAI,CAAC,IAAA,CAAKuH,IAAL,CAAU7I,QAAf,EAAyB;IACrB,MAAA,IAAA,CAAK6I,IAAL,CAAU3I,WAAV,CAAsBI,KAAtB,GAA8B,KAA9B,CAAA;IACH,KAAA;;IAED,IAAKuI,IAAAA,CAAAA,IAAL,CAAUpI,UAAV,GAAuB,KAAK0+B,WAAL,EAAvB,CA7C4B;;IA+C5B,IAAKC,IAAAA,CAAAA,QAAL,GAAgB,KAAhB,CAAA;IACA,IAAKC,IAAAA,CAAAA,QAAL,GAAgB,KAAhB,CAAA;IACA,IAAA,IAAA,CAAKC,UAAL,GAAkB,KAAlB,CAjD4B;;IAoD5B,IAAKC,IAAAA,CAAAA,kBAAL,GAA0B,IAA1B,CAAA;IACA,IAAA,IAAA,CAAKC,oBAAL,GAA4B,IAA5B,CArD4B;;IAwD5B,IAAKC,IAAAA,CAAAA,aAAL,GAAqB,IAArB,CAAA;IACA,IAAKvQ,IAAAA,CAAAA,0BAAL,GAAkC,KAAlC,CAAA;IACA,IAAA,IAAA,CAAKwQ,MAAL,GAAc;IACVzZ,MAAAA,GAAG,EAAE,CADK;IACF;IACR9U,MAAAA,GAAG,EAAE,CAFK;IAEF;IACRqX,MAAAA,IAAI,EAAE,CAHI;IAGD;IACTC,MAAAA,IAAI,EAAE,CAJI;IAID;IACTpN,MAAAA,EAAE,EAAE,CALM;;IAAA,KAAd,CA1D4B;;IAmE5B,IAAA,IAAA,CAAK8G,MAAL,GAAcpQ,aAAa,EAA3B,CAnE4B;;IAsE5B,IAAK4tB,IAAAA,CAAAA,eAAL,GAAuB,CAAvB,CAAA;IACA,IAAKC,IAAAA,CAAAA,eAAL,GAAuB,CAAvB,CAAA;IAEAnR,IAAAA,UAAQ,CAAC,IAAD,CAAR,CAAA;IAEA,IAAA,IAAA,CAAKjb,MAAL,GAAc,IAAIvK,MAAJ,CAAW,IAAX,CAAd,CAAA;IACA,IAAA,IAAA,CAAKzG,KAAL,GAAa,IAAIyb,KAAJ,CAAU,IAAV,CAAb,CAAA;;IAEA,IAAA,IAAI,IAAKpV,CAAAA,IAAL,CAAU7I,QAAd,EAAwB;IACpB,MAAA,IAAA,CAAKM,KAAL,GAAa,IAAIohB,KAAJ,CAAU,IAAV,CAAb,CAAA;IACH,KAAA;;IACD,IAAA,IAAA,CAAKkD,QAAL,GAAgB,IAAIQ,QAAJ,CAAa,IAAb,CAAhB,CAAA;;IAEA,IAAA,IAAI,CAAC,IAAA,CAAKya,kBAAL,EAAL,EAAgC;IAC5B,MAAA,IAAA,CAAKva,aAAL,GAAqB,IAAID,aAAJ,CAAkB,IAAlB,CAArB,CAAA;IACH,KAFD,MAEO;IACH,MAAK3R,IAAAA,CAAAA,MAAL,GAAc,IAAd,CAAA;IACH,KAAA;;IAED,IAAK2Q,IAAAA,CAAAA,MAAL,GAAc,IAAd,CAAA;IACA,IAAKnC,IAAAA,CAAAA,KAAL,GAAa,IAAb,CAAA;;IAEA,IAAA,IAAI,IAAKrZ,CAAAA,IAAL,CAAU1H,MAAd,EAAsB;IAClB,MAAA,IAAA,CAAKwmB,gBAAL,GAAwB,IAAI4B,gBAAJ,CAAqB,IAArB,CAAxB,CAAA;IACH,KAAA;;IAED,IAAA,IAAI,IAAK1gB,CAAAA,IAAL,CAAUxH,MAAd,EAAsB;IAClB,MAAA,IAAA,CAAKumB,UAAL,GAAkB,IAAI8T,UAAJ,CAAe,IAAf,CAAlB,CAAA;IACH,KAlG2B;;;IAqG5B,IAAA,IAAA,CAAKhR,OAAL,GAAe,IAAI4D,OAAJ,CAAY,IAAZ,CAAf,CAAA;IAEA,IAAA,IAAA,CAAKxuB,YAAL,GAAoB,IAAI+9B,OAAJ,CAAY,IAAZ,CAApB,CAAA;IAGArqB,IAAAA,QAAM,CAAC,IAAD,CAAN,CAAA;IACAgb,IAAAA,QAAQ,CAAC,IAAD,CAAR,CAAA;;IAGA,IAAA,IAAI,IAAK3lB,CAAAA,IAAL,CAAU1H,MAAd,EAAsB;IAClB,MAAA,IAAA,CAAKhC,KAAL,CAAWuE,GAAX,CAAe,QAAf,EAAyB,SAAzB,CAAA,CAAA;IACH,KAAA;;IAED,IAAA,IAAI,IAAKmF,CAAAA,IAAL,CAAUxH,MAAd,EAAsB;IAClB,MAAA,IAAA,CAAKlC,KAAL,CAAWuE,GAAX,CAAe,QAAf,EAAyB,SAAzB,CAAA,CAAA;IACH,KAAA;;IAED,IAAA,IAAI,IAAKmF,CAAAA,IAAL,CAAUvH,YAAd,EAA4B;IACxB,MAAA,IAAA,CAAKnC,KAAL,CAAWuE,GAAX,CAAe,QAAf,EAAyB,eAAzB,CAAA,CAAA;IACH,KAAA;;IAED,IAAA,IAAA,CAAKvE,KAAL,CAAWuE,GAAX,CAAe,gBAAf,EAAiC,KAAKmF,IAAtC,CAAA,CAAA;IACH,GAAA;;IAGD/D,EAAAA,OAAO,GAAG;IACN,IAAKs6B,IAAAA,CAAAA,QAAL,GAAgB,KAAhB,CAAA;IACA,IAAKC,IAAAA,CAAAA,QAAL,GAAgB,KAAhB,CAAA;IACA,IAAKC,IAAAA,CAAAA,UAAL,GAAkB,KAAlB,CAAA;IAEA,IAAKnd,IAAAA,CAAAA,MAAL,GAAcpQ,aAAa,EAA3B,CAAA;;IAEA,IAAI,IAAA,IAAA,CAAKuT,aAAT,EAAwB;IACpB,MAAKA,IAAAA,CAAAA,aAAL,CAAmBxgB,OAAnB,EAAA,CAAA;IACA,MAAKwgB,IAAAA,CAAAA,aAAL,GAAqB,IAArB,CAAA;IACH,KAAA;;IACD,IAAI,IAAA,IAAA,CAAK9iB,KAAT,EAAgB;IACZ,MAAKA,IAAAA,CAAAA,KAAL,CAAWsC,OAAX,EAAA,CAAA;IACA,MAAKtC,IAAAA,CAAAA,KAAL,GAAa,IAAb,CAAA;IACH,KAAA;;IAED,IAAI,IAAA,IAAA,CAAKlC,KAAT,EAAgB;IACZ,MAAKA,IAAAA,CAAAA,KAAL,CAAWwE,OAAX,EAAA,CAAA;IACA,MAAKxE,IAAAA,CAAAA,KAAL,GAAa,IAAb,CAAA;IACH,KAAA;;IAED,IAAI,IAAA,IAAA,CAAK+jB,MAAT,EAAiB;IACb,MAAKA,IAAAA,CAAAA,MAAL,CAAYvf,OAAZ,EAAA,CAAA;IACA,MAAKuf,IAAAA,CAAAA,MAAL,GAAc,IAAd,CAAA;IACH,KAAA;;IAED,IAAI,IAAA,IAAA,CAAKO,QAAT,EAAmB;IACf,MAAKA,IAAAA,CAAAA,QAAL,CAAc9f,OAAd,EAAA,CAAA;IACA,MAAK8f,IAAAA,CAAAA,QAAL,GAAgB,IAAhB,CAAA;IACH,KAAA;;IAED,IAAI,IAAA,IAAA,CAAK8F,OAAT,EAAkB;IACd,MAAKA,IAAAA,CAAAA,OAAL,CAAa5lB,OAAb,EAAA,CAAA;IACA,MAAK4lB,IAAAA,CAAAA,OAAL,GAAe,IAAf,CAAA;IACH,KAAA;;IAED,IAAI,IAAA,IAAA,CAAK/C,gBAAT,EAA2B;IACvB,MAAKA,IAAAA,CAAAA,gBAAL,CAAsB7iB,OAAtB,EAAA,CAAA;IACA,MAAK6iB,IAAAA,CAAAA,gBAAL,GAAwB,IAAxB,CAAA;IACH,KAAA;;IAED,IAAI,IAAA,IAAA,CAAKC,UAAT,EAAqB;IACjB,MAAKA,IAAAA,CAAAA,UAAL,CAAgB9iB,OAAhB,EAAA,CAAA;IACA,MAAK8iB,IAAAA,CAAAA,UAAL,GAAkB,IAAlB,CAAA;IACH,KAAA;;IAED,IAAI,IAAA,IAAA,CAAK1F,KAAT,EAAgB;IACZ,MAAKA,IAAAA,CAAAA,KAAL,CAAWpd,OAAX,EAAA,CAAA;IACA,MAAKod,IAAAA,CAAAA,KAAL,GAAa,IAAb,CAAA;IACH,KAAA;;IAGD,IAAI,IAAA,IAAA,CAAK1O,MAAT,EAAiB;IACb,MAAKA,IAAAA,CAAAA,MAAL,CAAY1O,OAAZ,EAAA,CAAA;IACA,MAAK0O,IAAAA,CAAAA,MAAL,GAAc,IAAd,CAAA;IACH,KAAA;;IAED,IAAA,IAAA,CAAKssB,sBAAL,EAAA,CAAA;IACA,IAAKC,IAAAA,CAAAA,wBAAL,GA1DM;;IA4DN,IAAA,IAAA,CAAKC,eAAL,EAAA,CAAA;IACA,IAAA,IAAA,CAAKlgC,YAAL,GAAoB,IAApB,CA7DM;;IA+DN,IAAA,IAAA,CAAKmgC,UAAL,EAAA,CAAA;IACA,IAAKL,IAAAA,CAAAA,eAAL,GAAuB,CAAvB,CAAA;IACA,IAAA,IAAA,CAAKD,eAAL,GAAuB,CAAvB,CAjEM;;IAoEN,IAAA,IAAA,CAAKtsB,IAAL,CAAU,SAAV,CAAA,CApEM;;IAsEN,IAAA,IAAA,CAAKI,GAAL,EAAA,CAAA;IAEA,IAAA,IAAA,CAAKtU,KAAL,CAAWuE,GAAX,CAAe,MAAf,EAAuB,aAAvB,CAAA,CAAA;IACH,GAAA;;IAEa,EAAVvD,IAAAA,UAAU,CAACuO,KAAD,EAAQ;IAClB,IAAIkB,IAAAA,QAAQ,EAAZ,EAAgB;IACZ,MAAA,IAAA,CAAKyD,IAAL,CAAUtQ,MAAM,CAACC,aAAjB,EAAgC0L,KAAhC,CAAA,CAAA;IACAnB,MAAAA,UAAU,CAAC,MAAM;IACb,QAAA,IAAA,CAAK2yB,YAAL,CAAkB;IACdp/B,UAAAA,MAAM,EAAE4N,KAAK,GAAG,GAAH,GAAS,CAAA;IADR,SAAlB,CAAA,CAAA;IAGA,QAAA,IAAA,CAAKlK,MAAL,EAAA,CAAA;IACH,OALS,EAKP,EALO,CAAV,CAAA;IAMH,KARD,MAQO;IACH,MAAA,IAAA,CAAK6O,IAAL,CAAUtQ,MAAM,CAAC5C,UAAjB,EAA6BuO,KAA7B,CAAA,CAAA;IACH,KAAA;IACJ,GAAA;;IAEa,EAAA,IAAVvO,UAAU,GAAG;IACb,IAAO0Q,OAAAA,YAAY,EAAM,IAAA,IAAA,CAAK7N,aAA9B,CAAA;IACH,GAAA;;IAEgB,EAAbA,IAAAA,aAAa,CAAC0L,KAAD,EAAQ;IACrB,IAAA,IAAA,CAAK2E,IAAL,CAAUtQ,MAAM,CAACC,aAAjB,EAAgC0L,KAAhC,CAAA,CAAA;IACH,GAAA;;IAEgB,EAAA,IAAb1L,aAAa,GAAG;IAChB,IAAO,OAAA,IAAA,CAAKsH,UAAL,CAAgByJ,SAAhB,CAA0BosB,QAA1B,CAAmC,0BAAnC,CAAP,CAAA;IACH,GAAA;;IAES,EAANzsB,IAAAA,MAAM,CAAChF,KAAD,EAAQ;IACd,IAAK4wB,IAAAA,CAAAA,UAAL,GAAkB5wB,KAAlB,CAAA;IACH,GAAA;;IAES,EAAA,IAANgF,MAAM,GAAG;IACT,IAAA,OAAO,KAAK4rB,UAAZ,CAAA;IACH,GA1OuC;;;IA6O7B,EAAPp8B,IAAAA,OAAO,CAACwL,KAAD,EAAQ;IAEf,IAAA,IAAIA,KAAJ,EAAW;IACP;IACA,MAAKpL,IAAAA,CAAAA,OAAL,GAAe,KAAf,CAAA;IACH,KAAA;;IAED,IAAA,IAAI,IAAKJ,CAAAA,OAAL,KAAiBwL,KAArB,EAA4B;IACxB,MAAK2wB,IAAAA,CAAAA,QAAL,GAAgB3wB,KAAhB,CAAA;IACA,MAAA,IAAA,CAAK2E,IAAL,CAAUtQ,MAAM,CAACG,OAAjB,EAA0BwL,KAA1B,CAAA,CAAA;IACA,MAAA,IAAA,CAAK2E,IAAL,CAAUtQ,MAAM,CAAC8B,YAAjB,EAA+B,KAAKub,MAApC,CAAA,CAAA;;IAEA,MAAA,IAAI1R,KAAJ,EAAW;IACP,QAAA,IAAA,CAAK2E,IAAL,CAAUtQ,MAAM,CAAC1C,IAAjB,CAAA,CAAA;IACH,OAFD,MAEO;IACH,QAAA,IAAA,CAAKgT,IAAL,CAAUtQ,MAAM,CAACI,KAAjB,CAAA,CAAA;IACH,OAAA;IACJ,KAAA;IAEJ,GAAA;;IAEU,EAAA,IAAPD,OAAO,GAAG;IACV,IAAA,OAAO,KAAKm8B,QAAZ,CAAA;IACH,GAAA;;IAES,EAAA,IAANjf,MAAM,GAAG;IACT,IAAQ,OAAA,IAAA,CAAK9f,KAAL,IAAc,IAAA,CAAKA,KAAL,CAAW8f,MAA1B,IAAqC,CAA5C,CAAA;IACH,GAAA;;IAES,EAANA,IAAAA,MAAM,CAAC1R,KAAD,EAAQ;IACd,IAAKpO,IAAAA,CAAAA,KAAL,IAAc,IAAKA,CAAAA,KAAL,CAAW2gB,SAAX,CAAqBvS,KAArB,CAAd,CAAA;IACH,GAAA;;IAEU,EAAPpL,IAAAA,OAAO,CAACoL,KAAD,EAAQ;IACf,IAAA,IAAI,IAAKpL,CAAAA,OAAL,KAAiBoL,KAArB,EAA4B;IACxB,MAAK0wB,IAAAA,CAAAA,QAAL,GAAgB1wB,KAAhB,CAAA;IACA,MAAA,IAAA,CAAK2E,IAAL,CAAUtQ,MAAM,CAACO,OAAjB,EAA0B,KAAK87B,QAA/B,CAAA,CAAA;IACH,KAAA;IACJ,GAAA;;IAEU,EAAA,IAAP97B,OAAO,GAAG;IACV,IAAA,OAAO,KAAK87B,QAAZ,CAAA;IACH,GAAA;;IAEY,EAATr7B,IAAAA,SAAS,CAAC2K,KAAD,EAAQ;IACjB,IAAA,IAAIA,KAAJ,EAAW;IACP,MAAI,IAAA,IAAA,CAAKxL,OAAT,EAAkB;IACd,QAAK0hB,IAAAA,CAAAA,QAAL,CAAcZ,WAAd,EAAA,CAAA;IACH,OAAA;IACJ,KAJD,MAIO;IACH,MAAKY,IAAAA,CAAAA,QAAL,CAAcI,iBAAd,EAAA,CAAA;IACH,KAAA;IACJ,GAAA;;IAEY,EAAA,IAATjhB,SAAS,GAAG;IACZ,IAAA,OAAO,KAAK6gB,QAAL,IAAiB,IAAKA,CAAAA,QAAL,CAAc7gB,SAAtC,CAAA;IACH,GAAA;;IAEiB,EAAd6c,IAAAA,cAAc,CAAClS,KAAD,EAAQ;IACtB,IAAIA,IAAAA,KAAK,KAAK,IAAd,EAAoB;IAChB,MAAA,OAAA;IACH,KAAA;;IACD,IAAKkxB,IAAAA,CAAAA,eAAL,GAAuBlxB,KAAvB,CAAA;IACH,GA5SuC;;;IA+StB,EAAA,IAAdkS,cAAc,GAAG;IACjB,IAAA,OAAO,KAAKgf,eAAZ,CAAA;IACH,GAjTuC;;;IAoTtB,EAAdhtB,IAAAA,cAAc,CAAClE,KAAD,EAAQ;IACtB,IAAIA,IAAAA,KAAK,KAAK,IAAd,EAAoB;IAChB,MAAA,OAAA;IACH,KAAA;;IACD,IAAA,IAAA,CAAKixB,eAAL,GAAuBjxB,KAAvB,CAJsB;;IAMtB,IAAI,IAAA,CAAC,IAAK7F,CAAAA,IAAL,CAAU1H,MAAX,IAAqB,CAAC,IAAK0H,CAAAA,IAAL,CAAUxH,MAApC,EAA4C;IACxC,MAAA,IAAI,IAAKuf,CAAAA,cAAL,IAAuB,IAAA,CAAKhO,cAAhC,EAAgD;IAC5C,QAAKtS,IAAAA,CAAAA,KAAL,IAAc,IAAA,CAAKA,KAAL,CAAW+S,IAAX,CAAgBtQ,MAAM,CAACsC,cAAvB,EAAuC;IACjDub,UAAAA,cAAc,EAAE,IAAA,CAAKA,cAD4B;IAEjDhO,UAAAA,cAAc,EAAE,IAAA,CAAKA,cAF4B;IAGjD8M,UAAAA,IAAI,EAAE,IAAKkB,CAAAA,cAAL,GAAsB,IAAKhO,CAAAA,cAAAA;IAHgB,SAAvC,CAAd,CAAA;IAKH,OAAA;IACJ,KAAA;IACJ,GAnUuC;;;IAsUtB,EAAA,IAAdA,cAAc,GAAG;IACjB,IAAA,OAAO,KAAK+sB,eAAZ,CAAA;IACH,GAAA;IAGD;IACJ;IACA;IACA;;;IACIO,EAAAA,YAAY,CAACrgB,OAAD,EAAU;IAClB,IAAA,IAAA,CAAKhX,IAAL,GAAYqB,MAAM,CAACg1B,MAAP,CAAc,EAAd,EAAkB,IAAKr2B,CAAAA,IAAvB,EAA6BgX,OAA7B,CAAZ,CAAA;IACH,GAAA;IAED;IACJ;IACA;IACA;;;IACIle,EAAAA,IAAI,GAAG;IACH,IAAA,OAAO,IAAIi9B,OAAJ,CAAY,CAACC,OAAD,EAAUuB,MAAV,KAAqB;IACpC,MAAI,IAAA,CAAC,IAAK/b,CAAAA,MAAV,EAAkB;IACd,QAAA,IAAA,CAAKA,MAAL,GAAc,IAAId,MAAJ,CAAW,IAAX,CAAd,CAAA;IACH,OAAA;;IAED,MAAI,IAAA,CAAC,IAAKrB,CAAAA,KAAV,EAAiB;IACb,QAAA,IAAA,CAAKA,KAAL,GAAa,IAAIoH,KAAJ,CAAU,IAAV,CAAb,CAAA;IACH,OAAA;;IAED,MAAA,IAAI,IAAKzgB,CAAAA,IAAL,CAAU1H,MAAd,EAAsB;IAClB,QAAI,IAAA,CAAC,IAAKwmB,CAAAA,gBAAV,EAA4B;IACxB,UAAA,IAAA,CAAKA,gBAAL,GAAwB,IAAI4B,gBAAJ,CAAqB,IAArB,CAAxB,CAAA;IACH,SAAA;IACJ,OAAA;;IAED,MAAA,IAAI,IAAK1gB,CAAAA,IAAL,CAAUxH,MAAd,EAAsB;IAClB,QAAI,IAAA,CAAC,IAAKumB,CAAAA,UAAV,EAAsB;IAClB,UAAA,IAAA,CAAKA,UAAL,GAAkB,IAAI8T,UAAJ,CAAe,IAAf,CAAlB,CAAA;IACH,SAAA;IACJ,OAAA;;IAED,MAAI,IAAA,CAAC,KAAKpW,aAAN,IAAuB,CAAC,IAAKua,CAAAA,kBAAL,EAA5B,EAAuD;IACnD,QAAA,IAAA,CAAKva,aAAL,GAAqB,IAAID,aAAJ,CAAkB,IAAlB,CAArB,CAAA;IAEA,QAAA,IAAA,CAAK9Q,IAAL,CAAUxR,MAAM,CAACE,iBAAjB,EAAoC,MAAM;IACtC47B,UAAAA,OAAO,EAAA,CAAA;IACV,SAFD,CAAA,CAAA;IAGH,OAND,MAMO;IACHA,QAAAA,OAAO,EAAA,CAAA;IACV,OAAA;IAEJ,KA/BM,CAAP,CAAA;IAgCH,GAAA;IAGD;IACJ;IACA;IACA;IACA;;;IACIx+B,EAAAA,IAAI,CAACQ,GAAD,EAAM;IACN,IAAA,OAAO,IAAI+9B,OAAJ,CAAY,CAACC,OAAD,EAAUuB,MAAV,KAAqB;IACpC,MAAI,IAAA,CAACv/B,GAAD,IAAQ,CAAC,KAAKgI,IAAL,CAAUhI,GAAvB,EAA4B;IACxB,QAAA,OAAOu/B,MAAM,EAAb,CAAA;IACH,OAAA;;IAED,MAAK98B,IAAAA,CAAAA,OAAL,GAAe,IAAf,CAAA;IACA,MAAKJ,IAAAA,CAAAA,OAAL,GAAe,KAAf,CAAA;IACA,MAAA,IAAA,CAAKif,MAAL,CAAYnQ,aAAZ,GAA4BtE,GAAG,EAA/B,CAAA;;IACA,MAAI,IAAA,CAAC7M,GAAL,EAAU;IACNA,QAAAA,GAAG,GAAG,IAAKgI,CAAAA,IAAL,CAAUhI,GAAhB,CAAA;IACH,OAAA;;IACD,MAAA,IAAA,CAAKgI,IAAL,CAAUhI,GAAV,GAAgBA,GAAhB,CAAA;IAEA,MAAA,IAAA,CAAKi/B,sBAAL,EAAA,CAAA;IAEA,MAAA,IAAA,CAAKn+B,IAAL,EAAA,CAAYiS,IAAZ,CAAiB,MAAM;IACnB,QAAA,IAAA,CAAKuO,MAAL,CAAYlQ,SAAZ,GAAwBvE,GAAG,EAA3B,CADmB;;IAGnB,QAAA,IAAI,IAAK7E,CAAAA,IAAL,CAAU9I,SAAd,EAAyB;IACrB,UAAKqD,IAAAA,CAAAA,IAAL,CAAU,KAAV,CAAA,CAAA;IACH,SAAA;;IAGD,QAAI,IAAA,IAAA,CAAKukB,gBAAT,EAA2B;IACvB,UAAKA,IAAAA,CAAAA,gBAAL,CAAsBpT,IAAtB,CAA2B/O,YAAY,CAACI,uBAAxC,EAAiE,MAAM;IACnE,YAAA,IAAA,CAAKyN,IAAL,CAAU7N,YAAY,CAACI,uBAAvB,CAAA,CAAA;;IACA,YAAA,IAAI,CAAC,IAAA,CAAKiD,IAAL,CAAUtH,QAAf,EAAyB;IACrB,cAAK8R,IAAAA,CAAAA,IAAL,CAAUtQ,MAAM,CAACY,KAAjB,EAAwB6B,YAAY,CAACI,uBAArC,CAAA,CAAA;IACH,aAAA;IACJ,WALD,CAAA,CAAA;IAMH,SAAA;;IAED,QAAI,IAAA,IAAA,CAAKgiB,UAAT,EAAqB;IACjB,UAAKA,IAAAA,CAAAA,UAAL,CAAgBrT,IAAhB,CAAqB/O,YAAY,CAACK,yBAAlC,EAA6D,MAAM;IAC/D,YAAA,IAAA,CAAKwN,IAAL,CAAU7N,YAAY,CAACK,yBAAvB,CAAA,CAAA;;IACA,YAAA,IAAI,CAAC,IAAA,CAAKgD,IAAL,CAAUtH,QAAf,EAAyB;IACrB,cAAK8R,IAAAA,CAAAA,IAAL,CAAUtQ,MAAM,CAACY,KAAjB,EAAwB6B,YAAY,CAACK,yBAArC,CAAA,CAAA;IACH,aAAA;IACJ,WALD,CAAA,CAAA;IAMH,SAAA;;IAED,QAAA,IAAA,CAAKspB,cAAL,EAAA,CAAA;IAEA,QAAA,IAAA,CAAK9K,MAAL,CAAYpC,WAAZ,CAAwBphB,GAAxB,EA5BmB;;IA+BnB,QAAKw/B,IAAAA,CAAAA,mBAAL,GA/BmB;;IAiCnB,QAAKhc,IAAAA,CAAAA,MAAL,CAAY9P,IAAZ,CAAiB/O,YAAY,CAACE,UAA9B,EAA2C/B,KAAD,IAAW;IACjDy8B,UAAAA,MAAM,CAACz8B,KAAD,CAAN,CAAA;IACH,SAFD,EAjCmB;;IAsCnB,QAAK0gB,IAAAA,CAAAA,MAAL,CAAY9P,IAAZ,CAAiB/O,YAAY,CAACG,cAA9B,EAA+ChC,KAAD,IAAW;IACrDy8B,UAAAA,MAAM,CAACz8B,KAAD,CAAN,CAAA;IACH,SAFD,EAtCmB;;IA2CnB,QAAK0gB,IAAAA,CAAAA,MAAL,CAAY9P,IAAZ,CAAiBxR,MAAM,CAAC2B,aAAxB,EAAuC,MAAM;IACzCm6B,UAAAA,OAAO,EAAA,CAAA;IACP,UAAA,IAAA,CAAK1c,MAAL,CAAYhQ,cAAZ,GAA6BzE,GAAG,EAAhC,CAFyC;;IAIzC,UAAKlL,IAAAA,CAAAA,KAAL,CAAWnC,IAAX,EAAA,CAAA;IACH,SALD,CAAA,CAAA;IAOH,OAlDD,CAkDGwT,CAAAA,KAlDH,CAkDU/H,CAAD,IAAO;IACZs0B,QAAAA,MAAM,CAACt0B,CAAD,CAAN,CAAA;IACH,OApDD,CAAA,CAAA;IAqDH,KApEM,CAAP,CAAA;IAqEH,GAAA;IAED;IACJ;IACA;;;IACIjJ,EAAAA,KAAK,GAAG;IACJ,IAAA,OAAO,IAAI+7B,OAAJ,CAAY,CAACC,OAAD,EAAUuB,MAAV,KAAqB;IACpC,MAAA,IAAA,CAAKE,MAAL,EAAA,CAAc1sB,IAAd,CAAmB,MAAM;IACrB,QAAKpR,IAAAA,CAAAA,KAAL,CAAWuX,SAAX,EAAA,CAAA;IACA8kB,QAAAA,OAAO,EAAA,CAAA;IACV,OAHD,CAAA,CAAA;IAIH,KALM,CAAP,CAAA;IAMH,GAAA;;IAEDyB,EAAAA,MAAM,GAAG;IACL,IAAA,OAAO,IAAI1B,OAAJ,CAAY,CAACC,OAAD,EAAUuB,MAAV,KAAqB;IACpC;IACA,MAAI,IAAA,IAAA,CAAK/b,MAAT,EAAiB;IACb,QAAKA,IAAAA,CAAAA,MAAL,CAAYvf,OAAZ,EAAA,CAAA;IACA,QAAKuf,IAAAA,CAAAA,MAAL,GAAc,IAAd,CAAA;IACH,OAAA;;IAED,MAAI,IAAA,IAAA,CAAKnC,KAAT,EAAgB;IACZ,QAAKA,IAAAA,CAAAA,KAAL,CAAWpd,OAAX,EAAA,CAAA;IACA,QAAKod,IAAAA,CAAAA,KAAL,GAAa,IAAb,CAAA;IACH,OAVmC;;;IAapC,MAAI,IAAA,IAAA,CAAKoD,aAAT,EAAwB;IACpB,QAAKA,IAAAA,CAAAA,aAAL,CAAmBxgB,OAAnB,EAAA,CAAA;IACA,QAAKwgB,IAAAA,CAAAA,aAAL,GAAqB,IAArB,CAAA;IACH,OAAA;;IAED,MAAI,IAAA,IAAA,CAAKqC,gBAAT,EAA2B;IACvB,QAAKA,IAAAA,CAAAA,gBAAL,CAAsB7iB,OAAtB,EAAA,CAAA;IACA,QAAK6iB,IAAAA,CAAAA,gBAAL,GAAwB,IAAxB,CAAA;IACH,OAAA;;IAED,MAAI,IAAA,IAAA,CAAKC,UAAT,EAAqB;IACjB,QAAKA,IAAAA,CAAAA,UAAL,CAAgB9iB,OAAhB,EAAA,CAAA;IACA,QAAK8iB,IAAAA,CAAAA,UAAL,GAAkB,IAAlB,CAAA;IACH,OAAA;;IAED,MAAA,IAAA,CAAKkY,sBAAL,EAAA,CAAA;IACA,MAAA,IAAA,CAAKC,wBAAL,EAAA,CAAA;IACA,MAAK78B,IAAAA,CAAAA,OAAL,GAAe,KAAf,CAAA;IACA,MAAKI,IAAAA,CAAAA,OAAL,GAAe,KAAf,CAAA;IACA,MAAA,IAAA,CAAKS,SAAL,GAAiB,KAAjB,CAhCoC;;IAkCpC,MAAA,IAAA,CAAKzD,KAAL,IAAc,IAAA,CAAKA,KAAL,CAAW6C,KAAX,EAAd,CAAA;IACA,MAAKX,IAAAA,CAAAA,KAAL,IAAc,IAAKA,CAAAA,KAAL,CAAWW,KAAX,EAAd,CAnCoC;;IAqCpC,MAAK68B,IAAAA,CAAAA,eAAL,GArCoC;;IAuCpC,MAAKC,IAAAA,CAAAA,UAAL,GAvCoC;;IAyCpC,MAAKL,IAAAA,CAAAA,eAAL,GAAuB,CAAvB,CAAA;IACA,MAAA,IAAA,CAAKD,eAAL,GAAuB,CAAvB,CA1CoC;;IA4CpC,MAAA,IAAA,CAAKxd,MAAL,GAAcpQ,aAAa,EAA3B,CA5CoC;;IA8CpCxE,MAAAA,UAAU,CAAC,MAAM;IACbsxB,QAAAA,OAAO,EAAA,CAAA;IACV,OAFS,EAEP,CAFO,CAAV,CAAA;IAGH,KAjDM,CAAP,CAAA;IAkDH,GAAA;IAED;IACJ;IACA;IACA;IACA;;;IACI17B,EAAAA,KAAK,CAAC6d,IAAD,EAAO;IACR,IAAA,IAAIA,IAAJ,EAAU;IACN,MAAO,OAAA,IAAA,CAAKne,KAAL,EAAP,CAAA;IACH,KAFD,MAEO;IACH,MAAO,OAAA,IAAA,CAAKy9B,MAAL,EAAP,CAAA;IACH,KAAA;IACJ,GAAA;IAED;IACJ;IACA;IACA;;;IACIl9B,EAAAA,IAAI,CAAC4d,IAAD,EAAO;IACP,IAAK1gB,IAAAA,CAAAA,KAAL,IAAc,IAAKA,CAAAA,KAAL,CAAW8C,IAAX,CAAgB4d,IAAhB,CAAd,CAAA;IACH,GAAA;IAED;IACJ;IACA;;;IACIxc,EAAAA,MAAM,GAAG;IACL,IAAKhC,IAAAA,CAAAA,KAAL,CAAWgC,MAAX,EAAA,CAAA;IACH,GAAA;IAED;IACJ;IACA;IACA;IACA;;;IACIwf,EAAAA,WAAW,CAACjX,QAAD,EAAW2W,QAAX,EAAqB;IAC5B,IAAI,IAAA,IAAA,CAAK3f,SAAT,EAAoB;IAChB,MAAA,OAAA;IACH,KAAA;;IAED,IAAA,IAAA,CAAK6gB,QAAL,CAAcd,WAAd,CAA0B/W,QAA1B,EAAoC2W,QAApC,CAAA,CAAA;IACA,IAAK3f,IAAAA,CAAAA,SAAL,GAAiB,IAAjB,CAAA;IACH,GAAA;IAED;IACJ;IACA;;;IACIihB,EAAAA,iBAAiB,GAAG;IAChB,IAAI,IAAA,IAAA,CAAKjhB,SAAT,EAAoB;IAChB,MAAKA,IAAAA,CAAAA,SAAL,GAAiB,KAAjB,CAAA;IACH,KAAA;IACJ,GAAA;;IAEDo7B,EAAAA,WAAW,GAAG;IACV,IAAI/tB,IAAAA,MAAM,GAAG,KAAb,CAAA;IAEA,IAAImvB,IAAAA,UAAU,GAAG,KAAjB,CAAA;IACAr2B,IAAAA,MAAM,CAACyE,IAAP,CAAY,IAAK9F,CAAAA,IAAL,CAAU3I,WAAtB,CAAmC6J,CAAAA,OAAnC,CAA4CnC,GAAD,IAAS;IAChD,MAAA,IAAI,KAAKiB,IAAL,CAAU3I,WAAV,CAAsB0H,GAAtB,CAAJ,EAAgC;IAC5B24B,QAAAA,UAAU,GAAG,IAAb,CAAA;IACH,OAAA;IACJ,KAJD,CAAA,CAAA;;IAMA,IAAI,IAAA,IAAA,CAAK13B,IAAL,CAAUhJ,aAAV,IAA2B,IAAKgJ,CAAAA,IAAL,CAAU23B,IAArC,IAA6CD,UAAjD,EAA6D;IACzDnvB,MAAAA,MAAM,GAAG,IAAT,CAAA;IACH,KAAA;;IAED,IAAA,OAAOA,MAAP,CAAA;IACH,GAAA;;IAEDyuB,EAAAA,kBAAkB,GAAG;IACjB,IAAO,OAAA,IAAA,CAAKh3B,IAAL,CAAU7I,QAAV,KAAuB,KAAvB,KAAiC,IAAK6I,CAAAA,IAAL,CAAUxH,MAAV,IAAqB,IAAKwH,CAAAA,IAAL,CAAU1H,MAAV,IAAoB,CAAC,IAAK0H,CAAAA,IAAL,CAAUvH,YAArF,CAAP,CAAA;IACH,GAAA;;IAEDm/B,EAAAA,UAAU,GAAG;IACT,IAAA,IAAA,CAAKX,sBAAL,EAAA,CAAA;IACA,IAAA,IAAA,CAAKY,iBAAL,EAAA,CAAA;IACH,GAplBuC;;;IAulBxCA,EAAAA,iBAAiB,GAAG;IAChB,IAAA,IAAA,CAAKnB,kBAAL,GAA0BhyB,UAAU,CAAC,MAAM;IACvC,MAAA,IAAA,CAAKpK,KAAL,CAAW,KAAX,CAAkByQ,CAAAA,IAAlB,CAAuB,MAAM;IACzB,QAAKP,IAAAA,CAAAA,IAAL,CAAUtQ,MAAM,CAACxD,OAAjB,EAA0BwD,MAAM,CAACa,YAAjC,CAAA,CAAA;IACA,QAAA,IAAA,CAAKyP,IAAL,CAAUtQ,MAAM,CAACa,YAAjB,CAAA,CAAA;IACH,OAHD,CAAA,CAAA;IAIH,KALmC,EAKjC,IAAKiF,CAAAA,IAAL,CAAUvJ,YAAV,GAAyB,IALQ,CAApC,CAAA;IAMH,GA9lBuC;;;IAimBxCwgC,EAAAA,sBAAsB,GAAG;IACrB,IAAI,IAAA,IAAA,CAAKP,kBAAT,EAA6B;IACzBoB,MAAAA,YAAY,CAAC,IAAKpB,CAAAA,kBAAN,CAAZ,CAAA;IACA,MAAKA,IAAAA,CAAAA,kBAAL,GAA0B,IAA1B,CAAA;IACH,KAAA;IACJ,GAtmBuC;;;IAymBxCc,EAAAA,mBAAmB,GAAG;IAClB,IAAA,IAAA,CAAKb,oBAAL,GAA4BjyB,UAAU,CAAC,MAAM;IACzC,MAAA,IAAA,CAAKpK,KAAL,CAAW,KAAX,CAAkByQ,CAAAA,IAAlB,CAAuB,MAAM;IACzB,QAAKP,IAAAA,CAAAA,IAAL,CAAUtQ,MAAM,CAACxD,OAAjB,EAA0BwD,MAAM,CAAC1D,cAAjC,CAAA,CAAA;IACA,QAAA,IAAA,CAAKgU,IAAL,CAAUtQ,MAAM,CAAC1D,cAAjB,CAAA,CAAA;IACH,OAHD,CAAA,CAAA;IAIH,KALqC,EAKnC,IAAKwJ,CAAAA,IAAL,CAAUxJ,cAAV,GAA2B,IALQ,CAAtC,CAAA;IAMH,GAAA;;IAED0gC,EAAAA,wBAAwB,GAAG;IACvB,IAAI,IAAA,IAAA,CAAKP,oBAAT,EAA+B;IAC3BmB,MAAAA,YAAY,CAAC,IAAKnB,CAAAA,oBAAN,CAAZ,CAAA;IACA,MAAKA,IAAAA,CAAAA,oBAAL,GAA4B,IAA5B,CAAA;IACH,KAAA;IACJ,GAAA;;IAEDzZ,EAAAA,YAAY,GAAG;IACX,IAAI,IAAA,IAAA,CAAKziB,OAAT,EAAkB;IACd,MAAA,IAAA,CAAK+P,IAAL,CAAUtQ,MAAM,CAACuB,KAAjB,CAAA,CAAA;IACA,MAAKhB,IAAAA,CAAAA,OAAL,GAAe,KAAf,CAAA;IACA,MAAA,IAAA,CAAKy8B,wBAAL,EAAA,CAAA;IACH,KAAA;;IACD,IAAI,IAAA,CAAC,IAAK78B,CAAAA,OAAV,EAAmB;IACf,MAAKA,IAAAA,CAAAA,OAAL,GAAe,IAAf,CAAA;IACH,KAAA;;IACD,IAAA,IAAA,CAAKu9B,UAAL,EAAA,CAAA;IACH,GAnoBuC;;;IAuoBxCza,EAAAA,WAAW,CAACnG,OAAD,EAAU;IACjBA,IAAAA,OAAO,GAAGA,OAAO,IAAI,EAArB,CAAA;;IAEA,IAAI,IAAA,CAAC,IAAK4f,CAAAA,aAAV,EAAyB;IACrB,MAAKA,IAAAA,CAAAA,aAAL,GAAqB/xB,GAAG,EAAxB,CAAA;IACH,KAAA;;IAED,IAAA,IAAIoE,UAAU,CAAC+N,OAAO,CAACxE,EAAT,CAAd,EAA4B;IACxB,MAAA,IAAA,CAAKqkB,MAAL,CAAYrkB,EAAZ,GAAiBwE,OAAO,CAACxE,EAAzB,CAAA;IACH,KAAA;;IAED,IAAA,IAAIvJ,UAAU,CAAC+N,OAAO,CAACoG,GAAT,CAAd,EAA6B;IACzB,MAAA,IAAA,CAAKyZ,MAAL,CAAYzZ,GAAZ,GAAkBpG,OAAO,CAACoG,GAA1B,CAAA;IACH,KAAA;;IAED,IAAIpG,IAAAA,OAAO,CAAC1O,GAAZ,EAAiB;IACb,MAAA,IAAA,CAAKuuB,MAAL,CAAYvuB,GAAZ,IAAmB,CAAnB,CAAA;IACH,KAAA;;IACD,IAAI0O,IAAAA,OAAO,CAAC2I,IAAZ,EAAkB;IACd,MAAA,IAAA,CAAKkX,MAAL,CAAYlX,IAAZ,IAAoB3I,OAAO,CAAC2I,IAA5B,CAAA;IACH,KAAA;;IACD,IAAI3I,IAAAA,OAAO,CAAC4I,IAAZ,EAAkB;IACd,MAAA,IAAA,CAAKiX,MAAL,CAAYjX,IAAZ,IAAoB5I,OAAO,CAAC4I,IAA5B,CAAA;IACH,KAAA;;IAED,IAAMmY,MAAAA,QAAQ,GAAGlzB,GAAG,EAApB,CAAA;;IACA,IAAA,MAAMyW,SAAS,GAAGyc,QAAQ,GAAG,KAAKnB,aAAlC,CAAA;;IAEA,IAAA,IAAItb,SAAS,GAAG,CAAI,GAAA,IAApB,EAA0B;IACtB,MAAA,OAAA;IACH,KAAA;;IAED,IAAA,IAAA,CAAK9Q,IAAL,CAAUtQ,MAAM,CAACc,KAAjB,EAAwB,KAAK67B,MAA7B,CAAA,CAAA;IACA,IAAA,IAAA,CAAKrsB,IAAL,CAAUtQ,MAAM,CAACe,WAAjB,EAA8BoN,SAAS,CAAC,IAAKwuB,CAAAA,MAAL,CAAYvuB,GAAb,CAAvC,CAAA,CAAA;IACA,IAAA,IAAA,CAAKuuB,MAAL,CAAYvuB,GAAZ,GAAkB,CAAlB,CAAA;IACA,IAAA,IAAA,CAAKuuB,MAAL,CAAYlX,IAAZ,GAAmB,CAAnB,CAAA;IACA,IAAA,IAAA,CAAKkX,MAAL,CAAYjX,IAAZ,GAAmB,CAAnB,CAAA;IACA,IAAKgX,IAAAA,CAAAA,aAAL,GAAqBmB,QAArB,CAAA;IACH,GAAA;;IAEDX,EAAAA,UAAU,GAAG;IACT,IAAKR,IAAAA,CAAAA,aAAL,GAAqB,IAArB,CAAA;IACA,IAAA,IAAA,CAAKC,MAAL,GAAc;IACVzZ,MAAAA,GAAG,EAAE,CADK;IACF;IACR9U,MAAAA,GAAG,EAAE,CAFK;IAGVqX,MAAAA,IAAI,EAAE,CAHI;IAIVC,MAAAA,IAAI,EAAE,CAJI;IAKVpN,MAAAA,EAAE,EAAE,CAAA;IALM,KAAd,CAAA;IAOH,GAAA;;IAED8T,EAAAA,cAAc,GAAG;IACb,IAAA,IAAI,IAAKtmB,CAAAA,IAAL,CAAU/I,YAAd,EAA4B;IACxB,MAAKA,IAAAA,CAAAA,YAAL,CAAkBk+B,MAAlB,EAAA,CAAA;IACH,KAAA;IACJ,GAAA;;IAEDgC,EAAAA,eAAe,GAAG;IACd,IAAA,IAAI,IAAKn3B,CAAAA,IAAL,CAAU/I,YAAd,EAA4B;IACxB,MAAKA,IAAAA,CAAAA,YAAL,CAAkB2+B,OAAlB,EAAA,CAAA;IACH,KAAA;IACJ,GAAA;;IAEDtY,EAAAA,uBAAuB,GAAG;IACtB,IAAMhE,MAAAA,MAAM,GAAG,IAAA,CAAKA,MAApB,CAAA;IACAA,IAAAA,MAAM,CAAC5P,aAAP,GAAuB4P,MAAM,CAAClQ,SAAP,GAAmBkQ,MAAM,CAACnQ,aAAjD,CAAA;IACAmQ,IAAAA,MAAM,CAAC3P,eAAP,GAAyB2P,MAAM,CAACjQ,WAAP,GAAqBiQ,MAAM,CAAClQ,SAArD,CAAA;IACAkQ,IAAAA,MAAM,CAAC1P,uBAAP,GAAiC0P,MAAM,CAAChQ,cAAP,GAAwBgQ,MAAM,CAACjQ,WAAhE,CAAA;IACAiQ,IAAAA,MAAM,CAACzP,cAAP,GAAwByP,MAAM,CAAC/P,UAAP,GAAoB+P,MAAM,CAAChQ,cAAnD,CAAA;IACAgQ,IAAAA,MAAM,CAACxP,eAAP,GAAyBwP,MAAM,CAAC9P,WAAP,GAAqB8P,MAAM,CAAC/P,UAArD,CAAA;IACA+P,IAAAA,MAAM,CAACvP,cAAP,GAAwBuP,MAAM,CAAC7P,UAAP,GAAoB6P,MAAM,CAAC9P,WAAnD,CAAA;IACA8P,IAAAA,MAAM,CAACtP,YAAP,GAAsBsP,MAAM,CAAC7P,UAAP,GAAoB6P,MAAM,CAACnQ,aAAjD,CAAA;IACA,IAAA,IAAA,CAAKqB,IAAL,CAAUtQ,MAAM,CAACuC,iBAAjB,EAAoC6c,MAApC,CAAA,CAAA;IACH,GAAA;;IAhtBuC;;ICvB5C,MAAM0e,SAAN,SAAwBzsB,OAAxB,CAAgC;IAChB,EAAL0sB,OAAAA,KAAK,GAAGt7B,YAAH,CAAA;IAEE,EAAA,OAAPu7B,OAAO,GAAG;IACb1hC,IAAAA,cAAc,EAAE0D,MAAM,CAAC1D,cADV;IAEbuE,IAAAA,YAAY,EAAEb,MAAM,CAACa,YAAAA;IAFR,GAAH,CAAA;;IAKd8E,EAAAA,WAAW,CAACmX,OAAD,EAAU;IACjB,IAAA,KAAA,EAAA,CAAA;IACA,IAAIhX,IAAAA,IAAI,GAAGgX,OAAX,CAAA;IACA,IAAA,IAAIvV,UAAU,GAAGuV,OAAO,CAACof,SAAzB,CAAA;;IACA,IAAA,IAAI,OAAOpf,OAAO,CAACof,SAAf,KAA6B,QAAjC,EAA2C;IACvC30B,MAAAA,UAAU,GAAG2C,QAAQ,CAAC2d,aAAT,CAAuB/K,OAAO,CAACof,SAA/B,CAAb,CAAA;IACH,KAAA;;IACD,IAAI,IAAA,CAAC30B,UAAL,EAAiB;IACb,MAAA,MAAM,IAAI02B,KAAJ,CAAU,iCAAV,CAAN,CAAA;IAEH,KAAA;;IAED12B,IAAAA,UAAU,CAACyJ,SAAX,CAAqBC,GAArB,CAAyB,qBAAzB,CAAA,CAAA;IAEA,IAAA,OAAOnL,IAAI,CAACo2B,SAAZ,CAdiB;;IAiBjB,IAAA,IAAIntB,UAAU,CAACjJ,IAAI,CAAC9J,WAAN,CAAd,EAAkC;IAC9B8J,MAAAA,IAAI,CAAC9J,WAAL,GAAmBkd,MAAM,CAACpT,IAAI,CAAC9J,WAAN,CAAN,GAA2B,IAA9C,CAAA;IACH,KAnBgB;;;IAsBjB,IAAA,IAAI+S,UAAU,CAACjJ,IAAI,CAACtJ,OAAN,CAAd,EAA8B;IAC1B,MAAA,IAAIoS,OAAO,CAAC9I,IAAI,CAACxJ,cAAN,CAAX,EAAkC;IAC9BwJ,QAAAA,IAAI,CAACxJ,cAAL,GAAsBwJ,IAAI,CAACtJ,OAA3B,CAAA;IACH,OAAA;;IAED,MAAA,IAAIoS,OAAO,CAAC9I,IAAI,CAACvJ,YAAN,CAAX,EAAgC;IAC5BuJ,QAAAA,IAAI,CAACvJ,YAAL,GAAoBuJ,IAAI,CAACtJ,OAAzB,CAAA;IACH,OAAA;IACJ,KAAA;;IAED,IAAKsJ,IAAAA,CAAAA,IAAL,GAAYA,IAAZ,CAAA;IACA,IAAKyB,IAAAA,CAAAA,UAAL,GAAkBA,UAAlB,CAAA;IACA,IAAK22B,IAAAA,CAAAA,0BAAL,GAAkC,CAAlC,CAAA;IACA,IAAKC,IAAAA,CAAAA,wBAAL,GAAgC,CAAhC,CAAA;IACA,IAAA,IAAA,CAAK1tB,MAAL,GAAc,IAAIvK,MAAJ,CAAW,IAAX,CAAd,CAAA;;IACA,IAAA,IAAA,CAAKk4B,WAAL,CAAiB72B,UAAjB,EAA6BzB,IAA7B,CAAA,CAAA;IACH,GAAA;IAED;IACJ;IACA;;;IACI/D,EAAAA,OAAO,GAAG;IACN,IAAI,IAAA,IAAA,CAAK0O,MAAT,EAAiB;IACb,MAAKA,IAAAA,CAAAA,MAAL,CAAY1O,OAAZ,EAAA,CAAA;IACA,MAAK0O,IAAAA,CAAAA,MAAL,GAAc,IAAd,CAAA;IACH,KAAA;;IAED,IAAI,IAAA,IAAA,CAAKvJ,MAAT,EAAiB;IACb,MAAKA,IAAAA,CAAAA,MAAL,CAAYnF,OAAZ,EAAA,CAAA;IACA,MAAKmF,IAAAA,CAAAA,MAAL,GAAc,IAAd,CAAA;IACH,KAAA;;IACD,IAAKK,IAAAA,CAAAA,UAAL,GAAkB,IAAlB,CAAA;IACA,IAAKzB,IAAAA,CAAAA,IAAL,GAAY,IAAZ,CAAA;IACA,IAAKo4B,IAAAA,CAAAA,0BAAL,GAAkC,CAAlC,CAAA;IACA,IAAKC,IAAAA,CAAAA,wBAAL,GAAgC,CAAhC,CAAA;IACA,IAAA,IAAA,CAAKztB,GAAL,EAAA,CAAA;IACH,GAAA;;IAED0tB,EAAAA,WAAW,CAAC72B,UAAD,EAAauV,OAAb,EAAsB;IAC7B,IAAK5V,IAAAA,CAAAA,MAAL,GAAc,IAAI+0B,MAAJ,CAAW10B,UAAX,EAAuBuV,OAAvB,CAAd,CAAA;;IACA,IAAA,IAAA,CAAKuhB,WAAL,EAAA,CAAA;IACH,GAAA;;IAEDC,EAAAA,YAAY,GAAe;IAAA,IAAdxhB,IAAAA,OAAc,uEAAJ,EAAI,CAAA;IACvB,IAAK5V,IAAAA,CAAAA,MAAL,CAAYnF,OAAZ,EAAA,CAAA;IACA,IAAKmF,IAAAA,CAAAA,MAAL,GAAc,IAAd,CAAA;;IACA,IAAMq3B,MAAAA,QAAQ,GAAGp3B,MAAM,CAACg1B,MAAP,CAAc,IAAKr2B,CAAAA,IAAnB,EAAyBgX,OAAzB,CAAjB,CAAA;;IACA,IAAA,IAAA,CAAKshB,WAAL,CAAiB,IAAK72B,CAAAA,UAAtB,EAAkCg3B,QAAlC,CAAA,CAAA;IACH,GAAA;;IAEDF,EAAAA,WAAW,GAAG;IACV;IACAl3B,IAAAA,MAAM,CAACyE,IAAP,CAAYpJ,gBAAZ,CAA8BwE,CAAAA,OAA9B,CAAuCnC,GAAD,IAAS;IAC3C,MAAKqC,IAAAA,CAAAA,MAAL,CAAYsJ,EAAZ,CAAehO,gBAAgB,CAACqC,GAAD,CAA/B,EAAuC8G,KAAD,IAAW;IAC7C,QAAA,IAAA,CAAK2E,IAAL,CAAUzL,GAAV,EAAe8G,KAAf,CAAA,CAAA;IACH,OAFD,CAAA,CAAA;IAGH,KAJD,CAAA,CAAA;IAKH,GAAA;IAED;IACJ;IACA;IACA;;;IACI6yB,EAAAA,QAAQ,CAAC7yB,KAAD,EAAQ;IACZ,IAAKzE,IAAAA,CAAAA,MAAL,CAAYi2B,YAAZ,CAAyB;IACrBsB,MAAAA,OAAO,EAAE,CAAC,CAAC9yB,KAAAA;IADU,KAAzB,CAAA,CAAA;IAGH,GAAA;IAED;IACJ;IACA;;;IACItL,EAAAA,IAAI,GAAG;IACH,IAAA,IAAA,CAAK6G,MAAL,CAAY7G,IAAZ,CAAiB,IAAjB,CAAA,CAAA;IACH,GAAA;IAED;IACJ;IACA;;;IACIq+B,EAAAA,UAAU,GAAG;IACT,IAAA,IAAA,CAAKx3B,MAAL,CAAY7G,IAAZ,CAAiB,KAAjB,CAAA,CAAA;IACH,GAAA;IAED;IACJ;IACA;IACA;;;IACI6d,EAAAA,SAAS,CAACvS,KAAD,EAAQ;IACb,IAAA,IAAA,CAAKzE,MAAL,CAAYmW,MAAZ,GAAqB1R,KAArB,CAAA;IACH,GAAA;IAED;IACJ;IACA;;;IACIgzB,EAAAA,WAAW,GAAG;IACV,IAAA,IAAA,CAAKz3B,MAAL,CAAY3J,KAAZ,IAAqB,IAAK2J,CAAAA,MAAL,CAAY3J,KAAZ,CAAkBif,YAAlB,CAA+B,IAA/B,CAArB,CAAA;IACH,GAAA;IAED;IACJ;IACA;IACA;;;IACIhS,EAAAA,UAAU,CAACwF,IAAD,EAAO;IACbA,IAAAA,IAAI,GAAGkJ,MAAM,CAAClJ,IAAD,CAAb,CAAA;IACA,IAAK9I,IAAAA,CAAAA,MAAL,CAAYi2B,YAAZ,CAAyB;IACrB3gC,MAAAA,OAAO,EAAEwT,IADY;IAErB1T,MAAAA,cAAc,EAAE0T,IAFK;IAGrBzT,MAAAA,YAAY,EAAEyT,IAAAA;IAHO,KAAzB,CAAA,CAAA;IAKH,GAAA;IAED;IACJ;IACA;IACA;;;IACI4uB,EAAAA,YAAY,CAACr1B,IAAD,EAAO;IACfA,IAAAA,IAAI,GAAG2P,MAAM,CAAC3P,IAAD,CAAb,CAAA;IACA,IAAA,IAAIuT,OAAO,GAAG;IACV5gB,MAAAA,YAAY,EAAE,KADJ;IAEVD,MAAAA,QAAQ,EAAE,KAAA;IAFA,KAAd,CAAA;;IAIA,IAAA,QAAQsN,IAAR;IACI,MAAKtF,KAAAA,eAAe,CAACC,IAArB;IACI4Y,QAAAA,OAAO,CAAC5gB,YAAR,GAAuB,KAAvB,CAAA;IACA4gB,QAAAA,OAAO,CAAC7gB,QAAR,GAAmB,KAAnB,CAAA;IACA,QAAA,MAAA;;IACJ,MAAKgI,KAAAA,eAAe,CAACE,IAArB;IACI2Y,QAAAA,OAAO,CAAC5gB,YAAR,GAAuB,KAAvB,CAAA;IACA4gB,QAAAA,OAAO,CAAC7gB,QAAR,GAAmB,IAAnB,CAAA;IACA,QAAA,MAAA;;IACJ,MAAKgI,KAAAA,eAAe,CAACG,QAArB;IACI0Y,QAAAA,OAAO,CAAC5gB,YAAR,GAAuB,IAAvB,CAAA;IACA4gB,QAAAA,OAAO,CAAC7gB,QAAR,GAAmB,IAAnB,CAAA;IACA,QAAA,MAAA;IAZR,KAAA;;IAeA,IAAA,IAAA,CAAKiL,MAAL,CAAYi2B,YAAZ,CAAyBrgB,OAAzB,CAAA,CAAA;IACA,IAAA,IAAA,CAAKrb,MAAL,EAAA,CAAA;IACH,GAAA;IAED;IACJ;IACA;IACA;;;IACIrB,EAAAA,KAAK,GAAG;IACJ,IAAA,OAAO,IAAK8G,CAAAA,MAAL,CAAY9G,KAAZ,EAAP,CAAA;IACH,GAAA;IAED;IACJ;IACA;;;IACIN,EAAAA,KAAK,GAAG;IACJ;IACA,IAAA,IAAA,CAAKgG,IAAL,CAAUhI,GAAV,GAAgB,EAAhB,CAAA;IACA,IAAA,OAAO,IAAKoJ,CAAAA,MAAL,CAAYpH,KAAZ,EAAP,CAAA;IACH,GAAA;IAGD;IACJ;IACA;;;IACIkX,EAAAA,SAAS,GAAG;IACR,IAAA,IAAA,CAAK9P,MAAL,CAAYzH,KAAZ,CAAkBuX,SAAlB,EAAA,CAAA;IACH,GAAA;IAED;IACJ;IACA;IACA;IACA;;;IACI1Z,EAAAA,IAAI,CAACQ,GAAD,EAAM;IACN,IAAA,OAAO,IAAI+9B,OAAJ,CAAY,CAACC,OAAD,EAAUuB,MAAV,KAAqB;IACpC,MAAI,IAAA,CAACv/B,GAAD,IAAQ,CAAC,KAAKgI,IAAL,CAAUhI,GAAvB,EAA4B;IACxB,QAAKwS,IAAAA,CAAAA,IAAL,CAAUtQ,MAAM,CAACY,KAAjB,EAAwB6B,YAAY,CAACC,SAArC,CAAA,CAAA;IACA26B,QAAAA,MAAM,EAAA,CAAA;IACN,QAAA,OAAA;IACH,OAAA;;IAED,MAAA,IAAIv/B,GAAJ,EAAS;IACL;IACA,QAAA,IAAI,IAAKgI,CAAAA,IAAL,CAAUhI,GAAd,EAAmB;IACf;IACA,UAAA,IAAIA,GAAG,KAAK,IAAA,CAAKgI,IAAL,CAAUhI,GAAtB,EAA2B;IACvB;IACA,YAAA,IAAI,IAAKoJ,CAAAA,MAAL,CAAY/G,OAAhB,EAAyB;IACrB27B,cAAAA,OAAO,EAAA,CAAA;IACV,aAFD,MAEO;IACH;IACA,cAAA,IAAA,CAAK9kB,SAAL,EAAA,CAAA;IACA,cAAK9P,IAAAA,CAAAA,MAAL,CAAY5J,IAAZ,CAAiB,IAAA,CAAKwI,IAAL,CAAUhI,GAA3B,CAAA,CAAgC+S,IAAhC,CAAqC,MAAM;IACvCirB,gBAAAA,OAAO,EAAA,CAAA;IACV,eAFD,CAAA,CAEGhrB,KAFH,CAES,MAAM;IACX,gBAAA,IAAA,CAAK5J,MAAL,CAAY9G,KAAZ,EAAoByQ,CAAAA,IAApB,CAAyB,MAAM;IAC3BwsB,kBAAAA,MAAM,EAAA,CAAA;IACT,iBAFD,CAAA,CAAA;IAGH,eAND,CAAA,CAAA;IAOH,aAAA;IACJ,WAfD,MAeO;IACH;IACA,YAAA,IAAA,CAAKn2B,MAAL,CAAY9G,KAAZ,EAAoByQ,CAAAA,IAApB,CAAyB,MAAM;IAC3B;IACA,cAAA,IAAA,CAAKmG,SAAL,EAAA,CAAA;IACA,cAAA,OAAO,IAAK6nB,CAAAA,KAAL,CAAW/gC,GAAX,CAAP,CAAA;IACH,aAJD,CAAA,CAIGgT,KAJH,CAIS,MAAM;IACXusB,cAAAA,MAAM,EAAA,CAAA;IACT,aAND,CAAA,CAAA;IAOH,WAAA;IACJ,SA3BD,MA2BO;IACH,UAAA,OAAO,IAAKwB,CAAAA,KAAL,CAAW/gC,GAAX,CAAP,CAAA;IACH,SAAA;IACJ,OAhCD,MAgCO;IACH;IACA;IACA,QAAKoJ,IAAAA,CAAAA,MAAL,CAAY5J,IAAZ,CAAiB,IAAA,CAAKwI,IAAL,CAAUhI,GAA3B,CAAA,CAAgC+S,IAAhC,CAAqC,MAAM;IACvCirB,UAAAA,OAAO,EAAA,CAAA;IACV,SAFD,CAAA,CAEGhrB,KAFH,CAES,MAAM;IACX,UAAA,IAAA,CAAK5J,MAAL,CAAY9G,KAAZ,EAAoByQ,CAAAA,IAApB,CAAyB,MAAM;IAC3BwsB,YAAAA,MAAM,EAAA,CAAA;IACT,WAFD,CAAA,CAAA;IAGH,SAND,CAAA,CAAA;IAOH,OAAA;IACJ,KAlDM,CAAP,CAAA;IAmDH,GAAA;IAED;IACJ;IACA;IACA;IACA;IACA;;;IACIwB,EAAAA,KAAK,CAAC/gC,GAAD,EAAM;IACP,IAAA,OAAO,IAAI+9B,OAAJ,CAAY,CAACC,OAAD,EAAUuB,MAAV,KAAqB;IACpC,MAAA,IAAA,CAAKv3B,IAAL,CAAUhI,GAAV,GAAgBA,GAAhB,CADoC;;IAGpC,MAAMghC,MAAAA,MAAM,GAAGhhC,GAAG,CAACulB,OAAJ,CAAY,MAAZ,CAAA,KAAwB,CAAvC,CAHoC;;IAKpC,MAAA,MAAMnlB,QAAQ,GAAG4gC,MAAM,GAAGtjC,oBAAoB,CAACE,KAAxB,GAAgCF,oBAAoB,CAACC,SAA5E,CALoC;;IAOpC,MAAM0C,MAAAA,SAAS,GAAI2gC,MAAM,IAAIhhC,GAAG,CAACulB,OAAJ,CAAY,MAAZ,CAAA,KAAwB,CAAC,CAAnC,IAAwC,IAAKvd,CAAAA,IAAL,CAAU3J,KAAnD,GAA4DP,UAAU,CAACC,GAAvE,GAA6ED,UAAU,CAACE,GAA1G,CAAA;IAEA,MAAKoL,IAAAA,CAAAA,MAAL,CAAYi2B,YAAZ,CAAyB;IACrBj/B,QAAAA,QADqB;IAErBC,QAAAA,SAAAA;IAFqB,OAAzB,CAAA,CAAA;IAKA,MAAK+I,IAAAA,CAAAA,MAAL,CAAYsK,IAAZ,CAAiB/O,YAAY,CAACK,yBAA9B,EAAyD,MAAM;IAC3D,QAAA,IAAA,CAAKhD,KAAL,EAAA,CAAa+Q,IAAb,CAAkB,MAAM;IACpB,UAAA,IAAI,KAAK3J,MAAL,CAAYpB,IAAZ,CAAiBtH,QAArB,EAA+B;IAC3B,YAAK0I,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,WAAtB,EAAmC,8CAAnC,CAAA,CAAA;;IACA,YAAA,IAAA,CAAK29B,YAAL,CAAkB;IAAChgC,cAAAA,MAAM,EAAE,KAAA;IAAT,aAAlB,CAAA,CAAA;;IACA,YAAA,IAAA,CAAKhB,IAAL,CAAUQ,GAAV,CAAe+S,CAAAA,IAAf,CAAoB,MAAM;IACtB;IACA,cAAK3J,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,WAAtB,EAAmC,sDAAnC,CAAA,CAAA;IACH,aAHD,CAAA,CAGGmQ,KAHH,CAGS,MAAM;IACX;IACA,cAAK5J,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,WAAtB,EAAmC,oDAAnC,CAAA,CAAA;IACH,aAND,CAAA,CAAA;IAOH,WAAA;IACJ,SAZD,CAAA,CAAA;IAaH,OAdD,CAAA,CAAA;IAgBA,MAAKuG,IAAAA,CAAAA,MAAL,CAAYsK,IAAZ,CAAiB/O,YAAY,CAACI,uBAA9B,EAAuD,MAAM;IACzD,QAAA,IAAA,CAAK/C,KAAL,EAAA,CAAa+Q,IAAb,CAAkB,MAAM;IACpB,UAAA,IAAI,KAAK3J,MAAL,CAAYpB,IAAZ,CAAiBtH,QAArB,EAA+B;IAC3B,YAAK0I,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,WAAtB,EAAmC,8CAAnC,CAAA,CAAA;;IACA,YAAA,IAAA,CAAK29B,YAAL,CAAkB;IAAClgC,cAAAA,MAAM,EAAE,KAAA;IAAT,aAAlB,CAAA,CAAA;;IACA,YAAA,IAAA,CAAKd,IAAL,CAAUQ,GAAV,CAAe+S,CAAAA,IAAf,CAAoB,MAAM;IACtB;IACA,cAAK3J,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,WAAtB,EAAmC,sDAAnC,CAAA,CAAA;IACH,aAHD,CAAA,CAGGmQ,KAHH,CAGS,MAAM;IACX;IACA,cAAK5J,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,WAAtB,EAAmC,oDAAnC,CAAA,CAAA;IACH,aAND,CAAA,CAAA;IAOH,WAAA;IACJ,SAZD,CAAA,CAAA;IAaH,OAdD,EA9BoC;;IA+CpC,MAAKuG,IAAAA,CAAAA,MAAL,CAAYsK,IAAZ,CAAiB/O,YAAY,CAACM,eAA9B,EAA+C,MAAM;IACjD,QAAA,IAAI,KAAKmE,MAAL,CAAYpB,IAAZ,CAAiBrH,qBAArB,EAA4C;IACxC,UAAA,IAAA,CAAKqB,KAAL,EAAA,CAAa+Q,IAAb,CAAkB,MAAM;IACpB,YAAK3J,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,WAAtB,EAAmC,6CAAnC,CAAA,CAAA;;IACA,YAAA,IAAA,CAAK29B,YAAL,CAAkB;IAAClgC,cAAAA,MAAM,EAAE,KAAA;IAAT,aAAlB,CAAA,CAAA;;IACA,YAAA,IAAA,CAAKd,IAAL,CAAUQ,GAAV,CAAe+S,CAAAA,IAAf,CAAoB,MAAM;IACtB;IACA,cAAK3J,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,WAAtB,EAAmC,qDAAnC,CAAA,CAAA;IACH,aAHD,CAAA,CAGGmQ,KAHH,CAGS,MAAM;IACX;IACA,cAAK5J,IAAAA,CAAAA,MAAL,CAAY9K,KAAZ,CAAkBuE,GAAlB,CAAsB,WAAtB,EAAmC,mDAAnC,CAAA,CAAA;IACH,aAND,CAAA,CAAA;IAOH,WAVD,CAAA,CAAA;IAWH,SAAA;IACJ,OAdD,EA/CoC;;IAgEpC,MAAKuG,IAAAA,CAAAA,MAAL,CAAYsK,IAAZ,CAAiBxR,MAAM,CAACa,YAAxB,EAAsC,MAAM;IACxC,QAAA,IAAI,KAAKqG,MAAL,CAAYpB,IAAZ,CAAiBpJ,kBAAjB,IAAuC,IAAA,CAAKyhC,wBAAL,GAAgC,KAAKj3B,MAAL,CAAYpB,IAAZ,CAAiBlJ,uBAA5F,EAAqH;IACjH,UAAKuhC,IAAAA,CAAAA,wBAAL,IAAiC,CAAjC,CAAA;IACA,UAAA,IAAA,CAAK7gC,IAAL,CAAUQ,GAAV,CAAe+S,CAAAA,IAAf,CAAoB,MAAM;IACtB;IACA,YAAKstB,IAAAA,CAAAA,wBAAL,GAAgC,CAAhC,CAAA;IACH,WAHD,CAGGrtB,CAAAA,KAHH,CAGS,MAAM;IAEd,WALD,CAAA,CAAA;IAMH,SAAA;IACJ,OAVD,EAhEoC;;IA6EpC,MAAK5J,IAAAA,CAAAA,MAAL,CAAYsK,IAAZ,CAAiBxR,MAAM,CAAC1D,cAAxB,EAAwC,MAAM;IAC1C,QAAA,IAAI,KAAK4K,MAAL,CAAYpB,IAAZ,CAAiBrJ,oBAAjB,IAAyC,IAAA,CAAKyhC,0BAAL,GAAkC,KAAKh3B,MAAL,CAAYpB,IAAZ,CAAiBnJ,yBAAhG,EAA2H;IACvH,UAAKuhC,IAAAA,CAAAA,0BAAL,IAAmC,CAAnC,CAAA;IACA,UAAA,IAAA,CAAK5gC,IAAL,CAAUQ,GAAV,CAAe+S,CAAAA,IAAf,CAAoB,MAAM;IACtB;IACA,YAAKqtB,IAAAA,CAAAA,0BAAL,GAAkC,CAAlC,CAAA;IACH,WAHD,CAGGptB,CAAAA,KAHH,CAGS,MAAM;IAEd,WALD,CAAA,CAAA;IAMH,SAAA;IACJ,OAVD,CAAA,CAAA;;IAaA,MAAI,IAAA,IAAA,CAAKiuB,SAAL,EAAJ,EAAsB;IAClB,QAAK73B,IAAAA,CAAAA,MAAL,CAAY5J,IAAZ,CAAiBQ,GAAjB,CAAsB+S,CAAAA,IAAtB,CAA2B,MAAM;IAC7BirB,UAAAA,OAAO,EAAA,CAAA;IACV,SAFD,CAAA,CAEGhrB,KAFH,CAES,MAAM;IACX,UAAA,IAAA,CAAK5J,MAAL,CAAY9G,KAAZ,EAAoByQ,CAAAA,IAApB,CAAyB,MAAM;IAC3BwsB,YAAAA,MAAM,EAAA,CAAA;IACT,WAFD,CAAA,CAAA;IAGH,SAND,CAAA,CAAA;IAOH,OARD,MAQO;IACH,QAAKn2B,IAAAA,CAAAA,MAAL,CAAYsK,IAAZ,CAAiBxR,MAAM,CAACE,iBAAxB,EAA2C,MAAM;IAC7C,UAAKgH,IAAAA,CAAAA,MAAL,CAAY5J,IAAZ,CAAiBQ,GAAjB,CAAsB+S,CAAAA,IAAtB,CAA2B,MAAM;IAC7BirB,YAAAA,OAAO,EAAA,CAAA;IACV,WAFD,CAAA,CAEGhrB,KAFH,CAES,MAAM;IACX,YAAA,IAAA,CAAK5J,MAAL,CAAY9G,KAAZ,EAAoByQ,CAAAA,IAApB,CAAyB,MAAM;IAC3BwsB,cAAAA,MAAM,EAAA,CAAA;IACT,aAFD,CAAA,CAAA;IAGH,WAND,CAAA,CAAA;IAOH,SARD,CAAA,CAAA;IASH,OAAA;IACJ,KA7GM,CAAP,CAAA;IA8GH,GAAA;IAED;IACJ;IACA;;;IACI57B,EAAAA,MAAM,GAAG;IACL,IAAKyF,IAAAA,CAAAA,MAAL,CAAYzF,MAAZ,EAAA,CAAA;IACH,GAAA;IAED;IACJ;IACA;IACA;;;IACIu9B,EAAAA,aAAa,CAAChvB,IAAD,EAAO;IAChBA,IAAAA,IAAI,GAAGkJ,MAAM,CAAClJ,IAAD,CAAb,CADgB;;IAGhB,IAAK9I,IAAAA,CAAAA,MAAL,CAAYi2B,YAAZ,CAAyB;IACrBnhC,MAAAA,WAAW,EAAEgU,IAAI,GAAG,IAAA;IADC,KAAzB,EAHgB;;IAOhB,IAAK9I,IAAAA,CAAAA,MAAL,CAAYqb,aAAZ,IAA6B,IAAA,CAAKrb,MAAL,CAAYqb,aAAZ,CAA0BuB,gBAA1B,CAA2C;IACpEjf,MAAAA,GAAG,EAAE,aAD+D;IAEpE8G,MAAAA,KAAK,EAAEqE,IAAI,GAAG,IAAA;IAFsD,KAA3C,CAA7B,CAAA;IAIH,GAAA;IAED;IACJ;IACA;IACA;;;IACIivB,EAAAA,SAAS,CAACC,GAAD,EAAM;IACXA,IAAAA,GAAG,GAAGhW,QAAQ,CAACgW,GAAD,EAAM,EAAN,CAAd,CAAA;IACA,IAAMC,MAAAA,IAAI,GAAG,CAAC,CAAD,EAAI,EAAJ,EAAQ,GAAR,CAAb,CAAA;;IACA,IAAA,IAAI,IAAKr5B,CAAAA,IAAL,CAAU/H,MAAV,KAAqBmhC,GAArB,IAA4BC,IAAI,CAAC9b,OAAL,CAAa6b,GAAb,CAAsB,KAAA,CAAC,CAAvD,EAA0D;IACtD,MAAA,OAAA;IACH,KAAA;;IACD,IAAKh4B,IAAAA,CAAAA,MAAL,CAAYi2B,YAAZ,CAAyB;IACrBp/B,MAAAA,MAAM,EAAEmhC,GAAAA;IADa,KAAzB,CAAA,CAAA;IAGA,IAAA,IAAA,CAAKz9B,MAAL,EAAA,CAAA;IACH,GAAA;IAED;IACJ;IACA;IACA;;;IACIs9B,EAAAA,SAAS,GAAG;IACR,IAAO,OAAA,IAAA,CAAK73B,MAAL,CAAYyJ,MAAnB,CAAA;IACH,GAAA;IAED;IACJ;IACA;;;IACIyuB,EAAAA,eAAe,GAAG;IACd,IAAKl4B,IAAAA,CAAAA,MAAL,CAAYi2B,YAAZ,CAAyB;IACrBpgC,MAAAA,YAAY,EAAE,IAAA;IADO,KAAzB,CAAA,CAAA;IAGH,GAAA;IAED;IACJ;IACA;IACA;;;IACIsiC,EAAAA,aAAa,CAACphB,IAAD,EAAO;IAChB,IAAA,MAAM7gB,UAAU,GAAG,CAAC,CAAC6gB,IAArB,CAAA;;IACA,IAAA,IAAI,KAAK/W,MAAL,CAAY9J,UAAZ,KAA2BA,UAA/B,EAA2C;IACvC,MAAA,IAAA,CAAK8J,MAAL,CAAY9J,UAAZ,GAAyBA,UAAzB,CAAA;IACH,KAAA;IACJ,GAAA;IAED;IACJ;IACA;IACA;IACA;IACA;IACA;;;IACIC,EAAAA,UAAU,CAACqb,QAAD,EAAWC,MAAX,EAAmBC,OAAnB,EAA4BrP,IAA5B,EAAkC;IACxC,IAAA,OAAO,IAAKrC,CAAAA,MAAL,CAAYzH,KAAZ,CAAkBpC,UAAlB,CAA6Bqb,QAA7B,EAAuCC,MAAvC,EAA+CC,OAA/C,EAAwDrP,IAAxD,CAAP,CAAA;IACH,GAAA;IAED;IACJ;IACA;IACA;IACA;IACA;;;IACI0X,EAAAA,WAAW,CAACjX,QAAD,EAAW2W,QAAX,EAAqB;IAC5B,IAAA,OAAO,IAAIkb,OAAJ,CAAY,CAACC,OAAD,EAAUuB,MAAV,KAAqB;IACpC,MAAA,IAAI,IAAKn2B,CAAAA,MAAL,CAAY/G,OAAhB,EAAyB;IACrB,QAAA,IAAA,CAAK+G,MAAL,CAAY+Z,WAAZ,CAAwBjX,QAAxB,EAAkC2W,QAAlC,CAAA,CAAA;IACAmb,QAAAA,OAAO,EAAA,CAAA;IACV,OAHD,MAGO;IACHuB,QAAAA,MAAM,EAAA,CAAA;IACT,OAAA;IACJ,KAPM,CAAP,CAAA;IAQH,GAAA;;IAEDpb,EAAAA,iBAAiB,GAAG;IAChB,IAAA,IAAI,IAAK/a,CAAAA,MAAL,CAAYlG,SAAhB,EAA2B;IACvB,MAAKkG,IAAAA,CAAAA,MAAL,CAAY+a,iBAAZ,EAAA,CAAA;IACH,KAAA;IACJ,GAAA;IAED;IACJ;IACA;IACA;;;IACI/E,EAAAA,SAAS,GAAG;IACR,IAAO,OAAA,IAAA,CAAKhW,MAAL,CAAY/G,OAAnB,CAAA;IACH,GAAA;IAED;IACJ;IACA;IACA;;;IACIgd,EAAAA,MAAM,GAAG;IACL,IAAA,OAAO,IAAKjW,CAAAA,MAAL,CAAY3J,KAAZ,GAAoB,IAAA,CAAK2J,MAAL,CAAY3J,KAAZ,CAAkB4f,MAAtC,GAA+C,IAAtD,CAAA;IACH,GAAA;IAED;IACJ;IACA;IACA;;;IACIyD,EAAAA,WAAW,GAAG;IACV,IAAA,OAAO,IAAK1Z,CAAAA,MAAL,CAAY2a,QAAZ,CAAqB7gB,SAA5B,CAAA;IACH,GAAA;;IAjf2B,CAAA;;IAufhC4L,MAAM,CAACkxB,SAAP,GAAmBA,SAAnB;;;;;;;;"} \ No newline at end of file diff --git a/dist/decoder.wasm b/dist/decoder.wasm index dd8e4a4bbe33e14f55172fe40dd614e373e21be8..3cf0b72bcc6aa7bc6e7f65ed63024097acf8f6a5 100755 GIT binary patch delta 1583 zcmYLJU2GIp6uv+6*Us#6TUuGM%H8P}W+}xkEwi;OI2UYcftZr$3yo-r(Xhk>5;Z1j zwulA|8VL8H7%*v&2OiX*8`GpUMiZhy6Jzv2#Aqvqga?hp7}3O_-<>V8$=Nygo;%<9 z&N<(mZ*+1>Cubk_+8x`qx#PMHcWvA8T;dVV>wCPbzUc0IaHO-)(>GGSZ!j598|%B; zZe;9xue6p*dS{q-K0ncSZRw;w5PnIU^l0bPcPkRJHIgVVW|1V46nRwUp4q61HTqI# zh5GuZLc3mFkjnyfVumZS_m>^1yILnthaQP=vw`3*Hd(z{-NtI?bmx&ZqKimRB}mLIFVfRODl!-U$v-RlO$qZ zsP~T*>!-%f(X2@}NK7*1wDiT5-7A{G1N4U#5ymx?{BEN9#gDC$h*-C+N@%ZsWYuW0 zKFwm2d?OEAr0+MOhKLd2q@JW=-Ex1+VqJkGn@O2j$aqa(U9}=B{-iN$1M=%4W{U~X0JJtZl1tTl-YLd-Nd^`O}+oZIcEemk%`%-#yJ4z`P-*IrjqJk`f|0D z(Z0oiftsk5`FRU(fawB5VRlMBL(C&$1EDjN`ZQv>kbxtWj`&D~EM_^0wHnRa0jT2a zn)ECvJ7%ut1@Wy&BM*cGC_IrBBb<;8Wzy2Eyn``$RS3*f>WDd^$U_<8ORkPUHXfdr zKY(Mw`QyrD%Qp9p4&IQVg=XO_T`ny#*Xk?cqp|w${?F(e_1X11yO#C>(KRwPj*~h% z8XI(sdc}Y~`RG`4uNiV9LU;XB8)(RFtHJw1wpRjKCPhHUHtX*gbiutc3clkFk;g~zfr4zVbv zj()<0m**y+=peFAoykgbU3}>^>gUo?Z=HpZ&_C&lwZesKE;EQ(5vzn;1xChPxx?UK zsorX6q++L6<1TYCU<<7Q_Ystf!5wMzJ$zqog)v%mADJQY-`)j~@Kr6(jHb_y|4e&X?W=<&KYK1(~yB*3jP67QB{r_RCo-G}CPQy7DBm<6+84$Osl zuqIeD%%7g$9UOZzxcp)8eG5?&oEY1xJi#V~t!3)?^2(z08Z1$Qc>)(}$?c`3G5LSkG(A}>aL z*+osj5EUJgYQTi334K6Q*=Q3`qNWKpjlTGxHbxLb;sa`9jP=2a-`s`3X3w4P%sF%B zoH^gjySntPF3mmWwb`!C9oKcZYuk?J5|421)SmWk_+snBW9dxK*0J310}qz+s#u#! ztcLde*IWDh^+c3%{yaVS>pHEEM&D3RkEai}kDRPlt0K=mN$$X`B+4s`ZoQl?(nh^L zvu(mxr!R6vZhz;l5cLl9K#(+1;!s30M4kGKE2dWPU4W@cg~FCpiE@VAjV$iMBsLLd zli5s>HtQRiC+Rjl+A%xR@$Ix=Y0sUsk21;^mONV(@?y`CaHLlzTDZqeqe(?h-4JWu>gsXJhPzP)GM8v z^ro&Y+w*?Xm~UR>IR+p~P?BZrNc;w)=fqO0|C&YZ3aXZeB978HY9ykd-{{IVY?nmZ zl8K`JvTKx8FKNGf4B71KE+h-RgoJf(Cg7)DJZqzv9r|2%n(ov~-OtkFwUM5eT_{%u zhoV`BIu%K>EU=J;0r-m+hxo|jZ<=EX9Sl9x=18XaC|oQ6T1H*Ibo9ZYU-nV;mMcCK zkz(n$%`z{AN+dQ4FxZ$knm)6w zy~2G!j^w`=X44!yjx0t%BCv? zsy{=CFTglgLkC;rCS)J>pa%8Au)wvETtL7u- zSc|M=&fZ)AGr2;KC^3qIr;5fifTWjfG~_}$Nl?mC#d6B2vk}*)4%`e{sNSD#LJ+$(GStrdKt0k~}``S`saAAqCxx`05IG!F#s(I4j# zQ245Xr8r{K?#Mg{acs~8PXQRi5#1O|hj4~e4^O{G&(waLzC<^gHY3q`zr8!aj=@W{ z1IKCyD1<>c#Ddrm2jW6JNCTu1;?LI(1aH0?T)hx1w-8nJ{Bxho?_CM@{=fv8IlCBk j(ZtM^#V|ed(_$FRuPufLDNP)kS_&ae^HWRByLSE$bDc{c diff --git a/dist/jessibuca.js b/dist/jessibuca.js index dfb012b0..b0b0f474 100644 --- a/dist/jessibuca.js +++ b/dist/jessibuca.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).jessibuca=t()}(this,(function(){"use strict";const e=0,t=1,i="flv",o="m7s",r={videoBuffer:1e3,isResize:!0,isFullResize:!1,isFlv:!1,debug:!1,hotKey:!1,loadingTimeout:10,heartTimeout:5,timeout:10,loadingTimeoutReplay:!1,heartTimeoutReplay:!1,loadingTimeoutReplayTimes:3,heartTimeoutReplayTimes:3,supportDblclickFullscreen:!1,showBandwidth:!1,keepScreenOn:!1,isNotMute:!1,hasAudio:!0,hasVideo:!0,operateBtns:{fullscreen:!1,screenshot:!1,play:!1,audio:!1,record:!1},controlAutoHide:!1,hasControl:!1,loadingText:"",background:"",decoder:"decoder.js",url:"",rotate:0,forceNoOffscreen:!0,hiddenAutoPause:!1,protocol:t,demuxType:i,useWCS:!1,wcsUseVideoRender:!1,useMSE:!1,useOffscreen:!1,autoWasm:!0,wasmDecodeErrorReplay:!0,openWebglAlignment:!1},s="init",A="initVideo",n="render",a="playAudio",d="initAudio",c="audioCode",l="videoCode",u="wasmError",h="Invalid NAL unit size",p=1,m=2,g=8,f=9,b="init",y="decode",v="audioDecode",w="close",S="updateConfig",E={fullscreen:"fullscreen$2",webFullscreen:"webFullscreen",decoderWorkerInit:"decoderWorkerInit",play:"play",playing:"playing",pause:"pause",mute:"mute",load:"load",loading:"loading",videoInfo:"videoInfo",timeUpdate:"timeUpdate",audioInfo:"audioInfo",log:"log",error:"error",kBps:"kBps",timeout:"timeout",delayTimeout:"delayTimeout",loadingTimeout:"loadingTimeout",stats:"stats",performance:"performance",record:"record",recording:"recording",recordingTimestamp:"recordingTimestamp",recordStart:"recordStart",recordEnd:"recordEnd",recordCreateError:"recordCreateError",buffer:"buffer",videoFrame:"videoFrame",start:"start",metadata:"metadata",resize:"resize",streamEnd:"streamEnd",streamSuccess:"streamSuccess",streamMessage:"streamMessage",streamError:"streamError",volumechange:"volumechange",destroy:"destroy",mseSourceOpen:"mseSourceOpen",mseSourceClose:"mseSourceClose",mseSourceBufferError:"mseSourceBufferError",mseSourceBufferBusy:"mseSourceBufferBusy",videoWaiting:"videoWaiting",videoTimeUpdate:"videoTimeUpdate",videoSyncAudio:"videoSyncAudio",playToRenderTimes:"playToRenderTimes"},B={load:E.load,timeUpdate:E.timeUpdate,videoInfo:E.videoInfo,audioInfo:E.audioInfo,error:E.error,kBps:E.kBps,log:E.log,start:E.start,timeout:E.timeout,loadingTimeout:E.loadingTimeout,delayTimeout:E.delayTimeout,fullscreen:"fullscreen",play:E.play,pause:E.pause,mute:E.mute,stats:E.stats,performance:E.performance,recordingTimestamp:E.recordingTimestamp,recordStart:E.recordStart,recordEnd:E.recordEnd,playToRenderTimes:E.playToRenderTimes},C={playError:"playIsNotPauseOrUrlIsNull",fetchError:"fetchError",websocketError:"websocketError",webcodecsH265NotSupport:"webcodecsH265NotSupport",mediaSourceH265NotSupport:"mediaSourceH265NotSupport",wasmDecodeError:"wasmDecodeError"},R="notConnect",k="open",T="close",I="error",x={download:"download",base64:"base64",blob:"blob"},D={7:"H264(AVC)",12:"H265(HEVC)"},j=7,L=12,U={10:"AAC",7:"ALAW",8:"MULAW"},F=32,V=33,O=34,M=0,Q=1,W=2,G="mp4",J="webm",P="webcodecs",N="webgl",z="offscreen",Y="key",H="delta",X='video/mp4; codecs="avc1.64002A"',Z="ended",q="open",K="closed",_=1e3,$=27,ee=38,te=40;class ie{constructor(e){this.log=function(t){if(e._opt.debug){for(var i=arguments.length,o=new Array(i>1?i-1:0),r=1;r1?i-1:0),r=1;r1?i-1:0),r=1;r3&&void 0!==arguments[3]?arguments[3]:{};if(!e)return;if(Array.isArray(t))return t.map((t=>this.proxy(e,t,i,o)));e.addEventListener(t,i,o);const r=()=>e.removeEventListener(t,i,o);return this.destroys.push(r),r}destroy(){this.master.debug&&this.master.debug.log("Events","destroy"),this.destroys.forEach((e=>e()))}}var re="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function se(e,t){return e(t={exports:{}},t.exports),t.exports}var Ae=se((function(e){!function(){var t="undefined"!=typeof window&&void 0!==window.document?window.document:{},i=e.exports,o=function(){for(var e,i=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled","fullscreenchange","fullscreenerror"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled","webkitfullscreenchange","webkitfullscreenerror"],["webkitRequestFullScreen","webkitCancelFullScreen","webkitCurrentFullScreenElement","webkitCancelFullScreen","webkitfullscreenchange","webkitfullscreenerror"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled","mozfullscreenchange","mozfullscreenerror"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled","MSFullscreenChange","MSFullscreenError"]],o=0,r=i.length,s={};o0&&void 0!==arguments[0]?arguments[0]:"";const t=e.split(","),i=atob(t[1]),o=t[0].replace("data:","").replace(";base64","");let r=i.length,s=new Uint8Array(r);for(;r--;)s[r]=i.charCodeAt(r);return new File([s],"file",{type:o})}function de(e,t){const i=document.createElement("a");i.download=t,i.href=URL.createObjectURL(e),i.click(),setTimeout((()=>{URL.revokeObjectURL(e)}),fe()?1e3:0)}function ce(){return(new Date).getTime()}function le(e,t,i){return Math.max(Math.min(e,Math.max(t,i)),Math.min(t,i))}function ue(e,t,i){if(e)return"object"==typeof t&&Object.keys(t).forEach((i=>{ue(e,i,t[i])})),e.style[t]=i,e}function he(e,t){let i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(!e)return 0;const o=getComputedStyle(e,null).getPropertyValue(t);return i?parseFloat(o):o}function pe(){return performance&&"function"==typeof performance.now?performance.now():Date.now()}function me(e){let t=0,i=pe();return o=>{t+=o;const r=pe(),s=r-i;s>=1e3&&(e(t/s*1e3),i=r,t=0)}}function ge(){return/iphone|ipod|android.*mobile|windows.*phone|blackberry.*mobile/i.test(window.navigator.userAgent.toLowerCase())}function fe(){const e=window.navigator.userAgent.toLowerCase();return e&&/iphone|ipad|ipod|ios/.test(e)}function be(e){if(null==e||""===e)return"0 KB/S";let t=parseFloat(e);return t=t.toFixed(2),t+"KB/S"}function ye(e){return null==e}function ve(e){return!ye(e)}Ae.isEnabled,(()=>{try{if("object"==typeof WebAssembly&&"function"==typeof WebAssembly.instantiate){const e=new WebAssembly.Module(Uint8Array.of(0,97,115,109,1,0,0,0));if(e instanceof WebAssembly.Module)return new WebAssembly.Instance(e)instanceof WebAssembly.Instance}}catch(e){}})();class we{on(e,t,i){const o=this.e||(this.e={});return(o[e]||(o[e]=[])).push({fn:t,ctx:i}),this}once(e,t,i){const o=this;function r(){o.off(e,r);for(var s=arguments.length,A=new Array(s),n=0;n1?i-1:0),r=1;r{delete i[e]})),void delete this.e;const o=i[e],r=[];if(o&&t)for(let e=0,i=o.length;e{var i=["attribute vec4 vertexPos;","attribute vec4 texturePos;","varying vec2 textureCoord;","void main()","{","gl_Position = vertexPos;","textureCoord = texturePos.xy;","}"].join("\n"),o=["precision highp float;","varying highp vec2 textureCoord;","uniform sampler2D ySampler;","uniform sampler2D uSampler;","uniform sampler2D vSampler;","const mat4 YUV2RGB = mat4","(","1.1643828125, 0, 1.59602734375, -.87078515625,","1.1643828125, -.39176171875, -.81296875, .52959375,","1.1643828125, 2.017234375, 0, -1.081390625,","0, 0, 0, 1",");","void main(void) {","highp float y = texture2D(ySampler, textureCoord).r;","highp float u = texture2D(uSampler, textureCoord).r;","highp float v = texture2D(vSampler, textureCoord).r;","gl_FragColor = vec4(y, u, v, 1) * YUV2RGB;","}"].join("\n");t&&e.pixelStorei(e.UNPACK_ALIGNMENT,1);var r=e.createShader(e.VERTEX_SHADER);e.shaderSource(r,i),e.compileShader(r),e.getShaderParameter(r,e.COMPILE_STATUS)||console.log("Vertex shader failed to compile: "+e.getShaderInfoLog(r));var s=e.createShader(e.FRAGMENT_SHADER);e.shaderSource(s,o),e.compileShader(s),e.getShaderParameter(s,e.COMPILE_STATUS)||console.log("Fragment shader failed to compile: "+e.getShaderInfoLog(s));var A=e.createProgram();e.attachShader(A,r),e.attachShader(A,s),e.linkProgram(A),e.getProgramParameter(A,e.LINK_STATUS)||console.log("Program failed to compile: "+e.getProgramInfoLog(A)),e.useProgram(A);var n=e.createBuffer();e.bindBuffer(e.ARRAY_BUFFER,n),e.bufferData(e.ARRAY_BUFFER,new Float32Array([1,1,-1,1,1,-1,-1,-1]),e.STATIC_DRAW);var a=e.getAttribLocation(A,"vertexPos");e.enableVertexAttribArray(a),e.vertexAttribPointer(a,2,e.FLOAT,!1,0,0);var d=e.createBuffer();e.bindBuffer(e.ARRAY_BUFFER,d),e.bufferData(e.ARRAY_BUFFER,new Float32Array([1,0,0,0,1,1,0,1]),e.STATIC_DRAW);var c=e.getAttribLocation(A,"texturePos");function l(t,i){var o=e.createTexture();return e.bindTexture(e.TEXTURE_2D,o),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.bindTexture(e.TEXTURE_2D,null),e.uniform1i(e.getUniformLocation(A,t),i),o}e.enableVertexAttribArray(c),e.vertexAttribPointer(c,2,e.FLOAT,!1,0,0);var u=l("ySampler",0),h=l("uSampler",1),p=l("vSampler",2);return{render:function(t,i,o,r,s){e.viewport(0,0,t,i),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,u),e.texImage2D(e.TEXTURE_2D,0,e.LUMINANCE,t,i,0,e.LUMINANCE,e.UNSIGNED_BYTE,o),e.activeTexture(e.TEXTURE1),e.bindTexture(e.TEXTURE_2D,h),e.texImage2D(e.TEXTURE_2D,0,e.LUMINANCE,t/2,i/2,0,e.LUMINANCE,e.UNSIGNED_BYTE,r),e.activeTexture(e.TEXTURE2),e.bindTexture(e.TEXTURE_2D,p),e.texImage2D(e.TEXTURE_2D,0,e.LUMINANCE,t/2,i/2,0,e.LUMINANCE,e.UNSIGNED_BYTE,s),e.drawArrays(e.TRIANGLE_STRIP,0,4)},destroy:function(){try{e.deleteProgram(A),e.deleteBuffer(n),e.deleteBuffer(d),e.deleteTexture(u),e.deleteTexture(h),e.deleteBuffer(p)}catch(e){}}}})(this.contextGl,this.player._opt.openWebglAlignment);this.contextGlRender=e.render,this.contextGlDestroy=e.destroy}_initContext2D(){this.context2D=this.$videoElement.getContext("2d")}_initCanvasRender(){this.player._opt.useWCS&&!this._supportOffscreen()?(this.renderType=P,this._initContext2D()):this._supportOffscreen()?(this.renderType=z,this._bindOffscreen()):(this.renderType=N,this._initContextGl())}_supportOffscreen(){return"function"==typeof this.$videoElement.transferControlToOffscreen&&this.player._opt.useOffscreen}_bindOffscreen(){this.bitmaprenderer=this.$videoElement.getContext("bitmaprenderer")}initCanvasViewSize(){this.$videoElement.width=this.videoInfo.width,this.$videoElement.height=this.videoInfo.height,this.resize()}render(e){switch(this.player.videoTimestamp=e.ts,this.renderType){case z:this.bitmaprenderer.transferFromImageBitmap(e.buffer);break;case N:this.contextGlRender(this.$videoElement.width,this.$videoElement.height,e.output[0],e.output[1],e.output[2]);break;case P:this.context2D.drawImage(e.videoFrame,0,0,this.$videoElement.width,this.$videoElement.height)}}screenshot(e,t,i,o){e=e||ce(),o=o||x.download;const r={png:"image/png",jpeg:"image/jpeg",webp:"image/webp"};let s=.92;!r[t]&&x[t]&&(o=t,t="png",i=void 0),"string"==typeof i&&(o=i,i=void 0),void 0!==i&&(s=Number(i));const A=this.$videoElement.toDataURL(r[t]||r.png,s),n=ae(A);return o===x.base64?A:o===x.blob?n:void(o===x.download&&de(n,e))}clearView(){switch(this.renderType){case z:(function(e,t){const i=document.createElement("canvas");return i.width=e,i.height=t,createImageBitmap(i,0,0,e,t)})(this.$videoElement.width,this.$videoElement.height).then((e=>{this.bitmaprenderer.transferFromImageBitmap(e)}));break;case N:this.contextGl.clear(this.contextGl.COLOR_BUFFER_BIT);break;case P:this.context2D.clearRect(0,0,this.$videoElement.width,this.$videoElement.height)}}resize(){this.player.debug.log("canvasVideo","resize");const e=this.player._opt;let t=this.player.width,i=this.player.height;e.hasControl&&!e.controlAutoHide&&(ge()&&this.player.fullscreen?t-=38:i-=38);let o=this.$videoElement.width,r=this.$videoElement.height;const s=e.rotate;let A=(t-o)/2,n=(i-r)/2;270!==s&&90!==s||(o=this.$videoElement.height,r=this.$videoElement.width);const a=t/o,d=i/r;let c=a>d?d:a;e.isResize||a!==d&&(c=a+","+d),e.isFullResize&&(c=a>d?a:d);let l="scale("+c+")";s&&(l+=" rotate("+s+"deg)"),this.$videoElement.style.transform=l,this.$videoElement.style.left=A+"px",this.$videoElement.style.top=n+"px"}}class Be extends Se{constructor(e){super(),this.player=e;const t=document.createElement("video");t.muted=!0,t.style.position="absolute",t.style.top=0,t.style.left=0,e.$container.appendChild(t),this.$videoElement=t,this.videoInfo={width:"",height:"",encType:""};const i=this.player._opt;i.useWCS&&i.wcsUseVideoRender&&(this.trackGenerator=new MediaStreamTrackGenerator({kind:"video"}),t.srcObject=new MediaStream([this.trackGenerator]),this.vwriter=this.trackGenerator.writable.getWriter()),this.resize();const{proxy:o}=this.player.events;o(this.$videoElement,"canplay",(()=>{this.player.debug.log("Video","canplay")})),o(this.$videoElement,"waiting",(()=>{this.player.emit(E.videoWaiting)})),o(this.$videoElement,"timeupdate",(e=>{})),this.player.debug.log("Video","init")}destroy(){this.player.$container.removeChild(this.$videoElement),this.$videoElement&&(this.$videoElement.src="",this.$videoElement=null),this.trackGenerator&&(this.trackGenerator=null),this.vwriter&&(this.trackGenerator=null),this.init=!1,this.off(),this.player.debug.log("Video","destroy")}play(){this.$videoElement.play()}clearView(){}screenshot(e,t,i,o){e=e||ce(),o=o||x.download;let r=.92;!{png:"image/png",jpeg:"image/jpeg",webp:"image/webp"}[t]&&x[t]&&(o=t,t="png",i=void 0),"string"==typeof i&&(o=i,i=void 0),void 0!==i&&(r=Number(i));const s=this.$videoElement;let A=document.createElement("canvas");A.width=s.videoWidth,A.height=s.videoHeight;A.getContext("2d").drawImage(s,0,0,A.width,A.height);const n=A.toDataURL(x[t]||x.png,r),a=ae(n);return o===x.base64?n:o===x.blob?a:void(o===x.download&&de(a,e))}initCanvasViewSize(){this.resize()}render(e){this.vwriter&&this.vwriter.write(e.videoFrame)}resize(){let e=this.player.width,t=this.player.height;const i=this.player._opt,o=i.rotate;i.hasControl&&!i.controlAutoHide&&(ge()&&this.player.fullscreen?e-=38:t-=38),this.$videoElement.width=e,this.$videoElement.height=t,270!==o&&90!==o||(this.$videoElement.width=t,this.$videoElement.height=e);let r=(e-this.$videoElement.width)/2,s=(t-this.$videoElement.height)/2,A="contain";i.isResize||(A="fill"),i.isFullResize&&(A="none"),this.$videoElement.style.objectFit=A,this.$videoElement.style.transform="rotate("+o+"deg)",this.$videoElement.style.left=r+"px",this.$videoElement.style.top=s+"px"}}class Ce{constructor(e){return new(Ce.getLoaderFactory(e._opt))(e)}static getLoaderFactory(e){return e.useMSE||e.useWCS&&!e.useOffscreen&&e.wcsUseVideoRender?Be:Ee}}class Re extends we{constructor(e){super(),this.bufferList=[],this.player=e,this.scriptNode=null,this.hasInitScriptNode=!1,this.audioContextChannel=null,this.audioContext=new(window.AudioContext||window.webkitAudioContext),this.gainNode=this.audioContext.createGain();const t=this.audioContext.createBufferSource();t.buffer=this.audioContext.createBuffer(1,1,22050),t.connect(this.audioContext.destination),t.noteOn?t.noteOn(0):t.start(0),this.audioBufferSourceNode=t,this.mediaStreamAudioDestinationNode=this.audioContext.createMediaStreamDestination(),this.audioEnabled(!0),this.gainNode.gain.value=0,this.playing=!1,this.audioSyncVideoOption={diff:null},this.audioInfo={encType:"",channels:"",sampleRate:""},this.init=!1,this.hasAudio=!1,this.on(E.videoSyncAudio,(e=>{this.audioSyncVideoOption=e})),this.player.debug.log("AudioContext","init")}destroy(){this.closeAudio(),this.audioContext.close(),this.audioContext=null,this.gainNode=null,this.init=!1,this.hasAudio=!1,this.playing=!1,this.scriptNode&&(this.scriptNode.onaudioprocess=ne,this.scriptNode=null),this.audioBufferSourceNode=null,this.mediaStreamAudioDestinationNode=null,this.hasInitScriptNode=!1,this.audioSyncVideoOption={diff:null},this.audioInfo={encType:"",channels:"",sampleRate:""},this.off(),this.player.debug.log("AudioContext","destroy")}updateAudioInfo(e){e.encTypeCode&&(this.audioInfo.encType=U[e.encTypeCode]),e.channels&&(this.audioInfo.channels=e.channels),e.sampleRate&&(this.audioInfo.sampleRate=e.sampleRate),this.audioInfo.sampleRate&&this.audioInfo.channels&&this.audioInfo.encType&&!this.init&&(this.player.emit(E.audioInfo,this.audioInfo),this.init=!0)}get isPlaying(){return this.playing}get isMute(){return 0===this.gainNode.gain.value||this.isStateSuspended()}get volume(){return this.gainNode.gain.value}get bufferSize(){return this.bufferList.length}initScriptNode(){if(this.playing=!0,this.hasInitScriptNode)return;const e=this.audioInfo.channels,t=this.audioContext.createScriptProcessor(1024,0,e);t.onaudioprocess=t=>{const i=t.outputBuffer;if(this.bufferList.length&&this.playing){if(!this.player._opt.useWCS&&!this.player._opt.useMSE){if(this.audioSyncVideoOption.diff>_)return void this.player.debug.warn("AudioContext",`audioSyncVideoOption more than diff :${this.audioSyncVideoOption.diff}, waiting`);if(this.audioSyncVideoOption.diff<-1e3){this.player.debug.warn("AudioContext",`audioSyncVideoOption less than diff :${this.audioSyncVideoOption.diff}, dropping`);let e=this.bufferList.shift();for(;e.ts-this.player.videoTimestamp<-1e3&&this.bufferList.length>0;)e=this.bufferList.shift();if(0===this.bufferList.length)return}}if(0===this.bufferList.length)return;const t=this.bufferList.shift();t&&t.ts&&(this.player.audioTimestamp=t.ts);for(let o=0;o20&&(this.player.debug.warn("AudioContext",`bufferList is large: ${this.bufferList.length}`),this.bufferList.length>50&&this.bufferList.shift()))}pause(){this.audioSyncVideoOption={diff:null},this.playing=!1,this.clear()}resume(){this.playing=!0}}class ke{constructor(e){return new(ke.getLoaderFactory())(e)}static getLoaderFactory(){return Re}}class Te extends we{constructor(e){super(),this.player=e,this.playing=!1,this.abortController=new AbortController,this.streamRate=me((t=>{e.emit(E.kBps,(t/1024).toFixed(2))})),e.debug.log("FetchStream","init")}destroy(){this.abort(),this.off(),this.streamRate=null,this.player.debug.log("FetchStream","destroy")}fetchStream(e){const{demux:t}=this.player;this.player._times.streamStart=ce(),fetch(e,{signal:this.abortController.signal}).then((e=>{const i=e.body.getReader();this.emit(E.streamSuccess);const o=()=>{i.read().then((e=>{let{done:i,value:r}=e;i?t.close():(this.streamRate&&this.streamRate(r.byteLength),t.dispatch(r),o())})).catch((e=>{t.close(),this.emit(C.fetchError,e),this.player.emit(E.error,C.fetchError),this.abort()}))};o()})).catch((e=>{this.abort(),this.emit(C.fetchError,e),this.player.emit(E.error,C.fetchError)}))}abort(){this.abortController&&(this.abortController.abort(),this.abortController=null)}}class Ie extends we{constructor(e){super(),this.player=e,this.socket=null,this.socketStatus=R,this.wsUrl=null,this.streamRate=me((t=>{e.emit(E.kBps,(t/1024).toFixed(2))})),e.debug.log("WebsocketLoader","init")}destroy(){this.socket&&(this.socket.close(),this.socket=null),this.socketStatus=R,this.streamRate=null,this.wsUrl=null,this.off(),this.player.debug.log("websocketLoader","destroy")}_createWebSocket(){const e=this.player,{debug:t,events:{proxy:i},demux:o}=e;this.socket=new WebSocket(this.wsUrl),this.socket.binaryType="arraybuffer",i(this.socket,"open",(()=>{this.emit(E.streamSuccess),t.log("websocketLoader","socket open"),this.socketStatus=k})),i(this.socket,"message",(e=>{this.streamRate&&this.streamRate(e.data.byteLength),this._handleMessage(e.data)})),i(this.socket,"close",(()=>{t.log("websocketLoader","socket close"),this.emit(E.streamEnd),this.socketStatus=T})),i(this.socket,"error",(e=>{t.log("websocketLoader","socket error"),this.emit(C.websocketError,e),this.player.emit(E.error,C.websocketError),this.socketStatus=I,o.close(),t.log("websocketLoader","socket error:",e)}))}_handleMessage(e){const{demux:t}=this.player;t?t.dispatch(e):this.player.debug.warn("websocketLoader","websocket handle message demux is null")}fetchStream(e){this.player._times.streamStart=ce(),this.wsUrl=e,this._createWebSocket()}}class xe{constructor(e){return new(xe.getLoaderFactory(e._opt.protocol))(e)}static getLoaderFactory(i){return i===t?Te:i===e?Ie:void 0}}var De=se((function(e){function t(e,r){if(!e)throw"First parameter is required.";r=new i(e,r=r||{type:"video"});var s=this;function A(t){t&&(r.initCallback=function(){t(),t=r.initCallback=null});var i=new o(e,r);(h=new i(e,r)).record(),u("recording"),r.disableLogs||console.log("Initialized recorderType:",h.constructor.name,"for output-type:",r.type)}function n(e){if(e=e||function(){},h){if("paused"===s.state)return s.resumeRecording(),void setTimeout((function(){n(e)}),1);"recording"===s.state||r.disableLogs||console.warn('Recording state should be: "recording", however current state is: ',s.state),r.disableLogs||console.log("Stopped recording "+r.type+" stream."),"gif"!==r.type?h.stop(t):(h.stop(),t()),u("stopped")}else m();function t(t){if(h){Object.keys(h).forEach((function(e){"function"!=typeof h[e]&&(s[e]=h[e])}));var i=h.blob;if(!i){if(!t)throw"Recording failed.";h.blob=i=t}if(i&&!r.disableLogs&&console.log(i.type,"->",f(i.size)),e){var o;try{o=c.createObjectURL(i)}catch(e){}"function"==typeof e.call?e.call(s,o):e(o)}r.autoWriteToDisk&&d((function(e){var t={};t[r.type+"Blob"]=e,I.Store(t)}))}else"function"==typeof e.call?e.call(s,""):e("")}}function a(e){postMessage((new FileReaderSync).readAsDataURL(e))}function d(e,t){if(!e)throw"Pass a callback function over getDataURL.";var i=t?t.blob:(h||{}).blob;if(!i)return r.disableLogs||console.warn("Blob encoder did not finish its job yet."),void setTimeout((function(){d(e,t)}),1e3);if("undefined"==typeof Worker||navigator.mozGetUserMedia){var o=new FileReader;o.readAsDataURL(i),o.onload=function(t){e(t.target.result)}}else{var s=function(e){try{var t=c.createObjectURL(new Blob([e.toString(),"this.onmessage = function (eee) {"+e.name+"(eee.data);}"],{type:"application/javascript"})),i=new Worker(t);return c.revokeObjectURL(t),i}catch(e){}}(a);s.onmessage=function(t){e(t.data)},s.postMessage(i)}}function l(e){e=e||0,"paused"!==s.state?"stopped"!==s.state&&(e>=s.recordingDuration?n(s.onRecordingStopped):(e+=1e3,setTimeout((function(){l(e)}),1e3))):setTimeout((function(){l(e)}),1e3)}function u(e){s&&(s.state=e,"function"==typeof s.onStateChanged.call?s.onStateChanged.call(s,e):s.onStateChanged(e))}var h,p='It seems that recorder is destroyed or "startRecording" is not invoked for '+r.type+" recorder.";function m(){!0!==r.disableLogs&&console.warn(p)}var g={startRecording:function(t){return r.disableLogs||console.log("RecordRTC version: ",s.version),t&&(r=new i(e,t)),r.disableLogs||console.log("started recording "+r.type+" stream."),h?(h.clearRecordedData(),h.record(),u("recording"),s.recordingDuration&&l(),s):(A((function(){s.recordingDuration&&l()})),s)},stopRecording:n,pauseRecording:function(){h?"recording"===s.state?(u("paused"),h.pause(),r.disableLogs||console.log("Paused recording.")):r.disableLogs||console.warn("Unable to pause the recording. Recording state: ",s.state):m()},resumeRecording:function(){h?"paused"===s.state?(u("recording"),h.resume(),r.disableLogs||console.log("Resumed recording.")):r.disableLogs||console.warn("Unable to resume the recording. Recording state: ",s.state):m()},initRecorder:A,setRecordingDuration:function(e,t){if(void 0===e)throw"recordingDuration is required.";if("number"!=typeof e)throw"recordingDuration must be a number.";return s.recordingDuration=e,s.onRecordingStopped=t||function(){},{onRecordingStopped:function(e){s.onRecordingStopped=e}}},clearRecordedData:function(){h?(h.clearRecordedData(),r.disableLogs||console.log("Cleared old recorded data.")):m()},getBlob:function(){if(h)return h.blob;m()},getDataURL:d,toURL:function(){if(h)return c.createObjectURL(h.blob);m()},getInternalRecorder:function(){return h},save:function(e){h?b(h.blob,e):m()},getFromDisk:function(e){h?t.getFromDisk(r.type,e):m()},setAdvertisementArray:function(e){r.advertisement=[];for(var t=e.length,i=0;i-1&&"netscape"in window&&/ rv:/.test(navigator.userAgent),p=!u&&!l&&!!navigator.webkitGetUserMedia||y()||-1!==navigator.userAgent.toLowerCase().indexOf("chrome/"),m=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);m&&!p&&-1!==navigator.userAgent.indexOf("CriOS")&&(m=!1,p=!0);var g=window.MediaStream;function f(e){if(0===e)return"0 Bytes";var t=parseInt(Math.floor(Math.log(e)/Math.log(1e3)),10);return(e/Math.pow(1e3,t)).toPrecision(3)+" "+["Bytes","KB","MB","GB","TB"][t]}function b(e,t){if(!e)throw"Blob object is required.";if(!e.type)try{e.type="video/webm"}catch(e){}var i=(e.type||"video/webm").split("/")[1];if(-1!==i.indexOf(";")&&(i=i.split(";")[0]),t&&-1!==t.indexOf(".")){var o=t.split(".");t=o[0],i=o[1]}var r=(t||Math.round(9999999999*Math.random())+888888888)+"."+i;if(void 0!==navigator.msSaveOrOpenBlob)return navigator.msSaveOrOpenBlob(e,r);if(void 0!==navigator.msSaveBlob)return navigator.msSaveBlob(e,r);var s=document.createElement("a");s.href=c.createObjectURL(e),s.download=r,s.style="display:none;opacity:0;color:transparent;",(document.body||document.documentElement).appendChild(s),"function"==typeof s.click?s.click():(s.target="_blank",s.dispatchEvent(new MouseEvent("click",{view:window,bubbles:!0,cancelable:!0}))),c.revokeObjectURL(s.href)}function y(){return"undefined"!=typeof window&&"object"==typeof window.process&&"renderer"===window.process.type||(!("undefined"==typeof process||"object"!=typeof process.versions||!process.versions.electron)||"object"==typeof navigator&&"string"==typeof navigator.userAgent&&navigator.userAgent.indexOf("Electron")>=0)}function v(e,t){return e&&e.getTracks?e.getTracks().filter((function(e){return e.kind===(t||"audio")})):[]}function w(e,t){"srcObject"in t?t.srcObject=e:"mozSrcObject"in t?t.mozSrcObject=e:t.srcObject=e}void 0===g&&"undefined"!=typeof webkitMediaStream&&(g=webkitMediaStream),void 0!==g&&void 0===g.prototype.stop&&(g.prototype.stop=function(){this.getTracks().forEach((function(e){e.stop()}))}),t.invokeSaveAsDialog=b,t.getTracks=v,t.getSeekableBlob=function(e,t){if("undefined"==typeof EBML)throw new Error("Please link: https://www.webrtc-experiment.com/EBML.js");var i=new EBML.Reader,o=new EBML.Decoder,r=EBML.tools,s=new FileReader;s.onload=function(e){o.decode(this.result).forEach((function(e){i.read(e)})),i.stop();var s=r.makeMetadataSeekable(i.metadatas,i.duration,i.cues),A=this.result.slice(i.metadataSize),n=new Blob([s,A],{type:"video/webm"});t(n)},s.readAsArrayBuffer(e)},t.bytesToSize=f,t.isElectron=y;var S={};function E(){if(h||m||l)return!0;var e,t,i=navigator.userAgent,o=""+parseFloat(navigator.appVersion),r=parseInt(navigator.appVersion,10);return(p||u)&&(e=i.indexOf("Chrome"),o=i.substring(e+7)),-1!==(t=o.indexOf(";"))&&(o=o.substring(0,t)),-1!==(t=o.indexOf(" "))&&(o=o.substring(0,t)),r=parseInt(""+o,10),isNaN(r)&&(o=""+parseFloat(navigator.appVersion),r=parseInt(navigator.appVersion,10)),r>=49}function B(e,t){var i=this;if(void 0===e)throw'First argument "MediaStream" is required.';if("undefined"==typeof MediaRecorder)throw"Your browser does not support the Media Recorder API. Please try other modules e.g. WhammyRecorder or StereoAudioRecorder.";if("audio"===(t=t||{mimeType:"video/webm"}).type){var o;if(v(e,"video").length&&v(e,"audio").length)navigator.mozGetUserMedia?(o=new g).addTrack(v(e,"audio")[0]):o=new g(v(e,"audio")),e=o;t.mimeType&&-1!==t.mimeType.toString().toLowerCase().indexOf("audio")||(t.mimeType=p?"audio/webm":"audio/ogg"),t.mimeType&&"audio/ogg"!==t.mimeType.toString().toLowerCase()&&navigator.mozGetUserMedia&&(t.mimeType="audio/ogg")}var r,s=[];function A(){i.timestamps.push((new Date).getTime()),"function"==typeof t.onTimeStamp&&t.onTimeStamp(i.timestamps[i.timestamps.length-1],i.timestamps)}function n(e){return r&&r.mimeType?r.mimeType:e.mimeType||"video/webm"}function a(){s=[],r=null,i.timestamps=[]}this.getArrayOfBlobs=function(){return s},this.record=function(){i.blob=null,i.clearRecordedData(),i.timestamps=[],d=[],s=[];var o=t;t.disableLogs||console.log("Passing following config over MediaRecorder API.",o),r&&(r=null),p&&!E()&&(o="video/vp8"),"function"==typeof MediaRecorder.isTypeSupported&&o.mimeType&&(MediaRecorder.isTypeSupported(o.mimeType)||(t.disableLogs||console.warn("MediaRecorder API seems unable to record mimeType:",o.mimeType),o.mimeType="audio"===t.type?"audio/webm":"video/webm"));try{r=new MediaRecorder(e,o),t.mimeType=o.mimeType}catch(t){r=new MediaRecorder(e)}o.mimeType&&!MediaRecorder.isTypeSupported&&"canRecordMimeType"in r&&!1===r.canRecordMimeType(o.mimeType)&&(t.disableLogs||console.warn("MediaRecorder API seems unable to record mimeType:",o.mimeType)),r.ondataavailable=function(e){if(e.data&&d.push("ondataavailable: "+f(e.data.size)),"number"!=typeof t.timeSlice)!e.data||!e.data.size||e.data.size<100||i.blob?i.recordingCallback&&(i.recordingCallback(new Blob([],{type:n(o)})),i.recordingCallback=null):(i.blob=t.getNativeBlob?e.data:new Blob([e.data],{type:n(o)}),i.recordingCallback&&(i.recordingCallback(i.blob),i.recordingCallback=null));else if(e.data&&e.data.size&&(s.push(e.data),A(),"function"==typeof t.ondataavailable)){var r=t.getNativeBlob?e.data:new Blob([e.data],{type:n(o)});t.ondataavailable(r)}},r.onstart=function(){d.push("started")},r.onpause=function(){d.push("paused")},r.onresume=function(){d.push("resumed")},r.onstop=function(){d.push("stopped")},r.onerror=function(e){e&&(e.name||(e.name="UnknownError"),d.push("error: "+e),t.disableLogs||(-1!==e.name.toString().toLowerCase().indexOf("invalidstate")?console.error("The MediaRecorder is not in a state in which the proposed operation is allowed to be executed.",e):-1!==e.name.toString().toLowerCase().indexOf("notsupported")?console.error("MIME type (",o.mimeType,") is not supported.",e):-1!==e.name.toString().toLowerCase().indexOf("security")?console.error("MediaRecorder security error",e):"OutOfMemory"===e.name?console.error("The UA has exhaused the available memory. User agents SHOULD provide as much additional information as possible in the message attribute.",e):"IllegalStreamModification"===e.name?console.error("A modification to the stream has occurred that makes it impossible to continue recording. An example would be the addition of a Track while recording is occurring. User agents SHOULD provide as much additional information as possible in the message attribute.",e):"OtherRecordingError"===e.name?console.error("Used for an fatal error other than those listed above. User agents SHOULD provide as much additional information as possible in the message attribute.",e):"GenericError"===e.name?console.error("The UA cannot provide the codec or recording option that has been requested.",e):console.error("MediaRecorder Error",e)),function(e){if(!i.manuallyStopped&&r&&"inactive"===r.state)return delete t.timeslice,void r.start(6e5);setTimeout(void 0,1e3)}(),"inactive"!==r.state&&"stopped"!==r.state&&r.stop())},"number"==typeof t.timeSlice?(A(),r.start(t.timeSlice)):r.start(36e5),t.initCallback&&t.initCallback()},this.timestamps=[],this.stop=function(e){e=e||function(){},i.manuallyStopped=!0,r&&(this.recordingCallback=e,"recording"===r.state&&r.stop(),"number"==typeof t.timeSlice&&setTimeout((function(){i.blob=new Blob(s,{type:n(t)}),i.recordingCallback(i.blob)}),100))},this.pause=function(){r&&"recording"===r.state&&r.pause()},this.resume=function(){r&&"paused"===r.state&&r.resume()},this.clearRecordedData=function(){r&&"recording"===r.state&&i.stop(a),a()},this.getInternalRecorder=function(){return r},this.blob=null,this.getState=function(){return r&&r.state||"inactive"};var d=[];this.getAllStates=function(){return d},void 0===t.checkForInactiveTracks&&(t.checkForInactiveTracks=!1);i=this;!function o(){if(r&&!1!==t.checkForInactiveTracks)return!1===function(){if("active"in e){if(!e.active)return!1}else if("ended"in e&&e.ended)return!1;return!0}()?(t.disableLogs||console.log("MediaStream seems stopped."),void i.stop()):void setTimeout(o,1e3)}(),this.name="MediaStreamRecorder",this.toString=function(){return this.name}}function C(e,i){if(!v(e,"audio").length)throw"Your stream has no audio tracks.";var o,r=this,s=[],A=[],n=!1,a=0,d=2,l=(i=i||{}).desiredSampRate;function u(){if(!1===i.checkForInactiveTracks)return!0;if("active"in e){if(!e.active)return!1}else if("ended"in e&&e.ended)return!1;return!0}function h(e,t){function i(e,t){var i,o=e.numberOfAudioChannels,r=e.leftBuffers.slice(0),s=e.rightBuffers.slice(0),A=e.sampleRate,n=e.internalInterleavedLength,a=e.desiredSampRate;function d(e,t,i){var o=Math.round(e.length*(t/i)),r=[],s=Number((e.length-1)/(o-1));r[0]=e[0];for(var A=1;A96e3)&&(i.disableLogs||console.log("sample-rate must be under range 22050 and 96000.")),i.disableLogs||i.desiredSampRate&&console.log("Desired sample-rate: "+i.desiredSampRate);var y=!1;function w(){s=[],A=[],a=0,E=!1,n=!1,y=!1,p=null,r.leftchannel=s,r.rightchannel=A,r.numberOfAudioChannels=d,r.desiredSampRate=l,r.sampleRate=b,r.recordingLength=a,B={left:[],right:[],recordingLength:0}}function S(){o&&(o.onaudioprocess=null,o.disconnect(),o=null),m&&(m.disconnect(),m=null),w()}this.pause=function(){y=!0},this.resume=function(){if(!1===u())throw"Please make sure MediaStream is active.";if(!n)return i.disableLogs||console.log("Seems recording has been restarted."),void this.record();y=!1},this.clearRecordedData=function(){i.checkForInactiveTracks=!1,n&&this.stop(S),S()},this.name="StereoAudioRecorder",this.toString=function(){return this.name};var E=!1;o.onaudioprocess=function(e){if(!y)if(!1===u()&&(i.disableLogs||console.log("MediaStream seems stopped."),o.disconnect(),n=!1),n){E||(E=!0,i.onAudioProcessStarted&&i.onAudioProcessStarted(),i.initCallback&&i.initCallback());var t=e.inputBuffer.getChannelData(0),c=new Float32Array(t);if(s.push(c),2===d){var l=e.inputBuffer.getChannelData(1),h=new Float32Array(l);A.push(h)}a+=f,r.recordingLength=a,void 0!==i.timeSlice&&(B.recordingLength+=f,B.left.push(c),2===d&&B.right.push(h))}else m&&(m.disconnect(),m=null)},p.createMediaStreamDestination?o.connect(p.createMediaStreamDestination()):o.connect(p.destination),this.leftchannel=s,this.rightchannel=A,this.numberOfAudioChannels=d,this.desiredSampRate=l,this.sampleRate=b,r.recordingLength=a;var B={left:[],right:[],recordingLength:0};function C(){n&&"function"==typeof i.ondataavailable&&void 0!==i.timeSlice&&(B.left.length?(h({desiredSampRate:l,sampleRate:b,numberOfAudioChannels:d,internalInterleavedLength:B.recordingLength,leftBuffers:B.left,rightBuffers:1===d?[]:B.right},(function(e,t){var o=new Blob([t],{type:"audio/wav"});i.ondataavailable(o),setTimeout(C,i.timeSlice)})),B={left:[],right:[],recordingLength:0}):setTimeout(C,i.timeSlice))}}function R(e,t){if("undefined"==typeof html2canvas)throw"Please link: https://www.webrtc-experiment.com/screenshot.js";(t=t||{}).frameInterval||(t.frameInterval=10);var i=!1;["captureStream","mozCaptureStream","webkitCaptureStream"].forEach((function(e){e in document.createElement("canvas")&&(i=!0)}));var o,r,s,A=!(!window.webkitRTCPeerConnection&&!window.webkitGetUserMedia||!window.chrome),n=50,a=navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./);if(A&&a&&a[2]&&(n=parseInt(a[2],10)),A&&n<52&&(i=!1),t.useWhammyRecorder&&(i=!1),i)if(t.disableLogs||console.log("Your browser supports both MediRecorder API and canvas.captureStream!"),e instanceof HTMLCanvasElement)o=e;else{if(!(e instanceof CanvasRenderingContext2D))throw"Please pass either HTMLCanvasElement or CanvasRenderingContext2D.";o=e.canvas}else navigator.mozGetUserMedia&&(t.disableLogs||console.error("Canvas recording is NOT supported in Firefox."));this.record=function(){if(s=!0,i&&!t.useWhammyRecorder){var e;"captureStream"in o?e=o.captureStream(25):"mozCaptureStream"in o?e=o.mozCaptureStream(25):"webkitCaptureStream"in o&&(e=o.webkitCaptureStream(25));try{var A=new g;A.addTrack(v(e,"video")[0]),e=A}catch(e){}if(!e)throw"captureStream API are NOT available.";(r=new B(e,{mimeType:t.mimeType||"video/webm"})).record()}else h.frames=[],u=(new Date).getTime(),l();t.initCallback&&t.initCallback()},this.getWebPImages=function(i){if("canvas"===e.nodeName.toLowerCase()){var o=h.frames.length;h.frames.forEach((function(e,i){var r=o-i;t.disableLogs||console.log(r+"/"+o+" frames remaining"),t.onEncodingCallback&&t.onEncodingCallback(r,o);var s=e.image.toDataURL("image/webp",1);h.frames[i].image=s})),t.disableLogs||console.log("Generating WebM"),i()}else i()},this.stop=function(e){s=!1;var o=this;i&&r?r.stop(e):this.getWebPImages((function(){h.compile((function(i){t.disableLogs||console.log("Recording finished!"),o.blob=i,o.blob.forEach&&(o.blob=new Blob([],{type:"video/webm"})),e&&e(o.blob),h.frames=[]}))}))};var d=!1;function c(){h.frames=[],s=!1,d=!1}function l(){if(d)return u=(new Date).getTime(),setTimeout(l,500);if("canvas"===e.nodeName.toLowerCase()){var i=(new Date).getTime()-u;return u=(new Date).getTime(),h.frames.push({image:(o=document.createElement("canvas"),r=o.getContext("2d"),o.width=e.width,o.height=e.height,r.drawImage(e,0,0),o),duration:i}),void(s&&setTimeout(l,t.frameInterval))}var o,r;html2canvas(e,{grabMouse:void 0===t.showMousePointer||t.showMousePointer,onrendered:function(e){var i=(new Date).getTime()-u;if(!i)return setTimeout(l,t.frameInterval);u=(new Date).getTime(),h.frames.push({image:e.toDataURL("image/webp",1),duration:i}),s&&setTimeout(l,t.frameInterval)}})}this.pause=function(){d=!0,r instanceof B&&r.pause()},this.resume=function(){d=!1,r instanceof B?r.resume():s||this.record()},this.clearRecordedData=function(){s&&this.stop(c),c()},this.name="CanvasRecorder",this.toString=function(){return this.name};var u=(new Date).getTime(),h=new T.Video(100)}function k(e,t){function i(e){e=void 0!==e?e:10;var t=(new Date).getTime()-a;return t?s?(a=(new Date).getTime(),setTimeout(i,100)):(a=(new Date).getTime(),n.paused&&n.play(),l.drawImage(n,0,0,c.width,c.height),d.frames.push({duration:t,image:c.toDataURL("image/webp")}),void(r||setTimeout(i,e,e))):setTimeout(i,e,e)}function o(e,t,i,o,r){var s=document.createElement("canvas");s.width=c.width,s.height=c.height;var A,n,a,d=s.getContext("2d"),l=[],u=-1===t,h=t&&t>0&&t<=e.length?t:e.length,p=0,m=0,g=0,f=Math.sqrt(Math.pow(255,2)+Math.pow(255,2)+Math.pow(255,2)),b=i&&i>=0&&i<=1?i:0,y=o&&o>=0&&o<=1?o:0,v=!1;n=-1,a=(A={length:h,functionToLoop:function(t,i){var o,r,s,A=function(){!v&&s-o<=s*y||(u&&(v=!0),l.push(e[i])),t()};if(v)A();else{var n=new Image;n.onload=function(){d.drawImage(n,0,0,c.width,c.height);var e=d.getImageData(0,0,c.width,c.height);o=0,r=e.data.length,s=e.data.length/4;for(var t=0;t127)throw"TrackNumber > 127 not supported";return[128|e.trackNum,e.timecode>>8,255&e.timecode,t].map((function(e){return String.fromCharCode(e)})).join("")+e.frame}({discardable:0,frame:e.data.slice(4),invisible:0,keyframe:1,lacing:0,trackNum:1,timecode:Math.round(t)});return t+=e.duration,{data:i,id:163}})))}function i(e){for(var t=[];e>0;)t.push(255&e),e>>=8;return new Uint8Array(t.reverse())}function o(e){var t=[];e=(e.length%8?new Array(9-e.length%8).join("0"):"")+e;for(var i=0;i1?2*s[0].width:s[0].width;var n=1;3!==e&&4!==e||(n=2),5!==e&&6!==e||(n=3),7!==e&&8!==e||(n=4),9!==e&&10!==e||(n=5),r.height=s[0].height*n}else r.width=A.width||360,r.height=A.height||240;t&&t instanceof HTMLVideoElement&&u(t),s.forEach((function(e,t){u(e,t)})),setTimeout(l,A.frameInterval)}}function u(e,t){if(!o){var i=0,r=0,A=e.width,n=e.height;1===t&&(i=e.width),2===t&&(r=e.height),3===t&&(i=e.width,r=e.height),4===t&&(r=2*e.height),5===t&&(i=e.width,r=2*e.height),6===t&&(r=3*e.height),7===t&&(i=e.width,r=3*e.height),void 0!==e.stream.left&&(i=e.stream.left),void 0!==e.stream.top&&(r=e.stream.top),void 0!==e.stream.width&&(A=e.stream.width),void 0!==e.stream.height&&(n=e.stream.height),s.drawImage(e,i,r,A,n),"function"==typeof e.stream.onRender&&e.stream.onRender(s,i,r,A,n,t)}}function h(e){var i=document.createElement("video");return function(e,t){"srcObject"in t?t.srcObject=e:"mozSrcObject"in t?t.mozSrcObject=e:t.srcObject=e}(e,i),i.className=t,i.muted=!0,i.volume=0,i.width=e.width||A.width||360,i.height=e.height||A.height||240,i.play(),i}function p(t){i=[],(t=t||e).forEach((function(e){if(e.getTracks().filter((function(e){return"video"===e.kind})).length){var t=h(e);t.stream=e,i.push(t)}}))}void 0!==n?c.AudioContext=n:"undefined"!=typeof webkitAudioContext&&(c.AudioContext=webkitAudioContext),this.startDrawingFrames=function(){l()},this.appendStreams=function(t){if(!t)throw"First parameter is required.";t instanceof Array||(t=[t]),t.forEach((function(t){var o=new d;if(t.getTracks().filter((function(e){return"video"===e.kind})).length){var r=h(t);r.stream=t,i.push(r),o.addTrack(t.getTracks().filter((function(e){return"video"===e.kind}))[0])}if(t.getTracks().filter((function(e){return"audio"===e.kind})).length){var s=A.audioContext.createMediaStreamSource(t);A.audioDestination=A.audioContext.createMediaStreamDestination(),s.connect(A.audioDestination),o.addTrack(A.audioDestination.stream.getTracks().filter((function(e){return"audio"===e.kind}))[0])}e.push(o)}))},this.releaseStreams=function(){i=[],o=!0,A.gainNode&&(A.gainNode.disconnect(),A.gainNode=null),A.audioSources.length&&(A.audioSources.forEach((function(e){e.disconnect()})),A.audioSources=[]),A.audioDestination&&(A.audioDestination.disconnect(),A.audioDestination=null),A.audioContext&&A.audioContext.close(),A.audioContext=null,s.clearRect(0,0,r.width,r.height),r.stream&&(r.stream.stop(),r.stream=null)},this.resetVideoStreams=function(e){!e||e instanceof Array||(e=[e]),p(e)},this.name="MultiStreamsMixer",this.toString=function(){return this.name},this.getMixedStream=function(){o=!1;var t=function(){var e;p(),"captureStream"in r?e=r.captureStream():"mozCaptureStream"in r?e=r.mozCaptureStream():A.disableLogs||console.error("Upgrade to latest Chrome or otherwise enable this flag: chrome://flags/#enable-experimental-web-platform-features");var t=new d;return e.getTracks().filter((function(e){return"video"===e.kind})).forEach((function(e){t.addTrack(e)})),r.stream=t,t}(),i=function(){c.AudioContextConstructor||(c.AudioContextConstructor=new c.AudioContext);A.audioContext=c.AudioContextConstructor,A.audioSources=[],!0===A.useGainNode&&(A.gainNode=A.audioContext.createGain(),A.gainNode.connect(A.audioContext.destination),A.gainNode.gain.value=0);var t=0;if(e.forEach((function(e){if(e.getTracks().filter((function(e){return"audio"===e.kind})).length){t++;var i=A.audioContext.createMediaStreamSource(e);!0===A.useGainNode&&i.connect(A.gainNode),A.audioSources.push(i)}})),!t)return;return A.audioDestination=A.audioContext.createMediaStreamDestination(),A.audioSources.forEach((function(e){e.connect(A.audioDestination)})),A.audioDestination.stream}();return i&&i.getTracks().filter((function(e){return"audio"===e.kind})).forEach((function(e){t.addTrack(e)})),e.forEach((function(e){e.fullcanvas})),t}}function j(e,t){e=e||[];var i,o,r=this;(t=t||{elementClass:"multi-streams-mixer",mimeType:"video/webm",video:{width:360,height:240}}).frameInterval||(t.frameInterval=10),t.video||(t.video={}),t.video.width||(t.video.width=360),t.video.height||(t.video.height=240),this.record=function(){var r;i=new D(e,t.elementClass||"multi-streams-mixer"),(r=[],e.forEach((function(e){v(e,"video").forEach((function(e){r.push(e)}))})),r).length&&(i.frameInterval=t.frameInterval||10,i.width=t.video.width||360,i.height=t.video.height||240,i.startDrawingFrames()),t.previewStream&&"function"==typeof t.previewStream&&t.previewStream(i.getMixedStream()),(o=new B(i.getMixedStream(),t)).record()},this.stop=function(e){o&&o.stop((function(t){r.blob=t,e(t),r.clearRecordedData()}))},this.pause=function(){o&&o.pause()},this.resume=function(){o&&o.resume()},this.clearRecordedData=function(){o&&(o.clearRecordedData(),o=null),i&&(i.releaseStreams(),i=null)},this.addStreams=function(r){if(!r)throw"First parameter is required.";r instanceof Array||(r=[r]),e.concat(r),o&&i&&(i.appendStreams(r),t.previewStream&&"function"==typeof t.previewStream&&t.previewStream(i.getMixedStream()))},this.resetVideoStreams=function(e){i&&(!e||e instanceof Array||(e=[e]),i.resetVideoStreams(e))},this.getMixer=function(){return i},this.name="MultiStreamRecorder",this.toString=function(){return this.name}}function L(e,t){var i,o,r;function s(){return new ReadableStream({start:function(o){var r=document.createElement("canvas"),s=document.createElement("video"),A=!0;s.srcObject=e,s.muted=!0,s.height=t.height,s.width=t.width,s.volume=0,s.onplaying=function(){r.width=t.width,r.height=t.height;var e=r.getContext("2d"),n=1e3/t.frameRate,a=setInterval((function(){if(i&&(clearInterval(a),o.close()),A&&(A=!1,t.onVideoProcessStarted&&t.onVideoProcessStarted()),e.drawImage(s,0,0),"closed"!==o._controlledReadableStream.state)try{o.enqueue(e.getImageData(0,0,t.width,t.height))}catch(e){}}),n)},s.play()}})}function A(e,a){if(!t.workerPath&&!a)return i=!1,void fetch("https://unpkg.com/webm-wasm@latest/dist/webm-worker.js").then((function(t){t.arrayBuffer().then((function(t){A(e,t)}))}));if(!t.workerPath&&a instanceof ArrayBuffer){var d=new Blob([a],{type:"text/javascript"});t.workerPath=c.createObjectURL(d)}t.workerPath||console.error("workerPath parameter is missing."),(o=new Worker(t.workerPath)).postMessage(t.webAssemblyPath||"https://unpkg.com/webm-wasm@latest/dist/webm-wasm.wasm"),o.addEventListener("message",(function(e){"READY"===e.data?(o.postMessage({width:t.width,height:t.height,bitrate:t.bitrate||1200,timebaseDen:t.frameRate||30,realtime:t.realtime}),s().pipeTo(new WritableStream({write:function(e){i?console.error("Got image, but recorder is finished!"):o.postMessage(e.data.buffer,[e.data.buffer])}}))):e.data&&(r||n.push(e.data))}))}"undefined"!=typeof ReadableStream&&"undefined"!=typeof WritableStream||console.error("Following polyfill is strongly recommended: https://unpkg.com/@mattiasbuelens/web-streams-polyfill/dist/polyfill.min.js"),(t=t||{}).width=t.width||640,t.height=t.height||480,t.frameRate=t.frameRate||30,t.bitrate=t.bitrate||1200,t.realtime=t.realtime||!0,this.record=function(){n=[],r=!1,this.blob=null,A(e),"function"==typeof t.initCallback&&t.initCallback()},this.pause=function(){r=!0},this.resume=function(){r=!1};var n=[];this.stop=function(e){i=!0;var t=this;!function(e){o?(o.addEventListener("message",(function(t){null===t.data&&(o.terminate(),o=null,e&&e())})),o.postMessage(null)):e&&e()}((function(){t.blob=new Blob(n,{type:"video/webm"}),e(t.blob)}))},this.name="WebAssemblyRecorder",this.toString=function(){return this.name},this.clearRecordedData=function(){n=[],r=!1,this.blob=null},this.blob=null}t.DiskStorage=I,t.GifRecorder=x,t.MultiStreamRecorder=j,t.RecordRTCPromisesHandler=function(e,i){if(!this)throw'Use "new RecordRTCPromisesHandler()"';if(void 0===e)throw'First argument "MediaStream" is required.';var o=this;o.recordRTC=new t(e,i),this.startRecording=function(){return new Promise((function(e,t){try{o.recordRTC.startRecording(),e()}catch(e){t(e)}}))},this.stopRecording=function(){return new Promise((function(e,t){try{o.recordRTC.stopRecording((function(i){o.blob=o.recordRTC.getBlob(),o.blob&&o.blob.size?e(i):t("Empty blob.",o.blob)}))}catch(e){t(e)}}))},this.pauseRecording=function(){return new Promise((function(e,t){try{o.recordRTC.pauseRecording(),e()}catch(e){t(e)}}))},this.resumeRecording=function(){return new Promise((function(e,t){try{o.recordRTC.resumeRecording(),e()}catch(e){t(e)}}))},this.getDataURL=function(e){return new Promise((function(e,t){try{o.recordRTC.getDataURL((function(t){e(t)}))}catch(e){t(e)}}))},this.getBlob=function(){return new Promise((function(e,t){try{e(o.recordRTC.getBlob())}catch(e){t(e)}}))},this.getInternalRecorder=function(){return new Promise((function(e,t){try{e(o.recordRTC.getInternalRecorder())}catch(e){t(e)}}))},this.reset=function(){return new Promise((function(e,t){try{e(o.recordRTC.reset())}catch(e){t(e)}}))},this.destroy=function(){return new Promise((function(e,t){try{e(o.recordRTC.destroy())}catch(e){t(e)}}))},this.getState=function(){return new Promise((function(e,t){try{e(o.recordRTC.getState())}catch(e){t(e)}}))},this.blob=null,this.version="5.6.2"},t.WebAssemblyRecorder=L}));class je extends we{constructor(e){super(),this.player=e,this.fileName="",this.fileType=J,this.isRecording=!1,this.recordingTimestamp=0,this.recordingInterval=null,e.debug.log("Recorder","init")}destroy(){this._reset(),this.player.debug.log("Recorder","destroy")}setFileName(e,t){this.fileName=e,G!==t&&J!==t||(this.fileType=t)}get recording(){return this.isRecording}get recordTime(){return this.recordingTimestamp}startRecord(){const e=this.player.debug,t={type:"video",mimeType:"video/webm;codecs=h264",onTimeStamp:t=>{e.log("Recorder","record timestamp :"+t)},disableLogs:!this.player._opt.debug};try{const e=this.player.video.$videoElement.captureStream(25);if(this.player.audio&&this.player.audio.mediaStreamAudioDestinationNode&&this.player.audio.mediaStreamAudioDestinationNode.stream&&!this.player.audio.isStateSuspended()&&this.player.audio.hasAudio&&this.player._opt.hasAudio){const t=this.player.audio.mediaStreamAudioDestinationNode.stream;if(t.getAudioTracks().length>0){const i=t.getAudioTracks()[0];i&&i.enabled&&e.addTrack(i)}}this.recorder=De(e,t)}catch(t){e.error("Recorder",t),this.emit(E.recordCreateError)}this.recorder&&(this.isRecording=!0,this.player.emit(E.recording,!0),this.recorder.startRecording(),e.log("Recorder","start recording"),this.player.emit(E.recordStart),this.recordingInterval=window.setInterval((()=>{this.recordingTimestamp+=1,this.player.emit(E.recordingTimestamp,this.recordingTimestamp)}),1e3))}stopRecordAndSave(){this.recorder&&this.isRecording&&this.recorder.stopRecording((()=>{this.player.debug.log("Recorder","stop recording"),this.player.emit(E.recordEnd),function(e,t,i){const o=window.URL.createObjectURL(e),r=document.createElement("a");r.href=o,r.download=(t||ce())+"."+(i||J),r.click(),setTimeout((()=>{window.URL.revokeObjectURL(o)}),fe()?1e3:0)}(this.recorder.getBlob(),this.fileName,this.fileType),this._reset(),this.player.emit(E.recording,!1)}))}_reset(){this.isRecording=!1,this.recordingTimestamp=0,this.recorder&&(this.recorder.destroy(),this.recorder=null),this.fileName=null,this.recordingInterval&&clearInterval(this.recordingInterval),this.recordingInterval=null}}class Le{constructor(e){return new(Le.getLoaderFactory())(e)}static getLoaderFactory(){return je}}class Ue{constructor(e){this.player=e,this.decoderWorker=new Worker(e._opt.decoder),this._initDecoderWorker(),e.debug.log("decoderWorker","init")}destroy(){this.decoderWorker.postMessage({cmd:w}),this.decoderWorker.terminate(),this.decoderWorker=null,this.player.debug.log("decoderWorker","destroy")}_initDecoderWorker(){const{debug:e,events:{proxy:t}}=this.player;this.decoderWorker.onmessage=t=>{const i=t.data;switch(i.cmd){case s:e.log("decoderWorker","onmessage:",s),this.player.loaded||this.player.emit(E.load),this.player.emit(E.decoderWorkerInit),this._initWork();break;case l:e.log("decoderWorker","onmessage:",l,i.code),this.player._times.decodeStart||(this.player._times.decodeStart=ce()),this.player.video.updateVideoInfo({encTypeCode:i.code});break;case c:e.log("decoderWorker","onmessage:",c,i.code),this.player.audio&&this.player.audio.updateAudioInfo({encTypeCode:i.code});break;case A:e.log("decoderWorker","onmessage:",A,`width:${i.w},height:${i.h}`),this.player.video.updateVideoInfo({width:i.w,height:i.h}),this.player.video.initCanvasViewSize();break;case d:e.log("decoderWorker","onmessage:",d,`channels:${i.channels},sampleRate:${i.sampleRate}`),this.player.audio&&(this.player.audio.updateAudioInfo(i),this.player.audio.initScriptNode(i));break;case n:this.player.handleRender(),this.player.video.render(i),this.player.emit(E.timeUpdate,i.ts),this.player.updateStats({fps:!0,ts:i.ts,buf:i.delay}),this.player._times.videoStart||(this.player._times.videoStart=ce(),this.player.handlePlayToRenderTimes());break;case a:this.player.playing&&this.player.audio&&this.player.audio.play(i.buffer,i.ts);break;case u:i.message&&-1!==i.message.indexOf(h)&&(this.player.emit(E.error,C.wasmDecodeError),this.player.emit(C.wasmDecodeError));break;default:this.player[i.cmd]&&this.player[i.cmd](i)}}}_initWork(){const e={debug:this.player._opt.debug,forceNoOffscreen:this.player._opt.forceNoOffscreen,useWCS:this.player._opt.useWCS,videoBuffer:this.player._opt.videoBuffer,openWebglAlignment:this.player._opt.openWebglAlignment};this.decoderWorker.postMessage({cmd:b,opt:JSON.stringify(e),sampleRate:this.player.audio&&this.player.audio.audioContext.sampleRate||0})}decodeVideo(e,t,i){const o={type:m,ts:Math.max(t,0),isIFrame:i};this.decoderWorker.postMessage({cmd:y,buffer:e,options:o},[e.buffer])}decodeAudio(e,t){this.player._opt.useWCS&&!this.player._opt.useOffscreen||this.player._opt.useMSE?this._decodeAudioNoDelay(e,t):this._decodeAudio(e,t)}_decodeAudio(e,t){const i={type:p,ts:Math.max(t,0)};this.decoderWorker.postMessage({cmd:y,buffer:e,options:i},[e.buffer])}_decodeAudioNoDelay(e,t){this.decoderWorker.postMessage({cmd:v,buffer:e,ts:Math.max(t,0)},[e.buffer])}updateWorkConfig(e){this.decoderWorker.postMessage({cmd:S,key:e.key,value:e.value})}}class Fe extends we{constructor(e){super(),this.player=e,this.stopId=null,this.firstTimestamp=null,this.startTimestamp=null,this.delay=-1,this.bufferList=[],this.dropping=!1,this.initInterval()}destroy(){this.stopId&&(clearInterval(this.stopId),this.stopId=null),this.firstTimestamp=null,this.startTimestamp=null,this.delay=-1,this.bufferList=[],this.dropping=!1,this.off()}getDelay(e){return e?(this.firstTimestamp?e&&(this.delay=Date.now()-this.startTimestamp-(e-this.firstTimestamp)):(this.firstTimestamp=e,this.startTimestamp=Date.now(),this.delay=-1),this.delay):-1}resetDelay(){this.firstTimestamp=null,this.startTimestamp=null,this.delay=-1,this.dropping=!1}initInterval(){this.player.debug.log("common dumex","init Interval");let e=()=>{let e;const t=this.player._opt.videoBuffer;if(this.bufferList.length)if(this.dropping){for(e=this.bufferList.shift(),e.type===p&&0===e.payload[1]&&this._doDecoderDecode(e);!e.isIFrame&&this.bufferList.length;)e=this.bufferList.shift(),e.type===p&&0===e.payload[1]&&this._doDecoderDecode(e);e.isIFrame&&(this.dropping=!1,this._doDecoderDecode(e))}else if(e=this.bufferList[0],-1===this.getDelay(e.ts))this.bufferList.shift(),this._doDecoderDecode(e);else if(this.delay>t+1e3)this.resetDelay(),this.dropping=!0;else for(;this.bufferList.length&&(e=this.bufferList[0],this.getDelay(e.ts)>t);)this.bufferList.shift(),this._doDecoderDecode(e)};e(),this.stopId=setInterval(e,10)}_doDecode(e,t,i,o){const r=this.player;let s={ts:i,type:t,isIFrame:!1};r._opt.useWCS&&!r._opt.useOffscreen||r._opt.useMSE?(t===m&&(s.isIFrame=o),this.pushBuffer(e,s)):t===m?r.decoderWorker&&r.decoderWorker.decodeVideo(e,i,o):t===p&&r._opt.hasAudio&&r.decoderWorker&&r.decoderWorker.decodeAudio(e,i)}_doDecoderDecode(e){const t=this.player,{webcodecsDecoder:i,mseDecoder:o}=t;e.type===p?t._opt.hasAudio&&t.decoderWorker&&t.decoderWorker.decodeAudio(e.payload,e.ts):e.type===m&&(t._opt.useWCS&&!t._opt.useOffscreen?i.decodeVideo(e.payload,e.ts,e.isIFrame):t._opt.useMSE&&o.decodeVideo(e.payload,e.ts,e.isIFrame))}pushBuffer(e,t){t.type===p?this.bufferList.push({ts:t.ts,payload:e,type:p}):t.type===m&&this.bufferList.push({ts:t.ts,payload:e,type:m,isIFrame:t.isIFrame})}close(){}}class Ve extends Fe{constructor(e){super(e),this.input=this._inputFlv(),this.flvDemux=this.dispatchFlvData(this.input),e.debug.log("FlvDemux","init")}destroy(){super.destroy(),this.input=null,this.flvDemux=null,this.player.debug.log("FlvDemux","destroy")}dispatch(e){this.flvDemux(e)}*_inputFlv(){yield 9;const e=new ArrayBuffer(4),t=new Uint8Array(e),i=new Uint32Array(e),o=this.player;for(;;){t[3]=0;const e=yield 15,r=e[4];t[0]=e[7],t[1]=e[6],t[2]=e[5];const s=i[0];t[0]=e[10],t[1]=e[9],t[2]=e[8];let A=i[0];16777215===A&&(t[3]=e[11],A=i[0]);const n=yield s;switch(r){case g:o._opt.hasAudio&&(o.updateStats({abps:n.byteLength}),n.byteLength>0&&this._doDecode(n,p,A));break;case f:if(o._times.demuxStart||(o._times.demuxStart=ce()),o._opt.hasVideo){o.updateStats({vbps:n.byteLength});const e=n[0]>>4==1;n.byteLength>0&&this._doDecode(n,m,A,e)}}}}dispatchFlvData(e){let t=e.next(),i=null;return o=>{let r=new Uint8Array(o);if(i){let e=new Uint8Array(i.length+r.length);e.set(i),e.set(r,i.length),r=e,i=null}for(;r.length>=t.value;){let i=r.slice(t.value);t=e.next(r.slice(0,t.value)),r=i}r.length>0&&(i=r)}}close(){this.input&&this.input.return(null)}}class Oe extends Fe{constructor(e){super(e),e.debug.log("M7sDemux","init")}destroy(){super.destroy(),this.player.debug.log("M7sDemux","destroy")}dispatch(e){const t=this.player,i=new DataView(e),o=i.getUint8(0),r=i.getUint32(1,!1);switch(o){case p:if(t._opt.hasAudio){const i=new Uint8Array(e,5);t.updateStats({abps:i.byteLength}),i.byteLength>0&&this._doDecode(i,o,r)}break;case m:if(t._opt.hasVideo&&(t._times.demuxStart||(t._times.demuxStart=ce()),i.byteLength>5)){const s=new Uint8Array(e,5),A=i.getUint8(5)>>4==1;t.updateStats({vbps:s.byteLength}),s.byteLength>0&&this._doDecode(s,o,r,A)}}}}class Me{constructor(e){return new(Me.getLoaderFactory(e._opt.demuxType))(e)}static getLoaderFactory(e){return e===o?Oe:e===i?Ve:void 0}}class Qe extends we{constructor(e){super(),this.player=e,this.hasInit=!1,this.isInitInfo=!1,this.decoder=null,this.initDecoder(),e.debug.log("Webcodecs","init")}destroy(){this.decoder&&(this.decoder.close(),this.decoder=null),this.hasInit=!1,this.isInitInfo=!1,this.off(),this.player.debug.log("Webcodecs","destroy")}initDecoder(){const e=this;this.decoder=new VideoDecoder({output(t){e.handleDecode(t)},error(t){e.handleError(t)}})}handleDecode(e){this.isInitInfo||(this.player.video.updateVideoInfo({width:e.codedWidth,height:e.codedHeight}),this.player.video.initCanvasViewSize(),this.isInitInfo=!0),this.player._times.videoStart||(this.player._times.videoStart=ce(),this.player.handlePlayToRenderTimes()),this.player.handleRender(),this.player.video.render({videoFrame:e}),this.player.updateStats({fps:!0,ts:0,buf:this.player.demux.delay}),setTimeout((function(){e.close?e.close():e.destroy()}),100)}handleError(e){this.player.debug.log("Webcodecs","VideoDecoder handleError",e)}decodeVideo(e,t,i){if(this.hasInit){const o=new EncodedVideoChunk({data:e.slice(5),timestamp:t,type:i?Y:H});this.decoder.decode(o)}else if(i&&0===e[1]){const t=15&e[0];if(this.player.video.updateVideoInfo({encTypeCode:t}),t===L)return void this.emit(C.webcodecsH265NotSupport);this.player._times.decodeStart||(this.player._times.decodeStart=ce());const i=function(e){let t=e.subarray(1,4),i="avc1.";for(let e=0;e<3;e++){let o=t[e].toString(16);o.length<2&&(o="0"+o),i+=o}return{codec:i,description:e}}(e.slice(5));this.decoder.configure(i),this.hasInit=!0}}}const We={play:"播放",pause:"暂停",audio:"",mute:"",screenshot:"截图",loading:"加载",fullscreen:"全屏",fullscreenExit:"退出全屏",record:"录制",recordStop:"停止录制"};var Ge=Object.keys(We).reduce(((e,t)=>(e[t]=`\n \n ${We[t]?`${We[t]}`:""}\n`,e)),{}),Je=(e,t)=>{const{events:{proxy:i}}=e,o=document.createElement("object");o.setAttribute("aria-hidden","true"),o.setAttribute("tabindex",-1),o.type="text/html",o.data="about:blank",ue(o,{display:"block",position:"absolute",top:"0",left:"0",height:"100%",width:"100%",overflow:"hidden",pointerEvents:"none",zIndex:"-1"});let r=e.width,s=e.height;i(o,"load",(()=>{i(o.contentDocument.defaultView,"resize",(()=>{e.width===r&&e.height===s||(r=e.width,s=e.height,e.emit(E.resize))}))})),e.$container.appendChild(o),e.on(E.destroy,(()=>{e.$container.removeChild(o)})),e.on(E.volumechange,(()=>{!function(e){if(0===e)ue(t.$volumeOn,"display","none"),ue(t.$volumeOff,"display","flex"),ue(t.$volumeHandle,"top","48px");else if(t.$volumeHandle&&t.$volumePanel){const i=he(t.$volumePanel,"height")||60,o=he(t.$volumeHandle,"height"),r=i-(i-o)*e-o;ue(t.$volumeHandle,"top",`${r}px`),ue(t.$volumeOn,"display","flex"),ue(t.$volumeOff,"display","none")}t.$volumePanelText&&(t.$volumePanelText.innerHTML=parseInt(100*e))}(e.volume)})),e.on(E.loading,(e=>{ue(t.$loading,"display",e?"flex":"none"),ue(t.$poster,"display","none"),e&&ue(t.$playBig,"display","none")}));const A=i=>{let o=!0===(r=i)||!1===r?i:e.fullscreen;var r;ue(t.$fullscreenExit,"display",o?"flex":"none"),ue(t.$fullscreen,"display",o?"none":"flex")};try{Ae.on("change",A),e.events.destroys.push((()=>{Ae.off("change",A)}))}catch(e){}e.on(E.webFullscreen,(e=>{A(e)})),e.on(E.recording,(()=>{ue(t.$record,"display",e.recording?"none":"flex"),ue(t.$recordStop,"display",e.recording?"flex":"none"),ue(t.$recording,"display",e.recording?"flex":"none")})),e.on(E.recordingTimestamp,(e=>{t.$recordingTime&&(t.$recordingTime.innerHTML=function(e){var t;if(e>-1){var i=Math.floor(e/3600),o=Math.floor(e/60)%60,r=e%60;t=i<10?"0"+i+":":i+":",o<10&&(t+="0"),t+=o+":",(r=Math.round(r))<10&&(t+="0"),t+=r.toFixed(0)}return t}(e))})),e.on(E.playing,(e=>{ue(t.$play,"display",e?"none":"flex"),ue(t.$playBig,"display",e?"none":"block"),ue(t.$pause,"display",e?"flex":"none"),ue(t.$screenshot,"display",e?"flex":"none"),ue(t.$record,"display",e?"flex":"none"),ue(t.$fullscreen,"display",e?"flex":"none"),e||t.$speed&&(t.$speed.innerHTML=be(""))})),e.on(E.kBps,(e=>{const i=be(e);t.$speed&&(t.$speed.innerHTML=i)}))};function Pe(e,t){void 0===t&&(t={});var i=t.insertAt;if(e&&"undefined"!=typeof document){var o=document.head||document.getElementsByTagName("head")[0],r=document.createElement("style");r.type="text/css","top"===i&&o.firstChild?o.insertBefore(r,o.firstChild):o.appendChild(r),r.styleSheet?r.styleSheet.cssText=e:r.appendChild(document.createTextNode(e))}}Pe('@keyframes rotation{0%{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(1turn)}}@keyframes magentaPulse{0%{background-color:#630030;-webkit-box-shadow:0 0 9px #333}50%{background-color:#a9014b;-webkit-box-shadow:0 0 18px #a9014b}to{background-color:#630030;-webkit-box-shadow:0 0 9px #333}}.jessibuca-container .jessibuca-icon{cursor:pointer;width:16px;height:16px}.jessibuca-container .jessibuca-poster{position:absolute;z-index:10;left:0;top:0;right:0;bottom:0;height:100%;width:100%;background-position:50%;background-repeat:no-repeat;background-size:contain;pointer-events:none}.jessibuca-container .jessibuca-play-big{position:absolute;display:none;height:100%;width:100%;background:rgba(0,0,0,.4)}.jessibuca-container .jessibuca-play-big:after{cursor:pointer;content:"";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);display:block;width:48px;height:48px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACgklEQVRoQ+3ZPYsTQRjA8eeZZCFlWttAwCIkZOaZJt8hlvkeHrlccuAFT6wEG0FQOeQQLCIWih6chQgKgkkKIyqKCVYip54IWmiQkTmyYhFvd3Zn3yDb7szu/7cv7GaDkPEFM94PK0DSZ9DzDAyHw7uI2HRDlVJX5/N5r9FoHCYdr/fvCRiNRmpJ6AEidoUQ15NG+AH8BgD2n9AHANAmohdJQfwAfgGA4xF4bjabnW21Whob62ILoKNfAsAGEd2PU2ATcNSNiDf0/cE5/xAHxDpgEf0NADaJ6HLUiKgAbvcjpdSGlPJZVJCoAUfdSqkLxWLxTLlc/mkbEgtgET1TSnWklLdtIuIEuN23crlcp16vv7cBSQKgu38AwBYRXQyLSArg3hsjRDxNRE+CQhIF/BN9qVAobFYqle+mkLQAdLd+8K0T0U0TRJoAbvc9fVkJId75gaQRoLv1C2STiPTb7rFLWgE6+g0RncwyYEJEtawCvjDGmpzzp5kD6NfxfD7frtVqB17xen2a7oG3ALBm+oMoFQBEPD+dTvtBfpImDXjIGFvjnD/3c7ksG5MU4HDxWeZa0HB3XhKAXcdxOn5vUi9gnIDXSqm2lHLPK8pkfVyAbSLqm4T5HRs1YB8RO0KIid8g03FRAT4rpbpSyh3TINPxUQB2GGM9zvkn05gg420CJovLZT9ISNA5tgB9ItoOGhFmnh/AcZ/X9xhj65zzV2Eiwsz1A1j2B8dHAOgS0W6YnduY6wkYj8d3lFKn/j66Ea84jtOrVqtfbQSE3YYnYDAY5Eql0hYAnNDv6kKIx2F3anO+J8DmzqLY1goQxVE12ebqDJgcrSjGrs5AFEfVZJt/AF0m+jHzUTtnAAAAAElFTkSuQmCC");background-repeat:no-repeat;background-position:50%}.jessibuca-container .jessibuca-play-big:hover:after{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACEElEQVRoQ+2ZXStEQRjH/3/yIXwDdz7J+i7kvdisXCk3SiFJW27kglBcSFFKbqwQSa4krykuKB09Naf2Yndn5jgzc06d53Znd36/mWfeniVyHsw5PwqB0DOonYEoijYBlOpAFwCMkHwLDS/9mwhEDUCfAAyTXA4tYSLwC6CtCegegH6S56FETAR+AHRoACcBTJAUWa+RloBAXwAYIrnt0yBNgZi7qtbHgw8RFwLC/QFglOScawlXAjH3gUqrE1cirgVi7mkAYyS/0xbxJSDcdwAGSa6nKeFTIOZeUyL3aYiEEBDuLwDjJGf+KxFKIOY+BdBL8iipSGiBmHtWbbuftiJZERBuOfgGSK7aSGRJIObeUml1ayKSRQHhlgtkiaTcdltGVgUE+ppkV54FaiS78yrwqlLoOI8Cch2XV548W7WRpTVwA6DP9kGUFYEpAOUkT9LQAvtq1M+0udKkQSgBqSlJWWYxKXj8vRACK+o6bbRIdYI+Ba7U7rKjg7L53JdAhWTZBsy0rWuBXZUuNVMg23auBF7UIl2yBbJt70JAoKV6/WwLk6R9mgKSJlJ1kLTxFmkJyCla8UZd15GJQKvyumyJ8gy8DAEvfZoINPqD41EtUjmUgoaJwAaAnjrKebVI34OSq85NBNqlCAWgE0CV5GEWwI3vQlmCbcSinYFCwPEIFDPgeIC1P1/MgHaIHDf4Aydx2TF7wnKeAAAAAElFTkSuQmCC")}.jessibuca-container .jessibuca-recording{display:none;position:absolute;left:50%;top:0;padding:0 3px;transform:translateX(-50%);justify-content:space-around;align-items:center;width:95px;height:20px;background:#000;opacity:1;border-radius:0 0 8px 8px;z-index:1}.jessibuca-container .jessibuca-recording .jessibuca-recording-red-point{width:8px;height:8px;background:#ff1f1f;border-radius:50%;animation:magentaPulse 1s linear infinite}.jessibuca-container .jessibuca-recording .jessibuca-recording-time{font-size:14px;font-weight:500;color:#ddd}.jessibuca-container .jessibuca-recording .jessibuca-icon-recordStop{width:16px;height:16px;cursor:pointer}.jessibuca-container .jessibuca-loading{display:none;flex-direction:column;justify-content:center;align-items:center;position:absolute;z-index:20;left:0;top:0;right:0;bottom:0;width:100%;height:100%;pointer-events:none}.jessibuca-container .jessibuca-loading-text{line-height:20px;font-size:13px;color:#fff;margin-top:10px}.jessibuca-container .jessibuca-controls{background-color:#161616;box-sizing:border-box;display:flex;flex-direction:column;justify-content:flex-end;position:absolute;z-index:40;left:0;right:0;bottom:0;height:38px;padding-left:13px;padding-right:13px;font-size:14px;color:#fff;opacity:0;visibility:hidden;transition:all .2s ease-in-out;-webkit-user-select:none;user-select:none;transition:width .5s ease-in}.jessibuca-container .jessibuca-controls .jessibuca-controls-item{position:relative;display:flex;justify-content:center;padding:0 8px}.jessibuca-container .jessibuca-controls .jessibuca-controls-item:hover .icon-title-tips{visibility:visible;opacity:1}.jessibuca-container .jessibuca-controls .jessibuca-fullscreen,.jessibuca-container .jessibuca-controls .jessibuca-fullscreen-exit,.jessibuca-container .jessibuca-controls .jessibuca-icon-audio,.jessibuca-container .jessibuca-controls .jessibuca-microphone-close,.jessibuca-container .jessibuca-controls .jessibuca-pause,.jessibuca-container .jessibuca-controls .jessibuca-play,.jessibuca-container .jessibuca-controls .jessibuca-record,.jessibuca-container .jessibuca-controls .jessibuca-record-stop,.jessibuca-container .jessibuca-controls .jessibuca-screenshot{display:none}.jessibuca-container .jessibuca-controls .jessibuca-icon-audio,.jessibuca-container .jessibuca-controls .jessibuca-icon-mute{z-index:1}.jessibuca-container .jessibuca-controls .jessibuca-controls-bottom{display:flex;justify-content:space-between;height:100%}.jessibuca-container .jessibuca-controls .jessibuca-controls-bottom .jessibuca-controls-left,.jessibuca-container .jessibuca-controls .jessibuca-controls-bottom .jessibuca-controls-right{display:flex;align-items:center}.jessibuca-container.jessibuca-controls-show .jessibuca-controls{opacity:1;visibility:visible}.jessibuca-container.jessibuca-controls-show-auto-hide .jessibuca-controls{opacity:.8;visibility:visible;display:none}.jessibuca-container.jessibuca-hide-cursor *{cursor:none!important}.jessibuca-container .jessibuca-icon-loading{width:50px;height:50px;background:url("data:image/png;base64,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") no-repeat 50%;background-size:100% 100%;animation:rotation 1s linear infinite}.jessibuca-container .jessibuca-icon-screenshot{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAE5UlEQVRoQ+1YW2sdVRT+1s7JxbsoVkEUrIIX0ouz15zYNA+N1RdtQfCltlUfvLbqL/BCwZ8grbHtizQqPojgBSr0JkiMmT2nxgapqBURtPVCq7HxJCeZJVPmxDlzZubMmXOSEsnAvOy917fXt9e39tp7E5b4R0vcfywTuNgRbBgBx3HuJqLVzPzmYjprjHkcwAlmLqXNm4XAISLaSESPaq2HF4OE67rbRGRYRA7btn1fbgLGmKsA/Azg0gBkGzO/vZAkHMd5hIiqc5wHcCMz/5k0Z2oExsfHV1QqldPAf8lORNu11m8tBAljzFYAYWxRSl1vWdZvuQj4RsYYF4AVBlgIOVVlE55HRIxt23ZuCfmGjuOsJ6LPoiAistW27XfaEYmIbOYhPc9bXywWR1oiEJDYQkR1zrYjEjGyqfqbKd8a7kJVtLgQ+30i8pht2wfyRKIdmJkJBPkQTbILfudJ7CTZNBvVpggEcgpvc/ML38zESbLJsxBNE/A9biX0rdjGyTQXgbxyapdsarb0PMlXtWnGoXbKpm0Essqp3bJpK4E0OXmed3+hUBDP8w5FI91M0rdcyLLILElOCbaZilSWeXMncRx4klTCY1spfG3dhZJWx3GcDUR0EEB3ZMw0ET2gtT6SZWWzjmlrBIJCl0hAKfWgZVmHszqXZVxbCSxpCS2JJA6umIhe8ZKKVLPbaBJ+S9toqVRa53nedgAbAKwIwH4FcAzAa0R0l4i8F7PPz189k6RFRA+LyNcAXojDV0oNW5b1eW4Cxpg9AHZkSaaa6hhzb065uDSCH2LmRB8Sk9gY4293g43Qo/1pV80m8yQMfZSZ781cB1zXHRKRZ2IMpgD8A+DamL4ZItqitX4/jbQx5iEA7wLoihn3V/ACckWMJN/QWj9b1x5tGBsbW6uUOh5pPy0iL3Z2dn6ilJqanp5ep5TaJSLhF4NppdRNaU8gPmapVLrO87yfIoXuWyJ6uVKp+HmFjo6OQSJ6FcBtYT+UUmstyxqvkWuUgDFmP4AnQu2/e563qlgs+u9DNZ8xZhRAX7VRRPbath0XuXk7Y8xeAE+FgL6fnJzsHRwcLIfBR0ZGLunq6poAsDLUvp+Zw7b1r9PGmJMAbg8Z7WDmoThZuK67WkS+DD18fcPMdzSQUBR/EzN/nIC/SUQ+DPXV4dclsTHmHAD/SfHCNzc3t7Kvr++HJKeMMacA3BL0nyuXyzcPDAxMxo0fHR29slAo/Ajg6qD/fE9Pzw29vb1/x42fmJi4vFwu+5G/LOg/y8zXNJLQ2dAES5JANMQ7mfn1jBI6ycx3NiMhItqstf4oAX+ziHwQ6qvDj5NQNIn/ALCKmX+JSeIvABRD7fuY+ekGBPYBeDI05tTMzExvf3+/vz2Hk91/ET8RSeI6/DoCpVJpjed5fmKGvzMAXpqdnT3oed5Ud3d3v4jsAqBr9Ei0Rmv9VRqBBPzvROQVETnq2xJRdRu9tRF+bCVOKWT+Kvl/TSIFk6SW/LAjKfjV5K8rZABi8dOOEv7FI7Z8x6zwEWbemLbyMfJr5qiSiJ96oclymBOR3bZtP9+M89WxxpjdAHY2sN3DzM8ljWl4I3Nd9x7/OE1ENcdpETnmH3e11n41zv0l4J8RkU+J6AAz+xtF4teQQG7PFslwmcAiLfSyhC72Qv9/I/Avns2OT7QJskoAAAAASUVORK5CYII=") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-screenshot:hover{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAED0lEQVRoQ+2ZycsdRRTFf2ejqHFAMQqiYBTUoElUHLNx3GgCgpuYRF2o0UT9CxwQ/BMkMSbZSKLiQgQHUDCJgjiAxiEiESdEcJbEedgcKaj3UV+/6q7u/jovPPkK3qbr1ql76p5bt6qemPKmKfefeQKHOoLFCNg+H1gi6fFJOmv7VmCvpD1N87Yh8ApwNXCzpB2TIGF7DRDm2inpmt4EbB8LfAMcGUHWSHryYJKwfRMwmuMP4BRJv9TN2RgB2wuB72BWsq+V9MTBIGF7NZBiGzhJ0o+9CIRBtt8FLqgADC6nRDbpVO9Iuqi3hCKB5cDrGZDVkp4aIhIV2aSQyyW9MScCkcQqIOfsnCORkc3I31b5VtyFRmg1IQ7dt0ja3icSQ2C2JhAjUU2ykd+dE7tBNp2i2olAJJFuc+nCt564QTadF6IzgUhiVGiqyinKaQjZpJP2ItBXTkPJZhACXeU0pGwGI9BWTkPLZlACBTldG4o5EA6E1dY66edcyNrs8Q36zg1vVaTazNs7iXPgDVJJzYs7VRvHRzaDEohyugJ4CTi84sg/wHWSdnVxsGQ7aQLXS9pZcqpL/6AEplpCU5HE8YpJ9YrXUKQ6baN1+HPaRm1fBqwFQnKGK2ZoPwCvAo8Ai4FnMpPMHMwapHUj8DFwbw3+Dklv9iZgexOwvktSRduxU2VDlErwmyXV+lCbxLbDdndlCT3TX3vV7JgnKfRuSVflfMkSsL0ZuDMz4E/gL+CETN+/wCpJzzaRtn0D8DRwWMbu1/gCcnSm7zFJd1W/jxGwvQx4r2IYnlbuA14GAomQFw8B6YtBKFSnNj2BxEJ3IvB1pdB9CjwQ8yqYhcg/DJxZ8WOZpA/SbzkC24DbEqOfgPMkBRKzmu23gEuSj1sk5SI3Y2J7C3BHMuZz4FxJf6fgto8APgIWJd+3SUrHjr9O294HnJUMWi8pSGqs2V4CvJ88fH0i6eyChKr4KyS9WIO/Ang+6RvDz0XgABCeFEdtkaQv65yy/QVweuwPY0+T9FuNQ8cAXwHHxf7wdHiypN9r7BfEl8GjYv9+SceXJLQ/mSDYTh2Baog3SHq0pYT2STqno4RWSnqhBn8l8FzSN4bfJol/jkn8bXUS228DFyfft0paVyCwFbg9sQkSDEkctueZZju8iO+tJPEYfo7A0piYKd73wP3xnB+20cvjNnphxdmlkj4sEMjhfwY8COyOY0fb6Bkl/K6FLKxS+M1KpDhJY8mvrG5doRwlf66QZfGbjhLh4pEt35kV3iUp/IvTunU8qtTil/7gaHOY2yjpntaez9b5RmBDYewmSXfX2RRvZLYvbThOh+NuqMa9Ww1+yLnXgO2SwkZR24oEens2oYHzBCa00PMSOtQL/f+NwH+Hg8hAnbrYgQAAAABJRU5ErkJggg==") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-play{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACgklEQVRoQ+3ZPYsTQRjA8eeZZCFlWttAwCIkZOaZJt8hlvkeHrlccuAFT6wEG0FQOeQQLCIWih6chQgKgkkKIyqKCVYip54IWmiQkTmyYhFvd3Zn3yDb7szu/7cv7GaDkPEFM94PK0DSZ9DzDAyHw7uI2HRDlVJX5/N5r9FoHCYdr/fvCRiNRmpJ6AEidoUQ15NG+AH8BgD2n9AHANAmohdJQfwAfgGA4xF4bjabnW21Whob62ILoKNfAsAGEd2PU2ATcNSNiDf0/cE5/xAHxDpgEf0NADaJ6HLUiKgAbvcjpdSGlPJZVJCoAUfdSqkLxWLxTLlc/mkbEgtgET1TSnWklLdtIuIEuN23crlcp16vv7cBSQKgu38AwBYRXQyLSArg3hsjRDxNRE+CQhIF/BN9qVAobFYqle+mkLQAdLd+8K0T0U0TRJoAbvc9fVkJId75gaQRoLv1C2STiPTb7rFLWgE6+g0RncwyYEJEtawCvjDGmpzzp5kD6NfxfD7frtVqB17xen2a7oG3ALBm+oMoFQBEPD+dTvtBfpImDXjIGFvjnD/3c7ksG5MU4HDxWeZa0HB3XhKAXcdxOn5vUi9gnIDXSqm2lHLPK8pkfVyAbSLqm4T5HRs1YB8RO0KIid8g03FRAT4rpbpSyh3TINPxUQB2GGM9zvkn05gg420CJovLZT9ISNA5tgB9ItoOGhFmnh/AcZ/X9xhj65zzV2Eiwsz1A1j2B8dHAOgS0W6YnduY6wkYj8d3lFKn/j66Ea84jtOrVqtfbQSE3YYnYDAY5Eql0hYAnNDv6kKIx2F3anO+J8DmzqLY1goQxVE12ebqDJgcrSjGrs5AFEfVZJt/AF0m+jHzUTtnAAAAAElFTkSuQmCC") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-play:hover{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACEElEQVRoQ+2ZXStEQRjH/3/yIXwDdz7J+i7kvdisXCk3SiFJW27kglBcSFFKbqwQSa4krykuKB09Naf2Yndn5jgzc06d53Znd36/mWfeniVyHsw5PwqB0DOonYEoijYBlOpAFwCMkHwLDS/9mwhEDUCfAAyTXA4tYSLwC6CtCegegH6S56FETAR+AHRoACcBTJAUWa+RloBAXwAYIrnt0yBNgZi7qtbHgw8RFwLC/QFglOScawlXAjH3gUqrE1cirgVi7mkAYyS/0xbxJSDcdwAGSa6nKeFTIOZeUyL3aYiEEBDuLwDjJGf+KxFKIOY+BdBL8iipSGiBmHtWbbuftiJZERBuOfgGSK7aSGRJIObeUml1ayKSRQHhlgtkiaTcdltGVgUE+ppkV54FaiS78yrwqlLoOI8Cch2XV548W7WRpTVwA6DP9kGUFYEpAOUkT9LQAvtq1M+0udKkQSgBqSlJWWYxKXj8vRACK+o6bbRIdYI+Ba7U7rKjg7L53JdAhWTZBsy0rWuBXZUuNVMg23auBF7UIl2yBbJt70JAoKV6/WwLk6R9mgKSJlJ1kLTxFmkJyCla8UZd15GJQKvyumyJ8gy8DAEvfZoINPqD41EtUjmUgoaJwAaAnjrKebVI34OSq85NBNqlCAWgE0CV5GEWwI3vQlmCbcSinYFCwPEIFDPgeIC1P1/MgHaIHDf4Aydx2TF7wnKeAAAAAElFTkSuQmCC") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-pause{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAABA0lEQVRoQ+1YwQqCUBAcfWXXsLr2AXWTPXno8yVB8AP6Aa3oHI+kCDqYaawJljSe133uzO44bx0M/HEG/v1gAd9mkAyQgY4I/F8LJUlyrQFtD2AtIkcNoFEU+Z7n7QD4DfFHEVlocrVmgAUAIAOl3mILPcDgEFcUhyrUKMGUUcroc3NQRimj9XJBGaWMvvPydKN0o6/9QTdKN6rZANxj6EbpRulGuZnjYqs8BbyR8Ub2Izeys+u6yyAIDpo/ehzHM2NMDsA0xFsRmWhyfTIDWSXxCEBmrd2EYXjSHJqm6bQoii2AOYBL5Z0xgFxEVppcrQvQJO0zhgX0iXbdWWSADHRE4AZQ731AhEUeNwAAAABJRU5ErkJggg==") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-pause:hover{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAA7klEQVRoQ+2YSwrCQBBEX6HiVvxsPYDewfN7By/gD9ciQkvERQwJdBSiYs0mEDo96aruombEjy/9+P/jAj7NoBkwA28i8H8tFBFRA9oeWEo6ZgCNiDGwAYpn3TpKmmVytWbABQBmoNRbbqEHGB7iiuJYhRol2DJqGX1uDsuoZdRmLuNZSzGWUcuoZdRHSp/IylNgK2ErYSthK3FHwLcSvpXIjoLt9Jfa6TMwl3TIMBkRE2AH9BriL5KGmVyvWIltJXEfKN6tJJ0ym0bECFgDU+Ba+WZQFCdpkcnVuoBM0i5jXECXaNftZQbMwJsI3AAPN3dAQflHegAAAABJRU5ErkJggg==") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-record{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAC+UlEQVRoQ+1ZS2sTURT+zlDJYE3XSq219QHVuEjnJDT+Bff9Abqw2voAEfGxqygUqWhVFHGl/yMLu9BwByxk5SNI66ML6U7axjhHbmhgWiftncxoOiV3FcI53z3f/e65594zhIQPSnj86BBot4IdBToKRFyBnbeFlFIScVEiuYvIWC6Xe2YK8pcC7SYA4CMzH4mDQBXAqilQBDsLQLfPf9FxnF4i8kwwmypARI+Wl5dvmIBEsUmlUkNE9NaHsVCpVAZGR0d/m+A2JSAid3K53E0TkCg2pVKpz7KseR/GfKVSGYxMAMA0M1+JEpyJb6lUOm5ZVnkrAsVisaunp+esiByr1Wp3R0ZGvmifzZK4XQQWHMc52MgBpdQuAOcAXABwuB400ZTjONdaIjA7O5u2bVsnWU1EujzP+5nP5xdMVjvIJkCBD8x8VCm1G8AYgAkAAxt8Z5j5YmgCSqlTAJ4D2OcD/AXgATNfbYVEAIFPIvKKiE4D6GuCea8xX6gtpJT6DmBvECgRFRzHeROWRAABE4iWCbwHEFhkPM/L5vP5dyaz+23+KwHXdR3P854S0YG1ILSCuthNMfNM2OC1/RYENLY+ygcBnPfht6ZAA6BYLNr6dyqVokKhsGpaNQ2TWJstreXaE2aed133sojcj41AKyvdzCdAgSXLsk4MDw9/a/i4rntbRPxFNZoC/5jAV2be759DKTUJ4FZSFFi0bbs/k8noy2R9dAjEuWU2YgXkQOK3kD6BMsysi2Z9JC2Jdcw/ALzwPO+xvmcl7Rj177JVEbkO4BARjSflFDJJuW1dBxJPoCIiL4noDIB1BS0pW6j+oJmbm+uuVqvjRKQfLr0bZHnIzJf0f6HeAybahrUJqAPruhLlcnnPysqKfpXp11n/Gv62zoHAroS+AafT6QkiGrIsazKbzX7eVIHEt1US39gCkOzWYthkjNE+tuZujDGZQ8XRXn8N4KT5lLFZ6uaYPt+nwyDuvC80YdhvB9uOAu1WoaNAR4GIK/AHvdr+QAexB7EAAAAASUVORK5CYII=") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-record:hover{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACfUlEQVRoQ+2ZSYsUQRCFvycK4nJXXEbHBdwO4kn/gv9CD467ICIutxEFkREdFUU86T/xojcPntyQcT2INw+uISFVkD1Wd2dWlU7nUHlqisiX+fJFZGREi8yHMt8/HYG5VrBToFOg4QnMPxcyM2t4KE2nT0i6EwvylwIjQOCFpE1tEPgGfI0FamC3AFgazP8IrJL0KwZzkAI3gLMxIA1ttgCPA4w3wHpJP2NwBxG4KOlcDEgTGzNbA8wEGP57vA0CU5JONtlczFwz2wY8HUbAzBYCB4CtwCVJb33OIAXmioC70LoyBsxsEXAQOApsLIhelnS6FgEzW+5BBvwA/FS+SPJFa40KBZ5L2mxmS4AJ4IjHxCzwaUnHkgmY2V7gLrAyAPwOXJN0qg6DCgIvgQfAPsDjo2pcKddLciEz+wCs6AO6W9KjVBIVBGIgahN4BvRLMjslPYlZPbT53wR2AbeBtcUmXEFPdh5U06mbd/shBBzbr/Jx4FCAX0+BEsDMFocEYrNmFcE+BD4XsXZL0oyZnQCutkagzkn3m1NBwDe/Q9L74MAuFEqUn5op8I8JvJO0elacTALnc1HAH3Njkvwx+WeYWUegTa/pwaqIgexdyIN4uyRPmqULZRXEvulPwD3gpr+zcrtGQxfzRHYG2AAczuUWiom3kc4D2RN4BdwH9gM9CS0XFyoLGu9UuN974eIFVDiuSzruH5LqgRhtU20q8kBPV8LMlhVVmVdnYwX+SMdAZVeieAF7eeltmElJr4cpkH1bJfvGVvatxdR4bMu+teZuWxtKxWncXn8I7EldtQV7vz79fp9KwZp//9CksB8F206BuVahU6BToOEJ/Ab7+KdABdTt8AAAAABJRU5ErkJggg==") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-recordStop{background:url("data:image/png;base64,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") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-recordStop:hover{background:url("data:image/png;base64,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") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-fullscreen{background:url("data:image/png;base64,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") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-fullscreen:hover{background:url("data:image/png;base64,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") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-fullscreenExit{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAADd0lEQVRoQ+2Zz2sdVRTHv+fJBDW6anDVXen6wZszYxYBiYgtFGst3VSDunKjpS0GpUlqfjVpsVVs6aaL0or4YxMVFCJZ2ZLdPUP+gq5bQnTxtNAkfTnlhnnlkmQy9yV9780rudt77tzv5/y4v4bQ4Y06XD/2ANodwec/AiJygJnvtdvTWfPnRkBEJAiCN8rl8kMfiPn5+Ve7u7v3rays0Orq6lJfX99/PuN2auMDoAD+BvA2M6/mTWSMOUtE48D6AjHGzN/kjdlNvy+AnWOOmQ/lTSYiEwDOWzsimgrDcCRvzG76GwGw8/zJzO9sN6GInAMwbW1UdSSKoqndCMwb6wNwGsB39Q+p6h/M/C4R2dTa1AoHYBWKyCkA1+pqiWi2Wq0e7e/vf7yRoJAAKcQggMtuJKIoOtoxACnE0/xOi/SXMAxPuhCFjUBdpIjYVWXSEf0TM3/g9BeriDMKdSPEz8z8vrU1xgwT0YXCrEJZy1iSJKOqOub0/8jMA0mSfKKqNwoPkHp7ioiGHIhRIvpHVa93BEBa2JcAfOlALAHo6RgAKzRJkk9V1S6xL7kpV4idOM31taxaIKJHqmpPnMMA9hcOQES2PDJkAT1XAAC+ZebPfWB3auNzmLObVsNRUNUXVHUujuM7OxXnMy4XwOcj29mIyOuq+lapVGrYCelKpkEQ3CyXy4tbzdN0AGPMxr2iYZ+sra3FcRybtgCIiK2BKw2rdgaUSqWoUqlIkQAepFDdAF7cBq5ERI9rtdr1OI7tmE2t6SmUEYFHAEaexYW/1QC2EF+ru5GIvg7D0D2GNJxprQY4o6qv1I/b6SpzOYqiLxpWng5oOQAzXxWRWwA+dkRfYOb1p5hGW6sBJpn5KytSRG4D+KguWFXHoyhy7xdeLC0F2ChSRL4H8OFuINoKYIUbY34gogHH3eeZef1K6tPaDpCm068A3nMEDzHzxY4BUNWSiPxORO6z5aDPPlGICNQ9bYyZIaLjjudzIQoFkKbTbwCO+UI0HcB9J/LdeY0xs0R02IGYYObRrWqiFQCfEZEtSHsfmGZm+4qxbbM/hQD8BeBNa0hEM2EYnmgLgP3lFARBT1dXly4vL//b29tbzQNIU+llAHeJaLFSqRzJes5vegR8xGbZLCwsHKzVav8z8/0sm0ID+MDvAfh4qZk2exFopnd9vv0ELrXBQO7fD10AAAAASUVORK5CYII=") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-fullscreenExit:hover{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAC/ElEQVRoQ+2Zy49NQRCHvx+ReK6IlZ34E7CUiCAR4xEbTLCyQRATYswwb2IQZDYWgojHZpCQECts+ResiQwLj0RClNSkb9Lu3HtPz7mZc8+V6eXt6tP1VVV3VdcVbT7U5vozC9BqD/7/HjCzlZLet9rS9fbP9ICZvQPWSfqRAmFmS4ClMHm+JiR9S1mXVyYFwIBXwEZJv7I2MrPjQH8A6JN0OWtNM/OpAL7HS0mbsjYzswGgN8gNS+rJWtPM/HQAfJ9nkrY22tDMTgMjQaZH0nAzCmatTQE4ClyNPvQU2CbJQ2vKKB2Aa2hmR4DrkbbPgQ5Jv6sJSgkQILqA0dgTkjraBiBAxPHtPz2UtDuGKK0HKkqamd8qg5HS9yXtjebLdYjrHNRqiAeS9gQvnQGGSnML1bvGzOwc0BfN35PUaWYHgRulBwjW9ju+O4JwqM/AWFsABIgLwKkIYgJY1jYAAeJQuGIXVIVcKTKxh8WfBin9J+AVpx/eFWUEqFkyNACKp0rhgWYArkg6kQibSyylmPOklQdibijBX+fSLHFRJkDid+qKmdlaYENOI0zeEcBNSZ9qbVIEQHWuyGOTNZLetgrAz8ClPFpHa1ZL8rf5lFGEB2oBfAxQi4D5DeDmAP7mGJPka0oD4LnDr9imH/xFe8AP4vLIjBclxWXItCOtaIBjwOKo3HaFRyWdnLbmYUHhAJKumdkt4ECk9JCkSitmWixFAwxKOjt5uZvdBvZH2vZLit8XSSBFA/yjpJndAfY1A9FSgOCJu0BnBNErqfIkzfRCywECxCNgR6Rtt6TzmdqHBmyKXG4ZM4sTWc04NzNPWE+AuG3ZlZInSuGBinXMbBzYGVkrE6JUACGcHgPbUyGKAIj7REmZ18y897o5ghiQ5E/bltRChwE/kF7Xj0jyLkbDYWbzgBfA+iA4LmlXqwD8LydvszjAF0lfswBCKC0E3gBeP22p186f8RBKUbaejJmtAr5L+lBPptQAKfCzAClWmkmZWQ/MpHVTvv0X9iFAQGQyevIAAAAASUVORK5CYII=") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-audio{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACrUlEQVRoQ+2ZPYgTURCAZzbBXJnCeL2Cnb87b9MEtPBUrrMQFAtrtT5/ClGs9LBWWz0RtbBUFCF4oJDsbO68wsLA2YqQSmLlvpEHu7IuMdlLcus+yUKKhJfZ+ebnvZl5CJY/aLn+MAP41x7M1QPMfFtr/crzvHfTAs8FoNPp1LTWzwHgqIg0lFLvrQHwfX8BER8DwC6jNCIecF13wwoA3/dvIuKNpLJa60Oe560XGoCZd4rICiKeTCtaeABmPg4AJmRqg6xcaABmvg4At4aFRyEBhoVM4UMoCplHADCfJTEL5YEsIVNID5iQAYCHALCYxeq5b6PMfF5EBAAEESthGK7W6/XPRpFWq7W3VCqtZg2ZcT3g+/6i4zjzIlLSWn/yPO/DIGMNLCWY2Sj/+xGRK0qpZfNDEASnROTFVi0fr8+aA8z8Ld6KEfGt67oLYwMAwEUium8EREn7OgeAjwCwPyo/nrque3YSgAtE9GDaAM1mc65arc4Zuf1+P2w0Gt9jJZl5DQAORt+fENG5wgEw8zUAMB/zbBBRwyqAIAjuiMjlSOlNItpjFUCqWl0josMzgChR/9hGAWBbknjmAdPhDdqa0gfZzAMJKyVP4v8hhJYRcSni+0JEu63ahZj5anyQici6UuqIVQDdbrfS6/UqRulyufyTiH5sF8AlIro37VpoWEHIzGZ2tM+sEZFnSqkzk9RCS0R01wjIsZz+mug53hDRia0AnI4bGgDYISItz/M2jYC8Gpp2u30MEWuO4zha665Sqp0ZYFStX/iWchRAItFGzoHSsrJ2ZFl1mHg6bfVYJeGJv85CC++BpIJZ5kSFC6G0ha0e7mYJqcJ7IOkRay84UhD2XjHFIFZf8iW9YcYoYRi+tO6aNeupOs66iU/icV46zf/MAKZpzXFk/QL+JG1PUPhRiQAAAABJRU5ErkJggg==") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-audio:hover{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACSElEQVRoQ+2Zu4sUQRCHf5+C+gf4yBXMfMYHGvjCzEBQDIzV+HwEohipGKupD0QNDE8UEwUFTe68wEDhTMVUMFJ+0tArzbjs9u3Ojt0wBR0M9MzUV1XdXVWNKhcq1189wP/2YKcesH1d0nPgdVvgnQDY3iTpqaT9kuaAt9UA2D4o6aGkzVHpXcByFQC2r0q60lB2D7BUNIDtjZIeSDoyRNGyAWwfiiET4n6YlAtg+7Kka2PCozyAMSHT5CkLIIbMfUlbMhdmOQCZIVOeB2LI3JN0NNPq6bTZe8D2aUmOY72kN8DnoIXt7eF5FSEzkQdsB+OEsFwr6RPwbpixhqYStoPyqVwAbkaAY5KeTWD5wStZHrD9XdJgK34FhBP9H8kFOAvciQBhn3/RAcBHSTvjfx4DJ6cBOAPcbRvA9gZJYQT5DfwYKGl7UdLu+PwIOFUiwCVJYQRZBuZqA7gh6XxUegXYVhtAmq0uAnt7gLhQm9vorBZx74Hcc6D3QLKH/z2JGyVnlYs4pCfzEe4rsLW2XehicpAtAftqAwiZbhhBfgE/ZwVwDrjddi40KiG0HXpHO+KcJ8CJaXKheeBWBOgqnf6W1BwvgcOrATieFDTrJL0HViJAVwXNgVgPrJH0BfiQDTDKtREiNK7KLSnHASQLLacP1PxcVkWWq8PU3emq2yqJJ0b1Qsv2QKpdZp+orBBqmrfq5m5mSJXtgUZI1XnB0YCo94opCal6L/ka3ghtlIXqrllzT9VJ5k19Ek/y0zbf6QHatOYk3/oDujC8QMWgjf4AAAAASUVORK5CYII=") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-mute{background:url("data:image/png;base64,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") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-mute:hover{background:url("data:image/png;base64,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") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-text{font-size:14px;width:30px}.jessibuca-container .jessibuca-speed{font-size:14px;color:#fff}.jessibuca-container .jessibuca-quality-menu-list{position:absolute;left:50%;bottom:100%;visibility:hidden;opacity:0;transform:translateX(-50%);transition:visibility .3s,opacity .3s;background-color:rgba(0,0,0,.5);border-radius:4px}.jessibuca-container .jessibuca-quality-menu-list.jessibuca-quality-menu-shown{visibility:visible;opacity:1}.jessibuca-container .icon-title-tips{pointer-events:none;position:absolute;left:50%;bottom:100%;visibility:hidden;opacity:0;transform:translateX(-50%);transition:visibility .3s ease 0s,opacity .3s ease 0s;background-color:rgba(0,0,0,.5);border-radius:4px}.jessibuca-container .icon-title{display:inline-block;padding:5px 10px;font-size:12px;white-space:nowrap;color:#fff}.jessibuca-container .jessibuca-quality-menu{padding:8px 0}.jessibuca-container .jessibuca-quality-menu-item{display:block;height:25px;margin:0;padding:0 10px;cursor:pointer;font-size:14px;text-align:center;width:50px;color:hsla(0,0%,100%,.5);transition:color .3s,background-color .3s}.jessibuca-container .jessibuca-quality-menu-item:hover{background-color:hsla(0,0%,100%,.2)}.jessibuca-container .jessibuca-quality-menu-item:focus{outline:none}.jessibuca-container .jessibuca-quality-menu-item.jessibuca-quality-menu-item-active{color:#2298fc}.jessibuca-container .jessibuca-volume-panel-wrap{position:absolute;left:50%;bottom:100%;visibility:hidden;opacity:0;transform:translateX(-50%) translateY(22%);transition:visibility .3s,opacity .3s;background-color:rgba(0,0,0,.5);border-radius:4px;height:120px;width:50px;overflow:hidden}.jessibuca-container .jessibuca-volume-panel-wrap.jessibuca-volume-panel-wrap-show{visibility:visible;opacity:1}.jessibuca-container .jessibuca-volume-panel{cursor:pointer;position:absolute;top:21px;height:60px;width:50px;overflow:hidden}.jessibuca-container .jessibuca-volume-panel-text{position:absolute;left:0;top:0;width:50px;height:20px;line-height:20px;text-align:center;color:#fff;font-size:12px}.jessibuca-container .jessibuca-volume-panel-handle{position:absolute;top:48px;left:50%;width:12px;height:12px;border-radius:12px;margin-left:-6px;background:#fff}.jessibuca-container .jessibuca-volume-panel-handle:before{bottom:-54px;background:#fff}.jessibuca-container .jessibuca-volume-panel-handle:after{bottom:6px;background:hsla(0,0%,100%,.2)}.jessibuca-container .jessibuca-volume-panel-handle:after,.jessibuca-container .jessibuca-volume-panel-handle:before{content:"";position:absolute;display:block;left:50%;width:3px;margin-left:-1px;height:60px}.jessibuca-container.jessibuca-fullscreen-web .jessibuca-controls{width:100vh;transform:translateX(-13vw) translateY(-47.8vh) rotate(270deg);transition:width .5s ease-in}.jessibuca-container.jessibuca-fullscreen-web .jessibuca-play-big:after{transform:rotate(270deg)}.jessibuca-container.jessibuca-fullscreen-web .jessibuca-loading{flex-direction:row}.jessibuca-container.jessibuca-fullscreen-web .jessibuca-loading-text{transform:rotate(270deg)}');class Ne{constructor(e){var t;this.player=e,((e,t)=>{e._opt.hasControl&&e._opt.controlAutoHide?e.$container.classList.add("jessibuca-controls-show-auto-hide"):e.$container.classList.add("jessibuca-controls-show");const i=e._opt,o=i.operateBtns;e.$container.insertAdjacentHTML("beforeend",`\n ${i.background?`
`:""}\n
\n ${Ge.loading}\n ${i.loadingText?`
${i.loadingText}
`:""}\n
\n ${i.hasControl&&o.play?'
':""}\n ${i.hasControl?`\n
\n
\n
00:00:01
\n
${Ge.recordStop}
\n
\n `:""}\n ${i.hasControl?`\n
\n
\n
\n ${i.showBandwidth?'
':""}\n
\n
\n ${o.audio?`\n
\n ${Ge.audio}\n ${Ge.mute}\n
\n
\n
\n
\n
\n
\n
\n `:""}\n ${o.play?`
${Ge.play}
${Ge.pause}
`:""}\n ${o.screenshot?`
${Ge.screenshot}
`:""}\n ${o.record?`
${Ge.record}
${Ge.recordStop}
`:""}\n ${o.fullscreen?`
${Ge.fullscreen}
${Ge.fullscreenExit}
`:""}\n
\n
\n
\n `:""}\n\n `),Object.defineProperty(t,"$poster",{value:e.$container.querySelector(".jessibuca-poster")}),Object.defineProperty(t,"$loading",{value:e.$container.querySelector(".jessibuca-loading")}),Object.defineProperty(t,"$play",{value:e.$container.querySelector(".jessibuca-play")}),Object.defineProperty(t,"$playBig",{value:e.$container.querySelector(".jessibuca-play-big")}),Object.defineProperty(t,"$recording",{value:e.$container.querySelector(".jessibuca-recording")}),Object.defineProperty(t,"$recordingTime",{value:e.$container.querySelector(".jessibuca-recording-time")}),Object.defineProperty(t,"$recordingStop",{value:e.$container.querySelector(".jessibuca-recording-stop")}),Object.defineProperty(t,"$pause",{value:e.$container.querySelector(".jessibuca-pause")}),Object.defineProperty(t,"$controls",{value:e.$container.querySelector(".jessibuca-controls")}),Object.defineProperty(t,"$fullscreen",{value:e.$container.querySelector(".jessibuca-fullscreen")}),Object.defineProperty(t,"$fullscreen",{value:e.$container.querySelector(".jessibuca-fullscreen")}),Object.defineProperty(t,"$volume",{value:e.$container.querySelector(".jessibuca-volume")}),Object.defineProperty(t,"$volumePanelWrap",{value:e.$container.querySelector(".jessibuca-volume-panel-wrap")}),Object.defineProperty(t,"$volumePanelText",{value:e.$container.querySelector(".jessibuca-volume-panel-text")}),Object.defineProperty(t,"$volumePanel",{value:e.$container.querySelector(".jessibuca-volume-panel")}),Object.defineProperty(t,"$volumeHandle",{value:e.$container.querySelector(".jessibuca-volume-panel-handle")}),Object.defineProperty(t,"$volumeOn",{value:e.$container.querySelector(".jessibuca-icon-audio")}),Object.defineProperty(t,"$volumeOff",{value:e.$container.querySelector(".jessibuca-icon-mute")}),Object.defineProperty(t,"$fullscreen",{value:e.$container.querySelector(".jessibuca-fullscreen")}),Object.defineProperty(t,"$fullscreenExit",{value:e.$container.querySelector(".jessibuca-fullscreen-exit")}),Object.defineProperty(t,"$record",{value:e.$container.querySelector(".jessibuca-record")}),Object.defineProperty(t,"$recordStop",{value:e.$container.querySelector(".jessibuca-record-stop")}),Object.defineProperty(t,"$screenshot",{value:e.$container.querySelector(".jessibuca-screenshot")}),Object.defineProperty(t,"$speed",{value:e.$container.querySelector(".jessibuca-speed")})})(e,this),Je(e,this),t=this,Object.defineProperty(t,"controlsRect",{get:()=>t.$controls.getBoundingClientRect()}),((e,t)=>{const{events:{proxy:i},debug:o}=e;function r(e){const{bottom:i,height:o}=t.$volumePanel.getBoundingClientRect(),{height:r}=t.$volumeHandle.getBoundingClientRect();return le(i-e.y-r/2,0,o-r/2)/(o-r)}i(window,["click","contextmenu"],(i=>{i.composedPath().indexOf(e.$container)>-1?t.isFocus=!0:t.isFocus=!1})),i(window,"orientationchange",(()=>{setTimeout((()=>{e.resize()}),300)})),i(t.$controls,"click",(e=>{e.stopPropagation()})),i(t.$pause,"click",(t=>{e.pause()})),i(t.$play,"click",(t=>{e.play()})),i(t.$playBig,"click",(t=>{e.play()})),i(t.$volume,"mouseover",(()=>{t.$volumePanelWrap.classList.add("jessibuca-volume-panel-wrap-show")})),i(t.$volume,"mouseout",(()=>{t.$volumePanelWrap.classList.remove("jessibuca-volume-panel-wrap-show")})),i(t.$volumeOn,"click",(i=>{i.stopPropagation(),ue(t.$volumeOn,"display","none"),ue(t.$volumeOff,"display","block"),e.lastVolume=e.volume,e.volume=0})),i(t.$volumeOff,"click",(i=>{i.stopPropagation(),ue(t.$volumeOn,"display","block"),ue(t.$volumeOff,"display","none"),e.volume=e.lastVolume||.5})),i(t.$screenshot,"click",(t=>{t.stopPropagation(),e.video.screenshot()})),i(t.$volumePanel,"click",(t=>{t.stopPropagation(),e.volume=r(t)})),i(t.$volumeHandle,"mousedown",(()=>{t.isVolumeDroging=!0})),i(t.$volumeHandle,"mousemove",(i=>{t.isVolumeDroging&&(e.volume=r(i))})),i(document,"mouseup",(()=>{t.isVolumeDroging&&(t.isVolumeDroging=!1)})),i(t.$record,"click",(t=>{t.stopPropagation(),e.recording=!0})),i(t.$recordStop,"click",(t=>{t.stopPropagation(),e.recording=!1})),i(t.$recordingStop,"click",(t=>{t.stopPropagation(),e.recording=!1})),i(t.$fullscreen,"click",(t=>{t.stopPropagation(),e.fullscreen=!0})),i(t.$fullscreenExit,"click",(t=>{t.stopPropagation(),e.fullscreen=!1})),e._opt.hasControl&&e._opt.controlAutoHide&&(i(e.$container,"mouseover",(()=>{e.fullscreen||ue(t.$controls,"display","block")})),i(e.$container,"mouseout",(()=>{ue(t.$controls,"display","none")})))})(e,this),e._opt.hotKey&&((e,t)=>{const{events:{proxy:i}}=e,o={};function r(e,t){o[e]?o[e].push(t):o[e]=[t]}r($,(()=>{e.fullscreen&&(e.fullscreen=!1)})),r(ee,(()=>{e.volume+=.05})),r(te,(()=>{e.volume-=.05})),i(window,"keydown",(e=>{if(t.isFocus){const t=document.activeElement.tagName.toUpperCase(),i=document.activeElement.getAttribute("contenteditable");if("INPUT"!==t&&"TEXTAREA"!==t&&""!==i&&"true"!==i){const t=o[e.keyCode];t&&(e.preventDefault(),t.forEach((e=>e())))}}}))})(e,this),this.player.debug.log("Control","init")}destroy(){this.$poster&&this.player.$container.removeChild(this.$poster),this.$loading&&this.player.$container.removeChild(this.$loading),this.$controls&&this.player.$container.removeChild(this.$controls),this.$playBig&&this.player.$container.removeChild(this.$playBig),this.player.debug.log("control","destroy")}autoSize(){const e=this.player;e.$container.style.padding="0 0";const t=e.width,i=e.height,o=t/i,r=e.video.$videoElement.width/e.video.$videoElement.height;if(o>r){const o=(t-i*r)/2;e.$container.style.padding=`0 ${o}px`}else{const o=(i-t/r)/2;e.$container.style.padding=`${o}px 0`}}}Pe(".jessibuca-container{position:relative;width:100%;height:100%;overflow:hidden}.jessibuca-container.jessibuca-fullscreen-web{position:fixed;z-index:9999;left:0;top:0;right:0;bottom:0;width:100vw!important;height:100vh!important;background:#000}");class ze{static init(){ze.types={avc1:[],avcC:[],hvc1:[],hvcC:[],btrt:[],dinf:[],dref:[],esds:[],ftyp:[],hdlr:[],mdat:[],mdhd:[],mdia:[],mfhd:[],minf:[],moof:[],moov:[],mp4a:[],mvex:[],mvhd:[],sdtp:[],stbl:[],stco:[],stsc:[],stsd:[],stsz:[],stts:[],tfdt:[],tfhd:[],traf:[],trak:[],trun:[],trex:[],tkhd:[],vmhd:[],smhd:[]};for(let e in ze.types)ze.types.hasOwnProperty(e)&&(ze.types[e]=[e.charCodeAt(0),e.charCodeAt(1),e.charCodeAt(2),e.charCodeAt(3)]);let e=ze.constants={};e.FTYP=new Uint8Array([105,115,111,109,0,0,0,1,105,115,111,109,97,118,99,49]),e.STSD_PREFIX=new Uint8Array([0,0,0,0,0,0,0,1]),e.STTS=new Uint8Array([0,0,0,0,0,0,0,0]),e.STSC=e.STCO=e.STTS,e.STSZ=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0]),e.HDLR_VIDEO=new Uint8Array([0,0,0,0,0,0,0,0,118,105,100,101,0,0,0,0,0,0,0,0,0,0,0,0,86,105,100,101,111,72,97,110,100,108,101,114,0]),e.HDLR_AUDIO=new Uint8Array([0,0,0,0,0,0,0,0,115,111,117,110,0,0,0,0,0,0,0,0,0,0,0,0,83,111,117,110,100,72,97,110,100,108,101,114,0]),e.DREF=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,12,117,114,108,32,0,0,0,1]),e.SMHD=new Uint8Array([0,0,0,0,0,0,0,0]),e.VMHD=new Uint8Array([0,0,0,1,0,0,0,0,0,0,0,0])}static box(e){let t=8,i=null,o=Array.prototype.slice.call(arguments,1),r=o.length;for(let e=0;e>>24&255,i[1]=t>>>16&255,i[2]=t>>>8&255,i[3]=255&t,i.set(e,4);let s=8;for(let e=0;e>>24&255,e>>>16&255,e>>>8&255,255&e,t>>>24&255,t>>>16&255,t>>>8&255,255&t,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255]))}static trak(e){return ze.box(ze.types.trak,ze.tkhd(e),ze.mdia(e))}static tkhd(e){let t=e.id,i=e.duration,o=e.presentWidth,r=e.presentHeight;return ze.box(ze.types.tkhd,new Uint8Array([0,0,0,7,0,0,0,0,0,0,0,0,t>>>24&255,t>>>16&255,t>>>8&255,255&t,0,0,0,0,i>>>24&255,i>>>16&255,i>>>8&255,255&i,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,o>>>8&255,255&o,0,0,r>>>8&255,255&r,0,0]))}static mdia(e){return ze.box(ze.types.mdia,ze.mdhd(e),ze.hdlr(e),ze.minf(e))}static mdhd(e){let t=e.timescale,i=e.duration;return ze.box(ze.types.mdhd,new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,t>>>24&255,t>>>16&255,t>>>8&255,255&t,i>>>24&255,i>>>16&255,i>>>8&255,255&i,85,196,0,0]))}static hdlr(e){let t=null;return t="audio"===e.type?ze.constants.HDLR_AUDIO:ze.constants.HDLR_VIDEO,ze.box(ze.types.hdlr,t)}static minf(e){let t=null;return t="audio"===e.type?ze.box(ze.types.smhd,ze.constants.SMHD):ze.box(ze.types.vmhd,ze.constants.VMHD),ze.box(ze.types.minf,t,ze.dinf(),ze.stbl(e))}static dinf(){return ze.box(ze.types.dinf,ze.box(ze.types.dref,ze.constants.DREF))}static stbl(e){return ze.box(ze.types.stbl,ze.stsd(e),ze.box(ze.types.stts,ze.constants.STTS),ze.box(ze.types.stsc,ze.constants.STSC),ze.box(ze.types.stsz,ze.constants.STSZ),ze.box(ze.types.stco,ze.constants.STCO))}static stsd(e){return"audio"===e.type?ze.box(ze.types.stsd,ze.constants.STSD_PREFIX,ze.mp4a(e)):"avc"===e.videoType?ze.box(ze.types.stsd,ze.constants.STSD_PREFIX,ze.avc1(e)):ze.box(ze.types.stsd,ze.constants.STSD_PREFIX,ze.hvc1(e))}static mp4a(e){let t=e.channelCount,i=e.audioSampleRate,o=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,t,0,16,0,0,0,0,i>>>8&255,255&i,0,0]);return ze.box(ze.types.mp4a,o,ze.esds(e))}static esds(e){let t=e.config||[],i=t.length,o=new Uint8Array([0,0,0,0,3,23+i,0,1,0,4,15+i,64,21,0,0,0,0,0,0,0,0,0,0,0,5].concat([i]).concat(t).concat([6,1,2]));return ze.box(ze.types.esds,o)}static avc1(e){let t=e.avcc;const i=e.codecWidth,o=e.codecHeight;let r=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,i>>>8&255,255&i,o>>>8&255,255&o,0,72,0,0,0,72,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,255,255]);return ze.box(ze.types.avc1,r,ze.box(ze.types.avcC,t))}static hvc1(e){let t=e.avcc;const i=e.codecWidth,o=e.codecHeight;let r=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,i>>>8&255,255&i,o>>>8&255,255&o,0,72,0,0,0,72,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,255,255]);return ze.box(ze.types.hvc1,r,ze.box(ze.types.hvcC,t))}static mvex(e){return ze.box(ze.types.mvex,ze.trex(e))}static trex(e){let t=e.id,i=new Uint8Array([0,0,0,0,t>>>24&255,t>>>16&255,t>>>8&255,255&t,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1]);return ze.box(ze.types.trex,i)}static moof(e,t){return ze.box(ze.types.moof,ze.mfhd(e.sequenceNumber),ze.traf(e,t))}static mfhd(e){let t=new Uint8Array([0,0,0,0,e>>>24&255,e>>>16&255,e>>>8&255,255&e]);return ze.box(ze.types.mfhd,t)}static traf(e,t){let i=e.id,o=ze.box(ze.types.tfhd,new Uint8Array([0,0,0,0,i>>>24&255,i>>>16&255,i>>>8&255,255&i])),r=ze.box(ze.types.tfdt,new Uint8Array([0,0,0,0,t>>>24&255,t>>>16&255,t>>>8&255,255&t])),s=ze.sdtp(e),A=ze.trun(e,s.byteLength+16+16+8+16+8+8);return ze.box(ze.types.traf,o,r,A,s)}static sdtp(e){let t=new Uint8Array(5),i=e.flags;return t[4]=i.isLeading<<6|i.dependsOn<<4|i.isDependedOn<<2|i.hasRedundancy,ze.box(ze.types.sdtp,t)}static trun(e,t){let i=new Uint8Array(28);t+=36,i.set([0,0,15,1,0,0,0,1,t>>>24&255,t>>>16&255,t>>>8&255,255&t],0);let o=e.duration,r=e.size,s=e.flags,A=e.cts;return i.set([o>>>24&255,o>>>16&255,o>>>8&255,255&o,r>>>24&255,r>>>16&255,r>>>8&255,255&r,s.isLeading<<2|s.dependsOn,s.isDependedOn<<6|s.hasRedundancy<<4|s.isNonSync,0,0,A>>>24&255,A>>>16&255,A>>>8&255,255&A],12),ze.box(ze.types.trun,i)}static mdat(e){return ze.box(ze.types.mdat,e)}}ze.init();class Ye{constructor(e){this.TAG="ExpGolomb",this._buffer=e,this._buffer_index=0,this._total_bytes=e.byteLength,this._total_bits=8*e.byteLength,this._current_word=0,this._current_word_bits_left=0}destroy(){this._buffer=null}_fillCurrentWord(){let e=this._total_bytes-this._buffer_index,t=Math.min(4,e),i=new Uint8Array(4);i.set(this._buffer.subarray(this._buffer_index,this._buffer_index+t)),this._current_word=new DataView(i.buffer).getUint32(0,!1),this._buffer_index+=t,this._current_word_bits_left=8*t}readBits(e){if(e<=this._current_word_bits_left){let t=this._current_word>>>32-e;return this._current_word<<=e,this._current_word_bits_left-=e,t}let t=this._current_word_bits_left?this._current_word:0;t>>>=32-this._current_word_bits_left;let i=e-this._current_word_bits_left;this._fillCurrentWord();let o=Math.min(i,this._current_word_bits_left),r=this._current_word>>>32-o;return this._current_word<<=o,this._current_word_bits_left-=o,t=t<>>e))return this._current_word<<=e,this._current_word_bits_left-=e,e;return this._fillCurrentWord(),e+this._skipLeadingZero()}readUEG(){let e=this._skipLeadingZero();return this.readBits(e+1)-1}readSEG(){let e=this.readUEG();return 1&e?e+1>>>1:-1*(e>>>1)}}class He{static _ebsp2rbsp(e){let t=e,i=t.byteLength,o=new Uint8Array(i),r=0;for(let e=0;e=2&&3===t[e]&&0===t[e-1]&&0===t[e-2]||(o[r]=t[e],r++);return new Uint8Array(o.buffer,0,r)}static parseSPS(e){let t=He._ebsp2rbsp(e),i=new Ye(t);i.readByte();let o=i.readByte();i.readByte();let r=i.readByte();i.readUEG();let s=He.getProfileString(o),A=He.getLevelString(r),n=1,a=420,d=[0,420,422,444],c=8;if((100===o||110===o||122===o||244===o||44===o||83===o||86===o||118===o||128===o||138===o||144===o)&&(n=i.readUEG(),3===n&&i.readBits(1),n<=3&&(a=d[n]),c=i.readUEG()+8,i.readUEG(),i.readBits(1),i.readBool())){let e=3!==n?8:12;for(let t=0;t0&&e<16?(v=t[e-1],w=o[e-1]):255===e&&(v=i.readByte()<<8|i.readByte(),w=i.readByte()<<8|i.readByte())}if(i.readBool()&&i.readBool(),i.readBool()&&(i.readBits(4),i.readBool()&&i.readBits(24)),i.readBool()&&(i.readUEG(),i.readUEG()),i.readBool()){let e=i.readBits(32),t=i.readBits(32);E=i.readBool(),B=t,C=2*e,S=B/C}}let R=1;1===v&&1===w||(R=v/w);let k=0,T=0;if(0===n)k=1,T=2-m;else{k=3===n?1:2,T=(1===n?2:1)*(2-m)}let I=16*(h+1),x=16*(p+1)*(2-m);I-=(g+f)*k,x-=(b+y)*T;let D=Math.ceil(I*R);return i.destroy(),i=null,{profile_string:s,level_string:A,bit_depth:c,ref_frames:u,chroma_format:a,chroma_format_string:He.getChromaFormatString(a),frame_rate:{fixed:E,fps:S,fps_den:C,fps_num:B},sar_ratio:{width:v,height:w},codec_size:{width:I,height:x},present_size:{width:D,height:x}}}static _skipScalingList(e,t){let i=8,o=8,r=0;for(let s=0;s{this.mediaSourceOpen=!0,this.player.emit(E.mseSourceOpen)})),i(this.mediaSource,"sourceclose",(()=>{this.player.emit(E.mseSourceClose)})),e.debug.log("MediaSource","init")}destroy(){this.stop(),this.bufferList=[],this.mediaSource=null,this.mediaSourceOpen=!1,this.sourceBuffer=null,this.hasInit=!1,this.isInitInfo=!1,this.sequenceNumber=0,this.cacheTrack=null,this.timeInit=!1,this.off(),this.player.debug.log("MediaSource","destroy")}get state(){return this.mediaSource.readyState}get isStateOpen(){return this.state===q}get isStateClosed(){return this.state===K}get isStateEnded(){return this.state===Z}get duration(){return this.mediaSource.duration}set duration(e){this.mediaSource.duration=e}decodeVideo(e,t,i){const o=this.player;if(this.hasInit)this._decodeVideo(e,t,i);else if(i&&0===e[1]){const r=15&e[0];if(o.video.updateVideoInfo({encTypeCode:r}),r===L)return void this.emit(C.mediaSourceH265NotSupport);o._times.decodeStart||(o._times.decodeStart=ce()),this._decodeConfigurationRecord(e,t,i,r),this.hasInit=!0}}_doDecode(){const e=this.bufferList.shift();e&&this._decodeVideo(e.payload,e.ts,e.isIframe)}_decodeConfigurationRecord(e,t,i,o){let r=e.slice(5),s={};o===j?s=function(e){const t={},i=new DataView(e.buffer);let o=i.getUint8(0),r=i.getUint8(1);if(i.getUint8(2),i.getUint8(3),1!==o||0===r)return;const s=1+(3&i.getUint8(4));if(3!==s&&4!==s)return;let A=31&i.getUint8(5);if(0===A)return;let n=6;for(let o=0;o1&&(this.removeBuffer(n.buffered.start(0),n.buffered.end(0)),this.timeInit=!1),this.dropping&&A-this.cacheTrack.dts>1e3)this.dropping=!1,this.cacheTrack={};else if(this.cacheTrack&&A>this.cacheTrack.dts){let e=8+this.cacheTrack.size,i=new Uint8Array(e);i[0]=e>>>24&255,i[1]=e>>>16&255,i[2]=e>>>8&255,i[3]=255&e,i.set(ze.types.mdat,4),i.set(this.cacheTrack.data,8),this.cacheTrack.duration=A-this.cacheTrack.dts;let r=ze.moof(this.cacheTrack,this.cacheTrack.dts),s=new Uint8Array(r.byteLength+i.byteLength);s.set(r,0),s.set(i,r.byteLength),this.appendBuffer(s.buffer),o.handleRender(),o.updateStats({fps:!0,ts:t,buf:o.demux.delay}),o._times.videoStart||(o._times.videoStart=ce(),o.handlePlayToRenderTimes())}else o.debug.log("MediaSource","timeInit set false , cacheTrack = {}"),this.timeInit=!1,this.cacheTrack={};this.cacheTrack.id=1,this.cacheTrack.sequenceNumber=++this.sequenceNumber,this.cacheTrack.size=s,this.cacheTrack.dts=A,this.cacheTrack.cts=0,this.cacheTrack.isKeyframe=i,this.cacheTrack.data=r,this.cacheTrack.flags={isLeading:0,dependsOn:i?2:1,isDependedOn:i?1:0,hasRedundancy:0,isNonSync:i?0:1},this.timeInit||1!==n.buffered.length||(o.debug.log("MediaSource","timeInit set true"),this.timeInit=!0,n.currentTime=n.buffered.end(0)),!this.isInitInfo&&n.videoWidth>0&&n.videoHeight>0&&(o.debug.log("MediaSource",`updateVideoInfo: ${n.videoWidth},${n.videoHeight}`),o.video.updateVideoInfo({width:n.videoWidth,height:n.videoHeight}),o.video.initCanvasViewSize(),this.isInitInfo=!0)}appendBuffer(e){const{debug:t,events:{proxy:i}}=this.player;null===this.sourceBuffer&&(this.sourceBuffer=this.mediaSource.addSourceBuffer(X),i(this.sourceBuffer,"error",(e=>{this.player.emit(E.mseSourceBufferError,e)}))),!1===this.sourceBuffer.updating&&this.isStateOpen?this.sourceBuffer.appendBuffer(e):this.isStateClosed?this.player.emit(E.mseSourceBufferError,"mediaSource is not attached to video or mediaSource is closed"):this.isStateEnded?this.player.emit(E.mseSourceBufferError,"mediaSource is closed"):!0===this.sourceBuffer.updating&&this.player.emit(E.mseSourceBufferBusy)}stop(){this.isStateOpen&&this.sourceBuffer&&this.sourceBuffer.abort(),this.endOfStream()}dropSourceBuffer(e){const t=this.player.video.$videoElement;this.dropping=e,t.buffered.length>0&&t.buffered.end(0)-t.currentTime>1&&(t.currentTime=t.buffered.end(0))}removeBuffer(e,t){if(this.isStateOpen&&!1===this.sourceBuffer.updating)try{this.sourceBuffer.remove(e,t)}catch(e){console.error(e)}}endOfStream(){this.isStateOpen&&this.mediaSource.endOfStream()}}const Ze=()=>"undefined"!=typeof navigator&&parseFloat((""+(/CPU.*OS ([0-9_]{3,4})[0-9_]{0,1}|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent)||[0,""])[1]).replace("undefined","3_2").replace("_",".").replace("_",""))<10&&!window.MSStream,qe=()=>"wakeLock"in navigator;class Ke{constructor(e){if(this.player=e,this.enabled=!1,qe()){this._wakeLock=null;const e=()=>{null!==this._wakeLock&&"visible"===document.visibilityState&&this.enable()};document.addEventListener("visibilitychange",e),document.addEventListener("fullscreenchange",e)}else Ze()?this.noSleepTimer=null:(this.noSleepVideo=document.createElement("video"),this.noSleepVideo.setAttribute("title","No Sleep"),this.noSleepVideo.setAttribute("playsinline",""),this._addSourceToVideo(this.noSleepVideo,"webm","data:video/webm;base64,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"),this._addSourceToVideo(this.noSleepVideo,"mp4","data:video/mp4;base64,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"),this.noSleepVideo.addEventListener("loadedmetadata",(()=>{this.noSleepVideo.duration<=1?this.noSleepVideo.setAttribute("loop",""):this.noSleepVideo.addEventListener("timeupdate",(()=>{this.noSleepVideo.currentTime>.5&&(this.noSleepVideo.currentTime=Math.random())}))})))}_addSourceToVideo(e,t,i){var o=document.createElement("source");o.src=i,o.type=`video/${t}`,e.appendChild(o)}get isEnabled(){return this.enabled}enable(){const e=this.player.debug;if(qe())return navigator.wakeLock.request("screen").then((t=>{this._wakeLock=t,this.enabled=!0,e.log("wakeLock","Wake Lock active."),this._wakeLock.addEventListener("release",(()=>{e.log("wakeLock","Wake Lock released.")}))})).catch((t=>{throw this.enabled=!1,e.error("wakeLock",`${t.name}, ${t.message}`),t}));if(Ze())return this.disable(),this.noSleepTimer=window.setInterval((()=>{document.hidden||(window.location.href=window.location.href.split("#")[0],window.setTimeout(window.stop,0))}),15e3),this.enabled=!0,Promise.resolve();return this.noSleepVideo.play().then((e=>(this.enabled=!0,e))).catch((e=>{throw this.enabled=!1,e}))}disable(){const e=this.player.debug;qe()?(this._wakeLock&&this._wakeLock.release(),this._wakeLock=null):Ze()?this.noSleepTimer&&(e.warn("wakeLock","NoSleep now disabled for older iOS devices."),window.clearInterval(this.noSleepTimer),this.noSleepTimer=null):this.noSleepVideo.pause(),this.enabled=!1}}class _e extends we{constructor(e,t){var i;super(),this.$container=e,this._opt=Object.assign({},r,t),this.debug=new ie(this),this._opt.useWCS&&(this._opt.useWCS="VideoEncoder"in window),this._opt.useMSE&&(this._opt.useMSE=window.MediaSource&&window.MediaSource.isTypeSupported(X)),this._opt.useMSE?(this._opt.useWCS&&this.debug.log("Player","useWCS set true->false"),this._opt.forceNoOffscreen||this.debug.log("Player","forceNoOffscreen set false->true"),this._opt.useWCS=!1,this._opt.forceNoOffscreen=!0):this._opt.useWCS,this._opt.forceNoOffscreen||("undefined"==typeof OffscreenCanvas?(this._opt.forceNoOffscreen=!0,this._opt.useOffscreen=!1):this._opt.useOffscreen=!0),this._opt.hasAudio||(this._opt.operateBtns.audio=!1),this._opt.hasControl=this._hasControl(),this._loading=!1,this._playing=!1,this._hasLoaded=!1,this._checkHeartTimeout=null,this._checkLoadingTimeout=null,this._startBpsTime=null,this._isPlayingBeforePageHidden=!1,this._stats={buf:0,fps:0,abps:0,vbps:0,ts:0},this._times={playInitStart:"",playStart:"",streamStart:"",streamResponse:"",demuxStart:"",decodeStart:"",videoStart:"",playTimestamp:"",streamTimestamp:"",streamResponseTimestamp:"",demuxTimestamp:"",decodeTimestamp:"",videoTimestamp:"",allTimestamp:""},this._videoTimestamp=0,this._audioTimestamp=0,i=this,Object.defineProperty(i,"rect",{get:()=>{const e=i.$container.getBoundingClientRect();return e.width=Math.max(e.width,i.$container.clientWidth),e.height=Math.max(e.height,i.$container.clientHeight),e}}),["bottom","height","left","right","top","width"].forEach((e=>{Object.defineProperty(i,e,{get:()=>i.rect[e]})})),this.events=new oe(this),this.video=new Ce(this),this._opt.hasAudio&&(this.audio=new ke(this)),this.recorder=new Le(this),this._onlyMseOrWcsVideo()?this.loaded=!0:this.decoderWorker=new Ue(this),this.stream=null,this.demux=null,this._opt.useWCS&&(this.webcodecsDecoder=new Qe(this)),this._opt.useMSE&&(this.mseDecoder=new Xe(this)),this.control=new Ne(this),this.keepScreenOn=new Ke(this),(e=>{try{const t=()=>{e.emit(B.fullscreen,e.fullscreen),e.fullscreen?e._opt.useMSE&&e.resize():e.resize()};Ae.on("change",t),e.events.destroys.push((()=>{Ae.off("change",t)}))}catch(e){}if(e.on(E.decoderWorkerInit,(()=>{e.debug.log("player","has loaded"),e.loaded=!0})),e.on(E.play,(()=>{e.loading=!1})),e.on(E.fullscreen,(t=>{if(t)try{Ae.request(e.$container).then((()=>{})).catch((t=>{e.webFullscreen=!0}))}catch(t){e.webFullscreen=!0}else try{Ae.exit().then((()=>{})).catch((()=>{e.webFullscreen=!1}))}catch(t){e.webFullscreen=!1}})),e.on(E.webFullscreen,(t=>{t?e.$container.classList.add("jessibuca-fullscreen-web"):e.$container.classList.remove("jessibuca-fullscreen-web")})),e.on(E.resize,(()=>{e.video.resize()})),e._opt.debug){const t=[E.timeUpdate];Object.keys(E).forEach((i=>{e.on(E[i],(o=>{t.includes(i)||e.debug.log("player events",E[i],o)}))})),Object.keys(C).forEach((t=>{e.on(C[t],(i=>{e.debug.log("player event error",C[t],i)}))}))}})(this),(e=>{const{_opt:t,debug:i,events:{proxy:o}}=e;t.supportDblclickFullscreen&&o(e.$container,"dblclick",(()=>{e.fullscreen=!e.fullscreen})),o(document,"visibilitychange",(()=>{t.hiddenAutoPause&&(i.log("visibilitychange",document.visibilityState,e._isPlayingBeforePageHidden),"visible"===document.visibilityState?e._isPlayingBeforePageHidden&&e.play():(e._isPlayingBeforePageHidden=e.playing,e.playing&&e.pause()))})),o(window,"fullscreenchange",(()=>{null!==e.keepScreenOn&&"visible"===document.visibilityState&&e.enableWakeLock()}))})(this),this._opt.useWCS&&this.debug.log("Player","use WCS"),this._opt.useMSE&&this.debug.log("Player","use MSE"),this._opt.useOffscreen&&this.debug.log("Player","use offscreen"),this.debug.log("Player options",this._opt)}destroy(){this._loading=!1,this._playing=!1,this._hasLoaded=!1,this._times={playInitStart:"",playStart:"",streamStart:"",streamResponse:"",demuxStart:"",decodeStart:"",videoStart:"",playTimestamp:"",streamTimestamp:"",streamResponseTimestamp:"",demuxTimestamp:"",decodeTimestamp:"",videoTimestamp:"",allTimestamp:""},this.decoderWorker&&(this.decoderWorker.destroy(),this.decoderWorker=null),this.video&&(this.video.destroy(),this.video=null),this.audio&&(this.audio.destroy(),this.audio=null),this.stream&&(this.stream.destroy(),this.stream=null),this.recorder&&(this.recorder.destroy(),this.recorder=null),this.control&&(this.control.destroy(),this.control=null),this.webcodecsDecoder&&(this.webcodecsDecoder.destroy(),this.webcodecsDecoder=null),this.mseDecoder&&(this.mseDecoder.destroy(),this.mseDecoder=null),this.demux&&(this.demux.destroy(),this.demux=null),this.events&&(this.events.destroy(),this.events=null),this.clearCheckHeartTimeout(),this.clearCheckLoadingTimeout(),this.releaseWakeLock(),this.keepScreenOn=null,this.resetStats(),this._audioTimestamp=0,this._videoTimestamp=0,this.emit("destroy"),this.off(),this.debug.log("play","destroy end")}set fullscreen(e){ge()?(this.emit(E.webFullscreen,e),setTimeout((()=>{this.updateOption({rotate:e?270:0}),this.resize()}),10)):this.emit(E.fullscreen,e)}get fullscreen(){return document.isFullScreen||document.mozIsFullScreen||document.webkitIsFullScreen||this.webFullscreen}set webFullscreen(e){this.emit(E.webFullscreen,e)}get webFullscreen(){return this.$container.classList.contains("jessibuca-fullscreen-web")}set loaded(e){this._hasLoaded=e}get loaded(){return this._hasLoaded}set playing(e){e&&(this.loading=!1),this.playing!==e&&(this._playing=e,this.emit(E.playing,e),this.emit(E.volumechange,this.volume),e?this.emit(E.play):this.emit(E.pause))}get playing(){return this._playing}get volume(){return this.audio&&this.audio.volume||0}set volume(e){this.audio&&this.audio.setVolume(e)}set loading(e){this.loading!==e&&(this._loading=e,this.emit(E.loading,this._loading))}get loading(){return this._loading}set recording(e){e?this.playing&&this.recorder.startRecord():this.recorder.stopRecordAndSave()}get recording(){return this.recorder&&this.recorder.recording}set audioTimestamp(e){null!==e&&(this._audioTimestamp=e)}get audioTimestamp(){return this._audioTimestamp}set videoTimestamp(e){null!==e&&(this._videoTimestamp=e,this._opt.useWCS||this._opt.useMSE||this.audioTimestamp&&this.videoTimestamp&&this.audio&&this.audio.emit(E.videoSyncAudio,{audioTimestamp:this.audioTimestamp,videoTimestamp:this.videoTimestamp,diff:this.audioTimestamp-this.videoTimestamp}))}get videoTimestamp(){return this._videoTimestamp}updateOption(e){this._opt=Object.assign({},this._opt,e)}init(){return new Promise(((e,t)=>{this.stream||(this.stream=new xe(this)),this.demux||(this.demux=new Me(this)),this._opt.useWCS&&(this.webcodecsDecoder||(this.webcodecsDecoder=new Qe(this))),this._opt.useMSE&&(this.mseDecoder||(this.mseDecoder=new Xe(this))),this.decoderWorker||this._onlyMseOrWcsVideo()?e():(this.decoderWorker=new Ue(this),this.once(E.decoderWorkerInit,(()=>{e()})))}))}play(e){return new Promise(((t,i)=>{if(!e&&!this._opt.url)return i();this.loading=!0,this.playing=!1,this._times.playInitStart=ce(),e||(e=this._opt.url),this._opt.url=e,this.clearCheckHeartTimeout(),this.init().then((()=>{this._times.playStart=ce(),this._opt.isNotMute&&this.mute(!1),this.webcodecsDecoder&&this.webcodecsDecoder.once(C.webcodecsH265NotSupport,(()=>{this.emit(C.webcodecsH265NotSupport),this._opt.autoWasm||this.emit(E.error,C.webcodecsH265NotSupport)})),this.mseDecoder&&this.mseDecoder.once(C.mediaSourceH265NotSupport,(()=>{this.emit(C.mediaSourceH265NotSupport),this._opt.autoWasm||this.emit(E.error,C.mediaSourceH265NotSupport)})),this.enableWakeLock(),this.stream.fetchStream(e),this.checkLoadingTimeout(),this.stream.once(C.fetchError,(e=>{i(e)})),this.stream.once(C.websocketError,(e=>{i(e)})),this.stream.once(E.streamSuccess,(()=>{t(),this._times.streamResponse=ce(),this.video.play()}))})).catch((e=>{i(e)}))}))}close(){return new Promise(((e,t)=>{this._close().then((()=>{this.video.clearView(),e()}))}))}_close(){return new Promise(((e,t)=>{this.stream&&(this.stream.destroy(),this.stream=null),this.demux&&(this.demux.destroy(),this.demux=null),this.decoderWorker&&(this.decoderWorker.destroy(),this.decoderWorker=null),this.webcodecsDecoder&&(this.webcodecsDecoder.destroy(),this.webcodecsDecoder=null),this.mseDecoder&&(this.mseDecoder.destroy(),this.mseDecoder=null),this.clearCheckHeartTimeout(),this.clearCheckLoadingTimeout(),this.playing=!1,this.loading=!1,this.recording=!1,this.audio&&this.audio.pause(),this.video&&this.video.pause(),this.releaseWakeLock(),this.resetStats(),this._audioTimestamp=0,this._videoTimestamp=0,this._times={playInitStart:"",playStart:"",streamStart:"",streamResponse:"",demuxStart:"",decodeStart:"",videoStart:"",playTimestamp:"",streamTimestamp:"",streamResponseTimestamp:"",demuxTimestamp:"",decodeTimestamp:"",videoTimestamp:"",allTimestamp:""},setTimeout((()=>{e()}),0)}))}pause(e){return e?this.close():this._close()}mute(e){this.audio&&this.audio.mute(e)}resize(){this.video.resize()}startRecord(e,t){this.recording||(this.recorder.setFileName(e,t),this.recording=!0)}stopRecordAndSave(){this.recording&&(this.recording=!1)}_hasControl(){let e=!1,t=!1;return Object.keys(this._opt.operateBtns).forEach((e=>{this._opt.operateBtns[e]&&(t=!0)})),(this._opt.showBandwidth||this._opt.text||t)&&(e=!0),e}_onlyMseOrWcsVideo(){return!1===this._opt.hasAudio&&(this._opt.useMSE||this._opt.useWCS&&!this._opt.useOffscreen)}checkHeart(){this.clearCheckHeartTimeout(),this.checkHeartTimeout()}checkHeartTimeout(){this._checkHeartTimeout=setTimeout((()=>{this.pause(!1).then((()=>{this.emit(E.timeout,E.delayTimeout),this.emit(E.delayTimeout)}))}),1e3*this._opt.heartTimeout)}clearCheckHeartTimeout(){this._checkHeartTimeout&&(clearTimeout(this._checkHeartTimeout),this._checkHeartTimeout=null)}checkLoadingTimeout(){this._checkLoadingTimeout=setTimeout((()=>{this.pause(!1).then((()=>{this.emit(E.timeout,E.loadingTimeout),this.emit(E.loadingTimeout)}))}),1e3*this._opt.loadingTimeout)}clearCheckLoadingTimeout(){this._checkLoadingTimeout&&(clearTimeout(this._checkLoadingTimeout),this._checkLoadingTimeout=null)}handleRender(){this.loading&&(this.emit(E.start),this.loading=!1,this.clearCheckLoadingTimeout()),this.playing||(this.playing=!0),this.checkHeart()}updateStats(e){e=e||{},this._startBpsTime||(this._startBpsTime=ce()),ve(e.ts)&&(this._stats.ts=e.ts),ve(e.buf)&&(this._stats.buf=e.buf),e.fps&&(this._stats.fps+=1),e.abps&&(this._stats.abps+=e.abps),e.vbps&&(this._stats.vbps+=e.vbps);const t=ce();t-this._startBpsTime<1e3||(this.emit(E.stats,this._stats),this.emit(E.performance,function(e){let t=0;return e>=24?t=2:e>=15&&(t=1),t}(this._stats.fps)),this._stats.fps=0,this._stats.abps=0,this._stats.vbps=0,this._startBpsTime=t)}resetStats(){this._startBpsTime=null,this._stats={buf:0,fps:0,abps:0,vbps:0,ts:0}}enableWakeLock(){this._opt.keepScreenOn&&this.keepScreenOn.enable()}releaseWakeLock(){this._opt.keepScreenOn&&this.keepScreenOn.disable()}handlePlayToRenderTimes(){const e=this._times;e.playTimestamp=e.playStart-e.playInitStart,e.streamTimestamp=e.streamStart-e.playStart,e.streamResponseTimestamp=e.streamResponse-e.streamStart,e.demuxTimestamp=e.demuxStart-e.streamResponse,e.decodeTimestamp=e.decodeStart-e.demuxStart,e.videoTimestamp=e.videoStart-e.decodeStart,e.allTimestamp=e.videoStart-e.playInitStart,this.emit(E.playToRenderTimes,e)}}class $e extends we{static ERROR=C;static TIMEOUT={loadingTimeout:E.loadingTimeout,delayTimeout:E.delayTimeout};constructor(e){super();let t=e,i=e.container;if("string"==typeof e.container&&(i=document.querySelector(e.container)),!i)throw new Error("Jessibuca need container option");i.classList.add("jessibuca-container"),delete t.container,ve(t.videoBuffer)&&(t.videoBuffer=1e3*Number(t.videoBuffer)),ve(t.timeout)&&(ye(t.loadingTimeout)&&(t.loadingTimeout=t.timeout),ye(t.heartTimeout)&&(t.heartTimeout=t.timeout)),this._opt=t,this.$container=i,this._loadingTimeoutReplayTimes=0,this._heartTimeoutReplayTimes=0,this.events=new oe(this),this._initPlayer(i,t)}destroy(){this.events&&(this.events.destroy(),this.events=null),this.player&&(this.player.destroy(),this.player=null),this.$container=null,this._opt=null,this._loadingTimeoutReplayTimes=0,this._heartTimeoutReplayTimes=0,this.off()}_initPlayer(e,t){this.player=new _e(e,t),this._bindEvents()}_resetPlayer(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.player.destroy(),this.player=null;const t=Object.assign(this._opt,e);this._initPlayer(this.$container,t)}_bindEvents(){Object.keys(B).forEach((e=>{this.player.on(B[e],(t=>{this.emit(e,t)}))}))}setDebug(e){this.player.updateOption({isDebug:!!e})}mute(){this.player.mute(!0)}cancelMute(){this.player.mute(!1)}setVolume(e){this.player.volume=e}audioResume(){this.player.audio&&this.player.audio.audioEnabled(!0)}setTimeout(e){e=Number(e),this.player.updateOption({timeout:e,loadingTimeout:e,heartTimeout:e})}setScaleMode(e){let t={isFullResize:!1,isResize:!1};switch(e=Number(e)){case M:t.isFullResize=!1,t.isResize=!1;break;case Q:t.isFullResize=!1,t.isResize=!0;break;case W:t.isFullResize=!0,t.isResize=!0}this.player.updateOption(t),this.resize()}pause(){return this.player.pause()}close(){return this._opt.url="",this.player.close()}clearView(){this.player.video.clearView()}play(e){return new Promise(((t,i)=>{if(!e&&!this._opt.url)return this.emit(E.error,C.playError),void i();if(e){if(!this._opt.url)return this._play(e);e===this._opt.url?this.player.playing?t():(this.clearView(),this.player.play(this._opt.url).then((()=>{t()})).catch((()=>{this.player.pause().then((()=>{i()}))}))):this.player.pause().then((()=>(this.clearView(),this._play(e)))).catch((()=>{i()}))}else this.player.play(this._opt.url).then((()=>{t()})).catch((()=>{this.player.pause().then((()=>{i()}))}))}))}_play(r){return new Promise(((s,A)=>{this._opt.url=r;const n=0===r.indexOf("http"),a=n?t:e,d=n||-1!==r.indexOf(".flv")||this._opt.isFlv?i:o;this.player.updateOption({protocol:a,demuxType:d}),this.player.once(C.mediaSourceH265NotSupport,(()=>{this.close().then((()=>{this.player._opt.autoWasm&&(this.player.debug.log("Jessibuca","auto wasm [mse-> wasm] reset player and play"),this._resetPlayer({useMSE:!1}),this.play(r).then((()=>{this.player.debug.log("Jessibuca","auto wasm [mse-> wasm] reset player and play success")})).catch((()=>{this.player.debug.log("Jessibuca","auto wasm [mse-> wasm] reset player and play error")})))}))})),this.player.once(C.webcodecsH265NotSupport,(()=>{this.close().then((()=>{this.player._opt.autoWasm&&(this.player.debug.log("Jessibuca","auto wasm [wcs-> wasm] reset player and play"),this._resetPlayer({useWCS:!1}),this.play(r).then((()=>{this.player.debug.log("Jessibuca","auto wasm [wcs-> wasm] reset player and play success")})).catch((()=>{this.player.debug.log("Jessibuca","auto wasm [wcs-> wasm] reset player and play error")})))}))})),this.player.once(C.wasmDecodeError,(()=>{this.player._opt.wasmDecodeErrorReplay&&this.close().then((()=>{this.player.debug.log("Jessibuca","wasm decode error and reset player and play"),this._resetPlayer({useWCS:!1}),this.play(r).then((()=>{this.player.debug.log("Jessibuca","wasm decode error and reset player and play success")})).catch((()=>{this.player.debug.log("Jessibuca","wasm decode error and reset player and play error")}))}))})),this.player.once(E.delayTimeout,(()=>{this.player._opt.heartTimeoutReplay&&this._heartTimeoutReplayTimes{this._heartTimeoutReplayTimes=0})).catch((()=>{})))})),this.player.once(E.loadingTimeout,(()=>{this.player._opt.loadingTimeoutReplay&&this._loadingTimeoutReplayTimes{this._loadingTimeoutReplayTimes=0})).catch((()=>{})))})),this.hasLoaded()?this.player.play(r).then((()=>{s()})).catch((()=>{this.player.pause().then((()=>{A()}))})):this.player.once(E.decoderWorkerInit,(()=>{this.player.play(r).then((()=>{s()})).catch((()=>{this.player.pause().then((()=>{A()}))}))}))}))}resize(){this.player.resize()}setBufferTime(e){e=Number(e),this.player.updateOption({videoBuffer:1e3*e}),this.player.decoderWorker&&this.player.decoderWorker.updateWorkConfig({key:"videoBuffer",value:1e3*e})}setRotate(e){e=parseInt(e,10);this._opt.rotate!==e&&-1!==[0,90,270].indexOf(e)&&(this.player.updateOption({rotate:e}),this.resize())}hasLoaded(){return this.player.loaded}setKeepScreenOn(){this.player.updateOption({keepScreenOn:!0})}setFullscreen(e){const t=!!e;this.player.fullscreen!==t&&(this.player.fullscreen=t)}screenshot(e,t,i,o){return this.player.video.screenshot(e,t,i,o)}startRecord(e,t){return new Promise(((i,o)=>{this.player.playing?(this.player.startRecord(e,t),i()):o()}))}stopRecordAndSave(){this.player.recording&&this.player.stopRecordAndSave()}isPlaying(){return this.player.playing}isMute(){return!this.player.audio||this.player.audio.isMute}isRecording(){return this.player.recorder.recording}}return window.Jessibuca=$e,$e})); +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).jessibuca=t()}(this,(function(){"use strict";const e=0,t=1,i="flv",o="m7s",r={videoBuffer:1e3,isResize:!0,isFullResize:!1,isFlv:!1,debug:!1,hotKey:!1,loadingTimeout:10,heartTimeout:5,timeout:10,loadingTimeoutReplay:!1,heartTimeoutReplay:!1,loadingTimeoutReplayTimes:3,heartTimeoutReplayTimes:3,supportDblclickFullscreen:!1,showBandwidth:!1,keepScreenOn:!1,isNotMute:!1,hasAudio:!0,hasVideo:!0,operateBtns:{fullscreen:!1,screenshot:!1,play:!1,audio:!1,record:!1},controlAutoHide:!1,hasControl:!1,loadingText:"",background:"",decoder:"decoder.js",url:"",rotate:0,forceNoOffscreen:!0,hiddenAutoPause:!1,protocol:t,demuxType:i,useWCS:!1,wcsUseVideoRender:!1,useMSE:!1,useOffscreen:!1,autoWasm:!0,wasmDecodeErrorReplay:!0,openWebglAlignment:!1},s="init",A="initVideo",n="render",a="playAudio",d="initAudio",c="audioCode",l="videoCode",u="wasmError",h="Invalid NAL unit size",p=1,m=2,g=8,f=9,b="init",y="decode",v="audioDecode",w="close",S="updateConfig",E={fullscreen:"fullscreen$2",webFullscreen:"webFullscreen",decoderWorkerInit:"decoderWorkerInit",play:"play",playing:"playing",pause:"pause",mute:"mute",load:"load",loading:"loading",videoInfo:"videoInfo",timeUpdate:"timeUpdate",audioInfo:"audioInfo",log:"log",error:"error",kBps:"kBps",timeout:"timeout",delayTimeout:"delayTimeout",loadingTimeout:"loadingTimeout",stats:"stats",performance:"performance",record:"record",recording:"recording",recordingTimestamp:"recordingTimestamp",recordStart:"recordStart",recordEnd:"recordEnd",recordCreateError:"recordCreateError",buffer:"buffer",videoFrame:"videoFrame",start:"start",metadata:"metadata",resize:"resize",streamEnd:"streamEnd",streamSuccess:"streamSuccess",streamMessage:"streamMessage",streamError:"streamError",volumechange:"volumechange",destroy:"destroy",mseSourceOpen:"mseSourceOpen",mseSourceClose:"mseSourceClose",mseSourceBufferError:"mseSourceBufferError",mseSourceBufferBusy:"mseSourceBufferBusy",videoWaiting:"videoWaiting",videoTimeUpdate:"videoTimeUpdate",videoSyncAudio:"videoSyncAudio",playToRenderTimes:"playToRenderTimes"},B={load:E.load,timeUpdate:E.timeUpdate,videoInfo:E.videoInfo,audioInfo:E.audioInfo,error:E.error,kBps:E.kBps,log:E.log,start:E.start,timeout:E.timeout,loadingTimeout:E.loadingTimeout,delayTimeout:E.delayTimeout,fullscreen:"fullscreen",play:E.play,pause:E.pause,mute:E.mute,stats:E.stats,performance:E.performance,recordingTimestamp:E.recordingTimestamp,recordStart:E.recordStart,recordEnd:E.recordEnd,playToRenderTimes:E.playToRenderTimes},C={playError:"playIsNotPauseOrUrlIsNull",fetchError:"fetchError",websocketError:"websocketError",webcodecsH265NotSupport:"webcodecsH265NotSupport",mediaSourceH265NotSupport:"mediaSourceH265NotSupport",wasmDecodeError:"wasmDecodeError"},R="notConnect",k="open",T="close",I="error",x={download:"download",base64:"base64",blob:"blob"},D={7:"H264(AVC)",12:"H265(HEVC)"},j=7,L=12,U={10:"AAC",7:"ALAW",8:"MULAW"},F=32,V=33,O=34,M=0,Q=1,W=2,G="mp4",J="webm",P="webcodecs",N="webgl",z="offscreen",Y="key",H="delta",X='video/mp4; codecs="avc1.64002A"',Z="ended",q="open",K="closed",_=1e3,$=27,ee=38,te=40;class ie{constructor(e){this.log=function(t){if(e._opt.debug){for(var i=arguments.length,o=new Array(i>1?i-1:0),r=1;r1?i-1:0),r=1;r1?i-1:0),r=1;r3&&void 0!==arguments[3]?arguments[3]:{};if(!e)return;if(Array.isArray(t))return t.map((t=>this.proxy(e,t,i,o)));e.addEventListener(t,i,o);const r=()=>e.removeEventListener(t,i,o);return this.destroys.push(r),r}destroy(){this.master.debug&&this.master.debug.log("Events","destroy"),this.destroys.forEach((e=>e()))}}var re="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function se(e,t){return e(t={exports:{}},t.exports),t.exports}var Ae=se((function(e){!function(){var t="undefined"!=typeof window&&void 0!==window.document?window.document:{},i=e.exports,o=function(){for(var e,i=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled","fullscreenchange","fullscreenerror"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled","webkitfullscreenchange","webkitfullscreenerror"],["webkitRequestFullScreen","webkitCancelFullScreen","webkitCurrentFullScreenElement","webkitCancelFullScreen","webkitfullscreenchange","webkitfullscreenerror"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled","mozfullscreenchange","mozfullscreenerror"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled","MSFullscreenChange","MSFullscreenError"]],o=0,r=i.length,s={};o0&&void 0!==arguments[0]?arguments[0]:"";const t=e.split(","),i=atob(t[1]),o=t[0].replace("data:","").replace(";base64","");let r=i.length,s=new Uint8Array(r);for(;r--;)s[r]=i.charCodeAt(r);return new File([s],"file",{type:o})}function de(e,t){const i=document.createElement("a");i.download=t,i.href=URL.createObjectURL(e),i.click(),setTimeout((()=>{URL.revokeObjectURL(e)}),fe()?1e3:0)}function ce(){return(new Date).getTime()}function le(e,t,i){return Math.max(Math.min(e,Math.max(t,i)),Math.min(t,i))}function ue(e,t,i){if(e)return"object"==typeof t&&Object.keys(t).forEach((i=>{ue(e,i,t[i])})),e.style[t]=i,e}function he(e,t){let i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(!e)return 0;const o=getComputedStyle(e,null).getPropertyValue(t);return i?parseFloat(o):o}function pe(){return performance&&"function"==typeof performance.now?performance.now():Date.now()}function me(e){let t=0,i=pe();return o=>{t+=o;const r=pe(),s=r-i;s>=1e3&&(e(t/s*1e3),i=r,t=0)}}function ge(){return/iphone|ipod|android.*mobile|windows.*phone|blackberry.*mobile/i.test(window.navigator.userAgent.toLowerCase())}function fe(){const e=window.navigator.userAgent.toLowerCase();return e&&/iphone|ipad|ipod|ios/.test(e)}function be(e){if(null==e||""===e)return"0 KB/S";let t=parseFloat(e);return t=t.toFixed(2),t+"KB/S"}function ye(e){return null==e}function ve(e){return!ye(e)}Ae.isEnabled,(()=>{try{if("object"==typeof WebAssembly&&"function"==typeof WebAssembly.instantiate){const e=new WebAssembly.Module(Uint8Array.of(0,97,115,109,1,0,0,0));if(e instanceof WebAssembly.Module)return new WebAssembly.Instance(e)instanceof WebAssembly.Instance}}catch(e){}})();class we{on(e,t,i){const o=this.e||(this.e={});return(o[e]||(o[e]=[])).push({fn:t,ctx:i}),this}once(e,t,i){const o=this;function r(){o.off(e,r);for(var s=arguments.length,A=new Array(s),n=0;n1?i-1:0),r=1;r{delete i[e]})),void delete this.e;const o=i[e],r=[];if(o&&t)for(let e=0,i=o.length;e{var i=["attribute vec4 vertexPos;","attribute vec4 texturePos;","varying vec2 textureCoord;","void main()","{","gl_Position = vertexPos;","textureCoord = texturePos.xy;","}"].join("\n"),o=["precision highp float;","varying highp vec2 textureCoord;","uniform sampler2D ySampler;","uniform sampler2D uSampler;","uniform sampler2D vSampler;","const mat4 YUV2RGB = mat4","(","1.1643828125, 0, 1.59602734375, -.87078515625,","1.1643828125, -.39176171875, -.81296875, .52959375,","1.1643828125, 2.017234375, 0, -1.081390625,","0, 0, 0, 1",");","void main(void) {","highp float y = texture2D(ySampler, textureCoord).r;","highp float u = texture2D(uSampler, textureCoord).r;","highp float v = texture2D(vSampler, textureCoord).r;","gl_FragColor = vec4(y, u, v, 1) * YUV2RGB;","}"].join("\n");t&&e.pixelStorei(e.UNPACK_ALIGNMENT,1);var r=e.createShader(e.VERTEX_SHADER);e.shaderSource(r,i),e.compileShader(r),e.getShaderParameter(r,e.COMPILE_STATUS)||console.log("Vertex shader failed to compile: "+e.getShaderInfoLog(r));var s=e.createShader(e.FRAGMENT_SHADER);e.shaderSource(s,o),e.compileShader(s),e.getShaderParameter(s,e.COMPILE_STATUS)||console.log("Fragment shader failed to compile: "+e.getShaderInfoLog(s));var A=e.createProgram();e.attachShader(A,r),e.attachShader(A,s),e.linkProgram(A),e.getProgramParameter(A,e.LINK_STATUS)||console.log("Program failed to compile: "+e.getProgramInfoLog(A)),e.useProgram(A);var n=e.createBuffer();e.bindBuffer(e.ARRAY_BUFFER,n),e.bufferData(e.ARRAY_BUFFER,new Float32Array([1,1,-1,1,1,-1,-1,-1]),e.STATIC_DRAW);var a=e.getAttribLocation(A,"vertexPos");e.enableVertexAttribArray(a),e.vertexAttribPointer(a,2,e.FLOAT,!1,0,0);var d=e.createBuffer();e.bindBuffer(e.ARRAY_BUFFER,d),e.bufferData(e.ARRAY_BUFFER,new Float32Array([1,0,0,0,1,1,0,1]),e.STATIC_DRAW);var c=e.getAttribLocation(A,"texturePos");function l(t,i){var o=e.createTexture();return e.bindTexture(e.TEXTURE_2D,o),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.bindTexture(e.TEXTURE_2D,null),e.uniform1i(e.getUniformLocation(A,t),i),o}e.enableVertexAttribArray(c),e.vertexAttribPointer(c,2,e.FLOAT,!1,0,0);var u=l("ySampler",0),h=l("uSampler",1),p=l("vSampler",2);return{render:function(t,i,o,r,s){e.viewport(0,0,t,i),e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,u),e.texImage2D(e.TEXTURE_2D,0,e.LUMINANCE,t,i,0,e.LUMINANCE,e.UNSIGNED_BYTE,o),e.activeTexture(e.TEXTURE1),e.bindTexture(e.TEXTURE_2D,h),e.texImage2D(e.TEXTURE_2D,0,e.LUMINANCE,t/2,i/2,0,e.LUMINANCE,e.UNSIGNED_BYTE,r),e.activeTexture(e.TEXTURE2),e.bindTexture(e.TEXTURE_2D,p),e.texImage2D(e.TEXTURE_2D,0,e.LUMINANCE,t/2,i/2,0,e.LUMINANCE,e.UNSIGNED_BYTE,s),e.drawArrays(e.TRIANGLE_STRIP,0,4)},destroy:function(){try{e.deleteProgram(A),e.deleteBuffer(n),e.deleteBuffer(d),e.deleteTexture(u),e.deleteTexture(h),e.deleteBuffer(p)}catch(e){}}}})(this.contextGl,this.player._opt.openWebglAlignment);this.contextGlRender=e.render,this.contextGlDestroy=e.destroy}_initContext2D(){this.context2D=this.$videoElement.getContext("2d")}_initCanvasRender(){this.player._opt.useWCS&&!this._supportOffscreen()?(this.renderType=P,this._initContext2D()):this._supportOffscreen()?(this.renderType=z,this._bindOffscreen()):(this.renderType=N,this._initContextGl())}_supportOffscreen(){return"function"==typeof this.$videoElement.transferControlToOffscreen&&this.player._opt.useOffscreen}_bindOffscreen(){this.bitmaprenderer=this.$videoElement.getContext("bitmaprenderer")}initCanvasViewSize(){this.$videoElement.width=this.videoInfo.width,this.$videoElement.height=this.videoInfo.height,this.resize()}render(e){switch(this.player.videoTimestamp=e.ts,this.renderType){case z:this.bitmaprenderer.transferFromImageBitmap(e.buffer);break;case N:this.contextGlRender(this.$videoElement.width,this.$videoElement.height,e.output[0],e.output[1],e.output[2]);break;case P:this.context2D.drawImage(e.videoFrame,0,0,this.$videoElement.width,this.$videoElement.height)}}screenshot(e,t,i,o){e=e||ce(),o=o||x.download;const r={png:"image/png",jpeg:"image/jpeg",webp:"image/webp"};let s=.92;!r[t]&&x[t]&&(o=t,t="png",i=void 0),"string"==typeof i&&(o=i,i=void 0),void 0!==i&&(s=Number(i));const A=this.$videoElement.toDataURL(r[t]||r.png,s),n=ae(A);return o===x.base64?A:o===x.blob?n:void(o===x.download&&de(n,e))}clearView(){switch(this.renderType){case z:(function(e,t){const i=document.createElement("canvas");return i.width=e,i.height=t,createImageBitmap(i,0,0,e,t)})(this.$videoElement.width,this.$videoElement.height).then((e=>{this.bitmaprenderer.transferFromImageBitmap(e)}));break;case N:this.contextGl.clear(this.contextGl.COLOR_BUFFER_BIT);break;case P:this.context2D.clearRect(0,0,this.$videoElement.width,this.$videoElement.height)}}resize(){this.player.debug.log("canvasVideo","resize");const e=this.player._opt;let t=this.player.width,i=this.player.height;e.hasControl&&!e.controlAutoHide&&(ge()&&this.player.fullscreen?t-=38:i-=38);let o=this.$videoElement.width,r=this.$videoElement.height;const s=e.rotate;let A=(t-o)/2,n=(i-r)/2;270!==s&&90!==s||(o=this.$videoElement.height,r=this.$videoElement.width);const a=t/o,d=i/r;let c=a>d?d:a;e.isResize||a!==d&&(c=a+","+d),e.isFullResize&&(c=a>d?a:d);let l="scale("+c+")";s&&(l+=" rotate("+s+"deg)"),this.$videoElement.style.transform=l,this.$videoElement.style.left=A+"px",this.$videoElement.style.top=n+"px"}}class Be extends Se{constructor(e){super(),this.player=e;const t=document.createElement("video");t.muted=!0,t.style.position="absolute",t.style.top=0,t.style.left=0,e.$container.appendChild(t),this.$videoElement=t,this.videoInfo={width:"",height:"",encType:""};const i=this.player._opt;i.useWCS&&i.wcsUseVideoRender&&(this.trackGenerator=new MediaStreamTrackGenerator({kind:"video"}),t.srcObject=new MediaStream([this.trackGenerator]),this.vwriter=this.trackGenerator.writable.getWriter()),this.resize();const{proxy:o}=this.player.events;o(this.$videoElement,"canplay",(()=>{this.player.debug.log("Video","canplay")})),o(this.$videoElement,"waiting",(()=>{this.player.emit(E.videoWaiting)})),o(this.$videoElement,"timeupdate",(e=>{})),this.player.debug.log("Video","init")}destroy(){this.player.$container.removeChild(this.$videoElement),this.$videoElement&&(this.$videoElement.src="",this.$videoElement=null),this.trackGenerator&&(this.trackGenerator=null),this.vwriter&&(this.trackGenerator=null),this.init=!1,this.off(),this.player.debug.log("Video","destroy")}play(){this.$videoElement.play()}clearView(){}screenshot(e,t,i,o){e=e||ce(),o=o||x.download;let r=.92;!{png:"image/png",jpeg:"image/jpeg",webp:"image/webp"}[t]&&x[t]&&(o=t,t="png",i=void 0),"string"==typeof i&&(o=i,i=void 0),void 0!==i&&(r=Number(i));const s=this.$videoElement;let A=document.createElement("canvas");A.width=s.videoWidth,A.height=s.videoHeight;A.getContext("2d").drawImage(s,0,0,A.width,A.height);const n=A.toDataURL(x[t]||x.png,r),a=ae(n);return o===x.base64?n:o===x.blob?a:void(o===x.download&&de(a,e))}initCanvasViewSize(){this.resize()}render(e){this.vwriter&&this.vwriter.write(e.videoFrame)}resize(){let e=this.player.width,t=this.player.height;const i=this.player._opt,o=i.rotate;i.hasControl&&!i.controlAutoHide&&(ge()&&this.player.fullscreen?e-=38:t-=38),this.$videoElement.width=e,this.$videoElement.height=t,270!==o&&90!==o||(this.$videoElement.width=t,this.$videoElement.height=e);let r=(e-this.$videoElement.width)/2,s=(t-this.$videoElement.height)/2,A="contain";i.isResize||(A="fill"),i.isFullResize&&(A="none"),this.$videoElement.style.objectFit=A,this.$videoElement.style.transform="rotate("+o+"deg)",this.$videoElement.style.left=r+"px",this.$videoElement.style.top=s+"px"}}class Ce{constructor(e){return new(Ce.getLoaderFactory(e._opt))(e)}static getLoaderFactory(e){return e.useMSE||e.useWCS&&!e.useOffscreen&&e.wcsUseVideoRender?Be:Ee}}class Re extends we{constructor(e){super(),this.bufferList=[],this.player=e,this.scriptNode=null,this.hasInitScriptNode=!1,this.audioContextChannel=null,this.audioContext=new(window.AudioContext||window.webkitAudioContext),this.gainNode=this.audioContext.createGain();const t=this.audioContext.createBufferSource();t.buffer=this.audioContext.createBuffer(1,1,22050),t.connect(this.audioContext.destination),t.noteOn?t.noteOn(0):t.start(0),this.audioBufferSourceNode=t,this.mediaStreamAudioDestinationNode=this.audioContext.createMediaStreamDestination(),this.audioEnabled(!0),this.gainNode.gain.value=0,this.playing=!1,this.audioSyncVideoOption={diff:null},this.audioInfo={encType:"",channels:"",sampleRate:""},this.init=!1,this.hasAudio=!1,this.on(E.videoSyncAudio,(e=>{this.audioSyncVideoOption=e})),this.player.debug.log("AudioContext","init")}destroy(){this.closeAudio(),this.audioContext.close(),this.audioContext=null,this.gainNode=null,this.init=!1,this.hasAudio=!1,this.playing=!1,this.scriptNode&&(this.scriptNode.onaudioprocess=ne,this.scriptNode=null),this.audioBufferSourceNode=null,this.mediaStreamAudioDestinationNode=null,this.hasInitScriptNode=!1,this.audioSyncVideoOption={diff:null},this.audioInfo={encType:"",channels:"",sampleRate:""},this.off(),this.player.debug.log("AudioContext","destroy")}updateAudioInfo(e){e.encTypeCode&&(this.audioInfo.encType=U[e.encTypeCode]),e.channels&&(this.audioInfo.channels=e.channels),e.sampleRate&&(this.audioInfo.sampleRate=e.sampleRate),this.audioInfo.sampleRate&&this.audioInfo.channels&&this.audioInfo.encType&&!this.init&&(this.player.emit(E.audioInfo,this.audioInfo),this.init=!0)}get isPlaying(){return this.playing}get isMute(){return 0===this.gainNode.gain.value||this.isStateSuspended()}get volume(){return this.gainNode.gain.value}get bufferSize(){return this.bufferList.length}initScriptNode(){if(this.playing=!0,this.hasInitScriptNode)return;const e=this.audioInfo.channels,t=this.audioContext.createScriptProcessor(1024,0,e);t.onaudioprocess=t=>{const i=t.outputBuffer;if(this.bufferList.length&&this.playing){if(!this.player._opt.useWCS&&!this.player._opt.useMSE){if(this.audioSyncVideoOption.diff>_)return void this.player.debug.warn("AudioContext",`audioSyncVideoOption more than diff :${this.audioSyncVideoOption.diff}, waiting`);if(this.audioSyncVideoOption.diff<-1e3){this.player.debug.warn("AudioContext",`audioSyncVideoOption less than diff :${this.audioSyncVideoOption.diff}, dropping`);let e=this.bufferList.shift();for(;e.ts-this.player.videoTimestamp<-1e3&&this.bufferList.length>0;)e=this.bufferList.shift();if(0===this.bufferList.length)return}}if(0===this.bufferList.length)return;const t=this.bufferList.shift();t&&t.ts&&(this.player.audioTimestamp=t.ts);for(let o=0;o20&&(this.player.debug.warn("AudioContext",`bufferList is large: ${this.bufferList.length}`),this.bufferList.length>50&&this.bufferList.shift()))}pause(){this.audioSyncVideoOption={diff:null},this.playing=!1,this.clear()}resume(){this.playing=!0}}class ke{constructor(e){return new(ke.getLoaderFactory())(e)}static getLoaderFactory(){return Re}}class Te extends we{constructor(e){super(),this.player=e,this.playing=!1,this.abortController=new AbortController,this.streamRate=me((t=>{e.emit(E.kBps,(t/1024).toFixed(2))})),e.debug.log("FetchStream","init")}destroy(){this.abort(),this.off(),this.streamRate=null,this.player.debug.log("FetchStream","destroy")}fetchStream(e){const{demux:t}=this.player;this.player._times.streamStart=ce(),fetch(e,{signal:this.abortController.signal}).then((e=>{const i=e.body.getReader();this.emit(E.streamSuccess);const o=()=>{i.read().then((e=>{let{done:i,value:r}=e;i?t.close():(this.streamRate&&this.streamRate(r.byteLength),t.dispatch(r),o())})).catch((e=>{t.close(),this.emit(C.fetchError,e),this.player.emit(E.error,C.fetchError),this.abort()}))};o()})).catch((e=>{this.abort(),this.emit(C.fetchError,e),this.player.emit(E.error,C.fetchError)}))}abort(){this.abortController&&(this.abortController.abort(),this.abortController=null)}}class Ie extends we{constructor(e){super(),this.player=e,this.socket=null,this.socketStatus=R,this.wsUrl=null,this.streamRate=me((t=>{e.emit(E.kBps,(t/1024).toFixed(2))})),e.debug.log("WebsocketLoader","init")}destroy(){this.socket&&(this.socket.close(),this.socket=null),this.socketStatus=R,this.streamRate=null,this.wsUrl=null,this.off(),this.player.debug.log("websocketLoader","destroy")}_createWebSocket(){const e=this.player,{debug:t,events:{proxy:i},demux:o}=e;this.socket=new WebSocket(this.wsUrl),this.socket.binaryType="arraybuffer",i(this.socket,"open",(()=>{this.emit(E.streamSuccess),t.log("websocketLoader","socket open"),this.socketStatus=k})),i(this.socket,"message",(e=>{this.streamRate&&this.streamRate(e.data.byteLength),this._handleMessage(e.data)})),i(this.socket,"close",(()=>{t.log("websocketLoader","socket close"),this.emit(E.streamEnd),this.socketStatus=T})),i(this.socket,"error",(e=>{t.log("websocketLoader","socket error"),this.emit(C.websocketError,e),this.player.emit(E.error,C.websocketError),this.socketStatus=I,o.close(),t.log("websocketLoader","socket error:",e)}))}_handleMessage(e){const{demux:t}=this.player;t?t.dispatch(e):this.player.debug.warn("websocketLoader","websocket handle message demux is null")}fetchStream(e){this.player._times.streamStart=ce(),this.wsUrl=e,this._createWebSocket()}}class xe{constructor(e){return new(xe.getLoaderFactory(e._opt.protocol))(e)}static getLoaderFactory(i){return i===t?Te:i===e?Ie:void 0}}var De=se((function(e){function t(e,r){if(!e)throw"First parameter is required.";r=new i(e,r=r||{type:"video"});var s=this;function A(t){t&&(r.initCallback=function(){t(),t=r.initCallback=null});var i=new o(e,r);(h=new i(e,r)).record(),u("recording"),r.disableLogs||console.log("Initialized recorderType:",h.constructor.name,"for output-type:",r.type)}function n(e){if(e=e||function(){},h){if("paused"===s.state)return s.resumeRecording(),void setTimeout((function(){n(e)}),1);"recording"===s.state||r.disableLogs||console.warn('Recording state should be: "recording", however current state is: ',s.state),r.disableLogs||console.log("Stopped recording "+r.type+" stream."),"gif"!==r.type?h.stop(t):(h.stop(),t()),u("stopped")}else m();function t(t){if(h){Object.keys(h).forEach((function(e){"function"!=typeof h[e]&&(s[e]=h[e])}));var i=h.blob;if(!i){if(!t)throw"Recording failed.";h.blob=i=t}if(i&&!r.disableLogs&&console.log(i.type,"->",f(i.size)),e){var o;try{o=c.createObjectURL(i)}catch(e){}"function"==typeof e.call?e.call(s,o):e(o)}r.autoWriteToDisk&&d((function(e){var t={};t[r.type+"Blob"]=e,I.Store(t)}))}else"function"==typeof e.call?e.call(s,""):e("")}}function a(e){postMessage((new FileReaderSync).readAsDataURL(e))}function d(e,t){if(!e)throw"Pass a callback function over getDataURL.";var i=t?t.blob:(h||{}).blob;if(!i)return r.disableLogs||console.warn("Blob encoder did not finish its job yet."),void setTimeout((function(){d(e,t)}),1e3);if("undefined"==typeof Worker||navigator.mozGetUserMedia){var o=new FileReader;o.readAsDataURL(i),o.onload=function(t){e(t.target.result)}}else{var s=function(e){try{var t=c.createObjectURL(new Blob([e.toString(),"this.onmessage = function (eee) {"+e.name+"(eee.data);}"],{type:"application/javascript"})),i=new Worker(t);return c.revokeObjectURL(t),i}catch(e){}}(a);s.onmessage=function(t){e(t.data)},s.postMessage(i)}}function l(e){e=e||0,"paused"!==s.state?"stopped"!==s.state&&(e>=s.recordingDuration?n(s.onRecordingStopped):(e+=1e3,setTimeout((function(){l(e)}),1e3))):setTimeout((function(){l(e)}),1e3)}function u(e){s&&(s.state=e,"function"==typeof s.onStateChanged.call?s.onStateChanged.call(s,e):s.onStateChanged(e))}var h,p='It seems that recorder is destroyed or "startRecording" is not invoked for '+r.type+" recorder.";function m(){!0!==r.disableLogs&&console.warn(p)}var g={startRecording:function(t){return r.disableLogs||console.log("RecordRTC version: ",s.version),t&&(r=new i(e,t)),r.disableLogs||console.log("started recording "+r.type+" stream."),h?(h.clearRecordedData(),h.record(),u("recording"),s.recordingDuration&&l(),s):(A((function(){s.recordingDuration&&l()})),s)},stopRecording:n,pauseRecording:function(){h?"recording"===s.state?(u("paused"),h.pause(),r.disableLogs||console.log("Paused recording.")):r.disableLogs||console.warn("Unable to pause the recording. Recording state: ",s.state):m()},resumeRecording:function(){h?"paused"===s.state?(u("recording"),h.resume(),r.disableLogs||console.log("Resumed recording.")):r.disableLogs||console.warn("Unable to resume the recording. Recording state: ",s.state):m()},initRecorder:A,setRecordingDuration:function(e,t){if(void 0===e)throw"recordingDuration is required.";if("number"!=typeof e)throw"recordingDuration must be a number.";return s.recordingDuration=e,s.onRecordingStopped=t||function(){},{onRecordingStopped:function(e){s.onRecordingStopped=e}}},clearRecordedData:function(){h?(h.clearRecordedData(),r.disableLogs||console.log("Cleared old recorded data.")):m()},getBlob:function(){if(h)return h.blob;m()},getDataURL:d,toURL:function(){if(h)return c.createObjectURL(h.blob);m()},getInternalRecorder:function(){return h},save:function(e){h?b(h.blob,e):m()},getFromDisk:function(e){h?t.getFromDisk(r.type,e):m()},setAdvertisementArray:function(e){r.advertisement=[];for(var t=e.length,i=0;i-1&&"netscape"in window&&/ rv:/.test(navigator.userAgent),p=!u&&!l&&!!navigator.webkitGetUserMedia||y()||-1!==navigator.userAgent.toLowerCase().indexOf("chrome/"),m=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);m&&!p&&-1!==navigator.userAgent.indexOf("CriOS")&&(m=!1,p=!0);var g=window.MediaStream;function f(e){if(0===e)return"0 Bytes";var t=parseInt(Math.floor(Math.log(e)/Math.log(1e3)),10);return(e/Math.pow(1e3,t)).toPrecision(3)+" "+["Bytes","KB","MB","GB","TB"][t]}function b(e,t){if(!e)throw"Blob object is required.";if(!e.type)try{e.type="video/webm"}catch(e){}var i=(e.type||"video/webm").split("/")[1];if(-1!==i.indexOf(";")&&(i=i.split(";")[0]),t&&-1!==t.indexOf(".")){var o=t.split(".");t=o[0],i=o[1]}var r=(t||Math.round(9999999999*Math.random())+888888888)+"."+i;if(void 0!==navigator.msSaveOrOpenBlob)return navigator.msSaveOrOpenBlob(e,r);if(void 0!==navigator.msSaveBlob)return navigator.msSaveBlob(e,r);var s=document.createElement("a");s.href=c.createObjectURL(e),s.download=r,s.style="display:none;opacity:0;color:transparent;",(document.body||document.documentElement).appendChild(s),"function"==typeof s.click?s.click():(s.target="_blank",s.dispatchEvent(new MouseEvent("click",{view:window,bubbles:!0,cancelable:!0}))),c.revokeObjectURL(s.href)}function y(){return"undefined"!=typeof window&&"object"==typeof window.process&&"renderer"===window.process.type||(!("undefined"==typeof process||"object"!=typeof process.versions||!process.versions.electron)||"object"==typeof navigator&&"string"==typeof navigator.userAgent&&navigator.userAgent.indexOf("Electron")>=0)}function v(e,t){return e&&e.getTracks?e.getTracks().filter((function(e){return e.kind===(t||"audio")})):[]}function w(e,t){"srcObject"in t?t.srcObject=e:"mozSrcObject"in t?t.mozSrcObject=e:t.srcObject=e}void 0===g&&"undefined"!=typeof webkitMediaStream&&(g=webkitMediaStream),void 0!==g&&void 0===g.prototype.stop&&(g.prototype.stop=function(){this.getTracks().forEach((function(e){e.stop()}))}),t.invokeSaveAsDialog=b,t.getTracks=v,t.getSeekableBlob=function(e,t){if("undefined"==typeof EBML)throw new Error("Please link: https://www.webrtc-experiment.com/EBML.js");var i=new EBML.Reader,o=new EBML.Decoder,r=EBML.tools,s=new FileReader;s.onload=function(e){o.decode(this.result).forEach((function(e){i.read(e)})),i.stop();var s=r.makeMetadataSeekable(i.metadatas,i.duration,i.cues),A=this.result.slice(i.metadataSize),n=new Blob([s,A],{type:"video/webm"});t(n)},s.readAsArrayBuffer(e)},t.bytesToSize=f,t.isElectron=y;var S={};function E(){if(h||m||l)return!0;var e,t,i=navigator.userAgent,o=""+parseFloat(navigator.appVersion),r=parseInt(navigator.appVersion,10);return(p||u)&&(e=i.indexOf("Chrome"),o=i.substring(e+7)),-1!==(t=o.indexOf(";"))&&(o=o.substring(0,t)),-1!==(t=o.indexOf(" "))&&(o=o.substring(0,t)),r=parseInt(""+o,10),isNaN(r)&&(o=""+parseFloat(navigator.appVersion),r=parseInt(navigator.appVersion,10)),r>=49}function B(e,t){var i=this;if(void 0===e)throw'First argument "MediaStream" is required.';if("undefined"==typeof MediaRecorder)throw"Your browser does not support the Media Recorder API. Please try other modules e.g. WhammyRecorder or StereoAudioRecorder.";if("audio"===(t=t||{mimeType:"video/webm"}).type){var o;if(v(e,"video").length&&v(e,"audio").length)navigator.mozGetUserMedia?(o=new g).addTrack(v(e,"audio")[0]):o=new g(v(e,"audio")),e=o;t.mimeType&&-1!==t.mimeType.toString().toLowerCase().indexOf("audio")||(t.mimeType=p?"audio/webm":"audio/ogg"),t.mimeType&&"audio/ogg"!==t.mimeType.toString().toLowerCase()&&navigator.mozGetUserMedia&&(t.mimeType="audio/ogg")}var r,s=[];function A(){i.timestamps.push((new Date).getTime()),"function"==typeof t.onTimeStamp&&t.onTimeStamp(i.timestamps[i.timestamps.length-1],i.timestamps)}function n(e){return r&&r.mimeType?r.mimeType:e.mimeType||"video/webm"}function a(){s=[],r=null,i.timestamps=[]}this.getArrayOfBlobs=function(){return s},this.record=function(){i.blob=null,i.clearRecordedData(),i.timestamps=[],d=[],s=[];var o=t;t.disableLogs||console.log("Passing following config over MediaRecorder API.",o),r&&(r=null),p&&!E()&&(o="video/vp8"),"function"==typeof MediaRecorder.isTypeSupported&&o.mimeType&&(MediaRecorder.isTypeSupported(o.mimeType)||(t.disableLogs||console.warn("MediaRecorder API seems unable to record mimeType:",o.mimeType),o.mimeType="audio"===t.type?"audio/webm":"video/webm"));try{r=new MediaRecorder(e,o),t.mimeType=o.mimeType}catch(t){r=new MediaRecorder(e)}o.mimeType&&!MediaRecorder.isTypeSupported&&"canRecordMimeType"in r&&!1===r.canRecordMimeType(o.mimeType)&&(t.disableLogs||console.warn("MediaRecorder API seems unable to record mimeType:",o.mimeType)),r.ondataavailable=function(e){if(e.data&&d.push("ondataavailable: "+f(e.data.size)),"number"!=typeof t.timeSlice)!e.data||!e.data.size||e.data.size<100||i.blob?i.recordingCallback&&(i.recordingCallback(new Blob([],{type:n(o)})),i.recordingCallback=null):(i.blob=t.getNativeBlob?e.data:new Blob([e.data],{type:n(o)}),i.recordingCallback&&(i.recordingCallback(i.blob),i.recordingCallback=null));else if(e.data&&e.data.size&&(s.push(e.data),A(),"function"==typeof t.ondataavailable)){var r=t.getNativeBlob?e.data:new Blob([e.data],{type:n(o)});t.ondataavailable(r)}},r.onstart=function(){d.push("started")},r.onpause=function(){d.push("paused")},r.onresume=function(){d.push("resumed")},r.onstop=function(){d.push("stopped")},r.onerror=function(e){e&&(e.name||(e.name="UnknownError"),d.push("error: "+e),t.disableLogs||(-1!==e.name.toString().toLowerCase().indexOf("invalidstate")?console.error("The MediaRecorder is not in a state in which the proposed operation is allowed to be executed.",e):-1!==e.name.toString().toLowerCase().indexOf("notsupported")?console.error("MIME type (",o.mimeType,") is not supported.",e):-1!==e.name.toString().toLowerCase().indexOf("security")?console.error("MediaRecorder security error",e):"OutOfMemory"===e.name?console.error("The UA has exhaused the available memory. User agents SHOULD provide as much additional information as possible in the message attribute.",e):"IllegalStreamModification"===e.name?console.error("A modification to the stream has occurred that makes it impossible to continue recording. An example would be the addition of a Track while recording is occurring. User agents SHOULD provide as much additional information as possible in the message attribute.",e):"OtherRecordingError"===e.name?console.error("Used for an fatal error other than those listed above. User agents SHOULD provide as much additional information as possible in the message attribute.",e):"GenericError"===e.name?console.error("The UA cannot provide the codec or recording option that has been requested.",e):console.error("MediaRecorder Error",e)),function(e){if(!i.manuallyStopped&&r&&"inactive"===r.state)return delete t.timeslice,void r.start(6e5);setTimeout(void 0,1e3)}(),"inactive"!==r.state&&"stopped"!==r.state&&r.stop())},"number"==typeof t.timeSlice?(A(),r.start(t.timeSlice)):r.start(36e5),t.initCallback&&t.initCallback()},this.timestamps=[],this.stop=function(e){e=e||function(){},i.manuallyStopped=!0,r&&(this.recordingCallback=e,"recording"===r.state&&r.stop(),"number"==typeof t.timeSlice&&setTimeout((function(){i.blob=new Blob(s,{type:n(t)}),i.recordingCallback(i.blob)}),100))},this.pause=function(){r&&"recording"===r.state&&r.pause()},this.resume=function(){r&&"paused"===r.state&&r.resume()},this.clearRecordedData=function(){r&&"recording"===r.state&&i.stop(a),a()},this.getInternalRecorder=function(){return r},this.blob=null,this.getState=function(){return r&&r.state||"inactive"};var d=[];this.getAllStates=function(){return d},void 0===t.checkForInactiveTracks&&(t.checkForInactiveTracks=!1);i=this;!function o(){if(r&&!1!==t.checkForInactiveTracks)return!1===function(){if("active"in e){if(!e.active)return!1}else if("ended"in e&&e.ended)return!1;return!0}()?(t.disableLogs||console.log("MediaStream seems stopped."),void i.stop()):void setTimeout(o,1e3)}(),this.name="MediaStreamRecorder",this.toString=function(){return this.name}}function C(e,i){if(!v(e,"audio").length)throw"Your stream has no audio tracks.";var o,r=this,s=[],A=[],n=!1,a=0,d=2,l=(i=i||{}).desiredSampRate;function u(){if(!1===i.checkForInactiveTracks)return!0;if("active"in e){if(!e.active)return!1}else if("ended"in e&&e.ended)return!1;return!0}function h(e,t){function i(e,t){var i,o=e.numberOfAudioChannels,r=e.leftBuffers.slice(0),s=e.rightBuffers.slice(0),A=e.sampleRate,n=e.internalInterleavedLength,a=e.desiredSampRate;function d(e,t,i){var o=Math.round(e.length*(t/i)),r=[],s=Number((e.length-1)/(o-1));r[0]=e[0];for(var A=1;A96e3)&&(i.disableLogs||console.log("sample-rate must be under range 22050 and 96000.")),i.disableLogs||i.desiredSampRate&&console.log("Desired sample-rate: "+i.desiredSampRate);var y=!1;function w(){s=[],A=[],a=0,E=!1,n=!1,y=!1,p=null,r.leftchannel=s,r.rightchannel=A,r.numberOfAudioChannels=d,r.desiredSampRate=l,r.sampleRate=b,r.recordingLength=a,B={left:[],right:[],recordingLength:0}}function S(){o&&(o.onaudioprocess=null,o.disconnect(),o=null),m&&(m.disconnect(),m=null),w()}this.pause=function(){y=!0},this.resume=function(){if(!1===u())throw"Please make sure MediaStream is active.";if(!n)return i.disableLogs||console.log("Seems recording has been restarted."),void this.record();y=!1},this.clearRecordedData=function(){i.checkForInactiveTracks=!1,n&&this.stop(S),S()},this.name="StereoAudioRecorder",this.toString=function(){return this.name};var E=!1;o.onaudioprocess=function(e){if(!y)if(!1===u()&&(i.disableLogs||console.log("MediaStream seems stopped."),o.disconnect(),n=!1),n){E||(E=!0,i.onAudioProcessStarted&&i.onAudioProcessStarted(),i.initCallback&&i.initCallback());var t=e.inputBuffer.getChannelData(0),c=new Float32Array(t);if(s.push(c),2===d){var l=e.inputBuffer.getChannelData(1),h=new Float32Array(l);A.push(h)}a+=f,r.recordingLength=a,void 0!==i.timeSlice&&(B.recordingLength+=f,B.left.push(c),2===d&&B.right.push(h))}else m&&(m.disconnect(),m=null)},p.createMediaStreamDestination?o.connect(p.createMediaStreamDestination()):o.connect(p.destination),this.leftchannel=s,this.rightchannel=A,this.numberOfAudioChannels=d,this.desiredSampRate=l,this.sampleRate=b,r.recordingLength=a;var B={left:[],right:[],recordingLength:0};function C(){n&&"function"==typeof i.ondataavailable&&void 0!==i.timeSlice&&(B.left.length?(h({desiredSampRate:l,sampleRate:b,numberOfAudioChannels:d,internalInterleavedLength:B.recordingLength,leftBuffers:B.left,rightBuffers:1===d?[]:B.right},(function(e,t){var o=new Blob([t],{type:"audio/wav"});i.ondataavailable(o),setTimeout(C,i.timeSlice)})),B={left:[],right:[],recordingLength:0}):setTimeout(C,i.timeSlice))}}function R(e,t){if("undefined"==typeof html2canvas)throw"Please link: https://www.webrtc-experiment.com/screenshot.js";(t=t||{}).frameInterval||(t.frameInterval=10);var i=!1;["captureStream","mozCaptureStream","webkitCaptureStream"].forEach((function(e){e in document.createElement("canvas")&&(i=!0)}));var o,r,s,A=!(!window.webkitRTCPeerConnection&&!window.webkitGetUserMedia||!window.chrome),n=50,a=navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./);if(A&&a&&a[2]&&(n=parseInt(a[2],10)),A&&n<52&&(i=!1),t.useWhammyRecorder&&(i=!1),i)if(t.disableLogs||console.log("Your browser supports both MediRecorder API and canvas.captureStream!"),e instanceof HTMLCanvasElement)o=e;else{if(!(e instanceof CanvasRenderingContext2D))throw"Please pass either HTMLCanvasElement or CanvasRenderingContext2D.";o=e.canvas}else navigator.mozGetUserMedia&&(t.disableLogs||console.error("Canvas recording is NOT supported in Firefox."));this.record=function(){if(s=!0,i&&!t.useWhammyRecorder){var e;"captureStream"in o?e=o.captureStream(25):"mozCaptureStream"in o?e=o.mozCaptureStream(25):"webkitCaptureStream"in o&&(e=o.webkitCaptureStream(25));try{var A=new g;A.addTrack(v(e,"video")[0]),e=A}catch(e){}if(!e)throw"captureStream API are NOT available.";(r=new B(e,{mimeType:t.mimeType||"video/webm"})).record()}else h.frames=[],u=(new Date).getTime(),l();t.initCallback&&t.initCallback()},this.getWebPImages=function(i){if("canvas"===e.nodeName.toLowerCase()){var o=h.frames.length;h.frames.forEach((function(e,i){var r=o-i;t.disableLogs||console.log(r+"/"+o+" frames remaining"),t.onEncodingCallback&&t.onEncodingCallback(r,o);var s=e.image.toDataURL("image/webp",1);h.frames[i].image=s})),t.disableLogs||console.log("Generating WebM"),i()}else i()},this.stop=function(e){s=!1;var o=this;i&&r?r.stop(e):this.getWebPImages((function(){h.compile((function(i){t.disableLogs||console.log("Recording finished!"),o.blob=i,o.blob.forEach&&(o.blob=new Blob([],{type:"video/webm"})),e&&e(o.blob),h.frames=[]}))}))};var d=!1;function c(){h.frames=[],s=!1,d=!1}function l(){if(d)return u=(new Date).getTime(),setTimeout(l,500);if("canvas"===e.nodeName.toLowerCase()){var i=(new Date).getTime()-u;return u=(new Date).getTime(),h.frames.push({image:(o=document.createElement("canvas"),r=o.getContext("2d"),o.width=e.width,o.height=e.height,r.drawImage(e,0,0),o),duration:i}),void(s&&setTimeout(l,t.frameInterval))}var o,r;html2canvas(e,{grabMouse:void 0===t.showMousePointer||t.showMousePointer,onrendered:function(e){var i=(new Date).getTime()-u;if(!i)return setTimeout(l,t.frameInterval);u=(new Date).getTime(),h.frames.push({image:e.toDataURL("image/webp",1),duration:i}),s&&setTimeout(l,t.frameInterval)}})}this.pause=function(){d=!0,r instanceof B&&r.pause()},this.resume=function(){d=!1,r instanceof B?r.resume():s||this.record()},this.clearRecordedData=function(){s&&this.stop(c),c()},this.name="CanvasRecorder",this.toString=function(){return this.name};var u=(new Date).getTime(),h=new T.Video(100)}function k(e,t){function i(e){e=void 0!==e?e:10;var t=(new Date).getTime()-a;return t?s?(a=(new Date).getTime(),setTimeout(i,100)):(a=(new Date).getTime(),n.paused&&n.play(),l.drawImage(n,0,0,c.width,c.height),d.frames.push({duration:t,image:c.toDataURL("image/webp")}),void(r||setTimeout(i,e,e))):setTimeout(i,e,e)}function o(e,t,i,o,r){var s=document.createElement("canvas");s.width=c.width,s.height=c.height;var A,n,a,d=s.getContext("2d"),l=[],u=-1===t,h=t&&t>0&&t<=e.length?t:e.length,p=0,m=0,g=0,f=Math.sqrt(Math.pow(255,2)+Math.pow(255,2)+Math.pow(255,2)),b=i&&i>=0&&i<=1?i:0,y=o&&o>=0&&o<=1?o:0,v=!1;n=-1,a=(A={length:h,functionToLoop:function(t,i){var o,r,s,A=function(){!v&&s-o<=s*y||(u&&(v=!0),l.push(e[i])),t()};if(v)A();else{var n=new Image;n.onload=function(){d.drawImage(n,0,0,c.width,c.height);var e=d.getImageData(0,0,c.width,c.height);o=0,r=e.data.length,s=e.data.length/4;for(var t=0;t127)throw"TrackNumber > 127 not supported";return[128|e.trackNum,e.timecode>>8,255&e.timecode,t].map((function(e){return String.fromCharCode(e)})).join("")+e.frame}({discardable:0,frame:e.data.slice(4),invisible:0,keyframe:1,lacing:0,trackNum:1,timecode:Math.round(t)});return t+=e.duration,{data:i,id:163}})))}function i(e){for(var t=[];e>0;)t.push(255&e),e>>=8;return new Uint8Array(t.reverse())}function o(e){var t=[];e=(e.length%8?new Array(9-e.length%8).join("0"):"")+e;for(var i=0;i1?2*s[0].width:s[0].width;var n=1;3!==e&&4!==e||(n=2),5!==e&&6!==e||(n=3),7!==e&&8!==e||(n=4),9!==e&&10!==e||(n=5),r.height=s[0].height*n}else r.width=A.width||360,r.height=A.height||240;t&&t instanceof HTMLVideoElement&&u(t),s.forEach((function(e,t){u(e,t)})),setTimeout(l,A.frameInterval)}}function u(e,t){if(!o){var i=0,r=0,A=e.width,n=e.height;1===t&&(i=e.width),2===t&&(r=e.height),3===t&&(i=e.width,r=e.height),4===t&&(r=2*e.height),5===t&&(i=e.width,r=2*e.height),6===t&&(r=3*e.height),7===t&&(i=e.width,r=3*e.height),void 0!==e.stream.left&&(i=e.stream.left),void 0!==e.stream.top&&(r=e.stream.top),void 0!==e.stream.width&&(A=e.stream.width),void 0!==e.stream.height&&(n=e.stream.height),s.drawImage(e,i,r,A,n),"function"==typeof e.stream.onRender&&e.stream.onRender(s,i,r,A,n,t)}}function h(e){var i=document.createElement("video");return function(e,t){"srcObject"in t?t.srcObject=e:"mozSrcObject"in t?t.mozSrcObject=e:t.srcObject=e}(e,i),i.className=t,i.muted=!0,i.volume=0,i.width=e.width||A.width||360,i.height=e.height||A.height||240,i.play(),i}function p(t){i=[],(t=t||e).forEach((function(e){if(e.getTracks().filter((function(e){return"video"===e.kind})).length){var t=h(e);t.stream=e,i.push(t)}}))}void 0!==n?c.AudioContext=n:"undefined"!=typeof webkitAudioContext&&(c.AudioContext=webkitAudioContext),this.startDrawingFrames=function(){l()},this.appendStreams=function(t){if(!t)throw"First parameter is required.";t instanceof Array||(t=[t]),t.forEach((function(t){var o=new d;if(t.getTracks().filter((function(e){return"video"===e.kind})).length){var r=h(t);r.stream=t,i.push(r),o.addTrack(t.getTracks().filter((function(e){return"video"===e.kind}))[0])}if(t.getTracks().filter((function(e){return"audio"===e.kind})).length){var s=A.audioContext.createMediaStreamSource(t);A.audioDestination=A.audioContext.createMediaStreamDestination(),s.connect(A.audioDestination),o.addTrack(A.audioDestination.stream.getTracks().filter((function(e){return"audio"===e.kind}))[0])}e.push(o)}))},this.releaseStreams=function(){i=[],o=!0,A.gainNode&&(A.gainNode.disconnect(),A.gainNode=null),A.audioSources.length&&(A.audioSources.forEach((function(e){e.disconnect()})),A.audioSources=[]),A.audioDestination&&(A.audioDestination.disconnect(),A.audioDestination=null),A.audioContext&&A.audioContext.close(),A.audioContext=null,s.clearRect(0,0,r.width,r.height),r.stream&&(r.stream.stop(),r.stream=null)},this.resetVideoStreams=function(e){!e||e instanceof Array||(e=[e]),p(e)},this.name="MultiStreamsMixer",this.toString=function(){return this.name},this.getMixedStream=function(){o=!1;var t=function(){var e;p(),"captureStream"in r?e=r.captureStream():"mozCaptureStream"in r?e=r.mozCaptureStream():A.disableLogs||console.error("Upgrade to latest Chrome or otherwise enable this flag: chrome://flags/#enable-experimental-web-platform-features");var t=new d;return e.getTracks().filter((function(e){return"video"===e.kind})).forEach((function(e){t.addTrack(e)})),r.stream=t,t}(),i=function(){c.AudioContextConstructor||(c.AudioContextConstructor=new c.AudioContext);A.audioContext=c.AudioContextConstructor,A.audioSources=[],!0===A.useGainNode&&(A.gainNode=A.audioContext.createGain(),A.gainNode.connect(A.audioContext.destination),A.gainNode.gain.value=0);var t=0;if(e.forEach((function(e){if(e.getTracks().filter((function(e){return"audio"===e.kind})).length){t++;var i=A.audioContext.createMediaStreamSource(e);!0===A.useGainNode&&i.connect(A.gainNode),A.audioSources.push(i)}})),!t)return;return A.audioDestination=A.audioContext.createMediaStreamDestination(),A.audioSources.forEach((function(e){e.connect(A.audioDestination)})),A.audioDestination.stream}();return i&&i.getTracks().filter((function(e){return"audio"===e.kind})).forEach((function(e){t.addTrack(e)})),e.forEach((function(e){e.fullcanvas})),t}}function j(e,t){e=e||[];var i,o,r=this;(t=t||{elementClass:"multi-streams-mixer",mimeType:"video/webm",video:{width:360,height:240}}).frameInterval||(t.frameInterval=10),t.video||(t.video={}),t.video.width||(t.video.width=360),t.video.height||(t.video.height=240),this.record=function(){var r;i=new D(e,t.elementClass||"multi-streams-mixer"),(r=[],e.forEach((function(e){v(e,"video").forEach((function(e){r.push(e)}))})),r).length&&(i.frameInterval=t.frameInterval||10,i.width=t.video.width||360,i.height=t.video.height||240,i.startDrawingFrames()),t.previewStream&&"function"==typeof t.previewStream&&t.previewStream(i.getMixedStream()),(o=new B(i.getMixedStream(),t)).record()},this.stop=function(e){o&&o.stop((function(t){r.blob=t,e(t),r.clearRecordedData()}))},this.pause=function(){o&&o.pause()},this.resume=function(){o&&o.resume()},this.clearRecordedData=function(){o&&(o.clearRecordedData(),o=null),i&&(i.releaseStreams(),i=null)},this.addStreams=function(r){if(!r)throw"First parameter is required.";r instanceof Array||(r=[r]),e.concat(r),o&&i&&(i.appendStreams(r),t.previewStream&&"function"==typeof t.previewStream&&t.previewStream(i.getMixedStream()))},this.resetVideoStreams=function(e){i&&(!e||e instanceof Array||(e=[e]),i.resetVideoStreams(e))},this.getMixer=function(){return i},this.name="MultiStreamRecorder",this.toString=function(){return this.name}}function L(e,t){var i,o,r;function s(){return new ReadableStream({start:function(o){var r=document.createElement("canvas"),s=document.createElement("video"),A=!0;s.srcObject=e,s.muted=!0,s.height=t.height,s.width=t.width,s.volume=0,s.onplaying=function(){r.width=t.width,r.height=t.height;var e=r.getContext("2d"),n=1e3/t.frameRate,a=setInterval((function(){if(i&&(clearInterval(a),o.close()),A&&(A=!1,t.onVideoProcessStarted&&t.onVideoProcessStarted()),e.drawImage(s,0,0),"closed"!==o._controlledReadableStream.state)try{o.enqueue(e.getImageData(0,0,t.width,t.height))}catch(e){}}),n)},s.play()}})}function A(e,a){if(!t.workerPath&&!a)return i=!1,void fetch("https://unpkg.com/webm-wasm@latest/dist/webm-worker.js").then((function(t){t.arrayBuffer().then((function(t){A(e,t)}))}));if(!t.workerPath&&a instanceof ArrayBuffer){var d=new Blob([a],{type:"text/javascript"});t.workerPath=c.createObjectURL(d)}t.workerPath||console.error("workerPath parameter is missing."),(o=new Worker(t.workerPath)).postMessage(t.webAssemblyPath||"https://unpkg.com/webm-wasm@latest/dist/webm-wasm.wasm"),o.addEventListener("message",(function(e){"READY"===e.data?(o.postMessage({width:t.width,height:t.height,bitrate:t.bitrate||1200,timebaseDen:t.frameRate||30,realtime:t.realtime}),s().pipeTo(new WritableStream({write:function(e){i?console.error("Got image, but recorder is finished!"):o.postMessage(e.data.buffer,[e.data.buffer])}}))):e.data&&(r||n.push(e.data))}))}"undefined"!=typeof ReadableStream&&"undefined"!=typeof WritableStream||console.error("Following polyfill is strongly recommended: https://unpkg.com/@mattiasbuelens/web-streams-polyfill/dist/polyfill.min.js"),(t=t||{}).width=t.width||640,t.height=t.height||480,t.frameRate=t.frameRate||30,t.bitrate=t.bitrate||1200,t.realtime=t.realtime||!0,this.record=function(){n=[],r=!1,this.blob=null,A(e),"function"==typeof t.initCallback&&t.initCallback()},this.pause=function(){r=!0},this.resume=function(){r=!1};var n=[];this.stop=function(e){i=!0;var t=this;!function(e){o?(o.addEventListener("message",(function(t){null===t.data&&(o.terminate(),o=null,e&&e())})),o.postMessage(null)):e&&e()}((function(){t.blob=new Blob(n,{type:"video/webm"}),e(t.blob)}))},this.name="WebAssemblyRecorder",this.toString=function(){return this.name},this.clearRecordedData=function(){n=[],r=!1,this.blob=null},this.blob=null}t.DiskStorage=I,t.GifRecorder=x,t.MultiStreamRecorder=j,t.RecordRTCPromisesHandler=function(e,i){if(!this)throw'Use "new RecordRTCPromisesHandler()"';if(void 0===e)throw'First argument "MediaStream" is required.';var o=this;o.recordRTC=new t(e,i),this.startRecording=function(){return new Promise((function(e,t){try{o.recordRTC.startRecording(),e()}catch(e){t(e)}}))},this.stopRecording=function(){return new Promise((function(e,t){try{o.recordRTC.stopRecording((function(i){o.blob=o.recordRTC.getBlob(),o.blob&&o.blob.size?e(i):t("Empty blob.",o.blob)}))}catch(e){t(e)}}))},this.pauseRecording=function(){return new Promise((function(e,t){try{o.recordRTC.pauseRecording(),e()}catch(e){t(e)}}))},this.resumeRecording=function(){return new Promise((function(e,t){try{o.recordRTC.resumeRecording(),e()}catch(e){t(e)}}))},this.getDataURL=function(e){return new Promise((function(e,t){try{o.recordRTC.getDataURL((function(t){e(t)}))}catch(e){t(e)}}))},this.getBlob=function(){return new Promise((function(e,t){try{e(o.recordRTC.getBlob())}catch(e){t(e)}}))},this.getInternalRecorder=function(){return new Promise((function(e,t){try{e(o.recordRTC.getInternalRecorder())}catch(e){t(e)}}))},this.reset=function(){return new Promise((function(e,t){try{e(o.recordRTC.reset())}catch(e){t(e)}}))},this.destroy=function(){return new Promise((function(e,t){try{e(o.recordRTC.destroy())}catch(e){t(e)}}))},this.getState=function(){return new Promise((function(e,t){try{e(o.recordRTC.getState())}catch(e){t(e)}}))},this.blob=null,this.version="5.6.2"},t.WebAssemblyRecorder=L}));class je extends we{constructor(e){super(),this.player=e,this.fileName="",this.fileType=J,this.isRecording=!1,this.recordingTimestamp=0,this.recordingInterval=null,e.debug.log("Recorder","init")}destroy(){this._reset(),this.player.debug.log("Recorder","destroy")}setFileName(e,t){this.fileName=e,G!==t&&J!==t||(this.fileType=t)}get recording(){return this.isRecording}get recordTime(){return this.recordingTimestamp}startRecord(){const e=this.player.debug,t={type:"video",mimeType:"video/webm;codecs=h264",onTimeStamp:t=>{e.log("Recorder","record timestamp :"+t)},disableLogs:!this.player._opt.debug};try{const e=this.player.video.$videoElement.captureStream(25);if(this.player.audio&&this.player.audio.mediaStreamAudioDestinationNode&&this.player.audio.mediaStreamAudioDestinationNode.stream&&!this.player.audio.isStateSuspended()&&this.player.audio.hasAudio&&this.player._opt.hasAudio){const t=this.player.audio.mediaStreamAudioDestinationNode.stream;if(t.getAudioTracks().length>0){const i=t.getAudioTracks()[0];i&&i.enabled&&e.addTrack(i)}}this.recorder=De(e,t)}catch(t){e.error("Recorder",t),this.emit(E.recordCreateError)}this.recorder&&(this.isRecording=!0,this.player.emit(E.recording,!0),this.recorder.startRecording(),e.log("Recorder","start recording"),this.player.emit(E.recordStart),this.recordingInterval=window.setInterval((()=>{this.recordingTimestamp+=1,this.player.emit(E.recordingTimestamp,this.recordingTimestamp)}),1e3))}stopRecordAndSave(){this.recorder&&this.isRecording&&this.recorder.stopRecording((()=>{this.player.debug.log("Recorder","stop recording"),this.player.emit(E.recordEnd),function(e,t,i){const o=window.URL.createObjectURL(e),r=document.createElement("a");r.href=o,r.download=(t||ce())+"."+(i||J),r.click(),setTimeout((()=>{window.URL.revokeObjectURL(o)}),fe()?1e3:0)}(this.recorder.getBlob(),this.fileName,this.fileType),this._reset(),this.player.emit(E.recording,!1)}))}_reset(){this.isRecording=!1,this.recordingTimestamp=0,this.recorder&&(this.recorder.destroy(),this.recorder=null),this.fileName=null,this.recordingInterval&&clearInterval(this.recordingInterval),this.recordingInterval=null}}class Le{constructor(e){return new(Le.getLoaderFactory())(e)}static getLoaderFactory(){return je}}class Ue{constructor(e){this.player=e,this.decoderWorker=new Worker(e._opt.decoder),this._initDecoderWorker(),e.debug.log("decoderWorker","init")}destroy(){this.decoderWorker.postMessage({cmd:w}),this.decoderWorker.terminate(),this.decoderWorker=null,this.player.debug.log("decoderWorker","destroy")}_initDecoderWorker(){const{debug:e,events:{proxy:t}}=this.player;this.decoderWorker.onmessage=t=>{const i=t.data;switch(i.cmd){case s:e.log("decoderWorker","onmessage:",s),this.player.loaded||this.player.emit(E.load),this.player.emit(E.decoderWorkerInit),this._initWork();break;case l:e.log("decoderWorker","onmessage:",l,i.code),this.player._times.decodeStart||(this.player._times.decodeStart=ce()),this.player.video.updateVideoInfo({encTypeCode:i.code});break;case c:e.log("decoderWorker","onmessage:",c,i.code),this.player.audio&&this.player.audio.updateAudioInfo({encTypeCode:i.code});break;case A:e.log("decoderWorker","onmessage:",A,`width:${i.w},height:${i.h}`),this.player.video.updateVideoInfo({width:i.w,height:i.h}),this.player.video.initCanvasViewSize();break;case d:e.log("decoderWorker","onmessage:",d,`channels:${i.channels},sampleRate:${i.sampleRate}`),this.player.audio&&(this.player.audio.updateAudioInfo(i),this.player.audio.initScriptNode(i));break;case n:this.player.handleRender(),this.player.video.render(i),this.player.emit(E.timeUpdate,i.ts),this.player.updateStats({fps:!0,ts:i.ts,buf:i.delay}),this.player._times.videoStart||(this.player._times.videoStart=ce(),this.player.handlePlayToRenderTimes());break;case a:this.player.playing&&this.player.audio&&this.player.audio.play(i.buffer,i.ts);break;case u:i.message&&-1!==i.message.indexOf(h)&&(this.player.emit(E.error,C.wasmDecodeError),this.player.emit(C.wasmDecodeError));break;default:this.player[i.cmd]&&this.player[i.cmd](i)}}}_initWork(){const e={debug:this.player._opt.debug,forceNoOffscreen:this.player._opt.forceNoOffscreen,useWCS:this.player._opt.useWCS,videoBuffer:this.player._opt.videoBuffer,openWebglAlignment:this.player._opt.openWebglAlignment};this.decoderWorker.postMessage({cmd:b,opt:JSON.stringify(e),sampleRate:this.player.audio&&this.player.audio.audioContext.sampleRate||0})}decodeVideo(e,t,i){const o={type:m,ts:Math.max(t,0),isIFrame:i};this.decoderWorker.postMessage({cmd:y,buffer:e,options:o},[e.buffer])}decodeAudio(e,t){this.player._opt.useWCS&&!this.player._opt.useOffscreen||this.player._opt.useMSE?this._decodeAudioNoDelay(e,t):this._decodeAudio(e,t)}_decodeAudio(e,t){const i={type:p,ts:Math.max(t,0)};this.decoderWorker.postMessage({cmd:y,buffer:e,options:i},[e.buffer])}_decodeAudioNoDelay(e,t){this.decoderWorker.postMessage({cmd:v,buffer:e,ts:Math.max(t,0)},[e.buffer])}updateWorkConfig(e){this.decoderWorker.postMessage({cmd:S,key:e.key,value:e.value})}}class Fe extends we{constructor(e){super(),this.player=e,this.stopId=null,this.firstTimestamp=null,this.startTimestamp=null,this.delay=-1,this.bufferList=[],this.dropping=!1,this.initInterval()}destroy(){this.stopId&&(clearInterval(this.stopId),this.stopId=null),this.firstTimestamp=null,this.startTimestamp=null,this.delay=-1,this.bufferList=[],this.dropping=!1,this.off()}getDelay(e){return e?(this.firstTimestamp?e&&(this.delay=Date.now()-this.startTimestamp-(e-this.firstTimestamp)):(this.firstTimestamp=e,this.startTimestamp=Date.now(),this.delay=-1),this.delay):-1}resetDelay(){this.firstTimestamp=null,this.startTimestamp=null,this.delay=-1,this.dropping=!1}initInterval(){this.player.debug.log("common dumex","init Interval");let e=()=>{let e;const t=this.player._opt.videoBuffer;if(this.bufferList.length)if(this.dropping){for(e=this.bufferList.shift(),e.type===p&&0===e.payload[1]&&this._doDecoderDecode(e);!e.isIFrame&&this.bufferList.length;)e=this.bufferList.shift(),e.type===p&&0===e.payload[1]&&this._doDecoderDecode(e);e.isIFrame&&(this.dropping=!1,this._doDecoderDecode(e))}else if(e=this.bufferList[0],-1===this.getDelay(e.ts))this.bufferList.shift(),this._doDecoderDecode(e);else if(this.delay>t+1e3)this.resetDelay(),this.dropping=!0;else for(;this.bufferList.length&&(e=this.bufferList[0],this.getDelay(e.ts)>t);)this.bufferList.shift(),this._doDecoderDecode(e)};e(),this.stopId=setInterval(e,10)}_doDecode(e,t,i,o){const r=this.player;let s={ts:i,type:t,isIFrame:!1};r._opt.useWCS&&!r._opt.useOffscreen||r._opt.useMSE?(t===m&&(s.isIFrame=o),this.pushBuffer(e,s)):t===m?r.decoderWorker&&r.decoderWorker.decodeVideo(e,i,o):t===p&&r._opt.hasAudio&&r.decoderWorker&&r.decoderWorker.decodeAudio(e,i)}_doDecoderDecode(e){const t=this.player,{webcodecsDecoder:i,mseDecoder:o}=t;e.type===p?t._opt.hasAudio&&t.decoderWorker&&t.decoderWorker.decodeAudio(e.payload,e.ts):e.type===m&&(t._opt.useWCS&&!t._opt.useOffscreen?i.decodeVideo(e.payload,e.ts,e.isIFrame):t._opt.useMSE&&o.decodeVideo(e.payload,e.ts,e.isIFrame))}pushBuffer(e,t){t.type===p?this.bufferList.push({ts:t.ts,payload:e,type:p}):t.type===m&&this.bufferList.push({ts:t.ts,payload:e,type:m,isIFrame:t.isIFrame})}close(){}}class Ve extends Fe{constructor(e){super(e),this.input=this._inputFlv(),this.flvDemux=this.dispatchFlvData(this.input),e.debug.log("FlvDemux","init")}destroy(){super.destroy(),this.input=null,this.flvDemux=null,this.player.debug.log("FlvDemux","destroy")}dispatch(e){this.flvDemux(e)}*_inputFlv(){yield 9;const e=new ArrayBuffer(4),t=new Uint8Array(e),i=new Uint32Array(e),o=this.player;for(;;){t[3]=0;const e=yield 15,r=e[4];t[0]=e[7],t[1]=e[6],t[2]=e[5];const s=i[0];t[0]=e[10],t[1]=e[9],t[2]=e[8];let A=i[0];16777215===A&&(t[3]=e[11],A=i[0]);const n=yield s;switch(r){case g:o._opt.hasAudio&&(o.updateStats({abps:n.byteLength}),n.byteLength>0&&this._doDecode(n,p,A));break;case f:if(o._times.demuxStart||(o._times.demuxStart=ce()),o._opt.hasVideo){o.updateStats({vbps:n.byteLength});const e=n[0]>>4==1;n.byteLength>0&&this._doDecode(n,m,A,e)}}}}dispatchFlvData(e){let t=e.next(),i=null;return o=>{let r=new Uint8Array(o);if(i){let e=new Uint8Array(i.length+r.length);e.set(i),e.set(r,i.length),r=e,i=null}for(;r.length>=t.value;){let i=r.slice(t.value);t=e.next(r.slice(0,t.value)),r=i}r.length>0&&(i=r)}}close(){this.input&&this.input.return(null)}}class Oe extends Fe{constructor(e){super(e),e.debug.log("M7sDemux","init")}destroy(){super.destroy(),this.player.debug.log("M7sDemux","destroy")}dispatch(e){const t=this.player,i=new DataView(e),o=i.getUint8(0),r=i.getUint32(1,!1);switch(o){case p:if(t._opt.hasAudio){const i=new Uint8Array(e,5);t.updateStats({abps:i.byteLength}),i.byteLength>0&&this._doDecode(i,o,r)}break;case m:if(t._opt.hasVideo&&(t._times.demuxStart||(t._times.demuxStart=ce()),i.byteLength>5)){const s=new Uint8Array(e,5),A=i.getUint8(5)>>4==1;t.updateStats({vbps:s.byteLength}),s.byteLength>0&&this._doDecode(s,o,r,A)}}}}class Me{constructor(e){return new(Me.getLoaderFactory(e._opt.demuxType))(e)}static getLoaderFactory(e){return e===o?Oe:e===i?Ve:void 0}}class Qe extends we{constructor(e){super(),this.player=e,this.hasInit=!1,this.isInitInfo=!1,this.decoder=null,this.initDecoder(),e.debug.log("Webcodecs","init")}destroy(){this.decoder&&(this.decoder.close(),this.decoder=null),this.hasInit=!1,this.isInitInfo=!1,this.off(),this.player.debug.log("Webcodecs","destroy")}initDecoder(){const e=this;this.decoder=new VideoDecoder({output(t){e.handleDecode(t)},error(t){e.handleError(t)}})}handleDecode(e){this.isInitInfo||(this.player.video.updateVideoInfo({width:e.codedWidth,height:e.codedHeight}),this.player.video.initCanvasViewSize(),this.isInitInfo=!0),this.player._times.videoStart||(this.player._times.videoStart=ce(),this.player.handlePlayToRenderTimes()),this.player.handleRender(),this.player.video.render({videoFrame:e}),this.player.updateStats({fps:!0,ts:0,buf:this.player.demux.delay}),setTimeout((function(){e.close?e.close():e.destroy()}),100)}handleError(e){this.player.debug.log("Webcodecs","VideoDecoder handleError",e)}decodeVideo(e,t,i){if(this.hasInit){const o=new EncodedVideoChunk({data:e.slice(5),timestamp:t,type:i?Y:H});this.decoder.decode(o)}else if(i&&0===e[1]){const t=15&e[0];if(this.player.video.updateVideoInfo({encTypeCode:t}),t===L)return void this.emit(C.webcodecsH265NotSupport);this.player._times.decodeStart||(this.player._times.decodeStart=ce());const i=function(e){let t=e.subarray(1,4),i="avc1.";for(let e=0;e<3;e++){let o=t[e].toString(16);o.length<2&&(o="0"+o),i+=o}return{codec:i,description:e}}(e.slice(5));this.decoder.configure(i),this.hasInit=!0}}}const We={play:"播放",pause:"暂停",audio:"",mute:"",screenshot:"截图",loading:"加载",fullscreen:"全屏",fullscreenExit:"退出全屏",record:"录制",recordStop:"停止录制"};var Ge=Object.keys(We).reduce(((e,t)=>(e[t]=`\n \n ${We[t]?`${We[t]}`:""}\n`,e)),{}),Je=(e,t)=>{const{events:{proxy:i}}=e,o=document.createElement("object");o.setAttribute("aria-hidden","true"),o.setAttribute("tabindex",-1),o.type="text/html",o.data="about:blank",ue(o,{display:"block",position:"absolute",top:"0",left:"0",height:"100%",width:"100%",overflow:"hidden",pointerEvents:"none",zIndex:"-1"});let r=e.width,s=e.height;i(o,"load",(()=>{i(o.contentDocument.defaultView,"resize",(()=>{e.width===r&&e.height===s||(r=e.width,s=e.height,e.emit(E.resize))}))})),e.$container.appendChild(o),e.on(E.destroy,(()=>{e.$container.removeChild(o)})),e.on(E.volumechange,(()=>{!function(e){if(0===e)ue(t.$volumeOn,"display","none"),ue(t.$volumeOff,"display","flex"),ue(t.$volumeHandle,"top","48px");else if(t.$volumeHandle&&t.$volumePanel){const i=he(t.$volumePanel,"height")||60,o=he(t.$volumeHandle,"height"),r=i-(i-o)*e-o;ue(t.$volumeHandle,"top",`${r}px`),ue(t.$volumeOn,"display","flex"),ue(t.$volumeOff,"display","none")}t.$volumePanelText&&(t.$volumePanelText.innerHTML=parseInt(100*e))}(e.volume)})),e.on(E.loading,(e=>{ue(t.$loading,"display",e?"flex":"none"),ue(t.$poster,"display","none"),e&&ue(t.$playBig,"display","none")}));const A=i=>{let o=!0===(r=i)||!1===r?i:e.fullscreen;var r;ue(t.$fullscreenExit,"display",o?"flex":"none"),ue(t.$fullscreen,"display",o?"none":"flex")};try{Ae.on("change",A),e.events.destroys.push((()=>{Ae.off("change",A)}))}catch(e){}e.on(E.webFullscreen,(e=>{A(e)})),e.on(E.recording,(()=>{ue(t.$record,"display",e.recording?"none":"flex"),ue(t.$recordStop,"display",e.recording?"flex":"none"),ue(t.$recording,"display",e.recording?"flex":"none")})),e.on(E.recordingTimestamp,(e=>{t.$recordingTime&&(t.$recordingTime.innerHTML=function(e){var t;if(e>-1){var i=Math.floor(e/3600),o=Math.floor(e/60)%60,r=e%60;t=i<10?"0"+i+":":i+":",o<10&&(t+="0"),t+=o+":",(r=Math.round(r))<10&&(t+="0"),t+=r.toFixed(0)}return t}(e))})),e.on(E.playing,(e=>{ue(t.$play,"display",e?"none":"flex"),ue(t.$playBig,"display",e?"none":"block"),ue(t.$pause,"display",e?"flex":"none"),ue(t.$screenshot,"display",e?"flex":"none"),ue(t.$record,"display",e?"flex":"none"),ue(t.$fullscreen,"display",e?"flex":"none"),e||t.$speed&&(t.$speed.innerHTML=be(""))})),e.on(E.kBps,(e=>{const i=be(e);t.$speed&&(t.$speed.innerHTML=i)}))};function Pe(e,t){void 0===t&&(t={});var i=t.insertAt;if(e&&"undefined"!=typeof document){var o=document.head||document.getElementsByTagName("head")[0],r=document.createElement("style");r.type="text/css","top"===i&&o.firstChild?o.insertBefore(r,o.firstChild):o.appendChild(r),r.styleSheet?r.styleSheet.cssText=e:r.appendChild(document.createTextNode(e))}}Pe('@keyframes rotation{0%{-webkit-transform:rotate(0deg)}to{-webkit-transform:rotate(1turn)}}@keyframes magentaPulse{0%{background-color:#630030;-webkit-box-shadow:0 0 9px #333}50%{background-color:#a9014b;-webkit-box-shadow:0 0 18px #a9014b}to{background-color:#630030;-webkit-box-shadow:0 0 9px #333}}.jessibuca-container .jessibuca-icon{cursor:pointer;width:16px;height:16px}.jessibuca-container .jessibuca-poster{position:absolute;z-index:10;left:0;top:0;right:0;bottom:0;height:100%;width:100%;background-position:50%;background-repeat:no-repeat;background-size:contain;pointer-events:none}.jessibuca-container .jessibuca-play-big{position:absolute;display:none;height:100%;width:100%;background:rgba(0,0,0,.4)}.jessibuca-container .jessibuca-play-big:after{cursor:pointer;content:"";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);display:block;width:48px;height:48px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACgklEQVRoQ+3ZPYsTQRjA8eeZZCFlWttAwCIkZOaZJt8hlvkeHrlccuAFT6wEG0FQOeQQLCIWih6chQgKgkkKIyqKCVYip54IWmiQkTmyYhFvd3Zn3yDb7szu/7cv7GaDkPEFM94PK0DSZ9DzDAyHw7uI2HRDlVJX5/N5r9FoHCYdr/fvCRiNRmpJ6AEidoUQ15NG+AH8BgD2n9AHANAmohdJQfwAfgGA4xF4bjabnW21Whob62ILoKNfAsAGEd2PU2ATcNSNiDf0/cE5/xAHxDpgEf0NADaJ6HLUiKgAbvcjpdSGlPJZVJCoAUfdSqkLxWLxTLlc/mkbEgtgET1TSnWklLdtIuIEuN23crlcp16vv7cBSQKgu38AwBYRXQyLSArg3hsjRDxNRE+CQhIF/BN9qVAobFYqle+mkLQAdLd+8K0T0U0TRJoAbvc9fVkJId75gaQRoLv1C2STiPTb7rFLWgE6+g0RncwyYEJEtawCvjDGmpzzp5kD6NfxfD7frtVqB17xen2a7oG3ALBm+oMoFQBEPD+dTvtBfpImDXjIGFvjnD/3c7ksG5MU4HDxWeZa0HB3XhKAXcdxOn5vUi9gnIDXSqm2lHLPK8pkfVyAbSLqm4T5HRs1YB8RO0KIid8g03FRAT4rpbpSyh3TINPxUQB2GGM9zvkn05gg420CJovLZT9ISNA5tgB9ItoOGhFmnh/AcZ/X9xhj65zzV2Eiwsz1A1j2B8dHAOgS0W6YnduY6wkYj8d3lFKn/j66Ea84jtOrVqtfbQSE3YYnYDAY5Eql0hYAnNDv6kKIx2F3anO+J8DmzqLY1goQxVE12ebqDJgcrSjGrs5AFEfVZJt/AF0m+jHzUTtnAAAAAElFTkSuQmCC");background-repeat:no-repeat;background-position:50%}.jessibuca-container .jessibuca-play-big:hover:after{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACEElEQVRoQ+2ZXStEQRjH/3/yIXwDdz7J+i7kvdisXCk3SiFJW27kglBcSFFKbqwQSa4krykuKB09Naf2Yndn5jgzc06d53Znd36/mWfeniVyHsw5PwqB0DOonYEoijYBlOpAFwCMkHwLDS/9mwhEDUCfAAyTXA4tYSLwC6CtCegegH6S56FETAR+AHRoACcBTJAUWa+RloBAXwAYIrnt0yBNgZi7qtbHgw8RFwLC/QFglOScawlXAjH3gUqrE1cirgVi7mkAYyS/0xbxJSDcdwAGSa6nKeFTIOZeUyL3aYiEEBDuLwDjJGf+KxFKIOY+BdBL8iipSGiBmHtWbbuftiJZERBuOfgGSK7aSGRJIObeUml1ayKSRQHhlgtkiaTcdltGVgUE+ppkV54FaiS78yrwqlLoOI8Cch2XV548W7WRpTVwA6DP9kGUFYEpAOUkT9LQAvtq1M+0udKkQSgBqSlJWWYxKXj8vRACK+o6bbRIdYI+Ba7U7rKjg7L53JdAhWTZBsy0rWuBXZUuNVMg23auBF7UIl2yBbJt70JAoKV6/WwLk6R9mgKSJlJ1kLTxFmkJyCla8UZd15GJQKvyumyJ8gy8DAEvfZoINPqD41EtUjmUgoaJwAaAnjrKebVI34OSq85NBNqlCAWgE0CV5GEWwI3vQlmCbcSinYFCwPEIFDPgeIC1P1/MgHaIHDf4Aydx2TF7wnKeAAAAAElFTkSuQmCC")}.jessibuca-container .jessibuca-recording{display:none;position:absolute;left:50%;top:0;padding:0 3px;transform:translateX(-50%);justify-content:space-around;align-items:center;width:95px;height:20px;background:#000;opacity:1;border-radius:0 0 8px 8px;z-index:1}.jessibuca-container .jessibuca-recording .jessibuca-recording-red-point{width:8px;height:8px;background:#ff1f1f;border-radius:50%;animation:magentaPulse 1s linear infinite}.jessibuca-container .jessibuca-recording .jessibuca-recording-time{font-size:14px;font-weight:500;color:#ddd}.jessibuca-container .jessibuca-recording .jessibuca-icon-recordStop{width:16px;height:16px;cursor:pointer}.jessibuca-container .jessibuca-loading{display:none;flex-direction:column;justify-content:center;align-items:center;position:absolute;z-index:20;left:0;top:0;right:0;bottom:0;width:100%;height:100%;pointer-events:none}.jessibuca-container .jessibuca-loading-text{line-height:20px;font-size:13px;color:#fff;margin-top:10px}.jessibuca-container .jessibuca-controls{background-color:#161616;box-sizing:border-box;display:flex;flex-direction:column;justify-content:flex-end;position:absolute;z-index:40;left:0;right:0;bottom:0;height:38px;padding-left:13px;padding-right:13px;font-size:14px;color:#fff;opacity:0;visibility:hidden;transition:all .2s ease-in-out;-webkit-user-select:none;user-select:none;transition:width .5s ease-in}.jessibuca-container .jessibuca-controls .jessibuca-controls-item{position:relative;display:flex;justify-content:center;padding:0 8px}.jessibuca-container .jessibuca-controls .jessibuca-controls-item:hover .icon-title-tips{visibility:visible;opacity:1}.jessibuca-container .jessibuca-controls .jessibuca-fullscreen,.jessibuca-container .jessibuca-controls .jessibuca-fullscreen-exit,.jessibuca-container .jessibuca-controls .jessibuca-icon-audio,.jessibuca-container .jessibuca-controls .jessibuca-microphone-close,.jessibuca-container .jessibuca-controls .jessibuca-pause,.jessibuca-container .jessibuca-controls .jessibuca-play,.jessibuca-container .jessibuca-controls .jessibuca-record,.jessibuca-container .jessibuca-controls .jessibuca-record-stop,.jessibuca-container .jessibuca-controls .jessibuca-screenshot{display:none}.jessibuca-container .jessibuca-controls .jessibuca-icon-audio,.jessibuca-container .jessibuca-controls .jessibuca-icon-mute{z-index:1}.jessibuca-container .jessibuca-controls .jessibuca-controls-bottom{display:flex;justify-content:space-between;height:100%}.jessibuca-container .jessibuca-controls .jessibuca-controls-bottom .jessibuca-controls-left,.jessibuca-container .jessibuca-controls .jessibuca-controls-bottom .jessibuca-controls-right{display:flex;align-items:center}.jessibuca-container.jessibuca-controls-show .jessibuca-controls{opacity:1;visibility:visible}.jessibuca-container.jessibuca-controls-show-auto-hide .jessibuca-controls{opacity:.8;visibility:visible;display:none}.jessibuca-container.jessibuca-hide-cursor *{cursor:none!important}.jessibuca-container .jessibuca-icon-loading{width:50px;height:50px;background:url("data:image/png;base64,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") no-repeat 50%;background-size:100% 100%;animation:rotation 1s linear infinite}.jessibuca-container .jessibuca-icon-screenshot{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAE5UlEQVRoQ+1YW2sdVRT+1s7JxbsoVkEUrIIX0ouz15zYNA+N1RdtQfCltlUfvLbqL/BCwZ8grbHtizQqPojgBSr0JkiMmT2nxgapqBURtPVCq7HxJCeZJVPmxDlzZubMmXOSEsnAvOy917fXt9e39tp7E5b4R0vcfywTuNgRbBgBx3HuJqLVzPzmYjprjHkcwAlmLqXNm4XAISLaSESPaq2HF4OE67rbRGRYRA7btn1fbgLGmKsA/Azg0gBkGzO/vZAkHMd5hIiqc5wHcCMz/5k0Z2oExsfHV1QqldPAf8lORNu11m8tBAljzFYAYWxRSl1vWdZvuQj4RsYYF4AVBlgIOVVlE55HRIxt23ZuCfmGjuOsJ6LPoiAistW27XfaEYmIbOYhPc9bXywWR1oiEJDYQkR1zrYjEjGyqfqbKd8a7kJVtLgQ+30i8pht2wfyRKIdmJkJBPkQTbILfudJ7CTZNBvVpggEcgpvc/ML38zESbLJsxBNE/A9biX0rdjGyTQXgbxyapdsarb0PMlXtWnGoXbKpm0Essqp3bJpK4E0OXmed3+hUBDP8w5FI91M0rdcyLLILElOCbaZilSWeXMncRx4klTCY1spfG3dhZJWx3GcDUR0EEB3ZMw0ET2gtT6SZWWzjmlrBIJCl0hAKfWgZVmHszqXZVxbCSxpCS2JJA6umIhe8ZKKVLPbaBJ+S9toqVRa53nedgAbAKwIwH4FcAzAa0R0l4i8F7PPz189k6RFRA+LyNcAXojDV0oNW5b1eW4Cxpg9AHZkSaaa6hhzb065uDSCH2LmRB8Sk9gY4293g43Qo/1pV80m8yQMfZSZ781cB1zXHRKRZ2IMpgD8A+DamL4ZItqitX4/jbQx5iEA7wLoihn3V/ACckWMJN/QWj9b1x5tGBsbW6uUOh5pPy0iL3Z2dn6ilJqanp5ep5TaJSLhF4NppdRNaU8gPmapVLrO87yfIoXuWyJ6uVKp+HmFjo6OQSJ6FcBtYT+UUmstyxqvkWuUgDFmP4AnQu2/e563qlgs+u9DNZ8xZhRAX7VRRPbath0XuXk7Y8xeAE+FgL6fnJzsHRwcLIfBR0ZGLunq6poAsDLUvp+Zw7b1r9PGmJMAbg8Z7WDmoThZuK67WkS+DD18fcPMdzSQUBR/EzN/nIC/SUQ+DPXV4dclsTHmHAD/SfHCNzc3t7Kvr++HJKeMMacA3BL0nyuXyzcPDAxMxo0fHR29slAo/Ajg6qD/fE9Pzw29vb1/x42fmJi4vFwu+5G/LOg/y8zXNJLQ2dAES5JANMQ7mfn1jBI6ycx3NiMhItqstf4oAX+ziHwQ6qvDj5NQNIn/ALCKmX+JSeIvABRD7fuY+ekGBPYBeDI05tTMzExvf3+/vz2Hk91/ET8RSeI6/DoCpVJpjed5fmKGvzMAXpqdnT3oed5Ud3d3v4jsAqBr9Ei0Rmv9VRqBBPzvROQVETnq2xJRdRu9tRF+bCVOKWT+Kvl/TSIFk6SW/LAjKfjV5K8rZABi8dOOEv7FI7Z8x6zwEWbemLbyMfJr5qiSiJ96oclymBOR3bZtP9+M89WxxpjdAHY2sN3DzM8ljWl4I3Nd9x7/OE1ENcdpETnmH3e11n41zv0l4J8RkU+J6AAz+xtF4teQQG7PFslwmcAiLfSyhC72Qv9/I/Avns2OT7QJskoAAAAASUVORK5CYII=") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-screenshot:hover{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAED0lEQVRoQ+2ZycsdRRTFf2ejqHFAMQqiYBTUoElUHLNx3GgCgpuYRF2o0UT9CxwQ/BMkMSbZSKLiQgQHUDCJgjiAxiEiESdEcJbEedgcKaj3UV+/6q7u/jovPPkK3qbr1ql76p5bt6qemPKmKfefeQKHOoLFCNg+H1gi6fFJOmv7VmCvpD1N87Yh8ApwNXCzpB2TIGF7DRDm2inpmt4EbB8LfAMcGUHWSHryYJKwfRMwmuMP4BRJv9TN2RgB2wuB72BWsq+V9MTBIGF7NZBiGzhJ0o+9CIRBtt8FLqgADC6nRDbpVO9Iuqi3hCKB5cDrGZDVkp4aIhIV2aSQyyW9MScCkcQqIOfsnCORkc3I31b5VtyFRmg1IQ7dt0ja3icSQ2C2JhAjUU2ykd+dE7tBNp2i2olAJJFuc+nCt564QTadF6IzgUhiVGiqyinKaQjZpJP2ItBXTkPJZhACXeU0pGwGI9BWTkPLZlACBTldG4o5EA6E1dY66edcyNrs8Q36zg1vVaTazNs7iXPgDVJJzYs7VRvHRzaDEohyugJ4CTi84sg/wHWSdnVxsGQ7aQLXS9pZcqpL/6AEplpCU5HE8YpJ9YrXUKQ6baN1+HPaRm1fBqwFQnKGK2ZoPwCvAo8Ai4FnMpPMHMwapHUj8DFwbw3+Dklv9iZgexOwvktSRduxU2VDlErwmyXV+lCbxLbDdndlCT3TX3vV7JgnKfRuSVflfMkSsL0ZuDMz4E/gL+CETN+/wCpJzzaRtn0D8DRwWMbu1/gCcnSm7zFJd1W/jxGwvQx4r2IYnlbuA14GAomQFw8B6YtBKFSnNj2BxEJ3IvB1pdB9CjwQ8yqYhcg/DJxZ8WOZpA/SbzkC24DbEqOfgPMkBRKzmu23gEuSj1sk5SI3Y2J7C3BHMuZz4FxJf6fgto8APgIWJd+3SUrHjr9O294HnJUMWi8pSGqs2V4CvJ88fH0i6eyChKr4KyS9WIO/Ang+6RvDz0XgABCeFEdtkaQv65yy/QVweuwPY0+T9FuNQ8cAXwHHxf7wdHiypN9r7BfEl8GjYv9+SceXJLQ/mSDYTh2Baog3SHq0pYT2STqno4RWSnqhBn8l8FzSN4bfJol/jkn8bXUS228DFyfft0paVyCwFbg9sQkSDEkctueZZju8iO+tJPEYfo7A0piYKd73wP3xnB+20cvjNnphxdmlkj4sEMjhfwY8COyOY0fb6Bkl/K6FLKxS+M1KpDhJY8mvrG5doRwlf66QZfGbjhLh4pEt35kV3iUp/IvTunU8qtTil/7gaHOY2yjpntaez9b5RmBDYewmSXfX2RRvZLYvbThOh+NuqMa9Ww1+yLnXgO2SwkZR24oEens2oYHzBCa00PMSOtQL/f+NwH+Hg8hAnbrYgQAAAABJRU5ErkJggg==") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-play{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACgklEQVRoQ+3ZPYsTQRjA8eeZZCFlWttAwCIkZOaZJt8hlvkeHrlccuAFT6wEG0FQOeQQLCIWih6chQgKgkkKIyqKCVYip54IWmiQkTmyYhFvd3Zn3yDb7szu/7cv7GaDkPEFM94PK0DSZ9DzDAyHw7uI2HRDlVJX5/N5r9FoHCYdr/fvCRiNRmpJ6AEidoUQ15NG+AH8BgD2n9AHANAmohdJQfwAfgGA4xF4bjabnW21Whob62ILoKNfAsAGEd2PU2ATcNSNiDf0/cE5/xAHxDpgEf0NADaJ6HLUiKgAbvcjpdSGlPJZVJCoAUfdSqkLxWLxTLlc/mkbEgtgET1TSnWklLdtIuIEuN23crlcp16vv7cBSQKgu38AwBYRXQyLSArg3hsjRDxNRE+CQhIF/BN9qVAobFYqle+mkLQAdLd+8K0T0U0TRJoAbvc9fVkJId75gaQRoLv1C2STiPTb7rFLWgE6+g0RncwyYEJEtawCvjDGmpzzp5kD6NfxfD7frtVqB17xen2a7oG3ALBm+oMoFQBEPD+dTvtBfpImDXjIGFvjnD/3c7ksG5MU4HDxWeZa0HB3XhKAXcdxOn5vUi9gnIDXSqm2lHLPK8pkfVyAbSLqm4T5HRs1YB8RO0KIid8g03FRAT4rpbpSyh3TINPxUQB2GGM9zvkn05gg420CJovLZT9ISNA5tgB9ItoOGhFmnh/AcZ/X9xhj65zzV2Eiwsz1A1j2B8dHAOgS0W6YnduY6wkYj8d3lFKn/j66Ea84jtOrVqtfbQSE3YYnYDAY5Eql0hYAnNDv6kKIx2F3anO+J8DmzqLY1goQxVE12ebqDJgcrSjGrs5AFEfVZJt/AF0m+jHzUTtnAAAAAElFTkSuQmCC") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-play:hover{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACEElEQVRoQ+2ZXStEQRjH/3/yIXwDdz7J+i7kvdisXCk3SiFJW27kglBcSFFKbqwQSa4krykuKB09Naf2Yndn5jgzc06d53Znd36/mWfeniVyHsw5PwqB0DOonYEoijYBlOpAFwCMkHwLDS/9mwhEDUCfAAyTXA4tYSLwC6CtCegegH6S56FETAR+AHRoACcBTJAUWa+RloBAXwAYIrnt0yBNgZi7qtbHgw8RFwLC/QFglOScawlXAjH3gUqrE1cirgVi7mkAYyS/0xbxJSDcdwAGSa6nKeFTIOZeUyL3aYiEEBDuLwDjJGf+KxFKIOY+BdBL8iipSGiBmHtWbbuftiJZERBuOfgGSK7aSGRJIObeUml1ayKSRQHhlgtkiaTcdltGVgUE+ppkV54FaiS78yrwqlLoOI8Cch2XV548W7WRpTVwA6DP9kGUFYEpAOUkT9LQAvtq1M+0udKkQSgBqSlJWWYxKXj8vRACK+o6bbRIdYI+Ba7U7rKjg7L53JdAhWTZBsy0rWuBXZUuNVMg23auBF7UIl2yBbJt70JAoKV6/WwLk6R9mgKSJlJ1kLTxFmkJyCla8UZd15GJQKvyumyJ8gy8DAEvfZoINPqD41EtUjmUgoaJwAaAnjrKebVI34OSq85NBNqlCAWgE0CV5GEWwI3vQlmCbcSinYFCwPEIFDPgeIC1P1/MgHaIHDf4Aydx2TF7wnKeAAAAAElFTkSuQmCC") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-pause{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAABA0lEQVRoQ+1YwQqCUBAcfWXXsLr2AXWTPXno8yVB8AP6Aa3oHI+kCDqYaawJljSe133uzO44bx0M/HEG/v1gAd9mkAyQgY4I/F8LJUlyrQFtD2AtIkcNoFEU+Z7n7QD4DfFHEVlocrVmgAUAIAOl3mILPcDgEFcUhyrUKMGUUcroc3NQRimj9XJBGaWMvvPydKN0o6/9QTdKN6rZANxj6EbpRulGuZnjYqs8BbyR8Ub2Izeys+u6yyAIDpo/ehzHM2NMDsA0xFsRmWhyfTIDWSXxCEBmrd2EYXjSHJqm6bQoii2AOYBL5Z0xgFxEVppcrQvQJO0zhgX0iXbdWWSADHRE4AZQ731AhEUeNwAAAABJRU5ErkJggg==") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-pause:hover{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAA7klEQVRoQ+2YSwrCQBBEX6HiVvxsPYDewfN7By/gD9ciQkvERQwJdBSiYs0mEDo96aruombEjy/9+P/jAj7NoBkwA28i8H8tFBFRA9oeWEo6ZgCNiDGwAYpn3TpKmmVytWbABQBmoNRbbqEHGB7iiuJYhRol2DJqGX1uDsuoZdRmLuNZSzGWUcuoZdRHSp/IylNgK2ErYSthK3FHwLcSvpXIjoLt9Jfa6TMwl3TIMBkRE2AH9BriL5KGmVyvWIltJXEfKN6tJJ0ym0bECFgDU+Ba+WZQFCdpkcnVuoBM0i5jXECXaNftZQbMwJsI3AAPN3dAQflHegAAAABJRU5ErkJggg==") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-record{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAC+UlEQVRoQ+1ZS2sTURT+zlDJYE3XSq219QHVuEjnJDT+Bff9Abqw2voAEfGxqygUqWhVFHGl/yMLu9BwByxk5SNI66ML6U7axjhHbmhgWiftncxoOiV3FcI53z3f/e65594zhIQPSnj86BBot4IdBToKRFyBnbeFlFIScVEiuYvIWC6Xe2YK8pcC7SYA4CMzH4mDQBXAqilQBDsLQLfPf9FxnF4i8kwwmypARI+Wl5dvmIBEsUmlUkNE9NaHsVCpVAZGR0d/m+A2JSAid3K53E0TkCg2pVKpz7KseR/GfKVSGYxMAMA0M1+JEpyJb6lUOm5ZVnkrAsVisaunp+esiByr1Wp3R0ZGvmifzZK4XQQWHMc52MgBpdQuAOcAXABwuB400ZTjONdaIjA7O5u2bVsnWU1EujzP+5nP5xdMVjvIJkCBD8x8VCm1G8AYgAkAAxt8Z5j5YmgCSqlTAJ4D2OcD/AXgATNfbYVEAIFPIvKKiE4D6GuCea8xX6gtpJT6DmBvECgRFRzHeROWRAABE4iWCbwHEFhkPM/L5vP5dyaz+23+KwHXdR3P854S0YG1ILSCuthNMfNM2OC1/RYENLY+ygcBnPfht6ZAA6BYLNr6dyqVokKhsGpaNQ2TWJstreXaE2aed133sojcj41AKyvdzCdAgSXLsk4MDw9/a/i4rntbRPxFNZoC/5jAV2be759DKTUJ4FZSFFi0bbs/k8noy2R9dAjEuWU2YgXkQOK3kD6BMsysi2Z9JC2Jdcw/ALzwPO+xvmcl7Rj177JVEbkO4BARjSflFDJJuW1dBxJPoCIiL4noDIB1BS0pW6j+oJmbm+uuVqvjRKQfLr0bZHnIzJf0f6HeAybahrUJqAPruhLlcnnPysqKfpXp11n/Gv62zoHAroS+AafT6QkiGrIsazKbzX7eVIHEt1US39gCkOzWYthkjNE+tuZujDGZQ8XRXn8N4KT5lLFZ6uaYPt+nwyDuvC80YdhvB9uOAu1WoaNAR4GIK/AHvdr+QAexB7EAAAAASUVORK5CYII=") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-record:hover{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACfUlEQVRoQ+2ZSYsUQRCFvycK4nJXXEbHBdwO4kn/gv9CD467ICIutxEFkREdFUU86T/xojcPntyQcT2INw+uISFVkD1Wd2dWlU7nUHlqisiX+fJFZGREi8yHMt8/HYG5VrBToFOg4QnMPxcyM2t4KE2nT0i6EwvylwIjQOCFpE1tEPgGfI0FamC3AFgazP8IrJL0KwZzkAI3gLMxIA1ttgCPA4w3wHpJP2NwBxG4KOlcDEgTGzNbA8wEGP57vA0CU5JONtlczFwz2wY8HUbAzBYCB4CtwCVJb33OIAXmioC70LoyBsxsEXAQOApsLIhelnS6FgEzW+5BBvwA/FS+SPJFa40KBZ5L2mxmS4AJ4IjHxCzwaUnHkgmY2V7gLrAyAPwOXJN0qg6DCgIvgQfAPsDjo2pcKddLciEz+wCs6AO6W9KjVBIVBGIgahN4BvRLMjslPYlZPbT53wR2AbeBtcUmXEFPdh5U06mbd/shBBzbr/Jx4FCAX0+BEsDMFocEYrNmFcE+BD4XsXZL0oyZnQCutkagzkn3m1NBwDe/Q9L74MAuFEqUn5op8I8JvJO0elacTALnc1HAH3Njkvwx+WeYWUegTa/pwaqIgexdyIN4uyRPmqULZRXEvulPwD3gpr+zcrtGQxfzRHYG2AAczuUWiom3kc4D2RN4BdwH9gM9CS0XFyoLGu9UuN974eIFVDiuSzruH5LqgRhtU20q8kBPV8LMlhVVmVdnYwX+SMdAZVeieAF7eeltmElJr4cpkH1bJfvGVvatxdR4bMu+teZuWxtKxWncXn8I7EldtQV7vz79fp9KwZp//9CksB8F206BuVahU6BToOEJ/Ab7+KdABdTt8AAAAABJRU5ErkJggg==") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-recordStop{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAGDElEQVRoQ82ZaahVVRTHf//moKKggQawcmg0olGl0awvRoMVBRGFlQ1YQZIZqRVKmJmFgVk59EFQykYjgmajbJ7n2WiAbKKCBq0Vfznndd723Lvvve/5bMH9cvfaa63/2WuvaYteoIjYHDgEOAAYDOwIbA/4f9PvwHfAt8DbwGvAS5L8f49Ine6OCO89CTgFOBrYqU1Z3wBPAUskPdDm3i72jgBExCXAWGBQp4qTfR8CMyXd0a68tgBExEjgBmCfdhW1yP8eMFHS/S3y0xKAiNgQmA2MaUHwB8DnwNfAbwX/FsDOwG7Ani3I8ElcLOnvHG8WQET0Ax4C9msi7BHgbuAFSXaHhhQRewBDgZOBE5qwvuV1SSuayWsKICIcVZ4Atq4R8mdxKnMkfZT7UnXrEeE7dD7gO7VpDc/PwAhJrzaS3xBAROzrUFcJhVUZjhrjJX3cieHpnogYUNytUTXy/gAOlvROna5aABHhGG5f3qZmk33ztt4wvAbIBcCcBicxSNLKdK0RgNeB/RPmVcBxkp5eF8aXMiPiKODRGpd6XZJduhutBSAipgNX1Bg/tJkv9iao4u4tBzZJ5N4oaXz1v24AImIvwLE4peGSnDX7jCLC2f3JGoV7S3q//D8F8DJwULJpgiQnrz6niLgSmJYofkXSwWsBiIgRwGPNmPscARARDqGp7zu0Orz/l4kjYhlweGLk4Ebhq8oXEc6wGwH/tAhyA2C1JGfsphQRTqBvJkzLJB3ZBaBIKGkGXSqpWab013FWvacooXO21K07256WS4QRsRQ4PhHgsPrxmjsQEZOB6xKGIZJebGZVRDwOHNOJ5ZU9j0s6NqPnUJcpCc9kSVNKAA5ZQyoMn0gamDMsIj4rCrQca7P1zyT1zwmIiE+AKt9yScNUFGuuZaoxd7okR4Ccfzq997S0fleSy5acrjQ//QUMNADXH/cmu0dKcoWZE+r2MKs8I+YdSW5Dc7rcizycMI0ygKuA6ysLjiT9JX3RgtC+BLArYJet5q4JBuBG5aKKsV/ZryWt/p8BcJj2R3VjVNJsA1gEnFH5821JzZqXLtaI6LMTsNIafYsM4L6iOyoNe1FSNSI1PIj1AMCh1CG1pPsNYEkxGin/fFVSWg/VglgPAF4BDqwYs8QAFgDnVP78SJIzbJbWAwBXC9VRzgIDcLVXjfm/AP0kuR/NhbY+uwMR4e7QDf6WFaOmGYBHJbcnlh7USvPSlycQEXYdu1CVxhiARxzPJwsXSarrTbux9TEAh3qH/CqtKSU2Az5NZpsPSTqxBRdy49/SfWki60NJ2WFXTUXqwdmAsphbCJxZUeIGfltJvg8NKSIMfPcc0Mx6tpiLiK2AH4qeoxS3UNJZJYC6emicpJkZAOOAGT0EcLmkmzvQM8oz1BLAxsX8vjqBWynJ86FcJDoLGO4OC8jOMgthnrX696Qkn35Oh+dB21aYfgJ2kLSqqzCKiGuAaxNJkyRNzSlYl+sNmq2pkiZZbxWAJ8g/Aj6NksI+3kplui5AFL2271m1AvVJb1fmqXSsMhGYkhjznqSeNi0d4YsIz3/SCNXNK+omcy5ZPVKv0r2STu3Iig431dRolrRCkvuCLqoD4BlM3Th7nqTzOrSnrW0RcSdQp+tASX4gbAzAK8Ub2KwarQ8Cp0vy20CvU5FUFwN1SfRSSbemSpu9D9wCXFZjpacDoyU925sIIuIw4K5k8lCqmCWpzpbmb2QRMRc4t4GhfiOYJunLngCJiF2Aq4ELG8iZL6mRDflHvohwpnXGrSM/VM8DFkt6rh0gxRd3K3s24BBeRzMkpaP+bnzZR77iTvgLuOR29mxEDnmer7rk9dPT98CvBbNreGdSD8s8WT4i81rpjD5G0vzcR2kJQAHCs5ubgKZjwERhednrHvAa2eaPMFaSm6UstQyglBQRDm92qWwJnNXencGnZpdp67W+bQAVIKOLCz6sTUNTdjdTcyW5N2+bOgZQAeLHQLuV5/UeM6ZZPDXKfa1nqs/4QUXSG21bXdnQYwBV5RHhy2rXcmh0E+5GxOTGyCWwp34fSCovd09sX7P3X2uzPXCoLsVMAAAAAElFTkSuQmCC") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-recordStop:hover{background:url("data:image/png;base64,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") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-fullscreen{background:url("data:image/png;base64,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") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-fullscreen:hover{background:url("data:image/png;base64,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") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-fullscreenExit{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAADd0lEQVRoQ+2Zz2sdVRTHv+fJBDW6anDVXen6wZszYxYBiYgtFGst3VSDunKjpS0GpUlqfjVpsVVs6aaL0or4YxMVFCJZ2ZLdPUP+gq5bQnTxtNAkfTnlhnnlkmQy9yV9780rudt77tzv5/y4v4bQ4Y06XD/2ANodwec/AiJygJnvtdvTWfPnRkBEJAiCN8rl8kMfiPn5+Ve7u7v3rays0Orq6lJfX99/PuN2auMDoAD+BvA2M6/mTWSMOUtE48D6AjHGzN/kjdlNvy+AnWOOmQ/lTSYiEwDOWzsimgrDcCRvzG76GwGw8/zJzO9sN6GInAMwbW1UdSSKoqndCMwb6wNwGsB39Q+p6h/M/C4R2dTa1AoHYBWKyCkA1+pqiWi2Wq0e7e/vf7yRoJAAKcQggMtuJKIoOtoxACnE0/xOi/SXMAxPuhCFjUBdpIjYVWXSEf0TM3/g9BeriDMKdSPEz8z8vrU1xgwT0YXCrEJZy1iSJKOqOub0/8jMA0mSfKKqNwoPkHp7ioiGHIhRIvpHVa93BEBa2JcAfOlALAHo6RgAKzRJkk9V1S6xL7kpV4idOM31taxaIKJHqmpPnMMA9hcOQES2PDJkAT1XAAC+ZebPfWB3auNzmLObVsNRUNUXVHUujuM7OxXnMy4XwOcj29mIyOuq+lapVGrYCelKpkEQ3CyXy4tbzdN0AGPMxr2iYZ+sra3FcRybtgCIiK2BKw2rdgaUSqWoUqlIkQAepFDdAF7cBq5ERI9rtdr1OI7tmE2t6SmUEYFHAEaexYW/1QC2EF+ru5GIvg7D0D2GNJxprQY4o6qv1I/b6SpzOYqiLxpWng5oOQAzXxWRWwA+dkRfYOb1p5hGW6sBJpn5KytSRG4D+KguWFXHoyhy7xdeLC0F2ChSRL4H8OFuINoKYIUbY34gogHH3eeZef1K6tPaDpCm068A3nMEDzHzxY4BUNWSiPxORO6z5aDPPlGICNQ9bYyZIaLjjudzIQoFkKbTbwCO+UI0HcB9J/LdeY0xs0R02IGYYObRrWqiFQCfEZEtSHsfmGZm+4qxbbM/hQD8BeBNa0hEM2EYnmgLgP3lFARBT1dXly4vL//b29tbzQNIU+llAHeJaLFSqRzJes5vegR8xGbZLCwsHKzVav8z8/0sm0ID+MDvAfh4qZk2exFopnd9vv0ELrXBQO7fD10AAAAASUVORK5CYII=") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-fullscreenExit:hover{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAC/ElEQVRoQ+2Zy49NQRCHvx+ReK6IlZ34E7CUiCAR4xEbTLCyQRATYswwb2IQZDYWgojHZpCQECts+ResiQwLj0RClNSkb9Lu3HtPz7mZc8+V6eXt6tP1VVV3VdcVbT7U5vozC9BqD/7/HjCzlZLet9rS9fbP9ICZvQPWSfqRAmFmS4ClMHm+JiR9S1mXVyYFwIBXwEZJv7I2MrPjQH8A6JN0OWtNM/OpAL7HS0mbsjYzswGgN8gNS+rJWtPM/HQAfJ9nkrY22tDMTgMjQaZH0nAzCmatTQE4ClyNPvQU2CbJQ2vKKB2Aa2hmR4DrkbbPgQ5Jv6sJSgkQILqA0dgTkjraBiBAxPHtPz2UtDuGKK0HKkqamd8qg5HS9yXtjebLdYjrHNRqiAeS9gQvnQGGSnML1bvGzOwc0BfN35PUaWYHgRulBwjW9ju+O4JwqM/AWFsABIgLwKkIYgJY1jYAAeJQuGIXVIVcKTKxh8WfBin9J+AVpx/eFWUEqFkyNACKp0rhgWYArkg6kQibSyylmPOklQdibijBX+fSLHFRJkDid+qKmdlaYENOI0zeEcBNSZ9qbVIEQHWuyGOTNZLetgrAz8ClPFpHa1ZL8rf5lFGEB2oBfAxQi4D5DeDmAP7mGJPka0oD4LnDr9imH/xFe8AP4vLIjBclxWXItCOtaIBjwOKo3HaFRyWdnLbmYUHhAJKumdkt4ECk9JCkSitmWixFAwxKOjt5uZvdBvZH2vZLit8XSSBFA/yjpJndAfY1A9FSgOCJu0BnBNErqfIkzfRCywECxCNgR6Rtt6TzmdqHBmyKXG4ZM4sTWc04NzNPWE+AuG3ZlZInSuGBinXMbBzYGVkrE6JUACGcHgPbUyGKAIj7REmZ18y897o5ghiQ5E/bltRChwE/kF7Xj0jyLkbDYWbzgBfA+iA4LmlXqwD8LydvszjAF0lfswBCKC0E3gBeP22p186f8RBKUbaejJmtAr5L+lBPptQAKfCzAClWmkmZWQ/MpHVTvv0X9iFAQGQyevIAAAAASUVORK5CYII=") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-audio{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACrUlEQVRoQ+2ZPYgTURCAZzbBXJnCeL2Cnb87b9MEtPBUrrMQFAtrtT5/ClGs9LBWWz0RtbBUFCF4oJDsbO68wsLA2YqQSmLlvpEHu7IuMdlLcus+yUKKhJfZ+ebnvZl5CJY/aLn+MAP41x7M1QPMfFtr/crzvHfTAs8FoNPp1LTWzwHgqIg0lFLvrQHwfX8BER8DwC6jNCIecF13wwoA3/dvIuKNpLJa60Oe560XGoCZd4rICiKeTCtaeABmPg4AJmRqg6xcaABmvg4At4aFRyEBhoVM4UMoCplHADCfJTEL5YEsIVNID5iQAYCHALCYxeq5b6PMfF5EBAAEESthGK7W6/XPRpFWq7W3VCqtZg2ZcT3g+/6i4zjzIlLSWn/yPO/DIGMNLCWY2Sj/+xGRK0qpZfNDEASnROTFVi0fr8+aA8z8Ld6KEfGt67oLYwMAwEUium8EREn7OgeAjwCwPyo/nrque3YSgAtE9GDaAM1mc65arc4Zuf1+P2w0Gt9jJZl5DQAORt+fENG5wgEw8zUAMB/zbBBRwyqAIAjuiMjlSOlNItpjFUCqWl0josMzgChR/9hGAWBbknjmAdPhDdqa0gfZzAMJKyVP4v8hhJYRcSni+0JEu63ahZj5anyQici6UuqIVQDdbrfS6/UqRulyufyTiH5sF8AlIro37VpoWEHIzGZ2tM+sEZFnSqkzk9RCS0R01wjIsZz+mug53hDRia0AnI4bGgDYISItz/M2jYC8Gpp2u30MEWuO4zha665Sqp0ZYFStX/iWchRAItFGzoHSsrJ2ZFl1mHg6bfVYJeGJv85CC++BpIJZ5kSFC6G0ha0e7mYJqcJ7IOkRay84UhD2XjHFIFZf8iW9YcYoYRi+tO6aNeupOs66iU/icV46zf/MAKZpzXFk/QL+JG1PUPhRiQAAAABJRU5ErkJggg==") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-audio:hover{background:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACSElEQVRoQ+2Zu4sUQRCHf5+C+gf4yBXMfMYHGvjCzEBQDIzV+HwEohipGKupD0QNDE8UEwUFTe68wEDhTMVUMFJ+0tArzbjs9u3Ojt0wBR0M9MzUV1XdXVWNKhcq1189wP/2YKcesH1d0nPgdVvgnQDY3iTpqaT9kuaAt9UA2D4o6aGkzVHpXcByFQC2r0q60lB2D7BUNIDtjZIeSDoyRNGyAWwfiiET4n6YlAtg+7Kka2PCozyAMSHT5CkLIIbMfUlbMhdmOQCZIVOeB2LI3JN0NNPq6bTZe8D2aUmOY72kN8DnoIXt7eF5FSEzkQdsB+OEsFwr6RPwbpixhqYStoPyqVwAbkaAY5KeTWD5wStZHrD9XdJgK34FhBP9H8kFOAvciQBhn3/RAcBHSTvjfx4DJ6cBOAPcbRvA9gZJYQT5DfwYKGl7UdLu+PwIOFUiwCVJYQRZBuZqA7gh6XxUegXYVhtAmq0uAnt7gLhQm9vorBZx74Hcc6D3QLKH/z2JGyVnlYs4pCfzEe4rsLW2XehicpAtAftqAwiZbhhBfgE/ZwVwDrjddi40KiG0HXpHO+KcJ8CJaXKheeBWBOgqnf6W1BwvgcOrATieFDTrJL0HViJAVwXNgVgPrJH0BfiQDTDKtREiNK7KLSnHASQLLacP1PxcVkWWq8PU3emq2yqJJ0b1Qsv2QKpdZp+orBBqmrfq5m5mSJXtgUZI1XnB0YCo94opCal6L/ka3ghtlIXqrllzT9VJ5k19Ek/y0zbf6QHatOYk3/oDujC8QMWgjf4AAAAASUVORK5CYII=") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-mute{background:url("data:image/png;base64,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") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-mute:hover{background:url("data:image/png;base64,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") no-repeat 50%;background-size:100% 100%}.jessibuca-container .jessibuca-icon-text{font-size:14px;width:30px}.jessibuca-container .jessibuca-speed{font-size:14px;color:#fff}.jessibuca-container .jessibuca-quality-menu-list{position:absolute;left:50%;bottom:100%;visibility:hidden;opacity:0;transform:translateX(-50%);transition:visibility .3s,opacity .3s;background-color:rgba(0,0,0,.5);border-radius:4px}.jessibuca-container .jessibuca-quality-menu-list.jessibuca-quality-menu-shown{visibility:visible;opacity:1}.jessibuca-container .icon-title-tips{pointer-events:none;position:absolute;left:50%;bottom:100%;visibility:hidden;opacity:0;transform:translateX(-50%);transition:visibility .3s ease 0s,opacity .3s ease 0s;background-color:rgba(0,0,0,.5);border-radius:4px}.jessibuca-container .icon-title{display:inline-block;padding:5px 10px;font-size:12px;white-space:nowrap;color:#fff}.jessibuca-container .jessibuca-quality-menu{padding:8px 0}.jessibuca-container .jessibuca-quality-menu-item{display:block;height:25px;margin:0;padding:0 10px;cursor:pointer;font-size:14px;text-align:center;width:50px;color:hsla(0,0%,100%,.5);transition:color .3s,background-color .3s}.jessibuca-container .jessibuca-quality-menu-item:hover{background-color:hsla(0,0%,100%,.2)}.jessibuca-container .jessibuca-quality-menu-item:focus{outline:none}.jessibuca-container .jessibuca-quality-menu-item.jessibuca-quality-menu-item-active{color:#2298fc}.jessibuca-container .jessibuca-volume-panel-wrap{position:absolute;left:50%;bottom:100%;visibility:hidden;opacity:0;transform:translateX(-50%) translateY(22%);transition:visibility .3s,opacity .3s;background-color:rgba(0,0,0,.5);border-radius:4px;height:120px;width:50px;overflow:hidden}.jessibuca-container .jessibuca-volume-panel-wrap.jessibuca-volume-panel-wrap-show{visibility:visible;opacity:1}.jessibuca-container .jessibuca-volume-panel{cursor:pointer;position:absolute;top:21px;height:60px;width:50px;overflow:hidden}.jessibuca-container .jessibuca-volume-panel-text{position:absolute;left:0;top:0;width:50px;height:20px;line-height:20px;text-align:center;color:#fff;font-size:12px}.jessibuca-container .jessibuca-volume-panel-handle{position:absolute;top:48px;left:50%;width:12px;height:12px;border-radius:12px;margin-left:-6px;background:#fff}.jessibuca-container .jessibuca-volume-panel-handle:before{bottom:-54px;background:#fff}.jessibuca-container .jessibuca-volume-panel-handle:after{bottom:6px;background:hsla(0,0%,100%,.2)}.jessibuca-container .jessibuca-volume-panel-handle:after,.jessibuca-container .jessibuca-volume-panel-handle:before{content:"";position:absolute;display:block;left:50%;width:3px;margin-left:-1px;height:60px}.jessibuca-container.jessibuca-fullscreen-web .jessibuca-controls{width:100vh;transform:translateX(-13vw) translateY(-47.8vh) rotate(270deg);transition:width .5s ease-in}.jessibuca-container.jessibuca-fullscreen-web .jessibuca-play-big:after{transform:rotate(270deg)}.jessibuca-container.jessibuca-fullscreen-web .jessibuca-loading{flex-direction:row}.jessibuca-container.jessibuca-fullscreen-web .jessibuca-loading-text{transform:rotate(270deg)}');class Ne{constructor(e){var t;this.player=e,((e,t)=>{e._opt.hasControl&&e._opt.controlAutoHide?e.$container.classList.add("jessibuca-controls-show-auto-hide"):e.$container.classList.add("jessibuca-controls-show");const i=e._opt,o=i.operateBtns;e.$container.insertAdjacentHTML("beforeend",`\n ${i.background?`
`:""}\n
\n ${Ge.loading}\n ${i.loadingText?`
${i.loadingText}
`:""}\n
\n ${i.hasControl&&o.play?'
':""}\n ${i.hasControl?`\n
\n
\n
00:00:01
\n
${Ge.recordStop}
\n
\n `:""}\n ${i.hasControl?`\n
\n
\n
\n ${i.showBandwidth?'
':""}\n
\n
\n ${o.audio?`\n
\n ${Ge.audio}\n ${Ge.mute}\n
\n
\n
\n
\n
\n
\n
\n `:""}\n ${o.play?`
${Ge.play}
${Ge.pause}
`:""}\n ${o.screenshot?`
${Ge.screenshot}
`:""}\n ${o.record?`
${Ge.record}
${Ge.recordStop}
`:""}\n ${o.fullscreen?`
${Ge.fullscreen}
${Ge.fullscreenExit}
`:""}\n
\n
\n
\n `:""}\n\n `),Object.defineProperty(t,"$poster",{value:e.$container.querySelector(".jessibuca-poster")}),Object.defineProperty(t,"$loading",{value:e.$container.querySelector(".jessibuca-loading")}),Object.defineProperty(t,"$play",{value:e.$container.querySelector(".jessibuca-play")}),Object.defineProperty(t,"$playBig",{value:e.$container.querySelector(".jessibuca-play-big")}),Object.defineProperty(t,"$recording",{value:e.$container.querySelector(".jessibuca-recording")}),Object.defineProperty(t,"$recordingTime",{value:e.$container.querySelector(".jessibuca-recording-time")}),Object.defineProperty(t,"$recordingStop",{value:e.$container.querySelector(".jessibuca-recording-stop")}),Object.defineProperty(t,"$pause",{value:e.$container.querySelector(".jessibuca-pause")}),Object.defineProperty(t,"$controls",{value:e.$container.querySelector(".jessibuca-controls")}),Object.defineProperty(t,"$fullscreen",{value:e.$container.querySelector(".jessibuca-fullscreen")}),Object.defineProperty(t,"$fullscreen",{value:e.$container.querySelector(".jessibuca-fullscreen")}),Object.defineProperty(t,"$volume",{value:e.$container.querySelector(".jessibuca-volume")}),Object.defineProperty(t,"$volumePanelWrap",{value:e.$container.querySelector(".jessibuca-volume-panel-wrap")}),Object.defineProperty(t,"$volumePanelText",{value:e.$container.querySelector(".jessibuca-volume-panel-text")}),Object.defineProperty(t,"$volumePanel",{value:e.$container.querySelector(".jessibuca-volume-panel")}),Object.defineProperty(t,"$volumeHandle",{value:e.$container.querySelector(".jessibuca-volume-panel-handle")}),Object.defineProperty(t,"$volumeOn",{value:e.$container.querySelector(".jessibuca-icon-audio")}),Object.defineProperty(t,"$volumeOff",{value:e.$container.querySelector(".jessibuca-icon-mute")}),Object.defineProperty(t,"$fullscreen",{value:e.$container.querySelector(".jessibuca-fullscreen")}),Object.defineProperty(t,"$fullscreenExit",{value:e.$container.querySelector(".jessibuca-fullscreen-exit")}),Object.defineProperty(t,"$record",{value:e.$container.querySelector(".jessibuca-record")}),Object.defineProperty(t,"$recordStop",{value:e.$container.querySelector(".jessibuca-record-stop")}),Object.defineProperty(t,"$screenshot",{value:e.$container.querySelector(".jessibuca-screenshot")}),Object.defineProperty(t,"$speed",{value:e.$container.querySelector(".jessibuca-speed")})})(e,this),Je(e,this),t=this,Object.defineProperty(t,"controlsRect",{get:()=>t.$controls.getBoundingClientRect()}),((e,t)=>{const{events:{proxy:i},debug:o}=e;function r(e){const{bottom:i,height:o}=t.$volumePanel.getBoundingClientRect(),{height:r}=t.$volumeHandle.getBoundingClientRect();return le(i-e.y-r/2,0,o-r/2)/(o-r)}i(window,["click","contextmenu"],(i=>{i.composedPath().indexOf(e.$container)>-1?t.isFocus=!0:t.isFocus=!1})),i(window,"orientationchange",(()=>{setTimeout((()=>{e.resize()}),300)})),i(t.$controls,"click",(e=>{e.stopPropagation()})),i(t.$pause,"click",(t=>{e.pause()})),i(t.$play,"click",(t=>{e.play()})),i(t.$playBig,"click",(t=>{e.play()})),i(t.$volume,"mouseover",(()=>{t.$volumePanelWrap.classList.add("jessibuca-volume-panel-wrap-show")})),i(t.$volume,"mouseout",(()=>{t.$volumePanelWrap.classList.remove("jessibuca-volume-panel-wrap-show")})),i(t.$volumeOn,"click",(i=>{i.stopPropagation(),ue(t.$volumeOn,"display","none"),ue(t.$volumeOff,"display","block"),e.lastVolume=e.volume,e.volume=0})),i(t.$volumeOff,"click",(i=>{i.stopPropagation(),ue(t.$volumeOn,"display","block"),ue(t.$volumeOff,"display","none"),e.volume=e.lastVolume||.5})),i(t.$screenshot,"click",(t=>{t.stopPropagation(),e.video.screenshot()})),i(t.$volumePanel,"click",(t=>{t.stopPropagation(),e.volume=r(t)})),i(t.$volumeHandle,"mousedown",(()=>{t.isVolumeDroging=!0})),i(t.$volumeHandle,"mousemove",(i=>{t.isVolumeDroging&&(e.volume=r(i))})),i(document,"mouseup",(()=>{t.isVolumeDroging&&(t.isVolumeDroging=!1)})),i(t.$record,"click",(t=>{t.stopPropagation(),e.recording=!0})),i(t.$recordStop,"click",(t=>{t.stopPropagation(),e.recording=!1})),i(t.$recordingStop,"click",(t=>{t.stopPropagation(),e.recording=!1})),i(t.$fullscreen,"click",(t=>{t.stopPropagation(),e.fullscreen=!0})),i(t.$fullscreenExit,"click",(t=>{t.stopPropagation(),e.fullscreen=!1})),e._opt.hasControl&&e._opt.controlAutoHide&&(i(e.$container,"mouseover",(()=>{e.fullscreen||ue(t.$controls,"display","block")})),i(e.$container,"mouseout",(()=>{ue(t.$controls,"display","none")})))})(e,this),e._opt.hotKey&&((e,t)=>{const{events:{proxy:i}}=e,o={};function r(e,t){o[e]?o[e].push(t):o[e]=[t]}r($,(()=>{e.fullscreen&&(e.fullscreen=!1)})),r(ee,(()=>{e.volume+=.05})),r(te,(()=>{e.volume-=.05})),i(window,"keydown",(e=>{if(t.isFocus){const t=document.activeElement.tagName.toUpperCase(),i=document.activeElement.getAttribute("contenteditable");if("INPUT"!==t&&"TEXTAREA"!==t&&""!==i&&"true"!==i){const t=o[e.keyCode];t&&(e.preventDefault(),t.forEach((e=>e())))}}}))})(e,this),this.player.debug.log("Control","init")}destroy(){this.$poster&&this.player.$container.removeChild(this.$poster),this.$loading&&this.player.$container.removeChild(this.$loading),this.$controls&&this.player.$container.removeChild(this.$controls),this.$playBig&&this.player.$container.removeChild(this.$playBig),this.player.debug.log("control","destroy")}autoSize(){const e=this.player;e.$container.style.padding="0 0";const t=e.width,i=e.height,o=t/i,r=e.video.$videoElement.width/e.video.$videoElement.height;if(o>r){const o=(t-i*r)/2;e.$container.style.padding=`0 ${o}px`}else{const o=(i-t/r)/2;e.$container.style.padding=`${o}px 0`}}}Pe(".jessibuca-container{position:relative;width:100%;height:100%;overflow:hidden}.jessibuca-container.jessibuca-fullscreen-web{position:fixed;z-index:9999;left:0;top:0;right:0;bottom:0;width:100vw!important;height:100vh!important;background:#000}");class ze{static init(){ze.types={avc1:[],avcC:[],hvc1:[],hvcC:[],btrt:[],dinf:[],dref:[],esds:[],ftyp:[],hdlr:[],mdat:[],mdhd:[],mdia:[],mfhd:[],minf:[],moof:[],moov:[],mp4a:[],mvex:[],mvhd:[],sdtp:[],stbl:[],stco:[],stsc:[],stsd:[],stsz:[],stts:[],tfdt:[],tfhd:[],traf:[],trak:[],trun:[],trex:[],tkhd:[],vmhd:[],smhd:[]};for(let e in ze.types)ze.types.hasOwnProperty(e)&&(ze.types[e]=[e.charCodeAt(0),e.charCodeAt(1),e.charCodeAt(2),e.charCodeAt(3)]);let e=ze.constants={};e.FTYP=new Uint8Array([105,115,111,109,0,0,0,1,105,115,111,109,97,118,99,49]),e.STSD_PREFIX=new Uint8Array([0,0,0,0,0,0,0,1]),e.STTS=new Uint8Array([0,0,0,0,0,0,0,0]),e.STSC=e.STCO=e.STTS,e.STSZ=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0]),e.HDLR_VIDEO=new Uint8Array([0,0,0,0,0,0,0,0,118,105,100,101,0,0,0,0,0,0,0,0,0,0,0,0,86,105,100,101,111,72,97,110,100,108,101,114,0]),e.HDLR_AUDIO=new Uint8Array([0,0,0,0,0,0,0,0,115,111,117,110,0,0,0,0,0,0,0,0,0,0,0,0,83,111,117,110,100,72,97,110,100,108,101,114,0]),e.DREF=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,12,117,114,108,32,0,0,0,1]),e.SMHD=new Uint8Array([0,0,0,0,0,0,0,0]),e.VMHD=new Uint8Array([0,0,0,1,0,0,0,0,0,0,0,0])}static box(e){let t=8,i=null,o=Array.prototype.slice.call(arguments,1),r=o.length;for(let e=0;e>>24&255,i[1]=t>>>16&255,i[2]=t>>>8&255,i[3]=255&t,i.set(e,4);let s=8;for(let e=0;e>>24&255,e>>>16&255,e>>>8&255,255&e,t>>>24&255,t>>>16&255,t>>>8&255,255&t,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255]))}static trak(e){return ze.box(ze.types.trak,ze.tkhd(e),ze.mdia(e))}static tkhd(e){let t=e.id,i=e.duration,o=e.presentWidth,r=e.presentHeight;return ze.box(ze.types.tkhd,new Uint8Array([0,0,0,7,0,0,0,0,0,0,0,0,t>>>24&255,t>>>16&255,t>>>8&255,255&t,0,0,0,0,i>>>24&255,i>>>16&255,i>>>8&255,255&i,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,o>>>8&255,255&o,0,0,r>>>8&255,255&r,0,0]))}static mdia(e){return ze.box(ze.types.mdia,ze.mdhd(e),ze.hdlr(e),ze.minf(e))}static mdhd(e){let t=e.timescale,i=e.duration;return ze.box(ze.types.mdhd,new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,t>>>24&255,t>>>16&255,t>>>8&255,255&t,i>>>24&255,i>>>16&255,i>>>8&255,255&i,85,196,0,0]))}static hdlr(e){let t=null;return t="audio"===e.type?ze.constants.HDLR_AUDIO:ze.constants.HDLR_VIDEO,ze.box(ze.types.hdlr,t)}static minf(e){let t=null;return t="audio"===e.type?ze.box(ze.types.smhd,ze.constants.SMHD):ze.box(ze.types.vmhd,ze.constants.VMHD),ze.box(ze.types.minf,t,ze.dinf(),ze.stbl(e))}static dinf(){return ze.box(ze.types.dinf,ze.box(ze.types.dref,ze.constants.DREF))}static stbl(e){return ze.box(ze.types.stbl,ze.stsd(e),ze.box(ze.types.stts,ze.constants.STTS),ze.box(ze.types.stsc,ze.constants.STSC),ze.box(ze.types.stsz,ze.constants.STSZ),ze.box(ze.types.stco,ze.constants.STCO))}static stsd(e){return"audio"===e.type?ze.box(ze.types.stsd,ze.constants.STSD_PREFIX,ze.mp4a(e)):"avc"===e.videoType?ze.box(ze.types.stsd,ze.constants.STSD_PREFIX,ze.avc1(e)):ze.box(ze.types.stsd,ze.constants.STSD_PREFIX,ze.hvc1(e))}static mp4a(e){let t=e.channelCount,i=e.audioSampleRate,o=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,t,0,16,0,0,0,0,i>>>8&255,255&i,0,0]);return ze.box(ze.types.mp4a,o,ze.esds(e))}static esds(e){let t=e.config||[],i=t.length,o=new Uint8Array([0,0,0,0,3,23+i,0,1,0,4,15+i,64,21,0,0,0,0,0,0,0,0,0,0,0,5].concat([i]).concat(t).concat([6,1,2]));return ze.box(ze.types.esds,o)}static avc1(e){let t=e.avcc;const i=e.codecWidth,o=e.codecHeight;let r=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,i>>>8&255,255&i,o>>>8&255,255&o,0,72,0,0,0,72,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,255,255]);return ze.box(ze.types.avc1,r,ze.box(ze.types.avcC,t))}static hvc1(e){let t=e.avcc;const i=e.codecWidth,o=e.codecHeight;let r=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,i>>>8&255,255&i,o>>>8&255,255&o,0,72,0,0,0,72,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,255,255]);return ze.box(ze.types.hvc1,r,ze.box(ze.types.hvcC,t))}static mvex(e){return ze.box(ze.types.mvex,ze.trex(e))}static trex(e){let t=e.id,i=new Uint8Array([0,0,0,0,t>>>24&255,t>>>16&255,t>>>8&255,255&t,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1]);return ze.box(ze.types.trex,i)}static moof(e,t){return ze.box(ze.types.moof,ze.mfhd(e.sequenceNumber),ze.traf(e,t))}static mfhd(e){let t=new Uint8Array([0,0,0,0,e>>>24&255,e>>>16&255,e>>>8&255,255&e]);return ze.box(ze.types.mfhd,t)}static traf(e,t){let i=e.id,o=ze.box(ze.types.tfhd,new Uint8Array([0,0,0,0,i>>>24&255,i>>>16&255,i>>>8&255,255&i])),r=ze.box(ze.types.tfdt,new Uint8Array([0,0,0,0,t>>>24&255,t>>>16&255,t>>>8&255,255&t])),s=ze.sdtp(e),A=ze.trun(e,s.byteLength+16+16+8+16+8+8);return ze.box(ze.types.traf,o,r,A,s)}static sdtp(e){let t=new Uint8Array(5),i=e.flags;return t[4]=i.isLeading<<6|i.dependsOn<<4|i.isDependedOn<<2|i.hasRedundancy,ze.box(ze.types.sdtp,t)}static trun(e,t){let i=new Uint8Array(28);t+=36,i.set([0,0,15,1,0,0,0,1,t>>>24&255,t>>>16&255,t>>>8&255,255&t],0);let o=e.duration,r=e.size,s=e.flags,A=e.cts;return i.set([o>>>24&255,o>>>16&255,o>>>8&255,255&o,r>>>24&255,r>>>16&255,r>>>8&255,255&r,s.isLeading<<2|s.dependsOn,s.isDependedOn<<6|s.hasRedundancy<<4|s.isNonSync,0,0,A>>>24&255,A>>>16&255,A>>>8&255,255&A],12),ze.box(ze.types.trun,i)}static mdat(e){return ze.box(ze.types.mdat,e)}}ze.init();class Ye{constructor(e){this.TAG="ExpGolomb",this._buffer=e,this._buffer_index=0,this._total_bytes=e.byteLength,this._total_bits=8*e.byteLength,this._current_word=0,this._current_word_bits_left=0}destroy(){this._buffer=null}_fillCurrentWord(){let e=this._total_bytes-this._buffer_index,t=Math.min(4,e),i=new Uint8Array(4);i.set(this._buffer.subarray(this._buffer_index,this._buffer_index+t)),this._current_word=new DataView(i.buffer).getUint32(0,!1),this._buffer_index+=t,this._current_word_bits_left=8*t}readBits(e){if(e<=this._current_word_bits_left){let t=this._current_word>>>32-e;return this._current_word<<=e,this._current_word_bits_left-=e,t}let t=this._current_word_bits_left?this._current_word:0;t>>>=32-this._current_word_bits_left;let i=e-this._current_word_bits_left;this._fillCurrentWord();let o=Math.min(i,this._current_word_bits_left),r=this._current_word>>>32-o;return this._current_word<<=o,this._current_word_bits_left-=o,t=t<>>e))return this._current_word<<=e,this._current_word_bits_left-=e,e;return this._fillCurrentWord(),e+this._skipLeadingZero()}readUEG(){let e=this._skipLeadingZero();return this.readBits(e+1)-1}readSEG(){let e=this.readUEG();return 1&e?e+1>>>1:-1*(e>>>1)}}class He{static _ebsp2rbsp(e){let t=e,i=t.byteLength,o=new Uint8Array(i),r=0;for(let e=0;e=2&&3===t[e]&&0===t[e-1]&&0===t[e-2]||(o[r]=t[e],r++);return new Uint8Array(o.buffer,0,r)}static parseSPS(e){let t=He._ebsp2rbsp(e),i=new Ye(t);i.readByte();let o=i.readByte();i.readByte();let r=i.readByte();i.readUEG();let s=He.getProfileString(o),A=He.getLevelString(r),n=1,a=420,d=[0,420,422,444],c=8;if((100===o||110===o||122===o||244===o||44===o||83===o||86===o||118===o||128===o||138===o||144===o)&&(n=i.readUEG(),3===n&&i.readBits(1),n<=3&&(a=d[n]),c=i.readUEG()+8,i.readUEG(),i.readBits(1),i.readBool())){let e=3!==n?8:12;for(let t=0;t0&&e<16?(v=t[e-1],w=o[e-1]):255===e&&(v=i.readByte()<<8|i.readByte(),w=i.readByte()<<8|i.readByte())}if(i.readBool()&&i.readBool(),i.readBool()&&(i.readBits(4),i.readBool()&&i.readBits(24)),i.readBool()&&(i.readUEG(),i.readUEG()),i.readBool()){let e=i.readBits(32),t=i.readBits(32);E=i.readBool(),B=t,C=2*e,S=B/C}}let R=1;1===v&&1===w||(R=v/w);let k=0,T=0;if(0===n)k=1,T=2-m;else{k=3===n?1:2,T=(1===n?2:1)*(2-m)}let I=16*(h+1),x=16*(p+1)*(2-m);I-=(g+f)*k,x-=(b+y)*T;let D=Math.ceil(I*R);return i.destroy(),i=null,{profile_string:s,level_string:A,bit_depth:c,ref_frames:u,chroma_format:a,chroma_format_string:He.getChromaFormatString(a),frame_rate:{fixed:E,fps:S,fps_den:C,fps_num:B},sar_ratio:{width:v,height:w},codec_size:{width:I,height:x},present_size:{width:D,height:x}}}static _skipScalingList(e,t){let i=8,o=8,r=0;for(let s=0;s{this.mediaSourceOpen=!0,this.player.emit(E.mseSourceOpen)})),i(this.mediaSource,"sourceclose",(()=>{this.player.emit(E.mseSourceClose)})),e.debug.log("MediaSource","init")}destroy(){this.stop(),this.bufferList=[],this.mediaSource=null,this.mediaSourceOpen=!1,this.sourceBuffer=null,this.hasInit=!1,this.isInitInfo=!1,this.sequenceNumber=0,this.cacheTrack=null,this.timeInit=!1,this.off(),this.player.debug.log("MediaSource","destroy")}get state(){return this.mediaSource.readyState}get isStateOpen(){return this.state===q}get isStateClosed(){return this.state===K}get isStateEnded(){return this.state===Z}get duration(){return this.mediaSource.duration}set duration(e){this.mediaSource.duration=e}decodeVideo(e,t,i){const o=this.player;if(this.hasInit)this._decodeVideo(e,t,i);else if(i&&0===e[1]){const r=15&e[0];if(o.video.updateVideoInfo({encTypeCode:r}),r===L)return void this.emit(C.mediaSourceH265NotSupport);o._times.decodeStart||(o._times.decodeStart=ce()),this._decodeConfigurationRecord(e,t,i,r),this.hasInit=!0}}_doDecode(){const e=this.bufferList.shift();e&&this._decodeVideo(e.payload,e.ts,e.isIframe)}_decodeConfigurationRecord(e,t,i,o){let r=e.slice(5),s={};o===j?s=function(e){const t={},i=new DataView(e.buffer);let o=i.getUint8(0),r=i.getUint8(1);if(i.getUint8(2),i.getUint8(3),1!==o||0===r)return;const s=1+(3&i.getUint8(4));if(3!==s&&4!==s)return;let A=31&i.getUint8(5);if(0===A)return;let n=6;for(let o=0;o1&&(this.removeBuffer(n.buffered.start(0),n.buffered.end(0)),this.timeInit=!1),this.dropping&&A-this.cacheTrack.dts>1e3)this.dropping=!1,this.cacheTrack={};else if(this.cacheTrack&&A>this.cacheTrack.dts){let e=8+this.cacheTrack.size,i=new Uint8Array(e);i[0]=e>>>24&255,i[1]=e>>>16&255,i[2]=e>>>8&255,i[3]=255&e,i.set(ze.types.mdat,4),i.set(this.cacheTrack.data,8),this.cacheTrack.duration=A-this.cacheTrack.dts;let r=ze.moof(this.cacheTrack,this.cacheTrack.dts),s=new Uint8Array(r.byteLength+i.byteLength);s.set(r,0),s.set(i,r.byteLength),this.appendBuffer(s.buffer),o.handleRender(),o.updateStats({fps:!0,ts:t,buf:o.demux.delay}),o._times.videoStart||(o._times.videoStart=ce(),o.handlePlayToRenderTimes())}else o.debug.log("MediaSource","timeInit set false , cacheTrack = {}"),this.timeInit=!1,this.cacheTrack={};this.cacheTrack.id=1,this.cacheTrack.sequenceNumber=++this.sequenceNumber,this.cacheTrack.size=s,this.cacheTrack.dts=A,this.cacheTrack.cts=0,this.cacheTrack.isKeyframe=i,this.cacheTrack.data=r,this.cacheTrack.flags={isLeading:0,dependsOn:i?2:1,isDependedOn:i?1:0,hasRedundancy:0,isNonSync:i?0:1},this.timeInit||1!==n.buffered.length||(o.debug.log("MediaSource","timeInit set true"),this.timeInit=!0,n.currentTime=n.buffered.end(0)),!this.isInitInfo&&n.videoWidth>0&&n.videoHeight>0&&(o.debug.log("MediaSource",`updateVideoInfo: ${n.videoWidth},${n.videoHeight}`),o.video.updateVideoInfo({width:n.videoWidth,height:n.videoHeight}),o.video.initCanvasViewSize(),this.isInitInfo=!0)}appendBuffer(e){const{debug:t,events:{proxy:i}}=this.player;null===this.sourceBuffer&&(this.sourceBuffer=this.mediaSource.addSourceBuffer(X),i(this.sourceBuffer,"error",(e=>{this.player.emit(E.mseSourceBufferError,e)}))),!1===this.sourceBuffer.updating&&this.isStateOpen?this.sourceBuffer.appendBuffer(e):this.isStateClosed?this.player.emit(E.mseSourceBufferError,"mediaSource is not attached to video or mediaSource is closed"):this.isStateEnded?this.player.emit(E.mseSourceBufferError,"mediaSource is closed"):!0===this.sourceBuffer.updating&&this.player.emit(E.mseSourceBufferBusy)}stop(){this.isStateOpen&&this.sourceBuffer&&this.sourceBuffer.abort(),this.endOfStream()}dropSourceBuffer(e){const t=this.player.video.$videoElement;this.dropping=e,t.buffered.length>0&&t.buffered.end(0)-t.currentTime>1&&(t.currentTime=t.buffered.end(0))}removeBuffer(e,t){if(this.isStateOpen&&!1===this.sourceBuffer.updating)try{this.sourceBuffer.remove(e,t)}catch(e){console.error(e)}}endOfStream(){this.isStateOpen&&this.mediaSource.endOfStream()}}const Ze=()=>"undefined"!=typeof navigator&&parseFloat((""+(/CPU.*OS ([0-9_]{3,4})[0-9_]{0,1}|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent)||[0,""])[1]).replace("undefined","3_2").replace("_",".").replace("_",""))<10&&!window.MSStream,qe=()=>"wakeLock"in navigator;class Ke{constructor(e){if(this.player=e,this.enabled=!1,qe()){this._wakeLock=null;const e=()=>{null!==this._wakeLock&&"visible"===document.visibilityState&&this.enable()};document.addEventListener("visibilitychange",e),document.addEventListener("fullscreenchange",e)}else Ze()?this.noSleepTimer=null:(this.noSleepVideo=document.createElement("video"),this.noSleepVideo.setAttribute("title","No Sleep"),this.noSleepVideo.setAttribute("playsinline",""),this._addSourceToVideo(this.noSleepVideo,"webm","data:video/webm;base64,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"),this._addSourceToVideo(this.noSleepVideo,"mp4","data:video/mp4;base64,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"),this.noSleepVideo.addEventListener("loadedmetadata",(()=>{this.noSleepVideo.duration<=1?this.noSleepVideo.setAttribute("loop",""):this.noSleepVideo.addEventListener("timeupdate",(()=>{this.noSleepVideo.currentTime>.5&&(this.noSleepVideo.currentTime=Math.random())}))})))}_addSourceToVideo(e,t,i){var o=document.createElement("source");o.src=i,o.type=`video/${t}`,e.appendChild(o)}get isEnabled(){return this.enabled}enable(){const e=this.player.debug;if(qe())return navigator.wakeLock.request("screen").then((t=>{this._wakeLock=t,this.enabled=!0,e.log("wakeLock","Wake Lock active."),this._wakeLock.addEventListener("release",(()=>{e.log("wakeLock","Wake Lock released.")}))})).catch((t=>{throw this.enabled=!1,e.error("wakeLock",`${t.name}, ${t.message}`),t}));if(Ze())return this.disable(),this.noSleepTimer=window.setInterval((()=>{document.hidden||(window.location.href=window.location.href.split("#")[0],window.setTimeout(window.stop,0))}),15e3),this.enabled=!0,Promise.resolve();return this.noSleepVideo.play().then((e=>(this.enabled=!0,e))).catch((e=>{throw this.enabled=!1,e}))}disable(){const e=this.player.debug;qe()?(this._wakeLock&&this._wakeLock.release(),this._wakeLock=null):Ze()?this.noSleepTimer&&(e.warn("wakeLock","NoSleep now disabled for older iOS devices."),window.clearInterval(this.noSleepTimer),this.noSleepTimer=null):this.noSleepVideo.pause(),this.enabled=!1}}class _e extends we{constructor(e,t){var i;super(),this.$container=e,this._opt=Object.assign({},r,t),this.debug=new ie(this),this._opt.useWCS&&(this._opt.useWCS="VideoEncoder"in window),this._opt.useMSE&&(this._opt.useMSE=window.MediaSource&&window.MediaSource.isTypeSupported(X)),this._opt.useMSE?(this._opt.useWCS&&this.debug.log("Player","useWCS set true->false"),this._opt.forceNoOffscreen||this.debug.log("Player","forceNoOffscreen set false->true"),this._opt.useWCS=!1,this._opt.forceNoOffscreen=!0):this._opt.useWCS,this._opt.forceNoOffscreen||("undefined"==typeof OffscreenCanvas?(this._opt.forceNoOffscreen=!0,this._opt.useOffscreen=!1):this._opt.useOffscreen=!0),this._opt.hasAudio||(this._opt.operateBtns.audio=!1),this._opt.hasControl=this._hasControl(),this._loading=!1,this._playing=!1,this._hasLoaded=!1,this._checkHeartTimeout=null,this._checkLoadingTimeout=null,this._startBpsTime=null,this._isPlayingBeforePageHidden=!1,this._stats={buf:0,fps:0,abps:0,vbps:0,ts:0},this._times={playInitStart:"",playStart:"",streamStart:"",streamResponse:"",demuxStart:"",decodeStart:"",videoStart:"",playTimestamp:"",streamTimestamp:"",streamResponseTimestamp:"",demuxTimestamp:"",decodeTimestamp:"",videoTimestamp:"",allTimestamp:""},this._videoTimestamp=0,this._audioTimestamp=0,i=this,Object.defineProperty(i,"rect",{get:()=>{const e=i.$container.getBoundingClientRect();return e.width=Math.max(e.width,i.$container.clientWidth),e.height=Math.max(e.height,i.$container.clientHeight),e}}),["bottom","height","left","right","top","width"].forEach((e=>{Object.defineProperty(i,e,{get:()=>i.rect[e]})})),this.events=new oe(this),this.video=new Ce(this),this._opt.hasAudio&&(this.audio=new ke(this)),this.recorder=new Le(this),this._onlyMseOrWcsVideo()?this.loaded=!0:this.decoderWorker=new Ue(this),this.stream=null,this.demux=null,this._opt.useWCS&&(this.webcodecsDecoder=new Qe(this)),this._opt.useMSE&&(this.mseDecoder=new Xe(this)),this.control=new Ne(this),this.keepScreenOn=new Ke(this),(e=>{try{const t=()=>{e.emit(B.fullscreen,e.fullscreen),e.fullscreen?e._opt.useMSE&&e.resize():e.resize()};Ae.on("change",t),e.events.destroys.push((()=>{Ae.off("change",t)}))}catch(e){}if(e.on(E.decoderWorkerInit,(()=>{e.debug.log("player","has loaded"),e.loaded=!0})),e.on(E.play,(()=>{e.loading=!1})),e.on(E.fullscreen,(t=>{if(t)try{Ae.request(e.$container).then((()=>{})).catch((t=>{e.webFullscreen=!0}))}catch(t){e.webFullscreen=!0}else try{Ae.exit().then((()=>{})).catch((()=>{e.webFullscreen=!1}))}catch(t){e.webFullscreen=!1}})),e.on(E.webFullscreen,(t=>{t?e.$container.classList.add("jessibuca-fullscreen-web"):e.$container.classList.remove("jessibuca-fullscreen-web")})),e.on(E.resize,(()=>{e.video.resize()})),e._opt.debug){const t=[E.timeUpdate];Object.keys(E).forEach((i=>{e.on(E[i],(o=>{t.includes(i)||e.debug.log("player events",E[i],o)}))})),Object.keys(C).forEach((t=>{e.on(C[t],(i=>{e.debug.log("player event error",C[t],i)}))}))}})(this),(e=>{const{_opt:t,debug:i,events:{proxy:o}}=e;t.supportDblclickFullscreen&&o(e.$container,"dblclick",(()=>{e.fullscreen=!e.fullscreen})),o(document,"visibilitychange",(()=>{t.hiddenAutoPause&&(i.log("visibilitychange",document.visibilityState,e._isPlayingBeforePageHidden),"visible"===document.visibilityState?e._isPlayingBeforePageHidden&&e.play():(e._isPlayingBeforePageHidden=e.playing,e.playing&&e.pause()))})),o(window,"fullscreenchange",(()=>{null!==e.keepScreenOn&&"visible"===document.visibilityState&&e.enableWakeLock()}))})(this),this._opt.useWCS&&this.debug.log("Player","use WCS"),this._opt.useMSE&&this.debug.log("Player","use MSE"),this._opt.useOffscreen&&this.debug.log("Player","use offscreen"),this.debug.log("Player options",this._opt)}destroy(){this._loading=!1,this._playing=!1,this._hasLoaded=!1,this._times={playInitStart:"",playStart:"",streamStart:"",streamResponse:"",demuxStart:"",decodeStart:"",videoStart:"",playTimestamp:"",streamTimestamp:"",streamResponseTimestamp:"",demuxTimestamp:"",decodeTimestamp:"",videoTimestamp:"",allTimestamp:""},this.decoderWorker&&(this.decoderWorker.destroy(),this.decoderWorker=null),this.video&&(this.video.destroy(),this.video=null),this.audio&&(this.audio.destroy(),this.audio=null),this.stream&&(this.stream.destroy(),this.stream=null),this.recorder&&(this.recorder.destroy(),this.recorder=null),this.control&&(this.control.destroy(),this.control=null),this.webcodecsDecoder&&(this.webcodecsDecoder.destroy(),this.webcodecsDecoder=null),this.mseDecoder&&(this.mseDecoder.destroy(),this.mseDecoder=null),this.demux&&(this.demux.destroy(),this.demux=null),this.events&&(this.events.destroy(),this.events=null),this.clearCheckHeartTimeout(),this.clearCheckLoadingTimeout(),this.releaseWakeLock(),this.keepScreenOn=null,this.resetStats(),this._audioTimestamp=0,this._videoTimestamp=0,this.emit("destroy"),this.off(),this.debug.log("play","destroy end")}set fullscreen(e){ge()?(this.emit(E.webFullscreen,e),setTimeout((()=>{this.updateOption({rotate:e?270:0}),this.resize()}),10)):this.emit(E.fullscreen,e)}get fullscreen(){return document.isFullScreen||document.mozIsFullScreen||document.webkitIsFullScreen||this.webFullscreen}set webFullscreen(e){this.emit(E.webFullscreen,e)}get webFullscreen(){return this.$container.classList.contains("jessibuca-fullscreen-web")}set loaded(e){this._hasLoaded=e}get loaded(){return this._hasLoaded}set playing(e){e&&(this.loading=!1),this.playing!==e&&(this._playing=e,this.emit(E.playing,e),this.emit(E.volumechange,this.volume),e?this.emit(E.play):this.emit(E.pause))}get playing(){return this._playing}get volume(){return this.audio&&this.audio.volume||0}set volume(e){this.audio&&this.audio.setVolume(e)}set loading(e){this.loading!==e&&(this._loading=e,this.emit(E.loading,this._loading))}get loading(){return this._loading}set recording(e){e?this.playing&&this.recorder.startRecord():this.recorder.stopRecordAndSave()}get recording(){return this.recorder&&this.recorder.recording}set audioTimestamp(e){null!==e&&(this._audioTimestamp=e)}get audioTimestamp(){return this._audioTimestamp}set videoTimestamp(e){null!==e&&(this._videoTimestamp=e,this._opt.useWCS||this._opt.useMSE||this.audioTimestamp&&this.videoTimestamp&&this.audio&&this.audio.emit(E.videoSyncAudio,{audioTimestamp:this.audioTimestamp,videoTimestamp:this.videoTimestamp,diff:this.audioTimestamp-this.videoTimestamp}))}get videoTimestamp(){return this._videoTimestamp}updateOption(e){this._opt=Object.assign({},this._opt,e)}init(){return new Promise(((e,t)=>{this.stream||(this.stream=new xe(this)),this.demux||(this.demux=new Me(this)),this._opt.useWCS&&(this.webcodecsDecoder||(this.webcodecsDecoder=new Qe(this))),this._opt.useMSE&&(this.mseDecoder||(this.mseDecoder=new Xe(this))),this.decoderWorker||this._onlyMseOrWcsVideo()?e():(this.decoderWorker=new Ue(this),this.once(E.decoderWorkerInit,(()=>{e()})))}))}play(e){return new Promise(((t,i)=>{if(!e&&!this._opt.url)return i();this.loading=!0,this.playing=!1,this._times.playInitStart=ce(),e||(e=this._opt.url),this._opt.url=e,this.clearCheckHeartTimeout(),this.init().then((()=>{this._times.playStart=ce(),this._opt.isNotMute&&this.mute(!1),this.webcodecsDecoder&&this.webcodecsDecoder.once(C.webcodecsH265NotSupport,(()=>{this.emit(C.webcodecsH265NotSupport),this._opt.autoWasm||this.emit(E.error,C.webcodecsH265NotSupport)})),this.mseDecoder&&this.mseDecoder.once(C.mediaSourceH265NotSupport,(()=>{this.emit(C.mediaSourceH265NotSupport),this._opt.autoWasm||this.emit(E.error,C.mediaSourceH265NotSupport)})),this.enableWakeLock(),this.stream.fetchStream(e),this.checkLoadingTimeout(),this.stream.once(C.fetchError,(e=>{i(e)})),this.stream.once(C.websocketError,(e=>{i(e)})),this.stream.once(E.streamSuccess,(()=>{t(),this._times.streamResponse=ce(),this.video.play()}))})).catch((e=>{i(e)}))}))}close(){return new Promise(((e,t)=>{this._close().then((()=>{this.video.clearView(),e()}))}))}_close(){return new Promise(((e,t)=>{this.stream&&(this.stream.destroy(),this.stream=null),this.demux&&(this.demux.destroy(),this.demux=null),this.decoderWorker&&(this.decoderWorker.destroy(),this.decoderWorker=null),this.webcodecsDecoder&&(this.webcodecsDecoder.destroy(),this.webcodecsDecoder=null),this.mseDecoder&&(this.mseDecoder.destroy(),this.mseDecoder=null),this.clearCheckHeartTimeout(),this.clearCheckLoadingTimeout(),this.playing=!1,this.loading=!1,this.recording=!1,this.audio&&this.audio.pause(),this.video&&this.video.pause(),this.releaseWakeLock(),this.resetStats(),this._audioTimestamp=0,this._videoTimestamp=0,this._times={playInitStart:"",playStart:"",streamStart:"",streamResponse:"",demuxStart:"",decodeStart:"",videoStart:"",playTimestamp:"",streamTimestamp:"",streamResponseTimestamp:"",demuxTimestamp:"",decodeTimestamp:"",videoTimestamp:"",allTimestamp:""},setTimeout((()=>{e()}),0)}))}pause(e){return e?this.close():this._close()}mute(e){this.audio&&this.audio.mute(e)}resize(){this.video.resize()}startRecord(e,t){this.recording||(this.recorder.setFileName(e,t),this.recording=!0)}stopRecordAndSave(){this.recording&&(this.recording=!1)}_hasControl(){let e=!1,t=!1;return Object.keys(this._opt.operateBtns).forEach((e=>{this._opt.operateBtns[e]&&(t=!0)})),(this._opt.showBandwidth||this._opt.text||t)&&(e=!0),e}_onlyMseOrWcsVideo(){return!1===this._opt.hasAudio&&(this._opt.useMSE||this._opt.useWCS&&!this._opt.useOffscreen)}checkHeart(){this.clearCheckHeartTimeout(),this.checkHeartTimeout()}checkHeartTimeout(){this._checkHeartTimeout=setTimeout((()=>{this.pause(!1).then((()=>{this.emit(E.timeout,E.delayTimeout),this.emit(E.delayTimeout)}))}),1e3*this._opt.heartTimeout)}clearCheckHeartTimeout(){this._checkHeartTimeout&&(clearTimeout(this._checkHeartTimeout),this._checkHeartTimeout=null)}checkLoadingTimeout(){this._checkLoadingTimeout=setTimeout((()=>{this.pause(!1).then((()=>{this.emit(E.timeout,E.loadingTimeout),this.emit(E.loadingTimeout)}))}),1e3*this._opt.loadingTimeout)}clearCheckLoadingTimeout(){this._checkLoadingTimeout&&(clearTimeout(this._checkLoadingTimeout),this._checkLoadingTimeout=null)}handleRender(){this.loading&&(this.emit(E.start),this.loading=!1,this.clearCheckLoadingTimeout()),this.playing||(this.playing=!0),this.checkHeart()}updateStats(e){e=e||{},this._startBpsTime||(this._startBpsTime=ce()),ve(e.ts)&&(this._stats.ts=e.ts),ve(e.buf)&&(this._stats.buf=e.buf),e.fps&&(this._stats.fps+=1),e.abps&&(this._stats.abps+=e.abps),e.vbps&&(this._stats.vbps+=e.vbps);const t=ce();t-this._startBpsTime<1e3||(this.emit(E.stats,this._stats),this.emit(E.performance,function(e){let t=0;return e>=24?t=2:e>=15&&(t=1),t}(this._stats.fps)),this._stats.fps=0,this._stats.abps=0,this._stats.vbps=0,this._startBpsTime=t)}resetStats(){this._startBpsTime=null,this._stats={buf:0,fps:0,abps:0,vbps:0,ts:0}}enableWakeLock(){this._opt.keepScreenOn&&this.keepScreenOn.enable()}releaseWakeLock(){this._opt.keepScreenOn&&this.keepScreenOn.disable()}handlePlayToRenderTimes(){const e=this._times;e.playTimestamp=e.playStart-e.playInitStart,e.streamTimestamp=e.streamStart-e.playStart,e.streamResponseTimestamp=e.streamResponse-e.streamStart,e.demuxTimestamp=e.demuxStart-e.streamResponse,e.decodeTimestamp=e.decodeStart-e.demuxStart,e.videoTimestamp=e.videoStart-e.decodeStart,e.allTimestamp=e.videoStart-e.playInitStart,this.emit(E.playToRenderTimes,e)}}class $e extends we{static ERROR=C;static TIMEOUT={loadingTimeout:E.loadingTimeout,delayTimeout:E.delayTimeout};constructor(e){super();let t=e,i=e.container;if("string"==typeof e.container&&(i=document.querySelector(e.container)),!i)throw new Error("Jessibuca need container option");i.classList.add("jessibuca-container"),delete t.container,ve(t.videoBuffer)&&(t.videoBuffer=1e3*Number(t.videoBuffer)),ve(t.timeout)&&(ye(t.loadingTimeout)&&(t.loadingTimeout=t.timeout),ye(t.heartTimeout)&&(t.heartTimeout=t.timeout)),this._opt=t,this.$container=i,this._loadingTimeoutReplayTimes=0,this._heartTimeoutReplayTimes=0,this.events=new oe(this),this._initPlayer(i,t)}destroy(){this.events&&(this.events.destroy(),this.events=null),this.player&&(this.player.destroy(),this.player=null),this.$container=null,this._opt=null,this._loadingTimeoutReplayTimes=0,this._heartTimeoutReplayTimes=0,this.off()}_initPlayer(e,t){this.player=new _e(e,t),this._bindEvents()}_resetPlayer(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.player.destroy(),this.player=null;const t=Object.assign(this._opt,e);this._initPlayer(this.$container,t)}_bindEvents(){Object.keys(B).forEach((e=>{this.player.on(B[e],(t=>{this.emit(e,t)}))}))}setDebug(e){this.player.updateOption({isDebug:!!e})}mute(){this.player.mute(!0)}cancelMute(){this.player.mute(!1)}setVolume(e){this.player.volume=e}audioResume(){this.player.audio&&this.player.audio.audioEnabled(!0)}setTimeout(e){e=Number(e),this.player.updateOption({timeout:e,loadingTimeout:e,heartTimeout:e})}setScaleMode(e){let t={isFullResize:!1,isResize:!1};switch(e=Number(e)){case M:t.isFullResize=!1,t.isResize=!1;break;case Q:t.isFullResize=!1,t.isResize=!0;break;case W:t.isFullResize=!0,t.isResize=!0}this.player.updateOption(t),this.resize()}pause(){return this.player.pause()}close(){return this._opt.url="",this.player.close()}clearView(){this.player.video.clearView()}play(e){return new Promise(((t,i)=>{if(!e&&!this._opt.url)return this.emit(E.error,C.playError),void i();if(e){if(!this._opt.url)return this._play(e);e===this._opt.url?this.player.playing?t():(this.clearView(),this.player.play(this._opt.url).then((()=>{t()})).catch((()=>{this.player.pause().then((()=>{i()}))}))):this.player.pause().then((()=>(this.clearView(),this._play(e)))).catch((()=>{i()}))}else this.player.play(this._opt.url).then((()=>{t()})).catch((()=>{this.player.pause().then((()=>{i()}))}))}))}_play(r){return new Promise(((s,A)=>{this._opt.url=r;const n=0===r.indexOf("http"),a=n?t:e,d=n||-1!==r.indexOf(".flv")||this._opt.isFlv?i:o;this.player.updateOption({protocol:a,demuxType:d}),this.player.once(C.mediaSourceH265NotSupport,(()=>{this.close().then((()=>{this.player._opt.autoWasm&&(this.player.debug.log("Jessibuca","auto wasm [mse-> wasm] reset player and play"),this._resetPlayer({useMSE:!1}),this.play(r).then((()=>{this.player.debug.log("Jessibuca","auto wasm [mse-> wasm] reset player and play success")})).catch((()=>{this.player.debug.log("Jessibuca","auto wasm [mse-> wasm] reset player and play error")})))}))})),this.player.once(C.webcodecsH265NotSupport,(()=>{this.close().then((()=>{this.player._opt.autoWasm&&(this.player.debug.log("Jessibuca","auto wasm [wcs-> wasm] reset player and play"),this._resetPlayer({useWCS:!1}),this.play(r).then((()=>{this.player.debug.log("Jessibuca","auto wasm [wcs-> wasm] reset player and play success")})).catch((()=>{this.player.debug.log("Jessibuca","auto wasm [wcs-> wasm] reset player and play error")})))}))})),this.player.once(C.wasmDecodeError,(()=>{this.player._opt.wasmDecodeErrorReplay&&this.close().then((()=>{this.player.debug.log("Jessibuca","wasm decode error and reset player and play"),this._resetPlayer({useWCS:!1}),this.play(r).then((()=>{this.player.debug.log("Jessibuca","wasm decode error and reset player and play success")})).catch((()=>{this.player.debug.log("Jessibuca","wasm decode error and reset player and play error")}))}))})),this.player.once(E.delayTimeout,(()=>{this.player._opt.heartTimeoutReplay&&this._heartTimeoutReplayTimes{this._heartTimeoutReplayTimes=0})).catch((()=>{})))})),this.player.once(E.loadingTimeout,(()=>{this.player._opt.loadingTimeoutReplay&&this._loadingTimeoutReplayTimes{this._loadingTimeoutReplayTimes=0})).catch((()=>{})))})),this.hasLoaded()?this.player.play(r).then((()=>{s()})).catch((()=>{this.player.pause().then((()=>{A()}))})):this.player.once(E.decoderWorkerInit,(()=>{this.player.play(r).then((()=>{s()})).catch((()=>{this.player.pause().then((()=>{A()}))}))}))}))}resize(){this.player.resize()}setBufferTime(e){e=Number(e),this.player.updateOption({videoBuffer:1e3*e}),this.player.decoderWorker&&this.player.decoderWorker.updateWorkConfig({key:"videoBuffer",value:1e3*e})}setRotate(e){e=parseInt(e,10);this._opt.rotate!==e&&-1!==[0,90,270].indexOf(e)&&(this.player.updateOption({rotate:e}),this.resize())}hasLoaded(){return this.player.loaded}setKeepScreenOn(){this.player.updateOption({keepScreenOn:!0})}setFullscreen(e){const t=!!e;this.player.fullscreen!==t&&(this.player.fullscreen=t)}screenshot(e,t,i,o){return this.player.video.screenshot(e,t,i,o)}startRecord(e,t){return new Promise(((i,o)=>{this.player.playing?(this.player.startRecord(e,t),i()):o()}))}stopRecordAndSave(){this.player.recording&&this.player.stopRecordAndSave()}isPlaying(){return this.player.playing}isMute(){return!this.player.audio||this.player.audio.isMute}isRecording(){return this.player.recorder.recording}}return window.Jessibuca=$e,$e})); diff --git a/src/decoder/decoder.wasm b/src/decoder/decoder.wasm index dd8e4a4bbe33e14f55172fe40dd614e373e21be8..3cf0b72bcc6aa7bc6e7f65ed63024097acf8f6a5 100755 GIT binary patch delta 1583 zcmYLJU2GIp6uv+6*Us#6TUuGM%H8P}W+}xkEwi;OI2UYcftZr$3yo-r(Xhk>5;Z1j zwulA|8VL8H7%*v&2OiX*8`GpUMiZhy6Jzv2#Aqvqga?hp7}3O_-<>V8$=Nygo;%<9 z&N<(mZ*+1>Cubk_+8x`qx#PMHcWvA8T;dVV>wCPbzUc0IaHO-)(>GGSZ!j598|%B; zZe;9xue6p*dS{q-K0ncSZRw;w5PnIU^l0bPcPkRJHIgVVW|1V46nRwUp4q61HTqI# zh5GuZLc3mFkjnyfVumZS_m>^1yILnthaQP=vw`3*Hd(z{-NtI?bmx&ZqKimRB}mLIFVfRODl!-U$v-RlO$qZ zsP~T*>!-%f(X2@}NK7*1wDiT5-7A{G1N4U#5ymx?{BEN9#gDC$h*-C+N@%ZsWYuW0 zKFwm2d?OEAr0+MOhKLd2q@JW=-Ex1+VqJkGn@O2j$aqa(U9}=B{-iN$1M=%4W{U~X0JJtZl1tTl-YLd-Nd^`O}+oZIcEemk%`%-#yJ4z`P-*IrjqJk`f|0D z(Z0oiftsk5`FRU(fawB5VRlMBL(C&$1EDjN`ZQv>kbxtWj`&D~EM_^0wHnRa0jT2a zn)ECvJ7%ut1@Wy&BM*cGC_IrBBb<;8Wzy2Eyn``$RS3*f>WDd^$U_<8ORkPUHXfdr zKY(Mw`QyrD%Qp9p4&IQVg=XO_T`ny#*Xk?cqp|w${?F(e_1X11yO#C>(KRwPj*~h% z8XI(sdc}Y~`RG`4uNiV9LU;XB8)(RFtHJw1wpRjKCPhHUHtX*gbiutc3clkFk;g~zfr4zVbv zj()<0m**y+=peFAoykgbU3}>^>gUo?Z=HpZ&_C&lwZesKE;EQ(5vzn;1xChPxx?UK zsorX6q++L6<1TYCU<<7Q_Ystf!5wMzJ$zqog)v%mADJQY-`)j~@Kr6(jHb_y|4e&X?W=<&KYK1(~yB*3jP67QB{r_RCo-G}CPQy7DBm<6+84$Osl zuqIeD%%7g$9UOZzxcp)8eG5?&oEY1xJi#V~t!3)?^2(z08Z1$Qc>)(}$?c`3G5LSkG(A}>aL z*+osj5EUJgYQTi334K6Q*=Q3`qNWKpjlTGxHbxLb;sa`9jP=2a-`s`3X3w4P%sF%B zoH^gjySntPF3mmWwb`!C9oKcZYuk?J5|421)SmWk_+snBW9dxK*0J310}qz+s#u#! ztcLde*IWDh^+c3%{yaVS>pHEEM&D3RkEai}kDRPlt0K=mN$$X`B+4s`ZoQl?(nh^L zvu(mxr!R6vZhz;l5cLl9K#(+1;!s30M4kGKE2dWPU4W@cg~FCpiE@VAjV$iMBsLLd zli5s>HtQRiC+Rjl+A%xR@$Ix=Y0sUsk21;^mONV(@?y`CaHLlzTDZqeqe(?h-4JWu>gsXJhPzP)GM8v z^ro&Y+w*?Xm~UR>IR+p~P?BZrNc;w)=fqO0|C&YZ3aXZeB978HY9ykd-{{IVY?nmZ zl8K`JvTKx8FKNGf4B71KE+h-RgoJf(Cg7)DJZqzv9r|2%n(ov~-OtkFwUM5eT_{%u zhoV`BIu%K>EU=J;0r-m+hxo|jZ<=EX9Sl9x=18XaC|oQ6T1H*Ibo9ZYU-nV;mMcCK zkz(n$%`z{AN+dQ4FxZ$knm)6w zy~2G!j^w`=X44!yjx0t%BCv? zsy{=CFTglgLkC;rCS)J>pa%8Au)wvETtL7u- zSc|M=&fZ)AGr2;KC^3qIr;5fifTWjfG~_}$Nl?mC#d6B2vk}*)4%`e{sNSD#LJ+$(GStrdKt0k~}``S`saAAqCxx`05IG!F#s(I4j# zQ245Xr8r{K?#Mg{acs~8PXQRi5#1O|hj4~e4^O{G&(waLzC<^gHY3q`zr8!aj=@W{ z1IKCyD1<>c#Ddrm2jW6JNCTu1;?LI(1aH0?T)hx1w-8nJ{Bxho?_CM@{=fv8IlCBk j(ZtM^#V|ed(_$FRuPufLDNP)kS_&ae^HWRByLSE$bDc{c diff --git a/wasm/decoder.cpp b/wasm/decoder.cpp index f813af8f..b3d3b6ab 100644 --- a/wasm/decoder.cpp +++ b/wasm/decoder.cpp @@ -41,6 +41,8 @@ class FFmpeg bool initialized = false; FFmpeg(val &&v) : jsObject(forward(v)) { + pkt = av_packet_alloc(); + frame = av_frame_alloc(); } void initCodec(enum AVCodecID id) { @@ -48,11 +50,9 @@ class FFmpeg { clear(); } - pkt = av_packet_alloc(); codec = avcodec_find_decoder(id); parser = av_parser_init(codec->id); dec_ctx = avcodec_alloc_context3(codec); - frame = av_frame_alloc(); } void initCodec(enum AVCodecID id, string input) { @@ -67,6 +67,8 @@ class FFmpeg virtual ~FFmpeg() { clear(); + av_frame_free(&frame); + av_packet_free(&pkt); } virtual int decode(string input, u32 timestamp) { @@ -84,25 +86,12 @@ class FFmpeg return 0; } virtual void _decode(u32 timestamp){}; - virtual void clear() + void clear() { - if (parser) - { - av_parser_close(parser); - parser = nullptr; - } - if (dec_ctx) - { - avcodec_free_context(&dec_ctx); - } - if (frame) - { - av_frame_free(&frame); - } - if (pkt) - { - av_packet_free(&pkt); - } + av_parser_close(parser); + parser = nullptr; + avcodec_free_context(&dec_ctx); + codec = nullptr; initialized = false; } @@ -236,19 +225,20 @@ class FFmpegVideoDecoder : public FFmpeg if (((int)(data[0]) >> 4) == 1 && data[1] == 0) { // emscripten_log(0, "codec = %d", codec_id); - if (!initialized) - jsObject.call("setVideoCodec", codec_id); - switch (codec_id) - { - case 7: - initCodec(AV_CODEC_ID_H264, data.substr(5)); - break; - case 12: - initCodec(AV_CODEC_ID_H265, data.substr(5)); - break; - default: - emscripten_log(0, "codec not support: %d", codec_id); - return -1; + if (!initialized){ + jsObject.call("setVideoCodec", codec_id); + switch (codec_id) + { + case 7: + initCodec(AV_CODEC_ID_H264, data.substr(5)); + break; + case 12: + initCodec(AV_CODEC_ID_H265, data.substr(5)); + break; + default: + emscripten_log(0, "codec not support: %d", codec_id); + return -1; + } } } else