function tZ(A,I){for(var g=0;gC[Q]})}}}return Object.freeze(Object.defineProperty(A,Symbol.toStringTag,{value:"Module"}))}function sZ(A){return A&&A.__esModule&&Object.prototype.hasOwnProperty.call(A,"default")?A.default:A}var vZ={exports:{}},x9={},rZ={exports:{}},TA={};/** * @license React * react.production.min.js * * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */var BP=Symbol.for("react.element"),B5=Symbol.for("react.portal"),E5=Symbol.for("react.fragment"),i5=Symbol.for("react.strict_mode"),e5=Symbol.for("react.profiler"),o5=Symbol.for("react.provider"),t5=Symbol.for("react.context"),s5=Symbol.for("react.forward_ref"),v5=Symbol.for("react.suspense"),r5=Symbol.for("react.memo"),a5=Symbol.for("react.lazy"),JL=Symbol.iterator;function P5(A){return A===null||typeof A!="object"?null:(A=JL&&A[JL]||A["@@iterator"],typeof A=="function"?A:null)}var aZ={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},PZ=Object.assign,cZ={};function Iv(A,I,g){this.props=A,this.context=I,this.refs=cZ,this.updater=g||aZ}Iv.prototype.isReactComponent={};Iv.prototype.setState=function(A,I){if(typeof A!="object"&&typeof A!="function"&&A!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,A,I,"setState")};Iv.prototype.forceUpdate=function(A){this.updater.enqueueForceUpdate(this,A,"forceUpdate")};function nZ(){}nZ.prototype=Iv.prototype;function Ym(A,I,g){this.props=A,this.context=I,this.refs=cZ,this.updater=g||aZ}var km=Ym.prototype=new nZ;km.constructor=Ym;PZ(km,Iv.prototype);km.isPureReactComponent=!0;var WL=Array.isArray,lZ=Object.prototype.hasOwnProperty,pm={current:null},dZ={key:!0,ref:!0,__self:!0,__source:!0};function hZ(A,I,g){var C,Q={},B=null,E=null;if(I!=null)for(C in I.ref!==void 0&&(E=I.ref),I.key!==void 0&&(B=""+I.key),I)lZ.call(I,C)&&!dZ.hasOwnProperty(C)&&(Q[C]=I[C]);var i=arguments.length-2;if(i===1)Q.children=g;else if(1>>1,gA=Y[IA];if(0>>1;IAQ(nA,q))HQ(CA,nA)?(Y[IA]=CA,Y[H]=q,IA=H):(Y[IA]=nA,Y[bA]=q,IA=bA);else if(HQ(CA,q))Y[IA]=CA,Y[H]=q,IA=H;else break A}}return N}function Q(Y,N){var q=Y.sortIndex-N.sortIndex;return q!==0?q:Y.id-N.id}if(typeof performance=="object"&&typeof performance.now=="function"){var B=performance;A.unstable_now=function(){return B.now()}}else{var E=Date,i=E.now();A.unstable_now=function(){return E.now()-i}}var e=[],o=[],t=1,s=null,v=3,r=!1,n=!1,a=!1,c=typeof setTimeout=="function"?setTimeout:null,d=typeof clearTimeout=="function"?clearTimeout:null,l=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function h(Y){for(var N=g(o);N!==null;){if(N.callback===null)C(o);else if(N.startTime<=Y)C(o),N.sortIndex=N.expirationTime,I(e,N);else break;N=g(o)}}function D(Y){if(a=!1,h(Y),!n)if(g(e)!==null)n=!0,p(u);else{var N=g(o);N!==null&&J(D,N.startTime-Y)}}function u(Y,N){n=!1,a&&(a=!1,d(y),y=-1),r=!0;var q=v;try{for(h(N),s=g(e);s!==null&&(!(s.expirationTime>N)||Y&&!V());){var IA=s.callback;if(typeof IA=="function"){s.callback=null,v=s.priorityLevel;var gA=IA(s.expirationTime<=N);N=A.unstable_now(),typeof gA=="function"?s.callback=gA:s===g(e)&&C(e),h(N)}else C(e);s=g(e)}if(s!==null)var vA=!0;else{var bA=g(o);bA!==null&&J(D,bA.startTime-N),vA=!1}return vA}finally{s=null,v=q,r=!1}}var w=!1,b=null,y=-1,S=5,L=-1;function V(){return!(A.unstable_now()-LY||125IA?(Y.sortIndex=q,I(o,Y),g(e)===null&&Y===g(o)&&(a?(d(y),y=-1):a=!0,J(D,q-IA))):(Y.sortIndex=gA,I(e,Y),n||r||(n=!0,p(u))),Y},A.unstable_shouldYield=V,A.unstable_wrapCallback=function(Y){var N=v;return function(){var q=v;v=N;try{return Y.apply(this,arguments)}finally{v=q}}}})(wZ);yZ.exports=wZ;var R5=yZ.exports;/** * @license React * react-dom.production.min.js * * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */var L5=AA,gQ=R5;function _(A){for(var I="https://reactjs.org/docs/error-decoder.html?invariant="+A,g=1;g"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),fb=Object.prototype.hasOwnProperty,S5=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,zL={},ML={};function T5(A){return fb.call(ML,A)?!0:fb.call(zL,A)?!1:S5.test(A)?ML[A]=!0:(zL[A]=!0,!1)}function U5(A,I,g,C){if(g!==null&&g.type===0)return!1;switch(typeof I){case"function":case"symbol":return!0;case"boolean":return C?!1:g!==null?!g.acceptsBooleans:(A=A.toLowerCase().slice(0,5),A!=="data-"&&A!=="aria-");default:return!1}}function F5(A,I,g,C){if(I===null||typeof I>"u"||U5(A,I,g,C))return!0;if(C)return!1;if(g!==null)switch(g.type){case 3:return!I;case 4:return I===!1;case 5:return isNaN(I);case 6:return isNaN(I)||1>I}return!1}function vC(A,I,g,C,Q,B,E){this.acceptsBooleans=I===2||I===3||I===4,this.attributeName=C,this.attributeNamespace=Q,this.mustUseProperty=g,this.propertyName=A,this.type=I,this.sanitizeURL=B,this.removeEmptyString=E}var Ug={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(A){Ug[A]=new vC(A,0,!1,A,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(A){var I=A[0];Ug[I]=new vC(I,1,!1,A[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(A){Ug[A]=new vC(A,2,!1,A.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(A){Ug[A]=new vC(A,2,!1,A,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(A){Ug[A]=new vC(A,3,!1,A.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(A){Ug[A]=new vC(A,3,!0,A,null,!1,!1)});["capture","download"].forEach(function(A){Ug[A]=new vC(A,4,!1,A,null,!1,!1)});["cols","rows","size","span"].forEach(function(A){Ug[A]=new vC(A,6,!1,A,null,!1,!1)});["rowSpan","start"].forEach(function(A){Ug[A]=new vC(A,5,!1,A.toLowerCase(),null,!1,!1)});var Zm=/[\-:]([a-z])/g;function Km(A){return A[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(A){var I=A.replace(Zm,Km);Ug[I]=new vC(I,1,!1,A,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(A){var I=A.replace(Zm,Km);Ug[I]=new vC(I,1,!1,A,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(A){var I=A.replace(Zm,Km);Ug[I]=new vC(I,1,!1,A,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(A){Ug[A]=new vC(A,1,!1,A.toLowerCase(),null,!1,!1)});Ug.xlinkHref=new vC("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(A){Ug[A]=new vC(A,1,!1,A.toLowerCase(),null,!0,!0)});function Jm(A,I,g,C){var Q=Ug.hasOwnProperty(I)?Ug[I]:null;(Q!==null?Q.type!==0:C||!(2i||Q[E]!==B[i]){var e=` `+Q[E].replace(" at new "," at ");return A.displayName&&e.includes("")&&(e=e.replace("",A.displayName)),e}while(1<=E&&0<=i);break}}}finally{cd=!1,Error.prepareStackTrace=g}return(A=A?A.displayName||A.name:"")?yr(A):""}function Y5(A){switch(A.tag){case 5:return yr(A.type);case 16:return yr("Lazy");case 13:return yr("Suspense");case 19:return yr("SuspenseList");case 0:case 2:case 15:return A=nd(A.type,!1),A;case 11:return A=nd(A.type.render,!1),A;case 1:return A=nd(A.type,!0),A;default:return""}}function qb(A){if(A==null)return null;if(typeof A=="function")return A.displayName||A.name||null;if(typeof A=="string")return A;switch(A){case Vt:return"Fragment";case Wt:return"Portal";case Hb:return"Profiler";case Wm:return"StrictMode";case xb:return"Suspense";case Ob:return"SuspenseList"}if(typeof A=="object")switch(A.$$typeof){case RZ:return(A.displayName||"Context")+".Consumer";case GZ:return(A._context.displayName||"Context")+".Provider";case Vm:var I=A.render;return A=A.displayName,A||(A=I.displayName||I.name||"",A=A!==""?"ForwardRef("+A+")":"ForwardRef"),A;case zm:return I=A.displayName||null,I!==null?I:qb(A.type)||"Memo";case ni:I=A._payload,A=A._init;try{return qb(A(I))}catch{}}return null}function k5(A){var I=A.type;switch(A.tag){case 24:return"Cache";case 9:return(I.displayName||"Context")+".Consumer";case 10:return(I._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return A=I.render,A=A.displayName||A.name||"",I.displayName||(A!==""?"ForwardRef("+A+")":"ForwardRef");case 7:return"Fragment";case 5:return I;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return qb(I);case 8:return I===Wm?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof I=="function")return I.displayName||I.name||null;if(typeof I=="string")return I}return null}function qi(A){switch(typeof A){case"boolean":case"number":case"string":case"undefined":return A;case"object":return A;default:return""}}function SZ(A){var I=A.type;return(A=A.nodeName)&&A.toLowerCase()==="input"&&(I==="checkbox"||I==="radio")}function p5(A){var I=SZ(A)?"checked":"value",g=Object.getOwnPropertyDescriptor(A.constructor.prototype,I),C=""+A[I];if(!A.hasOwnProperty(I)&&typeof g<"u"&&typeof g.get=="function"&&typeof g.set=="function"){var Q=g.get,B=g.set;return Object.defineProperty(A,I,{configurable:!0,get:function(){return Q.call(this)},set:function(E){C=""+E,B.call(this,E)}}),Object.defineProperty(A,I,{enumerable:g.enumerable}),{getValue:function(){return C},setValue:function(E){C=""+E},stopTracking:function(){A._valueTracker=null,delete A[I]}}}}function Cc(A){A._valueTracker||(A._valueTracker=p5(A))}function TZ(A){if(!A)return!1;var I=A._valueTracker;if(!I)return!0;var g=I.getValue(),C="";return A&&(C=SZ(A)?A.checked?"true":"false":A.value),A=C,A!==g?(I.setValue(A),!0):!1}function ml(A){if(A=A||(typeof document<"u"?document:void 0),typeof A>"u")return null;try{return A.activeElement||A.body}catch{return A.body}}function _b(A,I){var g=I.checked;return UI({},I,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:g??A._wrapperState.initialChecked})}function jL(A,I){var g=I.defaultValue==null?"":I.defaultValue,C=I.checked!=null?I.checked:I.defaultChecked;g=qi(I.value!=null?I.value:g),A._wrapperState={initialChecked:C,initialValue:g,controlled:I.type==="checkbox"||I.type==="radio"?I.checked!=null:I.value!=null}}function UZ(A,I){I=I.checked,I!=null&&Jm(A,"checked",I,!1)}function $b(A,I){UZ(A,I);var g=qi(I.value),C=I.type;if(g!=null)C==="number"?(g===0&&A.value===""||A.value!=g)&&(A.value=""+g):A.value!==""+g&&(A.value=""+g);else if(C==="submit"||C==="reset"){A.removeAttribute("value");return}I.hasOwnProperty("value")?Ay(A,I.type,g):I.hasOwnProperty("defaultValue")&&Ay(A,I.type,qi(I.defaultValue)),I.checked==null&&I.defaultChecked!=null&&(A.defaultChecked=!!I.defaultChecked)}function fL(A,I,g){if(I.hasOwnProperty("value")||I.hasOwnProperty("defaultValue")){var C=I.type;if(!(C!=="submit"&&C!=="reset"||I.value!==void 0&&I.value!==null))return;I=""+A._wrapperState.initialValue,g||I===A.value||(A.value=I),A.defaultValue=I}g=A.name,g!==""&&(A.name=""),A.defaultChecked=!!A._wrapperState.initialChecked,g!==""&&(A.name=g)}function Ay(A,I,g){(I!=="number"||ml(A.ownerDocument)!==A)&&(g==null?A.defaultValue=""+A._wrapperState.initialValue:A.defaultValue!==""+g&&(A.defaultValue=""+g))}var wr=Array.isArray;function rs(A,I,g,C){if(A=A.options,I){I={};for(var Q=0;Q"+I.valueOf().toString()+"",I=Qc.firstChild;A.firstChild;)A.removeChild(A.firstChild);for(;I.firstChild;)A.appendChild(I.firstChild)}});function wa(A,I){if(I){var g=A.firstChild;if(g&&g===A.lastChild&&g.nodeType===3){g.nodeValue=I;return}}A.textContent=I}var xr={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},N5=["Webkit","ms","Moz","O"];Object.keys(xr).forEach(function(A){N5.forEach(function(I){I=I+A.charAt(0).toUpperCase()+A.substring(1),xr[I]=xr[A]})});function pZ(A,I,g){return I==null||typeof I=="boolean"||I===""?"":g||typeof I!="number"||I===0||xr.hasOwnProperty(A)&&xr[A]?(""+I).trim():I+"px"}function NZ(A,I){A=A.style;for(var g in I)if(I.hasOwnProperty(g)){var C=g.indexOf("--")===0,Q=pZ(g,I[g],C);g==="float"&&(g="cssFloat"),C?A.setProperty(g,Q):A[g]=Q}}var Z5=UI({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function Cy(A,I){if(I){if(Z5[A]&&(I.children!=null||I.dangerouslySetInnerHTML!=null))throw Error(_(137,A));if(I.dangerouslySetInnerHTML!=null){if(I.children!=null)throw Error(_(60));if(typeof I.dangerouslySetInnerHTML!="object"||!("__html"in I.dangerouslySetInnerHTML))throw Error(_(61))}if(I.style!=null&&typeof I.style!="object")throw Error(_(62))}}function Qy(A,I){if(A.indexOf("-")===-1)return typeof I.is=="string";switch(A){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var By=null;function Mm(A){return A=A.target||A.srcElement||window,A.correspondingUseElement&&(A=A.correspondingUseElement),A.nodeType===3?A.parentNode:A}var Ey=null,as=null,Ps=null;function OL(A){if(A=eP(A)){if(typeof Ey!="function")throw Error(_(280));var I=A.stateNode;I&&(I=A0(I),Ey(A.stateNode,A.type,I))}}function ZZ(A){as?Ps?Ps.push(A):Ps=[A]:as=A}function KZ(){if(as){var A=as,I=Ps;if(Ps=as=null,OL(A),I)for(A=0;A>>=0,A===0?32:31-(x5(A)/O5|0)|0}var Bc=64,Ec=4194304;function mr(A){switch(A&-A){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return A&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return A&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return A}}function Sl(A,I){var g=A.pendingLanes;if(g===0)return 0;var C=0,Q=A.suspendedLanes,B=A.pingedLanes,E=g&268435455;if(E!==0){var i=E&~Q;i!==0?C=mr(i):(B&=E,B!==0&&(C=mr(B)))}else E=g&~Q,E!==0?C=mr(E):B!==0&&(C=mr(B));if(C===0)return 0;if(I!==0&&I!==C&&!(I&Q)&&(Q=C&-C,B=I&-I,Q>=B||Q===16&&(B&4194240)!==0))return I;if(C&4&&(C|=g&16),I=A.entangledLanes,I!==0)for(A=A.entanglements,I&=C;0g;g++)I.push(A);return I}function EP(A,I,g){A.pendingLanes|=I,I!==536870912&&(A.suspendedLanes=0,A.pingedLanes=0),A=A.eventTimes,I=31-bB(I),A[I]=g}function A3(A,I){var g=A.pendingLanes&~I;A.pendingLanes=I,A.suspendedLanes=0,A.pingedLanes=0,A.expiredLanes&=I,A.mutableReadLanes&=I,A.entangledLanes&=I,I=A.entanglements;var C=A.eventTimes;for(A=A.expirationTimes;0=qr),BS=" ",ES=!1;function BK(A,I){switch(A){case"keyup":return R3.indexOf(I.keyCode)!==-1;case"keydown":return I.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function EK(A){return A=A.detail,typeof A=="object"&&"data"in A?A.data:null}var zt=!1;function S3(A,I){switch(A){case"compositionend":return EK(I);case"keypress":return I.which!==32?null:(ES=!0,BS);case"textInput":return A=I.data,A===BS&&ES?null:A;default:return null}}function T3(A,I){if(zt)return A==="compositionend"||!_m&&BK(A,I)?(A=CK(),Sn=xm=mi=null,zt=!1,A):null;switch(A){case"paste":return null;case"keypress":if(!(I.ctrlKey||I.altKey||I.metaKey)||I.ctrlKey&&I.altKey){if(I.char&&1=I)return{node:g,offset:I-A};A=C}A:{for(;g;){if(g.nextSibling){g=g.nextSibling;break A}g=g.parentNode}g=void 0}g=tS(g)}}function tK(A,I){return A&&I?A===I?!0:A&&A.nodeType===3?!1:I&&I.nodeType===3?tK(A,I.parentNode):"contains"in A?A.contains(I):A.compareDocumentPosition?!!(A.compareDocumentPosition(I)&16):!1:!1}function sK(){for(var A=window,I=ml();I instanceof A.HTMLIFrameElement;){try{var g=typeof I.contentWindow.location.href=="string"}catch{g=!1}if(g)A=I.contentWindow;else break;I=ml(A.document)}return I}function $m(A){var I=A&&A.nodeName&&A.nodeName.toLowerCase();return I&&(I==="input"&&(A.type==="text"||A.type==="search"||A.type==="tel"||A.type==="url"||A.type==="password")||I==="textarea"||A.contentEditable==="true")}function J3(A){var I=sK(),g=A.focusedElem,C=A.selectionRange;if(I!==g&&g&&g.ownerDocument&&tK(g.ownerDocument.documentElement,g)){if(C!==null&&$m(g)){if(I=C.start,A=C.end,A===void 0&&(A=I),"selectionStart"in g)g.selectionStart=I,g.selectionEnd=Math.min(A,g.value.length);else if(A=(I=g.ownerDocument||document)&&I.defaultView||window,A.getSelection){A=A.getSelection();var Q=g.textContent.length,B=Math.min(C.start,Q);C=C.end===void 0?B:Math.min(C.end,Q),!A.extend&&B>C&&(Q=C,C=B,B=Q),Q=sS(g,B);var E=sS(g,C);Q&&E&&(A.rangeCount!==1||A.anchorNode!==Q.node||A.anchorOffset!==Q.offset||A.focusNode!==E.node||A.focusOffset!==E.offset)&&(I=I.createRange(),I.setStart(Q.node,Q.offset),A.removeAllRanges(),B>C?(A.addRange(I),A.extend(E.node,E.offset)):(I.setEnd(E.node,E.offset),A.addRange(I)))}}for(I=[],A=g;A=A.parentNode;)A.nodeType===1&&I.push({element:A,left:A.scrollLeft,top:A.scrollTop});for(typeof g.focus=="function"&&g.focus(),g=0;g=document.documentMode,Mt=null,vy=null,$r=null,ry=!1;function vS(A,I,g){var C=g.window===g?g.document:g.nodeType===9?g:g.ownerDocument;ry||Mt==null||Mt!==ml(C)||(C=Mt,"selectionStart"in C&&$m(C)?C={start:C.selectionStart,end:C.selectionEnd}:(C=(C.ownerDocument&&C.ownerDocument.defaultView||window).getSelection(),C={anchorNode:C.anchorNode,anchorOffset:C.anchorOffset,focusNode:C.focusNode,focusOffset:C.focusOffset}),$r&&Ta($r,C)||($r=C,C=Fl(vy,"onSelect"),0ft||(A.current=dy[ft],dy[ft]=null,ft--)}function eI(A,I){ft++,dy[ft]=A.current,A.current=I}var _i={},jg=Be(_i),UC=Be(!1),so=_i;function Ts(A,I){var g=A.type.contextTypes;if(!g)return _i;var C=A.stateNode;if(C&&C.__reactInternalMemoizedUnmaskedChildContext===I)return C.__reactInternalMemoizedMaskedChildContext;var Q={},B;for(B in g)Q[B]=I[B];return C&&(A=A.stateNode,A.__reactInternalMemoizedUnmaskedChildContext=I,A.__reactInternalMemoizedMaskedChildContext=Q),Q}function FC(A){return A=A.childContextTypes,A!=null}function kl(){nI(UC),nI(jg)}function dS(A,I,g){if(jg.current!==_i)throw Error(_(168));eI(jg,I),eI(UC,g)}function hK(A,I,g){var C=A.stateNode;if(I=I.childContextTypes,typeof C.getChildContext!="function")return g;C=C.getChildContext();for(var Q in C)if(!(Q in I))throw Error(_(108,k5(A)||"Unknown",Q));return UI({},g,C)}function pl(A){return A=(A=A.stateNode)&&A.__reactInternalMemoizedMergedChildContext||_i,so=jg.current,eI(jg,A),eI(UC,UC.current),!0}function hS(A,I,g){var C=A.stateNode;if(!C)throw Error(_(169));g?(A=hK(A,I,so),C.__reactInternalMemoizedMergedChildContext=A,nI(UC),nI(jg),eI(jg,A)):nI(UC),eI(UC,g)}var mE=null,I0=!1,Td=!1;function DK(A){mE===null?mE=[A]:mE.push(A)}function _3(A){I0=!0,DK(A)}function Ee(){if(!Td&&mE!==null){Td=!0;var A=0,I=_A;try{var g=mE;for(_A=1;A>=E,Q-=E,LE=1<<32-bB(I)+Q|g<y?(S=b,b=null):S=b.sibling;var L=v(d,b,h[y],D);if(L===null){b===null&&(b=S);break}A&&b&&L.alternate===null&&I(d,b),l=B(L,l,y),w===null?u=L:w.sibling=L,w=L,b=S}if(y===h.length)return g(d,b),wI&&Te(d,y),u;if(b===null){for(;yy?(S=b,b=null):S=b.sibling;var V=v(d,b,L.value,D);if(V===null){b===null&&(b=S);break}A&&b&&V.alternate===null&&I(d,b),l=B(V,l,y),w===null?u=V:w.sibling=V,w=V,b=S}if(L.done)return g(d,b),wI&&Te(d,y),u;if(b===null){for(;!L.done;y++,L=h.next())L=s(d,L.value,D),L!==null&&(l=B(L,l,y),w===null?u=L:w.sibling=L,w=L);return wI&&Te(d,y),u}for(b=C(d,b);!L.done;y++,L=h.next())L=r(b,d,y,L.value,D),L!==null&&(A&&L.alternate!==null&&b.delete(L.key===null?y:L.key),l=B(L,l,y),w===null?u=L:w.sibling=L,w=L);return A&&b.forEach(function(z){return I(d,z)}),wI&&Te(d,y),u}function c(d,l,h,D){if(typeof h=="object"&&h!==null&&h.type===Vt&&h.key===null&&(h=h.props.children),typeof h=="object"&&h!==null){switch(h.$$typeof){case gc:A:{for(var u=h.key,w=l;w!==null;){if(w.key===u){if(u=h.type,u===Vt){if(w.tag===7){g(d,w.sibling),l=Q(w,h.props.children),l.return=d,d=l;break A}}else if(w.elementType===u||typeof u=="object"&&u!==null&&u.$$typeof===ni&&bS(u)===w.type){g(d,w.sibling),l=Q(w,h.props),l.ref=Xv(d,w,h),l.return=d,d=l;break A}g(d,w);break}else I(d,w);w=w.sibling}h.type===Vt?(l=Ao(h.props.children,d.mode,D,h.key),l.return=d,d=l):(D=Zn(h.type,h.key,h.props,null,d.mode,D),D.ref=Xv(d,l,h),D.return=d,d=D)}return E(d);case Wt:A:{for(w=h.key;l!==null;){if(l.key===w)if(l.tag===4&&l.stateNode.containerInfo===h.containerInfo&&l.stateNode.implementation===h.implementation){g(d,l.sibling),l=Q(l,h.children||[]),l.return=d,d=l;break A}else{g(d,l);break}else I(d,l);l=l.sibling}l=Kd(h,d.mode,D),l.return=d,d=l}return E(d);case ni:return w=h._init,c(d,l,w(h._payload),D)}if(wr(h))return n(d,l,h,D);if(Jv(h))return a(d,l,h,D);rc(d,h)}return typeof h=="string"&&h!==""||typeof h=="number"?(h=""+h,l!==null&&l.tag===6?(g(d,l.sibling),l=Q(l,h),l.return=d,d=l):(g(d,l),l=Zd(h,d.mode,D),l.return=d,d=l),E(d)):g(d,l)}return c}var Fs=wK(!0),mK=wK(!1),Kl=Be(null),Jl=null,Ot=null,CG=null;function QG(){CG=Ot=Jl=null}function BG(A){var I=Kl.current;nI(Kl),A._currentValue=I}function uy(A,I,g){for(;A!==null;){var C=A.alternate;if((A.childLanes&I)!==I?(A.childLanes|=I,C!==null&&(C.childLanes|=I)):C!==null&&(C.childLanes&I)!==I&&(C.childLanes|=I),A===g)break;A=A.return}}function ns(A,I){Jl=A,CG=Ot=null,A=A.dependencies,A!==null&&A.firstContext!==null&&(A.lanes&I&&(LC=!0),A.firstContext=null)}function XQ(A){var I=A._currentValue;if(CG!==A)if(A={context:A,memoizedValue:I,next:null},Ot===null){if(Jl===null)throw Error(_(308));Ot=A,Jl.dependencies={lanes:0,firstContext:A}}else Ot=Ot.next=A;return I}var ze=null;function EG(A){ze===null?ze=[A]:ze.push(A)}function GK(A,I,g,C){var Q=I.interleaved;return Q===null?(g.next=g,EG(I)):(g.next=Q.next,Q.next=g),I.interleaved=g,pE(A,C)}function pE(A,I){A.lanes|=I;var g=A.alternate;for(g!==null&&(g.lanes|=I),g=A,A=A.return;A!==null;)A.childLanes|=I,g=A.alternate,g!==null&&(g.childLanes|=I),g=A,A=A.return;return g.tag===3?g.stateNode:null}var li=!1;function iG(A){A.updateQueue={baseState:A.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function RK(A,I){A=A.updateQueue,I.updateQueue===A&&(I.updateQueue={baseState:A.baseState,firstBaseUpdate:A.firstBaseUpdate,lastBaseUpdate:A.lastBaseUpdate,shared:A.shared,effects:A.effects})}function FE(A,I){return{eventTime:A,lane:I,tag:0,payload:null,callback:null,next:null}}function Vi(A,I,g){var C=A.updateQueue;if(C===null)return null;if(C=C.shared,KA&2){var Q=C.pending;return Q===null?I.next=I:(I.next=Q.next,Q.next=I),C.pending=I,pE(A,g)}return Q=C.interleaved,Q===null?(I.next=I,EG(C)):(I.next=Q.next,Q.next=I),C.interleaved=I,pE(A,g)}function Un(A,I,g){if(I=I.updateQueue,I!==null&&(I=I.shared,(g&4194240)!==0)){var C=I.lanes;C&=A.pendingLanes,g|=C,I.lanes=g,jm(A,g)}}function yS(A,I){var g=A.updateQueue,C=A.alternate;if(C!==null&&(C=C.updateQueue,g===C)){var Q=null,B=null;if(g=g.firstBaseUpdate,g!==null){do{var E={eventTime:g.eventTime,lane:g.lane,tag:g.tag,payload:g.payload,callback:g.callback,next:null};B===null?Q=B=E:B=B.next=E,g=g.next}while(g!==null);B===null?Q=B=I:B=B.next=I}else Q=B=I;g={baseState:C.baseState,firstBaseUpdate:Q,lastBaseUpdate:B,shared:C.shared,effects:C.effects},A.updateQueue=g;return}A=g.lastBaseUpdate,A===null?g.firstBaseUpdate=I:A.next=I,g.lastBaseUpdate=I}function Wl(A,I,g,C){var Q=A.updateQueue;li=!1;var B=Q.firstBaseUpdate,E=Q.lastBaseUpdate,i=Q.shared.pending;if(i!==null){Q.shared.pending=null;var e=i,o=e.next;e.next=null,E===null?B=o:E.next=o,E=e;var t=A.alternate;t!==null&&(t=t.updateQueue,i=t.lastBaseUpdate,i!==E&&(i===null?t.firstBaseUpdate=o:i.next=o,t.lastBaseUpdate=e))}if(B!==null){var s=Q.baseState;E=0,t=o=e=null,i=B;do{var v=i.lane,r=i.eventTime;if((C&v)===v){t!==null&&(t=t.next={eventTime:r,lane:0,tag:i.tag,payload:i.payload,callback:i.callback,next:null});A:{var n=A,a=i;switch(v=I,r=g,a.tag){case 1:if(n=a.payload,typeof n=="function"){s=n.call(r,s,v);break A}s=n;break A;case 3:n.flags=n.flags&-65537|128;case 0:if(n=a.payload,v=typeof n=="function"?n.call(r,s,v):n,v==null)break A;s=UI({},s,v);break A;case 2:li=!0}}i.callback!==null&&i.lane!==0&&(A.flags|=64,v=Q.effects,v===null?Q.effects=[i]:v.push(i))}else r={eventTime:r,lane:v,tag:i.tag,payload:i.payload,callback:i.callback,next:null},t===null?(o=t=r,e=s):t=t.next=r,E|=v;if(i=i.next,i===null){if(i=Q.shared.pending,i===null)break;v=i,i=v.next,v.next=null,Q.lastBaseUpdate=v,Q.shared.pending=null}}while(!0);if(t===null&&(e=s),Q.baseState=e,Q.firstBaseUpdate=o,Q.lastBaseUpdate=t,I=Q.shared.interleaved,I!==null){Q=I;do E|=Q.lane,Q=Q.next;while(Q!==I)}else B===null&&(Q.shared.lanes=0);ao|=E,A.lanes=E,A.memoizedState=s}}function wS(A,I,g){if(A=I.effects,I.effects=null,A!==null)for(I=0;Ig?g:4,A(!0);var C=Fd.transition;Fd.transition={};try{A(!1),I()}finally{_A=g,Fd.transition=C}}function XK(){return jQ().memoizedState}function gH(A,I,g){var C=Mi(A);if(g={lane:C,action:g,hasEagerState:!1,eagerState:null,next:null},jK(A))fK(I,g);else if(g=GK(A,I,g,C),g!==null){var Q=oC();yB(g,A,C,Q),HK(g,I,C)}}function CH(A,I,g){var C=Mi(A),Q={lane:C,action:g,hasEagerState:!1,eagerState:null,next:null};if(jK(A))fK(I,Q);else{var B=A.alternate;if(A.lanes===0&&(B===null||B.lanes===0)&&(B=I.lastRenderedReducer,B!==null))try{var E=I.lastRenderedState,i=B(E,g);if(Q.hasEagerState=!0,Q.eagerState=i,mB(i,E)){var e=I.interleaved;e===null?(Q.next=Q,EG(I)):(Q.next=e.next,e.next=Q),I.interleaved=Q;return}}catch{}finally{}g=GK(A,I,Q,C),g!==null&&(Q=oC(),yB(g,A,C,Q),HK(g,I,C))}}function jK(A){var I=A.alternate;return A===TI||I!==null&&I===TI}function fK(A,I){Aa=zl=!0;var g=A.pending;g===null?I.next=I:(I.next=g.next,g.next=I),A.pending=I}function HK(A,I,g){if(g&4194240){var C=I.lanes;C&=A.pendingLanes,g|=C,I.lanes=g,jm(A,g)}}var Ml={readContext:XQ,useCallback:Ng,useContext:Ng,useEffect:Ng,useImperativeHandle:Ng,useInsertionEffect:Ng,useLayoutEffect:Ng,useMemo:Ng,useReducer:Ng,useRef:Ng,useState:Ng,useDebugValue:Ng,useDeferredValue:Ng,useTransition:Ng,useMutableSource:Ng,useSyncExternalStore:Ng,useId:Ng,unstable_isNewReconciler:!1},QH={readContext:XQ,useCallback:function(A,I){return xB().memoizedState=[A,I===void 0?null:I],A},useContext:XQ,useEffect:GS,useImperativeHandle:function(A,I,g){return g=g!=null?g.concat([A]):null,Yn(4194308,4,JK.bind(null,I,A),g)},useLayoutEffect:function(A,I){return Yn(4194308,4,A,I)},useInsertionEffect:function(A,I){return Yn(4,2,A,I)},useMemo:function(A,I){var g=xB();return I=I===void 0?null:I,A=A(),g.memoizedState=[A,I],A},useReducer:function(A,I,g){var C=xB();return I=g!==void 0?g(I):I,C.memoizedState=C.baseState=I,A={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:A,lastRenderedState:I},C.queue=A,A=A.dispatch=gH.bind(null,TI,A),[C.memoizedState,A]},useRef:function(A){var I=xB();return A={current:A},I.memoizedState=A},useState:mS,useDebugValue:PG,useDeferredValue:function(A){return xB().memoizedState=A},useTransition:function(){var A=mS(!1),I=A[0];return A=IH.bind(null,A[1]),xB().memoizedState=A,[I,A]},useMutableSource:function(){},useSyncExternalStore:function(A,I,g){var C=TI,Q=xB();if(wI){if(g===void 0)throw Error(_(407));g=g()}else{if(g=I(),dg===null)throw Error(_(349));ro&30||UK(C,I,g)}Q.memoizedState=g;var B={value:g,getSnapshot:I};return Q.queue=B,GS(YK.bind(null,C,B,A),[A]),C.flags|=2048,Ka(9,FK.bind(null,C,B,g,I),void 0,null),g},useId:function(){var A=xB(),I=dg.identifierPrefix;if(wI){var g=SE,C=LE;g=(C&~(1<<32-bB(C)-1)).toString(32)+g,I=":"+I+"R"+g,g=Na++,0<\/script>",A=A.removeChild(A.firstChild)):typeof C.is=="string"?A=E.createElement(g,{is:C.is}):(A=E.createElement(g),g==="select"&&(E=A,C.multiple?E.multiple=!0:C.size&&(E.size=C.size))):A=E.createElementNS(A,g),A[AE]=I,A[Ya]=C,Q8(A,I,!1,!1),I.stateNode=A;A:{switch(E=Qy(g,C),g){case"dialog":cI("cancel",A),cI("close",A),Q=C;break;case"iframe":case"object":case"embed":cI("load",A),Q=C;break;case"video":case"audio":for(Q=0;Qps&&(I.flags|=128,C=!0,jv(B,!1),I.lanes=4194304)}else{if(!C)if(A=Vl(E),A!==null){if(I.flags|=128,C=!0,g=A.updateQueue,g!==null&&(I.updateQueue=g,I.flags|=4),jv(B,!0),B.tail===null&&B.tailMode==="hidden"&&!E.alternate&&!wI)return Zg(I),null}else 2*fI()-B.renderingStartTime>ps&&g!==1073741824&&(I.flags|=128,C=!0,jv(B,!1),I.lanes=4194304);B.isBackwards?(E.sibling=I.child,I.child=E):(g=B.last,g!==null?g.sibling=E:I.child=E,B.last=E)}return B.tail!==null?(I=B.tail,B.rendering=I,B.tail=I.sibling,B.renderingStartTime=fI(),I.sibling=null,g=RI.current,eI(RI,C?g&1|2:g&1),I):(Zg(I),null);case 22:case 23:return DG(),C=I.memoizedState!==null,A!==null&&A.memoizedState!==null!==C&&(I.flags|=8192),C&&I.mode&1?MC&1073741824&&(Zg(I),I.subtreeFlags&6&&(I.flags|=8192)):Zg(I),null;case 24:return null;case 25:return null}throw Error(_(156,I.tag))}function vH(A,I){switch(IG(I),I.tag){case 1:return FC(I.type)&&kl(),A=I.flags,A&65536?(I.flags=A&-65537|128,I):null;case 3:return Ys(),nI(UC),nI(jg),tG(),A=I.flags,A&65536&&!(A&128)?(I.flags=A&-65537|128,I):null;case 5:return oG(I),null;case 13:if(nI(RI),A=I.memoizedState,A!==null&&A.dehydrated!==null){if(I.alternate===null)throw Error(_(340));Us()}return A=I.flags,A&65536?(I.flags=A&-65537|128,I):null;case 19:return nI(RI),null;case 4:return Ys(),null;case 10:return BG(I.type._context),null;case 22:case 23:return DG(),null;case 24:return null;default:return null}}var Pc=!1,Vg=!1,rH=typeof WeakSet=="function"?WeakSet:Set,oA=null;function qt(A,I){var g=A.ref;if(g!==null)if(typeof g=="function")try{g(null)}catch(C){JI(A,I,C)}else g.current=null}function Ty(A,I,g){try{g()}catch(C){JI(A,I,C)}}var ZS=!1;function aH(A,I){if(ay=Tl,A=sK(),$m(A)){if("selectionStart"in A)var g={start:A.selectionStart,end:A.selectionEnd};else A:{g=(g=A.ownerDocument)&&g.defaultView||window;var C=g.getSelection&&g.getSelection();if(C&&C.rangeCount!==0){g=C.anchorNode;var Q=C.anchorOffset,B=C.focusNode;C=C.focusOffset;try{g.nodeType,B.nodeType}catch{g=null;break A}var E=0,i=-1,e=-1,o=0,t=0,s=A,v=null;I:for(;;){for(var r;s!==g||Q!==0&&s.nodeType!==3||(i=E+Q),s!==B||C!==0&&s.nodeType!==3||(e=E+C),s.nodeType===3&&(E+=s.nodeValue.length),(r=s.firstChild)!==null;)v=s,s=r;for(;;){if(s===A)break I;if(v===g&&++o===Q&&(i=E),v===B&&++t===C&&(e=E),(r=s.nextSibling)!==null)break;s=v,v=s.parentNode}s=r}g=i===-1||e===-1?null:{start:i,end:e}}else g=null}g=g||{start:0,end:0}}else g=null;for(Py={focusedElem:A,selectionRange:g},Tl=!1,oA=I;oA!==null;)if(I=oA,A=I.child,(I.subtreeFlags&1028)!==0&&A!==null)A.return=I,oA=A;else for(;oA!==null;){I=oA;try{var n=I.alternate;if(I.flags&1024)switch(I.tag){case 0:case 11:case 15:break;case 1:if(n!==null){var a=n.memoizedProps,c=n.memoizedState,d=I.stateNode,l=d.getSnapshotBeforeUpdate(I.elementType===I.type?a:eB(I.type,a),c);d.__reactInternalSnapshotBeforeUpdate=l}break;case 3:var h=I.stateNode.containerInfo;h.nodeType===1?h.textContent="":h.nodeType===9&&h.documentElement&&h.removeChild(h.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(_(163))}}catch(D){JI(I,I.return,D)}if(A=I.sibling,A!==null){A.return=I.return,oA=A;break}oA=I.return}return n=ZS,ZS=!1,n}function Ia(A,I,g){var C=I.updateQueue;if(C=C!==null?C.lastEffect:null,C!==null){var Q=C=C.next;do{if((Q.tag&A)===A){var B=Q.destroy;Q.destroy=void 0,B!==void 0&&Ty(I,g,B)}Q=Q.next}while(Q!==C)}}function Q0(A,I){if(I=I.updateQueue,I=I!==null?I.lastEffect:null,I!==null){var g=I=I.next;do{if((g.tag&A)===A){var C=g.create;g.destroy=C()}g=g.next}while(g!==I)}}function Uy(A){var I=A.ref;if(I!==null){var g=A.stateNode;switch(A.tag){case 5:A=g;break;default:A=g}typeof I=="function"?I(A):I.current=A}}function i8(A){var I=A.alternate;I!==null&&(A.alternate=null,i8(I)),A.child=null,A.deletions=null,A.sibling=null,A.tag===5&&(I=A.stateNode,I!==null&&(delete I[AE],delete I[Ya],delete I[ly],delete I[O3],delete I[q3])),A.stateNode=null,A.return=null,A.dependencies=null,A.memoizedProps=null,A.memoizedState=null,A.pendingProps=null,A.stateNode=null,A.updateQueue=null}function e8(A){return A.tag===5||A.tag===3||A.tag===4}function KS(A){A:for(;;){for(;A.sibling===null;){if(A.return===null||e8(A.return))return null;A=A.return}for(A.sibling.return=A.return,A=A.sibling;A.tag!==5&&A.tag!==6&&A.tag!==18;){if(A.flags&2||A.child===null||A.tag===4)continue A;A.child.return=A,A=A.child}if(!(A.flags&2))return A.stateNode}}function Fy(A,I,g){var C=A.tag;if(C===5||C===6)A=A.stateNode,I?g.nodeType===8?g.parentNode.insertBefore(A,I):g.insertBefore(A,I):(g.nodeType===8?(I=g.parentNode,I.insertBefore(A,g)):(I=g,I.appendChild(A)),g=g._reactRootContainer,g!=null||I.onclick!==null||(I.onclick=Yl));else if(C!==4&&(A=A.child,A!==null))for(Fy(A,I,g),A=A.sibling;A!==null;)Fy(A,I,g),A=A.sibling}function Yy(A,I,g){var C=A.tag;if(C===5||C===6)A=A.stateNode,I?g.insertBefore(A,I):g.appendChild(A);else if(C!==4&&(A=A.child,A!==null))for(Yy(A,I,g),A=A.sibling;A!==null;)Yy(A,I,g),A=A.sibling}var Gg=null,vB=!1;function Ai(A,I,g){for(g=g.child;g!==null;)o8(A,I,g),g=g.sibling}function o8(A,I,g){if(iE&&typeof iE.onCommitFiberUnmount=="function")try{iE.onCommitFiberUnmount(O9,g)}catch{}switch(g.tag){case 5:Vg||qt(g,I);case 6:var C=Gg,Q=vB;Gg=null,Ai(A,I,g),Gg=C,vB=Q,Gg!==null&&(vB?(A=Gg,g=g.stateNode,A.nodeType===8?A.parentNode.removeChild(g):A.removeChild(g)):Gg.removeChild(g.stateNode));break;case 18:Gg!==null&&(vB?(A=Gg,g=g.stateNode,A.nodeType===8?Sd(A.parentNode,g):A.nodeType===1&&Sd(A,g),La(A)):Sd(Gg,g.stateNode));break;case 4:C=Gg,Q=vB,Gg=g.stateNode.containerInfo,vB=!0,Ai(A,I,g),Gg=C,vB=Q;break;case 0:case 11:case 14:case 15:if(!Vg&&(C=g.updateQueue,C!==null&&(C=C.lastEffect,C!==null))){Q=C=C.next;do{var B=Q,E=B.destroy;B=B.tag,E!==void 0&&(B&2||B&4)&&Ty(g,I,E),Q=Q.next}while(Q!==C)}Ai(A,I,g);break;case 1:if(!Vg&&(qt(g,I),C=g.stateNode,typeof C.componentWillUnmount=="function"))try{C.props=g.memoizedProps,C.state=g.memoizedState,C.componentWillUnmount()}catch(i){JI(g,I,i)}Ai(A,I,g);break;case 21:Ai(A,I,g);break;case 22:g.mode&1?(Vg=(C=Vg)||g.memoizedState!==null,Ai(A,I,g),Vg=C):Ai(A,I,g);break;default:Ai(A,I,g)}}function JS(A){var I=A.updateQueue;if(I!==null){A.updateQueue=null;var g=A.stateNode;g===null&&(g=A.stateNode=new rH),I.forEach(function(C){var Q=bH.bind(null,A,C);g.has(C)||(g.add(C),C.then(Q,Q))})}}function gB(A,I){var g=I.deletions;if(g!==null)for(var C=0;CQ&&(Q=E),C&=~B}if(C=Q,C=fI()-C,C=(120>C?120:480>C?480:1080>C?1080:1920>C?1920:3e3>C?3e3:4320>C?4320:1960*cH(C/1960))-C,10A?16:A,Gi===null)var C=!1;else{if(A=Gi,Gi=null,fl=0,KA&6)throw Error(_(331));var Q=KA;for(KA|=4,oA=A.current;oA!==null;){var B=oA,E=B.child;if(oA.flags&16){var i=B.deletions;if(i!==null){for(var e=0;efI()-dG?$e(A,0):lG|=g),YC(A,I)}function n8(A,I){I===0&&(A.mode&1?(I=Ec,Ec<<=1,!(Ec&130023424)&&(Ec=4194304)):I=1);var g=oC();A=pE(A,I),A!==null&&(EP(A,I,g),YC(A,g))}function uH(A){var I=A.memoizedState,g=0;I!==null&&(g=I.retryLane),n8(A,g)}function bH(A,I){var g=0;switch(A.tag){case 13:var C=A.stateNode,Q=A.memoizedState;Q!==null&&(g=Q.retryLane);break;case 19:C=A.stateNode;break;default:throw Error(_(314))}C!==null&&C.delete(I),n8(A,g)}var l8;l8=function(A,I,g){if(A!==null)if(A.memoizedProps!==I.pendingProps||UC.current)LC=!0;else{if(!(A.lanes&g)&&!(I.flags&128))return LC=!1,tH(A,I,g);LC=!!(A.flags&131072)}else LC=!1,wI&&I.flags&1048576&&uK(I,Zl,I.index);switch(I.lanes=0,I.tag){case 2:var C=I.type;kn(A,I),A=I.pendingProps;var Q=Ts(I,jg.current);ns(I,g),Q=vG(null,I,C,A,Q,g);var B=rG();return I.flags|=1,typeof Q=="object"&&Q!==null&&typeof Q.render=="function"&&Q.$$typeof===void 0?(I.tag=1,I.memoizedState=null,I.updateQueue=null,FC(C)?(B=!0,pl(I)):B=!1,I.memoizedState=Q.state!==null&&Q.state!==void 0?Q.state:null,iG(I),Q.updater=C0,I.stateNode=Q,Q._reactInternals=I,yy(I,C,A,g),I=Gy(null,I,C,!0,B,g)):(I.tag=0,wI&&B&&AG(I),CC(null,I,Q,g),I=I.child),I;case 16:C=I.elementType;A:{switch(kn(A,I),A=I.pendingProps,Q=C._init,C=Q(C._payload),I.type=C,Q=I.tag=wH(C),A=eB(C,A),Q){case 0:I=my(null,I,C,A,g);break A;case 1:I=kS(null,I,C,A,g);break A;case 11:I=FS(null,I,C,A,g);break A;case 14:I=YS(null,I,C,eB(C.type,A),g);break A}throw Error(_(306,C,""))}return I;case 0:return C=I.type,Q=I.pendingProps,Q=I.elementType===C?Q:eB(C,Q),my(A,I,C,Q,g);case 1:return C=I.type,Q=I.pendingProps,Q=I.elementType===C?Q:eB(C,Q),kS(A,I,C,Q,g);case 3:A:{if(I8(I),A===null)throw Error(_(387));C=I.pendingProps,B=I.memoizedState,Q=B.element,RK(A,I),Wl(I,C,null,g);var E=I.memoizedState;if(C=E.element,B.isDehydrated)if(B={element:C,isDehydrated:!1,cache:E.cache,pendingSuspenseBoundaries:E.pendingSuspenseBoundaries,transitions:E.transitions},I.updateQueue.baseState=B,I.memoizedState=B,I.flags&256){Q=ks(Error(_(423)),I),I=pS(A,I,C,g,Q);break A}else if(C!==Q){Q=ks(Error(_(424)),I),I=pS(A,I,C,g,Q);break A}else for(HC=Wi(I.stateNode.containerInfo.firstChild),AQ=I,wI=!0,aB=null,g=mK(I,null,C,g),I.child=g;g;)g.flags=g.flags&-3|4096,g=g.sibling;else{if(Us(),C===Q){I=NE(A,I,g);break A}CC(A,I,C,g)}I=I.child}return I;case 5:return LK(I),A===null&&Dy(I),C=I.type,Q=I.pendingProps,B=A!==null?A.memoizedProps:null,E=Q.children,cy(C,Q)?E=null:B!==null&&cy(C,B)&&(I.flags|=32),A8(A,I),CC(A,I,E,g),I.child;case 6:return A===null&&Dy(I),null;case 13:return g8(A,I,g);case 4:return eG(I,I.stateNode.containerInfo),C=I.pendingProps,A===null?I.child=Fs(I,null,C,g):CC(A,I,C,g),I.child;case 11:return C=I.type,Q=I.pendingProps,Q=I.elementType===C?Q:eB(C,Q),FS(A,I,C,Q,g);case 7:return CC(A,I,I.pendingProps,g),I.child;case 8:return CC(A,I,I.pendingProps.children,g),I.child;case 12:return CC(A,I,I.pendingProps.children,g),I.child;case 10:A:{if(C=I.type._context,Q=I.pendingProps,B=I.memoizedProps,E=Q.value,eI(Kl,C._currentValue),C._currentValue=E,B!==null)if(mB(B.value,E)){if(B.children===Q.children&&!UC.current){I=NE(A,I,g);break A}}else for(B=I.child,B!==null&&(B.return=I);B!==null;){var i=B.dependencies;if(i!==null){E=B.child;for(var e=i.firstContext;e!==null;){if(e.context===C){if(B.tag===1){e=FE(-1,g&-g),e.tag=2;var o=B.updateQueue;if(o!==null){o=o.shared;var t=o.pending;t===null?e.next=e:(e.next=t.next,t.next=e),o.pending=e}}B.lanes|=g,e=B.alternate,e!==null&&(e.lanes|=g),uy(B.return,g,I),i.lanes|=g;break}e=e.next}}else if(B.tag===10)E=B.type===I.type?null:B.child;else if(B.tag===18){if(E=B.return,E===null)throw Error(_(341));E.lanes|=g,i=E.alternate,i!==null&&(i.lanes|=g),uy(E,g,I),E=B.sibling}else E=B.child;if(E!==null)E.return=B;else for(E=B;E!==null;){if(E===I){E=null;break}if(B=E.sibling,B!==null){B.return=E.return,E=B;break}E=E.return}B=E}CC(A,I,Q.children,g),I=I.child}return I;case 9:return Q=I.type,C=I.pendingProps.children,ns(I,g),Q=XQ(Q),C=C(Q),I.flags|=1,CC(A,I,C,g),I.child;case 14:return C=I.type,Q=eB(C,I.pendingProps),Q=eB(C.type,Q),YS(A,I,C,Q,g);case 15:return _K(A,I,I.type,I.pendingProps,g);case 17:return C=I.type,Q=I.pendingProps,Q=I.elementType===C?Q:eB(C,Q),kn(A,I),I.tag=1,FC(C)?(A=!0,pl(I)):A=!1,ns(I,g),xK(I,C,Q),yy(I,C,Q,g),Gy(null,I,C,!0,A,g);case 19:return C8(A,I,g);case 22:return $K(A,I,g)}throw Error(_(156,I.tag))};function d8(A,I){return jZ(A,I)}function yH(A,I,g,C){this.tag=A,this.key=g,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=I,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=C,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function NQ(A,I,g,C){return new yH(A,I,g,C)}function bG(A){return A=A.prototype,!(!A||!A.isReactComponent)}function wH(A){if(typeof A=="function")return bG(A)?1:0;if(A!=null){if(A=A.$$typeof,A===Vm)return 11;if(A===zm)return 14}return 2}function Xi(A,I){var g=A.alternate;return g===null?(g=NQ(A.tag,I,A.key,A.mode),g.elementType=A.elementType,g.type=A.type,g.stateNode=A.stateNode,g.alternate=A,A.alternate=g):(g.pendingProps=I,g.type=A.type,g.flags=0,g.subtreeFlags=0,g.deletions=null),g.flags=A.flags&14680064,g.childLanes=A.childLanes,g.lanes=A.lanes,g.child=A.child,g.memoizedProps=A.memoizedProps,g.memoizedState=A.memoizedState,g.updateQueue=A.updateQueue,I=A.dependencies,g.dependencies=I===null?null:{lanes:I.lanes,firstContext:I.firstContext},g.sibling=A.sibling,g.index=A.index,g.ref=A.ref,g}function Zn(A,I,g,C,Q,B){var E=2;if(C=A,typeof A=="function")bG(A)&&(E=1);else if(typeof A=="string")E=5;else A:switch(A){case Vt:return Ao(g.children,Q,B,I);case Wm:E=8,Q|=8;break;case Hb:return A=NQ(12,g,I,Q|2),A.elementType=Hb,A.lanes=B,A;case xb:return A=NQ(13,g,I,Q),A.elementType=xb,A.lanes=B,A;case Ob:return A=NQ(19,g,I,Q),A.elementType=Ob,A.lanes=B,A;case LZ:return E0(g,Q,B,I);default:if(typeof A=="object"&&A!==null)switch(A.$$typeof){case GZ:E=10;break A;case RZ:E=9;break A;case Vm:E=11;break A;case zm:E=14;break A;case ni:E=16,C=null;break A}throw Error(_(130,A==null?A:typeof A,""))}return I=NQ(E,g,I,Q),I.elementType=A,I.type=C,I.lanes=B,I}function Ao(A,I,g,C){return A=NQ(7,A,C,I),A.lanes=g,A}function E0(A,I,g,C){return A=NQ(22,A,C,I),A.elementType=LZ,A.lanes=g,A.stateNode={isHidden:!1},A}function Zd(A,I,g){return A=NQ(6,A,null,I),A.lanes=g,A}function Kd(A,I,g){return I=NQ(4,A.children!==null?A.children:[],A.key,I),I.lanes=g,I.stateNode={containerInfo:A.containerInfo,pendingChildren:null,implementation:A.implementation},I}function mH(A,I,g,C,Q){this.tag=I,this.containerInfo=A,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=dd(0),this.expirationTimes=dd(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=dd(0),this.identifierPrefix=C,this.onRecoverableError=Q,this.mutableSourceEagerHydrationData=null}function yG(A,I,g,C,Q,B,E,i,e){return A=new mH(A,I,g,i,e),I===1?(I=1,B===!0&&(I|=8)):I=0,B=NQ(3,null,null,I),A.current=B,B.stateNode=A,B.memoizedState={element:C,isDehydrated:g,cache:null,transitions:null,pendingSuspenseBoundaries:null},iG(B),A}function GH(A,I,g){var C=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(b8)}catch(A){console.error(A)}}b8(),bZ.exports=QQ;var RG=bZ.exports;const UH=sZ(RG),FH=tZ({__proto__:null,default:UH},[RG]);var YH,HS=RG;YH=HS.createRoot,HS.hydrateRoot;/** * @remix-run/router v1.23.0 * * Copyright (c) Remix Software Inc. * * This source code is licensed under the MIT license found in the * LICENSE.md file in the root directory of this source tree. * * @license MIT */function yI(){return yI=Object.assign?Object.assign.bind():function(A){for(var I=1;I"u")throw new Error(I)}function Ns(A,I){if(!A){typeof console<"u"&&console.warn(I);try{throw new Error(I)}catch{}}}function pH(){return Math.random().toString(36).substr(2,8)}function OS(A,I){return{usr:A.state,key:A.key,idx:I}}function Wa(A,I,g,C){return g===void 0&&(g=null),yI({pathname:typeof A=="string"?A:A.pathname,search:"",hash:""},typeof I=="string"?ie(I):I,{state:g,key:I&&I.key||C||pH()})}function tP(A){let{pathname:I="/",search:g="",hash:C=""}=A;return g&&g!=="?"&&(I+=g.charAt(0)==="?"?g:"?"+g),C&&C!=="#"&&(I+=C.charAt(0)==="#"?C:"#"+C),I}function ie(A){let I={};if(A){let g=A.indexOf("#");g>=0&&(I.hash=A.substr(g),A=A.substr(0,g));let C=A.indexOf("?");C>=0&&(I.search=A.substr(C),A=A.substr(0,C)),A&&(I.pathname=A)}return I}function NH(A,I,g,C){C===void 0&&(C={});let{window:Q=document.defaultView,v5Compat:B=!1}=C,E=Q.history,i=_I.Pop,e=null,o=t();o==null&&(o=0,E.replaceState(yI({},E.state,{idx:o}),""));function t(){return(E.state||{idx:null}).idx}function s(){i=_I.Pop;let c=t(),d=c==null?null:c-o;o=c,e&&e({action:i,location:a.location,delta:d})}function v(c,d){i=_I.Push;let l=Wa(a.location,c,d);o=t()+1;let h=OS(l,o),D=a.createHref(l);try{E.pushState(h,"",D)}catch(u){if(u instanceof DOMException&&u.name==="DataCloneError")throw u;Q.location.assign(D)}B&&e&&e({action:i,location:a.location,delta:1})}function r(c,d){i=_I.Replace;let l=Wa(a.location,c,d);o=t();let h=OS(l,o),D=a.createHref(l);E.replaceState(h,"",D),B&&e&&e({action:i,location:a.location,delta:0})}function n(c){let d=Q.location.origin!=="null"?Q.location.origin:Q.location.href,l=typeof c=="string"?c:tP(c);return l=l.replace(/ $/,"%20"),kA(d,"No window.location.(origin|href) available to create URL for href: "+l),new URL(l,d)}let a={get action(){return i},get location(){return A(Q,E)},listen(c){if(e)throw new Error("A history only accepts one active listener");return Q.addEventListener(xS,s),e=c,()=>{Q.removeEventListener(xS,s),e=null}},createHref(c){return I(Q,c)},createURL:n,encodeLocation(c){let d=n(c);return{pathname:d.pathname,search:d.search,hash:d.hash}},push:v,replace:r,go(c){return E.go(c)}};return a}var qA;(function(A){A.data="data",A.deferred="deferred",A.redirect="redirect",A.error="error"})(qA||(qA={}));const ZH=new Set(["lazy","caseSensitive","path","id","index","children"]);function KH(A){return A.index===!0}function Ol(A,I,g,C){return g===void 0&&(g=[]),C===void 0&&(C={}),A.map((Q,B)=>{let E=[...g,String(B)],i=typeof Q.id=="string"?Q.id:E.join("-");if(kA(Q.index!==!0||!Q.children,"Cannot specify children on an index route"),kA(!C[i],'Found a route id collision on id "'+i+`". Route id's must be globally unique within Data Router usages`),KH(Q)){let e=yI({},Q,I(Q),{id:i});return C[i]=e,e}else{let e=yI({},Q,I(Q),{id:i,children:void 0});return C[i]=e,Q.children&&(e.children=Ol(Q.children,I,E,C)),e}})}function Ze(A,I,g){return g===void 0&&(g="/"),Kn(A,I,g,!1)}function Kn(A,I,g,C){let Q=typeof I=="string"?ie(I):I,B=sP(Q.pathname||"/",g);if(B==null)return null;let E=y8(A);WH(E);let i=null;for(let e=0;i==null&&e{let e={relativePath:i===void 0?B.path||"":i,caseSensitive:B.caseSensitive===!0,childrenIndex:E,route:B};e.relativePath.startsWith("/")&&(kA(e.relativePath.startsWith(C),'Absolute route path "'+e.relativePath+'" nested under path '+('"'+C+'" is not valid. An absolute child route path ')+"must start with the combined path of all its parent routes."),e.relativePath=e.relativePath.slice(C.length));let o=ji([C,e.relativePath]),t=g.concat(e);B.children&&B.children.length>0&&(kA(B.index!==!0,"Index routes must not have child routes. Please remove "+('all child routes from route path "'+o+'".')),y8(B.children,I,t,o)),!(B.path==null&&!B.index)&&I.push({path:o,score:HH(o,B.index),routesMeta:t})};return A.forEach((B,E)=>{var i;if(B.path===""||!((i=B.path)!=null&&i.includes("?")))Q(B,E);else for(let e of w8(B.path))Q(B,E,e)}),I}function w8(A){let I=A.split("/");if(I.length===0)return[];let[g,...C]=I,Q=g.endsWith("?"),B=g.replace(/\?$/,"");if(C.length===0)return Q?[B,""]:[B];let E=w8(C.join("/")),i=[];return i.push(...E.map(e=>e===""?B:[B,e].join("/"))),Q&&i.push(...E),i.map(e=>A.startsWith("/")&&e===""?"/":e)}function WH(A){A.sort((I,g)=>I.score!==g.score?g.score-I.score:xH(I.routesMeta.map(C=>C.childrenIndex),g.routesMeta.map(C=>C.childrenIndex)))}const VH=/^:[\w-]+$/,zH=3,MH=2,XH=1,jH=10,fH=-2,qS=A=>A==="*";function HH(A,I){let g=A.split("/"),C=g.length;return g.some(qS)&&(C+=fH),I&&(C+=MH),g.filter(Q=>!qS(Q)).reduce((Q,B)=>Q+(VH.test(B)?zH:B===""?XH:jH),C)}function xH(A,I){return A.length===I.length&&A.slice(0,-1).every((C,Q)=>C===I[Q])?A[A.length-1]-I[I.length-1]:0}function OH(A,I,g){g===void 0&&(g=!1);let{routesMeta:C}=A,Q={},B="/",E=[];for(let i=0;i{let{paramName:v,isOptional:r}=t;if(v==="*"){let a=i[s]||"";E=B.slice(0,B.length-a.length).replace(/(.)\/+$/,"$1")}const n=i[s];return r&&!n?o[v]=void 0:o[v]=(n||"").replace(/%2F/g,"/"),o},{}),pathname:B,pathnameBase:E,pattern:A}}function qH(A,I,g){I===void 0&&(I=!1),g===void 0&&(g=!0),Ns(A==="*"||!A.endsWith("*")||A.endsWith("/*"),'Route path "'+A+'" will be treated as if it were '+('"'+A.replace(/\*$/,"/*")+'" because the `*` character must ')+"always follow a `/` in the pattern. To get rid of this warning, "+('please change the route path to "'+A.replace(/\*$/,"/*")+'".'));let C=[],Q="^"+A.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(E,i,e)=>(C.push({paramName:i,isOptional:e!=null}),e?"/?([^\\/]+)?":"/([^\\/]+)"));return A.endsWith("*")?(C.push({paramName:"*"}),Q+=A==="*"||A==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):g?Q+="\\/*$":A!==""&&A!=="/"&&(Q+="(?:(?=\\/|$))"),[new RegExp(Q,I?void 0:"i"),C]}function _H(A){try{return A.split("/").map(I=>decodeURIComponent(I).replace(/\//g,"%2F")).join("/")}catch(I){return Ns(!1,'The URL path "'+A+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent '+("encoding ("+I+").")),A}}function sP(A,I){if(I==="/")return A;if(!A.toLowerCase().startsWith(I.toLowerCase()))return null;let g=I.endsWith("/")?I.length-1:I.length,C=A.charAt(g);return C&&C!=="/"?null:A.slice(g)||"/"}function $H(A,I){I===void 0&&(I="/");let{pathname:g,search:C="",hash:Q=""}=typeof A=="string"?ie(A):A;return{pathname:g?g.startsWith("/")?g:A4(g,I):I,search:g4(C),hash:C4(Q)}}function A4(A,I){let g=I.replace(/\/+$/,"").split("/");return A.split("/").forEach(Q=>{Q===".."?g.length>1&&g.pop():Q!=="."&&g.push(Q)}),g.length>1?g.join("/"):"/"}function Jd(A,I,g,C){return"Cannot include a '"+A+"' character in a manually specified "+("`to."+I+"` field ["+JSON.stringify(C)+"]. Please separate it out to the ")+("`to."+g+"` field. Alternatively you may provide the full path as ")+'a string in and the router will parse it for you.'}function m8(A){return A.filter((I,g)=>g===0||I.route.path&&I.route.path.length>0)}function G8(A,I){let g=m8(A);return I?g.map((C,Q)=>Q===g.length-1?C.pathname:C.pathnameBase):g.map(C=>C.pathnameBase)}function R8(A,I,g,C){C===void 0&&(C=!1);let Q;typeof A=="string"?Q=ie(A):(Q=yI({},A),kA(!Q.pathname||!Q.pathname.includes("?"),Jd("?","pathname","search",Q)),kA(!Q.pathname||!Q.pathname.includes("#"),Jd("#","pathname","hash",Q)),kA(!Q.search||!Q.search.includes("#"),Jd("#","search","hash",Q)));let B=A===""||Q.pathname==="",E=B?"/":Q.pathname,i;if(E==null)i=g;else{let s=I.length-1;if(!C&&E.startsWith("..")){let v=E.split("/");for(;v[0]==="..";)v.shift(),s-=1;Q.pathname=v.join("/")}i=s>=0?I[s]:"/"}let e=$H(Q,i),o=E&&E!=="/"&&E.endsWith("/"),t=(B||E===".")&&g.endsWith("/");return!e.pathname.endsWith("/")&&(o||t)&&(e.pathname+="/"),e}const ji=A=>A.join("/").replace(/\/\/+/g,"/"),I4=A=>A.replace(/\/+$/,"").replace(/^\/*/,"/"),g4=A=>!A||A==="?"?"":A.startsWith("?")?A:"?"+A,C4=A=>!A||A==="#"?"":A.startsWith("#")?A:"#"+A;class ql{constructor(I,g,C,Q){Q===void 0&&(Q=!1),this.status=I,this.statusText=g||"",this.internal=Q,C instanceof Error?(this.data=C.toString(),this.error=C):this.data=C}}function Va(A){return A!=null&&typeof A.status=="number"&&typeof A.statusText=="string"&&typeof A.internal=="boolean"&&"data"in A}const L8=["post","put","patch","delete"],Q4=new Set(L8),B4=["get",...L8],E4=new Set(B4),i4=new Set([301,302,303,307,308]),e4=new Set([307,308]),Wd={state:"idle",location:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0},o4={state:"idle",data:void 0,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0},Hv={state:"unblocked",proceed:void 0,reset:void 0,location:void 0},LG=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,t4=A=>({hasErrorBoundary:!!A.hasErrorBoundary}),S8="remix-router-transitions";function s4(A){const I=A.window?A.window:typeof window<"u"?window:void 0,g=typeof I<"u"&&typeof I.document<"u"&&typeof I.document.createElement<"u",C=!g;kA(A.routes.length>0,"You must provide a non-empty routes array to createRouter");let Q;if(A.mapRouteProperties)Q=A.mapRouteProperties;else if(A.detectErrorBoundary){let G=A.detectErrorBoundary;Q=T=>({hasErrorBoundary:G(T)})}else Q=t4;let B={},E=Ol(A.routes,Q,void 0,B),i,e=A.basename||"/",o=A.dataStrategy||P4,t=A.patchRoutesOnNavigation,s=yI({v7_fetcherPersist:!1,v7_normalizeFormMethod:!1,v7_partialHydration:!1,v7_prependBasename:!1,v7_relativeSplatPath:!1,v7_skipActionErrorRevalidation:!1},A.future),v=null,r=new Set,n=null,a=null,c=null,d=A.hydrationData!=null,l=Ze(E,A.history.location,e),h=!1,D=null;if(l==null&&!t){let G=hC(404,{pathname:A.history.location.pathname}),{matches:T,route:k}=o2(E);l=T,D={[k.id]:G}}l&&!A.hydrationData&&Mo(l,E,A.history.location.pathname).active&&(l=null);let u;if(l)if(l.some(G=>G.route.lazy))u=!1;else if(!l.some(G=>G.route.loader))u=!0;else if(s.v7_partialHydration){let G=A.hydrationData?A.hydrationData.loaderData:null,T=A.hydrationData?A.hydrationData.errors:null;if(T){let k=l.findIndex(O=>T[O.route.id]!==void 0);u=l.slice(0,k+1).every(O=>!Jy(O.route,G,T))}else u=l.every(k=>!Jy(k.route,G,T))}else u=A.hydrationData!=null;else if(u=!1,l=[],s.v7_partialHydration){let G=Mo(null,E,A.history.location.pathname);G.active&&G.matches&&(h=!0,l=G.matches)}let w,b={historyAction:A.history.action,location:A.history.location,matches:l,initialized:u,navigation:Wd,restoreScrollPosition:A.hydrationData!=null?!1:null,preventScrollReset:!1,revalidation:"idle",loaderData:A.hydrationData&&A.hydrationData.loaderData||{},actionData:A.hydrationData&&A.hydrationData.actionData||null,errors:A.hydrationData&&A.hydrationData.errors||D,fetchers:new Map,blockers:new Map},y=_I.Pop,S=!1,L,V=!1,z=new Map,EA=null,eA=!1,K=!1,p=[],J=new Set,Y=new Map,N=0,q=-1,IA=new Map,gA=new Set,vA=new Map,bA=new Map,nA=new Set,H=new Map,CA=new Map,LA;function UA(){if(v=A.history.listen(G=>{let{action:T,location:k,delta:O}=G;if(LA){LA(),LA=void 0;return}Ns(CA.size===0||O!=null,"You are trying to use a blocker on a POP navigation to a location that was not created by @remix-run/router. This will fail silently in production. This can happen if you are navigating outside the router via `window.history.pushState`/`window.location.hash` instead of using router navigation APIs. This can also happen if you are using createHashRouter and the user manually changes the URL.");let QA=Yv({currentLocation:b.location,nextLocation:k,historyAction:T});if(QA&&O!=null){let cA=new Promise(hA=>{LA=hA});A.history.go(O*-1),zo(QA,{state:"blocked",location:k,proceed(){zo(QA,{state:"proceeding",proceed:void 0,reset:void 0,location:k}),cA.then(()=>A.history.go(O))},reset(){let hA=new Map(b.blockers);hA.set(QA,Hv),NA({blockers:hA})}});return}return ug(T,k)}),g){L4(I,z);let G=()=>S4(I,z);I.addEventListener("pagehide",G),EA=()=>I.removeEventListener("pagehide",G)}return b.initialized||ug(_I.Pop,b.location,{initialHydration:!0}),w}function xA(){v&&v(),EA&&EA(),r.clear(),L&&L.abort(),b.fetchers.forEach((G,T)=>PE(T)),b.blockers.forEach((G,T)=>xP(T))}function rg(G){return r.add(G),()=>r.delete(G)}function NA(G,T){T===void 0&&(T={}),b=yI({},b,G);let k=[],O=[];s.v7_fetcherPersist&&b.fetchers.forEach((QA,cA)=>{QA.state==="idle"&&(nA.has(cA)?O.push(cA):k.push(cA))}),nA.forEach(QA=>{!b.fetchers.has(QA)&&!Y.has(QA)&&O.push(QA)}),[...r].forEach(QA=>QA(b,{deletedFetchers:O,viewTransitionOpts:T.viewTransitionOpts,flushSync:T.flushSync===!0})),s.v7_fetcherPersist?(k.forEach(QA=>b.fetchers.delete(QA)),O.forEach(QA=>PE(QA))):O.forEach(QA=>nA.delete(QA))}function MI(G,T,k){var O,QA;let{flushSync:cA}=k===void 0?{}:k,hA=b.actionData!=null&&b.navigation.formMethod!=null&&rB(b.navigation.formMethod)&&b.navigation.state==="loading"&&((O=G.state)==null?void 0:O._isRedirect)!==!0,sA;T.actionData?Object.keys(T.actionData).length>0?sA=T.actionData:sA=null:hA?sA=b.actionData:sA=null;let rA=T.loaderData?i2(b.loaderData,T.loaderData,T.matches||[],T.errors):b.loaderData,tA=b.blockers;tA.size>0&&(tA=new Map(tA),tA.forEach((pA,bg)=>tA.set(bg,Hv)));let PA=S===!0||b.navigation.formMethod!=null&&rB(b.navigation.formMethod)&&((QA=G.state)==null?void 0:QA._isRedirect)!==!0;i&&(E=i,i=void 0),eA||y===_I.Pop||(y===_I.Push?A.history.push(G,G.state):y===_I.Replace&&A.history.replace(G,G.state));let GA;if(y===_I.Pop){let pA=z.get(b.location.pathname);pA&&pA.has(G.pathname)?GA={currentLocation:b.location,nextLocation:G}:z.has(G.pathname)&&(GA={currentLocation:G,nextLocation:b.location})}else if(V){let pA=z.get(b.location.pathname);pA?pA.add(G.pathname):(pA=new Set([G.pathname]),z.set(b.location.pathname,pA)),GA={currentLocation:b.location,nextLocation:G}}NA(yI({},T,{actionData:sA,loaderData:rA,historyAction:y,location:G,initialized:!0,navigation:Wd,revalidation:"idle",restoreScrollPosition:qP(G,T.matches||b.matches),preventScrollReset:PA,blockers:tA}),{viewTransitionOpts:GA,flushSync:cA===!0}),y=_I.Pop,S=!1,V=!1,eA=!1,K=!1,p=[]}async function KC(G,T){if(typeof G=="number"){A.history.go(G);return}let k=Ky(b.location,b.matches,e,s.v7_prependBasename,G,s.v7_relativeSplatPath,T==null?void 0:T.fromRouteId,T==null?void 0:T.relative),{path:O,submission:QA,error:cA}=$S(s.v7_normalizeFormMethod,!1,k,T),hA=b.location,sA=Wa(b.location,O,T&&T.state);sA=yI({},sA,A.history.encodeLocation(sA));let rA=T&&T.replace!=null?T.replace:void 0,tA=_I.Push;rA===!0?tA=_I.Replace:rA===!1||QA!=null&&rB(QA.formMethod)&&QA.formAction===b.location.pathname+b.location.search&&(tA=_I.Replace);let PA=T&&"preventScrollReset"in T?T.preventScrollReset===!0:void 0,GA=(T&&T.flushSync)===!0,pA=Yv({currentLocation:hA,nextLocation:sA,historyAction:tA});if(pA){zo(pA,{state:"blocked",location:sA,proceed(){zo(pA,{state:"proceeding",proceed:void 0,reset:void 0,location:sA}),KC(G,T)},reset(){let bg=new Map(b.blockers);bg.set(pA,Hv),NA({blockers:bg})}});return}return await ug(tA,sA,{submission:QA,pendingError:cA,preventScrollReset:PA,replace:T&&T.replace,enableViewTransition:T&&T.viewTransition,flushSync:GA})}function YB(){if(Og(),NA({revalidation:"loading"}),b.navigation.state!=="submitting"){if(b.navigation.state==="idle"){ug(b.historyAction,b.location,{startUninterruptedRevalidation:!0});return}ug(y||b.historyAction,b.navigation.location,{overrideNavigation:b.navigation,enableViewTransition:V===!0})}}async function ug(G,T,k){L&&L.abort(),L=null,y=G,eA=(k&&k.startUninterruptedRevalidation)===!0,sd(b.location,b.matches),S=(k&&k.preventScrollReset)===!0,V=(k&&k.enableViewTransition)===!0;let O=i||E,QA=k&&k.overrideNavigation,cA=k!=null&&k.initialHydration&&b.matches&&b.matches.length>0&&!h?b.matches:Ze(O,T,e),hA=(k&&k.flushSync)===!0;if(cA&&b.initialized&&!K&&D4(b.location,T)&&!(k&&k.submission&&rB(k.submission.formMethod))){MI(T,{matches:cA},{flushSync:hA});return}let sA=Mo(cA,O,T.pathname);if(sA.active&&sA.matches&&(cA=sA.matches),!cA){let{error:BI,notFoundMatches:zA,route:NI}=kv(T.pathname);MI(T,{matches:zA,loaderData:{},errors:{[NI.id]:BI}},{flushSync:hA});return}L=new AbortController;let rA=Oo(A.history,T,L.signal,k&&k.submission),tA;if(k&&k.pendingError)tA=[Ke(cA).route.id,{type:qA.error,error:k.pendingError}];else if(k&&k.submission&&rB(k.submission.formMethod)){let BI=await kB(rA,T,k.submission,cA,sA.active,{replace:k.replace,flushSync:hA});if(BI.shortCircuited)return;if(BI.pendingActionResult){let[zA,NI]=BI.pendingActionResult;if(XC(NI)&&Va(NI.error)&&NI.error.status===404){L=null,MI(T,{matches:BI.matches,loaderData:{},errors:{[zA]:NI.error}});return}}cA=BI.matches||cA,tA=BI.pendingActionResult,QA=Vd(T,k.submission),hA=!1,sA.active=!1,rA=Oo(A.history,rA.url,rA.signal)}let{shortCircuited:PA,matches:GA,loaderData:pA,errors:bg}=await pB(rA,T,cA,sA.active,QA,k&&k.submission,k&&k.fetcherSubmission,k&&k.replace,k&&k.initialHydration===!0,hA,tA);PA||(L=null,MI(T,yI({matches:GA||cA},e2(tA),{loaderData:pA,errors:bg})))}async function kB(G,T,k,O,QA,cA){cA===void 0&&(cA={}),Og();let hA=G4(T,k);if(NA({navigation:hA},{flushSync:cA.flushSync===!0}),QA){let tA=await Xo(O,T.pathname,G.signal);if(tA.type==="aborted")return{shortCircuited:!0};if(tA.type==="error"){let PA=Ke(tA.partialMatches).route.id;return{matches:tA.partialMatches,pendingActionResult:[PA,{type:qA.error,error:tA.error}]}}else if(tA.matches)O=tA.matches;else{let{notFoundMatches:PA,error:GA,route:pA}=kv(T.pathname);return{matches:PA,pendingActionResult:[pA.id,{type:qA.error,error:GA}]}}}let sA,rA=Rr(O,T);if(!rA.route.action&&!rA.route.lazy)sA={type:qA.error,error:hC(405,{method:G.method,pathname:T.pathname,routeId:rA.route.id})};else if(sA=(await sQ("action",b,G,[rA],O,null))[rA.route.id],G.signal.aborted)return{shortCircuited:!0};if(Xe(sA)){let tA;return cA&&cA.replace!=null?tA=cA.replace:tA=Q2(sA.response.headers.get("Location"),new URL(G.url),e)===b.location.pathname+b.location.search,await JC(G,sA,!0,{submission:k,replace:tA}),{shortCircuited:!0}}if(Ri(sA))throw hC(400,{type:"defer-action"});if(XC(sA)){let tA=Ke(O,rA.route.id);return(cA&&cA.replace)!==!0&&(y=_I.Push),{matches:O,pendingActionResult:[tA.route.id,sA]}}return{matches:O,pendingActionResult:[rA.route.id,sA]}}async function pB(G,T,k,O,QA,cA,hA,sA,rA,tA,PA){let GA=QA||Vd(T,cA),pA=cA||hA||s2(GA),bg=!eA&&(!s.v7_partialHydration||!rA);if(O){if(bg){let ZI=tQ(PA);NA(yI({navigation:GA},ZI!==void 0?{actionData:ZI}:{}),{flushSync:tA})}let WA=await Xo(k,T.pathname,G.signal);if(WA.type==="aborted")return{shortCircuited:!0};if(WA.type==="error"){let ZI=Ke(WA.partialMatches).route.id;return{matches:WA.partialMatches,loaderData:{},errors:{[ZI]:WA.error}}}else if(WA.matches)k=WA.matches;else{let{error:ZI,notFoundMatches:fo,route:Kv}=kv(T.pathname);return{matches:fo,loaderData:{},errors:{[Kv.id]:ZI}}}}let BI=i||E,[zA,NI]=I2(A.history,b,k,pA,T,s.v7_partialHydration&&rA===!0,s.v7_skipActionErrorRevalidation,K,p,J,nA,vA,gA,BI,e,PA);if(pv(WA=>!(k&&k.some(ZI=>ZI.route.id===WA))||zA&&zA.some(ZI=>ZI.route.id===WA)),q=++N,zA.length===0&&NI.length===0){let WA=IB();return MI(T,yI({matches:k,loaderData:{},errors:PA&&XC(PA[1])?{[PA[0]]:PA[1].error}:null},e2(PA),WA?{fetchers:new Map(b.fetchers)}:{}),{flushSync:tA}),{shortCircuited:!0}}if(bg){let WA={};if(!O){WA.navigation=GA;let ZI=tQ(PA);ZI!==void 0&&(WA.actionData=ZI)}NI.length>0&&(WA.fetchers=AB(NI)),NA(WA,{flushSync:tA})}NI.forEach(WA=>{rQ(WA.key),WA.controller&&Y.set(WA.key,WA.controller)});let jo=()=>NI.forEach(WA=>rQ(WA.key));L&&L.signal.addEventListener("abort",jo);let{loaderResults:Nv,fetcherResults:cE}=await _E(b,k,zA,NI,G);if(G.signal.aborted)return{shortCircuited:!0};L&&L.signal.removeEventListener("abort",jo),NI.forEach(WA=>Y.delete(WA.key));let ZB=lc(Nv);if(ZB)return await JC(G,ZB.result,!0,{replace:sA}),{shortCircuited:!0};if(ZB=lc(cE),ZB)return gA.add(ZB.key),await JC(G,ZB.result,!0,{replace:sA}),{shortCircuited:!0};let{loaderData:rd,errors:Zv}=E2(b,k,Nv,PA,NI,cE,H);H.forEach((WA,ZI)=>{WA.subscribe(fo=>{(fo||WA.done)&&H.delete(ZI)})}),s.v7_partialHydration&&rA&&b.errors&&(Zv=yI({},b.errors,Zv));let De=IB(),$P=fP(q),Ac=De||$P||NI.length>0;return yI({matches:k,loaderData:rd,errors:Zv},Ac?{fetchers:new Map(b.fetchers)}:{})}function tQ(G){if(G&&!XC(G[1]))return{[G[0]]:G[1].data};if(b.actionData)return Object.keys(b.actionData).length===0?null:b.actionData}function AB(G){return G.forEach(T=>{let k=b.fetchers.get(T.key),O=xv(void 0,k?k.data:void 0);b.fetchers.set(T.key,O)}),new Map(b.fetchers)}function aC(G,T,k,O){if(C)throw new Error("router.fetch() was called during the server render, but it shouldn't be. You are likely calling a useFetcher() method in the body of your component. Try moving it to a useEffect or a callback.");rQ(G);let QA=(O&&O.flushSync)===!0,cA=i||E,hA=Ky(b.location,b.matches,e,s.v7_prependBasename,k,s.v7_relativeSplatPath,T,O==null?void 0:O.relative),sA=Ze(cA,hA,e),rA=Mo(sA,cA,hA);if(rA.active&&rA.matches&&(sA=rA.matches),!sA){WC(G,T,hC(404,{pathname:hA}),{flushSync:QA});return}let{path:tA,submission:PA,error:GA}=$S(s.v7_normalizeFormMethod,!0,hA,O);if(GA){WC(G,T,GA,{flushSync:QA});return}let pA=Rr(sA,tA),bg=(O&&O.preventScrollReset)===!0;if(PA&&rB(PA.formMethod)){NB(G,T,tA,pA,sA,rA.active,QA,bg,PA);return}vA.set(G,{routeId:T,path:tA}),qE(G,T,tA,pA,sA,rA.active,QA,bg,PA)}async function NB(G,T,k,O,QA,cA,hA,sA,rA){Og(),vA.delete(G);function tA(qI){if(!qI.route.action&&!qI.route.lazy){let Ho=hC(405,{method:rA.formMethod,pathname:k,routeId:T});return WC(G,T,Ho,{flushSync:hA}),!0}return!1}if(!cA&&tA(O))return;let PA=b.fetchers.get(G);vQ(G,R4(rA,PA),{flushSync:hA});let GA=new AbortController,pA=Oo(A.history,k,GA.signal,rA);if(cA){let qI=await Xo(QA,new URL(pA.url).pathname,pA.signal,G);if(qI.type==="aborted")return;if(qI.type==="error"){WC(G,T,qI.error,{flushSync:hA});return}else if(qI.matches){if(QA=qI.matches,O=Rr(QA,k),tA(O))return}else{WC(G,T,hC(404,{pathname:k}),{flushSync:hA});return}}Y.set(G,GA);let bg=N,zA=(await sQ("action",b,pA,[O],QA,G))[O.route.id];if(pA.signal.aborted){Y.get(G)===GA&&Y.delete(G);return}if(s.v7_fetcherPersist&&nA.has(G)){if(Xe(zA)||XC(zA)){vQ(G,ti(void 0));return}}else{if(Xe(zA))if(Y.delete(G),q>bg){vQ(G,ti(void 0));return}else return gA.add(G),vQ(G,xv(rA)),JC(pA,zA,!1,{fetcherSubmission:rA,preventScrollReset:sA});if(XC(zA)){WC(G,T,zA.error);return}}if(Ri(zA))throw hC(400,{type:"defer-action"});let NI=b.navigation.location||b.location,jo=Oo(A.history,NI,GA.signal),Nv=i||E,cE=b.navigation.state!=="idle"?Ze(Nv,b.navigation.location,e):b.matches;kA(cE,"Didn't find any matches after fetcher action");let ZB=++N;IA.set(G,ZB);let rd=xv(rA,zA.data);b.fetchers.set(G,rd);let[Zv,De]=I2(A.history,b,cE,rA,NI,!1,s.v7_skipActionErrorRevalidation,K,p,J,nA,vA,gA,Nv,e,[O.route.id,zA]);De.filter(qI=>qI.key!==G).forEach(qI=>{let Ho=qI.key,KL=b.fetchers.get(Ho),Q5=xv(void 0,KL?KL.data:void 0);b.fetchers.set(Ho,Q5),rQ(Ho),qI.controller&&Y.set(Ho,qI.controller)}),NA({fetchers:new Map(b.fetchers)});let $P=()=>De.forEach(qI=>rQ(qI.key));GA.signal.addEventListener("abort",$P);let{loaderResults:Ac,fetcherResults:WA}=await _E(b,cE,Zv,De,jo);if(GA.signal.aborted)return;GA.signal.removeEventListener("abort",$P),IA.delete(G),Y.delete(G),De.forEach(qI=>Y.delete(qI.key));let ZI=lc(Ac);if(ZI)return JC(jo,ZI.result,!1,{preventScrollReset:sA});if(ZI=lc(WA),ZI)return gA.add(ZI.key),JC(jo,ZI.result,!1,{preventScrollReset:sA});let{loaderData:fo,errors:Kv}=E2(b,cE,Ac,void 0,De,WA,H);if(b.fetchers.has(G)){let qI=ti(zA.data);b.fetchers.set(G,qI)}fP(ZB),b.navigation.state==="loading"&&ZB>q?(kA(y,"Expected pending action"),L&&L.abort(),MI(b.navigation.location,{matches:cE,loaderData:fo,errors:Kv,fetchers:new Map(b.fetchers)})):(NA({errors:Kv,loaderData:i2(b.loaderData,fo,cE,Kv),fetchers:new Map(b.fetchers)}),K=!1)}async function qE(G,T,k,O,QA,cA,hA,sA,rA){let tA=b.fetchers.get(G);vQ(G,xv(rA,tA?tA.data:void 0),{flushSync:hA});let PA=new AbortController,GA=Oo(A.history,k,PA.signal);if(cA){let zA=await Xo(QA,new URL(GA.url).pathname,GA.signal,G);if(zA.type==="aborted")return;if(zA.type==="error"){WC(G,T,zA.error,{flushSync:hA});return}else if(zA.matches)QA=zA.matches,O=Rr(QA,k);else{WC(G,T,hC(404,{pathname:k}),{flushSync:hA});return}}Y.set(G,PA);let pA=N,BI=(await sQ("loader",b,GA,[O],QA,G))[O.route.id];if(Ri(BI)&&(BI=await SG(BI,GA.signal,!0)||BI),Y.get(G)===PA&&Y.delete(G),!GA.signal.aborted){if(nA.has(G)){vQ(G,ti(void 0));return}if(Xe(BI))if(q>pA){vQ(G,ti(void 0));return}else{gA.add(G),await JC(GA,BI,!1,{preventScrollReset:sA});return}if(XC(BI)){WC(G,T,BI.error);return}kA(!Ri(BI),"Unhandled fetcher deferred data"),vQ(G,ti(BI.data))}}async function JC(G,T,k,O){let{submission:QA,fetcherSubmission:cA,preventScrollReset:hA,replace:sA}=O===void 0?{}:O;T.response.headers.has("X-Remix-Revalidate")&&(K=!0);let rA=T.response.headers.get("Location");kA(rA,"Expected a Location header on the redirect Response"),rA=Q2(rA,new URL(G.url),e);let tA=Wa(b.location,rA,{_isRedirect:!0});if(g){let zA=!1;if(T.response.headers.has("X-Remix-Reload-Document"))zA=!0;else if(LG.test(rA)){const NI=A.history.createURL(rA);zA=NI.origin!==I.location.origin||sP(NI.pathname,e)==null}if(zA){sA?I.location.replace(rA):I.location.assign(rA);return}}L=null;let PA=sA===!0||T.response.headers.has("X-Remix-Replace")?_I.Replace:_I.Push,{formMethod:GA,formAction:pA,formEncType:bg}=b.navigation;!QA&&!cA&&GA&&pA&&bg&&(QA=s2(b.navigation));let BI=QA||cA;if(e4.has(T.response.status)&&BI&&rB(BI.formMethod))await ug(PA,tA,{submission:yI({},BI,{formAction:rA}),preventScrollReset:hA||S,enableViewTransition:k?V:void 0});else{let zA=Vd(tA,QA);await ug(PA,tA,{overrideNavigation:zA,fetcherSubmission:cA,preventScrollReset:hA||S,enableViewTransition:k?V:void 0})}}async function sQ(G,T,k,O,QA,cA){let hA,sA={};try{hA=await c4(o,G,T,k,O,QA,cA,B,Q)}catch(rA){return O.forEach(tA=>{sA[tA.route.id]={type:qA.error,error:rA}}),sA}for(let[rA,tA]of Object.entries(hA))if(u4(tA)){let PA=tA.result;sA[rA]={type:qA.redirect,response:d4(PA,k,rA,QA,e,s.v7_relativeSplatPath)}}else sA[rA]=await l4(tA);return sA}async function _E(G,T,k,O,QA){let cA=G.matches,hA=sQ("loader",G,QA,k,T,null),sA=Promise.all(O.map(async PA=>{if(PA.matches&&PA.match&&PA.controller){let pA=(await sQ("loader",G,Oo(A.history,PA.path,PA.controller.signal),[PA.match],PA.matches,PA.key))[PA.match.route.id];return{[PA.key]:pA}}else return Promise.resolve({[PA.key]:{type:qA.error,error:hC(404,{pathname:PA.path})}})})),rA=await hA,tA=(await sA).reduce((PA,GA)=>Object.assign(PA,GA),{});return await Promise.all([w4(T,rA,QA.signal,cA,G.loaderData),m4(T,tA,O)]),{loaderResults:rA,fetcherResults:tA}}function Og(){K=!0,p.push(...pv()),vA.forEach((G,T)=>{Y.has(T)&&J.add(T),rQ(T)})}function vQ(G,T,k){k===void 0&&(k={}),b.fetchers.set(G,T),NA({fetchers:new Map(b.fetchers)},{flushSync:(k&&k.flushSync)===!0})}function WC(G,T,k,O){O===void 0&&(O={});let QA=Ke(b.matches,T);PE(G),NA({errors:{[QA.route.id]:k},fetchers:new Map(b.fetchers)},{flushSync:(O&&O.flushSync)===!0})}function Vo(G){return bA.set(G,(bA.get(G)||0)+1),nA.has(G)&&nA.delete(G),b.fetchers.get(G)||o4}function PE(G){let T=b.fetchers.get(G);Y.has(G)&&!(T&&T.state==="loading"&&IA.has(G))&&rQ(G),vA.delete(G),IA.delete(G),gA.delete(G),s.v7_fetcherPersist&&nA.delete(G),J.delete(G),b.fetchers.delete(G)}function Fv(G){let T=(bA.get(G)||0)-1;T<=0?(bA.delete(G),nA.add(G),s.v7_fetcherPersist||PE(G)):bA.set(G,T),NA({fetchers:new Map(b.fetchers)})}function rQ(G){let T=Y.get(G);T&&(T.abort(),Y.delete(G))}function $E(G){for(let T of G){let k=Vo(T),O=ti(k.data);b.fetchers.set(T,O)}}function IB(){let G=[],T=!1;for(let k of gA){let O=b.fetchers.get(k);kA(O,"Expected fetcher: "+k),O.state==="loading"&&(gA.delete(k),G.push(k),T=!0)}return $E(G),T}function fP(G){let T=[];for(let[k,O]of IA)if(O0}function HP(G,T){let k=b.blockers.get(G)||Hv;return CA.get(G)!==T&&CA.set(G,T),k}function xP(G){b.blockers.delete(G),CA.delete(G)}function zo(G,T){let k=b.blockers.get(G)||Hv;kA(k.state==="unblocked"&&T.state==="blocked"||k.state==="blocked"&&T.state==="blocked"||k.state==="blocked"&&T.state==="proceeding"||k.state==="blocked"&&T.state==="unblocked"||k.state==="proceeding"&&T.state==="unblocked","Invalid blocker state transition: "+k.state+" -> "+T.state);let O=new Map(b.blockers);O.set(G,T),NA({blockers:O})}function Yv(G){let{currentLocation:T,nextLocation:k,historyAction:O}=G;if(CA.size===0)return;CA.size>1&&Ns(!1,"A router only supports one blocker at a time");let QA=Array.from(CA.entries()),[cA,hA]=QA[QA.length-1],sA=b.blockers.get(cA);if(!(sA&&sA.state==="proceeding")&&hA({currentLocation:T,nextLocation:k,historyAction:O}))return cA}function kv(G){let T=hC(404,{pathname:G}),k=i||E,{matches:O,route:QA}=o2(k);return pv(),{notFoundMatches:O,route:QA,error:T}}function pv(G){let T=[];return H.forEach((k,O)=>{(!G||G(O))&&(k.cancel(),T.push(O),H.delete(O))}),T}function td(G,T,k){if(n=G,c=T,a=k||null,!d&&b.navigation===Wd){d=!0;let O=qP(b.location,b.matches);O!=null&&NA({restoreScrollPosition:O})}return()=>{n=null,c=null,a=null}}function OP(G,T){return a&&a(G,T.map(O=>JH(O,b.loaderData)))||G.key}function sd(G,T){if(n&&c){let k=OP(G,T);n[k]=c()}}function qP(G,T){if(n){let k=OP(G,T),O=n[k];if(typeof O=="number")return O}return null}function Mo(G,T,k){if(t)if(G){if(Object.keys(G[0].params).length>0)return{active:!0,matches:Kn(T,k,e,!0)}}else return{active:!0,matches:Kn(T,k,e,!0)||[]};return{active:!1,matches:null}}async function Xo(G,T,k,O){if(!t)return{type:"success",matches:G};let QA=G;for(;;){let cA=i==null,hA=i||E,sA=B;try{await t({signal:k,path:T,matches:QA,fetcherKey:O,patch:(PA,GA)=>{k.aborted||C2(PA,GA,hA,sA,Q)}})}catch(PA){return{type:"error",error:PA,partialMatches:QA}}finally{cA&&!k.aborted&&(E=[...E])}if(k.aborted)return{type:"aborted"};let rA=Ze(hA,T,e);if(rA)return{type:"success",matches:rA};let tA=Kn(hA,T,e,!0);if(!tA||QA.length===tA.length&&QA.every((PA,GA)=>PA.route.id===tA[GA].route.id))return{type:"success",matches:null};QA=tA}}function _P(G){B={},i=Ol(G,Q,void 0,B)}function vd(G,T){let k=i==null;C2(G,T,i||E,B,Q),k&&(E=[...E],NA({}))}return w={get basename(){return e},get future(){return s},get state(){return b},get routes(){return E},get window(){return I},initialize:UA,subscribe:rg,enableScrollRestoration:td,navigate:KC,fetch:aC,revalidate:YB,createHref:G=>A.history.createHref(G),encodeLocation:G=>A.history.encodeLocation(G),getFetcher:Vo,deleteFetcher:Fv,dispose:xA,getBlocker:HP,deleteBlocker:xP,patchRoutes:vd,_internalFetchControllers:Y,_internalActiveDeferreds:H,_internalSetRoutes:_P},w}function v4(A){return A!=null&&("formData"in A&&A.formData!=null||"body"in A&&A.body!==void 0)}function Ky(A,I,g,C,Q,B,E,i){let e,o;if(E){e=[];for(let s of I)if(e.push(s),s.route.id===E){o=s;break}}else e=I,o=I[I.length-1];let t=R8(Q||".",G8(e,B),sP(A.pathname,g)||A.pathname,i==="path");if(Q==null&&(t.search=A.search,t.hash=A.hash),(Q==null||Q===""||Q===".")&&o){let s=TG(t.search);if(o.route.index&&!s)t.search=t.search?t.search.replace(/^\?/,"?index&"):"?index";else if(!o.route.index&&s){let v=new URLSearchParams(t.search),r=v.getAll("index");v.delete("index"),r.filter(a=>a).forEach(a=>v.append("index",a));let n=v.toString();t.search=n?"?"+n:""}}return C&&g!=="/"&&(t.pathname=t.pathname==="/"?g:ji([g,t.pathname])),tP(t)}function $S(A,I,g,C){if(!C||!v4(C))return{path:g};if(C.formMethod&&!y4(C.formMethod))return{path:g,error:hC(405,{method:C.formMethod})};let Q=()=>({path:g,error:hC(400,{type:"invalid-body"})}),B=C.formMethod||"get",E=A?B.toUpperCase():B.toLowerCase(),i=F8(g);if(C.body!==void 0){if(C.formEncType==="text/plain"){if(!rB(E))return Q();let v=typeof C.body=="string"?C.body:C.body instanceof FormData||C.body instanceof URLSearchParams?Array.from(C.body.entries()).reduce((r,n)=>{let[a,c]=n;return""+r+a+"="+c+` `},""):String(C.body);return{path:g,submission:{formMethod:E,formAction:i,formEncType:C.formEncType,formData:void 0,json:void 0,text:v}}}else if(C.formEncType==="application/json"){if(!rB(E))return Q();try{let v=typeof C.body=="string"?JSON.parse(C.body):C.body;return{path:g,submission:{formMethod:E,formAction:i,formEncType:C.formEncType,formData:void 0,json:v,text:void 0}}}catch{return Q()}}}kA(typeof FormData=="function","FormData is not available in this environment");let e,o;if(C.formData)e=Wy(C.formData),o=C.formData;else if(C.body instanceof FormData)e=Wy(C.body),o=C.body;else if(C.body instanceof URLSearchParams)e=C.body,o=B2(e);else if(C.body==null)e=new URLSearchParams,o=new FormData;else try{e=new URLSearchParams(C.body),o=B2(e)}catch{return Q()}let t={formMethod:E,formAction:i,formEncType:C&&C.formEncType||"application/x-www-form-urlencoded",formData:o,json:void 0,text:void 0};if(rB(t.formMethod))return{path:g,submission:t};let s=ie(g);return I&&s.search&&TG(s.search)&&e.append("index",""),s.search="?"+e,{path:tP(s),submission:t}}function A2(A,I,g){g===void 0&&(g=!1);let C=A.findIndex(Q=>Q.route.id===I);return C>=0?A.slice(0,g?C+1:C):A}function I2(A,I,g,C,Q,B,E,i,e,o,t,s,v,r,n,a){let c=a?XC(a[1])?a[1].error:a[1].data:void 0,d=A.createURL(I.location),l=A.createURL(Q),h=g;B&&I.errors?h=A2(g,Object.keys(I.errors)[0],!0):a&&XC(a[1])&&(h=A2(g,a[0]));let D=a?a[1].statusCode:void 0,u=E&&D&&D>=400,w=h.filter((y,S)=>{let{route:L}=y;if(L.lazy)return!0;if(L.loader==null)return!1;if(B)return Jy(L,I.loaderData,I.errors);if(r4(I.loaderData,I.matches[S],y)||e.some(EA=>EA===y.route.id))return!0;let V=I.matches[S],z=y;return g2(y,yI({currentUrl:d,currentParams:V.params,nextUrl:l,nextParams:z.params},C,{actionResult:c,actionStatus:D,defaultShouldRevalidate:u?!1:i||d.pathname+d.search===l.pathname+l.search||d.search!==l.search||T8(V,z)}))}),b=[];return s.forEach((y,S)=>{if(B||!g.some(eA=>eA.route.id===y.routeId)||t.has(S))return;let L=Ze(r,y.path,n);if(!L){b.push({key:S,routeId:y.routeId,path:y.path,matches:null,match:null,controller:null});return}let V=I.fetchers.get(S),z=Rr(L,y.path),EA=!1;v.has(S)?EA=!1:o.has(S)?(o.delete(S),EA=!0):V&&V.state!=="idle"&&V.data===void 0?EA=i:EA=g2(z,yI({currentUrl:d,currentParams:I.matches[I.matches.length-1].params,nextUrl:l,nextParams:g[g.length-1].params},C,{actionResult:c,actionStatus:D,defaultShouldRevalidate:u?!1:i})),EA&&b.push({key:S,routeId:y.routeId,path:y.path,matches:L,match:z,controller:new AbortController})}),[w,b]}function Jy(A,I,g){if(A.lazy)return!0;if(!A.loader)return!1;let C=I!=null&&I[A.id]!==void 0,Q=g!=null&&g[A.id]!==void 0;return!C&&Q?!1:typeof A.loader=="function"&&A.loader.hydrate===!0?!0:!C&&!Q}function r4(A,I,g){let C=!I||g.route.id!==I.route.id,Q=A[g.route.id]===void 0;return C||Q}function T8(A,I){let g=A.route.path;return A.pathname!==I.pathname||g!=null&&g.endsWith("*")&&A.params["*"]!==I.params["*"]}function g2(A,I){if(A.route.shouldRevalidate){let g=A.route.shouldRevalidate(I);if(typeof g=="boolean")return g}return I.defaultShouldRevalidate}function C2(A,I,g,C,Q){var B;let E;if(A){let o=C[A];kA(o,"No route found to patch children into: routeId = "+A),o.children||(o.children=[]),E=o.children}else E=g;let i=I.filter(o=>!E.some(t=>U8(o,t))),e=Ol(i,Q,[A||"_","patch",String(((B=E)==null?void 0:B.length)||"0")],C);E.push(...e)}function U8(A,I){return"id"in A&&"id"in I&&A.id===I.id?!0:A.index===I.index&&A.path===I.path&&A.caseSensitive===I.caseSensitive?(!A.children||A.children.length===0)&&(!I.children||I.children.length===0)?!0:A.children.every((g,C)=>{var Q;return(Q=I.children)==null?void 0:Q.some(B=>U8(g,B))}):!1}async function a4(A,I,g){if(!A.lazy)return;let C=await A.lazy();if(!A.lazy)return;let Q=g[A.id];kA(Q,"No route found in manifest");let B={};for(let E in C){let e=Q[E]!==void 0&&E!=="hasErrorBoundary";Ns(!e,'Route "'+Q.id+'" has a static property "'+E+'" defined but its lazy function is also returning a value for this property. '+('The lazy route property "'+E+'" will be ignored.')),!e&&!ZH.has(E)&&(B[E]=C[E])}Object.assign(Q,B),Object.assign(Q,yI({},I(Q),{lazy:void 0}))}async function P4(A){let{matches:I}=A,g=I.filter(Q=>Q.shouldLoad);return(await Promise.all(g.map(Q=>Q.resolve()))).reduce((Q,B,E)=>Object.assign(Q,{[g[E].route.id]:B}),{})}async function c4(A,I,g,C,Q,B,E,i,e,o){let t=B.map(r=>r.route.lazy?a4(r.route,e,i):void 0),s=B.map((r,n)=>{let a=t[n],c=Q.some(l=>l.route.id===r.route.id);return yI({},r,{shouldLoad:c,resolve:async l=>(l&&C.method==="GET"&&(r.route.lazy||r.route.loader)&&(c=!0),c?n4(I,C,r,a,l,o):Promise.resolve({type:qA.data,result:void 0}))})}),v=await A({matches:s,request:C,params:B[0].params,fetcherKey:E,context:o});try{await Promise.all(t)}catch{}return v}async function n4(A,I,g,C,Q,B){let E,i,e=o=>{let t,s=new Promise((n,a)=>t=a);i=()=>t(),I.signal.addEventListener("abort",i);let v=n=>typeof o!="function"?Promise.reject(new Error("You cannot call the handler for a route which defines a boolean "+('"'+A+'" [routeId: '+g.route.id+"]"))):o({request:I,params:g.params,context:B},...n!==void 0?[n]:[]),r=(async()=>{try{return{type:"data",result:await(Q?Q(a=>v(a)):v())}}catch(n){return{type:"error",result:n}}})();return Promise.race([r,s])};try{let o=g.route[A];if(C)if(o){let t,[s]=await Promise.all([e(o).catch(v=>{t=v}),C]);if(t!==void 0)throw t;E=s}else if(await C,o=g.route[A],o)E=await e(o);else if(A==="action"){let t=new URL(I.url),s=t.pathname+t.search;throw hC(405,{method:I.method,pathname:s,routeId:g.route.id})}else return{type:qA.data,result:void 0};else if(o)E=await e(o);else{let t=new URL(I.url),s=t.pathname+t.search;throw hC(404,{pathname:s})}kA(E.result!==void 0,"You defined "+(A==="action"?"an action":"a loader")+" for route "+('"'+g.route.id+"\" but didn't return anything from your `"+A+"` ")+"function. Please return a value or `null`.")}catch(o){return{type:qA.error,result:o}}finally{i&&I.signal.removeEventListener("abort",i)}return E}async function l4(A){let{result:I,type:g}=A;if(Y8(I)){let s;try{let v=I.headers.get("Content-Type");v&&/\bapplication\/json\b/.test(v)?I.body==null?s=null:s=await I.json():s=await I.text()}catch(v){return{type:qA.error,error:v}}return g===qA.error?{type:qA.error,error:new ql(I.status,I.statusText,s),statusCode:I.status,headers:I.headers}:{type:qA.data,data:s,statusCode:I.status,headers:I.headers}}if(g===qA.error){if(t2(I)){var C,Q;if(I.data instanceof Error){var B,E;return{type:qA.error,error:I.data,statusCode:(B=I.init)==null?void 0:B.status,headers:(E=I.init)!=null&&E.headers?new Headers(I.init.headers):void 0}}return{type:qA.error,error:new ql(((C=I.init)==null?void 0:C.status)||500,void 0,I.data),statusCode:Va(I)?I.status:void 0,headers:(Q=I.init)!=null&&Q.headers?new Headers(I.init.headers):void 0}}return{type:qA.error,error:I,statusCode:Va(I)?I.status:void 0}}if(b4(I)){var i,e;return{type:qA.deferred,deferredData:I,statusCode:(i=I.init)==null?void 0:i.status,headers:((e=I.init)==null?void 0:e.headers)&&new Headers(I.init.headers)}}if(t2(I)){var o,t;return{type:qA.data,data:I.data,statusCode:(o=I.init)==null?void 0:o.status,headers:(t=I.init)!=null&&t.headers?new Headers(I.init.headers):void 0}}return{type:qA.data,data:I}}function d4(A,I,g,C,Q,B){let E=A.headers.get("Location");if(kA(E,"Redirects returned/thrown from loaders/actions must have a Location header"),!LG.test(E)){let i=C.slice(0,C.findIndex(e=>e.route.id===g)+1);E=Ky(new URL(I.url),i,Q,!0,E,B),A.headers.set("Location",E)}return A}function Q2(A,I,g){if(LG.test(A)){let C=A,Q=C.startsWith("//")?new URL(I.protocol+C):new URL(C),B=sP(Q.pathname,g)!=null;if(Q.origin===I.origin&&B)return Q.pathname+Q.search+Q.hash}return A}function Oo(A,I,g,C){let Q=A.createURL(F8(I)).toString(),B={signal:g};if(C&&rB(C.formMethod)){let{formMethod:E,formEncType:i}=C;B.method=E.toUpperCase(),i==="application/json"?(B.headers=new Headers({"Content-Type":i}),B.body=JSON.stringify(C.json)):i==="text/plain"?B.body=C.text:i==="application/x-www-form-urlencoded"&&C.formData?B.body=Wy(C.formData):B.body=C.formData}return new Request(Q,B)}function Wy(A){let I=new URLSearchParams;for(let[g,C]of A.entries())I.append(g,typeof C=="string"?C:C.name);return I}function B2(A){let I=new FormData;for(let[g,C]of A.entries())I.append(g,C);return I}function h4(A,I,g,C,Q){let B={},E=null,i,e=!1,o={},t=g&&XC(g[1])?g[1].error:void 0;return A.forEach(s=>{if(!(s.route.id in I))return;let v=s.route.id,r=I[v];if(kA(!Xe(r),"Cannot handle redirect results in processLoaderData"),XC(r)){let n=r.error;t!==void 0&&(n=t,t=void 0),E=E||{};{let a=Ke(A,v);E[a.route.id]==null&&(E[a.route.id]=n)}B[v]=void 0,e||(e=!0,i=Va(r.error)?r.error.status:500),r.headers&&(o[v]=r.headers)}else Ri(r)?(C.set(v,r.deferredData),B[v]=r.deferredData.data,r.statusCode!=null&&r.statusCode!==200&&!e&&(i=r.statusCode),r.headers&&(o[v]=r.headers)):(B[v]=r.data,r.statusCode&&r.statusCode!==200&&!e&&(i=r.statusCode),r.headers&&(o[v]=r.headers))}),t!==void 0&&g&&(E={[g[0]]:t},B[g[0]]=void 0),{loaderData:B,errors:E,statusCode:i||200,loaderHeaders:o}}function E2(A,I,g,C,Q,B,E){let{loaderData:i,errors:e}=h4(I,g,C,E);return Q.forEach(o=>{let{key:t,match:s,controller:v}=o,r=B[t];if(kA(r,"Did not find corresponding fetcher result"),!(v&&v.signal.aborted))if(XC(r)){let n=Ke(A.matches,s==null?void 0:s.route.id);e&&e[n.route.id]||(e=yI({},e,{[n.route.id]:r.error})),A.fetchers.delete(t)}else if(Xe(r))kA(!1,"Unhandled fetcher revalidation redirect");else if(Ri(r))kA(!1,"Unhandled fetcher deferred data");else{let n=ti(r.data);A.fetchers.set(t,n)}}),{loaderData:i,errors:e}}function i2(A,I,g,C){let Q=yI({},I);for(let B of g){let E=B.route.id;if(I.hasOwnProperty(E)?I[E]!==void 0&&(Q[E]=I[E]):A[E]!==void 0&&B.route.loader&&(Q[E]=A[E]),C&&C.hasOwnProperty(E))break}return Q}function e2(A){return A?XC(A[1])?{actionData:{}}:{actionData:{[A[0]]:A[1].data}}:{}}function Ke(A,I){return(I?A.slice(0,A.findIndex(C=>C.route.id===I)+1):[...A]).reverse().find(C=>C.route.hasErrorBoundary===!0)||A[0]}function o2(A){let I=A.length===1?A[0]:A.find(g=>g.index||!g.path||g.path==="/")||{id:"__shim-error-route__"};return{matches:[{params:{},pathname:"",pathnameBase:"",route:I}],route:I}}function hC(A,I){let{pathname:g,routeId:C,method:Q,type:B,message:E}=I===void 0?{}:I,i="Unknown Server Error",e="Unknown @remix-run/router error";return A===400?(i="Bad Request",Q&&g&&C?e="You made a "+Q+' request to "'+g+'" but '+('did not provide a `loader` for route "'+C+'", ')+"so there is no way to handle the request.":B==="defer-action"?e="defer() is not supported in actions":B==="invalid-body"&&(e="Unable to encode submission body")):A===403?(i="Forbidden",e='Route "'+C+'" does not match URL "'+g+'"'):A===404?(i="Not Found",e='No route matches URL "'+g+'"'):A===405&&(i="Method Not Allowed",Q&&g&&C?e="You made a "+Q.toUpperCase()+' request to "'+g+'" but '+('did not provide an `action` for route "'+C+'", ')+"so there is no way to handle the request.":Q&&(e='Invalid request method "'+Q.toUpperCase()+'"')),new ql(A||500,i,new Error(e),!0)}function lc(A){let I=Object.entries(A);for(let g=I.length-1;g>=0;g--){let[C,Q]=I[g];if(Xe(Q))return{key:C,result:Q}}}function F8(A){let I=typeof A=="string"?ie(A):A;return tP(yI({},I,{hash:""}))}function D4(A,I){return A.pathname!==I.pathname||A.search!==I.search?!1:A.hash===""?I.hash!=="":A.hash===I.hash?!0:I.hash!==""}function u4(A){return Y8(A.result)&&i4.has(A.result.status)}function Ri(A){return A.type===qA.deferred}function XC(A){return A.type===qA.error}function Xe(A){return(A&&A.type)===qA.redirect}function t2(A){return typeof A=="object"&&A!=null&&"type"in A&&"data"in A&&"init"in A&&A.type==="DataWithResponseInit"}function b4(A){let I=A;return I&&typeof I=="object"&&typeof I.data=="object"&&typeof I.subscribe=="function"&&typeof I.cancel=="function"&&typeof I.resolveData=="function"}function Y8(A){return A!=null&&typeof A.status=="number"&&typeof A.statusText=="string"&&typeof A.headers=="object"&&typeof A.body<"u"}function y4(A){return E4.has(A.toLowerCase())}function rB(A){return Q4.has(A.toLowerCase())}async function w4(A,I,g,C,Q){let B=Object.entries(I);for(let E=0;E(v==null?void 0:v.route.id)===i);if(!o)continue;let t=C.find(v=>v.route.id===o.route.id),s=t!=null&&!T8(t,o)&&(Q&&Q[o.route.id])!==void 0;Ri(e)&&s&&await SG(e,g,!1).then(v=>{v&&(I[i]=v)})}}async function m4(A,I,g){for(let C=0;C(o==null?void 0:o.route.id)===B)&&Ri(i)&&(kA(E,"Expected an AbortController for revalidating fetcher deferred result"),await SG(i,E.signal,!0).then(o=>{o&&(I[Q]=o)}))}}async function SG(A,I,g){if(g===void 0&&(g=!1),!await A.deferredData.resolveData(I)){if(g)try{return{type:qA.data,data:A.deferredData.unwrappedData}}catch(Q){return{type:qA.error,error:Q}}return{type:qA.data,data:A.deferredData.data}}}function TG(A){return new URLSearchParams(A).getAll("index").some(I=>I==="")}function Rr(A,I){let g=typeof I=="string"?ie(I).search:I.search;if(A[A.length-1].route.index&&TG(g||""))return A[A.length-1];let C=m8(A);return C[C.length-1]}function s2(A){let{formMethod:I,formAction:g,formEncType:C,text:Q,formData:B,json:E}=A;if(!(!I||!g||!C)){if(Q!=null)return{formMethod:I,formAction:g,formEncType:C,formData:void 0,json:void 0,text:Q};if(B!=null)return{formMethod:I,formAction:g,formEncType:C,formData:B,json:void 0,text:void 0};if(E!==void 0)return{formMethod:I,formAction:g,formEncType:C,formData:void 0,json:E,text:void 0}}}function Vd(A,I){return I?{state:"loading",location:A,formMethod:I.formMethod,formAction:I.formAction,formEncType:I.formEncType,formData:I.formData,json:I.json,text:I.text}:{state:"loading",location:A,formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0}}function G4(A,I){return{state:"submitting",location:A,formMethod:I.formMethod,formAction:I.formAction,formEncType:I.formEncType,formData:I.formData,json:I.json,text:I.text}}function xv(A,I){return A?{state:"loading",formMethod:A.formMethod,formAction:A.formAction,formEncType:A.formEncType,formData:A.formData,json:A.json,text:A.text,data:I}:{state:"loading",formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0,data:I}}function R4(A,I){return{state:"submitting",formMethod:A.formMethod,formAction:A.formAction,formEncType:A.formEncType,formData:A.formData,json:A.json,text:A.text,data:I?I.data:void 0}}function ti(A){return{state:"idle",formMethod:void 0,formAction:void 0,formEncType:void 0,formData:void 0,json:void 0,text:void 0,data:A}}function L4(A,I){try{let g=A.sessionStorage.getItem(S8);if(g){let C=JSON.parse(g);for(let[Q,B]of Object.entries(C||{}))B&&Array.isArray(B)&&I.set(Q,new Set(B||[]))}}catch{}}function S4(A,I){if(I.size>0){let g={};for(let[C,Q]of I)g[C]=[...Q];try{A.sessionStorage.setItem(S8,JSON.stringify(g))}catch(C){Ns(!1,"Failed to save applied view transitions in sessionStorage ("+C+").")}}}/** * React Router v6.30.0 * * Copyright (c) Remix Software Inc. * * This source code is licensed under the MIT license found in the * LICENSE.md file in the root directory of this source tree. * * @license MIT */function _l(){return _l=Object.assign?Object.assign.bind():function(A){for(var I=1;I{i.current=!0}),AA.useCallback(function(o,t){if(t===void 0&&(t={}),!i.current)return;if(typeof o=="number"){C.go(o);return}let s=R8(o,JSON.parse(E),B,t.relative==="path");A==null&&I!=="/"&&(s.pathname=s.pathname==="/"?I:ji([I,s.pathname])),(t.replace?C.replace:C.push)(s,t.state,t)},[I,C,E,B,A])}const F4=AA.createContext(null);function Y4(A){let I=AA.useContext(So).outlet;return I&&AA.createElement(F4.Provider,{value:A},I)}function k4(A,I,g,C){r0()||kA(!1);let{navigator:Q,static:B}=AA.useContext(v0),{matches:E}=AA.useContext(So),i=E[E.length-1],e=i?i.params:{};i&&i.pathname;let o=i?i.pathnameBase:"/";i&&i.route;let t=FG(),s;s=t;let v=s.pathname||"/",r=v;if(o!=="/"){let c=o.replace(/^\//,"").split("/");r="/"+v.replace(/^\//,"").split("/").slice(c.length).join("/")}let n=!B&&g&&g.matches&&g.matches.length>0?g.matches:Ze(A,{pathname:r});return J4(n&&n.map(c=>Object.assign({},c,{params:Object.assign({},e,c.params),pathname:ji([o,Q.encodeLocation?Q.encodeLocation(c.pathname).pathname:c.pathname]),pathnameBase:c.pathnameBase==="/"?o:ji([o,Q.encodeLocation?Q.encodeLocation(c.pathnameBase).pathname:c.pathnameBase])})),E,g,C)}function p4(){let A=M4(),I=Va(A)?A.status+" "+A.statusText:A instanceof Error?A.message:JSON.stringify(A),g=A instanceof Error?A.stack:null,Q={padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"};return AA.createElement(AA.Fragment,null,AA.createElement("h2",null,"Unexpected Application Error!"),AA.createElement("h3",{style:{fontStyle:"italic"}},I),g?AA.createElement("pre",{style:Q},g):null,null)}const N4=AA.createElement(p4,null);class Z4 extends AA.Component{constructor(I){super(I),this.state={location:I.location,revalidation:I.revalidation,error:I.error}}static getDerivedStateFromError(I){return{error:I}}static getDerivedStateFromProps(I,g){return g.location!==I.location||g.revalidation!=="idle"&&I.revalidation==="idle"?{error:I.error,location:I.location,revalidation:I.revalidation}:{error:I.error!==void 0?I.error:g.error,location:g.location,revalidation:I.revalidation||g.revalidation}}componentDidCatch(I,g){console.error("React Router caught the following error during render",I,g)}render(){return this.state.error!==void 0?AA.createElement(So.Provider,{value:this.props.routeContext},AA.createElement(p8.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function K4(A){let{routeContext:I,match:g,children:C}=A,Q=AA.useContext(s0);return Q&&Q.static&&Q.staticContext&&(g.route.errorElement||g.route.ErrorBoundary)&&(Q.staticContext._deepestRenderedBoundaryId=g.route.id),AA.createElement(So.Provider,{value:I},C)}function J4(A,I,g,C){var Q;if(I===void 0&&(I=[]),g===void 0&&(g=null),C===void 0&&(C=null),A==null){var B;if(!g)return null;if(g.errors)A=g.matches;else if((B=C)!=null&&B.v7_partialHydration&&I.length===0&&!g.initialized&&g.matches.length>0)A=g.matches;else return null}let E=A,i=(Q=g)==null?void 0:Q.errors;if(i!=null){let t=E.findIndex(s=>s.route.id&&(i==null?void 0:i[s.route.id])!==void 0);t>=0||kA(!1),E=E.slice(0,Math.min(E.length,t+1))}let e=!1,o=-1;if(g&&C&&C.v7_partialHydration)for(let t=0;t=0?E=E.slice(0,o+1):E=[E[0]];break}}}return E.reduceRight((t,s,v)=>{let r,n=!1,a=null,c=null;g&&(r=i&&s.route.id?i[s.route.id]:void 0,a=s.route.errorElement||N4,e&&(o<0&&v===0?(j4("route-fallback"),n=!0,c=null):o===v&&(n=!0,c=s.route.hydrateFallbackElement||null)));let d=I.concat(E.slice(0,v+1)),l=()=>{let h;return r?h=a:n?h=c:s.route.Component?h=AA.createElement(s.route.Component,null):s.route.element?h=s.route.element:h=t,AA.createElement(K4,{match:s,routeContext:{outlet:t,matches:d,isDataRoute:g!=null},children:h})};return g&&(s.route.ErrorBoundary||s.route.errorElement||v===0)?AA.createElement(Z4,{location:g.location,revalidation:g.revalidation,component:a,error:r,children:l(),routeContext:{outlet:null,matches:d,isDataRoute:!0}}):l()},null)}var Z8=function(A){return A.UseBlocker="useBlocker",A.UseRevalidator="useRevalidator",A.UseNavigateStable="useNavigate",A}(Z8||{}),K8=function(A){return A.UseBlocker="useBlocker",A.UseLoaderData="useLoaderData",A.UseActionData="useActionData",A.UseRouteError="useRouteError",A.UseNavigation="useNavigation",A.UseRouteLoaderData="useRouteLoaderData",A.UseMatches="useMatches",A.UseRevalidator="useRevalidator",A.UseNavigateStable="useNavigate",A.UseRouteId="useRouteId",A}(K8||{});function W4(A){let I=AA.useContext(s0);return I||kA(!1),I}function V4(A){let I=AA.useContext(k8);return I||kA(!1),I}function z4(A){let I=AA.useContext(So);return I||kA(!1),I}function J8(A){let I=z4(),g=I.matches[I.matches.length-1];return g.route.id||kA(!1),g.route.id}function M4(){var A;let I=AA.useContext(p8),g=V4(),C=J8();return I!==void 0?I:(A=g.errors)==null?void 0:A[C]}function X4(){let{router:A}=W4(Z8.UseNavigateStable),I=J8(K8.UseNavigateStable),g=AA.useRef(!1);return N8(()=>{g.current=!0}),AA.useCallback(function(Q,B){B===void 0&&(B={}),g.current&&(typeof Q=="number"?A.navigate(Q):A.navigate(Q,_l({fromRouteId:I},B)))},[A,I])}const v2={};function j4(A,I,g){v2[A]||(v2[A]=!0)}function f4(A,I){A==null||A.v7_startTransition,(A==null?void 0:A.v7_relativeSplatPath)===void 0&&(!I||I.v7_relativeSplatPath),I&&(I.v7_fetcherPersist,I.v7_normalizeFormMethod,I.v7_partialHydration,I.v7_skipActionErrorRevalidation)}function QXA(A){return Y4(A.context)}function H4(A){let{basename:I="/",children:g=null,location:C,navigationType:Q=_I.Pop,navigator:B,static:E=!1,future:i}=A;r0()&&kA(!1);let e=I.replace(/^\/*/,"/"),o=AA.useMemo(()=>({basename:e,navigator:B,static:E,future:_l({v7_relativeSplatPath:!1},i)}),[e,i,B,E]);typeof C=="string"&&(C=ie(C));let{pathname:t="/",search:s="",hash:v="",state:r=null,key:n="default"}=C,a=AA.useMemo(()=>{let c=sP(t,e);return c==null?null:{location:{pathname:c,search:s,hash:v,state:r,key:n},navigationType:Q}},[e,t,s,v,r,n,Q]);return a==null?null:AA.createElement(v0.Provider,{value:o},AA.createElement(UG.Provider,{children:g,value:a}))}new Promise(()=>{});function x4(A){let I={hasErrorBoundary:A.ErrorBoundary!=null||A.errorElement!=null};return A.Component&&Object.assign(I,{element:AA.createElement(A.Component),Component:void 0}),A.HydrateFallback&&Object.assign(I,{hydrateFallbackElement:AA.createElement(A.HydrateFallback),HydrateFallback:void 0}),A.ErrorBoundary&&Object.assign(I,{errorElement:AA.createElement(A.ErrorBoundary),ErrorBoundary:void 0}),I}/** * React Router DOM v6.30.0 * * Copyright (c) Remix Software Inc. * * This source code is licensed under the MIT license found in the * LICENSE.md file in the root directory of this source tree. * * @license MIT */function $l(){return $l=Object.assign?Object.assign.bind():function(A){for(var I=1;I{let C=A[g];return I.concat(Array.isArray(C)?C.map(Q=>[g,Q]):[[g,C]])},[]))}function O4(A,I){let g=Vy(A);return I&&I.forEach((C,Q)=>{g.has(Q)||I.getAll(Q).forEach(B=>{g.append(Q,B)})}),g}const q4="6";try{window.__reactRouterVersion=q4}catch{}function BXA(A,I){return s4({basename:void 0,future:$l({},void 0,{v7_prependBasename:!0}),history:kH({window:void 0}),hydrationData:_4(),routes:A,mapRouteProperties:x4,dataStrategy:void 0,patchRoutesOnNavigation:void 0,window:void 0}).initialize()}function _4(){var A;let I=(A=window)==null?void 0:A.__staticRouterHydrationData;return I&&I.errors&&(I=$l({},I,{errors:$4(I.errors)})),I}function $4(A){if(!A)return null;let I=Object.entries(A),g={};for(let[C,Q]of I)if(Q&&Q.__type==="RouteErrorResponse")g[C]=new ql(Q.status,Q.statusText,Q.data,Q.internal===!0);else if(Q&&Q.__type==="Error"){if(Q.__subType){let B=window[Q.__subType];if(typeof B=="function")try{let E=new B(Q.message);E.stack="",g[C]=E}catch{}}if(g[C]==null){let B=new Error(Q.message);B.stack="",g[C]=B}}else g[C]=Q;return g}const Ax=AA.createContext({isTransitioning:!1}),Ix=AA.createContext(new Map),gx="startTransition",r2=D5[gx],Cx="flushSync",a2=FH[Cx];function Qx(A){r2?r2(A):A()}function Ov(A){a2?a2(A):A()}class Bx{constructor(){this.status="pending",this.promise=new Promise((I,g)=>{this.resolve=C=>{this.status==="pending"&&(this.status="resolved",I(C))},this.reject=C=>{this.status==="pending"&&(this.status="rejected",g(C))}})}}function EXA(A){let{fallbackElement:I,router:g,future:C}=A,[Q,B]=AA.useState(g.state),[E,i]=AA.useState(),[e,o]=AA.useState({isTransitioning:!1}),[t,s]=AA.useState(),[v,r]=AA.useState(),[n,a]=AA.useState(),c=AA.useRef(new Map),{v7_startTransition:d}=C||{},l=AA.useCallback(y=>{d?Qx(y):y()},[d]),h=AA.useCallback((y,S)=>{let{deletedFetchers:L,flushSync:V,viewTransitionOpts:z}=S;y.fetchers.forEach((eA,K)=>{eA.data!==void 0&&c.current.set(K,eA.data)}),L.forEach(eA=>c.current.delete(eA));let EA=g.window==null||g.window.document==null||typeof g.window.document.startViewTransition!="function";if(!z||EA){V?Ov(()=>B(y)):l(()=>B(y));return}if(V){Ov(()=>{v&&(t&&t.resolve(),v.skipTransition()),o({isTransitioning:!0,flushSync:!0,currentLocation:z.currentLocation,nextLocation:z.nextLocation})});let eA=g.window.document.startViewTransition(()=>{Ov(()=>B(y))});eA.finished.finally(()=>{Ov(()=>{s(void 0),r(void 0),i(void 0),o({isTransitioning:!1})})}),Ov(()=>r(eA));return}v?(t&&t.resolve(),v.skipTransition(),a({state:y,currentLocation:z.currentLocation,nextLocation:z.nextLocation})):(i(y),o({isTransitioning:!0,flushSync:!1,currentLocation:z.currentLocation,nextLocation:z.nextLocation}))},[g.window,v,t,c,l]);AA.useLayoutEffect(()=>g.subscribe(h),[g,h]),AA.useEffect(()=>{e.isTransitioning&&!e.flushSync&&s(new Bx)},[e]),AA.useEffect(()=>{if(t&&E&&g.window){let y=E,S=t.promise,L=g.window.document.startViewTransition(async()=>{l(()=>B(y)),await S});L.finished.finally(()=>{s(void 0),r(void 0),i(void 0),o({isTransitioning:!1})}),r(L)}},[l,E,t,g.window]),AA.useEffect(()=>{t&&E&&Q.location.key===E.location.key&&t.resolve()},[t,v,Q.location,E]),AA.useEffect(()=>{!e.isTransitioning&&n&&(i(n.state),o({isTransitioning:!0,flushSync:!1,currentLocation:n.currentLocation,nextLocation:n.nextLocation}),a(void 0))},[e.isTransitioning,n]),AA.useEffect(()=>{},[]);let D=AA.useMemo(()=>({createHref:g.createHref,encodeLocation:g.encodeLocation,go:y=>g.navigate(y),push:(y,S,L)=>g.navigate(y,{state:S,preventScrollReset:L==null?void 0:L.preventScrollReset}),replace:(y,S,L)=>g.navigate(y,{replace:!0,state:S,preventScrollReset:L==null?void 0:L.preventScrollReset})}),[g]),u=g.basename||"/",w=AA.useMemo(()=>({router:g,navigator:D,static:!1,basename:u}),[g,D,u]),b=AA.useMemo(()=>({v7_relativeSplatPath:g.future.v7_relativeSplatPath}),[g.future.v7_relativeSplatPath]);return AA.useEffect(()=>f4(C,g.future),[C,g.future]),AA.createElement(AA.Fragment,null,AA.createElement(s0.Provider,{value:w},AA.createElement(k8.Provider,{value:Q},AA.createElement(Ix.Provider,{value:c.current},AA.createElement(Ax.Provider,{value:e},AA.createElement(H4,{basename:u,location:Q.location,navigationType:Q.historyAction,navigator:D,future:b},Q.initialized||g.future.v7_partialHydration?AA.createElement(Ex,{routes:g.routes,future:g.future,state:Q}):I))))),null)}const Ex=AA.memo(ix);function ix(A){let{routes:I,future:g,state:C}=A;return k4(I,void 0,C,g)}var P2;(function(A){A.UseScrollRestoration="useScrollRestoration",A.UseSubmit="useSubmit",A.UseSubmitFetcher="useSubmitFetcher",A.UseFetcher="useFetcher",A.useViewTransitionState="useViewTransitionState"})(P2||(P2={}));var c2;(function(A){A.UseFetcher="useFetcher",A.UseFetchers="useFetchers",A.UseScrollRestoration="useScrollRestoration"})(c2||(c2={}));function iXA(A){let I=AA.useRef(Vy(A)),g=AA.useRef(!1),C=FG(),Q=AA.useMemo(()=>O4(C.search,g.current?null:I.current),[C.search]),B=T4(),E=AA.useCallback((i,e)=>{const o=Vy(typeof i=="function"?i(Q):i);g.current=!0,B("?"+o,e)},[B,Q]);return[Q,E]}function W8(A){var I,g,C="";if(typeof A=="string"||typeof A=="number")C+=A;else if(typeof A=="object")if(Array.isArray(A)){var Q=A.length;for(I=0;I{const I=tx(A),{conflictingClassGroups:g,conflictingClassGroupModifiers:C}=A;return{getClassGroupId:E=>{const i=E.split(YG);return i[0]===""&&i.length!==1&&i.shift(),V8(i,I)||ox(E)},getConflictingClassGroupIds:(E,i)=>{const e=g[E]||[];return i&&C[E]?[...e,...C[E]]:e}}},V8=(A,I)=>{var E;if(A.length===0)return I.classGroupId;const g=A[0],C=I.nextPart.get(g),Q=C?V8(A.slice(1),C):void 0;if(Q)return Q;if(I.validators.length===0)return;const B=A.join(YG);return(E=I.validators.find(({validator:i})=>i(B)))==null?void 0:E.classGroupId},n2=/^\[(.+)\]$/,ox=A=>{if(n2.test(A)){const I=n2.exec(A)[1],g=I==null?void 0:I.substring(0,I.indexOf(":"));if(g)return"arbitrary.."+g}},tx=A=>{const{theme:I,prefix:g}=A,C={nextPart:new Map,validators:[]};return vx(Object.entries(A.classGroups),g).forEach(([B,E])=>{zy(E,C,B,I)}),C},zy=(A,I,g,C)=>{A.forEach(Q=>{if(typeof Q=="string"){const B=Q===""?I:l2(I,Q);B.classGroupId=g;return}if(typeof Q=="function"){if(sx(Q)){zy(Q(C),I,g,C);return}I.validators.push({validator:Q,classGroupId:g});return}Object.entries(Q).forEach(([B,E])=>{zy(E,l2(I,B),g,C)})})},l2=(A,I)=>{let g=A;return I.split(YG).forEach(C=>{g.nextPart.has(C)||g.nextPart.set(C,{nextPart:new Map,validators:[]}),g=g.nextPart.get(C)}),g},sx=A=>A.isThemeGetter,vx=(A,I)=>I?A.map(([g,C])=>{const Q=C.map(B=>typeof B=="string"?I+B:typeof B=="object"?Object.fromEntries(Object.entries(B).map(([E,i])=>[I+E,i])):B);return[g,Q]}):A,rx=A=>{if(A<1)return{get:()=>{},set:()=>{}};let I=0,g=new Map,C=new Map;const Q=(B,E)=>{g.set(B,E),I++,I>A&&(I=0,C=g,g=new Map)};return{get(B){let E=g.get(B);if(E!==void 0)return E;if((E=C.get(B))!==void 0)return Q(B,E),E},set(B,E){g.has(B)?g.set(B,E):Q(B,E)}}},z8="!",ax=A=>{const{separator:I,experimentalParseClassName:g}=A,C=I.length===1,Q=I[0],B=I.length,E=i=>{const e=[];let o=0,t=0,s;for(let c=0;ct?s-t:void 0;return{modifiers:e,hasImportantModifier:r,baseClassName:n,maybePostfixModifierPosition:a}};return g?i=>g({className:i,parseClassName:E}):E},Px=A=>{if(A.length<=1)return A;const I=[];let g=[];return A.forEach(C=>{C[0]==="["?(I.push(...g.sort(),C),g=[]):g.push(C)}),I.push(...g.sort()),I},cx=A=>({cache:rx(A.cacheSize),parseClassName:ax(A),...ex(A)}),nx=/\s+/,lx=(A,I)=>{const{parseClassName:g,getClassGroupId:C,getConflictingClassGroupIds:Q}=I,B=[],E=A.trim().split(nx);let i="";for(let e=E.length-1;e>=0;e-=1){const o=E[e],{modifiers:t,hasImportantModifier:s,baseClassName:v,maybePostfixModifierPosition:r}=g(o);let n=!!r,a=C(n?v.substring(0,r):v);if(!a){if(!n){i=o+(i.length>0?" "+i:i);continue}if(a=C(v),!a){i=o+(i.length>0?" "+i:i);continue}n=!1}const c=Px(t).join(":"),d=s?c+z8:c,l=d+a;if(B.includes(l))continue;B.push(l);const h=Q(a,n);for(let D=0;D0?" "+i:i)}return i};function dx(){let A=0,I,g,C="";for(;A{if(typeof A=="string")return A;let I,g="";for(let C=0;Cs(t),A());return g=cx(o),C=g.cache.get,Q=g.cache.set,B=i,i(e)}function i(e){const o=C(e);if(o)return o;const t=lx(e,g);return Q(e,t),t}return function(){return B(dx.apply(null,arguments))}}const aI=A=>{const I=g=>g[A]||[];return I.isThemeGetter=!0,I},X8=/^\[(?:([a-z-]+):)?(.+)\]$/i,Dx=/^\d+\/\d+$/,ux=new Set(["px","full","screen"]),bx=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,yx=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,wx=/^(rgba?|hsla?|hwb|(ok)?(lab|lch))\(.+\)$/,mx=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,Gx=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,nE=A=>ds(A)||ux.has(A)||Dx.test(A),Ii=A=>Qv(A,"length",kx),ds=A=>!!A&&!Number.isNaN(Number(A)),zd=A=>Qv(A,"number",ds),qv=A=>!!A&&Number.isInteger(Number(A)),Rx=A=>A.endsWith("%")&&ds(A.slice(0,-1)),RA=A=>X8.test(A),gi=A=>bx.test(A),Lx=new Set(["length","size","percentage"]),Sx=A=>Qv(A,Lx,j8),Tx=A=>Qv(A,"position",j8),Ux=new Set(["image","url"]),Fx=A=>Qv(A,Ux,Nx),Yx=A=>Qv(A,"",px),_v=()=>!0,Qv=(A,I,g)=>{const C=X8.exec(A);return C?C[1]?typeof I=="string"?C[1]===I:I.has(C[1]):g(C[2]):!1},kx=A=>yx.test(A)&&!wx.test(A),j8=()=>!1,px=A=>mx.test(A),Nx=A=>Gx.test(A),Zx=()=>{const A=aI("colors"),I=aI("spacing"),g=aI("blur"),C=aI("brightness"),Q=aI("borderColor"),B=aI("borderRadius"),E=aI("borderSpacing"),i=aI("borderWidth"),e=aI("contrast"),o=aI("grayscale"),t=aI("hueRotate"),s=aI("invert"),v=aI("gap"),r=aI("gradientColorStops"),n=aI("gradientColorStopPositions"),a=aI("inset"),c=aI("margin"),d=aI("opacity"),l=aI("padding"),h=aI("saturate"),D=aI("scale"),u=aI("sepia"),w=aI("skew"),b=aI("space"),y=aI("translate"),S=()=>["auto","contain","none"],L=()=>["auto","hidden","clip","visible","scroll"],V=()=>["auto",RA,I],z=()=>[RA,I],EA=()=>["",nE,Ii],eA=()=>["auto",ds,RA],K=()=>["bottom","center","left","left-bottom","left-top","right","right-bottom","right-top","top"],p=()=>["solid","dashed","dotted","double","none"],J=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],Y=()=>["start","end","center","between","around","evenly","stretch"],N=()=>["","0",RA],q=()=>["auto","avoid","all","avoid-page","page","left","right","column"],IA=()=>[ds,RA];return{cacheSize:500,separator:":",theme:{colors:[_v],spacing:[nE,Ii],blur:["none","",gi,RA],brightness:IA(),borderColor:[A],borderRadius:["none","","full",gi,RA],borderSpacing:z(),borderWidth:EA(),contrast:IA(),grayscale:N(),hueRotate:IA(),invert:N(),gap:z(),gradientColorStops:[A],gradientColorStopPositions:[Rx,Ii],inset:V(),margin:V(),opacity:IA(),padding:z(),saturate:IA(),scale:IA(),sepia:N(),skew:IA(),space:z(),translate:z()},classGroups:{aspect:[{aspect:["auto","square","video",RA]}],container:["container"],columns:[{columns:[gi]}],"break-after":[{"break-after":q()}],"break-before":[{"break-before":q()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:[...K(),RA]}],overflow:[{overflow:L()}],"overflow-x":[{"overflow-x":L()}],"overflow-y":[{"overflow-y":L()}],overscroll:[{overscroll:S()}],"overscroll-x":[{"overscroll-x":S()}],"overscroll-y":[{"overscroll-y":S()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:[a]}],"inset-x":[{"inset-x":[a]}],"inset-y":[{"inset-y":[a]}],start:[{start:[a]}],end:[{end:[a]}],top:[{top:[a]}],right:[{right:[a]}],bottom:[{bottom:[a]}],left:[{left:[a]}],visibility:["visible","invisible","collapse"],z:[{z:["auto",qv,RA]}],basis:[{basis:V()}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["wrap","wrap-reverse","nowrap"]}],flex:[{flex:["1","auto","initial","none",RA]}],grow:[{grow:N()}],shrink:[{shrink:N()}],order:[{order:["first","last","none",qv,RA]}],"grid-cols":[{"grid-cols":[_v]}],"col-start-end":[{col:["auto",{span:["full",qv,RA]},RA]}],"col-start":[{"col-start":eA()}],"col-end":[{"col-end":eA()}],"grid-rows":[{"grid-rows":[_v]}],"row-start-end":[{row:["auto",{span:[qv,RA]},RA]}],"row-start":[{"row-start":eA()}],"row-end":[{"row-end":eA()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":["auto","min","max","fr",RA]}],"auto-rows":[{"auto-rows":["auto","min","max","fr",RA]}],gap:[{gap:[v]}],"gap-x":[{"gap-x":[v]}],"gap-y":[{"gap-y":[v]}],"justify-content":[{justify:["normal",...Y()]}],"justify-items":[{"justify-items":["start","end","center","stretch"]}],"justify-self":[{"justify-self":["auto","start","end","center","stretch"]}],"align-content":[{content:["normal",...Y(),"baseline"]}],"align-items":[{items:["start","end","center","baseline","stretch"]}],"align-self":[{self:["auto","start","end","center","stretch","baseline"]}],"place-content":[{"place-content":[...Y(),"baseline"]}],"place-items":[{"place-items":["start","end","center","baseline","stretch"]}],"place-self":[{"place-self":["auto","start","end","center","stretch"]}],p:[{p:[l]}],px:[{px:[l]}],py:[{py:[l]}],ps:[{ps:[l]}],pe:[{pe:[l]}],pt:[{pt:[l]}],pr:[{pr:[l]}],pb:[{pb:[l]}],pl:[{pl:[l]}],m:[{m:[c]}],mx:[{mx:[c]}],my:[{my:[c]}],ms:[{ms:[c]}],me:[{me:[c]}],mt:[{mt:[c]}],mr:[{mr:[c]}],mb:[{mb:[c]}],ml:[{ml:[c]}],"space-x":[{"space-x":[b]}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":[b]}],"space-y-reverse":["space-y-reverse"],w:[{w:["auto","min","max","fit","svw","lvw","dvw",RA,I]}],"min-w":[{"min-w":[RA,I,"min","max","fit"]}],"max-w":[{"max-w":[RA,I,"none","full","min","max","fit","prose",{screen:[gi]},gi]}],h:[{h:[RA,I,"auto","min","max","fit","svh","lvh","dvh"]}],"min-h":[{"min-h":[RA,I,"min","max","fit","svh","lvh","dvh"]}],"max-h":[{"max-h":[RA,I,"min","max","fit","svh","lvh","dvh"]}],size:[{size:[RA,I,"auto","min","max","fit"]}],"font-size":[{text:["base",gi,Ii]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:["thin","extralight","light","normal","medium","semibold","bold","extrabold","black",zd]}],"font-family":[{font:[_v]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:["tighter","tight","normal","wide","wider","widest",RA]}],"line-clamp":[{"line-clamp":["none",ds,zd]}],leading:[{leading:["none","tight","snug","normal","relaxed","loose",nE,RA]}],"list-image":[{"list-image":["none",RA]}],"list-style-type":[{list:["none","disc","decimal",RA]}],"list-style-position":[{list:["inside","outside"]}],"placeholder-color":[{placeholder:[A]}],"placeholder-opacity":[{"placeholder-opacity":[d]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"text-color":[{text:[A]}],"text-opacity":[{"text-opacity":[d]}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...p(),"wavy"]}],"text-decoration-thickness":[{decoration:["auto","from-font",nE,Ii]}],"underline-offset":[{"underline-offset":["auto",nE,RA]}],"text-decoration-color":[{decoration:[A]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:z()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",RA]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",RA]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-opacity":[{"bg-opacity":[d]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:[...K(),Tx]}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","round","space"]}]}],"bg-size":[{bg:["auto","cover","contain",Sx]}],"bg-image":[{bg:["none",{"gradient-to":["t","tr","r","br","b","bl","l","tl"]},Fx]}],"bg-color":[{bg:[A]}],"gradient-from-pos":[{from:[n]}],"gradient-via-pos":[{via:[n]}],"gradient-to-pos":[{to:[n]}],"gradient-from":[{from:[r]}],"gradient-via":[{via:[r]}],"gradient-to":[{to:[r]}],rounded:[{rounded:[B]}],"rounded-s":[{"rounded-s":[B]}],"rounded-e":[{"rounded-e":[B]}],"rounded-t":[{"rounded-t":[B]}],"rounded-r":[{"rounded-r":[B]}],"rounded-b":[{"rounded-b":[B]}],"rounded-l":[{"rounded-l":[B]}],"rounded-ss":[{"rounded-ss":[B]}],"rounded-se":[{"rounded-se":[B]}],"rounded-ee":[{"rounded-ee":[B]}],"rounded-es":[{"rounded-es":[B]}],"rounded-tl":[{"rounded-tl":[B]}],"rounded-tr":[{"rounded-tr":[B]}],"rounded-br":[{"rounded-br":[B]}],"rounded-bl":[{"rounded-bl":[B]}],"border-w":[{border:[i]}],"border-w-x":[{"border-x":[i]}],"border-w-y":[{"border-y":[i]}],"border-w-s":[{"border-s":[i]}],"border-w-e":[{"border-e":[i]}],"border-w-t":[{"border-t":[i]}],"border-w-r":[{"border-r":[i]}],"border-w-b":[{"border-b":[i]}],"border-w-l":[{"border-l":[i]}],"border-opacity":[{"border-opacity":[d]}],"border-style":[{border:[...p(),"hidden"]}],"divide-x":[{"divide-x":[i]}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":[i]}],"divide-y-reverse":["divide-y-reverse"],"divide-opacity":[{"divide-opacity":[d]}],"divide-style":[{divide:p()}],"border-color":[{border:[Q]}],"border-color-x":[{"border-x":[Q]}],"border-color-y":[{"border-y":[Q]}],"border-color-s":[{"border-s":[Q]}],"border-color-e":[{"border-e":[Q]}],"border-color-t":[{"border-t":[Q]}],"border-color-r":[{"border-r":[Q]}],"border-color-b":[{"border-b":[Q]}],"border-color-l":[{"border-l":[Q]}],"divide-color":[{divide:[Q]}],"outline-style":[{outline:["",...p()]}],"outline-offset":[{"outline-offset":[nE,RA]}],"outline-w":[{outline:[nE,Ii]}],"outline-color":[{outline:[A]}],"ring-w":[{ring:EA()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:[A]}],"ring-opacity":[{"ring-opacity":[d]}],"ring-offset-w":[{"ring-offset":[nE,Ii]}],"ring-offset-color":[{"ring-offset":[A]}],shadow:[{shadow:["","inner","none",gi,Yx]}],"shadow-color":[{shadow:[_v]}],opacity:[{opacity:[d]}],"mix-blend":[{"mix-blend":[...J(),"plus-lighter","plus-darker"]}],"bg-blend":[{"bg-blend":J()}],filter:[{filter:["","none"]}],blur:[{blur:[g]}],brightness:[{brightness:[C]}],contrast:[{contrast:[e]}],"drop-shadow":[{"drop-shadow":["","none",gi,RA]}],grayscale:[{grayscale:[o]}],"hue-rotate":[{"hue-rotate":[t]}],invert:[{invert:[s]}],saturate:[{saturate:[h]}],sepia:[{sepia:[u]}],"backdrop-filter":[{"backdrop-filter":["","none"]}],"backdrop-blur":[{"backdrop-blur":[g]}],"backdrop-brightness":[{"backdrop-brightness":[C]}],"backdrop-contrast":[{"backdrop-contrast":[e]}],"backdrop-grayscale":[{"backdrop-grayscale":[o]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[t]}],"backdrop-invert":[{"backdrop-invert":[s]}],"backdrop-opacity":[{"backdrop-opacity":[d]}],"backdrop-saturate":[{"backdrop-saturate":[h]}],"backdrop-sepia":[{"backdrop-sepia":[u]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":[E]}],"border-spacing-x":[{"border-spacing-x":[E]}],"border-spacing-y":[{"border-spacing-y":[E]}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["none","all","","colors","opacity","shadow","transform",RA]}],duration:[{duration:IA()}],ease:[{ease:["linear","in","out","in-out",RA]}],delay:[{delay:IA()}],animate:[{animate:["none","spin","ping","pulse","bounce",RA]}],transform:[{transform:["","gpu","none"]}],scale:[{scale:[D]}],"scale-x":[{"scale-x":[D]}],"scale-y":[{"scale-y":[D]}],rotate:[{rotate:[qv,RA]}],"translate-x":[{"translate-x":[y]}],"translate-y":[{"translate-y":[y]}],"skew-x":[{"skew-x":[w]}],"skew-y":[{"skew-y":[w]}],"transform-origin":[{origin:["center","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left",RA]}],accent:[{accent:["auto",A]}],appearance:[{appearance:["none","auto"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",RA]}],"caret-color":[{caret:[A]}],"pointer-events":[{"pointer-events":["none","auto"]}],resize:[{resize:["none","y","x",""]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":z()}],"scroll-mx":[{"scroll-mx":z()}],"scroll-my":[{"scroll-my":z()}],"scroll-ms":[{"scroll-ms":z()}],"scroll-me":[{"scroll-me":z()}],"scroll-mt":[{"scroll-mt":z()}],"scroll-mr":[{"scroll-mr":z()}],"scroll-mb":[{"scroll-mb":z()}],"scroll-ml":[{"scroll-ml":z()}],"scroll-p":[{"scroll-p":z()}],"scroll-px":[{"scroll-px":z()}],"scroll-py":[{"scroll-py":z()}],"scroll-ps":[{"scroll-ps":z()}],"scroll-pe":[{"scroll-pe":z()}],"scroll-pt":[{"scroll-pt":z()}],"scroll-pr":[{"scroll-pr":z()}],"scroll-pb":[{"scroll-pb":z()}],"scroll-pl":[{"scroll-pl":z()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",RA]}],fill:[{fill:[A,"none"]}],"stroke-w":[{stroke:[nE,Ii,zd]}],stroke:[{stroke:[A,"none"]}],sr:["sr-only","not-sr-only"],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]}}},oXA=hx(Zx);function f8(A,I){return function(){return A.apply(I,arguments)}}const{toString:Kx}=Object.prototype,{getPrototypeOf:kG}=Object,a0=(A=>I=>{const g=Kx.call(I);return A[g]||(A[g]=g.slice(8,-1).toLowerCase())})(Object.create(null)),SB=A=>(A=A.toLowerCase(),I=>a0(I)===A),P0=A=>I=>typeof I===A,{isArray:Bv}=Array,za=P0("undefined");function Jx(A){return A!==null&&!za(A)&&A.constructor!==null&&!za(A.constructor)&&IQ(A.constructor.isBuffer)&&A.constructor.isBuffer(A)}const H8=SB("ArrayBuffer");function Wx(A){let I;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?I=ArrayBuffer.isView(A):I=A&&A.buffer&&H8(A.buffer),I}const Vx=P0("string"),IQ=P0("function"),x8=P0("number"),c0=A=>A!==null&&typeof A=="object",zx=A=>A===!0||A===!1,Jn=A=>{if(a0(A)!=="object")return!1;const I=kG(A);return(I===null||I===Object.prototype||Object.getPrototypeOf(I)===null)&&!(Symbol.toStringTag in A)&&!(Symbol.iterator in A)},Mx=SB("Date"),Xx=SB("File"),jx=SB("Blob"),fx=SB("FileList"),Hx=A=>c0(A)&&IQ(A.pipe),xx=A=>{let I;return A&&(typeof FormData=="function"&&A instanceof FormData||IQ(A.append)&&((I=a0(A))==="formdata"||I==="object"&&IQ(A.toString)&&A.toString()==="[object FormData]"))},Ox=SB("URLSearchParams"),[qx,_x,$x,AO]=["ReadableStream","Request","Response","Headers"].map(SB),IO=A=>A.trim?A.trim():A.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function vP(A,I,{allOwnKeys:g=!1}={}){if(A===null||typeof A>"u")return;let C,Q;if(typeof A!="object"&&(A=[A]),Bv(A))for(C=0,Q=A.length;C0;)if(Q=g[C],I===Q.toLowerCase())return Q;return null}const je=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,q8=A=>!za(A)&&A!==je;function My(){const{caseless:A}=q8(this)&&this||{},I={},g=(C,Q)=>{const B=A&&O8(I,Q)||Q;Jn(I[B])&&Jn(C)?I[B]=My(I[B],C):Jn(C)?I[B]=My({},C):Bv(C)?I[B]=C.slice():I[B]=C};for(let C=0,Q=arguments.length;C(vP(I,(Q,B)=>{g&&IQ(Q)?A[B]=f8(Q,g):A[B]=Q},{allOwnKeys:C}),A),CO=A=>(A.charCodeAt(0)===65279&&(A=A.slice(1)),A),QO=(A,I,g,C)=>{A.prototype=Object.create(I.prototype,C),A.prototype.constructor=A,Object.defineProperty(A,"super",{value:I.prototype}),g&&Object.assign(A.prototype,g)},BO=(A,I,g,C)=>{let Q,B,E;const i={};if(I=I||{},A==null)return I;do{for(Q=Object.getOwnPropertyNames(A),B=Q.length;B-- >0;)E=Q[B],(!C||C(E,A,I))&&!i[E]&&(I[E]=A[E],i[E]=!0);A=g!==!1&&kG(A)}while(A&&(!g||g(A,I))&&A!==Object.prototype);return I},EO=(A,I,g)=>{A=String(A),(g===void 0||g>A.length)&&(g=A.length),g-=I.length;const C=A.indexOf(I,g);return C!==-1&&C===g},iO=A=>{if(!A)return null;if(Bv(A))return A;let I=A.length;if(!x8(I))return null;const g=new Array(I);for(;I-- >0;)g[I]=A[I];return g},eO=(A=>I=>A&&I instanceof A)(typeof Uint8Array<"u"&&kG(Uint8Array)),oO=(A,I)=>{const C=(A&&A[Symbol.iterator]).call(A);let Q;for(;(Q=C.next())&&!Q.done;){const B=Q.value;I.call(A,B[0],B[1])}},tO=(A,I)=>{let g;const C=[];for(;(g=A.exec(I))!==null;)C.push(g);return C},sO=SB("HTMLFormElement"),vO=A=>A.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(g,C,Q){return C.toUpperCase()+Q}),d2=(({hasOwnProperty:A})=>(I,g)=>A.call(I,g))(Object.prototype),rO=SB("RegExp"),_8=(A,I)=>{const g=Object.getOwnPropertyDescriptors(A),C={};vP(g,(Q,B)=>{let E;(E=I(Q,B,A))!==!1&&(C[B]=E||Q)}),Object.defineProperties(A,C)},aO=A=>{_8(A,(I,g)=>{if(IQ(A)&&["arguments","caller","callee"].indexOf(g)!==-1)return!1;const C=A[g];if(IQ(C)){if(I.enumerable=!1,"writable"in I){I.writable=!1;return}I.set||(I.set=()=>{throw Error("Can not rewrite read-only method '"+g+"'")})}})},PO=(A,I)=>{const g={},C=Q=>{Q.forEach(B=>{g[B]=!0})};return Bv(A)?C(A):C(String(A).split(I)),g},cO=()=>{},nO=(A,I)=>A!=null&&Number.isFinite(A=+A)?A:I;function lO(A){return!!(A&&IQ(A.append)&&A[Symbol.toStringTag]==="FormData"&&A[Symbol.iterator])}const dO=A=>{const I=new Array(10),g=(C,Q)=>{if(c0(C)){if(I.indexOf(C)>=0)return;if(!("toJSON"in C)){I[Q]=C;const B=Bv(C)?[]:{};return vP(C,(E,i)=>{const e=g(E,Q+1);!za(e)&&(B[i]=e)}),I[Q]=void 0,B}}return C};return g(A,0)},hO=SB("AsyncFunction"),DO=A=>A&&(c0(A)||IQ(A))&&IQ(A.then)&&IQ(A.catch),$8=((A,I)=>A?setImmediate:I?((g,C)=>(je.addEventListener("message",({source:Q,data:B})=>{Q===je&&B===g&&C.length&&C.shift()()},!1),Q=>{C.push(Q),je.postMessage(g,"*")}))(`axios@${Math.random()}`,[]):g=>setTimeout(g))(typeof setImmediate=="function",IQ(je.postMessage)),uO=typeof queueMicrotask<"u"?queueMicrotask.bind(je):typeof process<"u"&&process.nextTick||$8,W={isArray:Bv,isArrayBuffer:H8,isBuffer:Jx,isFormData:xx,isArrayBufferView:Wx,isString:Vx,isNumber:x8,isBoolean:zx,isObject:c0,isPlainObject:Jn,isReadableStream:qx,isRequest:_x,isResponse:$x,isHeaders:AO,isUndefined:za,isDate:Mx,isFile:Xx,isBlob:jx,isRegExp:rO,isFunction:IQ,isStream:Hx,isURLSearchParams:Ox,isTypedArray:eO,isFileList:fx,forEach:vP,merge:My,extend:gO,trim:IO,stripBOM:CO,inherits:QO,toFlatObject:BO,kindOf:a0,kindOfTest:SB,endsWith:EO,toArray:iO,forEachEntry:oO,matchAll:tO,isHTMLForm:sO,hasOwnProperty:d2,hasOwnProp:d2,reduceDescriptors:_8,freezeMethods:aO,toObjectSet:PO,toCamelCase:vO,noop:cO,toFiniteNumber:nO,findKey:O8,global:je,isContextDefined:q8,isSpecCompliantForm:lO,toJSONObject:dO,isAsyncFn:hO,isThenable:DO,setImmediate:$8,asap:uO};function mA(A,I,g,C,Q){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=A,this.name="AxiosError",I&&(this.code=I),g&&(this.config=g),C&&(this.request=C),Q&&(this.response=Q,this.status=Q.status?Q.status:null)}W.inherits(mA,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:W.toJSONObject(this.config),code:this.code,status:this.status}}});const AJ=mA.prototype,IJ={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(A=>{IJ[A]={value:A}});Object.defineProperties(mA,IJ);Object.defineProperty(AJ,"isAxiosError",{value:!0});mA.from=(A,I,g,C,Q,B)=>{const E=Object.create(AJ);return W.toFlatObject(A,E,function(e){return e!==Error.prototype},i=>i!=="isAxiosError"),mA.call(E,A.message,I,g,C,Q),E.cause=A,E.name=A.name,B&&Object.assign(E,B),E};const bO=null;function Xy(A){return W.isPlainObject(A)||W.isArray(A)}function gJ(A){return W.endsWith(A,"[]")?A.slice(0,-2):A}function h2(A,I,g){return A?A.concat(I).map(function(Q,B){return Q=gJ(Q),!g&&B?"["+Q+"]":Q}).join(g?".":""):I}function yO(A){return W.isArray(A)&&!A.some(Xy)}const wO=W.toFlatObject(W,{},null,function(I){return/^is[A-Z]/.test(I)});function n0(A,I,g){if(!W.isObject(A))throw new TypeError("target must be an object");I=I||new FormData,g=W.toFlatObject(g,{metaTokens:!0,dots:!1,indexes:!1},!1,function(a,c){return!W.isUndefined(c[a])});const C=g.metaTokens,Q=g.visitor||t,B=g.dots,E=g.indexes,e=(g.Blob||typeof Blob<"u"&&Blob)&&W.isSpecCompliantForm(I);if(!W.isFunction(Q))throw new TypeError("visitor must be a function");function o(n){if(n===null)return"";if(W.isDate(n))return n.toISOString();if(!e&&W.isBlob(n))throw new mA("Blob is not supported. Use a Buffer instead.");return W.isArrayBuffer(n)||W.isTypedArray(n)?e&&typeof Blob=="function"?new Blob([n]):Buffer.from(n):n}function t(n,a,c){let d=n;if(n&&!c&&typeof n=="object"){if(W.endsWith(a,"{}"))a=C?a:a.slice(0,-2),n=JSON.stringify(n);else if(W.isArray(n)&&yO(n)||(W.isFileList(n)||W.endsWith(a,"[]"))&&(d=W.toArray(n)))return a=gJ(a),d.forEach(function(h,D){!(W.isUndefined(h)||h===null)&&I.append(E===!0?h2([a],D,B):E===null?a:a+"[]",o(h))}),!1}return Xy(n)?!0:(I.append(h2(c,a,B),o(n)),!1)}const s=[],v=Object.assign(wO,{defaultVisitor:t,convertValue:o,isVisitable:Xy});function r(n,a){if(!W.isUndefined(n)){if(s.indexOf(n)!==-1)throw Error("Circular reference detected in "+a.join("."));s.push(n),W.forEach(n,function(d,l){(!(W.isUndefined(d)||d===null)&&Q.call(I,d,W.isString(l)?l.trim():l,a,v))===!0&&r(d,a?a.concat(l):[l])}),s.pop()}}if(!W.isObject(A))throw new TypeError("data must be an object");return r(A),I}function D2(A){const I={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(A).replace(/[!'()~]|%20|%00/g,function(C){return I[C]})}function pG(A,I){this._pairs=[],A&&n0(A,this,I)}const CJ=pG.prototype;CJ.append=function(I,g){this._pairs.push([I,g])};CJ.toString=function(I){const g=I?function(C){return I.call(this,C,D2)}:D2;return this._pairs.map(function(Q){return g(Q[0])+"="+g(Q[1])},"").join("&")};function mO(A){return encodeURIComponent(A).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function QJ(A,I,g){if(!I)return A;const C=g&&g.encode||mO;W.isFunction(g)&&(g={serialize:g});const Q=g&&g.serialize;let B;if(Q?B=Q(I,g):B=W.isURLSearchParams(I)?I.toString():new pG(I,g).toString(C),B){const E=A.indexOf("#");E!==-1&&(A=A.slice(0,E)),A+=(A.indexOf("?")===-1?"?":"&")+B}return A}class u2{constructor(){this.handlers=[]}use(I,g,C){return this.handlers.push({fulfilled:I,rejected:g,synchronous:C?C.synchronous:!1,runWhen:C?C.runWhen:null}),this.handlers.length-1}eject(I){this.handlers[I]&&(this.handlers[I]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(I){W.forEach(this.handlers,function(C){C!==null&&I(C)})}}const BJ={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},GO=typeof URLSearchParams<"u"?URLSearchParams:pG,RO=typeof FormData<"u"?FormData:null,LO=typeof Blob<"u"?Blob:null,SO={isBrowser:!0,classes:{URLSearchParams:GO,FormData:RO,Blob:LO},protocols:["http","https","file","blob","url","data"]},NG=typeof window<"u"&&typeof document<"u",jy=typeof navigator=="object"&&navigator||void 0,TO=NG&&(!jy||["ReactNative","NativeScript","NS"].indexOf(jy.product)<0),UO=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",FO=NG&&window.location.href||"http://localhost",YO=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:NG,hasStandardBrowserEnv:TO,hasStandardBrowserWebWorkerEnv:UO,navigator:jy,origin:FO},Symbol.toStringTag,{value:"Module"})),Mg={...YO,...SO};function kO(A,I){return n0(A,new Mg.classes.URLSearchParams,Object.assign({visitor:function(g,C,Q,B){return Mg.isNode&&W.isBuffer(g)?(this.append(C,g.toString("base64")),!1):B.defaultVisitor.apply(this,arguments)}},I))}function pO(A){return W.matchAll(/\w+|\[(\w*)]/g,A).map(I=>I[0]==="[]"?"":I[1]||I[0])}function NO(A){const I={},g=Object.keys(A);let C;const Q=g.length;let B;for(C=0;C=g.length;return E=!E&&W.isArray(Q)?Q.length:E,e?(W.hasOwnProp(Q,E)?Q[E]=[Q[E],C]:Q[E]=C,!i):((!Q[E]||!W.isObject(Q[E]))&&(Q[E]=[]),I(g,C,Q[E],B)&&W.isArray(Q[E])&&(Q[E]=NO(Q[E])),!i)}if(W.isFormData(A)&&W.isFunction(A.entries)){const g={};return W.forEachEntry(A,(C,Q)=>{I(pO(C),Q,g,0)}),g}return null}function ZO(A,I,g){if(W.isString(A))try{return(I||JSON.parse)(A),W.trim(A)}catch(C){if(C.name!=="SyntaxError")throw C}return(g||JSON.stringify)(A)}const rP={transitional:BJ,adapter:["xhr","http","fetch"],transformRequest:[function(I,g){const C=g.getContentType()||"",Q=C.indexOf("application/json")>-1,B=W.isObject(I);if(B&&W.isHTMLForm(I)&&(I=new FormData(I)),W.isFormData(I))return Q?JSON.stringify(EJ(I)):I;if(W.isArrayBuffer(I)||W.isBuffer(I)||W.isStream(I)||W.isFile(I)||W.isBlob(I)||W.isReadableStream(I))return I;if(W.isArrayBufferView(I))return I.buffer;if(W.isURLSearchParams(I))return g.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),I.toString();let i;if(B){if(C.indexOf("application/x-www-form-urlencoded")>-1)return kO(I,this.formSerializer).toString();if((i=W.isFileList(I))||C.indexOf("multipart/form-data")>-1){const e=this.env&&this.env.FormData;return n0(i?{"files[]":I}:I,e&&new e,this.formSerializer)}}return B||Q?(g.setContentType("application/json",!1),ZO(I)):I}],transformResponse:[function(I){const g=this.transitional||rP.transitional,C=g&&g.forcedJSONParsing,Q=this.responseType==="json";if(W.isResponse(I)||W.isReadableStream(I))return I;if(I&&W.isString(I)&&(C&&!this.responseType||Q)){const E=!(g&&g.silentJSONParsing)&&Q;try{return JSON.parse(I)}catch(i){if(E)throw i.name==="SyntaxError"?mA.from(i,mA.ERR_BAD_RESPONSE,this,null,this.response):i}}return I}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:Mg.classes.FormData,Blob:Mg.classes.Blob},validateStatus:function(I){return I>=200&&I<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};W.forEach(["delete","get","head","post","put","patch"],A=>{rP.headers[A]={}});const KO=W.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),JO=A=>{const I={};let g,C,Q;return A&&A.split(` `).forEach(function(E){Q=E.indexOf(":"),g=E.substring(0,Q).trim().toLowerCase(),C=E.substring(Q+1).trim(),!(!g||I[g]&&KO[g])&&(g==="set-cookie"?I[g]?I[g].push(C):I[g]=[C]:I[g]=I[g]?I[g]+", "+C:C)}),I},b2=Symbol("internals");function $v(A){return A&&String(A).trim().toLowerCase()}function Wn(A){return A===!1||A==null?A:W.isArray(A)?A.map(Wn):String(A)}function WO(A){const I=Object.create(null),g=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let C;for(;C=g.exec(A);)I[C[1]]=C[2];return I}const VO=A=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(A.trim());function Md(A,I,g,C,Q){if(W.isFunction(C))return C.call(this,I,g);if(Q&&(I=g),!!W.isString(I)){if(W.isString(C))return I.indexOf(C)!==-1;if(W.isRegExp(C))return C.test(I)}}function zO(A){return A.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(I,g,C)=>g.toUpperCase()+C)}function MO(A,I){const g=W.toCamelCase(" "+I);["get","set","has"].forEach(C=>{Object.defineProperty(A,C+g,{value:function(Q,B,E){return this[C].call(this,I,Q,B,E)},configurable:!0})})}let kC=class{constructor(I){I&&this.set(I)}set(I,g,C){const Q=this;function B(i,e,o){const t=$v(e);if(!t)throw new Error("header name must be a non-empty string");const s=W.findKey(Q,t);(!s||Q[s]===void 0||o===!0||o===void 0&&Q[s]!==!1)&&(Q[s||e]=Wn(i))}const E=(i,e)=>W.forEach(i,(o,t)=>B(o,t,e));if(W.isPlainObject(I)||I instanceof this.constructor)E(I,g);else if(W.isString(I)&&(I=I.trim())&&!VO(I))E(JO(I),g);else if(W.isHeaders(I))for(const[i,e]of I.entries())B(e,i,C);else I!=null&&B(g,I,C);return this}get(I,g){if(I=$v(I),I){const C=W.findKey(this,I);if(C){const Q=this[C];if(!g)return Q;if(g===!0)return WO(Q);if(W.isFunction(g))return g.call(this,Q,C);if(W.isRegExp(g))return g.exec(Q);throw new TypeError("parser must be boolean|regexp|function")}}}has(I,g){if(I=$v(I),I){const C=W.findKey(this,I);return!!(C&&this[C]!==void 0&&(!g||Md(this,this[C],C,g)))}return!1}delete(I,g){const C=this;let Q=!1;function B(E){if(E=$v(E),E){const i=W.findKey(C,E);i&&(!g||Md(C,C[i],i,g))&&(delete C[i],Q=!0)}}return W.isArray(I)?I.forEach(B):B(I),Q}clear(I){const g=Object.keys(this);let C=g.length,Q=!1;for(;C--;){const B=g[C];(!I||Md(this,this[B],B,I,!0))&&(delete this[B],Q=!0)}return Q}normalize(I){const g=this,C={};return W.forEach(this,(Q,B)=>{const E=W.findKey(C,B);if(E){g[E]=Wn(Q),delete g[B];return}const i=I?zO(B):String(B).trim();i!==B&&delete g[B],g[i]=Wn(Q),C[i]=!0}),this}concat(...I){return this.constructor.concat(this,...I)}toJSON(I){const g=Object.create(null);return W.forEach(this,(C,Q)=>{C!=null&&C!==!1&&(g[Q]=I&&W.isArray(C)?C.join(", "):C)}),g}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([I,g])=>I+": "+g).join(` `)}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(I){return I instanceof this?I:new this(I)}static concat(I,...g){const C=new this(I);return g.forEach(Q=>C.set(Q)),C}static accessor(I){const C=(this[b2]=this[b2]={accessors:{}}).accessors,Q=this.prototype;function B(E){const i=$v(E);C[i]||(MO(Q,E),C[i]=!0)}return W.isArray(I)?I.forEach(B):B(I),this}};kC.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);W.reduceDescriptors(kC.prototype,({value:A},I)=>{let g=I[0].toUpperCase()+I.slice(1);return{get:()=>A,set(C){this[g]=C}}});W.freezeMethods(kC);function Xd(A,I){const g=this||rP,C=I||g,Q=kC.from(C.headers);let B=C.data;return W.forEach(A,function(i){B=i.call(g,B,Q.normalize(),I?I.status:void 0)}),Q.normalize(),B}function iJ(A){return!!(A&&A.__CANCEL__)}function Ev(A,I,g){mA.call(this,A??"canceled",mA.ERR_CANCELED,I,g),this.name="CanceledError"}W.inherits(Ev,mA,{__CANCEL__:!0});function eJ(A,I,g){const C=g.config.validateStatus;!g.status||!C||C(g.status)?A(g):I(new mA("Request failed with status code "+g.status,[mA.ERR_BAD_REQUEST,mA.ERR_BAD_RESPONSE][Math.floor(g.status/100)-4],g.config,g.request,g))}function XO(A){const I=/^([-+\w]{1,25})(:?\/\/|:)/.exec(A);return I&&I[1]||""}function jO(A,I){A=A||10;const g=new Array(A),C=new Array(A);let Q=0,B=0,E;return I=I!==void 0?I:1e3,function(e){const o=Date.now(),t=C[B];E||(E=o),g[Q]=e,C[Q]=o;let s=B,v=0;for(;s!==Q;)v+=g[s++],s=s%A;if(Q=(Q+1)%A,Q===B&&(B=(B+1)%A),o-E{g=t,Q=null,B&&(clearTimeout(B),B=null),A.apply(null,o)};return[(...o)=>{const t=Date.now(),s=t-g;s>=C?E(o,t):(Q=o,B||(B=setTimeout(()=>{B=null,E(Q)},C-s)))},()=>Q&&E(Q)]}const A9=(A,I,g=3)=>{let C=0;const Q=jO(50,250);return fO(B=>{const E=B.loaded,i=B.lengthComputable?B.total:void 0,e=E-C,o=Q(e),t=E<=i;C=E;const s={loaded:E,total:i,progress:i?E/i:void 0,bytes:e,rate:o||void 0,estimated:o&&i&&t?(i-E)/o:void 0,event:B,lengthComputable:i!=null,[I?"download":"upload"]:!0};A(s)},g)},y2=(A,I)=>{const g=A!=null;return[C=>I[0]({lengthComputable:g,total:A,loaded:C}),I[1]]},w2=A=>(...I)=>W.asap(()=>A(...I)),HO=Mg.hasStandardBrowserEnv?((A,I)=>g=>(g=new URL(g,Mg.origin),A.protocol===g.protocol&&A.host===g.host&&(I||A.port===g.port)))(new URL(Mg.origin),Mg.navigator&&/(msie|trident)/i.test(Mg.navigator.userAgent)):()=>!0,xO=Mg.hasStandardBrowserEnv?{write(A,I,g,C,Q,B){const E=[A+"="+encodeURIComponent(I)];W.isNumber(g)&&E.push("expires="+new Date(g).toGMTString()),W.isString(C)&&E.push("path="+C),W.isString(Q)&&E.push("domain="+Q),B===!0&&E.push("secure"),document.cookie=E.join("; ")},read(A){const I=document.cookie.match(new RegExp("(^|;\\s*)("+A+")=([^;]*)"));return I?decodeURIComponent(I[3]):null},remove(A){this.write(A,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function OO(A){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(A)}function qO(A,I){return I?A.replace(/\/?\/$/,"")+"/"+I.replace(/^\/+/,""):A}function oJ(A,I,g){let C=!OO(I);return A&&(C||g==!1)?qO(A,I):I}const m2=A=>A instanceof kC?{...A}:A;function co(A,I){I=I||{};const g={};function C(o,t,s,v){return W.isPlainObject(o)&&W.isPlainObject(t)?W.merge.call({caseless:v},o,t):W.isPlainObject(t)?W.merge({},t):W.isArray(t)?t.slice():t}function Q(o,t,s,v){if(W.isUndefined(t)){if(!W.isUndefined(o))return C(void 0,o,s,v)}else return C(o,t,s,v)}function B(o,t){if(!W.isUndefined(t))return C(void 0,t)}function E(o,t){if(W.isUndefined(t)){if(!W.isUndefined(o))return C(void 0,o)}else return C(void 0,t)}function i(o,t,s){if(s in I)return C(o,t);if(s in A)return C(void 0,o)}const e={url:B,method:B,data:B,baseURL:E,transformRequest:E,transformResponse:E,paramsSerializer:E,timeout:E,timeoutMessage:E,withCredentials:E,withXSRFToken:E,adapter:E,responseType:E,xsrfCookieName:E,xsrfHeaderName:E,onUploadProgress:E,onDownloadProgress:E,decompress:E,maxContentLength:E,maxBodyLength:E,beforeRedirect:E,transport:E,httpAgent:E,httpsAgent:E,cancelToken:E,socketPath:E,responseEncoding:E,validateStatus:i,headers:(o,t,s)=>Q(m2(o),m2(t),s,!0)};return W.forEach(Object.keys(Object.assign({},A,I)),function(t){const s=e[t]||Q,v=s(A[t],I[t],t);W.isUndefined(v)&&s!==i||(g[t]=v)}),g}const tJ=A=>{const I=co({},A);let{data:g,withXSRFToken:C,xsrfHeaderName:Q,xsrfCookieName:B,headers:E,auth:i}=I;I.headers=E=kC.from(E),I.url=QJ(oJ(I.baseURL,I.url,I.allowAbsoluteUrls),A.params,A.paramsSerializer),i&&E.set("Authorization","Basic "+btoa((i.username||"")+":"+(i.password?unescape(encodeURIComponent(i.password)):"")));let e;if(W.isFormData(g)){if(Mg.hasStandardBrowserEnv||Mg.hasStandardBrowserWebWorkerEnv)E.setContentType(void 0);else if((e=E.getContentType())!==!1){const[o,...t]=e?e.split(";").map(s=>s.trim()).filter(Boolean):[];E.setContentType([o||"multipart/form-data",...t].join("; "))}}if(Mg.hasStandardBrowserEnv&&(C&&W.isFunction(C)&&(C=C(I)),C||C!==!1&&HO(I.url))){const o=Q&&B&&xO.read(B);o&&E.set(Q,o)}return I},_O=typeof XMLHttpRequest<"u",$O=_O&&function(A){return new Promise(function(g,C){const Q=tJ(A);let B=Q.data;const E=kC.from(Q.headers).normalize();let{responseType:i,onUploadProgress:e,onDownloadProgress:o}=Q,t,s,v,r,n;function a(){r&&r(),n&&n(),Q.cancelToken&&Q.cancelToken.unsubscribe(t),Q.signal&&Q.signal.removeEventListener("abort",t)}let c=new XMLHttpRequest;c.open(Q.method.toUpperCase(),Q.url,!0),c.timeout=Q.timeout;function d(){if(!c)return;const h=kC.from("getAllResponseHeaders"in c&&c.getAllResponseHeaders()),u={data:!i||i==="text"||i==="json"?c.responseText:c.response,status:c.status,statusText:c.statusText,headers:h,config:A,request:c};eJ(function(b){g(b),a()},function(b){C(b),a()},u),c=null}"onloadend"in c?c.onloadend=d:c.onreadystatechange=function(){!c||c.readyState!==4||c.status===0&&!(c.responseURL&&c.responseURL.indexOf("file:")===0)||setTimeout(d)},c.onabort=function(){c&&(C(new mA("Request aborted",mA.ECONNABORTED,A,c)),c=null)},c.onerror=function(){C(new mA("Network Error",mA.ERR_NETWORK,A,c)),c=null},c.ontimeout=function(){let D=Q.timeout?"timeout of "+Q.timeout+"ms exceeded":"timeout exceeded";const u=Q.transitional||BJ;Q.timeoutErrorMessage&&(D=Q.timeoutErrorMessage),C(new mA(D,u.clarifyTimeoutError?mA.ETIMEDOUT:mA.ECONNABORTED,A,c)),c=null},B===void 0&&E.setContentType(null),"setRequestHeader"in c&&W.forEach(E.toJSON(),function(D,u){c.setRequestHeader(u,D)}),W.isUndefined(Q.withCredentials)||(c.withCredentials=!!Q.withCredentials),i&&i!=="json"&&(c.responseType=Q.responseType),o&&([v,n]=A9(o,!0),c.addEventListener("progress",v)),e&&c.upload&&([s,r]=A9(e),c.upload.addEventListener("progress",s),c.upload.addEventListener("loadend",r)),(Q.cancelToken||Q.signal)&&(t=h=>{c&&(C(!h||h.type?new Ev(null,A,c):h),c.abort(),c=null)},Q.cancelToken&&Q.cancelToken.subscribe(t),Q.signal&&(Q.signal.aborted?t():Q.signal.addEventListener("abort",t)));const l=XO(Q.url);if(l&&Mg.protocols.indexOf(l)===-1){C(new mA("Unsupported protocol "+l+":",mA.ERR_BAD_REQUEST,A));return}c.send(B||null)})},Aq=(A,I)=>{const{length:g}=A=A?A.filter(Boolean):[];if(I||g){let C=new AbortController,Q;const B=function(o){if(!Q){Q=!0,i();const t=o instanceof Error?o:this.reason;C.abort(t instanceof mA?t:new Ev(t instanceof Error?t.message:t))}};let E=I&&setTimeout(()=>{E=null,B(new mA(`timeout ${I} of ms exceeded`,mA.ETIMEDOUT))},I);const i=()=>{A&&(E&&clearTimeout(E),E=null,A.forEach(o=>{o.unsubscribe?o.unsubscribe(B):o.removeEventListener("abort",B)}),A=null)};A.forEach(o=>o.addEventListener("abort",B));const{signal:e}=C;return e.unsubscribe=()=>W.asap(i),e}},Iq=function*(A,I){let g=A.byteLength;if(g{const Q=gq(A,I);let B=0,E,i=e=>{E||(E=!0,C&&C(e))};return new ReadableStream({async pull(e){try{const{done:o,value:t}=await Q.next();if(o){i(),e.close();return}let s=t.byteLength;if(g){let v=B+=s;g(v)}e.enqueue(new Uint8Array(t))}catch(o){throw i(o),o}},cancel(e){return i(e),Q.return()}},{highWaterMark:2})},l0=typeof fetch=="function"&&typeof Request=="function"&&typeof Response=="function",sJ=l0&&typeof ReadableStream=="function",Qq=l0&&(typeof TextEncoder=="function"?(A=>I=>A.encode(I))(new TextEncoder):async A=>new Uint8Array(await new Response(A).arrayBuffer())),vJ=(A,...I)=>{try{return!!A(...I)}catch{return!1}},Bq=sJ&&vJ(()=>{let A=!1;const I=new Request(Mg.origin,{body:new ReadableStream,method:"POST",get duplex(){return A=!0,"half"}}).headers.has("Content-Type");return A&&!I}),R2=64*1024,fy=sJ&&vJ(()=>W.isReadableStream(new Response("").body)),I9={stream:fy&&(A=>A.body)};l0&&(A=>{["text","arrayBuffer","blob","formData","stream"].forEach(I=>{!I9[I]&&(I9[I]=W.isFunction(A[I])?g=>g[I]():(g,C)=>{throw new mA(`Response type '${I}' is not supported`,mA.ERR_NOT_SUPPORT,C)})})})(new Response);const Eq=async A=>{if(A==null)return 0;if(W.isBlob(A))return A.size;if(W.isSpecCompliantForm(A))return(await new Request(Mg.origin,{method:"POST",body:A}).arrayBuffer()).byteLength;if(W.isArrayBufferView(A)||W.isArrayBuffer(A))return A.byteLength;if(W.isURLSearchParams(A)&&(A=A+""),W.isString(A))return(await Qq(A)).byteLength},iq=async(A,I)=>{const g=W.toFiniteNumber(A.getContentLength());return g??Eq(I)},eq=l0&&(async A=>{let{url:I,method:g,data:C,signal:Q,cancelToken:B,timeout:E,onDownloadProgress:i,onUploadProgress:e,responseType:o,headers:t,withCredentials:s="same-origin",fetchOptions:v}=tJ(A);o=o?(o+"").toLowerCase():"text";let r=Aq([Q,B&&B.toAbortSignal()],E),n;const a=r&&r.unsubscribe&&(()=>{r.unsubscribe()});let c;try{if(e&&Bq&&g!=="get"&&g!=="head"&&(c=await iq(t,C))!==0){let u=new Request(I,{method:"POST",body:C,duplex:"half"}),w;if(W.isFormData(C)&&(w=u.headers.get("content-type"))&&t.setContentType(w),u.body){const[b,y]=y2(c,A9(w2(e)));C=G2(u.body,R2,b,y)}}W.isString(s)||(s=s?"include":"omit");const d="credentials"in Request.prototype;n=new Request(I,{...v,signal:r,method:g.toUpperCase(),headers:t.normalize().toJSON(),body:C,duplex:"half",credentials:d?s:void 0});let l=await fetch(n);const h=fy&&(o==="stream"||o==="response");if(fy&&(i||h&&a)){const u={};["status","statusText","headers"].forEach(S=>{u[S]=l[S]});const w=W.toFiniteNumber(l.headers.get("content-length")),[b,y]=i&&y2(w,A9(w2(i),!0))||[];l=new Response(G2(l.body,R2,b,()=>{y&&y(),a&&a()}),u)}o=o||"text";let D=await I9[W.findKey(I9,o)||"text"](l,A);return!h&&a&&a(),await new Promise((u,w)=>{eJ(u,w,{data:D,headers:kC.from(l.headers),status:l.status,statusText:l.statusText,config:A,request:n})})}catch(d){throw a&&a(),d&&d.name==="TypeError"&&/fetch/i.test(d.message)?Object.assign(new mA("Network Error",mA.ERR_NETWORK,A,n),{cause:d.cause||d}):mA.from(d,d&&d.code,A,n)}}),Hy={http:bO,xhr:$O,fetch:eq};W.forEach(Hy,(A,I)=>{if(A){try{Object.defineProperty(A,"name",{value:I})}catch{}Object.defineProperty(A,"adapterName",{value:I})}});const L2=A=>`- ${A}`,oq=A=>W.isFunction(A)||A===null||A===!1,rJ={getAdapter:A=>{A=W.isArray(A)?A:[A];const{length:I}=A;let g,C;const Q={};for(let B=0;B`adapter ${i} `+(e===!1?"is not supported by the environment":"is not available in the build"));let E=I?B.length>1?`since : `+B.map(L2).join(` `):" "+L2(B[0]):"as no adapter specified";throw new mA("There is no suitable adapter to dispatch the request "+E,"ERR_NOT_SUPPORT")}return C},adapters:Hy};function jd(A){if(A.cancelToken&&A.cancelToken.throwIfRequested(),A.signal&&A.signal.aborted)throw new Ev(null,A)}function S2(A){return jd(A),A.headers=kC.from(A.headers),A.data=Xd.call(A,A.transformRequest),["post","put","patch"].indexOf(A.method)!==-1&&A.headers.setContentType("application/x-www-form-urlencoded",!1),rJ.getAdapter(A.adapter||rP.adapter)(A).then(function(C){return jd(A),C.data=Xd.call(A,A.transformResponse,C),C.headers=kC.from(C.headers),C},function(C){return iJ(C)||(jd(A),C&&C.response&&(C.response.data=Xd.call(A,A.transformResponse,C.response),C.response.headers=kC.from(C.response.headers))),Promise.reject(C)})}const aJ="1.8.4",d0={};["object","boolean","number","function","string","symbol"].forEach((A,I)=>{d0[A]=function(C){return typeof C===A||"a"+(I<1?"n ":" ")+A}});const T2={};d0.transitional=function(I,g,C){function Q(B,E){return"[Axios v"+aJ+"] Transitional option '"+B+"'"+E+(C?". "+C:"")}return(B,E,i)=>{if(I===!1)throw new mA(Q(E," has been removed"+(g?" in "+g:"")),mA.ERR_DEPRECATED);return g&&!T2[E]&&(T2[E]=!0,console.warn(Q(E," has been deprecated since v"+g+" and will be removed in the near future"))),I?I(B,E,i):!0}};d0.spelling=function(I){return(g,C)=>(console.warn(`${C} is likely a misspelling of ${I}`),!0)};function tq(A,I,g){if(typeof A!="object")throw new mA("options must be an object",mA.ERR_BAD_OPTION_VALUE);const C=Object.keys(A);let Q=C.length;for(;Q-- >0;){const B=C[Q],E=I[B];if(E){const i=A[B],e=i===void 0||E(i,B,A);if(e!==!0)throw new mA("option "+B+" must be "+e,mA.ERR_BAD_OPTION_VALUE);continue}if(g!==!0)throw new mA("Unknown option "+B,mA.ERR_BAD_OPTION)}}const Vn={assertOptions:tq,validators:d0},JB=Vn.validators;let Io=class{constructor(I){this.defaults=I,this.interceptors={request:new u2,response:new u2}}async request(I,g){try{return await this._request(I,g)}catch(C){if(C instanceof Error){let Q={};Error.captureStackTrace?Error.captureStackTrace(Q):Q=new Error;const B=Q.stack?Q.stack.replace(/^.+\n/,""):"";try{C.stack?B&&!String(C.stack).endsWith(B.replace(/^.+\n.+\n/,""))&&(C.stack+=` `+B):C.stack=B}catch{}}throw C}}_request(I,g){typeof I=="string"?(g=g||{},g.url=I):g=I||{},g=co(this.defaults,g);const{transitional:C,paramsSerializer:Q,headers:B}=g;C!==void 0&&Vn.assertOptions(C,{silentJSONParsing:JB.transitional(JB.boolean),forcedJSONParsing:JB.transitional(JB.boolean),clarifyTimeoutError:JB.transitional(JB.boolean)},!1),Q!=null&&(W.isFunction(Q)?g.paramsSerializer={serialize:Q}:Vn.assertOptions(Q,{encode:JB.function,serialize:JB.function},!0)),g.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?g.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:g.allowAbsoluteUrls=!0),Vn.assertOptions(g,{baseUrl:JB.spelling("baseURL"),withXsrfToken:JB.spelling("withXSRFToken")},!0),g.method=(g.method||this.defaults.method||"get").toLowerCase();let E=B&&W.merge(B.common,B[g.method]);B&&W.forEach(["delete","get","head","post","put","patch","common"],n=>{delete B[n]}),g.headers=kC.concat(E,B);const i=[];let e=!0;this.interceptors.request.forEach(function(a){typeof a.runWhen=="function"&&a.runWhen(g)===!1||(e=e&&a.synchronous,i.unshift(a.fulfilled,a.rejected))});const o=[];this.interceptors.response.forEach(function(a){o.push(a.fulfilled,a.rejected)});let t,s=0,v;if(!e){const n=[S2.bind(this),void 0];for(n.unshift.apply(n,i),n.push.apply(n,o),v=n.length,t=Promise.resolve(g);s{if(!C._listeners)return;let B=C._listeners.length;for(;B-- >0;)C._listeners[B](Q);C._listeners=null}),this.promise.then=Q=>{let B;const E=new Promise(i=>{C.subscribe(i),B=i}).then(Q);return E.cancel=function(){C.unsubscribe(B)},E},I(function(B,E,i){C.reason||(C.reason=new Ev(B,E,i),g(C.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(I){if(this.reason){I(this.reason);return}this._listeners?this._listeners.push(I):this._listeners=[I]}unsubscribe(I){if(!this._listeners)return;const g=this._listeners.indexOf(I);g!==-1&&this._listeners.splice(g,1)}toAbortSignal(){const I=new AbortController,g=C=>{I.abort(C)};return this.subscribe(g),I.signal.unsubscribe=()=>this.unsubscribe(g),I.signal}static source(){let I;return{token:new PJ(function(Q){I=Q}),cancel:I}}};function vq(A){return function(g){return A.apply(null,g)}}function rq(A){return W.isObject(A)&&A.isAxiosError===!0}const xy={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(xy).forEach(([A,I])=>{xy[I]=A});function cJ(A){const I=new Io(A),g=f8(Io.prototype.request,I);return W.extend(g,Io.prototype,I,{allOwnKeys:!0}),W.extend(g,I,null,{allOwnKeys:!0}),g.create=function(Q){return cJ(co(A,Q))},g}const VI=cJ(rP);VI.Axios=Io;VI.CanceledError=Ev;VI.CancelToken=sq;VI.isCancel=iJ;VI.VERSION=aJ;VI.toFormData=n0;VI.AxiosError=mA;VI.Cancel=VI.CanceledError;VI.all=function(I){return Promise.all(I)};VI.spread=vq;VI.isAxiosError=rq;VI.mergeConfig=co;VI.AxiosHeaders=kC;VI.formToJSON=A=>EJ(W.isHTMLForm(A)?new FormData(A):A);VI.getAdapter=rJ.getAdapter;VI.HttpStatusCode=xy;VI.default=VI;const{Axios:vXA,AxiosError:rXA,CanceledError:aXA,isCancel:PXA,CancelToken:cXA,VERSION:nXA,all:lXA,Cancel:dXA,isAxiosError:hXA,spread:DXA,toFormData:ZG,AxiosHeaders:uXA,HttpStatusCode:bXA,formToJSON:yXA,getAdapter:wXA,mergeConfig:mXA}=VI,$t={};/*! ***************************************************************************** Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT. See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. ***************************************************************************** */var Oy=function(A,I){return Oy=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(g,C){g.__proto__=C}||function(g,C){for(var Q in C)C.hasOwnProperty(Q)&&(g[Q]=C[Q])},Oy(A,I)};function nJ(A,I){Oy(A,I);function g(){this.constructor=A}A.prototype=I===null?Object.create(I):(g.prototype=I.prototype,new g)}function aq(A){var I=typeof Symbol=="function"&&A[Symbol.iterator],g=0;return I?I.call(A):{next:function(){return A&&g>=A.length&&(A=void 0),{value:A&&A[g++],done:!A}}}}function Pq(A,I){var g=typeof Symbol=="function"&&A[Symbol.iterator];if(!g)return A;var C=g.call(A),Q,B=[],E;try{for(;(I===void 0||I-- >0)&&!(Q=C.next()).done;)B.push(Q.value)}catch(i){E={error:i}}finally{try{Q&&!Q.done&&(g=C.return)&&g.call(C)}finally{if(E)throw E.error}}return B}function cq(){for(var A=[],I=0;I * https://github.com/pladaria/reconnecting-websocket * License MIT */var dq=function(){if(typeof WebSocket<"u")return WebSocket},hq=function(A){return typeof A<"u"&&!!A&&A.CLOSING===2},ue={maxReconnectionDelay:1e4,minReconnectionDelay:1e3+Math.random()*4e3,minUptime:5e3,reconnectionDelayGrowFactor:1.3,connectionTimeout:4e3,maxRetries:1/0,maxEnqueuedMessages:1/0},Dq=function(){function A(I,g,C){var Q=this;C===void 0&&(C={}),this._listeners={error:[],message:[],open:[],close:[]},this._retryCount=-1,this._shouldReconnect=!0,this._connectLock=!1,this._binaryType="blob",this._closeCalled=!1,this._messageQueue=[],this.onclose=null,this.onerror=null,this.onmessage=null,this.onopen=null,this._handleOpen=function(B){Q._debug("open event");var E=Q._options.minUptime,i=E===void 0?ue.minUptime:E;clearTimeout(Q._connectTimeout),Q._uptimeTimeout=setTimeout(function(){return Q._acceptOpen()},i),Q._ws.binaryType=Q._binaryType,Q._messageQueue.forEach(function(e){return Q._ws.send(e)}),Q._messageQueue=[],Q.onopen&&Q.onopen(B),Q._listeners.open.forEach(function(e){return Q._callEventListener(B,e)})},this._handleMessage=function(B){Q._debug("message event"),Q.onmessage&&Q.onmessage(B),Q._listeners.message.forEach(function(E){return Q._callEventListener(B,E)})},this._handleError=function(B){Q._debug("error event",B.message),Q._disconnect(void 0,B.message==="TIMEOUT"?"timeout":void 0),Q.onerror&&Q.onerror(B),Q._debug("exec error listeners"),Q._listeners.error.forEach(function(E){return Q._callEventListener(B,E)}),Q._connect()},this._handleClose=function(B){Q._debug("close event"),Q._clearTimeouts(),Q._shouldReconnect&&Q._connect(),Q.onclose&&Q.onclose(B),Q._listeners.close.forEach(function(E){return Q._callEventListener(B,E)})},this._url=I,this._protocols=g,this._options=C,this._options.startClosed&&(this._shouldReconnect=!1),this._connect()}return Object.defineProperty(A,"CONNECTING",{get:function(){return 0},enumerable:!0,configurable:!0}),Object.defineProperty(A,"OPEN",{get:function(){return 1},enumerable:!0,configurable:!0}),Object.defineProperty(A,"CLOSING",{get:function(){return 2},enumerable:!0,configurable:!0}),Object.defineProperty(A,"CLOSED",{get:function(){return 3},enumerable:!0,configurable:!0}),Object.defineProperty(A.prototype,"CONNECTING",{get:function(){return A.CONNECTING},enumerable:!0,configurable:!0}),Object.defineProperty(A.prototype,"OPEN",{get:function(){return A.OPEN},enumerable:!0,configurable:!0}),Object.defineProperty(A.prototype,"CLOSING",{get:function(){return A.CLOSING},enumerable:!0,configurable:!0}),Object.defineProperty(A.prototype,"CLOSED",{get:function(){return A.CLOSED},enumerable:!0,configurable:!0}),Object.defineProperty(A.prototype,"binaryType",{get:function(){return this._ws?this._ws.binaryType:this._binaryType},set:function(I){this._binaryType=I,this._ws&&(this._ws.binaryType=I)},enumerable:!0,configurable:!0}),Object.defineProperty(A.prototype,"retryCount",{get:function(){return Math.max(this._retryCount,0)},enumerable:!0,configurable:!0}),Object.defineProperty(A.prototype,"bufferedAmount",{get:function(){var I=this._messageQueue.reduce(function(g,C){return typeof C=="string"?g+=C.length:C instanceof Blob?g+=C.size:g+=C.byteLength,g},0);return I+(this._ws?this._ws.bufferedAmount:0)},enumerable:!0,configurable:!0}),Object.defineProperty(A.prototype,"extensions",{get:function(){return this._ws?this._ws.extensions:""},enumerable:!0,configurable:!0}),Object.defineProperty(A.prototype,"protocol",{get:function(){return this._ws?this._ws.protocol:""},enumerable:!0,configurable:!0}),Object.defineProperty(A.prototype,"readyState",{get:function(){return this._ws?this._ws.readyState:this._options.startClosed?A.CLOSED:A.CONNECTING},enumerable:!0,configurable:!0}),Object.defineProperty(A.prototype,"url",{get:function(){return this._ws?this._ws.url:""},enumerable:!0,configurable:!0}),A.prototype.close=function(I,g){if(I===void 0&&(I=1e3),this._closeCalled=!0,this._shouldReconnect=!1,this._clearTimeouts(),!this._ws){this._debug("close enqueued: no ws instance");return}if(this._ws.readyState===this.CLOSED){this._debug("close: already closed");return}this._ws.close(I,g)},A.prototype.reconnect=function(I,g){this._shouldReconnect=!0,this._closeCalled=!1,this._retryCount=-1,!this._ws||this._ws.readyState===this.CLOSED?this._connect():(this._disconnect(I,g),this._connect())},A.prototype.send=function(I){if(this._ws&&this._ws.readyState===this.OPEN)this._debug("send",I),this._ws.send(I);else{var g=this._options.maxEnqueuedMessages,C=g===void 0?ue.maxEnqueuedMessages:g;this._messageQueue.length"],I))},A.prototype._getNextDelay=function(){var I=this._options,g=I.reconnectionDelayGrowFactor,C=g===void 0?ue.reconnectionDelayGrowFactor:g,Q=I.minReconnectionDelay,B=Q===void 0?ue.minReconnectionDelay:Q,E=I.maxReconnectionDelay,i=E===void 0?ue.maxReconnectionDelay:E,e=0;return this._retryCount>0&&(e=B*Math.pow(C,this._retryCount-1),e>i&&(e=i)),this._debug("next delay",e),e},A.prototype._wait=function(){var I=this;return new Promise(function(g){setTimeout(g,I._getNextDelay())})},A.prototype._getNextUrl=function(I){if(typeof I=="string")return Promise.resolve(I);if(typeof I=="function"){var g=I();if(typeof g=="string")return Promise.resolve(g);if(g.then)return g}throw Error("Invalid URL")},A.prototype._connect=function(){var I=this;if(!(this._connectLock||!this._shouldReconnect)){this._connectLock=!0;var g=this._options,C=g.maxRetries,Q=C===void 0?ue.maxRetries:C,B=g.connectionTimeout,E=B===void 0?ue.connectionTimeout:B,i=g.WebSocket,e=i===void 0?dq():i;if(this._retryCount>=Q){this._debug("max retries reached",this._retryCount,">=",Q);return}if(this._retryCount++,this._debug("connect",this._retryCount),this._removeListeners(),!hq(e))throw Error("No valid WebSocket class provided");this._wait().then(function(){return I._getNextUrl(I._url)}).then(function(o){I._closeCalled||(I._debug("connect",{url:o,protocols:I._protocols}),I._ws=I._protocols?new e(o,I._protocols):new e(o),I._ws.binaryType=I._binaryType,I._connectLock=!1,I._addListeners(),I._connectTimeout=setTimeout(function(){return I._handleTimeout()},E))})}},A.prototype._handleTimeout=function(){this._debug("timeout event"),this._handleError(new nq(Error("TIMEOUT"),this))},A.prototype._disconnect=function(I,g){if(I===void 0&&(I=1e3),this._clearTimeouts(),!!this._ws){this._removeListeners();try{this._ws.close(I,g),this._handleClose(new lq(I,g,this))}catch{}}},A.prototype._acceptOpen=function(){this._debug("accept open"),this._retryCount=0},A.prototype._callEventListener=function(I,g){"handleEvent"in g?g.handleEvent(I):g(I)},A.prototype._removeListeners=function(){this._ws&&(this._debug("removeListeners"),this._ws.removeEventListener("open",this._handleOpen),this._ws.removeEventListener("close",this._handleClose),this._ws.removeEventListener("message",this._handleMessage),this._ws.removeEventListener("error",this._handleError))},A.prototype._addListeners=function(){this._ws&&(this._debug("addListeners"),this._ws.addEventListener("open",this._handleOpen),this._ws.addEventListener("close",this._handleClose),this._ws.addEventListener("message",this._handleMessage),this._ws.addEventListener("error",this._handleError))},A.prototype._clearTimeouts=function(){clearTimeout(this._connectTimeout),clearTimeout(this._uptimeTimeout)},A}();class sI{constructor(I){this._client=I}}class uq extends sI{async create(I,g){return(await this._client.post("/v1/bot/create",I,!1,g)).data}async update(I,g){return(await this._client.post("/v1/bot/update",I,!1,g)).data}async list(I,g){return(await this._client.get("/v1/space/published_bots_list",I,!1,g)).data}async publish(I,g){return(await this._client.post("/v1/bot/publish",I,!1,g)).data}async retrieve(I,g){return(await this._client.get("/v1/bot/get_online_info",I,!1,g)).data}}function bq(A){let I=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"";try{return JSON.parse(A)}catch{return I}}function yq(A){return new Promise(I=>{setTimeout(I,A)})}function dJ(){return typeof uni<"u"}function Qa(){return typeof window<"u"}function wq(A){if(typeof A!="object"||A===null)return!1;const I=Object.getPrototypeOf(A);if(I===null)return!0;let g=I;for(;Object.getPrototypeOf(g)!==null;)g=Object.getPrototypeOf(g);return I===g}function ZQ(){for(var A=arguments.length,I=new Array(A),g=0;g{if(Q===void 0)return C||{};for(const B in Q)Object.prototype.hasOwnProperty.call(Q,B)&&(wq(Q[B])&&!Array.isArray(Q[B])?C[B]=ZQ(C[B]||{},Q[B]):C[B]=Q[B]);return C},{})}function mq(A){return A==null?void 0:A.startsWith("pat_")}function Gq(A,I){const g=Object.entries(I).filter(C=>{let[Q,B]=C;return B!=null&&B!==""}).map(C=>{let[Q,B]=C;return`${Q}=${B}`}).join("&");return`${A}?${g}`}class $i extends Error{}class Fg extends $i{static makeMessage(I,g,C,Q){if(!g&&C)return C;if(g){const B=[],{code:E,msg:i,error:e}=g;E&&B.push(`code: ${E}`),i&&B.push(`msg: ${i}`),e!=null&&e.detail&&i!==e.detail&&B.push(`detail: ${e.detail}`);const o=(e==null?void 0:e.logid)||(Q==null?void 0:Q["x-tt-logid"]);return o&&B.push(`logid: ${o}`),B.join(", ")}return I?`http status code: ${I} (no body)`:"(no status code or body)"}static generate(I,g,C,Q){if(!I)return new Rq({cause:Lq(g)});const B=g;return I===400||(B==null?void 0:B.code)===4e3?new DJ(I,B,C,Q):I===401||(B==null?void 0:B.code)===4100?new uJ(I,B,C,Q):I===403||(B==null?void 0:B.code)===4101?new bJ(I,B,C,Q):I===404||(B==null?void 0:B.code)===4200?new yJ(I,B,C,Q):I===429||(B==null?void 0:B.code)===4013?new wJ(I,B,C,Q):I===408?new KG(I,B,C,Q):I===502?new GJ(I,B,C,Q):I>=500?new mJ(I,B,C,Q):new Fg(I,B,C,Q)}constructor(I,g,C,Q){var B,E;super(`${Fg.makeMessage(I,g,C,Q)}`),this.status=I,this.headers=Q,this.logid=(g==null||(B=g.detail)===null||B===void 0?void 0:B.logid)||(Q==null?void 0:Q["x-tt-logid"]),this.code=g==null?void 0:g.code,this.msg=g==null?void 0:g.msg,this.detail=g==null||(E=g.error)===null||E===void 0?void 0:E.detail,this.rawError=g}}class Rq extends Fg{constructor({message:I}){super(void 0,void 0,I||"Connection error.",void 0),this.status=void 0}}class hJ extends Fg{constructor(I){super(void 0,void 0,I||"Request was aborted.",void 0),this.name="UserAbortError",this.status=void 0}}class DJ extends Fg{constructor(...I){super(...I),this.name="BadRequestError",this.status=400}}class uJ extends Fg{constructor(...I){super(...I),this.name="AuthenticationError",this.status=401}}class bJ extends Fg{constructor(...I){super(...I),this.name="PermissionDeniedError",this.status=403}}class yJ extends Fg{constructor(...I){super(...I),this.name="NotFoundError",this.status=404}}let KG=class extends Fg{constructor(...I){super(...I),this.name="TimeoutError",this.status=408}};class wJ extends Fg{constructor(...I){super(...I),this.name="RateLimitError",this.status=429}}class mJ extends Fg{constructor(...I){super(...I),this.name="InternalServerError",this.status=500}}class GJ extends Fg{constructor(...I){super(...I),this.name="GatewayError",this.status=502}}const Lq=A=>A instanceof Error?A:new Error(A);class Sq extends sI{async list(I,g,C){const Q=`/v3/chat/message/list?conversation_id=${I}&chat_id=${g}`;return(await this._client.get(Q,void 0,!1,C)).data}}const fd=()=>(Math.random()*new Date().getTime()).toString(),zn=A=>A==null?void 0:A.map(I=>({...I,content:typeof I.content=="object"?JSON.stringify(I.content):I.content})),Hd=A=>{if(A)for(const[I,g]of Object.entries(A))typeof g=="object"&&(A[I]=JSON.stringify(g));return A};class Tq extends sI{async create(I,g){I.user_id||(I.user_id=fd());const{conversation_id:C,...Q}=I,B=`/v3/chat${C?`?conversation_id=${C}`:""}`,E={...Q,additional_messages:zn(I.additional_messages),shortcut_command:I.shortcut_command?{...I.shortcut_command,parameters:Hd(I.shortcut_command.parameters)}:void 0,stream:!1};return(await this._client.post(B,E,!1,g)).data}async createAndPoll(I,g){I.user_id||(I.user_id=fd());const{conversation_id:C,...Q}=I,B=`/v3/chat${C?`?conversation_id=${C}`:""}`,E={...Q,additional_messages:zn(I.additional_messages),shortcut_command:I.shortcut_command?{...I.shortcut_command,parameters:Hd(I.shortcut_command.parameters)}:void 0,stream:!1},i=await this._client.post(B,E,!1,g),e=i.data.id,o=i.data.conversation_id;let t;for(;await yq(100),t=await this.retrieve(o,e),!(t.status==="completed"||t.status==="failed"||t.status==="requires_action"););const s=await this.messages.list(o,e);return{chat:t,messages:s}}async*stream(I,g){I.user_id||(I.user_id=fd());const{conversation_id:C,...Q}=I,B=`/v3/chat${C?`?conversation_id=${C}`:""}`,E={...Q,additional_messages:zn(I.additional_messages),shortcut_command:I.shortcut_command?{...I.shortcut_command,parameters:Hd(I.shortcut_command.parameters)}:void 0,stream:!0},i=await this._client.post(B,E,!0,g);for await(const e of i)if(e.event==="done")yield{event:e.event,data:"[DONE]"};else try{yield{event:e.event,data:JSON.parse(e.data)}}catch{throw new $i(`Could not parse message into JSON:${e.data}`)}}async retrieve(I,g,C){const Q=`/v3/chat/retrieve?conversation_id=${I}&chat_id=${g}`;return(await this._client.post(Q,void 0,!1,C)).data}async cancel(I,g,C){const Q="/v3/chat/cancel",B={conversation_id:I,chat_id:g};return(await this._client.post(Q,B,!1,C)).data}async*submitToolOutputs(I,g){const{conversation_id:C,chat_id:Q,...B}=I,E=`/v3/chat/submit_tool_outputs?conversation_id=${I.conversation_id}&chat_id=${I.chat_id}`,i={...B};if(I.stream===!1)return(await this._client.post(E,i,!1,g)).data;{const e=await this._client.post(E,i,!0,g);for await(const o of e)if(o.event==="done")yield{event:o.event,data:"[DONE]"};else try{yield{event:o.event,data:JSON.parse(o.data)}}catch{throw new $i(`Could not parse message into JSON:${o.data}`)}}}constructor(...I){super(...I),this.messages=new Sq(this._client)}}var Uq=function(A){return A.CONVERSATION_CHAT_CREATED="conversation.chat.created",A.CONVERSATION_CHAT_IN_PROGRESS="conversation.chat.in_progress",A.CONVERSATION_CHAT_COMPLETED="conversation.chat.completed",A.CONVERSATION_CHAT_FAILED="conversation.chat.failed",A.CONVERSATION_CHAT_REQUIRES_ACTION="conversation.chat.requires_action",A.CONVERSATION_MESSAGE_DELTA="conversation.message.delta",A.CONVERSATION_MESSAGE_COMPLETED="conversation.message.completed",A.CONVERSATION_AUDIO_DELTA="conversation.audio.delta",A.DONE="done",A.ERROR="error",A}({}),RXA=function(A){return A.User="user",A.Assistant="assistant",A}({});class Fq extends sI{async create(I,g,C){const Q=`/v1/conversation/message/create?conversation_id=${I}`;return(await this._client.post(Q,g,!1,C)).data}async update(I,g,C,Q){const B=`/v1/conversation/message/modify?conversation_id=${I}&message_id=${g}`;return(await this._client.post(B,C,!1,Q)).message}async retrieve(I,g,C){const Q=`/v1/conversation/message/retrieve?conversation_id=${I}&message_id=${g}`;return(await this._client.get(Q,null,!1,C)).data}async list(I,g,C){const Q=`/v1/conversation/message/list?conversation_id=${I}`;return await this._client.post(Q,g,!1,C)}async delete(I,g,C){const Q=`/v1/conversation/message/delete?conversation_id=${I}&message_id=${g}`;return(await this._client.post(Q,void 0,!1,C)).data}}class Yq extends sI{async create(I,g){return(await this._client.post("/v1/conversation/create",I,!1,g)).data}async retrieve(I,g){const C=`/v1/conversation/retrieve?conversation_id=${I}`;return(await this._client.get(C,null,!1,g)).data}async list(I,g){return(await this._client.get("/v1/conversations",I,!1,g)).data}async clear(I,g){const C=`/v1/conversations/${I}/clear`;return(await this._client.post(C,null,!1,g)).data}constructor(...I){super(...I),this.messages=new Fq(this._client)}}class kq extends sI{async upload(I,g){return(await this._client.post("/v1/files/upload",ZG(I),!1,g)).data}async retrieve(I,g){const C=`/v1/files/retrieve?file_id=${I}`;return(await this._client.get(C,null,!1,g)).data}}class pq extends sI{async create(I,g){return await this._client.post("/v1/workflow/run",I,!1,g)}async*stream(I,g){const Q=await this._client.post("/v1/workflow/stream_run",I,!0,g);for await(const B of Q)try{B.event==="Done"?yield new U2(Number(B.id),"Done"):yield new U2(Number(B.id),B.event,JSON.parse(B.data))}catch{throw new $i(`Could not parse message into JSON:${B.data}`)}}async resume(I,g){return await this._client.post("/v1/workflow/stream_resume",I,!1,g)}async history(I,g,C){const Q=`/v1/workflows/${I}/run_histories/${g}`;return(await this._client.get(Q,void 0,!1,C)).data}}class U2{constructor(I,g,C){this.id=I,this.event=g,this.data=C}}class Nq extends sI{async*stream(I,g){const C="/v1/workflows/chat",Q={...I,additional_messages:zn(I.additional_messages)},B=await this._client.post(C,Q,!0,g);for await(const E of B)if(E.event===Uq.DONE)yield{event:E.event,data:"[DONE]"};else try{yield{event:E.event,data:JSON.parse(E.data)}}catch{throw new $i(`Could not parse message into JSON:${E.data}`)}}}class Zq extends sI{constructor(...I){super(...I),this.runs=new pq(this._client),this.chat=new Nq(this._client)}}class Kq extends sI{async list(I,g){const Q=await this._client.get("/v1/workspaces",I,!1,g);return bq(Q,Q).data}}const dc={"agw-js-conv":"str"};class Jq extends sI{list(I,g){return this._client.get("/open_api/knowledge/document/list",I,!1,ZQ(g,{headers:dc}))}async create(I,g){return(await this._client.post("/open_api/knowledge/document/create",I,!1,ZQ(g,{headers:dc}))).document_infos}async delete(I,g){await this._client.post("/open_api/knowledge/document/delete",I,!1,ZQ(g,{headers:dc}))}async update(I,g){await this._client.post("/open_api/knowledge/document/update",I,!1,ZQ(g,{headers:dc}))}}class Wq extends sI{constructor(...I){super(...I),this.documents=new Jq(this._client)}}const hc={"agw-js-conv":"str"};class Vq extends sI{async list(I,g){return await this._client.post("/open_api/knowledge/document/list",I,!1,ZQ(g,{headers:hc}))}async create(I,g){return(await this._client.post("/open_api/knowledge/document/create",I,!1,ZQ(g,{headers:hc}))).document_infos}async delete(I,g){await this._client.post("/open_api/knowledge/document/delete",I,!1,ZQ(g,{headers:hc}))}async update(I,g){await this._client.post("/open_api/knowledge/document/update",I,!1,ZQ(g,{headers:hc}))}}class zq extends sI{async update(I,g,C,Q){const B=`/v1/datasets/${I}/images/${g}`;await this._client.put(B,C,!1,Q)}async list(I,g,C){const Q=`/v1/datasets/${I}/images`;return(await this._client.get(Q,g,!1,C)).data}}class Mq extends sI{async create(I,g){return(await this._client.post("/v1/datasets",I,!1,g)).data}async list(I,g){return(await this._client.get("/v1/datasets",I,!1,g)).data}async update(I,g,C){const Q=`/v1/datasets/${I}`;await this._client.put(Q,g,!1,C)}async delete(I,g){const C=`/v1/datasets/${I}`;await this._client.delete(C,!1,g)}async process(I,g,C){const Q=`/v1/datasets/${I}/process`;return(await this._client.post(Q,g,!1,C)).data}constructor(...I){super(...I),this.documents=new Vq(this._client),this.images=new zq(this._client)}}class Xq extends sI{async clone(I,g){return(await this._client.post("/v1/audio/voices/clone",ZG(I),!1,g)).data}async list(I,g){return(await this._client.get("/v1/audio/voices",I,!1,g)).data}}class jq extends sI{async create(I,g){return(await this._client.post("/v1/audio/transcriptions",ZG(I),!1,g)).data}}class fq extends sI{async create(I,g){return await this._client.post("/v1/audio/speech",{...I,sample_rate:I.sample_rate||24e3},!1,ZQ(g,{responseType:"arraybuffer"}))}}class Hq extends sI{async create(I,g){return(await this._client.post("/v1/audio/rooms",I,!1,g)).data}}let xq=class extends sI{constructor(...I){super(...I),this.rooms=new Hq(this._client),this.voices=new Xq(this._client),this.speech=new fq(this._client),this.transcriptions=new jq(this._client)}};class Oq extends sI{async duplicate(I,g,C){const Q=`/v1/templates/${I}/duplicate`;return(await this._client.post(Q,g,!1,C)).data}}class qq extends sI{async create(I,g){const C=Gq("/v1/chat",I);return await this._client.makeWebsocket(C,g)}}class _q extends sI{async create(I){return await this._client.makeWebsocket("/v1/audio/transcriptions",I)}}class $q extends sI{async create(I){return await this._client.makeWebsocket("/v1/audio/speech",I)}}class A6 extends sI{constructor(...I){super(...I),this.speech=new $q(this._client),this.transcriptions=new _q(this._client)}}var I6=function(A){return A.CLIENT_ERROR="client_error",A.CLOSED="closed",A.ALL="all",A.ERROR="error",A.INPUT_TEXT_BUFFER_APPEND="input_text_buffer.append",A.INPUT_TEXT_BUFFER_COMPLETE="input_text_buffer.complete",A.SPEECH_UPDATE="speech.update",A.SPEECH_UPDATED="speech.updated",A.SPEECH_CREATED="speech.created",A.INPUT_TEXT_BUFFER_COMPLETED="input_text_buffer.completed",A.SPEECH_AUDIO_UPDATE="speech.audio.update",A.SPEECH_AUDIO_COMPLETED="speech.audio.completed",A.INPUT_AUDIO_BUFFER_APPEND="input_audio_buffer.append",A.INPUT_AUDIO_BUFFER_COMPLETE="input_audio_buffer.complete",A.TRANSCRIPTIONS_UPDATE="transcriptions.update",A.INPUT_AUDIO_BUFFER_CLEAR="input_audio_buffer.clear",A.TRANSCRIPTIONS_CREATED="transcriptions.created",A.INPUT_AUDIO_BUFFER_COMPLETED="input_audio_buffer.completed",A.TRANSCRIPTIONS_MESSAGE_UPDATE="transcriptions.message.update",A.TRANSCRIPTIONS_MESSAGE_COMPLETED="transcriptions.message.completed",A.INPUT_AUDIO_BUFFER_CLEARED="input_audio_buffer.cleared",A.TRANSCRIPTIONS_UPDATED="transcriptions.updated",A.CHAT_UPDATE="chat.update",A.CONVERSATION_CHAT_SUBMIT_TOOL_OUTPUTS="conversation.chat.submit_tool_outputs",A.CHAT_CREATED="chat.created",A.CHAT_UPDATED="chat.updated",A.CONVERSATION_CHAT_CREATED="conversation.chat.created",A.CONVERSATION_MESSAGE_CREATE="conversation.message.create",A.CONVERSATION_CLEAR="conversation.clear",A.CONVERSATION_CHAT_IN_PROGRESS="conversation.chat.in_progress",A.CONVERSATION_MESSAGE_DELTA="conversation.message.delta",A.CONVERSATION_CHAT_REQUIRES_ACTION="conversation.chat.requires_action",A.CONVERSATION_MESSAGE_COMPLETED="conversation.message.completed",A.CONVERSATION_AUDIO_DELTA="conversation.audio.delta",A.CONVERSATION_AUDIO_COMPLETED="conversation.audio.completed",A.CONVERSATION_CHAT_COMPLETED="conversation.chat.completed",A.CONVERSATION_CHAT_FAILED="conversation.chat.failed",A.CONVERSATION_CLEARED="conversation.cleared",A.INPUT_AUDIO_BUFFER_SPEECH_STARTED="input_audio_buffer.speech_started",A.INPUT_AUDIO_BUFFER_SPEECH_STOPPED="input_audio_buffer.speech_stopped",A.CONVERSATION_CHAT_CANCEL="conversation.chat.cancel",A.CONVERSATION_CHAT_CANCELED="conversation.chat.canceled",A.CONVERSATION_AUDIO_TRANSCRIPT_UPDATE="conversation.audio_transcript.update",A.CONVERSATION_AUDIO_TRANSCRIPT_COMPLETED="conversation.audio_transcript.completed",A.DUMP_AUDIO="dump.audio",A}({});class g6 extends sI{constructor(...I){super(...I),this.audio=new A6(this._client),this.chat=new qq(this._client)}}class C6{get readyState(){return this.rws.readyState}send(I){return this.rws.send(JSON.stringify(I))}close(I,g){return this.rws.close(I,g)}reconnect(I,g){return this.rws.reconnect(I,g)}addEventListener(I,g){this.rws.addEventListener(I,g)}removeEventListener(I,g){this.rws.removeEventListener(I,g)}constructor(I,g={}){this.onmessage=null,this.onopen=null,this.onclose=null,this.onerror=null;const C=I.includes("?")?"&":"?",{authorization:Q}=g.headers||{};this.rws=new Dq(`${I}${C}authorization=${Q}`,[],{WebSocket:Qa()?window.WebSocket:class extends $t{constructor(B,E){super(B,E,{headers:g.headers})}},...g}),this.rws.addEventListener("message",B=>{try{var E,i;const e=JSON.parse(B.data);(E=(i=this).onmessage)===null||E===void 0||E.call(i,e,B)}catch(e){console.error("WebSocketAPI onmessage error",e)}}),this.rws.addEventListener("open",B=>{var E,i;(E=(i=this).onopen)===null||E===void 0||E.call(i,B)}),this.rws.addEventListener("close",B=>{var E,i;(E=(i=this).onclose)===null||E===void 0||E.call(i,B)}),this.rws.addEventListener("error",B=>{var E,i,e,o,t,s,v,r;const{readyState:n}=this.rws;if(n===3)return;const a=(e=B.target)===null||e===void 0||(i=e._req)===null||i===void 0||(E=i.res)===null||E===void 0?void 0:E.statusCode,c=((s=B.target)===null||s===void 0||(t=s._req)===null||t===void 0||(o=t.res)===null||o===void 0?void 0:o.rawHeaders)||[],d=c.findIndex(u=>u==="X-Tt-Logid"),l=d!==-1?c[d+1]:void 0,h={id:"0",event_type:I6.ERROR,data:{code:-1,msg:"WebSocket error"},detail:{logid:l}};if(a===401)h.data.code=401,h.data.msg="Unauthorized";else if(a===403)h.data.code=403,h.data.msg="Forbidden";else{h.data.code=500;var D;h.data.msg=String((D=B==null?void 0:B.error)!==null&&D!==void 0?D:"")||"WebSocket error"}(v=(r=this).onerror)===null||v===void 0||v.call(r,h,B)})}}var Q6=JSON.parse('{"name":"@coze/api","version":"1.2.0","description":"Official Coze Node.js SDK for seamless AI integration into your applications | 扣子官方 Node.js SDK,助您轻松集成 AI 能力到应用中","keywords":["coze","ai","nodejs","sdk","chatbot","typescript"],"homepage":"https://github.com/coze-dev/coze-js/tree/main/packages/coze-js","bugs":{"url":"https://github.com/coze-dev/coze-js/issues"},"repository":{"type":"git","url":"https://github.com/coze-dev/coze-js.git","directory":"packages/coze-js"},"license":"MIT","author":"Leeight ","exports":{".":{"require":"./dist/cjs/index.js","import":"./dist/esm/index.mjs","types":"./dist/types/index.d.ts"},"./ws-tools":{"require":"./dist/cjs/ws-tools/index.js","import":"./dist/esm/ws-tools/index.mjs","types":"./dist/types/ws-tools/ws-tools/index.d.ts"}},"main":"dist/cjs/index.js","unpkg":"dist/umd/index.js","module":"dist/esm/index.mjs","browser":{"crypto":false,"os":false,"jsonwebtoken":false,"node-fetch":false,"ws":false},"typesVersions":{"*":{".":["dist/types/index.d.ts"],"ws-tools":["dist/types/ws-tools/ws-tools/index.d.ts"]}},"files":["dist","LICENSE","README.md","README.zh-CN.md"],"scripts":{"build":"rslib build","format":"prettier --write .","lint":"eslint ./ --cache --quiet","start":"rslib build -w","test":"vitest","test:cov":"vitest --coverage --run"},"dependencies":{"agora-extension-ai-denoiser":"^1.0.0","agora-rtc-sdk-ng":"^4.23.2","agora-rte-extension":"^1.2.4","jsonwebtoken":"^9.0.2","node-fetch":"^2.x","reconnecting-websocket":"^4.4.0","uuid":"^10.0.0","ws":"^8.11.0"},"devDependencies":{"@coze-infra/eslint-config":"workspace:*","@coze-infra/ts-config":"workspace:*","@coze-infra/vitest-config":"workspace:*","@rslib/core":"0.0.18","@swc/core":"^1.3.14","@types/jsonwebtoken":"^9.0.0","@types/node":"^20","@types/node-fetch":"^2.x","@types/uuid":"^9.0.1","@types/whatwg-fetch":"^0.0.33","@types/ws":"^8.5.1","@vitest/coverage-v8":"~2.1.4","axios":"^1.7.7","typescript":"^5.5.3","vitest":"~2.1.4"},"peerDependencies":{"axios":"^1.7.1"},"cozePublishConfig":{"exports":{".":{"require":"./dist/cjs/index.js","import":"./dist/esm/index.mjs","types":"./dist/types/index.d.ts"},"./ws-tools":{"require":"./dist/cjs/ws-tools/index.js","import":"./dist/esm/ws-tools/index.mjs","types":"./dist/types/ws-tools/ws-tools/index.d.ts"}},"main":"dist/cjs/index.js","module":"dist/esm/index.mjs","types":"dist/types/index.d.ts"},"types":"dist/types/index.d.ts"}');const{version:h0}=Q6,RJ=()=>{const A=process.version.slice(1),{platform:I}=process;let g=I.toLowerCase(),C=$t.release();if(I==="darwin"){g="macos";try{const Q=$t.release().split(".");if(Q.length>=2){const B=parseInt(Q[0],10);!isNaN(B)&&B>=9&&(C=`10.${B-9}.${Q[1]}`)}}catch{}}else I==="win32"?(g="windows",C=$t.release()):I==="linux"&&(g="linux",C=$t.release());return{osName:g,osVersion:C,nodeVersion:A}},F2=()=>{const{nodeVersion:A,osName:I,osVersion:g}=RJ();return`coze-js/${h0} node/${A} ${I}/${g}`.toLowerCase()},Y2=()=>{const{osVersion:A,nodeVersion:I,osName:g}=RJ();return JSON.stringify({version:h0,lang:"node",lang_version:I,os_name:g,os_version:A})},k2=()=>{const A={name:"unknown",version:"unknown"},I={name:"unknown",version:"unknown"},{userAgent:g}=navigator;if(g.indexOf("Windows")>-1){var C;I.name="windows";const t=((C=g.match(/Windows NT ([0-9.]+)/))===null||C===void 0?void 0:C[1])||"unknown";I.version=t}else if(g.indexOf("Mac OS X")>-1){var Q;I.name="macos",I.version=(((Q=g.match(/Mac OS X ([0-9_]+)/))===null||Q===void 0?void 0:Q[1])||"unknown").replace(/_/g,".")}else if(g.indexOf("Linux")>-1){var B;I.name="linux",I.version=((B=g.match(/Linux ([0-9.]+)/))===null||B===void 0?void 0:B[1])||"unknown"}if(g.indexOf("Chrome")>-1){var E;A.name="chrome",A.version=((E=g.match(/Chrome\/([0-9.]+)/))===null||E===void 0?void 0:E[1])||"unknown"}else if(g.indexOf("Firefox")>-1){var i;A.name="firefox",A.version=((i=g.match(/Firefox\/([0-9.]+)/))===null||i===void 0?void 0:i[1])||"unknown"}else if(g.indexOf("Safari")>-1){var e;A.name="safari",A.version=((e=g.match(/Version\/([0-9.]+)/))===null||e===void 0?void 0:e[1])||"unknown"}const o={version:h0,browser:A.name,browser_version:A.version,os_name:I.name,os_version:I.version};return JSON.stringify(o)},B6=()=>{const A=uni.getSystemInfoSync(),I={name:"unknown",version:"unknown"},g={name:"unknown",version:"unknown"};if(A.platform==="android"?(g.name="android",g.version=A.system||"unknown"):A.platform==="ios"?(g.name="ios",g.version=A.system||"unknown"):A.platform==="windows"?(g.name="windows",g.version=A.system||"unknown"):A.platform==="mac"?(g.name="macos",g.version=A.system||"unknown"):(g.name=A.platform,g.version=A.system||"unknown"),A.AppPlatform)I.name=A.AppPlatform.toLowerCase(),I.version=A.appVersion||"unknown";else if(A.uniPlatform)I.name=A.uniPlatform,I.version=A.SDKVersion||"unknown";else{const{appName:Q,appVersion:B}=A;Q&&(I.name=Q.toLowerCase(),I.version=B||"unknown")}const C={version:h0,framework:"uniapp",platform:I.name,platform_version:I.version,os_name:g.name,os_version:g.version,screen_width:A.screenWidth,screen_height:A.screenHeight,device_model:A.model,device_brand:A.brand};return JSON.stringify(C)},p2=A=>{if(!A.isAxiosError&&(!A.code||!A.message))return new $i(`Unexpected error: ${A.message}`);if(A.code==="ECONNABORTED"&&A.message.includes("timeout")||A.code==="ETIMEDOUT"){var I;return new KG(408,void 0,`Request timed out: ${A.message}`,(I=A.response)===null||I===void 0?void 0:I.headers)}if(A.code==="ERR_CANCELED")return new hJ(A.message);var g,C,Q;return Fg.generate(((g=A.response)===null||g===void 0?void 0:g.status)||500,(C=A.response)===null||C===void 0?void 0:C.data,A.message,(Q=A.response)===null||Q===void 0?void 0:Q.headers)},E6=async A=>{const I=await $t(A.url,{body:A.data,...A});return{data:I.body,...I}},i6=()=>{if(Qa()||dJ())return!0;const A=process.version.slice(1);return LJ(A,"18.0.0")>=0};async function e6(A){let I=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const g=I.axiosInstance||VI;if(I.isStreaming&&o6(g)){const Q=g.VERSION||VI.VERSION;if(!Q||LJ(Q,"1.7.1")<0)throw new $i("Streaming requests require axios version 1.7.1 or higher. Please upgrade your axios version.")}const C=await g({url:A,responseType:I.isStreaming?"stream":"json",adapter:I.isStreaming?i6()?"fetch":E6:void 0,...I}).catch(Q=>{throw p2(Q)});return{async*stream(){try{const Q=C.data,B=Q[Symbol.asyncIterator]?Q[Symbol.asyncIterator]():Q.getReader(),E=new TextDecoder,i={};let e="";for(;;){const{done:o,value:t}=await(B.next?B.next():B.read());if(o){e&&(i.event="error",i.data=e,yield i);break}e+=E.decode(t,{stream:!0});const s=e.split(` `);for(let v=0;vC.data,response:C}}function LJ(A,I){const g=A.split(".").map(Number),C=I.split(".").map(Number);for(let Q=0;Q<3;Q++){const B=g[Q]||0,E=C[Q]||0;if(B>E)return 1;if(B2&&arguments[2]!==void 0&&arguments[2],Q=arguments.length>3?arguments[3]:void 0;return this.makeRequest(I,"POST",g,C,Q)}async get(I,g,C,Q){const B=Object.entries(g||{}).map(E=>{let[i,e]=E;return`${i}=${e}`}).join("&");return this.makeRequest(B?`${I}${I.includes("?")?"&":"?"}${B}`:I,"GET",void 0,C,Q)}async put(I,g,C,Q){return this.makeRequest(I,"PUT",g,C,Q)}async delete(I,g,C){return this.makeRequest(I,"DELETE",void 0,g,C)}async makeWebsocket(I,g){const C=`${this.baseWsURL}${I}`,Q=await this.buildWebsocketOptions(g);return this.debugLog(g==null?void 0:g.debug,`--- websocket url: ${C}`),this.debugLog(g==null?void 0:g.debug,"--- websocket options:",Q),new C6(C,Q)}getConfig(){return this._config}debugLog(){let I=arguments.length>0&&arguments[0]!==void 0&&arguments[0];for(var g=arguments.length,C=new Array(g>1?g-1:0),Q=1;Q0&&Ci[0]<4?1:+(Ci[0]+Ci[1])),!Mn&&$d&&(!(Ci=$d.match(/Edge\/(\d+)/))||Ci[1]>=74)&&(Ci=$d.match(/Chrome\/(\d+)/))&&(Mn=+Ci[1]);var PP=Mn,j2=PP,p6=II,N6=QI,Z6=N6.String,ev=!!Object.getOwnPropertySymbols&&!p6(function(){var A=Symbol("symbol detection");return!Z6(A)||!(Object(A)instanceof Symbol)||!Symbol.sham&&j2&&j2<41}),K6=ev,ZJ=K6&&!Symbol.sham&&typeof Symbol.iterator=="symbol",J6=kg,W6=xI,V6=fg,z6=ZJ,M6=Object,cP=z6?function(A){return typeof A=="symbol"}:function(A){var I=J6("Symbol");return W6(I)&&V6(I.prototype,M6(A))},X6=String,ov=function(A){try{return X6(A)}catch{return"Object"}},j6=xI,f6=ov,H6=TypeError,fQ=function(A){if(j6(A))return A;throw new H6(f6(A)+" is not a function")},x6=fQ,O6=aP,y0=function(A,I){var g=A[I];return O6(g)?void 0:x6(g)},Ah=Bg,Ih=xI,gh=rC,q6=TypeError,_6=function(A,I){var g,C;if(I==="string"&&Ih(g=A.toString)&&!gh(C=Ah(g,A))||Ih(g=A.valueOf)&&!gh(C=Ah(g,A))||I!=="string"&&Ih(g=A.toString)&&!gh(C=Ah(g,A)))return C;throw new q6("Can't convert object to primitive value")},KJ={exports:{}},JJ=!0,f2=QI,$6=Object.defineProperty,A_=function(A,I){try{$6(f2,A,{value:I,configurable:!0,writable:!0})}catch{f2[A]=I}return I},I_=QI,g_=A_,H2="__core-js_shared__",x2=KJ.exports=I_[H2]||g_(H2,{});(x2.versions||(x2.versions=[])).push({version:"3.39.0",mode:"pure",copyright:"© 2014-2024 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.39.0/LICENSE",source:"https://github.com/zloirock/core-js"});var WG=KJ.exports,O2=WG,tv=function(A,I){return O2[A]||(O2[A]=I||{})},C_=To,Q_=Object,HQ=function(A){return Q_(C_(A))},B_=fA,E_=HQ,i_=B_({}.hasOwnProperty),hg=Object.hasOwn||function(A,I){return i_(E_(A),I)},e_=fA,o_=0,t_=Math.random(),s_=e_(1 .toString),VG=function(A){return"Symbol("+(A===void 0?"":A)+")_"+s_(++o_+t_,36)},v_=QI,r_=tv,q2=hg,a_=VG,P_=ev,c_=ZJ,As=v_.Symbol,Ch=r_("wks"),n_=c_?As.for||As:As&&As.withoutSetter||a_,vI=function(A){return q2(Ch,A)||(Ch[A]=P_&&q2(As,A)?As[A]:n_("Symbol."+A)),Ch[A]},l_=Bg,_2=rC,$2=cP,d_=y0,h_=_6,D_=vI,u_=TypeError,b_=D_("toPrimitive"),y_=function(A,I){if(!_2(A)||$2(A))return A;var g,C=d_(A,b_);if(C){if(I===void 0&&(I="default"),g=l_(C,A,I),!_2(g)||$2(g))return g;throw new u_("Can't convert object to primitive value")}return I===void 0&&(I="number"),h_(A,I)},w_=y_,m_=cP,zG=function(A){var I=w_(A,"string");return m_(I)?I:I+""},G_=QI,AT=rC,$y=G_.document,R_=AT($y)&&AT($y.createElement),MG=function(A){return R_?$y.createElement(A):{}},L_=Qg,S_=II,T_=MG,WJ=!L_&&!S_(function(){return Object.defineProperty(T_("div"),"a",{get:function(){return 7}}).a!==7}),U_=Qg,F_=Bg,Y_=b0,k_=oe,p_=ME,N_=zG,Z_=hg,K_=WJ,IT=Object.getOwnPropertyDescriptor;iv.f=U_?IT:function(A,I){if(A=p_(A),I=N_(I),K_)try{return IT(A,I)}catch{}if(Z_(A,I))return k_(!F_(Y_.f,A,I),A[I])};var J_=II,W_=xI,V_=/#|\.prototype\./,nP=function(A,I){var g=M_[z_(A)];return g===j_||g!==X_&&(W_(I)?J_(I):!!I)},z_=nP.normalize=function(A){return String(A).replace(V_,".").toLowerCase()},M_=nP.data={},X_=nP.NATIVE="N",j_=nP.POLYFILL="P",VJ=nP,f_=fQ,H_=D0,x_=_y(_y.bind),XE=function(A,I){return f_(A),I===void 0?A:H_?x_(A,I):function(){return A.apply(I,arguments)}},xQ={},O_=Qg,q_=II,zJ=O_&&q_(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!==42}),__=rC,$_=String,A$=TypeError,EQ=function(A){if(__(A))return A;throw new A$($_(A)+" is not an object")},I$=Qg,g$=WJ,C$=zJ,bc=EQ,gT=zG,Q$=TypeError,Qh=Object.defineProperty,B$=Object.getOwnPropertyDescriptor,Bh="enumerable",Eh="configurable",ih="writable";xQ.f=I$?C$?function(A,I,g){if(bc(A),I=gT(I),bc(g),typeof A=="function"&&I==="prototype"&&"value"in g&&ih in g&&!g[ih]){var C=B$(A,I);C&&C[ih]&&(A[I]=g.value,g={configurable:Eh in g?g[Eh]:C[Eh],enumerable:Bh in g?g[Bh]:C[Bh],writable:!1})}return Qh(A,I,g)}:Qh:function(A,I,g){if(bc(A),I=gT(I),bc(g),g$)try{return Qh(A,I,g)}catch{}if("get"in g||"set"in g)throw new Q$("Accessors not supported");return"value"in g&&(A[I]=g.value),A};var E$=Qg,i$=xQ,e$=oe,Uo=E$?function(A,I,g){return i$.f(A,I,e$(1,g))}:function(A,I,g){return A[I]=g,A},Ir=QI,o$=u0,t$=_y,s$=xI,v$=iv.f,r$=VJ,qo=pC,a$=XE,_o=Uo,CT=hg,P$=function(A){var I=function(g,C,Q){if(this instanceof I){switch(arguments.length){case 0:return new A;case 1:return new A(g);case 2:return new A(g,C)}return new A(g,C,Q)}return o$(A,this,arguments)};return I.prototype=A.prototype,I},yA=function(A,I){var g,C,Q,B,E,i,e,o,t,s=A.target,v=A.global,r=A.stat,n=A.proto,a=v?Ir:r?Ir[s]:Ir[s]&&Ir[s].prototype,c=v?qo:qo[s]||_o(qo,s,{})[s],d=c.prototype;for(B in I)C=!(g=r$(v?B:s+(r?".":"#")+B,A.forced))&&a&&CT(a,B),i=c[B],C&&(e=A.dontCallGetSet?(t=v$(a,B))&&t.value:a[B]),E=C&&e?e:I[B],(g||n||typeof i!=typeof E)&&(o=A.bind&&C?a$(E,Ir):A.wrap&&C?P$(E):n&&s$(E)?t$(E):E,(A.sham||E&&E.sham||i&&i.sham)&&_o(o,"sham",!0),_o(c,B,o),n&&(CT(qo,Q=s+"Prototype")||_o(qo,Q,{}),_o(qo[Q],B,E),A.real&&d&&(g||!d[B])&&_o(d,B,E)))},c$=yA,n$=Qg,QT=xQ.f;c$({target:"Object",stat:!0,forced:Object.defineProperty!==QT,sham:!n$},{defineProperty:QT});var l$=pC,MJ=l$.Object,d$=SJ.exports=function(A,I,g){return MJ.defineProperty(A,I,g)};MJ.defineProperty.sham&&(d$.sham=!0);var h$=SJ.exports,D$=h$,u$=D$,b$=u$,y$=b$,w$=y$,m$=w$,G$=m$,XJ=CI(G$),R$=ee,sv=Array.isArray||function(A){return R$(A)==="Array"},L$=Math.ceil,S$=Math.floor,T$=Math.trunc||function(A){var I=+A;return(I>0?S$:L$)(I)},U$=T$,w0=function(A){var I=+A;return I!=I||I===0?0:U$(I)},F$=w0,Y$=Math.min,k$=function(A){var I=F$(A);return I>0?Y$(I,9007199254740991):0},p$=k$,jE=function(A){return p$(A.length)},N$=TypeError,Z$=9007199254740991,XG=function(A){if(A>Z$)throw N$("Maximum allowed index exceeded");return A},K$=Qg,J$=xQ,W$=oe,m0=function(A,I,g){K$?J$.f(A,I,W$(0,g)):A[I]=g},V$=vI,z$=V$("toStringTag"),jJ={};jJ[z$]="z";var jG=String(jJ)==="[object z]",M$=jG,X$=xI,Xn=ee,j$=vI,f$=j$("toStringTag"),H$=Object,x$=Xn(function(){return arguments}())==="Arguments",O$=function(A,I){try{return A[I]}catch{}},vv=M$?Xn:function(A){var I,g,C;return A===void 0?"Undefined":A===null?"Null":typeof(g=O$(I=H$(A),f$))=="string"?g:x$?Xn(I):(C=Xn(I))==="Object"&&X$(I.callee)?"Arguments":C},q$=fA,_$=xI,Aw=WG,$$=q$(Function.toString);_$(Aw.inspectSource)||(Aw.inspectSource=function(A){return $$(A)});var fJ=Aw.inspectSource,AAA=fA,IAA=II,HJ=xI,gAA=vv,CAA=kg,QAA=fJ,xJ=function(){},OJ=CAA("Reflect","construct"),fG=/^\s*(?:class|function)\b/,BAA=AAA(fG.exec),EAA=!fG.test(xJ),gr=function(A){if(!HJ(A))return!1;try{return OJ(xJ,[],A),!0}catch{return!1}},qJ=function(A){if(!HJ(A))return!1;switch(gAA(A)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return EAA||!!BAA(fG,QAA(A))}catch{return!0}};qJ.sham=!0;var HG=!OJ||IAA(function(){var A;return gr(gr.call)||!gr(Object)||!gr(function(){A=!0})||A})?qJ:gr,BT=sv,iAA=HG,eAA=rC,oAA=vI,tAA=oAA("species"),ET=Array,sAA=function(A){var I;return BT(A)&&(I=A.constructor,(iAA(I)&&(I===ET||BT(I.prototype))||eAA(I)&&(I=I[tAA])===null)&&(I=void 0)),I===void 0?ET:I},vAA=sAA,xG=function(A,I){return new(vAA(A))(I===0?0:I)},rAA=II,aAA=vI,PAA=PP,cAA=aAA("species"),_J=function(A){return PAA>=51||!rAA(function(){var I=[];return(I.constructor={})[cAA]=function(){return{foo:1}},I[A](Boolean).foo!==1})},nAA=yA,lAA=II,dAA=sv,hAA=rC,DAA=HQ,uAA=jE,iT=XG,eT=m0,bAA=xG,yAA=_J,wAA=vI,mAA=PP,$J=wAA("isConcatSpreadable"),GAA=mAA>=51||!lAA(function(){var A=[];return A[$J]=!1,A.concat()[0]!==A}),RAA=function(A){if(!hAA(A))return!1;var I=A[$J];return I!==void 0?!!I:dAA(A)},LAA=!GAA||!yAA("concat");nAA({target:"Array",proto:!0,forced:LAA},{concat:function(A){var I,g,C,Q,B,E=DAA(this),i=bAA(E,0),e=0;for(I=-1,C=arguments.length;Ii;)if((E=Q[i++])!=E)return!0}else for(;B>i;i++)if((A||i in Q)&&Q[i]===g)return A||i||0;return!A&&-1}},IW={includes:oT(!0),indexOf:oT(!1)},R0={},ZAA=fA,eh=hg,KAA=ME,JAA=IW.indexOf,WAA=R0,tT=ZAA([].push),gW=function(A,I){var g,C=KAA(A),Q=0,B=[];for(g in C)!eh(WAA,g)&&eh(C,g)&&tT(B,g);for(;I.length>Q;)eh(C,g=I[Q++])&&(~JAA(B,g)||tT(B,g));return B},OG=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],VAA=gW,zAA=OG,L0=Object.keys||function(A){return VAA(A,zAA)},MAA=Qg,XAA=zJ,jAA=xQ,fAA=EQ,HAA=ME,xAA=L0;G0.f=MAA&&!XAA?Object.defineProperties:function(A,I){fAA(A);for(var g,C=HAA(I),Q=xAA(I),B=Q.length,E=0;B>E;)jAA.f(A,g=Q[E++],C[g]);return A};var yc,OAA=kg,CW=OAA("document","documentElement"),qAA=tv,_AA=VG,sT=qAA("keys"),S0=function(A){return sT[A]||(sT[A]=_AA(A))},$AA=EQ,AIA=G0,vT=OG,IIA=R0,gIA=CW,CIA=MG,QIA=S0,rT=">",aT="<",Iw="prototype",gw="script",QW=QIA("IE_PROTO"),oh=function(){},BW=function(A){return aT+gw+rT+A+aT+"/"+gw+rT},PT=function(A){A.write(BW("")),A.close();var I=A.parentWindow.Object;return A=null,I},BIA=function(){var A,I=CIA("iframe"),g="java"+gw+":";return I.style.display="none",gIA.appendChild(I),I.src=String(g),(A=I.contentWindow.document).open(),A.write(BW("document.F=Object")),A.close(),A.F},jn=function(){try{yc=new ActiveXObject("htmlfile")}catch{}jn=typeof document<"u"?document.domain&&yc?PT(yc):BIA():PT(yc);for(var A=vT.length;A--;)delete jn[Iw][vT[A]];return jn()};IIA[QW]=!0;var lP=Object.create||function(A,I){var g;return A!==null?(oh[Iw]=$AA(A),g=new oh,oh[Iw]=null,g[QW]=A):g=jn(),I===void 0?g:AIA.f(g,I)},T0={},EIA=gW,iIA=OG,eIA=iIA.concat("length","prototype");T0.f=Object.getOwnPropertyNames||function(A){return EIA(A,eIA)};var EW={},oIA=fA,rv=oIA([].slice),tIA=ee,sIA=ME,iW=T0.f,vIA=rv,eW=typeof window=="object"&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],rIA=function(A){try{return iW(A)}catch{return vIA(eW)}};EW.f=function(A){return eW&&tIA(A)==="Window"?rIA(A):iW(sIA(A))};var dP={};dP.f=Object.getOwnPropertySymbols;var aIA=Uo,se=function(A,I,g,C){return C&&C.enumerable?A[I]=g:aIA(A,I,g),A},PIA=xQ,U0=function(A,I,g){return PIA.f(A,I,g)},av={},cIA=vI;av.f=cIA;var g9,Ma,C9,cT=pC,nIA=hg,lIA=av,dIA=xQ.f,FI=function(A){var I=cT.Symbol||(cT.Symbol={});nIA(I,A)||dIA(I,A,{value:lIA.f(A)})},hIA=Bg,DIA=kg,uIA=vI,bIA=se,oW=function(){var A=DIA("Symbol"),I=A&&A.prototype,g=I&&I.valueOf,C=uIA("toPrimitive");I&&!I[C]&&bIA(I,C,function(Q){return hIA(g,this)},{})},yIA=jG,wIA=vv,mIA=yIA?{}.toString:function(){return"[object "+wIA(this)+"]"},GIA=jG,RIA=xQ.f,LIA=Uo,SIA=hg,TIA=mIA,UIA=vI,nT=UIA("toStringTag"),fE=function(A,I,g,C){var Q=g?A:A&&A.prototype;Q&&(SIA(Q,nT)||RIA(Q,nT,{configurable:!0,value:I}),C&&!GIA&&LIA(Q,"toString",TIA))},FIA=QI,YIA=xI,lT=FIA.WeakMap,kIA=YIA(lT)&&/native code/.test(String(lT)),pIA=kIA,tW=QI,NIA=rC,ZIA=Uo,th=hg,sh=WG,KIA=S0,JIA=R0,dT="Object already initialized",Cw=tW.TypeError,WIA=tW.WeakMap,VIA=function(A){return C9(A)?Ma(A):g9(A,{})},zIA=function(A){return function(I){var g;if(!NIA(I)||(g=Ma(I)).type!==A)throw new Cw("Incompatible receiver, "+A+" required");return g}};if(pIA||sh.state){var WB=sh.state||(sh.state=new WIA);WB.get=WB.get,WB.has=WB.has,WB.set=WB.set,g9=function(A,I){if(WB.has(A))throw new Cw(dT);return I.facade=A,WB.set(A,I),I},Ma=function(A){return WB.get(A)||{}},C9=function(A){return WB.has(A)}}else{var $o=KIA("state");JIA[$o]=!0,g9=function(A,I){if(th(A,$o))throw new Cw(dT);return I.facade=A,ZIA(A,$o,I),I},Ma=function(A){return th(A,$o)?A[$o]:{}},C9=function(A){return th(A,$o)}}var Pv={set:g9,get:Ma,has:C9,enforce:VIA,getterFor:zIA},MIA=XE,XIA=fA,jIA=JG,fIA=HQ,HIA=jE,xIA=xG,hT=XIA([].push),DT=function(A){var I=A===1,g=A===2,C=A===3,Q=A===4,B=A===6,E=A===7,i=A===5||B;return function(e,o,t,s){for(var v,r,n=fIA(e),a=jIA(n),c=HIA(a),d=MIA(o,t),l=0,h=s||xIA,D=I?h(e,c):g||E?h(e,0):void 0;c>l;l++)if((i||l in a)&&(r=d(v=a[l],l,n),A))if(I)D[l]=r;else if(r)switch(A){case 3:return!0;case 5:return v;case 6:return l;case 2:hT(D,v)}else switch(A){case 4:return!1;case 7:hT(D,v)}return B?-1:C||Q?Q:D}},qG={forEach:DT(0),filter:DT(2)},wc=yA,hP=QI,_G=Bg,OIA=fA,hs=Qg,At=ev,qIA=II,cg=hg,_IA=fg,Qw=EQ,F0=ME,$G=zG,$IA=NC,Bw=oe,Zs=lP,sW=L0,AgA=T0,vW=EW,IgA=dP,rW=iv,aW=xQ,ggA=G0,PW=b0,uT=se,CgA=U0,AR=tv,QgA=S0,cW=R0,bT=VG,BgA=vI,EgA=av,igA=FI,egA=oW,ogA=fE,nW=Pv,Y0=qG.forEach,GC=QgA("hidden"),Q9="Symbol",Xa="prototype",tgA=nW.set,yT=nW.getterFor(Q9),lB=Object[Xa],Is=hP.Symbol,fn=Is&&Is[Xa],sgA=hP.RangeError,vgA=hP.TypeError,vh=hP.QObject,lW=rW.f,go=aW.f,dW=vW.f,rgA=PW.f,hW=OIA([].push),ZE=AR("symbols"),DP=AR("op-symbols"),agA=AR("wks"),rh=!vh||!vh[Xa]||!vh[Xa].findChild,DW=function(A,I,g){var C=lW(lB,I);C&&delete lB[I],go(A,I,g),C&&A!==lB&&go(lB,I,C)},Ew=hs&&qIA(function(){return Zs(go({},"a",{get:function(){return go(this,"a",{value:7}).a}})).a!==7})?DW:go,ah=function(A,I){var g=ZE[A]=Zs(fn);return tgA(g,{type:Q9,tag:A,description:I}),hs||(g.description=I),g},B9=function(A,I,g){A===lB&&B9(DP,I,g),Qw(A);var C=$G(I);return Qw(g),cg(ZE,C)?(g.enumerable?(cg(A,GC)&&A[GC][C]&&(A[GC][C]=!1),g=Zs(g,{enumerable:Bw(0,!1)})):(cg(A,GC)||go(A,GC,Bw(1,Zs(null))),A[GC][C]=!0),Ew(A,C,g)):go(A,C,g)},iw=function(A,I){Qw(A);var g=F0(I),C=sW(g).concat(bW(g));return Y0(C,function(Q){hs&&!_G(uW,g,Q)||B9(A,Q,g[Q])}),A},PgA=function(A,I){return I===void 0?Zs(A):iw(Zs(A),I)},uW=function(A){var I=$G(A),g=_G(rgA,this,I);return!(this===lB&&cg(ZE,I)&&!cg(DP,I))&&(!(g||!cg(this,I)||!cg(ZE,I)||cg(this,GC)&&this[GC][I])||g)},wT=function(A,I){var g=F0(A),C=$G(I);if(g!==lB||!cg(ZE,C)||cg(DP,C)){var Q=lW(g,C);return!Q||!cg(ZE,C)||cg(g,GC)&&g[GC][C]||(Q.enumerable=!0),Q}},mT=function(A){var I=dW(F0(A)),g=[];return Y0(I,function(C){cg(ZE,C)||cg(cW,C)||hW(g,C)}),g},bW=function(A){var I=A===lB,g=dW(I?DP:F0(A)),C=[];return Y0(g,function(Q){!cg(ZE,Q)||I&&!cg(lB,Q)||hW(C,ZE[Q])}),C};At||(uT(fn=(Is=function(){if(_IA(fn,this))throw new vgA("Symbol is not a constructor");var A=arguments.length&&arguments[0]!==void 0?$IA(arguments[0]):void 0,I=bT(A),g=function(C){var Q=this===void 0?hP:this;Q===lB&&_G(g,DP,C),cg(Q,GC)&&cg(Q[GC],I)&&(Q[GC][I]=!1);var B=Bw(1,C);try{Ew(Q,I,B)}catch(E){if(!(E instanceof sgA))throw E;DW(Q,I,B)}};return hs&&rh&&Ew(lB,I,{configurable:!0,set:g}),ah(I,A)})[Xa],"toString",function(){return yT(this).tag}),uT(Is,"withoutSetter",function(A){return ah(bT(A),A)}),PW.f=uW,aW.f=B9,ggA.f=iw,rW.f=wT,AgA.f=vW.f=mT,IgA.f=bW,EgA.f=function(A){return ah(BgA(A),A)},hs&&CgA(fn,"description",{configurable:!0,get:function(){return yT(this).description}})),wc({global:!0,wrap:!0,forced:!At,sham:!At},{Symbol:Is}),Y0(sW(agA),function(A){igA(A)}),wc({target:Q9,stat:!0,forced:!At},{useSetter:function(){rh=!0},useSimple:function(){rh=!1}}),wc({target:"Object",stat:!0,forced:!At,sham:!hs},{create:PgA,defineProperty:B9,defineProperties:iw,getOwnPropertyDescriptor:wT}),wc({target:"Object",stat:!0,forced:!At},{getOwnPropertyNames:mT}),egA(),ogA(Is,Q9),cW[GC]=!0;var cgA=ev,yW=cgA&&!!Symbol.for&&!!Symbol.keyFor,ngA=yA,lgA=kg,dgA=hg,hgA=NC,wW=tv,DgA=yW,Ph=wW("string-to-symbol-registry"),ugA=wW("symbol-to-string-registry");ngA({target:"Symbol",stat:!0,forced:!DgA},{for:function(A){var I=hgA(A);if(dgA(Ph,I))return Ph[I];var g=lgA("Symbol")(I);return Ph[I]=g,ugA[g]=I,g}});var bgA=yA,ygA=hg,wgA=cP,mgA=ov,GgA=tv,RgA=yW,GT=GgA("symbol-to-string-registry");bgA({target:"Symbol",stat:!0,forced:!RgA},{keyFor:function(A){if(!wgA(A))throw new TypeError(mgA(A)+" is not a symbol");if(ygA(GT,A))return GT[A]}});var LgA=fA,RT=sv,SgA=xI,LT=ee,TgA=NC,ST=LgA([].push),UgA=function(A){if(SgA(A))return A;if(RT(A)){for(var I=A.length,g=[],C=0;C=I.length)return A.target=null,Lc(void 0,!0);switch(A.kind){case"keys":return Lc(g,!1);case"values":return Lc(I[g],!1)}return Lc([g,I[g]],!1)},"values"),jT.Arguments=jT.Array;var rQA={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},aQA=rQA,PQA=QI,cQA=fE,fT=cv;for(var nh in aQA)cQA(PQA[nh],nh),fT[nh]=fT.Array;var nQA=aCA,lQA=nQA,dQA=vI,hQA=xQ.f,HT=dQA("metadata"),xT=Function.prototype;xT[HT]===void 0&&hQA(xT,HT,{value:null});var DQA=FI;DQA("asyncDispose");var uQA=FI;uQA("dispose");var bQA=FI;bQA("metadata");var yQA=lQA,wQA=yQA,mQA=kg,GQA=fA,CR=mQA("Symbol"),RQA=CR.keyFor,LQA=GQA(CR.prototype.valueOf),JW=CR.isRegisteredSymbol||function(A){try{return RQA(LQA(A))!==void 0}catch{return!1}},SQA=yA,TQA=JW;SQA({target:"Symbol",stat:!0},{isRegisteredSymbol:TQA});for(var UQA=tv,OT=kg,FQA=fA,YQA=cP,kQA=vI,Sc=OT("Symbol"),qT=Sc.isWellKnownSymbol,WW=OT("Object","getOwnPropertyNames"),pQA=FQA(Sc.prototype.valueOf),_T=UQA("wks"),lh=0,$T=WW(Sc),NQA=$T.length;lh=i?A?"":void 0:(C=IU(B,E))<55296||C>56319||E+1===i||(Q=IU(B,E+1))<56320||Q>57343?A?gBA(B,E):C:A?CBA(B,E,E+2):Q-56320+(C-55296<<10)+65536}},zW={codeAt:gU(!1),charAt:gU(!0)},QBA=zW.charAt,BBA=NC,MW=Pv,EBA=NW,CU=gR,XW="String Iterator",iBA=MW.set,eBA=MW.getterFor(XW);EBA(String,"String",function(A){iBA(this,{type:XW,string:BBA(A),index:0})},function(){var A,I=eBA(this),g=I.string,C=I.index;return C>=g.length?CU(void 0,!0):(A=QBA(g,C),I.index+=A.length,CU(A,!1))});var oBA=av,tBA=oBA.f("iterator"),sBA=tBA,vBA=sBA,rBA=vBA,aBA=rBA,PBA=aBA,cBA=PBA,nBA=cBA,jW=CI(nBA);function E9(A){return(E9=typeof Lr=="function"&&typeof jW=="symbol"?function(I){return typeof I}:function(I){return I&&typeof Lr=="function"&&I.constructor===Lr&&I!==Lr.prototype?"symbol":typeof I})(A)}var lBA=av,dBA=lBA.f("toPrimitive"),hBA=dBA,DBA=hBA,uBA=DBA,bBA=uBA,yBA=bBA,wBA=yBA,mBA=wBA,GBA=CI(mBA);function RBA(A,I){if(E9(A)!="object"||!A)return A;var g=A[GBA];if(g!==void 0){var C=g.call(A,I);if(E9(C)!="object")return C;throw new TypeError("@@toPrimitive must return a primitive value.")}return(I==="string"?String:Number)(A)}function LBA(A){var I=RBA(A,"string");return E9(I)=="symbol"?I:I+""}function P(A,I,g){return(I=LBA(I))in A?XJ(A,I,{value:g,enumerable:!0,configurable:!0,writable:!0}):A[I]=g,A}var SBA=yA,TBA=fA,UBA=sv,FBA=TBA([].reverse),QU=[1,2];SBA({target:"Array",proto:!0,forced:String(QU)===String(QU.reverse())},{reverse:function(){return UBA(this)&&(this.length=this.length),FBA(this)}});var YBA=QI,kBA=pC,oE=function(A,I){var g=kBA[A+"Prototype"],C=g&&g[I];if(C)return C;var Q=YBA[A],B=Q&&Q.prototype;return B&&B[I]},pBA=oE,NBA=pBA("Array","reverse"),ZBA=fg,KBA=NBA,dh=Array.prototype,JBA=function(A){var I=A.reverse;return A===dh||ZBA(dh,A)&&I===dh.reverse?KBA:I},WBA=JBA,VBA=WBA,zBA=VBA,MBA=zBA,XBA=MBA,jBA=XBA,fBA=jBA,HBA=fBA,fW=CI(HBA),xBA=rC,OBA=ee,qBA=vI,_BA=qBA("match"),HW=function(A){var I;return xBA(A)&&((I=A[_BA])!==void 0?!!I:OBA(A)==="RegExp")},$BA=EQ,AEA=function(){var A=$BA(this),I="";return A.hasIndices&&(I+="d"),A.global&&(I+="g"),A.ignoreCase&&(I+="i"),A.multiline&&(I+="m"),A.dotAll&&(I+="s"),A.unicode&&(I+="u"),A.unicodeSets&&(I+="v"),A.sticky&&(I+="y"),I},IEA=Bg,gEA=hg,CEA=fg,QEA=AEA,BU=RegExp.prototype,xW=function(A){var I=A.flags;return I!==void 0||"flags"in BU||gEA(A,"flags")||!CEA(BU,A)?I:IEA(QEA,A)},BR=fA,BEA=HQ,EEA=Math.floor,hh=BR("".charAt),iEA=BR("".replace),Dh=BR("".slice),eEA=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,oEA=/\$([$&'`]|\d{1,2})/g,tEA=function(A,I,g,C,Q,B){var E=g+A.length,i=C.length,e=oEA;return Q!==void 0&&(Q=BEA(Q),e=eEA),iEA(B,e,function(o,t){var s;switch(hh(t,0)){case"$":return"$";case"&":return A;case"`":return Dh(I,0,g);case"'":return Dh(I,E);case"<":s=Q[Dh(t,1,-1)];break;default:var v=+t;if(v===0)return o;if(v>i){var r=EEA(v/10);return r===0?o:r<=i?C[r-1]===void 0?hh(t,1):C[r-1]+hh(t,1):o}s=C[v-1]}return s===void 0?"":s})},sEA=yA,vEA=Bg,ER=fA,EU=To,rEA=xI,aEA=aP,PEA=HW,It=NC,cEA=y0,nEA=xW,lEA=tEA,dEA=vI,hEA=dEA("replace"),DEA=TypeError,uh=ER("".indexOf),uEA=ER("".replace),iU=ER("".slice),bEA=Math.max;sEA({target:"String",proto:!0},{replaceAll:function(A,I){var g,C,Q,B,E,i,e,o,t,s,v=EU(this),r=0,n="";if(!aEA(A)){if((g=PEA(A))&&(C=It(EU(nEA(A))),!~uh(C,"g")))throw new DEA("`.replaceAll` does not allow non-global regexes");if(Q=cEA(A,hEA))return vEA(Q,A,v,I);if(g)return uEA(It(v),A,I)}for(B=It(v),E=It(A),(i=rEA(I))||(I=It(I)),e=E.length,o=bEA(1,e),t=uh(B,E);t!==-1;)s=i?It(I(E,t,B)):lEA(E,B,t,[],void 0,I),n+=iU(B,r,t)+s,r=t+e,t=t+o>B.length?-1:uh(B,E,t+o);return r(A[A.VIDEO_SOURCE_TYPE_EXTERNAL=0]="VIDEO_SOURCE_TYPE_EXTERNAL",A[A.VIDEO_SOURCE_TYPE_INTERNAL=1]="VIDEO_SOURCE_TYPE_INTERNAL",A))(Wg||{}),VC=(A=>(A[A.AUDIO_SOURCE_TYPE_EXTERNAL=0]="AUDIO_SOURCE_TYPE_EXTERNAL",A[A.AUDIO_SOURCE_TYPE_INTERNAL=1]="AUDIO_SOURCE_TYPE_INTERNAL",A))(VC||{}),Sr=(A=>(A[A.QUIT=0]="QUIT",A[A.DROPPED=1]="DROPPED",A[A.SWITCH_TO_INVISIBLE=2]="SWITCH_TO_INVISIBLE",A[A.KICKED_BY_ADMIN=3]="KICKED_BY_ADMIN",A))(Sr||{}),tiA=(A=>(A[A.CHANNEL_PROFILE_COMMUNICATION=0]="CHANNEL_PROFILE_COMMUNICATION",A[A.CHANNEL_PROFILE_LIVE_BROADCASTING=1]="CHANNEL_PROFILE_LIVE_BROADCASTING",A))(tiA||{}),siA=(A=>(A[A.AUTO_SUBSCRIBE_MODE=0]="AUTO_SUBSCRIBE_MODE",A[A.MANUAL_SUBSCRIBE_MODE=1]="MANUAL_SUBSCRIBE_MODE",A))(siA||{}),Ds=(A=>(A[A.SUBSCRIBE_SUCC=0]="SUBSCRIBE_SUCC",A[A.SUBSCRIBE_FAIL=1]="SUBSCRIBE_FAIL",A))(Ds||{}),qB=(A=>(A[A.PUBLISH_SUCC=0]="PUBLISH_SUCC",A[A.PUBLISH_FAIL=1]="PUBLISH_FAIL",A))(qB||{}),viA=(A=>(A[A.MIRROR_MODE_OFF=0]="MIRROR_MODE_OFF",A[A.MIRROR_MODE_ON=1]="MIRROR_MODE_ON",A))(viA||{}),Fe=(A=>(A[A.RENDER_MODE_HIDDEN=0]="RENDER_MODE_HIDDEN",A[A.RENDER_MODE_FIT=1]="RENDER_MODE_FIT",A[A.RENDER_MODE_FILL=2]="RENDER_MODE_FILL",A))(Fe||{}),F=(A=>(A[A.STREAM_INDEX_MAIN=0]="STREAM_INDEX_MAIN",A[A.STREAM_INDEX_SCREEN=1]="STREAM_INDEX_SCREEN",A))(F||{}),iA=(A=>(A[A.AUDIO=1]="AUDIO",A[A.VIDEO=2]="VIDEO",A[A.AUDIO_AND_VIDEO=3]="AUDIO_AND_VIDEO",A))(iA||{}),_B=(A=>(A[A.STREAM_REMOVE_REASON_UNPUBLISH=0]="STREAM_REMOVE_REASON_UNPUBLISH",A[A.STREAM_REMOVE_REASON_PUBLISH_FAILED=1]="STREAM_REMOVE_REASON_PUBLISH_FAILED",A[A.STREAM_REMOVE_REASON_KEEP_LIVE_FAILED=2]="STREAM_REMOVE_REASON_KEEP_LIVE_FAILED",A[A.STREAM_REMOVE_REASON_CLIENT_DISCONNECTED=3]="STREAM_REMOVE_REASON_CLIENT_DISCONNECTED",A[A.STREAM_REMOVE_REASON_REPUBLISH=4]="STREAM_REMOVE_REASON_REPUBLISH",A[A.STREAM_REMOVE_REASON_OTHER=5]="STREAM_REMOVE_REASON_OTHER",A[A.STREAM_REMOVE_REASON_TOKEN_PRIVILEGE_EXPIRED=6]="STREAM_REMOVE_REASON_TOKEN_PRIVILEGE_EXPIRED",A))(_B||{}),XA=(A=>(A[A.CONNECTION_START=0]="CONNECTION_START",A[A.CONNECTION_STATE_DISCONNECTED=1]="CONNECTION_STATE_DISCONNECTED",A[A.CONNECTION_STATE_CONNECTING=2]="CONNECTION_STATE_CONNECTING",A[A.CONNECTION_STATE_CONNECTED=3]="CONNECTION_STATE_CONNECTED",A[A.CONNECTION_STATE_RECONNECTING=4]="CONNECTION_STATE_RECONNECTING",A[A.CONNECTION_STATE_RECONNECTED=5]="CONNECTION_STATE_RECONNECTED",A[A.CONNECTION_STATE_LOST=6]="CONNECTION_STATE_LOST",A))(XA||{}),di=(A=>(A.ICE_FAILED="iceFailed",A.NODE_CHANGE="nodeChange",A.JOIN_TIMEOUT="joinTimeout",A.NOTIFY_RECONNECT="notifyReconnect",A))(di||{}),Lt=(A=>(A.AUTO="auto",A.H264="h264",A.VP8="vp8",A.ByteVC1="ByteVC1",A))(Lt||{}),GQ=(A=>(A[A.MIRROR_TYPE_NONE=0]="MIRROR_TYPE_NONE",A[A.MIRROR_TYPE_RENDER=1]="MIRROR_TYPE_RENDER",A))(GQ||{}),Tr=(A=>(A[A.NORMAL=0]="NORMAL",A[A.DISCONNECT=1]="DISCONNECT",A[A.RESET=2]="RESET",A))(Tr||{}),i9=(A=>(A[A.MICROPHONE=0]="MICROPHONE",A[A.AUDIOMIXING=1]="AUDIOMIXING",A))(i9||{}),vw=(A=>(A[A.domestic=0]="domestic",A[A.overseas=1]="overseas",A))(vw||{}),riA=(A=>(A[A.OFFLINE=0]="OFFLINE",A[A.ONLINE=1]="ONLINE",A[A.UNREACHABLE=2]="UNREACHABLE",A))(riA||{}),aiA=(A=>(A[A.AUDIO_AND_VIDEO=0]="AUDIO_AND_VIDEO",A[A.AUDIO_ONLY=1]="AUDIO_ONLY",A[A.VIDEO_ONLY=2]="VIDEO_ONLY",A))(aiA||{}),qW=(A=>(A[A.PREV_FRAME=0]="PREV_FRAME",A[A.OTHER_FRAME=1]="OTHER_FRAME",A))(qW||{}),Hn=(A=>(A[A.DISABLE=0]="DISABLE",A[A.VIDEO_STREAM_LOW=1]="VIDEO_STREAM_LOW",A[A.AUDIO_ONLY=2]="AUDIO_ONLY",A))(Hn||{}),xn=(A=>(A[A.LOW=0]="LOW",A[A.MEDIUM=100]="MEDIUM",A[A.HIGH=200]="HIGH",A))(xn||{}),Ye=(A=>(A[A.UNKNOWN=0]="UNKNOWN",A[A.EXCELLENT=1]="EXCELLENT",A[A.GOOD=2]="GOOD",A[A.POOR=3]="POOR",A[A.BAD=4]="BAD",A[A.VBAD=5]="VBAD",A[A.DOWN=6]="DOWN",A))(Ye||{}),PiA=(A=>(A[A.Unknown=-1]="Unknown",A[A.SubscribeFallbackByBandwidth=0]="SubscribeFallbackByBandwidth",A[A.SubscribeRecoverByBandwidth=2]="SubscribeRecoverByBandwidth",A))(PiA||{}),EC=(A=>(A[A.communication=0]="communication",A[A.chat=5]="chat",A[A.chatRoom=6]="chatRoom",A[A.coHost=9]="coHost",A[A.meeting=16]="meeting",A[A.classRoom=18]="classRoom",A))(EC||{}),St=(A=>(A[A.default=0]="default",A[A.fluent=1]="fluent",A[A.standard=2]="standard",A[A.hd=3]="hd",A[A.standardStereo=4]="standardStereo",A[A.hdMono=5]="hdMono",A))(St||{}),Ae=(A=>(A[A.AUTO_PLAY=0]="AUTO_PLAY",A[A.VIDEO_ONLY=1]="VIDEO_ONLY",A[A.PLAY_MANUALLY=2]="PLAY_MANUALLY",A))(Ae||{}),Ba=(A=>(A.LC="LC",A.HEv1="HEv1",A.HEv2="HEv2",A))(Ba||{}),_W=(A=>(A.H264="H264",A.H265="H265",A))(_W||{}),si=(A=>(A[A.ASR_ONLY=0]="ASR_ONLY",A[A.ASR_AND_TRANSLATION=1]="ASR_AND_TRANSLATION",A))(si||{}),Tt=(A=>(A[A.STARTED=0]="STARTED",A[A.STOPPED=1]="STOPPED",A[A.ERROR=2]="ERROR",A[A.UPDATED=3]="UPDATED",A))(Tt||{}),ke=(A=>(A[A.FORWARD_STREAM_STATE_SUCCESS=0]="FORWARD_STREAM_STATE_SUCCESS",A[A.FORWARD_STREAM_STATE_FAILURE=1]="FORWARD_STREAM_STATE_FAILURE",A))(ke||{}),Ut=(A=>(A[A.FORWARD_STREAM_ERROR_OK=0]="FORWARD_STREAM_ERROR_OK",A[A.FORWARD_STREAM_ERROR_INVALID_TOKEN=1202]="FORWARD_STREAM_ERROR_INVALID_TOKEN",A[A.FORWARD_STREAM_ERROR_RESPONSE=1203]="FORWARD_STREAM_ERROR_RESPONSE",A[A.FORWARD_STREAM_ERROR_REMOTE_KICKED=1204]="FORWARD_STREAM_ERROR_REMOTE_KICKED",A[A.FORWARD_STREAM_ERROR_NOT_SUPPORT=1205]="FORWARD_STREAM_ERROR_NOT_SUPPORT",A))(Ut||{}),On=(A=>(A[A.DEFAULT=0]="DEFAULT",A[A.HIGH=1]="HIGH",A))(On||{}),Li=(A=>(A[A.VIDEO_ONLY_ONE=0]="VIDEO_ONLY_ONE",A[A.VIDEO_ON_DEMAND=1]="VIDEO_ON_DEMAND",A[A.VIDEO_ALWAYS_SIMULCAST=2]="VIDEO_ALWAYS_SIMULCAST",A))(Li||{}),Si=(A=>(A.VIDEO_STREAM_HIGH="high",A.VIDEO_STREAM_MID="mid",A.VIDEO_STREAM_LOW="low",A))(Si||{}),QC=(A=>(A[A.NONE=0]="NONE",A[A.AFTER_CAPTURE=1]="AFTER_CAPTURE",A[A.AFTER_PROCESS=2]="AFTER_PROCESS",A))(QC||{}),$W=(A=>(A[A.ROOM_MODE_RTC=0]="ROOM_MODE_RTC",A[A.ROOM_MODE_RTS_ONLY=1]="ROOM_MODE_RTS_ONLY",A))($W||{}),ciA=new Uint8Array(16);function niA(){if(!yh&&!(yh=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||typeof msCrypto<"u"&&typeof msCrypto.getRandomValues=="function"&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return yh(ciA)}var liA=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function diA(A){return typeof A=="string"&&liA.test(A)}for(var yg=[],mh=0;mh<256;++mh)yg.push((mh+256).toString(16).substr(1));function hiA(A){var I=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,g=(yg[A[I+0]]+yg[A[I+1]]+yg[A[I+2]]+yg[A[I+3]]+"-"+yg[A[I+4]]+yg[A[I+5]]+"-"+yg[A[I+6]]+yg[A[I+7]]+"-"+yg[A[I+8]]+yg[A[I+9]]+"-"+yg[A[I+10]]+yg[A[I+11]]+yg[A[I+12]]+yg[A[I+13]]+yg[A[I+14]]+yg[A[I+15]]).toLowerCase();if(!diA(g))throw TypeError("Stringified UUID is invalid");return g}function DiA(A,I,g){var C=(A=A||{}).random||(A.rng||niA)();return C[6]=15&C[6]|64,C[8]=63&C[8]|128,hiA(C)}const Ie=()=>typeof window>"u",tC=()=>DiA(),nv=A=>typeof A=="number",uiA=A=>Function.prototype.toString.call(A).includes("[native code]");function KQ(A){return A==null?"undefined | null":typeof A=="string"?A:JSON.stringify({contentHint:A.contentHint,enabled:A.enabled,id:A.id,kind:A.kind,label:A.label,muted:A.muted,readyState:A.readyState})}function A1(A){return A==null?"undefined | null":typeof A=="string"?A:JSON.stringify({id:A.id,active:A.active})}function I1(A){return A==null?"undefined | null":typeof A=="string"?A:JSON.stringify({track:KQ(A.track)})}function g1(A){return A==null?"undefined | null":typeof A=="string"?A:JSON.stringify({track:KQ(A.track)})}function C1(A){return A==null?"undefined | null":typeof A=="string"?A:JSON.stringify({currentDirection:A.currentDirection,direction:A.direction,mid:A.mid,stopped:A.stopped,receiver:g1(A.receiver),sender:I1(A.sender)})}const biA="@byted/ve-rtc",Gh="@byted/ve-rtc",Rh="@byted/ve-rtc-cache-size";class yiA{constructor(){P(this,"storeKey",void 0),P(this,"logLevel",void 0),P(this,"LogfileSize",void 0),P(this,"db",void 0),P(this,"logId",void 0),P(this,"cacheLog",void 0),P(this,"cachedSize",void 0),P(this,"preCacheTime",void 0),P(this,"timer",void 0),P(this,"_getSize",I=>new Blob(I).size/1048576),this.storeKey="",this.logId=1,this.cacheLog="",this.logLevel="none",this.LogfileSize=100,this._createStore()}_createStore(){if(Ie()||!window.indexedDB)return;const I=indexedDB.open(biA);I.onupgradeneeded=()=>{I.result.createObjectStore(Gh);try{localStorage.removeItem(Rh)}catch{}},I.onerror=g=>{},I.onsuccess=()=>{this.db=I.result,this._getCachedSize()}}_getCachedSize(){try{const I=localStorage.getItem(Rh);I?this.cachedSize=Number(I):this.values().then(g=>{this.cachedSize=this._getSize(g),this._setCachedSize()})}catch{}}_setCachedSize(){try{localStorage.setItem(Rh,"".concat(this.cachedSize))}catch{}}_getStore(I){if(this.db)return this.db.transaction(Gh,I).objectStore(Gh)}set(I){return new Promise((g,C)=>{if(this.logLevel==="none")return g();if(I&&this.preCacheTime&&this.preCacheTime-Date.now()<1e3)return this.cacheLog+=` `.concat(this.logId,": ").concat(I),this.logId++,this.timer||(this.timer=setTimeout(()=>{this.set("")},1e3-(this.preCacheTime-Date.now()))),g();clearTimeout(this.timer),this.timer=null;const Q=this._getStore("readwrite");if(!Q)return C("get store fail");this.cachedSize&&this.cachedSize>this.LogfileSize&&this.keyEarliest().then(E=>{this.get(E).then(i=>{this.del(E).then(()=>{this.cachedSize=this.cachedSize-this._getSize(["".concat(i)]),this._setCachedSize()})})});const B=Q.get(this.storeKey);B.onsuccess=()=>{try{const E="".concat(B.result||"").concat(this.cacheLog),i=I?"".concat(E?` `:"").concat(this.logId,": ").concat(I):"";Q.put("".concat(E).concat(i),this.storeKey),I&&this.logId++,this.cacheLog="",this.cachedSize=(this.cachedSize||0)+this._getSize(["".concat(this.cacheLog).concat(i)]),this._setCachedSize(),this.preCacheTime=Date.now(),g()}catch(E){if(!I)return C(E);this.cacheLog+=` `.concat(this.logId,": ").concat(I),this.logId++,C(E)}},B.onerror=E=>{if(!I)return C(E);this.cacheLog+=` `.concat(this.logId,": ").concat(I),this.logId++,C(E)}})}get(I){return new Promise((g,C)=>{const Q=this._getStore("readonly");if(!Q)return C();const B=Q.get(I);B.onsuccess=()=>{g(B.result)},B.onerror=E=>{C(E)}})}del(){let I=arguments.length>0&&arguments[0]!==void 0?arguments[0]:this.storeKey;return new Promise((g,C)=>{const Q=this._getStore("readwrite");if(!Q)return C();const B=Q.delete(I);B.onsuccess=()=>g(B.result),B.onerror=E=>C(E)})}keyEarliest(){return this.keys().then(I=>{let g,C=Date.now();return I.forEach(Q=>{if(!Q||!Q.length)return;const B=Q.split("-")[0];Number(B){const C=this._getStore("readonly");if(!C)return g();if(C.getAllKeys){const B=C.getAllKeys();return B.onsuccess=()=>{I(B.result)},void(B.onerror=()=>{g()})}const Q=[];C.openCursor().onsuccess=function(){this.result&&(Q.push(this.result.key),this.result.continue())},C.transaction.oncomplete=()=>I(Q)})}values(){return new Promise((I,g)=>{const C=this._getStore("readonly");if(!C)return g();if(C.getAll){const B=C.getAll();return B.onsuccess=()=>{I(B.result)},void(B.onerror=()=>{g()})}const Q=[];C.openCursor().onsuccess=function(){this.result&&(Q.push(this.result.value),this.result.continue())},C.transaction.oncomplete=()=>I(Q)})}download(I){I=I||this.storeKey,this.get(I).then(g=>{const C=document.createElement("a");C.download="".concat(I,".txt"),C.href="data:text/paint;utf-8,".concat(g||""),C.click()})}}var Ks=new yiA;let wiA=class{constructor(){P(this,"_all",{})}on(A,I){const g=this._all[A];g?g.push(I):this._all[A]=[I]}once(A,I){var g=this;const C=function(){I(...arguments),g.off(A,C)};this.on(A,C)}off(A,I){const g=this._all[A];g==null||g.splice(g.indexOf(I)>>>0,1)}emit(A){for(var I=arguments.length,g=new Array(I>1?I-1:0),C=1;CB(...g))}safeEmit(A){try{for(var I=arguments.length,g=new Array(I>1?I-1:0),C=1;C1?arguments[1]:void 0)}});var geA=oE,CeA=geA("Array","filter"),QeA=fg,BeA=CeA,Lh=Array.prototype,EeA=function(A){var I=A.filter;return A===Lh||QeA(Lh,A)&&I===Lh.filter?BeA:I},ieA=EeA,eeA=ieA,oeA=eeA,teA=oeA,seA=teA,veA=seA,reA=veA,aeA=CI(reA),B1={exports:{}},PeA=yA,ceA=II,neA=ME,E1=iv.f,i1=Qg,leA=!i1||ceA(function(){E1(1)});PeA({target:"Object",stat:!0,forced:leA,sham:!i1},{getOwnPropertyDescriptor:function(A,I){return E1(neA(A),I)}});var deA=pC,e1=deA.Object,heA=B1.exports=function(A,I){return e1.getOwnPropertyDescriptor(A,I)};e1.getOwnPropertyDescriptor.sham&&(heA.sham=!0);var DeA=B1.exports,ueA=DeA,beA=ueA,yeA=beA,weA=yeA,meA=weA,GeA=meA,ReA=GeA,o1=CI(ReA),LeA=Qg,SeA=sv,TeA=TypeError,UeA=Object.getOwnPropertyDescriptor,FeA=LeA&&!function(){if(this!==void 0)return!0;try{Object.defineProperty([],"length",{writable:!1}).length=1}catch(A){return A instanceof TypeError}}(),YeA=FeA?function(A,I){if(SeA(A)&&!UeA(A,"length").writable)throw new TeA("Cannot set read only .length");return A.length=I}:function(A,I){return A.length=I},keA=yA,peA=HQ,NeA=jE,ZeA=YeA,KeA=XG,JeA=II,WeA=JeA(function(){return[].push.call({length:4294967296},1)!==4294967297}),VeA=function(){try{Object.defineProperty([],"length",{writable:!1}).push()}catch(A){return A instanceof TypeError}},zeA=WeA||!VeA();keA({target:"Array",proto:!0,forced:zeA},{push:function(A){var I=peA(this),g=NeA(I),C=arguments.length;KeA(g+C);for(var Q=0;Q1?arguments[1]:void 0)},ioA=yA;ioA({target:"Array",proto:!0,forced:[].forEach!==sU},{forEach:sU});var eoA=oE,ooA=eoA("Array","forEach"),toA=ooA,soA=toA,voA=vv,roA=hg,aoA=fg,PoA=soA,Th=Array.prototype,coA={DOMTokenList:!0,NodeList:!0},noA=function(A){var I=A.forEach;return A===Th||aoA(Th,A)&&I===Th.forEach||roA(coA,voA(A))?PoA:I},loA=noA,doA=loA,hoA=doA,DoA=hoA,uoA=DoA,vU=CI(uoA),boA=kg,yoA=fA,woA=T0,moA=dP,GoA=EQ,RoA=yoA([].concat),s1=boA("Reflect","ownKeys")||function(A){var I=woA.f(GoA(A)),g=moA.f;return g?RoA(I,g(A)):I},LoA=yA,SoA=Qg,ToA=s1,UoA=ME,FoA=iv,YoA=m0;LoA({target:"Object",stat:!0,sham:!SoA},{getOwnPropertyDescriptors:function(A){for(var I,g,C=UoA(A),Q=FoA.f,B=ToA(C),E={},i=0;B.length>i;)(g=Q(C,I=B[i++]))!==void 0&&YoA(E,I,g);return E}});var koA=pC,poA=koA.Object.getOwnPropertyDescriptors,NoA=poA,ZoA=NoA,KoA=ZoA,JoA=KoA,WoA=JoA,VoA=WoA,zoA=VoA,rU=CI(zoA),v1={exports:{}},MoA=yA,XoA=Qg,aU=G0.f;MoA({target:"Object",stat:!0,forced:Object.defineProperties!==aU,sham:!XoA},{defineProperties:aU});var joA=pC,r1=joA.Object,foA=v1.exports=function(A,I){return r1.defineProperties(A,I)};r1.defineProperties.sham&&(foA.sham=!0);var HoA=v1.exports,xoA=HoA,OoA=xoA,qoA=OoA,_oA=qoA,$oA=_oA,AtA=$oA,ItA=AtA,gtA=CI(ItA);function PU(A,I){var g=ViA(A);if(e9){var C=e9(A);I&&(C=aeA(C).call(C,function(Q){return o1(A,Q).enumerable})),goA(g).apply(g,C)}return g}function R(A){for(var I=1;I0&&CtA(e)?(o=QtA(e),t=a1(A,I,e,o,t,B-1)-1):(BtA(t+1),A[t]=e),t++),s++;return t},itA=a1,etA=yA,otA=itA,ttA=HQ,stA=jE,vtA=w0,rtA=xG;etA({target:"Array",proto:!0},{flat:function(){var A=arguments.length?arguments[0]:void 0,I=ttA(this),g=stA(I),C=rtA(I,0);return C.length=otA(C,I,I,g,0,A===void 0?1:vtA(A)),C}});var atA=oE,PtA=atA("Array","flat"),ctA=fg,ntA=PtA,Uh=Array.prototype,ltA=function(A){var I=A.flat;return A===Uh||ctA(Uh,A)&&I===Uh.flat?ntA:I},dtA=ltA,htA=dtA,DtA=htA,utA=DtA,btA=utA,ytA=btA,wtA=ytA,mtA=wtA,P1=CI(mtA),HE={};(function(A){var I=typeof Uint8Array<"u"&&typeof Uint16Array<"u"&&typeof Int32Array<"u";function g(B,E){return Object.prototype.hasOwnProperty.call(B,E)}A.assign=function(B){for(var E=Array.prototype.slice.call(arguments,1);E.length;){var i=E.shift();if(i){if(typeof i!="object")throw new TypeError(i+"must be non-object");for(var e in i)g(i,e)&&(B[e]=i[e])}}return B},A.shrinkBuf=function(B,E){return B.length===E?B:B.subarray?B.subarray(0,E):(B.length=E,B)};var C={arraySet:function(B,E,i,e,o){if(E.subarray&&B.subarray)B.set(E.subarray(i,i+e),o);else for(var t=0;t=0;)A[I]=0}var StA=0,c1=1,TtA=2,UtA=3,FtA=258,iR=29,bP=256,ja=bP+1+iR,us=30,eR=19,n1=2*ja+1,fe=15,Fh=16,YtA=7,oR=256,l1=16,d1=17,h1=18,rw=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],qn=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],ktA=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],D1=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],ptA=512,GE=new Array(2*(ja+2));lv(GE);var Ea=new Array(2*us);lv(Ea);var fa=new Array(ptA);lv(fa);var Ha=new Array(FtA-UtA+1);lv(Ha);var tR=new Array(iR);lv(tR);var u1,b1,y1,o9=new Array(us);function Yh(A,I,g,C,Q){this.static_tree=A,this.extra_bits=I,this.extra_base=g,this.elems=C,this.max_length=Q,this.has_stree=A&&A.length}function kh(A,I){this.dyn_tree=A,this.max_code=0,this.stat_desc=I}function w1(A){return A<256?fa[A]:fa[256+(A>>>7)]}function xa(A,I){A.pending_buf[A.pending++]=255&I,A.pending_buf[A.pending++]=I>>>8&255}function SC(A,I,g){A.bi_valid>Fh-g?(A.bi_buf|=I<>Fh-A.bi_valid,A.bi_valid+=g-Fh):(A.bi_buf|=I<>>=1,g<<=1;while(--I>0);return g>>>1}function NtA(A){A.bi_valid===16?(xa(A,A.bi_buf),A.bi_buf=0,A.bi_valid=0):A.bi_valid>=8&&(A.pending_buf[A.pending++]=255&A.bi_buf,A.bi_buf>>=8,A.bi_valid-=8)}function ZtA(A,I){var g,C,Q,B,E,i,e=I.dyn_tree,o=I.max_code,t=I.stat_desc.static_tree,s=I.stat_desc.has_stree,v=I.stat_desc.extra_bits,r=I.stat_desc.extra_base,n=I.stat_desc.max_length,a=0;for(B=0;B<=fe;B++)A.bl_count[B]=0;for(e[2*A.heap[A.heap_max]+1]=0,g=A.heap_max+1;gn&&(B=n,a++),e[2*C+1]=B,C>o||(A.bl_count[B]++,E=0,C>=r&&(E=v[C-r]),i=e[2*C],A.opt_len+=i*(B+E),s&&(A.static_len+=i*(t[2*C+1]+E)));if(a!==0){do{for(B=n-1;A.bl_count[B]===0;)B--;A.bl_count[B]--,A.bl_count[B+1]+=2,A.bl_count[n]--,a-=2}while(a>0);for(B=n;B!==0;B--)for(C=A.bl_count[B];C!==0;)(Q=A.heap[--g])>o||(e[2*Q+1]!==B&&(A.opt_len+=(B-e[2*Q+1])*e[2*Q],e[2*Q+1]=B),C--)}}function G1(A,I,g){var C,Q,B=new Array(fe+1),E=0;for(C=1;C<=fe;C++)B[C]=E=E+g[C-1]<<1;for(Q=0;Q<=I;Q++){var i=A[2*Q+1];i!==0&&(A[2*Q]=m1(B[i]++,i))}}function KtA(){var A,I,g,C,Q,B=new Array(fe+1);for(g=0,C=0;C>=7;C8?xa(A,A.bi_buf):A.bi_valid>0&&(A.pending_buf[A.pending++]=A.bi_buf),A.bi_buf=0,A.bi_valid=0}function JtA(A,I,g,C){L1(A),xa(A,g),xa(A,~g),GtA.arraySet(A.pending_buf,A.window,I,g,A.pending),A.pending+=g}function lU(A,I,g,C){var Q=2*I,B=2*g;return A[Q]>1;g>=1;g--)ph(A,B,g);Q=e;do g=A.heap[1],A.heap[1]=A.heap[A.heap_len--],ph(A,B,1),C=A.heap[1],A.heap[--A.heap_max]=g,A.heap[--A.heap_max]=C,B[2*Q]=B[2*g]+B[2*C],A.depth[Q]=(A.depth[g]>=A.depth[C]?A.depth[g]:A.depth[C])+1,B[2*g+1]=B[2*C+1]=Q,A.heap[1]=Q++,ph(A,B,1);while(A.heap_len>=2);A.heap[--A.heap_max]=A.heap[1],ZtA(A,I),G1(B,o,A.bl_count)}function hU(A,I,g){var C,Q,B=-1,E=I[1],i=0,e=7,o=4;for(E===0&&(e=138,o=3),I[2*(g+1)+1]=65535,C=0;C<=g;C++)Q=E,E=I[2*(C+1)+1],++i=3&&A.bl_tree[2*D1[I]+1]===0;I--);return A.opt_len+=3*(I+1)+5+5+4,I}function VtA(A,I,g,C){var Q;for(SC(A,I-257,5),SC(A,g-1,5),SC(A,C-4,4),Q=0;Q>>=1)if(1&g&&A.dyn_ltree[2*I]!==0)return cU;if(A.dyn_ltree[18]!==0||A.dyn_ltree[20]!==0||A.dyn_ltree[26]!==0)return nU;for(I=32;I0?(A.strm.data_type===LtA&&(A.strm.data_type=ztA(A)),aw(A,A.l_desc),aw(A,A.d_desc),E=WtA(A),Q=A.opt_len+3+7>>>3,(B=A.static_len+3+7>>>3)<=Q&&(Q=B)):Q=B=g+5,g+4<=Q&&I!==-1?S1(A,I,g,C):A.strategy===RtA||B===Q?(SC(A,(c1<<1)+(C?1:0),3),dU(A,GE,Ea)):(SC(A,(TtA<<1)+(C?1:0),3),VtA(A,A.l_desc.max_code+1,A.d_desc.max_code+1,E+1),dU(A,A.dyn_ltree,A.dyn_dtree)),R1(A),C&&L1(A)}function ftA(A,I,g){return A.pending_buf[A.d_buf+2*A.last_lit]=I>>>8&255,A.pending_buf[A.d_buf+2*A.last_lit+1]=255&I,A.pending_buf[A.l_buf+A.last_lit]=255&g,A.last_lit++,I===0?A.dyn_ltree[2*g]++:(A.matches++,I--,A.dyn_ltree[2*(Ha[g]+bP+1)]++,A.dyn_dtree[2*w1(I)]++),A.last_lit===A.lit_bufsize-1}function HtA(A,I,g,C){for(var Q=65535&A,B=A>>>16&65535,E=0;g!==0;){g-=E=g>2e3?2e3:g;do B=B+(Q=Q+I[C++]|0)|0;while(--E);Q%=65521,B%=65521}return Q|B<<16}Ft._tr_init=MtA,Ft._tr_stored_block=S1,Ft._tr_flush_block=jtA,Ft._tr_tally=ftA,Ft._tr_align=XtA;var T1=HtA;function xtA(){for(var A,I=[],g=0;g<256;g++){A=g;for(var C=0;C<8;C++)A=1&A?3988292384^A>>>1:A>>>1;I[g]=A}return I}var OtA=xtA();function qtA(A,I,g,C){var Q=OtA,B=C+g;A^=-1;for(var E=C;E>>8^Q[255&(A^I[E])];return~A}var gs,U1=qtA,sR={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"},iC=HE,VQ=Ft,F1=T1,vi=U1,_tA=sR,Fo=0,$tA=1,AsA=3,Hi=4,bU=5,gE=0,yU=1,zQ=-2,IsA=-3,Nh=-5,gsA=-1,CsA=1,Tc=2,QsA=3,BsA=4,EsA=0,isA=2,k0=8,esA=9,osA=15,tsA=8,ssA=29,vsA=256,Pw=vsA+1+ssA,rsA=30,asA=19,PsA=2*Pw+1,csA=15,FA=3,Ti=258,wB=Ti+FA+1,nsA=32,p0=42,cw=69,_n=73,$n=91,Al=103,He=113,Fr=666,lg=1,yP=2,no=3,dv=4,lsA=3;function Ui(A,I){return A.msg=_tA[I],I}function wU(A){return(A<<1)-(A>4?9:0)}function ui(A){for(var I=A.length;--I>=0;)A[I]=0}function ri(A){var I=A.state,g=I.pending;g>A.avail_out&&(g=A.avail_out),g!==0&&(iC.arraySet(A.output,I.pending_buf,I.pending_out,g,A.next_out),A.next_out+=g,I.pending_out+=g,A.total_out+=g,A.avail_out-=g,I.pending-=g,I.pending===0&&(I.pending_out=0))}function Sg(A,I){VQ._tr_flush_block(A,A.block_start>=0?A.block_start:-1,A.strstart-A.block_start,I),A.block_start=A.strstart,ri(A.strm)}function VA(A,I){A.pending_buf[A.pending++]=I}function Cr(A,I){A.pending_buf[A.pending++]=I>>>8&255,A.pending_buf[A.pending++]=255&I}function dsA(A,I,g,C){var Q=A.avail_in;return Q>C&&(Q=C),Q===0?0:(A.avail_in-=Q,iC.arraySet(I,A.input,A.next_in,Q,g),A.state.wrap===1?A.adler=F1(A.adler,I,Q,g):A.state.wrap===2&&(A.adler=vi(A.adler,I,Q,g)),A.next_in+=Q,A.total_in+=Q,Q)}function Y1(A,I){var g,C,Q=A.max_chain_length,B=A.strstart,E=A.prev_length,i=A.nice_match,e=A.strstart>A.w_size-wB?A.strstart-(A.w_size-wB):0,o=A.window,t=A.w_mask,s=A.prev,v=A.strstart+Ti,r=o[B+E-1],n=o[B+E];A.prev_length>=A.good_match&&(Q>>=2),i>A.lookahead&&(i=A.lookahead);do if(o[(g=I)+E]===n&&o[g+E-1]===r&&o[g]===o[B]&&o[++g]===o[B+1]){B+=2,g++;do;while(o[++B]===o[++g]&&o[++B]===o[++g]&&o[++B]===o[++g]&&o[++B]===o[++g]&&o[++B]===o[++g]&&o[++B]===o[++g]&&o[++B]===o[++g]&&o[++B]===o[++g]&&BE){if(A.match_start=I,E=C,C>=i)break;r=o[B+E-1],n=o[B+E]}}while((I=s[I&t])>e&&--Q!=0);return E<=A.lookahead?E:A.lookahead}function lo(A){var I,g,C,Q,B,E=A.w_size;do{if(Q=A.window_size-A.lookahead-A.strstart,A.strstart>=E+(E-wB)){iC.arraySet(A.window,A.window,E,E,0),A.match_start-=E,A.strstart-=E,A.block_start-=E,I=g=A.hash_size;do C=A.head[--I],A.head[I]=C>=E?C-E:0;while(--g);I=g=E;do C=A.prev[--I],A.prev[I]=C>=E?C-E:0;while(--g);Q+=E}if(A.strm.avail_in===0)break;if(g=dsA(A.strm,A.window,A.strstart+A.lookahead,Q),A.lookahead+=g,A.lookahead+A.insert>=FA)for(B=A.strstart-A.insert,A.ins_h=A.window[B],A.ins_h=(A.ins_h<A.pending_buf_size-5&&(g=A.pending_buf_size-5);;){if(A.lookahead<=1){if(lo(A),A.lookahead===0&&I===Fo)return lg;if(A.lookahead===0)break}A.strstart+=A.lookahead,A.lookahead=0;var C=A.block_start+g;if((A.strstart===0||A.strstart>=C)&&(A.lookahead=A.strstart-C,A.strstart=C,Sg(A,!1),A.strm.avail_out===0)||A.strstart-A.block_start>=A.w_size-wB&&(Sg(A,!1),A.strm.avail_out===0))return lg}return A.insert=0,I===Hi?(Sg(A,!0),A.strm.avail_out===0?no:dv):(A.strstart>A.block_start&&(Sg(A,!1),A.strm.avail_out),lg)}function Zh(A,I){for(var g,C;;){if(A.lookahead=FA&&(A.ins_h=(A.ins_h<=FA)if(C=VQ._tr_tally(A,A.strstart-A.match_start,A.match_length-FA),A.lookahead-=A.match_length,A.match_length<=A.max_lazy_match&&A.lookahead>=FA){A.match_length--;do A.strstart++,A.ins_h=(A.ins_h<=FA&&(A.ins_h=(A.ins_h<4096)&&(A.match_length=FA-1)),A.prev_length>=FA&&A.match_length<=A.prev_length){Q=A.strstart+A.lookahead-FA,C=VQ._tr_tally(A,A.strstart-1-A.prev_match,A.prev_length-FA),A.lookahead-=A.prev_length-1,A.prev_length-=2;do++A.strstart<=Q&&(A.ins_h=(A.ins_h<=FA&&A.strstart>0&&(C=E[Q=A.strstart-1])===E[++Q]&&C===E[++Q]&&C===E[++Q]){B=A.strstart+Ti;do;while(C===E[++Q]&&C===E[++Q]&&C===E[++Q]&&C===E[++Q]&&C===E[++Q]&&C===E[++Q]&&C===E[++Q]&&C===E[++Q]&&QA.lookahead&&(A.match_length=A.lookahead)}if(A.match_length>=FA?(g=VQ._tr_tally(A,1,A.match_length-FA),A.lookahead-=A.match_length,A.strstart+=A.match_length,A.match_length=0):(g=VQ._tr_tally(A,0,A.window[A.strstart]),A.lookahead--,A.strstart++),g&&(Sg(A,!1),A.strm.avail_out===0))return lg}return A.insert=0,I===Hi?(Sg(A,!0),A.strm.avail_out===0?no:dv):A.last_lit&&(Sg(A,!1),A.strm.avail_out===0)?lg:yP}function usA(A,I){for(var g;;){if(A.lookahead===0&&(lo(A),A.lookahead===0)){if(I===Fo)return lg;break}if(A.match_length=0,g=VQ._tr_tally(A,0,A.window[A.strstart]),A.lookahead--,A.strstart++,g&&(Sg(A,!1),A.strm.avail_out===0))return lg}return A.insert=0,I===Hi?(Sg(A,!0),A.strm.avail_out===0?no:dv):A.last_lit&&(Sg(A,!1),A.strm.avail_out===0)?lg:yP}function VB(A,I,g,C,Q){this.good_length=A,this.max_lazy=I,this.nice_length=g,this.max_chain=C,this.func=Q}function bsA(A){A.window_size=2*A.w_size,ui(A.head),A.max_lazy_match=gs[A.level].max_lazy,A.good_match=gs[A.level].good_length,A.nice_match=gs[A.level].nice_length,A.max_chain_length=gs[A.level].max_chain,A.strstart=0,A.block_start=0,A.lookahead=0,A.insert=0,A.match_length=A.prev_length=FA-1,A.match_available=0,A.ins_h=0}function ysA(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=k0,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new iC.Buf16(2*PsA),this.dyn_dtree=new iC.Buf16(2*(2*rsA+1)),this.bl_tree=new iC.Buf16(2*(2*asA+1)),ui(this.dyn_ltree),ui(this.dyn_dtree),ui(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new iC.Buf16(csA+1),this.heap=new iC.Buf16(2*Pw+1),ui(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new iC.Buf16(2*Pw+1),ui(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function k1(A){var I;return A&&A.state?(A.total_in=A.total_out=0,A.data_type=isA,(I=A.state).pending=0,I.pending_out=0,I.wrap<0&&(I.wrap=-I.wrap),I.status=I.wrap?p0:He,A.adler=I.wrap===2?0:1,I.last_flush=Fo,VQ._tr_init(I),gE):Ui(A,zQ)}function p1(A){var I=k1(A);return I===gE&&bsA(A.state),I}function wsA(A,I){return A&&A.state?A.state.wrap!==2?zQ:(A.state.gzhead=I,gE):zQ}function N1(A,I,g,C,Q,B){if(!A)return zQ;var E=1;if(I===gsA&&(I=6),C<0?(E=0,C=-C):C>15&&(E=2,C-=16),Q<1||Q>esA||g!==k0||C<8||C>15||I<0||I>9||B<0||B>BsA)return Ui(A,zQ);C===8&&(C=9);var i=new ysA;return A.state=i,i.strm=A,i.wrap=E,i.gzhead=null,i.w_bits=C,i.w_size=1<bU||I<0)return A?Ui(A,zQ):zQ;if(C=A.state,!A.output||!A.input&&A.avail_in!==0||C.status===Fr&&I!==Hi)return Ui(A,A.avail_out===0?Nh:zQ);if(C.strm=A,g=C.last_flush,C.last_flush=I,C.status===p0)if(C.wrap===2)A.adler=0,VA(C,31),VA(C,139),VA(C,8),C.gzhead?(VA(C,(C.gzhead.text?1:0)+(C.gzhead.hcrc?2:0)+(C.gzhead.extra?4:0)+(C.gzhead.name?8:0)+(C.gzhead.comment?16:0)),VA(C,255&C.gzhead.time),VA(C,C.gzhead.time>>8&255),VA(C,C.gzhead.time>>16&255),VA(C,C.gzhead.time>>24&255),VA(C,C.level===9?2:C.strategy>=Tc||C.level<2?4:0),VA(C,255&C.gzhead.os),C.gzhead.extra&&C.gzhead.extra.length&&(VA(C,255&C.gzhead.extra.length),VA(C,C.gzhead.extra.length>>8&255)),C.gzhead.hcrc&&(A.adler=vi(A.adler,C.pending_buf,C.pending,0)),C.gzindex=0,C.status=cw):(VA(C,0),VA(C,0),VA(C,0),VA(C,0),VA(C,0),VA(C,C.level===9?2:C.strategy>=Tc||C.level<2?4:0),VA(C,lsA),C.status=He);else{var E=k0+(C.w_bits-8<<4)<<8;E|=(C.strategy>=Tc||C.level<2?0:C.level<6?1:C.level===6?2:3)<<6,C.strstart!==0&&(E|=nsA),E+=31-E%31,C.status=He,Cr(C,E),C.strstart!==0&&(Cr(C,A.adler>>>16),Cr(C,65535&A.adler)),A.adler=1}if(C.status===cw)if(C.gzhead.extra){for(Q=C.pending;C.gzindex<(65535&C.gzhead.extra.length)&&(C.pending!==C.pending_buf_size||(C.gzhead.hcrc&&C.pending>Q&&(A.adler=vi(A.adler,C.pending_buf,C.pending-Q,Q)),ri(A),Q=C.pending,C.pending!==C.pending_buf_size));)VA(C,255&C.gzhead.extra[C.gzindex]),C.gzindex++;C.gzhead.hcrc&&C.pending>Q&&(A.adler=vi(A.adler,C.pending_buf,C.pending-Q,Q)),C.gzindex===C.gzhead.extra.length&&(C.gzindex=0,C.status=_n)}else C.status=_n;if(C.status===_n)if(C.gzhead.name){Q=C.pending;do{if(C.pending===C.pending_buf_size&&(C.gzhead.hcrc&&C.pending>Q&&(A.adler=vi(A.adler,C.pending_buf,C.pending-Q,Q)),ri(A),Q=C.pending,C.pending===C.pending_buf_size)){B=1;break}B=C.gzindexQ&&(A.adler=vi(A.adler,C.pending_buf,C.pending-Q,Q)),B===0&&(C.gzindex=0,C.status=$n)}else C.status=$n;if(C.status===$n)if(C.gzhead.comment){Q=C.pending;do{if(C.pending===C.pending_buf_size&&(C.gzhead.hcrc&&C.pending>Q&&(A.adler=vi(A.adler,C.pending_buf,C.pending-Q,Q)),ri(A),Q=C.pending,C.pending===C.pending_buf_size)){B=1;break}B=C.gzindexQ&&(A.adler=vi(A.adler,C.pending_buf,C.pending-Q,Q)),B===0&&(C.status=Al)}else C.status=Al;if(C.status===Al&&(C.gzhead.hcrc?(C.pending+2>C.pending_buf_size&&ri(A),C.pending+2<=C.pending_buf_size&&(VA(C,255&A.adler),VA(C,A.adler>>8&255),A.adler=0,C.status=He)):C.status=He),C.pending!==0){if(ri(A),A.avail_out===0)return C.last_flush=-1,gE}else if(A.avail_in===0&&wU(I)<=wU(g)&&I!==Hi)return Ui(A,Nh);if(C.status===Fr&&A.avail_in!==0)return Ui(A,Nh);if(A.avail_in!==0||C.lookahead!==0||I!==Fo&&C.status!==Fr){var i=C.strategy===Tc?usA(C,I):C.strategy===QsA?DsA(C,I):gs[C.level].func(C,I);if(i!==no&&i!==dv||(C.status=Fr),i===lg||i===no)return A.avail_out===0&&(C.last_flush=-1),gE;if(i===yP&&(I===$tA?VQ._tr_align(C):I!==bU&&(VQ._tr_stored_block(C,0,0,!1),I===AsA&&(ui(C.head),C.lookahead===0&&(C.strstart=0,C.block_start=0,C.insert=0))),ri(A),A.avail_out===0))return C.last_flush=-1,gE}return I!==Hi?gE:C.wrap<=0?yU:(C.wrap===2?(VA(C,255&A.adler),VA(C,A.adler>>8&255),VA(C,A.adler>>16&255),VA(C,A.adler>>24&255),VA(C,255&A.total_in),VA(C,A.total_in>>8&255),VA(C,A.total_in>>16&255),VA(C,A.total_in>>24&255)):(Cr(C,A.adler>>>16),Cr(C,65535&A.adler)),ri(A),C.wrap>0&&(C.wrap=-C.wrap),C.pending!==0?gE:yU)}function RsA(A){var I;return A&&A.state?(I=A.state.status)!==p0&&I!==cw&&I!==_n&&I!==$n&&I!==Al&&I!==He&&I!==Fr?Ui(A,zQ):(A.state=null,I===He?Ui(A,IsA):gE):zQ}function LsA(A,I){var g,C,Q,B,E,i,e,o,t=I.length;if(!A||!A.state||(B=(g=A.state).wrap)===2||B===1&&g.status!==p0||g.lookahead)return zQ;for(B===1&&(A.adler=F1(A.adler,I,t,0)),g.wrap=0,t>=g.w_size&&(B===0&&(ui(g.head),g.strstart=0,g.block_start=0,g.insert=0),o=new iC.Buf8(g.w_size),iC.arraySet(o,I,t-g.w_size,g.w_size,0),I=o,t=g.w_size),E=A.avail_in,i=A.next_in,e=A.input,A.avail_in=t,A.next_in=0,A.input=I,lo(g);g.lookahead>=FA;){C=g.strstart,Q=g.lookahead-(FA-1);do g.ins_h=(g.ins_h<=252?6:Qi>=248?5:Qi>=240?4:Qi>=224?3:Qi>=192?2:1;function mU(A,I){if(I<65534&&(A.subarray&&K1||!A.subarray&&Z1))return String.fromCharCode.apply(null,t9.shrinkBuf(A,I));for(var g="",C=0;C>>6,I[B++]=128|63&g):g<65536?(I[B++]=224|g>>>12,I[B++]=128|g>>>6&63,I[B++]=128|63&g):(I[B++]=240|g>>>18,I[B++]=128|g>>>12&63,I[B++]=128|g>>>6&63,I[B++]=128|63&g);return I},Je.buf2binstring=function(A){return mU(A,A.length)},Je.binstring2buf=function(A){for(var I=new t9.Buf8(A.length),g=0,C=I.length;g4)i[C++]=65533,g+=B-1;else{for(Q&=B===2?31:B===3?15:7;B>1&&g1?i[C++]=65533:Q<65536?i[C++]=Q:(Q-=65536,i[C++]=55296|Q>>10&1023,i[C++]=56320|1023&Q)}return mU(i,C)},Je.utf8border=function(A,I){var g;for((I=I||A.length)>A.length&&(I=A.length),g=I-1;g>=0&&(192&A[g])==128;)g--;return g<0||g===0?I:g+Yr[A[g]]>I?g:I};var J1=SsA,ia=fB,kr=HE,nw=Je,lw=sR,TsA=J1,W1=Object.prototype.toString,UsA=0,Kh=4,Cs=0,GU=1,RU=2,FsA=-1,YsA=0,ksA=8;function xe(A){if(!(this instanceof xe))return new xe(A);this.options=kr.assign({level:FsA,method:ksA,chunkSize:16384,windowBits:15,memLevel:8,strategy:YsA,to:""},A||{});var I=this.options;I.raw&&I.windowBits>0?I.windowBits=-I.windowBits:I.gzip&&I.windowBits>0&&I.windowBits<16&&(I.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new TsA,this.strm.avail_out=0;var g=ia.deflateInit2(this.strm,I.level,I.method,I.windowBits,I.memLevel,I.strategy);if(g!==Cs)throw new Error(lw[g]);if(I.header&&ia.deflateSetHeader(this.strm,I.header),I.dictionary){var C;if(C=typeof I.dictionary=="string"?nw.string2buf(I.dictionary):W1.call(I.dictionary)==="[object ArrayBuffer]"?new Uint8Array(I.dictionary):I.dictionary,(g=ia.deflateSetDictionary(this.strm,C))!==Cs)throw new Error(lw[g]);this._dict_set=!0}}function vR(A,I){var g=new xe(I);if(g.push(A,!0),g.err)throw g.msg||lw[g.err];return g.result}function psA(A,I){return(I=I||{}).raw=!0,vR(A,I)}function NsA(A,I){return(I=I||{}).gzip=!0,vR(A,I)}xe.prototype.push=function(A,I){var g,C,Q=this.strm,B=this.options.chunkSize;if(this.ended)return!1;C=I===~~I?I:I===!0?Kh:UsA,typeof A=="string"?Q.input=nw.string2buf(A):W1.call(A)==="[object ArrayBuffer]"?Q.input=new Uint8Array(A):Q.input=A,Q.next_in=0,Q.avail_in=Q.input.length;do{if(Q.avail_out===0&&(Q.output=new kr.Buf8(B),Q.next_out=0,Q.avail_out=B),(g=ia.deflate(Q,C))!==GU&&g!==Cs)return this.onEnd(g),this.ended=!0,!1;Q.avail_out!==0&&(Q.avail_in!==0||C!==Kh&&C!==RU)||(this.options.to==="string"?this.onData(nw.buf2binstring(kr.shrinkBuf(Q.output,Q.next_out))):this.onData(kr.shrinkBuf(Q.output,Q.next_out)))}while((Q.avail_in>0||Q.avail_out===0)&&g!==GU);return C===Kh?(g=ia.deflateEnd(this.strm),this.onEnd(g),this.ended=!0,g===Cs):C!==RU||(this.onEnd(Cs),Q.avail_out=0,!0)},xe.prototype.onData=function(A){this.chunks.push(A)},xe.prototype.onEnd=function(A){A===Cs&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=kr.flattenChunks(this.chunks)),this.chunks=[],this.err=A,this.msg=this.strm.msg},Ur.Deflate=xe,Ur.deflate=vR,Ur.deflateRaw=psA,Ur.gzip=NsA;var pr={},ZsA=xW,KsA=ZsA,JsA=fg,WsA=KsA,LU=RegExp.prototype,VsA=function(A){return A===LU||JsA(LU,A)?WsA(A):A.flags},zsA=VsA,MsA=zsA,XsA=MsA,jsA=XsA,fsA=jsA,HsA=fsA,xsA=HsA,OsA=xsA,ig=CI(OsA),EB={},Uc=30,qsA=12,_sA=function(A,I){var g,C,Q,B,E,i,e,o,t,s,v,r,n,a,c,d,l,h,D,u,w,b,y,S,L;g=A.state,C=A.next_in,S=A.input,Q=C+(A.avail_in-5),B=A.next_out,L=A.output,E=B-(I-A.avail_out),i=B+(A.avail_out-257),e=g.dmax,o=g.wsize,t=g.whave,s=g.wnext,v=g.window,r=g.hold,n=g.bits,a=g.lencode,c=g.distcode,d=(1<>>=D=h>>>24,n-=D,(D=h>>>16&255)===0)L[B++]=65535&h;else{if(!(16&D)){if(64&D){if(32&D){g.mode=qsA;break A}A.msg="invalid literal/length code",g.mode=Uc;break A}h=a[(65535&h)+(r&(1<>>=D,n-=D),n<15&&(r+=S[C++]<>>=D=h>>>24,n-=D,16&(D=h>>>16&255)){if(w=65535&h,n<(D&=15)&&(r+=S[C++]<e){A.msg="invalid distance too far back",g.mode=Uc;break A}if(r>>>=D,n-=D,w>(D=B-E)){if((D=w-D)>t&&g.sane){A.msg="invalid distance too far back",g.mode=Uc;break A}if(b=0,y=v,s===0){if(b+=o-D,D2;)L[B++]=y[b++],L[B++]=y[b++],L[B++]=y[b++],u-=3;u&&(L[B++]=y[b++],u>1&&(L[B++]=y[b++]))}else{b=B-w;do L[B++]=L[b++],L[B++]=L[b++],L[B++]=L[b++],u-=3;while(u>2);u&&(L[B++]=L[b++],u>1&&(L[B++]=L[b++]))}break}if(64&D){A.msg="invalid distance code",g.mode=Uc;break A}h=c[(65535&h)+(r&(1<>3,r&=(1<<(n-=u<<3))-1,A.next_in=C,A.next_out=B,A.avail_in=C=1&&eA[u]===0;u--);if(w>u&&(w=u),u===0)return Q[B++]=20971520,Q[B++]=20971520,i.bits=1,0;for(D=1;D0&&(A===FU||u!==1))return-1;for(K[1]=0,l=1;lTU||A===YU&&L>UU)return 1;for(;;){n=l-y,E[h]r?(a=p[J+E[h]],c=z[EA+E[h]]):(a=96,c=0),e=1<>y)+(o-=e)]=n<<24|a<<16|c;while(o!==0);for(e=1<>=1;if(e!==0?(V&=e-1,V+=e):V=0,h++,--eA[l]==0){if(l===u)break;l=I[g+E[h]]}if(l>w&&(V&s)!==t){for(y===0&&(y=w),v+=D,S=1<<(b=l-y);b+yTU||A===YU&&L>UU)return 1;Q[t=V&s]=w<<24|b<<16|v-B}}return V!==0&&(Q[v+V]=l-y<<24|64<<16),i.bits=w,0},xC=HE,dw=T1,zB=U1,QvA=_sA,ea=CvA,BvA=0,V1=1,z1=2,kU=4,EvA=5,Fc=6,ho=0,ivA=1,evA=2,GB=-2,M1=-3,X1=-4,ovA=-5,pU=8,j1=1,NU=2,ZU=3,KU=4,JU=5,WU=6,VU=7,zU=8,MU=9,XU=10,s9=11,lE=12,Wh=13,jU=14,Vh=15,fU=16,HU=17,xU=18,OU=19,Yc=20,kc=21,qU=22,_U=23,$U=24,AF=25,IF=26,zh=27,gF=28,CF=29,dI=30,f1=31,tvA=852,svA=592,vvA=15,rvA=vvA;function QF(A){return(A>>>24&255)+(A>>>8&65280)+((65280&A)<<8)+((255&A)<<24)}function avA(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new xC.Buf16(320),this.work=new xC.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function H1(A){var I;return A&&A.state?(I=A.state,A.total_in=A.total_out=I.total=0,A.msg="",I.wrap&&(A.adler=1&I.wrap),I.mode=j1,I.last=0,I.havedict=0,I.dmax=32768,I.head=null,I.hold=0,I.bits=0,I.lencode=I.lendyn=new xC.Buf32(tvA),I.distcode=I.distdyn=new xC.Buf32(svA),I.sane=1,I.back=-1,ho):GB}function x1(A){var I;return A&&A.state?((I=A.state).wsize=0,I.whave=0,I.wnext=0,H1(A)):GB}function O1(A,I){var g,C;return A&&A.state?(C=A.state,I<0?(g=0,I=-I):(g=1+(I>>4),I<48&&(I&=15)),I&&(I<8||I>15)?GB:(C.window!==null&&C.wbits!==I&&(C.window=null),C.wrap=g,C.wbits=I,x1(A))):GB}function q1(A,I){var g,C;return A?(C=new avA,A.state=C,C.window=null,(g=O1(A,I))!==ho&&(A.state=null),g):GB}function PvA(A){return q1(A,rvA)}var Mh,Xh,BF=!0;function cvA(A){if(BF){var I;for(Mh=new xC.Buf32(512),Xh=new xC.Buf32(32),I=0;I<144;)A.lens[I++]=8;for(;I<256;)A.lens[I++]=9;for(;I<280;)A.lens[I++]=7;for(;I<288;)A.lens[I++]=8;for(ea(V1,A.lens,0,288,Mh,0,A.work,{bits:9}),I=0;I<32;)A.lens[I++]=5;ea(z1,A.lens,0,32,Xh,0,A.work,{bits:5}),BF=!1}A.lencode=Mh,A.lenbits=9,A.distcode=Xh,A.distbits=5}function _1(A,I,g,C){var Q,B=A.state;return B.window===null&&(B.wsize=1<=B.wsize?(xC.arraySet(B.window,I,g-B.wsize,B.wsize,0),B.wnext=0,B.whave=B.wsize):((Q=B.wsize-B.wnext)>C&&(Q=C),xC.arraySet(B.window,I,g-C,Q,B.wnext),(C-=Q)?(xC.arraySet(B.window,I,g-C,C,0),B.wnext=C,B.whave=B.wsize):(B.wnext+=Q,B.wnext===B.wsize&&(B.wnext=0),B.whave>>8&255,g.check=zB(g.check,V,2,0),o=0,t=0,g.mode=NU;break}if(g.flags=0,g.head&&(g.head.done=!1),!(1&g.wrap)||(((255&o)<<8)+(o>>8))%31){A.msg="incorrect header check",g.mode=dI;break}if((15&o)!==pU){A.msg="unknown compression method",g.mode=dI;break}if(t-=4,w=8+(15&(o>>>=4)),g.wbits===0)g.wbits=w;else if(w>g.wbits){A.msg="invalid window size",g.mode=dI;break}g.dmax=1<>8&1),512&ig(g)&&(V[0]=255&o,V[1]=o>>>8&255,g.check=zB(g.check,V,2,0)),o=0,t=0,g.mode=ZU;case ZU:for(;t<32;){if(i===0)break A;i--,o+=C[B++]<>>8&255,V[2]=o>>>16&255,V[3]=o>>>24&255,g.check=zB(g.check,V,4,0)),o=0,t=0,g.mode=KU;case KU:for(;t<16;){if(i===0)break A;i--,o+=C[B++]<>8),512&ig(g)&&(V[0]=255&o,V[1]=o>>>8&255,g.check=zB(g.check,V,2,0)),o=0,t=0,g.mode=JU;case JU:if(1024&ig(g)){for(;t<16;){if(i===0)break A;i--,o+=C[B++]<>>8&255,g.check=zB(g.check,V,2,0)),o=0,t=0}else g.head&&(g.head.extra=null);g.mode=WU;case WU:if(1024&ig(g)&&((r=g.length)>i&&(r=i),r&&(g.head&&(w=g.head.extra_len-g.length,g.head.extra||(g.head.extra=new Array(g.head.extra_len)),xC.arraySet(g.head.extra,C,B,r,w)),512&ig(g)&&(g.check=zB(g.check,C,r,B)),i-=r,B+=r,g.length-=r),g.length))break A;g.length=0,g.mode=VU;case VU:if(2048&ig(g)){if(i===0)break A;r=0;do w=C[B+r++],g.head&&w&&g.length<65536&&(g.head.name+=String.fromCharCode(w));while(w&&r>9&1,g.head.done=!0),A.adler=g.check=0,g.mode=lE;break;case XU:for(;t<32;){if(i===0)break A;i--,o+=C[B++]<>>=7&t,t-=7&t,g.mode=zh;break}for(;t<3;){if(i===0)break A;i--,o+=C[B++]<>>=1)){case 0:g.mode=jU;break;case 1:if(cvA(g),g.mode=Yc,I===Fc){o>>>=2,t-=2;break A}break;case 2:g.mode=HU;break;case 3:A.msg="invalid block type",g.mode=dI}o>>>=2,t-=2;break;case jU:for(o>>>=7&t,t-=7&t;t<32;){if(i===0)break A;i--,o+=C[B++]<>>16^65535)){A.msg="invalid stored block lengths",g.mode=dI;break}if(g.length=65535&o,o=0,t=0,g.mode=Vh,I===Fc)break A;case Vh:g.mode=fU;case fU:if(r=g.length){if(r>i&&(r=i),r>e&&(r=e),r===0)break A;xC.arraySet(Q,C,B,r,E),i-=r,B+=r,e-=r,E+=r,g.length-=r;break}g.mode=lE;break;case HU:for(;t<14;){if(i===0)break A;i--,o+=C[B++]<>>=5,t-=5,g.ndist=1+(31&o),o>>>=5,t-=5,g.ncode=4+(15&o),o>>>=4,t-=4,g.nlen>286||g.ndist>30){A.msg="too many length or distance symbols",g.mode=dI;break}g.have=0,g.mode=xU;case xU:for(;g.have>>=3,t-=3}for(;g.have<19;)g.lens[z[g.have++]]=0;if(g.lencode=g.lendyn,g.lenbits=7,y={bits:g.lenbits},b=ea(BvA,g.lens,0,19,g.lencode,0,g.work,y),g.lenbits=y.bits,b){A.msg="invalid code lengths set",g.mode=dI;break}g.have=0,g.mode=OU;case OU:for(;g.have>>16&255,l=65535&L,!((c=L>>>24)<=t);){if(i===0)break A;i--,o+=C[B++]<>>=c,t-=c,g.lens[g.have++]=l;else{if(l===16){for(S=c+2;t>>=c,t-=c,g.have===0){A.msg="invalid bit length repeat",g.mode=dI;break}w=g.lens[g.have-1],r=3+(3&o),o>>>=2,t-=2}else if(l===17){for(S=c+3;t>>=c)),o>>>=3,t-=3}else{for(S=c+7;t>>=c)),o>>>=7,t-=7}if(g.have+r>g.nlen+g.ndist){A.msg="invalid bit length repeat",g.mode=dI;break}for(;r--;)g.lens[g.have++]=w}}if(g.mode===dI)break;if(g.lens[256]===0){A.msg="invalid code -- missing end-of-block",g.mode=dI;break}if(g.lenbits=9,y={bits:g.lenbits},b=ea(V1,g.lens,0,g.nlen,g.lencode,0,g.work,y),g.lenbits=y.bits,b){A.msg="invalid literal/lengths set",g.mode=dI;break}if(g.distbits=6,g.distcode=g.distdyn,y={bits:g.distbits},b=ea(z1,g.lens,g.nlen,g.ndist,g.distcode,0,g.work,y),g.distbits=y.bits,b){A.msg="invalid distances set",g.mode=dI;break}if(g.mode=Yc,I===Fc)break A;case Yc:g.mode=kc;case kc:if(i>=6&&e>=258){A.next_out=E,A.avail_out=e,A.next_in=B,A.avail_in=i,g.hold=o,g.bits=t,QvA(A,v),E=A.next_out,Q=A.output,e=A.avail_out,B=A.next_in,C=A.input,i=A.avail_in,o=g.hold,t=g.bits,g.mode===lE&&(g.back=-1);break}for(g.back=0;d=(L=g.lencode[o&(1<>>16&255,l=65535&L,!((c=L>>>24)<=t);){if(i===0)break A;i--,o+=C[B++]<>h)])>>>16&255,l=65535&L,!(h+(c=L>>>24)<=t);){if(i===0)break A;i--,o+=C[B++]<>>=h,t-=h,g.back+=h}if(o>>>=c,t-=c,g.back+=c,g.length=l,d===0){g.mode=IF;break}if(32&d){g.back=-1,g.mode=lE;break}if(64&d){A.msg="invalid literal/length code",g.mode=dI;break}g.extra=15&d,g.mode=qU;case qU:if(g.extra){for(S=g.extra;t>>=g.extra,t-=g.extra,g.back+=g.extra}g.was=g.length,g.mode=_U;case _U:for(;d=(L=g.distcode[o&(1<>>16&255,l=65535&L,!((c=L>>>24)<=t);){if(i===0)break A;i--,o+=C[B++]<>h)])>>>16&255,l=65535&L,!(h+(c=L>>>24)<=t);){if(i===0)break A;i--,o+=C[B++]<>>=h,t-=h,g.back+=h}if(o>>>=c,t-=c,g.back+=c,64&d){A.msg="invalid distance code",g.mode=dI;break}g.offset=l,g.extra=15&d,g.mode=$U;case $U:if(g.extra){for(S=g.extra;t>>=g.extra,t-=g.extra,g.back+=g.extra}if(g.offset>g.dmax){A.msg="invalid distance too far back",g.mode=dI;break}g.mode=AF;case AF:if(e===0)break A;if(r=v-e,g.offset>r){if((r=g.offset-r)>g.whave&&g.sane){A.msg="invalid distance too far back",g.mode=dI;break}r>g.wnext?(r-=g.wnext,n=g.wsize-r):n=g.wnext-r,r>g.length&&(r=g.length),a=g.window}else a=Q,n=E-g.offset,r=g.length;r>e&&(r=e),e-=r,g.length-=r;do Q[E++]=a[n++];while(--r);g.length===0&&(g.mode=kc);break;case IF:if(e===0)break A;Q[E++]=g.length,e--,g.mode=kc;break;case zh:if(g.wrap){for(;t<32;){if(i===0)break A;i--,o|=C[B++]<=0&&I.windowBits<16&&(I.windowBits=-I.windowBits,I.windowBits===0&&(I.windowBits=-15)),!(I.windowBits>=0&&I.windowBits<16)||A&&A.windowBits||(I.windowBits+=32),I.windowBits>15&&I.windowBits<48&&(15&I.windowBits||(I.windowBits|=15)),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new bvA,this.strm.avail_out=0;var g=bs.inflateInit2(this.strm,I.windowBits);if(g!==jI.Z_OK)throw new Error(hw[g]);if(this.header=new yvA,bs.inflateGetHeader(this.strm,this.header),I.dictionary&&(typeof I.dictionary=="string"?I.dictionary=Il.string2buf(I.dictionary):AV.call(I.dictionary)==="[object ArrayBuffer]"&&(I.dictionary=new Uint8Array(I.dictionary)),I.raw&&(g=bs.inflateSetDictionary(this.strm,I.dictionary))!==jI.Z_OK))throw new Error(hw[g])}function Dw(A,I){var g=new Oe(I);if(g.push(A,!0),g.err)throw g.msg||hw[g.err];return g.result}function wvA(A,I){return(I=I||{}).raw=!0,Dw(A,I)}Oe.prototype.push=function(A,I){var g,C,Q,B,E,i=this.strm,e=this.options.chunkSize,o=this.options.dictionary,t=!1;if(this.ended)return!1;C=I===~~I?I:I===!0?jI.Z_FINISH:jI.Z_NO_FLUSH,typeof A=="string"?i.input=Il.binstring2buf(A):AV.call(A)==="[object ArrayBuffer]"?i.input=new Uint8Array(A):i.input=A,i.next_in=0,i.avail_in=i.input.length;do{if(i.avail_out===0&&(i.output=new Nr.Buf8(e),i.next_out=0,i.avail_out=e),(g=bs.inflate(i,jI.Z_NO_FLUSH))===jI.Z_NEED_DICT&&o&&(g=bs.inflateSetDictionary(this.strm,o)),g===jI.Z_BUF_ERROR&&t===!0&&(g=jI.Z_OK,t=!1),g!==jI.Z_STREAM_END&&g!==jI.Z_OK)return this.onEnd(g),this.ended=!0,!1;i.next_out&&(i.avail_out!==0&&g!==jI.Z_STREAM_END&&(i.avail_in!==0||C!==jI.Z_FINISH&&C!==jI.Z_SYNC_FLUSH)||(this.options.to==="string"?(Q=Il.utf8border(i.output,i.next_out),B=i.next_out-Q,E=Il.buf2string(i.output,Q),i.next_out=B,i.avail_out=e-B,B&&Nr.arraySet(i.output,i.output,Q,B,0),this.onData(E)):this.onData(Nr.shrinkBuf(i.output,i.next_out)))),i.avail_in===0&&i.avail_out===0&&(t=!0)}while((i.avail_in>0||i.avail_out===0)&&g!==jI.Z_STREAM_END);return g===jI.Z_STREAM_END&&(C=jI.Z_FINISH),C===jI.Z_FINISH?(g=bs.inflateEnd(this.strm),this.onEnd(g),this.ended=!0,g===jI.Z_OK):C!==jI.Z_SYNC_FLUSH||(this.onEnd(jI.Z_OK),i.avail_out=0,!0)},Oe.prototype.onData=function(A){this.chunks.push(A)},Oe.prototype.onEnd=function(A){A===jI.Z_OK&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=Nr.flattenChunks(this.chunks)),this.chunks=[],this.err=A,this.msg=this.strm.msg},pr.Inflate=Oe,pr.inflate=Dw,pr.inflateRaw=wvA,pr.ungzip=Dw;var mvA=HE.assign,GvA=Ur,RvA=pr,LvA=$1,IV={};mvA(IV,GvA,RvA,LvA);var SvA=IV,uw=CI(SvA);let TvA=1,UvA=class{constructor(A){P(this,"lockingPromise",Promise.resolve()),P(this,"locks",0),P(this,"name",""),P(this,"lockId",void 0),this.lockId=TvA++,A&&(this.name=A)}get isLocked(){return this.locks>0}lock(){let A;this.locks+=1;const I=new Promise(C=>{A=()=>{this.locks-=1,C()}}),g=this.lockingPromise.then(()=>A);return this.lockingPromise=this.lockingPromise.then(()=>I),g}};const EF="VERTC",Qr=()=>window.indexedDB||window.mozIndexedDB||window.webkitIndexedDB||window.msIndexedDB;class yC{constructor(I){P(this,"storeName",void 0),P(this,"pendingList",[]),this.storeName=I,!Ie()&&Qr()&&this._checkAndCreateStore(I)}async _checkAndCreateStore(I,g){const C=await yC._promiseLock.lock();if(Qr().databases){let Q;await new Promise(B=>{const E=()=>Qr().databases().finally(B);Q=setInterval(E,100),E()}).finally(()=>clearInterval(Q))}return new Promise(Q=>{yC.db&&(yC.db.close(),delete yC.db);const B=g?Qr().open(EF,g):Qr().open(EF);B.onupgradeneeded=()=>{B.result.createObjectStore(I)},B.onerror=()=>{console.error("IndexedDBInterface error",B.error)},B.onsuccess=()=>{const E=B.result;yC.db=E;try{yC.db.transaction(this.storeName,"readonly"),this.pendingList.forEach(async i=>{let{txMode:e,pendResolve:o,pendReject:t}=i;try{o(await this._getStore(e))}catch{t()}}),Q()}catch{Q(this._checkAndCreateStore(I,E.version+1))}finally{C()}}})}async _getStore(I){const g=await yC._promiseLock.lock();return new Promise((C,Q)=>{if(!yC.db)return this.pendingList.push({txMode:I,pendResolve:C,pendReject:Q}),void g();try{C(yC.db.transaction(this.storeName,I).objectStore(this.storeName))}catch{return void this.pendingList.push({txMode:I,pendResolve:C,pendReject:Q})}finally{g()}})}async put2String(I,g){let C;try{C=JSON.stringify(I)}catch{C=I}return await this.put(C,g)}async get4String(I){const g=await this.get(I);let C;try{C=JSON.parse(g)}catch{C=g}return C}async put(I,g){const C=await this._getStore("readwrite");return new Promise((Q,B)=>{const E=C.put(I,g);E.onsuccess=()=>{Q()},E.onerror=i=>{B(i)}})}async get(I){const g=await this._getStore("readonly");return new Promise((C,Q)=>{const B=g.get(I);B.onsuccess=()=>{C(B.result)},B.onerror=E=>{Q(E)}})}async del(I){const g=await this._getStore("readwrite");return new Promise((C,Q)=>{const B=g.delete(I);B.onsuccess=()=>{C()},B.onerror=E=>{Q(E)}})}}P(yC,"db",void 0),P(yC,"state","init"),P(yC,"_promiseLock",new UvA("iDB"));var FvA=yA,YvA=IW.includes,kvA=II,pvA=kvA(function(){return!Array(1).includes()});FvA({target:"Array",proto:!0,forced:pvA},{includes:function(A){return YvA(this,A,arguments.length>1?arguments[1]:void 0)}});var NvA=oE,ZvA=NvA("Array","includes"),KvA=HW,JvA=TypeError,WvA=function(A){if(KvA(A))throw new JvA("The method doesn't accept regular expressions");return A},VvA=vI,zvA=VvA("match"),MvA=function(A){var I=/./;try{"/./"[A](I)}catch{try{return I[zvA]=!1,"/./"[A](I)}catch{}}return!1},XvA=yA,jvA=fA,fvA=WvA,HvA=To,iF=NC,xvA=MvA,OvA=jvA("".indexOf);XvA({target:"String",proto:!0,forced:!xvA("includes")},{includes:function(A){return!!~OvA(iF(HvA(this)),iF(fvA(A)),arguments.length>1?arguments[1]:void 0)}});var qvA=oE,_vA=qvA("String","includes"),eF=fg,$vA=ZvA,ArA=_vA,jh=Array.prototype,fh=String.prototype,IrA=function(A){var I=A.includes;return A===jh||eF(jh,A)&&I===jh.includes?$vA:typeof A=="string"||A===fh||eF(fh,A)&&I===fh.includes?ArA:I},grA=IrA,CrA=grA,QrA=CrA,BrA=QrA,ErA=BrA,irA=ErA,erA=irA,gV=CI(erA);function orA(A,I){if(A==null)return{};var g={};for(var C in A)if({}.hasOwnProperty.call(A,C)){if(gV(I).call(I,C))continue;g[C]=A[C]}return g}function ve(A,I){if(A==null)return{};var g,C,Q=orA(A,I);if(e9){var B=e9(A);for(C=0;C0;){const Q=this.inBuffer[0],{message:B}=Q,E=R(R({},ve(Q,trA)),{},{message:R(R({},B),{},{msg:""})}),i=JSON.stringify(E).length,e=I-i,o=R({},E);if(e>B.msg.length)o.message.msg=B.msg,this.inBuffer.shift();else{if(!(e>=10))break;{const v=B.msg.slice(0,e);o.message.msg=v,o.message.end=!1,this.inBuffer[0].message.msg=B.msg.slice(e),this.inBuffer[0].message.index++}}const t=JSON.stringify(o.message),s=t.length;I-=s+i,C+=s+i,g.push(R(R({},o),{},{message:t}))}return{payload:g,payloadSize:C}}unshift(I){this.outBuffer=I.concat(this.outBuffer)}get(){return[...this.outBuffer,...this.inBuffer.map(I=>R(R({},I),{},{message:JSON.stringify(I.message)}))]}set(I){I.forEach(g=>{srA(g)?this.outBuffer.push(g):(g.message||(g.message=""),this.inBuffer.push(R(R({},g),{},{message:JSON.parse(g.message)})))}),this.outBuffer=[].concat(this.outBuffer),this.inBuffer=[].concat(this.inBuffer)}isEmpty(){return this.inBuffer.length===0&&this.outBuffer.length===0}}var Hh,xh,CV=new vrA;const rrA={product_line:"rtc",report_version:"5",os:"web",user_agent:Ie()?"":(Hh=navigator)===null||Hh===void 0?void 0:Hh.userAgent,platform:"web",product:"webrtc",app_state:"active"},oF=typeof window<"u"&&(window.location.search.includes("_rtc_debug_")||((xh=window.localStorage)===null||xh===void 0?void 0:xh.getItem("_rtc_debug_")));class arA{constructor(I){P(this,"_buffer",void 0),this._buffer=new yC(I)}async set(I,g){await this._buffer.put2String(I,g)}async get(I){var g;let C=[];try{C=await this._buffer.get4String(I)}catch{}return(g=C)!==null&&g!==void 0?g:[]}}class PrA{constructor(){P(this,"reportCommon",rrA),P(this,"reportIds",new Map),P(this,"dataBuffer",[]),P(this,"reportorList",[]),P(this,"dbBuffer",void 0),P(this,"posting",!1),P(this,"sucSendTimer",void 0),P(this,"preSucTime",0),P(this,"errSendTimer",void 0),P(this,"errSendDelay",100),P(this,"_logServerUrl",void 0),P(this,"_retryCount",0),P(this,"_reportLimit",5e5),P(this,"_disableTimeout",!1),Ie()||(window.addEventListener("beforeunload",()=>{clearTimeout(this.errSendTimer),clearTimeout(this.sucSendTimer),this.send(void 0,!0)}),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"?this.setCommonStats({app_state:"active"}):document.visibilityState==="hidden"&&this.setCommonStats({app_state:"background"})}),oF&&(window.__rtc_debug_reportor__=this)),dB.on("UPLOAD_REPORT_LIMIT",I=>{this.setReportLimit(I)}),dB.on("ENABLE_REPORT_IDB_BUFFER",I=>{I&&this.enableIndexedDBBuffer()}),setTimeout(()=>{this.reportorList.push(aR),this.reportorList.push(CV)})}setUrl(I){this._logServerUrl=I}setCommonStats(I){this.reportCommon=Object.assign(this.reportCommon,I)}getCommonStats(){return this.reportCommon}setReportLimit(I){this._reportLimit=Math.max(I,5e4),this._reportLimit=Math.min(I,5e5)}getReportId(I){var g;I=(g=I)!==null&&g!==void 0?g:"__global__",this.reportIds.has(I)||this.reportIds.set(I,0);let C=this.reportIds.get(I);return C===void 0&&(Qs("no reportId in reportId map with engine-session-id ".concat(I),0,{}),C=0),this.reportIds.set(I,C+1),C}push(I){if(arguments.length>1&&arguments[1]!==void 0&&arguments[1])this.send(I);else{var g;const C=(g=I.engine_session_id)!==null&&g!==void 0?g:"__global__";this.reportIds.has(C)||this.reportIds.set(C,0),this.dataBuffer.push(I),!this.posting&&!this.errSendTimer&&Date.now()-this.preSucTime>2e3&&(clearTimeout(this.sucSendTimer),this.send())}}enableIndexedDBBuffer(){this.dbBuffer||(this.dbBuffer=new arA("ReportorDBBuffer"),this.dbBuffer.get("LogReportor").then(I=>{I.forEach(g=>{this.push(g)})}),this.reportorList.forEach(I=>{var g;(g=this.dbBuffer)===null||g===void 0||g.get(I.name).then(C=>{I.set(C)})}))}backup(){try{var I;(I=this.dbBuffer)===null||I===void 0||I.set([...this.dataBuffer],"LogReportor"),this.reportorList.forEach(g=>{var C;(C=this.dbBuffer)===null||C===void 0||C.set([...g.get()],g.name)})}catch(g){Qs("Error when save log into IDB",-1,g)}}unshift(I){this.dataBuffer=I[0].concat(this.dataBuffer),this.reportorList.forEach((g,C)=>{var Q;g.unshift((Q=I[C+1])!==null&&Q!==void 0?Q:[])})}_splice(){let I=crA(this.dataBuffer,this._reportLimit);I===0&&this.dataBuffer.length>0&&(this._reportLimit=JSON.stringify(this.dataBuffer[0]).length+10,I=1,Qs("update report limit to ".concat(this._reportLimit),0,null));const g=this.dataBuffer.splice(0,I),C=JSON.stringify(g).length,Q=[g];let B=this._reportLimit-C;return this.reportorList.forEach(E=>{const{payload:i,payloadSize:e}=E.splice(B);i.forEach(o=>{var t,s,v;o.report_id===void 0&&(o.report_id=this.getReportId(o.engine_session_id),!Ie()&&window.__onRTCReport&&((t=(s=window).__onRTCReport)===null||t===void 0||t.call(s,(v=o.engine_session_id)!==null&&v!==void 0?v:"global",o,this.getCommonStats())))}),Q.push(i),B-=e}),Q}async send(I,g){this.backup();const C=this.reportorList.reduce((s,v)=>s&&v.isEmpty(),!0);if(!I&&!this.dataBuffer.length&&C||!this._logServerUrl)return;I||(this.posting=!0);let Q=[];I||(Q=this._splice());const B=oF,E={data:I||P1(Q).call(Q),header:R(R({},this.reportCommon),{},{http_retry_count:this._retryCount}),from:"web",os:"web",version:"1"},i={method:"POST",body:B?JSON.stringify(E):uw.gzip(JSON.stringify(E))};if(!this._disableTimeout)try{const s=new AbortController;i.signal=s.signal,setTimeout(()=>{s.abort()},1e4)}catch{console.warn("AbortController is not supported"),this._disableTimeout=!0}B||(i.headers={"Content-Encoding":"gzip","Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"});let e,o,t=null;try{e=await fetch(this._logServerUrl,i),e.status!==200&&e.status!==304||(t=JSON.parse(await e.text()))}catch(s){o=s}I||(this.posting=!1),t&&t.StatusCode===0?I||g||this.sucSend():(setTimeout(()=>{var s,v,r;Qs("reportor post error, resJSON:".concat((s=t)===null||s===void 0?void 0:s.toString()," err:").concat(o),(v=(r=e)===null||r===void 0?void 0:r.status)!==null&&v!==void 0?v:-1,o)},0),I?this.send(I):(this.unshift(Q),g?this.send():this.errSend()))}_getDataBufferTotalSize(){return this.dataBuffer.reduce((I,g)=>I+JSON.stringify(g).length,0)}sucSend(){this.errSendDelay=100,this._retryCount=0,this.preSucTime=Date.now();const I=this._getDataBufferTotalSize()>1e6?1e3:2e3;this.sucSendTimer=setTimeout(()=>this.send(),I)}errSend(){this.errSendTimer=setTimeout(()=>{this.send(),delete this.errSendTimer},this.errSendDelay),this.errSendDelay*=2,this._retryCount++}}function crA(A,I){let g=0;for(let C=0;CI)return C;return A.length}var oa=new PrA;class QV{constructor(I){P(this,"modifyIds",{pre_connection:!1}),this.id=I}report(I,g,C){const Q=R(R(R({event_key:I,rtc_timestamp:Date.now()},this.modifyIds),g),{},{report_id:oa.getReportId(this.modifyIds.engine_session_id)});var B,E;typeof C=="object"&&Object.keys(C).length>0&&(Q.common_extra_info=JSON.stringify(C)),Object.keys(Q).forEach(i=>{Q[i]!==void 0&&Q[i]!==""||delete Q[i]}),!Ie()&&window.__onRTCReport&&((B=(E=window).__onRTCReport)===null||B===void 0||B.call(E,this.modifyIds.engine_session_id,Q,oa.getCommonStats())),{}.VITE_TEST!=="UT"&&oa.push(Q)}reportLog(I){const g=R(R({event_key:"rtc_invoke_status",sdk_api_name:"console_log",rtc_timestamp:Date.now()},this.modifyIds),{},{message:I});aR.push(g)}reportLongString(I,g){const C=R(R({event_key:"rtc_invoke_status",sdk_api_name:"sdk_long_string_".concat(I),rtc_timestamp:Date.now()},this.modifyIds),{},{message:g});CV.push(C)}set(I){this.modifyIds=Object.assign(this.modifyIds,I)}destroy(){}}class yQ{constructor(I){P(this,"_preTime",Date.now()),P(this,"_one2oneNum",0),P(this,"_one2manyNum",0),P(this,"_one2oneMsgCache",new Map),P(this,"_one2manyMsgCache",new Map),P(this,"roomId",""),P(this,"userId",""),P(this,"rtsSessionId",""),P(this,"logger",void 0),P(this,"serverUrl","server"),this.id=I,this.logger=new uA("MessageReportor",1)}needReport(I){return!!yQ.config&&(Date.now()-this._preTime>=36e5&&(this._preTime=Date.now(),this._one2oneNum=0,this._one2manyNum=0),I==="one2one"&&this._one2oneNum{new uA("MessageReportor",1).info("setConfig","get config: ".concat(JSON.stringify(A))),yQ.config=A},lrA=A=>{const I=Yg.get(A)||new yQ(A);return Yg.set(A,I),I},drA=A=>{const I=Yg.get(A);I&&(I.destroy(),Yg.delete(A))},hrA=(A,I)=>{const g=Yg.get(A);g&&(g.serverUrl=I)},DrA=(A,I)=>{const g=Yg.get(A);g&&(g.roomId=I||"")},urA=(A,I)=>{const g=Yg.get(A);g&&(g.userId=I||"")},brA=(A,I)=>{const g=Yg.get(A);g&&(g.rtsSessionId=I)},yrA=(A,I)=>{const g=Yg.get(A);if(g!=null&&g.needReport("one2one")){const C=I.to?"one2one":"one2server";I.enable_report=!0,I.report_msg_id=I.id,g.cacheP2PMsg({rts_session_id:g.rtsSessionId,msg_id:"".concat(I.id),node_role:"src_sdk",from:I.from,to:I.to||g.serverUrl,msg_type:C,type:C,rts_room_id:I.room,req_ts:Date.now(),send_ts:Date.now(),ack_ts:Date.now(),msg_size:0,error_code:0,recv_msg_ts:0,fwd_msg_ts:0,reply_ack_ts:0,cur_dst_uid:""})}return I},wrA=(A,I,g)=>{var C;I.enable_report&&nv(I.report_msg_id)&&((C=Yg.get(A))===null||C===void 0||C.updateP2PMsg("".concat(I.report_msg_id),{send_ts:Date.now(),msg_size:g}))},mrA=(A,I,g)=>{if(I.enable_report&&nv(I.report_msg_id)){const C=Yg.get(A);C==null||C.updateP2PMsg("".concat(I.report_msg_id),{ack_ts:Date.now(),error_code:g}),C==null||C.reportP2PMsg("".concat(I.report_msg_id))}},GrA=(A,I,g)=>{const C=Yg.get(A);return C!=null&&C.needReport("one2many")&&(g.enable_report=!0,g.report_msg_id=I,C.cacheCustomMsg({rts_session_id:C.rtsSessionId,msg_id:"".concat(I),node_role:"src_sdk",from:g.clientId,to:C.roomId||g.roomId,msg_type:"one2many",type:"one2many",rts_room_id:C.roomId,req_ts:Date.now(),send_ts:Date.now(),ack_ts:Date.now(),msg_size:0,error_code:0,recv_msg_ts:0,fwd_msg_ts:0,reply_ack_ts:0,cur_dst_uid:""})),g},RrA=(A,I,g)=>{if(I.enable_report&&nv(I.report_msg_id)){const C=Yg.get(A);C&&C.updateOne2ManyMsg("".concat(I.report_msg_id),{send_ts:Date.now(),msg_size:g})}},LrA=(A,I,g)=>{if(I.enable_report&&nv(I.report_msg_id)){const C=Yg.get(A);C&&(C==null||C.updateOne2ManyMsg("".concat(I.report_msg_id),{ack_ts:Date.now(),error_code:g}),C==null||C.reportOne2ManyMsg("".concat(I.report_msg_id)))}},SrA=(A,I,g)=>{if(I.enable_report&&nv(I.report_msg_id)){const C=Yg.get(A),Q=I.to?"one2one":"one2many";C==null||C.reportMsgRecv({rts_session_id:C.rtsSessionId,msg_id:"".concat(I.report_msg_id),msg_size:g.msg_size,node_role:"dst_sdk",msg_type:Q,type:Q,rts_room_id:I.room,from:I.from,to:I.to||I.room,error_code:0,recv_msg_ts:g.recv_msg_ts,fwd_msg_ts:g.fwd_msg_ts,reply_ack_ts:Date.now(),cur_dst_uid:I.to?"":C.userId,config_version:"",req_ts:0,send_ts:0,ack_ts:0})}},TrA=(A,I,g)=>{if(I.enable_report&&nv(I.report_msg_id)){const C=Yg.get(A);C==null||C.reportMsgRecv({rts_session_id:C.rtsSessionId,msg_id:"".concat(I.report_msg_id),msg_size:g.msg_size,node_role:"dst_sdk",msg_type:"one2many",type:"one2many",rts_room_id:I.roomId,from:I.clientId,to:I.roomId,error_code:0,recv_msg_ts:g.recv_msg_ts,fwd_msg_ts:g.fwd_msg_ts,reply_ack_ts:Date.now(),cur_dst_uid:C.userId,config_version:"",req_ts:0,send_ts:0,ack_ts:0})}},KI={_cache:Yg,setServerUrl:hrA,setConfig:nrA,setRtsSessionId:brA,createRTSMsgReportor:lrA,destroyRTSMsgReportor:drA,setRoomId:DrA,setUserId:urA,samplingP2PMsg:yrA,updateP2PMsgReq:wrA,updateP2PMsgAck:mrA,samplingOne2ManyMsg:GrA,reportP2PMsgRecv:SrA,updateOne2ManyMsgAck:LrA,updateOne2ManyMsgReq:RrA,reportOne2ManyMsgRecv:TrA};class UrA{constructor(I){P(this,"_timer",void 0),P(this,"userMessage",{}),P(this,"roomMessage",{}),this.id=I,this._setTimer()}_setTimer(){const I=()=>{this._reportAndgReset(),clearTimeout(this._timer),this._timer=setTimeout(I,1e4)};I()}_reportAndgReset(){(Object.keys(this.userMessage).length||Object.keys(this.roomMessage).length)&&(this._report(),this._reset())}_report(){var I;(I=tI(this.id))===null||I===void 0||I.report("rtc_message_statistics",{dc_user_message:Object.keys(this.userMessage).map(g=>this.userMessage[g]),dc_room_message:Object.keys(this.roomMessage).map(g=>this.roomMessage[g]),media_server_ip:""})}_reset(){this.userMessage={},this.roomMessage={}}_checkInitUserMessage(I,g){this.userMessage["".concat(g,"-").concat(I)]||(this.userMessage["".concat(g,"-").concat(I)]={dc_peer_user_id:I,dc_send_total:0,dc_recv_total:0,dc_send_ack:0,dc_send_fail:0,dc_fail_timeout:0,dc_fail_no_receiver:0,dc_fail_no_relay_path:0,dc_cost_time:0,dc_cost_e2s:0,dc_cost_s2s:0,dc_least_time:1/0,dc_most_time:0,dc_cost_peer_s2e:0,dc_send_ack_100:0,dc_send_ack_200:0,dc_send_ack_400:0,dc_send_ack_1s:0,dc_message_type:g,dc_send_binary:0})}_sendUserMessage(I,g,C){this._checkInitUserMessage(I,g),this.userMessage["".concat(g,"-").concat(I)].dc_send_total++,C&&this.userMessage["".concat(g,"-").concat(I)].dc_send_binary++}_recvUserMessage(I,g){this._checkInitUserMessage(I,g),this.userMessage["".concat(g,"-").concat(I)].dc_recv_total++}_sendUserFail(I,g,C){const Q=this.userMessage["".concat(g,"-").concat(I)];Q&&(Q.dc_send_fail++,this._handleUserFail(Q,C))}_handleUserFail(I,g){g&&(g.code||g.err)&&(["TIME_OUT","USER_MESSAGE_TIMEOUT"].includes(g.code)?I.dc_fail_timeout++:g.err===3?I.dc_fail_no_receiver++:g.err===4?I.dc_fail_no_relay_path++:g.err===1&&I.dc_fail_timeout++)}_sendUserAck(I,g,C,Q,B){const E=this.userMessage["".concat(g,"-").concat(I)];E&&(E.dc_send_ack++,E.dc_cost_time+=C,E.dc_cost_s2s+=Q||0,E.dc_cost_peer_s2e+=B,E.dc_cost_e2s+=C-(Q||0)-B,C/2<=100?(E.dc_send_ack_100++,E.dc_send_ack_200++,E.dc_send_ack_400++,E.dc_send_ack_1s++):C/2<=200?(E.dc_send_ack_200++,E.dc_send_ack_400++,E.dc_send_ack_1s++):C/2<=400?(E.dc_send_ack_400++,E.dc_send_ack_1s++):C/2<=1e3&&E.dc_send_ack_1s++,CE.dc_most_time&&(E.dc_most_time=C))}sendRoomMessage(I,g){this.roomMessage[I]||(this.roomMessage[I]={dc_room_id:I,dc_send_total:0,dc_send_ack:0,dc_cost_time:0,dc_least_time:1/0,dc_most_time:0,dc_send_fail:0,dc_send_ack_100:0,dc_send_ack_200:0,dc_send_ack_400:0,dc_send_ack_1s:0,dc_send_binary:0}),this.roomMessage[I].dc_send_total++,g&&this.roomMessage[I].dc_send_binary++}sendRoomFail(I){const g=this.roomMessage[I];g&&g.dc_send_fail++}sendRoomAck(I,g){const C=this.roomMessage[I];C&&(C.dc_send_ack++,C.dc_cost_time+=g,gC.dc_most_time&&(C.dc_most_time=g),g/2<=100?(C.dc_send_ack_100++,C.dc_send_ack_200++,C.dc_send_ack_400++,C.dc_send_ack_1s++):g/2<=200?(C.dc_send_ack_200++,C.dc_send_ack_400++,C.dc_send_ack_1s++):g/2<=400?(C.dc_send_ack_400++,C.dc_send_ack_1s++):g/2<=1e3&&C.dc_send_ack_1s++)}sendP2PMessage(I,g){this._sendUserMessage(I,"p2p",g)}recvP2PMessage(I){this._recvUserMessage(I,"p2p")}sendP2PFail(I,g){this._sendUserFail(I,"p2p",g)}sendP2PAck(I,g,C,Q){this._sendUserAck(I,"p2p",g,C,Q)}sendP2POutRoomMessage(I,g){this._sendUserMessage(I,"p2p_outside_room",g)}recvP2POutRoomMessage(I){this._recvUserMessage(I,"p2p_outside_room")}sendP2POutRoomFail(I,g){this._sendUserFail(I,"p2p_outside_room",g)}sendP2POutRoomAck(I,g,C,Q){this._sendUserAck(I,"p2p_outside_room",g,C,Q)}sendP2serverMessage(I){this._sendUserMessage("","p2server",I)}sendP2serverFail(I){this._sendUserFail("","p2server",I)}sendP2serveAck(I,g,C){this._sendUserAck("","p2server",I,g,C)}countP2PMessage(I,g,C,Q,B){this.sendP2PMessage(g,C),I?this.sendP2PAck(g,Date.now()-Q,B.s2s_time||0,B.s2e_time||0):this.sendP2PFail(g,B)}countRoomMessage(I,g,C,Q){this.sendRoomMessage(g,C),I?this.sendRoomAck(g,Date.now()-Q):this.sendRoomFail(g)}countUserMessageOutsideRoom(I,g,C,Q,B){this.sendP2POutRoomMessage(g,C),I?this.sendP2POutRoomAck(g,Date.now()-Q,B.s2s_time,B.s2e_time):this.sendP2POutRoomFail(g,B)}countServerMessage(I,g,C,Q){this.sendP2serverMessage(g),I?(Q=Q||{},this.sendP2serveAck(Date.now()-C,Q.s2s_time||0,Q.s2e_time||0)):this.sendP2serverFail(Q)}destroy(){this._reset(),clearTimeout(this._timer)}}const ta=A=>{oa.setCommonStats(A)},BV=A=>{oa.setUrl(A)},wP=new QV("global"),EV=(A,I,g)=>{wP.report("rtc_sdk_api_call",{sdk_api_name:A,error_code:I,message:g})},Oh=(A,I,g)=>{wP.report("rtc_sdk_callback",{sdk_callback_name:A,error_code:I,message:g})},Qs=(A,I,g)=>{wP.report("rtc_error",{message:A,error_code:I},g)},tF=function(A,I){let g=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,C=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"",Q=arguments.length>4?arguments[4]:void 0;wP.report("rtc_invoke_status",{sdk_api_name:A,message:I,error_code:g,stream_id:C,elapse:0},Q)};function FrA(A){wP.reportLog(A)}const rR=new Map,tI=A=>rR.get(A),iV=(A,I)=>{const g=new QV(A);return g.set(R(R({},I),{},{engine_session_id:tC()})),g.report("sdk_init_engine",{start:Date.now(),type:"begin"}),rR.set(A,g),g},YrA=A=>{A.report("sdk_init_engine",{start:Date.now(),type:"end"}),rR.delete(A.id)},sF=new Map;function Z(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],I=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};I=Object.assign({debounce:0},I);const{debounce:g,debounceTag:C}=I;function Q(B,E,i,e){if(!g)return E(...i);{const o="".concat(e,"_").concat(B),t=sF.get(o);clearTimeout(t);const s=setTimeout(()=>{E(...i)},g);sF.set(o,s)}}return function(B,E,i){if(typeof i.value=="function"){const e=i.value;i.value=function(){for(var o,t,s=arguments.length,v=new Array(s),r=0;r{c[u]=v[w]}),E==="joinRoom"&&((d=tI(n))===null||d===void 0||d.set({room_id:v[1],user_id:(l=v[2])===null||l===void 0?void 0:l.userId}));let h,D="";if(C)try{D=C(...v)}catch{}Q(E,krA,[n,E,v,c,{event_session_id:a}],"start_".concat(D));try{h=e.apply(this,v)}catch(u){throw Q(E,Bs,[n,E,u.message,u.code||-1,{event_session_id:a}],"end_".concat(D)),u}return typeof((o=h)===null||o===void 0?void 0:o.then)=="function"?h.then(u=>(Q(E,Bs,[n,E,[u??{}],0,{event_session_id:a}],"end_".concat(D)),u)).catch(u=>{throw Q(E,Bs,[n,E,u.message,u.code,{event_session_id:a}],"end_".concat(D)),u}):(Q(E,Bs,[n,E,[(t=h)!==null&&t!==void 0?t:{}],0,{event_session_id:a}],"end_".concat(D)),h)}}}}const krA=function(A,I,g,C){var Q;let B=arguments.length>4&&arguments[4]!==void 0?arguments[4]:{};const E=R({sdk_api_name:I,message:JSON.stringify(eV(g)),error_code:0},B);(Q=tI(A))===null||Q===void 0||Q.report("rtc_sdk_api_call",E,C)},Bs=function(A,I,g){var C;let Q=arguments.length>4&&arguments[4]!==void 0?arguments[4]:{};const B=R({sdk_callback_name:I,error_code:arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,message:JSON.stringify(Array.isArray(g)?eV(g):g)},Q);(C=tI(A))===null||C===void 0||C.report("rtc_sdk_callback",B)},AI=function(A,I,g){var C;let Q=arguments.length>3&&arguments[3]!==void 0?arguments[3]:0,B=arguments.length>4&&arguments[4]!==void 0?arguments[4]:"",E=arguments.length>5?arguments[5]:void 0;(C=tI(A))===null||C===void 0||C.report("rtc_invoke_status",{sdk_api_name:I,message:g,error_code:Q,stream_id:B,elapse:0},E)},qh=10;function eV(A){const I=g=>{if(g!=null&&g._reportName)return g._reportName;if(g instanceof HTMLElement)return g.toString();if(g instanceof ArrayBuffer||ArrayBuffer.isView(g)){const Q=ArrayBuffer.isView(g)?g.buffer:g,B=Q.byteLength;let E=[];if(B>qh){var C;const i=new DataView(Q),e=Array.from({length:qh/2}).map((t,s)=>i.getUint8(s)),o=fW(C=Array.from({length:qh/2}).map((t,s)=>B-1-s)).call(C).map(t=>i.getUint8(t));E=[...e,"...",...o]}else E=Array.from(new Uint8Array(Q));return"".concat(g.constructor.name,"(").concat(B,") [").concat(E.join(", "),"]")}if(g instanceof ImageData)return"ImageData";if(Array.isArray(g))return g.map(I);if(["[object Object]","[object MediaStreamTrack]"].includes(Object.prototype.toString.call(g))){const Q={};for(const B in g)Q[B]=I(g[B]);return Q}return g instanceof Function?"[User Function]":g};return A.map(I)}const prA=typeof window<"u"&&window.location.search.includes("_rtc_upload_console_");class NrA{constructor(){P(this,"name","ConsoleReportor"),P(this,"_uuid","".concat(Math.floor(899*Math.random())+100)),P(this,"_consoleReportId",0),P(this,"_engineReportIdMap",new Map),P(this,"_enabled","NULL"),P(this,"_consoleCutLength",dB.getParameter("UPLOAD_CONSOLE_LENGTH_CUT")),P(this,"buffer",[]),prA&&setTimeout(()=>{this.switchOn()},0),dB.on("UPLOAD_CONSOLE_ON",I=>{I?this.switchOn():this.turnOff()}),dB.on("UPLOAD_CONSOLE_LENGTH_CUT",I=>{this._consoleCutLength=I})}get enabled(){return this._enabled!=="OFF"}switchOn(){this._enabled==="NULL"&&(console.log("[LoggerReportor.constructor] console upload switch ON"),this._enabled="ON")}turnOff(){this._enabled==="NULL"&&(console.log("[LoggerReportor.constructor] console upload switch OFF"),this._enabled="OFF",this.buffer=[])}getEngineConsoleId(I){var g;const C=(g=this._engineReportIdMap.get(I))!==null&&g!==void 0?g:0;return this._engineReportIdMap.set(I,C+1),C}report(I,g,C,Q,B,E,i,e,o){if(this._enabled==="OFF")return;const t=tI(g),s=this._consoleReportId++,v=this.getEngineConsoleId(g),r=vF(o,this._consoleCutLength),n=[...o],a="".concat(e).replace(/%o|%s/gi,()=>vF([n.shift()],this._consoleCutLength)),c="[".concat(this._uuid,"-").concat(s,"][").concat(g,"-").concat(v,"]-").concat(C,"-").concat(I,"[").concat(Q,"]").concat(B,"[").concat(E,".").concat(i,"] ").concat(a," ").concat(r);t?t.reportLog(c):FrA(c)}push(I){this._enabled!=="OFF"&&this.buffer.push(I)}splice(I){if(this._enabled!=="ON")return{payload:[],payloadSize:0};const{index:g,size:C}=ZrA(this.buffer,I);return{payload:this.buffer.splice(0,g),payloadSize:C}}unshift(I){this.buffer=I.concat(this.buffer)}get(){return this.buffer}set(I){this.buffer=I.concat(this.buffer)}isEmpty(){return this._enabled==="OFF"||this.buffer.length===0}}function vF(A,I){return A.map(g=>{let C="";try{if(typeof g=="string")return g;if(g===void 0)return"undefined";if(g===null)return"null";if(g instanceof MediaStreamTrack)return KQ(g);if(g instanceof MediaStream)return A1(g);if(g instanceof RTCRtpSender)return I1(g);if(g instanceof RTCRtpReceiver)return g1(g);if(g instanceof RTCRtpTransceiver)return C1(g);C=JSON.stringify(g)}catch{C=g.toString()}return C&&C.length>=I&&(C=C.slice(0,I)),C}).join(", ")}function ZrA(A,I){let g=0;for(let C=0;CI)return{index:C,size:g-Q}}return{index:A.length,size:g}}var _h,aR=new NrA;const KrA={DEBUG:"rgba(0, 0, 0, 0)"," INFO":"rgba(93, 173, 226, 0)"," WARN":"rgba(255, 119, 0, 0.3)",ERROR:"rgba(255, 0, 0, 0.3)"," SUCC":"rgba(0, 119, 0, 0.3)"},JrA=typeof window<"u"&&(window.location.search.includes("_rtc_debug_")||((_h=window.localStorage)===null||_h===void 0?void 0:_h.getItem("_rtc_debug_")));class WrA{constructor(I,g){let C=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"global";P(this,"indent",void 0),P(this,"module",void 0),P(this,"_engineId",void 0),this.module=I,this.indent=g,this._engineId=C}_print(I,g){for(var C=arguments.length,Q=new Array(C>2?C-2:0),B=2;B{const s=o.shift();return JSON.stringify(s)});Ks.set("".concat("[VERTC]","[").concat(this.module,".").concat(g,"] ").concat(t," ").concat(o.map(s=>JSON.stringify(s)).join(", ")))}catch{}let i="";for(let o=0;o1?g-1:0),Q=1;Q1?g-1:0),Q=1;Q1?g-1:0),Q=1;Q1?g-1:0),Q=1;Q1?g-1:0),Q=1;Q1?g-1:0),Q=1;Q{const A=new Date;return"".concat(A.toTimeString().split(" ")[0],":").concat(A.getMilliseconds().toString().padStart(3,"0"))};var $h,AD,ID,Qt,gD,uA=WrA;const lI=()=>typeof window>"u",WI=lI()?"":window.navigator.userAgent;function PR(){let A="none";return lI()||(WI.match("Firefox")!==null?A="mozilla":WI.match("Chrome")!==null?(A="chrome-stable",WI.match("Electron")!==null&&(A="electron")):(WI.match("Safari")!==null||WI.match("AppleWebKit")!==null)&&(A="safari")),A}const mI=PR()==="mozilla",CQ=PR()==="safari",xi=PR()==="chrome-stable",zrA=!lI()&&/CriOS/i.test(WI),MrA=!lI()&&/Edg\//i.test(WI),XrA=!lI()&&/EdgA/i.test(WI),jrA=!lI()&&/EdgiOS/i.test(WI),frA=MrA||XrA||jrA,HrA=!lI()&&/DingTalk/i.test(navigator.userAgent),xrA=!lI()&&/OPR\//.test(navigator.userAgent),v9=!lI()&&(!!/(iPad)/i.exec(WI)||/Macintosh/i.test(WI)&&"ontouchend"in document),OrA=!lI()&&/Macintosh/i.test(WI),cR=!lI()&&/MicroMessenger/i.test(WI),gl=!lI()&&WI.toLowerCase().includes("mobile"),Yo=!lI()&&!!/(iPhone|iPad|iPod)/i.exec(WI),EE=!lI()&&/Android/i.test(WI),qrA=!lI()&&/Windows/i.test(WI),_rA=!lI()&&/OpenHarmony/i.test(WI);let N0=0,oV="0";const rF=!lI()&&(($h=WI.match(/version\/(\d+)/i))===null||$h===void 0?void 0:$h[1]);var CD;CQ&&rF&&(N0=Number(rF),oV=(CD=navigator.userAgent.match(/version\/(\d+\.\d+)/i))===null||CD===void 0?void 0:CD[1]);const aF=!lI()&&((AD=WI.match(/Firefox\/(\d+)/i))===null||AD===void 0?void 0:AD[1]);mI&&aF&&(N0=Number(aF));const mP=N0,r9=N0,tV=oV,Js=(ID=!lI()&&((Qt=WI.match(/ ([\d_]+) like Mac OS X/i))===null||Qt===void 0||(Qt=Qt[1])===null||Qt===void 0?void 0:Qt.split("_").map(A=>parseInt(A))))!==null&&ID!==void 0?ID:[];let sV=0;const PF=!lI()&&((gD=WI.match(/Chrome\/(\d+)/i))===null||gD===void 0?void 0:gD[1]);PF&&(sV=Number(PF));const YQ=sV,be="VolcEngine",cF="RTC_DEVICE_ID",Br="RTC_ACCESS_NODE",QD="RTC_ACCESS_URLS",BD="ENGINE_WEB_CONFIG",ED="SERVER_CONFIG";class $rA{get(I){const g=localStorage.getItem(I);if(!g)return null;try{const C=JSON.parse(g);return C.ttl>0&&Date.now()-C.saveTime>C.ttl?(this.delete(I),null):C.message}catch{return null}}set(I,g){const C={ttl:arguments.length>2&&arguments[2]!==void 0?arguments[2]:-1,saveTime:Date.now(),message:g};try{return localStorage.setItem(I,JSON.stringify(C)),!0}catch{return!1}}getTtl(I){const g=localStorage.getItem(I);if(!g)return null;try{return JSON.parse(g).ttl}catch{return null}}delete(I){try{return localStorage.removeItem(I),!0}catch{return!1}}}class AaA extends $rA{getDeviceId(){if(lI())return"";let I=this.get(cF);return I&&!/^[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}$/.test(I)||(I=maA(16)),this.setDeviceId(I),I}setDeviceId(I){return ta({device_id:I}),this.set(cF,I),I}getAccessNode(I){return this.get("".concat(Br,"_").concat(I,"-").concat(be))}setAccessNode(I,g,C){return this.set("".concat(Br,"_").concat(I,"-").concat(be),g,1e3*C)}deleteAccessNode(I,g){let C=this.getAccessNode(I);const Q=this.getTtl("".concat(Br,"_").concat(I,"-").concat(be));Array.isArray(C)&&C.length>0&&(C=C.filter(B=>B.mediaID!==g.mediaID&&B.msgKey!==g.msgKey),C.length>0?this.setAccessNode(I,C,Q||0):this.clearAccessNode(I))}clearAccessNode(I){if(I)this.delete("".concat(Br,"_").concat(I,"-").concat(be));else for(const g in localStorage)g.startsWith(Br)&&localStorage.removeItem(g)}getAccessUrls(){return this.get("".concat(QD,"-").concat(be))}setAccessUrls(I){const g=I.map(C=>{let{host:Q,path:B}=C;return"https://".concat(Q).concat(B)});return this.set("".concat(QD,"-").concat(be),g)}clearAccessUrls(){this.delete("".concat(QD,"-").concat(be))}getEngineWebConfig(I,g){var C;const Q="".concat(I,"_").concat(g,"_").concat(this.getDeviceId()),B=this.get(BD);return(B==null||(C=B.find(E=>E.key===Q))===null||C===void 0?void 0:C.config)||{}}setEngineWebConfig(I,g,C){if(!C)return;const Q="".concat(I,"_").concat(g,"_").concat(this.getDeviceId());let B=this.get(BD)||[];return B=B.filter(E=>E.key!==Q),B.push({key:Q,config:C}),this.set(BD,B.slice(-5))}getServerConfig(I){var g;const C="".concat(I),Q=this.get(ED);return(Q==null||(g=Q.find(B=>B.key===C))===null||g===void 0?void 0:g.config)||{}}setServerConfig(I,g){if(!g)return;const C="".concat(I);let Q=this.get(ED)||[];return Q=Q.filter(B=>B.key!==C),Q.push({key:C,config:g}),this.set(ED,Q.slice(-5))}}var $A=new AaA;const IaA=new uA("JoinRoomConfig",0);class RQ{constructor(I){P(this,"_useTcpAfterJoinTimeout",RQ.DEFAULT_CONF.useTcpAfterJoinTimeout),P(this,"_joinWithTcpOnly",RQ.DEFAULT_CONF.joinWithTcpOnly),P(this,"_joinWithTcpOnlyDelay",RQ.DEFAULT_CONF.joinWithTcpOnlyDelay),P(this,"_blackBrowserRegexList",[]),this._engineId=I,location.search.indexOf("__rtc_tcp_only__")>-1&&(this._joinWithTcpOnly=!0,this._joinWithTcpOnlyDelay=0),this._report()}static setDefaulConf(I){let{useTcpAfterJoinTimeout:g,joinWithTcpOnly:C,joinWithTcpOnlyDelay:Q}=I;return typeof g=="boolean"&&(RQ.DEFAULT_CONF.useTcpAfterJoinTimeout=g),typeof C=="boolean"&&(RQ.DEFAULT_CONF.joinWithTcpOnly=C),typeof Q=="number"&&(RQ.DEFAULT_CONF.joinWithTcpOnlyDelay=Math.max(0,Q)),RQ.DEFAULT_CONF}get useTcpAfterJoinTimeout(){return this._useTcpAfterJoinTimeout}get useTcpJoin(){return this._joinWithTcpOnly}get useTcpJoinDelay(){return this._joinWithTcpOnlyDelay}isBlackBrower(){return this._blackBrowserRegexList.find(I=>new RegExp(I).test(navigator.userAgent))}setServerConfig(I){var g,C,Q;let B=!1;typeof(I==null||(g=I.use_tcp_after_join_timeout)===null||g===void 0?void 0:g.enable)=="boolean"&&(this._useTcpAfterJoinTimeout=I.use_tcp_after_join_timeout.enable,B=!0),typeof(I==null||(C=I.join_with_tcp_only)===null||C===void 0?void 0:C.enable)=="boolean"&&(this._joinWithTcpOnly=I.join_with_tcp_only.enable,B=!0),typeof(I==null||(Q=I.join_with_tcp_only)===null||Q===void 0?void 0:Q.delay_ms)=="number"&&(this._joinWithTcpOnlyDelay=I.join_with_tcp_only.delay_ms,B=!0),I&&Array.isArray(I.black_browser_regex_list)&&(this._blackBrowserRegexList=I.black_browser_regex_list,B=!0),B&&this._report()}toString(){return JSON.stringify({use_tcp_after_join_timeout:this._useTcpAfterJoinTimeout,join_with_tcp_only:this._joinWithTcpOnly,join_with_tcp_only_delay:this._joinWithTcpOnlyDelay,black_browser_regex_list:this._blackBrowserRegexList})}_report(){IaA.print("_report",this.toString()),AI(this._engineId,"web_join_room_config",this.toString())}}P(RQ,"DEFAULT_CONF",{useTcpAfterJoinTimeout:!0,joinWithTcpOnly:!1,joinWithTcpOnlyDelay:5e3});var m=(A=>(A.INVALID_ENGINE="INVALID_ENGINE",A.INVALID_PARAMS="INVALID_PARAMS",A.INVOKED_BEFORE_JOIN_ROOM="INVOKED_BEFORE_JOIN_ROOM",A.INVALID_TOKEN="INVALID_TOKEN",A.JOIN_ROOM_FAILED="JOIN_ROOM_FAILED",A.UPDATE_TOKEN_WITH_INVALID_TOKEN="UPDATE_TOKEN_WITH_INVALID_TOKEN",A.UPDATE_TOKEN_BEFORE_JOIN="UPDATE_TOKEN_BEFORE_JOIN",A.REPEAT_JOIN="REPEAT_JOIN",A.REPEAT_PUBLISH="REPEAT_PUBLISH",A.REPEAT_PUSH="REPEAT_PUSH",A.REPEAT_PLAY="REPEAT_PLAY",A.PUBLISH_BEFORE_JOIN="PUBLISH_BEFORE_JOIN",A.UNPUBLISH_BEFORE_JOIN="UNPUBLISH_BEFORE_JOIN",A.SUBSCRIBE_BEFORE_JOIN="SUBSCRIBE_BEFORE_JOIN",A.UNSUBSCRIBE_BEFORE_JOIN="UNSUBSCRIBE_BEFORE_JOIN",A.NO_PUBLISH_PERMISSION="NO_PUBLISH_PERMISSION",A.STREAM_NOT_EXIST="STREAM_NOT_EXIST",A.EMPTY_STREAM="EMPTY_STREAM",A.NOT_CONNECTED_YET="NOT_CONNECTED_YET",A.IM_BEFORE_JOIN="IM_BEFORE_JOIN",A.USER_NOT_EXIST="USER_NOT_EXIST",A.ALREADY_IN_ROOM="ALREADY_IN_ROOM",A.KICKED_OUT="KICKED_OUT",A.ROOM_DISMISS="ROOM_DISMISS",A.TOKEN_EXPIRED="TOKEN_EXPIRED",A.TOKEN_NO_PUBLISH_PERMISSION="TOKEN_NO_PUBLISH_PERMISSION",A.TOKEN_NO_SUBSCRIBE_PERMISSION="TOKEN_NO_SUBSCRIBE_PERMISSION",A.DUPLICATE_LOGIN="DUPLICATE_LOGIN",A.INVOKED_BEFORE_CAPTURE="INVOKED_BEFORE_CAPTURE",A.REPEAT_CAPTURE="REPEAT_CAPTURE",A.GET_VIDEO_TRACK_FAILED="GET_VIDEO_TRACK_FAILED",A.GET_AUDIO_TRACK_FAILED="GET_AUDIO_TRACK_FAILED",A.GET_SCREEN_TRACK_FAILED="GET_SCREEN_TRACK_FAILED",A.STREAM_TYPE_NOT_MATCH="STREAM_TYPE_NOT_MATCH",A.CANT_FIND_DOM="CANT_FIND_DOM",A.INVALID_DEVICE_ID="INVALID_DEVICE_ID",A.NO_PERMISSION="NO_PERMISSION",A.NOT_SUPPORTED="NOT_SUPPORTED",A.INTERRUPT="INTERRUPT",A.ICE_SERVER_WRONG="ICE_SERVER_WRONG",A.ESTABLISH_DATACHANNEL_FAILED="ESTABLISH_DATACHANNEL_FAILED",A.LOAD_RESOURCES_FAILED="LOAD_RESOURCES_FAILED",A.SIGNALING_CHANNEL_NOT_OPEN="SIGNALING_CHANNEL_NOT_OPEN",A.TIME_OUT="TIME_OUT",A.REFUSE_OPERATION_IN_DISCONNECT="REFUSE_OPERATION_IN_DISCONNECT",A.ADD_TRANSCEIVER_FAILED="ADD_TRANSCEIVER_FAILED",A.UPDATE_TRACK_FAILED="UPDATE_TRACK_FAILED",A.PUBLISH_FAILED="PUBLISH_FAILED",A.UNPUBLISH_FAILED="UNPUBLISH_FAILED",A.SUBSCRIBE_FAILED="SUBSCRIBE_FAILED",A.UNSUBSCRIBE_FAILED="UNSUBSCRIBE_FAILED",A.OPERATION_CANCEL="OPERATION_CANCEL",A.START_CLOUD_PROXY_AFTER_JOIN="START_CLOUD_PROXY_AFTER_JOIN",A.STOP_CLOUD_PROXY_BEFORE_LEAVE="STOP_CLOUD_PROXY_BEFORE_LEAVE",A.UNEXPECTED_ERROR="UNEXPECTED_ERROR",A.REPEAT_DEVICE_TEST="REPEAT_DEVICE_TEST",A.AUDIO_DEVICE_TEST_FAILED="AUDIO_DEVICE_RECORD_FAILED",A.ALREADY_LOGIN="ALREADY_LOGIN",A.LOGIN_FAILED="LOGIN_FAILED",A.NOT_LOGIN="NOT_LOGIN",A.RTM_DUPLICATE_LOGIN="RTM_DUPLICATE_LOGIN",A.RTM_TOKEN_ERROR="RTM_TOKEN_ERROR",A.USER_MESSAGE_TIMEOUT="USER_MESSAGE_TIMEOUT",A.USER_MESSAGE_BROKEN="USER_MESSAGE_BROKEN",A.USER_MESSAGE_NO_RECEIVER="USER_MESSAGE_NO_RECEIVER",A.USER_MESSAGE_NO_RELAYPATH="USER_MESSAGE_NO_RELAYPATH",A.USER_MESSAGE_EXCEED_QPS="USER_MESSAGE_EXCEED_QPS",A.USER_MESSAGE_SEND_TO_SERVER_ERROR="USER_MESSAGE_SEND_TO_SERVER_ERROR",A.USER_MESSAGE_SERVER_RESPONSE_ERROR="USER_MESSAGE_SERVER_RESPONSE_ERROR",A.USER_MESSAGE_NOT_JOIN="USER_MESSAGE_NOT_JOIN",A.USER_MESSAGE_INIT="USER_MESSAGE_INIT",A.USER_MESSAGE_NO_CONNECTION="USER_MESSAGE_NO_CONNECTION",A.USER_MESSAGE_NOT_LOGIN="USER_MESSAGE_NOT_LOGIN",A.USER_MESSAGE_SERVER_PARAMS_NOTSET="USER_MESSAGE_SERVER_PARAMS_NOTSET",A.USER_MESSAGE_UNKNOWN="USER_MESSAGE_UNKNOWN",A.START_PUBLIC_STREAM_BEFORE_JOIN="START_PUBLIC_STREAM_BEFORE_JOIN",A.RECONNECT_FAILED="RECONNECT_FAILED",A.SUBTITLE_ALREADY_ON="SUBTITLE_ALREADY_ON",A.SUBTITLE_NOT_TURNED_ON="SUBTITLE_NOT_TURNED_ON",A.SUBTITLE_ERR_POSTPROCESS="SUBTITLE_ERR_POSTPROCESS",A.SUBTITLE_ERR_CONNECTION_ERROR="SUBTITLE_ERR_CONNECTION_ERROR",A.SUBTITLE_ERR_PROCESS_ERROR="SUBTITLE_ERR_PROCESS_ERROR",A.SUBTITLE_ERR_UNKNOWN="SUBTITLE_ERR_UNKNOWN",A.UNEXPECTED_INVOKE_FORWARD_STREAM="UNEXPECTED_INVOKE_FORWARD_STREAM",A.ROOM_FORBIDDEN="ROOM_FORBIDDEN",A.USER_FORBIDDEN="USER_FORBIDDEN",A.ERR_ELECTRON_IS_NULL="ERR_ELECTRON_IS_NULL",A.ELECTRON_DESKTOP_CAPTURER_GET_SOURCES_ERROR="ELECTRON_DESKTOP_CAPTURER_GET_SOURCES_ERROR",A.SET_SIMULCAST_FAILED="SET_SIMULCAST_FAILED",A.MIXING_OLD_AND_NEW_APIS="MIXING_OLD_AND_NEW_APIS",A.WTN_PUSH_FAILED="WTN_PUSH_FAILED",A.WTN_PLAY_FAILED="WTN_PLAY_FAILED",A.NOT_ALLOWED_IN_RTS_ROOM="NOT_ALLOWED_IN_RTS_ROOM",A.NOT_ALLOWED_IN_RESTRICTED_MODE="NOT_ALLOWED_IN_RESTRICTED_MODE",A))(m||{}),cC=(A=>(A[A.AUDIO_MIXING_ERROR_OK=0]="AUDIO_MIXING_ERROR_OK",A[A.AUDIO_MIXING_ERROR_PRELOAD_FAILED=1]="AUDIO_MIXING_ERROR_PRELOAD_FAILED",A[A.AUDIO_MIXING_ERROR_START_FAILED=2]="AUDIO_MIXING_ERROR_START_FAILED",A[A.AUDIO_MIXING_ERROR_ID_NOT_FOUND=3]="AUDIO_MIXING_ERROR_ID_NOT_FOUND",A[A.AUDIO_MIXING_ERROR_SET_POSITION_FAILED=4]="AUDIO_MIXING_ERROR_SET_POSITION_FAILED",A[A.AUDIO_MIXING_ERROR_INVALID_VOLUME=5]="AUDIO_MIXING_ERROR_INVALID_VOLUME",A[A.AUDIO_MIXING_ERROR_LOAD_CONFLICT=6]="AUDIO_MIXING_ERROR_LOAD_CONFLICT",A[A.AUDIO_MIXING_ERROR_ID_TYPE_NOT_MATCH=7]="AUDIO_MIXING_ERROR_ID_TYPE_NOT_MATCH",A[A.AUDIO_MIXING_ERROR_ID_TYPE_INVALID_PITCH=8]="AUDIO_MIXING_ERROR_ID_TYPE_INVALID_PITCH",A[A.AUDIO_MIXING_ERROR_INVALID_AUDIO_TRACK=9]="AUDIO_MIXING_ERROR_INVALID_AUDIO_TRACK",A))(cC||{});class U extends Error{constructor(I,g,C){super(g),P(this,"code",void 0),P(this,"message",void 0),P(this,"error",void 0),this.code=I,this.message=g,this.error=C,Object.setPrototypeOf(this,U.prototype)}toString(){return"SDKError: ".concat(this.code," ").concat(this.message)}}var X=(A=>(A.onTrackEnded="onTrackEnded",A.onTrackMute="onTrackMute",A.onTrackUnmute="onTrackUnmute",A.onPlayerEvent="onPlayerEvent",A.onAutoplayFailed="onAutoplayFailed",A.onUserJoined="onUserJoined",A.onUserLeave="onUserLeave",A.onConnectionStateChanged="onConnectionStateChanged",A.onUserPublishStream="onUserPublishStream",A.onUserUnpublishStream="onUserUnpublishStream",A.onUserPublishScreen="onUserPublishScreen",A.onUserUnpublishScreen="onUserUnpublishScreen",A.onRoomMessageReceived="onRoomMessageReceived",A.onRoomBinaryMessageReceived="onRoomBinaryMessageReceived",A.onUserMessageReceived="onUserMessageReceived",A.onUserBinaryMessageReceived="onUserBinaryMessageReceived",A.onVideoFirstFrameRendered="onVideoFirstFrameRendered",A.onVideoFirstFrameDecoded="onVideoFirstFrameDecoded",A.onRemoteVideoFirstFrame="onRemoteVideoFirstFrame",A.onAudioFirstFrameDecoded="onAudioFirstFrameDecoded",A.onRemoteAudioFirstFrame="onRemoteAudioFirstFrame",A.onFirstPublicStreamVideoFrameRendered="onFirstPublicStreamVideoFrameRendered",A.onFirstPublicStreamVideoFrameDecoded="onFirstPublicStreamVideoFrameDecoded",A.onFirstPublicStreamAudioFrameDecoded="onFirstPublicStreamAudioFrameDecoded",A.onVideoDeviceStateChanged="onVideoDeviceStateChanged",A.onAudioDeviceStateChanged="onAudioDeviceStateChanged",A.onRemoteStreamStats="onRemoteStreamStats",A.onPublicStreamStats="onPublicStreamStats",A.onLocalStreamStats="onLocalStreamStats",A.onAudioVolumeIndication="onAudioVolumeIndication",A.onLocalAudioPropertiesReport="onLocalAudioPropertiesReport",A.onRemoteAudioPropertiesReport="onRemoteAudioPropertiesReport",A.onActiveSpeaker="onActiveSpeaker",A.onAudioPlaybackDeviceChanged="onAudioPlaybackDeviceChanged",A.onUserStartVideoCapture="onUserStartVideoCapture",A.onUserStopVideoCapture="onUserStopVideoCapture",A.onUserStartAudioCapture="onUserStartAudioCapture",A.onUserStopAudioCapture="onUserStopAudioCapture",A.onAutoPublishResult="onAutoPublishResult",A.onAutoSubscribeResult="onAutoSubscribeResult",A.onLiveTranscodingResult="onLiveTranscodingResult",A.onStreamMixingEvent="onStreamMixingEvent",A.onAudioPlaybackDeviceTestVolume="onAudioPlaybackDeviceTestVolume",A.onSEIMessageReceived="onSEIMessageReceived",A.onError="onError",A.onAudioMixingStateChanged="onAudioMixingStateChanged",A.onUserMessageReceivedOutsideRoom="onUserMessageReceivedOutsideRoom",A.onUserBinaryMessageReceivedOutsideRoom="onUserBinaryMessageReceivedOutsideRoom",A.onTokenWillExpire="onTokenWillExpire",A.onTokenPublishPrivilegeWillExpire="onTokenPublishPrivilegeWillExpire",A.onTokenPublishPrivilegeDidExpired="onTokenPublishPrivilegeDidExpired",A.onTokenSubscribePrivilegeWillExpire="onTokenSubscribePrivilegeWillExpire",A.onTokenSubscribePrivilegeDidExpired="onTokenSubscribePrivilegeDidExpired",A.onCloudProxyConnected="onCloudProxyConnected",A.onPushPublicStreamResult="onPushPublicStreamResult",A.onPublicStreamSEIMessageReceived="onPublicStreamSEIMessageReceived",A.onNetworkQuality="onNetworkQuality",A.onSimulcastSubscribeFallback="onSimulcastSubscribeFallback",A.onRemoteVideoSizeChanged="onRemoteVideoSizeChanged",A.onVideoStreamBanned="onVideoStreamBanned",A.onAudioStreamBanned="onAudioStreamBanned",A.onLocalVideoSizeChanged="onLocalVideoSizeChanged",A.onSubtitleStateChanged="onSubtitleStateChanged",A.onSubtitleMessageReceived="onSubtitleMessageReceived",A.onServerParamsSetResult="onServerParamsSetResult",A.onLocalStreamTrackChangedByExtension="onLocalStreamTrackChangedByExtension",A.onVendorConnectionStateChanged="onVendorConnectionStateChanged",A.onForwardStreamError="onForwardStreamError",A.onRejoinWithTcp="onRejoinWithTcp",A.onIceConnectWithTcp="onIceConnectWithTcp",A.onPublishRetry="onPublishRetry",A.onSubscribeRetry="onSubscribeRetry",A.onPublishResult="onPublishResult",A.onSubscribeResult="onSubscribeResult",A.onSEIStreamUpdate="onSEIStreamUpdate",A))(X||{});function iD(A,I){if(typeof A!="boolean")throw new U(m.INVALID_PARAMS,"Invalid ".concat(I,": The value should be boolean type."))}const vV=()=>!Ie()&&typeof HTMLVideoElement.prototype.requestVideoFrameCallback=="function";function qe(A,I){let g=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,C=arguments.length>3&&arguments[3]!==void 0?arguments[3]:Number.POSITIVE_INFINITY;if(AC||typeof A!="number")throw new U(m.INVALID_PARAMS,"Invalid ".concat(I,": the value range is [").concat(g,", ").concat(C,"]. integer only"))}function OA(A,I){let g=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,C=arguments.length>3&&arguments[3]!==void 0?arguments[3]:Number.POSITIVE_INFINITY;if(A==null)throw new U(m.INVALID_PARAMS,"".concat(I," cannot be empty"));if(!CaA(A,g,C))throw new U(m.INVALID_PARAMS,"Invalid ".concat(I,": The value should be string type. Length of the string: [").concat(g,",").concat(C,"]"))}function MA(A,I,g){if(!g.includes(A))throw new U(m.INVALID_PARAMS,"Invalid ".concat(I,": The value can only be set as ").concat(JSON.stringify(g)))}function nF(A){if(!(A instanceof MediaStreamTrack))throw new U(m.INVALID_PARAMS,"Invalid track, The value should be MediaStreamTrack type.")}function Z0(A,I){if(kQ(A))throw new U(m.INVALID_PARAMS,"Invalid ".concat(I,", should not be empty"))}function gaA(A,I){if(!Array.isArray(A))throw new U(m.INVALID_PARAMS,"Invalid ".concat(I,", should be array"))}function eD(A,I){if(!(A instanceof ArrayBuffer))throw new U(m.INVALID_PARAMS,"Invalid ".concat(I,", should be ArrayBuffer"))}function bw(A){try{const I=navigator.mediaDevices.getSupportedConstraints();for(const g of Object.keys(A))I[g]||delete A[g]}catch{}}function CaA(A){let I=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1,g=arguments.length>2&&arguments[2]!==void 0?arguments[2]:Number.POSITIVE_INFINITY;return typeof A=="string"&&A.length<=g&&A.length>=I}function kQ(A){return A==null}function pc(A){if(typeof A!="string"||!/^[a-zA-Z0-9@._-]{1,128}$/.test(A))throw new U(m.INVALID_PARAMS,"The RoomId must be within 128 bytes. The supported characters: a-z,A-Z,0-9,@,-,_,.")}function dC(A){if(typeof A!="string"||!/^[a-zA-Z0-9@._-]{1,128}$/.test(A))throw new U(m.INVALID_PARAMS,"The userId must be within 128 bytes. The supported characters: a-z,A-Z,0-9,@,-,_,.")}function sa(A){if(typeof A!="string"||!/^[a-zA-Z0-9@._-]{1,128}$/.test(A))throw new U(m.INVALID_PARAMS,"The publicStreamId must be within 128 bytes. The supported characters: a-z,A-Z,0-9,@,-,_,.")}function QaA(A){return typeof A!="string"}function BaA(A){Z0(A,"userInfo"),dC(A.userId),kQ(A.extraInfo)||OA(A.extraInfo,"userInfo.extraInfo",1,200)}function EaA(A){Z0(A,"roomConfig"),iD(A.isAutoPublish,"roomConfig.isAutoPublish"),iD(A.isAutoSubscribeAudio,"roomConfig.isAutoSubscribeAudio"),iD(A.isAutoSubscribeVideo,"roomConfig.isAutoSubscribeVideo"),kQ(A.roomProfileType)||MA(A.roomProfileType,"roomConfig",[EC.communication,EC.chat,EC.chatRoom,EC.coHost,EC.meeting,EC.classRoom])}function lF(A){Z0(A,"videoPlayerOption")}function iaA(A){var I,g;let C,Q=arguments.length>1&&arguments[1]!==void 0?arguments[1]:64;if(!A||(A==null?void 0:A.byteLength)===0)throw new U(m.INVALID_PARAMS,"The message cannot be empty");if(A instanceof ArrayBuffer)C=A;else{if(typeof A!="string")throw new U(m.INVALID_PARAMS,"The message must be string or ArrayBuffer");C=Ag.str2ab(A)}if(((I=C)===null||I===void 0?void 0:I.byteLength)>1024*Q)throw new U(m.INVALID_PARAMS,"The message length must be less than ".concat(Q,"KB"));return(g=C.byteLength)!==null&&g!==void 0?g:0}function eaA(A){const I=lA("FORCE_ENABLED_REPORT_CALLBACKS");return I!=null&&I.includes(A)||A===X.onRemoteStreamStats&&lA("UPLOAD_REMOTE_STATS")?!0:![X.onRemoteStreamStats,X.onLocalStreamStats,X.onAudioVolumeIndication,X.onLocalAudioPropertiesReport,X.onRemoteAudioPropertiesReport].includes(A)}function oaA(A){if(typeof(A==null?void 0:A.width)!="number"||typeof(A==null?void 0:A.height)!="number")throw new U(m.INVALID_PARAMS,"remoteVideoConfig must contain width, height, frameRate")}function oD(A,I){if(typeof A=="number"&&!Number.isNaN(A)&&A>=1)return;const g=A;if(!(g!=null&&g.min||g!=null&&g.max||g!=null&&g.exact||g!=null&&g.ideal))throw new U(m.INVALID_PARAMS,"".concat(I," is not a valid ConstrainULong"))}function tD(A){gaA(A,"videoEncoderConfig");for(const I of A)Z0(I,"videoEncoderConfigItem"),qe(I==null?void 0:I.maxKbps,"maxKbps"),oD(I==null?void 0:I.width,"width"),oD(I==null?void 0:I.height,"height"),oD(I==null?void 0:I.frameRate,"frameRate")}function Cl(A,I){let g=arguments.length>2&&arguments[2]!==void 0?arguments[2]:Number.NEGATIVE_INFINITY,C=arguments.length>3&&arguments[3]!==void 0?arguments[3]:Number.POSITIVE_INFINITY;return qe(A,I,Number.NEGATIVE_INFINITY,Number.POSITIVE_INFINITY),A=(A=A>g?A:g)(A[A.NONE=0]="NONE",A))(OC||{});const saA="rtc-access-ag.bytedance.com,rtc-access.bytedance.com,rtc-access2-hl.bytedance.com,rtcg-access.bytevcloud.com".split(",");function rV(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"";return A?(/^https?:\/\/.+/.test(A)||(A="https://".concat(A)),"".concat(A,"/dispatch/v1/AccessInfo?Action=GetAccessInfo")):""}function vaA(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"";return A?(/^https?:\/\/.+/.test(A)||(A="https://".concat(A)),"".concat(A,"/video/v1/webrtc_log/")):""}const aV="https://web-log-report.rtc.volcvideo.com/video/v1/webrtc_log/",raA="https://web-log-report.volcvideos.com/video/v1/webrtc_log/",aaA="common.rtc.volcvideo.com,rtcg.volcvideos.com".split(","),YA={VERSION:"4.66.5",ICE_CONFIG_REQUEST_URLS_INTERNAL:saA.map(rV),ICE_CONFIG_REQUEST_URLS:[],EXPECTED_ADDR:"",LOG_SERVER_URL:aV,CONFIG_REQUEST_DOMAINS:aaA,DEVICE_ID:"",OVERSEA:!1,PLATFORM:"",PRODUCT:"",FORCE_ENABLED_REPORT_CALLBACKS:[],SKIP_WEB_AUDIO_IN_TRACK:!1,ENFORCE_WEB_AUDIO_SUPPORTED:!1,AUDIO_STALL:!0,VIDEO_STALL:!0,VIDEO_STALL_100MS:!1,STATS_SCALLBACK_SUPPORT:!0,JOIN_ROOM_CONFIG:RQ.DEFAULT_CONF,SIGNAL_COMPRESSION:!0,SIGNAL_CROP_JOINROOM:!0,VIDEO_STALL_DATA:500,AUDIO_STALL_DATA:200,IOS_SAFARI_ORIENTATION:!1,BLACK_FRAME_LIFETIME:6e4,FALLBACK_ENCODE_CODEC:"",SEI_TIME_OUT:2e3,SEI_COUNT_FPS:1,PRE_ICE:!1,STATS_LOOP_INTERVAL:1e3,HIDDEN_STATS:!1,UPLOAD_REMOTE_STATS:OC.NONE,SDK_CODEC_NEGOTIATION:!0,AUDIO_CODEC:"OPUS",DISABLE_ENCODED_TRANSFORM:!1,SKIP_SEI_FILTER:!1,AREA_CODE:"",DISABLE_COMPUTE_PRESSURE:!1,SEND_MESSAGE_SYNC:!1,H264_HW_ENCODER:!1};function jC(A,I){if(EV("setParameter",0,"key: ".concat(A,", value: ").concat(I)),A!=="VERSION"){if(A==="H264_HW_ENCODER"){const g=RTCPeerConnection.prototype.setRemoteDescription;return void(RTCPeerConnection.prototype.setRemoteDescription=function(C){var Q;return g.call(this,{type:C.type,sdp:(Q=C.sdp)===null||Q===void 0?void 0:NEA(Q).call(Q,"42e01f","42001f")})})}if(A==="JOIN_ROOM_CONFIG")return RQ.setDefaulConf(I);if(A==="ICE_CONFIG_REQUEST_URLS"){const g=typeof I=="string"?[I]:I;return YA.ICE_CONFIG_REQUEST_URLS=g.map(rV),$A.clearAccessUrls(),void $A.clearAccessNode()}if(A==="VIDEO_STALL_DATA")return void(YA.VIDEO_STALL_DATA=Math.max(500,Number(I)));if(A==="AUDIO_STALL_DATA")return void(YA.AUDIO_STALL_DATA=Math.max(200,Number(I)));if(A==="VIDEO_STALL_100MS")return void(YA.VIDEO_STALL_100MS=vV()&&!!I);if(A==="PLATFORM"&&typeof I=="string")return void ta({platform:I});if(A==="PRODUCT"&&typeof I=="string")return void ta({product:I});if(A==="FORCE_ENABLED_REPORT_CALLBACKS"){const g=typeof I=="string"?[I]:I;return void(YA.FORCE_ENABLED_REPORT_CALLBACKS=g)}if(A==="LOG_SERVER_URL"){const g=I===vw.overseas?raA:I===vw.domestic?aV:typeof I=="string"?I:void 0;g&&(YA.LOG_SERVER_URL=g,BV(g))}else if(A==="OVERSEA")return ta({extra_is_oversea:I?"1":"0"}),void(YA.OVERSEA=I);if(A==="CONFIG_REQUEST_DOMAINS"&&Array.isArray(I)&&I.length>0)return void(YA.CONFIG_REQUEST_DOMAINS=I);if(!(A==="SEI_TIME_OUT"&&typeof I!="number")&&!(A==="SEI_COUNT_FPS"&&typeof I!="number")){if(A==="UPLOAD_REMOTE_STATS"&&typeof I=="string"){const g=I.split(",").map(C=>RE(C).call(C)).reduce((C,Q)=>Q==="video"?C|iA.VIDEO:Q==="audio"?C|iA.AUDIO:C,OC.NONE);return void(YA.UPLOAD_REMOTE_STATS=g)}if(A==="AINR_URLS"&&typeof I=="string")try{const{gulpUrl:g,wasmUrl:C,type5ModelUrl:Q,type6ModelUrl:B}=JSON.parse(I);return void(YA.AINR_URLS={gulpUrl:g,wasmUrl:C,type5ModelUrl:Q,type6ModelUrl:B})}catch(g){console.error(g)}A==="DEVICE_ID"&&$A.setDeviceId(I),dB.getKeys().includes(A)?dB.setParameter(A,I):Reflect.set(YA,A,I)}}}function lA(A){return A==="DEVICE_ID"?$A.getDeviceId():YA[A]}function dF(A,I,g){var C,Q,B,E,i,e,o,t;return{type:"publicstream",action:I,publicStreamID:A,publicStreamMeta:{audio:{},video:{fps:((C=g.video)===null||C===void 0?void 0:C.fps)||15,bitrate:1e3*(((Q=g.video)===null||Q===void 0?void 0:Q.kBitRate)||40),width:((B=g.video)===null||B===void 0?void 0:B.width)||640,height:((E=g.video)===null||E===void 0?void 0:E.height)||360},layout:{layoutMode:2,interpolationMode:((i=g.layout)===null||i===void 0?void 0:i.interpolationMode)||qW.PREV_FRAME,canvas:{bgColor:((e=g.layout)===null||e===void 0?void 0:e.backgroundColor)||"#000000",bgImage:((o=g.layout)===null||o===void 0?void 0:o.backgroundImage)||""},regions:((t=g.layout)===null||t===void 0||(t=t.regions)===null||t===void 0?void 0:t.map(s=>({roomId:s.roomId,userId:s.userId,alterImage:s.alertImage||"",alpha:!s.alpha||Number(s.alpha)>1||Number(s.alpha)<=0?1:Number(s.alpha),x:!s.x||Number(s.x)>=1||Number(s.x)<0?0:Number(s.x),y:!s.y||Number(s.y)>=1||Number(s.y)<0?0:Number(s.y),w:!s.w||Number(s.w)>1||Number(s.w)<=0?1:Number(s.w),h:!s.h||Number(s.h)>1||Number(s.h)<=0?1:Number(s.h),zorder:!s.zorder||Number(s.zorder)<0||Number(s.zorder)>100?0:Number(s.zorder),renderMode:s.renderMode===void 0?1:s.renderMode,streamType:s.isScreenStream?1:0,mediaType:s.mediaType||0,sourceCrop:s.sourceCrop})))||[]}}}}let PV=[];function PaA(){return PV}function cV(A){PV=A}const caA=(A,I)=>{const g=PaA();if(!g.length)return;const C=A[0],Q=I.width||jA(C.width),B=I.height||jA(C.height),E=Q*B;if(jA(C.width)*jA(C.height)<=E)return;let i,e,o=g[0];g.forEach(s=>{const v=jA(s.width)*jA(s.height);i||(E!(e&&jA(s.width)*jA(s.height)>=E)||(e.maxKbps=Math.min(s.maxKbps,e.maxKbps),!1));return t.unshift({width:Q,height:B,frameRate:I.frameRate?Math.round(I.frameRate):t[0].frameRate,maxKbps:e.maxKbps}),t},Nc={width:640,height:480,frameRate:15,maxKbps:600},naA={width:1920,height:1080,frameRate:15,maxKbps:3e3};let Zc;const laA=new Uint8Array(16);function daA(){if(!Zc&&(Zc=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!Zc))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Zc(laA)}const wg=[];for(let A=0;A<256;++A)wg.push((A+256).toString(16).slice(1));function haA(A){let I=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return wg[A[I+0]]+wg[A[I+1]]+wg[A[I+2]]+wg[A[I+3]]+"-"+wg[A[I+4]]+wg[A[I+5]]+"-"+wg[A[I+6]]+wg[A[I+7]]+"-"+wg[A[I+8]]+wg[A[I+9]]+"-"+wg[A[I+10]]+wg[A[I+11]]+wg[A[I+12]]+wg[A[I+13]]+wg[A[I+14]]+wg[A[I+15]]}const DaA=typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto);var sD,hF={randomUUID:DaA};function uaA(A,I,g){if(hF.randomUUID&&!A)return hF.randomUUID();const C=(A=A||{}).random||(A.rng||daA)();return C[6]=15&C[6]|64,C[8]=63&C[8]|128,haA(C)}const baA=new TextDecoder,yaA=new TextEncoder,KE=()=>uaA(),aA=()=>Date.now();function nV(A){let I=0;for(var g=arguments.length,C=new Array(g>1?g-1:0),Q=1;QQ!==null).join(":"))}static merge(){let I=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};for(const[C,Q]of Object.entries(I))Q!==null&&typeof Q=="object"?Ag.merge(I[C],g[C]):g[C]!==void 0&&(I[C]=g[C])}static ab2str(I){return baA.decode(I)}static ab2obj(I){try{const g=Ag.ab2str(I);return JSON.parse(g)}catch{return{}}}static str2ab(I){return yaA.encode(I).buffer}static async ab2b64str(I){if(lA("SEND_MESSAGE_SYNC")){const g=String.fromCharCode.apply(null,new Uint8Array(I));return window.btoa(g)}return(await new Promise(g=>{const C=new FileReader;C.onload=()=>g(C.result),C.readAsDataURL(new Blob([I]))})).split(",",2)[1]}static async b64str2ab(I,g){return fetch("data:application/octet;base64,".concat(I)).then(C=>C.arrayBuffer()).catch(C=>{throw g&&g.report("rtc_error",{error_code:2001,message:"".concat(C.message," -> ").concat(I)}),C})}}function lV(A){return new Promise(I=>{setTimeout(I,A)})}function DF(){const A=Number("".concat(Math.random()).slice(-7).padEnd(7,"0")).toString(2).padEnd(28,"1").split(""),I=[];for(;A.length;)I.push(A.splice(0,7));return I.map((g,C)=>{const Q=C===I.length-1?"0":"1";return Number.parseInt(Q+g.join(""),2)})}const Oa=()=>Math.floor(65535*Math.random());function waA(A){return!(128&~A)}function vD(A){return typeof A=="string"&&A.indexOf("__web__rtc__rtt__")>-1}function maA(A){let I="";for(let g=0;g0&&arguments[0]!==void 0&&arguments[0];if(rD)return rD;const I=new RTCPeerConnection({iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"unified-plan"});I.createDataChannel("default"),I.addTransceiver("audio",{direction:"recvonly"}),I.addTransceiver("video",{direction:"recvonly"}),A&&(I.addTransceiver("audio",{direction:"sendonly"}),I.addTransceiver("video",{direction:"sendonly"}));const g=await I.createOffer();return I.close(),rD=g.sdp,g.sdp},RaA=A=>new Promise((I,g)=>{let C=(A=Array.isArray(A)?A:[]).length;const Q=[];C===0?g([]):A.forEach(B=>{B.then(E=>{I(E)},E=>{C--,Q.push(E),C===0&&g(Q)})})});function Er(A){return Number(Math.max(-127,10*Math.log10(Math.pow(A/255,2))).toFixed(2))}function $I(A){return(A&iA.AUDIO)===iA.AUDIO}function gI(A){return(A&iA.VIDEO)===iA.VIDEO}function DC(A){const I={};return Object.keys(A).forEach(g=>{typeof A[g]=="object"?I[g]=DC(A[g]):g.startsWith("_")&&!lA("HIDDEN_STATS")||(I[g]=A[g])}),I}function LaA(A){const I=new DataView(A.buffer);if(I.byteLength<=4||I.getUint16(0)!==65535)return{seiCount:1,seis:[A]};const g={seiCount:0,seis:[]};let C=!1,Q=2;for(;Q0&&I.byteLength-Q<=2){C=!0;break}g.seiCount++,g.seis.push(E)}return C&&(g.seiCount=1,g.seis=[A]),g}function HB(A){return A===void 0}function uF(A){return function(I,g,C){const Q=C.value;C.value=function(){console.warn("[RTC WebSDK]: Api: ".concat(g," has been abandoned from version ").concat(A));for(var B=arguments.length,E=new Array(B),i=0;iNumber.MAX_SAFE_INTEGER&&(this._id=0),this._id}}function UaA(A){const I={};return Object.keys(A).forEach(g=>{A[g]!==void 0&&(I[g]=A[g])}),I}const K0=typeof window<"u"&&(window.location.search.includes("_rtc_debug_")||!((sD=window.localStorage)===null||sD===void 0||!sD.getItem("_rtc_debug_")));function FaA(A){const I=atob(A),g=I.length,C=new Uint8Array(g);for(let Q=0;Q{if(g==="peerIdentity")return!1;try{return typeof A[g]=="function"||A[g]===void 0}catch{return!1}}).map(g=>({obj:A,prefix:I,attr:g})):[]}function paA(A,I){try{return A[I].toString().includes("[native code]")?"native":"non-native"}catch{return"untouchable"}}const dV=(typeof window<"u"?[[(aD=window.RTCPeerConnection)===null||aD===void 0?void 0:aD.prototype,"RTCPeerConnection.prototype"],[window.RTCPeerConnection,"RTCPeerConnection"],[(PD=window.RTCDataChannel)===null||PD===void 0?void 0:PD.prototype,"RTCDataChannel.prototype"],[window.RTCDataChannel,"RTCDataChannel"],[(cD=window.MediaStreamTrack)===null||cD===void 0?void 0:cD.prototype,"MediaStreamTrack.prototype"],[window.MediaStreamTrack,"MediaStreamTrack"],[(nD=window.MediaStream)===null||nD===void 0?void 0:nD.prototype,"MediaStream.prototype"],[window.MediaStream,"MediaStream"],[(lD=window.HTMLAudioElement)===null||lD===void 0?void 0:lD.prototype,"HTMLAudioElement.prototype"],[(dD=window.HTMLVideoElement)===null||dD===void 0?void 0:dD.prototype,"HTMLVideoElement.prototype"],[(hD=window.HTMLMediaElement)===null||hD===void 0?void 0:hD.prototype,"HTMLMediaElement.prototype"],[(DD=(uD=window.AudioContext)===null||uD===void 0?void 0:uD.prototype)!==null&&DD!==void 0?DD:(bD=window.webkitAudioContext)===null||bD===void 0?void 0:bD.prototype,"AudioContext.prototype"],[(yD=window.BaseAudioContext)===null||yD===void 0?void 0:yD.prototype,"BaseAudioContext.prototype"],[(wD=window.AudioNode)===null||wD===void 0?void 0:wD.prototype,"AudioNode.prototype"],[window.navigator.mediaDevices,"navigator.mediaDevices"],[window.console,"console"]]:[]).reduce((A,I)=>{let[g,C]=I;return A.concat(kaA(g,C))},[]);typeof window<"u"&&dV.push({obj:window.navigator.mediaDevices,prefix:"navigator.mediaDevices",attr:"getUserMedia"},{obj:window.navigator.mediaDevices,prefix:"navigator.mediaDevices",attr:"getDisplayMedia"},{obj:window.navigator.mediaDevices,prefix:"navigator.mediaDevices",attr:"enumerateDevices"},{obj:window.navigator.mediaDevices,prefix:"navigator.mediaDevices",attr:"getSupportedConstraints"});for(const{obj:A,prefix:I,attr:g}of dV){const C="".concat(I,".").concat(g);J0[C]=paA(A,g)}K0&&console.log("RTC_AMBULANCE",J0);const bF=Object.entries(J0).filter(A=>{let[I,g]=A;return g==="non-native"}).map(A=>{let[I,g]=A;return I});Object.keys(bF).length&&console.warn("RTC_AMBULANCE",`have non-native code: `,bF.join(` `));let hV=!0,DV=!0;function Ql(A,I,g){const C=A.match(I);return C&&C.length>=g&&parseInt(C[g],10)}function ko(A,I,g){if(!A.RTCPeerConnection)return;const C=A.RTCPeerConnection.prototype,Q=C.addEventListener;C.addEventListener=function(E,i){if(E!==I)return Q.apply(this,arguments);const e=o=>{const t=g(o);t&&(i.handleEvent?i.handleEvent(t):i(t))};return this._eventMap=this._eventMap||{},this._eventMap[I]||(this._eventMap[I]=new Map),this._eventMap[I].set(i,e),Q.apply(this,[E,e])};const B=C.removeEventListener;C.removeEventListener=function(E,i){if(E!==I||!this._eventMap||!this._eventMap[I])return B.apply(this,arguments);if(!this._eventMap[I].has(i))return B.apply(this,arguments);const e=this._eventMap[I].get(i);return this._eventMap[I].delete(i),this._eventMap[I].size===0&&delete this._eventMap[I],Object.keys(this._eventMap).length===0&&delete this._eventMap,B.apply(this,[E,e])},Object.defineProperty(C,"on"+I,{get(){return this["_on"+I]},set(E){this["_on"+I]&&(this.removeEventListener(I,this["_on"+I]),delete this["_on"+I]),E&&this.addEventListener(I,this["_on"+I]=E)},enumerable:!0,configurable:!0})}function NaA(A){return typeof A!="boolean"?new Error("Argument type: "+typeof A+". Please use a boolean."):(hV=A,A?"adapter.js logging disabled":"adapter.js logging enabled")}function ZaA(A){return typeof A!="boolean"?new Error("Argument type: "+typeof A+". Please use a boolean."):(DV=!A,"adapter.js deprecation warnings "+(A?"disabled":"enabled"))}function uV(){if(typeof window=="object"){if(hV)return;typeof console<"u"&&typeof console.log=="function"&&console.log.apply(console,arguments)}}function nR(A,I){DV&&console.warn(A+" is deprecated, please use "+I+" instead.")}function KaA(A){const I={browser:null,version:null};if(A===void 0||!A.navigator||!A.navigator.userAgent)return I.browser="Not a browser.",I;const{navigator:g}=A;if(g.mozGetUserMedia)I.browser="firefox",I.version=Ql(g.userAgent,/Firefox\/(\d+)\./,1);else if(g.webkitGetUserMedia||A.isSecureContext===!1&&A.webkitRTCPeerConnection)I.browser="chrome",I.version=Ql(g.userAgent,/Chrom(e|ium)\/(\d+)\./,2);else{if(!A.RTCPeerConnection||!g.userAgent.match(/AppleWebKit\/(\d+)\./))return I.browser="Not a supported browser.",I;I.browser="safari",I.version=Ql(g.userAgent,/AppleWebKit\/(\d+)\./,1),I.supportsUnifiedPlan=A.RTCRtpTransceiver&&"currentDirection"in A.RTCRtpTransceiver.prototype}return I}function yF(A){return Object.prototype.toString.call(A)==="[object Object]"}function bV(A){return yF(A)?Object.keys(A).reduce(function(I,g){const C=yF(A[g]),Q=C?bV(A[g]):A[g],B=C&&!Object.keys(Q).length;return Q===void 0||B?I:Object.assign(I,{[g]:Q})},{}):A}function yw(A,I,g){I&&!g.has(I.id)&&(g.set(I.id,I),Object.keys(I).forEach(C=>{C.endsWith("Id")?yw(A,A.get(I[C]),g):C.endsWith("Ids")&&I[C].forEach(Q=>{yw(A,A.get(Q),g)})}))}function wF(A,I,g){const C=g?"outbound-rtp":"inbound-rtp",Q=new Map;if(I===null)return Q;const B=[];return A.forEach(E=>{E.type==="track"&&E.trackIdentifier===I.id&&B.push(E)}),B.forEach(E=>{A.forEach(i=>{i.type===C&&i.trackId===E.id&&yw(A,i,Q)})}),Q}const mF=uV;function yV(A,I){const g=A&&A.navigator;if(!g.mediaDevices)return;const C=function(E){if(typeof E!="object"||E.mandatory||E.optional)return E;const i={};return Object.keys(E).forEach(e=>{if(e==="require"||e==="advanced"||e==="mediaSource")return;const o=typeof E[e]=="object"?E[e]:{ideal:E[e]};o.exact!==void 0&&typeof o.exact=="number"&&(o.min=o.max=o.exact);const t=function(s,v){return s?s+v.charAt(0).toUpperCase()+v.slice(1):v==="deviceId"?"sourceId":v};if(o.ideal!==void 0){i.optional=i.optional||[];let s={};typeof o.ideal=="number"?(s[t("min",e)]=o.ideal,i.optional.push(s),s={},s[t("max",e)]=o.ideal,i.optional.push(s)):(s[t("",e)]=o.ideal,i.optional.push(s))}o.exact!==void 0&&typeof o.exact!="number"?(i.mandatory=i.mandatory||{},i.mandatory[t("",e)]=o.exact):["min","max"].forEach(s=>{o[s]!==void 0&&(i.mandatory=i.mandatory||{},i.mandatory[t(s,e)]=o[s])})}),E.advanced&&(i.optional=(i.optional||[]).concat(E.advanced)),i},Q=function(E,i){if(I.version>=61)return i(E);if((E=JSON.parse(JSON.stringify(E)))&&typeof E.audio=="object"){const e=function(o,t,s){t in o&&!(s in o)&&(o[s]=o[t],delete o[t])};e((E=JSON.parse(JSON.stringify(E))).audio,"autoGainControl","googAutoGainControl"),e(E.audio,"noiseSuppression","googNoiseSuppression"),E.audio=C(E.audio)}if(E&&typeof E.video=="object"){let e=E.video.facingMode;e=e&&(typeof e=="object"?e:{ideal:e});const o=I.version<66;if(e&&(e.exact==="user"||e.exact==="environment"||e.ideal==="user"||e.ideal==="environment")&&(!g.mediaDevices.getSupportedConstraints||!g.mediaDevices.getSupportedConstraints().facingMode||o)){let t;if(delete E.video.facingMode,e.exact==="environment"||e.ideal==="environment"?t=["back","rear"]:e.exact!=="user"&&e.ideal!=="user"||(t=["front"]),t)return g.mediaDevices.enumerateDevices().then(s=>{let v=(s=s.filter(r=>r.kind==="videoinput")).find(r=>t.some(n=>r.label.toLowerCase().includes(n)));return!v&&s.length&&t.includes("back")&&(v=s[s.length-1]),v&&(E.video.deviceId=e.exact?{exact:v.deviceId}:{ideal:v.deviceId}),E.video=C(E.video),mF("chrome: "+JSON.stringify(E)),i(E)})}E.video=C(E.video)}return mF("chrome: "+JSON.stringify(E)),i(E)},B=function(E){return I.version>=64?E:{name:{PermissionDeniedError:"NotAllowedError",PermissionDismissedError:"NotAllowedError",InvalidStateError:"NotAllowedError",DevicesNotFoundError:"NotFoundError",ConstraintNotSatisfiedError:"OverconstrainedError",TrackStartError:"NotReadableError",MediaDeviceFailedDueToShutdown:"NotAllowedError",MediaDeviceKillSwitchOn:"NotAllowedError",TabCaptureError:"AbortError",ScreenCaptureError:"AbortError",DeviceCaptureError:"AbortError"}[E.name]||E.name,message:E.message,constraint:E.constraint||E.constraintName,toString(){return this.name+(this.message&&": ")+this.message}}};if(g.getUserMedia=(function(E,i,e){Q(E,o=>{g.webkitGetUserMedia(o,i,t=>{e&&e(B(t))})})}).bind(g),g.mediaDevices.getUserMedia){const E=g.mediaDevices.getUserMedia.bind(g.mediaDevices);g.mediaDevices.getUserMedia=function(i){return Q(i,e=>E(e).then(o=>{if(e.audio&&!o.getAudioTracks().length||e.video&&!o.getVideoTracks().length)throw o.getTracks().forEach(t=>{t.stop()}),new DOMException("","NotFoundError");return o},o=>Promise.reject(B(o))))}}}function JaA(A,I){A.navigator.mediaDevices&&"getDisplayMedia"in A.navigator.mediaDevices||A.navigator.mediaDevices&&(typeof I=="function"?A.navigator.mediaDevices.getDisplayMedia=function(g){return I(g).then(C=>{const Q=g.video&&g.video.width,B=g.video&&g.video.height,E=g.video&&g.video.frameRate;return g.video={mandatory:{chromeMediaSource:"desktop",chromeMediaSourceId:C,maxFrameRate:E||3}},Q&&(g.video.mandatory.maxWidth=Q),B&&(g.video.mandatory.maxHeight=B),A.navigator.mediaDevices.getUserMedia(g)})}:console.error("shimGetDisplayMedia: getSourceId argument is not a function"))}function wV(A){A.MediaStream=A.MediaStream||A.webkitMediaStream}function mV(A){if(typeof A=="object"&&A.RTCPeerConnection&&!("ontrack"in A.RTCPeerConnection.prototype)){Object.defineProperty(A.RTCPeerConnection.prototype,"ontrack",{get(){return this._ontrack},set(g){this._ontrack&&this.removeEventListener("track",this._ontrack),this.addEventListener("track",this._ontrack=g)},enumerable:!0,configurable:!0});const I=A.RTCPeerConnection.prototype.setRemoteDescription;A.RTCPeerConnection.prototype.setRemoteDescription=function(){return this._ontrackpoly||(this._ontrackpoly=g=>{g.stream.addEventListener("addtrack",C=>{let Q;Q=A.RTCPeerConnection.prototype.getReceivers?this.getReceivers().find(E=>E.track&&E.track.id===C.track.id):{track:C.track};const B=new Event("track");B.track=C.track,B.receiver=Q,B.transceiver={receiver:Q},B.streams=[g.stream],this.dispatchEvent(B)}),g.stream.getTracks().forEach(C=>{let Q;Q=A.RTCPeerConnection.prototype.getReceivers?this.getReceivers().find(E=>E.track&&E.track.id===C.id):{track:C};const B=new Event("track");B.track=C,B.receiver=Q,B.transceiver={receiver:Q},B.streams=[g.stream],this.dispatchEvent(B)})},this.addEventListener("addstream",this._ontrackpoly)),I.apply(this,arguments)}}else ko(A,"track",I=>(I.transceiver||Object.defineProperty(I,"transceiver",{value:{receiver:I.receiver}}),I))}function GV(A){if(typeof A=="object"&&A.RTCPeerConnection&&!("getSenders"in A.RTCPeerConnection.prototype)&&"createDTMFSender"in A.RTCPeerConnection.prototype){const I=function(Q,B){return{track:B,get dtmf(){return this._dtmf===void 0&&(B.kind==="audio"?this._dtmf=Q.createDTMFSender(B):this._dtmf=null),this._dtmf},_pc:Q}};if(!A.RTCPeerConnection.prototype.getSenders){A.RTCPeerConnection.prototype.getSenders=function(){return this._senders=this._senders||[],this._senders.slice()};const Q=A.RTCPeerConnection.prototype.addTrack;A.RTCPeerConnection.prototype.addTrack=function(E,i){let e=Q.apply(this,arguments);return e||(e=I(this,E),this._senders.push(e)),e};const B=A.RTCPeerConnection.prototype.removeTrack;A.RTCPeerConnection.prototype.removeTrack=function(E){B.apply(this,arguments);const i=this._senders.indexOf(E);i!==-1&&this._senders.splice(i,1)}}const g=A.RTCPeerConnection.prototype.addStream;A.RTCPeerConnection.prototype.addStream=function(Q){this._senders=this._senders||[],g.apply(this,[Q]),Q.getTracks().forEach(B=>{this._senders.push(I(this,B))})};const C=A.RTCPeerConnection.prototype.removeStream;A.RTCPeerConnection.prototype.removeStream=function(Q){this._senders=this._senders||[],C.apply(this,[Q]),Q.getTracks().forEach(B=>{const E=this._senders.find(i=>i.track===B);E&&this._senders.splice(this._senders.indexOf(E),1)})}}else if(typeof A=="object"&&A.RTCPeerConnection&&"getSenders"in A.RTCPeerConnection.prototype&&"createDTMFSender"in A.RTCPeerConnection.prototype&&A.RTCRtpSender&&!("dtmf"in A.RTCRtpSender.prototype)){const I=A.RTCPeerConnection.prototype.getSenders;A.RTCPeerConnection.prototype.getSenders=function(){const g=I.apply(this,[]);return g.forEach(C=>C._pc=this),g},Object.defineProperty(A.RTCRtpSender.prototype,"dtmf",{get(){return this._dtmf===void 0&&(this.track.kind==="audio"?this._dtmf=this._pc.createDTMFSender(this.track):this._dtmf=null),this._dtmf}})}}function RV(A){if(!A.RTCPeerConnection)return;const I=A.RTCPeerConnection.prototype.getStats;A.RTCPeerConnection.prototype.getStats=function(){const[g,C,Q]=arguments;if(arguments.length>0&&typeof g=="function")return I.apply(this,arguments);if(I.length===0&&(arguments.length===0||typeof g!="function"))return I.apply(this,[]);const B=function(i){const e={};return i.result().forEach(o=>{const t={id:o.id,timestamp:o.timestamp,type:{localcandidate:"local-candidate",remotecandidate:"remote-candidate"}[o.type]||o.type};o.names().forEach(s=>{t[s]=o.stat(s)}),e[t.id]=t}),e},E=function(i){return new Map(Object.keys(i).map(e=>[e,i[e]]))};if(arguments.length>=2){const i=function(e){C(E(B(e)))};return I.apply(this,[i,g])}return new Promise((i,e)=>{I.apply(this,[function(o){i(E(B(o)))},e])}).then(C,Q)}}function LV(A){if(!(typeof A=="object"&&A.RTCPeerConnection&&A.RTCRtpSender&&A.RTCRtpReceiver))return;if(!("getStats"in A.RTCRtpSender.prototype)){const g=A.RTCPeerConnection.prototype.getSenders;g&&(A.RTCPeerConnection.prototype.getSenders=function(){const Q=g.apply(this,[]);return Q.forEach(B=>B._pc=this),Q});const C=A.RTCPeerConnection.prototype.addTrack;C&&(A.RTCPeerConnection.prototype.addTrack=function(){const Q=C.apply(this,arguments);return Q._pc=this,Q}),A.RTCRtpSender.prototype.getStats=function(){const Q=this;return this._pc.getStats().then(B=>wF(B,Q.track,!0))}}if(!("getStats"in A.RTCRtpReceiver.prototype)){const g=A.RTCPeerConnection.prototype.getReceivers;g&&(A.RTCPeerConnection.prototype.getReceivers=function(){const C=g.apply(this,[]);return C.forEach(Q=>Q._pc=this),C}),ko(A,"track",C=>(C.receiver._pc=C.srcElement,C)),A.RTCRtpReceiver.prototype.getStats=function(){const C=this;return this._pc.getStats().then(Q=>wF(Q,C.track,!1))}}if(!("getStats"in A.RTCRtpSender.prototype)||!("getStats"in A.RTCRtpReceiver.prototype))return;const I=A.RTCPeerConnection.prototype.getStats;A.RTCPeerConnection.prototype.getStats=function(){if(arguments.length>0&&arguments[0]instanceof A.MediaStreamTrack){const g=arguments[0];let C,Q,B;return this.getSenders().forEach(E=>{E.track===g&&(C?B=!0:C=E)}),this.getReceivers().forEach(E=>(E.track===g&&(Q?B=!0:Q=E),E.track===g)),B||C&&Q?Promise.reject(new DOMException("There are more than one sender or receiver for the track.","InvalidAccessError")):C?C.getStats():Q?Q.getStats():Promise.reject(new DOMException("There is no sender or receiver for the track.","InvalidAccessError"))}return I.apply(this,arguments)}}function SV(A){A.RTCPeerConnection.prototype.getLocalStreams=function(){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},Object.keys(this._shimmedLocalStreams).map(B=>this._shimmedLocalStreams[B][0])};const I=A.RTCPeerConnection.prototype.addTrack;A.RTCPeerConnection.prototype.addTrack=function(B,E){if(!E)return I.apply(this,arguments);this._shimmedLocalStreams=this._shimmedLocalStreams||{};const i=I.apply(this,arguments);return this._shimmedLocalStreams[E.id]?this._shimmedLocalStreams[E.id].indexOf(i)===-1&&this._shimmedLocalStreams[E.id].push(i):this._shimmedLocalStreams[E.id]=[E,i],i};const g=A.RTCPeerConnection.prototype.addStream;A.RTCPeerConnection.prototype.addStream=function(B){this._shimmedLocalStreams=this._shimmedLocalStreams||{},B.getTracks().forEach(e=>{if(this.getSenders().find(o=>o.track===e))throw new DOMException("Track already exists.","InvalidAccessError")});const E=this.getSenders();g.apply(this,arguments);const i=this.getSenders().filter(e=>E.indexOf(e)===-1);this._shimmedLocalStreams[B.id]=[B].concat(i)};const C=A.RTCPeerConnection.prototype.removeStream;A.RTCPeerConnection.prototype.removeStream=function(B){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},delete this._shimmedLocalStreams[B.id],C.apply(this,arguments)};const Q=A.RTCPeerConnection.prototype.removeTrack;A.RTCPeerConnection.prototype.removeTrack=function(B){return this._shimmedLocalStreams=this._shimmedLocalStreams||{},B&&Object.keys(this._shimmedLocalStreams).forEach(E=>{const i=this._shimmedLocalStreams[E].indexOf(B);i!==-1&&this._shimmedLocalStreams[E].splice(i,1),this._shimmedLocalStreams[E].length===1&&delete this._shimmedLocalStreams[E]}),Q.apply(this,arguments)}}function TV(A,I){if(!A.RTCPeerConnection)return;if(A.RTCPeerConnection.prototype.addTrack&&I.version>=65)return SV(A);const g=A.RTCPeerConnection.prototype.getLocalStreams;A.RTCPeerConnection.prototype.getLocalStreams=function(){const e=g.apply(this);return this._reverseStreams=this._reverseStreams||{},e.map(o=>this._reverseStreams[o.id])};const C=A.RTCPeerConnection.prototype.addStream;A.RTCPeerConnection.prototype.addStream=function(e){if(this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},e.getTracks().forEach(o=>{if(this.getSenders().find(t=>t.track===o))throw new DOMException("Track already exists.","InvalidAccessError")}),!this._reverseStreams[e.id]){const o=new A.MediaStream(e.getTracks());this._streams[e.id]=o,this._reverseStreams[o.id]=e,e=o}C.apply(this,[e])};const Q=A.RTCPeerConnection.prototype.removeStream;function B(e,o){let t=o.sdp;return Object.keys(e._reverseStreams||[]).forEach(s=>{const v=e._reverseStreams[s],r=e._streams[v.id];t=t.replace(new RegExp(r.id,"g"),v.id)}),new RTCSessionDescription({type:o.type,sdp:t})}A.RTCPeerConnection.prototype.removeStream=function(e){this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{},Q.apply(this,[this._streams[e.id]||e]),delete this._reverseStreams[this._streams[e.id]?this._streams[e.id].id:e.id],delete this._streams[e.id]},A.RTCPeerConnection.prototype.addTrack=function(e,o){if(this.signalingState==="closed")throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");const t=[].slice.call(arguments,1);if(t.length!==1||!t[0].getTracks().find(v=>v===e))throw new DOMException("The adapter.js addTrack polyfill only supports a single stream which is associated with the specified track.","NotSupportedError");if(this.getSenders().find(v=>v.track===e))throw new DOMException("Track already exists.","InvalidAccessError");this._streams=this._streams||{},this._reverseStreams=this._reverseStreams||{};const s=this._streams[o.id];if(s)s.addTrack(e),Promise.resolve().then(()=>{this.dispatchEvent(new Event("negotiationneeded"))});else{const v=new A.MediaStream([e]);this._streams[o.id]=v,this._reverseStreams[v.id]=o,this.addStream(v)}return this.getSenders().find(v=>v.track===e)},["createOffer","createAnswer"].forEach(function(e){const o=A.RTCPeerConnection.prototype[e],t={[e](){const s=arguments;return arguments.length&&typeof arguments[0]=="function"?o.apply(this,[v=>{const r=B(this,v);s[0].apply(null,[r])},v=>{s[1]&&s[1].apply(null,v)},arguments[2]]):o.apply(this,arguments).then(v=>B(this,v))}};A.RTCPeerConnection.prototype[e]=t[e]});const E=A.RTCPeerConnection.prototype.setLocalDescription;A.RTCPeerConnection.prototype.setLocalDescription=function(){return arguments.length&&arguments[0].type?(arguments[0]=function(e,o){let t=o.sdp;return Object.keys(e._reverseStreams||[]).forEach(s=>{const v=e._reverseStreams[s],r=e._streams[v.id];t=t.replace(new RegExp(v.id,"g"),r.id)}),new RTCSessionDescription({type:o.type,sdp:t})}(this,arguments[0]),E.apply(this,arguments)):E.apply(this,arguments)};const i=Object.getOwnPropertyDescriptor(A.RTCPeerConnection.prototype,"localDescription");Object.defineProperty(A.RTCPeerConnection.prototype,"localDescription",{get(){const e=i.get.apply(this);return e.type===""?e:B(this,e)}}),A.RTCPeerConnection.prototype.removeTrack=function(e){if(this.signalingState==="closed")throw new DOMException("The RTCPeerConnection's signalingState is 'closed'.","InvalidStateError");if(!e._pc)throw new DOMException("Argument 1 of RTCPeerConnection.removeTrack does not implement interface RTCRtpSender.","TypeError");if(e._pc!==this)throw new DOMException("Sender was not created by this connection.","InvalidAccessError");let o;this._streams=this._streams||{},Object.keys(this._streams).forEach(t=>{this._streams[t].getTracks().find(s=>e.track===s)&&(o=this._streams[t])}),o&&(o.getTracks().length===1?this.removeStream(this._reverseStreams[o.id]):o.removeTrack(e.track),this.dispatchEvent(new Event("negotiationneeded")))}}function ww(A,I){!A.RTCPeerConnection&&A.webkitRTCPeerConnection&&(A.RTCPeerConnection=A.webkitRTCPeerConnection),A.RTCPeerConnection&&I.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach(function(g){const C=A.RTCPeerConnection.prototype[g],Q={[g](){return arguments[0]=new(g==="addIceCandidate"?A.RTCIceCandidate:A.RTCSessionDescription)(arguments[0]),C.apply(this,arguments)}};A.RTCPeerConnection.prototype[g]=Q[g]})}function UV(A,I){ko(A,"negotiationneeded",g=>{const C=g.target;if(!(I.version<72||C.getConfiguration&&C.getConfiguration().sdpSemantics==="plan-b")||C.signalingState==="stable")return g})}var GF=Object.freeze({__proto__:null,fixNegotiationNeeded:UV,shimAddTrackRemoveTrack:TV,shimAddTrackRemoveTrackWithNative:SV,shimGetDisplayMedia:JaA,shimGetSendersWithDtmf:GV,shimGetStats:RV,shimGetUserMedia:yV,shimMediaStream:wV,shimOnTrack:mV,shimPeerConnection:ww,shimSenderReceiverGetStats:LV});function FV(A,I){const g=A&&A.navigator,C=A&&A.MediaStreamTrack;if(g.getUserMedia=function(Q,B,E){nR("navigator.getUserMedia","navigator.mediaDevices.getUserMedia"),g.mediaDevices.getUserMedia(Q).then(B,E)},!(I.version>55&&"autoGainControl"in g.mediaDevices.getSupportedConstraints())){const Q=function(E,i,e){i in E&&!(e in E)&&(E[e]=E[i],delete E[i])},B=g.mediaDevices.getUserMedia.bind(g.mediaDevices);if(g.mediaDevices.getUserMedia=function(E){return typeof E=="object"&&typeof E.audio=="object"&&(E=JSON.parse(JSON.stringify(E)),Q(E.audio,"autoGainControl","mozAutoGainControl"),Q(E.audio,"noiseSuppression","mozNoiseSuppression")),B(E)},C&&C.prototype.getSettings){const E=C.prototype.getSettings;C.prototype.getSettings=function(){const i=E.apply(this,arguments);return Q(i,"mozAutoGainControl","autoGainControl"),Q(i,"mozNoiseSuppression","noiseSuppression"),i}}if(C&&C.prototype.applyConstraints){const E=C.prototype.applyConstraints;C.prototype.applyConstraints=function(i){return this.kind==="audio"&&typeof i=="object"&&(i=JSON.parse(JSON.stringify(i)),Q(i,"autoGainControl","mozAutoGainControl"),Q(i,"noiseSuppression","mozNoiseSuppression")),E.apply(this,[i])}}}}function WaA(A,I){A.navigator.mediaDevices&&"getDisplayMedia"in A.navigator.mediaDevices||A.navigator.mediaDevices&&(A.navigator.mediaDevices.getDisplayMedia=function(g){if(!g||!g.video){const C=new DOMException("getDisplayMedia without video constraints is undefined");return C.name="NotFoundError",C.code=8,Promise.reject(C)}return g.video===!0?g.video={mediaSource:I}:g.video.mediaSource=I,A.navigator.mediaDevices.getUserMedia(g)})}function YV(A){typeof A=="object"&&A.RTCTrackEvent&&"receiver"in A.RTCTrackEvent.prototype&&!("transceiver"in A.RTCTrackEvent.prototype)&&Object.defineProperty(A.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function mw(A,I){if(typeof A!="object"||!A.RTCPeerConnection&&!A.mozRTCPeerConnection)return;!A.RTCPeerConnection&&A.mozRTCPeerConnection&&(A.RTCPeerConnection=A.mozRTCPeerConnection),I.version<53&&["setLocalDescription","setRemoteDescription","addIceCandidate"].forEach(function(Q){const B=A.RTCPeerConnection.prototype[Q],E={[Q](){return arguments[0]=new(Q==="addIceCandidate"?A.RTCIceCandidate:A.RTCSessionDescription)(arguments[0]),B.apply(this,arguments)}};A.RTCPeerConnection.prototype[Q]=E[Q]});const g={inboundrtp:"inbound-rtp",outboundrtp:"outbound-rtp",candidatepair:"candidate-pair",localcandidate:"local-candidate",remotecandidate:"remote-candidate"},C=A.RTCPeerConnection.prototype.getStats;A.RTCPeerConnection.prototype.getStats=function(){const[Q,B,E]=arguments;return C.apply(this,[Q||null]).then(i=>{if(I.version<53&&!B)try{i.forEach(e=>{e.type=g[e.type]||e.type})}catch(e){if(e.name!=="TypeError")throw e;i.forEach((o,t)=>{i.set(t,Object.assign({},o,{type:g[o.type]||o.type}))})}return i}).then(B,E)}}function kV(A){if(typeof A!="object"||!A.RTCPeerConnection||!A.RTCRtpSender||A.RTCRtpSender&&"getStats"in A.RTCRtpSender.prototype)return;const I=A.RTCPeerConnection.prototype.getSenders;I&&(A.RTCPeerConnection.prototype.getSenders=function(){const C=I.apply(this,[]);return C.forEach(Q=>Q._pc=this),C});const g=A.RTCPeerConnection.prototype.addTrack;g&&(A.RTCPeerConnection.prototype.addTrack=function(){const C=g.apply(this,arguments);return C._pc=this,C}),A.RTCRtpSender.prototype.getStats=function(){return this.track?this._pc.getStats(this.track):Promise.resolve(new Map)}}function pV(A){if(typeof A!="object"||!A.RTCPeerConnection||!A.RTCRtpSender||A.RTCRtpSender&&"getStats"in A.RTCRtpReceiver.prototype)return;const I=A.RTCPeerConnection.prototype.getReceivers;I&&(A.RTCPeerConnection.prototype.getReceivers=function(){const g=I.apply(this,[]);return g.forEach(C=>C._pc=this),g}),ko(A,"track",g=>(g.receiver._pc=g.srcElement,g)),A.RTCRtpReceiver.prototype.getStats=function(){return this._pc.getStats(this.track)}}function NV(A){A.RTCPeerConnection&&!("removeStream"in A.RTCPeerConnection.prototype)&&(A.RTCPeerConnection.prototype.removeStream=function(I){nR("removeStream","removeTrack"),this.getSenders().forEach(g=>{g.track&&I.getTracks().includes(g.track)&&this.removeTrack(g)})})}function ZV(A){A.DataChannel&&!A.RTCDataChannel&&(A.RTCDataChannel=A.DataChannel)}function KV(A){if(typeof A!="object"||!A.RTCPeerConnection)return;const I=A.RTCPeerConnection.prototype.addTransceiver;I&&(A.RTCPeerConnection.prototype.addTransceiver=function(){this.setParametersPromises=[];let g=arguments[1]&&arguments[1].sendEncodings;g===void 0&&(g=[]),g=[...g];const C=g.length>0;C&&g.forEach(B=>{if("rid"in B&&!/^[a-z0-9]{0,16}$/i.test(B.rid))throw new TypeError("Invalid RID value provided.");if("scaleResolutionDownBy"in B&&!(parseFloat(B.scaleResolutionDownBy)>=1))throw new RangeError("scale_resolution_down_by must be >= 1.0");if("maxFramerate"in B&&!(parseFloat(B.maxFramerate)>=0))throw new RangeError("max_framerate must be >= 0.0")});const Q=I.apply(this,arguments);if(C){const{sender:B}=Q,E=B.getParameters();(!("encodings"in E)||E.encodings.length===1&&Object.keys(E.encodings[0]).length===0)&&(E.encodings=g,B.sendEncodings=g,this.setParametersPromises.push(B.setParameters(E).then(()=>{delete B.sendEncodings}).catch(()=>{delete B.sendEncodings})))}return Q})}function JV(A){if(typeof A!="object"||!A.RTCRtpSender)return;const I=A.RTCRtpSender.prototype.getParameters;I&&(A.RTCRtpSender.prototype.getParameters=function(){const g=I.apply(this,arguments);return"encodings"in g||(g.encodings=[].concat(this.sendEncodings||[{}])),g})}function WV(A){if(typeof A!="object"||!A.RTCPeerConnection)return;const I=A.RTCPeerConnection.prototype.createOffer;A.RTCPeerConnection.prototype.createOffer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then(()=>I.apply(this,arguments)).finally(()=>{this.setParametersPromises=[]}):I.apply(this,arguments)}}function VV(A){if(typeof A!="object"||!A.RTCPeerConnection)return;const I=A.RTCPeerConnection.prototype.createAnswer;A.RTCPeerConnection.prototype.createAnswer=function(){return this.setParametersPromises&&this.setParametersPromises.length?Promise.all(this.setParametersPromises).then(()=>I.apply(this,arguments)).finally(()=>{this.setParametersPromises=[]}):I.apply(this,arguments)}}var RF=Object.freeze({__proto__:null,shimAddTransceiver:KV,shimCreateAnswer:VV,shimCreateOffer:WV,shimGetDisplayMedia:WaA,shimGetParameters:JV,shimGetUserMedia:FV,shimOnTrack:YV,shimPeerConnection:mw,shimRTCDataChannel:ZV,shimReceiverGetStats:pV,shimRemoveStream:NV,shimSenderGetStats:kV});function zV(A){if(typeof A=="object"&&A.RTCPeerConnection){if("getLocalStreams"in A.RTCPeerConnection.prototype||(A.RTCPeerConnection.prototype.getLocalStreams=function(){return this._localStreams||(this._localStreams=[]),this._localStreams}),!("addStream"in A.RTCPeerConnection.prototype)){const I=A.RTCPeerConnection.prototype.addTrack;A.RTCPeerConnection.prototype.addStream=function(g){this._localStreams||(this._localStreams=[]),this._localStreams.includes(g)||this._localStreams.push(g),g.getAudioTracks().forEach(C=>I.call(this,C,g)),g.getVideoTracks().forEach(C=>I.call(this,C,g))},A.RTCPeerConnection.prototype.addTrack=function(g){for(var C=arguments.length,Q=new Array(C>1?C-1:0),B=1;B{this._localStreams?this._localStreams.includes(E)||this._localStreams.push(E):this._localStreams=[E]}),I.apply(this,arguments)}}"removeStream"in A.RTCPeerConnection.prototype||(A.RTCPeerConnection.prototype.removeStream=function(I){this._localStreams||(this._localStreams=[]);const g=this._localStreams.indexOf(I);if(g===-1)return;this._localStreams.splice(g,1);const C=I.getTracks();this.getSenders().forEach(Q=>{C.includes(Q.track)&&this.removeTrack(Q)})})}}function MV(A){if(typeof A=="object"&&A.RTCPeerConnection&&("getRemoteStreams"in A.RTCPeerConnection.prototype||(A.RTCPeerConnection.prototype.getRemoteStreams=function(){return this._remoteStreams?this._remoteStreams:[]}),!("onaddstream"in A.RTCPeerConnection.prototype))){Object.defineProperty(A.RTCPeerConnection.prototype,"onaddstream",{get(){return this._onaddstream},set(g){this._onaddstream&&(this.removeEventListener("addstream",this._onaddstream),this.removeEventListener("track",this._onaddstreampoly)),this.addEventListener("addstream",this._onaddstream=g),this.addEventListener("track",this._onaddstreampoly=C=>{C.streams.forEach(Q=>{if(this._remoteStreams||(this._remoteStreams=[]),this._remoteStreams.includes(Q))return;this._remoteStreams.push(Q);const B=new Event("addstream");B.stream=Q,this.dispatchEvent(B)})})}});const I=A.RTCPeerConnection.prototype.setRemoteDescription;A.RTCPeerConnection.prototype.setRemoteDescription=function(){const g=this;return this._onaddstreampoly||this.addEventListener("track",this._onaddstreampoly=function(C){C.streams.forEach(Q=>{if(g._remoteStreams||(g._remoteStreams=[]),g._remoteStreams.indexOf(Q)>=0)return;g._remoteStreams.push(Q);const B=new Event("addstream");B.stream=Q,g.dispatchEvent(B)})}),I.apply(g,arguments)}}}function XV(A){if(typeof A!="object"||!A.RTCPeerConnection)return;const I=A.RTCPeerConnection.prototype,g=I.createOffer,C=I.createAnswer,Q=I.setLocalDescription,B=I.setRemoteDescription,E=I.addIceCandidate;I.createOffer=function(e,o){const t=arguments.length>=2?arguments[2]:arguments[0],s=g.apply(this,[t]);return o?(s.then(e,o),Promise.resolve()):s},I.createAnswer=function(e,o){const t=arguments.length>=2?arguments[2]:arguments[0],s=C.apply(this,[t]);return o?(s.then(e,o),Promise.resolve()):s};let i=function(e,o,t){const s=Q.apply(this,[e]);return t?(s.then(o,t),Promise.resolve()):s};I.setLocalDescription=i,i=function(e,o,t){const s=B.apply(this,[e]);return t?(s.then(o,t),Promise.resolve()):s},I.setRemoteDescription=i,i=function(e,o,t){const s=E.apply(this,[e]);return t?(s.then(o,t),Promise.resolve()):s},I.addIceCandidate=i}function jV(A){const I=A&&A.navigator;if(I.mediaDevices&&I.mediaDevices.getUserMedia){const g=I.mediaDevices,C=g.getUserMedia.bind(g);I.mediaDevices.getUserMedia=Q=>C(fV(Q))}!I.getUserMedia&&I.mediaDevices&&I.mediaDevices.getUserMedia&&(I.getUserMedia=(function(g,C,Q){I.mediaDevices.getUserMedia(g).then(C,Q)}).bind(I))}function fV(A){return A&&A.video!==void 0?Object.assign({},A,{video:bV(A.video)}):A}function HV(A){if(!A.RTCPeerConnection)return;const I=A.RTCPeerConnection;A.RTCPeerConnection=function(g,C){if(g&&g.iceServers){const Q=[];for(let B=0;BI.generateCertificate})}function xV(A){typeof A=="object"&&A.RTCTrackEvent&&"receiver"in A.RTCTrackEvent.prototype&&!("transceiver"in A.RTCTrackEvent.prototype)&&Object.defineProperty(A.RTCTrackEvent.prototype,"transceiver",{get(){return{receiver:this.receiver}}})}function OV(A){const I=A.RTCPeerConnection.prototype.createOffer;A.RTCPeerConnection.prototype.createOffer=function(g){if(g){g.offerToReceiveAudio!==void 0&&(g.offerToReceiveAudio=!!g.offerToReceiveAudio);const C=this.getTransceivers().find(B=>B.receiver.track.kind==="audio");g.offerToReceiveAudio===!1&&C?C.direction==="sendrecv"?C.setDirection?C.setDirection("sendonly"):C.direction="sendonly":C.direction==="recvonly"&&(C.setDirection?C.setDirection("inactive"):C.direction="inactive"):g.offerToReceiveAudio!==!0||C||this.addTransceiver("audio",{direction:"recvonly"}),g.offerToReceiveVideo!==void 0&&(g.offerToReceiveVideo=!!g.offerToReceiveVideo);const Q=this.getTransceivers().find(B=>B.receiver.track.kind==="video");g.offerToReceiveVideo===!1&&Q?Q.direction==="sendrecv"?Q.setDirection?Q.setDirection("sendonly"):Q.direction="sendonly":Q.direction==="recvonly"&&(Q.setDirection?Q.setDirection("inactive"):Q.direction="inactive"):g.offerToReceiveVideo!==!0||Q||this.addTransceiver("video",{direction:"recvonly"})}return I.apply(this,arguments)}}function qV(A){typeof A!="object"||A.AudioContext||(A.AudioContext=A.webkitAudioContext)}var LF=Object.freeze({__proto__:null,shimAudioContext:qV,shimCallbacksAPI:XV,shimConstraints:fV,shimCreateOfferLegacy:OV,shimGetUserMedia:jV,shimLocalStreamsAPI:zV,shimRTCIceServerUrls:HV,shimRemoteStreamsAPI:MV,shimTrackEventTransceiver:xV}),_V={exports:{}};(function(A){const I={generateIdentifier:function(){return Math.random().toString(36).substring(2,12)}};I.localCName=I.generateIdentifier(),I.splitLines=function(g){return RE(g).call(g).split(` `).map(C=>RE(C).call(C))},I.splitSections=function(g){return g.split(` m=`).map((C,Q)=>{var B;return RE(B=Q>0?"m="+C:C).call(B)+`\r `})},I.getDescription=function(g){const C=I.splitSections(g);return C&&C[0]},I.getMediaSections=function(g){const C=I.splitSections(g);return C.shift(),C},I.matchPrefix=function(g,C){return I.splitLines(g).filter(Q=>Q.indexOf(C)===0)},I.parseCandidate=function(g){let C;C=g.indexOf("a=candidate:")===0?g.substring(12).split(" "):g.substring(10).split(" ");const Q={foundation:C[0],component:{1:"rtp",2:"rtcp"}[C[1]]||C[1],protocol:C[2].toLowerCase(),priority:parseInt(C[3],10),ip:C[4],address:C[4],port:parseInt(C[5],10),type:C[7]};for(let B=8;B0?C[0].split("/")[1]:"sendrecv",uri:C[1],attributes:C.slice(2).join(" ")}},I.writeExtmap=function(g){return"a=extmap:"+(g.id||g.preferredId)+(g.direction&&g.direction!=="sendrecv"?"/"+g.direction:"")+" "+g.uri+(g.attributes?" "+g.attributes:"")+`\r `},I.parseFmtp=function(g){const C={};let Q;const B=g.substring(g.indexOf(" ")+1).split(";");for(let e=0;e{g.parameters[E]!==void 0?B.push(E+"="+g.parameters[E]):B.push(E)}),C+="a=fmtp:"+Q+" "+B.join(";")+`\r `}return C},I.parseRtcpFb=function(g){const C=g.substring(g.indexOf(" ")+1).split(" ");return{type:C.shift(),parameter:C.join(" ")}},I.writeRtcpFb=function(g){let C="",Q=g.payloadType;return g.preferredPayloadType!==void 0&&(Q=g.preferredPayloadType),g.rtcpFeedback&&g.rtcpFeedback.length&&g.rtcpFeedback.forEach(B=>{C+="a=rtcp-fb:"+Q+" "+B.type+(B.parameter&&B.parameter.length?" "+B.parameter:"")+`\r `}),C},I.parseSsrcMedia=function(g){const C=g.indexOf(" "),Q={ssrc:parseInt(g.substring(7,C),10)},B=g.indexOf(":",C);return B>-1?(Q.attribute=g.substring(C+1,B),Q.value=g.substring(B+1)):Q.attribute=g.substring(C+1),Q},I.parseSsrcGroup=function(g){const C=g.substring(13).split(" ");return{semantics:C.shift(),ssrcs:C.map(Q=>parseInt(Q,10))}},I.getMid=function(g){const C=I.matchPrefix(g,"a=mid:")[0];if(C)return C.substring(6)},I.parseFingerprint=function(g){const C=g.substring(14).split(" ");return{algorithm:C[0].toLowerCase(),value:C[1].toUpperCase()}},I.getDtlsParameters=function(g,C){return{role:"auto",fingerprints:I.matchPrefix(g+C,"a=fingerprint:").map(I.parseFingerprint)}},I.writeDtlsParameters=function(g,C){let Q="a=setup:"+C+`\r `;return g.fingerprints.forEach(B=>{Q+="a=fingerprint:"+B.algorithm+" "+B.value+`\r `}),Q},I.parseCryptoLine=function(g){const C=g.substring(9).split(" ");return{tag:parseInt(C[0],10),cryptoSuite:C[1],keyParams:C[2],sessionParams:C.slice(3)}},I.writeCryptoLine=function(g){return"a=crypto:"+g.tag+" "+g.cryptoSuite+" "+(typeof g.keyParams=="object"?I.writeCryptoKeyParams(g.keyParams):g.keyParams)+(g.sessionParams?" "+g.sessionParams.join(" "):"")+`\r `},I.parseCryptoKeyParams=function(g){if(g.indexOf("inline:")!==0)return null;const C=g.substring(7).split("|");return{keyMethod:"inline",keySalt:C[0],lifeTime:C[1],mkiValue:C[2]?C[2].split(":")[0]:void 0,mkiLength:C[2]?C[2].split(":")[1]:void 0}},I.writeCryptoKeyParams=function(g){return g.keyMethod+":"+g.keySalt+(g.lifeTime?"|"+g.lifeTime:"")+(g.mkiValue&&g.mkiLength?"|"+g.mkiValue+":"+g.mkiLength:"")},I.getCryptoParameters=function(g,C){return I.matchPrefix(g+C,"a=crypto:").map(I.parseCryptoLine)},I.getIceParameters=function(g,C){const Q=I.matchPrefix(g+C,"a=ice-ufrag:")[0],B=I.matchPrefix(g+C,"a=ice-pwd:")[0];return Q&&B?{usernameFragment:Q.substring(12),password:B.substring(10)}:null},I.writeIceParameters=function(g){let C="a=ice-ufrag:"+g.usernameFragment+`\r a=ice-pwd:`+g.password+`\r `;return g.iceLite&&(C+=`a=ice-lite\r `),C},I.parseRtpParameters=function(g){const C={codecs:[],headerExtensions:[],fecMechanisms:[],rtcp:[]},Q=I.splitLines(g)[0].split(" ");C.profile=Q[2];for(let E=3;E{C.headerExtensions.push(I.parseExtmap(E))});const B=I.matchPrefix(g,"a=rtcp-fb:* ").map(I.parseRtcpFb);return C.codecs.forEach(E=>{B.forEach(i=>{E.rtcpFeedback.find(e=>e.type===i.type&&e.parameter===i.parameter)||E.rtcpFeedback.push(i)})}),C},I.writeRtpDescription=function(g,C){let Q="";Q+="m="+g+" ",Q+=C.codecs.length>0?"9":"0",Q+=" "+(C.profile||"UDP/TLS/RTP/SAVPF")+" ",Q+=C.codecs.map(E=>E.preferredPayloadType!==void 0?E.preferredPayloadType:E.payloadType).join(" ")+`\r `,Q+=`c=IN IP4 0.0.0.0\r `,Q+=`a=rtcp:9 IN IP4 0.0.0.0\r `,C.codecs.forEach(E=>{Q+=I.writeRtpMap(E),Q+=I.writeFmtp(E),Q+=I.writeRtcpFb(E)});let B=0;return C.codecs.forEach(E=>{E.maxptime>B&&(B=E.maxptime)}),B>0&&(Q+="a=maxptime:"+B+`\r `),C.headerExtensions&&C.headerExtensions.forEach(E=>{Q+=I.writeExtmap(E)}),Q},I.parseRtpEncodingParameters=function(g){const C=[],Q=I.parseRtpParameters(g),B=Q.fecMechanisms.indexOf("RED")!==-1,E=Q.fecMechanisms.indexOf("ULPFEC")!==-1,i=I.matchPrefix(g,"a=ssrc:").map(v=>I.parseSsrcMedia(v)).filter(v=>v.attribute==="cname"),e=i.length>0&&i[0].ssrc;let o;const t=I.matchPrefix(g,"a=ssrc-group:FID").map(v=>v.substring(17).split(" ").map(r=>parseInt(r,10)));t.length>0&&t[0].length>1&&t[0][0]===e&&(o=t[0][1]),Q.codecs.forEach(v=>{if(v.name.toUpperCase()==="RTX"&&v.parameters.apt){let r={ssrc:e,codecPayloadType:parseInt(v.parameters.apt,10)};e&&o&&(r.rtx={ssrc:o}),C.push(r),B&&(r=JSON.parse(JSON.stringify(r)),r.fec={ssrc:e,mechanism:E?"red+ulpfec":"red"},C.push(r))}}),C.length===0&&e&&C.push({ssrc:e});let s=I.matchPrefix(g,"b=");return s.length&&(s=s[0].indexOf("b=TIAS:")===0?parseInt(s[0].substring(7),10):s[0].indexOf("b=AS:")===0?1e3*parseInt(s[0].substring(5),10)*.95-16e3:void 0,C.forEach(v=>{v.maxBitrate=s})),C},I.parseRtcpParameters=function(g){const C={},Q=I.matchPrefix(g,"a=ssrc:").map(i=>I.parseSsrcMedia(i)).filter(i=>i.attribute==="cname")[0];Q&&(C.cname=Q.value,C.ssrc=Q.ssrc);const B=I.matchPrefix(g,"a=rtcp-rsize");C.reducedSize=B.length>0,C.compound=B.length===0;const E=I.matchPrefix(g,"a=rtcp-mux");return C.mux=E.length>0,C},I.writeRtcpParameters=function(g){let C="";return g.reducedSize&&(C+=`a=rtcp-rsize\r `),g.mux&&(C+=`a=rtcp-mux\r `),g.ssrc!==void 0&&g.cname&&(C+="a=ssrc:"+g.ssrc+" cname:"+g.cname+`\r `),C},I.parseMsid=function(g){let C;const Q=I.matchPrefix(g,"a=msid:");if(Q.length===1)return C=Q[0].substring(7).split(" "),{stream:C[0],track:C[1]};const B=I.matchPrefix(g,"a=ssrc:").map(E=>I.parseSsrcMedia(E)).filter(E=>E.attribute==="msid");return B.length>0?(C=B[0].value.split(" "),{stream:C[0],track:C[1]}):void 0},I.parseSctpDescription=function(g){const C=I.parseMLine(g),Q=I.matchPrefix(g,"a=max-message-size:");let B;Q.length>0&&(B=parseInt(Q[0].substring(19),10)),isNaN(B)&&(B=65536);const E=I.matchPrefix(g,"a=sctp-port:");if(E.length>0)return{port:parseInt(E[0].substring(12),10),protocol:C.fmt,maxMessageSize:B};const i=I.matchPrefix(g,"a=sctpmap:");if(i.length>0){const e=i[0].substring(10).split(" ");return{port:parseInt(e[0],10),protocol:e[1],maxMessageSize:B}}},I.writeSctpDescription=function(g,C){let Q=[];return Q=g.protocol!=="DTLS/SCTP"?["m="+g.kind+" 9 "+g.protocol+" "+C.protocol+`\r `,`c=IN IP4 0.0.0.0\r `,"a=sctp-port:"+C.port+`\r `]:["m="+g.kind+" 9 "+g.protocol+" "+C.port+`\r `,`c=IN IP4 0.0.0.0\r `,"a=sctpmap:"+C.port+" "+C.protocol+` 65535\r `],C.maxMessageSize!==void 0&&Q.push("a=max-message-size:"+C.maxMessageSize+`\r `),Q.join("")},I.generateSessionId=function(){return Math.random().toString().substr(2,22)},I.writeSessionBoilerplate=function(g,C,Q){let B;const E=C!==void 0?C:2;return B=g||I.generateSessionId(),`v=0\r o=`+(Q||"thisisadapterortc")+" "+B+" "+E+` IN IP4 127.0.0.1\r s=-\r t=0 0\r `},I.getDirection=function(g,C){const Q=I.splitLines(g);for(let B=0;B(g.candidate&&Object.defineProperty(g,"candidate",{value:new A.RTCIceCandidate(g.candidate),writable:"false"}),g))}function Gw(A){!A.RTCIceCandidate||A.RTCIceCandidate&&"relayProtocol"in A.RTCIceCandidate.prototype||ko(A,"icecandidate",I=>{if(I.candidate){const g=ys.parseCandidate(I.candidate.candidate);g.type==="relay"&&(I.candidate.relayProtocol={0:"tls",1:"tcp",2:"udp"}[g.priority>>24])}return I})}function El(A,I){if(!A.RTCPeerConnection)return;"sctp"in A.RTCPeerConnection.prototype||Object.defineProperty(A.RTCPeerConnection.prototype,"sctp",{get(){return this._sctp===void 0?null:this._sctp}});const g=A.RTCPeerConnection.prototype.setRemoteDescription;A.RTCPeerConnection.prototype.setRemoteDescription=function(){if(this._sctp=null,I.browser==="chrome"&&I.version>=76){const{sdpSemantics:C}=this.getConfiguration();C==="plan-b"&&Object.defineProperty(this,"sctp",{get(){return this._sctp===void 0?null:this._sctp},enumerable:!0,configurable:!0})}if(function(C){if(!C||!C.sdp)return!1;const Q=ys.splitSections(C.sdp);return Q.shift(),Q.some(B=>{const E=ys.parseMLine(B);return E&&E.kind==="application"&&E.protocol.indexOf("SCTP")!==-1})}(arguments[0])){const C=function(e){const o=e.sdp.match(/mozilla...THIS_IS_SDPARTA-(\d+)/);if(o===null||o.length<2)return-1;const t=parseInt(o[1],10);return t!=t?-1:t}(arguments[0]),Q=function(e){let o=65536;return I.browser==="firefox"&&(o=I.version<57?e===-1?16384:2147483637:I.version<60?I.version===57?65535:65536:2147483637),o}(C),B=function(e,o){let t=65536;I.browser==="firefox"&&I.version===57&&(t=65535);const s=ys.matchPrefix(e.sdp,"a=max-message-size:");return s.length>0?t=parseInt(s[0].substring(19),10):I.browser==="firefox"&&o!==-1&&(t=2147483637),t}(arguments[0],C);let E;E=Q===0&&B===0?Number.POSITIVE_INFINITY:Q===0||B===0?Math.max(Q,B):Math.min(Q,B);const i={};Object.defineProperty(i,"maxMessageSize",{get:()=>E}),this._sctp=i}return g.apply(this,arguments)}}function il(A){if(!A.RTCPeerConnection||!("createDataChannel"in A.RTCPeerConnection.prototype))return;function I(C,Q){const B=C.send;C.send=function(){return B.apply(C,arguments)}}const g=A.RTCPeerConnection.prototype.createDataChannel;A.RTCPeerConnection.prototype.createDataChannel=function(){const C=g.apply(this,arguments);return I(C),C},ko(A,"datachannel",C=>(I(C.channel,C.target),C))}function Rw(A){if(!A.RTCPeerConnection||"connectionState"in A.RTCPeerConnection.prototype)return;const I=A.RTCPeerConnection.prototype;Object.defineProperty(I,"connectionState",{get(){return{completed:"connected",checking:"connecting"}[this.iceConnectionState]||this.iceConnectionState},enumerable:!0,configurable:!0}),Object.defineProperty(I,"onconnectionstatechange",{get(){return this._onconnectionstatechange||null},set(g){this._onconnectionstatechange&&(this.removeEventListener("connectionstatechange",this._onconnectionstatechange),delete this._onconnectionstatechange),g&&this.addEventListener("connectionstatechange",this._onconnectionstatechange=g)},enumerable:!0,configurable:!0}),["setLocalDescription","setRemoteDescription"].forEach(g=>{const C=I[g];I[g]=function(){return this._connectionstatechangepoly||(this._connectionstatechangepoly=Q=>{const B=Q.target;if(B._lastConnectionState!==B.connectionState){B._lastConnectionState=B.connectionState;const E=new Event("connectionstatechange",Q);B.dispatchEvent(E)}return Q},this.addEventListener("iceconnectionstatechange",this._connectionstatechangepoly)),C.apply(this,arguments)}})}function Lw(A,I){if(!A.RTCPeerConnection||I.browser==="chrome"&&I.version>=71||I.browser==="safari"&&I.version>=605)return;const g=A.RTCPeerConnection.prototype.setRemoteDescription;A.RTCPeerConnection.prototype.setRemoteDescription=function(C){if(C&&C.sdp&&C.sdp.indexOf(` a=extmap-allow-mixed`)!==-1){const Q=C.sdp.split(` `).filter(B=>RE(B).call(B)!=="a=extmap-allow-mixed").join(` `);A.RTCSessionDescription&&C instanceof A.RTCSessionDescription?arguments[0]=new A.RTCSessionDescription({type:C.type,sdp:Q}):C.sdp=Q}return g.apply(this,arguments)}}function el(A,I){if(!A.RTCPeerConnection||!A.RTCPeerConnection.prototype)return;const g=A.RTCPeerConnection.prototype.addIceCandidate;g&&g.length!==0&&(A.RTCPeerConnection.prototype.addIceCandidate=function(){return arguments[0]?(I.browser==="chrome"&&I.version<78||I.browser==="firefox"&&I.version<68||I.browser==="safari")&&arguments[0]&&arguments[0].candidate===""?Promise.resolve():g.apply(this,arguments):(arguments[1]&&arguments[1].apply(null),Promise.resolve())})}function ol(A,I){if(!A.RTCPeerConnection||!A.RTCPeerConnection.prototype)return;const g=A.RTCPeerConnection.prototype.setLocalDescription;g&&g.length!==0&&(A.RTCPeerConnection.prototype.setLocalDescription=function(){let C=arguments[0]||{};if(typeof C!="object"||C.type&&C.sdp)return g.apply(this,arguments);if(C={type:C.type,sdp:C.sdp},!C.type)switch(this.signalingState){case"stable":case"have-local-offer":case"have-remote-pranswer":C.type="offer";break;default:C.type="answer"}return C.sdp||C.type!=="offer"&&C.type!=="answer"?g.apply(this,[C]):(C.type==="offer"?this.createOffer:this.createAnswer).apply(this).then(Q=>g.apply(this,[Q]))})}var zaA=Object.freeze({__proto__:null,removeExtmapAllowMixed:Lw,shimAddIceCandidateNullOrEmpty:el,shimConnectionState:Rw,shimMaxMessageSize:El,shimParameterlessSetLocalDescription:ol,shimRTCIceCandidate:Bl,shimRTCIceCandidateRelayProtocol:Gw,shimSendThrowTypeError:il});function MaA(){let{window:A}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},I=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{shimChrome:!0,shimFirefox:!0,shimSafari:!0};const g=uV,C=KaA(A),Q={browserDetails:C,commonShim:zaA,extractVersion:Ql,disableLog:NaA,disableWarnings:ZaA,sdp:VaA};switch(C.browser){case"chrome":if(!GF||!ww||!I.shimChrome)return g("Chrome shim is not included in this adapter release."),Q;if(C.version===null)return g("Chrome shim can not determine version, not shimming."),Q;g("adapter.js shimming chrome."),Q.browserShim=GF,el(A,C),ol(A),yV(A,C),wV(A),ww(A,C),mV(A),TV(A,C),GV(A),RV(A),LV(A),UV(A,C),Bl(A),Gw(A),Rw(A),El(A,C),il(A),Lw(A,C);break;case"firefox":if(!RF||!mw||!I.shimFirefox)return g("Firefox shim is not included in this adapter release."),Q;g("adapter.js shimming firefox."),Q.browserShim=RF,el(A,C),ol(A),FV(A,C),mw(A,C),YV(A),NV(A),kV(A),pV(A),ZV(A),KV(A),JV(A),WV(A),VV(A),Bl(A),Rw(A),El(A,C),il(A);break;case"safari":if(!LF||!I.shimSafari)return g("Safari shim is not included in this adapter release."),Q;g("adapter.js shimming safari."),Q.browserShim=LF,el(A,C),ol(A),HV(A),OV(A),XV(A),zV(A),MV(A),xV(A),jV(A),qV(A),Bl(A),Gw(A),El(A,C),il(A),Lw(A,C);break;default:g("Unsupported browser!")}return Q}if(MaA({window:typeof window>"u"?void 0:window}),typeof MediaStreamTrack<"u"){const A=MediaStreamTrack.prototype.getSettings;MediaStreamTrack.prototype.getSettings=function(){const I=A.call(this);return I.width&&(I.width=Math.floor(I.width)),I.height&&(I.height=Math.floor(I.height)),I.frameRate&&(I.frameRate=Math.floor(I.frameRate)),I}}var SF=ov,XaA=TypeError,jaA=function(A,I){if(!delete A[I])throw new XaA("Cannot delete property "+SF(I)+" of "+SF(A))},TF=rv,faA=Math.floor,Sw=function(A,I){var g=A.length;if(g<8)for(var C,Q,B=1;B0;)A[Q]=A[--Q];Q!==B++&&(A[Q]=C)}else for(var E=faA(g/2),i=Sw(TF(A,0,E),I),e=Sw(TF(A,E),I),o=i.length,t=e.length,s=0,v=0;s3)){if(EPA)return!0;if(ZF)return ZF<603;var A,I,g,C,Q="";for(A=65;A<76;A++){switch(I=String.fromCharCode(A),A){case 66:case 69:case 70:case 72:g=3;break;case 68:case 71:g=4;break;default:g=2}for(C=0;C<47;C++)Fi.push({k:I+C,v:g})}for(Fi.sort(function(B,E){return E.v-B.v}),C=0;CkF(g)?1:-1}};APA({target:"Array",proto:!0,forced:sPA},{sort:function(A){A!==void 0&&IPA(A);var I=gPA(this);if(gz)return A===void 0?KF(I):KF(I,A);var g,C,Q=[],B=YF(I);for(C=0;C1?C-1:0),B=1;B1?g-1:0),Q=1;Q{try{super.emit(I,...C)}catch(B){JF.error("safeEmit","safeEmit() | event listener threw an error [event:%s]:%o",I,B),console.error(B)}})}}var Tw=(A=>(A[A.BLACK=0]="BLACK",A[A.NORMAL=1]="NORMAL",A))(Tw||{}),Uw=(A=>(A.streamRemovedBySchedule308="stream removed",A.clientRePublish="client republish",A.publishStreamFaied="publish failed",A.clientUnPublish="client unpublished",A.clientDisconnected="client disconnected",A.videoMuted="video muted",A))(Uw||{}),Qz=(A=>(A.PushLimitWarn="PushLimitWarn",A.OTHER="OTHER",A))(Qz||{}),Bz=(A=>(A.CHANGE_CODEC="changeCodec",A))(Bz||{}),x=(A=>(A.ON_ADD_STREAM="onAddStream",A.ON_ADD_STREAM_LIST="onAddStreamList",A.ON_REMOVE_STREAM="onRemoveStream",A.ON_REMOVE_STREAM_LIST="onRemoveStreamList",A.USER_DISCONNECTION="userDisconnection",A.USER_DISCONNECTION_LIST="userDisconnectionList",A.USER_CONNECTION="userConnection",A.USER_CONNECTION_LIST="userConnectionList",A.ON_UPDATE_STREAM_ATTRIBUTES="onUpdateStreamAttributes",A.ON_UPDATE_ROOM_ATTRIBUTES="onUpdateRoomAttributes",A.ON_UPDATE_USER_ATTRIBUTES="onUpdateUserAttributes",A.ON_PUSH_TRACK="onPushTrack",A.ON_REMOVE_TRACK="onRemoveTrack",A.ON_CUSTOM_MESSAGE="onCustomMessage",A.NODE_CHANGE="nodeChange",A.USER_MESSAGE_RECEIVED="userMessageReceived",A.USER_BINARY_MESSAGE_RECEIVED="userBinaryMessageReceived",A.USER_MESSAGE_RECEIVED_OUTSIDE_ROOM="userMessageReceivedOutsideRoom",A.USER_BINARY_MESSAGE_RECEIVED_OUTSIDE_ROOM="userBinaryMessageReceivedOutsideRoom",A.POST_PROCESSING_MESSAGE="postProcessingMessage",A.ON_USER_TOKEN_WILL_EXPIRE="onUserTokenWillExpire",A.ON_TOKEN_PUBLISH_PRIVILEGE_WILL_EXPIRE="onTokenPublishPrivilegeWillExpire",A.ON_TOKEN_PUBLISH_PRIVILEGE_DID_EXPIRED="onTokenPublishPrivilegeDidExpired",A.ON_TOKEN_SUBSCRIBE_PRIVILEGE_WILL_EXPIRE="onTokenSubscribePrivilegeWillExpire",A.ON_TOKEN_SUBSCRIBE_PRIVILEGE_DID_EXPIRED="onTokenSubscribePrivilegeDidExpired",A.STREAM_CONTROL_MESSAGE="streamControlMessage",A.ON_SPEAKER_CHANGE="onSpeakerChange",A.ON_STREAM_FAILED="streamFailed",A.ON_NOTIFY_RECONNECT="notifyReconnect",A.ON_FORWARD_DST_ROOM_USER_KICK="onForwardDstRoomUserKick",A.ENGINE_CONTROL_MESSAGE="engineControlMessage",A.ON_STREAM_PUSHED_BY_OTHER="onStreamPushedByOther",A.ON_STREAM_PULL_STATE_CHANGED="onStreamPullStateChanged",A))(x||{}),TE=(A=>(A.RSCP="RSCP",A.RTT="RTT",A.SSC="SSC",A))(TE||{}),HI=(A=>(A.ON_CONNECTION_STATE_CHANGE="onConnectionStateChange",A.ON_VENDOR_CONNECTION_STATE_CHANGE="onVendorConnectionStateChange",A.ABNORMAL_DISCONNECTION="normalConnection",A.ON_RECONNECT_FAILED="onReconnectFailed",A.CONNECT_WITH_TCP="onIceConnectWithTcp",A))(HI||{}),ai=(A=>(A.userLeave="userLeave",A.connectionLost="connectionLost",A.userDuplicateLogin="userDuplicateLogin",A.kickedByAdmin="kickedByAdmin",A.roleChanged="roleChanged",A.onUserTokenDidExpire="onUserTokenDidExpire",A))(ai||{}),Ez=(A=>(A[A.roomDismissByAdmin=2]="roomDismissByAdmin",A))(Ez||{}),Qo=(A=>(A[A.LIMIT_MODE=1]="LIMIT_MODE",A[A.NORMAL_MODE=2]="NORMAL_MODE",A))(Qo||{}),eC=(A=>(A[A.NORMAL=0]="NORMAL",A[A.BLACK=1]="BLACK",A))(eC||{}),oI=(A=>(A[A.EXTERNAL=0]="EXTERNAL",A[A.INTERNAL=1]="INTERNAL",A))(oI||{}),Vs=(A=>(A.AUDIO="audio",A.VIDEO="video",A))(Vs||{}),LI=(A=>(A.MAIN="main",A.SCREEN="screen",A.PUBLIC="public",A.VIRTUAL="virtual",A))(LI||{});class iz extends iQ{constructor(I,g,C){super(),P(this,"trackId",KE()),P(this,"_logger",void 0),P(this,"trackInfo",void 0),P(this,"_originTrack",void 0),P(this,"_channelCount",void 0),this._ctx=I,this._logger=new uA("Track",4,I.id),this.trackInfo=C,this._originTrack=g,this._channelCount=g.getSettings().channelCount}get dummy(){return this.trackInfo.isDummy}get virtual(){return this.trackInfo.streamIndex==="virtual"}get isScreen(){return this.trackInfo.streamIndex==="screen"}get isPublic(){return this.trackInfo.streamIndex==="public"}get sourceType(){return this.trackInfo.sourceType}get mediaType(){return this.trackInfo.mediaType}get captureSessionId(){return this.trackInfo.captureSessionId}get streamIndex(){const{streamIndex:I}=this.trackInfo;return I==="main"?F.STREAM_INDEX_MAIN:I==="screen"?F.STREAM_INDEX_SCREEN:void 0}get channelCount(){var I;return(I=this._channelCount)!==null&&I!==void 0?I:0}get originTrack(){return this._originTrack}set originTrack(I){this._originTrack=I,this._channelCount=mediaTrack.getSettings().channelCount}get logger(){return this._logger.module=this.constructor.name,this._logger}destroy(){this._originTrack.stop()}}class ez extends iz{constructor(I,g,C){super(I,g,C),P(this,"_mediaTrack",void 0),P(this,"_preProcessingTrack",void 0),P(this,"isTrackReady",void 0),P(this,"handleTrackEnded",()=>{this.emit("track-ended",this),this.destroy()}),P(this,"handleMute",()=>{this.emit("track-mute",this)}),P(this,"handleUnmute",()=>{this.emit("track-unmute",this)}),this._initListeners(),this.isTrackReady=this.generatePreProcessingTrack()}get mediaTrack(){var I;return(I=this._mediaTrack)!==null&&I!==void 0?I:this._originTrack}set mediaTrack(I){this.mediaTrack.id!==I.id&&(this._mediaTrack=I,this.isTrackReady=this.generatePreProcessingTrack())}get preprocessingTrack(){var I;return(I=this._preProcessingTrack)!==null&&I!==void 0?I:this.mediaTrack}async generatePreProcessingTrack(){var I;const g=(I=this._preProcessingTrack)===null||I===void 0?void 0:I.id;this._preProcessingTrack=void 0;try{const C=await this._ctx.extensionManager.getPreProcessingTrack(this);C instanceof MediaStreamTrack&&(this._preProcessingTrack=C,g!==this._preProcessingTrack.id&&setTimeout(()=>{this.emit("needReplaceTrack")}))}catch(C){console.error(C)}}destroy(){var I,g;this._originTrack.removeEventListener("ended",this.handleTrackEnded),this._originTrack.removeEventListener("mute",this.handleMute),this._originTrack.removeEventListener("unmute",this.handleUnmute),(I=this._preProcessingTrack)===null||I===void 0||I.stop(),(g=this._mediaTrack)===null||g===void 0||g.stop(),super.destroy()}_initListeners(){this._originTrack instanceof MediaStreamTrack&&(this._originTrack.addEventListener("ended",this.handleTrackEnded),this._originTrack.addEventListener("mute",this.handleMute),this._originTrack.addEventListener("unmute",this.handleUnmute))}}class oz extends iz{constructor(I,g,C){super(I,g,C),P(this,"_mediaTrack",void 0),this._originTrack=g}get mediaTrack(){var I;return(I=this._mediaTrack)!==null&&I!==void 0?I:this._originTrack}set mediaTrack(I){this.mediaTrack.id!==I.id&&(this._mediaTrack=I)}get preprocessingTrack(){return this.mediaTrack}}var GPA=yA,GD=QI;GPA({global:!0,forced:GD.globalThis!==GD},{globalThis:GD});var RPA=QI,LPA=RPA,SPA=LPA,TPA=SPA,UPA=TPA,FPA=UPA,YPA=FPA,kPA=YPA,pPA=kPA,WF=CI(pPA),bI=(A=>(A.H264="H264",A.VP8="VP8",A.ByteVC1="ByteVC1",A))(bI||{});const NPA=async()=>{try{return!(lI()||!window.RTCPeerConnection||!window.RTCPeerConnection.prototype.addTransceiver||!window.RTCPeerConnection.prototype.createDataChannel)&&await vz()&&await sz()}catch{return!1}},qa=async()=>{const A=[];return await VPA()&&await WPA()&&A.push(bI.ByteVC1),await vz()&&await sz()&&A.push(bI.H264),await JPA()&&await KPA()&&A.push(bI.VP8),A},ZPA=async()=>(await qa()).map(A=>A===bI.ByteVC1?"H265":A.toUpperCase()),Cg={};function tz(A){const I=A.split(` `);let g=!1;for(const C of I)if(C.includes("level-asymmetry-allowed=1")&&C.includes("packetization-mode=1")&&C.includes("profile-level-id=42e0")){g=!0;break}if(g){const C=navigator.userAgent.toLowerCase();let Q=!1;const B=[/miuibrowser/,/70.*HeyTapBrowser/i];for(const E of B)E.test(C)&&(Q=!0);return!Q}return!1}const a9=async A=>{const I=new RTCPeerConnection({sdpSemantics:"unified-plan"});I.addTransceiver("video",{direction:A});const g=await I.createOffer();return I.close(),g.sdp.toLowerCase()},dR=async()=>{let A=await a9("sendonly");return navigator.userAgent.includes("VivoBrowser")&&(A=await a9("sendonly")),Cg.h264encode=tz(A),Cg.vp8encode=A.indexOf("vp8")>-1,Cg.h265encode=A.indexOf("h265")>-1,Cg},hR=async()=>{let A=await a9("recvonly");return navigator.userAgent.includes("VivoBrowser")&&(A=await a9("recvonly")),Cg.h264decode=tz(A),Cg.vp8decode=A.indexOf("vp8")>-1,Cg.h265decode=A.indexOf("h265")>-1,Cg},sz=async()=>{if(Cg.h264encode===void 0)try{await dR()}catch{return!1}return Cg.h264encode||!1},vz=async()=>{if(Cg.h264decode===void 0)try{await hR()}catch{return!1}return Cg.h264decode||!1},KPA=async()=>{if(Cg.vp8encode===void 0)try{await dR()}catch{return!1}return Cg.vp8encode||!1},JPA=async()=>{if(Cg.vp8decode===void 0)try{await hR()}catch{return!1}return Cg.vp8decode||!1},WPA=async()=>{if(Cg.h265encode===void 0)try{await dR()}catch{return!1}return Cg.h265encode||!1},VPA=async()=>{if(Cg.h265decode===void 0)try{await hR()}catch{return!1}return Cg.h265decode||!1},hv=()=>typeof TransformStream<"u"&&typeof RTCRtpSender<"u"&&typeof RTCRtpReceiver<"u"&&typeof RTCRtpScriptTransform<"u"&&"transform"in RTCRtpSender.prototype&&"transform"in RTCRtpReceiver.prototype&&Pz()&&HPA(),JE=()=>typeof TransformStream<"u"&&typeof RTCRtpSender<"u"&&typeof RTCRtpReceiver<"u"&&RTCRtpSender.prototype.createEncodedStreams!==void 0&&RTCRtpReceiver.prototype.createEncodedStreams!==void 0,rz=()=>OrA?xi&&YQ>=70||mI&&r9>=80||CQ&&mP>=14:qrA?xi&&YQ>=70||mI&&r9>=80:Yo?Js[0]>=14:!(!EE&&!_rA)&&xi&&YQ>=86,az=xi&&YQ<=114,Fw=!mI||r9>=96,UE=!(CQ&&mP<=14),zPA=EE&&xi||Yo&&Js[0]>=16,MPA=()=>!mI&&!xrA&&(Js==null?void 0:Js[0])!==14,XPA=WF!==void 0&&"PressureObserver"in WF,Pz=()=>typeof window<"u"&&window.Worker,jPA=CQ&&mP<=14,fPA=!jPA,HPA=()=>typeof MessageChannel<"u";var cz=(A=>(A[A.internal=0]="internal",A[A.external=1]="external",A[A.bypass=2]="bypass",A))(cz||{});const Kc=new Uint8Array([109,167,53,190,103,90,72,1,170,89,63,164,194,199,19,85]),Bi=new Uint8Array([109,167,53,190,103,90,72,1,170,89,63,164,194,199,19,84]),VF=new Uint8Array([31,239,3,50,242,120,76,85,169,42,161,91,75,186,22]),xPA=A=>{const I=[];let g=0;for(const C of A)g>=2&&C<=3&&(I.push(3),g=0),C===0?g++:g=0,I.push(C);return new Uint8Array(I)},OPA=A=>{const I=[];for(let g=0;g=255;)A-=255,I.push(255);return I.push(A),new Uint8Array(I)}function LD(A){let I=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,g=0;for(;A[I]===255&&I2&&arguments[2]!==void 0&&arguments[2];const Q=new Uint8Array([0,0,0,1]),B=g?qPA:new Uint8Array([6]),E=new Uint8Array([5]),i=Dv.__uuid||(C?Kc:Bi),e=RD(I.byteLength+i.byteLength),o=xPA(I);return new Uint8Array([...Q,...B,...E,...e,...i,...o,128])}static decodeSEIBody(I,g){I=I.slice(0,I.length-1);const C=OPA(I);if(C.byteLength<2)return;let Q=0;const B=g?2:1;if(C[B]!==5&&C[B]!==100)return;Q+=1+B;const[E,i]=LD(C,Q);Q=i;let e=2;const o=Q+E;return C.byteLength>=Bi.byteLength&&E>=Bi.byteLength&&(C.slice(Q,Q+Bi.byteLength).toString()===Bi.toString()||C.slice(Q,Q+VF.byteLength).toString()===VF.toString())?(Q+=Bi.byteLength,e=1):C.byteLength>=Bi.byteLength&&E>=Bi.byteLength&&C.slice(Q,Q+Kc.byteLength).toString()===Kc.toString()&&(Q+=Kc.byteLength,e=0),{type:e,payload:C.slice(Q,o)}}static parseInternalSEI(I){const g=new Map;let C=0;if(I.type===0){for(;I.payload.byteLength-C>=2;){const[Q,B]=LD(I.payload,C);C=B;const[E,i]=LD(I.payload,C);if(C=i,g.get(Q)||!(E<=I.payload.byteLength-C))break;g.set(Q,I.payload.slice(C,C+E)),C+=E}return g}}static makeInternalSei(I){const g=[];for(const[B,E]of I){const i=RD(B),e=RD(E.byteLength);g.push(i,e,E)}const C=g.reduce((B,E)=>B+E.byteLength,0),Q=new Uint8Array(C);return g.reduce((B,E)=>(Q.set(E,B),B+E.byteLength),0),Q}}P(Dv,"__uuid",void 0);var _PA=yA,$PA=fA,AcA=AW,IcA=RangeError,zF=String.fromCharCode,MF=String.fromCodePoint,gcA=$PA([].join),CcA=!!MF&&MF.length!==1;_PA({target:"String",stat:!0,forced:CcA},{fromCodePoint:function(A){for(var I,g=[],C=arguments.length,Q=0;C>Q;){if(I=+arguments[Q++],AcA(I,1114111)!==I)throw new IcA(I+" is not a valid code point");g[Q]=I<65536?zF(I):zF(55296+((I-=65536)>>10),I%1024+56320)}return gcA(g,"")}});var XF=QI,QcA=Qg,BcA=Object.getOwnPropertyDescriptor,nz=function(A){if(!QcA)return XF[A];var I=BcA(XF,A);return I&&I.value},EcA=II,icA=vI,ecA=Qg,jF=JJ,ocA=icA("iterator"),W0=!EcA(function(){var A=new URL("b?a=1&b=2&c=3","https://a"),I=A.searchParams,g=new URLSearchParams("a=1&a=2&b=3"),C="";return A.pathname="c%20d",I.forEach(function(Q,B){I.delete("b"),C+=B+Q}),g.delete("a",2),g.delete("b",void 0),jF&&(!A.toJSON||!g.has("a",1)||g.has("a",2)||!g.has("a",void 0)||g.has("b"))||!I.size&&(jF||!ecA)||!I.sort||A.href!=="https://a/c%20d?a=1&c=3"||I.get("c")!=="3"||String(new URLSearchParams("?a=1"))!=="a=1"||!I[ocA]||new URL("https://a@b").username!=="a"||new URLSearchParams(new URLSearchParams("a=b")).get("a")!=="b"||new URL("https://тест").host!=="xn--e1aybc"||new URL("https://a#б").hash!=="#%D0%B1"||C!=="a1c3"||new URL("https://x",void 0).host!=="x"}),tcA=se,scA=function(A,I,g){for(var C in I)g&&g.unsafe&&A[C]?A[C]=I[C]:tcA(A,C,I[C],g);return A},vcA=fg,rcA=TypeError,DR=function(A,I){if(vcA(I,A))return A;throw new rcA("Incorrect invocation")},acA=vv,fF=y0,PcA=aP,ccA=cv,ncA=vI,lcA=ncA("iterator"),V0=function(A){if(!PcA(A))return fF(A,lcA)||fF(A,"@@iterator")||ccA[acA(A)]},dcA=Bg,hcA=fQ,DcA=EQ,ucA=ov,bcA=V0,ycA=TypeError,uR=function(A,I){var g=arguments.length<2?bcA(A):I;if(hcA(g))return DcA(dcA(g,A));throw new ycA(ucA(A)+" is not iterable")},wcA=TypeError,GP=function(A,I){if(A0&&A&g;g>>=1)I++;return I},qcA=function(A){var I=null;switch(A.length){case 1:I=A[0];break;case 2:I=(31&A[0])<<6|63&A[1];break;case 3:I=(15&A[0])<<12|(63&A[1])<<6|63&A[2];break;case 4:I=(7&A[0])<<18|(63&A[1])<<12|(63&A[2])<<6|63&A[3]}return I>1114111?null:I},QY=function(A){for(var I=(A=bz(A,HcA," ")).length,g="",C=0;CI){g+="%",C++;continue}var B=CY(A,C+1);if(B!=B){g+=Q,C++;continue}C+=2;var E=OcA(B);if(E===0)Q=zcA(B);else{if(E===1||E>4){g+=FD,C++;continue}for(var i=[B],e=1;eI||tl(A,C)!=="%");){var o=CY(A,C+1);if(o!=o){C+=3;break}if(o>191||o<128)break;Yi(i,o),C+=2,e++}if(i.length!==E){g+=FD;continue}var t=qcA(i);t===null?g+=FD:Q=McA(t)}}g+=Q,C++}return g},_cA=/[!'()~]|%20/g,$cA={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},AnA=function(A){return $cA[A]},BY=function(A){return bz(VcA(A),_cA,AnA)},YD=ScA(function(A,I){uz(this,{type:Dz,target:DQ(A).entries,index:0,kind:I})},zs,function(){var A=JcA(this),I=A.target,g=A.index++;if(!I||g>=I.length)return A.target=null,Wc(void 0,!0);var C=I[g];switch(A.kind){case"keys":return Wc(C.key,!1);case"values":return Wc(C.value,!1)}return Wc([C.key,C.value],!1)},!0),wz=function(A){this.entries=[],this.url=null,A!==void 0&&(hz(A)?this.parseObject(A):this.parseQuery(typeof A=="string"?tl(A,0)==="?"?yz(A,1):A:IC(A)))};wz.prototype={type:zs,bindURL:function(A){this.url=A,this.update()},parseObject:function(A){var I,g,C,Q,B,E,i,e=this.entries,o=pcA(A);if(o)for(g=(I=qF(A,o)).next;!(C=Jc(g,I)).done;){if(B=(Q=qF(YcA(C.value))).next,(E=Jc(B,Q)).done||(i=Jc(B,Q)).done||!Jc(B,Q).done)throw new WcA("Expected sequence with length 2");Yi(e,{key:IC(E.value),value:IC(i.value)})}else for(var t in A)TcA(A,t)&&Yi(e,{key:t,value:IC(A[t])})},parseQuery:function(A){if(A)for(var I,g,C=this.entries,Q=gY(A,"&"),B=0;B0?arguments[0]:void 0));Zr||(this.size=A.entries.length)},Yt=c9.prototype;if(RcA(Yt,{append:function(A,I){var g=DQ(this);Bt(arguments.length,2),Yi(g.entries,{key:IC(A),value:IC(I)}),Zr||this.length++,g.updateURL()},delete:function(A){for(var I=DQ(this),g=Bt(arguments.length,1),C=I.entries,Q=IC(A),B=g<2?void 0:arguments[1],E=B===void 0?B:IC(B),i=0;ig.key?1:-1}),A.updateURL()},forEach:function(A){for(var I,g=DQ(this).entries,C=UcA(A,arguments.length>1?arguments[1]:void 0),Q=0;Q1?EY(arguments[1]):{})}}),TD(P9)){var kD=function(A){return dz(this,UD),new P9(A,arguments.length>1?EY(arguments[1]):{})};UD.constructor=kD,kD.prototype=UD,SD({global:!0,dontCallGetSet:!0,forced:!0},{Request:kD})}}var aQ,CnA={URLSearchParams:c9,getState:DQ},iY=Qg,QnA=fA,BnA=Bg,EnA=II,pD=L0,inA=dP,enA=b0,onA=HQ,tnA=JG,Et=Object.assign,eY=Object.defineProperty,snA=QnA([].concat),vnA=!Et||EnA(function(){if(iY&&Et({b:1},Et(eY({},"a",{enumerable:!0,get:function(){eY(this,"b",{value:3,enumerable:!1})}}),{b:2})).b!==1)return!0;var A={},I={},g=Symbol("assign detection"),C="abcdefghijklmnopqrst";return A[g]=7,C.split("").forEach(function(Q){I[Q]=Q}),Et({},A)[g]!==7||pD(Et({},I)).join("")!==C})?function(A,I){for(var g=onA(A),C=arguments.length,Q=1,B=inA.f,E=enA.f;C>Q;)for(var i,e=tnA(arguments[Q++]),o=B?snA(pD(e),B(e)):pD(e),t=o.length,s=0;t>s;)i=o[s++],iY&&!BnA(E,e,i)||(g[i]=e[i]);return g}:Et,rnA=Bg,oY=EQ,anA=y0,mz=function(A,I,g){var C,Q;oY(A);try{if(!(C=anA(A,"return"))){if(I==="throw")throw g;return g}C=rnA(C,A)}catch(B){Q=!0,C=B}if(I==="throw")throw g;if(Q)throw C;return oY(C),g},PnA=EQ,cnA=mz,nnA=function(A,I,g,C){try{return C?I(PnA(g)[0],g[1]):I(g)}catch(Q){cnA(A,"throw",Q)}},lnA=vI,dnA=cv,hnA=lnA("iterator"),DnA=Array.prototype,Gz=function(A){return A!==void 0&&(dnA.Array===A||DnA[hnA]===A)},unA=XE,bnA=Bg,ynA=HQ,wnA=nnA,mnA=Gz,GnA=HG,RnA=jE,tY=m0,LnA=uR,SnA=V0,sY=Array,TnA=function(A){var I=ynA(A),g=GnA(this),C=arguments.length,Q=C>1?arguments[1]:void 0,B=Q!==void 0;B&&(Q=unA(Q,C>2?arguments[2]:void 0));var E,i,e,o,t,s,v=SnA(I),r=0;if(!v||this===sY&&mnA(v))for(E=RnA(I),i=g?new this(E):sY(E);E>r;r++)s=B?Q(I[r],r):I[r],tY(i,r,s);else for(i=g?new this:[],t=(o=LnA(I,v)).next;!(e=bnA(t,o)).done;r++)s=B?wnA(o,Q,[e.value,r],!0):e.value,tY(i,r,s);return i.length=r,i},po=fA,ND=2147483647,ra=36,Rz=1,Yw=26,UnA=38,FnA=700,YnA=72,knA=128,pnA="-",NnA=/[^\0-\u007E]/,Lz=/[.\u3002\uFF0E\uFF61]/g,vY="Overflow: input needs wider integers to process",ZD=ra-Rz,rY=RangeError,ZnA=po(Lz.exec),Es=Math.floor,KD=String.fromCharCode,aY=po("".charCodeAt),Sz=po([].join),ki=po([].push),KnA=po("".replace),JnA=po("".split),WnA=po("".toLowerCase),VnA=function(A){for(var I=[],g=0,C=A.length;g=55296&&Q<=56319&&g>1,A+=Es(A/I);A>ZD*Yw>>1;)A=Es(A/ZD),C+=ra;return Es(C+(ZD+1)*A/(A+UnA))},MnA=function(A){var I,g,C=[],Q=(A=VnA(A)).length,B=knA,E=0,i=YnA;for(I=0;I=B&&gEs((ND-E)/s))throw new rY(vY);for(E+=(t-B)*s,B=t,I=0;IND)throw new rY(vY);if(g===B){for(var v=E,r=ra;;){var n=r<=i?Rz:r>=i+Yw?Yw:r-i;if(v?@[\\\]^|]/,alA=/[\0\t\n\r #/:<>?@[\\\]^|]/,PlA=/^[\u0000-\u0020]+/,clA=/(^|[^\u0000-\u0020])[\u0000-\u0020]+$/,nlA=/[\t\n\r]/g,llA=function(A){var I,g,C,Q,B,E,i,e=ElA(A,".");if(e.length&&e[e.length-1]===""&&e.length--,(I=e.length)>4)return A;for(g=[],C=0;C1&&TQ(Q,0)==="0"&&(B=cB(tlA,Q)?16:8,Q=aa(Q,B===8?1:2)),Q==="")E=0;else{if(!cB(B===10?vlA:B===8?slA:Yz,Q))return A;E=l9(Q,B)}kt(g,E)}for(C=0;C=nY(256,5-I))return null}else if(E>255)return null;for(i=QlA(g),C=0;C6))return;for(C=0;v();){if(Q=null,C>0){if(!(v()==="."&&C<4))return;s++}if(!cB(Nw,v()))return;for(;cB(Nw,v());){if(B=l9(v(),10),Q===null)Q=B;else{if(Q===0)return;Q=10*Q+B}if(Q>255)return;s++}e[o]=256*e[o]+Q,++C!==2&&C!==4||o++}if(C!==4)return;break}if(v()===":"){if(s++,!v())return}else if(v())return;e[o++]=I}else{if(t!==null)return;s++,t=++o}}if(t!==null)for(E=o-t,o=7;o!==0&&E>0;)i=e[o],e[o--]=e[t+E-1],e[t+--E]=i;else if(o!==8)return;return e},hlA=function(A){for(var I=null,g=1,C=null,Q=0,B=0;B<8;B++)A[B]!==0?(Q>g&&(I=C,g=Q),C=null,Q=0):(C===null&&(C=B),++Q);return Q>g?C:I},er=function(A){var I,g,C,Q;if(typeof A=="number"){for(I=[],g=0;g<4;g++)ilA(I,A%256),A=glA(A/256);return Kr(I,".")}if(typeof A=="object"){for(I="",C=hlA(A),g=0;g<8;g++)Q&&A[g]===0||(Q&&(Q=!1),C===g?(I+=g?":":"::",Q=!0):(I+=ClA(A[g],16),g<7&&(I+=":")));return"["+I+"]"}return A},sl={},kz=GR({},sl,{" ":1,'"':1,"<":1,">":1,"`":1}),pz=GR({},kz,{"#":1,"?":1,"{":1,"}":1}),VD=GR({},pz,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),Ei=function(A,I){var g=xnA(A,0);return g>32&&g<127&&!kw(I,A)?A:encodeURIComponent(A)},zc={ftp:21,file:null,http:80,https:443,ws:80,wss:443},Jr=function(A,I){var g;return A.length===2&&cB(Fz,TQ(A,0))&&((g=TQ(A,1))===":"||!I&&g==="|")},dY=function(A){var I;return A.length>1&&Jr(aa(A,0,2))&&(A.length===2||(I=TQ(A,2))==="/"||I==="\\"||I==="?"||I==="#")},DlA=function(A){return A==="."||d9(A)==="%2e"},ulA=function(A){return(A=d9(A))===".."||A==="%2e."||A===".%2e"||A==="%2e%2e"},zD={},hY={},MD={},DY={},uY={},XD={},bY={},yY={},Mc={},Xc={},jD={},fD={},HD={},xD={},wY={},OD={},et={},MB={},mY={},we={},dE={},RR=function(A,I,g){var C,Q,B,E=DE(A);if(I){if(Q=this.parse(E))throw new pw(Q);this.searchParams=null}else{if(g!==void 0&&(C=new RR(g,!0)),Q=this.parse(E,null,C))throw new pw(Q);(B=IlA(new AlA)).bindURL(this),this.searchParams=B}};RR.prototype={type:"URL",parse:function(A,I,g){var C,Q,B,E,i=this,e=I||zD,o=0,t="",s=!1,v=!1,r=!1;for(A=DE(A),I||(i.scheme="",i.username="",i.password="",i.host=null,i.port=null,i.path=[],i.query=null,i.fragment=null,i.cannotBeABaseURL=!1,A=JD(A,PlA,""),A=JD(A,clA,"$1")),A=JD(A,nlA,""),C=it(A);o<=C.length;){switch(Q=C[o],e){case zD:if(!Q||!cB(Fz,Q)){if(I)return WD;e=MD;continue}t+=d9(Q),e=hY;break;case hY:if(Q&&(cB(olA,Q)||Q==="+"||Q==="-"||Q==="."))t+=d9(Q);else{if(Q!==":"){if(I)return WD;t="",e=MD,o=0;continue}if(I&&(i.isSpecial()!==kw(zc,t)||t==="file"&&(i.includesCredentials()||i.port!==null)||i.scheme==="file"&&!i.host))return;if(i.scheme=t,I)return void(i.isSpecial()&&zc[i.scheme]===i.port&&(i.port=null));t="",i.scheme==="file"?e=xD:i.isSpecial()&&g&&g.scheme===i.scheme?e=DY:i.isSpecial()?e=yY:C[o+1]==="/"?(e=uY,o++):(i.cannotBeABaseURL=!0,kt(i.path,""),e=mY)}break;case MD:if(!g||g.cannotBeABaseURL&&Q!=="#")return WD;if(g.cannotBeABaseURL&&Q==="#"){i.scheme=g.scheme,i.path=CB(g.path),i.query=g.query,i.fragment="",i.cannotBeABaseURL=!0,e=dE;break}e=g.scheme==="file"?xD:XD;continue;case DY:if(Q!=="/"||C[o+1]!=="/"){e=XD;continue}e=Mc,o++;break;case uY:if(Q==="/"){e=Xc;break}e=MB;continue;case XD:if(i.scheme=g.scheme,Q===aQ)i.username=g.username,i.password=g.password,i.host=g.host,i.port=g.port,i.path=CB(g.path),i.query=g.query;else if(Q==="/"||Q==="\\"&&i.isSpecial())e=bY;else if(Q==="?")i.username=g.username,i.password=g.password,i.host=g.host,i.port=g.port,i.path=CB(g.path),i.query="",e=we;else{if(Q!=="#"){i.username=g.username,i.password=g.password,i.host=g.host,i.port=g.port,i.path=CB(g.path),i.path.length--,e=MB;continue}i.username=g.username,i.password=g.password,i.host=g.host,i.port=g.port,i.path=CB(g.path),i.query=g.query,i.fragment="",e=dE}break;case bY:if(!i.isSpecial()||Q!=="/"&&Q!=="\\"){if(Q!=="/"){i.username=g.username,i.password=g.password,i.host=g.host,i.port=g.port,e=MB;continue}e=Xc}else e=Mc;break;case yY:if(e=Mc,Q!=="/"||TQ(t,o+1)!=="/")continue;o++;break;case Mc:if(Q!=="/"&&Q!=="\\"){e=Xc;continue}break;case Xc:if(Q==="@"){s&&(t="%40"+t),s=!0,B=it(t);for(var n=0;n65535)return lY;i.port=i.isSpecial()&&d===zc[i.scheme]?null:d,t=""}if(I)return;e=et;continue}return lY}t+=Q;break;case xD:if(i.scheme="file",Q==="/"||Q==="\\")e=wY;else{if(!g||g.scheme!=="file"){e=MB;continue}switch(Q){case aQ:i.host=g.host,i.path=CB(g.path),i.query=g.query;break;case"?":i.host=g.host,i.path=CB(g.path),i.query="",e=we;break;case"#":i.host=g.host,i.path=CB(g.path),i.query=g.query,i.fragment="",e=dE;break;default:dY(Kr(CB(C,o),""))||(i.host=g.host,i.path=CB(g.path),i.shortenPath()),e=MB;continue}}break;case wY:if(Q==="/"||Q==="\\"){e=OD;break}g&&g.scheme==="file"&&!dY(Kr(CB(C,o),""))&&(Jr(g.path[0],!0)?kt(i.path,g.path[0]):i.host=g.host),e=MB;continue;case OD:if(Q===aQ||Q==="/"||Q==="\\"||Q==="?"||Q==="#"){if(!I&&Jr(t))e=MB;else if(t===""){if(i.host="",I)return;e=et}else{if(E=i.parseHost(t))return E;if(i.host==="localhost"&&(i.host=""),I)return;t="",e=et}continue}t+=Q;break;case et:if(i.isSpecial()){if(e=MB,Q!=="/"&&Q!=="\\")continue}else if(I||Q!=="?")if(I||Q!=="#"){if(Q!==aQ&&(e=MB,Q!=="/"))continue}else i.fragment="",e=dE;else i.query="",e=we;break;case MB:if(Q===aQ||Q==="/"||Q==="\\"&&i.isSpecial()||!I&&(Q==="?"||Q==="#")){if(ulA(t)?(i.shortenPath(),Q==="/"||Q==="\\"&&i.isSpecial()||kt(i.path,"")):DlA(t)?Q==="/"||Q==="\\"&&i.isSpecial()||kt(i.path,""):(i.scheme==="file"&&!i.path.length&&Jr(t)&&(i.host&&(i.host=""),t=TQ(t,0)+":"),kt(i.path,t)),t="",i.scheme==="file"&&(Q===aQ||Q==="?"||Q==="#"))for(;i.path.length>1&&i.path[0]==="";)BlA(i.path);Q==="?"?(i.query="",e=we):Q==="#"&&(i.fragment="",e=dE)}else t+=Ei(Q,pz);break;case mY:Q==="?"?(i.query="",e=we):Q==="#"?(i.fragment="",e=dE):Q!==aQ&&(i.path[0]+=Ei(Q,sl));break;case we:I||Q!=="#"?Q!==aQ&&(Q==="'"&&i.isSpecial()?i.query+="%27":i.query+=Q==="#"?"%23":Ei(Q,sl)):(i.fragment="",e=dE);break;case dE:Q!==aQ&&(i.fragment+=Ei(Q,kz))}o++}},parseHost:function(A){var I,g,C;if(TQ(A,0)==="["){if(TQ(A,A.length-1)!=="]"||!(I=dlA(aa(A,1,-1))))return ye;this.host=I}else if(this.isSpecial()){if(A=OnA(A),cB(rlA,A)||(I=llA(A))===null)return ye;this.host=I}else{if(cB(alA,A))return ye;for(I="",g=it(A),C=0;C1?arguments[1]:void 0,C=$nA(I,new RR(A,!1,g));wR||(I.href=C.serialize(),I.origin=C.getOrigin(),I.protocol=C.getProtocol(),I.username=C.getUsername(),I.password=C.getPassword(),I.host=C.getHost(),I.hostname=C.getHostname(),I.port=C.getPort(),I.pathname=C.getPathname(),I.search=C.getSearch(),I.searchParams=C.getSearchParams(),I.hash=C.getHash())},$g=Ms.prototype,cQ=function(A,I){return{get:function(){return n9(this)[A]()},set:I&&function(g){return n9(this)[I](g)},configurable:!0,enumerable:!0}};if(wR&&(PQ($g,"href",cQ("serialize","setHref")),PQ($g,"origin",cQ("getOrigin")),PQ($g,"protocol",cQ("getProtocol","setProtocol")),PQ($g,"username",cQ("getUsername","setUsername")),PQ($g,"password",cQ("getPassword","setPassword")),PQ($g,"host",cQ("getHost","setHost")),PQ($g,"hostname",cQ("getHostname","setHostname")),PQ($g,"port",cQ("getPort","setPort")),PQ($g,"pathname",cQ("getPathname","setPathname")),PQ($g,"search",cQ("getSearch","setSearch")),PQ($g,"searchParams",cQ("getSearchParams")),PQ($g,"hash",cQ("getHash","setHash"))),Vc($g,"toJSON",function(){return n9(this).serialize()},{enumerable:!0}),Vc($g,"toString",function(){return n9(this).serialize()},{enumerable:!0}),ir){var GY=ir.createObjectURL,RY=ir.revokeObjectURL;GY&&Vc(Ms,"createObjectURL",cY(GY,ir)),RY&&Vc(Ms,"revokeObjectURL",cY(RY,ir))}qnA(Ms,"URL"),jnA({global:!0,forced:!fnA,sham:!wR},{URL:Ms});var blA=yA,ylA=kg,Nz=II,wlA=GP,LY=NC,mlA=W0,LR=ylA("URL"),GlA=mlA&&Nz(function(){LR.canParse()}),RlA=Nz(function(){return LR.canParse.length!==1});blA({target:"URL",stat:!0,forced:!GlA||RlA},{canParse:function(A){var I=wlA(arguments.length,1),g=LY(A),C=I<2||arguments[1]===void 0?void 0:LY(arguments[1]);try{return!!new LR(g,C)}catch{return!1}}});var LlA=yA,SlA=kg,TlA=GP,SY=NC,UlA=W0,FlA=SlA("URL");LlA({target:"URL",stat:!0,forced:!UlA},{parse:function(A){var I=TlA(arguments.length,1),g=SY(A),C=I<2||arguments[1]===void 0?void 0:SY(arguments[1]);try{return new FlA(g,C)}catch{return null}}});var YlA=pC,klA=YlA.URL,plA=klA,NlA=plA,ZlA=NlA,KlA=ZlA,JlA=KlA,WlA=JlA,VlA=WlA,zlA=VlA,pQ=CI(zlA);function TY(A){const I=PressureObserver.supportedSources;let g="thermal";g=I!=null&&I.includes("thermal")?"thermal":"cpu";const C=new PressureObserver(Q=>{Q.forEach(B=>{B.source===g&&A(B.state)})});return C.observe(g,{sampleInterval:2e3}),C}class MlA{constructor(){P(this,"_state",void 0),P(this,"_handler",!1)}init(){if((XPA||!lA("DISABLE_COMPUTE_PRESSURE"))&&{}.VITE_TEST!=="UT")try{if(Pz()){const I=new Blob(["(".concat(TY.toString(),")(self.postMessage)")],{type:"text/javascript"}),g=new Worker(pQ.createObjectURL(I));g.onmessage=C=>{this._state=C.data},this._handler=g}else this._handler=TY(I=>{this._state=I})}catch{}}get state(){return K0&&!Ie()&&(window.thermal_status=this._state),this._handler||this.init(),this._state}}var h9=new MlA;const XlA=["codec","inbound-rtp","outbound-rtp","remote-inbound-rtp","remote-outbound-rtp","media-source","csrc","peer-connection","data-channel","stream","track","transceiver","sender","receiver","transport","sctp-transport","candidate-pair","local-candidate","remote-candidate","certificate","ice-server"],D9=new Map;let qD=!0;const jlA=async A=>new Promise(I=>{const g={all:[],getTrackStats:()=>[]},C=lA("STATS_SCALLBACK_SUPPORT");if(qD&&xi&&window.InstallTrigger===void 0&&az&&C)try{var Q,B,E;(Q=A.getStats(i=>{const e=[];i.result().forEach(o=>{if(XlA.includes(o.type))return;const t={};o.names().forEach(function(s){t[s]=o.stat(s)}),e.push(R(R({},t),{},{id:o.id,type:o.type,timestamp:o.timestamp}))}),I({all:e,getTrackStats:o=>e.filter(t=>t.type!=="ssrc"||t.googTrackId===o)})}))===null||Q===void 0||(B=Q.then)===null||B===void 0||(B=B.call(Q,()=>{I(g)}))===null||B===void 0||(E=B.catch)===null||E===void 0||E.call(B,()=>{qD=!1,I(g)})}catch{qD=!1,I(g)}else I(g)}),flA=async A=>{var I;const g=await A.getStats(),C={all:[]},Q=new Map;g.forEach(e=>{const o=Q.get(e.type)||new Map;o.set(e.id,e),Q.set(e.type,o),C.all.push(e)});const B=(e,o)=>{e.forEach(t=>{var s,v,r,n;let a,c,{codecId:d,transportId:l,trackId:h,playoutId:D}=t;if((s=Q.get("codec"))===null||s===void 0||s.forEach(S=>{S.id===d&&o.add(S)}),(v=Q.get("transport"))===null||v===void 0||v.forEach(S=>{S.id===l&&(a=S,o.add(S))}),(r=Q.get("track"))===null||r===void 0||r.forEach(S=>{S.id===h&&o.add(S)}),(n=Q.get("media-playout"))===null||n===void 0||n.forEach(S=>{S.id===D&&o.add(S)}),a){var u,w;const{localCertificateId:S,remoteCertificateId:L,selectedCandidatePairId:V}=a;(u=Q.get("certificate"))===null||u===void 0||u.forEach(z=>{(z.id===S||z.id===L)&&o.add(z)}),(w=Q.get("candidate-pair"))===null||w===void 0||w.forEach(z=>{z.id===V&&(c=z,o.add(z))})}if(c){var b,y;const{localCandidateId:S,remoteCandidateId:L}=c;(b=Q.get("local-candidate"))===null||b===void 0||b.forEach(V=>{V.id===S&&o.add(V)}),(y=Q.get("remote-candidate"))===null||y===void 0||y.forEach(V=>{V.id===L&&o.add(V)})}})};var E;if(Q.get("media-source"))(E=Q.get("media-source"))===null||E===void 0||E.forEach(e=>{var o;const t=new Set;t.add(e);const s=[];(o=Q.get("outbound-rtp"))===null||o===void 0||o.forEach(v=>{var r;v.mediaSourceId===e.id&&(t.add(v),s.push(v),(r=Q.get("remote-inbound-rtp"))===null||r===void 0||r.forEach(n=>{n.localId===v.id&&t.add(n)}))}),B(s,t),C[e.trackIdentifier]=Array.from(t)});else if(Q.get("track")){var i;(i=Q.get("track"))===null||i===void 0||i.forEach(e=>{var o;const t=new Set;t.add(e);const s=[];(o=Q.get("outbound-rtp"))===null||o===void 0||o.forEach(v=>{var r;v.trackId===e.id&&(t.add(v),s.push(v),(r=Q.get("remote-inbound-rtp"))===null||r===void 0||r.forEach(n=>{n.localId===v.id&&t.add(n)}))}),B(s,t),C[e.trackIdentifier]=Array.from(t)})}return(I=Q.get("inbound-rtp"))===null||I===void 0||I.forEach(e=>{var o;const t=new Set;t.add(e),(o=Q.get("remote-outbound-rtp"))===null||o===void 0||o.forEach(r=>{r.localId===e.id&&t.add(r)}),B([e],t);let{trackIdentifier:s}=e;var v;s||(v=Q.get("track"))===null||v===void 0||v.forEach(r=>{r.id===e.trackId&&(s=r.trackIdentifier)}),C[s]=Array.from(t)}),C},HlA=async(A,I,g,C)=>{const Q=I==null?void 0:I.id;if(!(A instanceof RTCPeerConnection))return[];if(mI||CQ){const e=[];try{(C?await C.getStats():await A.getStats(I)).forEach(o=>{e.push(o)})}catch{}return e}let B=D9.get(A);(!B||Date.now()-B.timestamp>150)&&(B={timestamp:Date.now(),statsPromise:flA(A),extraStatsPromise:jlA(A)},D9.set(A,B));const E=await B.statsPromise;let i=(Q?E[Q]:E.all)||[];if(!g){const e=await B.extraStatsPromise;i=i.concat((Q?e.getTrackStats(Q):e.all)||[])}return i},xlA=A=>{D9.has(A)&&D9.delete(A)};class Zz{constructor(I){P(this,"_timer",void 0),P(this,"_reportTimer",void 0),P(this,"handler",void 0),P(this,"_monitor",void 0),P(this,"logger",void 0),P(this,"_destroyed",!1),P(this,"_isReportStarted",!1),this._context=I,this._monitor=tI(I.id),this.logger=new uA("Stats",3,I.id)}setVar(I){this.handler=I}stopReport(I){this._isReportStarted&&(this.logger.info("stopReport","invoke"),this._isReportStarted=!1,clearTimeout(this._reportTimer),delete this._reportTimer,AI(this._context.id,"del_media_statistics_timer","reason: ".concat(I,", stack: ").concat(new Error().stack),0,this._stream.streamId||""))}filterIllegal(I){const g={};return Object.keys(I).forEach(C=>{I[C]===null||I[C]===void 0||Number.isNaN(I[C])||(g[C]=I[C])}),g}destroy(){this.logger.info("destroy","invoke"),AI(this._context.id,"media_statistics_destroy","".concat(new Error().stack),0,"".concat(this._stream.streamId)),this.stopReport("destroy"),clearTimeout(this._timer),this._destroyed=!0}}class OlA extends Zz{constructor(I,g){super(I),P(this,"_stats",{audioStats:{},videoStats:{}}),P(this,"_preReports",{audio:{},video:{}}),this._stream=g;const C=async()=>{this._stats=await this._getLocalStats(this._stream,this._preReports,!1),this._destroyed||(this._timer=setTimeout(C,lA("STATS_LOOP_INTERVAL")))};C()}setLocalStreamStatsEvtInterval(I,g){if(this._isReportStarted)return;this.logger.info("setLocalStreamStatsEvtInterval","invoke"),this._isReportStarted=!0,this.setVar(g),this._destroyed=!1;const C={audio:{},video:{}},Q=async()=>{const B=await this._getLocalStats(this._stream,C,!0);I(B),this._destroyed||(this._reportTimer=setTimeout(Q,2e3))};Q()}getLocalStats(){return this._stats}async _getLocalStats(I,g,C){var Q,B,E,i,e,o,t;const s=((Q=I.audioTrack)===null||Q===void 0?void 0:Q.mixType)!==void 0&&I.audioTrack.mixType!==JQ.PLAYOUT?(B=(E=I.audioTrack)===null||E===void 0?void 0:E.mixedAudioTrack)!==null&&B!==void 0?B:(i=I.audioTrack)===null||i===void 0?void 0:i.preprocessingTrack:(e=I.audioTrack)===null||e===void 0?void 0:e.preprocessingTrack,v=(o=I.videoTrack)===null||o===void 0?void 0:o.preprocessingTrack;var r;return Object.keys(g.audio).length===0&&Object.keys(g.video).length===0&&(await this.getAudioStats(s,g,(r=I.audioTrack)===null||r===void 0?void 0:r.getAudioLevel(),C),await this.getVideoStats(v,g,C),await lV(150)),{audioStats:await this.getAudioStats(s,g,(t=I.audioTrack)===null||t===void 0?void 0:t.getAudioLevel(),C),videoStats:await this.getVideoStats(v,g,C),isScreen:I.isScreen}}async getAudioStats(I,g,C,Q){var B,E,i;const e={},o={timestamp:Date.now()},{streamId:t,audioMid:s,isScreen:v,pubAttributes:r,pubAudio:n,audioTrack:a}=this._stream,c={media_type:"audio",is_screen:!!v,direction:"up",stream_id:t,vid:s,connection_status:navigator.onLine,track_enabled:I==null?void 0:I.enabled,capture_state:r.localaudio?"capture_state_on":"capture_state_off",mute_state:n?"mute_state_off":"mute_state_on",thermal_status:h9.state};if(a&&(c.playback_volume=a.getVolume()),!I||!this.handler)return e;const d=await((B=this.handler.peer)===null||B===void 0?void 0:B.getStatsWithLowFrequency(I,!1,(E=this._stream.audioTransceiver)===null||E===void 0?void 0:E.sender));if(!d.length)return e;if(d.forEach(D=>{let{type:u,packetsSent:w,packetsLost:b,bytesSent:y,clockRate:S,roundTripTime:L,channels:V,audioLevel:z,mimeType:EA,availableIncomingBitrate:eA,availableOutgoingBitrate:K,bytesReceived:p,nominated:J,id:Y,currentRoundTripTime:N,state:q,writable:IA,requestsReceived:gA,responsesReceived:vA,requestsSent:bA,consentRequestsSent:nA,responsesSent:H,jitter:CA,candidateType:LA,ip:UA,address:xA,networkType:rg,port:NA,protocol:MI,nackCount:KC,retransmittedBytesSent:YB,retransmittedPacketsSent:ug,audioInputLevel:kB,ssrc:pB,totalAudioEnergy:tQ,totalSamplesDuration:AB,mediaType:aC,fractionLost:NB}=D;u==="outbound-rtp"?(o.packetsSent=w,o.bytesSent=y,c.bytes=y,c.packetsSent=w,c.nackCount=KC,c.ssrc=pB,c.retransmitted_bytes_sent=YB,c.retransmitted_packets_sent=ug,o.retransmittedBytesSent=YB,o.retransmittedPacketsSent=ug):u==="remote-inbound-rtp"?(o.packetsLost=b,c.packetsLost=b,c.net_jitter=1e3*CA,e.rtt=1e3*L,c.rtt=e.rtt,e._fractionLost=NB||0):u==="codec"?(e.recordSampleRate=S,e.numChannels=V,c.codecName=EA):u==="media-source"&&z!==void 0?(c.audio_level=z&&-10*Math.log10(Math.pow(z,2)),c.volume=255*z,c.total_audio_energy=tQ,c.totalInputDuration=AB,c.send_level||(c.send_level=z)):u==="ssrc"&&aC==="audio"?kB&&(c.send_level=kB):u==="candidate-pair"?(c.ice_available_incoming_bitrate=eA,c.ice_available_outgoing_bitrate=K,c.ice_bytes_received=p,c.ice_bytes_sent=y,c.ice_nominated=Number(J),c.ice_pair_id=Y,c.ice_pair_rtt=N,c.ice_pair_state=q,c.ice_pair_writable=IA,c.recv_ping_requests=gA,c.recv_ping_responses=vA,c.sent_ping_requests_before_first_response=bA,c.sent_ping_requests_total=bA+(nA||0),c.sent_ping_responses=H):u==="local-candidate"?(c.local_candidate_type=LA,c.local_ip=UA||xA,c.local_network_type=rg,c.local_port=NA,c.protocol=MI):u==="remote-candidate"&&(c.remote_candidate_type=LA,c.remote_ip=UA||xA,c.remote_port=NA)}),c.send_level)c.send_level<1?c._sendVolumeLevel=32767*c.send_level:c._sendVolumeLevel=c.send_level;else{const D=(a==null?void 0:a.getAudioLevel())||0;c._sendVolumeLevel=Math.round(D/255*32767)}c.volume===void 0&&C!==void 0&&(c.volume=C,c.audio_level=C&&-10*Math.log10(Math.pow(C/255,2)));const{audio:l}=g;if(!l.timestamp)return g.audio=o,this.filterIllegal(e);var h;return o.packetsLost!==void 0&&(e.audioLossRate=Math.max(0,o.packetsLost-l.packetsLost)/(o.packetsSent-l.packetsSent),e.audioLossRate=Number.isNaN(e.audioLossRate)?0:e.audioLossRate,c.fraction_lost=e.audioLossRate),e.statsInterval=o.timestamp-l.timestamp,c.stats_interval=e.statsInterval,e.sendKBitrate=(o.bytesSent-l.bytesSent||0)/e.statsInterval*8,c.mediaBitratebps=Math.round(1e3*e.sendKBitrate),c.bandwidth=Math.round(c.mediaBitratebps/1024),o.retransmittedBytesSent!==void 0&&(c.retransmitBitratebps=(o.retransmittedBytesSent-l.retransmittedBytesSent||0)/e.statsInterval),g.audio=o,c.vendor_mode=this._stream.vendorCode||0,c.pc_session_id=(i=this.handler)===null||i===void 0?void 0:i.peerConnectionId,Q&&((h=this._monitor)===null||h===void 0||h.report("rtc_media_statistics",c)),e._retransmittedRate=(o.retransmittedPacketsSent-l.retransmittedPacketsSent)/(o.packetsSent-l.packetsSent),e.audioLossRate===void 0&&(e.audioLossRate=e._retransmittedRate,c.fraction_lost=e.audioLossRate),e._fractionLost=Math.max(e._fractionLost,e.audioLossRate),e._sendVolumeLevel=c._sendVolumeLevel,this.filterIllegal(e)}async getVideoStats(I,g,C){var Q,B,E;const i={},e={timestamp:Date.now(),simulcast:{}},{streamId:o,videoMid:t,isScreen:s,pubAttributes:v,enableSimulcast:r,pubVideo:n}=this._stream,a={media_type:"video",is_screen:!!s,direction:"up",stream_id:o,vid:t,connection_status:navigator.onLine,track_enabled:I==null?void 0:I.enabled,capture_state:v.localvideo?"capture_state_on":"capture_state_off",mute_state:n?"mute_state_off":"mute_state_on",thermal_status:h9.state};if(!I||!this.handler)return i;a.cap_frame_width=I.getSettings().width,a.cap_frame_height=I.getSettings().height,a.frameRateSent=I.getSettings().frameRate,i.isScreen=s,a.is_intersecting=JSON.stringify((Q=this._stream)===null||Q===void 0||(Q=Q.videoTrack)===null||Q===void 0?void 0:Q.intersection());const c=await((B=this.handler.peer)===null||B===void 0?void 0:B.getStatsWithLowFrequency(I,!1,(E=this._stream.videoTransceiver)===null||E===void 0?void 0:E.sender));if(!c.length)return i;let d=0;c.forEach(y=>{const{type:S,framesEncoded:L,packetsLost:V,bytesSent:z,framesSent:EA,retransmittedBytesSent:eA,totalPacketSendDelay:K,totalEncodeTime:p,firCount:J,targetBitrate:Y,roundTripTime:N,mimeType:q,frameWidth:IA,frameHeight:gA,packetsSent:vA,googActualEncBitrate:bA,googAvailableReceiveBandwidth:nA,googAvailableSendBandwidth:H,googAvgEncodeMs:CA,googBucketDelay:LA,googEncodeUsagePercent:UA,googFrameRateInput:xA,availableIncomingBitrate:rg,availableOutgoingBitrate:NA,bytesReceived:MI,nominated:KC,id:YB,currentRoundTripTime:ug,state:kB,writable:pB,candidateType:tQ,ip:AB,address:aC,networkType:NB,port:qE,nackCount:JC,pliCount:sQ,protocol:_E,qpSum:Og,requestsReceived:vQ,responsesReceived:WC,googRetransmitBitrate:Vo,requestsSent:PE,consentRequestsSent:Fv,responsesSent:rQ,ssrc:$E,googTargetEncBitrate:IB,googTransmitBitrate:fP,retransmittedPacketsSent:HP,encoderImplementation:xP,jitter:zo,rid:Yv,fractionLost:kv,googAdaptationChanges:pv,qualityLimitationReason:td,qualityLimitationDurations:OP,googFirsReceived:sd,googFrameRateSent:qP,keyFramesEncoded:Mo,scalabilityMode:Xo,framesPerSecond:_P,frames:vd}=y;S==="outbound-rtp"?(r&&(Yv?e.simulcast[Yv]=y:e.simulcast[d]=y,d++),e.framesEncoded=L||e.framesEncoded||0,a.key_frames_encoded=Mo||0,e.bytesSent=z||e.bytesSent||0,e.framesSent=EA||e.framesSent,a.bytes=z||a.bytes||0,e.packetsSent=vA||e.packetsSent||0,a.packetsSent=vA||a.packetsSent||0,a.nackCount=JC||a.nackCount||0,a.pli_count=sQ||a.pli_count||0,a.qp_sum=Og||a.qp_sum||0,a.ssrc=$E||a.ssrc||0,a.retransmitted_packets_sent=HP,e.retransmittedPacketsSent=HP,e.retransmittedBytesSent=eA,a.encoder_implementation=xP,a.qualityLimitationReason=td,a.qualityLimitationDurations=OP,a.scalabilityMode=Xo,IA!==void 0&&((!i.encodedFrameWidth||IA>i.encodedFrameWidth)&&(i.encodedFrameWidth=IA),(!i.encodedFrameHeight||gA>i.encodedFrameHeight)&&(i.encodedFrameHeight=gA),a.frame_size_height=gA,a.frame_size_width=IA)):S==="track"?(i.encodedFrameWidth=IA,i.encodedFrameHeight=gA,a.frame_size_height=gA,a.frame_size_width=IA):S==="remote-inbound-rtp"?(e.packetsLost=V,i.rtt=1e3*N,a.rtt=i.rtt,a.jitter=1e3*zo,a.packetsLost=V,i._fractionLost=kv||0):S==="codec"?(i.codecType=q,a.codecName=q):S==="candidate-pair"?(a.ice_available_incoming_bitrate=rg,a.ice_available_outgoing_bitrate=NA,a.ice_bytes_received=MI,a.ice_bytes_sent=z,a.ice_nominated=Number(KC),a.ice_pair_id=YB,a.ice_pair_rtt=ug,a.ice_pair_state=kB,a.ice_pair_writable=pB,a.recv_ping_requests=vQ,a.recv_ping_responses=WC,a.sent_ping_requests_before_first_response=PE,a.sent_ping_requests_total=PE+Fv,a.sent_ping_responses=rQ):S==="local-candidate"?(a.local_candidate_type=tQ,a.local_ip=AB||aC,a.local_network_type=NB,a.local_port=qE,a.protocol=_E):S==="remote-candidate"?(a.remote_candidate_type=tQ,a.remote_ip=AB||aC,a.remote_port=qE):S==="VideoBwe"?(a.encBitratebps=bA,a.available_receive_bandwidth=nA,a.available_send_bandwidth=H,a.bucket_delay=LA,a.retransmitBitratebps=Vo,a.targetEncBitratebps=IB,a.transmit_bitrate=fP,i._sendBandWidth=Number(H)):S==="ssrc"&&(a.avg_encode_ms=CA,a.encodeUsage=UA,a.frame_rate_input=xA,a.orignal_input_Framerate=Number(xA),a.ddaptationChanges=pv,a.firsReceived=sd,a.frameRateSent=qP);const G=lA("STATS_SCALLBACK_SUPPORT");if(!az||!G){const{video:T}=g,k=e.timestamp-T.timestamp;if(S==="outbound-rtp"){const O=z-T.bytesSent,QA=eA-T.retransmittedBytesSent;a.encBitratebps=Math.round(8e3*(O-QA)/k),a.bucket_delay=K/vA,a.retransmitBitratebps=Math.round(8e3*QA/k),a.targetEncBitratebps=Y,a.transmit_bitrate=Math.round(1e3*(z-T.bytesSent)*8/k),a.avg_encode_ms=1e3*p/L,a.firsReceived=J+sQ}else S==="candidate-pair"?(a.available_send_bandwidth=NA,i._sendBandWidth=NA):S==="media-source"&&(a.frame_rate_input=_P,a.orignal_input_Framerate=Number(_P),a.frame_input=vd)}});const{video:l}=g;if(!l.timestamp)return g.video=e,this.filterIllegal(i);i.statsInterval=e.timestamp-l.timestamp,a.stats_interval=i.statsInterval;const h=Object.keys(e.simulcast);if(r){var D;a.sim_enc_width=[],a.sim_enc_height=[],a.sim_enc_bps=[],a.sim_enc_framerate=[],a.sim_enc_key_frames=[],a.sim_rids=[],a.sim_enc_bandwidth=[],a.sim_sent_framerate=[],a.sim_fraction_lost=[],a.sim_keyencoded=[],a.active_sim_streams=this._context.videoProfile.activeSimStreams||[],a.sim_retransmittedRate=[];let y=!1;var u;Ws(h).call(h,(S,L)=>Number(S)-Number(L)).forEach(S=>{const{frameWidth:L,frameHeight:V,bytesSent:z,framesEncoded:EA,framesSent:eA,packetsLost:K,packetsSent:p,qualityLimitationReason:J,qualityLimitationDurations:Y,qualityLimitationResolutionChanges:N,retransmittedPacketsSent:q,pliCount:IA,keyFramesEncoded:gA}=e.simulcast[S];J!==void 0&&(a.sim_qualityLimitationReason||(a.sim_qualityLimitationReason=[],a.sim_qualityLimitationDurations=[],a.sim_qualityLimitationResolutionChanges=[]),a.sim_qualityLimitationReason.push(J),a.sim_qualityLimitationDurations.push(Y),a.sim_qualityLimitationResolutionChanges.push(N));const vA=l.simulcast[S];if(a.sim_enc_width.push(L||0),a.sim_enc_height.push(V||0),a.sim_enc_key_frames.push(gA||0),vA){const bA=(z-vA.bytesSent||0)/i.statsInterval;a.sim_enc_bps.push(Math.round(8e3*bA)),a.sim_enc_bandwidth.push(Math.round(8e3*bA/1024));const nA=1e3*(EA-vA.framesEncoded)/i.statsInterval;a.sim_enc_framerate.push(Math.round(nA)),a.sim_rids.push(S);const H=eA!==void 0?eA-vA.framesSent:EA-vA.framesEncoded,CA=1e3*H/i.statsInterval;a.sim_sent_framerate.push(Math.round(CA));let LA=(K-vA.packetsLost)/(p-vA.packetsSent);i._retransmittedRate=(q-vA.retransmittedPacketsSent)/(p-vA.packetsSent),LA=Number.isNaN(LA)?0:LA,a.sim_fraction_lost.push(LA),a.sim_keyencoded.push(IA-vA.pliCount>0),a.sim_retransmittedRate.push(i._retransmittedRate),L>0&&!y&&(i.rid=S,i.sentKBitrate=8*bA,i.encoderOutputFrameRate=nA,i.encodedFrameCount=H,i.sentFrameRate=CA,i.videoLossRate=LA,y=!0)}}),a.vendor_mode=this._stream.vendorCode||0,a.pc_session_id=(D=this.handler)===null||D===void 0?void 0:D.peerConnectionId,C&&((u=this._monitor)===null||u===void 0||u.report("rtc_media_statistics",a))}else{var w,b;i.encodedFrameCount=e.framesSent!==void 0?e.framesSent-l.framesSent:e.framesEncoded-l.framesEncoded,i.sentKBitrate=(e.bytesSent-l.bytesSent||0)/i.statsInterval*8,a.bitrate=Math.round(1e3*i.sentKBitrate),a.bandwidth=Math.round(a.bitrate/1024),i.encoderOutputFrameRate=1e3*(e.framesEncoded-l.framesEncoded)/i.statsInterval,a.frame_rate_encoded=Math.round(i.encoderOutputFrameRate),i.sentFrameRate=1e3*i.encodedFrameCount/i.statsInterval,a.frame_rate_sent=Math.round(i.sentFrameRate),i.videoLossRate=Math.max(0,e.packetsLost-l.packetsLost)/(e.packetsSent-l.packetsSent),i.videoLossRate=Number.isNaN(i.videoLossRate)?0:i.videoLossRate,a.fraction_lost=i.videoLossRate,i._retransmittedRate=(e.retransmittedPacketsSent-l.retransmittedPacketsSent)/(e.packetsSent-l.packetsSent),a.vendor_mode=this._stream.vendorCode||0,a.pc_session_id=(w=this.handler)===null||w===void 0?void 0:w.peerConnectionId,C&&((b=this._monitor)===null||b===void 0||b.report("rtc_media_statistics",a))}return g.video=e,i._fractionLost=Math.max(i._fractionLost,i.videoLossRate),i._captureResolutionWidth=a.cap_frame_width,i._captureResolutionHeight=a.cap_frame_height,this.filterIllegal(i)}}class qlA extends Zz{constructor(I,g){super(I),P(this,"_stats",{audioStats:{},videoStats:{}}),P(this,"_preReports",{audio:{},video:{}}),this._stream=g;const C=async()=>{this._stats=await this._getRemoteStreamStats(this._stream,this._preReports,!1),this._destroyed||(this._timer=setTimeout(C,lA("STATS_LOOP_INTERVAL")))};C()}async setRemoteStreamStatsEvtInterval(I,g){if(this._isReportStarted)return;this.logger.info("setRemoteStreamStatsEvtInterval","invoke"),this._isReportStarted=!0,this.setVar(g),this._destroyed=!1;const C={audio:{},video:{}},Q=async()=>{const B=await this._getRemoteStreamStats(this._stream,C,!0);I(B),this._destroyed||(this._reportTimer=setTimeout(Q,2e3))};this.stopReport("start a new timer."),Q()}getRemoteStreamStats(){return this._stats}async _getRemoteStreamStats(I,g,C){var Q,B,E;const i=(Q=I.videoTrack)===null||Q===void 0?void 0:Q.originTrack,e=(B=I.audioTrack)===null||B===void 0?void 0:B.originTrack;var o;return Object.keys(g.audio).length===0&&Object.keys(g.video).length===0&&(await this.getRemoteAudioStats(e,g,(o=this._stream.audioTrack)===null||o===void 0?void 0:o.getAudioLevel(),C),await this.getRemoteVideoStats(i,g,C),await lV(150)),{audioStats:await this.getRemoteAudioStats(e,g,(E=this._stream.audioTrack)===null||E===void 0?void 0:E.getAudioLevel(),C),videoStats:await this.getRemoteVideoStats(i,g,C),isScreen:I.isScreen,userId:I.userId,streamId:I.streamId}}unsubscribe(){this.logger.info("unsubscribe","invoke"),super.stopReport("unsubscribe"),this._stream.stopAudioStallObserve()}async getRemoteAudioStats(I,g,C,Q){var B,E,i,e;const o={},t={},{streamId:s,userId:v,isScreen:r,audioMid:n,subMediaType:a,_attributes:c,virtual:d,audioTrack:l}=this._stream,h={media_type:"audio",is_screen:!!r,direction:"down",stream_id:s,stream_user_id:v,vid:n,audio_mux:d,connection_status:navigator.onLine,track_enabled:I==null?void 0:I.enabled,mute_state:$I(a)?"mute_state_off":"mute_state_on",remote_user_capture_state:c.localaudio?"capture_state_on":"capture_state_off",remote_user_mute_state:c.localaudio&&c.audiostream?"mute_state_off":"mute_state_on",thermal_status:h9.state};if(l&&(h.playback_volume=l.getVolume()),!I||!this.handler)return o;const D=await((B=this.handler.peer)===null||B===void 0?void 0:B.getStatsWithLowFrequency(I,!1,(E=this._stream.audioTransceiver)===null||E===void 0?void 0:E.receiver));if(!D.length)return o;D.forEach(y=>{let{type:S,packetsLost:L,packetsReceived:V,bytesReceived:z,jitterBufferDelay:EA,jitterBufferEmittedCount:eA,clockRate:K,channels:p,totalSamplesReceived:J,concealedSamples:Y,silentConcealedSamples:N,concealmentEvents:q,totalRoundTripTime:IA,packetsDiscarded:gA,state:vA,currentRoundTripTime:bA,audioLevel:nA,totalAudioEnergy:H,totalSamplesDuration:CA,mimeType:LA,googDecodingNormal:UA,googDecodingMuted:xA,availableIncomingBitrate:rg,availableOutgoingBitrate:NA,bytesSent:MI,nominated:KC,id:YB,writable:ug,jitter:kB,candidateType:pB,ip:tQ,address:AB,networkType:aC,port:NB,protocol:qE,audioOutputLevel:JC,requestsReceived:sQ,responsesReceived:_E,requestsSent:Og,consentRequestsSent:vQ,responsesSent:WC,ssrc:Vo,nackCount:PE,lastPacketReceivedTimestamp:Fv,concealmentevents:rQ,fecPacketsReceived:$E}=y;if(S==="inbound-rtp")t.packetsLost=L,t.packetsReceived=V,h.packetsLost=L,h.packetsReceived=V,h.packetsDiscarded=gA,h.nackCount=PE,h.lastPacketReceivedTimestamp=Fv,h.concealmentevents=rQ,t.bytesReceived=z,EA!==void 0&&(o.jitterBufferDelay=EA/eA*1e3,h.average_jitter_buffer_delay_ms=o.jitterBufferDelay),J!==void 0&&(t.totalSamplesReceived=J,o.concealedSamples=Y,t.concealedSamples=Y,t.silentConcealedSamples=N,h.concealedSamples=Y,o.concealmentEvents=q,h.totalSamplesReceived=J),$E!==void 0&&(h.fec_packets_received=$E,t.fecPacketsReceived=$E),h.jitter=1e3*kB,h.ssrc=Vo,nA!==void 0&&nA!==0?(h.audio_level=nA&&-10*Math.log10(Math.pow(nA,2)),h.volume=255*nA):(h.volume=C??255*nA,h.audio_level=C&&-10*Math.log10(Math.pow(C/255,2))),H!==void 0&&(h.total_audio_energy=H),CA!==void 0&&(h.totalAudioDuration=CA);else if(S==="codec")o.recordSampleRate=K,p&&(o.numChannels=p),h.codecName=LA;else if(S==="candidate-pair"){var IB;h.ice_available_incoming_bitrate=rg,h.ice_available_outgoing_bitrate=NA,h.ice_bytes_received=z,h.ice_bytes_sent=MI,h.ice_nominated=Number(KC),h.ice_pair_id=YB,h.ice_pair_rtt=bA,h.rtt=1e3*bA,h.rtt&&(IB=this._context.streamRTT)!==null&&IB!==void 0&&(IB=IB[s])!==null&&IB!==void 0&&IB.audio&&(h.total_rtt_ms=Math.round(h.rtt+this._context.streamRTT[s].audio)),h.ice_pair_state=vA,h.ice_pair_writable=ug,h.recv_ping_requests=sQ,h.recv_ping_responses=_E,h.sent_ping_requests_before_first_response=Og,h.sent_ping_requests_total=Og+(vQ||0),h.sent_ping_responses=WC,vA==="succeeded"&&(o.rtt=1e3*bA,o.total_rtt=1e3*IA)}else S==="track"&&nA!==void 0?(nA===0&&C!==0?(h.volume=C,h.audio_level=C&&-10*Math.log10(Math.pow(C/255,2))):(h.audio_level=nA&&-10*Math.log10(Math.pow(nA,2)),h.volume=255*nA),h.total_audio_energy=H,h.totalAudioDuration=CA):S==="ssrc"?(h.decodingNormal=UA,h.recvAudioLevel=JC,h.decodingMuted=xA):S==="local-candidate"?(h.local_candidate_type=pB,h.local_ip=tQ||AB,h.local_network_type=aC,h.local_port=NB,h.protocol=qE):S==="remote-candidate"&&(h.remote_candidate_type=pB,h.remote_ip=tQ||AB,h.remote_port=NB)});const{audio:u}=g;if(!u.timestamp)return t.timestamp=Date.now(),g.audio=t,this.filterIllegal(o);let w;var b;return t.concealedSamples!==void 0&&(h.interval_concealed_samples=t.concealedSamples-u.concealedSamples,h.interval_samples_received=t.totalSamplesReceived-u.totalSamplesReceived,h.interval_silent_concealed_samples=t.silentConcealedSamples-u.silentConcealedSamples,w=await this._stream.updateAudioStallInfo(h,o,t)),t.timestamp=Date.now(),o.audioLossRate=Math.max(0,t.packetsLost-u.packetsLost)/(t.packetsReceived-u.packetsReceived+(t.packetsLost-u.packetsLost)),o.audioLossRate=Number.isNaN(o.audioLossRate)?0:o.audioLossRate,h.fraction_lost=o.audioLossRate,o.statsInterval=t.timestamp-u.timestamp,h.stats_interval=o.statsInterval,o.receivedKBitrate=(t.bytesReceived-u.bytesReceived||0)/o.statsInterval*8,h.bandwidth=Math.round(1e3*o.receivedKBitrate/1024),t.concealedSamples!==void 0&&(o.receivedSampleRate=1e3*h.interval_samples_received/o.statsInterval),t.fecPacketsReceived!==void 0&&(h.fecBitratebps=(t.fecPacketsReceived-u.fecPacketsReceived||0)/o.statsInterval),h.average_jitter_buffer_delay_ms&&h.total_rtt_ms&&(o.e2eDelay=h.average_jitter_buffer_delay_ms+h.total_rtt_ms),(i=this._context.streamRTT)!==null&&i!==void 0&&(i=i[s])!==null&&i!==void 0&&i.audio&&(o.totalRtt=(h.rtt?h.rtt:0)+this._context.streamRTT[s].audio),g.audio=t,h.vendor_mode=this._stream.vendorCode||0,h.pc_session_id=(e=this.handler)===null||e===void 0?void 0:e.peerConnectionId,Q&&((b=this._monitor)===null||b===void 0||b.report("rtc_media_statistics",h,w)),this.filterIllegal(o)}async getRemoteVideoStats(I,g,C){var Q,B,E,i,e;const o={},t={timestamp:Date.now()},{streamId:s,userId:v,isScreen:r,subMediaType:n,_attributes:a}=this._stream,c=R({media_type:"video",is_screen:!!r,direction:"down",stream_id:s,stream_user_id:v,vid:this._stream.videoMid,connection_status:navigator.onLine,track_enabled:I==null?void 0:I.enabled,mute_state:gI(n)?"mute_state_off":"mute_state_on",remote_user_capture_state:a.localvideo?"capture_state_on":"capture_state_off",remote_user_mute_state:a.localvideo&&a.videostream?"mute_state_off":"mute_state_on",is_intersecting:JSON.stringify((Q=this._stream.videoTrack)===null||Q===void 0?void 0:Q.intersection()),thermal_status:h9.state},this._stream.getVideoRenderInfo());if(!I||!this.handler)return o;o.isScreen=r;const d=await((B=this.handler.peer)===null||B===void 0?void 0:B.getStatsWithLowFrequency(I,!1,(E=this._stream.videoTransceiver)===null||E===void 0?void 0:E.receiver));if(!d.length)return o;d.forEach(w=>{let{type:b,frameHeight:y,frameWidth:S,packetsLost:L,packetsReceived:V,bytesReceived:z,framesDecoded:EA,jitterBufferDelay:eA,jitterBufferEmittedCount:K,mimeType:p,firCount:J,availableIncomingBitrate:Y,availableOutgoingBitrate:N,bytesSent:q,nominated:IA,id:gA,currentRoundTripTime:vA,state:bA,writable:nA,candidateType:H,ip:CA,address:LA,networkType:UA,port:xA,nackCount:rg,pliCount:NA,protocol:MI,requestsReceived:KC,responsesReceived:YB,requestsSent:ug,consentRequestsSent:kB,responsesSent:pB,ssrc:tQ,jitter:AB,framesReceived:aC,keyFramesDecoded:NB,totalDecodeTime:qE,decoderImplementation:JC,lastPacketReceivedTimestamp:sQ,framesDropped:_E}=w;if(b==="inbound-rtp")t.packetsLost=L,c.packetsLost=L,t.packetsReceived=V,c.packetsReceived=V,t.bytesReceived=z,c.bytes=z,t.framesDecoded=EA,t.totalDecodeTime=qE,eA!==void 0&&(t.jitterBufferDelay=eA/K*1e3,c.average_jitter_buffer_delay_ms=t.jitterBufferDelay),c.fir_count=J,c.nackCount=rg,t.nackCount=rg,c.pli_count=NA,c.ssrc=tQ,c.framesDropped=_E,c.jitter=1e3*AB,c.framesReceived=aC,t.framesReceived=aC,c.framesDecoded=EA,c.key_frames_decoded=NB,c.decoder_name=JC,c.last_packet_received_timestamp=sQ,S!==void 0&&(o.width=S,c.frame_size_width=S,o.height=y,c.frame_size_height=y);else if(b==="track"&&S!==void 0)o.width=S,c.frame_size_width=S,o.height=y,c.frame_size_height=y,aC!==void 0&&(c.framesReceived=aC,t.framesReceived=aC);else if(b==="codec")c.codecName=p,o.codecType=p;else if(b==="candidate-pair"){var Og;c.ice_available_incoming_bitrate=Y,c.ice_available_outgoing_bitrate=N,c.ice_bytes_received=z,c.ice_bytes_sent=q,c.ice_nominated=Number(IA),c.ice_pair_id=gA,c.ice_pair_rtt=vA,c.rtt=1e3*vA,c.rtt&&(Og=this._context.streamRTT)!==null&&Og!==void 0&&(Og=Og[s])!==null&&Og!==void 0&&Og.video&&(c.total_rtt_ms=Math.round(c.rtt+(this._context.streamRTT[s].video||0))),o.rtt=c.rtt,c.ice_pair_state=bA,c.ice_pair_writable=nA,c.recv_ping_requests=KC,c.recv_ping_responses=YB,c.sent_ping_requests_before_first_response=ug,c.sent_ping_requests_total=ug+(kB||0),c.sent_ping_responses=pB}else b==="local-candidate"?(c.local_candidate_type=H,c.local_ip=CA||LA,c.local_network_type=UA,c.local_port=xA,c.protocol=MI):b==="remote-candidate"&&(c.remote_candidate_type=H,c.remote_ip=CA||LA,c.remote_port=xA)});const{video:l}=g;if(!l.timestamp)return g.video=t,this.filterIllegal(o);const h=Math.max(0,t.packetsLost-l.packetsLost),D=t.packetsReceived-l.packetsReceived;if(o.videoLossRate=h/(D+h),o._receivePackets=t.packetsReceived,o._receivePacketsLost=t.packetsLost,l.totalDecodeTime&&l.framesDecoded&&t.framesDecoded!==l.framesDecoded){const w=t.totalDecodeTime-l.totalDecodeTime,b=t.framesDecoded-l.framesDecoded;c.decode_elapse_per_frame=Number((w/b*1e3).toFixed(2))}var u;return o._retransmittedRate=(t.nackCount-l.nackCount)/(D+h),o.videoLossRate=Number.isNaN(o.videoLossRate)?0:o.videoLossRate,c.fraction_lost=o.videoLossRate,o.statsInterval=t.timestamp-l.timestamp,c.stats_interval=o.statsInterval,o.receivedKBitrate=(t.bytesReceived-l.bytesReceived||0)/o.statsInterval*8,c.bitrate=Math.round(1e3*o.receivedKBitrate),c.bandwidth=Math.round(c.bitrate/1024),o.decoderOutputFrameRate=1e3*(t.framesDecoded-l.framesDecoded)/o.statsInterval,o.receivedFrameRate=1e3*(t.framesReceived-l.framesReceived)/o.statsInterval,c.frame_rate_decoded=Math.round(o.decoderOutputFrameRate),c.frame_rate_received=Math.round(o.receivedFrameRate),c.average_jitter_buffer_delay_ms&&c.total_rtt_ms&&(o.e2eDelay=c.average_jitter_buffer_delay_ms+c.total_rtt_ms),(i=this._context.streamRTT)!==null&&i!==void 0&&(i=i[s])!==null&&i!==void 0&&i.video&&(o.totalRtt=(c.rtt?c.rtt:0)+(this._context.streamRTT[s].video||0)),g.video=t,this._stream.updateVideoStallInfo(c,o,C),c.vendor_mode=this._stream.vendorCode||0,c.pc_session_id=(e=this.handler)===null||e===void 0?void 0:e.peerConnectionId,C&&((u=this._monitor)===null||u===void 0||u.report("rtc_media_statistics",c)),this.filterIllegal(o)}destroy(){super.destroy(),super.stopReport("destroy"),this._stream.stopAudioStallObserve()}}class _lA{constructor(I,g){P(this,"_removeHandler",void 0),P(this,"_remotePauseHandler",void 0),P(this,"_prePts",void 0),P(this,"_stallList",void 0),P(this,"_videoInWaiting",!1),P(this,"_videoInWaitingCallback",!1),P(this,"_videoInWaiting100ms",!1),P(this,"_isPaused",void 0),P(this,"_pauseStart",0),P(this,"_pauseDuration",0),P(this,"_requestVideoFrameCallbackTimer",void 0),P(this,"_logger",void 0),P(this,"_player",void 0),P(this,"_recentVideoInfo",void 0),P(this,"_stallTimeThreshold",void 0),P(this,"_openVideoStall100ms",YA.VIDEO_STALL_100MS);const C=I?1500:CQ||mI?550:500;this._stallTimeThreshold={report:C,callback:Math.max(YA.VIDEO_STALL_DATA,C)},this._logger=new uA("VideoStallObserver",1,g)}start(I){if(this._logger.print("start","invoke"),this._player=I,vV())I.domElement&&(this._requestVideoFrameCallbackTimer=I.domElement.requestVideoFrameCallback(this._onVideoRefresh.bind(this)),this._removeHandler=()=>{var C;this._requestVideoFrameCallbackTimer&&((C=I.domElement)===null||C===void 0||C.cancelVideoFrameCallback(this._requestVideoFrameCallbackTimer))});else{const C=Q=>this._onVideoTimeupdate(Q,I);I.on("playback_event",C),this._removeHandler=()=>I.off("playback_event",C)}const g=C=>this._onVideoPause(C);I.on("playback_event",g),this._remotePauseHandler=()=>I.off("playback_event",g)}getRecentRenderInfo4Report(){const I={};return this._recentVideoInfo&&Object.keys(this._recentVideoInfo).forEach(g=>{var C;const Q=g.replace(/[a-z]{1}[A-Z]{1}/g,B=>"".concat(B[0],"_").concat(B[1].toLowerCase()));I["video_".concat(Q)]=(C=this._recentVideoInfo)===null||C===void 0?void 0:C[g]}),I}stop(){var I,g;this._logger.print("stop","invoke"),delete this._player,(I=this._removeHandler)===null||I===void 0||I.call(this),delete this._removeHandler,(g=this._remotePauseHandler)===null||g===void 0||g.call(this),delete this._remotePauseHandler,delete this._stallList,delete this._prePts,delete this._recentVideoInfo,this._videoInWaiting=!1,this._videoInWaitingCallback=!1,this._videoInWaiting100ms=!1}destroy(){this.stop()}getStallInfo(I){let{interval:g,frameRateReceived:C,frameRateDecoded:Q,bitrate:B}=I;const E={pts:0,report:{stallCount:0,stallDuration:0,list:[]},callback:{stallCount:0,stallDuration:0},pauseDuration:this._getPauseDuration()};return this._stallList&&((CQ||mI)&&(B===0||(Q||1/0)<=1||(C||1/0)<=1)||this._stallList.length===0?(E.report.stallDuration=E.callback.stallDuration=2e3,E.report.stallCount=E.callback.stallCount=this._videoInWaiting?0:1,this._openVideoStall100ms&&(E.stall100ms={count:this._videoInWaiting100ms?0:1,duration:2e3}),this._videoInWaiting=!0,this._videoInWaitingCallback=!0,this._videoInWaiting100ms=!0):this._stallList.forEach((i,e)=>{let o=i.timeUpdateInterval;e===0&&this._videoInWaiting&&(o=Math.round(i.timeUpdateInterval%g));const t=i.timeUpdateInterval>this._stallTimeThreshold.report;t&&(E.report.list.push(i.timeUpdateInterval),E.report.stallDuration+=o,this._videoInWaiting||E.report.stallCount++),this._videoInWaiting=t,i.timeUpdateInterval>this._stallTimeThreshold.callback?(E.callback.stallDuration+=o,this._videoInWaitingCallback||E.callback.stallCount++,this._videoInWaitingCallback=!0):this._videoInWaitingCallback=!1,this._openVideoStall100ms&&(E.stall100ms||(E.stall100ms={count:0,duration:0}),i.timeUpdateInterval>100?(E.stall100ms.duration+=o,this._videoInWaiting100ms||E.stall100ms.count++,this._videoInWaiting100ms=!0):this._videoInWaiting100ms=!1),E.pts=i.playTime}),this._stallList=[]),E}_getPauseDuration(){let I=this._pauseDuration;if(this._pauseDuration=0,this._isPaused){const g=aA(),C=g-(this._pauseStart||0);C>500&&(this._pauseStart=g,I+=C)}return I}_onVideoPause(I){if(I.eventName==="pause")this._isPaused=!0,this._pauseStart=aA();else if(I.eventName==="play"&&this._isPaused){this._isPaused=!1;const g=aA()-this._pauseStart;g>500&&(this._pauseDuration+=g)}}_onVideoTimeupdate(I,g){if(I.eventName==="timeupdate"){const C=g.domElement;if(!C||C.currentTime===0)return;if(this._prePts===void 0)return void(this._prePts=C.currentTime);if(this._stallList||(this._stallList=[]),C.currentTime>this._prePts){const Q=C.currentTime-this._prePts;this._stallList.push({playTime:C.currentTime,timeUpdateInterval:Math.round(1e3*Q)})}this._prePts=C.currentTime}}_onVideoRefresh(I,g){var C;if(this._stallList||(this._stallList=[]),this._prePts){const Q=g.presentationTime-this._prePts;this._stallList.push({playTime:g.presentationTime,timeUpdateInterval:Math.round(Q)})}this._recentVideoInfo=g,this._prePts=g.presentationTime,(C=this._player)===null||C===void 0||(C=C.domElement)===null||C===void 0||C.requestVideoFrameCallback(this._onVideoRefresh.bind(this))}}class BC{constructor(I){P(this,"_audioStallTimer",void 0),P(this,"_preSample",void 0),P(this,"_isStallInPreCallbackEnd",!1),P(this,"_isStallInPreReportEnd",!1),P(this,"_stallList",[]),this._stream=I}static setAudioStallConfig(I){BC.interval=((I==null?void 0:I.audio_stall_interval)||200)/2,BC.ratio=(I==null?void 0:I.audio_stall_ratio)||.6}start(I,g){this.stop(),YA.AUDIO_STALL&&BC.interval>0&&typeof I=="number"&&typeof g=="number"&&(this._preSample={ts:aA(),concealedSamples:I,totalSamplesReceived:g},this._startStallCountInterval())}stop(){this._stallList=[],this._audioStallTimer&&(clearTimeout(this._audioStallTimer),delete this._audioStallTimer)}destroy(){this.stop()}async getAudioStallInfo(){const I={stats_count:this._stallList.filter(B=>!!B.get_stats_cost).length,stall_list:[...this._stallList]};try{await this._audioStallCount()}catch{}const g=UY(this._stallList,2,this._isStallInPreReportEnd);this._isStallInPreReportEnd=g.isStallInEnd;const C=YA.AUDIO_STALL_DATA/BC.interval,Q=UY(this._stallList,C,this._isStallInPreCallbackEnd);return this._isStallInPreCallbackEnd=Q.isStallInEnd,this.stop(),this._startStallCountInterval(),{report:{stall_count:g.stall_count,stall_duration:g.stall_duration,list:g.list},callback:{stall_count:Q.stall_count,stall_duration:Q.stall_duration,list:Q.list},extra:I}}_startStallCountInterval(){const I=async()=>{clearTimeout(this._audioStallTimer),delete this._audioStallTimer,await this._audioStallCount(),this._audioStallTimer||(this._audioStallTimer=setTimeout(I,BC.interval))};this._audioStallTimer=setTimeout(I,BC.interval)}async _audioStallCount(){if(!this._preSample||aA()-this._preSample.ts<.5*BC.interval)return;const{hasAudio:I,subAudio:g,virtual:C,virtualOccupy:Q,removeTrack:B,audioTrack:E}=this._stream;if(B||!E)return clearTimeout(this._audioStallTimer),void delete this._audioStallTimer;const i=I&&g;if(!i||C&&!Q)this._preSample.ts=aA(),this._stallList.push({reason:i?"virtual: ".concat(C,", virtualOccupy: ").concat(Q):"hasAudio: ".concat(I,", subAudio: ").concat(g)});else{const o=aA();let t,s,v=0;try{var e;const c=await((e=this._stream.audioTransceiver)===null||e===void 0?void 0:e.receiver.getStats());c==null||c.forEach(d=>{d.type==="inbound-rtp"&&(t=d),v++})}catch(c){s=c.message||JSON.stringify(c)}const r=aA(),n=aA(),a=n-this._preSample.ts;if(t){const{concealedSamples:c,totalSamplesReceived:d}=t,l=c-this._preSample.concealedSamples,h=d-this._preSample.totalSamplesReceived,D=l>=0&&h>=0&&l>=BC.ratio*h;this._stallList.push({concealed:l,received:h,diff:a,start:this._preSample.ts,end:n,get_stats_cost:r-o,get_stats_start:o,get_stats_end:r,is_stall:D}),this._preSample.concealedSamples=c,this._preSample.totalSamplesReceived=d,this._preSample.ts=n}else this._stallList.push({diff:a,start:this._preSample.ts,end:n,get_stats_cost:r-o,get_stats_start:o,get_stats_end:r,reason:v?s||"no inbound-rtp":"no report"})}}}P(BC,"interval",100),P(BC,"ratio",.6);const UY=(A,I,g)=>{var C;const Q={stall_count:0,stall_duration:0,isStallInEnd:!1,list:[]};let B=0,E=0;for(let i=0;i=I;const s=i+I-B-1;if(!t&&B>2){let v=0;A.slice(i+1,s+1).forEach(r=>{r.is_stall&&(v+=r.diff||0)}),t=E+v>BC.interval*I*BC.ratio,t&&(i=s,E+=v)}t&&(Q.stall_count++,Q.stall_duration+=E,Q.list.push(E)),o&&(Q.isStallInEnd=t),B=E=0}}return((C=A[0])===null||C===void 0?void 0:C.is_stall)===!0&&g&&Q.stall_count>0&&Q.stall_count--,Q};var ws=(A=>(A[A.CAPTURE=0]="CAPTURE",A[A.PRE_PROCESSING=1]="PRE_PROCESSING",A[A.ENCODE=2]="ENCODE",A[A.TRANSFER=3]="TRANSFER",A[A.POST_PROCESSING=4]="POST_PROCESSING",A[A.DECODE=5]="DECODE",A[A.RENDERING=6]="RENDERING",A))(ws||{}),Xs=(A=>(A[A.STREAM_INDEX_MAIN=0]="STREAM_INDEX_MAIN",A[A.STREAM_INDEX_SCREEN=1]="STREAM_INDEX_SCREEN",A))(Xs||{});class $lA{constructor(I){P(this,"_plugins",new Map),this.id=I}register(I){const g=this._plugins.get(I.type)||[];if(g.findIndex(C=>C.name===I.name)>-1)throw new Error("Failed to register ".concat(I.name,": name is repeated."));g.push(I),this._plugins.set(I.type,g)}getPluginsByType(I){return this._plugins.get(I)||[]}getPluginByName(I,g){return(this._plugins.get(I)||[]).find(C=>C.name===g)}async getPreProcessingTrack(I){const g=this._plugins.get(1)||[];let C=I.mediaTrack;for(const Q of g)C=await Q.effect(I,C);return C}destroy(){this._plugins.forEach(I=>{I.forEach(g=>g.destroy())}),this._plugins.clear()}}const A9A=new uA("InternalEventBus",1);var PB=(A=>(A.ON_IOS_INTERRUPTION_START="ON_IOS_INTERRUPTION_START",A.ON_IOS_INTERRUPTION_END="ON_IOS_INTERRUPTION_END",A.ON_IOS_LOCAL_TRACK_MUTE="ON_IOS_LOCAL_TRACK_MUTE",A.ON_IOS_LOCAL_TRACK_UNMUTE="ON_IOS_LOCAL_TRACK_UNMUTE",A))(PB||{});class I9A extends UB.EventEmitter{emit(I){A9A.info(I);for(var g=arguments.length,C=new Array(g>1?g-1:0),Q=1;Q{if(this._audioContextInstance){const g=this._audioContextInstance.currentTime;this._contextStuckAt?this._contextStuckAt!==g&&(this._contextStuckAt=0,or.info("currentTime resume"),tF("currentTime resume","")):g&&I===g&&(this._contextStuckAt=g,or.warn("currentTime stuck",this._contextStuckAt),this._audioContextInstance.suspend(),this._audioContextInstance.resume(),tF("AudioContext currentTime stuck",this._contextStuckAt)),I=g}},3e3)}getAudioContextInstance(){if(!this._audioContextInstance){const I=window.AudioContext||window.webkitAudioContext;this._audioContextInstance=fPA?new I:new I({sampleRate:44100});try{this.isWorkletReady=this._audioContextInstance.audioWorklet.addModule(Kz),this.isWorkletReady.catch(g=>{Qs("initial AudioWorklet error in promise",-1,"".concat(g.name,"-").concat(g.message)),or.error("isWorkletReady",g),this.isWorkletReady=null})}catch(g){Qs("initial AudioWorklet error in catch",-1,"".concat(g.name,"-").concat(g.message)),or.error("isWorkletReady",g),this.isWorkletReady=null}this._audioContextInstance.onstatechange=()=>{var g,C,Q;or.warn("state change",(g=this._audioContextInstance)===null||g===void 0?void 0:g.state),this._previousState=this._currentState,this._currentState=((C=this._audioContextInstance)===null||C===void 0?void 0:C.state)||"",((Q=this._audioContextInstance)===null||Q===void 0?void 0:Q.state)==="interrupted"&&this._audioContextInstance.resume(),(Yo||v9)&&(this._previousState==="running"&&this._currentState==="interrupted"&&$B.emit(PB.ON_IOS_INTERRUPTION_START),this._previousState==="interrupted"&&this._currentState==="running"&&$B.emit(PB.ON_IOS_INTERRUPTION_END))}}return this._audioContextInstance}}class SR{constructor(I){P(this,"_ctx",void 0),P(this,"_analyserNode",void 0),P(this,"_audioSource",void 0),P(this,"currentTrackId",void 0),this.currentTrackId=I.id;const g=MQ.getAudioContextInstance();if(I instanceof MediaStreamTrack){const Q=new MediaStream;Q.addTrack(I),this._audioSource=g.createMediaStreamSource(Q)}else this._audioSource=g.createMediaElementSource(I),this._audioSource.connect(g.destination);const C=g.createAnalyser();this._audioSource.connect(C),this._analyserNode=C,this._ctx=g}getAudioLevel(){var I;((I=this._ctx)===null||I===void 0?void 0:I.state)==="suspended"&&this._ctx.resume();const g=new Uint8Array(2048);this._analyserNode.getByteTimeDomainData(g);let C=0;g.forEach(B=>C=Math.max(C,Math.abs(B-128)));const Q=C/128*255;return Q>2?Q:0}async resume(){var I;await((I=this._ctx)===null||I===void 0?void 0:I.resume())}destroy(){this._audioSource.disconnect(),this._analyserNode.disconnect()}}class TR extends UB.EventEmitter{constructor(I,g){let C=arguments.length>2&&arguments[2]!==void 0?arguments[2]:MQ.getAudioContextInstance(),Q=arguments.length>3&&arguments[3]!==void 0?arguments[3]:MQ.isWorkletReady;var B;super(),P(this,"_ctx",void 0),P(this,"_worklet",void 0),P(this,"_source",void 0),P(this,"_buffers",[]),P(this,"_bufferLength",0),P(this,"_sampleRate",void 0),P(this,"_channelCount",void 0),P(this,"_frameSize",void 0),I instanceof MediaStreamTrack?this._channelCount=(B=I.getSettings().channelCount)!==null&&B!==void 0?B:1:this._channelCount=I.channelCount,this._ctx=C,this._frameSize=g,Q==null||Q.then(()=>{this._worklet=new AudioWorkletNode(this._ctx,"dump-audio-data"),I instanceof MediaStreamTrack?this._source=this._ctx.createMediaStreamSource(new MediaStream([I])):this._source=I,this._source.connect(this._worklet),this._initWorkletEventListener(this._worklet)}).catch()}_initWorkletEventListener(I){I.port.onmessage=this._handleWorkletMessage.bind(this)}_handleWorkletMessage(I){const{data:g,sampleRate:C}=I.data;if(this._bufferLength>=this._frameSize||this._sampleRate!==C){if(this._sampleRate){const Q=this._channelCount===1||g.length===1?1:2;this.emit("data",{channels:[...this._buffers],sampleRate:this._sampleRate,channelCount:Q})}this._sampleRate=C,this._buffers=new Array(this._channelCount).fill(0).map(()=>new Float32Array(this._frameSize)),this._bufferLength=0}for(let Q=0;Q1&&arguments[1]!==void 0?arguments[1]:{};const g=document.createElement(A);return I.id&&(g.id=I.id),I.classList&&I.classList.forEach(C=>{g.classList.add(C)}),I.style&&Object.assign(g.style,I.style),I.attributes&&Object.entries(I.attributes).forEach(C=>{let[Q,B]=C;Q==="muted"?g.muted=!0:g.setAttribute(Q,B)}),g};class C9A extends iQ{constructor(){var I;super(),P(this,"deviceMap",{audioinput:new Map,audiooutput:new Map,videoinput:new Map}),P(this,"checkDeviceChangeTimer",null),P(this,"isSupportedPermissionsQuery",!1),P(this,"isGrantedMicrophonePermission",!1),P(this,"isGrantedCameraPermission",!1),this.isSupportedPermissionsQuery=!lI()&&!((I=navigator)===null||I===void 0||(I=I.permissions)===null||I===void 0||!I.query),this._handleDeviceChange=this._handleDeviceChange.bind(this),!lI()&&this.initListener().then(()=>{this.updateDeviceListInSilent()})}async refreshDevices(){let I,g=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"audio";if(!navigator.mediaDevices)return;if(mI)try{I=g==="audio"?await navigator.mediaDevices.getUserMedia({audio:!0}):await navigator.mediaDevices.getUserMedia({video:!0})}catch{}const C=await navigator.mediaDevices.enumerateDevices();I&&I.getTracks().forEach(Q=>Q.stop()),C.forEach(Q=>{var B;Q.deviceId&&((B=this.deviceMap[Q.kind])===null||B===void 0||B.set(Q.deviceId,Q))})}async initListener(){var I,g;if(((I=navigator.mediaDevices)===null||I===void 0?void 0:I.ondevicechange)!==void 0&&typeof((g=navigator.mediaDevices)===null||g===void 0?void 0:g.addEventListener)=="function"?navigator.mediaDevices.addEventListener("devicechange",()=>{this._handleDeviceChange(),setTimeout(()=>{this._handleDeviceChange()},300)}):this.checkDeviceChangeTimer=window.setInterval(()=>{this._handleDeviceChange()},3e3),this.isSupportedPermissionsQuery){try{const C=await navigator.permissions.query({name:"microphone"});this.isGrantedMicrophonePermission=C.state==="granted",C.addEventListener("change",()=>{this.isGrantedMicrophonePermission=C.state==="granted"})}catch{}try{const C=await navigator.permissions.query({name:"camera"});this.isGrantedCameraPermission=C.state==="granted",C.addEventListener("change",()=>{this.isGrantedCameraPermission=C.state==="granted"})}catch{}}}async _handleDeviceChange(){if(!navigator.mediaDevices)return;let I;mI&&(I=await navigator.mediaDevices.getUserMedia({audio:!0}));let g=await navigator.mediaDevices.enumerateDevices();g=g.filter(Q=>!!Q.deviceId),I&&I.getTracks().forEach(Q=>Q.stop());const C=Array.from([...this.deviceMap.audioinput.values(),...this.deviceMap.videoinput.values(),...this.deviceMap.audiooutput.values()]);(gl||v9)&&!C.length&&g.length&&g.forEach(Q=>{var B;(B=this.deviceMap[Q.kind])===null||B===void 0||B.set(Q.deviceId,Q)}),g.forEach(Q=>{const B=this.deviceMap[Q.kind].get(Q.deviceId);this.deviceMap[Q.kind].set(Q.deviceId,Q),B||(Q.kind.includes("video")?this.emit(X.onVideoDeviceStateChanged,{mediaDeviceInfo:Q,deviceState:"active"}):Q.kind.includes("audio")&&this.emit(X.onAudioDeviceStateChanged,{mediaDeviceInfo:Q,deviceState:"active"}))}),C.forEach(Q=>{g.find(B=>B.deviceId===Q.deviceId&&B.kind===Q.kind)||(this.deviceMap[Q.kind].delete(Q.deviceId),Q.kind.includes("video")?this.emit(X.onVideoDeviceStateChanged,{mediaDeviceInfo:Q,deviceState:"inactive"}):Q.kind.includes("audio")&&this.emit(X.onAudioDeviceStateChanged,{mediaDeviceInfo:Q,deviceState:"inactive"}))})}async getUserMedia(I){const g=await navigator.mediaDevices.getUserMedia(I);return I!=null&&I.audio&&(this.isGrantedMicrophonePermission=!0),I!=null&&I.video&&(this.isGrantedCameraPermission=!0),I!=null&&I.video?this.refreshDevices("video"):this.refreshDevices("audio"),g}async checkPermissionsByDevices(){const I={audio:!1,video:!1};if(!navigator.mediaDevices)return I;const g=await navigator.mediaDevices.enumerateDevices();return I.audio=g.filter(C=>C.kind==="audioinput"&&C.label&&C.deviceId).length>0,I.video=g.filter(C=>C.kind==="videoinput"&&C.label&&C.deviceId).length>0,I}async getPermissions(){var I;let g=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},{audio:C,video:Q}=g;const{force:B}=g;C||Q||(C=!0,Q=!0);const E={audio:!1,video:!1,reason:void 0};if(!B)if(this.isSupportedPermissionsQuery){if(C&&Q){if(this.isGrantedMicrophonePermission&&this.isGrantedCameraPermission)return E.audio=!0,E.video=!0,E}else if(C&&this.isGrantedMicrophonePermission||Q&&this.isGrantedCameraPermission)return E.audio=this.isGrantedMicrophonePermission,E.video=this.isGrantedCameraPermission,E}else{const o=await this.checkPermissionsByDevices();if(C&&Q){if(o.audio&&o.video)return o}else if(C&&o.audio||Q&&o.video)return o}if((I=navigator.mediaDevices)!==null&&I!==void 0&&I.getUserMedia)try{const o=await navigator.mediaDevices.getUserMedia({audio:C,video:Q});o&&(o.getTracks().forEach(t=>t.stop()),C&&(E.audio=!0,this.isGrantedMicrophonePermission=!0),Q&&(E.video=!0,this.isGrantedCameraPermission=!0))}catch(o){if(E.reason=o,this.isSupportedPermissionsQuery){var i,e;C&&(E.audio=((i=await navigator.permissions.query({name:"microphone"}).catch(()=>{}))===null||i===void 0?void 0:i.state)==="granted"),Q&&(E.video=((e=await navigator.permissions.query({name:"camera"}).catch(()=>{}))===null||e===void 0?void 0:e.state)==="granted")}}return C?await this.refreshDevices("audio"):await this.refreshDevices("video"),E}async updateDeviceListInSilent(){this.isGrantedCameraPermission&&this.isGrantedMicrophonePermission&&this.refreshDevices("audio")}async enumerateDevices(){return await this.getPermissions(),await this.refreshDevices(),Array.from([...this.deviceMap.audioinput.values(),...this.deviceMap.videoinput.values(),...this.deviceMap.audiooutput.values()])}async enumerateAudioCaptureDevices(){return await this.getPermissions({audio:!0}),await this.refreshDevices(),Array.from(this.deviceMap.audioinput.values())}async enumerateVideoCaptureDevices(){return await this.getPermissions({video:!0}),await this.refreshDevices("video"),Array.from(this.deviceMap.videoinput.values())}async enumerateAudioPlaybackDevices(){return await this.getPermissions({audio:!0}),await this.refreshDevices("audio"),Array.from(this.deviceMap.audiooutput.values())}async getAudioPlaybackDeviceById(I){return(await this.enumerateAudioPlaybackDevices()).find(g=>g.deviceId===I)}}const Xg=new C9A;K0&&(window.__rtc_dd__=Xg);var TC=(A=>(A[A.AUTOPLAY_FAILED=-1e3]="AUTOPLAY_FAILED",A[A.TRACK_ERROR=-1001]="TRACK_ERROR",A[A.Fetch_MODIFY=-1002]="Fetch_MODIFY",A[A.BLACK_BROWSER=-1003]="BLACK_BROWSER",A[A.DC_SEND_ERROR=-1004]="DC_SEND_ERROR",A[A.DUPLICATE_DOM=-1005]="DUPLICATE_DOM",A))(TC||{});const ot=new uA("VideoSnapshot",1),Q9A=A=>{const I=A==null?void 0:A.domElement;if(I&&!I.paused&&I.readyState===4)return I},Jz=async(A,I)=>{const g=document.createElement("canvas"),C=g.getContext("2d");if(!C)throw new Error("canvas.getContext error");const Q=(i,e,o)=>(e=e||i.width,o=o||i.height,g.width=e,g.height=o,C.setTransform(1,0,0,1,0,0),C.drawImage(i,0,0,e,o),C.getImageData(0,0,e,o)),B=Date.now(),E=Q9A(I);if(E){ot.info("takeSnapshot","VideoPlayer already set.");const i=await Q(E,E.videoWidth,E.videoHeight);return ot.info("takeSnapshot","success, cost ".concat(Date.now()-B,"ms")),i}if(window.ImageCapture){const i=new window.ImageCapture(A);if(i.track.readyState==="live"&&i.track.enabled&&!i.track.muted){ot.info("takeSnapshot","use ImageCapture");const e=await Q(await i.grabFrame());return ot.info("takeSnapshot","success, cost ".concat(Date.now()-B,"ms")),e}}return ot.info("takeSnapshot","use temp video"),new Promise((i,e)=>{const o=new MediaStream([A]),t=document.createElement("video");t.setAttribute("playsinline",""),t.muted=!0,document.body.appendChild(t),t.onplaying=()=>{const s=Q(t,t.videoWidth,t.videoHeight);ot.info("takeSnapshot","success, cost ".concat(Date.now()-B,"ms")),i(s),o.removeTrack(A),t.srcObject=null,t.load()},t.onerror=e,t.srcObject=o,t.play()})},UQ=Symbol("default");var Zw=(A=>(A.START_STALL_OBSERVE="start_stall_observe",A.STOP_STALL_OBSERVE="stop_stall_observe",A))(Zw||{});class No extends ez{constructor(I,g,C){super(I,g,R(R({},C),{},{mediaType:Vs.VIDEO})),P(this,"resolution",void 0),P(this,"videoPlayers",new Map),this.resolution={width:0,height:0}}intersection(){const I={};return this.videoPlayers.forEach((g,C)=>{I[C.toString()]=g.isIntersecting}),I}async updateVideoCaptureConfig(I){this.logger.info("updateVideoEncoderConfig","update localVideoTrack: ",I);const g=R({},I);delete g.contentHint,mI&&this.trackInfo.streamIndex===LI.MAIN&&(g.frameRate={ideal:30,max:30}),await this.originTrack.applyConstraints(g);const C=this.originTrack.getSettings();(C.width&&C.width!==this.resolution.width||C.height&&C.height!==this.resolution.height)&&(this.resolution={width:C.width,height:C.height},this.emit("resolution-change",this.resolution))}setContentHint(I){"contentHint"in this.originTrack&&["text","motion","detail"].includes(I)&&(this.originTrack.contentHint=I)}setTrack(I,g){this._originTrack=I,this.trackInfo=R(R({},this.trackInfo),g),this.isTrackReady=this.generatePreProcessingTrack()}setPlayer(I,g,C,Q){var B;const E=(B=I.playerId)!==null&&B!==void 0?B:UQ;let i=this.videoPlayers.get(E);return I.player!==i&&(i=I.player,this.videoPlayers.set(E,i),Q(i,this.isPublic,this.streamIndex)),this.mirror(!!g),this.dummy||C===Ae.PLAY_MANUALLY||this.play(E),i.domElement}setUserId(I){this.trackInfo.streamUserId=I,this.videoPlayers.forEach(g=>{g.userId=I})}snapshot(){let I;for(const g of this.videoPlayers.values())if(g.played){I=g;break}return Jz(this.preprocessingTrack,I)}setRenderMode(I,g){var C;return(C=this.videoPlayers.get(I))===null||C===void 0?void 0:C.setRenderMode(g)}mirror(I){this.videoPlayers.forEach(g=>{g.mirror(I)})}removePlayerTrack(){this.videoPlayers.forEach((I,g)=>{var C;(C=this.videoPlayers.get(g))===null||C===void 0||C.removeTrack()})}play(I){const g=this.videoPlayers.get(I);return g!=null&&g.played?g.manuallyPlay():g==null?void 0:g.playVideo(this)}playAll(){this.videoPlayers.forEach((I,g)=>{this.play(g)})}manuallyPlay(I){var g;return(g=this.videoPlayers.get(I))===null||g===void 0?void 0:g.manuallyPlay()}pause(I){var g;(g=this.videoPlayers.get(I))===null||g===void 0||g.manuallyPause()}stop(I){var g;return(g=this.videoPlayers.get(I))===null||g===void 0?void 0:g.stop()}stopAll(){return this.videoPlayers.forEach((I,g)=>{this.stop(g)})}destroy(){this.videoPlayers.forEach((I,g)=>{this.stop(g),I.removeAllListeners(),this.videoPlayers.delete(g)}),super.destroy()}}class B9A extends oz{constructor(I,g,C,Q){super(I,g,R(R({},Q),{},{mediaType:Vs.VIDEO})),P(this,"videoPlayers",new Map),P(this,"_stream",void 0),P(this,"_observingPlayer",void 0),this._stream=C}get observingPlayerId(){var I;return(I=this._observingPlayer)===null||I===void 0?void 0:I.playerId}getSizeByPlayer(){let I=0,g=0;return this.videoPlayers.forEach(C=>{var Q;(Q=C.domElement)!==null&&Q!==void 0&&Q.videoWidth&&C.domElement.videoHeight&&(I=C.domElement.videoWidth,g=C.domElement.videoHeight)}),{width:I,height:g}}intersection(){const I={};return this.videoPlayers.forEach((g,C)=>{I[C.toString()]=g.isIntersecting}),I}setPlayer(I,g,C,Q){var B,E;const i=(B=g.playerId)!==null&&B!==void 0?B:UQ;let e=this.videoPlayers.get(i);if(g.player!==e){var o;e=g.player,!HB(this.streamIndex)&&e.mirror(this._ctx.getRemoteMirrorType((o=this.trackInfo.streamUserId)!==null&&o!==void 0?o:"",this.streamIndex)),this.videoPlayers.set(i,e),this._handlePlayerStallEvent(e),Q(e,this.isPublic,this.streamIndex)}return this.dummy||this.play(i),(E=e)===null||E===void 0?void 0:E.domElement}mirror(I){this.videoPlayers.forEach(g=>{g.mirror(I)})}dangerousGetPlayer(I){return this.videoPlayers.get(I)}snapshot(){let I;for(const g of this.videoPlayers.values())if(g.played){I=g;break}return Jz(this.preprocessingTrack,I)}stop(I){var g;(g=this.videoPlayers.get(I))===null||g===void 0||g.stop()}stopAll(){this.videoPlayers.forEach((I,g)=>{this.stop(g)})}play(I){if(this._ctx.autoPlayPolicy===Ae.PLAY_MANUALLY)return;const g=this.videoPlayers.get(I);return g==null?void 0:g.playVideo(this)}manuallyPlay(I){const g=this.videoPlayers.get(I);return g!=null&&g.played?g.manuallyPlay():g==null?void 0:g.playVideo(this)}pause(I){var g;return(g=this.videoPlayers.get(I))===null||g===void 0?void 0:g.manuallyPause()}_handlePlayerStallEvent(I){I.on("start_stall_observe",()=>{!this._observingPlayer&&I&&(this._observingPlayer=I,this._stream.startVideoStallObserve(this._observingPlayer))}),I.on("stop_stall_observe",()=>{this._observingPlayer===I&&(this._stream.stopVideoStallObserve(),this._observingPlayer=void 0,this.videoPlayers.forEach(g=>{!this._observingPlayer&&g.played&&(this._observingPlayer=g,this._stream.startVideoStallObserve(g))}))})}destroy(){this.videoPlayers.forEach((I,g)=>{this.stop(g),I.removeAllListeners(),this.videoPlayers.delete(g)}),super.destroy()}}const u9=["play","playing","pause","ended","error","seeking","seeked","waiting","canplay","canplaythrough","durationchange","volumechange","loadedmetadata","loadeddata","loadstart","timeupdate"],E9A={playsinline:"","webkit-playsinline":""},i9A={playsinline:"","webkit-playsinline":"","x5-playsinline":"","x5-video-player-type":"h5","x-webkit-airplay":"allow",preload:"",muted:""};class Pi extends UB.EventEmitter{constructor(I,g,C){super(),P(this,"_containerDom",void 0),P(this,"_videoDom",void 0),P(this,"userId",void 0),P(this,"renderMode",void 0),P(this,"mirrorType",GQ.MIRROR_TYPE_NONE),P(this,"isScreen",void 0),P(this,"isLocal",void 0),P(this,"played",!1),P(this,"_needLoad",!1),P(this,"_emitPlayFailed",!1),P(this,"_videoContainer",void 0),P(this,"_safari15VideoTimer",void 0),P(this,"_monitor",void 0),P(this,"logger",void 0),P(this,"_onLocalTrackMute",void 0),P(this,"_onInterruptionEnd",void 0),P(this,"_needResume",!1),P(this,"_rotate",0),P(this,"_rotateDom",void 0),P(this,"_resizeObserver",void 0),P(this,"_hasManuallyPaused",!1),P(this,"isIntersecting",void 0),P(this,"intersectionObserver",void 0),P(this,"emitVideoEvent",e=>{var o,t;const s={type:"video",rawEvent:e,readyState:((o=this._videoDom)===null||o===void 0?void 0:o.readyState)||0,userId:this.userId,eventName:e.type,currentTime:((t=this._videoDom)===null||t===void 0?void 0:t.currentTime)||0,isScreen:this.isScreen};switch(this.emit("playback_event",s),e.type){case"canplay":this.refreshRenderSize("the video started playing."),this._internalPlay();break;case"loadeddata":this._internalPlay();break;case"playing":this.logger.info("VideoPlayerPlaying","[userId-".concat(this.userId,"] video element playing"));break;case"pause":this.logger.info("VideoPlayerPause","[userId-".concat(this.userId,"] video element pause")),this._needResume&&(this.logger.info("VideoPlayerPause","[userId-".concat(this.userId,"] video element resume")),this._internalPlay(),this._needResume=!1)}}),P(this,"_internalPlay",()=>{var e,o;if(AI(this.engineId,"video _internalPlay",{paused:(e=this._videoDom)===null||e===void 0?void 0:e.paused,hasManuallyPaused:this._hasManuallyPaused}),this._hasManuallyPaused||(o=this._videoDom)===null||o===void 0||!o.paused)return;const t=this._videoDom.play();t!=null&&t.then&&t.then(()=>{var s;this.isLocal&&zrA&&!this._needLoad&&((s=this._videoDom)===null||s===void 0||s.load(),this._needLoad=!0)}).catch(s=>{var v,r,n,a;this._emitPlayFailed||(s.name!=="AbortError"?(this._emitPlayFailed=!0,(v=this._monitor)===null||v===void 0||v.report("rtc_error",{message:"video autoplay failed, userId: ".concat(this.userId,", ").concat(s.name),error_code:TC.AUTOPLAY_FAILED}),this.emit("playback_event",{type:"video",rawEvent:s,readyState:((r=this._videoDom)===null||r===void 0?void 0:r.readyState)||0,userId:this.userId,eventName:"autoplay-error",currentTime:((n=this._videoDom)===null||n===void 0?void 0:n.currentTime)||0,isScreen:this.isScreen})):(a=this._monitor)===null||a===void 0||a.report("rtc_error",{message:"video autoplay failed, userId: ".concat(this.userId,", ").concat(s.name),error_code:TC.AUTOPLAY_FAILED}))})}),this.engineId=I,this.playerId=g;const Q=C.renderDom;this._monitor=tI(I),this.logger=new uA("Player",0,I);const{userId:B}=C,E=C.isScreen?Fe.RENDER_MODE_FIT:Fe.RENDER_MODE_HIDDEN;this.renderMode=C.renderMode!==void 0?C.renderMode:E,this._rotate=Number(C.rotation||0);const i=typeof Q=="string"?document.getElementById(Q):Q;if(!i)throw new U(m.CANT_FIND_DOM,"can't find dom");this._videoContainer=document.createElement("div"),this._videoContainer.style.width="100%",this._videoContainer.style.height="100%",this._videoContainer.style.position="relative",this._videoContainer.style.overflow="hidden",this._containerDom=i,this.userId=B,this.isLocal=!!C.isLocal,this.isScreen=!!C.isScreen,this._initVideo(),!this.isLocal||(Js==null?void 0:Js[0])!==15&&mP!==15||(this._safari15VideoTimer=setTimeout(()=>{try{this._videoContainer.style.display="block",setTimeout(()=>{this._videoContainer.style.display="flex"},500)}catch{}},1e3))}_initVideo(){this._videoDom||(this._videoDom=UR("video",{style:{width:"100%",height:"100%"},attributes:i9A}),this._videoDom.id="".concat(this.userId,"_").concat(KE()),this.setRenderMode(this.renderMode),this.mirror(this.mirrorType===GQ.MIRROR_TYPE_RENDER)),this._containerDom.appendChild(this._videoContainer),[90,270].indexOf(this._rotate)>-1?(this._rotateDom=this._createRotationDiv(),this._rotateDom.appendChild(this._videoDom),this._videoContainer.appendChild(this._rotateDom)):(this._rotate===180&&(this._videoContainer.style.transform="rotate(180deg)"),this._videoContainer.appendChild(this._videoDom)),this._initInterSectionObserver(),this._initListeners(),this._onLocalTrackMute=()=>{this._needResume=!0},this._onInterruptionEnd=()=>{this.logger.warn("resume player after iOS interruption"),this._internalPlay()},$B.on(PB.ON_IOS_LOCAL_TRACK_MUTE,this._onLocalTrackMute),$B.on(PB.ON_IOS_LOCAL_TRACK_UNMUTE,this._onInterruptionEnd),$B.on(PB.ON_IOS_INTERRUPTION_END,this._onInterruptionEnd)}_initInterSectionObserver(){!this.intersectionObserver&&typeof IntersectionObserver<"u"&&this._videoDom&&(this.intersectionObserver=new IntersectionObserver(I=>{I[0]&&(this.isIntersecting=I[0].isIntersecting)},{}),this.intersectionObserver.observe(this._videoDom))}_closeIntersectionObserver(){this.intersectionObserver&&this._videoDom&&(this.intersectionObserver.disconnect(),this.intersectionObserver.unobserve(this._videoDom),delete this.intersectionObserver)}_createRotationDiv(){const I=document.createElement("div");return I.style.transform="rotate(".concat(this._rotate,"deg)"),this._rotate!==180&&(I.style.position="absolute",this.refreshRenderSize("init"),window.ResizeObserver&&(this._resizeObserver=new ResizeObserver(()=>{this.refreshRenderSize("the container size has changed.")}),this._resizeObserver.observe(this._containerDom))),I}refreshRenderSize(I){if(this._rotateDom){var g,C;this.logger.print("refreshRenderSize","Because ".concat(I));const Q=Number(window.getComputedStyle(this._containerDom).width.replace("px","")),B=Number(window.getComputedStyle(this._containerDom).height.replace("px","")),E=(g=this._videoDom)===null||g===void 0?void 0:g.videoWidth,i=(C=this._videoDom)===null||C===void 0?void 0:C.videoHeight;if(Q&&B&&i&&E){let e,o;if(this.renderMode===Fe.RENDER_MODE_FILL)e=B,o=Q;else{const t=this.renderMode===Fe.RENDER_MODE_HIDDEN?Math.max(Q/i,B/E):Math.min(Q/i,B/E);e=E*t,o=i*t}this._rotateDom.style.width="".concat(e,"px"),this._rotateDom.style.height="".concat(o,"px"),this._rotateDom.style.left="".concat((Q-e)/2,"px"),this._rotateDom.style.top="".concat((B-o)/2,"px")}}}_initListeners(){this._videoDom&&u9.forEach(I=>{var g;(g=this._videoDom)===null||g===void 0||g.addEventListener(I,this.emitVideoEvent)})}_removeListeners(){this._videoDom&&u9.forEach(I=>{var g;(g=this._videoDom)===null||g===void 0||g.removeEventListener(I,this.emitVideoEvent)})}setRenderMode(I){this.renderMode=I,this._videoDom&&(this.renderMode===Fe.RENDER_MODE_FIT?this._videoDom.style.objectFit="contain":this.renderMode===Fe.RENDER_MODE_FILL?this._videoDom.style.objectFit="fill":this._videoDom.style.objectFit="cover")}async playVideo(I){var g,C;let Q=this._videoDom;if(this.logger.info("playVideo","play video track: ".concat(this.userId)),Q&&Q.srcObject instanceof MediaStream&&Q.srcObject.getTrackById((g=I.preprocessingTrack)===null||g===void 0?void 0:g.id)){try{AI(this.engineId,"playVideo","play video repeatedly",0,this.userId)}catch{}return}Q||(this._initVideo(),Q=this._videoDom),this.logger.info("playVideo","play video by dom: ".concat((C=Q)===null||C===void 0?void 0:C.id));const B=new MediaStream;B.addTrack(I.preprocessingTrack),Q.srcObject=B,Q&&!this._containerDom.contains(this._videoContainer)&&this._containerDom.appendChild(this._videoContainer),Q&&!this._videoContainer.contains(Q)&&this._videoContainer.appendChild(Q),setTimeout(()=>this._internalPlay()),YA.VIDEO_STALL&&this.emit(Zw.START_STALL_OBSERVE),this.played=!0}updateSrcObject(I){const g=I.preprocessingTrack;if(!g||!this._videoDom)return;const C=new MediaStream;C.addTrack(g),this._videoDom.srcObject=C}removeTrack(){var I;const g=(I=this._videoDom)===null||I===void 0?void 0:I.srcObject;if(g){const C=g.getVideoTracks();C!=null&&C.length&&C.forEach(Q=>{g.removeTrack(Q)})}}manuallyPlay(){if(this.logger.info("Invoke VideoPlayer.manuallyPlay",this.userId,this.isScreen),this._emitPlayFailed=!1,this._hasManuallyPaused=!1,!this._videoDom)throw new U(m.INVALID_PARAMS,"Player not found");return this._videoDom.readyState!==0||cR?this._videoDom.play():Promise.resolve()}manuallyPause(){if(this.logger.print("Invoke VideoPlayer.manuallyPause",this.userId,this.isScreen),this.played){if(this._hasManuallyPaused=!0,!this._videoDom)throw new U(m.INVALID_PARAMS,"Player not found");return this._videoDom.pause()}}mirror(I){this.logger.info("mirror","".concat(this.userId," set mirror: ").concat(I)),this.mirrorType=I?GQ.MIRROR_TYPE_RENDER:GQ.MIRROR_TYPE_NONE,this._videoDom&&(this._videoDom.style.transform=I?"rotateY(180deg)":"")}stop(){let I=arguments.length>0&&arguments[0]!==void 0&&arguments[0];const{_containerDom:g}=this;var C,Q;this.logger.info("stop","stop video track: ".concat(this.userId," ").concat(this.playerId.toString())),this._videoDom&&(I||(this._videoDom.srcObject=null),g!=null&&g.contains(this._videoContainer)&&g.removeChild(this._videoContainer),(C=this._videoContainer)===null||C===void 0||C.childNodes.forEach(B=>{B!==this._videoDom&&B!==this._rotateDom||this._videoContainer.removeChild(B)}),(Q=this._rotateDom)!==null&&Q!==void 0&&Q.contains(this._videoDom)&&this._rotateDom.removeChild(this._videoDom)),this._hasManuallyPaused=!1,this.played=!1,YA.VIDEO_STALL&&this.emit(Zw.STOP_STALL_OBSERVE),this._closeIntersectionObserver()}destroy(){var I;let g=arguments.length>0&&arguments[0]!==void 0&&arguments[0];this.logger.info("destroy","video player: ".concat(this.userId)),this.stop(g),(I=this._resizeObserver)===null||I===void 0||I.disconnect(),super.removeAllListeners(),this._removeListeners(),$B.off(PB.ON_IOS_LOCAL_TRACK_MUTE,this._onLocalTrackMute),$B.off(PB.ON_IOS_LOCAL_TRACK_UNMUTE,this._onInterruptionEnd),$B.off(PB.ON_IOS_INTERRUPTION_END,this._onInterruptionEnd),this._videoDom&&delete this._videoDom,this._safari15VideoTimer&&(window.clearInterval(this._safari15VideoTimer),this._safari15VideoTimer=void 0)}get domElement(){return this._videoDom}}class FR extends UB.EventEmitter{constructor(I,g){let{divId:C,muted:Q,isScreen:B}=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{divId:void 0,muted:!1,isScreen:!1};if(super(),P(this,"_containerDom",void 0),P(this,"_audioDom",void 0),P(this,"_fakeAudioDom",void 0),P(this,"userId",void 0),P(this,"muted",!1),P(this,"_emitPlayFailed",!1),P(this,"played",!1),P(this,"isScreen",void 0),P(this,"_wechatTimer",void 0),P(this,"_edgeTimer",void 0),P(this,"_monitor",void 0),P(this,"logger",void 0),P(this,"_pasued",!0),P(this,"emitAudioEvent",E=>{var i,e;const o={type:"audio",rawEvent:E,readyState:((i=this._audioDom)===null||i===void 0?void 0:i.readyState)||0,userId:this.userId,eventName:E.type,currentTime:((e=this._audioDom)===null||e===void 0?void 0:e.currentTime)||0};var t;E.type==="playing"&&this.logger.info("AudioPlayerPlaying","[userId-".concat(this.userId,"] audio element playing")),E.type==="pause"&&(this.logger.info("AudioPlayerPause","[userId-".concat(this.userId,"] audio element pause")),!this._pasued&&(t=this._audioDom)!==null&&t!==void 0&&(t=t.srcObject)!==null&&t!==void 0&&t.active&&this._internalPlay()),EE&&cR&&(E.type==="canplay"?(clearTimeout(this._wechatTimer),this._wechatTimer=setTimeout(()=>{this._autoPlayError("wechat")},500)):E.type==="playing"&&clearTimeout(this._wechatTimer)),gl&&frA&&E.type==="error"&&(clearTimeout(this._edgeTimer),this._edgeTimer=setTimeout(()=>{var s;((s=this._audioDom)===null||s===void 0?void 0:s.currentTime)===0&&this._autoPlayError("edge")},500)),this.emit("playback_event",o)}),P(this,"_internalPlay",()=>{var E,i;if(AI(this.engineId,"audio _internalPlay",{paused:(E=this._audioDom)===null||E===void 0?void 0:E.paused,userId:this.userId,screen:this.isScreen}),(i=this._audioDom)!==null&&i!==void 0&&i.paused)try{var e;let t=this._audioDom.play();const s=MQ.getAudioContextInstance();if(s.state==="suspended"){const v=s.resume(),r=setTimeout(()=>{var n;s.state==="suspended"&&(this._autoPlayError("AudioContext cannot resume"),(n=this._monitor)===null||n===void 0||n.report("rtc_error",{message:"audio autoplay failed, userId: ".concat(this.userId,": Cannot resume the AudioContext - timeout"),error_code:TC.AUTOPLAY_FAILED})),clearTimeout(r)});v.catch(n=>{var a;this._autoPlayError("AudioContext cannot resume"),(a=this._monitor)===null||a===void 0||a.report("rtc_error",{message:"audio autoplay failed, userId: ".concat(this.userId,": Cannot resume the AudioContext - rejected by: [").concat(n==null?void 0:n.name,"]").concat(n==null?void 0:n.message),error_code:TC.AUTOPLAY_FAILED})}).finally(()=>{clearTimeout(r)})}(e=t)!==null&&e!==void 0&&e.then&&(EE&&gl&&(t=t.then(()=>new Promise(v=>{setTimeout(async()=>{var r;(r=this._audioDom)===null||r===void 0||r.pause(),this._audioDom.volume=1,await this._audioDom.play(),v()},500)}))),t.then(()=>{AI(this.engineId,"_internalPlay successfully",{userId:this.userId,screen:this.isScreen}),this._pasued=!1}).catch(v=>{var r;this._autoPlayError(v),(r=this._monitor)===null||r===void 0||r.report("rtc_error",{message:"audio autoplay failed, userId: ".concat(this.userId,": ").concat(v.message," ").concat(v.name),error_code:TC.AUTOPLAY_FAILED})}))}catch(t){var o;this._autoPlayError(t),(o=this._monitor)===null||o===void 0||o.report("rtc_error",{message:"audio autoplay failed, userId: ".concat(this.userId,": ").concat(t.message," ").concat(t.name),error_code:TC.AUTOPLAY_FAILED})}}),this.engineId=I,C){const E=document.getElementById(C);if(!E)throw new U(m.CANT_FIND_DOM,"can't find dom");this._containerDom=E}else this._containerDom=document.body;this.userId=g,this.muted=Q,this.isScreen=B,this._monitor=tI(I),this.logger=new uA("Player",0,I),this._initAudio()}_initAudio(){this._audioDom||(this._audioDom=UR("audio",{style:{display:"none"},attributes:E9A}),this._audioDom.volume=this.muted?0:1,this._audioDom.muted=this.muted,this._audioDom.id="".concat(this.userId,"_").concat(KE()),this._containerDom.appendChild(this._audioDom)),this._initListeners()}_initListeners(){this._audioDom&&u9.forEach(I=>{var g;(g=this._audioDom)===null||g===void 0||g.addEventListener(I,this.emitAudioEvent)})}_removeListeners(){this._audioDom&&(u9.forEach(I=>{var g;(g=this._audioDom)===null||g===void 0||g.removeEventListener(I,this.emitAudioEvent)}),this._audioDom.removeEventListener("canplay",this._internalPlay),this._audioDom.removeEventListener("loadeddata",this._internalPlay))}async playAudio(I){var g,C,Q;this.logger.info("playAudio","play audio track: ".concat(this.userId));let B=this._audioDom;if(B&&B.srcObject instanceof MediaStream&&B.srcObject.getTrackById((g=I.preprocessingTrack)===null||g===void 0?void 0:g.id))return;B||(this._initAudio(),B=this._audioDom);const E=new MediaStream;I instanceof YR&&(this._fakeAudioDom=new Audio,this._fakeAudioDom.muted=!0,this._fakeAudioDom.srcObject=new MediaStream([I.originTrack])),E.addTrack(I.preprocessingTrack),EE&&gl&&(this._audioDom.volume=0),B.srcObject=E,(C=B)===null||C===void 0||C.addEventListener("canplay",this._internalPlay),(Q=B)===null||Q===void 0||Q.addEventListener("loadeddata",this._internalPlay),setTimeout(()=>this._internalPlay()),this.played=!0}_autoPlayError(I){var g,C;this._emitPlayFailed||(this._emitPlayFailed=!0,this.emit("playback_event",{type:"audio",rawEvent:I,readyState:((g=this._audioDom)===null||g===void 0?void 0:g.readyState)||0,userId:this.userId,eventName:"autoplay-error",currentTime:((C=this._audioDom)===null||C===void 0?void 0:C.currentTime)||0}))}pause(){if(!this._audioDom)throw new U(m.INVALID_PARAMS,"Player not found");this._pasued=!0,this._audioDom.pause()}manuallyPause(){return this.pause()}manuallyPlay(){var I;if(this.logger.info("Invoke AudioPlayer.manuallyPlay"),this._emitPlayFailed=!1,!this._audioDom)throw new U(m.INVALID_PARAMS,"Player not found");if(!this.played)return Promise.resolve();this._audioDom.volume=1,this._audioDom.muted=!1,(I=this._fakeAudioDom)===null||I===void 0||I.play();const g=[],C=this._audioDom.play();C!=null&&C.then&&g.push(C);const Q=MQ.getAudioContextInstance();if(Q.state==="suspended"){const B=Q.resume();B!=null&&B.then&&g.push(B)}(g.length>0?Promise.all(g):Promise.resolve(C)).then(()=>{this._pasued=!1})}async setPlaybackDevice(I){this.logger.info("setPlaybackDevice","setPlaybackDevice: ".concat(I)),(await Xg.enumerateAudioPlaybackDevices()).map(g=>g.deviceId).includes(I)&&this._audioDom&&this._audioDom.setSinkId&&await this._audioDom.setSinkId(I)}stop(){const{_containerDom:I}=this;this.logger.info("stopAudio","stop audio track: ".concat(this.userId)),this._audioDom&&(this._audioDom.srcObject=null,I!=null&&I.contains(this._audioDom)&&I.removeChild(this._audioDom)),this._fakeAudioDom&&(this._fakeAudioDom.srcObject=null,this._fakeAudioDom=void 0),this.played=!1}get domElement(){return this._audioDom}destroy(){this.logger.info("destroy","audio player: ".concat(this.userId)),this.stop(),super.removeAllListeners(),this._removeListeners(),this._audioDom&&(this._audioDom.srcObject=null,delete this._audioDom),this._edgeTimer&&clearTimeout(this._edgeTimer)}}class Wz{constructor(){P(this,"_ac",void 0),P(this,"_sourceNode",void 0),P(this,"_gainNode",void 0),P(this,"_destNode",void 0),this._ac=MQ.getAudioContextInstance(),this._gainNode=this._ac.createGain(),this._destNode=this._ac.createMediaStreamDestination(),this._gainNode.connect(this._destNode)}setVolume(I){this._gainNode.gain.value=I/100}getVolume(){return Math.round(100*this._gainNode.gain.value)}updateInputTrack(I){this._sourceNode&&(this._sourceNode.mediaStream.getTracks().forEach(C=>{C.stop()}),delete this._sourceNode);const g=new MediaStream;g.addTrack(I),this._sourceNode=this._ac.createMediaStreamSource(g),this._sourceNode.connect(this._gainNode)}getOutputTrack(){return this._destNode.stream.getTracks()[0]}destroy(){var I,g;(I=this._sourceNode)===null||I===void 0||I.mediaStream.getTracks().forEach(C=>{C.stop()}),mP!==13&&this._destNode.stream.getTracks().forEach(C=>{C.stop()}),(g=this._sourceNode)===null||g===void 0||g.disconnect(),this._gainNode.disconnect(),delete this._sourceNode}}class Do extends ez{constructor(I,g,C){super(I,g,R(R({},C),{},{mediaType:Vs.AUDIO})),P(this,"audioCaptureConfig",void 0),P(this,"_ap",void 0),P(this,"mixedAudioTrack",void 0),P(this,"mixType",JQ.PLAYOUT_AND_PUBLISH),P(this,"_audioFetchMap",new Map),P(this,"_audioDataFetcher",void 0),P(this,"_localPlaybackTrack",void 0),P(this,"notSupportedWebAudio",!1)}get withWebAudio(){return!!this._ap}getAudioLevel(){var I;let g=arguments.length>0&&arguments[0]!==void 0?arguments[0]:i9.MICROPHONE;const C=g===i9.AUDIOMIXING&&this.mixType!==JQ.PLAYOUT&&(I=this.mixedAudioTrack)!==null&&I!==void 0?I:this.preprocessingTrack;let Q=this._audioFetchMap.get(g);var B;return Q&&Q.currentTrackId===C.id||((B=Q)===null||B===void 0||B.destroy(),Q=new SR(C),this._audioFetchMap.set(g,Q)),Q.getAudioLevel()}async updateAudioCaptureConfig(){this.audioCaptureConfig&&(this.logger.print("updateAudioCaptureConfig","update localAudioTrack: ",this.audioCaptureConfig),await this.originTrack.applyConstraints(this.audioCaptureConfig))}setVolume(I){const g=!lA("SKIP_WEB_AUDIO_IN_TRACK")&&(rz()||lA("ENFORCE_WEB_AUDIO_SUPPORTED"));g||(this.notSupportedWebAudio=!0);const C=!this.withWebAudio&&I!==100;try{g&&C&&(this.logger.print("Create AudioProcess"),this._ap=new Wz,this._ap.updateInputTrack(this.originTrack),this.mediaTrack=this._ap.getOutputTrack())}catch{this.logger.warn("WebAudio may not supported, quired return"),this.notSupportedWebAudio=!0}var Q;this.notSupportedWebAudio||(Q=this._ap)===null||Q===void 0||Q.setVolume(I),g&&C&&this.emit("needReplaceTrack",this)}getVolume(){return this._ap?this._ap.getVolume():100}setUserId(I){this.trackInfo.streamUserId=I}setDataFetcher(I,g){this.logger.info("setDataFetcher","frameSize %s",I),MQ.isWorkletReady!==null?this._audioDataFetcher?this._audioDataFetcher.setFrameSize(I):(this._audioDataFetcher=new TR(this.preprocessingTrack,I),this._audioDataFetcher.on("data",g)):this.logger.info("setDataFetcher","audioContextManager.isWorkletReady is null")}stopDataFetcher(){var I,g;(I=this._audioDataFetcher)===null||I===void 0||I.removeAllListeners("data"),(g=this._audioDataFetcher)===null||g===void 0||g.destroy(),this._audioDataFetcher=void 0}play(I){var g,C;this._localPlaybackTrack&&this.stop();const Q=I===QC.AFTER_CAPTURE?this.originTrack:I===QC.AFTER_PROCESS?this.preprocessingTrack:void 0;if(!Q)return void this.logger.error("play()","no target track for %s",I);this._localPlaybackTrack=new YR(this._ctx,Q.clone(),R({},this.trackInfo));const B=this._ctx.earMonitorSettings[(g=this.streamIndex)!==null&&g!==void 0?g:F.STREAM_INDEX_MAIN].volume;this.setPlaybackVolume(B);const E=new FR(this._ctx.id,(C=this.trackInfo.streamUserId)!==null&&C!==void 0?C:"",{isScreen:this.streamIndex===F.STREAM_INDEX_SCREEN,muted:!1});return E.on("playback_event",i=>{var e;i.eventName==="autoplay-error"&&this.emit("autoplay-error",{kind:"audio",streamIndex:(e=this.streamIndex)!==null&&e!==void 0?e:F.STREAM_INDEX_MAIN,mediaType:Vs.AUDIO})}),this._localPlaybackTrack.setPlayer(E),this._localPlaybackTrack.play()}stop(){var I;(I=this._localPlaybackTrack)===null||I===void 0||I.destroy(),this._localPlaybackTrack=void 0}setPlaybackVolume(I){var g;return(g=this._localPlaybackTrack)===null||g===void 0?void 0:g.setVolume(I)}destroy(){var I,g;this._audioFetchMap.forEach(C=>C.destroy()),this._audioFetchMap.clear(),(I=this._ap)===null||I===void 0||I.destroy(),(g=this._audioDataFetcher)===null||g===void 0||g.destroy(),this._audioDataFetcher=void 0,this.stop(),super.destroy()}}class YR extends oz{constructor(I,g,C){super(I,g,R(R({},C),{},{mediaType:Vs.AUDIO})),P(this,"_ap",void 0),P(this,"_audioPlayer",void 0),P(this,"_audioLevelFetcher",void 0),P(this,"_audioDataFetcher",void 0),P(this,"notSupportedWebAudio",!1)}get withWebAudio(){return!!this._ap}getAudioLevel(){return this._audioLevelFetcher||(this._audioLevelFetcher=new SR(this.originTrack)),this._audioLevelFetcher.getAudioLevel()}setVolume(I){const g=!lA("SKIP_WEB_AUDIO_IN_TRACK")&&(rz()||lA("ENFORCE_WEB_AUDIO_SUPPORTED"));g||(this.notSupportedWebAudio=!0);const C=!this.withWebAudio&&I!==100;try{g&&C&&(this.logger.print("Create AudioProcess"),this._ap=new Wz,this._ap.updateInputTrack(this.originTrack),this.mediaTrack=this._ap.getOutputTrack())}catch{this.logger.warn("WebAudio may not supported, quite return"),this.notSupportedWebAudio=!0}if(this.notSupportedWebAudio){var Q;const i=(Q=this._audioPlayer)===null||Q===void 0?void 0:Q.domElement;i&&(i.volume=Math.min(I/100,1))}else{var B;(B=this._ap)===null||B===void 0||B.setVolume(I)}var E;g&&C&&(this.emit("needReplaceTrack",this),(E=this._audioPlayer)===null||E===void 0||E.playAudio(this))}getVolume(){var I,g;return this.notSupportedWebAudio?100*((I=(g=this._audioPlayer)===null||g===void 0||(g=g.domElement)===null||g===void 0?void 0:g.volume)!==null&&I!==void 0?I:1):this._ap?this._ap.getVolume():100}setPlaybackDevice(I){var g;return(g=this._audioPlayer)===null||g===void 0?void 0:g.setPlaybackDevice(I)}setPlayer(I){this._audioPlayer=I}havePlayer(){return!!this._audioPlayer}bindPlayerEvent(I){var g;this._audioPlayer&&I(this._audioPlayer,this.isPublic,(g=this.streamIndex)!==null&&g!==void 0?g:F.STREAM_INDEX_MAIN)}pause(){var I;return(I=this._audioPlayer)===null||I===void 0?void 0:I.pause()}play(){var I;return(I=this._audioPlayer)===null||I===void 0?void 0:I.playAudio(this)}manuallyPlay(){var I,g,C;return(I=this._audioPlayer)!==null&&I!==void 0&&I.played?(g=this._audioPlayer)===null||g===void 0?void 0:g.manuallyPlay():(C=this._audioPlayer)===null||C===void 0?void 0:C.playAudio(this)}manuallyPause(){var I;return(I=this._audioPlayer)===null||I===void 0?void 0:I.manuallyPause()}stop(){var I;return(I=this._audioPlayer)===null||I===void 0?void 0:I.stop()}setDataFetcher(I,g){this.logger.info("setDataFetcher","frameSize %s",I),MQ.isWorkletReady!==null?this._audioDataFetcher?this._audioDataFetcher.setFrameSize(I):(this._audioDataFetcher=new TR(this.originTrack,I),this._audioDataFetcher.on("data",g)):this.logger.warn("setDataFetcher","audioContextManager.isWorkletReady is null")}stopDataFetcher(){var I;this.logger.info("stopDataFetcher"),(I=this._audioDataFetcher)===null||I===void 0||I.destroy(),this._audioDataFetcher=void 0}destroy(){var I,g,C;(I=this._audioLevelFetcher)===null||I===void 0||I.destroy(),(g=this._audioDataFetcher)===null||g===void 0||g.destroy(),this._audioDataFetcher=void 0,this._ap&&this._ap.destroy(),(C=this._audioPlayer)===null||C===void 0||C.destroy(),this._audioPlayer=void 0,super.destroy()}}const e9A=new uA("VERTC",0);let Kw,tr=null;const o9A=()=>!!Vz();function Vz(){if(tr)return tr;try{tr=window.require("electron");const{ipcRenderer:A}=tr;return Kw={getSources:I=>A.invoke("DESKTOP_CAPTURER_GET_SOURCES",I)},tr}catch{return null}}async function zz(A,I,g){let C;return I||(I={width:1920,height:1080,frameRate:15}),C=g?{audio:{mandatory:{chromeMediaSource:"desktop"}},video:{mandatory:{chromeMediaSource:"desktop",maxHeight:I.height,maxWidth:I.width,maxFrameRate:I.frameRate}}}:{audio:!1,video:{mandatory:{chromeMediaSource:"desktop",chromeMediaSourceId:A,maxHeight:I.height,maxWidth:I.width,maxFrameRate:I.frameRate}}},e9A.info("getUserMediaConfig",JSON.stringify(C)),await navigator.mediaDevices.getUserMedia(C)}async function Mz(A){let I=["window","screen"];if(A==="window"&&(I=["window"]),A==="screen"&&(I=["screen"]),!Vz())throw new U(m.ERR_ELECTRON_IS_NULL,"Unable to get Electron object");let g=null;try{g=Kw.getSources({types:I})}catch{g=null}g&&g.then||(g=new Promise((C,Q)=>{Kw.getSources({types:I},(B,E)=>{B?Q(B):C(E)})}));try{return await g}catch(C){throw new U(m.ERR_ELECTRON_IS_NULL,C.toString())}}function t9A(A){return new Promise((I,g)=>{const C=document.createElement("div");C.innerText="share screen",C.setAttribute("style","text-align: center; height: 25px; line-height: 25px; border-radius: 4px 4px 0 0; background: #D4D2D4; border-bottom: solid 1px #B9B8B9;");const Q=document.createElement("div");Q.setAttribute("style","width: 100%; height: 500px; padding: 15px 25px ; box-sizing: border-box;");const B=document.createElement("div");B.innerText="Web Screensharing wants to share the contents of your screen. Choose what you'd like to share.",B.setAttribute("style","height: 12%;");const E=document.createElement("div");E.setAttribute("style","width: 100%; height: 80%; background: #FFF; border: solid 1px #CBCBCB; display: flex; flex-wrap: wrap; justify-content: space-around; overflow-y: scroll; padding: 0 15px; box-sizing: border-box;");const i=document.createElement("div");i.setAttribute("style","text-align: right; padding: 16px 0;");const e=document.createElement("button");e.innerHTML="cancel",e.setAttribute("style","width: 85px;"),e.onclick=()=>{document.body.removeChild(o);const t=new Error("NotAllowedError");t.name="NotAllowedError",g(t)},i.appendChild(e),Q.appendChild(B),Q.appendChild(E),Q.appendChild(i);const o=document.createElement("div");o.setAttribute("style","position: fixed; z-index: 99999999; top: 50%; left: 50%; width: 620px; height: 525px; background: #ECECEC; border-radius: 4px; -webkit-transform: translate(-50%,-50%); transform: translate(-50%,-50%);"),o.appendChild(C),o.appendChild(Q),document.body.appendChild(o),A.map(t=>{if(t.id){const s=document.createElement("div");s.setAttribute("style","width: 30%; height: 160px; padding: 20px 0; text-align: center;box-sizing: content-box;"),s.innerHTML=`
`).concat(t.name,` `),s.onclick=()=>{document.body.removeChild(o),I(t.id)},E.appendChild(s)}})})}async function s9A(A,I){const g=await Mz(),C=await t9A(g);return await zz(C,A,I)}async function v9A(A,I){const g=new No(A,I,{streamIndex:LI.MAIN,sourceType:oI.INTERNAL,isDummy:!0});return await g.isTrackReady,g}async function r9A(A,I){const g=new No(A,I,{isDummy:!0,streamIndex:LI.SCREEN,sourceType:oI.INTERNAL});return await g.isTrackReady,g}async function jc(A,I){var g;let C;const Q=((g=(I=I||A.videoProfile.getCaptureConfig()).deviceId)===null||g===void 0?void 0:g.exact)||"default",B=tC(),E=new uA("TrackFactory",0,A.id);try{var i,e,o;E.info("createCameraVideoTrack","constraints:",I),(i=A.monitor)===null||i===void 0||i.report("rtc_video_capture_event",{event_type:"start",media_device_id:Q,capture_session_id:B});const r=aA();mI&&(I.frameRate={ideal:30,max:30}),C=await Xg.getUserMedia({video:I}),(e=A.monitor)===null||e===void 0||e.report("rtc_video_capture_event",{event_type:"start_capture_result",media_device_id:Q,media_device_name:((o=C.getVideoTracks()[0])===null||o===void 0?void 0:o.label)||"",reason:"success",elapse:aA()-r,capture_session_id:B})}catch(r){var t;throw(t=A.monitor)===null||t===void 0||t.report("rtc_video_capture_event",{event_type:"running_failed",media_device_id:Q,error_code:r.code,reason:r.name+r.message,capture_session_id:B}),new U(m.GET_VIDEO_TRACK_FAILED,"throw error from getUserMedia. [".concat(r.name||"unknown name","]: ").concat(r.message||"unknown message","."),r)}const s=C.getVideoTracks()[0],v=new No(A,s,{streamIndex:LI.MAIN,sourceType:oI.INTERNAL,captureSessionId:B});return await v.isTrackReady,v}async function Jw(A,I){var g;let C;new uA("TrackFactory",0,A.id).info("createMicrophoneAudioTrack","constraints:",I);const Q=((g=I.deviceId)===null||g===void 0?void 0:g.exact)||"default",B=tC();try{var E,i,e;(E=A.monitor)===null||E===void 0||E.report("rtc_audio_device_event",{device_type:"audio_record",event_type:"start_begin",media_device_id:Q,event_session_id:B});const v=aA();A.extensionManager.getPluginByName(ws.PRE_PROCESSING,"RTCAIAnsExtension")&&(I.autoGainControl=!0,I.noiseSuppression=!1),C=await Xg.getUserMedia({audio:I}),(i=A.monitor)===null||i===void 0||i.report("rtc_audio_device_event",{device_type:"audio_record",event_type:"start_result",media_device_id:Q,media_device_name:((e=C.getAudioTracks()[0])===null||e===void 0?void 0:e.label)||"",reason:"success",elapse:aA()-v,event_session_id:B})}catch(v){var o;throw(o=A.monitor)===null||o===void 0||o.report("rtc_audio_device_event",{device_type:"audio_record",event_type:"start_end",media_device_id:Q,error_code:v.code,reason:v.name+v.message,event_session_id:B}),new U(m.GET_AUDIO_TRACK_FAILED,"throw error from getUserMedia. [".concat(v.name||"unknown name","]: ").concat(v.message||"unknown message","."),v)}const t=C.getAudioTracks()[0],s=new Do(A,t,{streamIndex:LI.MAIN,sourceType:oI.INTERNAL,captureSessionId:B});return await s.isTrackReady,s}async function a9A(A,I,g){var C,Q;let B;new uA("TrackFactory",0,A.id).print("createCameraAndMicrophoneTrack","audioConstraints:",I,"videoConstraints:",g);const E=((C=I.deviceId)===null||C===void 0?void 0:C.exact)||"default",i=((Q=g.deviceId)===null||Q===void 0?void 0:Q.exact)||"default",e=tC(),o=tC();try{var t,s,v,r,n,a;(t=A.monitor)===null||t===void 0||t.report("rtc_video_capture_event",{event_type:"start",media_device_id:i,capture_session_id:e}),(s=A.monitor)===null||s===void 0||s.report("rtc_audio_device_event",{device_type:"audio_record",event_type:"start_begin",media_device_id:E,event_session_id:o});const w=aA();mI&&(g.frameRate={ideal:30,max:30}),A.extensionManager.getPluginByName(ws.PRE_PROCESSING,"RTCAIAnsExtension")&&(I.autoGainControl=!0,I.noiseSuppression=!1),B=await Xg.getUserMedia({audio:I,video:g}),(v=A.monitor)===null||v===void 0||v.report("rtc_video_capture_event",{event_type:"start_capture_result",media_device_id:i,media_device_name:((r=B.getVideoTracks()[0])===null||r===void 0?void 0:r.label)||"",reason:"success",elapse:aA()-w,capture_session_id:e}),(n=A.monitor)===null||n===void 0||n.report("rtc_audio_device_event",{device_type:"audio_record",event_type:"start_result",media_device_id:E,media_device_name:((a=B.getAudioTracks()[0])===null||a===void 0?void 0:a.label)||"",reason:"success",elapse:aA()-w,event_session_id:o})}catch(w){var c,d;throw(c=A.monitor)===null||c===void 0||c.report("rtc_video_capture_event",{event_type:"running_failed",media_device_id:i,error_code:w.code,reason:w.name+w.message,capture_session_id:e}),(d=A.monitor)===null||d===void 0||d.report("rtc_audio_device_event",{device_type:"audio_record",event_type:"start_end",media_device_id:E,error_code:w.code,reason:w.name+w.message,event_session_id:o}),new U(m.GET_VIDEO_TRACK_FAILED,"throw error from getUserMedia. [".concat(w.name||"unknown name","]: ").concat(w.message||"unknown message","."),w)}const l=B.getVideoTracks()[0],h=new No(A,l,{streamIndex:LI.MAIN,sourceType:oI.INTERNAL,captureSessionId:e}),D=B.getAudioTracks()[0],u=new Do(A,D,{streamIndex:LI.MAIN,sourceType:oI.INTERNAL,captureSessionId:o});return await Promise.all([h.isTrackReady,u.isTrackReady]),{videoTrack:h,audioTrack:u}}async function P9A(A,I){const g=new uA("TrackFactory",0,A.id);let C,Q=A.videoProfile.getScreenEncodeConfig();g.info("createScreenTracks","screenConfig: %o, constraints: %o",I,Q);const B=tC(),{enableAudio:E=!1,displaySurface:i,systemAudio:e,surfaceSwitching:o,selfBrowserSurface:t,sourceId:s}=I,v={};i&&["monitor","browser","window"].includes(i)&&(Q?Q.displaySurface=i:Q={displaySurface:i}),e&&["include","exclude"].includes(e)&&(v.systemAudio=e),o&&["include","exclude"].includes(o)&&(v.surfaceSwitching=o),t&&["include","exclude"].includes(t)&&(v.selfBrowserSurface=t);try{var r,n,a,c;(r=A.monitor)===null||r===void 0||r.report("rtc_video_capture_event",{event_type:"start",media_device_id:"screen",capture_session_id:B});const u=aA();C=o9A()?s?await zz(s,Q,E):await s9A(Q,E):await navigator.mediaDevices.getDisplayMedia(R({video:!(Q&&(!CQ||tV!=="16.1"))||Q,audio:!!E&&{channelCount:2,noiseSuppression:!1,echoCancellation:!0,autoGainControl:!1}},v)),(n=A.monitor)===null||n===void 0||n.report("rtc_video_capture_event",{event_type:"start_capture_result",media_device_id:"screen",media_device_name:"".concat(((a=C.getVideoTracks()[0])===null||a===void 0?void 0:a.label)||"",", ").concat(((c=C.getAudioTracks()[0])===null||c===void 0?void 0:c.label)||""),reason:"success",elapse:aA()-u,capture_session_id:B})}catch(u){var d;throw(d=A.monitor)===null||d===void 0||d.report("rtc_video_capture_event",{event_type:"running_failed",media_device_id:"screen",error_code:u.code,reason:u.name+u.message,capture_session_id:B}),new U(m.GET_SCREEN_TRACK_FAILED,"throw error from getDisplayMedia",u)}const l=C.getVideoTracks()[0],h=new No(A,l,{streamIndex:LI.SCREEN,sourceType:oI.INTERNAL,captureSessionId:B}),D=C.getAudioTracks()[0];if(C.getAudioTracks().length){const u=new Do(A,D,{streamIndex:LI.SCREEN,sourceType:oI.INTERNAL,captureSessionId:B});return await Promise.all([h.isTrackReady,u.isTrackReady]),[h,u]}return await h.isTrackReady,[h,void 0]}function c9A(A,I,g,C){return new B9A(A,I,g,R({},C))}function Xz(A,I,g){return new YR(A,I,R({},g))}async function n9A(A,I){const g=new No(A,I,{streamIndex:LI.MAIN,sourceType:oI.EXTERNAL});return await g.isTrackReady,g}async function l9A(A,I){const g=new Do(A,I,{streamIndex:LI.MAIN,sourceType:oI.EXTERNAL});return await g.isTrackReady,g}async function d9A(A,I){const g=new No(A,I,{sourceType:oI.EXTERNAL,streamIndex:LI.SCREEN});return await g.isTrackReady,g}async function h9A(A,I){const g=new Do(A,I,{sourceType:oI.EXTERNAL,streamIndex:LI.SCREEN});return await g.isTrackReady,g}const jz="IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2NvbnN0IHQ9e2dldE5BTFVuaXRzKGUpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07aWYoZS5sZW5ndGgtZS5wb3NpdGlvbjw0KXJldHVybltdO2NvbnN0e3Bvc2l0aW9uOnJ9PWU7cmV0dXJuIDE9PT1lLmdldEludDMyKHIpfHwwPT09ZS5nZXRJbnQxNihyKSYmMT09PWUuZ2V0SW50OChyKzIpP3QuZ2V0QW5uZXhiTmFscyhlLG4pOnQuZ2V0QXZjY05hbHMoZSxuKX0sZ2V0QW5uZXhiTmFscyhlLG4pe2NvbnN0IHI9W107bGV0IGk9dC5nZXRIZWFkZXJQb3NpdGlvbkFubmV4QihlKSxvPWkucG9zLGE9bztmb3IoO288ZS5sZW5ndGgtNDspe2NvbnN0IHM9bmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIuc2xpY2UobyxvK2kuaGVhZGVyTGVuZ3RoKSk7aS5wb3M9PT1lLnBvc2l0aW9uJiZlLnNraXAoaS5oZWFkZXJMZW5ndGgpLGk9dC5nZXRIZWFkZXJQb3NpdGlvbkFubmV4QihlKSxhPWkucG9zO2NvbnN0IGM9e2hlYWRlcjpzLGJvZHk6bmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIuc2xpY2UobytzLmJ5dGVMZW5ndGgsYSkpLHR5cGU6LTF9O24/dC5hbmFseXNlSDI2NU5hbChjKTp0LmFuYWx5c2VOYWwoYyksKGMudHlwZTw9OXx8biYmYy50eXBlPD00MCkmJjAhPT1jLnR5cGUmJnIucHVzaChjKSxlLnNraXAoYS1lLnBvc2l0aW9uKSxvPWF9cmV0dXJuIHJ9LGdldEF2Y2NOYWxzKGUsbil7Y29uc3Qgcj1bXTtmb3IoO2UucG9zaXRpb248ZS5sZW5ndGgtNDspe2NvbnN0IGk9ZS5nZXRJbnQzMihlLnBvc2l0aW9uKTtpZighKGUubGVuZ3RoLWUucG9zaXRpb24+PWkpKWJyZWFrO3tjb25zdCBvPW5ldyBVaW50OEFycmF5KGUuYnVmZmVyLnNsaWNlKGUucG9zaXRpb24sZS5wb3NpdGlvbis0KSk7ZS5za2lwKDQpO2NvbnN0IGE9bmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIuc2xpY2UoZS5wb3NpdGlvbixlLnBvc2l0aW9uK2kpKTtlLnNraXAoaSk7Y29uc3Qgcz17aGVhZGVyOm8sYm9keTphLHR5cGU6LTF9O24/dC5hbmFseXNlSDI2NU5hbChzKTp0LmFuYWx5c2VOYWwocykscy50eXBlPD05JiYwIT09cy50eXBlJiZyLnB1c2gocyl9fXJldHVybiByfSxhbmFseXNlTmFsKHQpe2NvbnN0IGU9MzEmdC5ib2R5WzBdO3N3aXRjaCh0LnR5cGU9ZSxlKXtjYXNlIDE6dC5uZHI9ITA7YnJlYWs7Y2FzZSA1OnQuaWRyPSEwO2JyZWFrO2Nhc2UgNjp0LnNlaT0hMDticmVhaztjYXNlIDc6dC5zcHM9ITA7YnJlYWs7Y2FzZSA4OnQucHBzPSEwfX0sYW5hbHlzZUgyNjVOYWwodCl7Y29uc3QgZT0oMTI2JnQuYm9keVswXSk+PjE7c3dpdGNoKHQudHlwZT1lLGUpe2Nhc2UgMzk6Y2FzZSA0MDp0LnNlaT0hMH19LGdldEhlYWRlclBvc2l0aW9uQW5uZXhCKHQpe2xldCBlPXQucG9zaXRpb24sbj0wO2NvbnN0IHI9dC5sZW5ndGg7Zm9yKDszIT09biYmNCE9PW4mJmU8ci00OykwPT09dC5nZXRJbnQxNihlKT8xPT09dC5nZXRJbnQxNihlKzIpP249NDoxPT09dC5nZXRJbnQ4KGUrMik/bj0zOmUrKzplKys7cmV0dXJuIGU9PT1yLTQmJigwPT09dC5nZXRJbnQxNihlKT8xPT09dC5nZXRJbnQxNihlKzIpP249NDplPXI6KGUrKywwPT09dC5nZXRJbnQxNihlKSYmMT09PXQuZ2V0SW50OChlKT9uPTM6ZT1yKSkse3BvczplLGhlYWRlckxlbmd0aDpufX0saXNIMjY1VmlkZW9GcmFtZSh0KXt2YXIgZTtyZXR1cm4oKG51bGw9PT0oZT10LmdldE1ldGFkYXRhKXx8dm9pZCAwPT09ZXx8bnVsbD09PShlPWUuY2FsbCh0KSl8fHZvaWQgMD09PWU/dm9pZCAwOmUubWltZVR5cGUpfHwiIikudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygiaDI2NSIpfX07dmFyIGU9InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjp7fTtmdW5jdGlvbiBuKHQpe3JldHVybiB0JiZ0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LCJkZWZhdWx0Iik/dC5kZWZhdWx0OnR9dmFyIHI9e2V4cG9ydHM6e319LGk9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJnQuTWF0aD09PU1hdGgmJnR9LG89aSgib2JqZWN0Ij09dHlwZW9mIGdsb2JhbFRoaXMmJmdsb2JhbFRoaXMpfHxpKCJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cpfHxpKCJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZil8fGkoIm9iamVjdCI9PXR5cGVvZiBlJiZlKXx8aSgib2JqZWN0Ij09dHlwZW9mIGUmJmUpfHxmdW5jdGlvbigpe3JldHVybiB0aGlzfSgpfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLGE9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiEhdCgpfWNhdGNoKGUpe3JldHVybiEwfX0scz0hYSgoZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbigpe30uYmluZCgpO3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0fHx0Lmhhc093blByb3BlcnR5KCJwcm90b3R5cGUiKX0pKSxjPXMsbD1GdW5jdGlvbi5wcm90b3R5cGUsdT1sLmFwcGx5LGg9bC5jYWxsLGY9Im9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiZSZWZsZWN0LmFwcGx5fHwoYz9oLmJpbmQodSk6ZnVuY3Rpb24oKXtyZXR1cm4gaC5hcHBseSh1LGFyZ3VtZW50cyl9KSxkPXMsXz1GdW5jdGlvbi5wcm90b3R5cGUscD1fLmNhbGwsZz1kJiZfLmJpbmQuYmluZChwLHApLG09ZD9nOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBwLmFwcGx5KHQsYXJndW1lbnRzKX19LHk9bSx2PXkoe30udG9TdHJpbmcpLGI9eSgiIi5zbGljZSksdz1mdW5jdGlvbih0KXtyZXR1cm4gYih2KHQpLDgsLTEpfSxrPXcsUz1tLE89ZnVuY3Rpb24odCl7aWYoIkZ1bmN0aW9uIj09PWsodCkpcmV0dXJuIFModCl9LHg9Im9iamVjdCI9PXR5cGVvZiBkb2N1bWVudCYmZG9jdW1lbnQuYWxsLEE9dm9pZCAwPT09eCYmdm9pZCAwIT09eD9mdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdHx8dD09PXh9OmZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0fSxUPXt9LEU9IWEoKGZ1bmN0aW9uKCl7cmV0dXJuIDchPT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sMSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSlbMV19KSksTD1zLHo9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGwsQj1MP3ouYmluZCh6KTpmdW5jdGlvbigpe3JldHVybiB6LmFwcGx5KHosYXJndW1lbnRzKX0sST17fSxDPXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLE49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixSPU4mJiFDLmNhbGwoezE6Mn0sMSk7SS5mPVI/ZnVuY3Rpb24odCl7dmFyIGU9Tih0aGlzLHQpO3JldHVybiEhZSYmZS5lbnVtZXJhYmxlfTpDO3ZhciBqLEQsUD1mdW5jdGlvbih0LGUpe3JldHVybntlbnVtZXJhYmxlOiEoMSZ0KSxjb25maWd1cmFibGU6ISgyJnQpLHdyaXRhYmxlOiEoNCZ0KSx2YWx1ZTplfX0sVT1hLEY9dyxNPU9iamVjdCxaPW0oIiIuc3BsaXQpLEo9VSgoZnVuY3Rpb24oKXtyZXR1cm4hTSgieiIpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApfSkpP2Z1bmN0aW9uKHQpe3JldHVybiJTdHJpbmciPT09Rih0KT9aKHQsIiIpOk0odCl9Ok0sSD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dH0sVz1ILEs9VHlwZUVycm9yLEc9ZnVuY3Rpb24odCl7aWYoVyh0KSl0aHJvdyBuZXcgSygiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIit0KTtyZXR1cm4gdH0sVj1KLFk9RyxYPWZ1bmN0aW9uKHQpe3JldHVybiBWKFkodCkpfSxxPUEsJD1mdW5jdGlvbih0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQ/bnVsbCE9PXQ6cSh0KX0sUT17fSx0dD1RLGV0PW8sbnQ9QSxydD1mdW5jdGlvbih0KXtyZXR1cm4gbnQodCk/dDp2b2lkIDB9LGl0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9ydCh0dFt0XSl8fHJ0KGV0W3RdKTp0dFt0XSYmdHRbdF1bZV18fGV0W3RdJiZldFt0XVtlXX0sb3Q9bSh7fS5pc1Byb3RvdHlwZU9mKSxhdD1vLm5hdmlnYXRvcixzdD1hdCYmYXQudXNlckFnZW50LGN0PW8sbHQ9c3Q/U3RyaW5nKHN0KToiIix1dD1jdC5wcm9jZXNzLGh0PWN0LkRlbm8sZnQ9dXQmJnV0LnZlcnNpb25zfHxodCYmaHQudmVyc2lvbixkdD1mdCYmZnQudjg7ZHQmJihEPShqPWR0LnNwbGl0KCIuIikpWzBdPjAmJmpbMF08ND8xOisoalswXStqWzFdKSksIUQmJmx0JiYoIShqPWx0Lm1hdGNoKC9FZGdlXC8oXGQrKS8pKXx8alsxXT49NzQpJiYoaj1sdC5tYXRjaCgvQ2hyb21lXC8oXGQrKS8pKSYmKEQ9K2pbMV0pO3ZhciBfdD1ELHB0PV90LGd0PWEsbXQ9by5TdHJpbmcseXQ9ISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYhZ3QoKGZ1bmN0aW9uKCl7dmFyIHQ9U3ltYm9sKCJzeW1ib2wgZGV0ZWN0aW9uIik7cmV0dXJuIW10KHQpfHwhKE9iamVjdCh0KWluc3RhbmNlb2YgU3ltYm9sKXx8IVN5bWJvbC5zaGFtJiZwdCYmcHQ8NDF9KSksdnQ9eXQmJiFTeW1ib2wuc2hhbSYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3IsYnQ9aXQsd3Q9QSxrdD1vdCxTdD1PYmplY3QsT3Q9dnQ/ZnVuY3Rpb24odCl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0fTpmdW5jdGlvbih0KXt2YXIgZT1idCgiU3ltYm9sIik7cmV0dXJuIHd0KGUpJiZrdChlLnByb3RvdHlwZSxTdCh0KSl9LHh0PVN0cmluZyxBdD1mdW5jdGlvbih0KXt0cnl7cmV0dXJuIHh0KHQpfWNhdGNoKGUpe3JldHVybiJPYmplY3QifX0sVHQ9QSxFdD1BdCxMdD1UeXBlRXJyb3IsenQ9ZnVuY3Rpb24odCl7aWYoVHQodCkpcmV0dXJuIHQ7dGhyb3cgbmV3IEx0KEV0KHQpKyIgaXMgbm90IGEgZnVuY3Rpb24iKX0sQnQ9enQsSXQ9SCxDdD1CLE50PUEsUnQ9JCxqdD1UeXBlRXJyb3IsRHQ9e2V4cG9ydHM6e319LFB0PW8sVXQ9T2JqZWN0LmRlZmluZVByb3BlcnR5LEZ0PW8sTXQ9ZnVuY3Rpb24odCxlKXt0cnl7VXQoUHQsdCx7dmFsdWU6ZSxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KX1jYXRjaChuKXtQdFt0XT1lfXJldHVybiBlfSxadD0iX19jb3JlLWpzX3NoYXJlZF9fIixKdD1EdC5leHBvcnRzPUZ0W1p0XXx8TXQoWnQse30pOyhKdC52ZXJzaW9uc3x8KEp0LnZlcnNpb25zPVtdKSkucHVzaCh7dmVyc2lvbjoiMy4zOS4wIixtb2RlOiJwdXJlIixjb3B5cmlnaHQ6IsKpIDIwMTQtMjAyNCBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSIsbGljZW5zZToiaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi92My4zOS4wL0xJQ0VOU0UiLHNvdXJjZToiaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMifSk7dmFyIEh0PUR0LmV4cG9ydHMsV3Q9SHQsS3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4gV3RbdF18fChXdFt0XT1lfHx7fSl9LEd0PUcsVnQ9T2JqZWN0LFl0PWZ1bmN0aW9uKHQpe3JldHVybiBWdChHdCh0KSl9LFh0PVl0LHF0PW0oe30uaGFzT3duUHJvcGVydHkpLCR0PU9iamVjdC5oYXNPd258fGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHF0KFh0KHQpLGUpfSxRdD1tLHRlPTAsZWU9TWF0aC5yYW5kb20oKSxuZT1RdCgxLi50b1N0cmluZykscmU9ZnVuY3Rpb24odCl7cmV0dXJuIlN5bWJvbCgiKyh2b2lkIDA9PT10PyIiOnQpKyIpXyIrbmUoKyt0ZStlZSwzNil9LGllPUt0LG9lPSR0LGFlPXJlLHNlPXl0LGNlPXZ0LGxlPW8uU3ltYm9sLHVlPWllKCJ3a3MiKSxoZT1jZT9sZS5mb3J8fGxlOmxlJiZsZS53aXRob3V0U2V0dGVyfHxhZSxmZT1mdW5jdGlvbih0KXtyZXR1cm4gb2UodWUsdCl8fCh1ZVt0XT1zZSYmb2UobGUsdCk/bGVbdF06aGUoIlN5bWJvbC4iK3QpKSx1ZVt0XX0sZGU9QixfZT0kLHBlPU90LGdlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dFtlXTtyZXR1cm4gSXQobik/dm9pZCAwOkJ0KG4pfSxtZT1mdW5jdGlvbih0LGUpe3ZhciBuLHI7aWYoInN0cmluZyI9PT1lJiZOdChuPXQudG9TdHJpbmcpJiYhUnQocj1DdChuLHQpKSlyZXR1cm4gcjtpZihOdChuPXQudmFsdWVPZikmJiFSdChyPUN0KG4sdCkpKXJldHVybiByO2lmKCJzdHJpbmciIT09ZSYmTnQobj10LnRvU3RyaW5nKSYmIVJ0KHI9Q3Qobix0KSkpcmV0dXJuIHI7dGhyb3cgbmV3IGp0KCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWUiKX0seWU9VHlwZUVycm9yLHZlPWZlKCJ0b1ByaW1pdGl2ZSIpLGJlPWZ1bmN0aW9uKHQsZSl7aWYoIV9lKHQpfHxwZSh0KSlyZXR1cm4gdDt2YXIgbixyPWdlKHQsdmUpO2lmKHIpe2lmKHZvaWQgMD09PWUmJihlPSJkZWZhdWx0Iiksbj1kZShyLHQsZSksIV9lKG4pfHxwZShuKSlyZXR1cm4gbjt0aHJvdyBuZXcgeWUoIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfXJldHVybiB2b2lkIDA9PT1lJiYoZT0ibnVtYmVyIiksbWUodCxlKX0sd2U9T3Qsa2U9ZnVuY3Rpb24odCl7dmFyIGU9YmUodCwic3RyaW5nIik7cmV0dXJuIHdlKGUpP2U6ZSsiIn0sU2U9JCxPZT1vLmRvY3VtZW50LHhlPVNlKE9lKSYmU2UoT2UuY3JlYXRlRWxlbWVudCksQWU9ZnVuY3Rpb24odCl7cmV0dXJuIHhlP09lLmNyZWF0ZUVsZW1lbnQodCk6e319LFRlPUFlLEVlPSFFJiYhYSgoZnVuY3Rpb24oKXtyZXR1cm4gNyE9PU9iamVjdC5kZWZpbmVQcm9wZXJ0eShUZSgiZGl2IiksImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSkpLExlPUUsemU9QixCZT1JLEllPVAsQ2U9WCxOZT1rZSxSZT0kdCxqZT1FZSxEZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1QuZj1MZT9EZTpmdW5jdGlvbih0LGUpe2lmKHQ9Q2UodCksZT1OZShlKSxqZSl0cnl7cmV0dXJuIERlKHQsZSl9Y2F0Y2gobil7fWlmKFJlKHQsZSkpcmV0dXJuIEllKCF6ZShCZS5mLHQsZSksdFtlXSl9O3ZhciBQZT1hLFVlPUEsRmU9LyN8XC5wcm90b3R5cGVcLi8sTWU9ZnVuY3Rpb24odCxlKXt2YXIgbj1KZVtaZSh0KV07cmV0dXJuIG49PT1XZXx8biE9PUhlJiYoVWUoZSk/UGUoZSk6ISFlKX0sWmU9TWUubm9ybWFsaXplPWZ1bmN0aW9uKHQpe3JldHVybiBTdHJpbmcodCkucmVwbGFjZShGZSwiLiIpLnRvTG93ZXJDYXNlKCl9LEplPU1lLmRhdGE9e30sSGU9TWUuTkFUSVZFPSJOIixXZT1NZS5QT0xZRklMTD0iUCIsS2U9TWUsR2U9enQsVmU9cyxZZT1PKE8uYmluZCksWGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gR2UodCksdm9pZCAwPT09ZT90OlZlP1llKHQsZSk6ZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseShlLGFyZ3VtZW50cyl9fSxxZT17fSwkZT1FJiZhKChmdW5jdGlvbigpe3JldHVybiA0MiE9PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSgoZnVuY3Rpb24oKXt9KSwicHJvdG90eXBlIix7dmFsdWU6NDIsd3JpdGFibGU6ITF9KS5wcm90b3R5cGV9KSksUWU9JCx0bj1TdHJpbmcsZW49VHlwZUVycm9yLG5uPWZ1bmN0aW9uKHQpe2lmKFFlKHQpKXJldHVybiB0O3Rocm93IG5ldyBlbih0bih0KSsiIGlzIG5vdCBhbiBvYmplY3QiKX0scm49RSxvbj1FZSxhbj0kZSxzbj1ubixjbj1rZSxsbj1UeXBlRXJyb3IsdW49T2JqZWN0LmRlZmluZVByb3BlcnR5LGhuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsZm49ImVudW1lcmFibGUiLGRuPSJjb25maWd1cmFibGUiLF9uPSJ3cml0YWJsZSI7cWUuZj1ybj9hbj9mdW5jdGlvbih0LGUsbil7aWYoc24odCksZT1jbihlKSxzbihuKSwiZnVuY3Rpb24iPT10eXBlb2YgdCYmInByb3RvdHlwZSI9PT1lJiYidmFsdWUiaW4gbiYmX24gaW4gbiYmIW5bX25dKXt2YXIgcj1obih0LGUpO3ImJnJbX25dJiYodFtlXT1uLnZhbHVlLG49e2NvbmZpZ3VyYWJsZTpkbiBpbiBuP25bZG5dOnJbZG5dLGVudW1lcmFibGU6Zm4gaW4gbj9uW2ZuXTpyW2ZuXSx3cml0YWJsZTohMX0pfXJldHVybiB1bih0LGUsbil9OnVuOmZ1bmN0aW9uKHQsZSxuKXtpZihzbih0KSxlPWNuKGUpLHNuKG4pLG9uKXRyeXtyZXR1cm4gdW4odCxlLG4pfWNhdGNoKHIpe31pZigiZ2V0ImluIG58fCJzZXQiaW4gbil0aHJvdyBuZXcgbG4oIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIik7cmV0dXJuInZhbHVlImluIG4mJih0W2VdPW4udmFsdWUpLHR9O3ZhciBwbj1xZSxnbj1QLG1uPUU/ZnVuY3Rpb24odCxlLG4pe3JldHVybiBwbi5mKHQsZSxnbigxLG4pKX06ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0W2VdPW4sdH0seW49byx2bj1mLGJuPU8sd249QSxrbj1ULmYsU249S2UsT249USx4bj1YZSxBbj1tbixUbj0kdCxFbj1mdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbihuLHIsaSl7aWYodGhpcyBpbnN0YW5jZW9mIGUpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyB0O2Nhc2UgMTpyZXR1cm4gbmV3IHQobik7Y2FzZSAyOnJldHVybiBuZXcgdChuLHIpfXJldHVybiBuZXcgdChuLHIsaSl9cmV0dXJuIHZuKHQsdGhpcyxhcmd1bWVudHMpfTtyZXR1cm4gZS5wcm90b3R5cGU9dC5wcm90b3R5cGUsZX0sTG49ZnVuY3Rpb24odCxlKXt2YXIgbixyLGksbyxhLHMsYyxsLHUsaD10LnRhcmdldCxmPXQuZ2xvYmFsLGQ9dC5zdGF0LF89dC5wcm90byxwPWY/eW46ZD95bltoXTp5bltoXSYmeW5baF0ucHJvdG90eXBlLGc9Zj9PbjpPbltoXXx8QW4oT24saCx7fSlbaF0sbT1nLnByb3RvdHlwZTtmb3IobyBpbiBlKXI9IShuPVNuKGY/bzpoKyhkPyIuIjoiIyIpK28sdC5mb3JjZWQpKSYmcCYmVG4ocCxvKSxzPWdbb10sciYmKGM9dC5kb250Q2FsbEdldFNldD8odT1rbihwLG8pKSYmdS52YWx1ZTpwW29dKSxhPXImJmM/YzplW29dLChufHxffHx0eXBlb2YgcyE9dHlwZW9mIGEpJiYobD10LmJpbmQmJnI/eG4oYSx5bik6dC53cmFwJiZyP0VuKGEpOl8mJnduKGEpP2JuKGEpOmEsKHQuc2hhbXx8YSYmYS5zaGFtfHxzJiZzLnNoYW0pJiZBbihsLCJzaGFtIiwhMCksQW4oZyxvLGwpLF8mJihUbihPbixpPWgrIlByb3RvdHlwZSIpfHxBbihPbixpLHt9KSxBbihPbltpXSxvLGEpLHQucmVhbCYmbSYmKG58fCFtW29dKSYmQW4obSxvLGEpKSl9LHpuPUxuLEJuPUUsSW49cWUuZjt6bih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOk9iamVjdC5kZWZpbmVQcm9wZXJ0eSE9PUluLHNoYW06IUJufSx7ZGVmaW5lUHJvcGVydHk6SW59KTt2YXIgQ249US5PYmplY3QsTm49ci5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gQ24uZGVmaW5lUHJvcGVydHkodCxlLG4pfTtDbi5kZWZpbmVQcm9wZXJ0eS5zaGFtJiYoTm4uc2hhbT0hMCk7dmFyIFJuPW4oci5leHBvcnRzKSxqbj13LERuPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKHQpe3JldHVybiJBcnJheSI9PT1qbih0KX0sUG49TWF0aC5jZWlsLFVuPU1hdGguZmxvb3IsRm49TWF0aC50cnVuY3x8ZnVuY3Rpb24odCl7dmFyIGU9K3Q7cmV0dXJuKGU+MD9VbjpQbikoZSl9LE1uPWZ1bmN0aW9uKHQpe3ZhciBlPSt0O3JldHVybiBlIT1lfHwwPT09ZT8wOkZuKGUpfSxabj1NbixKbj1NYXRoLm1pbixIbj1mdW5jdGlvbih0KXt2YXIgZT1abih0KTtyZXR1cm4gZT4wP0puKGUsOTAwNzE5OTI1NDc0MDk5MSk6MH0sV249ZnVuY3Rpb24odCl7cmV0dXJuIEhuKHQubGVuZ3RoKX0sS249VHlwZUVycm9yLEduPWZ1bmN0aW9uKHQpe2lmKHQ+OTAwNzE5OTI1NDc0MDk5MSl0aHJvdyBLbigiTWF4aW11bSBhbGxvd2VkIGluZGV4IGV4Y2VlZGVkIik7cmV0dXJuIHR9LFZuPUUsWW49cWUsWG49UCxxbj1mdW5jdGlvbih0LGUsbil7Vm4/WW4uZih0LGUsWG4oMCxuKSk6dFtlXT1ufSwkbj17fTskbltmZSgidG9TdHJpbmdUYWciKV09InoiO3ZhciBRbj0iW29iamVjdCB6XSI9PT1TdHJpbmcoJG4pLHRyPVFuLGVyPUEsbnI9dyxycj1mZSgidG9TdHJpbmdUYWciKSxpcj1PYmplY3Qsb3I9IkFyZ3VtZW50cyI9PT1ucihmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpLGFyPXRyP25yOmZ1bmN0aW9uKHQpe3ZhciBlLG4scjtyZXR1cm4gdm9pZCAwPT09dD8iVW5kZWZpbmVkIjpudWxsPT09dD8iTnVsbCI6InN0cmluZyI9PXR5cGVvZihuPWZ1bmN0aW9uKHQsZSl7dHJ5e3JldHVybiB0W2VdfWNhdGNoKG4pe319KGU9aXIodCkscnIpKT9uOm9yP25yKGUpOiJPYmplY3QiPT09KHI9bnIoZSkpJiZlcihlLmNhbGxlZSk/IkFyZ3VtZW50cyI6cn0sc3I9QSxjcj1IdCxscj1tKEZ1bmN0aW9uLnRvU3RyaW5nKTtzcihjci5pbnNwZWN0U291cmNlKXx8KGNyLmluc3BlY3RTb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGxyKHQpfSk7dmFyIHVyPWNyLmluc3BlY3RTb3VyY2UsaHI9bSxmcj1hLGRyPUEsX3I9YXIscHI9dXIsZ3I9ZnVuY3Rpb24oKXt9LG1yPWl0KCJSZWZsZWN0IiwiY29uc3RydWN0IikseXI9L15ccyooPzpjbGFzc3xmdW5jdGlvbilcYi8sdnI9aHIoeXIuZXhlYyksYnI9IXlyLnRlc3QoZ3IpLHdyPWZ1bmN0aW9uKHQpe2lmKCFkcih0KSlyZXR1cm4hMTt0cnl7cmV0dXJuIG1yKGdyLFtdLHQpLCEwfWNhdGNoKGUpe3JldHVybiExfX0sa3I9ZnVuY3Rpb24odCl7aWYoIWRyKHQpKXJldHVybiExO3N3aXRjaChfcih0KSl7Y2FzZSJBc3luY0Z1bmN0aW9uIjpjYXNlIkdlbmVyYXRvckZ1bmN0aW9uIjpjYXNlIkFzeW5jR2VuZXJhdG9yRnVuY3Rpb24iOnJldHVybiExfXRyeXtyZXR1cm4gYnJ8fCEhdnIoeXIscHIodCkpfWNhdGNoKGUpe3JldHVybiEwfX07a3Iuc2hhbT0hMDt2YXIgU3I9IW1yfHxmcigoZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gd3Iod3IuY2FsbCl8fCF3cihPYmplY3QpfHwhd3IoKGZ1bmN0aW9uKCl7dD0hMH0pKXx8dH0pKT9rcjp3cixPcj1Ebix4cj1TcixBcj0kLFRyPWZlKCJzcGVjaWVzIiksRXI9QXJyYXksTHI9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIE9yKHQpJiYoZT10LmNvbnN0cnVjdG9yLCh4cihlKSYmKGU9PT1Fcnx8T3IoZS5wcm90b3R5cGUpKXx8QXIoZSkmJm51bGw9PT0oZT1lW1RyXSkpJiYoZT12b2lkIDApKSx2b2lkIDA9PT1lP0VyOmV9LHpyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyhMcih0KSkoMD09PWU/MDplKX0sQnI9YSxJcj1fdCxDcj1mZSgic3BlY2llcyIpLE5yPWZ1bmN0aW9uKHQpe3JldHVybiBJcj49NTF8fCFCcigoZnVuY3Rpb24oKXt2YXIgZT1bXTtyZXR1cm4oZS5jb25zdHJ1Y3Rvcj17fSlbQ3JdPWZ1bmN0aW9uKCl7cmV0dXJue2ZvbzoxfX0sMSE9PWVbdF0oQm9vbGVhbikuZm9vfSkpfSxScj1Mbixqcj1hLERyPURuLFByPSQsVXI9WXQsRnI9V24sTXI9R24sWnI9cW4sSnI9enIsSHI9TnIsV3I9X3QsS3I9ZmUoImlzQ29uY2F0U3ByZWFkYWJsZSIpLEdyPVdyPj01MXx8IWpyKChmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0W0tyXT0hMSx0LmNvbmNhdCgpWzBdIT09dH0pKSxWcj1mdW5jdGlvbih0KXtpZighUHIodCkpcmV0dXJuITE7dmFyIGU9dFtLcl07cmV0dXJuIHZvaWQgMCE9PWU/ISFlOkRyKHQpfTtScih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsYXJpdHk6MSxmb3JjZWQ6IUdyfHwhSHIoImNvbmNhdCIpfSx7Y29uY2F0OmZ1bmN0aW9uKHQpe3ZhciBlLG4scixpLG8sYT1Vcih0aGlzKSxzPUpyKGEsMCksYz0wO2ZvcihlPS0xLHI9YXJndW1lbnRzLmxlbmd0aDtlPHI7ZSsrKWlmKFZyKG89LTE9PT1lP2E6YXJndW1lbnRzW2VdKSlmb3IoaT1GcihvKSxNcihjK2kpLG49MDtuPGk7bisrLGMrKyluIGluIG8mJlpyKHMsYyxvW25dKTtlbHNlIE1yKGMrMSksWnIocyxjKyssbyk7cmV0dXJuIHMubGVuZ3RoPWMsc319KTt2YXIgWXI9YXIsWHI9U3RyaW5nLHFyPWZ1bmN0aW9uKHQpe2lmKCJTeW1ib2wiPT09WXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmciKTtyZXR1cm4gWHIodCl9LCRyPXt9LFFyPU1uLHRpPU1hdGgubWF4LGVpPU1hdGgubWluLG5pPVgscmk9ZnVuY3Rpb24odCxlKXt2YXIgbj1Rcih0KTtyZXR1cm4gbjwwP3RpKG4rZSwwKTplaShuLGUpfSxpaT1XbixvaT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLHIpe3ZhciBpPW5pKGUpLG89aWkoaSk7aWYoMD09PW8pcmV0dXJuIXQmJi0xO3ZhciBhLHM9cmkocixvKTtpZih0JiZuIT1uKXtmb3IoO28+czspaWYoKGE9aVtzKytdKSE9YSlyZXR1cm4hMH1lbHNlIGZvcig7bz5zO3MrKylpZigodHx8cyBpbiBpKSYmaVtzXT09PW4pcmV0dXJuIHR8fHN8fDA7cmV0dXJuIXQmJi0xfX0sYWk9e2luY2x1ZGVzOm9pKCEwKSxpbmRleE9mOm9pKCExKX0sc2k9e30sY2k9JHQsbGk9WCx1aT1haS5pbmRleE9mLGhpPXNpLGZpPW0oW10ucHVzaCksZGk9ZnVuY3Rpb24odCxlKXt2YXIgbixyPWxpKHQpLGk9MCxvPVtdO2ZvcihuIGluIHIpIWNpKGhpLG4pJiZjaShyLG4pJiZmaShvLG4pO2Zvcig7ZS5sZW5ndGg+aTspY2kocixuPWVbaSsrXSkmJih+dWkobyxuKXx8ZmkobyxuKSk7cmV0dXJuIG99LF9pPVsiY29uc3RydWN0b3IiLCJoYXNPd25Qcm9wZXJ0eSIsImlzUHJvdG90eXBlT2YiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsInRvTG9jYWxlU3RyaW5nIiwidG9TdHJpbmciLCJ2YWx1ZU9mIl0scGk9ZGksZ2k9X2ksbWk9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKHQpe3JldHVybiBwaSh0LGdpKX0seWk9RSx2aT0kZSxiaT1xZSx3aT1ubixraT1YLFNpPW1pOyRyLmY9eWkmJiF2aT9PYmplY3QuZGVmaW5lUHJvcGVydGllczpmdW5jdGlvbih0LGUpe3dpKHQpO2Zvcih2YXIgbixyPWtpKGUpLGk9U2koZSksbz1pLmxlbmd0aCxhPTA7bz5hOyliaS5mKHQsbj1pW2ErK10scltuXSk7cmV0dXJuIHR9O3ZhciBPaSx4aT1pdCgiZG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiKSxBaT1yZSxUaT1LdCgia2V5cyIpLEVpPWZ1bmN0aW9uKHQpe3JldHVybiBUaVt0XXx8KFRpW3RdPUFpKHQpKX0sTGk9bm4semk9JHIsQmk9X2ksSWk9c2ksQ2k9eGksTmk9QWUsUmk9InByb3RvdHlwZSIsamk9InNjcmlwdCIsRGk9RWkoIklFX1BST1RPIiksUGk9ZnVuY3Rpb24oKXt9LFVpPWZ1bmN0aW9uKHQpe3JldHVybiI8IitqaSsiPiIrdCsiPC8iK2ppKyI+In0sRmk9ZnVuY3Rpb24odCl7dC53cml0ZShVaSgiIikpLHQuY2xvc2UoKTt2YXIgZT10LnBhcmVudFdpbmRvdy5PYmplY3Q7cmV0dXJuIHQ9bnVsbCxlfSxNaT1mdW5jdGlvbigpe3RyeXtPaT1uZXcgQWN0aXZlWE9iamVjdCgiaHRtbGZpbGUiKX1jYXRjaChpKXt9dmFyIHQsZSxuO01pPSJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQ/ZG9jdW1lbnQuZG9tYWluJiZPaT9GaShPaSk6KGU9TmkoImlmcmFtZSIpLG49ImphdmEiK2ppKyI6IixlLnN0eWxlLmRpc3BsYXk9Im5vbmUiLENpLmFwcGVuZENoaWxkKGUpLGUuc3JjPVN0cmluZyhuKSwodD1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQpLm9wZW4oKSx0LndyaXRlKFVpKCJkb2N1bWVudC5GPU9iamVjdCIpKSx0LmNsb3NlKCksdC5GKTpGaShPaSk7Zm9yKHZhciByPUJpLmxlbmd0aDtyLS07KWRlbGV0ZSBNaVtSaV1bQmlbcl1dO3JldHVybiBNaSgpfTtJaVtEaV09ITA7dmFyIFppPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKHQsZSl7dmFyIG47cmV0dXJuIG51bGwhPT10PyhQaVtSaV09TGkodCksbj1uZXcgUGksUGlbUmldPW51bGwsbltEaV09dCk6bj1NaSgpLHZvaWQgMD09PWU/bjp6aS5mKG4sZSl9LEppPXt9LEhpPWRpLFdpPV9pLmNvbmNhdCgibGVuZ3RoIiwicHJvdG90eXBlIik7SmkuZj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc3x8ZnVuY3Rpb24odCl7cmV0dXJuIEhpKHQsV2kpfTt2YXIgS2k9e30sR2k9bShbXS5zbGljZSksVmk9dyxZaT1YLFhpPUppLmYscWk9R2ksJGk9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KTpbXTtLaS5mPWZ1bmN0aW9uKHQpe3JldHVybiAkaSYmIldpbmRvdyI9PT1WaSh0KT9mdW5jdGlvbih0KXt0cnl7cmV0dXJuIFhpKHQpfWNhdGNoKGUpe3JldHVybiBxaSgkaSl9fSh0KTpYaShZaSh0KSl9O3ZhciBRaT17fTtRaS5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7dmFyIHRvPW1uLGVvPWZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiByJiZyLmVudW1lcmFibGU/dFtlXT1uOnRvKHQsZSxuKSx0fSxubz1xZSxybz17fSxpbz1mZTtyby5mPWlvO3ZhciBvbyxhbyxzbyxjbz1RLGxvPSR0LHVvPXJvLGhvPXFlLmYsZm89ZnVuY3Rpb24odCl7dmFyIGU9Y28uU3ltYm9sfHwoY28uU3ltYm9sPXt9KTtsbyhlLHQpfHxobyhlLHQse3ZhbHVlOnVvLmYodCl9KX0sX289Qixwbz1pdCxnbz1mZSxtbz1lbyx5bz1mdW5jdGlvbigpe3ZhciB0PXBvKCJTeW1ib2wiKSxlPXQmJnQucHJvdG90eXBlLG49ZSYmZS52YWx1ZU9mLHI9Z28oInRvUHJpbWl0aXZlIik7ZSYmIWVbcl0mJm1vKGUsciwoZnVuY3Rpb24odCl7cmV0dXJuIF9vKG4sdGhpcyl9KSx7YXJpdHk6MX0pfSx2bz1hcixibz1Rbj97fS50b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0ICIrdm8odGhpcykrIl0ifSx3bz1Rbixrbz1xZS5mLFNvPW1uLE9vPSR0LHhvPWJvLEFvPWZlKCJ0b1N0cmluZ1RhZyIpLFRvPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPW4/dDp0JiZ0LnByb3RvdHlwZTtpJiYoT28oaSxBbyl8fGtvKGksQW8se2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTplfSksciYmIXdvJiZTbyhpLCJ0b1N0cmluZyIseG8pKX0sRW89QSxMbz1vLldlYWtNYXAsem89RW8oTG8pJiYvbmF0aXZlIGNvZGUvLnRlc3QoU3RyaW5nKExvKSksQm89byxJbz0kLENvPW1uLE5vPSR0LFJvPUh0LGpvPUVpLERvPXNpLFBvPSJPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZCIsVW89Qm8uVHlwZUVycm9yLEZvPUJvLldlYWtNYXA7aWYoem98fFJvLnN0YXRlKXt2YXIgTW89Um8uc3RhdGV8fChSby5zdGF0ZT1uZXcgRm8pO01vLmdldD1Nby5nZXQsTW8uaGFzPU1vLmhhcyxNby5zZXQ9TW8uc2V0LG9vPWZ1bmN0aW9uKHQsZSl7aWYoTW8uaGFzKHQpKXRocm93IG5ldyBVbyhQbyk7cmV0dXJuIGUuZmFjYWRlPXQsTW8uc2V0KHQsZSksZX0sYW89ZnVuY3Rpb24odCl7cmV0dXJuIE1vLmdldCh0KXx8e319LHNvPWZ1bmN0aW9uKHQpe3JldHVybiBNby5oYXModCl9fWVsc2V7dmFyIFpvPWpvKCJzdGF0ZSIpO0RvW1pvXT0hMCxvbz1mdW5jdGlvbih0LGUpe2lmKE5vKHQsWm8pKXRocm93IG5ldyBVbyhQbyk7cmV0dXJuIGUuZmFjYWRlPXQsQ28odCxabyxlKSxlfSxhbz1mdW5jdGlvbih0KXtyZXR1cm4gTm8odCxabyk/dFtab106e319LHNvPWZ1bmN0aW9uKHQpe3JldHVybiBObyh0LFpvKX19dmFyIEpvPXtzZXQ6b28sZ2V0OmFvLGhhczpzbyxlbmZvcmNlOmZ1bmN0aW9uKHQpe3JldHVybiBzbyh0KT9hbyh0KTpvbyh0LHt9KX0sZ2V0dGVyRm9yOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgbjtpZighSW8oZSl8fChuPWFvKGUpKS50eXBlIT09dCl0aHJvdyBuZXcgVW8oIkluY29tcGF0aWJsZSByZWNlaXZlciwgIit0KyIgcmVxdWlyZWQiKTtyZXR1cm4gbn19fSxIbz1YZSxXbz1KLEtvPVl0LEdvPVduLFZvPXpyLFlvPW0oW10ucHVzaCksWG89ZnVuY3Rpb24odCl7dmFyIGU9MT09PXQsbj0yPT09dCxyPTM9PT10LGk9ND09PXQsbz02PT09dCxhPTc9PT10LHM9NT09PXR8fG87cmV0dXJuIGZ1bmN0aW9uKGMsbCx1LGgpe2Zvcih2YXIgZixkLF89S28oYykscD1XbyhfKSxnPUdvKHApLG09SG8obCx1KSx5PTAsdj1ofHxWbyxiPWU/dihjLGcpOm58fGE/dihjLDApOnZvaWQgMDtnPnk7eSsrKWlmKChzfHx5IGluIHApJiYoZD1tKGY9cFt5XSx5LF8pLHQpKWlmKGUpYlt5XT1kO2Vsc2UgaWYoZClzd2l0Y2godCl7Y2FzZSAzOnJldHVybiEwO2Nhc2UgNTpyZXR1cm4gZjtjYXNlIDY6cmV0dXJuIHk7Y2FzZSAyOllvKGIsZil9ZWxzZSBzd2l0Y2godCl7Y2FzZSA0OnJldHVybiExO2Nhc2UgNzpZbyhiLGYpfXJldHVybiBvPy0xOnJ8fGk/aTpifX0scW89e2ZvckVhY2g6WG8oMCksbWFwOlhvKDEpLGZpbHRlcjpYbygyKSxzb21lOlhvKDMpLGV2ZXJ5OlhvKDQpLGZpbmQ6WG8oNSksZmluZEluZGV4OlhvKDYpLGZpbHRlclJlamVjdDpYbyg3KX0sJG89TG4sUW89byx0YT1CLGVhPW0sbmE9RSxyYT15dCxpYT1hLG9hPSR0LGFhPW90LHNhPW5uLGNhPVgsbGE9a2UsdWE9cXIsaGE9UCxmYT1aaSxkYT1taSxfYT1KaSxwYT1LaSxnYT1RaSxtYT1ULHlhPXFlLHZhPSRyLGJhPUksd2E9ZW8sa2E9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBuby5mKHQsZSxuKX0sU2E9S3QsT2E9c2kseGE9cmUsQWE9ZmUsVGE9cm8sRWE9Zm8sTGE9eW8semE9VG8sQmE9Sm8sSWE9cW8uZm9yRWFjaCxDYT1FaSgiaGlkZGVuIiksTmE9IlN5bWJvbCIsUmE9InByb3RvdHlwZSIsamE9QmEuc2V0LERhPUJhLmdldHRlckZvcihOYSksUGE9T2JqZWN0W1JhXSxVYT1Rby5TeW1ib2wsRmE9VWEmJlVhW1JhXSxNYT1Rby5SYW5nZUVycm9yLFphPVFvLlR5cGVFcnJvcixKYT1Rby5RT2JqZWN0LEhhPW1hLmYsV2E9eWEuZixLYT1wYS5mLEdhPWJhLmYsVmE9ZWEoW10ucHVzaCksWWE9U2EoInN5bWJvbHMiKSxYYT1TYSgib3Atc3ltYm9scyIpLHFhPVNhKCJ3a3MiKSwkYT0hSmF8fCFKYVtSYV18fCFKYVtSYV0uZmluZENoaWxkLFFhPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1IYShQYSxlKTtyJiZkZWxldGUgUGFbZV0sV2EodCxlLG4pLHImJnQhPT1QYSYmV2EoUGEsZSxyKX0sdHM9bmEmJmlhKChmdW5jdGlvbigpe3JldHVybiA3IT09ZmEoV2Eoe30sImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gV2EodGhpcywiYSIse3ZhbHVlOjd9KS5hfX0pKS5hfSkpP1FhOldhLGVzPWZ1bmN0aW9uKHQsZSl7dmFyIG49WWFbdF09ZmEoRmEpO3JldHVybiBqYShuLHt0eXBlOk5hLHRhZzp0LGRlc2NyaXB0aW9uOmV9KSxuYXx8KG4uZGVzY3JpcHRpb249ZSksbn0sbnM9ZnVuY3Rpb24odCxlLG4pe3Q9PT1QYSYmbnMoWGEsZSxuKSxzYSh0KTt2YXIgcj1sYShlKTtyZXR1cm4gc2Eobiksb2EoWWEscik/KG4uZW51bWVyYWJsZT8ob2EodCxDYSkmJnRbQ2FdW3JdJiYodFtDYV1bcl09ITEpLG49ZmEobix7ZW51bWVyYWJsZTpoYSgwLCExKX0pKToob2EodCxDYSl8fFdhKHQsQ2EsaGEoMSxmYShudWxsKSkpLHRbQ2FdW3JdPSEwKSx0cyh0LHIsbikpOldhKHQscixuKX0scnM9ZnVuY3Rpb24odCxlKXtzYSh0KTt2YXIgbj1jYShlKSxyPWRhKG4pLmNvbmNhdChzcyhuKSk7cmV0dXJuIElhKHIsKGZ1bmN0aW9uKGUpe25hJiYhdGEoaXMsbixlKXx8bnModCxlLG5bZV0pfSkpLHR9LGlzPWZ1bmN0aW9uKHQpe3ZhciBlPWxhKHQpLG49dGEoR2EsdGhpcyxlKTtyZXR1cm4hKHRoaXM9PT1QYSYmb2EoWWEsZSkmJiFvYShYYSxlKSkmJighKG58fCFvYSh0aGlzLGUpfHwhb2EoWWEsZSl8fG9hKHRoaXMsQ2EpJiZ0aGlzW0NhXVtlXSl8fG4pfSxvcz1mdW5jdGlvbih0LGUpe3ZhciBuPWNhKHQpLHI9bGEoZSk7aWYobiE9PVBhfHwhb2EoWWEscil8fG9hKFhhLHIpKXt2YXIgaT1IYShuLHIpO3JldHVybiFpfHwhb2EoWWEscil8fG9hKG4sQ2EpJiZuW0NhXVtyXXx8KGkuZW51bWVyYWJsZT0hMCksaX19LGFzPWZ1bmN0aW9uKHQpe3ZhciBlPUthKGNhKHQpKSxuPVtdO3JldHVybiBJYShlLChmdW5jdGlvbih0KXtvYShZYSx0KXx8b2EoT2EsdCl8fFZhKG4sdCl9KSksbn0sc3M9ZnVuY3Rpb24odCl7dmFyIGU9dD09PVBhLG49S2EoZT9YYTpjYSh0KSkscj1bXTtyZXR1cm4gSWEobiwoZnVuY3Rpb24odCl7IW9hKFlhLHQpfHxlJiYhb2EoUGEsdCl8fFZhKHIsWWFbdF0pfSkpLHJ9O3JhfHwoVWE9ZnVuY3Rpb24oKXtpZihhYShGYSx0aGlzKSl0aHJvdyBuZXcgWmEoIlN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciIpO3ZhciB0PWFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT91YShhcmd1bWVudHNbMF0pOnZvaWQgMCxlPXhhKHQpLG49ZnVuY3Rpb24odCl7dmFyIHI9dm9pZCAwPT09dGhpcz9Rbzp0aGlzO3I9PT1QYSYmdGEobixYYSx0KSxvYShyLENhKSYmb2EocltDYV0sZSkmJihyW0NhXVtlXT0hMSk7dmFyIGk9aGEoMSx0KTt0cnl7dHMocixlLGkpfWNhdGNoKG8pe2lmKCEobyBpbnN0YW5jZW9mIE1hKSl0aHJvdyBvO1FhKHIsZSxpKX19O3JldHVybiBuYSYmJGEmJnRzKFBhLGUse2NvbmZpZ3VyYWJsZTohMCxzZXQ6bn0pLGVzKGUsdCl9LHdhKEZhPVVhW1JhXSwidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiBEYSh0aGlzKS50YWd9KSksd2EoVWEsIndpdGhvdXRTZXR0ZXIiLChmdW5jdGlvbih0KXtyZXR1cm4gZXMoeGEodCksdCl9KSksYmEuZj1pcyx5YS5mPW5zLHZhLmY9cnMsbWEuZj1vcyxfYS5mPXBhLmY9YXMsZ2EuZj1zcyxUYS5mPWZ1bmN0aW9uKHQpe3JldHVybiBlcyhBYSh0KSx0KX0sbmEmJmthKEZhLCJkZXNjcmlwdGlvbiIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRGEodGhpcykuZGVzY3JpcHRpb259fSkpLCRvKHtnbG9iYWw6ITAsY29uc3RydWN0b3I6ITAsd3JhcDohMCxmb3JjZWQ6IXJhLHNoYW06IXJhfSx7U3ltYm9sOlVhfSksSWEoZGEocWEpLChmdW5jdGlvbih0KXtFYSh0KX0pKSwkbyh7dGFyZ2V0Ok5hLHN0YXQ6ITAsZm9yY2VkOiFyYX0se3VzZVNldHRlcjpmdW5jdGlvbigpeyRhPSEwfSx1c2VTaW1wbGU6ZnVuY3Rpb24oKXskYT0hMX19KSwkbyh7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOiFyYSxzaGFtOiFuYX0se2NyZWF0ZTpmdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lP2ZhKHQpOnJzKGZhKHQpLGUpfSxkZWZpbmVQcm9wZXJ0eTpucyxkZWZpbmVQcm9wZXJ0aWVzOnJzLGdldE93blByb3BlcnR5RGVzY3JpcHRvcjpvc30pLCRvKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6IXJhfSx7Z2V0T3duUHJvcGVydHlOYW1lczphc30pLExhKCksemEoVWEsTmEpLE9hW0NhXT0hMDt2YXIgY3M9eXQmJiEhU3ltYm9sLmZvciYmISFTeW1ib2wua2V5Rm9yLGxzPUxuLHVzPWl0LGhzPSR0LGZzPXFyLGRzPUt0LF9zPWNzLHBzPWRzKCJzdHJpbmctdG8tc3ltYm9sLXJlZ2lzdHJ5IiksZ3M9ZHMoInN5bWJvbC10by1zdHJpbmctcmVnaXN0cnkiKTtscyh7dGFyZ2V0OiJTeW1ib2wiLHN0YXQ6ITAsZm9yY2VkOiFfc30se2ZvcjpmdW5jdGlvbih0KXt2YXIgZT1mcyh0KTtpZihocyhwcyxlKSlyZXR1cm4gcHNbZV07dmFyIG49dXMoIlN5bWJvbCIpKGUpO3JldHVybiBwc1tlXT1uLGdzW25dPWUsbn19KTt2YXIgbXM9TG4seXM9JHQsdnM9T3QsYnM9QXQsd3M9Y3Msa3M9S3QoInN5bWJvbC10by1zdHJpbmctcmVnaXN0cnkiKTttcyh7dGFyZ2V0OiJTeW1ib2wiLHN0YXQ6ITAsZm9yY2VkOiF3c30se2tleUZvcjpmdW5jdGlvbih0KXtpZighdnModCkpdGhyb3cgbmV3IFR5cGVFcnJvcihicyh0KSsiIGlzIG5vdCBhIHN5bWJvbCIpO2lmKHlzKGtzLHQpKXJldHVybiBrc1t0XX19KTt2YXIgU3M9RG4sT3M9QSx4cz13LEFzPXFyLFRzPW0oW10ucHVzaCksRXM9TG4sTHM9aXQsenM9ZixCcz1CLElzPW0sQ3M9YSxOcz1BLFJzPU90LGpzPUdpLERzPWZ1bmN0aW9uKHQpe2lmKE9zKHQpKXJldHVybiB0O2lmKFNzKHQpKXtmb3IodmFyIGU9dC5sZW5ndGgsbj1bXSxyPTA7cjxlO3IrKyl7dmFyIGk9dFtyXTsic3RyaW5nIj09dHlwZW9mIGk/VHMobixpKToibnVtYmVyIiE9dHlwZW9mIGkmJiJOdW1iZXIiIT09eHMoaSkmJiJTdHJpbmciIT09eHMoaSl8fFRzKG4sQXMoaSkpfXZhciBvPW4ubGVuZ3RoLGE9ITA7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7aWYoYSlyZXR1cm4gYT0hMSxlO2lmKFNzKHRoaXMpKXJldHVybiBlO2Zvcih2YXIgcj0wO3I8bztyKyspaWYobltyXT09PXQpcmV0dXJuIGV9fX0sUHM9eXQsVXM9U3RyaW5nLEZzPUxzKCJKU09OIiwic3RyaW5naWZ5IiksTXM9SXMoLy4vLmV4ZWMpLFpzPUlzKCIiLmNoYXJBdCksSnM9SXMoIiIuY2hhckNvZGVBdCksSHM9SXMoIiIucmVwbGFjZSksV3M9SXMoMS4udG9TdHJpbmcpLEtzPS9bXHVEODAwLVx1REZGRl0vZyxHcz0vXltcdUQ4MDAtXHVEQkZGXSQvLFZzPS9eW1x1REMwMC1cdURGRkZdJC8sWXM9IVBzfHxDcygoZnVuY3Rpb24oKXt2YXIgdD1McygiU3ltYm9sIikoInN0cmluZ2lmeSBkZXRlY3Rpb24iKTtyZXR1cm4iW251bGxdIiE9PUZzKFt0XSl8fCJ7fSIhPT1Gcyh7YTp0fSl8fCJ7fSIhPT1GcyhPYmplY3QodCkpfSkpLFhzPUNzKChmdW5jdGlvbigpe3JldHVybiciXFx1ZGYwNlxcdWQ4MzQiJyE9PUZzKCJcdWRmMDZcdWQ4MzQiKXx8JyJcXHVkZWFkIichPT1GcygiXHVkZWFkIil9KSkscXM9ZnVuY3Rpb24odCxlKXt2YXIgbj1qcyhhcmd1bWVudHMpLHI9RHMoZSk7aWYoTnMocil8fHZvaWQgMCE9PXQmJiFScyh0KSlyZXR1cm4gblsxXT1mdW5jdGlvbih0LGUpe2lmKE5zKHIpJiYoZT1CcyhyLHRoaXMsVXModCksZSkpLCFScyhlKSlyZXR1cm4gZX0senMoRnMsbnVsbCxuKX0sJHM9ZnVuY3Rpb24odCxlLG4pe3ZhciByPVpzKG4sZS0xKSxpPVpzKG4sZSsxKTtyZXR1cm4gTXMoR3MsdCkmJiFNcyhWcyxpKXx8TXMoVnMsdCkmJiFNcyhHcyxyKT8iXFx1IitXcyhKcyh0LDApLDE2KTp0fTtGcyYmRXMoe3RhcmdldDoiSlNPTiIsc3RhdDohMCxhcml0eTozLGZvcmNlZDpZc3x8WHN9LHtzdHJpbmdpZnk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPWpzKGFyZ3VtZW50cyksaT16cyhZcz9xczpGcyxudWxsLHIpO3JldHVybiBYcyYmInN0cmluZyI9PXR5cGVvZiBpP0hzKGksS3MsJHMpOml9fSk7dmFyIFFzPVFpLHRjPVl0O0xuKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6IXl0fHxhKChmdW5jdGlvbigpe1FzLmYoMSl9KSl9LHtnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ZnVuY3Rpb24odCl7dmFyIGU9UXMuZjtyZXR1cm4gZT9lKHRjKHQpKTpbXX19KSxmbygiYXN5bmNJdGVyYXRvciIpLGZvKCJoYXNJbnN0YW5jZSIpLGZvKCJpc0NvbmNhdFNwcmVhZGFibGUiKSxmbygiaXRlcmF0b3IiKSxmbygibWF0Y2giKSxmbygibWF0Y2hBbGwiKSxmbygicmVwbGFjZSIpLGZvKCJzZWFyY2giKSxmbygic3BlY2llcyIpLGZvKCJzcGxpdCIpO3ZhciBlYz15bztmbygidG9QcmltaXRpdmUiKSxlYygpO3ZhciBuYz1pdCxyYz1UbztmbygidG9TdHJpbmdUYWciKSxyYyhuYygiU3ltYm9sIiksIlN5bWJvbCIpLGZvKCJ1bnNjb3BhYmxlcyIpLFRvKG8uSlNPTiwiSlNPTiIsITApO3ZhciBpYyxvYyxhYyxzYz1RLlN5bWJvbCxjYz17fSxsYz1FLHVjPSR0LGhjPUZ1bmN0aW9uLnByb3RvdHlwZSxmYz1sYyYmT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixkYz11YyhoYywibmFtZSIpLF9jPXtFWElTVFM6ZGMsUFJPUEVSOmRjJiYic29tZXRoaW5nIj09PWZ1bmN0aW9uKCl7fS5uYW1lLENPTkZJR1VSQUJMRTpkYyYmKCFsY3x8bGMmJmZjKGhjLCJuYW1lIikuY29uZmlndXJhYmxlKX0scGM9IWEoKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuY29uc3RydWN0b3I9bnVsbCxPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IHQpIT09dC5wcm90b3R5cGV9KSksZ2M9JHQsbWM9QSx5Yz1ZdCx2Yz1wYyxiYz1FaSgiSUVfUFJPVE8iKSx3Yz1PYmplY3Qsa2M9d2MucHJvdG90eXBlLFNjPXZjP3djLmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKHQpe3ZhciBlPXljKHQpO2lmKGdjKGUsYmMpKXJldHVybiBlW2JjXTt2YXIgbj1lLmNvbnN0cnVjdG9yO3JldHVybiBtYyhuKSYmZSBpbnN0YW5jZW9mIG4/bi5wcm90b3R5cGU6ZSBpbnN0YW5jZW9mIHdjP2tjOm51bGx9LE9jPWEseGM9QSxBYz0kLFRjPVppLEVjPVNjLExjPWVvLHpjPWZlKCJpdGVyYXRvciIpLEJjPSExO1tdLmtleXMmJigibmV4dCJpbihhYz1bXS5rZXlzKCkpPyhvYz1FYyhFYyhhYykpKSE9PU9iamVjdC5wcm90b3R5cGUmJihpYz1vYyk6QmM9ITApO3ZhciBJYz0hQWMoaWMpfHxPYygoZnVuY3Rpb24oKXt2YXIgdD17fTtyZXR1cm4gaWNbemNdLmNhbGwodCkhPT10fSkpO3hjKChpYz1JYz97fTpUYyhpYykpW3pjXSl8fExjKGljLHpjLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpO3ZhciBDYz17SXRlcmF0b3JQcm90b3R5cGU6aWMsQlVHR1lfU0FGQVJJX0lURVJBVE9SUzpCY30sTmM9Q2MuSXRlcmF0b3JQcm90b3R5cGUsUmM9WmksamM9UCxEYz1UbyxQYz1jYyxVYz1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxGYz1MbixNYz1CLFpjPV9jLEpjPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPWUrIiBJdGVyYXRvciI7cmV0dXJuIHQucHJvdG90eXBlPVJjKE5jLHtuZXh0OmpjKCshcixuKX0pLERjKHQsaSwhMSwhMCksUGNbaV09VWMsdH0sSGM9U2MsV2M9VG8sS2M9ZW8sR2M9Y2MsVmM9Q2MsWWM9WmMuUFJPUEVSLFhjPVZjLkJVR0dZX1NBRkFSSV9JVEVSQVRPUlMscWM9ZmUoIml0ZXJhdG9yIiksJGM9ImtleXMiLFFjPSJ2YWx1ZXMiLHRsPSJlbnRyaWVzIixlbD1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxubD1mdW5jdGlvbih0LGUsbixyLGksbyxhKXtKYyhuLGUscik7dmFyIHMsYyxsLHU9ZnVuY3Rpb24odCl7aWYodD09PWkmJnApcmV0dXJuIHA7aWYoIVhjJiZ0JiZ0IGluIGQpcmV0dXJuIGRbdF07c3dpdGNoKHQpe2Nhc2UgJGM6Y2FzZSBRYzpjYXNlIHRsOnJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzLHQpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcyl9fSxoPWUrIiBJdGVyYXRvciIsZj0hMSxkPXQucHJvdG90eXBlLF89ZFtxY118fGRbIkBAaXRlcmF0b3IiXXx8aSYmZFtpXSxwPSFYYyYmX3x8dShpKSxnPSJBcnJheSI9PT1lJiZkLmVudHJpZXN8fF87aWYoZyYmKHM9SGMoZy5jYWxsKG5ldyB0KSkpIT09T2JqZWN0LnByb3RvdHlwZSYmcy5uZXh0JiYoV2MocyxoLCEwLCEwKSxHY1toXT1lbCksWWMmJmk9PT1RYyYmXyYmXy5uYW1lIT09UWMmJihmPSEwLHA9ZnVuY3Rpb24oKXtyZXR1cm4gTWMoXyx0aGlzKX0pLGkpaWYoYz17dmFsdWVzOnUoUWMpLGtleXM6bz9wOnUoJGMpLGVudHJpZXM6dSh0bCl9LGEpZm9yKGwgaW4gYykoWGN8fGZ8fCEobCBpbiBkKSkmJktjKGQsbCxjW2xdKTtlbHNlIEZjKHt0YXJnZXQ6ZSxwcm90bzohMCxmb3JjZWQ6WGN8fGZ9LGMpO3JldHVybiBhJiZkW3FjXSE9PXAmJktjKGQscWMscCx7bmFtZTppfSksR2NbZV09cCxjfSxybD1mdW5jdGlvbih0LGUpe3JldHVybnt2YWx1ZTp0LGRvbmU6ZX19LGlsPVgsb2w9Y2MsYWw9Sm87cWUuZjt2YXIgc2w9bmwsY2w9cmwsbGw9IkFycmF5IEl0ZXJhdG9yIix1bD1hbC5zZXQsaGw9YWwuZ2V0dGVyRm9yKGxsKTtzbChBcnJheSwiQXJyYXkiLChmdW5jdGlvbih0LGUpe3VsKHRoaXMse3R5cGU6bGwsdGFyZ2V0OmlsKHQpLGluZGV4OjAsa2luZDplfSl9KSwoZnVuY3Rpb24oKXt2YXIgdD1obCh0aGlzKSxlPXQudGFyZ2V0LG49dC5pbmRleCsrO2lmKCFlfHxuPj1lLmxlbmd0aClyZXR1cm4gdC50YXJnZXQ9bnVsbCxjbCh2b2lkIDAsITApO3N3aXRjaCh0LmtpbmQpe2Nhc2Uia2V5cyI6cmV0dXJuIGNsKG4sITEpO2Nhc2UidmFsdWVzIjpyZXR1cm4gY2woZVtuXSwhMSl9cmV0dXJuIGNsKFtuLGVbbl1dLCExKX0pLCJ2YWx1ZXMiKSxvbC5Bcmd1bWVudHM9b2wuQXJyYXk7dmFyIGZsPXtDU1NSdWxlTGlzdDowLENTU1N0eWxlRGVjbGFyYXRpb246MCxDU1NWYWx1ZUxpc3Q6MCxDbGllbnRSZWN0TGlzdDowLERPTVJlY3RMaXN0OjAsRE9NU3RyaW5nTGlzdDowLERPTVRva2VuTGlzdDoxLERhdGFUcmFuc2Zlckl0ZW1MaXN0OjAsRmlsZUxpc3Q6MCxIVE1MQWxsQ29sbGVjdGlvbjowLEhUTUxDb2xsZWN0aW9uOjAsSFRNTEZvcm1FbGVtZW50OjAsSFRNTFNlbGVjdEVsZW1lbnQ6MCxNZWRpYUxpc3Q6MCxNaW1lVHlwZUFycmF5OjAsTmFtZWROb2RlTWFwOjAsTm9kZUxpc3Q6MSxQYWludFJlcXVlc3RMaXN0OjAsUGx1Z2luOjAsUGx1Z2luQXJyYXk6MCxTVkdMZW5ndGhMaXN0OjAsU1ZHTnVtYmVyTGlzdDowLFNWR1BhdGhTZWdMaXN0OjAsU1ZHUG9pbnRMaXN0OjAsU1ZHU3RyaW5nTGlzdDowLFNWR1RyYW5zZm9ybUxpc3Q6MCxTb3VyY2VCdWZmZXJMaXN0OjAsU3R5bGVTaGVldExpc3Q6MCxUZXh0VHJhY2tDdWVMaXN0OjAsVGV4dFRyYWNrTGlzdDowLFRvdWNoTGlzdDowfSxkbD1vLF9sPVRvLHBsPWNjO2Zvcih2YXIgZ2wgaW4gZmwpX2woZGxbZ2xdLGdsKSxwbFtnbF09cGwuQXJyYXk7dmFyIG1sPXNjLHlsPWZlLHZsPXFlLmYsYmw9eWwoIm1ldGFkYXRhIiksd2w9RnVuY3Rpb24ucHJvdG90eXBlO3ZvaWQgMD09PXdsW2JsXSYmdmwod2wsYmwse3ZhbHVlOm51bGx9KSxmbygiYXN5bmNEaXNwb3NlIiksZm8oImRpc3Bvc2UiKSxmbygibWV0YWRhdGEiKTt2YXIga2w9bWwsU2w9bSxPbD1pdCgiU3ltYm9sIikseGw9T2wua2V5Rm9yLEFsPVNsKE9sLnByb3RvdHlwZS52YWx1ZU9mKSxUbD1PbC5pc1JlZ2lzdGVyZWRTeW1ib2x8fGZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gdm9pZCAwIT09eGwoQWwodCkpfWNhdGNoKGUpe3JldHVybiExfX07TG4oe3RhcmdldDoiU3ltYm9sIixzdGF0OiEwfSx7aXNSZWdpc3RlcmVkU3ltYm9sOlRsfSk7Zm9yKHZhciBFbD1LdCxMbD1pdCx6bD1tLEJsPU90LElsPWZlLENsPUxsKCJTeW1ib2wiKSxObD1DbC5pc1dlbGxLbm93blN5bWJvbCxSbD1MbCgiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlOYW1lcyIpLGpsPXpsKENsLnByb3RvdHlwZS52YWx1ZU9mKSxEbD1FbCgid2tzIiksUGw9MCxVbD1SbChDbCksRmw9VWwubGVuZ3RoO1BsPEZsO1BsKyspdHJ5e3ZhciBNbD1VbFtQbF07QmwoQ2xbTWxdKSYmSWwoTWwpfWNhdGNoKGVnKXt9dmFyIFpsPWZ1bmN0aW9uKHQpe2lmKE5sJiZObCh0KSlyZXR1cm4hMDt0cnl7Zm9yKHZhciBlPWpsKHQpLG49MCxyPVJsKERsKSxpPXIubGVuZ3RoO248aTtuKyspaWYoRGxbcltuXV09PWUpcmV0dXJuITB9Y2F0Y2goZWcpe31yZXR1cm4hMX07TG4oe3RhcmdldDoiU3ltYm9sIixzdGF0OiEwLGZvcmNlZDohMH0se2lzV2VsbEtub3duU3ltYm9sOlpsfSksZm8oImN1c3RvbU1hdGNoZXIiKSxmbygib2JzZXJ2YWJsZSIpLExuKHt0YXJnZXQ6IlN5bWJvbCIsc3RhdDohMCxuYW1lOiJpc1JlZ2lzdGVyZWRTeW1ib2wifSx7aXNSZWdpc3RlcmVkOlRsfSksTG4oe3RhcmdldDoiU3ltYm9sIixzdGF0OiEwLG5hbWU6ImlzV2VsbEtub3duU3ltYm9sIixmb3JjZWQ6ITB9LHtpc1dlbGxLbm93bjpabH0pLGZvKCJtYXRjaGVyIiksZm8oIm1ldGFkYXRhS2V5IiksZm8oInBhdHRlcm5NYXRjaCIpLGZvKCJyZXBsYWNlQWxsIik7dmFyIEpsPW4oa2wpLEhsPW0sV2w9TW4sS2w9cXIsR2w9RyxWbD1IbCgiIi5jaGFyQXQpLFlsPUhsKCIiLmNoYXJDb2RlQXQpLFhsPUhsKCIiLnNsaWNlKSxxbD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgcixpLG89S2woR2woZSkpLGE9V2wobikscz1vLmxlbmd0aDtyZXR1cm4gYTwwfHxhPj1zP3Q/IiI6dm9pZCAwOihyPVlsKG8sYSkpPDU1Mjk2fHxyPjU2MzE5fHxhKzE9PT1zfHwoaT1ZbChvLGErMSkpPDU2MzIwfHxpPjU3MzQzP3Q/VmwobyxhKTpyOnQ/WGwobyxhLGErMik6aS01NjMyMCsoci01NTI5Njw8MTApKzY1NTM2fX0sJGw9e2NvZGVBdDpxbCghMSksY2hhckF0OnFsKCEwKX0uY2hhckF0LFFsPXFyLHR1PUpvLGV1PW5sLG51PXJsLHJ1PSJTdHJpbmcgSXRlcmF0b3IiLGl1PXR1LnNldCxvdT10dS5nZXR0ZXJGb3IocnUpO2V1KFN0cmluZywiU3RyaW5nIiwoZnVuY3Rpb24odCl7aXUodGhpcyx7dHlwZTpydSxzdHJpbmc6UWwodCksaW5kZXg6MH0pfSksKGZ1bmN0aW9uKCl7dmFyIHQsZT1vdSh0aGlzKSxuPWUuc3RyaW5nLHI9ZS5pbmRleDtyZXR1cm4gcj49bi5sZW5ndGg/bnUodm9pZCAwLCEwKToodD0kbChuLHIpLGUuaW5kZXgrPXQubGVuZ3RoLG51KHQsITEpKX0pKTt2YXIgYXU9bihyby5mKCJpdGVyYXRvciIpKTtmdW5jdGlvbiBzdSh0KXtyZXR1cm4oc3U9ImZ1bmN0aW9uIj09dHlwZW9mIEpsJiYic3ltYm9sIj09dHlwZW9mIGF1P2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBKbCYmdC5jb25zdHJ1Y3Rvcj09PUpsJiZ0IT09SmwucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSkodCl9dmFyIGN1PW4ocm8uZigidG9QcmltaXRpdmUiKSk7ZnVuY3Rpb24gbHUodCl7dmFyIGU9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0IiE9c3UodCl8fCF0KXJldHVybiB0O3ZhciBuPXRbY3VdO2lmKHZvaWQgMCE9PW4pe3ZhciByPW4uY2FsbCh0LGV8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXN1KHIpKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09ZT9TdHJpbmc6TnVtYmVyKSh0KX0odCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXN1KGUpP2U6ZSsiIn1mdW5jdGlvbiB1dSh0LGUsbil7cmV0dXJuKGU9bHUoZSkpaW4gdD9Sbih0LGUse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTp0W2VdPW4sdH1jbGFzcyBodXtjb25zdHJ1Y3Rvcih0KXt1dSh0aGlzLCJfcG9zaXRpb24iLDApLHV1KHRoaXMsIl9kYXRhdmlldyIsdm9pZCAwKSx0aGlzLl9kYXRhdmlldz1uZXcgRGF0YVZpZXcodCl9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLmJ1ZmZlci5ieXRlTGVuZ3RofWdldCBidWZmZXIoKXtyZXR1cm4gdGhpcy5fZGF0YXZpZXcuYnVmZmVyfXNldCBwb3NpdGlvbih0KXt0aGlzLl9wb3NpdGlvbj10fWdldCBwb3NpdGlvbigpe3JldHVybiB0aGlzLl9wb3NpdGlvbn1iYWNrKHQpe3RoaXMucG9zaXRpb24tPXR9Z2V0VWludDgodCl7cmV0dXJuIHRoaXMuX2RhdGF2aWV3LmdldFVpbnQ4KHQpfWdldEludDgodCl7cmV0dXJuIHRoaXMuX2RhdGF2aWV3LmdldEludDgodCl9Z2V0SW50MTYodCl7cmV0dXJuIHRoaXMuX2RhdGF2aWV3LmdldEludDE2KHQpfWdldFVpbnQxNih0KXtyZXR1cm4gdGhpcy5fZGF0YXZpZXcuZ2V0VWludDE2KHQpfWdldFVpbnQzMih0KXtyZXR1cm4gdGhpcy5fZGF0YXZpZXcuZ2V0VWludDMyKHQpfWdldEludDMyKHQpe3JldHVybiB0aGlzLl9kYXRhdmlldy5nZXRJbnQzMih0KX1za2lwKHQpe2NvbnN0IGU9TWF0aC5mbG9vcih0LzQpLG49dCU0O2ZvcihsZXQgcj0wO3I8ZTtyKyspaHUucmVhZEJ5dGUodGhpcyw0KTtuPjAmJmh1LnJlYWRCeXRlKHRoaXMsbil9c3RhdGljIHJlYWRCeXRlKHQsZSxuKXtsZXQgcjtzd2l0Y2goZSl7Y2FzZSAxOnI9bj90LmdldEludDgodC5wb3NpdGlvbik6dC5nZXRVaW50OCh0LnBvc2l0aW9uKTticmVhaztjYXNlIDI6cj1uP3QuZ2V0SW50MTYodC5wb3NpdGlvbik6dC5nZXRVaW50MTYodC5wb3NpdGlvbik7YnJlYWs7Y2FzZSAzOmlmKG4pdGhyb3cgbmV3IEVycm9yKCJub3Qgc3VwcG9ydGVkIGZvciByZWFkQnl0ZSAzIik7cj10LmdldFVpbnQ4KHQucG9zaXRpb24pPDwxNixyfD10LmdldFVpbnQ4KHQucG9zaXRpb24rMSk8PDgscnw9dC5nZXRVaW50OCh0LnBvc2l0aW9uKzIpO2JyZWFrO2Nhc2UgNDpyPW4/dC5nZXRJbnQzMih0LnBvc2l0aW9uKTp0LmdldFVpbnQzMih0LnBvc2l0aW9uKTticmVhaztjYXNlIDg6aWYobil0aHJvdyBuZXcgRXJyb3IoIm5vdCBzdXBwb3J0ZWQgZm9yIHJlYWRCb2R5IDgiKTtyPXQuZ2V0VWludDMyKHQucG9zaXRpb24pPDwzMixyfD10LmdldFVpbnQzMih0LnBvc2l0aW9uKzQpO2JyZWFrO2RlZmF1bHQ6cj0iIn1yZXR1cm4gdC5wb3NpdGlvbis9ZSxyfXJlYWRVaW50OCgpe3JldHVybiBodS5yZWFkQnl0ZSh0aGlzLDEpfXJlYWRVaW50MTYoKXtyZXR1cm4gaHUucmVhZEJ5dGUodGhpcywyKX1yZWFkVWludDI0KCl7cmV0dXJuIGh1LnJlYWRCeXRlKHRoaXMsMyl9cmVhZFVpbnQzMigpe3JldHVybiBodS5yZWFkQnl0ZSh0aGlzLDQpfXJlYWRVaW50NjQoKXtyZXR1cm4gaHUucmVhZEJ5dGUodGhpcyw4KX1yZWFkSW50OCgpe3JldHVybiBodS5yZWFkQnl0ZSh0aGlzLDEsITApfXJlYWRJbnQxNigpe3JldHVybiBodS5yZWFkQnl0ZSh0aGlzLDIsITApfXJlYWRJbnQzMigpe3JldHVybiBodS5yZWFkQnl0ZSh0aGlzLDQsITApfXdyaXRlVWludDMyKHQpe3JldHVybiBuZXcgVWludDhBcnJheShbdD4+PjI0JjI1NSx0Pj4+MTYmMjU1LHQ+Pj44JjI1NSwyNTUmdF0pfX12YXIgZnU9KHQ9Pih0W3QuaW50ZXJuYWw9MF09ImludGVybmFsIix0W3QuZXh0ZXJuYWw9MV09ImV4dGVybmFsIix0W3QuYnlwYXNzPTJdPSJieXBhc3MiLHQpKShmdXx8e30pO2NvbnN0IGR1PW5ldyBVaW50OEFycmF5KFsxMDksMTY3LDUzLDE5MCwxMDMsOTAsNzIsMSwxNzAsODksNjMsMTY0LDE5NCwxOTksMTksODVdKSxfdT1uZXcgVWludDhBcnJheShbMTA5LDE2Nyw1MywxOTAsMTAzLDkwLDcyLDEsMTcwLDg5LDYzLDE2NCwxOTQsMTk5LDE5LDg0XSkscHU9bmV3IFVpbnQ4QXJyYXkoWzMxLDIzOSwzLDUwLDI0MiwxMjAsNzYsODUsMTY5LDQyLDE2MSw5MSw3NSwxODYsMjJdKTtmdW5jdGlvbiBndSh0KXtjb25zdCBlPVtdO2Zvcig7dD49MjU1Oyl0LT0yNTUsZS5wdXNoKDI1NSk7cmV0dXJuIGUucHVzaCh0KSxuZXcgVWludDhBcnJheShlKX1mdW5jdGlvbiBtdSh0KXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCxuPTA7Zm9yKDsyNTU9PT10W2VdJiZlPHQuYnl0ZUxlbmd0aDspZSsrLG4rPTI1NTtyZXR1cm4gZTx0LmJ5dGVMZW5ndGgmJihuKz10W2UrK10pLFtuLGVdfWNvbnN0IHl1PW5ldyBVaW50OEFycmF5KFs4MCwxXSk7Y2xhc3MgdnV7c3RhdGljIGdlbmVyYXRlU0VJKHQsZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtjb25zdCByPW5ldyBVaW50OEFycmF5KFswLDAsMCwxXSksaT1lP3l1Om5ldyBVaW50OEFycmF5KFs2XSksbz1uZXcgVWludDhBcnJheShbNV0pLGE9dnUuX191dWlkfHwobj9kdTpfdSkscz1ndSh0LmJ5dGVMZW5ndGgrYS5ieXRlTGVuZ3RoKSxjPSh0PT57Y29uc3QgZT1bXTtsZXQgbj0wO2Zvcihjb25zdCByIG9mIHQpbj49MiYmcjw9MyYmKGUucHVzaCgzKSxuPTApLDA9PT1yP24rKzpuPTAsZS5wdXNoKHIpO3JldHVybiBuZXcgVWludDhBcnJheShlKX0pKHQpO3JldHVybiBuZXcgVWludDhBcnJheShbLi4uciwuLi5pLC4uLm8sLi4ucywuLi5hLC4uLmMsMTI4XSl9c3RhdGljIGRlY29kZVNFSUJvZHkodCxlKXtjb25zdCBuPSh0PT57Y29uc3QgZT1bXTtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKyl0W25dPD0zJiYwPT09dFtuLTFdJiYwPT09dFtuLTJdfHxlLnB1c2godFtuXSk7cmV0dXJuIG5ldyBVaW50OEFycmF5KGUpfSkodD10LnNsaWNlKDAsdC5sZW5ndGgtMSkpO2lmKG4uYnl0ZUxlbmd0aDwyKXJldHVybjtsZXQgcj0wO2NvbnN0IGk9ZT8yOjE7aWYoNSE9PW5baV0mJjEwMCE9PW5baV0pcmV0dXJuO3IrPTEraTtjb25zdFtvLGFdPW11KG4scik7cj1hO2xldCBzPTI7Y29uc3QgYz1yK287bi5ieXRlTGVuZ3RoPj1fdS5ieXRlTGVuZ3RoJiZvPj1fdS5ieXRlTGVuZ3RoJiYobi5zbGljZShyLHIrX3UuYnl0ZUxlbmd0aCkudG9TdHJpbmcoKT09PV91LnRvU3RyaW5nKCl8fG4uc2xpY2UocixyK3B1LmJ5dGVMZW5ndGgpLnRvU3RyaW5nKCk9PT1wdS50b1N0cmluZygpKT8ocis9X3UuYnl0ZUxlbmd0aCxzPTEpOm4uYnl0ZUxlbmd0aD49X3UuYnl0ZUxlbmd0aCYmbz49X3UuYnl0ZUxlbmd0aCYmbi5zbGljZShyLHIrZHUuYnl0ZUxlbmd0aCkudG9TdHJpbmcoKT09PWR1LnRvU3RyaW5nKCkmJihyKz1kdS5ieXRlTGVuZ3RoLHM9MCk7cmV0dXJue3R5cGU6cyxwYXlsb2FkOm4uc2xpY2UocixjKX19c3RhdGljIHBhcnNlSW50ZXJuYWxTRUkodCl7Y29uc3QgZT1uZXcgTWFwO2xldCBuPTA7aWYoMD09PXQudHlwZSl7Zm9yKDt0LnBheWxvYWQuYnl0ZUxlbmd0aC1uPj0yOyl7Y29uc3RbcixpXT1tdSh0LnBheWxvYWQsbik7bj1pO2NvbnN0W28sYV09bXUodC5wYXlsb2FkLG4pO2lmKG49YSxlLmdldChyKXx8IShvPD10LnBheWxvYWQuYnl0ZUxlbmd0aC1uKSlicmVhaztlLnNldChyLHQucGF5bG9hZC5zbGljZShuLG4rbykpLG4rPW99cmV0dXJuIGV9fXN0YXRpYyBtYWtlSW50ZXJuYWxTZWkodCl7Y29uc3QgZT1bXTtmb3IoY29uc3RbaSxvXW9mIHQpe2NvbnN0IHQ9Z3UoaSksbj1ndShvLmJ5dGVMZW5ndGgpO2UucHVzaCh0LG4sbyl9Y29uc3Qgbj1lLnJlZHVjZSgoKHQsZSk9PnQrZS5ieXRlTGVuZ3RoKSwwKSxyPW5ldyBVaW50OEFycmF5KG4pO3JldHVybiBlLnJlZHVjZSgoKHQsZSk9PihyLnNldChlLHQpLHQrZS5ieXRlTGVuZ3RoKSksMCkscn19dXUodnUsIl9fdXVpZCIsdm9pZCAwKTt2YXIgYnUsd3U9JCxrdT13LFN1PWZlKCJtYXRjaCIpLE91PW5uLHh1PUIsQXU9JHQsVHU9b3QsRXU9ZnVuY3Rpb24oKXt2YXIgdD1PdSh0aGlzKSxlPSIiO3JldHVybiB0Lmhhc0luZGljZXMmJihlKz0iZCIpLHQuZ2xvYmFsJiYoZSs9ImciKSx0Lmlnbm9yZUNhc2UmJihlKz0iaSIpLHQubXVsdGlsaW5lJiYoZSs9Im0iKSx0LmRvdEFsbCYmKGUrPSJzIiksdC51bmljb2RlJiYoZSs9InUiKSx0LnVuaWNvZGVTZXRzJiYoZSs9InYiKSx0LnN0aWNreSYmKGUrPSJ5IiksZX0sTHU9UmVnRXhwLnByb3RvdHlwZSx6dT1vLEJ1PVEsSXU9ZnVuY3Rpb24odCxlKXt2YXIgbj1CdVt0KyJQcm90b3R5cGUiXSxyPW4mJm5bZV07aWYocilyZXR1cm4gcjt2YXIgaT16dVt0XSxvPWkmJmkucHJvdG90eXBlO3JldHVybiBvJiZvW2VdfSxDdT1uZXcgVWludDhBcnJheSgxNik7ZnVuY3Rpb24gTnUoKXtpZighYnUmJiEoYnU9InVuZGVmaW5lZCIhPXR5cGVvZiBjcnlwdG8mJmNyeXB0by5nZXRSYW5kb21WYWx1ZXMmJmNyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChjcnlwdG8pfHwidW5kZWZpbmVkIiE9dHlwZW9mIG1zQ3J5cHRvJiYiZnVuY3Rpb24iPT10eXBlb2YgbXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzJiZtc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChtc0NyeXB0bykpKXRocm93IG5ldyBFcnJvcigiY3J5cHRvLmdldFJhbmRvbVZhbHVlcygpIG5vdCBzdXBwb3J0ZWQuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdXVpZGpzL3V1aWQjZ2V0cmFuZG9tdmFsdWVzLW5vdC1zdXBwb3J0ZWQiKTtyZXR1cm4gYnUoQ3UpfXZhciBSdT0vXig/OlswLTlhLWZdezh9LVswLTlhLWZdezR9LVsxLTVdWzAtOWEtZl17M30tWzg5YWJdWzAtOWEtZl17M30tWzAtOWEtZl17MTJ9fDAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCkkL2k7Zm9yKHZhciBqdT1bXSxEdT0wO0R1PDI1NjsrK0R1KWp1LnB1c2goKER1KzI1NikudG9TdHJpbmcoMTYpLnN1YnN0cigxKSk7ZnVuY3Rpb24gUHUodCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjAsbj0oanVbdFtlKzBdXStqdVt0W2UrMV1dK2p1W3RbZSsyXV0ranVbdFtlKzNdXSsiLSIranVbdFtlKzRdXStqdVt0W2UrNV1dKyItIitqdVt0W2UrNl1dK2p1W3RbZSs3XV0rIi0iK2p1W3RbZSs4XV0ranVbdFtlKzldXSsiLSIranVbdFtlKzEwXV0ranVbdFtlKzExXV0ranVbdFtlKzEyXV0ranVbdFtlKzEzXV0ranVbdFtlKzE0XV0ranVbdFtlKzE1XV0pLnRvTG93ZXJDYXNlKCk7aWYoIWZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmUnUudGVzdCh0KX0obikpdGhyb3cgVHlwZUVycm9yKCJTdHJpbmdpZmllZCBVVUlEIGlzIGludmFsaWQiKTtyZXR1cm4gbn1mdW5jdGlvbiBVdSh0LGUsbil7dmFyIHI9KHQ9dHx8e30pLnJhbmRvbXx8KHQucm5nfHxOdSkoKTtpZihyWzZdPTE1JnJbNl18NjQscls4XT02MyZyWzhdfDEyOCxlKXtuPW58fDA7Zm9yKHZhciBpPTA7aTwxNjsrK2kpZVtuK2ldPXJbaV07cmV0dXJuIGV9cmV0dXJuIFB1KHIpfWNvbnN0IEZ1PSgpPT4idW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvdztmdW5jdGlvbiBNdSh0KXtyZXR1cm4gbnVsbD09dD8idW5kZWZpbmVkIHwgbnVsbCI6InN0cmluZyI9PXR5cGVvZiB0P3Q6SlNPTi5zdHJpbmdpZnkoe2NvbnRlbnRIaW50OnQuY29udGVudEhpbnQsZW5hYmxlZDp0LmVuYWJsZWQsaWQ6dC5pZCxraW5kOnQua2luZCxsYWJlbDp0LmxhYmVsLG11dGVkOnQubXV0ZWQscmVhZHlTdGF0ZTp0LnJlYWR5U3RhdGV9KX1mdW5jdGlvbiBadSh0KXtyZXR1cm4gbnVsbD09dD8idW5kZWZpbmVkIHwgbnVsbCI6InN0cmluZyI9PXR5cGVvZiB0P3Q6SlNPTi5zdHJpbmdpZnkoe3RyYWNrOk11KHQudHJhY2spfSl9ZnVuY3Rpb24gSnUodCl7cmV0dXJuIG51bGw9PXQ/InVuZGVmaW5lZCB8IG51bGwiOiJzdHJpbmciPT10eXBlb2YgdD90OkpTT04uc3RyaW5naWZ5KHt0cmFjazpNdSh0LnRyYWNrKX0pfWNvbnN0IEh1PSJAYnl0ZWQvdmUtcnRjIixXdT0iQGJ5dGVkL3ZlLXJ0Yy1jYWNoZS1zaXplIjt2YXIgS3U9bmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7dXUodGhpcywic3RvcmVLZXkiLHZvaWQgMCksdXUodGhpcywibG9nTGV2ZWwiLHZvaWQgMCksdXUodGhpcywiTG9nZmlsZVNpemUiLHZvaWQgMCksdXUodGhpcywiZGIiLHZvaWQgMCksdXUodGhpcywibG9nSWQiLHZvaWQgMCksdXUodGhpcywiY2FjaGVMb2ciLHZvaWQgMCksdXUodGhpcywiY2FjaGVkU2l6ZSIsdm9pZCAwKSx1dSh0aGlzLCJwcmVDYWNoZVRpbWUiLHZvaWQgMCksdXUodGhpcywidGltZXIiLHZvaWQgMCksdXUodGhpcywiX2dldFNpemUiLCh0PT5uZXcgQmxvYih0KS5zaXplLzEwNDg1NzYpKSx0aGlzLnN0b3JlS2V5PSIiLHRoaXMubG9nSWQ9MSx0aGlzLmNhY2hlTG9nPSIiLHRoaXMubG9nTGV2ZWw9Im5vbmUiLHRoaXMuTG9nZmlsZVNpemU9MTAwLHRoaXMuX2NyZWF0ZVN0b3JlKCl9X2NyZWF0ZVN0b3JlKCl7aWYoRnUoKXx8IXdpbmRvdy5pbmRleGVkREIpcmV0dXJuO2NvbnN0IHQ9aW5kZXhlZERCLm9wZW4oIkBieXRlZC92ZS1ydGMiKTt0Lm9udXBncmFkZW5lZWRlZD0oKT0+e3QucmVzdWx0LmNyZWF0ZU9iamVjdFN0b3JlKEh1KTt0cnl7bG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oV3UpfWNhdGNoKGVnKXt9fSx0Lm9uZXJyb3I9dD0+e30sdC5vbnN1Y2Nlc3M9KCk9Pnt0aGlzLmRiPXQucmVzdWx0LHRoaXMuX2dldENhY2hlZFNpemUoKX19X2dldENhY2hlZFNpemUoKXt0cnl7Y29uc3QgdD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbShXdSk7dD90aGlzLmNhY2hlZFNpemU9TnVtYmVyKHQpOnRoaXMudmFsdWVzKCkudGhlbigodD0+e3RoaXMuY2FjaGVkU2l6ZT10aGlzLl9nZXRTaXplKHQpLHRoaXMuX3NldENhY2hlZFNpemUoKX0pKX1jYXRjaChlZyl7fX1fc2V0Q2FjaGVkU2l6ZSgpe3RyeXtsb2NhbFN0b3JhZ2Uuc2V0SXRlbShXdSwiIi5jb25jYXQodGhpcy5jYWNoZWRTaXplKSl9Y2F0Y2goZWcpe319X2dldFN0b3JlKHQpe2lmKHRoaXMuZGIpcmV0dXJuIHRoaXMuZGIudHJhbnNhY3Rpb24oSHUsdCkub2JqZWN0U3RvcmUoSHUpfXNldCh0KXtyZXR1cm4gbmV3IFByb21pc2UoKChlLG4pPT57aWYoIm5vbmUiPT09dGhpcy5sb2dMZXZlbClyZXR1cm4gZSgpO2lmKHQmJnRoaXMucHJlQ2FjaGVUaW1lJiZ0aGlzLnByZUNhY2hlVGltZS1EYXRlLm5vdygpPDFlMylyZXR1cm4gdGhpcy5jYWNoZUxvZys9IlxuXG4iLmNvbmNhdCh0aGlzLmxvZ0lkLCI6ICIpLmNvbmNhdCh0KSx0aGlzLmxvZ0lkKyssdGhpcy50aW1lcnx8KHRoaXMudGltZXI9c2V0VGltZW91dCgoKCk9Pnt0aGlzLnNldCgiIil9KSwxZTMtKHRoaXMucHJlQ2FjaGVUaW1lLURhdGUubm93KCkpKSksZSgpO2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLnRpbWVyPW51bGw7Y29uc3Qgcj10aGlzLl9nZXRTdG9yZSgicmVhZHdyaXRlIik7aWYoIXIpcmV0dXJuIG4oImdldCBzdG9yZSBmYWlsIik7dGhpcy5jYWNoZWRTaXplJiZ0aGlzLmNhY2hlZFNpemU+dGhpcy5Mb2dmaWxlU2l6ZSYmdGhpcy5rZXlFYXJsaWVzdCgpLnRoZW4oKHQ9Pnt0aGlzLmdldCh0KS50aGVuKChlPT57dGhpcy5kZWwodCkudGhlbigoKCk9Pnt0aGlzLmNhY2hlZFNpemU9dGhpcy5jYWNoZWRTaXplLXRoaXMuX2dldFNpemUoWyIiLmNvbmNhdChlKV0pLHRoaXMuX3NldENhY2hlZFNpemUoKX0pKX0pKX0pKTtjb25zdCBpPXIuZ2V0KHRoaXMuc3RvcmVLZXkpO2kub25zdWNjZXNzPSgpPT57dHJ5e2NvbnN0IG49IiIuY29uY2F0KGkucmVzdWx0fHwiIikuY29uY2F0KHRoaXMuY2FjaGVMb2cpLG89dD8iIi5jb25jYXQobj8iXG5cbiI6IiIpLmNvbmNhdCh0aGlzLmxvZ0lkLCI6ICIpLmNvbmNhdCh0KToiIjtyLnB1dCgiIi5jb25jYXQobikuY29uY2F0KG8pLHRoaXMuc3RvcmVLZXkpLHQmJnRoaXMubG9nSWQrKyx0aGlzLmNhY2hlTG9nPSIiLHRoaXMuY2FjaGVkU2l6ZT0odGhpcy5jYWNoZWRTaXplfHwwKSt0aGlzLl9nZXRTaXplKFsiIi5jb25jYXQodGhpcy5jYWNoZUxvZykuY29uY2F0KG8pXSksdGhpcy5fc2V0Q2FjaGVkU2l6ZSgpLHRoaXMucHJlQ2FjaGVUaW1lPURhdGUubm93KCksZSgpfWNhdGNoKG8pe2lmKCF0KXJldHVybiBuKG8pO3RoaXMuY2FjaGVMb2crPSJcblxuIi5jb25jYXQodGhpcy5sb2dJZCwiOiAiKS5jb25jYXQodCksdGhpcy5sb2dJZCsrLG4obyl9fSxpLm9uZXJyb3I9ZT0+e2lmKCF0KXJldHVybiBuKGUpO3RoaXMuY2FjaGVMb2crPSJcblxuIi5jb25jYXQodGhpcy5sb2dJZCwiOiAiKS5jb25jYXQodCksdGhpcy5sb2dJZCsrLG4oZSl9fSkpfWdldCh0KXtyZXR1cm4gbmV3IFByb21pc2UoKChlLG4pPT57Y29uc3Qgcj10aGlzLl9nZXRTdG9yZSgicmVhZG9ubHkiKTtpZighcilyZXR1cm4gbigpO2NvbnN0IGk9ci5nZXQodCk7aS5vbnN1Y2Nlc3M9KCk9PntlKGkucmVzdWx0KX0saS5vbmVycm9yPXQ9PntuKHQpfX0pKX1kZWwoKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5zdG9yZUtleTtyZXR1cm4gbmV3IFByb21pc2UoKChlLG4pPT57Y29uc3Qgcj10aGlzLl9nZXRTdG9yZSgicmVhZHdyaXRlIik7aWYoIXIpcmV0dXJuIG4oKTtjb25zdCBpPXIuZGVsZXRlKHQpO2kub25zdWNjZXNzPSgpPT5lKGkucmVzdWx0KSxpLm9uZXJyb3I9dD0+bih0KX0pKX1rZXlFYXJsaWVzdCgpe3JldHVybiB0aGlzLmtleXMoKS50aGVuKCh0PT57bGV0IGUsbj1EYXRlLm5vdygpO3JldHVybiB0LmZvckVhY2goKHQ9PntpZighdHx8IXQubGVuZ3RoKXJldHVybjtjb25zdCByPXQuc3BsaXQoIi0iKVswXTtOdW1iZXIocik8biYmKG49TnVtYmVyKHIpLGU9dCl9KSksZX0pKX1rZXlzKCl7cmV0dXJuIG5ldyBQcm9taXNlKCgodCxlKT0+e2NvbnN0IG49dGhpcy5fZ2V0U3RvcmUoInJlYWRvbmx5Iik7aWYoIW4pcmV0dXJuIGUoKTtpZihuLmdldEFsbEtleXMpe2NvbnN0IHI9bi5nZXRBbGxLZXlzKCk7cmV0dXJuIHIub25zdWNjZXNzPSgpPT57dChyLnJlc3VsdCl9LHZvaWQoci5vbmVycm9yPSgpPT57ZSgpfSl9Y29uc3Qgcj1bXTtuLm9wZW5DdXJzb3IoKS5vbnN1Y2Nlc3M9ZnVuY3Rpb24oKXt0aGlzLnJlc3VsdCYmKHIucHVzaCh0aGlzLnJlc3VsdC5rZXkpLHRoaXMucmVzdWx0LmNvbnRpbnVlKCkpfSxuLnRyYW5zYWN0aW9uLm9uY29tcGxldGU9KCk9PnQocil9KSl9dmFsdWVzKCl7cmV0dXJuIG5ldyBQcm9taXNlKCgodCxlKT0+e2NvbnN0IG49dGhpcy5fZ2V0U3RvcmUoInJlYWRvbmx5Iik7aWYoIW4pcmV0dXJuIGUoKTtpZihuLmdldEFsbCl7Y29uc3Qgcj1uLmdldEFsbCgpO3JldHVybiByLm9uc3VjY2Vzcz0oKT0+e3Qoci5yZXN1bHQpfSx2b2lkKHIub25lcnJvcj0oKT0+e2UoKX0pfWNvbnN0IHI9W107bi5vcGVuQ3Vyc29yKCkub25zdWNjZXNzPWZ1bmN0aW9uKCl7dGhpcy5yZXN1bHQmJihyLnB1c2godGhpcy5yZXN1bHQudmFsdWUpLHRoaXMucmVzdWx0LmNvbnRpbnVlKCkpfSxuLnRyYW5zYWN0aW9uLm9uY29tcGxldGU9KCk9PnQocil9KSl9ZG93bmxvYWQodCl7dD10fHx0aGlzLnN0b3JlS2V5LHRoaXMuZ2V0KHQpLnRoZW4oKGU9Pntjb25zdCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtuLmRvd25sb2FkPSIiLmNvbmNhdCh0LCIudHh0Iiksbi5ocmVmPSJkYXRhOnRleHQvcGFpbnQ7dXRmLTgsIi5jb25jYXQoZXx8IiIpLG4uY2xpY2soKX0pKX19O2NsYXNzIEd1e2NvbnN0cnVjdG9yKCl7dXUodGhpcywiX2FsbCIse30pfW9uKHQsZSl7Y29uc3Qgbj10aGlzLl9hbGxbdF07bj9uLnB1c2goZSk6dGhpcy5fYWxsW3RdPVtlXX1vbmNlKHQsZSl7dmFyIG49dGhpcztjb25zdCByPWZ1bmN0aW9uKCl7ZSguLi5hcmd1bWVudHMpLG4ub2ZmKHQscil9O3RoaXMub24odCxyKX1vZmYodCxlKXtjb25zdCBuPXRoaXMuX2FsbFt0XTtudWxsPT1ufHxuLnNwbGljZShuLmluZGV4T2YoZSk+Pj4wLDEpfWVtaXQodCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkoZT4xP2UtMTowKSxyPTE7cjxlO3IrKyluW3ItMV09YXJndW1lbnRzW3JdO2NvbnN0IGk9dGhpcy5fYWxsW3RdO251bGw9PWl8fGkuc2xpY2UoKS5mb3JFYWNoKCh0PT50KC4uLm4pKSl9c2FmZUVtaXQodCl7dHJ5e2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KGU+MT9lLTE6MCkscj0xO3I8ZTtyKyspbltyLTFdPWFyZ3VtZW50c1tyXTtyZXR1cm4gdGhpcy5lbWl0KHQsLi4ubil9Y2F0Y2goZWcpe2NvbnNvbGUuZXJyb3IoZWcpfX1kZXN0cm95KCl7dGhpcy5fYWxsPXt9fX1jb25zdCBWdT1bIlVQTE9BRF9DT05TT0xFX0xFTkdUSF9DVVQiLCJVUExPQURfUkVQT1JUX0xJTUlUIl07Y29uc3QgWXU9bmV3IGNsYXNzIGV4dGVuZHMgR3V7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHV1KHRoaXMsImNvbmZpZyIse1VQTE9BRF9DT05TT0xFX09OOiExLFVQTE9BRF9DT05TT0xFX0xFTkdUSF9DVVQ6MjAwLFVQTE9BRF9SRVBPUlRfTElNSVQ6NDVlNCxFTkFCTEVfUkVQT1JUX0lEQl9CVUZGRVI6ITF9KX1zZXRQYXJhbWV0ZXIodCxlKXtpZihmdW5jdGlvbih0KXtyZXR1cm4gVnUuaW5jbHVkZXModCl9KHQpKXRyeXtjb25zdCBuPU51bWJlcihlKTtpZihOdW1iZXIuaXNOYU4obikpcmV0dXJuO3RoaXMuY29uZmlnW3RdPW59Y2F0Y2gobil7cmV0dXJuIHZvaWQgY29uc29sZS53YXJuKCJDYW5ub3QgY29udmVydCBjb3JlIGxpYiBwYXJhbWV0ZXIgIi5jb25jYXQodCwiOiIpLmNvbmNhdChlLCIgaW50byBudW1iZXIiKSl9ZWxzZSB0aGlzLmNvbmZpZ1t0XT1lO3RoaXMuZW1pdCh0LHRoaXMuY29uZmlnW3RdKX1nZXRQYXJhbWV0ZXIodCl7cmV0dXJuIHRoaXMuY29uZmlnW3RdfWdldEtleXMoKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5jb25maWcpfX07dmFyIFh1PVl0LHF1PW1pO0xuKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6YSgoZnVuY3Rpb24oKXtxdSgxKX0pKX0se2tleXM6ZnVuY3Rpb24odCl7cmV0dXJuIHF1KFh1KHQpKX19KTt2YXIgJHU9bihRLk9iamVjdC5rZXlzKSxRdT1uKFEuT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyksdGg9cW8uZmlsdGVyO0xuKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6IU5yKCJmaWx0ZXIiKX0se2ZpbHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdGgodGhpcyx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KTt2YXIgZWg9SXUoIkFycmF5IiwiZmlsdGVyIiksbmg9b3Qscmg9ZWgsaWg9QXJyYXkucHJvdG90eXBlLG9oPW4oKGZ1bmN0aW9uKHQpe3ZhciBlPXQuZmlsdGVyO3JldHVybiB0PT09aWh8fG5oKGloLHQpJiZlPT09aWguZmlsdGVyP3JoOmV9KSksYWg9e2V4cG9ydHM6e319LHNoPUxuLGNoPWEsbGg9WCx1aD1ULmYsaGg9RTtzaCh7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOiFoaHx8Y2goKGZ1bmN0aW9uKCl7dWgoMSl9KSksc2hhbTohaGh9LHtnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdWgobGgodCksZSl9fSk7dmFyIGZoPVEuT2JqZWN0LGRoPWFoLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZmguZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsZSl9O2ZoLmdldE93blByb3BlcnR5RGVzY3JpcHRvci5zaGFtJiYoZGguc2hhbT0hMCk7dmFyIF9oPW4oYWguZXhwb3J0cykscGg9RSxnaD1EbixtaD1UeXBlRXJyb3IseWg9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcix2aD1waCYmIWZ1bmN0aW9uKCl7aWYodm9pZCAwIT09dGhpcylyZXR1cm4hMDt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCJsZW5ndGgiLHt3cml0YWJsZTohMX0pLmxlbmd0aD0xfWNhdGNoKGVnKXtyZXR1cm4gZWcgaW5zdGFuY2VvZiBUeXBlRXJyb3J9fSgpLGJoPVl0LHdoPVduLGtoPXZoP2Z1bmN0aW9uKHQsZSl7aWYoZ2godCkmJiF5aCh0LCJsZW5ndGgiKS53cml0YWJsZSl0aHJvdyBuZXcgbWgoIkNhbm5vdCBzZXQgcmVhZCBvbmx5IC5sZW5ndGgiKTtyZXR1cm4gdC5sZW5ndGg9ZX06ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5sZW5ndGg9ZX0sU2g9R247TG4oe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGFyaXR5OjEsZm9yY2VkOmEoKGZ1bmN0aW9uKCl7cmV0dXJuIDQyOTQ5NjcyOTchPT1bXS5wdXNoLmNhbGwoe2xlbmd0aDo0Mjk0OTY3Mjk2fSwxKX0pKXx8IWZ1bmN0aW9uKCl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwibGVuZ3RoIix7d3JpdGFibGU6ITF9KS5wdXNoKCl9Y2F0Y2goZWcpe3JldHVybiBlZyBpbnN0YW5jZW9mIFR5cGVFcnJvcn19KCl9LHtwdXNoOmZ1bmN0aW9uKHQpe3ZhciBlPWJoKHRoaXMpLG49d2goZSkscj1hcmd1bWVudHMubGVuZ3RoO1NoKG4rcik7Zm9yKHZhciBpPTA7aTxyO2krKyllW25dPWFyZ3VtZW50c1tpXSxuKys7cmV0dXJuIGtoKGUsbiksbn19KTt2YXIgT2g9SXUoIkFycmF5IiwicHVzaCIpLHhoPW90LEFoPU9oLFRoPUFycmF5LnByb3RvdHlwZSxFaD1uKChmdW5jdGlvbih0KXt2YXIgZT10LnB1c2g7cmV0dXJuIHQ9PT1UaHx8eGgoVGgsdCkmJmU9PT1UaC5wdXNoP0FoOmV9KSksTGg9YSx6aD1xby5mb3JFYWNoLEJoPWZ1bmN0aW9uKHQsZSl7dmFyIG49W11bdF07cmV0dXJuISFuJiZMaCgoZnVuY3Rpb24oKXtuLmNhbGwobnVsbCxlfHxmdW5jdGlvbigpe3JldHVybiAxfSwxKX0pKX0oImZvckVhY2giKT9bXS5mb3JFYWNoOmZ1bmN0aW9uKHQpe3JldHVybiB6aCh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfTtMbih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOltdLmZvckVhY2ghPT1CaH0se2ZvckVhY2g6Qmh9KTt2YXIgSWg9SXUoIkFycmF5IiwiZm9yRWFjaCIpLENoPWFyLE5oPSR0LFJoPW90LGpoPUloLERoPUFycmF5LnByb3RvdHlwZSxQaD17RE9NVG9rZW5MaXN0OiEwLE5vZGVMaXN0OiEwfSxVaD1uKChmdW5jdGlvbih0KXt2YXIgZT10LmZvckVhY2g7cmV0dXJuIHQ9PT1EaHx8UmgoRGgsdCkmJmU9PT1EaC5mb3JFYWNofHxOaChQaCxDaCh0KSk/amg6ZX0pKSxGaD1pdCxNaD1KaSxaaD1RaSxKaD1ubixIaD1tKFtdLmNvbmNhdCksV2g9RmgoIlJlZmxlY3QiLCJvd25LZXlzIil8fGZ1bmN0aW9uKHQpe3ZhciBlPU1oLmYoSmgodCkpLG49WmguZjtyZXR1cm4gbj9IaChlLG4odCkpOmV9LEtoPVgsR2g9VCxWaD1xbjtMbih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsc2hhbTohRX0se2dldE93blByb3BlcnR5RGVzY3JpcHRvcnM6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLG4scj1LaCh0KSxpPUdoLmYsbz1XaChyKSxhPXt9LHM9MDtvLmxlbmd0aD5zOyl2b2lkIDAhPT0obj1pKHIsZT1vW3MrK10pKSYmVmgoYSxlLG4pO3JldHVybiBhfX0pO3ZhciBZaD1uKFEuT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpLFhoPXtleHBvcnRzOnt9fSxxaD1MbiwkaD1FLFFoPSRyLmY7cWgoe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDpPYmplY3QuZGVmaW5lUHJvcGVydGllcyE9PVFoLHNoYW06ISRofSx7ZGVmaW5lUHJvcGVydGllczpRaH0pO3ZhciB0Zj1RLk9iamVjdCxlZj1YaC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRmLmRlZmluZVByb3BlcnRpZXModCxlKX07dGYuZGVmaW5lUHJvcGVydGllcy5zaGFtJiYoZWYuc2hhbT0hMCk7dmFyIG5mPW4oWGguZXhwb3J0cyk7ZnVuY3Rpb24gcmYodCxlKXt2YXIgbj0kdSh0KTtpZihRdSl7dmFyIHI9UXUodCk7ZSYmKHI9b2gocikuY2FsbChyLChmdW5jdGlvbihlKXtyZXR1cm4gX2godCxlKS5lbnVtZXJhYmxlfSkpKSxFaChuKS5hcHBseShuLHIpfXJldHVybiBufWZ1bmN0aW9uIG9mKHQpe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciBuLHIsaT1udWxsIT1hcmd1bWVudHNbZV0/YXJndW1lbnRzW2VdOnt9O2UlMj9VaChuPXJmKE9iamVjdChpKSwhMCkpLmNhbGwobiwoZnVuY3Rpb24oZSl7dXUodCxlLGlbZV0pfSkpOlloP25mKHQsWWgoaSkpOlVoKHI9cmYoT2JqZWN0KGkpKSkuY2FsbChyLChmdW5jdGlvbihlKXtSbih0LGUsX2goaSxlKSl9KSl9cmV0dXJuIHR9dmFyIGFmPURuLHNmPVduLGNmPUduLGxmPVhlLHVmPWZ1bmN0aW9uKHQsZSxuLHIsaSxvLGEscyl7Zm9yKHZhciBjLGwsdT1pLGg9MCxmPSEhYSYmbGYoYSxzKTtoPHI7KWggaW4gbiYmKGM9Zj9mKG5baF0saCxlKTpuW2hdLG8+MCYmYWYoYyk/KGw9c2YoYyksdT11Zih0LGUsYyxsLHUsby0xKS0xKTooY2YodSsxKSx0W3VdPWMpLHUrKyksaCsrO3JldHVybiB1fSxoZj11ZixmZj1ZdCxkZj1XbixfZj1NbixwZj16cjtMbih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITB9LHtmbGF0OmZ1bmN0aW9uKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD9hcmd1bWVudHNbMF06dm9pZCAwLGU9ZmYodGhpcyksbj1kZihlKSxyPXBmKGUsMCk7cmV0dXJuIHIubGVuZ3RoPWhmKHIsZSxlLG4sMCx2b2lkIDA9PT10PzE6X2YodCkpLHJ9fSk7dmFyIGdmPUl1KCJBcnJheSIsImZsYXQiKSxtZj1vdCx5Zj1nZix2Zj1BcnJheS5wcm90b3R5cGUsYmY9bigoZnVuY3Rpb24odCl7dmFyIGU9dC5mbGF0O3JldHVybiB0PT09dmZ8fG1mKHZmLHQpJiZlPT09dmYuZmxhdD95ZjplfSkpLHdmPXt9OyFmdW5jdGlvbih0KXt2YXIgZT0idW5kZWZpbmVkIiE9dHlwZW9mIFVpbnQ4QXJyYXkmJiJ1bmRlZmluZWQiIT10eXBlb2YgVWludDE2QXJyYXkmJiJ1bmRlZmluZWQiIT10eXBlb2YgSW50MzJBcnJheTtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGUpfXQuYXNzaWduPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7ZS5sZW5ndGg7KXt2YXIgcj1lLnNoaWZ0KCk7aWYocil7aWYoIm9iamVjdCIhPXR5cGVvZiByKXRocm93IG5ldyBUeXBlRXJyb3IocisibXVzdCBiZSBub24tb2JqZWN0Iik7Zm9yKHZhciBpIGluIHIpbihyLGkpJiYodFtpXT1yW2ldKX19cmV0dXJuIHR9LHQuc2hyaW5rQnVmPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGVuZ3RoPT09ZT90OnQuc3ViYXJyYXk/dC5zdWJhcnJheSgwLGUpOih0Lmxlbmd0aD1lLHQpfTt2YXIgcj17YXJyYXlTZXQ6ZnVuY3Rpb24odCxlLG4scixpKXtpZihlLnN1YmFycmF5JiZ0LnN1YmFycmF5KXQuc2V0KGUuc3ViYXJyYXkobixuK3IpLGkpO2Vsc2UgZm9yKHZhciBvPTA7bzxyO28rKyl0W2krb109ZVtuK29dfSxmbGF0dGVuQ2h1bmtzOmZ1bmN0aW9uKHQpe3ZhciBlLG4scixpLG8sYTtmb3Iocj0wLGU9MCxuPXQubGVuZ3RoO2U8bjtlKyspcis9dFtlXS5sZW5ndGg7Zm9yKGE9bmV3IFVpbnQ4QXJyYXkociksaT0wLGU9MCxuPXQubGVuZ3RoO2U8bjtlKyspbz10W2VdLGEuc2V0KG8saSksaSs9by5sZW5ndGg7cmV0dXJuIGF9fSxpPXthcnJheVNldDpmdW5jdGlvbih0LGUsbixyLGkpe2Zvcih2YXIgbz0wO288cjtvKyspdFtpK29dPWVbbitvXX0sZmxhdHRlbkNodW5rczpmdW5jdGlvbih0KXtyZXR1cm5bXS5jb25jYXQuYXBwbHkoW10sdCl9fTt0LnNldFR5cGVkPWZ1bmN0aW9uKGUpe2U/KHQuQnVmOD1VaW50OEFycmF5LHQuQnVmMTY9VWludDE2QXJyYXksdC5CdWYzMj1JbnQzMkFycmF5LHQuYXNzaWduKHQscikpOih0LkJ1Zjg9QXJyYXksdC5CdWYxNj1BcnJheSx0LkJ1ZjMyPUFycmF5LHQuYXNzaWduKHQsaSkpfSx0LnNldFR5cGVkKGUpfSh3Zik7dmFyIGtmPXt9LFNmPXt9LE9mPXt9LHhmPXdmO2Z1bmN0aW9uIEFmKHQpe2Zvcih2YXIgZT10Lmxlbmd0aDstLWU+PTA7KXRbZV09MH12YXIgVGY9MjU2LEVmPTI4NixMZj0zMCx6Zj0xNSxCZj1bMCwwLDAsMCwwLDAsMCwwLDEsMSwxLDEsMiwyLDIsMiwzLDMsMywzLDQsNCw0LDQsNSw1LDUsNSwwXSxJZj1bMCwwLDAsMCwxLDEsMiwyLDMsMyw0LDQsNSw1LDYsNiw3LDcsOCw4LDksOSwxMCwxMCwxMSwxMSwxMiwxMiwxMywxM10sQ2Y9WzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwzLDddLE5mPVsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XSxSZj1uZXcgQXJyYXkoNTc2KTtBZihSZik7dmFyIGpmPW5ldyBBcnJheSg2MCk7QWYoamYpO3ZhciBEZj1uZXcgQXJyYXkoNTEyKTtBZihEZik7dmFyIFBmPW5ldyBBcnJheSgyNTYpO0FmKFBmKTt2YXIgVWY9bmV3IEFycmF5KDI5KTtBZihVZik7dmFyIEZmLE1mLFpmLEpmPW5ldyBBcnJheShMZik7ZnVuY3Rpb24gSGYodCxlLG4scixpKXt0aGlzLnN0YXRpY190cmVlPXQsdGhpcy5leHRyYV9iaXRzPWUsdGhpcy5leHRyYV9iYXNlPW4sdGhpcy5lbGVtcz1yLHRoaXMubWF4X2xlbmd0aD1pLHRoaXMuaGFzX3N0cmVlPXQmJnQubGVuZ3RofWZ1bmN0aW9uIFdmKHQsZSl7dGhpcy5keW5fdHJlZT10LHRoaXMubWF4X2NvZGU9MCx0aGlzLnN0YXRfZGVzYz1lfWZ1bmN0aW9uIEtmKHQpe3JldHVybiB0PDI1Nj9EZlt0XTpEZlsyNTYrKHQ+Pj43KV19ZnVuY3Rpb24gR2YodCxlKXt0LnBlbmRpbmdfYnVmW3QucGVuZGluZysrXT0yNTUmZSx0LnBlbmRpbmdfYnVmW3QucGVuZGluZysrXT1lPj4+OCYyNTV9ZnVuY3Rpb24gVmYodCxlLG4pe3QuYmlfdmFsaWQ+MTYtbj8odC5iaV9idWZ8PWU8PHQuYmlfdmFsaWQmNjU1MzUsR2YodCx0LmJpX2J1ZiksdC5iaV9idWY9ZT4+MTYtdC5iaV92YWxpZCx0LmJpX3ZhbGlkKz1uLTE2KToodC5iaV9idWZ8PWU8PHQuYmlfdmFsaWQmNjU1MzUsdC5iaV92YWxpZCs9bil9ZnVuY3Rpb24gWWYodCxlLG4pe1ZmKHQsblsyKmVdLG5bMiplKzFdKX1mdW5jdGlvbiBYZih0LGUpe3ZhciBuPTA7ZG97bnw9MSZ0LHQ+Pj49MSxuPDw9MX13aGlsZSgtLWU+MCk7cmV0dXJuIG4+Pj4xfWZ1bmN0aW9uIHFmKHQsZSxuKXt2YXIgcixpLG89bmV3IEFycmF5KDE2KSxhPTA7Zm9yKHI9MTtyPD16ZjtyKyspb1tyXT1hPWErbltyLTFdPDwxO2ZvcihpPTA7aTw9ZTtpKyspe3ZhciBzPXRbMippKzFdOzAhPT1zJiYodFsyKmldPVhmKG9bc10rKyxzKSl9fWZ1bmN0aW9uICRmKHQpe3ZhciBlO2ZvcihlPTA7ZTxFZjtlKyspdC5keW5fbHRyZWVbMiplXT0wO2ZvcihlPTA7ZTxMZjtlKyspdC5keW5fZHRyZWVbMiplXT0wO2ZvcihlPTA7ZTwxOTtlKyspdC5ibF90cmVlWzIqZV09MDt0LmR5bl9sdHJlZVs1MTJdPTEsdC5vcHRfbGVuPXQuc3RhdGljX2xlbj0wLHQubGFzdF9saXQ9dC5tYXRjaGVzPTB9ZnVuY3Rpb24gUWYodCl7dC5iaV92YWxpZD44P0dmKHQsdC5iaV9idWYpOnQuYmlfdmFsaWQ+MCYmKHQucGVuZGluZ19idWZbdC5wZW5kaW5nKytdPXQuYmlfYnVmKSx0LmJpX2J1Zj0wLHQuYmlfdmFsaWQ9MH1mdW5jdGlvbiB0ZCh0LGUsbixyKXt2YXIgaT0yKmUsbz0yKm47cmV0dXJuIHRbaV08dFtvXXx8dFtpXT09PXRbb10mJnJbZV08PXJbbl19ZnVuY3Rpb24gZWQodCxlLG4pe2Zvcih2YXIgcj10LmhlYXBbbl0saT1uPDwxO2k8PXQuaGVhcF9sZW4mJihpPHQuaGVhcF9sZW4mJnRkKGUsdC5oZWFwW2krMV0sdC5oZWFwW2ldLHQuZGVwdGgpJiZpKyssIXRkKGUscix0LmhlYXBbaV0sdC5kZXB0aCkpOyl0LmhlYXBbbl09dC5oZWFwW2ldLG49aSxpPDw9MTt0LmhlYXBbbl09cn1mdW5jdGlvbiBuZCh0LGUsbil7dmFyIHIsaSxvLGEscz0wO2lmKDAhPT10Lmxhc3RfbGl0KWRve3I9dC5wZW5kaW5nX2J1Zlt0LmRfYnVmKzIqc108PDh8dC5wZW5kaW5nX2J1Zlt0LmRfYnVmKzIqcysxXSxpPXQucGVuZGluZ19idWZbdC5sX2J1ZitzXSxzKyssMD09PXI/WWYodCxpLGUpOihZZih0LChvPVBmW2ldKStUZisxLGUpLDAhPT0oYT1CZltvXSkmJlZmKHQsaS09VWZbb10sYSksWWYodCxvPUtmKC0tciksbiksMCE9PShhPUlmW29dKSYmVmYodCxyLT1KZltvXSxhKSl9d2hpbGUoczx0Lmxhc3RfbGl0KTtZZih0LDI1NixlKX1mdW5jdGlvbiByZCh0LGUpe3ZhciBuLHIsaSxvPWUuZHluX3RyZWUsYT1lLnN0YXRfZGVzYy5zdGF0aWNfdHJlZSxzPWUuc3RhdF9kZXNjLmhhc19zdHJlZSxjPWUuc3RhdF9kZXNjLmVsZW1zLGw9LTE7Zm9yKHQuaGVhcF9sZW49MCx0LmhlYXBfbWF4PTU3MyxuPTA7bjxjO24rKykwIT09b1syKm5dPyh0LmhlYXBbKyt0LmhlYXBfbGVuXT1sPW4sdC5kZXB0aFtuXT0wKTpvWzIqbisxXT0wO2Zvcig7dC5oZWFwX2xlbjwyOylvWzIqKGk9dC5oZWFwWysrdC5oZWFwX2xlbl09bDwyPysrbDowKV09MSx0LmRlcHRoW2ldPTAsdC5vcHRfbGVuLS0scyYmKHQuc3RhdGljX2xlbi09YVsyKmkrMV0pO2ZvcihlLm1heF9jb2RlPWwsbj10LmhlYXBfbGVuPj4xO24+PTE7bi0tKWVkKHQsbyxuKTtpPWM7ZG97bj10LmhlYXBbMV0sdC5oZWFwWzFdPXQuaGVhcFt0LmhlYXBfbGVuLS1dLGVkKHQsbywxKSxyPXQuaGVhcFsxXSx0LmhlYXBbLS10LmhlYXBfbWF4XT1uLHQuaGVhcFstLXQuaGVhcF9tYXhdPXIsb1syKmldPW9bMipuXStvWzIqcl0sdC5kZXB0aFtpXT0odC5kZXB0aFtuXT49dC5kZXB0aFtyXT90LmRlcHRoW25dOnQuZGVwdGhbcl0pKzEsb1syKm4rMV09b1syKnIrMV09aSx0LmhlYXBbMV09aSsrLGVkKHQsbywxKX13aGlsZSh0LmhlYXBfbGVuPj0yKTt0LmhlYXBbLS10LmhlYXBfbWF4XT10LmhlYXBbMV0sZnVuY3Rpb24odCxlKXt2YXIgbixyLGksbyxhLHMsYz1lLmR5bl90cmVlLGw9ZS5tYXhfY29kZSx1PWUuc3RhdF9kZXNjLnN0YXRpY190cmVlLGg9ZS5zdGF0X2Rlc2MuaGFzX3N0cmVlLGY9ZS5zdGF0X2Rlc2MuZXh0cmFfYml0cyxkPWUuc3RhdF9kZXNjLmV4dHJhX2Jhc2UsXz1lLnN0YXRfZGVzYy5tYXhfbGVuZ3RoLHA9MDtmb3Iobz0wO288PXpmO28rKyl0LmJsX2NvdW50W29dPTA7Zm9yKGNbMip0LmhlYXBbdC5oZWFwX21heF0rMV09MCxuPXQuaGVhcF9tYXgrMTtuPDU3MztuKyspKG89Y1syKmNbMioocj10LmhlYXBbbl0pKzFdKzFdKzEpPl8mJihvPV8scCsrKSxjWzIqcisxXT1vLHI+bHx8KHQuYmxfY291bnRbb10rKyxhPTAscj49ZCYmKGE9ZltyLWRdKSxzPWNbMipyXSx0Lm9wdF9sZW4rPXMqKG8rYSksaCYmKHQuc3RhdGljX2xlbis9cyoodVsyKnIrMV0rYSkpKTtpZigwIT09cCl7ZG97Zm9yKG89Xy0xOzA9PT10LmJsX2NvdW50W29dOylvLS07dC5ibF9jb3VudFtvXS0tLHQuYmxfY291bnRbbysxXSs9Mix0LmJsX2NvdW50W19dLS0scC09Mn13aGlsZShwPjApO2ZvcihvPV87MCE9PW87by0tKWZvcihyPXQuYmxfY291bnRbb107MCE9PXI7KShpPXQuaGVhcFstLW5dKT5sfHwoY1syKmkrMV0hPT1vJiYodC5vcHRfbGVuKz0oby1jWzIqaSsxXSkqY1syKmldLGNbMippKzFdPW8pLHItLSl9fSh0LGUpLHFmKG8sbCx0LmJsX2NvdW50KX1mdW5jdGlvbiBpZCh0LGUsbil7dmFyIHIsaSxvPS0xLGE9ZVsxXSxzPTAsYz03LGw9NDtmb3IoMD09PWEmJihjPTEzOCxsPTMpLGVbMioobisxKSsxXT02NTUzNSxyPTA7cjw9bjtyKyspaT1hLGE9ZVsyKihyKzEpKzFdLCsrczxjJiZpPT09YXx8KHM8bD90LmJsX3RyZWVbMippXSs9czowIT09aT8oaSE9PW8mJnQuYmxfdHJlZVsyKmldKyssdC5ibF90cmVlWzMyXSsrKTpzPD0xMD90LmJsX3RyZWVbMzRdKys6dC5ibF90cmVlWzM2XSsrLHM9MCxvPWksMD09PWE/KGM9MTM4LGw9Myk6aT09PWE/KGM9NixsPTMpOihjPTcsbD00KSl9ZnVuY3Rpb24gb2QodCxlLG4pe3ZhciByLGksbz0tMSxhPWVbMV0scz0wLGM9NyxsPTQ7Zm9yKDA9PT1hJiYoYz0xMzgsbD0zKSxyPTA7cjw9bjtyKyspaWYoaT1hLGE9ZVsyKihyKzEpKzFdLCEoKytzPGMmJmk9PT1hKSl7aWYoczxsKWRve1lmKHQsaSx0LmJsX3RyZWUpfXdoaWxlKDAhPS0tcyk7ZWxzZSAwIT09aT8oaSE9PW8mJihZZih0LGksdC5ibF90cmVlKSxzLS0pLFlmKHQsMTYsdC5ibF90cmVlKSxWZih0LHMtMywyKSk6czw9MTA/KFlmKHQsMTcsdC5ibF90cmVlKSxWZih0LHMtMywzKSk6KFlmKHQsMTgsdC5ibF90cmVlKSxWZih0LHMtMTEsNykpO3M9MCxvPWksMD09PWE/KGM9MTM4LGw9Myk6aT09PWE/KGM9NixsPTMpOihjPTcsbD00KX19QWYoSmYpO3ZhciBhZD0hMTtmdW5jdGlvbiBzZCh0LGUsbixyKXtWZih0LDArKHI/MTowKSwzKSxmdW5jdGlvbih0LGUsbixyKXtRZih0KSxyJiYoR2YodCxuKSxHZih0LH5uKSkseGYuYXJyYXlTZXQodC5wZW5kaW5nX2J1Zix0LndpbmRvdyxlLG4sdC5wZW5kaW5nKSx0LnBlbmRpbmcrPW59KHQsZSxuLCEwKX1PZi5fdHJfaW5pdD1mdW5jdGlvbih0KXthZHx8KCFmdW5jdGlvbigpe3ZhciB0LGUsbixyLGksbz1uZXcgQXJyYXkoMTYpO2ZvcihuPTAscj0wO3I8Mjg7cisrKWZvcihVZltyXT1uLHQ9MDt0PDE8PEJmW3JdO3QrKylQZltuKytdPXI7Zm9yKFBmW24tMV09cixpPTAscj0wO3I8MTY7cisrKWZvcihKZltyXT1pLHQ9MDt0PDE8PElmW3JdO3QrKylEZltpKytdPXI7Zm9yKGk+Pj03O3I8TGY7cisrKWZvcihKZltyXT1pPDw3LHQ9MDt0PDE8PElmW3JdLTc7dCsrKURmWzI1NitpKytdPXI7Zm9yKGU9MDtlPD16ZjtlKyspb1tlXT0wO2Zvcih0PTA7dDw9MTQzOylSZlsyKnQrMV09OCx0Kyssb1s4XSsrO2Zvcig7dDw9MjU1OylSZlsyKnQrMV09OSx0Kyssb1s5XSsrO2Zvcig7dDw9Mjc5OylSZlsyKnQrMV09Nyx0Kyssb1s3XSsrO2Zvcig7dDw9Mjg3OylSZlsyKnQrMV09OCx0Kyssb1s4XSsrO2ZvcihxZihSZiwyODcsbyksdD0wO3Q8TGY7dCsrKWpmWzIqdCsxXT01LGpmWzIqdF09WGYodCw1KTtGZj1uZXcgSGYoUmYsQmYsMjU3LEVmLHpmKSxNZj1uZXcgSGYoamYsSWYsMCxMZix6ZiksWmY9bmV3IEhmKG5ldyBBcnJheSgwKSxDZiwwLDE5LDcpfSgpLGFkPSEwKSx0LmxfZGVzYz1uZXcgV2YodC5keW5fbHRyZWUsRmYpLHQuZF9kZXNjPW5ldyBXZih0LmR5bl9kdHJlZSxNZiksdC5ibF9kZXNjPW5ldyBXZih0LmJsX3RyZWUsWmYpLHQuYmlfYnVmPTAsdC5iaV92YWxpZD0wLCRmKHQpfSxPZi5fdHJfc3RvcmVkX2Jsb2NrPXNkLE9mLl90cl9mbHVzaF9ibG9jaz1mdW5jdGlvbih0LGUsbixyKXt2YXIgaSxvLGE9MDt0LmxldmVsPjA/KDI9PT10LnN0cm0uZGF0YV90eXBlJiYodC5zdHJtLmRhdGFfdHlwZT1mdW5jdGlvbih0KXt2YXIgZSxuPTQwOTM2MjQ0NDc7Zm9yKGU9MDtlPD0zMTtlKyssbj4+Pj0xKWlmKDEmbiYmMCE9PXQuZHluX2x0cmVlWzIqZV0pcmV0dXJuIDA7aWYoMCE9PXQuZHluX2x0cmVlWzE4XXx8MCE9PXQuZHluX2x0cmVlWzIwXXx8MCE9PXQuZHluX2x0cmVlWzI2XSlyZXR1cm4gMTtmb3IoZT0zMjtlPFRmO2UrKylpZigwIT09dC5keW5fbHRyZWVbMiplXSlyZXR1cm4gMTtyZXR1cm4gMH0odCkpLHJkKHQsdC5sX2Rlc2MpLHJkKHQsdC5kX2Rlc2MpLGE9ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGlkKHQsdC5keW5fbHRyZWUsdC5sX2Rlc2MubWF4X2NvZGUpLGlkKHQsdC5keW5fZHRyZWUsdC5kX2Rlc2MubWF4X2NvZGUpLHJkKHQsdC5ibF9kZXNjKSxlPTE4O2U+PTMmJjA9PT10LmJsX3RyZWVbMipOZltlXSsxXTtlLS0pO3JldHVybiB0Lm9wdF9sZW4rPTMqKGUrMSkrNSs1KzQsZX0odCksaT10Lm9wdF9sZW4rMys3Pj4+Mywobz10LnN0YXRpY19sZW4rMys3Pj4+Myk8PWkmJihpPW8pKTppPW89bis1LG4rNDw9aSYmLTEhPT1lP3NkKHQsZSxuLHIpOjQ9PT10LnN0cmF0ZWd5fHxvPT09aT8oVmYodCwyKyhyPzE6MCksMyksbmQodCxSZixqZikpOihWZih0LDQrKHI/MTowKSwzKSxmdW5jdGlvbih0LGUsbixyKXt2YXIgaTtmb3IoVmYodCxlLTI1Nyw1KSxWZih0LG4tMSw1KSxWZih0LHItNCw0KSxpPTA7aTxyO2krKylWZih0LHQuYmxfdHJlZVsyKk5mW2ldKzFdLDMpO29kKHQsdC5keW5fbHRyZWUsZS0xKSxvZCh0LHQuZHluX2R0cmVlLG4tMSl9KHQsdC5sX2Rlc2MubWF4X2NvZGUrMSx0LmRfZGVzYy5tYXhfY29kZSsxLGErMSksbmQodCx0LmR5bl9sdHJlZSx0LmR5bl9kdHJlZSkpLCRmKHQpLHImJlFmKHQpfSxPZi5fdHJfdGFsbHk9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0LnBlbmRpbmdfYnVmW3QuZF9idWYrMip0Lmxhc3RfbGl0XT1lPj4+OCYyNTUsdC5wZW5kaW5nX2J1Zlt0LmRfYnVmKzIqdC5sYXN0X2xpdCsxXT0yNTUmZSx0LnBlbmRpbmdfYnVmW3QubF9idWYrdC5sYXN0X2xpdF09MjU1Jm4sdC5sYXN0X2xpdCsrLDA9PT1lP3QuZHluX2x0cmVlWzIqbl0rKzoodC5tYXRjaGVzKyssZS0tLHQuZHluX2x0cmVlWzIqKFBmW25dK1RmKzEpXSsrLHQuZHluX2R0cmVlWzIqS2YoZSldKyspLHQubGFzdF9saXQ9PT10LmxpdF9idWZzaXplLTF9LE9mLl90cl9hbGlnbj1mdW5jdGlvbih0KXtWZih0LDIsMyksWWYodCwyNTYsUmYpLGZ1bmN0aW9uKHQpezE2PT09dC5iaV92YWxpZD8oR2YodCx0LmJpX2J1ZiksdC5iaV9idWY9MCx0LmJpX3ZhbGlkPTApOnQuYmlfdmFsaWQ+PTgmJih0LnBlbmRpbmdfYnVmW3QucGVuZGluZysrXT0yNTUmdC5iaV9idWYsdC5iaV9idWY+Pj04LHQuYmlfdmFsaWQtPTgpfSh0KX07dmFyIGNkPWZ1bmN0aW9uKHQsZSxuLHIpe2Zvcih2YXIgaT02NTUzNSZ0LG89dD4+PjE2JjY1NTM1LGE9MDswIT09bjspe24tPWE9bj4yZTM/MmUzOm47ZG97bz1vKyhpPWkrZVtyKytdfDApfDB9d2hpbGUoLS1hKTtpJT02NTUyMSxvJT02NTUyMX1yZXR1cm4gaXxvPDwxNn07dmFyIGxkPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9W10sbj0wO248MjU2O24rKyl7dD1uO2Zvcih2YXIgcj0wO3I8ODtyKyspdD0xJnQ/Mzk4ODI5MjM4NF50Pj4+MTp0Pj4+MTtlW25dPXR9cmV0dXJuIGV9KCk7dmFyIHVkLGhkPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBpPWxkLG89cituO3RePS0xO2Zvcih2YXIgYT1yO2E8bzthKyspdD10Pj4+OF5pWzI1NSYodF5lW2FdKV07cmV0dXJufnR9LGZkPXsyOiJuZWVkIGRpY3Rpb25hcnkiLDE6InN0cmVhbSBlbmQiLDA6IiIsIi0xIjoiZmlsZSBlcnJvciIsIi0yIjoic3RyZWFtIGVycm9yIiwiLTMiOiJkYXRhIGVycm9yIiwiLTQiOiJpbnN1ZmZpY2llbnQgbWVtb3J5IiwiLTUiOiJidWZmZXIgZXJyb3IiLCItNiI6ImluY29tcGF0aWJsZSB2ZXJzaW9uIn0sZGQ9d2YsX2Q9T2YscGQ9Y2QsZ2Q9aGQsbWQ9ZmQseWQ9LTIsdmQ9MjU4LGJkPTI2Mix3ZD0xMDMsa2Q9MTEzLFNkPTY2NjtmdW5jdGlvbiBPZCh0LGUpe3JldHVybiB0Lm1zZz1tZFtlXSxlfWZ1bmN0aW9uIHhkKHQpe3JldHVybih0PDwxKS0odD40Pzk6MCl9ZnVuY3Rpb24gQWQodCl7Zm9yKHZhciBlPXQubGVuZ3RoOy0tZT49MDspdFtlXT0wfWZ1bmN0aW9uIFRkKHQpe3ZhciBlPXQuc3RhdGUsbj1lLnBlbmRpbmc7bj50LmF2YWlsX291dCYmKG49dC5hdmFpbF9vdXQpLDAhPT1uJiYoZGQuYXJyYXlTZXQodC5vdXRwdXQsZS5wZW5kaW5nX2J1ZixlLnBlbmRpbmdfb3V0LG4sdC5uZXh0X291dCksdC5uZXh0X291dCs9bixlLnBlbmRpbmdfb3V0Kz1uLHQudG90YWxfb3V0Kz1uLHQuYXZhaWxfb3V0LT1uLGUucGVuZGluZy09biwwPT09ZS5wZW5kaW5nJiYoZS5wZW5kaW5nX291dD0wKSl9ZnVuY3Rpb24gRWQodCxlKXtfZC5fdHJfZmx1c2hfYmxvY2sodCx0LmJsb2NrX3N0YXJ0Pj0wP3QuYmxvY2tfc3RhcnQ6LTEsdC5zdHJzdGFydC10LmJsb2NrX3N0YXJ0LGUpLHQuYmxvY2tfc3RhcnQ9dC5zdHJzdGFydCxUZCh0LnN0cm0pfWZ1bmN0aW9uIExkKHQsZSl7dC5wZW5kaW5nX2J1Zlt0LnBlbmRpbmcrK109ZX1mdW5jdGlvbiB6ZCh0LGUpe3QucGVuZGluZ19idWZbdC5wZW5kaW5nKytdPWU+Pj44JjI1NSx0LnBlbmRpbmdfYnVmW3QucGVuZGluZysrXT0yNTUmZX1mdW5jdGlvbiBCZCh0LGUpe3ZhciBuLHIsaT10Lm1heF9jaGFpbl9sZW5ndGgsbz10LnN0cnN0YXJ0LGE9dC5wcmV2X2xlbmd0aCxzPXQubmljZV9tYXRjaCxjPXQuc3Ryc3RhcnQ+dC53X3NpemUtYmQ/dC5zdHJzdGFydC0odC53X3NpemUtYmQpOjAsbD10LndpbmRvdyx1PXQud19tYXNrLGg9dC5wcmV2LGY9dC5zdHJzdGFydCt2ZCxkPWxbbythLTFdLF89bFtvK2FdO3QucHJldl9sZW5ndGg+PXQuZ29vZF9tYXRjaCYmKGk+Pj0yKSxzPnQubG9va2FoZWFkJiYocz10Lmxvb2thaGVhZCk7ZG97aWYobFsobj1lKSthXT09PV8mJmxbbithLTFdPT09ZCYmbFtuXT09PWxbb10mJmxbKytuXT09PWxbbysxXSl7bys9MixuKys7ZG97fXdoaWxlKGxbKytvXT09PWxbKytuXSYmbFsrK29dPT09bFsrK25dJiZsWysrb109PT1sWysrbl0mJmxbKytvXT09PWxbKytuXSYmbFsrK29dPT09bFsrK25dJiZsWysrb109PT1sWysrbl0mJmxbKytvXT09PWxbKytuXSYmbFsrK29dPT09bFsrK25dJiZvPGYpO2lmKHI9dmQtKGYtbyksbz1mLXZkLHI+YSl7aWYodC5tYXRjaF9zdGFydD1lLGE9cixyPj1zKWJyZWFrO2Q9bFtvK2EtMV0sXz1sW28rYV19fX13aGlsZSgoZT1oW2UmdV0pPmMmJjAhPS0taSk7cmV0dXJuIGE8PXQubG9va2FoZWFkP2E6dC5sb29rYWhlYWR9ZnVuY3Rpb24gSWQodCl7dmFyIGUsbixyLGksbyxhLHMsYyxsLHUsaD10Lndfc2l6ZTtkb3tpZihpPXQud2luZG93X3NpemUtdC5sb29rYWhlYWQtdC5zdHJzdGFydCx0LnN0cnN0YXJ0Pj1oKyhoLWJkKSl7ZGQuYXJyYXlTZXQodC53aW5kb3csdC53aW5kb3csaCxoLDApLHQubWF0Y2hfc3RhcnQtPWgsdC5zdHJzdGFydC09aCx0LmJsb2NrX3N0YXJ0LT1oLGU9bj10Lmhhc2hfc2l6ZTtkb3tyPXQuaGVhZFstLWVdLHQuaGVhZFtlXT1yPj1oP3ItaDowfXdoaWxlKC0tbik7ZT1uPWg7ZG97cj10LnByZXZbLS1lXSx0LnByZXZbZV09cj49aD9yLWg6MH13aGlsZSgtLW4pO2krPWh9aWYoMD09PXQuc3RybS5hdmFpbF9pbilicmVhaztpZihhPXQuc3RybSxzPXQud2luZG93LGM9dC5zdHJzdGFydCt0Lmxvb2thaGVhZCxsPWksdT12b2lkIDAsKHU9YS5hdmFpbF9pbik+bCYmKHU9bCksbj0wPT09dT8wOihhLmF2YWlsX2luLT11LGRkLmFycmF5U2V0KHMsYS5pbnB1dCxhLm5leHRfaW4sdSxjKSwxPT09YS5zdGF0ZS53cmFwP2EuYWRsZXI9cGQoYS5hZGxlcixzLHUsYyk6Mj09PWEuc3RhdGUud3JhcCYmKGEuYWRsZXI9Z2QoYS5hZGxlcixzLHUsYykpLGEubmV4dF9pbis9dSxhLnRvdGFsX2luKz11LHUpLHQubG9va2FoZWFkKz1uLHQubG9va2FoZWFkK3QuaW5zZXJ0Pj0zKWZvcihvPXQuc3Ryc3RhcnQtdC5pbnNlcnQsdC5pbnNfaD10LndpbmRvd1tvXSx0Lmluc19oPSh0Lmluc19oPDx0Lmhhc2hfc2hpZnRedC53aW5kb3dbbysxXSkmdC5oYXNoX21hc2s7dC5pbnNlcnQmJih0Lmluc19oPSh0Lmluc19oPDx0Lmhhc2hfc2hpZnRedC53aW5kb3dbbyszLTFdKSZ0Lmhhc2hfbWFzayx0LnByZXZbbyZ0LndfbWFza109dC5oZWFkW3QuaW5zX2hdLHQuaGVhZFt0Lmluc19oXT1vLG8rKyx0Lmluc2VydC0tLCEodC5sb29rYWhlYWQrdC5pbnNlcnQ8MykpOyk7fXdoaWxlKHQubG9va2FoZWFkPGJkJiYwIT09dC5zdHJtLmF2YWlsX2luKX1mdW5jdGlvbiBDZCh0LGUpe2Zvcih2YXIgbixyOzspe2lmKHQubG9va2FoZWFkPGJkKXtpZihJZCh0KSx0Lmxvb2thaGVhZDxiZCYmMD09PWUpcmV0dXJuIDE7aWYoMD09PXQubG9va2FoZWFkKWJyZWFrfWlmKG49MCx0Lmxvb2thaGVhZD49MyYmKHQuaW5zX2g9KHQuaW5zX2g8PHQuaGFzaF9zaGlmdF50LndpbmRvd1t0LnN0cnN0YXJ0KzMtMV0pJnQuaGFzaF9tYXNrLG49dC5wcmV2W3Quc3Ryc3RhcnQmdC53X21hc2tdPXQuaGVhZFt0Lmluc19oXSx0LmhlYWRbdC5pbnNfaF09dC5zdHJzdGFydCksMCE9PW4mJnQuc3Ryc3RhcnQtbjw9dC53X3NpemUtYmQmJih0Lm1hdGNoX2xlbmd0aD1CZCh0LG4pKSx0Lm1hdGNoX2xlbmd0aD49MylpZihyPV9kLl90cl90YWxseSh0LHQuc3Ryc3RhcnQtdC5tYXRjaF9zdGFydCx0Lm1hdGNoX2xlbmd0aC0zKSx0Lmxvb2thaGVhZC09dC5tYXRjaF9sZW5ndGgsdC5tYXRjaF9sZW5ndGg8PXQubWF4X2xhenlfbWF0Y2gmJnQubG9va2FoZWFkPj0zKXt0Lm1hdGNoX2xlbmd0aC0tO2Rve3Quc3Ryc3RhcnQrKyx0Lmluc19oPSh0Lmluc19oPDx0Lmhhc2hfc2hpZnRedC53aW5kb3dbdC5zdHJzdGFydCszLTFdKSZ0Lmhhc2hfbWFzayxuPXQucHJldlt0LnN0cnN0YXJ0JnQud19tYXNrXT10LmhlYWRbdC5pbnNfaF0sdC5oZWFkW3QuaW5zX2hdPXQuc3Ryc3RhcnR9d2hpbGUoMCE9LS10Lm1hdGNoX2xlbmd0aCk7dC5zdHJzdGFydCsrfWVsc2UgdC5zdHJzdGFydCs9dC5tYXRjaF9sZW5ndGgsdC5tYXRjaF9sZW5ndGg9MCx0Lmluc19oPXQud2luZG93W3Quc3Ryc3RhcnRdLHQuaW5zX2g9KHQuaW5zX2g8PHQuaGFzaF9zaGlmdF50LndpbmRvd1t0LnN0cnN0YXJ0KzFdKSZ0Lmhhc2hfbWFzaztlbHNlIHI9X2QuX3RyX3RhbGx5KHQsMCx0LndpbmRvd1t0LnN0cnN0YXJ0XSksdC5sb29rYWhlYWQtLSx0LnN0cnN0YXJ0Kys7aWYociYmKEVkKHQsITEpLDA9PT10LnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gMX1yZXR1cm4gdC5pbnNlcnQ9dC5zdHJzdGFydDwyP3Quc3Ryc3RhcnQ6Miw0PT09ZT8oRWQodCwhMCksMD09PXQuc3RybS5hdmFpbF9vdXQ/Mzo0KTp0Lmxhc3RfbGl0JiYoRWQodCwhMSksMD09PXQuc3RybS5hdmFpbF9vdXQpPzE6Mn1mdW5jdGlvbiBOZCh0LGUpe2Zvcih2YXIgbixyLGk7Oyl7aWYodC5sb29rYWhlYWQ8YmQpe2lmKElkKHQpLHQubG9va2FoZWFkPGJkJiYwPT09ZSlyZXR1cm4gMTtpZigwPT09dC5sb29rYWhlYWQpYnJlYWt9aWYobj0wLHQubG9va2FoZWFkPj0zJiYodC5pbnNfaD0odC5pbnNfaDw8dC5oYXNoX3NoaWZ0XnQud2luZG93W3Quc3Ryc3RhcnQrMy0xXSkmdC5oYXNoX21hc2ssbj10LnByZXZbdC5zdHJzdGFydCZ0LndfbWFza109dC5oZWFkW3QuaW5zX2hdLHQuaGVhZFt0Lmluc19oXT10LnN0cnN0YXJ0KSx0LnByZXZfbGVuZ3RoPXQubWF0Y2hfbGVuZ3RoLHQucHJldl9tYXRjaD10Lm1hdGNoX3N0YXJ0LHQubWF0Y2hfbGVuZ3RoPTIsMCE9PW4mJnQucHJldl9sZW5ndGg8dC5tYXhfbGF6eV9tYXRjaCYmdC5zdHJzdGFydC1uPD10Lndfc2l6ZS1iZCYmKHQubWF0Y2hfbGVuZ3RoPUJkKHQsbiksdC5tYXRjaF9sZW5ndGg8PTUmJigxPT09dC5zdHJhdGVneXx8Mz09PXQubWF0Y2hfbGVuZ3RoJiZ0LnN0cnN0YXJ0LXQubWF0Y2hfc3RhcnQ+NDA5NikmJih0Lm1hdGNoX2xlbmd0aD0yKSksdC5wcmV2X2xlbmd0aD49MyYmdC5tYXRjaF9sZW5ndGg8PXQucHJldl9sZW5ndGgpe2k9dC5zdHJzdGFydCt0Lmxvb2thaGVhZC0zLHI9X2QuX3RyX3RhbGx5KHQsdC5zdHJzdGFydC0xLXQucHJldl9tYXRjaCx0LnByZXZfbGVuZ3RoLTMpLHQubG9va2FoZWFkLT10LnByZXZfbGVuZ3RoLTEsdC5wcmV2X2xlbmd0aC09Mjtkb3srK3Quc3Ryc3RhcnQ8PWkmJih0Lmluc19oPSh0Lmluc19oPDx0Lmhhc2hfc2hpZnRedC53aW5kb3dbdC5zdHJzdGFydCszLTFdKSZ0Lmhhc2hfbWFzayxuPXQucHJldlt0LnN0cnN0YXJ0JnQud19tYXNrXT10LmhlYWRbdC5pbnNfaF0sdC5oZWFkW3QuaW5zX2hdPXQuc3Ryc3RhcnQpfXdoaWxlKDAhPS0tdC5wcmV2X2xlbmd0aCk7aWYodC5tYXRjaF9hdmFpbGFibGU9MCx0Lm1hdGNoX2xlbmd0aD0yLHQuc3Ryc3RhcnQrKyxyJiYoRWQodCwhMSksMD09PXQuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfWVsc2UgaWYodC5tYXRjaF9hdmFpbGFibGUpe2lmKChyPV9kLl90cl90YWxseSh0LDAsdC53aW5kb3dbdC5zdHJzdGFydC0xXSkpJiZFZCh0LCExKSx0LnN0cnN0YXJ0KyssdC5sb29rYWhlYWQtLSwwPT09dC5zdHJtLmF2YWlsX291dClyZXR1cm4gMX1lbHNlIHQubWF0Y2hfYXZhaWxhYmxlPTEsdC5zdHJzdGFydCsrLHQubG9va2FoZWFkLS19cmV0dXJuIHQubWF0Y2hfYXZhaWxhYmxlJiYocj1fZC5fdHJfdGFsbHkodCwwLHQud2luZG93W3Quc3Ryc3RhcnQtMV0pLHQubWF0Y2hfYXZhaWxhYmxlPTApLHQuaW5zZXJ0PXQuc3Ryc3RhcnQ8Mj90LnN0cnN0YXJ0OjIsND09PWU/KEVkKHQsITApLDA9PT10LnN0cm0uYXZhaWxfb3V0PzM6NCk6dC5sYXN0X2xpdCYmKEVkKHQsITEpLDA9PT10LnN0cm0uYXZhaWxfb3V0KT8xOjJ9ZnVuY3Rpb24gUmQodCxlLG4scixpKXt0aGlzLmdvb2RfbGVuZ3RoPXQsdGhpcy5tYXhfbGF6eT1lLHRoaXMubmljZV9sZW5ndGg9bix0aGlzLm1heF9jaGFpbj1yLHRoaXMuZnVuYz1pfWZ1bmN0aW9uIGpkKCl7dGhpcy5zdHJtPW51bGwsdGhpcy5zdGF0dXM9MCx0aGlzLnBlbmRpbmdfYnVmPW51bGwsdGhpcy5wZW5kaW5nX2J1Zl9zaXplPTAsdGhpcy5wZW5kaW5nX291dD0wLHRoaXMucGVuZGluZz0wLHRoaXMud3JhcD0wLHRoaXMuZ3poZWFkPW51bGwsdGhpcy5nemluZGV4PTAsdGhpcy5tZXRob2Q9OCx0aGlzLmxhc3RfZmx1c2g9LTEsdGhpcy53X3NpemU9MCx0aGlzLndfYml0cz0wLHRoaXMud19tYXNrPTAsdGhpcy53aW5kb3c9bnVsbCx0aGlzLndpbmRvd19zaXplPTAsdGhpcy5wcmV2PW51bGwsdGhpcy5oZWFkPW51bGwsdGhpcy5pbnNfaD0wLHRoaXMuaGFzaF9zaXplPTAsdGhpcy5oYXNoX2JpdHM9MCx0aGlzLmhhc2hfbWFzaz0wLHRoaXMuaGFzaF9zaGlmdD0wLHRoaXMuYmxvY2tfc3RhcnQ9MCx0aGlzLm1hdGNoX2xlbmd0aD0wLHRoaXMucHJldl9tYXRjaD0wLHRoaXMubWF0Y2hfYXZhaWxhYmxlPTAsdGhpcy5zdHJzdGFydD0wLHRoaXMubWF0Y2hfc3RhcnQ9MCx0aGlzLmxvb2thaGVhZD0wLHRoaXMucHJldl9sZW5ndGg9MCx0aGlzLm1heF9jaGFpbl9sZW5ndGg9MCx0aGlzLm1heF9sYXp5X21hdGNoPTAsdGhpcy5sZXZlbD0wLHRoaXMuc3RyYXRlZ3k9MCx0aGlzLmdvb2RfbWF0Y2g9MCx0aGlzLm5pY2VfbWF0Y2g9MCx0aGlzLmR5bl9sdHJlZT1uZXcgZGQuQnVmMTYoMTE0NiksdGhpcy5keW5fZHRyZWU9bmV3IGRkLkJ1ZjE2KDEyMiksdGhpcy5ibF90cmVlPW5ldyBkZC5CdWYxNig3OCksQWQodGhpcy5keW5fbHRyZWUpLEFkKHRoaXMuZHluX2R0cmVlKSxBZCh0aGlzLmJsX3RyZWUpLHRoaXMubF9kZXNjPW51bGwsdGhpcy5kX2Rlc2M9bnVsbCx0aGlzLmJsX2Rlc2M9bnVsbCx0aGlzLmJsX2NvdW50PW5ldyBkZC5CdWYxNigxNiksdGhpcy5oZWFwPW5ldyBkZC5CdWYxNig1NzMpLEFkKHRoaXMuaGVhcCksdGhpcy5oZWFwX2xlbj0wLHRoaXMuaGVhcF9tYXg9MCx0aGlzLmRlcHRoPW5ldyBkZC5CdWYxNig1NzMpLEFkKHRoaXMuZGVwdGgpLHRoaXMubF9idWY9MCx0aGlzLmxpdF9idWZzaXplPTAsdGhpcy5sYXN0X2xpdD0wLHRoaXMuZF9idWY9MCx0aGlzLm9wdF9sZW49MCx0aGlzLnN0YXRpY19sZW49MCx0aGlzLm1hdGNoZXM9MCx0aGlzLmluc2VydD0wLHRoaXMuYmlfYnVmPTAsdGhpcy5iaV92YWxpZD0wfWZ1bmN0aW9uIERkKHQpe3ZhciBlO3JldHVybiB0JiZ0LnN0YXRlPyh0LnRvdGFsX2luPXQudG90YWxfb3V0PTAsdC5kYXRhX3R5cGU9MiwoZT10LnN0YXRlKS5wZW5kaW5nPTAsZS5wZW5kaW5nX291dD0wLGUud3JhcDwwJiYoZS53cmFwPS1lLndyYXApLGUuc3RhdHVzPWUud3JhcD80MjprZCx0LmFkbGVyPTI9PT1lLndyYXA/MDoxLGUubGFzdF9mbHVzaD0wLF9kLl90cl9pbml0KGUpLDApOk9kKHQseWQpfWZ1bmN0aW9uIFBkKHQpe3ZhciBlLG49RGQodCk7cmV0dXJuIDA9PT1uJiYoKGU9dC5zdGF0ZSkud2luZG93X3NpemU9MiplLndfc2l6ZSxBZChlLmhlYWQpLGUubWF4X2xhenlfbWF0Y2g9dWRbZS5sZXZlbF0ubWF4X2xhenksZS5nb29kX21hdGNoPXVkW2UubGV2ZWxdLmdvb2RfbGVuZ3RoLGUubmljZV9tYXRjaD11ZFtlLmxldmVsXS5uaWNlX2xlbmd0aCxlLm1heF9jaGFpbl9sZW5ndGg9dWRbZS5sZXZlbF0ubWF4X2NoYWluLGUuc3Ryc3RhcnQ9MCxlLmJsb2NrX3N0YXJ0PTAsZS5sb29rYWhlYWQ9MCxlLmluc2VydD0wLGUubWF0Y2hfbGVuZ3RoPWUucHJldl9sZW5ndGg9MixlLm1hdGNoX2F2YWlsYWJsZT0wLGUuaW5zX2g9MCksbn1mdW5jdGlvbiBVZCh0LGUsbixyLGksbyl7aWYoIXQpcmV0dXJuIHlkO3ZhciBhPTE7aWYoLTE9PT1lJiYoZT02KSxyPDA/KGE9MCxyPS1yKTpyPjE1JiYoYT0yLHItPTE2KSxpPDF8fGk+OXx8OCE9PW58fHI8OHx8cj4xNXx8ZTwwfHxlPjl8fG88MHx8bz40KXJldHVybiBPZCh0LHlkKTs4PT09ciYmKHI9OSk7dmFyIHM9bmV3IGpkO3JldHVybiB0LnN0YXRlPXMscy5zdHJtPXQscy53cmFwPWEscy5nemhlYWQ9bnVsbCxzLndfYml0cz1yLHMud19zaXplPTE8PHMud19iaXRzLHMud19tYXNrPXMud19zaXplLTEscy5oYXNoX2JpdHM9aSs3LHMuaGFzaF9zaXplPTE8PHMuaGFzaF9iaXRzLHMuaGFzaF9tYXNrPXMuaGFzaF9zaXplLTEscy5oYXNoX3NoaWZ0PX5+KChzLmhhc2hfYml0cyszLTEpLzMpLHMud2luZG93PW5ldyBkZC5CdWY4KDIqcy53X3NpemUpLHMuaGVhZD1uZXcgZGQuQnVmMTYocy5oYXNoX3NpemUpLHMucHJldj1uZXcgZGQuQnVmMTYocy53X3NpemUpLHMubGl0X2J1ZnNpemU9MTw8aSs2LHMucGVuZGluZ19idWZfc2l6ZT00KnMubGl0X2J1ZnNpemUscy5wZW5kaW5nX2J1Zj1uZXcgZGQuQnVmOChzLnBlbmRpbmdfYnVmX3NpemUpLHMuZF9idWY9MSpzLmxpdF9idWZzaXplLHMubF9idWY9MypzLmxpdF9idWZzaXplLHMubGV2ZWw9ZSxzLnN0cmF0ZWd5PW8scy5tZXRob2Q9bixQZCh0KX11ZD1bbmV3IFJkKDAsMCwwLDAsKGZ1bmN0aW9uKHQsZSl7dmFyIG49NjU1MzU7Zm9yKG4+dC5wZW5kaW5nX2J1Zl9zaXplLTUmJihuPXQucGVuZGluZ19idWZfc2l6ZS01KTs7KXtpZih0Lmxvb2thaGVhZDw9MSl7aWYoSWQodCksMD09PXQubG9va2FoZWFkJiYwPT09ZSlyZXR1cm4gMTtpZigwPT09dC5sb29rYWhlYWQpYnJlYWt9dC5zdHJzdGFydCs9dC5sb29rYWhlYWQsdC5sb29rYWhlYWQ9MDt2YXIgcj10LmJsb2NrX3N0YXJ0K247aWYoKDA9PT10LnN0cnN0YXJ0fHx0LnN0cnN0YXJ0Pj1yKSYmKHQubG9va2FoZWFkPXQuc3Ryc3RhcnQtcix0LnN0cnN0YXJ0PXIsRWQodCwhMSksMD09PXQuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxO2lmKHQuc3Ryc3RhcnQtdC5ibG9ja19zdGFydD49dC53X3NpemUtYmQmJihFZCh0LCExKSwwPT09dC5zdHJtLmF2YWlsX291dCkpcmV0dXJuIDF9cmV0dXJuIHQuaW5zZXJ0PTAsND09PWU/KEVkKHQsITApLDA9PT10LnN0cm0uYXZhaWxfb3V0PzM6NCk6KHQuc3Ryc3RhcnQ+dC5ibG9ja19zdGFydCYmKEVkKHQsITEpLHQuc3RybS5hdmFpbF9vdXQpLDEpfSkpLG5ldyBSZCg0LDQsOCw0LENkKSxuZXcgUmQoNCw1LDE2LDgsQ2QpLG5ldyBSZCg0LDYsMzIsMzIsQ2QpLG5ldyBSZCg0LDQsMTYsMTYsTmQpLG5ldyBSZCg4LDE2LDMyLDMyLE5kKSxuZXcgUmQoOCwxNiwxMjgsMTI4LE5kKSxuZXcgUmQoOCwzMiwxMjgsMjU2LE5kKSxuZXcgUmQoMzIsMTI4LDI1OCwxMDI0LE5kKSxuZXcgUmQoMzIsMjU4LDI1OCw0MDk2LE5kKV0sU2YuZGVmbGF0ZUluaXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gVWQodCxlLDgsMTUsOCwwKX0sU2YuZGVmbGF0ZUluaXQyPVVkLFNmLmRlZmxhdGVSZXNldD1QZCxTZi5kZWZsYXRlUmVzZXRLZWVwPURkLFNmLmRlZmxhdGVTZXRIZWFkZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmdC5zdGF0ZT8yIT09dC5zdGF0ZS53cmFwP3lkOih0LnN0YXRlLmd6aGVhZD1lLDApOnlkfSxTZi5kZWZsYXRlPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpLG87aWYoIXR8fCF0LnN0YXRlfHxlPjV8fGU8MClyZXR1cm4gdD9PZCh0LHlkKTp5ZDtpZihyPXQuc3RhdGUsIXQub3V0cHV0fHwhdC5pbnB1dCYmMCE9PXQuYXZhaWxfaW58fHIuc3RhdHVzPT09U2QmJjQhPT1lKXJldHVybiBPZCh0LDA9PT10LmF2YWlsX291dD8tNTp5ZCk7aWYoci5zdHJtPXQsbj1yLmxhc3RfZmx1c2gsci5sYXN0X2ZsdXNoPWUsNDI9PT1yLnN0YXR1cylpZigyPT09ci53cmFwKXQuYWRsZXI9MCxMZChyLDMxKSxMZChyLDEzOSksTGQociw4KSxyLmd6aGVhZD8oTGQociwoci5nemhlYWQudGV4dD8xOjApKyhyLmd6aGVhZC5oY3JjPzI6MCkrKHIuZ3poZWFkLmV4dHJhPzQ6MCkrKHIuZ3poZWFkLm5hbWU/ODowKSsoci5nemhlYWQuY29tbWVudD8xNjowKSksTGQociwyNTUmci5nemhlYWQudGltZSksTGQocixyLmd6aGVhZC50aW1lPj44JjI1NSksTGQocixyLmd6aGVhZC50aW1lPj4xNiYyNTUpLExkKHIsci5nemhlYWQudGltZT4+MjQmMjU1KSxMZChyLDk9PT1yLmxldmVsPzI6ci5zdHJhdGVneT49Mnx8ci5sZXZlbDwyPzQ6MCksTGQociwyNTUmci5nemhlYWQub3MpLHIuZ3poZWFkLmV4dHJhJiZyLmd6aGVhZC5leHRyYS5sZW5ndGgmJihMZChyLDI1NSZyLmd6aGVhZC5leHRyYS5sZW5ndGgpLExkKHIsci5nemhlYWQuZXh0cmEubGVuZ3RoPj44JjI1NSkpLHIuZ3poZWFkLmhjcmMmJih0LmFkbGVyPWdkKHQuYWRsZXIsci5wZW5kaW5nX2J1ZixyLnBlbmRpbmcsMCkpLHIuZ3ppbmRleD0wLHIuc3RhdHVzPTY5KTooTGQociwwKSxMZChyLDApLExkKHIsMCksTGQociwwKSxMZChyLDApLExkKHIsOT09PXIubGV2ZWw/MjpyLnN0cmF0ZWd5Pj0yfHxyLmxldmVsPDI/NDowKSxMZChyLDMpLHIuc3RhdHVzPWtkKTtlbHNle3ZhciBhPTgrKHIud19iaXRzLTg8PDQpPDw4O2F8PShyLnN0cmF0ZWd5Pj0yfHxyLmxldmVsPDI/MDpyLmxldmVsPDY/MTo2PT09ci5sZXZlbD8yOjMpPDw2LDAhPT1yLnN0cnN0YXJ0JiYoYXw9MzIpLGErPTMxLWElMzEsci5zdGF0dXM9a2QsemQocixhKSwwIT09ci5zdHJzdGFydCYmKHpkKHIsdC5hZGxlcj4+PjE2KSx6ZChyLDY1NTM1JnQuYWRsZXIpKSx0LmFkbGVyPTF9aWYoNjk9PT1yLnN0YXR1cylpZihyLmd6aGVhZC5leHRyYSl7Zm9yKGk9ci5wZW5kaW5nO3IuZ3ppbmRleDwoNjU1MzUmci5nemhlYWQuZXh0cmEubGVuZ3RoKSYmKHIucGVuZGluZyE9PXIucGVuZGluZ19idWZfc2l6ZXx8KHIuZ3poZWFkLmhjcmMmJnIucGVuZGluZz5pJiYodC5hZGxlcj1nZCh0LmFkbGVyLHIucGVuZGluZ19idWYsci5wZW5kaW5nLWksaSkpLFRkKHQpLGk9ci5wZW5kaW5nLHIucGVuZGluZyE9PXIucGVuZGluZ19idWZfc2l6ZSkpOylMZChyLDI1NSZyLmd6aGVhZC5leHRyYVtyLmd6aW5kZXhdKSxyLmd6aW5kZXgrKztyLmd6aGVhZC5oY3JjJiZyLnBlbmRpbmc+aSYmKHQuYWRsZXI9Z2QodC5hZGxlcixyLnBlbmRpbmdfYnVmLHIucGVuZGluZy1pLGkpKSxyLmd6aW5kZXg9PT1yLmd6aGVhZC5leHRyYS5sZW5ndGgmJihyLmd6aW5kZXg9MCxyLnN0YXR1cz03Myl9ZWxzZSByLnN0YXR1cz03MztpZig3Mz09PXIuc3RhdHVzKWlmKHIuZ3poZWFkLm5hbWUpe2k9ci5wZW5kaW5nO2Rve2lmKHIucGVuZGluZz09PXIucGVuZGluZ19idWZfc2l6ZSYmKHIuZ3poZWFkLmhjcmMmJnIucGVuZGluZz5pJiYodC5hZGxlcj1nZCh0LmFkbGVyLHIucGVuZGluZ19idWYsci5wZW5kaW5nLWksaSkpLFRkKHQpLGk9ci5wZW5kaW5nLHIucGVuZGluZz09PXIucGVuZGluZ19idWZfc2l6ZSkpe289MTticmVha31vPXIuZ3ppbmRleDxyLmd6aGVhZC5uYW1lLmxlbmd0aD8yNTUmci5nemhlYWQubmFtZS5jaGFyQ29kZUF0KHIuZ3ppbmRleCsrKTowLExkKHIsbyl9d2hpbGUoMCE9PW8pO3IuZ3poZWFkLmhjcmMmJnIucGVuZGluZz5pJiYodC5hZGxlcj1nZCh0LmFkbGVyLHIucGVuZGluZ19idWYsci5wZW5kaW5nLWksaSkpLDA9PT1vJiYoci5nemluZGV4PTAsci5zdGF0dXM9OTEpfWVsc2Ugci5zdGF0dXM9OTE7aWYoOTE9PT1yLnN0YXR1cylpZihyLmd6aGVhZC5jb21tZW50KXtpPXIucGVuZGluZztkb3tpZihyLnBlbmRpbmc9PT1yLnBlbmRpbmdfYnVmX3NpemUmJihyLmd6aGVhZC5oY3JjJiZyLnBlbmRpbmc+aSYmKHQuYWRsZXI9Z2QodC5hZGxlcixyLnBlbmRpbmdfYnVmLHIucGVuZGluZy1pLGkpKSxUZCh0KSxpPXIucGVuZGluZyxyLnBlbmRpbmc9PT1yLnBlbmRpbmdfYnVmX3NpemUpKXtvPTE7YnJlYWt9bz1yLmd6aW5kZXg8ci5nemhlYWQuY29tbWVudC5sZW5ndGg/MjU1JnIuZ3poZWFkLmNvbW1lbnQuY2hhckNvZGVBdChyLmd6aW5kZXgrKyk6MCxMZChyLG8pfXdoaWxlKDAhPT1vKTtyLmd6aGVhZC5oY3JjJiZyLnBlbmRpbmc+aSYmKHQuYWRsZXI9Z2QodC5hZGxlcixyLnBlbmRpbmdfYnVmLHIucGVuZGluZy1pLGkpKSwwPT09byYmKHIuc3RhdHVzPXdkKX1lbHNlIHIuc3RhdHVzPXdkO2lmKHIuc3RhdHVzPT09d2QmJihyLmd6aGVhZC5oY3JjPyhyLnBlbmRpbmcrMj5yLnBlbmRpbmdfYnVmX3NpemUmJlRkKHQpLHIucGVuZGluZysyPD1yLnBlbmRpbmdfYnVmX3NpemUmJihMZChyLDI1NSZ0LmFkbGVyKSxMZChyLHQuYWRsZXI+PjgmMjU1KSx0LmFkbGVyPTAsci5zdGF0dXM9a2QpKTpyLnN0YXR1cz1rZCksMCE9PXIucGVuZGluZyl7aWYoVGQodCksMD09PXQuYXZhaWxfb3V0KXJldHVybiByLmxhc3RfZmx1c2g9LTEsMH1lbHNlIGlmKDA9PT10LmF2YWlsX2luJiZ4ZChlKTw9eGQobikmJjQhPT1lKXJldHVybiBPZCh0LC01KTtpZihyLnN0YXR1cz09PVNkJiYwIT09dC5hdmFpbF9pbilyZXR1cm4gT2QodCwtNSk7aWYoMCE9PXQuYXZhaWxfaW58fDAhPT1yLmxvb2thaGVhZHx8MCE9PWUmJnIuc3RhdHVzIT09U2Qpe3ZhciBzPTI9PT1yLnN0cmF0ZWd5P2Z1bmN0aW9uKHQsZSl7Zm9yKHZhciBuOzspe2lmKDA9PT10Lmxvb2thaGVhZCYmKElkKHQpLDA9PT10Lmxvb2thaGVhZCkpe2lmKDA9PT1lKXJldHVybiAxO2JyZWFrfWlmKHQubWF0Y2hfbGVuZ3RoPTAsbj1fZC5fdHJfdGFsbHkodCwwLHQud2luZG93W3Quc3Ryc3RhcnRdKSx0Lmxvb2thaGVhZC0tLHQuc3Ryc3RhcnQrKyxuJiYoRWQodCwhMSksMD09PXQuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfXJldHVybiB0Lmluc2VydD0wLDQ9PT1lPyhFZCh0LCEwKSwwPT09dC5zdHJtLmF2YWlsX291dD8zOjQpOnQubGFzdF9saXQmJihFZCh0LCExKSwwPT09dC5zdHJtLmF2YWlsX291dCk/MToyfShyLGUpOjM9PT1yLnN0cmF0ZWd5P2Z1bmN0aW9uKHQsZSl7Zm9yKHZhciBuLHIsaSxvLGE9dC53aW5kb3c7Oyl7aWYodC5sb29rYWhlYWQ8PXZkKXtpZihJZCh0KSx0Lmxvb2thaGVhZDw9dmQmJjA9PT1lKXJldHVybiAxO2lmKDA9PT10Lmxvb2thaGVhZClicmVha31pZih0Lm1hdGNoX2xlbmd0aD0wLHQubG9va2FoZWFkPj0zJiZ0LnN0cnN0YXJ0PjAmJihyPWFbaT10LnN0cnN0YXJ0LTFdKT09PWFbKytpXSYmcj09PWFbKytpXSYmcj09PWFbKytpXSl7bz10LnN0cnN0YXJ0K3ZkO2Rve313aGlsZShyPT09YVsrK2ldJiZyPT09YVsrK2ldJiZyPT09YVsrK2ldJiZyPT09YVsrK2ldJiZyPT09YVsrK2ldJiZyPT09YVsrK2ldJiZyPT09YVsrK2ldJiZyPT09YVsrK2ldJiZpPG8pO3QubWF0Y2hfbGVuZ3RoPXZkLShvLWkpLHQubWF0Y2hfbGVuZ3RoPnQubG9va2FoZWFkJiYodC5tYXRjaF9sZW5ndGg9dC5sb29rYWhlYWQpfWlmKHQubWF0Y2hfbGVuZ3RoPj0zPyhuPV9kLl90cl90YWxseSh0LDEsdC5tYXRjaF9sZW5ndGgtMyksdC5sb29rYWhlYWQtPXQubWF0Y2hfbGVuZ3RoLHQuc3Ryc3RhcnQrPXQubWF0Y2hfbGVuZ3RoLHQubWF0Y2hfbGVuZ3RoPTApOihuPV9kLl90cl90YWxseSh0LDAsdC53aW5kb3dbdC5zdHJzdGFydF0pLHQubG9va2FoZWFkLS0sdC5zdHJzdGFydCsrKSxuJiYoRWQodCwhMSksMD09PXQuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfXJldHVybiB0Lmluc2VydD0wLDQ9PT1lPyhFZCh0LCEwKSwwPT09dC5zdHJtLmF2YWlsX291dD8zOjQpOnQubGFzdF9saXQmJihFZCh0LCExKSwwPT09dC5zdHJtLmF2YWlsX291dCk/MToyfShyLGUpOnVkW3IubGV2ZWxdLmZ1bmMocixlKTtpZigzIT09cyYmNCE9PXN8fChyLnN0YXR1cz1TZCksMT09PXN8fDM9PT1zKXJldHVybiAwPT09dC5hdmFpbF9vdXQmJihyLmxhc3RfZmx1c2g9LTEpLDA7aWYoMj09PXMmJigxPT09ZT9fZC5fdHJfYWxpZ24ocik6NSE9PWUmJihfZC5fdHJfc3RvcmVkX2Jsb2NrKHIsMCwwLCExKSwzPT09ZSYmKEFkKHIuaGVhZCksMD09PXIubG9va2FoZWFkJiYoci5zdHJzdGFydD0wLHIuYmxvY2tfc3RhcnQ9MCxyLmluc2VydD0wKSkpLFRkKHQpLDA9PT10LmF2YWlsX291dCkpcmV0dXJuIHIubGFzdF9mbHVzaD0tMSwwfXJldHVybiA0IT09ZT8wOnIud3JhcDw9MD8xOigyPT09ci53cmFwPyhMZChyLDI1NSZ0LmFkbGVyKSxMZChyLHQuYWRsZXI+PjgmMjU1KSxMZChyLHQuYWRsZXI+PjE2JjI1NSksTGQocix0LmFkbGVyPj4yNCYyNTUpLExkKHIsMjU1JnQudG90YWxfaW4pLExkKHIsdC50b3RhbF9pbj4+OCYyNTUpLExkKHIsdC50b3RhbF9pbj4+MTYmMjU1KSxMZChyLHQudG90YWxfaW4+PjI0JjI1NSkpOih6ZChyLHQuYWRsZXI+Pj4xNiksemQociw2NTUzNSZ0LmFkbGVyKSksVGQodCksci53cmFwPjAmJihyLndyYXA9LXIud3JhcCksMCE9PXIucGVuZGluZz8wOjEpfSxTZi5kZWZsYXRlRW5kPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiB0JiZ0LnN0YXRlPzQyIT09KGU9dC5zdGF0ZS5zdGF0dXMpJiY2OSE9PWUmJjczIT09ZSYmOTEhPT1lJiZlIT09d2QmJmUhPT1rZCYmZSE9PVNkP09kKHQseWQpOih0LnN0YXRlPW51bGwsZT09PWtkP09kKHQsLTMpOjApOnlkfSxTZi5kZWZsYXRlU2V0RGljdGlvbmFyeT1mdW5jdGlvbih0LGUpe3ZhciBuLHIsaSxvLGEscyxjLGwsdT1lLmxlbmd0aDtpZighdHx8IXQuc3RhdGUpcmV0dXJuIHlkO2lmKDI9PT0obz0obj10LnN0YXRlKS53cmFwKXx8MT09PW8mJjQyIT09bi5zdGF0dXN8fG4ubG9va2FoZWFkKXJldHVybiB5ZDtmb3IoMT09PW8mJih0LmFkbGVyPXBkKHQuYWRsZXIsZSx1LDApKSxuLndyYXA9MCx1Pj1uLndfc2l6ZSYmKDA9PT1vJiYoQWQobi5oZWFkKSxuLnN0cnN0YXJ0PTAsbi5ibG9ja19zdGFydD0wLG4uaW5zZXJ0PTApLGw9bmV3IGRkLkJ1Zjgobi53X3NpemUpLGRkLmFycmF5U2V0KGwsZSx1LW4ud19zaXplLG4ud19zaXplLDApLGU9bCx1PW4ud19zaXplKSxhPXQuYXZhaWxfaW4scz10Lm5leHRfaW4sYz10LmlucHV0LHQuYXZhaWxfaW49dSx0Lm5leHRfaW49MCx0LmlucHV0PWUsSWQobik7bi5sb29rYWhlYWQ+PTM7KXtyPW4uc3Ryc3RhcnQsaT1uLmxvb2thaGVhZC0yO2Rve24uaW5zX2g9KG4uaW5zX2g8PG4uaGFzaF9zaGlmdF5uLndpbmRvd1tyKzMtMV0pJm4uaGFzaF9tYXNrLG4ucHJldltyJm4ud19tYXNrXT1uLmhlYWRbbi5pbnNfaF0sbi5oZWFkW24uaW5zX2hdPXIscisrfXdoaWxlKC0taSk7bi5zdHJzdGFydD1yLG4ubG9va2FoZWFkPTIsSWQobil9cmV0dXJuIG4uc3Ryc3RhcnQrPW4ubG9va2FoZWFkLG4uYmxvY2tfc3RhcnQ9bi5zdHJzdGFydCxuLmluc2VydD1uLmxvb2thaGVhZCxuLmxvb2thaGVhZD0wLG4ubWF0Y2hfbGVuZ3RoPW4ucHJldl9sZW5ndGg9MixuLm1hdGNoX2F2YWlsYWJsZT0wLHQubmV4dF9pbj1zLHQuaW5wdXQ9Yyx0LmF2YWlsX2luPWEsbi53cmFwPW8sMH0sU2YuZGVmbGF0ZUluZm89InBha28gZGVmbGF0ZSAoZnJvbSBOb2RlY2EgcHJvamVjdCkiO3ZhciBGZD17fSxNZD13ZixaZD0hMCxKZD0hMDt0cnl7U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLFswXSl9Y2F0Y2gobmcpe1pkPSExfXRyeXtTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsbmV3IFVpbnQ4QXJyYXkoMSkpfWNhdGNoKG5nKXtKZD0hMX1mb3IodmFyIEhkPW5ldyBNZC5CdWY4KDI1NiksV2Q9MDtXZDwyNTY7V2QrKylIZFtXZF09V2Q+PTI1Mj82OldkPj0yNDg/NTpXZD49MjQwPzQ6V2Q+PTIyND8zOldkPj0xOTI/MjoxO2Z1bmN0aW9uIEtkKHQsZSl7aWYoZTw2NTUzNCYmKHQuc3ViYXJyYXkmJkpkfHwhdC5zdWJhcnJheSYmWmQpKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsTWQuc2hyaW5rQnVmKHQsZSkpO2Zvcih2YXIgbj0iIixyPTA7cjxlO3IrKyluKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHRbcl0pO3JldHVybiBufUhkWzI1NF09SGRbMjU0XT0xLEZkLnN0cmluZzJidWY9ZnVuY3Rpb24odCl7dmFyIGUsbixyLGksbyxhPXQubGVuZ3RoLHM9MDtmb3IoaT0wO2k8YTtpKyspNTUyOTY9PSg2NDUxMiYobj10LmNoYXJDb2RlQXQoaSkpKSYmaSsxPGEmJjU2MzIwPT0oNjQ1MTImKHI9dC5jaGFyQ29kZUF0KGkrMSkpKSYmKG49NjU1MzYrKG4tNTUyOTY8PDEwKSsoci01NjMyMCksaSsrKSxzKz1uPDEyOD8xOm48MjA0OD8yOm48NjU1MzY/Mzo0O2ZvcihlPW5ldyBNZC5CdWY4KHMpLG89MCxpPTA7bzxzO2krKyk1NTI5Nj09KDY0NTEyJihuPXQuY2hhckNvZGVBdChpKSkpJiZpKzE8YSYmNTYzMjA9PSg2NDUxMiYocj10LmNoYXJDb2RlQXQoaSsxKSkpJiYobj02NTUzNisobi01NTI5Njw8MTApKyhyLTU2MzIwKSxpKyspLG48MTI4P2VbbysrXT1uOm48MjA0OD8oZVtvKytdPTE5MnxuPj4+NixlW28rK109MTI4fDYzJm4pOm48NjU1MzY/KGVbbysrXT0yMjR8bj4+PjEyLGVbbysrXT0xMjh8bj4+PjYmNjMsZVtvKytdPTEyOHw2MyZuKTooZVtvKytdPTI0MHxuPj4+MTgsZVtvKytdPTEyOHxuPj4+MTImNjMsZVtvKytdPTEyOHxuPj4+NiY2MyxlW28rK109MTI4fDYzJm4pO3JldHVybiBlfSxGZC5idWYyYmluc3RyaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBLZCh0LHQubGVuZ3RoKX0sRmQuYmluc3RyaW5nMmJ1Zj1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IE1kLkJ1ZjgodC5sZW5ndGgpLG49MCxyPWUubGVuZ3RoO248cjtuKyspZVtuXT10LmNoYXJDb2RlQXQobik7cmV0dXJuIGV9LEZkLmJ1ZjJzdHJpbmc9ZnVuY3Rpb24odCxlKXt2YXIgbixyLGksbyxhPWV8fHQubGVuZ3RoLHM9bmV3IEFycmF5KDIqYSk7Zm9yKHI9MCxuPTA7bjxhOylpZigoaT10W24rK10pPDEyOClzW3IrK109aTtlbHNlIGlmKChvPUhkW2ldKT40KXNbcisrXT02NTUzMyxuKz1vLTE7ZWxzZXtmb3IoaSY9Mj09PW8/MzE6Mz09PW8/MTU6NztvPjEmJm48YTspaT1pPDw2fDYzJnRbbisrXSxvLS07bz4xP3NbcisrXT02NTUzMzppPDY1NTM2P3NbcisrXT1pOihpLT02NTUzNixzW3IrK109NTUyOTZ8aT4+MTAmMTAyMyxzW3IrK109NTYzMjB8MTAyMyZpKX1yZXR1cm4gS2QocyxyKX0sRmQudXRmOGJvcmRlcj1mdW5jdGlvbih0LGUpe3ZhciBuO2ZvcigoZT1lfHx0Lmxlbmd0aCk+dC5sZW5ndGgmJihlPXQubGVuZ3RoKSxuPWUtMTtuPj0wJiYxMjg9PSgxOTImdFtuXSk7KW4tLTtyZXR1cm4gbjwwfHwwPT09bj9lOm4rSGRbdFtuXV0+ZT9uOmV9O3ZhciBHZD1mdW5jdGlvbigpe3RoaXMuaW5wdXQ9bnVsbCx0aGlzLm5leHRfaW49MCx0aGlzLmF2YWlsX2luPTAsdGhpcy50b3RhbF9pbj0wLHRoaXMub3V0cHV0PW51bGwsdGhpcy5uZXh0X291dD0wLHRoaXMuYXZhaWxfb3V0PTAsdGhpcy50b3RhbF9vdXQ9MCx0aGlzLm1zZz0iIix0aGlzLnN0YXRlPW51bGwsdGhpcy5kYXRhX3R5cGU9Mix0aGlzLmFkbGVyPTB9LFZkPVNmLFlkPXdmLFhkPUZkLHFkPWZkLCRkPUdkLFFkPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7ZnVuY3Rpb24gdF8odCl7aWYoISh0aGlzIGluc3RhbmNlb2YgdF8pKXJldHVybiBuZXcgdF8odCk7dGhpcy5vcHRpb25zPVlkLmFzc2lnbih7bGV2ZWw6LTEsbWV0aG9kOjgsY2h1bmtTaXplOjE2Mzg0LHdpbmRvd0JpdHM6MTUsbWVtTGV2ZWw6OCxzdHJhdGVneTowLHRvOiIifSx0fHx7fSk7dmFyIGU9dGhpcy5vcHRpb25zO2UucmF3JiZlLndpbmRvd0JpdHM+MD9lLndpbmRvd0JpdHM9LWUud2luZG93Qml0czplLmd6aXAmJmUud2luZG93Qml0cz4wJiZlLndpbmRvd0JpdHM8MTYmJihlLndpbmRvd0JpdHMrPTE2KSx0aGlzLmVycj0wLHRoaXMubXNnPSIiLHRoaXMuZW5kZWQ9ITEsdGhpcy5jaHVua3M9W10sdGhpcy5zdHJtPW5ldyAkZCx0aGlzLnN0cm0uYXZhaWxfb3V0PTA7dmFyIG49VmQuZGVmbGF0ZUluaXQyKHRoaXMuc3RybSxlLmxldmVsLGUubWV0aG9kLGUud2luZG93Qml0cyxlLm1lbUxldmVsLGUuc3RyYXRlZ3kpO2lmKDAhPT1uKXRocm93IG5ldyBFcnJvcihxZFtuXSk7aWYoZS5oZWFkZXImJlZkLmRlZmxhdGVTZXRIZWFkZXIodGhpcy5zdHJtLGUuaGVhZGVyKSxlLmRpY3Rpb25hcnkpe3ZhciByO2lmKHI9InN0cmluZyI9PXR5cGVvZiBlLmRpY3Rpb25hcnk/WGQuc3RyaW5nMmJ1ZihlLmRpY3Rpb25hcnkpOiJbb2JqZWN0IEFycmF5QnVmZmVyXSI9PT1RZC5jYWxsKGUuZGljdGlvbmFyeSk/bmV3IFVpbnQ4QXJyYXkoZS5kaWN0aW9uYXJ5KTplLmRpY3Rpb25hcnksMCE9PShuPVZkLmRlZmxhdGVTZXREaWN0aW9uYXJ5KHRoaXMuc3RybSxyKSkpdGhyb3cgbmV3IEVycm9yKHFkW25dKTt0aGlzLl9kaWN0X3NldD0hMH19ZnVuY3Rpb24gZV8odCxlKXt2YXIgbj1uZXcgdF8oZSk7aWYobi5wdXNoKHQsITApLG4uZXJyKXRocm93IG4ubXNnfHxxZFtuLmVycl07cmV0dXJuIG4ucmVzdWx0fXRfLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKHQsZSl7dmFyIG4scixpPXRoaXMuc3RybSxvPXRoaXMub3B0aW9ucy5jaHVua1NpemU7aWYodGhpcy5lbmRlZClyZXR1cm4hMTtyPWU9PT1+fmU/ZTohMD09PWU/NDowLCJzdHJpbmciPT10eXBlb2YgdD9pLmlucHV0PVhkLnN0cmluZzJidWYodCk6IltvYmplY3QgQXJyYXlCdWZmZXJdIj09PVFkLmNhbGwodCk/aS5pbnB1dD1uZXcgVWludDhBcnJheSh0KTppLmlucHV0PXQsaS5uZXh0X2luPTAsaS5hdmFpbF9pbj1pLmlucHV0Lmxlbmd0aDtkb3tpZigwPT09aS5hdmFpbF9vdXQmJihpLm91dHB1dD1uZXcgWWQuQnVmOChvKSxpLm5leHRfb3V0PTAsaS5hdmFpbF9vdXQ9byksMSE9PShuPVZkLmRlZmxhdGUoaSxyKSkmJjAhPT1uKXJldHVybiB0aGlzLm9uRW5kKG4pLHRoaXMuZW5kZWQ9ITAsITE7MCE9PWkuYXZhaWxfb3V0JiYoMCE9PWkuYXZhaWxfaW58fDQhPT1yJiYyIT09cil8fCgic3RyaW5nIj09PXRoaXMub3B0aW9ucy50bz90aGlzLm9uRGF0YShYZC5idWYyYmluc3RyaW5nKFlkLnNocmlua0J1ZihpLm91dHB1dCxpLm5leHRfb3V0KSkpOnRoaXMub25EYXRhKFlkLnNocmlua0J1ZihpLm91dHB1dCxpLm5leHRfb3V0KSkpfXdoaWxlKChpLmF2YWlsX2luPjB8fDA9PT1pLmF2YWlsX291dCkmJjEhPT1uKTtyZXR1cm4gND09PXI/KG49VmQuZGVmbGF0ZUVuZCh0aGlzLnN0cm0pLHRoaXMub25FbmQobiksdGhpcy5lbmRlZD0hMCwwPT09bik6MiE9PXJ8fCh0aGlzLm9uRW5kKDApLGkuYXZhaWxfb3V0PTAsITApfSx0Xy5wcm90b3R5cGUub25EYXRhPWZ1bmN0aW9uKHQpe3RoaXMuY2h1bmtzLnB1c2godCl9LHRfLnByb3RvdHlwZS5vbkVuZD1mdW5jdGlvbih0KXswPT09dCYmKCJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvP3RoaXMucmVzdWx0PXRoaXMuY2h1bmtzLmpvaW4oIiIpOnRoaXMucmVzdWx0PVlkLmZsYXR0ZW5DaHVua3ModGhpcy5jaHVua3MpKSx0aGlzLmNodW5rcz1bXSx0aGlzLmVycj10LHRoaXMubXNnPXRoaXMuc3RybS5tc2d9LGtmLkRlZmxhdGU9dF8sa2YuZGVmbGF0ZT1lXyxrZi5kZWZsYXRlUmF3PWZ1bmN0aW9uKHQsZSl7cmV0dXJuKGU9ZXx8e30pLnJhdz0hMCxlXyh0LGUpfSxrZi5nemlwPWZ1bmN0aW9uKHQsZSl7cmV0dXJuKGU9ZXx8e30pLmd6aXA9ITAsZV8odCxlKX07dmFyIG5fPXt9LHJfPW90LGlfPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZmxhZ3M7cmV0dXJuIHZvaWQgMCE9PWV8fCJmbGFncyJpbiBMdXx8QXUodCwiZmxhZ3MiKXx8IVR1KEx1LHQpP2U6eHUoRXUsdCl9LG9fPVJlZ0V4cC5wcm90b3R5cGUsYV89bigoZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1vX3x8cl8ob18sdCk/aV8odCk6dC5mbGFnc30pKSxzXz17fSxjXz13ZixsXz0xNSx1Xz1bMyw0LDUsNiw3LDgsOSwxMCwxMSwxMywxNSwxNywxOSwyMywyNywzMSwzNSw0Myw1MSw1OSw2Nyw4Myw5OSwxMTUsMTMxLDE2MywxOTUsMjI3LDI1OCwwLDBdLGhfPVsxNiwxNiwxNiwxNiwxNiwxNiwxNiwxNiwxNywxNywxNywxNywxOCwxOCwxOCwxOCwxOSwxOSwxOSwxOSwyMCwyMCwyMCwyMCwyMSwyMSwyMSwyMSwxNiw3Miw3OF0sZl89WzEsMiwzLDQsNSw3LDksMTMsMTcsMjUsMzMsNDksNjUsOTcsMTI5LDE5MywyNTcsMzg1LDUxMyw3NjksMTAyNSwxNTM3LDIwNDksMzA3Myw0MDk3LDYxNDUsODE5MywxMjI4OSwxNjM4NSwyNDU3NywwLDBdLGRfPVsxNiwxNiwxNiwxNiwxNywxNywxOCwxOCwxOSwxOSwyMCwyMCwyMSwyMSwyMiwyMiwyMywyMywyNCwyNCwyNSwyNSwyNiwyNiwyNywyNywyOCwyOCwyOSwyOSw2NCw2NF0sX189d2YscF89Y2QsZ189aGQsbV89ZnVuY3Rpb24odCxlKXt2YXIgbixyLGksbyxhLHMsYyxsLHUsaCxmLGQsXyxwLGcsbSx5LHYsYix3LGssUyxPLHgsQTtuPXQuc3RhdGUscj10Lm5leHRfaW4seD10LmlucHV0LGk9cisodC5hdmFpbF9pbi01KSxvPXQubmV4dF9vdXQsQT10Lm91dHB1dCxhPW8tKGUtdC5hdmFpbF9vdXQpLHM9bysodC5hdmFpbF9vdXQtMjU3KSxjPW4uZG1heCxsPW4ud3NpemUsdT1uLndoYXZlLGg9bi53bmV4dCxmPW4ud2luZG93LGQ9bi5ob2xkLF89bi5iaXRzLHA9bi5sZW5jb2RlLGc9bi5kaXN0Y29kZSxtPSgxPDxuLmxlbmJpdHMpLTEseT0oMTw8bi5kaXN0Yml0cyktMTt0OmRve188MTUmJihkKz14W3IrK108PF8sXys9OCxkKz14W3IrK108PF8sXys9OCksdj1wW2QmbV07ZTpmb3IoOzspe2lmKGQ+Pj49Yj12Pj4+MjQsXy09YiwwPT09KGI9dj4+PjE2JjI1NSkpQVtvKytdPTY1NTM1JnY7ZWxzZXtpZighKDE2JmIpKXtpZig2NCZiKXtpZigzMiZiKXtuLm1vZGU9MTI7YnJlYWsgdH10Lm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIixuLm1vZGU9MzA7YnJlYWsgdH12PXBbKDY1NTM1JnYpKyhkJigxPDxiKS0xKV07Y29udGludWUgZX1mb3Iodz02NTUzNSZ2LChiJj0xNSkmJihfPGImJihkKz14W3IrK108PF8sXys9OCksdys9ZCYoMTw8YiktMSxkPj4+PWIsXy09YiksXzwxNSYmKGQrPXhbcisrXTw8XyxfKz04LGQrPXhbcisrXTw8XyxfKz04KSx2PWdbZCZ5XTs7KXtpZihkPj4+PWI9dj4+PjI0LF8tPWIsMTYmKGI9dj4+PjE2JjI1NSkpe2lmKGs9NjU1MzUmdixfPChiJj0xNSkmJihkKz14W3IrK108PF8sKF8rPTgpPGImJihkKz14W3IrK108PF8sXys9OCkpLChrKz1kJigxPDxiKS0xKT5jKXt0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLG4ubW9kZT0zMDticmVhayB0fWlmKGQ+Pj49YixfLT1iLGs+KGI9by1hKSl7aWYoKGI9ay1iKT51JiZuLnNhbmUpe3QubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsbi5tb2RlPTMwO2JyZWFrIHR9aWYoUz0wLE89ZiwwPT09aCl7aWYoUys9bC1iLGI8dyl7dy09Yjtkb3tBW28rK109ZltTKytdfXdoaWxlKC0tYik7Uz1vLWssTz1BfX1lbHNlIGlmKGg8Yil7aWYoUys9bCtoLWIsKGItPWgpPHcpe3ctPWI7ZG97QVtvKytdPWZbUysrXX13aGlsZSgtLWIpO2lmKFM9MCxoPHcpe3ctPWI9aDtkb3tBW28rK109ZltTKytdfXdoaWxlKC0tYik7Uz1vLWssTz1BfX19ZWxzZSBpZihTKz1oLWIsYjx3KXt3LT1iO2Rve0FbbysrXT1mW1MrK119d2hpbGUoLS1iKTtTPW8tayxPPUF9Zm9yKDt3PjI7KUFbbysrXT1PW1MrK10sQVtvKytdPU9bUysrXSxBW28rK109T1tTKytdLHctPTM7dyYmKEFbbysrXT1PW1MrK10sdz4xJiYoQVtvKytdPU9bUysrXSkpfWVsc2V7Uz1vLWs7ZG97QVtvKytdPUFbUysrXSxBW28rK109QVtTKytdLEFbbysrXT1BW1MrK10sdy09M313aGlsZSh3PjIpO3cmJihBW28rK109QVtTKytdLHc+MSYmKEFbbysrXT1BW1MrK10pKX1icmVha31pZig2NCZiKXt0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZSBjb2RlIixuLm1vZGU9MzA7YnJlYWsgdH12PWdbKDY1NTM1JnYpKyhkJigxPDxiKS0xKV19fWJyZWFrfX13aGlsZShyPGkmJm88cyk7ci09dz1fPj4zLGQmPSgxPDwoXy09dzw8MykpLTEsdC5uZXh0X2luPXIsdC5uZXh0X291dD1vLHQuYXZhaWxfaW49cjxpP2ktcis1OjUtKHItaSksdC5hdmFpbF9vdXQ9bzxzP3MtbysyNTc6MjU3LShvLXMpLG4uaG9sZD1kLG4uYml0cz1ffSx5Xz1mdW5jdGlvbih0LGUsbixyLGksbyxhLHMpe3ZhciBjLGwsdSxoLGYsZCxfLHAsZyxtPXMuYml0cyx5PTAsdj0wLGI9MCx3PTAsaz0wLFM9MCxPPTAseD0wLEE9MCxUPTAsRT1udWxsLEw9MCx6PW5ldyBjXy5CdWYxNigxNiksQj1uZXcgY18uQnVmMTYoMTYpLEk9bnVsbCxDPTA7Zm9yKHk9MDt5PD1sXzt5Kyspelt5XT0wO2Zvcih2PTA7djxyO3YrKyl6W2Vbbit2XV0rKztmb3Ioaz1tLHc9bF87dz49MSYmMD09PXpbd107dy0tKTtpZihrPncmJihrPXcpLDA9PT13KXJldHVybiBpW28rK109MjA5NzE1MjAsaVtvKytdPTIwOTcxNTIwLHMuYml0cz0xLDA7Zm9yKGI9MTtiPHcmJjA9PT16W2JdO2IrKyk7Zm9yKGs8YiYmKGs9YikseD0xLHk9MTt5PD1sXzt5KyspaWYoeDw8PTEsKHgtPXpbeV0pPDApcmV0dXJuLTE7aWYoeD4wJiYoMD09PXR8fDEhPT13KSlyZXR1cm4tMTtmb3IoQlsxXT0wLHk9MTt5PGxfO3krKylCW3krMV09Qlt5XSt6W3ldO2Zvcih2PTA7djxyO3YrKykwIT09ZVtuK3ZdJiYoYVtCW2Vbbit2XV0rK109dik7aWYoMD09PXQ/KEU9ST1hLGQ9MTkpOjE9PT10PyhFPXVfLEwtPTI1NyxJPWhfLEMtPTI1NyxkPTI1Nik6KEU9Zl8sST1kXyxkPS0xKSxUPTAsdj0wLHk9YixmPW8sUz1rLE89MCx1PS0xLGg9KEE9MTw8ayktMSwxPT09dCYmQT44NTJ8fDI9PT10JiZBPjU5MilyZXR1cm4gMTtmb3IoOzspe189eS1PLGFbdl08ZD8ocD0wLGc9YVt2XSk6YVt2XT5kPyhwPUlbQythW3ZdXSxnPUVbTCthW3ZdXSk6KHA9OTYsZz0wKSxjPTE8PHktTyxiPWw9MTw8Uztkb3tpW2YrKFQ+Pk8pKyhsLT1jKV09Xzw8MjR8cDw8MTZ8Z313aGlsZSgwIT09bCk7Zm9yKGM9MTw8eS0xO1QmYzspYz4+PTE7aWYoMCE9PWM/KFQmPWMtMSxUKz1jKTpUPTAsdisrLDA9PS0telt5XSl7aWYoeT09PXcpYnJlYWs7eT1lW24rYVt2XV19aWYoeT5rJiYoVCZoKSE9PXUpe2ZvcigwPT09TyYmKE89ayksZis9Yix4PTE8PChTPXktTyk7UytPPHcmJiEoKHgtPXpbUytPXSk8PTApOylTKysseDw8PTE7aWYoQSs9MTw8UywxPT09dCYmQT44NTJ8fDI9PT10JiZBPjU5MilyZXR1cm4gMTtpW3U9VCZoXT1rPDwyNHxTPDwxNnxmLW99fXJldHVybiAwIT09VCYmKGlbZitUXT15LU88PDI0fDY0PDwxNikscy5iaXRzPWssMH0sdl89LTIsYl89MTIsd189MzA7ZnVuY3Rpb24ga18odCl7cmV0dXJuKHQ+Pj4yNCYyNTUpKyh0Pj4+OCY2NTI4MCkrKCg2NTI4MCZ0KTw8OCkrKCgyNTUmdCk8PDI0KX1mdW5jdGlvbiBTXygpe3RoaXMubW9kZT0wLHRoaXMubGFzdD0hMSx0aGlzLndyYXA9MCx0aGlzLmhhdmVkaWN0PSExLHRoaXMuZmxhZ3M9MCx0aGlzLmRtYXg9MCx0aGlzLmNoZWNrPTAsdGhpcy50b3RhbD0wLHRoaXMuaGVhZD1udWxsLHRoaXMud2JpdHM9MCx0aGlzLndzaXplPTAsdGhpcy53aGF2ZT0wLHRoaXMud25leHQ9MCx0aGlzLndpbmRvdz1udWxsLHRoaXMuaG9sZD0wLHRoaXMuYml0cz0wLHRoaXMubGVuZ3RoPTAsdGhpcy5vZmZzZXQ9MCx0aGlzLmV4dHJhPTAsdGhpcy5sZW5jb2RlPW51bGwsdGhpcy5kaXN0Y29kZT1udWxsLHRoaXMubGVuYml0cz0wLHRoaXMuZGlzdGJpdHM9MCx0aGlzLm5jb2RlPTAsdGhpcy5ubGVuPTAsdGhpcy5uZGlzdD0wLHRoaXMuaGF2ZT0wLHRoaXMubmV4dD1udWxsLHRoaXMubGVucz1uZXcgX18uQnVmMTYoMzIwKSx0aGlzLndvcms9bmV3IF9fLkJ1ZjE2KDI4OCksdGhpcy5sZW5keW49bnVsbCx0aGlzLmRpc3RkeW49bnVsbCx0aGlzLnNhbmU9MCx0aGlzLmJhY2s9MCx0aGlzLndhcz0wfWZ1bmN0aW9uIE9fKHQpe3ZhciBlO3JldHVybiB0JiZ0LnN0YXRlPyhlPXQuc3RhdGUsdC50b3RhbF9pbj10LnRvdGFsX291dD1lLnRvdGFsPTAsdC5tc2c9IiIsZS53cmFwJiYodC5hZGxlcj0xJmUud3JhcCksZS5tb2RlPTEsZS5sYXN0PTAsZS5oYXZlZGljdD0wLGUuZG1heD0zMjc2OCxlLmhlYWQ9bnVsbCxlLmhvbGQ9MCxlLmJpdHM9MCxlLmxlbmNvZGU9ZS5sZW5keW49bmV3IF9fLkJ1ZjMyKDg1MiksZS5kaXN0Y29kZT1lLmRpc3RkeW49bmV3IF9fLkJ1ZjMyKDU5MiksZS5zYW5lPTEsZS5iYWNrPS0xLDApOnZffWZ1bmN0aW9uIHhfKHQpe3ZhciBlO3JldHVybiB0JiZ0LnN0YXRlPygoZT10LnN0YXRlKS53c2l6ZT0wLGUud2hhdmU9MCxlLnduZXh0PTAsT18odCkpOnZffWZ1bmN0aW9uIEFfKHQsZSl7dmFyIG4scjtyZXR1cm4gdCYmdC5zdGF0ZT8ocj10LnN0YXRlLGU8MD8obj0wLGU9LWUpOihuPTErKGU+PjQpLGU8NDgmJihlJj0xNSkpLGUmJihlPDh8fGU+MTUpP3ZfOihudWxsIT09ci53aW5kb3cmJnIud2JpdHMhPT1lJiYoci53aW5kb3c9bnVsbCksci53cmFwPW4sci53Yml0cz1lLHhfKHQpKSk6dl99ZnVuY3Rpb24gVF8odCxlKXt2YXIgbixyO3JldHVybiB0PyhyPW5ldyBTXyx0LnN0YXRlPXIsci53aW5kb3c9bnVsbCwwIT09KG49QV8odCxlKSkmJih0LnN0YXRlPW51bGwpLG4pOnZffXZhciBFXyxMXyx6Xz0hMDtmdW5jdGlvbiBCXyh0KXtpZih6Xyl7dmFyIGU7Zm9yKEVfPW5ldyBfXy5CdWYzMig1MTIpLExfPW5ldyBfXy5CdWYzMigzMiksZT0wO2U8MTQ0Oyl0LmxlbnNbZSsrXT04O2Zvcig7ZTwyNTY7KXQubGVuc1tlKytdPTk7Zm9yKDtlPDI4MDspdC5sZW5zW2UrK109Nztmb3IoO2U8Mjg4Oyl0LmxlbnNbZSsrXT04O2Zvcih5XygxLHQubGVucywwLDI4OCxFXywwLHQud29yayx7Yml0czo5fSksZT0wO2U8MzI7KXQubGVuc1tlKytdPTU7eV8oMix0LmxlbnMsMCwzMixMXywwLHQud29yayx7Yml0czo1fSksel89ITF9dC5sZW5jb2RlPUVfLHQubGVuYml0cz05LHQuZGlzdGNvZGU9TF8sdC5kaXN0Yml0cz01fWZ1bmN0aW9uIElfKHQsZSxuLHIpe3ZhciBpLG89dC5zdGF0ZTtyZXR1cm4gbnVsbD09PW8ud2luZG93JiYoby53c2l6ZT0xPDxvLndiaXRzLG8ud25leHQ9MCxvLndoYXZlPTAsby53aW5kb3c9bmV3IF9fLkJ1Zjgoby53c2l6ZSkpLHI+PW8ud3NpemU/KF9fLmFycmF5U2V0KG8ud2luZG93LGUsbi1vLndzaXplLG8ud3NpemUsMCksby53bmV4dD0wLG8ud2hhdmU9by53c2l6ZSk6KChpPW8ud3NpemUtby53bmV4dCk+ciYmKGk9ciksX18uYXJyYXlTZXQoby53aW5kb3csZSxuLXIsaSxvLnduZXh0KSwoci09aSk/KF9fLmFycmF5U2V0KG8ud2luZG93LGUsbi1yLHIsMCksby53bmV4dD1yLG8ud2hhdmU9by53c2l6ZSk6KG8ud25leHQrPWksby53bmV4dD09PW8ud3NpemUmJihvLnduZXh0PTApLG8ud2hhdmU8by53c2l6ZSYmKG8ud2hhdmUrPWkpKSksMH1zXy5pbmZsYXRlUmVzZXQ9eF8sc18uaW5mbGF0ZVJlc2V0Mj1BXyxzXy5pbmZsYXRlUmVzZXRLZWVwPU9fLHNfLmluZmxhdGVJbml0PWZ1bmN0aW9uKHQpe3JldHVybiBUXyh0LDE1KX0sc18uaW5mbGF0ZUluaXQyPVRfLHNfLmluZmxhdGU9ZnVuY3Rpb24odCxlKXt2YXIgbixyLGksbyxhLHMsYyxsLHUsaCxmLGQsXyxwLGcsbSx5LHYsYix3LGssUyxPLHgsQT0wLFQ9bmV3IF9fLkJ1ZjgoNCksRT1bMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV07aWYoIXR8fCF0LnN0YXRlfHwhdC5vdXRwdXR8fCF0LmlucHV0JiYwIT09dC5hdmFpbF9pbilyZXR1cm4gdl87KG49dC5zdGF0ZSkubW9kZT09PWJfJiYobi5tb2RlPTEzKSxhPXQubmV4dF9vdXQsaT10Lm91dHB1dCxjPXQuYXZhaWxfb3V0LG89dC5uZXh0X2luLHI9dC5pbnB1dCxzPXQuYXZhaWxfaW4sbD1uLmhvbGQsdT1uLmJpdHMsaD1zLGY9YyxTPTA7dDpmb3IoOzspc3dpdGNoKG4ubW9kZSl7Y2FzZSAxOmlmKDA9PT1uLndyYXApe24ubW9kZT0xMzticmVha31mb3IoO3U8MTY7KXtpZigwPT09cylicmVhayB0O3MtLSxsKz1yW28rK108PHUsdSs9OH1pZigyJm4ud3JhcCYmMzU2MTU9PT1sKXtuLmNoZWNrPTAsVFswXT0yNTUmbCxUWzFdPWw+Pj44JjI1NSxuLmNoZWNrPWdfKG4uY2hlY2ssVCwyLDApLGw9MCx1PTAsbi5tb2RlPTI7YnJlYWt9aWYobi5mbGFncz0wLG4uaGVhZCYmKG4uaGVhZC5kb25lPSExKSwhKDEmbi53cmFwKXx8KCgoMjU1JmwpPDw4KSsobD4+OCkpJTMxKXt0Lm1zZz0iaW5jb3JyZWN0IGhlYWRlciBjaGVjayIsbi5tb2RlPXdfO2JyZWFrfWlmKDghPSgxNSZsKSl7dC5tc2c9InVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIixuLm1vZGU9d187YnJlYWt9aWYodS09NCxrPTgrKDE1JihsPj4+PTQpKSwwPT09bi53Yml0cyluLndiaXRzPWs7ZWxzZSBpZihrPm4ud2JpdHMpe3QubXNnPSJpbnZhbGlkIHdpbmRvdyBzaXplIixuLm1vZGU9d187YnJlYWt9bi5kbWF4PTE8PGssdC5hZGxlcj1uLmNoZWNrPTEsbi5tb2RlPTUxMiZsPzEwOmJfLGw9MCx1PTA7YnJlYWs7Y2FzZSAyOmZvcig7dTwxNjspe2lmKDA9PT1zKWJyZWFrIHQ7cy0tLGwrPXJbbysrXTw8dSx1Kz04fWlmKG4uZmxhZ3M9bCw4IT0oMjU1JmFfKG4pKSl7dC5tc2c9InVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIixuLm1vZGU9d187YnJlYWt9aWYoNTczNDQmYV8obikpe3QubXNnPSJ1bmtub3duIGhlYWRlciBmbGFncyBzZXQiLG4ubW9kZT13XzticmVha31uLmhlYWQmJihuLmhlYWQudGV4dD1sPj44JjEpLDUxMiZhXyhuKSYmKFRbMF09MjU1JmwsVFsxXT1sPj4+OCYyNTUsbi5jaGVjaz1nXyhuLmNoZWNrLFQsMiwwKSksbD0wLHU9MCxuLm1vZGU9MztjYXNlIDM6Zm9yKDt1PDMyOyl7aWYoMD09PXMpYnJlYWsgdDtzLS0sbCs9cltvKytdPDx1LHUrPTh9bi5oZWFkJiYobi5oZWFkLnRpbWU9bCksNTEyJmFfKG4pJiYoVFswXT0yNTUmbCxUWzFdPWw+Pj44JjI1NSxUWzJdPWw+Pj4xNiYyNTUsVFszXT1sPj4+MjQmMjU1LG4uY2hlY2s9Z18obi5jaGVjayxULDQsMCkpLGw9MCx1PTAsbi5tb2RlPTQ7Y2FzZSA0OmZvcig7dTwxNjspe2lmKDA9PT1zKWJyZWFrIHQ7cy0tLGwrPXJbbysrXTw8dSx1Kz04fW4uaGVhZCYmKG4uaGVhZC54ZmxhZ3M9MjU1Jmwsbi5oZWFkLm9zPWw+PjgpLDUxMiZhXyhuKSYmKFRbMF09MjU1JmwsVFsxXT1sPj4+OCYyNTUsbi5jaGVjaz1nXyhuLmNoZWNrLFQsMiwwKSksbD0wLHU9MCxuLm1vZGU9NTtjYXNlIDU6aWYoMTAyNCZhXyhuKSl7Zm9yKDt1PDE2Oyl7aWYoMD09PXMpYnJlYWsgdDtzLS0sbCs9cltvKytdPDx1LHUrPTh9bi5sZW5ndGg9bCxuLmhlYWQmJihuLmhlYWQuZXh0cmFfbGVuPWwpLDUxMiZhXyhuKSYmKFRbMF09MjU1JmwsVFsxXT1sPj4+OCYyNTUsbi5jaGVjaz1nXyhuLmNoZWNrLFQsMiwwKSksbD0wLHU9MH1lbHNlIG4uaGVhZCYmKG4uaGVhZC5leHRyYT1udWxsKTtuLm1vZGU9NjtjYXNlIDY6aWYoMTAyNCZhXyhuKSYmKChkPW4ubGVuZ3RoKT5zJiYoZD1zKSxkJiYobi5oZWFkJiYoaz1uLmhlYWQuZXh0cmFfbGVuLW4ubGVuZ3RoLG4uaGVhZC5leHRyYXx8KG4uaGVhZC5leHRyYT1uZXcgQXJyYXkobi5oZWFkLmV4dHJhX2xlbikpLF9fLmFycmF5U2V0KG4uaGVhZC5leHRyYSxyLG8sZCxrKSksNTEyJmFfKG4pJiYobi5jaGVjaz1nXyhuLmNoZWNrLHIsZCxvKSkscy09ZCxvKz1kLG4ubGVuZ3RoLT1kKSxuLmxlbmd0aCkpYnJlYWsgdDtuLmxlbmd0aD0wLG4ubW9kZT03O2Nhc2UgNzppZigyMDQ4JmFfKG4pKXtpZigwPT09cylicmVhayB0O2Q9MDtkb3trPXJbbytkKytdLG4uaGVhZCYmayYmbi5sZW5ndGg8NjU1MzYmJihuLmhlYWQubmFtZSs9U3RyaW5nLmZyb21DaGFyQ29kZShrKSl9d2hpbGUoayYmZDxzKTtpZig1MTImYV8obikmJihuLmNoZWNrPWdfKG4uY2hlY2sscixkLG8pKSxzLT1kLG8rPWQsaylicmVhayB0fWVsc2Ugbi5oZWFkJiYobi5oZWFkLm5hbWU9bnVsbCk7bi5sZW5ndGg9MCxuLm1vZGU9ODtjYXNlIDg6aWYoNDA5NiZhXyhuKSl7aWYoMD09PXMpYnJlYWsgdDtkPTA7ZG97az1yW28rZCsrXSxuLmhlYWQmJmsmJm4ubGVuZ3RoPDY1NTM2JiYobi5oZWFkLmNvbW1lbnQrPVN0cmluZy5mcm9tQ2hhckNvZGUoaykpfXdoaWxlKGsmJmQ8cyk7aWYoNTEyJmFfKG4pJiYobi5jaGVjaz1nXyhuLmNoZWNrLHIsZCxvKSkscy09ZCxvKz1kLGspYnJlYWsgdH1lbHNlIG4uaGVhZCYmKG4uaGVhZC5jb21tZW50PW51bGwpO24ubW9kZT05O2Nhc2UgOTppZig1MTImYV8obikpe2Zvcig7dTwxNjspe2lmKDA9PT1zKWJyZWFrIHQ7cy0tLGwrPXJbbysrXTw8dSx1Kz04fWlmKGwhPT0oNjU1MzUmbi5jaGVjaykpe3QubXNnPSJoZWFkZXIgY3JjIG1pc21hdGNoIixuLm1vZGU9d187YnJlYWt9bD0wLHU9MH1uLmhlYWQmJihuLmhlYWQuaGNyYz1hXyhuKT4+OSYxLG4uaGVhZC5kb25lPSEwKSx0LmFkbGVyPW4uY2hlY2s9MCxuLm1vZGU9Yl87YnJlYWs7Y2FzZSAxMDpmb3IoO3U8MzI7KXtpZigwPT09cylicmVhayB0O3MtLSxsKz1yW28rK108PHUsdSs9OH10LmFkbGVyPW4uY2hlY2s9a18obCksbD0wLHU9MCxuLm1vZGU9MTE7Y2FzZSAxMTppZigwPT09bi5oYXZlZGljdClyZXR1cm4gdC5uZXh0X291dD1hLHQuYXZhaWxfb3V0PWMsdC5uZXh0X2luPW8sdC5hdmFpbF9pbj1zLG4uaG9sZD1sLG4uYml0cz11LDI7dC5hZGxlcj1uLmNoZWNrPTEsbi5tb2RlPWJfO2Nhc2UgYl86aWYoNT09PWV8fDY9PT1lKWJyZWFrIHQ7Y2FzZSAxMzppZihuLmxhc3Qpe2w+Pj49NyZ1LHUtPTcmdSxuLm1vZGU9Mjc7YnJlYWt9Zm9yKDt1PDM7KXtpZigwPT09cylicmVhayB0O3MtLSxsKz1yW28rK108PHUsdSs9OH1zd2l0Y2gobi5sYXN0PTEmbCx1LT0xLDMmKGw+Pj49MSkpe2Nhc2UgMDpuLm1vZGU9MTQ7YnJlYWs7Y2FzZSAxOmlmKEJfKG4pLG4ubW9kZT0yMCw2PT09ZSl7bD4+Pj0yLHUtPTI7YnJlYWsgdH1icmVhaztjYXNlIDI6bi5tb2RlPTE3O2JyZWFrO2Nhc2UgMzp0Lm1zZz0iaW52YWxpZCBibG9jayB0eXBlIixuLm1vZGU9d199bD4+Pj0yLHUtPTI7YnJlYWs7Y2FzZSAxNDpmb3IobD4+Pj03JnUsdS09NyZ1O3U8MzI7KXtpZigwPT09cylicmVhayB0O3MtLSxsKz1yW28rK108PHUsdSs9OH1pZigoNjU1MzUmbCkhPShsPj4+MTZeNjU1MzUpKXt0Lm1zZz0iaW52YWxpZCBzdG9yZWQgYmxvY2sgbGVuZ3RocyIsbi5tb2RlPXdfO2JyZWFrfWlmKG4ubGVuZ3RoPTY1NTM1JmwsbD0wLHU9MCxuLm1vZGU9MTUsNj09PWUpYnJlYWsgdDtjYXNlIDE1Om4ubW9kZT0xNjtjYXNlIDE2OmlmKGQ9bi5sZW5ndGgpe2lmKGQ+cyYmKGQ9cyksZD5jJiYoZD1jKSwwPT09ZClicmVhayB0O19fLmFycmF5U2V0KGkscixvLGQsYSkscy09ZCxvKz1kLGMtPWQsYSs9ZCxuLmxlbmd0aC09ZDticmVha31uLm1vZGU9Yl87YnJlYWs7Y2FzZSAxNzpmb3IoO3U8MTQ7KXtpZigwPT09cylicmVhayB0O3MtLSxsKz1yW28rK108PHUsdSs9OH1pZihuLm5sZW49MjU3KygzMSZsKSxsPj4+PTUsdS09NSxuLm5kaXN0PTErKDMxJmwpLGw+Pj49NSx1LT01LG4ubmNvZGU9NCsoMTUmbCksbD4+Pj00LHUtPTQsbi5ubGVuPjI4Nnx8bi5uZGlzdD4zMCl7dC5tc2c9InRvbyBtYW55IGxlbmd0aCBvciBkaXN0YW5jZSBzeW1ib2xzIixuLm1vZGU9d187YnJlYWt9bi5oYXZlPTAsbi5tb2RlPTE4O2Nhc2UgMTg6Zm9yKDtuLmhhdmU8bi5uY29kZTspe2Zvcig7dTwzOyl7aWYoMD09PXMpYnJlYWsgdDtzLS0sbCs9cltvKytdPDx1LHUrPTh9bi5sZW5zW0Vbbi5oYXZlKytdXT03JmwsbD4+Pj0zLHUtPTN9Zm9yKDtuLmhhdmU8MTk7KW4ubGVuc1tFW24uaGF2ZSsrXV09MDtpZihuLmxlbmNvZGU9bi5sZW5keW4sbi5sZW5iaXRzPTcsTz17Yml0czpuLmxlbmJpdHN9LFM9eV8oMCxuLmxlbnMsMCwxOSxuLmxlbmNvZGUsMCxuLndvcmssTyksbi5sZW5iaXRzPU8uYml0cyxTKXt0Lm1zZz0iaW52YWxpZCBjb2RlIGxlbmd0aHMgc2V0IixuLm1vZGU9d187YnJlYWt9bi5oYXZlPTAsbi5tb2RlPTE5O2Nhc2UgMTk6Zm9yKDtuLmhhdmU8bi5ubGVuK24ubmRpc3Q7KXtmb3IoO209KEE9bi5sZW5jb2RlW2wmKDE8PG4ubGVuYml0cyktMV0pPj4+MTYmMjU1LHk9NjU1MzUmQSwhKChnPUE+Pj4yNCk8PXUpOyl7aWYoMD09PXMpYnJlYWsgdDtzLS0sbCs9cltvKytdPDx1LHUrPTh9aWYoeTwxNilsPj4+PWcsdS09ZyxuLmxlbnNbbi5oYXZlKytdPXk7ZWxzZXtpZigxNj09PXkpe2Zvcih4PWcrMjt1PHg7KXtpZigwPT09cylicmVhayB0O3MtLSxsKz1yW28rK108PHUsdSs9OH1pZihsPj4+PWcsdS09ZywwPT09bi5oYXZlKXt0Lm1zZz0iaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCIsbi5tb2RlPXdfO2JyZWFrfWs9bi5sZW5zW24uaGF2ZS0xXSxkPTMrKDMmbCksbD4+Pj0yLHUtPTJ9ZWxzZSBpZigxNz09PXkpe2Zvcih4PWcrMzt1PHg7KXtpZigwPT09cylicmVhayB0O3MtLSxsKz1yW28rK108PHUsdSs9OH11LT1nLGs9MCxkPTMrKDcmKGw+Pj49ZykpLGw+Pj49Myx1LT0zfWVsc2V7Zm9yKHg9Zys3O3U8eDspe2lmKDA9PT1zKWJyZWFrIHQ7cy0tLGwrPXJbbysrXTw8dSx1Kz04fXUtPWcsaz0wLGQ9MTErKDEyNyYobD4+Pj1nKSksbD4+Pj03LHUtPTd9aWYobi5oYXZlK2Q+bi5ubGVuK24ubmRpc3Qpe3QubXNnPSJpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0IixuLm1vZGU9d187YnJlYWt9Zm9yKDtkLS07KW4ubGVuc1tuLmhhdmUrK109a319aWYobi5tb2RlPT09d18pYnJlYWs7aWYoMD09PW4ubGVuc1syNTZdKXt0Lm1zZz0iaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrIixuLm1vZGU9d187YnJlYWt9aWYobi5sZW5iaXRzPTksTz17Yml0czpuLmxlbmJpdHN9LFM9eV8oMSxuLmxlbnMsMCxuLm5sZW4sbi5sZW5jb2RlLDAsbi53b3JrLE8pLG4ubGVuYml0cz1PLmJpdHMsUyl7dC5tc2c9ImludmFsaWQgbGl0ZXJhbC9sZW5ndGhzIHNldCIsbi5tb2RlPXdfO2JyZWFrfWlmKG4uZGlzdGJpdHM9NixuLmRpc3Rjb2RlPW4uZGlzdGR5bixPPXtiaXRzOm4uZGlzdGJpdHN9LFM9eV8oMixuLmxlbnMsbi5ubGVuLG4ubmRpc3Qsbi5kaXN0Y29kZSwwLG4ud29yayxPKSxuLmRpc3RiaXRzPU8uYml0cyxTKXt0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZXMgc2V0IixuLm1vZGU9d187YnJlYWt9aWYobi5tb2RlPTIwLDY9PT1lKWJyZWFrIHQ7Y2FzZSAyMDpuLm1vZGU9MjE7Y2FzZSAyMTppZihzPj02JiZjPj0yNTgpe3QubmV4dF9vdXQ9YSx0LmF2YWlsX291dD1jLHQubmV4dF9pbj1vLHQuYXZhaWxfaW49cyxuLmhvbGQ9bCxuLmJpdHM9dSxtXyh0LGYpLGE9dC5uZXh0X291dCxpPXQub3V0cHV0LGM9dC5hdmFpbF9vdXQsbz10Lm5leHRfaW4scj10LmlucHV0LHM9dC5hdmFpbF9pbixsPW4uaG9sZCx1PW4uYml0cyxuLm1vZGU9PT1iXyYmKG4uYmFjaz0tMSk7YnJlYWt9Zm9yKG4uYmFjaz0wO209KEE9bi5sZW5jb2RlW2wmKDE8PG4ubGVuYml0cyktMV0pPj4+MTYmMjU1LHk9NjU1MzUmQSwhKChnPUE+Pj4yNCk8PXUpOyl7aWYoMD09PXMpYnJlYWsgdDtzLS0sbCs9cltvKytdPDx1LHUrPTh9aWYobSYmISgyNDAmbSkpe2Zvcih2PWcsYj1tLHc9eTttPShBPW4ubGVuY29kZVt3KygobCYoMTw8ditiKS0xKT4+dildKT4+PjE2JjI1NSx5PTY1NTM1JkEsISh2KyhnPUE+Pj4yNCk8PXUpOyl7aWYoMD09PXMpYnJlYWsgdDtzLS0sbCs9cltvKytdPDx1LHUrPTh9bD4+Pj12LHUtPXYsbi5iYWNrKz12fWlmKGw+Pj49Zyx1LT1nLG4uYmFjays9ZyxuLmxlbmd0aD15LDA9PT1tKXtuLm1vZGU9MjY7YnJlYWt9aWYoMzImbSl7bi5iYWNrPS0xLG4ubW9kZT1iXzticmVha31pZig2NCZtKXt0Lm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIixuLm1vZGU9d187YnJlYWt9bi5leHRyYT0xNSZtLG4ubW9kZT0yMjtjYXNlIDIyOmlmKG4uZXh0cmEpe2Zvcih4PW4uZXh0cmE7dTx4Oyl7aWYoMD09PXMpYnJlYWsgdDtzLS0sbCs9cltvKytdPDx1LHUrPTh9bi5sZW5ndGgrPWwmKDE8PG4uZXh0cmEpLTEsbD4+Pj1uLmV4dHJhLHUtPW4uZXh0cmEsbi5iYWNrKz1uLmV4dHJhfW4ud2FzPW4ubGVuZ3RoLG4ubW9kZT0yMztjYXNlIDIzOmZvcig7bT0oQT1uLmRpc3Rjb2RlW2wmKDE8PG4uZGlzdGJpdHMpLTFdKT4+PjE2JjI1NSx5PTY1NTM1JkEsISgoZz1BPj4+MjQpPD11KTspe2lmKDA9PT1zKWJyZWFrIHQ7cy0tLGwrPXJbbysrXTw8dSx1Kz04fWlmKCEoMjQwJm0pKXtmb3Iodj1nLGI9bSx3PXk7bT0oQT1uLmRpc3Rjb2RlW3crKChsJigxPDx2K2IpLTEpPj52KV0pPj4+MTYmMjU1LHk9NjU1MzUmQSwhKHYrKGc9QT4+PjI0KTw9dSk7KXtpZigwPT09cylicmVhayB0O3MtLSxsKz1yW28rK108PHUsdSs9OH1sPj4+PXYsdS09dixuLmJhY2srPXZ9aWYobD4+Pj1nLHUtPWcsbi5iYWNrKz1nLDY0Jm0pe3QubXNnPSJpbnZhbGlkIGRpc3RhbmNlIGNvZGUiLG4ubW9kZT13XzticmVha31uLm9mZnNldD15LG4uZXh0cmE9MTUmbSxuLm1vZGU9MjQ7Y2FzZSAyNDppZihuLmV4dHJhKXtmb3IoeD1uLmV4dHJhO3U8eDspe2lmKDA9PT1zKWJyZWFrIHQ7cy0tLGwrPXJbbysrXTw8dSx1Kz04fW4ub2Zmc2V0Kz1sJigxPDxuLmV4dHJhKS0xLGw+Pj49bi5leHRyYSx1LT1uLmV4dHJhLG4uYmFjays9bi5leHRyYX1pZihuLm9mZnNldD5uLmRtYXgpe3QubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsbi5tb2RlPXdfO2JyZWFrfW4ubW9kZT0yNTtjYXNlIDI1OmlmKDA9PT1jKWJyZWFrIHQ7aWYoZD1mLWMsbi5vZmZzZXQ+ZCl7aWYoKGQ9bi5vZmZzZXQtZCk+bi53aGF2ZSYmbi5zYW5lKXt0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLG4ubW9kZT13XzticmVha31kPm4ud25leHQ/KGQtPW4ud25leHQsXz1uLndzaXplLWQpOl89bi53bmV4dC1kLGQ+bi5sZW5ndGgmJihkPW4ubGVuZ3RoKSxwPW4ud2luZG93fWVsc2UgcD1pLF89YS1uLm9mZnNldCxkPW4ubGVuZ3RoO2Q+YyYmKGQ9YyksYy09ZCxuLmxlbmd0aC09ZDtkb3tpW2ErK109cFtfKytdfXdoaWxlKC0tZCk7MD09PW4ubGVuZ3RoJiYobi5tb2RlPTIxKTticmVhaztjYXNlIDI2OmlmKDA9PT1jKWJyZWFrIHQ7aVthKytdPW4ubGVuZ3RoLGMtLSxuLm1vZGU9MjE7YnJlYWs7Y2FzZSAyNzppZihuLndyYXApe2Zvcig7dTwzMjspe2lmKDA9PT1zKWJyZWFrIHQ7cy0tLGx8PXJbbysrXTw8dSx1Kz04fWlmKGYtPWMsdC50b3RhbF9vdXQrPWYsbi50b3RhbCs9ZixmJiYodC5hZGxlcj1uLmNoZWNrPWFfKG4pP2dfKG4uY2hlY2ssaSxmLGEtZik6cF8obi5jaGVjayxpLGYsYS1mKSksZj1jLChhXyhuKT9sOmtfKGwpKSE9PW4uY2hlY2spe3QubXNnPSJpbmNvcnJlY3QgZGF0YSBjaGVjayIsbi5tb2RlPXdfO2JyZWFrfWw9MCx1PTB9bi5tb2RlPTI4O2Nhc2UgMjg6aWYobi53cmFwJiZhXyhuKSl7Zm9yKDt1PDMyOyl7aWYoMD09PXMpYnJlYWsgdDtzLS0sbCs9cltvKytdPDx1LHUrPTh9aWYobCE9PSg0Mjk0OTY3Mjk1Jm4udG90YWwpKXt0Lm1zZz0iaW5jb3JyZWN0IGxlbmd0aCBjaGVjayIsbi5tb2RlPXdfO2JyZWFrfWw9MCx1PTB9bi5tb2RlPTI5O2Nhc2UgMjk6Uz0xO2JyZWFrIHQ7Y2FzZSB3XzpTPS0zO2JyZWFrIHQ7Y2FzZSAzMTpyZXR1cm4tNDtkZWZhdWx0OnJldHVybiB2X31yZXR1cm4gdC5uZXh0X291dD1hLHQuYXZhaWxfb3V0PWMsdC5uZXh0X2luPW8sdC5hdmFpbF9pbj1zLG4uaG9sZD1sLG4uYml0cz11LChuLndzaXplfHxmIT09dC5hdmFpbF9vdXQmJm4ubW9kZTx3XyYmKG4ubW9kZTwyN3x8NCE9PWUpKSYmSV8odCx0Lm91dHB1dCx0Lm5leHRfb3V0LGYtdC5hdmFpbF9vdXQpLGgtPXQuYXZhaWxfaW4sZi09dC5hdmFpbF9vdXQsdC50b3RhbF9pbis9aCx0LnRvdGFsX291dCs9ZixuLnRvdGFsKz1mLG4ud3JhcCYmZiYmKHQuYWRsZXI9bi5jaGVjaz1hXyhuKT9nXyhuLmNoZWNrLGksZix0Lm5leHRfb3V0LWYpOnBfKG4uY2hlY2ssaSxmLHQubmV4dF9vdXQtZikpLHQuZGF0YV90eXBlPW4uYml0cysobi5sYXN0PzY0OjApKyhuLm1vZGU9PT1iXz8xMjg6MCkrKDIwPT09bi5tb2RlfHwxNT09PW4ubW9kZT8yNTY6MCksKDA9PT1oJiYwPT09Znx8ND09PWUpJiYwPT09UyYmKFM9LTUpLFN9LHNfLmluZmxhdGVFbmQ9ZnVuY3Rpb24odCl7aWYoIXR8fCF0LnN0YXRlKXJldHVybiB2Xzt2YXIgZT10LnN0YXRlO3JldHVybiBlLndpbmRvdyYmKGUud2luZG93PW51bGwpLHQuc3RhdGU9bnVsbCwwfSxzXy5pbmZsYXRlR2V0SGVhZGVyPWZ1bmN0aW9uKHQsZSl7dmFyIG47cmV0dXJuIHQmJnQuc3RhdGUmJjImKG49dC5zdGF0ZSkud3JhcD8obi5oZWFkPWUsZS5kb25lPSExLDApOnZffSxzXy5pbmZsYXRlU2V0RGljdGlvbmFyeT1mdW5jdGlvbih0LGUpe3ZhciBuLHI9ZS5sZW5ndGg7cmV0dXJuIHQmJnQuc3RhdGU/MCE9PShuPXQuc3RhdGUpLndyYXAmJjExIT09bi5tb2RlP3ZfOjExPT09bi5tb2RlJiZwXygxLGUsciwwKSE9PW4uY2hlY2s/LTM6SV8odCxlLHIscik/KG4ubW9kZT0zMSwtNCk6KG4uaGF2ZWRpY3Q9MSwwKTp2X30sc18uaW5mbGF0ZUluZm89InBha28gaW5mbGF0ZSAoZnJvbSBOb2RlY2EgcHJvamVjdCkiO3ZhciBDXz17Wl9OT19GTFVTSDowLFpfUEFSVElBTF9GTFVTSDoxLFpfU1lOQ19GTFVTSDoyLFpfRlVMTF9GTFVTSDozLFpfRklOSVNIOjQsWl9CTE9DSzo1LFpfVFJFRVM6NixaX09LOjAsWl9TVFJFQU1fRU5EOjEsWl9ORUVEX0RJQ1Q6MixaX0VSUk5POi0xLFpfU1RSRUFNX0VSUk9SOi0yLFpfREFUQV9FUlJPUjotMyxaX0JVRl9FUlJPUjotNSxaX05PX0NPTVBSRVNTSU9OOjAsWl9CRVNUX1NQRUVEOjEsWl9CRVNUX0NPTVBSRVNTSU9OOjksWl9ERUZBVUxUX0NPTVBSRVNTSU9OOi0xLFpfRklMVEVSRUQ6MSxaX0hVRkZNQU5fT05MWToyLFpfUkxFOjMsWl9GSVhFRDo0LFpfREVGQVVMVF9TVFJBVEVHWTowLFpfQklOQVJZOjAsWl9URVhUOjEsWl9VTktOT1dOOjIsWl9ERUZMQVRFRDo4fTt2YXIgTl89c18sUl89d2Ysal89RmQsRF89Q18sUF89ZmQsVV89R2QsRl89ZnVuY3Rpb24oKXt0aGlzLnRleHQ9MCx0aGlzLnRpbWU9MCx0aGlzLnhmbGFncz0wLHRoaXMub3M9MCx0aGlzLmV4dHJhPW51bGwsdGhpcy5leHRyYV9sZW49MCx0aGlzLm5hbWU9IiIsdGhpcy5jb21tZW50PSIiLHRoaXMuaGNyYz0wLHRoaXMuZG9uZT0hMX0sTV89T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztmdW5jdGlvbiBaXyh0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBaXykpcmV0dXJuIG5ldyBaXyh0KTt0aGlzLm9wdGlvbnM9Ul8uYXNzaWduKHtjaHVua1NpemU6MTYzODQsd2luZG93Qml0czowLHRvOiIifSx0fHx7fSk7dmFyIGU9dGhpcy5vcHRpb25zO2UucmF3JiZlLndpbmRvd0JpdHM+PTAmJmUud2luZG93Qml0czwxNiYmKGUud2luZG93Qml0cz0tZS53aW5kb3dCaXRzLDA9PT1lLndpbmRvd0JpdHMmJihlLndpbmRvd0JpdHM9LTE1KSksIShlLndpbmRvd0JpdHM+PTAmJmUud2luZG93Qml0czwxNil8fHQmJnQud2luZG93Qml0c3x8KGUud2luZG93Qml0cys9MzIpLGUud2luZG93Qml0cz4xNSYmZS53aW5kb3dCaXRzPDQ4JiYoMTUmZS53aW5kb3dCaXRzfHwoZS53aW5kb3dCaXRzfD0xNSkpLHRoaXMuZXJyPTAsdGhpcy5tc2c9IiIsdGhpcy5lbmRlZD0hMSx0aGlzLmNodW5rcz1bXSx0aGlzLnN0cm09bmV3IFVfLHRoaXMuc3RybS5hdmFpbF9vdXQ9MDt2YXIgbj1OXy5pbmZsYXRlSW5pdDIodGhpcy5zdHJtLGUud2luZG93Qml0cyk7aWYobiE9PURfLlpfT0spdGhyb3cgbmV3IEVycm9yKFBfW25dKTtpZih0aGlzLmhlYWRlcj1uZXcgRl8sTl8uaW5mbGF0ZUdldEhlYWRlcih0aGlzLnN0cm0sdGhpcy5oZWFkZXIpLGUuZGljdGlvbmFyeSYmKCJzdHJpbmciPT10eXBlb2YgZS5kaWN0aW9uYXJ5P2UuZGljdGlvbmFyeT1qXy5zdHJpbmcyYnVmKGUuZGljdGlvbmFyeSk6IltvYmplY3QgQXJyYXlCdWZmZXJdIj09PU1fLmNhbGwoZS5kaWN0aW9uYXJ5KSYmKGUuZGljdGlvbmFyeT1uZXcgVWludDhBcnJheShlLmRpY3Rpb25hcnkpKSxlLnJhdyYmKG49Tl8uaW5mbGF0ZVNldERpY3Rpb25hcnkodGhpcy5zdHJtLGUuZGljdGlvbmFyeSkpIT09RF8uWl9PSykpdGhyb3cgbmV3IEVycm9yKFBfW25dKX1mdW5jdGlvbiBKXyh0LGUpe3ZhciBuPW5ldyBaXyhlKTtpZihuLnB1c2godCwhMCksbi5lcnIpdGhyb3cgbi5tc2d8fFBfW24uZXJyXTtyZXR1cm4gbi5yZXN1bHR9Wl8ucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24odCxlKXt2YXIgbixyLGksbyxhLHM9dGhpcy5zdHJtLGM9dGhpcy5vcHRpb25zLmNodW5rU2l6ZSxsPXRoaXMub3B0aW9ucy5kaWN0aW9uYXJ5LHU9ITE7aWYodGhpcy5lbmRlZClyZXR1cm4hMTtyPWU9PT1+fmU/ZTohMD09PWU/RF8uWl9GSU5JU0g6RF8uWl9OT19GTFVTSCwic3RyaW5nIj09dHlwZW9mIHQ/cy5pbnB1dD1qXy5iaW5zdHJpbmcyYnVmKHQpOiJbb2JqZWN0IEFycmF5QnVmZmVyXSI9PT1NXy5jYWxsKHQpP3MuaW5wdXQ9bmV3IFVpbnQ4QXJyYXkodCk6cy5pbnB1dD10LHMubmV4dF9pbj0wLHMuYXZhaWxfaW49cy5pbnB1dC5sZW5ndGg7ZG97aWYoMD09PXMuYXZhaWxfb3V0JiYocy5vdXRwdXQ9bmV3IFJfLkJ1ZjgoYykscy5uZXh0X291dD0wLHMuYXZhaWxfb3V0PWMpLChuPU5fLmluZmxhdGUocyxEXy5aX05PX0ZMVVNIKSk9PT1EXy5aX05FRURfRElDVCYmbCYmKG49Tl8uaW5mbGF0ZVNldERpY3Rpb25hcnkodGhpcy5zdHJtLGwpKSxuPT09RF8uWl9CVUZfRVJST1ImJiEwPT09dSYmKG49RF8uWl9PSyx1PSExKSxuIT09RF8uWl9TVFJFQU1fRU5EJiZuIT09RF8uWl9PSylyZXR1cm4gdGhpcy5vbkVuZChuKSx0aGlzLmVuZGVkPSEwLCExO3MubmV4dF9vdXQmJigwIT09cy5hdmFpbF9vdXQmJm4hPT1EXy5aX1NUUkVBTV9FTkQmJigwIT09cy5hdmFpbF9pbnx8ciE9PURfLlpfRklOSVNIJiZyIT09RF8uWl9TWU5DX0ZMVVNIKXx8KCJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvPyhpPWpfLnV0Zjhib3JkZXIocy5vdXRwdXQscy5uZXh0X291dCksbz1zLm5leHRfb3V0LWksYT1qXy5idWYyc3RyaW5nKHMub3V0cHV0LGkpLHMubmV4dF9vdXQ9byxzLmF2YWlsX291dD1jLW8sbyYmUl8uYXJyYXlTZXQocy5vdXRwdXQscy5vdXRwdXQsaSxvLDApLHRoaXMub25EYXRhKGEpKTp0aGlzLm9uRGF0YShSXy5zaHJpbmtCdWYocy5vdXRwdXQscy5uZXh0X291dCkpKSksMD09PXMuYXZhaWxfaW4mJjA9PT1zLmF2YWlsX291dCYmKHU9ITApfXdoaWxlKChzLmF2YWlsX2luPjB8fDA9PT1zLmF2YWlsX291dCkmJm4hPT1EXy5aX1NUUkVBTV9FTkQpO3JldHVybiBuPT09RF8uWl9TVFJFQU1fRU5EJiYocj1EXy5aX0ZJTklTSCkscj09PURfLlpfRklOSVNIPyhuPU5fLmluZmxhdGVFbmQodGhpcy5zdHJtKSx0aGlzLm9uRW5kKG4pLHRoaXMuZW5kZWQ9ITAsbj09PURfLlpfT0spOnIhPT1EXy5aX1NZTkNfRkxVU0h8fCh0aGlzLm9uRW5kKERfLlpfT0spLHMuYXZhaWxfb3V0PTAsITApfSxaXy5wcm90b3R5cGUub25EYXRhPWZ1bmN0aW9uKHQpe3RoaXMuY2h1bmtzLnB1c2godCl9LFpfLnByb3RvdHlwZS5vbkVuZD1mdW5jdGlvbih0KXt0PT09RF8uWl9PSyYmKCJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvP3RoaXMucmVzdWx0PXRoaXMuY2h1bmtzLmpvaW4oIiIpOnRoaXMucmVzdWx0PVJfLmZsYXR0ZW5DaHVua3ModGhpcy5jaHVua3MpKSx0aGlzLmNodW5rcz1bXSx0aGlzLmVycj10LHRoaXMubXNnPXRoaXMuc3RybS5tc2d9LG5fLkluZmxhdGU9Wl8sbl8uaW5mbGF0ZT1KXyxuXy5pbmZsYXRlUmF3PWZ1bmN0aW9uKHQsZSl7cmV0dXJuKGU9ZXx8e30pLnJhdz0hMCxKXyh0LGUpfSxuXy51bmd6aXA9Sl87dmFyIEhfPXt9OygwLHdmLmFzc2lnbikoSF8sa2Ysbl8sQ18pO3ZhciBXXz1uKEhfKTtsZXQgS189MTtjb25zdCBHXz0iX19ydGNfdW1kX25hbWVfXyIsVl89KCk9PndpbmRvdy5pbmRleGVkREJ8fHdpbmRvdy5tb3pJbmRleGVkREJ8fHdpbmRvdy53ZWJraXRJbmRleGVkREJ8fHdpbmRvdy5tc0luZGV4ZWREQjtjbGFzcyBZX3tjb25zdHJ1Y3Rvcih0KXt1dSh0aGlzLCJzdG9yZU5hbWUiLHZvaWQgMCksdXUodGhpcywicGVuZGluZ0xpc3QiLFtdKSx0aGlzLnN0b3JlTmFtZT10LCFGdSgpJiZWXygpJiZ0aGlzLl9jaGVja0FuZENyZWF0ZVN0b3JlKHQpfWFzeW5jIF9jaGVja0FuZENyZWF0ZVN0b3JlKHQsZSl7Y29uc3Qgbj1hd2FpdCBZXy5fcHJvbWlzZUxvY2subG9jaygpO2lmKFZfKCkuZGF0YWJhc2VzKXtsZXQgdDthd2FpdCBuZXcgUHJvbWlzZSgoZT0+e2NvbnN0IG49KCk9PlZfKCkuZGF0YWJhc2VzKCkuZmluYWxseShlKTt0PXNldEludGVydmFsKG4sMTAwKSxuKCl9KSkuZmluYWxseSgoKCk9PmNsZWFySW50ZXJ2YWwodCkpKX1yZXR1cm4gbmV3IFByb21pc2UoKHI9PntZXy5kYiYmKFlfLmRiLmNsb3NlKCksZGVsZXRlIFlfLmRiKTtjb25zdCBpPWU/Vl8oKS5vcGVuKEdfLGUpOlZfKCkub3BlbihHXyk7aS5vbnVwZ3JhZGVuZWVkZWQ9KCk9PntpLnJlc3VsdC5jcmVhdGVPYmplY3RTdG9yZSh0KX0saS5vbmVycm9yPSgpPT57Y29uc29sZS5lcnJvcigiSW5kZXhlZERCSW50ZXJmYWNlIGVycm9yIixpLmVycm9yKX0saS5vbnN1Y2Nlc3M9KCk9Pntjb25zdCBlPWkucmVzdWx0O1lfLmRiPWU7dHJ5e1lfLmRiLnRyYW5zYWN0aW9uKHRoaXMuc3RvcmVOYW1lLCJyZWFkb25seSIpLHRoaXMucGVuZGluZ0xpc3QuZm9yRWFjaCgoYXN5bmMgdD0+e2xldHt0eE1vZGU6ZSxwZW5kUmVzb2x2ZTpuLHBlbmRSZWplY3Q6cn09dDt0cnl7bihhd2FpdCB0aGlzLl9nZXRTdG9yZShlKSl9Y2F0Y2goaSl7cigpfX0pKSxyKCl9Y2F0Y2gobyl7cih0aGlzLl9jaGVja0FuZENyZWF0ZVN0b3JlKHQsZS52ZXJzaW9uKzEpKX1maW5hbGx5e24oKX19fSkpfWFzeW5jIF9nZXRTdG9yZSh0KXtjb25zdCBlPWF3YWl0IFlfLl9wcm9taXNlTG9jay5sb2NrKCk7cmV0dXJuIG5ldyBQcm9taXNlKCgobixyKT0+e2lmKCFZXy5kYilyZXR1cm4gdGhpcy5wZW5kaW5nTGlzdC5wdXNoKHt0eE1vZGU6dCxwZW5kUmVzb2x2ZTpuLHBlbmRSZWplY3Q6cn0pLHZvaWQgZSgpO3RyeXtuKFlfLmRiLnRyYW5zYWN0aW9uKHRoaXMuc3RvcmVOYW1lLHQpLm9iamVjdFN0b3JlKHRoaXMuc3RvcmVOYW1lKSl9Y2F0Y2goaSl7cmV0dXJuIHZvaWQgdGhpcy5wZW5kaW5nTGlzdC5wdXNoKHt0eE1vZGU6dCxwZW5kUmVzb2x2ZTpuLHBlbmRSZWplY3Q6cn0pfWZpbmFsbHl7ZSgpfX0pKX1hc3luYyBwdXQyU3RyaW5nKHQsZSl7bGV0IG47dHJ5e249SlNPTi5zdHJpbmdpZnkodCl9Y2F0Y2gocil7bj10fXJldHVybiBhd2FpdCB0aGlzLnB1dChuLGUpfWFzeW5jIGdldDRTdHJpbmcodCl7Y29uc3QgZT1hd2FpdCB0aGlzLmdldCh0KTtsZXQgbjt0cnl7bj1KU09OLnBhcnNlKGUpfWNhdGNoKHIpe249ZX1yZXR1cm4gbn1hc3luYyBwdXQodCxlKXtjb25zdCBuPWF3YWl0IHRoaXMuX2dldFN0b3JlKCJyZWFkd3JpdGUiKTtyZXR1cm4gbmV3IFByb21pc2UoKChyLGkpPT57Y29uc3Qgbz1uLnB1dCh0LGUpO28ub25zdWNjZXNzPSgpPT57cigpfSxvLm9uZXJyb3I9dD0+e2kodCl9fSkpfWFzeW5jIGdldCh0KXtjb25zdCBlPWF3YWl0IHRoaXMuX2dldFN0b3JlKCJyZWFkb25seSIpO3JldHVybiBuZXcgUHJvbWlzZSgoKG4scik9Pntjb25zdCBpPWUuZ2V0KHQpO2kub25zdWNjZXNzPSgpPT57bihpLnJlc3VsdCl9LGkub25lcnJvcj10PT57cih0KX19KSl9YXN5bmMgZGVsKHQpe2NvbnN0IGU9YXdhaXQgdGhpcy5fZ2V0U3RvcmUoInJlYWR3cml0ZSIpO3JldHVybiBuZXcgUHJvbWlzZSgoKG4scik9Pntjb25zdCBpPWUuZGVsZXRlKHQpO2kub25zdWNjZXNzPSgpPT57bigpfSxpLm9uZXJyb3I9dD0+e3IodCl9fSkpfX11dShZXywiZGIiLHZvaWQgMCksdXUoWV8sInN0YXRlIiwiaW5pdCIpLHV1KFlfLCJfcHJvbWlzZUxvY2siLG5ldyBjbGFzc3tjb25zdHJ1Y3Rvcih0KXt1dSh0aGlzLCJsb2NraW5nUHJvbWlzZSIsUHJvbWlzZS5yZXNvbHZlKCkpLHV1KHRoaXMsImxvY2tzIiwwKSx1dSh0aGlzLCJuYW1lIiwiIiksdXUodGhpcywibG9ja0lkIix2b2lkIDApLHRoaXMubG9ja0lkPUtfKyssdCYmKHRoaXMubmFtZT10KX1nZXQgaXNMb2NrZWQoKXtyZXR1cm4gdGhpcy5sb2Nrcz4wfWxvY2soKXtsZXQgdDt0aGlzLmxvY2tzKz0xO2NvbnN0IGU9bmV3IFByb21pc2UoKGU9Pnt0PSgpPT57dGhpcy5sb2Nrcy09MSxlKCl9fSkpLG49dGhpcy5sb2NraW5nUHJvbWlzZS50aGVuKCgoKT0+dCkpO3JldHVybiB0aGlzLmxvY2tpbmdQcm9taXNlPXRoaXMubG9ja2luZ1Byb21pc2UudGhlbigoKCk9PmUpKSxufX0oImlEQiIpKTt2YXIgWF89YWkuaW5jbHVkZXM7TG4oe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDphKChmdW5jdGlvbigpe3JldHVybiFBcnJheSgxKS5pbmNsdWRlcygpfSkpfSx7aW5jbHVkZXM6ZnVuY3Rpb24odCl7cmV0dXJuIFhfKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSk7dmFyIHFfPUl1KCJBcnJheSIsImluY2x1ZGVzIiksJF89ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIHd1KHQpJiYodm9pZCAwIT09KGU9dFtTdV0pPyEhZToiUmVnRXhwIj09PWt1KHQpKX0sUV89VHlwZUVycm9yLHRwPWZlKCJtYXRjaCIpLGVwPUxuLG5wPWZ1bmN0aW9uKHQpe2lmKCRfKHQpKXRocm93IG5ldyBRXygiVGhlIG1ldGhvZCBkb2Vzbid0IGFjY2VwdCByZWd1bGFyIGV4cHJlc3Npb25zIik7cmV0dXJuIHR9LHJwPUcsaXA9cXIsb3A9ZnVuY3Rpb24odCl7dmFyIGU9Ly4vO3RyeXsiLy4vIlt0XShlKX1jYXRjaChuKXt0cnl7cmV0dXJuIGVbdHBdPSExLCIvLi8iW3RdKGUpfWNhdGNoKHIpe319cmV0dXJuITF9LGFwPW0oIiIuaW5kZXhPZik7ZXAoe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6IW9wKCJpbmNsdWRlcyIpfSx7aW5jbHVkZXM6ZnVuY3Rpb24odCl7cmV0dXJuISF+YXAoaXAocnAodGhpcykpLGlwKG5wKHQpKSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSk7dmFyIHNwPUl1KCJTdHJpbmciLCJpbmNsdWRlcyIpLGNwPW90LGxwPXFfLHVwPXNwLGhwPUFycmF5LnByb3RvdHlwZSxmcD1TdHJpbmcucHJvdG90eXBlLGRwPW4oKGZ1bmN0aW9uKHQpe3ZhciBlPXQuaW5jbHVkZXM7cmV0dXJuIHQ9PT1ocHx8Y3AoaHAsdCkmJmU9PT1ocC5pbmNsdWRlcz9scDoic3RyaW5nIj09dHlwZW9mIHR8fHQ9PT1mcHx8Y3AoZnAsdCkmJmU9PT1mcC5pbmNsdWRlcz91cDplfSkpO2Z1bmN0aW9uIF9wKHQsZSl7aWYobnVsbD09dClyZXR1cm57fTt2YXIgbixyLGk9ZnVuY3Rpb24odCxlKXtpZihudWxsPT10KXJldHVybnt9O3ZhciBuPXt9O2Zvcih2YXIgciBpbiB0KWlmKHt9Lmhhc093blByb3BlcnR5LmNhbGwodCxyKSl7aWYoZHAoZSkuY2FsbChlLHIpKWNvbnRpbnVlO25bcl09dFtyXX1yZXR1cm4gbn0odCxlKTtpZihRdSl7dmFyIG89UXUodCk7Zm9yKHI9MDtyPG8ubGVuZ3RoO3IrKyluPW9bcl0sZHAoZSkuY2FsbChlLG4pfHx7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHQsbikmJihpW25dPXRbbl0pfXJldHVybiBpfWNvbnN0IHBwPVsibWVzc2FnZSJdO3ZhciBncCxtcCx5cD1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt1dSh0aGlzLCJuYW1lIiwiTG9uZ1N0cmluZ1JlcG9ydG9yIiksdXUodGhpcywiaW5CdWZmZXIiLFtdKSx1dSh0aGlzLCJvdXRCdWZmZXIiLFtdKX1wdXNoKHQpe3QubWVzc2FnZSYmdGhpcy5pbkJ1ZmZlci5wdXNoKG9mKG9mKHt9LHQpLHt9LHttZXNzYWdlOntpZDpVdSgpLnNsaWNlKDAsMyksaW5kZXg6MCxlbmQ6ITAsbXNnOnQubWVzc2FnZX19KSl9c3BsaWNlKHQpe2NvbnN0IGU9W107bGV0IG49MDtmb3IoO3RoaXMub3V0QnVmZmVyLmxlbmd0aDspe2NvbnN0IHI9SlNPTi5zdHJpbmdpZnkodGhpcy5vdXRCdWZmZXJbMF0pLmxlbmd0aDtpZighKHI8dCkpYnJlYWs7dC09cixuKz1yLGUucHVzaCh0aGlzLm91dEJ1ZmZlci5zaGlmdCgpKX1mb3IoO3RoaXMuaW5CdWZmZXJbMF0mJnQ+MDspe2NvbnN0IHI9dGhpcy5pbkJ1ZmZlclswXSx7bWVzc2FnZTppfT1yLG89b2Yob2Yoe30sX3AocixwcCkpLHt9LHttZXNzYWdlOm9mKG9mKHt9LGkpLHt9LHttc2c6IiJ9KX0pLGE9SlNPTi5zdHJpbmdpZnkobykubGVuZ3RoLHM9dC1hLGM9b2Yoe30sbyk7aWYocz5pLm1zZy5sZW5ndGgpYy5tZXNzYWdlLm1zZz1pLm1zZyx0aGlzLmluQnVmZmVyLnNoaWZ0KCk7ZWxzZXtpZighKHM+PTEwKSlicmVhazt7Y29uc3QgdD1pLm1zZy5zbGljZSgwLHMpO2MubWVzc2FnZS5tc2c9dCxjLm1lc3NhZ2UuZW5kPSExLHRoaXMuaW5CdWZmZXJbMF0ubWVzc2FnZS5tc2c9aS5tc2cuc2xpY2UocyksdGhpcy5pbkJ1ZmZlclswXS5tZXNzYWdlLmluZGV4Kyt9fWNvbnN0IGw9SlNPTi5zdHJpbmdpZnkoYy5tZXNzYWdlKSx1PWwubGVuZ3RoO3QtPXUrYSxuKz11K2EsZS5wdXNoKG9mKG9mKHt9LGMpLHt9LHttZXNzYWdlOmx9KSl9cmV0dXJue3BheWxvYWQ6ZSxwYXlsb2FkU2l6ZTpufX11bnNoaWZ0KHQpe3RoaXMub3V0QnVmZmVyPXQuY29uY2F0KHRoaXMub3V0QnVmZmVyKX1nZXQoKXtyZXR1cm5bLi4udGhpcy5vdXRCdWZmZXIsLi4udGhpcy5pbkJ1ZmZlci5tYXAoKHQ9Pm9mKG9mKHt9LHQpLHt9LHttZXNzYWdlOkpTT04uc3RyaW5naWZ5KHQubWVzc2FnZSl9KSkpXX1zZXQodCl7dC5mb3JFYWNoKCh0PT57IWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDAhPT10LnJlcG9ydF9pZH0odCk/KHQubWVzc2FnZXx8KHQubWVzc2FnZT0iIiksdGhpcy5pbkJ1ZmZlci5wdXNoKG9mKG9mKHt9LHQpLHt9LHttZXNzYWdlOkpTT04ucGFyc2UodC5tZXNzYWdlKX0pKSk6dGhpcy5vdXRCdWZmZXIucHVzaCh0KX0pKSx0aGlzLm91dEJ1ZmZlcj1bXS5jb25jYXQodGhpcy5vdXRCdWZmZXIpLHRoaXMuaW5CdWZmZXI9W10uY29uY2F0KHRoaXMuaW5CdWZmZXIpfWlzRW1wdHkoKXtyZXR1cm4gMD09PXRoaXMuaW5CdWZmZXIubGVuZ3RoJiYwPT09dGhpcy5vdXRCdWZmZXIubGVuZ3RofX07Y29uc3QgdnA9NWU1LGJwPXtwcm9kdWN0X2xpbmU6InJ0YyIscmVwb3J0X3ZlcnNpb246IjUiLG9zOiJ3ZWIiLHVzZXJfYWdlbnQ6RnUoKT8iIjpudWxsPT09KGdwPW5hdmlnYXRvcil8fHZvaWQgMD09PWdwP3ZvaWQgMDpncC51c2VyQWdlbnQscGxhdGZvcm06IndlYiIscHJvZHVjdDoid2VicnRjIixhcHBfc3RhdGU6ImFjdGl2ZSJ9LHdwPSJMb2dSZXBvcnRvciIsa3A9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJih3aW5kb3cubG9jYXRpb24uc2VhcmNoLmluY2x1ZGVzKCJfcnRjX2RlYnVnXyIpfHwobnVsbD09PShtcD13aW5kb3cubG9jYWxTdG9yYWdlKXx8dm9pZCAwPT09bXA/dm9pZCAwOm1wLmdldEl0ZW0oIl9ydGNfZGVidWdfIikpKTtjbGFzcyBTcHtjb25zdHJ1Y3Rvcih0KXt1dSh0aGlzLCJfYnVmZmVyIix2b2lkIDApLHRoaXMuX2J1ZmZlcj1uZXcgWV8odCl9YXN5bmMgc2V0KHQsZSl7YXdhaXQgdGhpcy5fYnVmZmVyLnB1dDJTdHJpbmcodCxlKX1hc3luYyBnZXQodCl7dmFyIGU7bGV0IG49W107dHJ5e249YXdhaXQgdGhpcy5fYnVmZmVyLmdldDRTdHJpbmcodCl9Y2F0Y2gocil7fXJldHVybiBudWxsIT09KGU9bikmJnZvaWQgMCE9PWU/ZTpbXX19dmFyIE9wPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe3V1KHRoaXMsInJlcG9ydENvbW1vbiIsYnApLHV1KHRoaXMsInJlcG9ydElkcyIsbmV3IE1hcCksdXUodGhpcywiZGF0YUJ1ZmZlciIsW10pLHV1KHRoaXMsInJlcG9ydG9yTGlzdCIsW10pLHV1KHRoaXMsImRiQnVmZmVyIix2b2lkIDApLHV1KHRoaXMsInBvc3RpbmciLCExKSx1dSh0aGlzLCJzdWNTZW5kVGltZXIiLHZvaWQgMCksdXUodGhpcywicHJlU3VjVGltZSIsMCksdXUodGhpcywiZXJyU2VuZFRpbWVyIix2b2lkIDApLHV1KHRoaXMsImVyclNlbmREZWxheSIsMTAwKSx1dSh0aGlzLCJfbG9nU2VydmVyVXJsIix2b2lkIDApLHV1KHRoaXMsIl9yZXRyeUNvdW50IiwwKSx1dSh0aGlzLCJfcmVwb3J0TGltaXQiLHZwKSx1dSh0aGlzLCJfZGlzYWJsZVRpbWVvdXQiLCExKSxGdSgpfHwod2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJlZm9yZXVubG9hZCIsKCgpPT57Y2xlYXJUaW1lb3V0KHRoaXMuZXJyU2VuZFRpbWVyKSxjbGVhclRpbWVvdXQodGhpcy5zdWNTZW5kVGltZXIpLHRoaXMuc2VuZCh2b2lkIDAsITApfSkpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLCgoKT0+eyJ2aXNpYmxlIj09PWRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZT90aGlzLnNldENvbW1vblN0YXRzKHthcHBfc3RhdGU6ImFjdGl2ZSJ9KToiaGlkZGVuIj09PWRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSYmdGhpcy5zZXRDb21tb25TdGF0cyh7YXBwX3N0YXRlOiJiYWNrZ3JvdW5kIn0pfSkpLGtwJiYod2luZG93Ll9fcnRjX2RlYnVnX3JlcG9ydG9yX189dGhpcykpLFl1Lm9uKCJVUExPQURfUkVQT1JUX0xJTUlUIiwodD0+e3RoaXMuc2V0UmVwb3J0TGltaXQodCl9KSksWXUub24oIkVOQUJMRV9SRVBPUlRfSURCX0JVRkZFUiIsKHQ9Pnt0JiZ0aGlzLmVuYWJsZUluZGV4ZWREQkJ1ZmZlcigpfSkpLHNldFRpbWVvdXQoKCgpPT57dGhpcy5yZXBvcnRvckxpc3QucHVzaChDcCksdGhpcy5yZXBvcnRvckxpc3QucHVzaCh5cCl9KSl9c2V0VXJsKHQpe3RoaXMuX2xvZ1NlcnZlclVybD10fXNldENvbW1vblN0YXRzKHQpe3RoaXMucmVwb3J0Q29tbW9uPU9iamVjdC5hc3NpZ24odGhpcy5yZXBvcnRDb21tb24sdCl9Z2V0Q29tbW9uU3RhdHMoKXtyZXR1cm4gdGhpcy5yZXBvcnRDb21tb259c2V0UmVwb3J0TGltaXQodCl7dGhpcy5fcmVwb3J0TGltaXQ9TWF0aC5tYXgodCw1ZTQpLHRoaXMuX3JlcG9ydExpbWl0PU1hdGgubWluKHQsNWU1KX1nZXRSZXBvcnRJZCh0KXt2YXIgZTt0PW51bGwhPT0oZT10KSYmdm9pZCAwIT09ZT9lOiJfX2dsb2JhbF9fIix0aGlzLnJlcG9ydElkcy5oYXModCl8fHRoaXMucmVwb3J0SWRzLnNldCh0LDApO2xldCBuPXRoaXMucmVwb3J0SWRzLmdldCh0KTtyZXR1cm4gdm9pZCAwPT09biYmKFRwKCJubyByZXBvcnRJZCBpbiByZXBvcnRJZCBtYXAgd2l0aCBlbmdpbmUtc2Vzc2lvbi1pZCAiLmNvbmNhdCh0KSwwLHt9KSxuPTApLHRoaXMucmVwb3J0SWRzLnNldCh0LG4rMSksbn1wdXNoKHQpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0pdGhpcy5zZW5kKHQpO2Vsc2V7dmFyIGU7Y29uc3Qgbj1udWxsIT09KGU9dC5lbmdpbmVfc2Vzc2lvbl9pZCkmJnZvaWQgMCE9PWU/ZToiX19nbG9iYWxfXyI7dGhpcy5yZXBvcnRJZHMuaGFzKG4pfHx0aGlzLnJlcG9ydElkcy5zZXQobiwwKSx0aGlzLmRhdGFCdWZmZXIucHVzaCh0KSwhdGhpcy5wb3N0aW5nJiYhdGhpcy5lcnJTZW5kVGltZXImJkRhdGUubm93KCktdGhpcy5wcmVTdWNUaW1lPjJlMyYmKGNsZWFyVGltZW91dCh0aGlzLnN1Y1NlbmRUaW1lciksdGhpcy5zZW5kKCkpfX1lbmFibGVJbmRleGVkREJCdWZmZXIoKXt0aGlzLmRiQnVmZmVyfHwodGhpcy5kYkJ1ZmZlcj1uZXcgU3AoIlJlcG9ydG9yREJCdWZmZXIiKSx0aGlzLmRiQnVmZmVyLmdldCh3cCkudGhlbigodD0+e3QuZm9yRWFjaCgodD0+e3RoaXMucHVzaCh0KX0pKX0pKSx0aGlzLnJlcG9ydG9yTGlzdC5mb3JFYWNoKCh0PT57dmFyIGU7bnVsbD09PShlPXRoaXMuZGJCdWZmZXIpfHx2b2lkIDA9PT1lfHxlLmdldCh0Lm5hbWUpLnRoZW4oKGU9Pnt0LnNldChlKX0pKX0pKSl9YmFja3VwKCl7dHJ5e3ZhciB0O251bGw9PT0odD10aGlzLmRiQnVmZmVyKXx8dm9pZCAwPT09dHx8dC5zZXQoWy4uLnRoaXMuZGF0YUJ1ZmZlcl0sd3ApLHRoaXMucmVwb3J0b3JMaXN0LmZvckVhY2goKHQ9Pnt2YXIgZTtudWxsPT09KGU9dGhpcy5kYkJ1ZmZlcil8fHZvaWQgMD09PWV8fGUuc2V0KFsuLi50LmdldCgpXSx0Lm5hbWUpfSkpfWNhdGNoKGUpe1RwKCJFcnJvciB3aGVuIHNhdmUgbG9nIGludG8gSURCIiwtMSxlKX19dW5zaGlmdCh0KXt0aGlzLmRhdGFCdWZmZXI9dFswXS5jb25jYXQodGhpcy5kYXRhQnVmZmVyKSx0aGlzLnJlcG9ydG9yTGlzdC5mb3JFYWNoKCgoZSxuKT0+e3ZhciByO2UudW5zaGlmdChudWxsIT09KHI9dFtuKzFdKSYmdm9pZCAwIT09cj9yOltdKX0pKX1fc3BsaWNlKCl7bGV0IHQ9ZnVuY3Rpb24odCxlKXtsZXQgbj0wO2ZvcihsZXQgcj0wO3I8dC5sZW5ndGg7cisrKWlmKG4rPUpTT04uc3RyaW5naWZ5KHRbcl0pLmxlbmd0aCxuPmUpcmV0dXJuIHI7cmV0dXJuIHQubGVuZ3RofSh0aGlzLmRhdGFCdWZmZXIsdGhpcy5fcmVwb3J0TGltaXQpOzA9PT10JiZ0aGlzLmRhdGFCdWZmZXIubGVuZ3RoPjAmJih0aGlzLl9yZXBvcnRMaW1pdD1KU09OLnN0cmluZ2lmeSh0aGlzLmRhdGFCdWZmZXJbMF0pLmxlbmd0aCsxMCx0PTEsVHAoInVwZGF0ZSByZXBvcnQgbGltaXQgdG8gIi5jb25jYXQodGhpcy5fcmVwb3J0TGltaXQpLDAsbnVsbCkpO2NvbnN0IGU9dGhpcy5kYXRhQnVmZmVyLnNwbGljZSgwLHQpLG49SlNPTi5zdHJpbmdpZnkoZSkubGVuZ3RoLHI9W2VdO2xldCBpPXRoaXMuX3JlcG9ydExpbWl0LW47cmV0dXJuIHRoaXMucmVwb3J0b3JMaXN0LmZvckVhY2goKHQ9Pntjb25zdHtwYXlsb2FkOmUscGF5bG9hZFNpemU6bn09dC5zcGxpY2UoaSk7ZS5mb3JFYWNoKCh0PT57dmFyIGUsbixyO3ZvaWQgMD09PXQucmVwb3J0X2lkJiYodC5yZXBvcnRfaWQ9dGhpcy5nZXRSZXBvcnRJZCh0LmVuZ2luZV9zZXNzaW9uX2lkKSwhRnUoKSYmd2luZG93Ll9fb25SVENSZXBvcnQmJihudWxsPT09KGU9KG49d2luZG93KS5fX29uUlRDUmVwb3J0KXx8dm9pZCAwPT09ZXx8ZS5jYWxsKG4sbnVsbCE9PShyPXQuZW5naW5lX3Nlc3Npb25faWQpJiZ2b2lkIDAhPT1yP3I6Imdsb2JhbCIsdCx0aGlzLmdldENvbW1vblN0YXRzKCkpKSl9KSksci5wdXNoKGUpLGktPW59KSkscn1hc3luYyBzZW5kKHQsZSl7dGhpcy5iYWNrdXAoKTtjb25zdCBuPXRoaXMucmVwb3J0b3JMaXN0LnJlZHVjZSgoKHQsZSk9PnQmJmUuaXNFbXB0eSgpKSwhMCk7aWYoIXQmJiF0aGlzLmRhdGFCdWZmZXIubGVuZ3RoJiZufHwhdGhpcy5fbG9nU2VydmVyVXJsKXJldHVybjt0fHwodGhpcy5wb3N0aW5nPSEwKTtsZXQgcj1bXTt0fHwocj10aGlzLl9zcGxpY2UoKSk7Y29uc3QgaT1rcCxvPXtkYXRhOnR8fGJmKHIpLmNhbGwociksaGVhZGVyOm9mKG9mKHt9LHRoaXMucmVwb3J0Q29tbW9uKSx7fSx7aHR0cF9yZXRyeV9jb3VudDp0aGlzLl9yZXRyeUNvdW50fSksZnJvbToid2ViIixvczoid2ViIix2ZXJzaW9uOiIxIn0sYT17bWV0aG9kOiJQT1NUIixib2R5Omk/SlNPTi5zdHJpbmdpZnkobyk6V18uZ3ppcChKU09OLnN0cmluZ2lmeShvKSl9O2lmKCF0aGlzLl9kaXNhYmxlVGltZW91dCl0cnl7Y29uc3QgdD1uZXcgQWJvcnRDb250cm9sbGVyO2Euc2lnbmFsPXQuc2lnbmFsLHNldFRpbWVvdXQoKCgpPT57dC5hYm9ydCgpfSksMWU0KX1jYXRjaCh1KXtjb25zb2xlLndhcm4oIkFib3J0Q29udHJvbGxlciBpcyBub3Qgc3VwcG9ydGVkIiksdGhpcy5fZGlzYWJsZVRpbWVvdXQ9ITB9aXx8KGEuaGVhZGVycz17IkNvbnRlbnQtRW5jb2RpbmciOiJnemlwIiwiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04In0pO2xldCBzLGMsbD1udWxsO3RyeXtzPWF3YWl0IGZldGNoKHRoaXMuX2xvZ1NlcnZlclVybCxhKSwyMDAhPT1zLnN0YXR1cyYmMzA0IT09cy5zdGF0dXN8fChsPUpTT04ucGFyc2UoYXdhaXQgcy50ZXh0KCkpKX1jYXRjaChoKXtjPWh9dHx8KHRoaXMucG9zdGluZz0hMSksbCYmMD09PWwuU3RhdHVzQ29kZT90fHxlfHx0aGlzLnN1Y1NlbmQoKTooc2V0VGltZW91dCgoKCk9Pnt2YXIgdCxlLG47VHAoInJlcG9ydG9yIHBvc3QgZXJyb3IsIHJlc0pTT046Ii5jb25jYXQobnVsbD09PSh0PWwpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LnRvU3RyaW5nKCksIiBlcnI6IikuY29uY2F0KGMpLG51bGwhPT0oZT1udWxsPT09KG49cyl8fHZvaWQgMD09PW4/dm9pZCAwOm4uc3RhdHVzKSYmdm9pZCAwIT09ZT9lOi0xLGMpfSksMCksdD90aGlzLnNlbmQodCk6KHRoaXMudW5zaGlmdChyKSxlP3RoaXMuc2VuZCgpOnRoaXMuZXJyU2VuZCgpKSl9X2dldERhdGFCdWZmZXJUb3RhbFNpemUoKXtyZXR1cm4gdGhpcy5kYXRhQnVmZmVyLnJlZHVjZSgoKHQsZSk9PnQrSlNPTi5zdHJpbmdpZnkoZSkubGVuZ3RoKSwwKX1zdWNTZW5kKCl7dGhpcy5lcnJTZW5kRGVsYXk9MTAwLHRoaXMuX3JldHJ5Q291bnQ9MCx0aGlzLnByZVN1Y1RpbWU9RGF0ZS5ub3coKTtjb25zdCB0PXRoaXMuX2dldERhdGFCdWZmZXJUb3RhbFNpemUoKT4xZTY/MWUzOjJlMzt0aGlzLnN1Y1NlbmRUaW1lcj1zZXRUaW1lb3V0KCgoKT0+dGhpcy5zZW5kKCkpLHQpfWVyclNlbmQoKXt0aGlzLmVyclNlbmRUaW1lcj1zZXRUaW1lb3V0KCgoKT0+e3RoaXMuc2VuZCgpLGRlbGV0ZSB0aGlzLmVyclNlbmRUaW1lcn0pLHRoaXMuZXJyU2VuZERlbGF5KSx0aGlzLmVyclNlbmREZWxheSo9Mix0aGlzLl9yZXRyeUNvdW50Kyt9fTtjbGFzcyB4cHtjb25zdHJ1Y3Rvcih0KXt1dSh0aGlzLCJfcHJlVGltZSIsRGF0ZS5ub3coKSksdXUodGhpcywiX29uZTJvbmVOdW0iLDApLHV1KHRoaXMsIl9vbmUybWFueU51bSIsMCksdXUodGhpcywiX29uZTJvbmVNc2dDYWNoZSIsbmV3IE1hcCksdXUodGhpcywiX29uZTJtYW55TXNnQ2FjaGUiLG5ldyBNYXApLHV1KHRoaXMsInJvb21JZCIsIiIpLHV1KHRoaXMsInVzZXJJZCIsIiIpLHV1KHRoaXMsInJ0c1Nlc3Npb25JZCIsIiIpLHV1KHRoaXMsImxvZ2dlciIsdm9pZCAwKSx1dSh0aGlzLCJzZXJ2ZXJVcmwiLCJzZXJ2ZXIiKSx0aGlzLmlkPXQsdGhpcy5sb2dnZXI9bmV3IEhwKCJNZXNzYWdlUmVwb3J0b3IiLDEpfW5lZWRSZXBvcnQodCl7cmV0dXJuISF4cC5jb25maWcmJihEYXRlLm5vdygpLXRoaXMuX3ByZVRpbWU+PTM2ZTUmJih0aGlzLl9wcmVUaW1lPURhdGUubm93KCksdGhpcy5fb25lMm9uZU51bT0wLHRoaXMuX29uZTJtYW55TnVtPTApLCJvbmUyb25lIj09PXQmJnRoaXMuX29uZTJvbmVOdW08eHAuY29uZmlnLm1heF9vbmUyb25lX2ZwdF9wZXJfaG91ciYmTWF0aC5yYW5kb20oKTw9eHAuY29uZmlnLm9uZTJvbmVfZnB0X3JhdGlvLzEwMHx8Im9uZTJtYW55Ij09PXQmJnRoaXMuX29uZTJtYW55TnVtPHhwLmNvbmZpZy5tYXhfb25lMm1hbnlfZnB0X3Blcl9ob3VyJiZNYXRoLnJhbmRvbSgpPD14cC5jb25maWcub25lMm1hbnlfZnB0X3JhdGlvLzEwMCl9Y2FjaGVQMlBNc2codCl7dmFyIGU7dGhpcy5fb25lMm9uZU1zZ0NhY2hlLnNldCh0Lm1zZ19pZCxvZih7Y29uZmlnX3ZlcnNpb246KG51bGw9PT0oZT14cC5jb25maWcpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnZlcnNpb24pfHwiIn0sdCkpfXVwZGF0ZVAyUE1zZyh0LGUpe2NvbnN0IG49dGhpcy5fb25lMm9uZU1zZ0NhY2hlLmdldCh0KTtuJiZ0aGlzLl9vbmUyb25lTXNnQ2FjaGUuc2V0KHQsb2Yob2Yoe30sbiksZSkpfWNhY2hlQ3VzdG9tTXNnKHQpe3ZhciBlO3RoaXMuX29uZTJtYW55TXNnQ2FjaGUuc2V0KHQubXNnX2lkLG9mKHtjb25maWdfdmVyc2lvbjoobnVsbD09PShlPXhwLmNvbmZpZyl8fHZvaWQgMD09PWU/dm9pZCAwOmUudmVyc2lvbil8fCIifSx0KSl9dXBkYXRlT25lMk1hbnlNc2codCxlKXtjb25zdCBuPXRoaXMuX29uZTJtYW55TXNnQ2FjaGUuZ2V0KHQpO24mJnRoaXMuX29uZTJtYW55TXNnQ2FjaGUuc2V0KHQsb2Yob2Yoe30sbiksZSkpfXJlcG9ydFAyUE1zZyh0KXtjb25zdCBlPXRoaXMuX29uZTJvbmVNc2dDYWNoZS5nZXQodCk7dmFyIG47ZSYmKHRoaXMubG9nZ2VyLmluZm8oInJlcG9ydFAyUE1zZyIsZS50eXBlLEpTT04uc3RyaW5naWZ5KGUpKSxudWxsPT09KG49THAodGhpcy5pZCkpfHx2b2lkIDA9PT1ufHxuLnJlcG9ydCgicnRzX21lc3NhZ2UiLGUpKX1yZXBvcnRPbmUyTWFueU1zZyh0KXtjb25zdCBlPXRoaXMuX29uZTJtYW55TXNnQ2FjaGUuZ2V0KHQpO3ZhciBuO2UmJih0aGlzLmxvZ2dlci5pbmZvKCJyZXBvcnRPbmUyTWFueU1zZyIsZS50eXBlLEpTT04uc3RyaW5naWZ5KGUpKSxudWxsPT09KG49THAodGhpcy5pZCkpfHx2b2lkIDA9PT1ufHxuLnJlcG9ydCgicnRzX21lc3NhZ2UiLGUpKX1yZXBvcnRNc2dSZWN2KHQpe3ZhciBlLG47dC5jb25maWdfdmVyc2lvbj0obnVsbD09PShlPXhwLmNvbmZpZyl8fHZvaWQgMD09PWU/dm9pZCAwOmUudmVyc2lvbil8fCIiLHRoaXMubG9nZ2VyLmluZm8oInJlcG9ydE1zZ1JlY3YiLHQudHlwZSxKU09OLnN0cmluZ2lmeSh0KSksbnVsbD09PShuPUxwKHRoaXMuaWQpKXx8dm9pZCAwPT09bnx8bi5yZXBvcnQoInJ0c19tZXNzYWdlIix0KX1kZXN0cm95KCl7dGhpcy5fb25lMm1hbnlOdW09MCx0aGlzLl9vbmUyb25lTnVtPTAsdGhpcy5fb25lMm1hbnlNc2dDYWNoZS5jbGVhcigpLHRoaXMuX29uZTJvbmVNc2dDYWNoZS5jbGVhcigpLHRoaXMuX3ByZVRpbWU9RGF0ZS5ub3coKSx0aGlzLnJvb21JZD0iIix0aGlzLnVzZXJJZD0iIix0aGlzLnJ0c1Nlc3Npb25JZD0iIn19dXUoeHAsImNvbmZpZyIsdm9pZCAwKTtjb25zdCBBcD1uZXcgY2xhc3N7Y29uc3RydWN0b3IodCl7dXUodGhpcywibW9kaWZ5SWRzIix7cHJlX2Nvbm5lY3Rpb246ITF9KSx0aGlzLmlkPXR9cmVwb3J0KHQsZSxuKXtjb25zdCByPW9mKG9mKG9mKHtldmVudF9rZXk6dCxydGNfdGltZXN0YW1wOkRhdGUubm93KCl9LHRoaXMubW9kaWZ5SWRzKSxlKSx7fSx7cmVwb3J0X2lkOk9wLmdldFJlcG9ydElkKHRoaXMubW9kaWZ5SWRzLmVuZ2luZV9zZXNzaW9uX2lkKX0pO3ZhciBpLG87KCJvYmplY3QiPT10eXBlb2YgbiYmT2JqZWN0LmtleXMobikubGVuZ3RoPjAmJihyLmNvbW1vbl9leHRyYV9pbmZvPUpTT04uc3RyaW5naWZ5KG4pKSxPYmplY3Qua2V5cyhyKS5mb3JFYWNoKCh0PT57dm9pZCAwIT09clt0XSYmIiIhPT1yW3RdfHxkZWxldGUgclt0XX0pKSwhRnUoKSYmd2luZG93Ll9fb25SVENSZXBvcnQpJiYobnVsbD09PShpPShvPXdpbmRvdykuX19vblJUQ1JlcG9ydCl8fHZvaWQgMD09PWl8fGkuY2FsbChvLHRoaXMubW9kaWZ5SWRzLmVuZ2luZV9zZXNzaW9uX2lkLHIsT3AuZ2V0Q29tbW9uU3RhdHMoKSkpOyJVVCIhPT17fS5WSVRFX1RFU1QmJk9wLnB1c2gocil9cmVwb3J0TG9nKHQpe2NvbnN0IGU9b2Yob2Yoe2V2ZW50X2tleToicnRjX2ludm9rZV9zdGF0dXMiLHNka19hcGlfbmFtZToiY29uc29sZV9sb2ciLHJ0Y190aW1lc3RhbXA6RGF0ZS5ub3coKX0sdGhpcy5tb2RpZnlJZHMpLHt9LHttZXNzYWdlOnR9KTtDcC5wdXNoKGUpfXJlcG9ydExvbmdTdHJpbmcodCxlKXtjb25zdCBuPW9mKG9mKHtldmVudF9rZXk6InJ0Y19pbnZva2Vfc3RhdHVzIixzZGtfYXBpX25hbWU6InNka19sb25nX3N0cmluZ18iLmNvbmNhdCh0KSxydGNfdGltZXN0YW1wOkRhdGUubm93KCl9LHRoaXMubW9kaWZ5SWRzKSx7fSx7bWVzc2FnZTplfSk7eXAucHVzaChuKX1zZXQodCl7dGhpcy5tb2RpZnlJZHM9T2JqZWN0LmFzc2lnbih0aGlzLm1vZGlmeUlkcyx0KX1kZXN0cm95KCl7fX0oImdsb2JhbCIpLFRwPSh0LGUsbik9PntBcC5yZXBvcnQoInJ0Y19lcnJvciIse21lc3NhZ2U6dCxlcnJvcl9jb2RlOmV9LG4pfTtjb25zdCBFcD1uZXcgTWFwLExwPXQ9PkVwLmdldCh0KSx6cD0idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93LmxvY2F0aW9uLnNlYXJjaC5pbmNsdWRlcygiX3J0Y191cGxvYWRfY29uc29sZV8iKTtmdW5jdGlvbiBCcCh0LGUpe3JldHVybiB0Lm1hcCgodD0+e2xldCBuPSIiO3RyeXtpZigic3RyaW5nIj09dHlwZW9mIHQpcmV0dXJuIHQ7aWYodm9pZCAwPT09dClyZXR1cm4idW5kZWZpbmVkIjtpZihudWxsPT09dClyZXR1cm4ibnVsbCI7aWYodCBpbnN0YW5jZW9mIE1lZGlhU3RyZWFtVHJhY2spcmV0dXJuIE11KHQpO2lmKHQgaW5zdGFuY2VvZiBNZWRpYVN0cmVhbSlyZXR1cm4gbnVsbD09KGk9dCk/InVuZGVmaW5lZCB8IG51bGwiOiJzdHJpbmciPT10eXBlb2YgaT9pOkpTT04uc3RyaW5naWZ5KHtpZDppLmlkLGFjdGl2ZTppLmFjdGl2ZX0pO2lmKHQgaW5zdGFuY2VvZiBSVENSdHBTZW5kZXIpcmV0dXJuIFp1KHQpO2lmKHQgaW5zdGFuY2VvZiBSVENSdHBSZWNlaXZlcilyZXR1cm4gSnUodCk7aWYodCBpbnN0YW5jZW9mIFJUQ1J0cFRyYW5zY2VpdmVyKXJldHVybiBudWxsPT0ocj10KT8idW5kZWZpbmVkIHwgbnVsbCI6InN0cmluZyI9PXR5cGVvZiByP3I6SlNPTi5zdHJpbmdpZnkoe2N1cnJlbnREaXJlY3Rpb246ci5jdXJyZW50RGlyZWN0aW9uLGRpcmVjdGlvbjpyLmRpcmVjdGlvbixtaWQ6ci5taWQsc3RvcHBlZDpyLnN0b3BwZWQscmVjZWl2ZXI6SnUoci5yZWNlaXZlciksc2VuZGVyOlp1KHIuc2VuZGVyKX0pO249SlNPTi5zdHJpbmdpZnkodCl9Y2F0Y2gobyl7bj10LnRvU3RyaW5nKCl9dmFyIHIsaTtyZXR1cm4gbiYmbi5sZW5ndGg+PWUmJihuPW4uc2xpY2UoMCxlKSksbn0pKS5qb2luKCIsICIpfXZhciBJcCxDcD1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXt1dSh0aGlzLCJuYW1lIiwiQ29uc29sZVJlcG9ydG9yIiksdXUodGhpcywiX3V1aWQiLCIiLmNvbmNhdChNYXRoLmZsb29yKDg5OSpNYXRoLnJhbmRvbSgpKSsxMDApKSx1dSh0aGlzLCJfY29uc29sZVJlcG9ydElkIiwwKSx1dSh0aGlzLCJfZW5naW5lUmVwb3J0SWRNYXAiLG5ldyBNYXApLHV1KHRoaXMsIl9lbmFibGVkIiwiTlVMTCIpLHV1KHRoaXMsIl9jb25zb2xlQ3V0TGVuZ3RoIixZdS5nZXRQYXJhbWV0ZXIoIlVQTE9BRF9DT05TT0xFX0xFTkdUSF9DVVQiKSksdXUodGhpcywiYnVmZmVyIixbXSksenAmJnNldFRpbWVvdXQoKCgpPT57dGhpcy5zd2l0Y2hPbigpfSksMCksWXUub24oIlVQTE9BRF9DT05TT0xFX09OIiwodD0+e3Q/dGhpcy5zd2l0Y2hPbigpOnRoaXMudHVybk9mZigpfSkpLFl1Lm9uKCJVUExPQURfQ09OU09MRV9MRU5HVEhfQ1VUIiwodD0+e3RoaXMuX2NvbnNvbGVDdXRMZW5ndGg9dH0pKX1nZXQgZW5hYmxlZCgpe3JldHVybiJPRkYiIT09dGhpcy5fZW5hYmxlZH1zd2l0Y2hPbigpeyJOVUxMIj09PXRoaXMuX2VuYWJsZWQmJihjb25zb2xlLmxvZygiW0xvZ2dlclJlcG9ydG9yLmNvbnN0cnVjdG9yXSBjb25zb2xlIHVwbG9hZCBzd2l0Y2ggT04iKSx0aGlzLl9lbmFibGVkPSJPTiIpfXR1cm5PZmYoKXsiTlVMTCI9PT10aGlzLl9lbmFibGVkJiYoY29uc29sZS5sb2coIltMb2dnZXJSZXBvcnRvci5jb25zdHJ1Y3Rvcl0gY29uc29sZSB1cGxvYWQgc3dpdGNoIE9GRiIpLHRoaXMuX2VuYWJsZWQ9Ik9GRiIsdGhpcy5idWZmZXI9W10pfWdldEVuZ2luZUNvbnNvbGVJZCh0KXt2YXIgZTtjb25zdCBuPW51bGwhPT0oZT10aGlzLl9lbmdpbmVSZXBvcnRJZE1hcC5nZXQodCkpJiZ2b2lkIDAhPT1lP2U6MDtyZXR1cm4gdGhpcy5fZW5naW5lUmVwb3J0SWRNYXAuc2V0KHQsbisxKSxufXJlcG9ydCh0LGUsbixyLGksbyxhLHMsYyl7aWYoIk9GRiI9PT10aGlzLl9lbmFibGVkKXJldHVybjtjb25zdCBsPUxwKGUpLHU9dGhpcy5fY29uc29sZVJlcG9ydElkKyssaD10aGlzLmdldEVuZ2luZUNvbnNvbGVJZChlKSxmPUJwKGMsdGhpcy5fY29uc29sZUN1dExlbmd0aCksZD1bLi4uY10sXz0iIi5jb25jYXQocykucmVwbGFjZSgvJW98JXMvZ2ksKCgpPT5CcChbZC5zaGlmdCgpXSx0aGlzLl9jb25zb2xlQ3V0TGVuZ3RoKSkpLHA9IlsiLmNvbmNhdCh0aGlzLl91dWlkLCItIikuY29uY2F0KHUsIl1bIikuY29uY2F0KGUsIi0iKS5jb25jYXQoaCwiXS0iKS5jb25jYXQobiwiLSIpLmNvbmNhdCh0LCJbIikuY29uY2F0KHIsIl0iKS5jb25jYXQoaSwiWyIpLmNvbmNhdChvLCIuIikuY29uY2F0KGEsIl0gIikuY29uY2F0KF8sIiAiKS5jb25jYXQoZik7dmFyIGc7bD9sLnJlcG9ydExvZyhwKTooZz1wLEFwLnJlcG9ydExvZyhnKSl9cHVzaCh0KXsiT0ZGIiE9PXRoaXMuX2VuYWJsZWQmJnRoaXMuYnVmZmVyLnB1c2godCl9c3BsaWNlKHQpe2lmKCJPTiIhPT10aGlzLl9lbmFibGVkKXJldHVybntwYXlsb2FkOltdLHBheWxvYWRTaXplOjB9O2NvbnN0e2luZGV4OmUsc2l6ZTpufT1mdW5jdGlvbih0LGUpe2xldCBuPTA7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspe2NvbnN0IGk9SlNPTi5zdHJpbmdpZnkodFtyXSkubGVuZ3RoO2lmKG4rPWksbj5lKXJldHVybntpbmRleDpyLHNpemU6bi1pfX1yZXR1cm57aW5kZXg6dC5sZW5ndGgsc2l6ZTpufX0odGhpcy5idWZmZXIsdCk7cmV0dXJue3BheWxvYWQ6dGhpcy5idWZmZXIuc3BsaWNlKDAsZSkscGF5bG9hZFNpemU6bn19dW5zaGlmdCh0KXt0aGlzLmJ1ZmZlcj10LmNvbmNhdCh0aGlzLmJ1ZmZlcil9Z2V0KCl7cmV0dXJuIHRoaXMuYnVmZmVyfXNldCh0KXt0aGlzLmJ1ZmZlcj10LmNvbmNhdCh0aGlzLmJ1ZmZlcil9aXNFbXB0eSgpe3JldHVybiJPRkYiPT09dGhpcy5fZW5hYmxlZHx8MD09PXRoaXMuYnVmZmVyLmxlbmd0aH19O2NvbnN0IE5wPSJbVkVSVENdIixScD0iIzAwNTBiMyIsanA9e0RFQlVHOiJyZ2JhKDAsIDAsIDAsIDApIiwiIElORk8iOiJyZ2JhKDkzLCAxNzMsIDIyNiwgMCkiLCIgV0FSTiI6InJnYmEoMjU1LCAxMTksIDAsIDAuMykiLEVSUk9SOiJyZ2JhKDI1NSwgMCwgMCwgMC4zKSIsIiBTVUNDIjoicmdiYSgwLCAxMTksIDAsIDAuMykifSxEcD0idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2guaW5jbHVkZXMoIl9ydGNfZGVidWdfIil8fChudWxsPT09KElwPXdpbmRvdy5sb2NhbFN0b3JhZ2UpfHx2b2lkIDA9PT1JcD92b2lkIDA6SXAuZ2V0SXRlbSgiX3J0Y19kZWJ1Z18iKSkpO2NvbnN0IFBwPSgpPT57Y29uc3QgdD1uZXcgRGF0ZTtyZXR1cm4iIi5jb25jYXQodC50b1RpbWVTdHJpbmcoKS5zcGxpdCgiICIpWzBdLCI6IikuY29uY2F0KHQuZ2V0TWlsbGlzZWNvbmRzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgzLCIwIikpfTt2YXIgVXAsRnAsTXAsWnAsSnAsSHA9Y2xhc3N7Y29uc3RydWN0b3IodCxlKXtsZXQgbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06Imdsb2JhbCI7dXUodGhpcywiaW5kZW50Iix2b2lkIDApLHV1KHRoaXMsIm1vZHVsZSIsdm9pZCAwKSx1dSh0aGlzLCJfZW5naW5lSWQiLHZvaWQgMCksdGhpcy5tb2R1bGU9dCx0aGlzLmluZGVudD1lLHRoaXMuX2VuZ2luZUlkPW59X3ByaW50KHQsZSl7Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkobj4yP24tMjowKSxpPTI7aTxuO2krKylyW2ktMl09YXJndW1lbnRzW2ldO2NvbnN0IG89ci5zaGlmdCgpO3RyeXtjb25zdCB0PVsuLi5yXSxuPSIiLmNvbmNhdChvKS5yZXBsYWNlKC8lby9naSwoKCk9Pntjb25zdCBlPXQuc2hpZnQoKTtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZSl9KSk7S3Uuc2V0KCIiLmNvbmNhdChOcCwiWyIpLmNvbmNhdCh0aGlzLm1vZHVsZSwiLiIpLmNvbmNhdChlLCJdICIpLmNvbmNhdChuLCIgIikuY29uY2F0KHQubWFwKCh0PT5KU09OLnN0cmluZ2lmeSh0KSkpLmpvaW4oIiwgIikpKX1jYXRjaChlZyl7fWxldCBhPSIiO2ZvcihsZXQgYz0wO2M8dGhpcy5pbmRlbnQ7YysrKWErPSIgICAgIjtjb25zdCBzPVBwKCk7Q3AucmVwb3J0KE5wLHRoaXMuX2VuZ2luZUlkLHMsdCxhLHRoaXMubW9kdWxlLGUsbyxyKSxEcCYmY29uc29sZS5sb2coIiVjIi5jb25jYXQocywiLSIpLmNvbmNhdChOcCwiJWNbIikuY29uY2F0KHQsIl0lYyIpLmNvbmNhdChhLCJbIikuY29uY2F0KHRoaXMubW9kdWxlLCIuIikuY29uY2F0KGUsIl0gIikuY29uY2F0KG8pLCJjb2xvcjoiLmNvbmNhdChScCwiOyIpLCJiYWNrZ3JvdW5kLWNvbG9yOiIuY29uY2F0KGpwW3RdLCI7IiksImNvbG9yOiIuY29uY2F0KFJwLCI7IiksLi4ucil9cHJpbnQodCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkoZT4xP2UtMTowKSxyPTE7cjxlO3IrKyluW3ItMV09YXJndW1lbnRzW3JdO3RoaXMuX3ByaW50KCIgSU5GTyIsdCwuLi5uKX1kZWJ1Zyh0KXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCxuPW5ldyBBcnJheShlPjE/ZS0xOjApLHI9MTtyPGU7cisrKW5bci0xXT1hcmd1bWVudHNbcl07dGhpcy5fcHJpbnQoIkRFQlVHIix0LC4uLm4pfWluZm8odCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkoZT4xP2UtMTowKSxyPTE7cjxlO3IrKyluW3ItMV09YXJndW1lbnRzW3JdO3RoaXMuX3ByaW50KCIgSU5GTyIsdCwuLi5uKX13YXJuKHQpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KGU+MT9lLTE6MCkscj0xO3I8ZTtyKyspbltyLTFdPWFyZ3VtZW50c1tyXTt0aGlzLl9wcmludCgiIFdBUk4iLHQsLi4ubil9ZXJyb3IodCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsbj1uZXcgQXJyYXkoZT4xP2UtMTowKSxyPTE7cjxlO3IrKyluW3ItMV09YXJndW1lbnRzW3JdO3RoaXMuX3ByaW50KCJFUlJPUiIsdCwuLi5uKX1zdWNjZXNzKHQpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLG49bmV3IEFycmF5KGU+MT9lLTE6MCkscj0xO3I8ZTtyKyspbltyLTFdPWFyZ3VtZW50c1tyXTt0aGlzLl9wcmludCgiIFNVQ0MiLHQsLi4ubil9fTtuZXcgVGV4dERlY29kZXIsbmV3IFRleHRFbmNvZGVyLCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiYod2luZG93LmxvY2F0aW9uLnNlYXJjaC5pbmNsdWRlcygiX3J0Y19kZWJ1Z18iKXx8bnVsbCE9PShVcD13aW5kb3cubG9jYWxTdG9yYWdlKSYmdm9pZCAwIT09VXAmJlVwLmdldEl0ZW0oIl9ydGNfZGVidWdfIikpO2NvbnN0IFdwPSgpPT4idW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvdyxLcD1XcCgpPyIiOndpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50O2Z1bmN0aW9uIEdwKCl7bGV0IHQ9Im5vbmUiO3JldHVybiBXcCgpfHwobnVsbCE9PUtwLm1hdGNoKCJGaXJlZm94Iik/dD0ibW96aWxsYSI6bnVsbCE9PUtwLm1hdGNoKCJDaHJvbWUiKT8odD0iY2hyb21lLXN0YWJsZSIsbnVsbCE9PUtwLm1hdGNoKCJFbGVjdHJvbiIpJiYodD0iZWxlY3Ryb24iKSk6KG51bGwhPT1LcC5tYXRjaCgiU2FmYXJpIil8fG51bGwhPT1LcC5tYXRjaCgiQXBwbGVXZWJLaXQiKSkmJih0PSJzYWZhcmkiKSksdH1HcCgpO2NvbnN0IFZwPSJzYWZhcmkiPT09R3AoKTtHcCgpLCFXcCgpJiZLcC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCJtb2JpbGUiKTtjb25zdCBZcD0hV3AoKSYmKG51bGw9PT0oRnA9S3AubWF0Y2goL3ZlcnNpb25cLyhcZCspL2kpKXx8dm9pZCAwPT09RnA/dm9pZCAwOkZwWzFdKTt2YXIgWHA7VnAmJllwJiYobnVsbD09PShYcD1uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC92ZXJzaW9uXC8oXGQrXC5cZCspL2kpKXx8dm9pZCAwPT09WHB8fFhwWzFdKTshV3AoKSYmKG51bGw9PT0oTXA9S3AubWF0Y2goL0ZpcmVmb3hcLyhcZCspL2kpKXx8dm9pZCAwPT09TXB8fE1wWzFdKSwhV3AoKSYmKG51bGw9PT0oWnA9S3AubWF0Y2goLyAoW1xkX10rKSBsaWtlIE1hYyBPUyBYL2kpKXx8dm9pZCAwPT09WnB8fG51bGw9PT0oWnA9WnBbMV0pfHx2b2lkIDA9PT1acHx8WnAuc3BsaXQoIl8iKS5tYXAoKHQ9PnBhcnNlSW50KHQpKSkpLCFXcCgpJiYobnVsbD09PShKcD1LcC5tYXRjaCgvQ2hyb21lXC8oXGQrKS9pKSl8fHZvaWQgMD09PUpwfHxKcFsxXSk7Y29uc3QgcXA9bmV3IEhwKCJKb2luUm9vbUNvbmZpZyIsMCk7Y2xhc3MgJHB7Y29uc3RydWN0b3IodCl7dXUodGhpcywiX3VzZVRjcEFmdGVySm9pblRpbWVvdXQiLCRwLkRFRkFVTFRfQ09ORi51c2VUY3BBZnRlckpvaW5UaW1lb3V0KSx1dSh0aGlzLCJfam9pbldpdGhUY3BPbmx5IiwkcC5ERUZBVUxUX0NPTkYuam9pbldpdGhUY3BPbmx5KSx1dSh0aGlzLCJfam9pbldpdGhUY3BPbmx5RGVsYXkiLCRwLkRFRkFVTFRfQ09ORi5qb2luV2l0aFRjcE9ubHlEZWxheSksdXUodGhpcywiX2JsYWNrQnJvd3NlclJlZ2V4TGlzdCIsW10pLHRoaXMuX2VuZ2luZUlkPXQsbG9jYXRpb24uc2VhcmNoLmluZGV4T2YoIl9fcnRjX3RjcF9vbmx5X18iKT4tMSYmKHRoaXMuX2pvaW5XaXRoVGNwT25seT0hMCx0aGlzLl9qb2luV2l0aFRjcE9ubHlEZWxheT0wKSx0aGlzLl9yZXBvcnQoKX1zdGF0aWMgc2V0RGVmYXVsQ29uZih0KXtsZXR7dXNlVGNwQWZ0ZXJKb2luVGltZW91dDplLGpvaW5XaXRoVGNwT25seTpuLGpvaW5XaXRoVGNwT25seURlbGF5OnJ9PXQ7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZSYmKCRwLkRFRkFVTFRfQ09ORi51c2VUY3BBZnRlckpvaW5UaW1lb3V0PWUpLCJib29sZWFuIj09dHlwZW9mIG4mJigkcC5ERUZBVUxUX0NPTkYuam9pbldpdGhUY3BPbmx5PW4pLCJudW1iZXIiPT10eXBlb2YgciYmKCRwLkRFRkFVTFRfQ09ORi5qb2luV2l0aFRjcE9ubHlEZWxheT1NYXRoLm1heCgwLHIpKSwkcC5ERUZBVUxUX0NPTkZ9Z2V0IHVzZVRjcEFmdGVySm9pblRpbWVvdXQoKXtyZXR1cm4gdGhpcy5fdXNlVGNwQWZ0ZXJKb2luVGltZW91dH1nZXQgdXNlVGNwSm9pbigpe3JldHVybiB0aGlzLl9qb2luV2l0aFRjcE9ubHl9Z2V0IHVzZVRjcEpvaW5EZWxheSgpe3JldHVybiB0aGlzLl9qb2luV2l0aFRjcE9ubHlEZWxheX1pc0JsYWNrQnJvd2VyKCl7cmV0dXJuIHRoaXMuX2JsYWNrQnJvd3NlclJlZ2V4TGlzdC5maW5kKCh0PT5uZXcgUmVnRXhwKHQpLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpKX1zZXRTZXJ2ZXJDb25maWcodCl7dmFyIGUsbixyO2xldCBpPSExOyJib29sZWFuIj09dHlwZW9mKG51bGw9PXR8fG51bGw9PT0oZT10LnVzZV90Y3BfYWZ0ZXJfam9pbl90aW1lb3V0KXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5lbmFibGUpJiYodGhpcy5fdXNlVGNwQWZ0ZXJKb2luVGltZW91dD10LnVzZV90Y3BfYWZ0ZXJfam9pbl90aW1lb3V0LmVuYWJsZSxpPSEwKSwiYm9vbGVhbiI9PXR5cGVvZihudWxsPT10fHxudWxsPT09KG49dC5qb2luX3dpdGhfdGNwX29ubHkpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmVuYWJsZSkmJih0aGlzLl9qb2luV2l0aFRjcE9ubHk9dC5qb2luX3dpdGhfdGNwX29ubHkuZW5hYmxlLGk9ITApLCJudW1iZXIiPT10eXBlb2YobnVsbD09dHx8bnVsbD09PShyPXQuam9pbl93aXRoX3RjcF9vbmx5KXx8dm9pZCAwPT09cj92b2lkIDA6ci5kZWxheV9tcykmJih0aGlzLl9qb2luV2l0aFRjcE9ubHlEZWxheT10LmpvaW5fd2l0aF90Y3Bfb25seS5kZWxheV9tcyxpPSEwKSx0JiZBcnJheS5pc0FycmF5KHQuYmxhY2tfYnJvd3Nlcl9yZWdleF9saXN0KSYmKHRoaXMuX2JsYWNrQnJvd3NlclJlZ2V4TGlzdD10LmJsYWNrX2Jyb3dzZXJfcmVnZXhfbGlzdCxpPSEwKSxpJiZ0aGlzLl9yZXBvcnQoKX10b1N0cmluZygpe3JldHVybiBKU09OLnN0cmluZ2lmeSh7dXNlX3RjcF9hZnRlcl9qb2luX3RpbWVvdXQ6dGhpcy5fdXNlVGNwQWZ0ZXJKb2luVGltZW91dCxqb2luX3dpdGhfdGNwX29ubHk6dGhpcy5fam9pbldpdGhUY3BPbmx5LGpvaW5fd2l0aF90Y3Bfb25seV9kZWxheTp0aGlzLl9qb2luV2l0aFRjcE9ubHlEZWxheSxibGFja19icm93c2VyX3JlZ2V4X2xpc3Q6dGhpcy5fYmxhY2tCcm93c2VyUmVnZXhMaXN0fSl9X3JlcG9ydCgpe3FwLnByaW50KCJfcmVwb3J0Iix0aGlzLnRvU3RyaW5nKCkpLGZ1bmN0aW9uKHQsZSxuKXt2YXIgcjtsZXQgaT1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106MCxvPWFyZ3VtZW50cy5sZW5ndGg+NCYmdm9pZCAwIT09YXJndW1lbnRzWzRdP2FyZ3VtZW50c1s0XToiIixhPWFyZ3VtZW50cy5sZW5ndGg+NT9hcmd1bWVudHNbNV06dm9pZCAwO251bGw9PT0ocj1McCh0KSl8fHZvaWQgMD09PXJ8fHIucmVwb3J0KCJydGNfaW52b2tlX3N0YXR1cyIse3Nka19hcGlfbmFtZTplLG1lc3NhZ2U6bixlcnJvcl9jb2RlOmksc3RyZWFtX2lkOm8sZWxhcHNlOjB9LGEpfSh0aGlzLl9lbmdpbmVJZCwid2ViX2pvaW5fcm9vbV9jb25maWciLHRoaXMudG9TdHJpbmcoKSl9fXV1KCRwLCJERUZBVUxUX0NPTkYiLHt1c2VUY3BBZnRlckpvaW5UaW1lb3V0OiEwLGpvaW5XaXRoVGNwT25seTohMSxqb2luV2l0aFRjcE9ubHlEZWxheTo1ZTN9KTt2YXIgUXA9KHQ9Pih0W3QuTk9ORT0wXT0iTk9ORSIsdCkpKFFwfHx7fSk7Y29uc3QgdGc9Il9fcnRjX2FjY2Vzc0RvbWFpbnNfXyIuc3BsaXQoIiwiKTsiX19ydGNfY29uZmlnRG9tYWluc19fIi5zcGxpdCgiLCIpO3RnLm1hcCgoZnVuY3Rpb24oKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06IiI7cmV0dXJuIHQ/KC9eaHR0cHM/OlwvXC8uKy8udGVzdCh0KXx8KHQ9Imh0dHBzOi8vIi5jb25jYXQodCkpLCIiLmNvbmNhdCh0LCIvZGlzcGF0Y2gvdjEvQWNjZXNzSW5mbz9BY3Rpb249R2V0QWNjZXNzSW5mbyIpKToiIn0pKSwkcC5ERUZBVUxUX0NPTkYsUXAuTk9ORSwidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJiJEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZSI9PT1zZWxmLmNvbnN0cnVjdG9yLm5hbWUmJnNlbGYuYWRkRXZlbnRMaXN0ZW5lcigicnRjdHJhbnNmb3JtIiwoZT0+e2NvbnN0e3RyYW5zZm9ybWVyOm59PWUse3BvcnQ6cn09bi5vcHRpb25zLGk9KG89dD0+e3IucG9zdE1lc3NhZ2UodCxbdC5wYXlsb2FkLmJ1ZmZlcl0pfSxuZXcgVHJhbnNmb3JtU3RyZWFtKHt0cmFuc2Zvcm0oZSxuKXtjb25zdCByPXQuaXNIMjY1VmlkZW9GcmFtZShlKTt0LmdldE5BTFVuaXRzKG5ldyBodShlLmRhdGEpLHIpLmZvckVhY2goKHQ9PntpZih0LnNlaSl7Y29uc3QgZT12dS5kZWNvZGVTRUlCb2R5KHQuYm9keSxyKTtlJiZlLnR5cGU9PT1mdS5leHRlcm5hbCYmbyhlKX19KSksbi5lbnF1ZXVlKGUpfX0pKTt2YXIgbztuLnJlYWRhYmxlLnBpcGVUaHJvdWdoKGkpLnBpcGVUbyhlLnRyYW5zZm9ybWVyLndyaXRhYmxlKX0pKX0oKTsK",FY=typeof window<"u"&&window.Blob&&new Blob([atob(jz)],{type:"text/javascript;charset=utf-8"});function D9A(){let A;try{if(A=FY&&(pQ||window.webkitURL).createObjectURL(FY),!A)throw"";return new Worker(A)}catch{return new Worker("data:application/javascript;base64,"+jz)}finally{!(typeof window<"u"&&navigator.userAgent.indexOf("Trident/")>0)&&A&&(pQ||window.webkitlRL).revokeObjectURL(A)}}const fz="IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciB0PSJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6e307ZnVuY3Rpb24gZSh0KXtyZXR1cm4gdCYmdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCwiZGVmYXVsdCIpP3QuZGVmYXVsdDp0fXZhciBuPXtleHBvcnRzOnt9fSxyPWZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0Lk1hdGg9PT1NYXRoJiZ0fSxvPXIoIm9iamVjdCI9PXR5cGVvZiBnbG9iYWxUaGlzJiZnbG9iYWxUaGlzKXx8cigib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93KXx8cigib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYpfHxyKCJvYmplY3QiPT10eXBlb2YgdCYmdCl8fHIoIm9iamVjdCI9PXR5cGVvZiB0JiZ0KXx8ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30oKXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSxpPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4hIXQoKX1jYXRjaChlKXtyZXR1cm4hMH19LHU9IWkoKGZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24oKXt9LmJpbmQoKTtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdHx8dC5oYXNPd25Qcm9wZXJ0eSgicHJvdG90eXBlIil9KSksYT11LGM9RnVuY3Rpb24ucHJvdG90eXBlLHM9Yy5hcHBseSxmPWMuY2FsbCxsPSJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmUmVmbGVjdC5hcHBseXx8KGE/Zi5iaW5kKHMpOmZ1bmN0aW9uKCl7cmV0dXJuIGYuYXBwbHkocyxhcmd1bWVudHMpfSkseT11LHA9RnVuY3Rpb24ucHJvdG90eXBlLGg9cC5jYWxsLGc9eSYmcC5iaW5kLmJpbmQoaCxoKSxkPXk/ZzpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gaC5hcHBseSh0LGFyZ3VtZW50cyl9fSxiPWQsdj1iKHt9LnRvU3RyaW5nKSxtPWIoIiIuc2xpY2UpLFM9ZnVuY3Rpb24odCl7cmV0dXJuIG0odih0KSw4LC0xKX0sdz1TLE89ZCxMPWZ1bmN0aW9uKHQpe2lmKCJGdW5jdGlvbiI9PT13KHQpKXJldHVybiBPKHQpfSxqPSJvYmplY3QiPT10eXBlb2YgZG9jdW1lbnQmJmRvY3VtZW50LmFsbCxBPXZvaWQgMD09PWomJnZvaWQgMCE9PWo/ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHR8fHQ9PT1qfTpmdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdH0sUD17fSxJPSFpKChmdW5jdGlvbigpe3JldHVybiA3IT09T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LDEse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pWzFdfSkpLEU9dSxUPUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsLGs9RT9ULmJpbmQoVCk6ZnVuY3Rpb24oKXtyZXR1cm4gVC5hcHBseShULGFyZ3VtZW50cyl9LHg9e30sRj17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxDPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsTj1DJiYhRi5jYWxsKHsxOjJ9LDEpO3guZj1OP2Z1bmN0aW9uKHQpe3ZhciBlPUModGhpcyx0KTtyZXR1cm4hIWUmJmUuZW51bWVyYWJsZX06Rjt2YXIgTSxSLFU9ZnVuY3Rpb24odCxlKXtyZXR1cm57ZW51bWVyYWJsZTohKDEmdCksY29uZmlndXJhYmxlOiEoMiZ0KSx3cml0YWJsZTohKDQmdCksdmFsdWU6ZX19LEQ9aSxfPVMsRz1PYmplY3QsSD1kKCIiLnNwbGl0KSxCPUQoKGZ1bmN0aW9uKCl7cmV0dXJuIUcoInoiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKX0pKT9mdW5jdGlvbih0KXtyZXR1cm4iU3RyaW5nIj09PV8odCk/SCh0LCIiKTpHKHQpfTpHLFY9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXR9LFc9Vix6PVR5cGVFcnJvcixLPWZ1bmN0aW9uKHQpe2lmKFcodCkpdGhyb3cgbmV3IHooIkNhbid0IGNhbGwgbWV0aG9kIG9uICIrdCk7cmV0dXJuIHR9LHE9QixKPUssWT1mdW5jdGlvbih0KXtyZXR1cm4gcShKKHQpKX0sWD1BLCQ9ZnVuY3Rpb24odCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0P251bGwhPT10OlgodCl9LFE9e30sWj1RLHR0PW8sZXQ9QSxudD1mdW5jdGlvbih0KXtyZXR1cm4gZXQodCk/dDp2b2lkIDB9LHJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj9udChaW3RdKXx8bnQodHRbdF0pOlpbdF0mJlpbdF1bZV18fHR0W3RdJiZ0dFt0XVtlXX0sb3Q9ZCh7fS5pc1Byb3RvdHlwZU9mKSxpdD1vLm5hdmlnYXRvcix1dD1pdCYmaXQudXNlckFnZW50LGF0PW8sY3Q9dXQ/U3RyaW5nKHV0KToiIixzdD1hdC5wcm9jZXNzLGZ0PWF0LkRlbm8sbHQ9c3QmJnN0LnZlcnNpb25zfHxmdCYmZnQudmVyc2lvbix5dD1sdCYmbHQudjg7eXQmJihSPShNPXl0LnNwbGl0KCIuIikpWzBdPjAmJk1bMF08ND8xOisoTVswXStNWzFdKSksIVImJmN0JiYoIShNPWN0Lm1hdGNoKC9FZGdlXC8oXGQrKS8pKXx8TVsxXT49NzQpJiYoTT1jdC5tYXRjaCgvQ2hyb21lXC8oXGQrKS8pKSYmKFI9K01bMV0pO3ZhciBwdD1SLGh0PXB0LGd0PWksZHQ9by5TdHJpbmcsYnQ9ISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYhZ3QoKGZ1bmN0aW9uKCl7dmFyIHQ9U3ltYm9sKCJzeW1ib2wgZGV0ZWN0aW9uIik7cmV0dXJuIWR0KHQpfHwhKE9iamVjdCh0KWluc3RhbmNlb2YgU3ltYm9sKXx8IVN5bWJvbC5zaGFtJiZodCYmaHQ8NDF9KSksdnQ9YnQmJiFTeW1ib2wuc2hhbSYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3IsbXQ9cnQsU3Q9QSx3dD1vdCxPdD1PYmplY3QsTHQ9dnQ/ZnVuY3Rpb24odCl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiB0fTpmdW5jdGlvbih0KXt2YXIgZT1tdCgiU3ltYm9sIik7cmV0dXJuIFN0KGUpJiZ3dChlLnByb3RvdHlwZSxPdCh0KSl9LGp0PVN0cmluZyxBdD1mdW5jdGlvbih0KXt0cnl7cmV0dXJuIGp0KHQpfWNhdGNoKGUpe3JldHVybiJPYmplY3QifX0sUHQ9QSxJdD1BdCxFdD1UeXBlRXJyb3IsVHQ9ZnVuY3Rpb24odCl7aWYoUHQodCkpcmV0dXJuIHQ7dGhyb3cgbmV3IEV0KEl0KHQpKyIgaXMgbm90IGEgZnVuY3Rpb24iKX0sa3Q9VHQseHQ9VixGdD1rLEN0PUEsTnQ9JCxNdD1UeXBlRXJyb3IsUnQ9e2V4cG9ydHM6e319LFV0PW8sRHQ9T2JqZWN0LmRlZmluZVByb3BlcnR5LF90PW8sR3Q9ZnVuY3Rpb24odCxlKXt0cnl7RHQoVXQsdCx7dmFsdWU6ZSxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KX1jYXRjaChuKXtVdFt0XT1lfXJldHVybiBlfSxIdD0iX19jb3JlLWpzX3NoYXJlZF9fIixCdD1SdC5leHBvcnRzPV90W0h0XXx8R3QoSHQse30pOyhCdC52ZXJzaW9uc3x8KEJ0LnZlcnNpb25zPVtdKSkucHVzaCh7dmVyc2lvbjoiMy4zOS4wIixtb2RlOiJwdXJlIixjb3B5cmlnaHQ6IsKpIDIwMTQtMjAyNCBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSIsbGljZW5zZToiaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi92My4zOS4wL0xJQ0VOU0UiLHNvdXJjZToiaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMifSk7dmFyIFZ0PVJ0LmV4cG9ydHMsV3Q9VnQsenQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gV3RbdF18fChXdFt0XT1lfHx7fSl9LEt0PUsscXQ9T2JqZWN0LEp0PWZ1bmN0aW9uKHQpe3JldHVybiBxdChLdCh0KSl9LFl0PUp0LFh0PWQoe30uaGFzT3duUHJvcGVydHkpLCR0PU9iamVjdC5oYXNPd258fGZ1bmN0aW9uKHQsZSl7cmV0dXJuIFh0KFl0KHQpLGUpfSxRdD1kLFp0PTAsdGU9TWF0aC5yYW5kb20oKSxlZT1RdCgxLi50b1N0cmluZyksbmU9ZnVuY3Rpb24odCl7cmV0dXJuIlN5bWJvbCgiKyh2b2lkIDA9PT10PyIiOnQpKyIpXyIrZWUoKytadCt0ZSwzNil9LHJlPXp0LG9lPSR0LGllPW5lLHVlPWJ0LGFlPXZ0LGNlPW8uU3ltYm9sLHNlPXJlKCJ3a3MiKSxmZT1hZT9jZS5mb3J8fGNlOmNlJiZjZS53aXRob3V0U2V0dGVyfHxpZSxsZT1mdW5jdGlvbih0KXtyZXR1cm4gb2Uoc2UsdCl8fChzZVt0XT11ZSYmb2UoY2UsdCk/Y2VbdF06ZmUoIlN5bWJvbC4iK3QpKSxzZVt0XX0seWU9ayxwZT0kLGhlPUx0LGdlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dFtlXTtyZXR1cm4geHQobik/dm9pZCAwOmt0KG4pfSxkZT1mdW5jdGlvbih0LGUpe3ZhciBuLHI7aWYoInN0cmluZyI9PT1lJiZDdChuPXQudG9TdHJpbmcpJiYhTnQocj1GdChuLHQpKSlyZXR1cm4gcjtpZihDdChuPXQudmFsdWVPZikmJiFOdChyPUZ0KG4sdCkpKXJldHVybiByO2lmKCJzdHJpbmciIT09ZSYmQ3Qobj10LnRvU3RyaW5nKSYmIU50KHI9RnQobix0KSkpcmV0dXJuIHI7dGhyb3cgbmV3IE10KCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWUiKX0sYmU9VHlwZUVycm9yLHZlPWxlKCJ0b1ByaW1pdGl2ZSIpLG1lPWZ1bmN0aW9uKHQsZSl7aWYoIXBlKHQpfHxoZSh0KSlyZXR1cm4gdDt2YXIgbixyPWdlKHQsdmUpO2lmKHIpe2lmKHZvaWQgMD09PWUmJihlPSJkZWZhdWx0Iiksbj15ZShyLHQsZSksIXBlKG4pfHxoZShuKSlyZXR1cm4gbjt0aHJvdyBuZXcgYmUoIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfXJldHVybiB2b2lkIDA9PT1lJiYoZT0ibnVtYmVyIiksZGUodCxlKX0sU2U9THQsd2U9ZnVuY3Rpb24odCl7dmFyIGU9bWUodCwic3RyaW5nIik7cmV0dXJuIFNlKGUpP2U6ZSsiIn0sT2U9JCxMZT1vLmRvY3VtZW50LGplPU9lKExlKSYmT2UoTGUuY3JlYXRlRWxlbWVudCksQWU9ZnVuY3Rpb24odCl7cmV0dXJuIGplP0xlLmNyZWF0ZUVsZW1lbnQodCk6e319LFBlPUFlLEllPSFJJiYhaSgoZnVuY3Rpb24oKXtyZXR1cm4gNyE9PU9iamVjdC5kZWZpbmVQcm9wZXJ0eShQZSgiZGl2IiksImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSkpLEVlPUksVGU9ayxrZT14LHhlPVUsRmU9WSxDZT13ZSxOZT0kdCxNZT1JZSxSZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1AuZj1FZT9SZTpmdW5jdGlvbih0LGUpe2lmKHQ9RmUodCksZT1DZShlKSxNZSl0cnl7cmV0dXJuIFJlKHQsZSl9Y2F0Y2gobil7fWlmKE5lKHQsZSkpcmV0dXJuIHhlKCFUZShrZS5mLHQsZSksdFtlXSl9O3ZhciBVZT1pLERlPUEsX2U9LyN8XC5wcm90b3R5cGVcLi8sR2U9ZnVuY3Rpb24odCxlKXt2YXIgbj1CZVtIZSh0KV07cmV0dXJuIG49PT1XZXx8biE9PVZlJiYoRGUoZSk/VWUoZSk6ISFlKX0sSGU9R2Uubm9ybWFsaXplPWZ1bmN0aW9uKHQpe3JldHVybiBTdHJpbmcodCkucmVwbGFjZShfZSwiLiIpLnRvTG93ZXJDYXNlKCl9LEJlPUdlLmRhdGE9e30sVmU9R2UuTkFUSVZFPSJOIixXZT1HZS5QT0xZRklMTD0iUCIsemU9R2UsS2U9VHQscWU9dSxKZT1MKEwuYmluZCksWWU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gS2UodCksdm9pZCAwPT09ZT90OnFlP0plKHQsZSk6ZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseShlLGFyZ3VtZW50cyl9fSxYZT17fSwkZT1JJiZpKChmdW5jdGlvbigpe3JldHVybiA0MiE9PU9iamVjdC5kZWZpbmVQcm9wZXJ0eSgoZnVuY3Rpb24oKXt9KSwicHJvdG90eXBlIix7dmFsdWU6NDIsd3JpdGFibGU6ITF9KS5wcm90b3R5cGV9KSksUWU9JCxaZT1TdHJpbmcsdG49VHlwZUVycm9yLGVuPWZ1bmN0aW9uKHQpe2lmKFFlKHQpKXJldHVybiB0O3Rocm93IG5ldyB0bihaZSh0KSsiIGlzIG5vdCBhbiBvYmplY3QiKX0sbm49SSxybj1JZSxvbj0kZSx1bj1lbixhbj13ZSxjbj1UeXBlRXJyb3Isc249T2JqZWN0LmRlZmluZVByb3BlcnR5LGZuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsbG49ImVudW1lcmFibGUiLHluPSJjb25maWd1cmFibGUiLHBuPSJ3cml0YWJsZSI7WGUuZj1ubj9vbj9mdW5jdGlvbih0LGUsbil7aWYodW4odCksZT1hbihlKSx1bihuKSwiZnVuY3Rpb24iPT10eXBlb2YgdCYmInByb3RvdHlwZSI9PT1lJiYidmFsdWUiaW4gbiYmcG4gaW4gbiYmIW5bcG5dKXt2YXIgcj1mbih0LGUpO3ImJnJbcG5dJiYodFtlXT1uLnZhbHVlLG49e2NvbmZpZ3VyYWJsZTp5biBpbiBuP25beW5dOnJbeW5dLGVudW1lcmFibGU6bG4gaW4gbj9uW2xuXTpyW2xuXSx3cml0YWJsZTohMX0pfXJldHVybiBzbih0LGUsbil9OnNuOmZ1bmN0aW9uKHQsZSxuKXtpZih1bih0KSxlPWFuKGUpLHVuKG4pLHJuKXRyeXtyZXR1cm4gc24odCxlLG4pfWNhdGNoKHIpe31pZigiZ2V0ImluIG58fCJzZXQiaW4gbil0aHJvdyBuZXcgY24oIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIik7cmV0dXJuInZhbHVlImluIG4mJih0W2VdPW4udmFsdWUpLHR9O3ZhciBobj1YZSxnbj1VLGRuPUk/ZnVuY3Rpb24odCxlLG4pe3JldHVybiBobi5mKHQsZSxnbigxLG4pKX06ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0W2VdPW4sdH0sYm49byx2bj1sLG1uPUwsU249QSx3bj1QLmYsT249emUsTG49USxqbj1ZZSxBbj1kbixQbj0kdCxJbj1mdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbihuLHIsbyl7aWYodGhpcyBpbnN0YW5jZW9mIGUpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyB0O2Nhc2UgMTpyZXR1cm4gbmV3IHQobik7Y2FzZSAyOnJldHVybiBuZXcgdChuLHIpfXJldHVybiBuZXcgdChuLHIsbyl9cmV0dXJuIHZuKHQsdGhpcyxhcmd1bWVudHMpfTtyZXR1cm4gZS5wcm90b3R5cGU9dC5wcm90b3R5cGUsZX0sRW49ZnVuY3Rpb24odCxlKXt2YXIgbixyLG8saSx1LGEsYyxzLGYsbD10LnRhcmdldCx5PXQuZ2xvYmFsLHA9dC5zdGF0LGg9dC5wcm90byxnPXk/Ym46cD9ibltsXTpibltsXSYmYm5bbF0ucHJvdG90eXBlLGQ9eT9MbjpMbltsXXx8QW4oTG4sbCx7fSlbbF0sYj1kLnByb3RvdHlwZTtmb3IoaSBpbiBlKXI9IShuPU9uKHk/aTpsKyhwPyIuIjoiIyIpK2ksdC5mb3JjZWQpKSYmZyYmUG4oZyxpKSxhPWRbaV0sciYmKGM9dC5kb250Q2FsbEdldFNldD8oZj13bihnLGkpKSYmZi52YWx1ZTpnW2ldKSx1PXImJmM/YzplW2ldLChufHxofHx0eXBlb2YgYSE9dHlwZW9mIHUpJiYocz10LmJpbmQmJnI/am4odSxibik6dC53cmFwJiZyP0luKHUpOmgmJlNuKHUpP21uKHUpOnUsKHQuc2hhbXx8dSYmdS5zaGFtfHxhJiZhLnNoYW0pJiZBbihzLCJzaGFtIiwhMCksQW4oZCxpLHMpLGgmJihQbihMbixvPWwrIlByb3RvdHlwZSIpfHxBbihMbixvLHt9KSxBbihMbltvXSxpLHUpLHQucmVhbCYmYiYmKG58fCFiW2ldKSYmQW4oYixpLHUpKSl9LFRuPUVuLGtuPUkseG49WGUuZjtUbih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOk9iamVjdC5kZWZpbmVQcm9wZXJ0eSE9PXhuLHNoYW06IWtufSx7ZGVmaW5lUHJvcGVydHk6eG59KTt2YXIgRm49US5PYmplY3QsQ249bi5leHBvcnRzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gRm4uZGVmaW5lUHJvcGVydHkodCxlLG4pfTtGbi5kZWZpbmVQcm9wZXJ0eS5zaGFtJiYoQ24uc2hhbT0hMCk7dmFyIE5uPWUobi5leHBvcnRzKSxNbj1TLFJuPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKHQpe3JldHVybiJBcnJheSI9PT1Nbih0KX0sVW49TWF0aC5jZWlsLERuPU1hdGguZmxvb3IsX249TWF0aC50cnVuY3x8ZnVuY3Rpb24odCl7dmFyIGU9K3Q7cmV0dXJuKGU+MD9EbjpVbikoZSl9LEduPWZ1bmN0aW9uKHQpe3ZhciBlPSt0O3JldHVybiBlIT1lfHwwPT09ZT8wOl9uKGUpfSxIbj1HbixCbj1NYXRoLm1pbixWbj1mdW5jdGlvbih0KXt2YXIgZT1Ibih0KTtyZXR1cm4gZT4wP0JuKGUsOTAwNzE5OTI1NDc0MDk5MSk6MH0sV249ZnVuY3Rpb24odCl7cmV0dXJuIFZuKHQubGVuZ3RoKX0sem49VHlwZUVycm9yLEtuPUkscW49WGUsSm49VSxZbj17fTtZbltsZSgidG9TdHJpbmdUYWciKV09InoiO3ZhciBYbj0iW29iamVjdCB6XSI9PT1TdHJpbmcoWW4pLCRuPVhuLFFuPUEsWm49Uyx0cj1sZSgidG9TdHJpbmdUYWciKSxlcj1PYmplY3QsbnI9IkFyZ3VtZW50cyI9PT1abihmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpLHJyPSRuP1puOmZ1bmN0aW9uKHQpe3ZhciBlLG4scjtyZXR1cm4gdm9pZCAwPT09dD8iVW5kZWZpbmVkIjpudWxsPT09dD8iTnVsbCI6InN0cmluZyI9PXR5cGVvZihuPWZ1bmN0aW9uKHQsZSl7dHJ5e3JldHVybiB0W2VdfWNhdGNoKG4pe319KGU9ZXIodCksdHIpKT9uOm5yP1puKGUpOiJPYmplY3QiPT09KHI9Wm4oZSkpJiZRbihlLmNhbGxlZSk/IkFyZ3VtZW50cyI6cn0sb3I9QSxpcj1WdCx1cj1kKEZ1bmN0aW9uLnRvU3RyaW5nKTtvcihpci5pbnNwZWN0U291cmNlKXx8KGlyLmluc3BlY3RTb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHVyKHQpfSk7dmFyIGFyPWlyLmluc3BlY3RTb3VyY2UsY3I9ZCxzcj1pLGZyPUEsbHI9cnIseXI9YXIscHI9ZnVuY3Rpb24oKXt9LGhyPXJ0KCJSZWZsZWN0IiwiY29uc3RydWN0IiksZ3I9L15ccyooPzpjbGFzc3xmdW5jdGlvbilcYi8sZHI9Y3IoZ3IuZXhlYyksYnI9IWdyLnRlc3QocHIpLHZyPWZ1bmN0aW9uKHQpe2lmKCFmcih0KSlyZXR1cm4hMTt0cnl7cmV0dXJuIGhyKHByLFtdLHQpLCEwfWNhdGNoKGUpe3JldHVybiExfX0sbXI9ZnVuY3Rpb24odCl7aWYoIWZyKHQpKXJldHVybiExO3N3aXRjaChscih0KSl7Y2FzZSJBc3luY0Z1bmN0aW9uIjpjYXNlIkdlbmVyYXRvckZ1bmN0aW9uIjpjYXNlIkFzeW5jR2VuZXJhdG9yRnVuY3Rpb24iOnJldHVybiExfXRyeXtyZXR1cm4gYnJ8fCEhZHIoZ3IseXIodCkpfWNhdGNoKGUpe3JldHVybiEwfX07bXIuc2hhbT0hMDt2YXIgU3I9IWhyfHxzcigoZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdnIodnIuY2FsbCl8fCF2cihPYmplY3QpfHwhdnIoKGZ1bmN0aW9uKCl7dD0hMH0pKXx8dH0pKT9tcjp2cix3cj1SbixPcj1TcixMcj0kLGpyPWxlKCJzcGVjaWVzIiksQXI9QXJyYXksUHI9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIHdyKHQpJiYoZT10LmNvbnN0cnVjdG9yLChPcihlKSYmKGU9PT1Bcnx8d3IoZS5wcm90b3R5cGUpKXx8THIoZSkmJm51bGw9PT0oZT1lW2pyXSkpJiYoZT12b2lkIDApKSx2b2lkIDA9PT1lP0FyOmV9LElyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyhQcih0KSkoMD09PWU/MDplKX0sRXI9aSxUcj1wdCxrcj1sZSgic3BlY2llcyIpLHhyPUVuLEZyPWksQ3I9Um4sTnI9JCxNcj1KdCxScj1XbixVcj1mdW5jdGlvbih0KXtpZih0PjkwMDcxOTkyNTQ3NDA5OTEpdGhyb3cgem4oIk1heGltdW0gYWxsb3dlZCBpbmRleCBleGNlZWRlZCIpO3JldHVybiB0fSxEcj1mdW5jdGlvbih0LGUsbil7S24/cW4uZih0LGUsSm4oMCxuKSk6dFtlXT1ufSxfcj1JcixHcj1mdW5jdGlvbih0KXtyZXR1cm4gVHI+PTUxfHwhRXIoKGZ1bmN0aW9uKCl7dmFyIGU9W107cmV0dXJuKGUuY29uc3RydWN0b3I9e30pW2tyXT1mdW5jdGlvbigpe3JldHVybntmb286MX19LDEhPT1lW3RdKEJvb2xlYW4pLmZvb30pKX0sSHI9cHQsQnI9bGUoImlzQ29uY2F0U3ByZWFkYWJsZSIpLFZyPUhyPj01MXx8IUZyKChmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiB0W0JyXT0hMSx0LmNvbmNhdCgpWzBdIT09dH0pKSxXcj1mdW5jdGlvbih0KXtpZighTnIodCkpcmV0dXJuITE7dmFyIGU9dFtCcl07cmV0dXJuIHZvaWQgMCE9PWU/ISFlOkNyKHQpfTt4cih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsYXJpdHk6MSxmb3JjZWQ6IVZyfHwhR3IoImNvbmNhdCIpfSx7Y29uY2F0OmZ1bmN0aW9uKHQpe3ZhciBlLG4scixvLGksdT1Ncih0aGlzKSxhPV9yKHUsMCksYz0wO2ZvcihlPS0xLHI9YXJndW1lbnRzLmxlbmd0aDtlPHI7ZSsrKWlmKFdyKGk9LTE9PT1lP3U6YXJndW1lbnRzW2VdKSlmb3Iobz1ScihpKSxVcihjK28pLG49MDtuPG87bisrLGMrKyluIGluIGkmJkRyKGEsYyxpW25dKTtlbHNlIFVyKGMrMSksRHIoYSxjKyssaSk7cmV0dXJuIGEubGVuZ3RoPWMsYX19KTt2YXIgenI9cnIsS3I9U3RyaW5nLHFyPWZ1bmN0aW9uKHQpe2lmKCJTeW1ib2wiPT09enIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmciKTtyZXR1cm4gS3IodCl9LEpyPXt9LFlyPUduLFhyPU1hdGgubWF4LCRyPU1hdGgubWluLFFyPVksWnI9ZnVuY3Rpb24odCxlKXt2YXIgbj1Zcih0KTtyZXR1cm4gbjwwP1hyKG4rZSwwKTokcihuLGUpfSx0bz1Xbixlbz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuLHIpe3ZhciBvPVFyKGUpLGk9dG8obyk7aWYoMD09PWkpcmV0dXJuIXQmJi0xO3ZhciB1LGE9WnIocixpKTtpZih0JiZuIT1uKXtmb3IoO2k+YTspaWYoKHU9b1thKytdKSE9dSlyZXR1cm4hMH1lbHNlIGZvcig7aT5hO2ErKylpZigodHx8YSBpbiBvKSYmb1thXT09PW4pcmV0dXJuIHR8fGF8fDA7cmV0dXJuIXQmJi0xfX0sbm89e2luY2x1ZGVzOmVvKCEwKSxpbmRleE9mOmVvKCExKX0scm89e30sb289JHQsaW89WSx1bz1uby5pbmRleE9mLGFvPXJvLGNvPWQoW10ucHVzaCksc289ZnVuY3Rpb24odCxlKXt2YXIgbixyPWlvKHQpLG89MCxpPVtdO2ZvcihuIGluIHIpIW9vKGFvLG4pJiZvbyhyLG4pJiZjbyhpLG4pO2Zvcig7ZS5sZW5ndGg+bzspb28ocixuPWVbbysrXSkmJih+dW8oaSxuKXx8Y28oaSxuKSk7cmV0dXJuIGl9LGZvPVsiY29uc3RydWN0b3IiLCJoYXNPd25Qcm9wZXJ0eSIsImlzUHJvdG90eXBlT2YiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsInRvTG9jYWxlU3RyaW5nIiwidG9TdHJpbmciLCJ2YWx1ZU9mIl0sbG89c28seW89Zm8scG89T2JqZWN0LmtleXN8fGZ1bmN0aW9uKHQpe3JldHVybiBsbyh0LHlvKX0saG89SSxnbz0kZSxibz1YZSx2bz1lbixtbz1ZLFNvPXBvO0pyLmY9aG8mJiFnbz9PYmplY3QuZGVmaW5lUHJvcGVydGllczpmdW5jdGlvbih0LGUpe3ZvKHQpO2Zvcih2YXIgbixyPW1vKGUpLG89U28oZSksaT1vLmxlbmd0aCx1PTA7aT51Oyliby5mKHQsbj1vW3UrK10scltuXSk7cmV0dXJuIHR9O3ZhciB3byxPbz1ydCgiZG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiKSxMbz1uZSxqbz16dCgia2V5cyIpLEFvPWZ1bmN0aW9uKHQpe3JldHVybiBqb1t0XXx8KGpvW3RdPUxvKHQpKX0sUG89ZW4sSW89SnIsRW89Zm8sVG89cm8sa289T28seG89QWUsRm89InByb3RvdHlwZSIsQ289InNjcmlwdCIsTm89QW8oIklFX1BST1RPIiksTW89ZnVuY3Rpb24oKXt9LFJvPWZ1bmN0aW9uKHQpe3JldHVybiI8IitDbysiPiIrdCsiPC8iK0NvKyI+In0sVW89ZnVuY3Rpb24odCl7dC53cml0ZShSbygiIikpLHQuY2xvc2UoKTt2YXIgZT10LnBhcmVudFdpbmRvdy5PYmplY3Q7cmV0dXJuIHQ9bnVsbCxlfSxEbz1mdW5jdGlvbigpe3RyeXt3bz1uZXcgQWN0aXZlWE9iamVjdCgiaHRtbGZpbGUiKX1jYXRjaChvKXt9dmFyIHQsZSxuO0RvPSJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQ/ZG9jdW1lbnQuZG9tYWluJiZ3bz9Vbyh3byk6KGU9eG8oImlmcmFtZSIpLG49ImphdmEiK0NvKyI6IixlLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGtvLmFwcGVuZENoaWxkKGUpLGUuc3JjPVN0cmluZyhuKSwodD1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQpLm9wZW4oKSx0LndyaXRlKFJvKCJkb2N1bWVudC5GPU9iamVjdCIpKSx0LmNsb3NlKCksdC5GKTpVbyh3byk7Zm9yKHZhciByPUVvLmxlbmd0aDtyLS07KWRlbGV0ZSBEb1tGb11bRW9bcl1dO3JldHVybiBEbygpfTtUb1tOb109ITA7dmFyIF9vPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKHQsZSl7dmFyIG47cmV0dXJuIG51bGwhPT10PyhNb1tGb109UG8odCksbj1uZXcgTW8sTW9bRm9dPW51bGwsbltOb109dCk6bj1EbygpLHZvaWQgMD09PWU/bjpJby5mKG4sZSl9LEdvPXt9LEhvPXNvLEJvPWZvLmNvbmNhdCgibGVuZ3RoIiwicHJvdG90eXBlIik7R28uZj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc3x8ZnVuY3Rpb24odCl7cmV0dXJuIEhvKHQsQm8pfTt2YXIgVm89e30sV289ZChbXS5zbGljZSksem89UyxLbz1ZLHFvPUdvLmYsSm89V28sWW89Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KTpbXTtWby5mPWZ1bmN0aW9uKHQpe3JldHVybiBZbyYmIldpbmRvdyI9PT16byh0KT9mdW5jdGlvbih0KXt0cnl7cmV0dXJuIHFvKHQpfWNhdGNoKGUpe3JldHVybiBKbyhZbyl9fSh0KTpxbyhLbyh0KSl9O3ZhciBYbz17fTtYby5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7dmFyICRvPWRuLFFvPWZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiByJiZyLmVudW1lcmFibGU/dFtlXT1uOiRvKHQsZSxuKSx0fSxabz1YZSx0aT17fSxlaT1sZTt0aS5mPWVpO3ZhciBuaSxyaSxvaSxpaT1RLHVpPSR0LGFpPXRpLGNpPVhlLmYsc2k9ZnVuY3Rpb24odCl7dmFyIGU9aWkuU3ltYm9sfHwoaWkuU3ltYm9sPXt9KTt1aShlLHQpfHxjaShlLHQse3ZhbHVlOmFpLmYodCl9KX0sZmk9ayxsaT1ydCx5aT1sZSxwaT1RbyxoaT1mdW5jdGlvbigpe3ZhciB0PWxpKCJTeW1ib2wiKSxlPXQmJnQucHJvdG90eXBlLG49ZSYmZS52YWx1ZU9mLHI9eWkoInRvUHJpbWl0aXZlIik7ZSYmIWVbcl0mJnBpKGUsciwoZnVuY3Rpb24odCl7cmV0dXJuIGZpKG4sdGhpcyl9KSx7YXJpdHk6MX0pfSxnaT1ycixkaT1Ybj97fS50b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0ICIrZ2kodGhpcykrIl0ifSxiaT1Ybix2aT1YZS5mLG1pPWRuLFNpPSR0LHdpPWRpLE9pPWxlKCJ0b1N0cmluZ1RhZyIpLExpPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBvPW4/dDp0JiZ0LnByb3RvdHlwZTtvJiYoU2kobyxPaSl8fHZpKG8sT2kse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTplfSksciYmIWJpJiZtaShvLCJ0b1N0cmluZyIsd2kpKX0samk9QSxBaT1vLldlYWtNYXAsUGk9amkoQWkpJiYvbmF0aXZlIGNvZGUvLnRlc3QoU3RyaW5nKEFpKSksSWk9byxFaT0kLFRpPWRuLGtpPSR0LHhpPVZ0LEZpPUFvLENpPXJvLE5pPSJPYmplY3QgYWxyZWFkeSBpbml0aWFsaXplZCIsTWk9SWkuVHlwZUVycm9yLFJpPUlpLldlYWtNYXA7aWYoUGl8fHhpLnN0YXRlKXt2YXIgVWk9eGkuc3RhdGV8fCh4aS5zdGF0ZT1uZXcgUmkpO1VpLmdldD1VaS5nZXQsVWkuaGFzPVVpLmhhcyxVaS5zZXQ9VWkuc2V0LG5pPWZ1bmN0aW9uKHQsZSl7aWYoVWkuaGFzKHQpKXRocm93IG5ldyBNaShOaSk7cmV0dXJuIGUuZmFjYWRlPXQsVWkuc2V0KHQsZSksZX0scmk9ZnVuY3Rpb24odCl7cmV0dXJuIFVpLmdldCh0KXx8e319LG9pPWZ1bmN0aW9uKHQpe3JldHVybiBVaS5oYXModCl9fWVsc2V7dmFyIERpPUZpKCJzdGF0ZSIpO0NpW0RpXT0hMCxuaT1mdW5jdGlvbih0LGUpe2lmKGtpKHQsRGkpKXRocm93IG5ldyBNaShOaSk7cmV0dXJuIGUuZmFjYWRlPXQsVGkodCxEaSxlKSxlfSxyaT1mdW5jdGlvbih0KXtyZXR1cm4ga2kodCxEaSk/dFtEaV06e319LG9pPWZ1bmN0aW9uKHQpe3JldHVybiBraSh0LERpKX19dmFyIF9pPXtzZXQ6bmksZ2V0OnJpLGhhczpvaSxlbmZvcmNlOmZ1bmN0aW9uKHQpe3JldHVybiBvaSh0KT9yaSh0KTpuaSh0LHt9KX0sZ2V0dGVyRm9yOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgbjtpZighRWkoZSl8fChuPXJpKGUpKS50eXBlIT09dCl0aHJvdyBuZXcgTWkoIkluY29tcGF0aWJsZSByZWNlaXZlciwgIit0KyIgcmVxdWlyZWQiKTtyZXR1cm4gbn19fSxHaT1ZZSxIaT1CLEJpPUp0LFZpPVduLFdpPUlyLHppPWQoW10ucHVzaCksS2k9ZnVuY3Rpb24odCl7dmFyIGU9MT09PXQsbj0yPT09dCxyPTM9PT10LG89ND09PXQsaT02PT09dCx1PTc9PT10LGE9NT09PXR8fGk7cmV0dXJuIGZ1bmN0aW9uKGMscyxmLGwpe2Zvcih2YXIgeSxwLGg9QmkoYyksZz1IaShoKSxkPVZpKGcpLGI9R2kocyxmKSx2PTAsbT1sfHxXaSxTPWU/bShjLGQpOm58fHU/bShjLDApOnZvaWQgMDtkPnY7disrKWlmKChhfHx2IGluIGcpJiYocD1iKHk9Z1t2XSx2LGgpLHQpKWlmKGUpU1t2XT1wO2Vsc2UgaWYocClzd2l0Y2godCl7Y2FzZSAzOnJldHVybiEwO2Nhc2UgNTpyZXR1cm4geTtjYXNlIDY6cmV0dXJuIHY7Y2FzZSAyOnppKFMseSl9ZWxzZSBzd2l0Y2godCl7Y2FzZSA0OnJldHVybiExO2Nhc2UgNzp6aShTLHkpfXJldHVybiBpPy0xOnJ8fG8/bzpTfX0scWk9e2ZvckVhY2g6S2koMCksbWFwOktpKDEpLGZpbHRlcjpLaSgyKSxzb21lOktpKDMpLGV2ZXJ5OktpKDQpLGZpbmQ6S2koNSksZmluZEluZGV4OktpKDYpLGZpbHRlclJlamVjdDpLaSg3KX0sSmk9RW4sWWk9byxYaT1rLCRpPWQsUWk9SSxaaT1idCx0dT1pLGV1PSR0LG51PW90LHJ1PWVuLG91PVksaXU9d2UsdXU9cXIsYXU9VSxjdT1fbyxzdT1wbyxmdT1HbyxsdT1Wbyx5dT1YbyxwdT1QLGh1PVhlLGd1PUpyLGR1PXgsYnU9UW8sdnU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBaby5mKHQsZSxuKX0sbXU9enQsU3U9cm8sd3U9bmUsT3U9bGUsTHU9dGksanU9c2ksQXU9aGksUHU9TGksSXU9X2ksRXU9cWkuZm9yRWFjaCxUdT1BbygiaGlkZGVuIiksa3U9IlN5bWJvbCIseHU9InByb3RvdHlwZSIsRnU9SXUuc2V0LEN1PUl1LmdldHRlckZvcihrdSksTnU9T2JqZWN0W3h1XSxNdT1ZaS5TeW1ib2wsUnU9TXUmJk11W3h1XSxVdT1ZaS5SYW5nZUVycm9yLER1PVlpLlR5cGVFcnJvcixfdT1ZaS5RT2JqZWN0LEd1PXB1LmYsSHU9aHUuZixCdT1sdS5mLFZ1PWR1LmYsV3U9JGkoW10ucHVzaCksenU9bXUoInN5bWJvbHMiKSxLdT1tdSgib3Atc3ltYm9scyIpLHF1PW11KCJ3a3MiKSxKdT0hX3V8fCFfdVt4dV18fCFfdVt4dV0uZmluZENoaWxkLFl1PWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj1HdShOdSxlKTtyJiZkZWxldGUgTnVbZV0sSHUodCxlLG4pLHImJnQhPT1OdSYmSHUoTnUsZSxyKX0sWHU9UWkmJnR1KChmdW5jdGlvbigpe3JldHVybiA3IT09Y3UoSHUoe30sImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSHUodGhpcywiYSIse3ZhbHVlOjd9KS5hfX0pKS5hfSkpP1l1Okh1LCR1PWZ1bmN0aW9uKHQsZSl7dmFyIG49enVbdF09Y3UoUnUpO3JldHVybiBGdShuLHt0eXBlOmt1LHRhZzp0LGRlc2NyaXB0aW9uOmV9KSxRaXx8KG4uZGVzY3JpcHRpb249ZSksbn0sUXU9ZnVuY3Rpb24odCxlLG4pe3Q9PT1OdSYmUXUoS3UsZSxuKSxydSh0KTt2YXIgcj1pdShlKTtyZXR1cm4gcnUobiksZXUoenUscik/KG4uZW51bWVyYWJsZT8oZXUodCxUdSkmJnRbVHVdW3JdJiYodFtUdV1bcl09ITEpLG49Y3Uobix7ZW51bWVyYWJsZTphdSgwLCExKX0pKTooZXUodCxUdSl8fEh1KHQsVHUsYXUoMSxjdShudWxsKSkpLHRbVHVdW3JdPSEwKSxYdSh0LHIsbikpOkh1KHQscixuKX0sWnU9ZnVuY3Rpb24odCxlKXtydSh0KTt2YXIgbj1vdShlKSxyPXN1KG4pLmNvbmNhdChyYShuKSk7cmV0dXJuIEV1KHIsKGZ1bmN0aW9uKGUpe1FpJiYhWGkodGEsbixlKXx8UXUodCxlLG5bZV0pfSkpLHR9LHRhPWZ1bmN0aW9uKHQpe3ZhciBlPWl1KHQpLG49WGkoVnUsdGhpcyxlKTtyZXR1cm4hKHRoaXM9PT1OdSYmZXUoenUsZSkmJiFldShLdSxlKSkmJighKG58fCFldSh0aGlzLGUpfHwhZXUoenUsZSl8fGV1KHRoaXMsVHUpJiZ0aGlzW1R1XVtlXSl8fG4pfSxlYT1mdW5jdGlvbih0LGUpe3ZhciBuPW91KHQpLHI9aXUoZSk7aWYobiE9PU51fHwhZXUoenUscil8fGV1KEt1LHIpKXt2YXIgbz1HdShuLHIpO3JldHVybiFvfHwhZXUoenUscil8fGV1KG4sVHUpJiZuW1R1XVtyXXx8KG8uZW51bWVyYWJsZT0hMCksb319LG5hPWZ1bmN0aW9uKHQpe3ZhciBlPUJ1KG91KHQpKSxuPVtdO3JldHVybiBFdShlLChmdW5jdGlvbih0KXtldSh6dSx0KXx8ZXUoU3UsdCl8fFd1KG4sdCl9KSksbn0scmE9ZnVuY3Rpb24odCl7dmFyIGU9dD09PU51LG49QnUoZT9LdTpvdSh0KSkscj1bXTtyZXR1cm4gRXUobiwoZnVuY3Rpb24odCl7IWV1KHp1LHQpfHxlJiYhZXUoTnUsdCl8fFd1KHIsenVbdF0pfSkpLHJ9O1ppfHwoTXU9ZnVuY3Rpb24oKXtpZihudShSdSx0aGlzKSl0aHJvdyBuZXcgRHUoIlN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciIpO3ZhciB0PWFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT91dShhcmd1bWVudHNbMF0pOnZvaWQgMCxlPXd1KHQpLG49ZnVuY3Rpb24odCl7dmFyIHI9dm9pZCAwPT09dGhpcz9ZaTp0aGlzO3I9PT1OdSYmWGkobixLdSx0KSxldShyLFR1KSYmZXUocltUdV0sZSkmJihyW1R1XVtlXT0hMSk7dmFyIG89YXUoMSx0KTt0cnl7WHUocixlLG8pfWNhdGNoKGkpe2lmKCEoaSBpbnN0YW5jZW9mIFV1KSl0aHJvdyBpO1l1KHIsZSxvKX19O3JldHVybiBRaSYmSnUmJlh1KE51LGUse2NvbmZpZ3VyYWJsZTohMCxzZXQ6bn0pLCR1KGUsdCl9LGJ1KFJ1PU11W3h1XSwidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiBDdSh0aGlzKS50YWd9KSksYnUoTXUsIndpdGhvdXRTZXR0ZXIiLChmdW5jdGlvbih0KXtyZXR1cm4gJHUod3UodCksdCl9KSksZHUuZj10YSxodS5mPVF1LGd1LmY9WnUscHUuZj1lYSxmdS5mPWx1LmY9bmEseXUuZj1yYSxMdS5mPWZ1bmN0aW9uKHQpe3JldHVybiAkdShPdSh0KSx0KX0sUWkmJnZ1KFJ1LCJkZXNjcmlwdGlvbiIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQ3UodGhpcykuZGVzY3JpcHRpb259fSkpLEppKHtnbG9iYWw6ITAsY29uc3RydWN0b3I6ITAsd3JhcDohMCxmb3JjZWQ6IVppLHNoYW06IVppfSx7U3ltYm9sOk11fSksRXUoc3UocXUpLChmdW5jdGlvbih0KXtqdSh0KX0pKSxKaSh7dGFyZ2V0Omt1LHN0YXQ6ITAsZm9yY2VkOiFaaX0se3VzZVNldHRlcjpmdW5jdGlvbigpe0p1PSEwfSx1c2VTaW1wbGU6ZnVuY3Rpb24oKXtKdT0hMX19KSxKaSh7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOiFaaSxzaGFtOiFRaX0se2NyZWF0ZTpmdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lP2N1KHQpOlp1KGN1KHQpLGUpfSxkZWZpbmVQcm9wZXJ0eTpRdSxkZWZpbmVQcm9wZXJ0aWVzOlp1LGdldE93blByb3BlcnR5RGVzY3JpcHRvcjplYX0pLEppKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6IVppfSx7Z2V0T3duUHJvcGVydHlOYW1lczpuYX0pLEF1KCksUHUoTXUsa3UpLFN1W1R1XT0hMDt2YXIgb2E9YnQmJiEhU3ltYm9sLmZvciYmISFTeW1ib2wua2V5Rm9yLGlhPUVuLHVhPXJ0LGFhPSR0LGNhPXFyLHNhPXp0LGZhPW9hLGxhPXNhKCJzdHJpbmctdG8tc3ltYm9sLXJlZ2lzdHJ5IikseWE9c2EoInN5bWJvbC10by1zdHJpbmctcmVnaXN0cnkiKTtpYSh7dGFyZ2V0OiJTeW1ib2wiLHN0YXQ6ITAsZm9yY2VkOiFmYX0se2ZvcjpmdW5jdGlvbih0KXt2YXIgZT1jYSh0KTtpZihhYShsYSxlKSlyZXR1cm4gbGFbZV07dmFyIG49dWEoIlN5bWJvbCIpKGUpO3JldHVybiBsYVtlXT1uLHlhW25dPWUsbn19KTt2YXIgcGE9RW4saGE9JHQsZ2E9THQsZGE9QXQsYmE9b2EsdmE9enQoInN5bWJvbC10by1zdHJpbmctcmVnaXN0cnkiKTtwYSh7dGFyZ2V0OiJTeW1ib2wiLHN0YXQ6ITAsZm9yY2VkOiFiYX0se2tleUZvcjpmdW5jdGlvbih0KXtpZighZ2EodCkpdGhyb3cgbmV3IFR5cGVFcnJvcihkYSh0KSsiIGlzIG5vdCBhIHN5bWJvbCIpO2lmKGhhKHZhLHQpKXJldHVybiB2YVt0XX19KTt2YXIgbWE9Um4sU2E9QSx3YT1TLE9hPXFyLExhPWQoW10ucHVzaCksamE9RW4sQWE9cnQsUGE9bCxJYT1rLEVhPWQsVGE9aSxrYT1BLHhhPUx0LEZhPVdvLENhPWZ1bmN0aW9uKHQpe2lmKFNhKHQpKXJldHVybiB0O2lmKG1hKHQpKXtmb3IodmFyIGU9dC5sZW5ndGgsbj1bXSxyPTA7cjxlO3IrKyl7dmFyIG89dFtyXTsic3RyaW5nIj09dHlwZW9mIG8/TGEobixvKToibnVtYmVyIiE9dHlwZW9mIG8mJiJOdW1iZXIiIT09d2EobykmJiJTdHJpbmciIT09d2Eobyl8fExhKG4sT2EobykpfXZhciBpPW4ubGVuZ3RoLHU9ITA7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7aWYodSlyZXR1cm4gdT0hMSxlO2lmKG1hKHRoaXMpKXJldHVybiBlO2Zvcih2YXIgcj0wO3I8aTtyKyspaWYobltyXT09PXQpcmV0dXJuIGV9fX0sTmE9YnQsTWE9U3RyaW5nLFJhPUFhKCJKU09OIiwic3RyaW5naWZ5IiksVWE9RWEoLy4vLmV4ZWMpLERhPUVhKCIiLmNoYXJBdCksX2E9RWEoIiIuY2hhckNvZGVBdCksR2E9RWEoIiIucmVwbGFjZSksSGE9RWEoMS4udG9TdHJpbmcpLEJhPS9bXHVEODAwLVx1REZGRl0vZyxWYT0vXltcdUQ4MDAtXHVEQkZGXSQvLFdhPS9eW1x1REMwMC1cdURGRkZdJC8semE9IU5hfHxUYSgoZnVuY3Rpb24oKXt2YXIgdD1BYSgiU3ltYm9sIikoInN0cmluZ2lmeSBkZXRlY3Rpb24iKTtyZXR1cm4iW251bGxdIiE9PVJhKFt0XSl8fCJ7fSIhPT1SYSh7YTp0fSl8fCJ7fSIhPT1SYShPYmplY3QodCkpfSkpLEthPVRhKChmdW5jdGlvbigpe3JldHVybiciXFx1ZGYwNlxcdWQ4MzQiJyE9PVJhKCJcdWRmMDZcdWQ4MzQiKXx8JyJcXHVkZWFkIichPT1SYSgiXHVkZWFkIil9KSkscWE9ZnVuY3Rpb24odCxlKXt2YXIgbj1GYShhcmd1bWVudHMpLHI9Q2EoZSk7aWYoa2Eocil8fHZvaWQgMCE9PXQmJiF4YSh0KSlyZXR1cm4gblsxXT1mdW5jdGlvbih0LGUpe2lmKGthKHIpJiYoZT1JYShyLHRoaXMsTWEodCksZSkpLCF4YShlKSlyZXR1cm4gZX0sUGEoUmEsbnVsbCxuKX0sSmE9ZnVuY3Rpb24odCxlLG4pe3ZhciByPURhKG4sZS0xKSxvPURhKG4sZSsxKTtyZXR1cm4gVWEoVmEsdCkmJiFVYShXYSxvKXx8VWEoV2EsdCkmJiFVYShWYSxyKT8iXFx1IitIYShfYSh0LDApLDE2KTp0fTtSYSYmamEoe3RhcmdldDoiSlNPTiIsc3RhdDohMCxhcml0eTozLGZvcmNlZDp6YXx8S2F9LHtzdHJpbmdpZnk6ZnVuY3Rpb24odCxlLG4pe3ZhciByPUZhKGFyZ3VtZW50cyksbz1QYSh6YT9xYTpSYSxudWxsLHIpO3JldHVybiBLYSYmInN0cmluZyI9PXR5cGVvZiBvP0dhKG8sQmEsSmEpOm99fSk7dmFyIFlhPVhvLFhhPUp0O0VuKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6IWJ0fHxpKChmdW5jdGlvbigpe1lhLmYoMSl9KSl9LHtnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ZnVuY3Rpb24odCl7dmFyIGU9WWEuZjtyZXR1cm4gZT9lKFhhKHQpKTpbXX19KSxzaSgiYXN5bmNJdGVyYXRvciIpLHNpKCJoYXNJbnN0YW5jZSIpLHNpKCJpc0NvbmNhdFNwcmVhZGFibGUiKSxzaSgiaXRlcmF0b3IiKSxzaSgibWF0Y2giKSxzaSgibWF0Y2hBbGwiKSxzaSgicmVwbGFjZSIpLHNpKCJzZWFyY2giKSxzaSgic3BlY2llcyIpLHNpKCJzcGxpdCIpO3ZhciAkYT1oaTtzaSgidG9QcmltaXRpdmUiKSwkYSgpO3ZhciBRYT1ydCxaYT1MaTtzaSgidG9TdHJpbmdUYWciKSxaYShRYSgiU3ltYm9sIiksIlN5bWJvbCIpLHNpKCJ1bnNjb3BhYmxlcyIpLExpKG8uSlNPTiwiSlNPTiIsITApO3ZhciB0YyxlYyxuYyxyYz1RLlN5bWJvbCxvYz17fSxpYz1JLHVjPSR0LGFjPUZ1bmN0aW9uLnByb3RvdHlwZSxjYz1pYyYmT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixzYz11YyhhYywibmFtZSIpLGZjPXtFWElTVFM6c2MsUFJPUEVSOnNjJiYic29tZXRoaW5nIj09PWZ1bmN0aW9uKCl7fS5uYW1lLENPTkZJR1VSQUJMRTpzYyYmKCFpY3x8aWMmJmNjKGFjLCJuYW1lIikuY29uZmlndXJhYmxlKX0sbGM9IWkoKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGUuY29uc3RydWN0b3I9bnVsbCxPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IHQpIT09dC5wcm90b3R5cGV9KSkseWM9JHQscGM9QSxoYz1KdCxnYz1sYyxkYz1BbygiSUVfUFJPVE8iKSxiYz1PYmplY3QsdmM9YmMucHJvdG90eXBlLG1jPWdjP2JjLmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKHQpe3ZhciBlPWhjKHQpO2lmKHljKGUsZGMpKXJldHVybiBlW2RjXTt2YXIgbj1lLmNvbnN0cnVjdG9yO3JldHVybiBwYyhuKSYmZSBpbnN0YW5jZW9mIG4/bi5wcm90b3R5cGU6ZSBpbnN0YW5jZW9mIGJjP3ZjOm51bGx9LFNjPWksd2M9QSxPYz0kLExjPV9vLGpjPW1jLEFjPVFvLFBjPWxlKCJpdGVyYXRvciIpLEljPSExO1tdLmtleXMmJigibmV4dCJpbihuYz1bXS5rZXlzKCkpPyhlYz1qYyhqYyhuYykpKSE9PU9iamVjdC5wcm90b3R5cGUmJih0Yz1lYyk6SWM9ITApO3ZhciBFYz0hT2ModGMpfHxTYygoZnVuY3Rpb24oKXt2YXIgdD17fTtyZXR1cm4gdGNbUGNdLmNhbGwodCkhPT10fSkpO3djKCh0Yz1FYz97fTpMYyh0YykpW1BjXSl8fEFjKHRjLFBjLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpO3ZhciBUYz17SXRlcmF0b3JQcm90b3R5cGU6dGMsQlVHR1lfU0FGQVJJX0lURVJBVE9SUzpJY30sa2M9VGMuSXRlcmF0b3JQcm90b3R5cGUseGM9X28sRmM9VSxDYz1MaSxOYz1vYyxNYz1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxSYz1FbixVYz1rLERjPWZjLF9jPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBvPWUrIiBJdGVyYXRvciI7cmV0dXJuIHQucHJvdG90eXBlPXhjKGtjLHtuZXh0OkZjKCshcixuKX0pLENjKHQsbywhMSwhMCksTmNbb109TWMsdH0sR2M9bWMsSGM9TGksQmM9UW8sVmM9b2MsV2M9VGMsemM9RGMuUFJPUEVSLEtjPVdjLkJVR0dZX1NBRkFSSV9JVEVSQVRPUlMscWM9bGUoIml0ZXJhdG9yIiksSmM9ImtleXMiLFljPSJ2YWx1ZXMiLFhjPSJlbnRyaWVzIiwkYz1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxRYz1mdW5jdGlvbih0LGUsbixyLG8saSx1KXtfYyhuLGUscik7dmFyIGEsYyxzLGY9ZnVuY3Rpb24odCl7aWYodD09PW8mJmcpcmV0dXJuIGc7aWYoIUtjJiZ0JiZ0IGluIHApcmV0dXJuIHBbdF07c3dpdGNoKHQpe2Nhc2UgSmM6Y2FzZSBZYzpjYXNlIFhjOnJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzLHQpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcyl9fSxsPWUrIiBJdGVyYXRvciIseT0hMSxwPXQucHJvdG90eXBlLGg9cFtxY118fHBbIkBAaXRlcmF0b3IiXXx8byYmcFtvXSxnPSFLYyYmaHx8ZihvKSxkPSJBcnJheSI9PT1lJiZwLmVudHJpZXN8fGg7aWYoZCYmKGE9R2MoZC5jYWxsKG5ldyB0KSkpIT09T2JqZWN0LnByb3RvdHlwZSYmYS5uZXh0JiYoSGMoYSxsLCEwLCEwKSxWY1tsXT0kYyksemMmJm89PT1ZYyYmaCYmaC5uYW1lIT09WWMmJih5PSEwLGc9ZnVuY3Rpb24oKXtyZXR1cm4gVWMoaCx0aGlzKX0pLG8paWYoYz17dmFsdWVzOmYoWWMpLGtleXM6aT9nOmYoSmMpLGVudHJpZXM6ZihYYyl9LHUpZm9yKHMgaW4gYykoS2N8fHl8fCEocyBpbiBwKSkmJkJjKHAscyxjW3NdKTtlbHNlIFJjKHt0YXJnZXQ6ZSxwcm90bzohMCxmb3JjZWQ6S2N8fHl9LGMpO3JldHVybiB1JiZwW3FjXSE9PWcmJkJjKHAscWMsZyx7bmFtZTpvfSksVmNbZV09ZyxjfSxaYz1mdW5jdGlvbih0LGUpe3JldHVybnt2YWx1ZTp0LGRvbmU6ZX19LHRzPVksZXM9b2MsbnM9X2k7WGUuZjt2YXIgcnM9UWMsb3M9WmMsaXM9IkFycmF5IEl0ZXJhdG9yIix1cz1ucy5zZXQsYXM9bnMuZ2V0dGVyRm9yKGlzKTtycyhBcnJheSwiQXJyYXkiLChmdW5jdGlvbih0LGUpe3VzKHRoaXMse3R5cGU6aXMsdGFyZ2V0OnRzKHQpLGluZGV4OjAsa2luZDplfSl9KSwoZnVuY3Rpb24oKXt2YXIgdD1hcyh0aGlzKSxlPXQudGFyZ2V0LG49dC5pbmRleCsrO2lmKCFlfHxuPj1lLmxlbmd0aClyZXR1cm4gdC50YXJnZXQ9bnVsbCxvcyh2b2lkIDAsITApO3N3aXRjaCh0LmtpbmQpe2Nhc2Uia2V5cyI6cmV0dXJuIG9zKG4sITEpO2Nhc2UidmFsdWVzIjpyZXR1cm4gb3MoZVtuXSwhMSl9cmV0dXJuIG9zKFtuLGVbbl1dLCExKX0pLCJ2YWx1ZXMiKSxlcy5Bcmd1bWVudHM9ZXMuQXJyYXk7dmFyIGNzPXtDU1NSdWxlTGlzdDowLENTU1N0eWxlRGVjbGFyYXRpb246MCxDU1NWYWx1ZUxpc3Q6MCxDbGllbnRSZWN0TGlzdDowLERPTVJlY3RMaXN0OjAsRE9NU3RyaW5nTGlzdDowLERPTVRva2VuTGlzdDoxLERhdGFUcmFuc2Zlckl0ZW1MaXN0OjAsRmlsZUxpc3Q6MCxIVE1MQWxsQ29sbGVjdGlvbjowLEhUTUxDb2xsZWN0aW9uOjAsSFRNTEZvcm1FbGVtZW50OjAsSFRNTFNlbGVjdEVsZW1lbnQ6MCxNZWRpYUxpc3Q6MCxNaW1lVHlwZUFycmF5OjAsTmFtZWROb2RlTWFwOjAsTm9kZUxpc3Q6MSxQYWludFJlcXVlc3RMaXN0OjAsUGx1Z2luOjAsUGx1Z2luQXJyYXk6MCxTVkdMZW5ndGhMaXN0OjAsU1ZHTnVtYmVyTGlzdDowLFNWR1BhdGhTZWdMaXN0OjAsU1ZHUG9pbnRMaXN0OjAsU1ZHU3RyaW5nTGlzdDowLFNWR1RyYW5zZm9ybUxpc3Q6MCxTb3VyY2VCdWZmZXJMaXN0OjAsU3R5bGVTaGVldExpc3Q6MCxUZXh0VHJhY2tDdWVMaXN0OjAsVGV4dFRyYWNrTGlzdDowLFRvdWNoTGlzdDowfSxzcz1vLGZzPUxpLGxzPW9jO2Zvcih2YXIgeXMgaW4gY3MpZnMoc3NbeXNdLHlzKSxsc1t5c109bHMuQXJyYXk7dmFyIHBzPXJjLGhzPWxlLGdzPVhlLmYsZHM9aHMoIm1ldGFkYXRhIiksYnM9RnVuY3Rpb24ucHJvdG90eXBlO3ZvaWQgMD09PWJzW2RzXSYmZ3MoYnMsZHMse3ZhbHVlOm51bGx9KSxzaSgiYXN5bmNEaXNwb3NlIiksc2koImRpc3Bvc2UiKSxzaSgibWV0YWRhdGEiKTt2YXIgdnM9cHMsbXM9ZCxTcz1ydCgiU3ltYm9sIiksd3M9U3Mua2V5Rm9yLE9zPW1zKFNzLnByb3RvdHlwZS52YWx1ZU9mKSxMcz1Tcy5pc1JlZ2lzdGVyZWRTeW1ib2x8fGZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gdm9pZCAwIT09d3MoT3ModCkpfWNhdGNoKGUpe3JldHVybiExfX07RW4oe3RhcmdldDoiU3ltYm9sIixzdGF0OiEwfSx7aXNSZWdpc3RlcmVkU3ltYm9sOkxzfSk7Zm9yKHZhciBqcz16dCxBcz1ydCxQcz1kLElzPUx0LEVzPWxlLFRzPUFzKCJTeW1ib2wiKSxrcz1Ucy5pc1dlbGxLbm93blN5bWJvbCx4cz1BcygiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlOYW1lcyIpLEZzPVBzKFRzLnByb3RvdHlwZS52YWx1ZU9mKSxDcz1qcygid2tzIiksTnM9MCxNcz14cyhUcyksUnM9TXMubGVuZ3RoO05zPFJzO05zKyspdHJ5e3ZhciBVcz1Nc1tOc107SXMoVHNbVXNdKSYmRXMoVXMpfWNhdGNoKGJmKXt9dmFyIERzPWZ1bmN0aW9uKHQpe2lmKGtzJiZrcyh0KSlyZXR1cm4hMDt0cnl7Zm9yKHZhciBlPUZzKHQpLG49MCxyPXhzKENzKSxvPXIubGVuZ3RoO248bztuKyspaWYoQ3NbcltuXV09PWUpcmV0dXJuITB9Y2F0Y2goYmYpe31yZXR1cm4hMX07RW4oe3RhcmdldDoiU3ltYm9sIixzdGF0OiEwLGZvcmNlZDohMH0se2lzV2VsbEtub3duU3ltYm9sOkRzfSksc2koImN1c3RvbU1hdGNoZXIiKSxzaSgib2JzZXJ2YWJsZSIpLEVuKHt0YXJnZXQ6IlN5bWJvbCIsc3RhdDohMCxuYW1lOiJpc1JlZ2lzdGVyZWRTeW1ib2wifSx7aXNSZWdpc3RlcmVkOkxzfSksRW4oe3RhcmdldDoiU3ltYm9sIixzdGF0OiEwLG5hbWU6ImlzV2VsbEtub3duU3ltYm9sIixmb3JjZWQ6ITB9LHtpc1dlbGxLbm93bjpEc30pLHNpKCJtYXRjaGVyIiksc2koIm1ldGFkYXRhS2V5Iiksc2koInBhdHRlcm5NYXRjaCIpLHNpKCJyZXBsYWNlQWxsIik7dmFyIF9zPWUodnMpLEdzPWQsSHM9R24sQnM9cXIsVnM9SyxXcz1HcygiIi5jaGFyQXQpLHpzPUdzKCIiLmNoYXJDb2RlQXQpLEtzPUdzKCIiLnNsaWNlKSxxcz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxuKXt2YXIgcixvLGk9QnMoVnMoZSkpLHU9SHMobiksYT1pLmxlbmd0aDtyZXR1cm4gdTwwfHx1Pj1hP3Q/IiI6dm9pZCAwOihyPXpzKGksdSkpPDU1Mjk2fHxyPjU2MzE5fHx1KzE9PT1hfHwobz16cyhpLHUrMSkpPDU2MzIwfHxvPjU3MzQzP3Q/V3MoaSx1KTpyOnQ/S3MoaSx1LHUrMik6by01NjMyMCsoci01NTI5Njw8MTApKzY1NTM2fX0sSnM9e2NvZGVBdDpxcyghMSksY2hhckF0OnFzKCEwKX0uY2hhckF0LFlzPXFyLFhzPV9pLCRzPVFjLFFzPVpjLFpzPSJTdHJpbmcgSXRlcmF0b3IiLHRmPVhzLnNldCxlZj1Ycy5nZXR0ZXJGb3IoWnMpOyRzKFN0cmluZywiU3RyaW5nIiwoZnVuY3Rpb24odCl7dGYodGhpcyx7dHlwZTpacyxzdHJpbmc6WXModCksaW5kZXg6MH0pfSksKGZ1bmN0aW9uKCl7dmFyIHQsZT1lZih0aGlzKSxuPWUuc3RyaW5nLHI9ZS5pbmRleDtyZXR1cm4gcj49bi5sZW5ndGg/UXModm9pZCAwLCEwKToodD1KcyhuLHIpLGUuaW5kZXgrPXQubGVuZ3RoLFFzKHQsITEpKX0pKTt2YXIgbmY9ZSh0aS5mKCJpdGVyYXRvciIpKTtmdW5jdGlvbiByZih0KXtyZXR1cm4ocmY9ImZ1bmN0aW9uIj09dHlwZW9mIF9zJiYic3ltYm9sIj09dHlwZW9mIG5mP2Z1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdH06ZnVuY3Rpb24odCl7cmV0dXJuIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBfcyYmdC5jb25zdHJ1Y3Rvcj09PV9zJiZ0IT09X3MucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB0fSkodCl9dmFyIG9mPWUodGkuZigidG9QcmltaXRpdmUiKSk7ZnVuY3Rpb24gdWYodCl7dmFyIGU9ZnVuY3Rpb24odCxlKXtpZigib2JqZWN0IiE9cmYodCl8fCF0KXJldHVybiB0O3ZhciBuPXRbb2ZdO2lmKHZvaWQgMCE9PW4pe3ZhciByPW4uY2FsbCh0LGV8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXJmKHIpKXJldHVybiByO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09ZT9TdHJpbmc6TnVtYmVyKSh0KX0odCwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXJmKGUpP2U6ZSsiIn1mdW5jdGlvbiBhZih0LGUsbil7cmV0dXJuKGU9dWYoZSkpaW4gdD9Obih0LGUse3ZhbHVlOm4sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTp0W2VdPW4sdH1jb25zdCBjZj17Z2V0TkFMVW5pdHModCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtpZih0Lmxlbmd0aC10LnBvc2l0aW9uPDQpcmV0dXJuW107Y29uc3R7cG9zaXRpb246bn09dDtyZXR1cm4gMT09PXQuZ2V0SW50MzIobil8fDA9PT10LmdldEludDE2KG4pJiYxPT09dC5nZXRJbnQ4KG4rMik/Y2YuZ2V0QW5uZXhiTmFscyh0LGUpOmNmLmdldEF2Y2NOYWxzKHQsZSl9LGdldEFubmV4Yk5hbHModCxlKXtjb25zdCBuPVtdO2xldCByPWNmLmdldEhlYWRlclBvc2l0aW9uQW5uZXhCKHQpLG89ci5wb3MsaT1vO2Zvcig7bzx0Lmxlbmd0aC00Oyl7Y29uc3QgdT1uZXcgVWludDhBcnJheSh0LmJ1ZmZlci5zbGljZShvLG8rci5oZWFkZXJMZW5ndGgpKTtyLnBvcz09PXQucG9zaXRpb24mJnQuc2tpcChyLmhlYWRlckxlbmd0aCkscj1jZi5nZXRIZWFkZXJQb3NpdGlvbkFubmV4Qih0KSxpPXIucG9zO2NvbnN0IGE9e2hlYWRlcjp1LGJvZHk6bmV3IFVpbnQ4QXJyYXkodC5idWZmZXIuc2xpY2Uobyt1LmJ5dGVMZW5ndGgsaSkpLHR5cGU6LTF9O2U/Y2YuYW5hbHlzZUgyNjVOYWwoYSk6Y2YuYW5hbHlzZU5hbChhKSwoYS50eXBlPD05fHxlJiZhLnR5cGU8PTQwKSYmMCE9PWEudHlwZSYmbi5wdXNoKGEpLHQuc2tpcChpLXQucG9zaXRpb24pLG89aX1yZXR1cm4gbn0sZ2V0QXZjY05hbHModCxlKXtjb25zdCBuPVtdO2Zvcig7dC5wb3NpdGlvbjx0Lmxlbmd0aC00Oyl7Y29uc3Qgcj10LmdldEludDMyKHQucG9zaXRpb24pO2lmKCEodC5sZW5ndGgtdC5wb3NpdGlvbj49cikpYnJlYWs7e2NvbnN0IG89bmV3IFVpbnQ4QXJyYXkodC5idWZmZXIuc2xpY2UodC5wb3NpdGlvbix0LnBvc2l0aW9uKzQpKTt0LnNraXAoNCk7Y29uc3QgaT1uZXcgVWludDhBcnJheSh0LmJ1ZmZlci5zbGljZSh0LnBvc2l0aW9uLHQucG9zaXRpb24rcikpO3Quc2tpcChyKTtjb25zdCB1PXtoZWFkZXI6byxib2R5OmksdHlwZTotMX07ZT9jZi5hbmFseXNlSDI2NU5hbCh1KTpjZi5hbmFseXNlTmFsKHUpLHUudHlwZTw9OSYmMCE9PXUudHlwZSYmbi5wdXNoKHUpfX1yZXR1cm4gbn0sYW5hbHlzZU5hbCh0KXtjb25zdCBlPTMxJnQuYm9keVswXTtzd2l0Y2godC50eXBlPWUsZSl7Y2FzZSAxOnQubmRyPSEwO2JyZWFrO2Nhc2UgNTp0Lmlkcj0hMDticmVhaztjYXNlIDY6dC5zZWk9ITA7YnJlYWs7Y2FzZSA3OnQuc3BzPSEwO2JyZWFrO2Nhc2UgODp0LnBwcz0hMH19LGFuYWx5c2VIMjY1TmFsKHQpe2NvbnN0IGU9KDEyNiZ0LmJvZHlbMF0pPj4xO3N3aXRjaCh0LnR5cGU9ZSxlKXtjYXNlIDM5OmNhc2UgNDA6dC5zZWk9ITB9fSxnZXRIZWFkZXJQb3NpdGlvbkFubmV4Qih0KXtsZXQgZT10LnBvc2l0aW9uLG49MDtjb25zdCByPXQubGVuZ3RoO2Zvcig7MyE9PW4mJjQhPT1uJiZlPHItNDspMD09PXQuZ2V0SW50MTYoZSk/MT09PXQuZ2V0SW50MTYoZSsyKT9uPTQ6MT09PXQuZ2V0SW50OChlKzIpP249MzplKys6ZSsrO3JldHVybiBlPT09ci00JiYoMD09PXQuZ2V0SW50MTYoZSk/MT09PXQuZ2V0SW50MTYoZSsyKT9uPTQ6ZT1yOihlKyssMD09PXQuZ2V0SW50MTYoZSkmJjE9PT10LmdldEludDgoZSk/bj0zOmU9cikpLHtwb3M6ZSxoZWFkZXJMZW5ndGg6bn19LGlzSDI2NVZpZGVvRnJhbWUodCl7dmFyIGU7cmV0dXJuKChudWxsPT09KGU9dC5nZXRNZXRhZGF0YSl8fHZvaWQgMD09PWV8fG51bGw9PT0oZT1lLmNhbGwodCkpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLm1pbWVUeXBlKXx8IiIpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoImgyNjUiKX19LHNmPW5ldyBVaW50OEFycmF5KFsxMDksMTY3LDUzLDE5MCwxMDMsOTAsNzIsMSwxNzAsODksNjMsMTY0LDE5NCwxOTksMTksODVdKSxmZj1uZXcgVWludDhBcnJheShbMTA5LDE2Nyw1MywxOTAsMTAzLDkwLDcyLDEsMTcwLDg5LDYzLDE2NCwxOTQsMTk5LDE5LDg0XSksbGY9bmV3IFVpbnQ4QXJyYXkoWzMxLDIzOSwzLDUwLDI0MiwxMjAsNzYsODUsMTY5LDQyLDE2MSw5MSw3NSwxODYsMjJdKTtmdW5jdGlvbiB5Zih0KXtjb25zdCBlPVtdO2Zvcig7dD49MjU1Oyl0LT0yNTUsZS5wdXNoKDI1NSk7cmV0dXJuIGUucHVzaCh0KSxuZXcgVWludDhBcnJheShlKX1mdW5jdGlvbiBwZih0KXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCxuPTA7Zm9yKDsyNTU9PT10W2VdJiZlPHQuYnl0ZUxlbmd0aDspZSsrLG4rPTI1NTtyZXR1cm4gZTx0LmJ5dGVMZW5ndGgmJihuKz10W2UrK10pLFtuLGVdfWNvbnN0IGhmPW5ldyBVaW50OEFycmF5KFs4MCwxXSk7Y2xhc3MgZ2Z7c3RhdGljIGdlbmVyYXRlU0VJKHQsZSl7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtjb25zdCByPW5ldyBVaW50OEFycmF5KFswLDAsMCwxXSksbz1lP2hmOm5ldyBVaW50OEFycmF5KFs2XSksaT1uZXcgVWludDhBcnJheShbNV0pLHU9Z2YuX191dWlkfHwobj9zZjpmZiksYT15Zih0LmJ5dGVMZW5ndGgrdS5ieXRlTGVuZ3RoKSxjPSh0PT57Y29uc3QgZT1bXTtsZXQgbj0wO2Zvcihjb25zdCByIG9mIHQpbj49MiYmcjw9MyYmKGUucHVzaCgzKSxuPTApLDA9PT1yP24rKzpuPTAsZS5wdXNoKHIpO3JldHVybiBuZXcgVWludDhBcnJheShlKX0pKHQpO3JldHVybiBuZXcgVWludDhBcnJheShbLi4uciwuLi5vLC4uLmksLi4uYSwuLi51LC4uLmMsMTI4XSl9c3RhdGljIGRlY29kZVNFSUJvZHkodCxlKXtjb25zdCBuPSh0PT57Y29uc3QgZT1bXTtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rKyl0W25dPD0zJiYwPT09dFtuLTFdJiYwPT09dFtuLTJdfHxlLnB1c2godFtuXSk7cmV0dXJuIG5ldyBVaW50OEFycmF5KGUpfSkodD10LnNsaWNlKDAsdC5sZW5ndGgtMSkpO2lmKG4uYnl0ZUxlbmd0aDwyKXJldHVybjtsZXQgcj0wO2NvbnN0IG89ZT8yOjE7aWYoNSE9PW5bb10mJjEwMCE9PW5bb10pcmV0dXJuO3IrPTErbztjb25zdFtpLHVdPXBmKG4scik7cj11O2xldCBhPTI7Y29uc3QgYz1yK2k7bi5ieXRlTGVuZ3RoPj1mZi5ieXRlTGVuZ3RoJiZpPj1mZi5ieXRlTGVuZ3RoJiYobi5zbGljZShyLHIrZmYuYnl0ZUxlbmd0aCkudG9TdHJpbmcoKT09PWZmLnRvU3RyaW5nKCl8fG4uc2xpY2UocixyK2xmLmJ5dGVMZW5ndGgpLnRvU3RyaW5nKCk9PT1sZi50b1N0cmluZygpKT8ocis9ZmYuYnl0ZUxlbmd0aCxhPTEpOm4uYnl0ZUxlbmd0aD49ZmYuYnl0ZUxlbmd0aCYmaT49ZmYuYnl0ZUxlbmd0aCYmbi5zbGljZShyLHIrc2YuYnl0ZUxlbmd0aCkudG9TdHJpbmcoKT09PXNmLnRvU3RyaW5nKCkmJihyKz1zZi5ieXRlTGVuZ3RoLGE9MCk7cmV0dXJue3R5cGU6YSxwYXlsb2FkOm4uc2xpY2UocixjKX19c3RhdGljIHBhcnNlSW50ZXJuYWxTRUkodCl7Y29uc3QgZT1uZXcgTWFwO2xldCBuPTA7aWYoMD09PXQudHlwZSl7Zm9yKDt0LnBheWxvYWQuYnl0ZUxlbmd0aC1uPj0yOyl7Y29uc3RbcixvXT1wZih0LnBheWxvYWQsbik7bj1vO2NvbnN0W2ksdV09cGYodC5wYXlsb2FkLG4pO2lmKG49dSxlLmdldChyKXx8IShpPD10LnBheWxvYWQuYnl0ZUxlbmd0aC1uKSlicmVhaztlLnNldChyLHQucGF5bG9hZC5zbGljZShuLG4raSkpLG4rPWl9cmV0dXJuIGV9fXN0YXRpYyBtYWtlSW50ZXJuYWxTZWkodCl7Y29uc3QgZT1bXTtmb3IoY29uc3RbbyxpXW9mIHQpe2NvbnN0IHQ9eWYobyksbj15ZihpLmJ5dGVMZW5ndGgpO2UucHVzaCh0LG4saSl9Y29uc3Qgbj1lLnJlZHVjZSgoKHQsZSk9PnQrZS5ieXRlTGVuZ3RoKSwwKSxyPW5ldyBVaW50OEFycmF5KG4pO3JldHVybiBlLnJlZHVjZSgoKHQsZSk9PihyLnNldChlLHQpLHQrZS5ieXRlTGVuZ3RoKSksMCkscn19YWYoZ2YsIl9fdXVpZCIsdm9pZCAwKTtjbGFzcyBkZntjb25zdHJ1Y3Rvcih0KXthZih0aGlzLCJzZWlMaXN0IixbXSksYWYodGhpcywibWF4U0VJQ291bnQiLDEpLHRoaXMubWF4U0VJQ291bnQ9dC5tYXhTRUlDb3VudH1zZW5kU0VJVHJhbnNmb3JtKHQsZSl7Y29uc3R7bWF4U0VJQ291bnQ6bixzZWlMaXN0OnJ9PXRoaXM7aWYoIXRoaXMuc2VpTGlzdC5sZW5ndGgpcmV0dXJuIHZvaWQgZS5lbnF1ZXVlKHQpO2NvbnN0IG89W107bGV0IGk9MDtmb3IoY29uc3QgYyBvZiByKXtpZihvLmxlbmd0aD49bilicmVhaztjb25zdCBlPWdmLmdlbmVyYXRlU0VJKGMuY29udGVudCxjZi5pc0gyNjVWaWRlb0ZyYW1lKHQpKTtpKz1lLmJ5dGVMZW5ndGgsYy5yZXBlYXRDb3VudC0tLG8ucHVzaChlKX10aGlzLnNlaUxpc3Q9ci5maWx0ZXIoKHQ9PnQucmVwZWF0Q291bnQ+MCkpO2NvbnN0IHU9bmV3IFVpbnQ4QXJyYXkoaSt0LmRhdGEuYnl0ZUxlbmd0aCk7dS5zZXQobmV3IFVpbnQ4QXJyYXkodC5kYXRhKSk7bGV0IGE9dC5kYXRhLmJ5dGVMZW5ndGg7by5mb3JFYWNoKCh0PT57dS5zZXQodCxhKSxhKz10LmJ5dGVMZW5ndGh9KSksdC5kYXRhPXUuYnVmZmVyLGUuZW5xdWV1ZSh0KX1wdXNoU0VJKHQpe3RoaXMuc2VpTGlzdC5wdXNoKHQpfXJldm9rZVNFSSh0KXtjb25zdCBlPXRoaXMuc2VpTGlzdC5maW5kSW5kZXgoKGU9PmUudXVpZD09PXQpKTtyZXR1cm4tMSE9PWUmJih0aGlzLnNlaUxpc3Quc3BsaWNlKGUsMSksITApfX0idW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJiJEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZSI9PT1zZWxmLmNvbnN0cnVjdG9yLm5hbWUmJnNlbGYuYWRkRXZlbnRMaXN0ZW5lcigicnRjdHJhbnNmb3JtIiwodD0+e2NvbnN0e3RyYW5zZm9ybWVyOmV9PXQse3BvcnQ6bixtYXhTRUlDb3VudDpyfT1lLm9wdGlvbnMsbz1uZXcgZGYoe21heFNFSUNvdW50OnJ9KSxpPW5ldyBUcmFuc2Zvcm1TdHJlYW0oe3RyYW5zZm9ybTpvLnNlbmRTRUlUcmFuc2Zvcm0uYmluZChvKX0pO24ub25tZXNzYWdlPXQ9PntsZXR7ZGF0YTplfT10O2NvbnN0e3R5cGU6cixjb250ZW50Oml9PWU7aWYoInB1c2giPT09cilvLnB1c2hTRUkoaSk7ZWxzZSBpZigicmV2b2tlIj09PXIpe2NvbnN0IHQ9by5yZXZva2VTRUkoaSk7cmV0dXJuIG4ucG9zdE1lc3NhZ2Uoe3R5cGU6InJldm9rZS1hY2siLGNvbnRlbnQ6e3V1aWQ6aSxpc05vdFNlbmQ6dH19KX19LGUucmVhZGFibGUucGlwZVRocm91Z2goaSkucGlwZVRvKGUud3JpdGFibGUpfSkpfSgpOwo=",YY=typeof window<"u"&&window.Blob&&new Blob([atob(fz)],{type:"text/javascript;charset=utf-8"});function u9A(){let A;try{if(A=YY&&(pQ||window.webkitURL).createObjectURL(YY),!A)throw"";return new Worker(A)}catch{return new Worker("data:application/javascript;base64,"+fz)}finally{!(typeof window<"u"&&navigator.userAgent.indexOf("Trident/")>0)&&A&&(pQ||window.webkitlRL).revokeObjectURL(A)}}const oB={getNALUnits(A){let I=arguments.length>1&&arguments[1]!==void 0&&arguments[1];if(A.length-A.position<4)return[];const{position:g}=A;return A.getInt32(g)===1||A.getInt16(g)===0&&A.getInt8(g+2)===1?oB.getAnnexbNals(A,I):oB.getAvccNals(A,I)},getAnnexbNals(A,I){const g=[];let C=oB.getHeaderPositionAnnexB(A),Q=C.pos,B=Q;for(;Q=C))break;{const Q=new Uint8Array(A.buffer.slice(A.position,A.position+4));A.skip(4);const B=new Uint8Array(A.buffer.slice(A.position,A.position+C));A.skip(C);const E={header:Q,body:B,type:-1};I?oB.analyseH265Nal(E):oB.analyseNal(E),E.type<=9&&E.type!==0&&g.push(E)}}return g},analyseNal(A){const I=31&A.body[0];switch(A.type=I,I){case 1:A.ndr=!0;break;case 5:A.idr=!0;break;case 6:A.sei=!0;break;case 7:A.sps=!0;break;case 8:A.pps=!0}},analyseH265Nal(A){const I=(126&A.body[0])>>1;switch(A.type=I,I){case 39:case 40:A.sei=!0}},getHeaderPositionAnnexB(A){let I=A.position,g=0;const C=A.length;for(;g!==3&&g!==4&&I0&&uQ.readByte(this,C)}static readByte(I,g,C){let Q;switch(g){case 1:Q=C?I.getInt8(I.position):I.getUint8(I.position);break;case 2:Q=C?I.getInt16(I.position):I.getUint16(I.position);break;case 3:if(C)throw new Error("not supported for readByte 3");Q=I.getUint8(I.position)<<16,Q|=I.getUint8(I.position+1)<<8,Q|=I.getUint8(I.position+2);break;case 4:Q=C?I.getInt32(I.position):I.getUint32(I.position);break;case 8:if(C)throw new Error("not supported for readBody 8");Q=I.getUint32(I.position)<<32,Q|=I.getUint32(I.position+4);break;default:Q=""}return I.position+=g,Q}readUint8(){return uQ.readByte(this,1)}readUint16(){return uQ.readByte(this,2)}readUint24(){return uQ.readByte(this,3)}readUint32(){return uQ.readByte(this,4)}readUint64(){return uQ.readByte(this,8)}readInt8(){return uQ.readByte(this,1,!0)}readInt16(){return uQ.readByte(this,2,!0)}readInt32(){return uQ.readByte(this,4,!0)}writeUint32(I){return new Uint8Array([I>>>24&255,I>>>16&255,I>>>8&255,255&I])}}function Hz(A){return new TransformStream({transform(I,g){const C=oB.isH265VideoFrame(I);oB.getNALUnits(new uQ(I.data),C).forEach(Q=>{if(Q.sei){const B=Dv.decodeSEIBody(Q.body,C);B&&(YA.SKIP_SEI_FILTER||B.type===cz.external)&&A(B)}}),g.enqueue(I)}})}typeof self<"u"&&self.constructor.name==="DedicatedWorkerGlobalScope"&&self.addEventListener("rtctransform",A=>{const{transformer:I}=A,{port:g}=I.options,C=Hz(Q=>{g.postMessage(Q,[Q.payload.buffer])});I.readable.pipeThrough(C).pipeTo(A.transformer.writable)});class xz{constructor(I){P(this,"seiList",[]),P(this,"maxSEICount",1),this.maxSEICount=I.maxSEICount}sendSEITransform(I,g){const{maxSEICount:C,seiList:Q}=this;if(!this.seiList.length)return void g.enqueue(I);const B=[];let E=0;for(const o of Q){if(B.length>=C)break;const t=Dv.generateSEI(o.content,oB.isH265VideoFrame(I));E+=t.byteLength,o.repeatCount--,B.push(t)}this.seiList=Q.filter(o=>o.repeatCount>0);const i=new Uint8Array(E+I.data.byteLength);i.set(new Uint8Array(I.data));let e=I.data.byteLength;B.forEach(o=>{i.set(o,e),e+=o.byteLength}),I.data=i.buffer,g.enqueue(I)}pushSEI(I){this.seiList.push(I)}revokeSEI(I){const g=this.seiList.findIndex(C=>C.uuid===I);return g!==-1&&(this.seiList.splice(g,1),!0)}}typeof self<"u"&&self.constructor.name==="DedicatedWorkerGlobalScope"&&self.addEventListener("rtctransform",A=>{const{transformer:I}=A,{port:g,maxSEICount:C}=I.options,Q=new xz({maxSEICount:C}),B=new TransformStream({transform:Q.sendSEITransform.bind(Q)});g.onmessage=E=>{let{data:i}=E;const{type:e,content:o}=i;if(e==="push")Q.pushSEI(o);else if(e==="revoke"){const t=Q.revokeSEI(o);return g.postMessage({type:"revoke-ack",content:{uuid:o,isNotSend:t}})}},I.readable.pipeThrough(B).pipeTo(I.writable)});class Oz extends iQ{constructor(I){super(),P(this,"isScreen",!1),P(this,"audioMid",void 0),P(this,"videoMid",void 0),P(this,"audioMLine",void 0),P(this,"videoMLine",void 0),P(this,"videoTransceiver",void 0),P(this,"audioTransceiver",void 0),P(this,"vendorHandler",void 0),P(this,"vendorCode",0),P(this,"engineId",void 0),P(this,"logger",void 0),P(this,"__seiHelper",Dv),P(this,"logName","StreamBase"),this._ctx=I,this.engineId=I.id,this.logger=new uA(this.constructor.name,2,I.id)}stopReport(I){this.statsReport.stopReport(I)}destroy(){var I,g;delete this.audioMid,delete this.videoMid,this.statsReport.destroy(),(I=this.observer)===null||I===void 0||I.reset(),delete this.videoTransceiver,delete this.audioTransceiver,(g=this.vendorHandler)===null||g===void 0||g.destroy(),this.vendorCode=0,delete this.vendorHandler}}var uC=(A=>(A[A.INIT=0]="INIT",A[A.SUB_ING=1]="SUB_ING",A[A.SUB_ED=2]="SUB_ED",A))(uC||{});class b9 extends Oz{constructor(I){let g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:Xs.STREAM_INDEX_MAIN;super(I),P(this,"id",void 0),P(this,"stream",void 0),P(this,"streamId",void 0),P(this,"videoTrack",void 0),P(this,"audioTrack",void 0),P(this,"subVideoDescriptions",[]),P(this,"observer",void 0),P(this,"statsReport",void 0),P(this,"pubAudio",!1),P(this,"pubVideo",!1),P(this,"blackFrameRenderInterval",void 0),P(this,"blackFrameLifetimeInterval",void 0),P(this,"pubAttributes",void 0),P(this,"pcSessionId",void 0),P(this,"maxSeiCount",1),P(this,"preReports",{audio:{},video:{}}),P(this,"remoteSdp",void 0),P(this,"currentVideoCodec",void 0),P(this,"_changeCodecs",[]),P(this,"_videoCaps",[]),P(this,"_sendSEIHandler",void 0),P(this,"_trackMatchingTimer",void 0),P(this,"logName","LocalStream"),this.stream=new MediaStream,this.id=tC(),this.pubAttributes={localaudio:!1,localvideo:!1,videostream:!1,audiostream:!1,extvideo:!1,extaudio:!1,videoDescriptions:[],videoType:eC.NORMAL},this.isScreen=g===Xs.STREAM_INDEX_SCREEN,this.statsReport=new OlA(I,this);const C=lA("SEI_COUNT_FPS");typeof C=="number"&&C<=10&&(this.maxSeiCount=C),this._trackMatchingTimer=setInterval(this._checkTrackMatching.bind(this),5e3)}get enableSimulcast(){return!this.isScreen&&this._ctx.videoProfile.getSimulcastMode()}get videoEncodeConfig(){return this.isScreen?[this._ctx.videoProfile.getScreenEncodeConfig()]:this._ctx.videoProfile.getVideoEncodeConfig()}get audioHasCapture(){return this.pubAttributes.localaudio}get audioHasPublish(){return this.pubAttributes.audiostream}get videoHasCapture(){return this.pubAttributes.localvideo}get videoHasPublish(){return this.pubAttributes.videostream}get isEmptyStream(){return!this.audioTrack&&!this.videoTrack}get initStreamId(){return this.stream.id}async getSelectedCodec(){var I;const g=this._changeCodecs.length>0?this._changeCodecs:this._videoCaps.length>0?this._videoCaps:await qa(),C=this._ctx.videoProfile.getPreferCodec(this.isScreen),Q=this.isScreen?this._ctx.targetScreenCodec:this._ctx.targetCodec;if(C&&C!==Lt.AUTO){if(C===Lt.H264&&g.includes(bI.H264))return bI.H264;if(C===Lt.VP8&&g.includes(bI.VP8))return bI.VP8;if(C===Lt.ByteVC1&&g.includes(bI.ByteVC1))return bI.ByteVC1}if((I=this._ctx.serverConfig)!==null&&I!==void 0&&I.videoCodec&&g.includes(this._ctx.serverConfig.videoCodec))return this._ctx.serverConfig.videoCodec;if(C===Lt.AUTO&&g.length>0)return g[0];if(Q&&g.includes(Q))return Q;if(g.includes(bI.H264))return bI.H264;if(g.includes(bI.VP8))return bI.VP8;throw new Error("no available codec")}startReport(I,g){this.statsReport.setLocalStreamStatsEvtInterval(I,g)}getLocalStreamStats(){return this.statsReport.getLocalStats()}initVideoEncodedTransform(){if(lA("DISABLE_ENCODED_TRANSFORM"))return void this.logger.warn("initVideoEncodedTransform","DISABLE_ENCODED_TRANSFORM");if(!this.videoTransceiver||!this.videoTransceiver.sender)return void this.logger.warn("initVideoEncodedTransform","no sender found when trying to bind encodedTransform");const{sender:I}=this.videoTransceiver;if(JE()){const{readable:g,writable:C}=I.createEncodedStreams(),Q=new xz({maxSEICount:this.maxSeiCount}),B=new TransformStream({transform:Q.sendSEITransform.bind(Q)});g.pipeThrough(B).pipeTo(C),this._sendSEIHandler=Q}else if(hv()){const g=new u9A,C=new MessageChannel;this.videoTransceiver.sender.transform=new RTCRtpScriptTransform(g,{port:C.port2,maxSEICount:this.maxSeiCount},[C.port2]),this._sendSEIHandler={pushSEI:Q=>{C.port1.postMessage({type:"push",content:Q},[Q.content.buffer])},revokeSEI:async Q=>(C.port1.postMessage({type:"revoke",content:Q}),new Promise(B=>{C.port1.addEventListener("message",E=>{let{data:i}=E;const{type:e,content:o}=i,{uuid:t,isNotSend:s}=o;e==="revoke-ack"&&t===Q&&B(s)})}))}}}initAudioEncodedTransform(){if(lA("DISABLE_ENCODED_TRANSFORM"))return void this.logger.warn("initVideoEncodedTransform","DISABLE_ENCODED_TRANSFORM");if(!this.audioTransceiver||!this.audioTransceiver.sender)return void this.logger.warn("initAudioEncodedTransform","no sender found when trying to bind encodedTransform");if(!JE())return void this.logger.warn("initAudioEncodedTransform","legacy EncodedTransform is not supported");const{sender:I}=this.audioTransceiver,{readable:g,writable:C}=I.createEncodedStreams();g.pipeThrough(new TransformStream({transform:(Q,B)=>{B.enqueue(Q)}})).pipeTo(C)}clean(){AI(this.engineId,"localstream_clean","".concat(new Error().stack),0,this.streamId||""),super.destroy(),this.subVideoDescriptions=[],clearTimeout(this.blackFrameLifetimeInterval),clearInterval(this.blackFrameRenderInterval)}switchTrackEnableState(I,g){var C;let Q;I==="audio"?Q=this.audioTrack:I==="video"&&(Q=this.videoTrack);const B=(C=Q)===null||C===void 0?void 0:C.mediaTrack;return!(!B||(B==null?void 0:B.enabled)===g)&&(B.enabled=g,!0)}resetStream(){this.stream=new MediaStream}genBlackFrame(){var I,g;this.logger.info("genBlackFrame()");const C=(I=this.videoEncodeConfig[0])!==null&&I!==void 0&&I.frameRate?jA((g=this.videoEncodeConfig[0])===null||g===void 0?void 0:g.frameRate):15,Q=Math.ceil(1e3/C),B=document.createElement("canvas"),E=B.getContext("2d");B.width=16,B.height=16;const i=e=>{e.fillRect(0,0,16,16)};return E&&(E.fillStyle="#000",i(E),this.blackFrameRenderInterval=window.setInterval(()=>{i(E)},Q),this.refreshBlackFrameLifetime()),B.captureStream(C).getVideoTracks()[0]}stopBlackFrame(){this.logger.info("stopBlackFrame()"),clearTimeout(this.blackFrameLifetimeInterval),clearInterval(this.blackFrameRenderInterval),delete this.blackFrameRenderInterval}refreshBlackFrameLifetime(){this.logger.info("refreshBlackFrameLifetime()"),this.blackFrameRenderInterval&&(clearTimeout(this.blackFrameLifetimeInterval),this.blackFrameLifetimeInterval=setTimeout(()=>{clearInterval(this.blackFrameRenderInterval),delete this.blackFrameRenderInterval,this.emit("black-frame-ended")},YA.BLACK_FRAME_LIFETIME))}setChangeCodecs(I){this._changeCodecs=I}setVideoCaps(I){if(!I)return;const g=I.split(",").map(C=>{const Q=RE(C).call(C).toUpperCase();return{H264:bI.H264,VP8:bI.VP8,BYTEVC1:bI.ByteVC1}[Q]||null}).filter(C=>C!==null);this._videoCaps=g}sendSEIMessage(I){var g;this.logger.info("sendSEIMessage"),(g=this._sendSEIHandler)===null||g===void 0||g.pushSEI(I)}async revokeSEIMessage(I){var g;return this.logger.info("revokeSEIMessage"),this._sendSEIHandler?(g=this._sendSEIHandler)===null||g===void 0?void 0:g.revokeSEI(I):(this.logger.warn("revokeSEIMessage","no sei handler found"),!1)}destroy(){clearInterval(this._trackMatchingTimer),super.removeAllListeners(),super.destroy()}_checkTrackMatching(){var I,g,C,Q;const B=(I=this.audioTrack)===null||I===void 0?void 0:I.preprocessingTrack.id,E=(g=this.videoTrack)===null||g===void 0?void 0:g.preprocessingTrack.id,i=(C=this.audioTransceiver)===null||C===void 0||(C=C.sender.track)===null||C===void 0?void 0:C.id,e=(Q=this.videoTransceiver)===null||Q===void 0||(Q=Q.sender.track)===null||Q===void 0?void 0:Q.id;var o,t;this.pubAudio&&B!==i&&(this.logger.error("_checkTrackMatching","audio track id: ".concat(B," not matching transceiver track id ").concat(i,", streamId: ").concat(this.streamId)),(o=this._ctx.monitor)===null||o===void 0||o.report("rtc_error",{message:"audio track id: ".concat(B," not matching transceiver track id ").concat(i),error_code:-1,stream_id:this.streamId})),this.pubVideo&&E!==e&&(this.logger.error("_checkTrackMatching","video track id: ".concat(E," not matching transceiver track id ").concat(e,", streamId: ").concat(this.streamId)),(t=this._ctx.monitor)===null||t===void 0||t.report("rtc_error",{message:"video track id: ".concat(E," not matching transceiver track id ").concat(e),error_code:-1,stream_id:this.streamId}))}}class y9 extends Oz{constructor(I,g,C,Q,B,E){super(I),P(this,"streamId",void 0),P(this,"userId",void 0),P(this,"isPublic",void 0),P(this,"hasVideo",void 0),P(this,"hasAudio",void 0),P(this,"_attributes",void 0),P(this,"streamState",void 0),P(this,"removeTrack",!1),P(this,"observer",void 0),P(this,"statsReport",void 0),P(this,"subVideo",void 0),P(this,"subAudio",void 0),P(this,"subMediaType",void 0),P(this,"subLayer",void 0),P(this,"_sequenceId",void 0),P(this,"stream",void 0),P(this,"videoTrack",void 0),P(this,"audioTrack",void 0),P(this,"recordedVideoFrames",void 0),P(this,"stillExist",void 0),P(this,"originalMediaType",void 0),P(this,"priority",void 0),P(this,"remoteSessionId",""),P(this,"originalStreamIndex",0),P(this,"virtual",void 0),P(this,"pcSessionId",void 0),P(this,"_virtualOccupy",void 0),P(this,"_videoStallObserver",void 0),P(this,"_audioStallObserver",void 0),P(this,"preReports",{audio:{},video:{}}),P(this,"_installInfo",void 0),this.virtual=!1,this._virtualOccupy=!1,this.userId=g,this.isScreen=Q,this.isPublic=B,this.streamId=C,this.logName="RemoteStream-".concat(C),this.hasAudio=E.audiostream&&E.localaudio,this.hasVideo=E.videostream&&E.localvideo,this._attributes=E,this.vendorCode=(E==null?void 0:E.vendorCode)||0,this.subVideo=!1,this.subAudio=!1,this._sequenceId=0,this.subMediaType=OC.NONE,this.subLayer={spatialLayer:0,spatialSubLayer:-1},this.streamState=0,this.statsReport=new qlA(I,this),this.enableVendorMode&&(this.pcSessionId=tC())}get vendor(){return this._attributes.vendorCode}get audioHasCapture(){return this._attributes.localaudio}get audioHasPublish(){return this._attributes.audiostream}get videoHasCapture(){return this._attributes.localvideo}get videoHasPublish(){return this._attributes.videostream}get sequenceId(){return this._sequenceId||-1}set sequenceId(I){typeof I=="number"&&(this._sequenceId=I)}get enableVendorMode(){return typeof this.attributes.vendorCode=="number"&&this.attributes.vendorCode!==0}get hasSubscribed(){return this.streamState===2}get attributes(){return this._attributes}set attributes(I){this.hasVideo=I.localvideo&&I.videostream,this.hasAudio=I.localaudio&&I.audiostream,this._attributes=I,this.vendorCode=I.vendorCode||0}get virtualOccupy(){return this._virtualOccupy}set virtualOccupy(I){var g;if(this._virtualOccupy&&!I)(g=this.observer)===null||g===void 0||g.setPushTrack(!1);else if(!this._virtualOccupy&&I){var C;(C=this.observer)===null||C===void 0||C.setPushTrack(!0)}this._virtualOccupy=I}startReport(I,g){this.statsReport.setRemoteStreamStatsEvtInterval(I,g)}getRemoteStreamStats(){return this.statsReport.getRemoteStreamStats()}initVideoEncodedTransform(){if(lA("DISABLE_ENCODED_TRANSFORM"))this.logger.warn("initVideoEncodedTransform","DISABLE_ENCODED_TRANSFORM");else if(this.videoTransceiver&&this.videoTransceiver.receiver){if(JE()){var I;(I=this._ctx.monitor)===null||I===void 0||I.report("rtc_invoke_status",{sdk_api_name:"initVideoEncodedTransform",message:"using legacy EncodedTransform",error_code:0,stream_id:this.streamId,elapse:0});const{receiver:C}=this.videoTransceiver,{readable:Q,writable:B}=C.createEncodedStreams();Q.pipeThrough(Hz(E=>{this.safeEmit("onSEIMessage",E.payload)})).pipeTo(B)}else if(hv()){var g;(g=this._ctx.monitor)===null||g===void 0||g.report("rtc_invoke_status",{sdk_api_name:"initVideoEncodedTransform",message:"using standard EncodedTransform",error_code:0,stream_id:this.streamId,elapse:0});const C=new D9A,Q=new MessageChannel;this.videoTransceiver.receiver.transform=new RTCRtpScriptTransform(C,{port:Q.port2},[Q.port2]),Q.port1.onmessage=B=>{this.safeEmit("onSEIMessage",B.data.payload)}}}else this.logger.warn("no receiver found when trying to bind encodedTransform")}initAudioEncodedTransform(){if(lA("DISABLE_ENCODED_TRANSFORM"))return void this.logger.warn("initVideoEncodedTransform","DISABLE_ENCODED_TRANSFORM");if(!this.audioTransceiver||!this.audioTransceiver.receiver)return void this.logger.warn("no receiver found when trying to bind encodedTransform");if(!JE())return void this.logger.warn("legacy EncodedTransform is not supported");const{receiver:I}=this.audioTransceiver,{readable:g,writable:C}=I.createEncodedStreams();g.pipeThrough(new TransformStream({transform:(Q,B)=>{Q.data.byteLength<=1e3?B.enqueue(Q):this.logger.print("too large audio frame",Q.data.byteLength)}})).pipeTo(C)}ontrack(I){var g;try{AI(this.engineId,"Stream.ontrack",JSON.stringify({uid:this.userId,streamId:this.streamId,streams:I.streams.reduce((Q,B)=>Q+A1(B),""),transceiver:C1(I.transceiver),track:KQ(I.track)}),0,this.streamId||"")}catch{}if(this.enableVendorMode||(g=I.streams)!==null&&g!==void 0&&(g=g[0])!==null&&g!==void 0&&(g=g.id)!==null&&g!==void 0&&g.includes(this.streamId)){var C;const{track:Q}=I;(Q==null?void 0:Q.kind)==="video"?this._setVideoTrack(Q):((C=I.track)===null||C===void 0?void 0:C.kind)==="audio"&&this._setAudioTrack(Q),this._setStream(I.streams[0])}this.safeEmit("ontrack",I)}startVideoStallObserve(I){this.logger.info("startVideoStallObserve","invoke",I.playerId),this._videoStallObserver||(this._videoStallObserver=new _lA(this.isScreen,this.engineId)),this._videoStallObserver.start(I)}stopVideoStallObserve(){var I;this.logger.info("stopVideoStallObserve","invoke"),(I=this._videoStallObserver)===null||I===void 0||I.stop()}updateVideoStallInfo(I,g,C){let Q;var B;if(C?(Q=(B=this._videoStallObserver)===null||B===void 0?void 0:B.getStallInfo({interval:I.stats_interval||0,bitrate:I.bitrate,frameRateDecoded:I.frame_rate_decoded,frameRateReceived:I.frame_rate_received}),this._installInfo=Q):Q=this._installInfo,Q){const i=Math.min(Q.report.stallDuration,I.stats_interval||0);if(I.play_time=Q.pts,I.stall_count=Q.report.stallCount,I.is_screen?I.stuck_length=i:I.stall_duration=i,I.pause_duration=Math.min(i,Q.pauseDuration),g.stallCount=Q.callback.stallCount,g.stallDuration=Q.callback.stallDuration,Q.stall100ms){const e=Math.min(Q.stall100ms.duration,I.stats_interval||0);I.stall_duration_100ms=e,I.stall_count_100ms=Q.stall100ms.count,g.stallDuration100MS=e,g.stallCount100MS=Q.stall100ms.count}var E;(Q.report.stallCount!==0||Q.report.stallDuration!==0)&&this.logger.print("video_stall_report",this.userId,(E=this.videoTrack)===null||E===void 0?void 0:E.observingPlayerId,JSON.stringify(Q.report),C)}}getVideoRenderInfo(){var I;return((I=this._videoStallObserver)===null||I===void 0?void 0:I.getRecentRenderInfo4Report())||{}}stopAudioStallObserve(){var I;this.logger.info("stopAudioStallObserve","invoke"),(I=this._audioStallObserver)===null||I===void 0||I.stop()}async updateAudioStallInfo(I,g,C){if(this._audioStallObserver){const Q=await this._audioStallObserver.getAudioStallInfo();return I.concealedSamples===I.interval_concealed_samples&&I.totalSamplesReceived===I.interval_samples_received?(I.stall_count=0,I.stall_duration=0,g.stallCount=0,g.stallDuration=0):(I.stall_count=Q.report.stall_count,I.stall_duration=Q.report.stall_duration,g.stallCount=Q.callback.stall_count,g.stallDuration=Q.callback.stall_duration),Q.report.stall_count===0&&Q.report.stall_duration===0||this.logger.print("audio_stall_report",this.userId,JSON.stringify(R(R({},Q.report),{},{callbackList:Q.callback.list}))),Q.extra}this._audioStallObserver=new BC(this),this._audioStallObserver.start(C.concealedSamples,C.totalSamplesReceived),this.logger.print("startAduioObserver","start")}resetStream(){var I,g;(I=this.audioTransceiver)===null||I===void 0||I.stop(),(g=this.videoTransceiver)===null||g===void 0||g.stop(),this.audioTransceiver=void 0,this.videoTransceiver=void 0}clean(){var I,g;this.logger.info("clean","exec stream.clean ".concat(this.streamId," ").concat(this.userId)),AI(this.engineId,"remotestream_clean","".concat(new Error().stack),0,this.streamId),super.destroy(),this.subAudio=!1,this.subVideo=!1,this.sequenceId=0,(I=this.videoTrack)===null||I===void 0||I.destroy(),this.videoTrack=void 0,(g=this.audioTrack)===null||g===void 0||g.destroy(),this.audioTrack=void 0,this.stream=void 0,this.recordedVideoFrames=void 0,delete this.priority}destroy(){var I,g;this.clean(),(I=this._audioStallObserver)===null||I===void 0||I.destroy(),delete this._audioStallObserver,(g=this._videoStallObserver)===null||g===void 0||g.destroy(),delete this._videoStallObserver,this.attributes={audiostream:!1,localaudio:!1,localvideo:!1,videostream:!1,extvideo:!1,extaudio:!1,videoDescriptions:[]},super.removeAllListeners()}resetHasSubscribed(){this.streamState=0}_setStream(I){this.stream=I,I.onaddtrack=g=>{g.track.kind==="video"?this._setVideoTrack(g.track):g.track.kind==="audio"&&this._setAudioTrack(g.track)}}_setAudioTrack(I){var g;if(((g=this.audioTrack)===null||g===void 0||(g=g.preprocessingTrack)===null||g===void 0?void 0:g.id)!==I.id){this.audioTrack=Xz(this._ctx,I,{streamIndex:this.isPublic?LI.PUBLIC:this.virtual?LI.VIRTUAL:this.isScreen?LI.SCREEN:LI.MAIN,streamUserId:this.userId});const Q=this._ctx._remoteAudioTrackDumpConfig[this.isScreen?Xs.STREAM_INDEX_SCREEN:Xs.STREAM_INDEX_MAIN].get(this.userId);var C;Q!=null&&Q.callback&&Q!=null&&Q.frameSize&&((C=this.audioTrack)===null||C===void 0||C.setDataFetcher(Q.frameSize,B=>{var E;this.audioHasCapture&&this.audioHasPublish&&((E=Q.callback)===null||E===void 0||E.call(Q,B))})),this.emit("ontrack",this.audioTrack)}}_setVideoTrack(I){var g;((g=this.videoTrack)===null||g===void 0||(g=g.preprocessingTrack)===null||g===void 0?void 0:g.id)!==I.id&&(this.videoTrack=c9A(this._ctx,I,this,{streamIndex:this.isPublic?LI.PUBLIC:this.virtual?LI.VIRTUAL:this.isScreen?LI.SCREEN:LI.MAIN,streamUserId:this.userId}),this.emit("ontrack",this.videoTrack))}}var $=(A=>(A.RESUBSCRIBE="resubscribe",A.STREAM_FAILED="stream_failed",A.SUBSCRIBE_PUSH_TRACK="subscribe_push_track",A.REMOVE_PUSH_TRACK="remove_push_track",A.VIDEO_FIRST_FRAME="video_first_frame",A.ON_USER_PUBLISH_STATE_CHANGE="on_user_publish_state_change",A.ON_USER_START_AUDIO_CAPTURE="on_user_start_audio_capture",A.ON_USER_STOP_AUDIO_CAPTURE="on_user_stop_audio_capture",A.ON_USER_START_VIDEO_CAPTURE="on_user_start_video_capture",A.ON_USER_STOP_VIDEO_CAPTURE="on_user_stop_video_capture",A.ON_SEI_MESSAGED_RECEIVED="on_sei_messaged_received",A.ON_PUBLISH_RESULT="on_publish_result",A.ON_SUBSCRIBE_RESULT="ON_SUBSCRIBE_RESULT",A.ON_UPDATE_TOKEN_SUCCESS="on_update_token_success",A.ON_REMOTE_STREAM_STATS="ON_REMOTE_STREAM_STATS",A.ON_LOCAL_STREAM_STATS="ON_LOCAL_STREAM_STATS",A.ON_USER_LEAVE="on_user_leave",A.ON_ROOM_ERROR="on_room_error",A.ON_NETWORK_QUALITY="on_network_quality",A.ON_SIMULCAST_SUBSCRIBE_FALLBACK="on_simulcast_subscribe_fallback",A.ON_REMOTE_VIDEO_SIZE_CHANGED="on_remote_video_size_changed",A.ON_SUBTITLE_STATE_CHANGED="ON_SUBTITLE_STATE_CHANGED",A.ON_SUBTITLE_MESSAGE_RECEIVED="ON_SUBTITLE_MESSAGE_RECEIVED",A.ON_VIDEO_STREAM_BANNED="ON_VIDEO_STREAM_BANNED",A.ON_AUDIO_STREAM_BANNED="ON_AUDIO_STREAM_BANNED",A.ON_FORWARD_STREAM_ERROR="ON_FORWARD_STREAM_ERROR",A.ON_REJOIN_WITH_TCP="ON_REJOIN_WITH_TCP",A.PUB_RETRY="PUB_RETRY",A.SUB_RETRY="SUB_RETRY",A.VIDEO_TYPE_CHANGE="VIDEO_TYPE_CHANGE",A.JOIN_SUCCESS="JOIN_SUCCESS",A.UPDATE_PUBLISH="UPDATE_PUBLISH",A))($||{}),wQ=(A=>(A[A.START=1]="START",A[A.START_SUCCESS=2]="START_SUCCESS",A[A.START_FAILED=3]="START_FAILED",A[A.UPDATE=4]="UPDATE",A[A.UPDATE_SUCCESS=5]="UPDATE_SUCCESS",A[A.UPDATE_FAILED=6]="UPDATE_FAILED",A[A.STOP=7]="STOP",A[A.STOP_SUCCESS=8]="STOP_SUCCESS",A[A.STOP_FAILED=9]="STOP_FAILED",A))(wQ||{}),wC=(A=>(A[A.PUB=0]="PUB",A[A.UNPUB=1]="UNPUB",A))(wC||{});const kY=async(A,I,g,C)=>{try{var Q,B,E,i;let s="",v=-1;const r=I==="video"?g==null||(Q=g.videoTrack)===null||Q===void 0?void 0:Q.originTrack:g==null||(B=g.audioTrack)===null||B===void 0?void 0:B.originTrack,n=I==="video"?g==null||(E=g.videoTransceiver)===null||E===void 0?void 0:E.receiver:g==null||(i=g.audioTransceiver)===null||i===void 0?void 0:i.receiver;try{var e,o;const a=await((e=A.peerConnection)===null||e===void 0?void 0:e.getStatsWithLowFrequency(r,!0,n)),c=(a||[]).find(D=>D.type==="inbound-rtp"),d=await(n==null?void 0:n.getStats()),l=[];let h;var t;d==null||d.forEach(D=>l.push(D.type)),(a==null?void 0:a.length)===0&&l.length!==0&&(h=await((t=A.peerConnection)===null||t===void 0?void 0:t.getStatsWithLowFrequency(void 0,void 0,n))),s=JSON.stringify({type:I,reports:a.map(D=>D.type),reports2:l,pc:((o=A.peerConnection)===null||o===void 0?void 0:o.getOriginRTCPeerConnection())||null,track:(r==null?void 0:r.id)||null,bytes:c==null?void 0:c.bytesReceived,framesReceived:c==null?void 0:c.framesReceived,packetsReceived:c==null?void 0:c.packetsReceived,allReports:h})}catch(a){v=-999,s=a.mseeage||JSON.stringify(a)}C==null||C.report("rtc_invoke_status",{sdk_api_name:"first_frame_recv_timeout",error_code:v,message:s,stream_id:(g==null?void 0:g.streamId)||"",stream_user_id:g==null?void 0:g.userId,elapse:0})}catch{}},pY=async(A,I,g,C)=>{try{var Q,B,E,i;let s="",v=-1;const r=I==="video"?g==null||(Q=g.videoTrack)===null||Q===void 0?void 0:Q.preprocessingTrack:g==null||(B=g.audioTrack)===null||B===void 0?void 0:B.preprocessingTrack,n=I==="video"?g==null||(E=g.videoTransceiver)===null||E===void 0?void 0:E.sender:g==null||(i=g.audioTransceiver)===null||i===void 0?void 0:i.sender;try{var e,o;const a=await((e=A.peerConnection)===null||e===void 0?void 0:e.getStatsWithLowFrequency(r,!0,n)),c=(a||[]).find(D=>D.type==="outbound-rtp"),d=await(n==null?void 0:n.getStats()),l=[];let h;var t;d==null||d.forEach(D=>l.push(D.type)),a.length===0&&l.length!==0&&(h=await((t=A.peerConnection)===null||t===void 0?void 0:t.getStatsWithLowFrequency(void 0,void 0,n))),s=JSON.stringify({type:I,reports:a.map(D=>D.type),reports2:l,pc:((o=A.peerConnection)===null||o===void 0?void 0:o.getOriginRTCPeerConnection())||null,track:(r==null?void 0:r.id)||null,bytes:c==null?void 0:c.bytesSent,framesSent:c==null?void 0:c.framesSent,packetsSent:c==null?void 0:c.packetsSent,allReports:h})}catch(a){v=-999,s=a.mseeage||JSON.stringify(a)}C==null||C.report("rtc_invoke_status",{sdk_api_name:"first_frame_send_timeout",error_code:v,message:s,stream_id:(g==null?void 0:g.streamId)||"",stream_user_id:g==null?void 0:g.userId,elapse:0})}catch{}};class qz extends UB.EventEmitter{constructor(I,g){super(),P(this,"_audioEventSessionId",Oa()),P(this,"_videoEventSessionId",Oa()),P(this,"_stream",void 0),P(this,"_firstAudioFrameTimer",void 0),P(this,"_firstVideoFrameTimer",void 0),P(this,"_transportDelayInterval",void 0),P(this,"_transportDelay",void 0),P(this,"_firstVideoFrameInterval",void 0),P(this,"_firstAudioFrameInterval",void 0),P(this,"_isScreen",!1),P(this,"_audioFirstFrameState",0),P(this,"_videoFirstFrameState",0),P(this,"_timeout",1e4),P(this,"_currentAudioRecv",{startTime:0,eventSessionId:0,type:"login"}),P(this,"_currentVideoRecv",{startTime:0,eventSessionId:0,type:"login"}),P(this,"_login",!1),P(this,"_unMuteAudio",!1),P(this,"_enableAudio",!1),P(this,"_unMuteVideo",!1),P(this,"_enableVideo",!1),P(this,"_remoteUnmuteAudio",!1),P(this,"_remoteUnmuteVideo",!1),P(this,"_audioExternal",!1),P(this,"_pushAudio",!1),P(this,"_videoExternal",!1),P(this,"_pushVideo",!1),P(this,"_autoSubscribeVideo",!1),P(this,"_autoSubscribeAudio",!1),P(this,"_autoSubscribe",!1),P(this,"_publishVideo",!1),P(this,"_publishAudio",!1),P(this,"_subscribeAudio",!1),P(this,"_subscribeVideo",!1),P(this,"_subscribe",!1),P(this,"_pushTrack",!1),P(this,"_multiChatMode",!1),P(this,"_monitor",void 0),P(this,"logger",void 0),this._ctx=I,this._stream=g,this.getTransportDelay(),this._monitor=tI(g.engineId),this.logger=new uA("RecvFrameObserver",0,g.engineId)}async beginRecvFrame(I,g){await this.getTransportDelay();let C=this._transportDelay,Q=!0;if(["login","unmute","subscribe","push_track"].indexOf(g)>=0&&(C=0,Q=!1),I==="audio"){var B,E,i,e,o,t,s,v;Q||this._audioEventSessionId++,this._currentAudioRecv={startTime:Date.now(),eventSessionId:this._audioEventSessionId,type:g};const u={media_type:I,event_type:"begin_recv",type:g,is_screen:!((B=this._stream)===null||B===void 0||!B.isScreen),start:(E=this._currentAudioRecv)===null||E===void 0?void 0:E.startTime,event_session_id:this._audioEventSessionId,stream_user_id:(i=this._stream)===null||i===void 0?void 0:i.userId,transport_delay:C,vendor_mode:((e=this._stream)===null||e===void 0?void 0:e.vendorCode)||0,pc_session_id:((o=this._stream)===null||o===void 0?void 0:o.pcSessionId)||((t=this._ctx.peerConnection)===null||t===void 0?void 0:t.getConnectionId()),remote_rtc_session_id:(s=this._stream)===null||s===void 0?void 0:s.remoteSessionId};this._firstAudioFrameTimer&&window.clearTimeout(this._firstAudioFrameTimer),this._firstAudioFrameTimer=setTimeout(()=>{kY(this._ctx,"audio",this._stream,this._monitor),this.stopRecvFrame("audio","timeout"),this._firstAudioFrameInterval&&window.clearInterval(this._firstAudioFrameInterval)},this._timeout),this.logger.info("rtcFirstFrameRecv",JSON.stringify(u)),(v=this._monitor)===null||v===void 0||v.report("rtc_first_frame",u),this._watchForFirstAudioFrameRecv(),this._audioFirstFrameState=1,this._login=!0,this._unMuteAudio=!0,this._enableAudio=!0,this._remoteUnmuteAudio=!0}else if(I==="video"){var r,n,a,c,d,l,h,D;Q||this._videoEventSessionId++,this._currentVideoRecv={startTime:Date.now(),eventSessionId:this._videoEventSessionId,type:g};const u={media_type:I,event_type:"begin_recv",type:g,is_screen:!((r=this._stream)===null||r===void 0||!r.isScreen),start:(n=this._currentVideoRecv)===null||n===void 0?void 0:n.startTime,event_session_id:this._videoEventSessionId,stream_user_id:(a=this._stream)===null||a===void 0?void 0:a.userId,transport_delay:C,vendor_mode:((c=this._stream)===null||c===void 0?void 0:c.vendorCode)||0,pc_session_id:((d=this._stream)===null||d===void 0?void 0:d.pcSessionId)||((l=this._ctx.peerConnection)===null||l===void 0?void 0:l.getConnectionId()),remote_rtc_session_id:(h=this._stream)===null||h===void 0?void 0:h.remoteSessionId};this._firstVideoFrameTimer&&window.clearTimeout(this._firstVideoFrameTimer),this._firstVideoFrameTimer=setTimeout(()=>{kY(this._ctx,"video",this._stream,this._monitor),this.stopRecvFrame("video","timeout"),this._firstVideoFrameInterval&&window.clearInterval(this._firstVideoFrameInterval)},this._timeout),this._watchForFirstVideoFrameRecv(),this.logger.info("rtcFirstFrameRecv",JSON.stringify(u)),(D=this._monitor)===null||D===void 0||D.report("rtc_first_frame",u),this._videoFirstFrameState=1,this._login=!0,this._unMuteVideo=!0,this._enableVideo=!0,this._remoteUnmuteVideo=!0}}stopRecvFrame(I,g){if(I==="audio"){var C,Q,B,E,i,e,o,t,s;if(this._audioFirstFrameState!==1)return;const u={event_type:"recv_end",media_type:I,is_screen:!((C=this._stream)===null||C===void 0||!C.isScreen),start:(Q=this._currentAudioRecv)===null||Q===void 0?void 0:Q.startTime,reason:g,result:!1,stream_user_id:(B=this._stream)===null||B===void 0?void 0:B.userId,event_session_id:this._audioEventSessionId,type:(E=this._currentAudioRecv)===null||E===void 0?void 0:E.type,vendor_mode:((i=this._stream)===null||i===void 0?void 0:i.vendorCode)||0,pc_session_id:((e=this._stream)===null||e===void 0?void 0:e.pcSessionId)||((o=this._ctx.peerConnection)===null||o===void 0?void 0:o.getConnectionId()),remote_rtc_session_id:(t=this._stream)===null||t===void 0?void 0:t.remoteSessionId};this._firstAudioFrameTimer&&window.clearTimeout(this._firstAudioFrameTimer),delete this._currentAudioRecv,this.logger.info("rtcFirstFrameRecv",JSON.stringify(u)),(s=this._monitor)===null||s===void 0||s.report("rtc_first_frame",u),this._audioFirstFrameState=2}else if(I==="video"){var v,r,n,a,c,d,l,h,D;if(this._videoFirstFrameState!==1)return;const u={event_type:"recv_end",media_type:I,is_screen:!((v=this._stream)===null||v===void 0||!v.isScreen),start:(r=this._currentVideoRecv)===null||r===void 0?void 0:r.startTime,reason:g,result:!1,stream_user_id:(n=this._stream)===null||n===void 0?void 0:n.userId,event_session_id:this._videoEventSessionId,type:(a=this._currentVideoRecv)===null||a===void 0?void 0:a.type,vendor_mode:((c=this._stream)===null||c===void 0?void 0:c.vendorCode)||0,pc_session_id:((d=this._stream)===null||d===void 0?void 0:d.pcSessionId)||((l=this._ctx.peerConnection)===null||l===void 0?void 0:l.getConnectionId()),remote_rtc_session_id:(h=this._stream)===null||h===void 0?void 0:h.remoteSessionId};this._firstVideoFrameTimer&&window.clearTimeout(this._firstVideoFrameTimer),delete this._currentVideoRecv,this.logger.info("rtcFirstFrameRecv",JSON.stringify(u)),(D=this._monitor)===null||D===void 0||D.report("rtc_first_frame",u),this._videoFirstFrameState=2}}async recvFrameFinish(I){await this.getTransportDelay();let g=this._transportDelay;if(I==="audio"){var C,Q,B,E,i,e,o;if(this._audioFirstFrameState!==1||!this._currentAudioRecv)return;const{type:d,startTime:l}=this._currentAudioRecv;["login","unmute","subscribe","push_track"].indexOf(d)>=0&&(g=0);const h={event_type:"recv_end",media_type:I,start:l,result:!0,is_screen:!((C=this._stream)===null||C===void 0||!C.isScreen),stream_user_id:(Q=this._stream)===null||Q===void 0?void 0:Q.userId,event_session_id:this._audioEventSessionId,type:d,transport_delay:g,vendor_mode:((B=this._stream)===null||B===void 0?void 0:B.vendorCode)||0,pc_session_id:((E=this._stream)===null||E===void 0?void 0:E.pcSessionId)||((i=this._ctx.peerConnection)===null||i===void 0?void 0:i.getConnectionId()),remote_rtc_session_id:(e=this._stream)===null||e===void 0?void 0:e.remoteSessionId};delete this._currentAudioRecv,this._firstAudioFrameTimer&&window.clearTimeout(this._firstAudioFrameTimer),this.logger.info("rtcFirstFrameRecv",JSON.stringify(h)),(o=this._monitor)===null||o===void 0||o.report("rtc_first_frame",h),this.emit("recvAudioFirstFrame"),this._audioFirstFrameState=3}else if(I==="video"){var t,s,v,r,n,a,c;if(this._videoFirstFrameState!==1||!this._currentVideoRecv)return;const{type:d,startTime:l}=this._currentVideoRecv;["login","unmute","subscribe","push_track"].indexOf(d)>=0&&(g=0);const h={event_type:"recv_end",media_type:I,is_screen:!((t=this._stream)===null||t===void 0||!t.isScreen),start:l,result:!0,stream_user_id:(s=this._stream)===null||s===void 0?void 0:s.userId,event_session_id:this._videoEventSessionId,type:d,transport_delay:g,vendor_mode:((v=this._stream)===null||v===void 0?void 0:v.vendorCode)||0,pc_session_id:((r=this._stream)===null||r===void 0?void 0:r.pcSessionId)||((n=this._ctx.peerConnection)===null||n===void 0?void 0:n.getConnectionId()),remote_rtc_session_id:(a=this._stream)===null||a===void 0?void 0:a.remoteSessionId};delete this._currentVideoRecv,this._firstVideoFrameTimer&&window.clearTimeout(this._firstVideoFrameTimer),this.logger.info("rtcFirstFrameRecv",JSON.stringify(h)),(c=this._monitor)===null||c===void 0||c.report("rtc_first_frame",h),this.emit("recvVideoFirstFrame"),this._videoFirstFrameState=3}}setLogin(I){var g,C,Q,B;let E=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{audio:!0,video:!0};this._login!==I&&(this._login=I,I&&(g=this._stream)!==null&&g!==void 0&&g.hasAudio&&E.audio&&this.beginRecvFrame("audio","login"),I&&(C=this._stream)!==null&&C!==void 0&&C.hasVideo&&E.video&&this.beginRecvFrame("video","login"),!I&&(Q=this._stream)!==null&&Q!==void 0&&Q.hasAudio&&this.stopRecvFrame("audio","leave_room"),!I&&(B=this._stream)!==null&&B!==void 0&&B.hasVideo&&this.stopRecvFrame("video","leave_room"))}setUnmuteAudio(I){var g,C,Q;if(this._unMuteAudio===I)return;this._unMuteAudio=I;const B=!((g=this._stream)===null||g===void 0||!g.hasAudio);(C=this._stream)!==null&&C!==void 0&&C.audioHasCapture&&(Q=this._stream)!==null&&Q!==void 0&&Q.audioHasPublish&&(this._unMuteAudio&&B?this.beginRecvFrame("audio","unmute"):B&&this.stopRecvFrame("audio","mute"))}setRemoteUnmuteAudio(I){this._remoteUnmuteAudio!==I&&(this._remoteUnmuteAudio=I,this._remoteUnmuteAudio?this.beginRecvFrame("audio","remote_unmute"):this.stopRecvFrame("audio","remote_mute"))}setEnableAudio(I){this._enableAudio!==I&&(this._enableAudio=I,this._enableAudio?this.beginRecvFrame("audio","enable"):this.stopRecvFrame("audio","disable"))}setUnmuteVideo(I){var g,C,Q;if(this._unMuteVideo===I)return;this._unMuteVideo=I;const B=!((g=this._stream)===null||g===void 0||!g.hasVideo);(C=this._stream)!==null&&C!==void 0&&C.videoHasCapture&&(Q=this._stream)!==null&&Q!==void 0&&Q.videoHasPublish&&(this._unMuteVideo&&B?this.beginRecvFrame("video","unmute"):B&&this.stopRecvFrame("video","mute"))}setRemoteUnmuteVideo(I){this._remoteUnmuteVideo!==I&&(this._remoteUnmuteVideo=I,this._remoteUnmuteVideo?this.beginRecvFrame("video","remote_unmute"):this.stopRecvFrame("video","remote_mute"))}setEnableVideo(I){this._enableVideo!==I&&(this._enableVideo=I,this._enableVideo?this.beginRecvFrame("video","enable"):this.stopRecvFrame("video","disable"))}setExternalAudioSource(I){this._audioExternal=I}setPushAudio(I){var g;this._audioExternal&&this._pushAudio!==I&&(this._pushAudio=I),this._pushAudio&&this.beginRecvFrame("audio","push"),!I&&(g=this._stream)!==null&&g!==void 0&&g.hasAudio&&this.stopRecvFrame("audio","stop_push")}setExternalVideoSource(I){this._videoExternal=I}setPushVideo(I){var g;this._videoExternal&&this._pushVideo!==I&&(this._pushVideo=I),this._pushVideo&&this.beginRecvFrame("video","push"),!I&&(g=this._stream)!==null&&g!==void 0&&g.hasVideo&&this.stopRecvFrame("video","stop_push")}setPublishVideo(I){var g;this._publishVideo!==I&&(this._publishVideo=I),this._publishVideo&&this.beginRecvFrame("video","publish"),!I&&(g=this._stream)!==null&&g!==void 0&&g.hasVideo&&this.stopRecvFrame("video","unpublish")}setPublishAudio(I){var g;this._publishAudio!==I&&(this._publishAudio=I),this._publishAudio&&this.beginRecvFrame("audio","publish"),!I&&(g=this._stream)!==null&&g!==void 0&&g.hasAudio&&this.stopRecvFrame("audio","unpublish")}setAutoSubscribe(I){this._autoSubscribe=I}setAutoSubscribeVideo(I){this._autoSubscribeVideo=I}setAutoSubscribeAudio(I){this._autoSubscribeAudio=I}setSubscribeAudio(I){var g,C;this._autoSubscribeAudio||this._subscribeAudio===I||(this._subscribe=I,I&&(C=this._stream)!==null&&C!==void 0&&C.hasAudio&&this.beginRecvFrame("audio","subscribe")),!I&&(g=this._stream)!==null&&g!==void 0&&g.hasAudio&&this.stopRecvFrame("audio","unsubscribe")}setSubscribeVideo(I){var g,C;this._autoSubscribeVideo||this._subscribeVideo===I||(this._subscribeVideo=I,I&&(C=this._stream)!==null&&C!==void 0&&C.hasVideo&&this.beginRecvFrame("video","subscribe")),!I&&(g=this._stream)!==null&&g!==void 0&&g.hasVideo&&this.stopRecvFrame("video","unsubscribe")}setPushTrack(I){var g;this._pushTrack!==I&&(this._pushTrack=I,I&&!this._isScreen&&this.beginRecvFrame("audio","push_track"),!I&&(g=this._stream)!==null&&g!==void 0&&g.hasAudio&&this.stopRecvFrame("audio","remove_track"))}setMultiChatMode(I){this._multiChatMode=I}setTimeout(I){this._timeout=I}_watchForFirstVideoFrameRecv(){let I=-1,g=-1;this._firstVideoFrameInterval&&window.clearInterval(this._firstVideoFrameInterval),this._firstVideoFrameInterval=window.setInterval(async()=>{var C,Q,B;const E=(C=(Q=this._stream)===null||Q===void 0||(Q=Q.vendorHandler)===null||Q===void 0?void 0:Q.peer)!==null&&C!==void 0?C:this._ctx.peerConnection;if(E&&(B=this._stream)!==null&&B!==void 0&&(B=B.videoTrack)!==null&&B!==void 0&&B.preprocessingTrack){var i,e;const o=(i=this._stream.videoTransceiver)===null||i===void 0?void 0:i.receiver,t=(await E.getStatsWithLowFrequency((e=this._stream)===null||e===void 0||(e=e.videoTrack)===null||e===void 0?void 0:e.preprocessingTrack,!0,o)).find(s=>s.type==="inbound-rtp");if(t&&(t.framesReceived>I||t.packetsReceived>g)){if(I===-1&&g===-1)return I=t.framesReceived,void(g=t.packetsReceived);this.recvFrameFinish("video"),window.clearInterval(this._firstVideoFrameInterval)}}},200)}_watchForFirstAudioFrameRecv(){let I=-1,g=-1;this._firstAudioFrameInterval&&window.clearInterval(this._firstAudioFrameInterval),this._firstAudioFrameInterval=window.setInterval(async()=>{var C,Q,B;const E=(C=(Q=this._stream)===null||Q===void 0||(Q=Q.vendorHandler)===null||Q===void 0?void 0:Q.peer)!==null&&C!==void 0?C:this._ctx.peerConnection;if(E&&(B=this._stream)!==null&&B!==void 0&&(B=B.audioTrack)!==null&&B!==void 0&&B.originTrack){var i;const e=(await E.getStatsWithLowFrequency((i=this._stream)===null||i===void 0||(i=i.audioTrack)===null||i===void 0?void 0:i.originTrack)).find(o=>o.type==="inbound-rtp");if(e&&(e.totalSamplesReceived>I||e.packetsReceived>g)){if(I===-1&&g===-1)return I=e.totalSamplesReceived,void(g=e.packetsReceived);this.recvFrameFinish("audio"),window.clearInterval(this._firstAudioFrameInterval)}}},200)}async getTransportDelay(){await this.getTransportDelayIntl(),window.clearInterval(this._transportDelayInterval),this._transportDelayInterval=window.setInterval(async()=>{await this.getTransportDelayIntl()},2e3)}async getTransportDelayIntl(){const I=this._ctx.peerConnection;if(I){var g;const C=(g=this._stream)===null||g===void 0||(g=g.videoTransceiver)===null||g===void 0?void 0:g.receiver,Q=await I.getStatsWithLowFrequency(void 0,!0,C),B=Q.find(i=>i.type==="transport"&&i.dtlsState==="connected"),E=Q.find(i=>i.type==="candidate-pair"&&i.state==="succeeded"&&i.id===(B==null?void 0:B.selectedCandidatePairId));E&&(this._transportDelay=Math.round(1e3*E.currentRoundTripTime/2))}}setDisconnect(){this.stopRecvFrame("audio","connection_lost"),this.stopRecvFrame("video","connection_lost"),this.reset()}reset(){this._currentAudioRecv={startTime:0,eventSessionId:0,type:"login"},this._currentVideoRecv={startTime:0,eventSessionId:0,type:"login"},this._login=!1,this._unMuteAudio=!1,this._enableAudio=!1,this._unMuteVideo=!1,this._remoteUnmuteAudio=!1,this._remoteUnmuteVideo=!1,this._enableVideo=!1,this._audioExternal=!1,this._pushAudio=!1,this._videoExternal=!1,this._pushVideo=!1,this._autoSubscribeVideo=!1,this._autoSubscribeAudio=!1,this._autoSubscribe=!1,this._subscribeAudio=!1,this._subscribeVideo=!1,this._subscribe=!1,this._pushTrack=!1,this._multiChatMode=!1,this._firstAudioFrameTimer&&window.clearTimeout(this._firstAudioFrameTimer),this._firstVideoFrameTimer&&window.clearTimeout(this._firstVideoFrameTimer),this._firstAudioFrameInterval&&window.clearInterval(this._firstAudioFrameInterval),this._firstVideoFrameInterval&&window.clearInterval(this._firstVideoFrameInterval),this._transportDelayInterval&&window.clearInterval(this._transportDelayInterval)}get audioFirstFrameReceived(){return this._audioFirstFrameState===3}get FirstFrameReceived(){return this._audioFirstFrameState===3}}class Ww{constructor(I,g){P(this,"_audioEventSessionId",Oa()),P(this,"_videoEventSessionId",Oa()),P(this,"_pcSessionId",void 0),P(this,"_firstAudioFrameTimer",void 0),P(this,"_firstVideoFrameTimer",void 0),P(this,"_stream",void 0),P(this,"_firstVideoFrameInterval",void 0),P(this,"_firstAudioFrameInterval",void 0),P(this,"_currentAudioSend",{startTime:0,eventSessionId:0,type:"login"}),P(this,"_currentVideoSend",{startTime:0,eventSessionId:0,type:"login"}),P(this,"_login",!1),P(this,"_publisher",!1),P(this,"_unMuteAudio",!1),P(this,"_enableAudio",!1),P(this,"_unMuteVideo",!1),P(this,"_enableVideo",!1),P(this,"_audioExternal",!1),P(this,"_pushAudio",!1),P(this,"_videoExternal",!1),P(this,"_pushVideo",!1),P(this,"_autoPublish",!1),P(this,"_publish",!1),P(this,"_timeout",1e4),P(this,"_audioFirstFrameState",0),P(this,"_videoFirstFrameState",0),P(this,"_monitor",void 0),P(this,"logger",void 0),this._ctx=I,this._stream=g,this._monitor=tI(g.engineId),this.logger=new uA("SendFrameObserver",0,g.engineId)}beginSendFrame(I,g){if(I==="audio"){var C,Q,B,E,i,e;this._audioEventSessionId++,this._currentAudioSend={startTime:Date.now(),eventSessionId:this._audioEventSessionId,type:g};const a={event_type:"begin_send",media_type:I,is_screen:!((C=this._stream)===null||C===void 0||!C.isScreen),type:g,start:this._currentAudioSend.startTime,event_session_id:this._audioEventSessionId,vendor_mode:((Q=this._stream)===null||Q===void 0?void 0:Q.vendorCode)||0,pc_session_id:((B=this._stream)===null||B===void 0?void 0:B.pcSessionId)||((E=this._ctx.peerConnection)===null||E===void 0?void 0:E.getConnectionId()),capture_session_id:(i=this._stream)===null||i===void 0||(i=i.audioTrack)===null||i===void 0?void 0:i.captureSessionId};this._firstAudioFrameTimer&&window.clearTimeout(this._firstAudioFrameTimer),this._firstAudioFrameTimer=setTimeout(()=>{pY(this._ctx,"audio",this._stream,this._monitor),this.stopSendFrame("audio","timeout"),this._firstAudioFrameInterval&&window.clearInterval(this._firstAudioFrameInterval)},this._timeout),this.logger.info("rtcFirstFrameSend",JSON.stringify(a)),(e=this._monitor)===null||e===void 0||e.report("rtc_first_frame",a),this._watchForFirstAudioFrameSend(),this._audioFirstFrameState=1,this._login=!0,this._publisher=!0,this._publish=!0,this._unMuteAudio=!0,this._pushAudio||(this._enableAudio=!0)}else if(I==="video"){var o,t,s,v,r,n;this._videoEventSessionId++,this._currentVideoSend={startTime:Date.now(),eventSessionId:this._videoEventSessionId,type:g};const a={event_type:"begin_send",media_type:I,is_screen:!((o=this._stream)===null||o===void 0||!o.isScreen),type:g,start:this._currentVideoSend.startTime,event_session_id:this._videoEventSessionId,vendor_mode:((t=this._stream)===null||t===void 0?void 0:t.vendorCode)||0,pc_session_id:((s=this._stream)===null||s===void 0?void 0:s.pcSessionId)||((v=this._ctx.peerConnection)===null||v===void 0?void 0:v.getConnectionId()),capture_session_id:(r=this._stream)===null||r===void 0||(r=r.videoTrack)===null||r===void 0?void 0:r.captureSessionId};this._firstVideoFrameTimer&&window.clearTimeout(this._firstVideoFrameTimer),this._firstVideoFrameTimer=setTimeout(()=>{pY(this._ctx,"video",this._stream,this._monitor),this.stopSendFrame("video","timeout"),this._firstVideoFrameInterval&&window.clearInterval(this._firstVideoFrameInterval)},this._timeout),this._watchForFirstVideoFrameSend(),this.logger.info("rtcFirstFrameSend",JSON.stringify(a)),(n=this._monitor)===null||n===void 0||n.report("rtc_first_frame",a),this._videoFirstFrameState=1,this._login=!0,this._publisher=!0,this._publish=!0,this._unMuteVideo=!0,this._pushVideo||(this._enableVideo=!0)}}stopSendFrame(I,g){if(I==="audio"){var C,Q,B,E,i,e,o,t;if(this._audioFirstFrameState!==1)return;const h={event_type:"sent_end",media_type:I,is_screen:!((C=this._stream)===null||C===void 0||!C.isScreen),start:(Q=this._currentAudioSend)===null||Q===void 0?void 0:Q.startTime,reason:g,result:!1,event_session_id:this._audioEventSessionId,type:(B=this._currentAudioSend)===null||B===void 0?void 0:B.type,vendor_mode:((E=this._stream)===null||E===void 0?void 0:E.vendorCode)||0,pc_session_id:((i=this._stream)===null||i===void 0?void 0:i.pcSessionId)||((e=this._ctx.peerConnection)===null||e===void 0?void 0:e.getConnectionId()),capture_session_id:(o=this._stream)===null||o===void 0||(o=o.audioTrack)===null||o===void 0?void 0:o.captureSessionId};this._firstAudioFrameTimer&&window.clearTimeout(this._firstAudioFrameTimer),delete this._currentAudioSend,this.logger.info("rtcFirstFrameSend",JSON.stringify(h)),(t=this._monitor)===null||t===void 0||t.report("rtc_first_frame",h),this._audioFirstFrameState=2}else if(I==="video"){var s,v,r,n,a,c,d,l;if(this._videoFirstFrameState!==1)return;const h={event_type:"sent_end",media_type:I,start:(s=this._currentVideoSend)===null||s===void 0?void 0:s.startTime,is_screen:!((v=this._stream)===null||v===void 0||!v.isScreen),reason:g,result:!1,event_session_id:this._videoEventSessionId,type:(r=this._currentVideoSend)===null||r===void 0?void 0:r.type,vendor_mode:((n=this._stream)===null||n===void 0?void 0:n.vendorCode)||0,pc_session_id:((a=this._stream)===null||a===void 0?void 0:a.pcSessionId)||((c=this._ctx.peerConnection)===null||c===void 0?void 0:c.getConnectionId()),capture_session_id:(d=this._stream)===null||d===void 0||(d=d.videoTrack)===null||d===void 0?void 0:d.captureSessionId};this._firstVideoFrameTimer&&window.clearTimeout(this._firstVideoFrameTimer),delete this._currentVideoSend,this.logger.info("rtcFirstFrameSend",JSON.stringify(h)),(l=this._monitor)===null||l===void 0||l.report("rtc_first_frame",h),this._videoFirstFrameState=2}}sendFrameFinish(I){if(I==="audio"){var g,C,Q,B,E,i;if(this._audioFirstFrameState!==1||!this._currentAudioSend)return;const{type:n,startTime:a}=this._currentAudioSend,c={event_type:"sent_end",media_type:I,is_screen:!((g=this._stream)===null||g===void 0||!g.isScreen),start:a,result:!0,event_session_id:this._audioEventSessionId,type:n,vendor_mode:((C=this._stream)===null||C===void 0?void 0:C.vendorCode)||0,pc_session_id:((Q=this._stream)===null||Q===void 0?void 0:Q.pcSessionId)||((B=this._ctx.peerConnection)===null||B===void 0?void 0:B.getConnectionId()),capture_session_id:(E=this._stream)===null||E===void 0||(E=E.audioTrack)===null||E===void 0?void 0:E.captureSessionId};delete this._currentAudioSend,this._firstAudioFrameTimer&&window.clearTimeout(this._firstAudioFrameTimer),this.logger.info("rtcFirstFrameSend",JSON.stringify(c)),(i=this._monitor)===null||i===void 0||i.report("rtc_first_frame",c),this._audioFirstFrameState=3}else if(I==="video"){var e,o,t,s,v,r;if(this._videoFirstFrameState!==1||!this._currentVideoSend)return;const{type:n,startTime:a}=this._currentVideoSend,c={event_type:"sent_end",media_type:I,is_screen:!((e=this._stream)===null||e===void 0||!e.isScreen),start:a,result:!0,event_session_id:this._videoEventSessionId,type:n,vendor_mode:((o=this._stream)===null||o===void 0?void 0:o.vendorCode)||0,pc_session_id:((t=this._stream)===null||t===void 0?void 0:t.pcSessionId)||((s=this._ctx.peerConnection)===null||s===void 0?void 0:s.getConnectionId()),capture_session_id:(v=this._stream)===null||v===void 0||(v=v.videoTrack)===null||v===void 0?void 0:v.captureSessionId};delete this._currentVideoSend,this._firstVideoFrameTimer&&window.clearTimeout(this._firstVideoFrameTimer),this.logger.info("rtcFirstFrameSend",JSON.stringify(c)),(r=this._monitor)===null||r===void 0||r.report("rtc_first_frame",c),this._videoFirstFrameState=3}}setLogin(I){if(this._login!==I){var g,C;this._login=I,I&&((g=this._stream)!==null&&g!==void 0&&g.videoTrack&&this._stream.pubVideo&&this.beginSendFrame("video","login"),(C=this._stream)!==null&&C!==void 0&&C.audioTrack&&this._stream.pubAudio&&this.beginSendFrame("audio","login")),!I&&this._audioSending&&this.stopSendFrame("audio","leave_room"),!I&&this._videoSending&&this.stopSendFrame("video","leave_room")}}setPublish(I){if(this._publish!==I){var g,C;this._publish=I,I&&(!((g=this._stream)===null||g===void 0)&&g.videoTrack&&this._stream.pubVideo&&this.beginSendFrame("video","publish"),!((C=this._stream)===null||C===void 0)&&C.audioTrack&&this._stream.pubAudio&&this.beginSendFrame("audio","publish")),!I&&this._audioSending&&this.stopSendFrame("audio","unpublish"),!I&&this._videoSending&&this.stopSendFrame("video","unpublish")}}setUnmuteAudio(I){var g;this._unMuteAudio!==I&&(this._unMuteAudio=I,(g=this._stream)!==null&&g!==void 0&&g.audioHasCapture&&(I&&this.beginSendFrame("audio","unmute"),!I&&this._audioSending&&this.stopSendFrame("audio","mute")))}setEnableAudio(I){var g;this._enableAudio!==I&&(g=this._stream)!==null&&g!==void 0&&g.pubAudio&&(this._enableAudio=I,I&&this.beginSendFrame("audio","enable"),!I&&this._audioSending&&this.stopSendFrame("audio","disable"))}setUnmuteVideo(I){var g;this._unMuteVideo!==I&&(this._unMuteVideo=I,(g=this._stream)!==null&&g!==void 0&&g.videoHasCapture&&(I&&this.beginSendFrame("video","unmute"),!I&&this._videoSending&&this.stopSendFrame("video","mute")))}setEnableVideo(I){var g;this._enableVideo!==I&&(g=this._stream)!==null&&g!==void 0&&g.pubVideo&&(this._enableVideo=I,I&&this.beginSendFrame("video","enable"),!I&&this._videoSending&&this.stopSendFrame("video","disable"))}setPushAudio(I){this._pushAudio!==I&&(this._pushAudio=I,I&&this.beginSendFrame("audio","push"),!I&&this._audioSending&&this.stopSendFrame("audio","stop_push"))}setPushVideo(I){this._pushVideo!==I&&(this._pushVideo=I,I&&this.beginSendFrame("video","push"),!I&&this._videoSending&&this.stopSendFrame("video","stop_push"))}setAutoPublish(I){this._autoPublish=I}setPublisher(I){this._publisher!==I&&(this._publisher=I,!I&&this._audioSending&&this.stopSendFrame("audio","audience"),!I&&this._videoSending&&this.stopSendFrame("video","audience"))}setDisconnect(){this._audioSending&&this.stopSendFrame("audio","connection_lost"),this._videoSending&&this.stopSendFrame("video","connection_lost"),this.reset()}setTimeout(I){this._timeout=I}setPCSessionId(I){this._pcSessionId=I}async _getFirstVideoFrameStats(){var I,g,C,Q;const B=(I=this._stream)===null||I===void 0||(I=I.videoTrack)===null||I===void 0?void 0:I.preprocessingTrack,E=(g=this._stream)===null||g===void 0||(g=g.videoTransceiver)===null||g===void 0?void 0:g.sender,i=(C=(Q=this._stream)===null||Q===void 0||(Q=Q.vendorHandler)===null||Q===void 0?void 0:Q.peer)!==null&&C!==void 0?C:this._ctx.peerConnection;if(i&&B)return(await i.getStatsWithLowFrequency(B,!0,E)).filter(e=>e.type==="outbound-rtp")}async _getFirstAudioFrameStats(){var I,g,C,Q;const B=(I=this._stream)===null||I===void 0||(I=I.audioTrack)===null||I===void 0?void 0:I.preprocessingTrack,E=(g=this._stream)===null||g===void 0||(g=g.audioTransceiver)===null||g===void 0?void 0:g.sender,i=(C=(Q=this._stream)===null||Q===void 0||(Q=Q.vendorHandler)===null||Q===void 0?void 0:Q.peer)!==null&&C!==void 0?C:this._ctx.peerConnection;if(i&&B)return(await i.getStatsWithLowFrequency(B,!0,E)).find(e=>e.type==="outbound-rtp")}_watchForFirstVideoFrameSend(){let I=-1,g=-1;this._firstVideoFrameInterval&&window.clearInterval(this._firstVideoFrameInterval),this._firstVideoFrameInterval=window.setInterval(async()=>{const C=await this._getFirstVideoFrameStats();let Q=0,B=0;if(C==null||C.map(E=>{Q+=E.framesSent,B+=E.packetsSent}),C&&C.length>0&&(Q>I||B>g)){if(I===-1&&g===-1)return I=Q,void(g=B);this.sendFrameFinish("video"),window.clearInterval(this._firstVideoFrameInterval)}},100)}_watchForFirstAudioFrameSend(){let I=-1;this._firstAudioFrameInterval&&window.clearInterval(this._firstAudioFrameInterval),this._firstAudioFrameInterval=window.setInterval(async()=>{const g=await this._getFirstAudioFrameStats();if(g&&g.packetsSent>I){if(I===-1)return void(I=g.packetsSent);this.sendFrameFinish("audio"),window.clearInterval(this._firstAudioFrameInterval)}},100)}reset(){this._login=!1,this._publisher=!1,this._unMuteAudio=!1,this._enableAudio=!1,this._unMuteVideo=!1,this._enableVideo=!1,this._audioExternal=!1,this._pushAudio=!1,this._videoExternal=!1,this._pushVideo=!1,this._autoPublish=!1,this._publish=!1,this._audioFirstFrameState=0,this._videoFirstFrameState=0,this._currentAudioSend={startTime:0,eventSessionId:0,type:"login"},this._currentVideoSend={startTime:0,eventSessionId:0,type:"login"},window.clearTimeout(this._firstAudioFrameTimer),window.clearTimeout(this._firstVideoFrameTimer),window.clearInterval(this._firstAudioFrameInterval),window.clearInterval(this._firstVideoFrameInterval)}destroy(){this.reset(),delete this._stream}get _audioSending(){return this._audioFirstFrameState===1}get _videoSending(){return this._videoFirstFrameState===1}}const b9A={audio:{delay:1200,stallRadio:.3},video:{delay:1200,stallRadio:.6},screen_audio:{delay:1600,stallRadio:.8},screen_video:{delay:1600,stallRadio:.8}};class y9A{constructor(I){P(this,"_preUplinkStats",new Map),P(this,"_preDownlinkStats",new Map),P(this,"_timer",void 0),P(this,"_delayTimer",void 0),P(this,"reportor",void 0),this._ctx=I}updateUplinkStats(I,g){const{audioStats:C,videoStats:Q,isScreen:B}=I;if(C.sendKBitrate>0&&C.rtt){const E=B?"screen_audio":"audio",{rtt:i,_fractionLost:e,_retransmittedRate:o}=C,t=this._getQosLevel(i,e||0,o||0),s=this._preUplinkStats.get(E)||[t];this._preUplinkStats.set(E,[...s,t].slice(-2))}if(Q.sentKBitrate>0&&Q.rtt){const E=B?"screen_video":"video";let{_fractionLost:i}=Q;const{rtt:e,_sendBandWidth:o,_retransmittedRate:t}=Q;o===0&&(i=Math.max(.65,i));const s=this._getQosLevel(e,i||0,t||0),v=this._getUplinkVideoQoE(I,g),r=this._getVideoUplinkNetworkQuality(s,v),n=this._preUplinkStats.get(E)||[r];this._preUplinkStats.set(E,[...n,r].slice(-2))}this._startNetworkQualityReport()}updateDownlinkStats(I,g){if(!g)return;const{audioActive:C,videoActive:Q}=this._getStreamActiveState(g),{audioStats:B,videoStats:E,isScreen:i,userId:e}=I;let o,t,s=!0,v=!0;if(C)if(B.receivedKBitrate===0)s=!1;else{const{rtt:a,audioLossRate:c,stallDuration:d,statsInterval:l,e2eDelay:h}=B,D=d/l,u=i?"screen_audio":"audio",w=this._getQosLevel(a,c||0,E._retransmittedRate||0),b=this._getDownlinkQoE(u,D,h);o=this._getNetworkQuality(w,b)}if(Q)if(E.receivedKBitrate===0||E.rtt===0)v=!1;else{const{rtt:a,videoLossRate:c,stallDuration:d,statsInterval:l,e2eDelay:h,_retransmittedRate:D}=E,u=d/l,w=i?"screen_video":"video",b=this._getQosLevel(a,c||0,D||0),y=this._getDownlinkQoE(w,u,h);t=this._getNetworkQuality(b,y)}const r="".concat(e).concat(i?"_screen":"");if(!s&&!v)return void this._preDownlinkStats.delete(r);const n=o&&t?Math.ceil((o+t)/2):o||t;if(n){const a=this._preDownlinkStats.get(r)||[n];this._preDownlinkStats.set(r,[...a,n].slice(-2)),this._startNetworkQualityReport()}}destroy(){this._timer&&(window.clearInterval(this._timer),delete this._timer),this._delayTimer&&(window.clearTimeout(this._delayTimer),delete this._delayTimer),this._preUplinkStats.clear(),this._preDownlinkStats.clear()}_startNetworkQualityReport(){this._delayTimer||this._timer||(this._preUplinkStats.size>0||this._preDownlinkStats.size>0)&&(this._delayTimer=setTimeout(()=>{delete this._delayTimer,this._reportNetworkQuality(),this._timer=window.setInterval(()=>{this._reportNetworkQuality()},2e3)},300))}_reportNetworkQuality(){var I;let g,C;if(["connected","connecting"].includes((I=this._ctx.handler)===null||I===void 0?void 0:I.getConnectionState())){const Q=this._getBetterQualityAndRemoveOldest("audio","up"),B=this._getBetterQualityAndRemoveOldest("video","up");g=Q&&B?Math.ceil((Q+B)/2):Q||B||this._getBetterQualityAndRemoveOldest("screen_video","up")||this._getBetterQualityAndRemoveOldest("screen_audio","up")||Ye.EXCELLENT;const E=Array.from(this._preDownlinkStats.keys()).map(i=>this._getBetterQualityAndRemoveOldest(i,"down")).filter(i=>i);C=Math.ceil(E.reduce((i,e)=>e+i,0)/E.length)||Ye.UNKNOWN}else g=C=Ye.DOWN;navigator.onLine||(g=Ye.DOWN,C=Ye.DOWN),typeof this.reportor=="function"&&this.reportor(g,C)}_getNetworkQuality(I,g){return g===1?Math.max(I-2,1):g===2?I:Math.min(I+1,5)}_getVideoUplinkNetworkQuality(I,g){return g===1||g===0?I:Math.min(g===2?I+1:I+2,5)}_getQosLevel(I,g,C){let Q;return Q=(!I||I<=250)&&g<=.15?1:(!I||I<=500)&&g<=.3?2:(!I||I<=750)&&g<=.45?3:(!I||I<=1e3)&&g<=.6?4:5,C>.5?Q=Math.max(Q,4):C>.35?Q=Math.max(Q,3):C>.15&&(Q=Math.max(Q,2)),Q}_getUplinkQoE(I,g){let C=0;switch(I){case"audio":case"video":C=g<.05?1:g<.1?2:3;break;case"screen_video":case"screen_audio":C=g<.04?1:g<.08?2:3}return C}_getUplinkVideoQoE(I,g){var C;const Q=(I==null||(C=I.videoStats)===null||C===void 0?void 0:C.rid)||"0";if(!g)return 0;const B=g.pubAttributes.videoDescriptions[Q],E=I.videoStats,i=E.encodedFrameWidth*E.encodedFrameHeight/(B.width*B.height),e=E.sentFrameRate/B.framerate;let o=0,t=0;return typeof i!="number"||Number.isNaN(i)||(o=i>=.9?1:i<.9&&i>=.8?2:3),typeof e!="number"||Number.isNaN(e)||(t=e>=.8?1:e<.8&&e>=.6?2:3),Math.max(0,o,t)}_getDownlinkQoE(I,g,C){const Q=b9A[I];return g>Q.stallRadio||C>Q.delay||g>Q.stallRadio/2&&C>Q.delay/2?3:(g>Q.stallRadio/2||Q.delay,2)}_getBetterQualityAndRemoveOldest(I,g){let C=Ye.UNKNOWN;const Q=g==="up"?this._preUplinkStats:this._preDownlinkStats,B=Q.get(I);if(B){const E=B.filter(i=>i);E.length>0&&(C=Math.min(...E)),B.shift(),B.length===0&&Q.delete(I)}return C}_getStreamActiveState(I){let{subMediaType:g,_attributes:C,subVideo:Q,subAudio:B}=I;return{audioActive:B&&$I(g)&&C.localaudio&&C.audiostream,videoActive:Q&&gI(g)&&C.localvideo&&C.videostream}}}class w9A{constructor(I){P(this,"_timer",void 0),P(this,"_remoteVideoSizeCache",{}),P(this,"_remoteScreenSizeCache",{}),P(this,"onchange",void 0),this._room=I,this._start()}destroy(){this._timer&&(window.clearInterval(this._timer),delete this._timer),this._remoteVideoSizeCache={},this._remoteScreenSizeCache={}}_start(){this._timer||(this._timer=window.setInterval(()=>{const I={},g={};this._room.remoteStreams.forEach((C,Q)=>{C.forEach(B=>{var E;const i=(E=B.videoTrack)===null||E===void 0?void 0:E.preprocessingTrack;if(i){const t=B.isScreen?this._remoteScreenSizeCache:this._remoteVideoSizeCache,{width:s=0,height:v=0}=t[Q]||{};let r=0,n=0;if(mI){var e,o;({width:r,height:n}=(e=B==null||(o=B.videoTrack)===null||o===void 0?void 0:o.getSizeByPlayer())!==null&&e!==void 0?e:{width:0,height:0})}else{const a=i.getSettings();r=a.width||0,n=a.height||0}v===n&&s===r||typeof this.onchange=="function"&&this.onchange(Q,B.isScreen,r,n),delete t[Q],(B.isScreen?g:I)[Q]={width:r,height:n}}})}),Object.keys(this._remoteVideoSizeCache).forEach(C=>{typeof this.onchange=="function"&&this.onchange(C,!1,0,0)}),Object.keys(this._remoteScreenSizeCache).forEach(C=>{typeof this.onchange=="function"&&this.onchange(C,!0,0,0)}),this._remoteVideoSizeCache=I,this._remoteScreenSizeCache=g},1e3))}}const m9A=Array.from(new TextEncoder().encode("subt")),G9A={1:m.SUBTITLE_ERR_POSTPROCESS,2:m.SUBTITLE_ERR_CONNECTION_ERROR,3:m.SUBTITLE_ERR_PROCESS_ERROR},fc=new uA("SubtitleTool",1),R9A=A=>{if(A.extraInfo)try{const g=JSON.parse(A.extraInfo);g.source_language&&["zh","en","ja"].indexOf(g.source_language)}catch{}else{var I;const g=((I=navigator.language)===null||I===void 0?void 0:I.substring(0,2))||"";["zh","en","ja"].indexOf(g)>-1&&(A.extraInfo=JSON.stringify({source_language:g}))}};class z0{constructor(I,g){P(this,"_taskId",void 0),P(this,"_sourceLanguage","zh"),P(this,"_updating",!1),P(this,"onEvent",void 0),P(this,"onMessage",void 0),P(this,"_preConfig",void 0),P(this,"_timer",void 0),this._ctx=I,this._roomConf=g;const{extraInfo:C}=g.userInfo;if(C)try{const Q=JSON.parse(C);Q.source_language&&(this._sourceLanguage=Q.source_language)}catch{}}async start(I){fc.info("start","Invoke config: %o",I),MA(I.mode,"mode",[si.ASR_ONLY,si.ASR_AND_TRANSLATION]);const g=Array.isArray(I.targetLanguage)?I.targetLanguage:[I.targetLanguage||""];if(I.mode===si.ASR_AND_TRANSLATION&&g.findIndex(C=>S9A.indexOf(C)===-1)>-1)throw new U(m.INVALID_PARAMS,"Invalid targetLanguage.");if(this._taskId)throw new U(m.SUBTITLE_ALREADY_ON,"Already turned on subtitle");this._preConfig={targetLanguage:g,mode:I.mode},this._taskId=(Date.now().toString()+this._roomConf.roomId+this._roomConf.userId).substring(0,20),await this._sendSubtitleSignalingWithRetry(I,this._taskId)}async update(I){if(fc.info("update","Invoke config: %o",I),!this._taskId)throw new U(m.SUBTITLE_NOT_TURNED_ON,"Start subtitle first.");this._sourceLanguage=I.sourceLanguage,this._updating=!0;try{await this._ctx.signalingManager.sendSignaling("controlMessage",this._genChangeSubtitleLanguageSignaling(I,this._taskId))}catch(g){throw this._updating=!1,g}}stop(){fc.info("stop","Invoke"),this._taskId&&this._ctx.signalingManager.sendSignaling("controlMessage",{type:"subtitle",action:"stopped",appId:this._ctx.appId,roomId:this._roomConf.roomId,userId:this._roomConf.userId,taskId:this._taskId}).finally(()=>{var I;delete this._taskId,(I=this.onEvent)===null||I===void 0||I.call(this,{event:Tt.STOPPED}),this._clearTimer()})}async reconnect(){this._taskId&&this._preConfig&&(await this._ctx.signalingManager.sendSignaling("controlMessage",{type:"subtitle",action:"stopped",appId:this._ctx.appId,roomId:this._roomConf.roomId,userId:this._roomConf.userId,taskId:this._taskId}),delete this._taskId,this.start(this._preConfig))}getConfig(){return this._preConfig}destroy(){fc.info("destroy","Invoke"),this.stop(),delete this._preConfig,delete this._taskId}onResult(I){const{error:g,errorMessage:C,eventType:Q}=I.body;if(g!==0){var B;const e=new U(G9A[g]||m.SUBTITLE_ERR_UNKNOWN,C||"");(B=this.onEvent)===null||B===void 0||B.call(this,{event:Tt.ERROR,errorCode:e.code,errorMessage:e.message}),this._clearTimer()}else if(Q==="SubtitleStarted"){var E;(E=this.onEvent)===null||E===void 0||E.call(this,{event:Tt.STARTED}),this._clearTimer()}else if(this._updating&&Q==="LanguageChanged"){var i;this._updating=!1,(i=this.onEvent)===null||i===void 0||i.call(this,{event:Tt.UPDATED})}}onMessageRecv(I){if(arguments.length>1&&arguments[1]!==void 0&&arguments[1]||this._taskId&&this._preConfig){const C=L9A(I);if(!C||C.length===0)return!1;if(this._taskId&&this._preConfig){const{mode:Q,targetLanguage:B}=this._preConfig,E=[];var g;C.forEach(i=>{if(Q===si.ASR_ONLY)i.mode===Q&&E.push(i);else{const e=B.includes(i.language);(e||i.mode===si.ASR_ONLY)&&E.push(i),i.mode===si.ASR_ONLY&&e&&E.push(R(R({},i),{},{mode:si.ASR_AND_TRANSLATION}))}}),E.length>0&&((g=this.onMessage)===null||g===void 0||g.call(this,E))}return!0}return!1}async _sendSubtitleSignalingWithRetry(I,g){let C=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0;await this._ctx.signalingManager.sendSignaling("controlMessage",this._genSubtitleSignaling(I,g)),this._timer=self.setTimeout(()=>{var Q;C===2?((Q=this.onEvent)===null||Q===void 0||Q.call(this,{event:Tt.ERROR,errorCode:m.TIME_OUT,errorMessage:"start subtitle timeout."}),delete this._timer,this.stop()):this._sendSubtitleSignalingWithRetry(I,g,C+1)},z0.retryIntervel)}_genSubtitleSignaling(I,g){return{taskId:g,type:"subtitle",action:"started",roomId:this._roomConf.roomId,appId:this._ctx.appId,userId:this._roomConf.userId,subtitleMeta:{subtitleConfig:{mode:I.mode,usersConfig:[{userId:this._roomConf.userId,targetLanguages:Array.isArray(I.targetLanguage)?I.targetLanguage:[I.targetLanguage||""]}]},vendorConfig:{type:0}}}}_genChangeSubtitleLanguageSignaling(I,g){return{taskId:g,type:"subtitle",action:"subtitleUpdated",roomId:this._roomConf.roomId,appId:this._ctx.appId,userId:this._roomConf.userId,subtitleMeta:{protocol:1,languageConfig:{sourceLanguages:[{userId:this._roomConf.userId,languageCode:[I.sourceLanguage]}]}}}}_clearTimer(){this._timer&&(self.clearTimeout(this._timer),delete this._timer)}}P(z0,"retryIntervel",3e4);const L9A=A=>{let{message:I}=A;if(I instanceof ArrayBuffer&&I.byteLength>8)try{const g=new DataView(I,0);let C=0;if(m9A.every(Q=>g.getUint8(C++)===Q)){const Q=g.getUint32(C);if(C+=4,Q===g.byteLength-8){const B=Ag.ab2str(I.slice(8)),{data:E,type:i}=JSON.parse(B);if(i==="subtitle")return E}}}catch{}return!1},S9A=["zh","zh-Hant","tn","vi","iu","it","id","hi","en","ho","he","es","el","uk","ur","tk","tr","ti","ty","tl","to","th","ta","te","sl","sk","ss","eo","sm","sg","st","sv","ja","tw","qu","pt","pa","no","nb","nr","my","bn","mn","mh","mk","ml","mr","ms","lu","ro","lt","lv","lo","kj","hr","kn","ki","cs","ca","nl","ko","ht","gu","ka","kl","km","lg","kg","fi","fj","fr","ru","ng","de","tt","da","ts","cv","fa","bs","pl","bi","nd","ba","bg","az","ar","af","sq","ab","os","ee","et","ay","lzh","am","ckb","cy","gl","ha","hy","ig","kmr","ln","nso","ny","om","sn","so","sr","sw","xh","yo","zu"];function T9A(A){return A.replace(/[A-Z]/g,I=>"_".concat(I.toLowerCase()))}function Vw(A,I){return R(R({},A),I)}function js(A){const I={};return Object.keys(A).forEach(g=>{const C=A[g];try{Array.isArray(C)?I[g]=C.map(Q=>Q!==null&&typeof Q=="object"?js(Q):Q):I[g]=C!==null&&typeof C=="object"?js(C):C}catch{}}),I}function NY(A){return A===null?[]:Object.keys(A).map(I=>A[I])}const _D=new uA("Locker",2);let U9A=1;class tB{constructor(I){P(this,"lockingPromise",Promise.resolve()),P(this,"locks",0),P(this,"name",""),P(this,"lockId",void 0),P(this,"closeReason",void 0),this.lockId=U9A++,I&&(this.name=I),_D.info("lock-".concat(this.name,"-").concat(this.lockId),"is created.")}get isLocked(){return this.locks>0}lock(){let I;this.locks+=1,_D.info("lock-".concat(this.name,"-").concat(this.lockId),"locked, current queue ".concat(this.locks,"."));const g=new Promise(Q=>{I=()=>{this.locks-=1,_D.info("lock-".concat(this.name,"-").concat(this.lockId),"unlocked, current queue ".concat(this.locks,".")),Q()}}),C=this.lockingPromise.then(()=>I);return this.lockingPromise=this.lockingPromise.then(()=>g),C}}var ci=(A=>(A[A.SEND=0]="SEND",A[A.FEEDBACK=1]="FEEDBACK",A))(ci||{}),kR=(A=>(A[A.P2P=0]="P2P",A[A.SIGNAL=1]="SIGNAL",A[A.BROADCAST=2]="BROADCAST",A[A.BUSINESS_SERVER=3]="BUSINESS_SERVER",A))(kR||{}),zw=(A=>(A[A.SUCCESS=0]="SUCCESS",A[A.TIMEOUT=1]="TIMEOUT",A[A.BROKEN=2]="BROKEN",A[A.NO_RECEIVER=3]="NO_RECEIVER",A[A.NO_RELAYPATH=4]="NO_RELAYPATH",A[A.EXCEED_QPS=5]="EXCEED_QPS",A[A.SEND_TO_SERVER_ERROR=17]="SEND_TO_SERVER_ERROR",A[A.SERVER_RESPONSE_ERROR=18]="SERVER_RESPONSE_ERROR",A[A.NOT_JOIN=100]="NOT_JOIN",A[A.NOT_LOGIN=105]="NOT_LOGIN",A[A.SERVER_PARAMS_NOTSET=106]="SERVER_PARAMS_NOTSET",A[A.UNKNOWN=1e3]="UNKNOWN",A))(zw||{});const F9A={0:[0,"success"],1:[m.USER_MESSAGE_TIMEOUT,"timeout, failed to send."],2:[m.USER_MESSAGE_BROKEN,"dataChannel broken, failed to send."],3:[m.USER_MESSAGE_NO_RECEIVER,"cannot find the receiver."],4:[m.USER_MESSAGE_NO_RECEIVER,"cannot find relay path."],5:[m.USER_MESSAGE_EXCEED_QPS,"cannot find relay path."],17:[m.USER_MESSAGE_SEND_TO_SERVER_ERROR,"failed to send to business server."],18:[m.USER_MESSAGE_SERVER_RESPONSE_ERROR,"business server response error."],100:[m.USER_MESSAGE_NOT_JOIN,"not join room"],105:[m.USER_MESSAGE_NOT_LOGIN,"not login."],106:[m.USER_MESSAGE_SERVER_PARAMS_NOTSET,"server param is not set."],1e3:[m.USER_MESSAGE_UNKNOWN,"unknown."]},Y9A=["msg"],ZY=[],k9A=[x.ENGINE_CONTROL_MESSAGE];var We=(A=>(A[A.C2S=0]="C2S",A[A.C2C=1]="C2C",A[A.C2GW=2]="C2GW",A[A.C2CDirect=3]="C2CDirect",A[A.C2RTM=4]="C2RTM",A))(We||{});class p9A extends UB.EventEmitter{constructor(I,g,C){super(),P(this,"_singlingCache",new Map),P(this,"_p2pCache",new Map),P(this,"_rttIds",{}),P(this,"_p2pMessageId",new TaA),P(this,"_clearDataChannelListener",void 0),P(this,"_monitor",void 0),P(this,"logger",void 0),this.id=I,this._dataChannel=g,this.connectionIds=C,this._clearDataChannelListener=this._handleHandler(),this._monitor=tI(I),this.logger=new uA("DataChannelSignaling",3,I)}destroy(){this._clearDataChannelListener(),delete this._dataChannel,this._singlingCache.forEach((I,g)=>{I.error(new U(m.OPERATION_CANCEL,"disconnect")),this._singlingCache.delete(g)}),this._singlingCache.clear(),this._p2pCache.clear(),this._rttIds={}}sendSignaling(I,g,C){let Q=arguments.length>3&&arguments[3]!==void 0?arguments[3]:6e4;return new Promise((B,E)=>{var i;const e=this._genHeader(C);e.id=DF();const o=e.id.join("-"),t=R({error_code:0,message:JSON.stringify(g),signaling_event:"call-".concat(I),signaling_type:"Send",stream_id:g.streamId,stream_user_id:g.streamUserId,direction:"up",event_session_id:o},this.connectionIds);(i=this._monitor)===null||i===void 0||i.report("rtc_signaling",t);const s=I==="customMessage";s&&KI.samplingOne2ManyMsg(this.id,Number(e.id.join("")),g);const v=setTimeout(()=>{this._singlingCache.delete(o),E(new U(m.TIME_OUT,"".concat(I," message time out"))),s&&KI.updateOne2ManyMsgAck(this.id,g,999)},Q);this._singlingCache.set(o,{start:aA(),signalingType:I,success:r=>{clearTimeout(v),B(r),s&&KI.updateOne2ManyMsgAck(this.id,g,0)},error:r=>{clearTimeout(v),E(r),s&&KI.updateOne2ManyMsgAck(this.id,g,r.code)},id:o}),this.logger.info("Signal",">>>>>> [".concat(I,"{").concat(e.functionType,"}][").concat(o,"]"),g),this._sendMessage(I,e,g)})}sendPingSignaling(){return this.sendSignaling("CheckConnectivity",{ts:Date.now()},{functionType:2})}async sendP2PMessage(I,g){let{msg:C}=I,Q=ve(I,Y9A);const B=C instanceof ArrayBuffer;return this._sendP2PMessage(KI.samplingP2PMsg(this.id,R(R({ver:1,id:this._p2pMessageId.getMessageId(),time:Date.now(),dir:ci.SEND,type:kR.P2P,err:zw.SUCCESS},Q),{},{binary:B,msg:B?await Ag.ab2b64str(C):C})),g)}_sendP2PMessage(I){let g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const C=this._genHeader(R(R({needAck:!0,functionType:1},g),{},{id:DF()}));return vD(I.msg)?this._rttIds[I.id]=I.id:I.dir===ci.SEND&&this.logger.info("_sendP2PMessage [DC Signaling p2p{".concat(C.functionType,"} >>]"),JSON.stringify(I)),new Promise((Q,B)=>{if(I.dir===ci.SEND){const E=setTimeout(()=>{this._p2pCache.delete(I.id),B(new U(m.USER_MESSAGE_TIMEOUT,"P2P message timeout")),KI.updateP2PMsgAck(this.id,I,999)},12e3);this._p2pCache.set(I.id,{success:(i,e)=>{clearTimeout(E),Q(e),KI.updateP2PMsgAck(this.id,I,0)},error:i=>{clearTimeout(E),KI.updateP2PMsgAck(this.id,I,i.err);const[e,o]=F9A[i.err]||[m.USER_MESSAGE_UNKNOWN,"err: ".concat(i.err,", msg: ").concat(i.msg)];B({err:i.err,code:e,message:i.msg||o})}})}try{this._sendMessage("p2p",C,I)}catch(E){throw E.code===m.NOT_CONNECTED_YET&&(E.code=m.USER_MESSAGE_BROKEN),E}})}_sendMessage(I,g,C){if(!this._dataChannel||this._dataChannel.readyState!=="open")throw new U(m.NOT_CONNECTED_YET,"DataChannel not open");const Q=lA("SIGNAL_COMPRESSION")||g.zip,B=g.version+(Number(Q)<<4)+(Number(g.encrypt)<<5),E=Number(g.needAck)+(Number(g.direction)<<1)+(Number(g.functionType)<<2)+(Number(g.binary)<<6),i=Ag.str2ab(JSON.stringify([I,C])),e=nV(Uint8Array,[B,E,...g.id||[]],Q||g.zip?uw.deflate(new Uint8Array(i)):new Uint8Array(i));try{this._dataChannel.send(e.buffer)}catch(t){var o;throw(o=this._monitor)===null||o===void 0||o.report("rtc_error",{message:"datachannel send error: ".concat(t.message),error_code:TC.DC_SEND_ERROR}),t}I==="p2p"?KI.updateP2PMsgReq(this.id,C,e.buffer.byteLength):I==="customMessage"&&KI.updateOne2ManyMsgReq(this.id,C,e.buffer.byteLength)}_dispartData(I){const g=new Uint8Array(I);let C=0;const Q=g[C++],B=g[C++],E={version:15&Q,zip:!(16&~Q),encrypt:!(32&~Q),needAck:!(1&~B),direction:(2&B)>>1,functionType:(60&B)>>2,binary:!(64&~B)};if(E.needAck||E.direction===1){for(;C<=6;C++)if(!waA(g[C])){C++;break}E.id=Array.from(g.slice(2,C))}return{header:E,data:g.slice(C)}}_feedbackSignaling(I,g,C){const Q=this._genHeader({needAck:!0,direction:1,id:I.split("-").map(B=>Number(B))});ZY.includes(g)||this.logger.info("Signal",">>>>>> [".concat(g,"-res][").concat(I,"]")),this._sendMessage("".concat(g,"-res"),Q,C)}async _handleMessage(I){const g=Date.now(),{byteLength:C}=I,Q=this._dispartData(I);let{data:B}=Q;const{header:E}=Q;if(E.zip){const t=new uw.Inflate;t.push(B,!0),B=t.result}const i=Ag.ab2str(B);let e=[];try{e=JSON.parse(i)}catch(t){var o;t instanceof Error&&((o=this._monitor)===null||o===void 0||o.report("rtc_signaling_msg_error",R({error_code:-1,message:t.message,reason:"message parse failed"},this.connectionIds)));return}switch(E.functionType){case 0:case 4:this.C2S(E,e,i,C,g);break;case 1:this.C2C(e,C,g);break;case 2:this.C2GW(E,e,i)}}async C2S(I,g,C,Q,B){var E;const i=((E=I.id)===null||E===void 0?void 0:E.join("-"))||"";if(I.direction===1)this._handleAckMessage(i,g[0]||{},C,I.functionType);else if(Array.isArray(g)){var e;const o=g[0];g=g[1],ZY.includes(o)||this.logger.info("Signal","<<<<<< ".concat(o,"{").concat(I.functionType,"}"),g,i),k9A.includes(o)||this._feedbackSignaling(i,o,o===x.ON_CUSTOM_MESSAGE?R(R({},g),{},{message:""}):""),g.binary&&typeof g.message=="string"&&(g.message=await Ag.b64str2ab(g.message,this._monitor));const t=Date.now();this.emit(o,R({},g)),o===x.ON_CUSTOM_MESSAGE&&KI.reportOne2ManyMsgRecv(this.id,g,{msg_size:Q,recv_msg_ts:B,fwd_msg_ts:t}),(e=this._monitor)===null||e===void 0||e.report("rtc_signaling",R({error_code:0,message:C,signaling_event:"on-".concat(o),signaling_type:"Recv",stream_id:g.streamId,stream_user_id:g.clientId,direction:"down"},this.connectionIds))}}async C2C(I,g,C){var Q,B,E,i;Array.isArray(I)&&(I=I[1]);const e=(Q=I)===null||Q===void 0?void 0:Q.id;switch(this._rttIds[e]||((B=I)===null||B===void 0?void 0:B.dir)===ci.FEEDBACK||vD((E=I)===null||E===void 0?void 0:E.msg)?delete this._rttIds[e]:this.logger.info("Signal","<<<<<< p2p response",I),I.dir){case ci.SEND:const o=Date.now();if(!vD((i=I)===null||i===void 0?void 0:i.msg)){const{binary:t,msg:s,room:v,to:r,from:n}=I,a=v===""?t?x.USER_BINARY_MESSAGE_RECEIVED_OUTSIDE_ROOM:x.USER_MESSAGE_RECEIVED_OUTSIDE_ROOM:t?x.USER_BINARY_MESSAGE_RECEIVED:x.USER_MESSAGE_RECEIVED;r?this.emit(a,R(R({},I),{},{msg:t?await Ag.b64str2ab(s,this._monitor):s})):this.emit(x.ON_CUSTOM_MESSAGE,{clientId:n,binary:t,message:t?await Ag.b64str2ab(s,this._monitor):s})}this._sendP2PMessage(R(R({},I),{},{dir:ci.FEEDBACK,msg:""})),KI.reportP2PMsgRecv(this.id,I,{msg_size:g,recv_msg_ts:C,fwd_msg_ts:o});break;case ci.FEEDBACK:this._handleP2PMsgFeedback(I)}}C2GW(I,g,C){if(I.direction===1){var Q;const E=((Q=I.id)===null||Q===void 0?void 0:Q.join("-"))||"";this._handleAckMessage(E,g[0]||{},C,I.functionType)}else{const[E,i={}]=g;if(E==="RXMediaMsg"){var B;const{type:e,data:o}=i;switch((B=this._monitor)===null||B===void 0||B.report("rtc_signaling",R({error_code:0,message:C,signaling_event:"on-".concat(e),signaling_type:"Recv",stream_id:"",stream_user_id:"",direction:"down"},this.connectionIds)),e){case"RSCP":try{const t=JSON.parse(o);Array.isArray(t)&&this.emit(e,t)}catch{}break;case"RTT":try{const t=JSON.parse(o);t.length&&this.emit(e,t[0])}catch{}break;case"SSC":try{const t=JSON.parse(o);t.length&&(this.logger.info("Signal","<<<<<< ".concat(e),t),this.emit(e,t[0]))}catch{}}}else E==="engineControlMessage"&&this.C2S(I,g,C,0,0)}}_handleHandler(){const I=Q=>{this.logger.warn("_handleHandler","dataChannel close",Q)},g=Q=>{this.logger.error("_handleHandler","dataChannel error",Q)},C=Q=>{this._handleMessage(Q.data)};return this._dataChannel.addEventListener("close",I),this._dataChannel.addEventListener("error",g),this._dataChannel.addEventListener("message",C),()=>{const Q=this._dataChannel;Q==null||Q.removeEventListener("close",I),Q==null||Q.removeEventListener("error",g),Q==null||Q.removeEventListener("message",C)}}_genHeader(){return R({version:2,zip:!1,encrypt:!1,needAck:!0,direction:0,functionType:0,binary:!1},arguments.length>0&&arguments[0]!==void 0?arguments[0]:{})}_handleAckMessage(I,g,C,Q){var B;const E=this._singlingCache.get(I);E&&(this._singlingCache.delete(I),g.code===200?E.success(g):E.error(g),this.logger.info("Signal","<<<<<< [".concat(E.signalingType,"{").concat(Q,"}-ack] ").concat(I),g));const i=R({error_code:0,message:C,signaling_event:E==null?void 0:E.signalingType,signaling_type:"Ack",stream_id:"",stream_user_id:"",direction:"down",elapse:E?aA()-E.start:0},this.connectionIds);E!=null&&E.id&&(i.event_session_id=E.id),(B=this._monitor)===null||B===void 0||B.report("rtc_signaling",i)}_handleP2PMsgFeedback(I){const g=this._p2pCache.get(I.id);g&&(this._p2pCache.delete(I.id),I.err===zw.SUCCESS?g.success(I.id,I):g.error(I))}}class N9A{constructor(I,g){P(this,"roomId",void 0),P(this,"userInfo",void 0),P(this,"userId",void 0),P(this,"sessionId",tC()),P(this,"token",void 0),P(this,"rtcVid",void 0),P(this,"joinPromise",void 0),P(this,"startJoinTimestamp",void 0),P(this,"_liveControlMessage",void 0),P(this,"_userStreamMap",new Map),P(this,"_roomConfig",{isAutoPublish:!0,isAutoSubscribeAudio:!0,isAutoSubscribeVideo:!0,roomProfileType:EC.communication}),P(this,"_vendorConfig",{enableMultiVendor:!1,vendorCode:0}),P(this,"_roomAttr",{multiChatMode:!1,bigRoomMode:!1}),P(this,"_tokenPublishPrivilegeExpired",!1),P(this,"_tokenSubscribePrivilegeExpired",!1),P(this,"_streamQueueMap",new Map),P(this,"_monitor",void 0),this._ctx=g,this.roomId=I.roomId,this.userInfo=I.userInfo,this.userId=I.userInfo.userId,this.token=I.token,this._monitor=tI(g.id)}async checkJoinRoom(){await this.joinPromise}get vendorConfig(){return this._vendorConfig}setVendorConfig(I){this._vendorConfig=I}updateRoomAttributes(I){this._roomAttr=R(R({},this._roomAttr),I)}setLiveControlMessage(I){this._liveControlMessage=I}getLiveControlMessage(){return this._liveControlMessage}isMultiChatMode(){return this._roomAttr.multiChatMode}updateRoomConfig(I){return this._roomConfig=Vw(this._roomConfig,I),this._roomConfig}get isAutoPublish(){return!this.isRTSOnlyRoom()&&this._roomConfig.isAutoPublish}get isAutoSubscribeAudio(){return!this.isRTSOnlyRoom()&&this._roomConfig.isAutoSubscribeAudio}get isAutoSubscribeVideo(){return!this.isRTSOnlyRoom()&&this._roomConfig.isAutoSubscribeVideo}get remoteVideoConfig(){return this._roomConfig.remoteVideoConfig}get roomProfileType(){return this._roomConfig.roomProfileType||EC.communication}isRTSOnlyRoom(){return this._roomConfig.roomMode===$W.ROOM_MODE_RTS_ONLY}get rtsOnlySignalHeader(){return this.isRTSOnlyRoom()?{functionType:We.C2RTM}:void 0}updateUserPubInfo(I){const g=this._userStreamMap.get(I.clientId)||{};I.screen?(g.screenAudio=I.attributes.audiostream,g.screenVideo=I.attributes.videostream):(g.audio=I.attributes.audiostream,g.video=I.attributes.videostream),this._userStreamMap.set(I.clientId,g)}getUserPubInfo(I){return R({audio:!1,video:!1,screenAudio:!1,screenVideo:!1},this._userStreamMap.get(I)||{})}resetUserPubInfo(){this._userStreamMap.clear()}get tokenPublishPrivilegeExpired(){return this._tokenPublishPrivilegeExpired}get tokenSubscribePrivilegeExpired(){return this._tokenSubscribePrivilegeExpired}setTokenPublishPrivilegeExpired(I){this._tokenPublishPrivilegeExpired=I}setTokenSubscribePrivilegeExpired(I){this._tokenSubscribePrivilegeExpired=I}getStayRoomDuration(){return this.startJoinTimestamp?aA()-this.startJoinTimestamp:0}getStreamQueueLock(I){let g=this._streamQueueMap.get(I);return g||(g=new tB(I),this._streamQueueMap.set(I,g)),g}report(I,g,C){var Q;(Q=this._monitor)===null||Q===void 0||Q.report(I,R({room_id:this.roomId,user_id:this.userId,rtc_session_id:this.sessionId,rtc_vid:this.rtcVid},g),C)}}const pt=(A,I,g)=>{g.info(A,"userId: %o, subAudio: %o, subVideo: %o, audioMid: %o, videoMid: %o, sequenceId: %o",I.userId,I.subAudio,I.subVideo,I.audioMid,I.videoMid,I.sequenceId)};function DA(A,I,g){const C=g.value;return g.value=async function(){if(!this._ctx.signalingManager.isConnected())throw new U(m.NOT_CONNECTED_YET,"error in ".concat(I,": try again after connect"));try{await(this._roomConf||this.config).checkJoinRoom()}catch{throw new U(m.JOIN_ROOM_FAILED,"error in ".concat(I,": try again after joined"))}for(var Q=arguments.length,B=new Array(Q),E=0;E{for(var Q,B=K9A(I,g),E=A.length-1;E>=0;E--)(Q=A[E])&&(B=Q(I,g,B)||B);return B&&Z9A(I,g,B),B};class Nt extends iQ{constructor(I,g){super(),P(this,"_forwardDstRooms",new Map),P(this,"forwardStreamState","stopped"),this._ctx=I,this._roomConf=g}async startForwardStream2Rooms(I){if(this.forwardStreamState==="running"||this.forwardStreamState==="paused")throw new U(m.UNEXPECTED_INVOKE_FORWARD_STREAM,"should not invoke startForwardStreamToRooms in state: ".concat(this.forwardStreamState));const g=await this._sendForwardStreamSignaling("start",this._roomConf.roomId,I);this._updateDstRooms(I,g);const C=this._transformForwardStreamResult(g);return this.forwardStreamState="running",C}async updateForwardStream2Rooms(I){if(this.forwardStreamState==="stopped")throw new U(m.UNEXPECTED_INVOKE_FORWARD_STREAM,"should not invoke updateForwardStreamToRooms in state: ".concat(this.forwardStreamState));let g=this._mockForwardStreamResult(I);return this.forwardStreamState==="running"&&(g=await this._sendForwardStreamSignaling("update",this._roomConf.roomId,I)),this._updateDstRooms(I,g),this._transformForwardStreamResult(g)}async stopForwardStream2Rooms(){if(this.forwardStreamState==="stopped")throw new U(m.UNEXPECTED_INVOKE_FORWARD_STREAM,"should not invoke stopForwardStreamToRooms in state: ".concat(this.forwardStreamState));let I=this._mockForwardStreamResult([]);if(this.forwardStreamState==="running"&&(I=await this._sendForwardStreamSignaling("stop",this._roomConf.roomId)),this._updateDstRooms([],I),[...this._forwardDstRooms.keys()].length>0)throw new U(m.UNEXPECTED_ERROR,"stopforwardstream failed: ".concat(JSON.stringify(I)));const g=this._transformForwardStreamResult(I);return this.forwardStreamState="stopped",g}async pauseForwardStream2AllRooms(){if(this.forwardStreamState==="paused"||this.forwardStreamState==="stopped")throw new U(m.UNEXPECTED_INVOKE_FORWARD_STREAM,"should not invoke pauseForwardStreamToAllRooms in state: ".concat(this.forwardStreamState));const I=await this._sendForwardStreamSignaling("stop",this._roomConf.roomId),g=this._transformForwardStreamResult(I);return this.forwardStreamState="paused",g}async resumeForwardStream2AllRooms(){if(!(arguments.length>0&&arguments[0]!==void 0&&arguments[0])&&["running","stopped"].includes(this.forwardStreamState))throw new U(m.UNEXPECTED_INVOKE_FORWARD_STREAM,"should not invoke resumeForwardStreamToAllRooms in state: ".concat(this.forwardStreamState));const I=this._getDstRooms(),g=await this._sendForwardStreamSignaling("start",this._roomConf.roomId,I);this._updateDstRooms(I,g);const C=this._transformForwardStreamResult(g);return this.forwardStreamState="running",C}resumeFromReconnect(){this.forwardStreamState==="running"&&this.resumeForwardStream2AllRooms(!0).then(I=>{I.forEach(g=>{g.state===ke.FORWARD_STREAM_STATE_FAILURE&&this.safeEmit($.ON_FORWARD_STREAM_ERROR,g)})})}onForwardDstRoomUserKick(I){const g=[{dstRoomId:I.dstRoomId,code:200,forwardStreamType:"stop"}];this._updateDstRooms([],g),this.safeEmit($.ON_FORWARD_STREAM_ERROR,{roomId:I.dstRoomId,state:ke.FORWARD_STREAM_STATE_FAILURE,error:Ut.FORWARD_STREAM_ERROR_REMOTE_KICKED})}destoy(){super.removeAllListeners(),this._forwardDstRooms.clear(),this.forwardStreamState="stopped"}_mockForwardStreamResult(I){const g=[];return this._forwardDstRooms.forEach((C,Q)=>{g.push({dstRoomId:Q,forwardStreamType:"stop",code:200})}),I.forEach(C=>{const Q=g.findIndex(B=>B.dstRoomId===C.roomId);Q===-1?g.push({dstRoomId:C.roomId,forwardStreamType:"start",code:C.roomId===this._roomConf.roomId?400:200}):g[Q].forwardStreamType="update"}),g}_transformForwardStreamResult(I){I||(I=[]);const g=[];for(const{dstRoomId:C,code:Q}of I){const B={roomId:C,state:ke.FORWARD_STREAM_STATE_SUCCESS,error:Ut.FORWARD_STREAM_ERROR_OK};Q===200||(Q===400?(B.state=ke.FORWARD_STREAM_STATE_FAILURE,B.error=Ut.FORWARD_STREAM_ERROR_REMOTE_KICKED):Q>=700&&Q<800?(B.state=ke.FORWARD_STREAM_STATE_FAILURE,B.error=Ut.FORWARD_STREAM_ERROR_INVALID_TOKEN):(B.state=ke.FORWARD_STREAM_STATE_FAILURE,B.error=Ut.FORWARD_STREAM_ERROR_RESPONSE)),g.push(B)}return g}_updateDstRooms(I){let g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[];g.length===0&&this._forwardDstRooms.clear(),g.forEach(C=>{let{dstRoomId:Q,code:B,forwardStreamType:E}=C;if(B===200)if(E==="stop")this._forwardDstRooms.delete(Q);else{var i;const e=I.find(t=>t.roomId===Q);if(!e&&!this._forwardDstRooms.has(Q))throw new U(m.UNEXPECTED_ERROR,"unknow roomid ".concat(Q," in signaling return"));let o=(i=this._forwardDstRooms.get(Q))!==null&&i!==void 0?i:{token:void 0};o=Object.assign(o,e),this._forwardDstRooms.set(Q,o)}else this._forwardDstRooms.has(Q)&&this._forwardDstRooms.delete(Q)})}_getDstRooms(){const I=[];return this._forwardDstRooms.forEach((g,C)=>{I.push({roomId:C,token:g.token})}),I}async _sendForwardStreamSignaling(I,g,C){const Q="".concat(Oa());if(I!=="stop"){const t=C.map(s=>s.roomId);this._roomConf.report("rtc_forward_stream",{type:"begin",dst_rooms:"{ ".concat(t.map(s=>'"'.concat(s,'"')).join(",")," }"),event_session_id:Q})}const B={forwardStreamType:I,roomId:g};(I==="start"||I==="update")&&(B.dstRoomInfos=C==null?void 0:C.map(t=>({dstRoomId:t.roomId,dstToken:Ag.token2auth(this._ctx.appId,t.roomId,this._roomConf.userId,t.token)})));const E=await this._ctx.signalingManager.sendSignaling("forwardStream",B),i=[];if((E==null?void 0:E.code)!==200)throw I!=="stop"&&(C==null||C.forEach(t=>{i.push({dst_room_id:t.roomId,result:"server error ".concat(E==null?void 0:E.code)})}),this._roomConf.report("rtc_forward_stream",{type:"end",dst_rooms:JSON.stringify(i),event_session_id:Q})),new U(m.UNEXPECTED_ERROR,"server side internal error, error code: ".concat(E));var e,o;return I!=="stop"&&((e=E.forwardStreamResults)===null||e===void 0||e.forEach(t=>{i.push({dst_room_id:t.dstRoomId,result:"dst room lost"})}),(o=E.forwardStreamResults)===null||o===void 0||o.forEach(t=>{const s=i.find(v=>v.dst_room_id===t.dstRoomId);s&&(t.code===200?t.forwardStreamType==="update"?s.result="update":s.result="success":s.result="server error ".concat(t.code))}),this._roomConf.report("rtc_forward_stream",{type:"end",dst_rooms:JSON.stringify(i),event_session_id:Q})),E.forwardStreamResults}}sr([DA],Nt.prototype,"startForwardStream2Rooms"),sr([DA],Nt.prototype,"updateForwardStream2Rooms"),sr([DA],Nt.prototype,"stopForwardStream2Rooms"),sr([DA],Nt.prototype,"pauseForwardStream2AllRooms"),sr([DA],Nt.prototype,"resumeForwardStream2AllRooms");const tt=[{maxLayers:3,totalPixels:2073600},{maxLayers:3,totalPixels:921600},{maxLayers:3,totalPixels:518400},{maxLayers:2,totalPixels:230400},{maxLayers:2,totalPixels:129600},{maxLayers:1,totalPixels:57600},{maxLayers:1,totalPixels:0}],J9A=(A,I)=>{const g=tt.findIndex(B=>A*I>=B.totalPixels),C=A*I;if(g===0)return tt[g].maxLayers;const Q=tt[g-1].totalPixels;return(Q-C)/(Q-tt[g].totalPixels)<.1?tt[g-1].maxLayers:tt[g].maxLayers};function KY(A,I,g){var C;const Q=A?(C=g.find(B=>B.rid===A))===null||C===void 0?void 0:C.maxkbps:g[0].maxkbps;return Math.min(Q??Number.POSITIVE_INFINITY,I)}const JY=(A,I)=>{var g,C,Q,B;let E=0,i=-1;const{videoDescriptions:e,subVideoDescriptions:o}=(I==null?void 0:I.attributes)||{},t=Array.isArray(o)?o:e;let s=-1;const v=A.width*A.height;for(let c=0;c<(t==null?void 0:t.length);c++){var r,n;if(v>=((r=t[c])===null||r===void 0?void 0:r.width)*((n=t[c])===null||n===void 0?void 0:n.height)){s=c;break}}let a=t[0];if(s===-1)s=t.length-1,a=t[s];else if(s!==0){const c=t[s-1].width*t[s-1].height,d=(c-v)/(c-t[s].width*t[s].height);a=d<.1?t[s-1]:t[s],s=d<.1?s-1:s}return i=(g=(C=a)===null||C===void 0?void 0:C.sub_index)!==null&&g!==void 0?g:-1,E=(Q=(B=a)===null||B===void 0?void 0:B.video_index)!==null&&Q!==void 0?Q:s,{spatialLayer:E,spatialSubLayer:i}},st=A=>({width:jA(A.width),height:jA(A.height),frameRate:jA(A.frameRate),maxKbps:A.maxKbps}),vt=A=>{let{width:I,height:g}=A;return jA(I)*jA(g)},WY=(A,I)=>{const g=jA(A.width)/jA(I.width)||1,C=jA(A.height)/jA(I.height)||1;Math.floor(g)===g&&Math.floor(C)===C||bi("setLocalSimulcastMode: The resolution setting needs to be an integer multiple")};class W9A{constructor(I){P(this,"_roomId",void 0),P(this,"_constraints",{}),P(this,"_profile",void 0),P(this,"_customMaxBitrate",0),this._appId=I}setRoomId(I){this._roomId=I}setAudioProfile(I){this._profile=I,this._customMaxBitrate=0}get customMaxBitrate(){return this._customMaxBitrate}setCustomMaxBitrate(I){const{audio_encode:g}=$A.getEngineWebConfig(this._appId,this._roomId||"");this._customMaxBitrate=g!=null&&g.bitrate?0:1e3*I}getOpusConfigStr(){let I=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"";const{audio_encode:g}=$A.getEngineWebConfig(this._appId,this._roomId||""),{sampleRate:C,channelCount:Q}=this.getConstraints(),B=typeof C=="number"?C:C==null?void 0:C.exact,E=typeof Q=="number"?Q:Q==null?void 0:Q.exact,i={};I.split(";").forEach(s=>{const[v,r]=s.split("=");v&&r&&(i[v]=r)});const e=(g==null?void 0:g.bitrate)||this._customMaxBitrate||this._getConfigByAudioProfile().bitrate;e&&(i.maxaveragebitrate=e);const o=(g==null?void 0:g.enc_sample_rate)||B;o&&(i["sprop-maxcapturerate"]=o);const t=(g==null?void 0:g.playback_rate)||B;return t&&(i.maxplaybackrate=t),(E&&E>1||g!=null&&g.stereo)&&(i["sprop-stereo"]=1,i.stereo=1),g!=null&&g.dtx&&(i.usedtx=1),Object.keys(i).map(s=>"".concat(s,"=").concat(i[s])).join(";")}updateConstraints(I){this._constraints=R(R({},this._constraints),I)}getConstraints(){const I=R({},this._constraints),{audio_capture:g}=$A.getEngineWebConfig(this._appId,this._roomId||"");HB(g==null?void 0:g.sample_rate)||(I.sampleRate=g.sample_rate),HB(g==null?void 0:g.channel)||(I.channelCount=g.channel),HB(g==null?void 0:g.agc)||(I.autoGainControl=g.agc),HB(g==null?void 0:g.ans)||(I.noiseSuppression=g.ans),HB(g==null?void 0:g.aec)||(I.echoCancellation=g.aec);const{sampleRate:C,channel:Q}=this._getConfigByAudioProfile();return HB(I.sampleRate)&&!HB(C)&&(I.sampleRate=C),HB(I.channelCount)&&!HB(Q)&&(I.channelCount=Q),I}_getConfigByAudioProfile(){const I={};switch(this._profile){case St.fluent:I.sampleRate=16e3,I.bitrate=24e3;break;case St.standard:I.sampleRate=48e3,I.bitrate=48e3;break;case St.hd:I.sampleRate=48e3,I.bitrate=128e3,I.channel=2;break;case St.standardStereo:I.sampleRate=48e3,I.bitrate=8e4,I.channel=2;break;case St.hdMono:I.sampleRate=48e3,I.bitrate=128e3}return I}}const V9A={start_interval:100,multiplier:2,max_interval:3e4};class _z{constructor(){P(this,"_times",0),P(this,"_config",V9A),P(this,"initTs",aA())}getRetryDelay(){return Math.min(this._config.max_interval,Math.pow(this._config.multiplier,this._times++)*this._config.start_interval)}setConfig(I){this._config=I}reset(){this._times=0}}class z9A{constructor(I){P(this,"_logger",void 0),P(this,"_monitor",void 0),this._ctx=I;const g=$A.getServerConfig(this._ctx.appId);this._logger=new uA("DecisionConfig",1,this._ctx.id),this._monitor=tI(this._ctx.id),setTimeout(()=>{this.updateConfig(g,!0)},0)}updateConfig(I,g){!g&&$A.setServerConfig(this._ctx.appId,I),I.rts_report&&KI.setConfig(I.rts_report),this._ctx.joinRoomConfig.setServerConfig(I.web_join_room),this._setRtsConfig(I.rts_config),this._setRtsQpsConfig(I.rts_qps),this._preConnect(I),this._getServerConfigExecutor(I)}_setRtsConfig(I){I!=null&&I.rts_mode&&I.rts_mode!==this._ctx.rtsMode&&(this._logger.print("_setRtsConfig","setRtsMode to %o",I.rts_mode),this._ctx.setRTSMode(I.rts_mode===Qo.NORMAL_MODE?Qo.NORMAL_MODE:Qo.LIMIT_MODE))}_setRtsQpsConfig(I){this._logger.print("_setRtsQpsConfig",JSON.stringify(I)),this._ctx.setRtsQpsConf(I),Object.keys(this._ctx.rtsLimiter).length>0&&AI(this._ctx.id,"setRtsQpsConf",JSON.stringify(I))}_getServerConfigExecutor(I){var g,C,Q,B,E,i,e,o;const{upload_console_length_cut:t,upload_report_limit:s}=(I==null?void 0:I.web_rtc_config)||{};if(dB.setParameter("UPLOAD_CONSOLE_ON",!(I==null||(g=I.web_rtc_config)===null||g===void 0||!g.upload_console_on)),t&&dB.setParameter("UPLOAD_CONSOLE_LENGTH_CUT",t),s&&dB.setParameter("UPLOAD_REPORT_LIMIT",s),dB.setParameter("ENABLE_REPORT_IDB_BUFFER",!(I==null||(C=I.web_rtc_config)===null||C===void 0||!C.enable_report_idb_buffer)),(I==null||(Q=I.web_rtc_config)===null||Q===void 0?void 0:Q.sdk_codec_negotiation)===!1&&jC("SDK_CODEC_NEGOTIATION",!1),(I==null||(B=I.web_rtc_config)===null||B===void 0?void 0:B.ainr_enable_dump)!==void 0&&jC("AINR_ENABLE_DUMP",I.web_rtc_config.ainr_enable_dump),(I==null||(E=I.web_rtc_config)===null||E===void 0?void 0:E.ainr_overload_threshold)!==void 0&&jC("AINR_OVERLOAD_THRESHOLD",I.web_rtc_config.ainr_overload_threshold),(I==null||(i=I.web_rtc_config)===null||i===void 0?void 0:i.ainr_urls)!==void 0)try{jC("AINR_URLS",JSON.parse(I.web_rtc_config.ainr_urls))}catch(v){this._logger.warn("_getServerConfigExecutor","parse AINR_URLS error %o",v)}(I==null||(e=I.web_rtc_config)===null||e===void 0?void 0:e.ainr_cache_time)!==void 0&&jC("AINR_CACHE_TIME",I.web_rtc_config.ainr_cache_time),(I==null||(o=I.web_rtc_config)===null||o===void 0?void 0:o.ainr_dump_time)!==void 0&&jC("AINR_DUMP_TIME",I.web_rtc_config.ainr_dump_time)}_preConnect(I){var g;let C=lA("PRE_ICE");var Q;typeof(I==null||(g=I.web_rtc_config)===null||g===void 0?void 0:g.pre_ice)=="boolean"&&(C=I.web_rtc_config.pre_ice),C&&(this._logger.print("preConnect","start pre ice connection."),this._ctx.signalingManager.connect(),(Q=this._monitor)===null||Q===void 0||Q.set({pre_connection:!0}),this._ctx.isPreConnection=!0)}}class M9A{constructor(I){P(this,"_reconnectTimer",void 0),P(this,"_retryFunc",void 0),P(this,"_abortControllers",[]),P(this,"_monitor",void 0),P(this,"logger",void 0),P(this,"_groupConfigId",KE()),P(this,"_retryLimiter",new _z),P(this,"_timer",void 0),P(this,"_destroyed",!1),P(this,"_onlineListener",()=>{this._reconnectTimer&&this._retryFunc&&(clearTimeout(this._reconnectTimer),this._retryFunc())}),P(this,"_decisionConfig",void 0),this._ctx=I,this._monitor=tI(I.id),this.logger=new uA("ICERequest",4,I.id),this._decisionConfig=new z9A(I),window.addEventListener("online",this._onlineListener)}async getICENode(I){let g;this.logger.info("getICENode","invoke");try{if(g=await this._getAccessWithRetry(I),g.length===0)throw new Error("server return empty nodes.")}catch(C){throw this._reportRtcInvokeStatus("es.join.getNodeFailed",C),new U(m.ICE_SERVER_WRONG,"get ICE config failed: ".concat(C.message),C)}return this.logger.success("getICENode","success"),this._reportRtcInvokeStatus("es.join.getNodeSuccess",g),g}_getAccessWithRetry(I){let g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return g!==0&&this.logger.info("_getAccessWithRetry()","invoke feedbackInfo: %o, 201count: %o",I,g),new Promise((C,Q)=>{this._getAccessNode(I).then(B=>{this._retryLimiter.reset(),C(B)}).catch(B=>{if(this._destroyed)return;if(Array.isArray(B)&&B.length>0){if(B.findIndex(i=>400<=i.code&&i.code<500)>-1)return this._retryLimiter.reset(),Q(new Error("HTTP request failed(4xx)"));if(B.every(i=>{var e;return i.code===201||((e=i.error)===null||e===void 0?void 0:e.code)===201})&&g++,g===3)return this._retryLimiter.reset(),Q(new Error("HTTP request failed(201)"))}const E=this._retryLimiter.getRetryDelay();this.logger.warn("_getAccessWithRetry()","_getAccessWithRetry error, will retry after ".concat(E,"ms"),B),this._retryFunc=()=>{this._getAccessWithRetry(I,g).then(C).catch(Q)},this._reconnectTimer=self.setTimeout(this._retryFunc,E)})})}async _getAccessNode(I){return new Promise((g,C)=>{const Q=$A.getAccessNode(this._ctx.appId);if(Q){const B=(Array.isArray(Q)?Q:[Q]).map(E=>(E.cache_status=!0,E));this.logger.info("getAccessNode","use cache node."),g(B),this._timer=setTimeout(()=>{this._getAccessNodeFromServer(I),this._reportRtcInvokeStatus("es.R.node.cache",Q),delete this._timer},0)}else this._getAccessNodeFromServer(I).then(g).catch(C)})}async _getAccessNodeFromServer(I){const{urls:g,needFallback:C}=this._getAccessUrls();return this.getICEConfigFromServer(g,I).then(Q=>{const{nodes:B,decisionConfig:E}=Q;return!this._ctx.useCloudProxy&&(B==null?void 0:B.length)>0&&$A.setAccessNode(this._ctx.appId,B,Q.ttl||11200),E&&this._decisionConfig.updateConfig(E,!1),Q.dispatchDomains&&!this._ctx.useCloudProxy&&$A.setAccessUrls(Q.dispatchDomains),B}).catch(Q=>{if(C)return this._reportRtcInvokeStatus("es.R.req.fallback",""),$A.clearAccessUrls(),this._getAccessNodeFromServer(I);throw Q})}_getAccessUrls(){let I=$A.getAccessUrls()||[],g=!0;return I.length!==0?this._reportRtcInvokeStatus("es.R.req.cache.urls",I):(g=!1,I=YA.ICE_CONFIG_REQUEST_URLS,I.length!==0?this._reportRtcInvokeStatus("es.R.req.external.urls",I):(I=YA.ICE_CONFIG_REQUEST_URLS_INTERNAL,this._reportRtcInvokeStatus("es.R.req.internal.urls",I))),{urls:I,needFallback:g}}async getICEConfigFromServer(I,g){const C={appID:this._ctx.appId,deviceID:$A.getDeviceId(),os:"web",sdkVersion:YA.VERSION,isOversea:YA.OVERSEA,expectedAddr:lA("EXPECTED_ADDR"),productPlatform:"VolcEngine",enableCloudProxy:this._ctx.useCloudProxy,expectedIDC:this._ctx.expectedIDC,decisionKeys:["rts_report","web_join_room","web_rtc_config","rts_qps","rts_config"]};var Q;g&&(C.feedbackInfo=g,((Q=g[0])===null||Q===void 0||(Q=Q.feedbackReason)===null||Q===void 0?void 0:Q.type)!=="ICE_FAILED"&&delete C.expectedAddr),lA("AREA_CODE")==="AREA_CODE_US_OPCO"&&(C.mediaArea=JSON.stringify([{AreaList:["GEO:US_OPCO"],Attribute:"include"}]),C.accessArea=JSON.stringify([{AreaList:["GEO:US_OPCO"],Attribute:"include"}]));const B=I.map(E=>this._httpRequest(E,C));return RaA(B)}async _httpRequest(I,g){var C;const Q=KE();g.connectSessionID=Q;const B=Date.now();(C=this._monitor)===null||C===void 0||C.report("rtc_get_access",{error_code:0,message:JSON.stringify(g),elapse:0,type:"request",host:I,config_id:Q,group_config_id:this._groupConfigId});const E=new AbortController;let i;this._abortControllers.push(E);try{var e;try{i=await fetch(I,{method:"POST",headers:{"Content-Type":"application/json"},mode:"cors",body:JSON.stringify(g),signal:E.signal})}catch(v){var o;throw uiA(fetch)||(o=this._monitor)===null||o===void 0||o.report("rtc_error",{error_code:TC.Fetch_MODIFY,message:"get access failed, possibly due to modifying the browser's Fetch API."},{origin_error:v}),v}if(this._abortControllers=this._abortControllers.filter(v=>v!==E),i.status!==200)throw{message:i.statusText,code:i.status};const s=await i.json();if(s.code!==200)throw s;return(e=this._monitor)===null||e===void 0||e.report("rtc_get_access",{error_code:200,message:JSON.stringify(s),elapse:Date.now()-B,type:"response",host:I,config_id:Q,group_config_id:this._groupConfigId}),s}catch(s){var t;throw(t=this._monitor)===null||t===void 0||t.report("rtc_get_access",{error_code:Number((s==null?void 0:s.code)||(s==null?void 0:s.server_code)),message:s==null?void 0:s.message,elapse:Date.now()-B,type:"response",host:I,config_id:Q,group_config_id:this._groupConfigId},{error:JSON.stringify(s)}),s}}destroy(){this._destroyed=!0,window.removeEventListener("online",this._onlineListener),this._abortControllers.forEach(I=>I.abort("engine destroy")),this._reconnectTimer&&(window.clearTimeout(this._reconnectTimer),delete this._reconnectTimer),this._timer&&(window.clearTimeout(this._timer),delete this._timer)}_reportRtcInvokeStatus(I,g){var C;(C=this._monitor)===null||C===void 0||C.report("rtc_invoke_status",{sdk_api_name:I,message:g,error_code:0,stream_id:"",elapse:0,group_config_id:this._groupConfigId})}}var dA={},$z={},AM={exports:{}},VY=AM.exports={v:[{name:"version",reg:/^(\d*)$/}],o:[{name:"origin",reg:/^(\S*) (\d*) (\d*) (\S*) IP(\d) (\S*)/,names:["username","sessionId","sessionVersion","netType","ipVer","address"],format:"%s %s %d %s IP%d %s"}],s:[{name:"name"}],i:[{name:"description"}],u:[{name:"uri"}],e:[{name:"email"}],p:[{name:"phone"}],z:[{name:"timezones"}],r:[{name:"repeats"}],t:[{name:"timing",reg:/^(\d*) (\d*)/,names:["start","stop"],format:"%d %d"}],c:[{name:"connection",reg:/^IN IP(\d) (\S*)/,names:["version","ip"],format:"IN IP%d %s"}],b:[{push:"bandwidth",reg:/^(TIAS|AS|CT|RR|RS):(\d*)/,names:["type","limit"],format:"%s:%s"}],m:[{reg:/^(\w*) (\d*) ([\w/]*)(?: (.*))?/,names:["type","port","protocol","payloads"],format:"%s %d %s %s"}],a:[{push:"rtp",reg:/^rtpmap:(\d*) ([\w\-.]*)(?:\s*\/(\d*)(?:\s*\/(\S*))?)?/,names:["payload","codec","rate","encoding"],format:function(A){return A.encoding?"rtpmap:%d %s/%s/%s":A.rate?"rtpmap:%d %s/%s":"rtpmap:%d %s"}},{push:"fmtp",reg:/^fmtp:(\d*) ([\S| ]*)/,names:["payload","config"],format:"fmtp:%d %s"},{name:"control",reg:/^control:(.*)/,format:"control:%s"},{name:"rtcp",reg:/^rtcp:(\d*)(?: (\S*) IP(\d) (\S*))?/,names:["port","netType","ipVer","address"],format:function(A){return A.address!=null?"rtcp:%d %s IP%d %s":"rtcp:%d"}},{push:"rtcpFbTrrInt",reg:/^rtcp-fb:(\*|\d*) trr-int (\d*)/,names:["payload","value"],format:"rtcp-fb:%s trr-int %d"},{push:"rtcpFb",reg:/^rtcp-fb:(\*|\d*) ([\w-_]*)(?: ([\w-_]*))?/,names:["payload","type","subtype"],format:function(A){return A.subtype!=null?"rtcp-fb:%s %s %s":"rtcp-fb:%s %s"}},{push:"ext",reg:/^extmap:(\d+)(?:\/(\w+))?(?: (urn:ietf:params:rtp-hdrext:encrypt))? (\S*)(?: (\S*))?/,names:["value","direction","encrypt-uri","uri","config"],format:function(A){return"extmap:%d"+(A.direction?"/%s":"%v")+(A["encrypt-uri"]?" %s":"%v")+" %s"+(A.config?" %s":"")}},{name:"extmapAllowMixed",reg:/^(extmap-allow-mixed)/},{push:"crypto",reg:/^crypto:(\d*) ([\w_]*) (\S*)(?: (\S*))?/,names:["id","suite","config","sessionConfig"],format:function(A){return A.sessionConfig!=null?"crypto:%d %s %s %s":"crypto:%d %s %s"}},{name:"setup",reg:/^setup:(\w*)/,format:"setup:%s"},{name:"connectionType",reg:/^connection:(new|existing)/,format:"connection:%s"},{name:"mid",reg:/^mid:([^\s]*)/,format:"mid:%s"},{name:"msid",reg:/^msid:(.*)/,format:"msid:%s"},{name:"ptime",reg:/^ptime:(\d*(?:\.\d*)*)/,format:"ptime:%d"},{name:"maxptime",reg:/^maxptime:(\d*(?:\.\d*)*)/,format:"maxptime:%d"},{name:"direction",reg:/^(sendrecv|recvonly|sendonly|inactive)/},{name:"icelite",reg:/^(ice-lite)/},{name:"iceUfrag",reg:/^ice-ufrag:(\S*)/,format:"ice-ufrag:%s"},{name:"icePwd",reg:/^ice-pwd:(\S*)/,format:"ice-pwd:%s"},{name:"fingerprint",reg:/^fingerprint:(\S*) (\S*)/,names:["type","hash"],format:"fingerprint:%s %s"},{push:"candidates",reg:/^candidate:(\S*) (\d*) (\S*) (\d*) (\S*) (\d*) typ (\S*)(?: raddr (\S*) rport (\d*))?(?: tcptype (\S*))?(?: generation (\d*))?(?: network-id (\d*))?(?: network-cost (\d*))?/,names:["foundation","component","transport","priority","ip","port","type","raddr","rport","tcptype","generation","network-id","network-cost"],format:function(A){var I="candidate:%s %d %s %d %s %d typ %s";return I+=A.raddr!=null?" raddr %s rport %d":"%v%v",I+=A.tcptype!=null?" tcptype %s":"%v",A.generation!=null&&(I+=" generation %d"),I+=A["network-id"]!=null?" network-id %d":"%v",I+=A["network-cost"]!=null?" network-cost %d":"%v"}},{name:"endOfCandidates",reg:/^(end-of-candidates)/},{name:"remoteCandidates",reg:/^remote-candidates:(.*)/,format:"remote-candidates:%s"},{name:"iceOptions",reg:/^ice-options:(\S*)/,format:"ice-options:%s"},{push:"ssrcs",reg:/^ssrc:(\d*) ([\w_-]*)(?::(.*))?/,names:["id","attribute","value"],format:function(A){var I="ssrc:%d";return A.attribute!=null&&(I+=" %s",A.value!=null&&(I+=":%s")),I}},{push:"ssrcGroups",reg:/^ssrc-group:([\x21\x23\x24\x25\x26\x27\x2A\x2B\x2D\x2E\w]*) (.*)/,names:["semantics","ssrcs"],format:"ssrc-group:%s %s"},{name:"msidSemantic",reg:/^msid-semantic:\s?(\w*) (\S*)/,names:["semantic","token"],format:"msid-semantic: %s %s"},{push:"groups",reg:/^group:(\w*) (.*)/,names:["type","mids"],format:"group:%s %s"},{name:"rtcpMux",reg:/^(rtcp-mux)/},{name:"rtcpRsize",reg:/^(rtcp-rsize)/},{name:"sctpmap",reg:/^sctpmap:([\w_/]*) (\S*)(?: (\S*))?/,names:["sctpmapNumber","app","maxMessageSize"],format:function(A){return A.maxMessageSize!=null?"sctpmap:%s %s %s":"sctpmap:%s %s"}},{name:"xGoogleFlag",reg:/^x-google-flag:([^\s]*)/,format:"x-google-flag:%s"},{push:"rids",reg:/^rid:([\d\w]+) (\w+)(?: ([\S| ]*))?/,names:["id","direction","params"],format:function(A){return A.params?"rid:%s %s %s":"rid:%s %s"}},{push:"imageattrs",reg:new RegExp("^imageattr:(\\d+|\\*)[\\s\\t]+(send|recv)[\\s\\t]+(\\*|\\[\\S+\\](?:[\\s\\t]+\\[\\S+\\])*)(?:[\\s\\t]+(recv|send)[\\s\\t]+(\\*|\\[\\S+\\](?:[\\s\\t]+\\[\\S+\\])*))?"),names:["pt","dir1","attrs1","dir2","attrs2"],format:function(A){return"imageattr:%s %s %s"+(A.dir2?" %s %s":"")}},{name:"simulcast",reg:new RegExp("^simulcast:(send|recv) ([a-zA-Z0-9\\-_~;,]+)(?:\\s?(send|recv) ([a-zA-Z0-9\\-_~;,]+))?$"),names:["dir1","list1","dir2","list2"],format:function(A){return"simulcast:%s %s"+(A.dir2?" %s %s":"")}},{name:"simulcast_03",reg:/^simulcast:[\s\t]+([\S+\s\t]+)$/,names:["value"],format:"simulcast: %s"},{name:"framerate",reg:/^framerate:(\d+(?:$|\.\d+))/,format:"framerate:%s"},{name:"sourceFilter",reg:/^source-filter: *(excl|incl) (\S*) (IP4|IP6|\*) (\S*) (.*)/,names:["filterMode","netType","addressTypes","destAddress","srcList"],format:"source-filter: %s %s %s %s %s"},{name:"bundleOnly",reg:/^(bundle-only)/},{name:"label",reg:/^label:(.+)/,format:"label:%s"},{name:"sctpPort",reg:/^sctp-port:(\d+)$/,format:"sctp-port:%s"},{name:"maxMessageSize",reg:/^max-message-size:(\d+)$/,format:"max-message-size:%s"},{push:"tsRefClocks",reg:/^ts-refclk:([^\s=]*)(?:=(\S*))?/,names:["clksrc","clksrcExt"],format:function(A){return"ts-refclk:%s"+(A.clksrcExt!=null?"=%s":"")}},{name:"mediaClk",reg:/^mediaclk:(?:id=(\S*))? *([^\s=]*)(?:=(\S*))?(?: *rate=(\d+)\/(\d+))?/,names:["id","mediaClockName","mediaClockValue","rateNumerator","rateDenominator"],format:function(A){var I="mediaclk:";return I+=A.id!=null?"id=%s %s":"%v%s",I+=A.mediaClockValue!=null?"=%s":"",I+=A.rateNumerator!=null?" rate=%s":"",I+=A.rateDenominator!=null?"/%s":""}},{name:"keywords",reg:/^keywds:(.+)$/,format:"keywds:%s"},{name:"content",reg:/^content:(.+)/,format:"content:%s"},{name:"bfcpFloorCtrl",reg:/^floorctrl:(c-only|s-only|c-s)/,format:"floorctrl:%s"},{name:"bfcpConfId",reg:/^confid:(\d+)/,format:"confid:%s"},{name:"bfcpUserId",reg:/^userid:(\d+)/,format:"userid:%s"},{name:"bfcpFloorId",reg:/^floorid:(.+) (?:m-stream|mstrm):(.+)/,names:["id","mStream"],format:"floorid:%s mstrm:%s"},{push:"invalid",names:["value"]}]};Object.keys(VY).forEach(function(A){VY[A].forEach(function(I){I.reg||(I.reg=/(.*)/),I.format||(I.format="%s")})});var pR=AM.exports;(function(A){var I=function(E){return String(Number(E))===E?Number(E):E},g=function(E,i,e){var o=E.name&&E.names;E.push&&!i[E.push]?i[E.push]=[]:o&&!i[E.name]&&(i[E.name]={});var t=E.push?{}:o?i[E.name]:i;(function(s,v,r,n){if(n&&!r)v[n]=I(s[1]);else for(var a=0;a1&&(E[e[0]]=void 0),E};A.parseParams=function(E){return E.split(/;\s?/).reduce(B,{})},A.parseFmtpConfig=A.parseParams,A.parsePayloads=function(E){return E.toString().split(" ").map(Number)},A.parseRemoteCandidates=function(E){for(var i=[],e=E.split(" ").map(I),o=0;o=C)return Q;var B=g[I];switch(I+=1,Q){case"%%":return"%";case"%s":return String(B);case"%d":return Number(B);case"%v":return""}})},vr=function(A,I,g){var C=[A+"="+(I.format instanceof Function?I.format(I.push?g:g[I.name]):I.format)];if(I.names)for(var Q=0;QMath.floor(Math.random()*Mw+1e4);function w9(A){return A>Mw-18?(_9A.warn("generateAllSsrc","reset start id",A),w9(A=A-Mw+1e4+18)):{audio:A,audioFec:A+1,audioRtx:A+2,video:A+3,videoFec:A+4,videoRtx:A+5,next:A+18}}const m9=function(A,I,g){return[{id:g,attribute:"cname",value:arguments.length>3&&arguments[3]!==void 0?arguments[3]:$9A},{id:g,attribute:"msid",value:"".concat(A," ").concat(A,"-").concat(I)},{id:g,attribute:"mslabel",value:"".concat(A)},{id:g,attribute:"label",value:"".concat(A,"-").concat(I)}]},Xw=function(A,I){let g=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};const C=I.video,Q=I.videoRtx,B=I.videoFec,E=[C,Q],{cname:i,flexfec:e}=g;e&&E.push(B);const o=E.reduce((s,v)=>s.concat(m9(A,"video",v,i)),[]),t=[{semantics:"FID",ssrcs:"".concat(C," ").concat(Q)}];return e&&t.push({semantics:"FEC-FR",ssrcs:"".concat(C," ").concat(B)}),{ssrcs:o,ssrcGroups:t}};function jw(A){return A.direction="inactive",A.port=0,delete A.ext,delete A.ssrcs,delete A.ssrcGroups,delete A.simulcast,delete A.simulcast_03,delete A.rids,delete A.extmapAllowMixed,delete A.msid,delete A.bundleOnly,A}const G9=function(A,I,g){let C=!(arguments.length>3&&arguments[3]!==void 0)||arguments[3];const Q=R(R({},A),{},{media:[]});return C&&(Q.invalid=[{value:"realx-exts:rscp"}]),I&&Q.media.push(I),g&&Q.media.push(g),delete Q.groups,delete Q.msidSemantic,dA.write(Q)};function I0A(A){const I={},{publicIPs:g,certFingerprint:C,iceParams:Q,iceConfig:B}=A;return I.fingerprint={type:"sha-256",hash:C},I.icePwd=Q.serverIcePwd,I.iceUfrag=C0A(Q.serverIceUfrag),I.candidates=g0A(g,B),I.setup="active",I.iceOptions="renomination",I}function g0A(A,I){if(!Array.isArray(A))return[];let g=0;const C=2130706431,Q=[];return A.forEach(B=>{const E={component:1,ip:B.ip,type:"host",generation:B.generation};B.udpPorts&&!I.tcpOnly&&B.udpPorts.forEach(i=>{Q.push(R(R({},E),{},{foundation:g++,transport:"udp",port:i,priority:C}))}),B.tcpPorts&&B.tcpPorts.forEach(i=>{Q.push(R(R({},E),{},{foundation:g++,transport:"tcp",port:i,tcptype:"passive",priority:2130705431}))})}),Q}const C0A=A=>{const I=new TextEncoder().encode("PREC"),g=FaA(A),C=new Uint8Array(4);crypto.getRandomValues(C);const Q=new Uint8Array(2);return Q[0]=0,Q[1]=1,YaA(nV(Uint8Array,I,g,C,Q))},MY=(A,I)=>{if(!Array.isArray(A.fmtp)||!Array.isArray(A.rtp))return;for(let C=0;Cg.push(C.payload)),A.payloads=g.join(" ")},R9=(A,I)=>{let g=0;if(!Array.isArray(A.fmtp)||!Array.isArray(A.rtp))return;for(const Q of A.fmtp)if(Q.config.includes("level-asymmetry-allowed=1")&&Q.config.includes("packetization-mode=1")&&Q.config.includes("profile-level-id=42e0")){g=Q.payload;break}for(let Q=0;QC.push(Q.payload)),A.payloads=C.join(" ")},Q0A=A=>{const I=dA.parse(A);return I.media=I.media.map(g=>g.type==="audio"?E0A(g,I):B0A(g,["H264","VP8","ByteVC1"],I)),dA.write(I)},CE=A=>{A.media.forEach(I=>{I.type!=="audio"&&I.type!=="video"||I.rtp.forEach(g=>{I.rtcpFb||(I.rtcpFb=[]),I.rtcpFb.find(C=>C.payload===g.payload&&C.type==="rrtr")||I.rtcpFb.push({payload:g.payload,type:"rrtr"})})})},B0A=function(A,I,g){let C=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{rrtr:!1};const Q={},B={};let E=-1;const i=[];return Array.isArray(A.fmtp)&&A.fmtp.forEach(e=>{let{payload:o,config:t}=e;if(t.startsWith("apt=")){const s=t.slice(4);Q[o]=s}else t.includes("42e0")&&t.includes("packetization-mode=1")&&(E=o)}),Array.isArray(A.rtp)&&(A.rtp=A.rtp.filter(e=>{const o=e.codec,t=e.payload;let s;switch(o){case"H264":return s=!1,I.map(v=>{v==="H264"&&t===E&&(B[t]=t,i.push(t),s=!0)}),s;case"rtx":return!!B[Q[t]]&&(B[t]=t,!0);case"red":case"ulpfec":case"flexfec-03":return B[t]=t,!0;default:return s=!1,I.map(v=>{v===o&&(B[t]=t,i.push(t),s=!0)}),s}})),Array.isArray(A.fmtp)&&(A.fmtp=A.fmtp.filter(e=>B[e.payload])),Array.isArray(A.rtcpFb)?A.rtcpFb=A.rtcpFb.filter(e=>B[e.payload]):A.rtcpFb=[],C.rrtr&&i.forEach(e=>{var o;(o=A.rtcpFb)===null||o===void 0||o.push({payload:e,type:"rrtr"})}),IM(A,g),Array.isArray(A.ext)&&(A.ext=A.ext.filter(e=>{if(e.uri!=="http://www.webrtc.org/experiments/rtp-hdrext/video-content-type"&&e.uri!=="http://www.webrtc.org/experiments/rtp-hdrext/video-timing"&&e.uri!=="http://www.webrtc.org/experiments/rtp-hdrext/color-space")return e})),typeof A.payloads=="string"&&(A.payloads=A.payloads.split(" ").filter(e=>B[e]).join(" ")),A},E0A=function(A,I){let g=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{rrtr:!1};const C={};if(Array.isArray(A.rtp)&&(A.rtp=A.rtp.filter(Q=>{const B=Q.codec,E=Q.payload;return(B==="opus"||B==="red")&&(C[E]=E,!0)})),Array.isArray(A.rtcpFb)||(A.rtcpFb=[]),g.rrtr&&Object.keys(C).forEach(Q=>{var B;(B=A.rtcpFb)===null||B===void 0||B.push({payload:Number(Q),type:"rrtr"})}),IM(A,I),typeof A.payloads=="string"){const Q=[];A.payloads.split(" ").forEach(B=>{C[B]&&Q.push(B)}),A.payloads=Q.join(" ")}return A},IM=(A,I)=>{A.iceOptions&&delete A.iceOptions,A.icePwd&&(I.icePwd=A.icePwd,delete A.icePwd),A.iceUfrag&&(I.iceUfrag=A.iceUfrag,delete A.iceUfrag),A.fingerprint&&(I.fingerprint=A.fingerprint,delete A.fingerprint)},gM=A=>CM(A,"H265","ByteVC1"),XY=A=>CM(A,"ByteVC1","H265"),CM=(A,I,g)=>{if(A.indexOf(I)===-1)return A;const C=dA.parse(A);return C.media=C.media.map(Q=>(Q.type==="video"&&(Q.rtp=Q.rtp.map(B=>(B.codec===I&&(B.codec=g),B))),Q)),dA.write(C)},i0A=JE(),jY={iceServers:[],iceTransportPolicy:"all",bundlePolicy:"max-bundle",rtcpMuxPolicy:"require",sdpSemantics:"unified-plan",encodedInsertableStreams:!!i0A||void 0};var QM=(A=>(A[A.DC_ERROR=0]="DC_ERROR",A[A.DC_CLOSE=1]="DC_CLOSE",A[A.ICE_FAILED=2]="ICE_FAILED",A[A.DESTROY=3]="DESTROY",A[A.TIMEOUT=4]="TIMEOUT",A))(QM||{});let e0A=0;class L9 extends iQ{constructor(I,g){let C=arguments.length>2&&arguments[2]!==void 0&&arguments[2];super(),P(this,"uuid",(e0A++).toString()),P(this,"_peerConnectionId",""),P(this,"audioTrack4ff",void 0),P(this,"_pc",void 0),P(this,"_dc",void 0),P(this,"_iceNode",void 0),P(this,"_initSctpEvents",!1),P(this,"_monitor",void 0),P(this,"_offerIce",{}),P(this,"_answerIce",{}),P(this,"_offerSession",void 0),P(this,"_answerSession",void 0),P(this,"_offerMlines",[]),P(this,"_answerMlines",[]),P(this,"_connectReject",void 0),P(this,"_logger",void 0),P(this,"_destroyed",!1),P(this,"_reportTimer",void 0),P(this,"_clearPeerListeners",void 0),P(this,"_iceStartTs",0),P(this,"_icePreStepTs",0),this._ctx=I,this._groupConnectionId=g,this._isReconnect=C,this._monitor=tI(I.id),this._logger=new uA("PeerConnection_".concat(this.uuid),4,I.id),lA("DISABLE_ENCODED_TRANSFORM")&&(jY.encodedInsertableStreams=void 0),this._pc=new RTCPeerConnection(jY),this._pc.ontrack=Q=>{var B;const E=(B=Q.streams)===null||B===void 0||(B=B[0])===null||B===void 0?void 0:B.id;this._print("pc.ontrack","".concat(Q.track.kind," ").concat(Q.track.id," ").concat(E)),E==="ff-stream"&&(this.audioTrack4ff=Q.track),this.emit("ontrack",Q)},this._pc.onconnectionstatechange=()=>{this._print("onconnectionstatechange","".concat(this._pc.connectionState,". ice -> ").concat(this._pc.iceConnectionState)),this._pc.iceConnectionState!=="failed"&&this._pc.iceConnectionState!=="closed"&&this._pc.connectionState!=="failed"||this.emit("disconnect",fC.ICE_FAILED)},this._pc.oniceconnectionstatechange=()=>{const Q=this._pc.iceConnectionState;this._report("rtc_pre_ice_state",{message:Q,ice_state:Q.toUpperCase()}),this.emit("ice_state",Q)}}static checkSupported(){if(!RTCPeerConnection)throw new U(m.NOT_SUPPORTED,"missing RTCPeerConnection API.");["addTransceiver","createDataChannel","createOffer","setLocalDescription","setRemoteDescription"].forEach(I=>{var g;if((g=RTCPeerConnection)===null||g===void 0||(g=g.prototype)===null||g===void 0||!g[I])throw new U(m.NOT_SUPPORTED,"missing peer.".concat(I," API."))})}getOriginRTCPeerConnection(){return this._pc}getConnectionId(){return this._peerConnectionId}getGroupConnectionId(){return this._groupConnectionId}getIceConnectionState(){return this._pc.iceConnectionState}async createOfferSdp(){let{sdp:I}=await this._pc.createOffer();return I&&(I=gM(I)),I}async startIceConnect(I){this._print("connect","invoke. %o",I),this._iceNode=I;const g=this._pc.createDataChannel("signaling",{negotiated:!0,id:100});g.binaryType="arraybuffer",this._dc=g;const{offerIce:C,answerIce:Q}=this._genIceInfo(I);this._offerIce=C,this._answerIce=Q,this._peerConnectionId=Q.iceUfrag||"",this.reportRtcPreIce("ice_start"),mI&&(this._pc.addTransceiver("audio",{direction:"recvonly"}),this._pc.addTransceiver("video",{direction:"recvonly"}));const B=await this.createOfferSdp();if(!B)throw new U(m.NOT_SUPPORTED,"create offer sdp failed.");const E=dA.parse(B),[i]=E.media;if(this._offerIce.fingerprint=E.fingerprint||i.fingerprint,mI){E.media=E.media.map(o=>{const t=R(R({},o),this._offerIce);var s,v,r,n;return t.type==="video"&&(Fw?(t.ext=(s=t.ext)===null||s===void 0?void 0:s.filter(a=>a.uri.indexOf("abs-send-time")===-1),t.rtcpFb=(v=t.rtcpFb)===null||v===void 0?void 0:v.filter(a=>a.type!=="goog-remb")):(t.rtcpFb=(r=t.rtcpFb)===null||r===void 0?void 0:r.filter(a=>a.type!=="transport-cc"),t.ext=(n=t.ext)===null||n===void 0?void 0:n.filter(a=>a.uri.indexOf("transport")===-1))),t}),UE&&CE(E);const e=R({},E);e.fingerprint=this._answerIce.fingerprint,e.media=e.media.map(o=>(delete(o=R(R({},o),this._answerIce)).bundleOnly,o.port=9,o.type==="application"?o.sctpmap={sctpmapNumber:5e3,app:"webrtc-datachannel",maxMessageSize:262144}:(o.type==="audio"&&(o.msid="ff-stream ff-stream-audio"),o.direction="sendonly"),o)),UE&&CE(e),await this.setLocalDescription(dA.write(E)),await this.setRemoteDescription(dA.write(e))}else{delete E.media,this._offerSession=R({},E),this._answerSession=R({},E),this._answerSession.fingerprint&&(this._answerSession.fingerprint=this._answerIce.fingerprint);const e=0;this._offerMlines=[R(R(R({},i),this._offerIce),{},{mid:"".concat(e)})],this._answerMlines=[R(R(R({},i),this._answerIce),{},{sctpmap:{sctpmapNumber:5e3,app:"webrtc-datachannel",maxMessageSize:262144},mid:"".concat(e)})],this.setDescription()}return this._reportTransportStats(),await new Promise((e,o)=>{this._connectReject=o;const t=setTimeout(()=>{var c;this.reportRtcPreIce("timeout"),(c=this._connectReject)===null||c===void 0||c.call(this,{code:4,message:"connect timeout"}),delete this._connectReject},8e3),s=()=>{this._print("connect","dataChannel open"),this._reportRtcInvokeStatus("es.dc.open",""),this.reportRtcPreIce("datachannel_opened"),clearTimeout(t),e(""),delete this._connectReject},v=c=>{var d,l,h,D;this._report("rtc_signaling_msg_error",{error_code:c==null||(d=c.error)===null||d===void 0?void 0:d.sdpLineNumber,message:c==null||(l=c.error)===null||l===void 0?void 0:l.errorDetail,reason:"invalid data"}),this._reportRtcInvokeStatus("es.dc.error",""),(h=this._connectReject)===null||h===void 0||h.call(this,{message:"dc.onerror, ".concat((D=c.error)===null||D===void 0?void 0:D.errorDetail),code:0}),this.emit("disconnect",fC.DC_ERROR),delete this._connectReject,clearTimeout(t)},r=()=>{var c;this._reportRtcInvokeStatus("es.dc.close",""),(c=this._connectReject)===null||c===void 0||c.call(this,{message:"dc.onclose",code:1}),this.reportRtcPreIce("datachannel_closed"),this.emit("disconnect",fC.DC_CLOSE),delete this._connectReject,clearTimeout(t)},n=()=>{this._pc.iceConnectionState==="connected"?this.reportRtcPreIce("ice_connected"):this._pc.iceConnectionState!=="failed"&&this._pc.iceConnectionState!=="closed"||this.reportRtcPreIce("ice_failed")},a=()=>{var c;this._pc.iceConnectionState!=="failed"&&this._pc.iceConnectionState!=="closed"&&this._pc.connectionState!=="failed"||((c=this._connectReject)===null||c===void 0||c.call(this,{message:"pc.connectionstatechange -> ".concat(this._pc.connectionState,", ice -> ").concat(this._pc.iceConnectionState),code:2}),delete this._connectReject,clearTimeout(t))};g.addEventListener("open",s),g.addEventListener("error",v),g.addEventListener("close",r),this._pc.addEventListener("iceconnectionstatechange",n),this._pc.addEventListener("connectionstatechange",a),this._clearPeerListeners=()=>{g.removeEventListener("open",s),g.removeEventListener("error",v),g.removeEventListener("close",r),this._pc.removeEventListener("iceconnectionstatechange",n),this._pc.removeEventListener("connectionstatechange",a)}}),this._print("connect","dataChannel establish success"),g}async setDescription(I){this._print("setDescription","invoke."),this._offerSession.media=this._offerMlines,this._answerSession.media=this._answerMlines;const g=[];this._offerMlines.forEach(Q=>{Q.direction!=="inactive"&&Q.mid&&g.push(Q.mid)}),this._offerSession.groups&&this._answerSession.groups&&(this._offerSession.groups[0].mids=g.join(" "),this._answerSession.groups[0].mids=g.join(" "));const C=aA();I&&this._report("rtc_begin_create_offer",{direction:I.streamUserId==="local"?"up":"down",stream_id:I.streamId,stream_user_id:I.streamUserId,pc_session_id:this._peerConnectionId,vendor_mode:0}),await this._pc.createOffer(),I&&this._report("rtc_create_offer",{error_code:0,direction:I.streamUserId==="local"?"up":"down",stream_id:I.streamId,stream_user_id:I.streamUserId,elapse:aA()-C}),await this.setLocalDescription(dA.write(this._offerSession),I),await this.setRemoteDescription(dA.write(this._answerSession),I)}async setLocalDescription(I,g){const C=aA();try{if(I=XY(I),await this._pc.setLocalDescription({type:"offer",sdp:I}),this._report("rtc_set_description",{error_code:0,message:I,is_local:"1",direction:(g==null?void 0:g.streamUserId)==="local"?"up":"down",stream_id:(g==null?void 0:g.streamId)||"",stream_user_id:(g==null?void 0:g.streamUserId)||"",elapse:aA()-C},{type:"offer"}),!this._initSctpEvents){var Q;this._initSctpEvents=!0;const B=(Q=this._pc)===null||Q===void 0?void 0:Q.sctp;B&&(B.onstatechange=()=>{this._reportRtcInvokeStatus("sctp","sctp state change TO: ".concat(B.state))},B.transport&&(B.transport.onstatechange=()=>{var E;this._reportRtcInvokeStatus("dtls","dtls state change TO: ".concat(B==null||(E=B.transport)===null||E===void 0?void 0:E.state))}))}}catch(B){throw console.error("setLocal",B),this._report("rtc_set_description",{error_code:-1,message:B.message+I,is_local:"1",direction:(g==null?void 0:g.streamUserId)==="local"?"up":"down",stream_id:"",stream_user_id:"",elapse:aA()-C},{type:"offer"}),B}}async setRemoteDescription(I,g){const C=aA();try{I=XY(I),await this._pc.setRemoteDescription({type:"answer",sdp:I}),this._report("rtc_set_description",{error_code:0,message:I,is_local:"0",direction:(g==null?void 0:g.streamUserId)==="local"?"up":"down",stream_id:(g==null?void 0:g.streamId)||"",stream_user_id:(g==null?void 0:g.streamUserId)||"",elapse:aA()-C},{type:"answer"})}catch(Q){throw console.error("setRemote",Q),this._report("rtc_set_description",{error_code:-1,message:Q.message+I,is_local:"0",direction:(g==null?void 0:g.streamUserId)==="local"?"up":"down",stream_id:(g==null?void 0:g.streamId)||"",stream_user_id:(g==null?void 0:g.streamUserId)||"",elapse:aA()-C},{type:"answer"}),Q}}closeIceConnect(){var I,g,C,Q;(I=this._connectReject)===null||I===void 0||I.call(this,{code:3,message:"invoke destroy()"}),delete this._connectReject,(g=this._pc)===null||g===void 0||g.close(),(C=this._dc)===null||C===void 0||C.close(),delete this._dc,this._pc.ontrack=null,this._pc.onconnectionstatechange=null,this._pc.oniceconnectionstatechange=null,xlA(this._pc),(Q=this._clearPeerListeners)===null||Q===void 0||Q.call(this),delete this._clearPeerListeners}reportRtcPreIce(I){var g;const C=aA();I==="ice_start"&&(this._iceStartTs=C,this._icePreStepTs=C),this._report("rtc_pre_ice",{connect_event:I,message:I,elapse:C-this._icePreStepTs,total_elapse:C-this._iceStartTs,cache_status:!((g=this._iceNode)===null||g===void 0||!g.cache_status),is_reconnect:this._isReconnect}),this._icePreStepTs=C}getStatsWithLowFrequency(I,g,C){return HlA(this._pc,I,g,C)}destroy(){this._print("destroy",this._peerConnectionId),super.removeAllListeners(),this.closeIceConnect(),this._destroyed=!0,this._reportTimer&&(clearTimeout(this._reportTimer),delete this._reportTimer),delete this._pc}_genIceInfo(I){var g,C;return{offerIce:{iceUfrag:(g=I.iceParams)===null||g===void 0?void 0:g.clientIceUfrag,icePwd:(C=I.iceParams)===null||C===void 0?void 0:C.clientIcePwd,iceOptions:"renomination"},answerIce:I0A(I)}}async _reportTransportStats(){const I=await this.getStatsWithLowFrequency(),g={};var C;if(I.forEach(Q=>{Q.type==="transport"?(g.dtls_state=Q.dtlsState,g.bytes_received=Q.bytesReceived,g.bytes_sent=Q.bytesSent,g.ice_state=Q.iceState,g.packets_received=Q.packetsReceived,g.packets_sent=Q.packetsSent,g.selected_candidate_pair_changes=Q.selectedCandidatePairChanges):Q.type==="local-candidate"||Q.type==="remote-candidate"?g.candidates_info=[...g.candidates_info||[],{id:Q.id,is_remote:Q.isRemote,port:Q.port,protocol:Q.protocol,candidate_type:Q.candidateType,priority:Q.priority,network_type:Q.networkType,candidate_ip:Q.ip}]:Q.type==="candidate-pair"&&(g.candidatePairsInfo={},g.candidatePairsInfo.candidate_state=Q.state,g.candidatePairsInfo.writable_state=Q.writable,g.candidatePairsInfo.sent_ping_requests_total=Q.requestsSent,g.candidatePairsInfo.recv_ping_requests=Q.requestsReceived,g.candidatePairsInfo.sent_ping_responses=Q.responsesSent,g.candidatePairsInfo.recv_ping_responses=Q.responsesReceived,g.candidatePairsInfo.current_rtt=Q.currentRoundTripTime,g.candidatePairsInfo.total_rtt=Q.totalRoundTripTime,["localCandidateId","remoteCandidateId","bytesSent","bytesReceived","availableOutgoingBitrate","availableIncomingBitrate","bytesDiscardedOnSend","consentRequestsSent","packetsDiscardedOnSend","lastPacketReceivedTimestamp","lastPacketSentTimestamp"].forEach(B=>{Q[B]!==void 0&&(g.candidatePairsInfo[T9A(B)]=Q[B])}))}),Object.keys(g).length>0&&((C=this._monitor)===null||C===void 0||C.report("rtc_transport_statistics",g)),!this._destroyed){const Q=this._pc.iceConnectionState==="connected"&&this._pc.connectionState==="connected";this._reportTimer=setTimeout(()=>{this._reportTransportStats()},Q?5e3:1e3)}}_print(I){for(var g=arguments.length,C=new Array(g>1?g-1:0),Q=1;Q({ip:i.ip,tcp:i.tcpPorts,udp:i.udpPorts})))||[])}))}_reportRtcInvokeStatus(I,g){this._report("rtc_invoke_status",{sdk_api_name:I,message:g,error_code:0,stream_id:"",elapse:0})}}var fC=(A=>(A.ICE_FAILED="ice failed",A.DC_ERROR="datachannel onerror",A.DC_CLOSE="datachannel onclose",A.NODE_CHANGE="recv nodeChange signaling",A.NOTIFY_RECONNECT="recv notifyReconnect signaling",A.JOIN_TIMEOUT="joinRoom timeout, retry with tcp only",A))(fC||{});class o0A extends iQ{constructor(I){super(),P(this,"id",void 0),P(this,"_monitor",void 0),P(this,"logger",void 0),P(this,"_getAccessManager",void 0),P(this,"_connectionPool",new Map),P(this,"_curConnection",void 0),P(this,"_hasReportBrowerWarning",!1),P(this,"_reconnectTimer",void 0),P(this,"_connecting",!1),P(this,"_isFirstTimeConnected",!0),P(this,"_feedbackNodes",[]),P(this,"_preIceStartTime",-1),P(this,"_tcpOnlyTimer",void 0),P(this,"_destroyed",!1),this._ctx=I,this.id=I.id,this._monitor=tI(this.id),this.logger=new uA("ConnectionManager",3,this.id),this.logger.info("constructor","invoke"),this._getAccessManager=new M9A(I)}startup(){this.logger.info("connect","invoke");try{L9.checkSupported()}catch(I){this.asyncEmit("disconnected",I)}this._connecting||(this._onConnectStart(),Promise.resolve().then(()=>this.emit("__onGetIceConfigHook")),this._getAccess())}async reconnectByNodeChange(I){var g,C,Q;this.logger.info("reconnectByNodeChange","invoke %o",I);const{nodes:B,reason:E}=I;(g=this._monitor)===null||g===void 0||g.report("rtc_node_change",{error_code:0,message:JSON.stringify(I),reason:JSON.stringify(E)}),$A.clearAccessNode(this._ctx.appId),(C=this._curConnection)===null||C===void 0||C.pc.reportRtcPreIce("node_change");const i=((Q=this._curConnection)===null||Q===void 0||(Q=Q.node.publicIPs[0])===null||Q===void 0?void 0:Q.ip)||"";this._closeCurrentConnection(),this._clearConnectionPool(),this._clearReconnectTimer(),this._onConnectStart("recv nodeChange signaling"),Array.isArray(B)&&B.length>0?this._startIceConnect(B):this._getAccess([{feedbackIP:i,feedbackReason:{type:"NODE_CHANGED",reason:E}}])}async reconnect(I){let g=arguments.length>1&&arguments[1]!==void 0&&arguments[1];this.logger.info("reconnect","invoke. ".concat(g?"ICE over TCP":"")),this._closeCurrentConnection(),this._clearConnectionPool(),this._clearReconnectTimer(),this._onConnectStart(I),this._getAccess(void 0,g)}shotdown(){this.logger.info("destroy","invoke"),this._destroyed=!0,this.asyncEmit("disconnected",new U(m.OPERATION_CANCEL,"destroy")).then(()=>{super.removeAllListeners()}),this._clearReconnectTimer(),this._clearConnectionPool(),this._getAccessManager.destroy(),this._closeCurrentConnection()}_getAccess(I){let g=arguments.length>1&&arguments[1]!==void 0&&arguments[1];this._getAccessManager.getICENode(I).then(C=>{this.emit("__onGetIceSuccessHook",C),this._startIceConnect(C,g)}).catch(C=>{this.asyncEmit("disconnected",C)}).finally(()=>{this._feedbackNodes=[]})}_startIceConnect(I){let g=arguments.length>1&&arguments[1]!==void 0&&arguments[1];if(this._destroyed)return;this.logger.info("_startIceConnect","invoke");const C=tC();this._preIceStartTime=aA();const Q=this._ctx.joinRoomConfig.useTcpJoin,B=this._ctx.joinRoomConfig.useTcpJoinDelay,E=async i=>{g&&((i=js(i)).iceConfig.tcpOnly=!0);const e={node:i};try{const o=new L9(this._ctx,C,!this._isFirstTimeConnected);e.pc=o,this._connectionPool.set(o.uuid,e);const t=await o.startIceConnect(i),s=new p9A(this.id,t,{connection_id:o.getConnectionId(),group_connection_id:C});e.signaling=s,o.reportRtcPreIce("datachannel_send_ping"),await s.sendPingSignaling(),o.reportRtcPreIce("datachannel_recv_pong"),this._onConnectSuccess({node:i,pc:o,signaling:s,dc:t}),this.safeEmit("__onConnectSuccessHook",I.length)}catch(o){this._onConnectionFailed(e,o)}};this.emit("__onIceConnectStartHook"),I.forEach(E),Q&&!g&&(this.logger.info("_startIceConnect","tcp-only will try after ".concat(B,"ms")),this._tcpOnlyTimer=setTimeout(()=>{this.emit("connectWidthTcp"),I.forEach(i=>{(i=js(i)).iceConfig.tcpOnly=!0,E(i)}),delete this._tcpOnlyTimer},B))}_onConnectSuccess(I){var g;this.logger.info("connect","peer_%s connect success.",I.pc.uuid),this.emit("__onIceConnectSuccessHook",I),this._curConnection?(I.pc.destroy(),I.signaling.destroy(),this._connectionPool.delete(I.pc.uuid)):(this._curConnection=I,this._addConnectionHandler(I.pc),(g=this._monitor)===null||g===void 0||g.set({connection_id:I.pc.getConnectionId()}),this._connectionPool.delete(I.pc.uuid),this._feedbackNodes.forEach(C=>this._feedbackBySignaling(C)),this._feedbackNodes=[],this._onConnectEnded(I))}_onConnectionFailed(I,g){var C,Q;this.logger.info("connect","peer_%s connect failed. %s",((C=I.pc)===null||C===void 0?void 0:C.uuid)||"",g.message),this.emit("__onIceConnectFailedHook",I),g.code!==QM.DESTROY&&g.code!==m.OPERATION_CANCEL&&(this._curConnection?this._feedbackBySignaling(I.node):this._feedbackNodes.push(I.node),this.logger.info("connect","remove cache node"),$A.deleteAccessNode(this._ctx.appId,I.node),I.pc&&(this._connectionPool.delete(I.pc.uuid),I.pc.destroy()),(Q=I.signaling)===null||Q===void 0||Q.destroy(),this._connectionPool.size!==0||this._curConnection||this._destroyed||(this.logger.error("connect","establish peerConnection failed"),this._checkBrowserUA(),aA()-this._preIceStartTime<1e3?(this._clearReconnectTimer(),this._reconnectTimer=setTimeout(()=>{delete this._reconnectTimer,this._reconnectWithIceFailed(this._feedbackNodes)},1e3)):this._reconnectWithIceFailed(this._feedbackNodes)))}_feedbackBySignaling(I){var g;(g=this._curConnection)===null||g===void 0||g.signaling.sendSignaling("scheduleMessage",{type:"feedback",body:{feedbackIP:I.publicIPs[0].ip,feedbackReason:{type:"ICE_FAILED",reason:{}}}})}async _reconnectWithIceFailed(I){this._onConnectStart("ice failed"),this.logger.warn("reconnect","because of ice failed"),this._getAccess(I.map(g=>({feedbackIP:g.publicIPs[0].ip,feedbackReason:{type:"ICE_FAILED",reason:{}}})))}_checkBrowserUA(){var I;!this._hasReportBrowerWarning&&this._ctx.joinRoomConfig.isBlackBrower()&&(this._hasReportBrowerWarning=!0,(I=this._monitor)===null||I===void 0||I.report("rtc_error",{error_code:TC.BLACK_BROWSER,message:"failed to establish data-channel, and the current browser is on the browser blacklist."}))}_onConnectStart(I){var g;this.logger.info("_onConnectStart","invoke, reason: ".concat(I||"init")),this._connecting=!0,I?this.asyncEmit("reconnecting",I):this.asyncEmit("connecting");const C=tC();var Q;(g=this._monitor)===null||g===void 0||g.set({connect_session_id:C}),this._isFirstTimeConnected||(Q=this._monitor)===null||Q===void 0||Q.report("rtc_reconnect",{error_code:1002,message:"peerconnection reconnecting",reconnect_id:C,reconnect_type:"peerconnection"},{reason:I})}_onConnectEnded(I){var g;this.logger.info("_onConnectEnded","invoke"),this._connecting=!1,this._isFirstTimeConnected||(g=this._monitor)===null||g===void 0||g.report("rtc_reconnected",{message:"peerconnection reconnected",reconnect_type:"peerconnection"}),this._isFirstTimeConnected=!1,this.asyncEmit("connected",I),I.node.iceConfig.tcpOnly&&(this.logger.info("_onConnectEnded","use tcp only"),AI(this._ctx.id,"connected_with_tcp_only",JSON.stringify(I.node))),this._tcpOnlyTimer&&(window.clearTimeout(this._tcpOnlyTimer),delete this._tcpOnlyTimer),this._clearConnectionPool()}_addConnectionHandler(I){I.on("disconnect",g=>{this._closeCurrentConnection(),this._clearReconnectTimer(),navigator.onLine?this.reconnect(g):this._reconnectTimer=setTimeout(()=>this.reconnect(g),3e3)})}_closeCurrentConnection(){var I,g;(I=this._curConnection)===null||I===void 0||I.pc.destroy(),(g=this._curConnection)===null||g===void 0||g.signaling.destroy(),delete this._curConnection}_clearConnectionPool(){this._connectionPool.forEach((I,g)=>{var C,Q;(C=I.signaling)===null||C===void 0||C.destroy(),(Q=I.pc)===null||Q===void 0||Q.destroy(),this._connectionPool.delete(g)})}_clearReconnectTimer(){this._reconnectTimer&&(window.clearTimeout(this._reconnectTimer),delete this._reconnectTimer)}}var t0A=av,s0A=t0A.f("asyncIterator"),v0A=s0A,r0A=v0A,a0A=r0A,P0A=a0A,c0A=P0A,n0A=c0A,l0A=n0A,d0A=CI(l0A),fY=hg,h0A=s1,D0A=iv,u0A=xQ,b0A=function(A,I,g){for(var C=h0A(I),Q=u0A.f,B=D0A.f,E=0;EB;B++)if((i=d(A[B]))&&xY(qY,i))return i;return new vl(!1)}C=X0A(A,Q)}for(e=v?A.next:C.next;!(o=J0A(e,C)).done;){try{i=d(o.value)}catch(l){OY(C,"throw",l)}if(typeof i=="object"&&i&&xY(qY,i))return i}return new vl(!1)},H0A=NC,x0A=function(A,I){return A===void 0?arguments.length<2?"":I:H0A(A)},O0A=yA,q0A=fg,_0A=IR,S9=_CA,$0A=b0A,iM=lP,Au=Uo,Iu=oe,AdA=m0A,IdA=Z0A,gdA=uv,CdA=x0A,QdA=vI,BdA=QdA("toStringTag"),T9=Error,EdA=[].push,fs=function(A,I){var g,C=q0A(gu,this);S9?g=S9(new T9,C?_0A(this):gu):(g=C?this:iM(gu),Au(g,BdA,"Error")),I!==void 0&&Au(g,"message",CdA(I)),IdA(g,fs,g.stack,1),arguments.length>2&&AdA(g,arguments[2]);var Q=[];return gdA(A,EdA,{that:Q}),Au(g,"errors",Q),g};S9?S9(fs,T9):$0A(fs,T9,{name:!0});var gu=fs.prototype=iM(T9.prototype,{constructor:Iu(1,fs),message:Iu(1,""),name:Iu(1,"AggregateError")});O0A({global:!0},{AggregateError:fs});var _a,rt,_Y,Cu,rr=QI,idA=te,edA=ee,Hc=function(A){return idA.slice(0,A.length)===A},eM=Hc("Bun/")?"BUN":Hc("Cloudflare-Workers")?"CLOUDFLARE":Hc("Deno/")?"DENO":Hc("Node.js/")?"NODE":rr.Bun&&typeof Bun.version=="string"?"BUN":rr.Deno&&typeof Deno.version=="object"?"DENO":edA(rr.process)==="process"?"NODE":rr.window&&rr.document?"BROWSER":"REST",odA=eM,NR=odA==="NODE",tdA=kg,sdA=U0,vdA=vI,rdA=Qg,$Y=vdA("species"),adA=function(A){var I=tdA(A);rdA&&I&&!I[$Y]&&sdA(I,$Y,{configurable:!0,get:function(){return this}})},PdA=HG,cdA=ov,ndA=TypeError,ldA=function(A){if(PdA(A))return A;throw new ndA(cdA(A)+" is not a constructor")},Ak=EQ,ddA=ldA,hdA=aP,DdA=vI,udA=DdA("species"),oM=function(A,I){var g,C=Ak(A).constructor;return C===void 0||hdA(g=Ak(C)[udA])?I:ddA(g)},bdA=te,tM=/(?:ipad|iphone|ipod).*applewebkit/i.test(bdA),qC=QI,ydA=u0,wdA=XE,Ik=xI,mdA=hg,sM=II,gk=CW,GdA=rv,Ck=MG,RdA=GP,LdA=tM,SdA=NR,fw=qC.setImmediate,Qk=qC.clearImmediate,TdA=qC.process,Qu=qC.Dispatch,UdA=qC.Function,Bk=qC.MessageChannel,FdA=qC.String,Bu=0,Pa={},Ek="onreadystatechange";sM(function(){_a=qC.location});var ZR=function(A){if(mdA(Pa,A)){var I=Pa[A];delete Pa[A],I()}},Eu=function(A){return function(){ZR(A)}},ik=function(A){ZR(A.data)},ek=function(A){qC.postMessage(FdA(A),_a.protocol+"//"+_a.host)};fw&&Qk||(fw=function(A){RdA(arguments.length,1);var I=Ik(A)?A:UdA(A),g=GdA(arguments,1);return Pa[++Bu]=function(){ydA(I,void 0,g)},rt(Bu),Bu},Qk=function(A){delete Pa[A]},SdA?rt=function(A){TdA.nextTick(Eu(A))}:Qu&&Qu.now?rt=function(A){Qu.now(Eu(A))}:Bk&&!LdA?(Cu=(_Y=new Bk).port2,_Y.port1.onmessage=ik,rt=wdA(Cu.postMessage,Cu)):qC.addEventListener&&Ik(qC.postMessage)&&!qC.importScripts&&_a&&_a.protocol!=="file:"&&!sM(ek)?(rt=ek,qC.addEventListener("message",ik,!1)):rt=Ek in Ck("script")?function(A){gk.appendChild(Ck("script"))[Ek]=function(){gk.removeChild(this),ZR(A)}}:function(A){setTimeout(Eu(A),0)});var vM={set:fw},rM=function(){this.head=null,this.tail=null};rM.prototype={add:function(A){var I={item:A,next:null},g=this.tail;g?g.next=I:this.head=I,this.tail=I},get:function(){var A=this.head;if(A)return(this.head=A.next)===null&&(this.tail=null),A.item}};var at,iu,eu,ou,ok,aM=rM,YdA=te,kdA=/ipad|iphone|ipod/i.test(YdA)&&typeof Pebble<"u",pdA=te,NdA=/web0s(?!.*chrome)/i.test(pdA),Hs=QI,ZdA=nz,tk=XE,tu=vM.set,KdA=aM,JdA=tM,WdA=kdA,VdA=NdA,su=NR,sk=Hs.MutationObserver||Hs.WebKitMutationObserver,vk=Hs.document,rk=Hs.process,xc=Hs.Promise,Hw=ZdA("queueMicrotask");if(!Hw){var Oc=new KdA,qc=function(){var A,I;for(su&&(A=rk.domain)&&A.exit();I=Oc.get();)try{I()}catch(g){throw Oc.head&&at(),g}A&&A.enter()};JdA||su||VdA||!sk||!vk?!WdA&&xc&&xc.resolve?((ou=xc.resolve(void 0)).constructor=xc,ok=tk(ou.then,ou),at=function(){ok(qc)}):su?at=function(){rk.nextTick(qc)}:(tu=tk(tu,Hs),at=function(){tu(qc)}):(iu=!0,eu=vk.createTextNode(""),new sk(qc).observe(eu,{characterData:!0}),at=function(){eu.data=iu=!iu}),Hw=function(A){Oc.head||at(),Oc.add(A)}}var zdA=Hw,MdA=function(A,I){try{arguments.length===1?console.error(A):console.error(A,I)}catch{}},bv=function(A){try{return{error:!1,value:A()}}catch(I){return{error:!0,value:I}}},XdA=QI,uo=XdA.Promise,jdA=QI,ca=uo,fdA=xI,HdA=VJ,xdA=fJ,OdA=vI,ak=eM,vu=PP,Pk=ca&&ca.prototype,qdA=OdA("species"),PM=fdA(jdA.PromiseRejectionEvent),_dA=HdA("Promise",function(){var A=xdA(ca),I=A!==String(ca);if(!I&&vu===66||!Pk.catch||!Pk.finally)return!0;if(!vu||vu<51||!/native code/.test(A)){var g=new ca(function(Q){Q(1)}),C=function(Q){Q(function(){},function(){})};if((g.constructor={})[qdA]=C,!(g.then(function(){})instanceof C))return!0}return!(I||ak!=="BROWSER"&&ak!=="DENO"||PM)}),RP={CONSTRUCTOR:_dA,REJECTION_EVENT:PM},tE={},ck=fQ,$dA=TypeError,AhA=function(A){var I,g;this.promise=new A(function(C,Q){if(I!==void 0||g!==void 0)throw new $dA("Bad Promise constructor");I=C,g=Q}),this.resolve=ck(I),this.reject=ck(g)};tE.f=function(A){return new AhA(A)};var IhA=yA,U9=NR,ge=QI,LP=Bg,ghA=se,ChA=fE,QhA=adA,BhA=fQ,xw=xI,EhA=rC,ihA=DR,ehA=oM,cM=vM.set,KR=zdA,ohA=MdA,thA=bv,shA=aM,nM=Pv,Ow=uo,lM=RP,dM=tE,rl="Promise",nk=lM.CONSTRUCTOR,vhA=lM.REJECTION_EVENT,ru,lk,rhA,au=nM.getterFor(rl),ahA=nM.set,PhA=Ow&&Ow.prototype,ar=Ow,Pu=PhA,hM=ge.TypeError,qw=ge.document,JR=ge.process,_w=dM.f,chA=_w,nhA=!!(qw&&qw.createEvent&&ge.dispatchEvent),DM="unhandledrejection",lhA="rejectionhandled",dk=0,uM=1,dhA=2,WR=1,bM=2,yM=function(A){var I;return!(!EhA(A)||!xw(I=A.then))&&I},wM=function(A,I){var g,C,Q,B=I.value,E=I.state===uM,i=E?A.ok:A.fail,e=A.resolve,o=A.reject,t=A.domain;try{i?(E||(I.rejection===bM&&DhA(I),I.rejection=WR),i===!0?g=B:(t&&t.enter(),g=i(B),t&&(t.exit(),Q=!0)),g===A.promise?o(new hM("Promise-chain cycle")):(C=yM(g))?LP(C,g,e,o):e(g)):o(B)}catch(s){t&&!Q&&t.exit(),o(s)}},mM=function(A,I){A.notified||(A.notified=!0,KR(function(){for(var g,C=A.reactions;g=C.get();)wM(g,A);A.notified=!1,I&&!A.rejection&&hhA(A)}))},GM=function(A,I,g){var C,Q;nhA?((C=qw.createEvent("Event")).promise=I,C.reason=g,C.initEvent(A,!1,!0),ge.dispatchEvent(C)):C={promise:I,reason:g},!vhA&&(Q=ge["on"+A])?Q(C):A===DM&&ohA("Unhandled promise rejection",g)},hhA=function(A){LP(cM,ge,function(){var I,g=A.facade,C=A.value;if(hk(A)&&(I=thA(function(){U9?JR.emit("unhandledRejection",C,g):GM(DM,g,C)}),A.rejection=U9||hk(A)?bM:WR,I.error))throw I.value})},hk=function(A){return A.rejection!==WR&&!A.parent},DhA=function(A){LP(cM,ge,function(){var I=A.facade;U9?JR.emit("rejectionHandled",I):GM(lhA,I,A.value)})},is=function(A,I,g){return function(C){A(I,C,g)}},ms=function(A,I,g){A.done||(A.done=!0,g&&(A=g),A.value=I,A.state=dhA,mM(A,!0))},$w=function(A,I,g){if(!A.done){A.done=!0,g&&(A=g);try{if(A.facade===I)throw new hM("Promise can't be resolved itself");var C=yM(I);C?KR(function(){var Q={done:!1};try{LP(C,I,is($w,Q,A),is(ms,Q,A))}catch(B){ms(Q,B,A)}}):(A.value=I,A.state=uM,mM(A,!1))}catch(Q){ms({done:!1},Q,A)}}};nk&&(Pu=(ar=function(A){ihA(this,Pu),BhA(A),LP(ru,this);var I=au(this);try{A(is($w,I),is(ms,I))}catch(g){ms(I,g)}}).prototype,(ru=function(A){ahA(this,{type:rl,done:!1,notified:!1,parent:!1,reactions:new shA,rejection:!1,state:dk,value:null})}).prototype=ghA(Pu,"then",function(A,I){var g=au(this),C=_w(ehA(this,ar));return g.parent=!0,C.ok=!xw(A)||A,C.fail=xw(I)&&I,C.domain=U9?JR.domain:void 0,g.state===dk?g.reactions.add(C):KR(function(){wM(C,g)}),C.promise}),lk=function(){var A=new ru,I=au(A);this.promise=A,this.resolve=is($w,I),this.reject=is(ms,I)},dM.f=_w=function(A){return A===ar||A===rhA?new lk(A):chA(A)}),IhA({global:!0,wrap:!0,forced:nk},{Promise:ar}),ChA(ar,rl,!1,!0),QhA(rl);var uhA=vI,RM=uhA("iterator"),LM=!1;try{var bhA=0,Dk={next:function(){return{done:!!bhA++}},return:function(){LM=!0}};Dk[RM]=function(){return this},Array.from(Dk,function(){throw 2})}catch{}var yhA=function(A,I){try{if(!I&&!LM)return!1}catch{return!1}var g=!1;try{var C={};C[RM]=function(){return{next:function(){return{done:g=!0}}}},A(C)}catch{}return g},whA=uo,mhA=yhA,GhA=RP.CONSTRUCTOR,M0=GhA||!mhA(function(A){whA.all(A).then(void 0,function(){})}),RhA=yA,LhA=Bg,ShA=fQ,ThA=tE,UhA=bv,FhA=uv,YhA=M0;RhA({target:"Promise",stat:!0,forced:YhA},{all:function(A){var I=this,g=ThA.f(I),C=g.resolve,Q=g.reject,B=UhA(function(){var E=ShA(I.resolve),i=[],e=0,o=1;FhA(A,function(t){var s=e++,v=!1;o++,LhA(E,I,t).then(function(r){v||(v=!0,i[s]=r,--o||C(i))},Q)}),--o||C(i)});return B.error&&Q(B.value),g.promise}});var khA=yA,phA=RP.CONSTRUCTOR;uo&&uo.prototype,khA({target:"Promise",proto:!0,forced:phA,real:!0},{catch:function(A){return this.then(void 0,A)}});var NhA=yA,ZhA=Bg,KhA=fQ,JhA=tE,WhA=bv,VhA=uv,zhA=M0;NhA({target:"Promise",stat:!0,forced:zhA},{race:function(A){var I=this,g=JhA.f(I),C=g.reject,Q=WhA(function(){var B=KhA(I.resolve);VhA(A,function(E){ZhA(B,I,E).then(g.resolve,C)})});return Q.error&&C(Q.value),g.promise}});var MhA=yA,XhA=tE,jhA=RP.CONSTRUCTOR;MhA({target:"Promise",stat:!0,forced:jhA},{reject:function(A){var I=XhA.f(this);return(0,I.reject)(A),I.promise}});var fhA=EQ,HhA=rC,xhA=tE,SM=function(A,I){if(fhA(A),HhA(I)&&I.constructor===A)return I;var g=xhA.f(A);return(0,g.resolve)(I),g.promise},OhA=yA,qhA=kg,_hA=JJ,$hA=uo,ADA=RP.CONSTRUCTOR,IDA=SM,gDA=qhA("Promise"),CDA=!ADA;OhA({target:"Promise",stat:!0,forced:_hA},{resolve:function(A){return IDA(CDA&&this===gDA?$hA:this,A)}});var QDA=yA,BDA=Bg,EDA=fQ,iDA=tE,eDA=bv,oDA=uv,tDA=M0;QDA({target:"Promise",stat:!0,forced:tDA},{allSettled:function(A){var I=this,g=iDA.f(I),C=g.resolve,Q=g.reject,B=eDA(function(){var E=EDA(I.resolve),i=[],e=0,o=1;oDA(A,function(t){var s=e++,v=!1;o++,BDA(E,I,t).then(function(r){v||(v=!0,i[s]={status:"fulfilled",value:r},--o||C(i))},function(r){v||(v=!0,i[s]={status:"rejected",reason:r},--o||C(i))})}),--o||C(i)});return B.error&&Q(B.value),g.promise}});var sDA=yA,vDA=Bg,rDA=fQ,aDA=kg,PDA=tE,cDA=bv,nDA=uv,lDA=M0,uk="No one promise resolved";sDA({target:"Promise",stat:!0,forced:lDA},{any:function(A){var I=this,g=aDA("AggregateError"),C=PDA.f(I),Q=C.resolve,B=C.reject,E=cDA(function(){var i=rDA(I.resolve),e=[],o=0,t=1,s=!1;nDA(A,function(v){var r=o++,n=!1;t++,vDA(i,I,v).then(function(a){n||s||(s=!0,Q(a))},function(a){n||s||(n=!0,e[r]=a,--t||B(new g(e,uk)))})}),--t||B(new g(e,uk))});return E.error&&B(E.value),C.promise}});var dDA=yA,hDA=QI,DDA=u0,uDA=rv,bDA=tE,yDA=fQ,TM=bv,cu=hDA.Promise,bk=!1,wDA=!cu||!cu.try||TM(function(){cu.try(function(A){bk=A===8},8)}).error||!bk;dDA({target:"Promise",stat:!0,forced:wDA},{try:function(A){var I=arguments.length>1?uDA(arguments,1):[],g=bDA.f(this),C=TM(function(){return DDA(yDA(A),void 0,I)});return(C.error?g.reject:g.resolve)(C.value),g.promise}});var mDA=yA,GDA=tE;mDA({target:"Promise",stat:!0},{withResolvers:function(){var A=GDA.f(this);return{promise:A.promise,resolve:A.resolve,reject:A.reject}}});var RDA=yA,Am=uo,LDA=II,SDA=kg,TDA=xI,UDA=oM,yk=SM,FDA=Am&&Am.prototype,YDA=!!Am&&LDA(function(){FDA.finally.call({then:function(){}},function(){})});RDA({target:"Promise",proto:!0,real:!0,forced:YDA},{finally:function(A){var I=UDA(this,SDA("Promise")),g=TDA(A);return this.then(g?function(C){return yk(I,A()).then(function(){return C})}:A,g?function(C){return yk(I,A()).then(function(){throw C})}:A)}});var kDA=pC,pDA=kDA.Promise,NDA=pDA,ZDA=NDA,KDA=ZDA,JDA=KDA,WDA=JDA,VDA=WDA,zDA=VDA,_c=CI(zDA);function MDA(A){var I,g,C,Q=2;for(Lr!==void 0&&(g=d0A,C=jW);Q--;){if(g&&(I=A[g])!=null)return I.call(A);if(C&&(I=A[C])!=null)return new Im(I.call(A));g="@@asyncIterator",C="@@iterator"}throw new TypeError("Object is not async iterable")}function Im(A){function I(g){if(Object(g)!==g)return _c.reject(new TypeError(g+" is not an object."));var C=g.done;return _c.resolve(g.value).then(function(Q){return{value:Q,done:C}})}return(Im=function(g){this.s=g,this.n=g.next}).prototype={s:null,n:null,next:function(){return I(this.n.apply(this.s,arguments))},return:function(g){var C=this.s.return;return C===void 0?_c.resolve({value:g,done:!0}):I(C.apply(this.s,arguments))},throw:function(g){var C=this.s.return;return C===void 0?_c.reject(g):I(C.apply(this.s,arguments))}},new Im(A)}var XDA=(A=>(A[A.AUTO=0]="AUTO",A[A.MODE_L=1]="MODE_L",A[A.MODE_R=2]="MODE_R",A[A.MODE_MIX=3]="MODE_MIX",A))(XDA||{}),JQ=(A=>(A[A.PLAYOUT=0]="PLAYOUT",A[A.PUBLISH=1]="PUBLISH",A[A.PLAYOUT_AND_PUBLISH=2]="PLAYOUT_AND_PUBLISH",A))(JQ||{}),nC=(A=>(A[A.AUDIO_MIXING_STATE_PRELOADED=0]="AUDIO_MIXING_STATE_PRELOADED",A[A.AUDIO_MIXING_STATE_PLAYING=1]="AUDIO_MIXING_STATE_PLAYING",A[A.AUDIO_MIXING_STATE_PAUSED=2]="AUDIO_MIXING_STATE_PAUSED",A[A.AUDIO_MIXING_STATE_STOPPED=3]="AUDIO_MIXING_STATE_STOPPED",A[A.AUDIO_MIXING_STATE_FAILED=4]="AUDIO_MIXING_STATE_FAILED",A[A.AUDIO_MIXING_STATE_FINISHED=5]="AUDIO_MIXING_STATE_FINISHED",A[A.AUDIO_MIXING_STATE_PCM_ENABLED=6]="AUDIO_MIXING_STATE_PCM_ENABLED",A[A.AUDIO_MIXING_STATE_PCM_DISABLED=7]="AUDIO_MIXING_STATE_PCM_DISABLED",A))(nC||{});class VR extends UB.EventEmitter{constructor(I,g){super(),P(this,"_context",void 0),P(this,"peerConnectionMode",0),P(this,"id",void 0),P(this,"_monitor",void 0),P(this,"logger",void 0),P(this,"_nextSsrc",A0A()),P(this,"_aSendonlyAnswerTpl",void 0),P(this,"_vSendonlyAnswerTpl",void 0),P(this,"_enableSubFlexfec",!1),P(this,"audioTrack4ff",void 0),P(this,"setLocalDescription",void 0),P(this,"setRemoteDescription",void 0),this.peer=g,this.id=I.id,this._monitor=tI(this.id),this.logger=new uA("BasicHandler",3,I.id),this.setLocalDescription=g.setLocalDescription.bind(g),this.setRemoteDescription=g.setRemoteDescription.bind(g),this._context=I,this.peer.on("ontrack",C=>{this.emit("ontrack",C)})}destroy(){this.logger.info("destroy",this.peerConnectionId||""),super.removeAllListeners()}get _peerConnection(){return this.peer.getOriginRTCPeerConnection()}getTransceivers(){return this._peerConnection.getTransceivers()}getConnectionState(){return this._peerConnection.connectionState}internalPublish(I){const{stream:g,videoTrack:C,audioTrack:Q,pubAudio:B,pubVideo:E}=I,i={direction:"sendonly",streams:[g]},e={direction:"sendonly",streams:[g]},{sendEncodings:o,videoDescriptions:t,subVideoDescriptions:s,activeSimulcastStreams:v}=this._context.videoProfile.genVideoDescriptions(I);e.sendEncodings=o,this._context.videoProfile.activeSimStreams=v,this.logger.info("publish videoTransceiverInit videoDescriptions","",e,t);let r=Q==null?void 0:Q.preprocessingTrack;(Q==null?void 0:Q.mixType)!==JQ.PLAYOUT&&Q!=null&&Q.mixedAudioTrack&&(r=Q==null?void 0:Q.mixedAudioTrack),r=B&&r?r:"audio";let n=C==null?void 0:C.preprocessingTrack;n=E&&n?n:"video";try{this._reportRtcInvokeStatus("Handler.internalPublish",JSON.stringify({aTrack:KQ(r),vTrack:KQ(n),audioTransceiverInit:i,videoTransceiverInit:e}))}catch{}return{semantics:"unified-plan",videoDescriptions:t,subVideoDescriptions:s,audioTransceiverInit:{track:r,init:i},videoTransceiverInit:{track:n,init:e}}}async setCurrentDescription(){}createAVMlineAnswerTpl(I){const g=dA.parse(I);g.media.forEach(C=>{if(C.type==="audio"){if(C.direction==="sendonly"){const Q=C==null?void 0:C.rtp.find(B=>B.codec==="opus");if(Q&&C!=null&&C.fmtp){const B=C==null?void 0:C.fmtp.find(E=>E.payload===Q.payload);B&&this._context&&(B.config+=";stereo=1;sprop-stereo=1")}this._aSendonlyAnswerTpl=C}}else C.type==="video"&&(C.direction==="sendonly"&&(this._vSendonlyAnswerTpl=C),Array.isArray(C.rtp)&&C.rtp.forEach(Q=>{var B;(B=Q.codec)!==null&&B!==void 0&&B.includes("flexfec")&&(this._enableSubFlexfec=!0)}))}),UE&&CE(g)}get peerConnectionId(){return this.peer.getConnectionId()||""}addBitrateLimit(I,g){I==null||I.rtp.forEach(C=>{let{codec:Q,payload:B}=C;if(["vp8","h264"].includes(Q.toLocaleLowerCase())){const E=I.fmtp.find(i=>i.payload===B);E?E.config=[...E.config.split(";"),"x-google-min-bitrate=100","x-google-start-bitrate=".concat(g)].join(";"):I.fmtp.push({payload:B,config:"x-google-min-bitrate=100;x-google-start-bitrate=".concat(g)})}})}_report(I,g,C){var Q;(Q=this._monitor)===null||Q===void 0||Q.report(I,R(R({},g),{},{connection_id:this.peer.getConnectionId(),group_connection_id:this.peer.getGroupConnectionId()}),C)}_reportRtcInvokeStatus(I,g){let C=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,Q=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"",B=arguments.length>4?arguments[4]:void 0;this._report("rtc_invoke_status",{sdk_api_name:I,message:g,error_code:C,stream_id:Q,elapse:0},B)}}const jDA=new uA("queue",4);var UM=(A=>(A[A.ADD=0]="ADD",A[A.CLOSE=1]="CLOSE",A))(UM||{}),iI=(A=>(A.publish="publish",A.unpublish="unpublish",A.subscribe="subscribe",A.unsubscribe="unsubscribe",A.pushtrack="pushtrack",A.removetrack="removetrack",A))(iI||{});const fDA={publish:"unpublish",subscribe:"unsubscribe",pushtrack:"removetrack"},wk={publish:0,subscribe:0,pushtrack:0,unpublish:1,unsubscribe:1,removetrack:1};class HDA extends mPA{constructor(){super(),P(this,"_queue",void 0),this._queue=[]}get queue(){return this._queue}enqueue(I){const g=this._queue.length;let C="";return this._queue=this._queue.filter(Q=>Q.streamId!==I.streamId||I.action!==fDA[Q.action]||(C=Q.streamId,jDA.info("offsetStreamId",C),!1)),this._queue.length===g&&this._queue.push(I),this.emit("start"),C}dequeue(){if(!this._queue.length)return null;let I=this._queue.length;xi&&YQ>=86&&YQ<=92&&(I=Math.min(this._queue.length,5));const g=wk[this._queue[0].action];for(let C=1;C{this._queueBusy||this._peerConnection.signalingState!=="stable"||(this.logger.info("dequeue start"),this.dequeue())})}destroy(){super.destroy(),this._sdpQueue.destroy()}async publish(I){var g;const{stream:C,enableSimulcast:Q}=I,{videoDescriptions:B,subVideoDescriptions:E,audioTransceiverInit:i,videoTransceiverInit:e}=super.internalPublish(I),o=w9(this._nextSsrc);this._nextSsrc=o.next;const t="".concat(this._mid++),s="".concat(this._mid++),v=R(R(R({},this._aSendonlyOfferTpl),this.peer._offerIce),{},{mid:t,msid:"".concat(C.id," ").concat(C.id,"-audio"),ssrcs:m9(C.id,"audio",o.audio,zY)}),r=R(R(R({},this._vSendonlyOfferTpl),this.peer._offerIce),{},{mid:s,msid:"".concat(C.id," ").concat(C.id,"-video")});if(Q){this.logger.info("subVideoDesc","desc: %o ",E),delete r.ssrcGroups,delete r.ssrcs;const a=[];r.rids=B.map(c=>{let{rid:d}=c;return a.unshift(d),{id:d,direction:"send"}}),r.simulcast={dir1:"send",list1:a.join(";")}}else{const{ssrcs:a,ssrcGroups:c}=Xw(C.id,o,{cname:zY});r.ssrcs=a,r.ssrcGroups=c}if((g=this._context.serverConfig)!==null&&g!==void 0&&g.audioRed&&Array.isArray(v.rtp)){const a=v.rtp.findIndex(d=>d.codec==="red");if(a!==-1){const[d]=v.rtp.splice(a,1);v.rtp.unshift(d)}const c=[];v.rtp.forEach(d=>c.push(d.payload)),v.payloads=c.join(" ")}Array.isArray(r.ext)&&(lA("IOS_SAFARI_ORIENTATION")||!CQ&&!Yo||(r.ext=r.ext.filter(a=>{var c;return!(a!=null&&(c=a.uri)!==null&&c!==void 0&&c.includes("video-orientation"))})),r.ext=r.ext.filter(a=>{var c;return!(a!=null&&(c=a.uri)!==null&&c!==void 0&&c.includes("framemarking"))}));const n=v==null?void 0:v.rtp.find(a=>a.codec==="opus");if(n&&v.fmtp){const a=v.fmtp.find(c=>c.payload===n.payload);a&&this._context.audioProfileManager&&(a.config=this._context.audioProfileManager.getOpusConfigStr(a.config))}return Q||CQ||this.addBitrateLimit(r,I.videoEncodeConfig[0].maxKbps),I.audioMLine=v,I.videoMLine=r,{partialSdp:G9(this.peer._offerSession,v,r),audioMid:t,videoMid:s,type:"incroffer",semantics:"unified-plan",videoDescriptions:B,subVideoDescriptions:E,audioTransceiverInit:i,videoTransceiverInit:e,peerConnectionMode:this.peerConnectionMode}}async subscribe(I,g){var C,Q;if(this.logger.info("subscribe"),!this._aRecvonlyOfferTpl||!this._vRecvonlyOfferTpl){const w=await this._genOfferSdp();await this.createAVMlineOfferTpl(w)}let B,E,i,e,o="",t="",s=!1,v=!1;I.audioMLine=B,I.videoMLine=E,I.virtual?(o="".concat(this._mid++),s=!0):g.multiChatMode?(o="".concat(this._mid++),t="".concat(this._mid++),v=!0):(s=!0,v=!0,o="".concat(this._mid++),t="".concat(this._mid++)),o&&(B=R(R({},js(this._aRecvonlyOfferTpl)),{},{mid:o})),s&&(I.audioMLine=B,i={track:"audio",init:{direction:"recvonly"}}),t&&(E=R(R({},js(this._vRecvonlyOfferTpl)),{},{mid:t})),v&&(I.videoMLine=E,e={track:"video",init:{direction:"recvonly"}});const r=G9(this.peer._offerSession,B,E);let n,a;if(!I.enableVendorMode&&!g.multiChatMode&&!I.virtual&&this._aSendonlyAnswerTpl&&this._vSendonlyAnswerTpl){var c;n=w9(this._nextSsrc),this._nextSsrc=n.next;const w=R(R(R({},this._aSendonlyAnswerTpl),this.peer._answerIce),{},{mid:o,msid:"".concat(I.streamId).concat(this._context.avSync?"":"-audio"," ").concat(I.streamId,"-audio"),ssrcs:m9(I.streamId,"audio",n.audio)}),b=R(R(R({},this._vSendonlyAnswerTpl),this.peer._answerIce),{},{mid:t,msid:"".concat(I.streamId).concat(this._context.avSync?"":"-video"," ").concat(I.streamId,"-video")},Xw(I.streamId,n,{flexfec:this._enableSubFlexfec}));a={sdp:dA.write(R(R({},this.peer._answerSession),{},{media:[w,b]})),sequenceId:I.sequenceId?++I.sequenceId:0},(c=n)===null||c===void 0||delete c.next}const d=(C=B)===null||C===void 0?void 0:C.rtp.find(w=>w.codec==="opus");if(d&&(Q=B)!==null&&Q!==void 0&&Q.fmtp){var l;const w=(l=B)===null||l===void 0?void 0:l.fmtp.find(b=>b.payload===d.payload);w&&this._context&&(w.config+=";stereo=1;sprop-stereo=1")}if(I.isPublic&&YQ>=86){var h,D;const w=(h=E)===null||h===void 0?void 0:h.rtp.filter(b=>b.codec==="H264");var u;w!=null&&w.length&&(D=E)!==null&&D!==void 0&&D.fmtp&&((u=E)===null||u===void 0||u.fmtp.forEach(b=>{w.find(y=>y.payload===b.payload)&&(b.config+=";sps-pps-idr-in-keyframe=1")}))}return{partialSdp:r,audioMid:o,videoMid:t,type:"incroffer",semantics:"unified-plan",audioTransceiverInit:i,videoTransceiverInit:e,allSsrc:n,peerConnectionMode:this.peerConnectionMode,signalingAck:a}}async handleAck(I){return this.logger.info("handleAck()","item: %o",I),this._sdpQueue.enqueue(I)}async dequeue(){this._queueBusy=!0;const I=this._sdpQueue.dequeue();if(this.logger.info("dequeue()","ret: %o",I),!I)return void(this._queueBusy=!1);const g=[];try{const{items:v,sdpStrategy:r}=I,n=[],a=[],c=[];if(r===UM.ADD){delete R({},this.peer._answerIce).candidates;var C,Q=!1,B=!1;try{for(var E,i=MDA(v);Q=!(E=await i.next()).done;Q=!1){const d=E.value;{var e;const{audioMid:l,videoMid:h,action:D,audioTransceiverInit:u,videoTransceiverInit:w,signalingAck:b,stream:y,videoCodec:S,onSuccess:L,onFail:V}=d,z=y instanceof y9;if(L&&c.push(L),V&&g.push(V),z&&b.sequenceId{var bA;return gA==null||(bA=gA.type)===null||bA===void 0?void 0:bA.localeCompare(vA==null?void 0:vA.type)});const eA=EA.media.find(gA=>gA.type==="audio"),K=EA.media.find(gA=>gA.type==="video");if(!eA||!K)break;const p=R(R(R({},eA),this.peer._answerIce),{},{mid:l}),J=R(R(R({},K),this.peer._answerIce),{},{mid:h}),{audioMLine:Y,videoMLine:N,audioTransceiver:q,videoTransceiver:IA}=y;if(Y){let gA=this.peer._offerMlines.findIndex(vA=>vA.mid===l);var o;if(q){if(this._reportRtcInvokeStatus("chromeHandler.updateTrack",JSON.stringify({audioStreamTrack:KQ((o=y.audioTrack)===null||o===void 0?void 0:o.preprocessingTrack)})),gA===-1){this.logger.error("dequeue","audio mid not found when update sdp, %s from %o",l,this.peer._offerMlines);continue}}else u&&Y&&(y.audioTransceiver=this._peerConnection.addTransceiver(u.track,u.init),this._reportRtcInvokeStatus("chromeHandler.addTrack",JSON.stringify({audioStreamTrack:KQ(u.track)})),gA=this._inactiveMlineIndex.shift(),gA||(gA=this.peer._offerMlines.length),mk&&y.initAudioEncodedTransform());D===iI.publish&&lA("AUDIO_CODEC")!=="OPUS"&&(MY(Y,lA("AUDIO_CODEC")),MY(p,lA("AUDIO_CODEC"))),this.peer._offerMlines[gA]=R({},Y),this.peer._answerMlines[gA]=R({},p)}if(N){let gA=this.peer._offerMlines.findIndex(vA=>vA.mid===h);var t;if(IA){if(this._reportRtcInvokeStatus("chromeHandler.updateTrack",JSON.stringify({audioStreamTrack:KQ((t=y.videoTrack)===null||t===void 0?void 0:t.preprocessingTrack)})),gA===-1){this.logger.error("dequeue","video mid not found when update sdp, %s from %o",h,this.peer._offerMlines);continue}}else w&&N&&(y.videoTransceiver=this._peerConnection.addTransceiver(w.track,w.init),this._reportRtcInvokeStatus("chromeHandler.addTrack",JSON.stringify({videoStreamTrack:KQ(w.track)})),gA=this._inactiveMlineIndex.shift(),gA||(gA=this.peer._offerMlines.length),mk&&y.initVideoEncodedTransform());this.peer._offerMlines[gA]=R({},N),D===iI.publish&&S&&(R9(N,S),R9(J,S)),this.peer._answerMlines[gA]=J}n.push(y.streamId||""),a.push(z?y.userId:"local"),z&&(y.sequenceId=b.sequenceId)}}}catch(d){B=!0,C=d}finally{try{Q&&i.return!=null&&await i.return()}finally{if(B)throw C}}}else{var s;const d={};v.forEach(l=>{const{audioMid:h,videoMid:D,action:u}=l;d[h]=h,u!==iI.removetrack&&(d[D]=D),d[h]=h}),this.peer._offerMlines=this.peer._offerMlines.map((l,h)=>(l.mid&&d[l.mid]&&(l=jw(l),this._inactiveMlineIndex.push(h)),l)),Ws(s=this._inactiveMlineIndex).call(s,(l,h)=>l-h),this.peer._answerMlines=this.peer._answerMlines.map(l=>(l.mid&&d[l.mid]&&(l=jw(l)),l))}try{await this.setDescription(n.length?{streamId:n.join(","),streamUserId:a.join(",")}:void 0)}catch(d){throw this._peerConnection.signalingState==="have-local-offer"&&await this._peerConnection.setLocalDescription({type:"rollback"}),d}try{c.forEach(d=>d())}catch{}this.logger.info("dequeue","loop")}catch(v){this.logger.error("dequeue","unknown error: %o",v),g.forEach(r=>r(v))}finally{this.dequeue()}}async getDefaultSdp(){const I=await this._genOfferSdp();this.createAVMlineOfferTpl(I);const g=dA.parse(I),C=[];return g.media=g.media.filter(Q=>Q.direction==="recvonly"&&(Array.isArray(Q.ext)&&(Q.ext=Q.ext.filter(B=>B.uri!=="urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id")),C.push("".concat(Q.mid)),!0)),g.groups=[{mids:C.join(" "),type:"BUNDLE"}],UE&&CE(g),{sdp:dA.write(g),semantics:"unified-plan",type:"incroffer"}}async rollback(I){let{stream:g}=I;delete g.audioMLine,delete g.videoMLine}createAVMlineOfferTpl(I){const g=dA.parse(I);g.media.forEach(C=>{C.type==="audio"?C.direction==="sendonly"?this._aSendonlyOfferTpl=C:(Array.isArray(C.ext)&&(C.ext=C.ext.filter(Q=>Q.uri!=="urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id")),this._aRecvonlyOfferTpl=C):C.type==="video"&&(C.direction==="sendonly"?this._vSendonlyOfferTpl=C:(Array.isArray(C.ext)&&(C.ext=C.ext.filter(Q=>Q.uri!=="urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id")),this._vRecvonlyOfferTpl=C))}),UE&&CE(g)}async _genOfferSdp(){let I;try{if(I=await GaA(!0),I=gM(I),!I)throw"pc.createOffer() return empty."}catch(g){const C="Get offer Error. ".concat(g.message|g);throw new U(m.NOT_SUPPORTED,C)}return I}}class FM extends VR{constructor(I,g){super(I,g),P(this,"name","firefox"),P(this,"_aRecvonlyOfferTpl",void 0),this.logger=new uA("FirefoxHandler",3,I.id)}async publish(I){var g,C;const{videoDescriptions:Q,subVideoDescriptions:B,audioTransceiverInit:E,videoTransceiverInit:i}=super.internalPublish(I);I.audioTransceiver=this._peerConnection.addTransceiver(E.track,E.init),Array.isArray(i.init.sendEncodings)&&i.init.sendEncodings.length===1&&(i.init.sendEncodings=i.init.sendEncodings.map(a=>(delete a.rid,a))),I.videoTransceiver=this._peerConnection.addTransceiver(i.track,i.init);const e=aA();this._report("rtc_begin_create_offer",{direction:"up",stream_id:"",stream_user_id:"",pc_session_id:this.peerConnectionId,vendor_mode:0});const o=await this.peer.createOfferSdp();this._report("rtc_create_offer",{direction:"up",error_code:0,stream_id:"",stream_user_id:"",elapse:aA()-e});const t=dA.parse(o);t.media=(g=t.media)===null||g===void 0?void 0:g.map(a=>R(R({},a),this.peer._offerIce)),CE(t),await this.setLocalDescription(dA.write(t));const s=I.audioTransceiver.mid,v=I.videoTransceiver.mid;let r=null,n=null;return t.media=(C=t.media)===null||C===void 0?void 0:C.map(a=>{if("".concat(a.mid)===s){var c;r=a;const l=(c=r)===null||c===void 0?void 0:c.rtp.find(h=>h.codec==="opus");if(l&&r.fmtp){var d;const h=r.fmtp.find(D=>D.payload===l.payload);h&&(d=this._context)!==null&&d!==void 0&&d.audioProfileManager&&(h.config=this._context.audioProfileManager.getOpusConfigStr(h.config))}}else"".concat(a.mid)===v&&(n=a);return a}),this.addBitrateLimit(n,I.videoEncodeConfig[0].maxKbps),await this.setLocalDescription(dA.write(t)),I.initVideoEncodedTransform(),I.initAudioEncodedTransform(),{partialSdp:G9(t,r,n),audioMid:s,videoMid:v,type:"incroffer",semantics:"unified-plan",videoDescriptions:Q,subVideoDescriptions:B,audioTransceiverInit:E,videoTransceiverInit:i,peerConnectionMode:this.peerConnectionMode}}async _internalChangePubCodec(){const{localDescription:I}=this._peerConnection;I&&(await this.peer.createOfferSdp(),await this._peerConnection.setLocalDescription(I))}async subscribe(I,g){var C,Q,B,E;this.logger.info("subscribe()");let i,e,o="",t="",s=!1,v=!1;I.virtual?s=!0:(g.multiChatMode||(s=!0),v=!0),s&&(I.audioTransceiver=this._peerConnection.addTransceiver("audio",{direction:"recvonly"})),v&&(I.videoTransceiver=this._peerConnection.addTransceiver("video",{direction:"recvonly"}));const r=aA();this._report("rtc_begin_create_offer",{direction:"up",stream_id:I.streamId,stream_user_id:I.userId,pc_session_id:this.peerConnectionId,vendor_mode:0});const n=await this.peer.createOfferSdp();this._report("rtc_create_offer",{error_code:0,direction:"up",stream_id:I.streamId,stream_user_id:I.userId,elapse:aA()-r});const a=dA.parse(n);let c,d;if(a.media=(C=a.media)===null||C===void 0?void 0:C.map(u=>R(R({},u),this.peer._offerIce)),a.media.map(u=>{var w,b,y,S;u.type==="video"&&(Fw?(u.ext=(w=u.ext)===null||w===void 0?void 0:w.filter(L=>L.uri.indexOf("abs-send-time")===-1),u.rtcpFb=(b=u.rtcpFb)===null||b===void 0?void 0:b.filter(L=>L.type!=="goog-remb")):(u.rtcpFb=(y=u.rtcpFb)===null||y===void 0?void 0:y.filter(L=>L.type!=="transport-cc"),u.ext=(S=u.ext)===null||S===void 0?void 0:S.filter(L=>L.uri.indexOf("transport")===-1)))}),UE&&CE(a),await this.setLocalDescription(dA.write(a),{streamId:I.streamId||"",streamUserId:I.userId}),o=(Q=I.audioTransceiver)===null||Q===void 0?void 0:Q.mid,t=(B=I.videoTransceiver)===null||B===void 0?void 0:B.mid,(E=a.media)===null||E===void 0||E.forEach(u=>{"".concat(u.mid)===o?i=u:"".concat(u.mid)===t&&(e=u)}),o&&i||(o="audio_".concat(t),i=R(R({},this._aRecvonlyOfferTpl),{},{mid:o})),I.audioMid=o,I.videoMid=t,!g.multiChatMode&&!I.virtual&&this._aSendonlyAnswerTpl&&this._aSendonlyAnswerTpl){var l,h,D;c=w9(this._nextSsrc),this._nextSsrc=c.next;const u=R(R(R({},this._aSendonlyAnswerTpl),this.peer._answerIce),{},{mid:o,msid:"".concat(I.streamId).concat((l=this._context)!==null&&l!==void 0&&l.avSync?"":"-audio"," ").concat(I.streamId,"-audio"),ssrcs:m9(I.streamId,"audio",c.audio)}),w=R(R(R({},this._vSendonlyAnswerTpl),this.peer._answerIce),{},{mid:t,msid:"".concat(I.streamId).concat((h=this._context)!==null&&h!==void 0&&h.avSync?"":"-video"," ").concat(I.streamId,"-video")},Xw(I.streamId,c,{flexfec:this._enableSubFlexfec}));d={sdp:dA.write(R(R({},this.peer._answerSession),{},{media:[u,w]})),sequenceId:I.sequenceId?++I.sequenceId:0},(D=c)===null||D===void 0||delete D.next}return I.initVideoEncodedTransform(),I.initAudioEncodedTransform(),{partialSdp:G9(a,i,e,!1),audioMid:o,videoMid:t,type:"incroffer",semantics:"unified-plan",audioTransceiverInit:I.audioTransceiver?{track:"audio",init:{direction:"recvonly"}}:void 0,videoTransceiverInit:I.videoTransceiver?{track:"video",init:{direction:"recvonly"}}:void 0,allSsrc:c,peerConnectionMode:this.peerConnectionMode,signalingAck:d}}async handleAck(I){const{stream:g,action:C}=I;if(C===iI.removetrack)return"";if(C===iI.unpublish||C===iI.unsubscribe){try{await this.close(g),typeof I.onSuccess=="function"&&I.onSuccess()}catch(i){typeof I.onFail=="function"&&I.onFail(i)}return g.streamId||""}const{signalingAck:Q,videoCodec:B}=I,E=dA.parse(Q.sdp);try{await this._internalSetRemoteDescription(E.media,g,B),typeof I.onSuccess=="function"&&I.onSuccess()}catch(i){typeof I.onFail=="function"&&I.onFail(i)}return""}async _internalSetRemoteDescription(I,g,C){var Q,B;const E={},i=dA.parse((Q=this._peerConnection.remoteDescription)===null||Q===void 0?void 0:Q.sdp);i.media.forEach(t=>{t.mid!==void 0&&(E[t.mid]=t)}),I.forEach(t=>{if((t=R(R({},t),this.peer._answerIce)).type==="audio"&&(g.audioMid?(t.mid=g.audioMid,E[g.audioMid]=t):E[t.mid]=t),t.type==="video"){if(g instanceof b9&&r9<=87){const s={};Array.isArray(t.rtp)&&(t.rtp=t.rtp.filter(v=>v.codec!=="rtx"||(s[v.payload]=v.payload,!1))),typeof t.payloads=="string"&&(t.payloads=t.payloads.split(" ").filter(v=>!s[v]).join(" ")),Array.isArray(t.fmtp)&&(t.fmtp=t.fmtp.filter(v=>!s[v.payload])),Array.isArray(t.rtcpFb)&&(t.fmtp=t.fmtp.filter(v=>!s[v.payload]))}C&&R9(t,C),g.videoMid?(t.mid=g.videoMid,E[g.videoMid]=t):E[t.mid]=t}});const e=dA.parse((B=this._peerConnection.localDescription)===null||B===void 0?void 0:B.sdp),o=e.media.map(t=>{const s=E[t.mid];return t.direction==="inactive"?t:s});i.groups=e.groups,i.media=o,i.media.map(t=>{var s,v,r,n;t.type==="video"&&(Fw?(t.ext=(s=t.ext)===null||s===void 0?void 0:s.filter(a=>a.uri.indexOf("abs-send-time")===-1),t.rtcpFb=(v=t.rtcpFb)===null||v===void 0?void 0:v.filter(a=>a.type!=="goog-remb")):(t.rtcpFb=(r=t.rtcpFb)===null||r===void 0?void 0:r.filter(a=>a.type!=="transport-cc"),t.ext=(n=t.ext)===null||n===void 0?void 0:n.filter(a=>a.uri.indexOf("transport")===-1)))}),UE&&CE(i),await this.setRemoteDescription(dA.write(i))}async getDefaultSdp(){var I,g;const C=dA.parse((I=this._peerConnection.localDescription)===null||I===void 0?void 0:I.sdp);this.createAVMlineOfferTpl((g=this._peerConnection.localDescription)===null||g===void 0?void 0:g.sdp);const Q=[];return C.media=C.media.filter(B=>B.direction==="recvonly"&&(B.mid=B.mid+1,Q.push("".concat(B.mid)),!0)),UE&&CE(C),C.groups=[{mids:Q.join(" "),type:"BUNDLE"}],{sdp:dA.write(C),semantics:"unified-plan",type:"incroffer"}}async rollback(I){let{msid:g,stream:C,audioMid:Q,videoMid:B}=I;return this.logger.warn("rollback()"),this.close(C,Q,B)}async close(I,g,C){var Q;this.logger.info("close()");const B=I.audioMid||g,E=I.videoMid||C,i={};I.audioTransceiver&&B&&(I.audioTransceiver.stop(),i[B]=B),I.videoTransceiver&&E&&(I.videoTransceiver.stop(),i[E]=E);const e=[],o=await this.peer.createOfferSdp(),t=dA.parse(o);t.media=t.media.map(r=>(i[r.mid]&&(r=jw(r)),r.direction!=="inactive"&&e.push(r.mid),R(R({},r),this.peer._offerIce)));const s=dA.parse((Q=this._peerConnection.remoteDescription)===null||Q===void 0?void 0:Q.sdp),v={};s.media.forEach(r=>{r.mid!==void 0&&(v[r.mid]=r)}),s.media=t.media.map(r=>r.direction==="inactive"?r:v[r.mid]),t.groups&&s.groups&&(t.groups[0].mids=e.join(" "),s.groups[0].mids=e.join(" ")),await this.setLocalDescription(dA.write(t)),await this.setRemoteDescription(dA.write(s))}async setCurrentDescription(){await this.peer.createOfferSdp(),this._peerConnection.localDescription&&this._peerConnection.remoteDescription&&(await this._peerConnection.setLocalDescription(this._peerConnection.localDescription),await this._peerConnection.setRemoteDescription(this._peerConnection.remoteDescription))}createAVMlineOfferTpl(I){const g=dA.parse(I);g.media.forEach(C=>{C.type==="audio"&&(this._aRecvonlyOfferTpl=C)}),UE&&CE(g)}}const ODA=(A,I)=>mI?new FM(A,I):new xDA(A,I),qDA={[fC.ICE_FAILED]:di.ICE_FAILED,[fC.DC_ERROR]:di.ICE_FAILED,[fC.DC_CLOSE]:di.ICE_FAILED,[fC.NODE_CHANGE]:di.NODE_CHANGE,[fC.NOTIFY_RECONNECT]:di.NOTIFY_RECONNECT,[fC.JOIN_TIMEOUT]:di.JOIN_TIMEOUT};class _DA extends iQ{constructor(I){super(),P(this,"_connectionManager",void 0),P(this,"_dataChannelSignal",void 0),P(this,"_state",void 0),P(this,"_connectionLostTimer",void 0),P(this,"_isReconnecting",!1),P(this,"logger",void 0),this._ctx=I,this.logger=new uA("SignalingManager",1,I.id),this.logger.info("constructor","invoke"),this._connectionManager=new o0A(I),this._addConnectorHandler()}connect(){return this.isConnected()?Promise.resolve():new Promise((I,g)=>{this._connectionManager.once("connected",()=>I()),this._connectionManager.once("disconnected",g),this._connectionManager.startup()})}reconnect(I,g){this._connectionManager.reconnect(I,g)}sendSignaling(I,g,C,Q){if(!this._dataChannelSignal)throw new U(m.NOT_CONNECTED_YET,"signaling channel is not connected");return this._dataChannelSignal.sendSignaling(I,g,C,Q)}sendP2PMessage(I,g){if(!this._dataChannelSignal)throw new U(m.NOT_CONNECTED_YET,"signaling channel is not connected");return this._dataChannelSignal.sendP2PMessage(I,g)}destroy(){var I,g;this.logger.info("destroy()"),this._clearConnectionLostTimer(),this._connectionManager.shotdown(),(I=this._ctx.handler)===null||I===void 0||I.destroy(),this._ctx.handler=void 0,(g=this._dataChannelSignal)===null||g===void 0||g.destroy(),this._state&&this._setState(XA.CONNECTION_STATE_DISCONNECTED),this.removeAllListeners()}isConnected(){return this._state===XA.CONNECTION_STATE_CONNECTED||this._state===XA.CONNECTION_STATE_RECONNECTED}isReconnecting(){return this._state===XA.CONNECTION_STATE_CONNECTING||this._state===XA.CONNECTION_STATE_RECONNECTING}_setState(I,g){if(this._state===I)return;this._state=I;const C={state:I};g&&(C.reason=qDA[g]||di.ICE_FAILED),this.safeEmit(HI.ON_CONNECTION_STATE_CHANGE,C)}_addConnectorHandler(){var I=this;this._connectionManager.on("connected",g=>{var C;this.logger.info("connectStateChange","connected"),this._clearConnectionLostTimer(),(C=this._dataChannelSignal)===null||C===void 0||C.destroy(),this._ctx.peerConnection=g.pc,this._ctx.handler=ODA(this._ctx,g.pc),this._dataChannelSignal=g.signaling,this._addSignalEventHandler(),this._setState(this._isReconnecting?XA.CONNECTION_STATE_RECONNECTED:XA.CONNECTION_STATE_CONNECTED)}),this._connectionManager.on("disconnected",g=>{this._clearConnectionLostTimer(),this._setState(XA.CONNECTION_STATE_DISCONNECTED),this.logger.error("connectStateChange","disconnected. %o",g.message),this._isReconnecting&&this.safeEmit(HI.ON_RECONNECT_FAILED)}),this._connectionManager.on("connecting",()=>{this._isReconnecting=!1,this._ctx.handler=void 0,this._setState(XA.CONNECTION_STATE_CONNECTING),this.logger.info("connectStateChange","connecting")}),this._connectionManager.on("reconnecting",g=>{this._setState(XA.CONNECTION_STATE_DISCONNECTED,g),this._connectionLostTimer||(this._connectionLostTimer=setTimeout(()=>{this.safeEmit(HI.ON_CONNECTION_STATE_CHANGE,{state:XA.CONNECTION_STATE_LOST})},1e4)),this._isReconnecting=!0,this._ctx.handler=void 0,this._setState(XA.CONNECTION_STATE_RECONNECTING,g),this.logger.warn("connectStateChange","reconnecting")}),this._connectionManager.on("connectWidthTcp",()=>{this.safeEmit(HI.CONNECT_WITH_TCP)}),["__onGetIceConfigHook","__onIceConnectSuccessHook","__onConnectSuccessHook"].forEach(g=>{this._connectionManager.on(g,function(){for(var C=arguments.length,Q=new Array(C),B=0;B{var Q;(Q=this._dataChannelSignal)===null||Q===void 0||Q.on(C,B=>{this.safeEmit(C,B)})}),(I=this._dataChannelSignal)===null||I===void 0||I.on(x.NODE_CHANGE,C=>{this._connectionManager.reconnectByNodeChange(C)}),(g=this._dataChannelSignal)===null||g===void 0||g.on(x.ON_NOTIFY_RECONNECT,()=>{this._connectionManager.reconnect(fC.NOTIFY_RECONNECT)})}}var gm=(A=>(A.NORMAL_USER="normalUser",A.SILENT_USER="silentUser",A))(gm||{});const $DA=["preferCodecName"];class AuA{constructor(I){P(this,"_captureDeviceId",void 0),P(this,"_contentHint",void 0),P(this,"_videoCaptureConf",R({},Nc)),P(this,"_mainPreferCodec",void 0),P(this,"_screenPreferCodec",void 0),P(this,"_remoteVideoConfig",new Map),P(this,"_remoteSimulcastStreamType",new Map),P(this,"_simulcastMode",Li.VIDEO_ONLY_ONE),P(this,"_highVideoEncodeConf",st(Nc)),P(this,"_midVideoEncodeConf",void 0),P(this,"_lowVideoEncodeConf",void 0),P(this,"_screenEncodeConfig",naA),P(this,"_invalidVideoEncodeConf",void 0),P(this,"activeSimStreams",[]),P(this,"_logger",void 0),P(this,"_apiVersion",void 0),this._ctx=I,this._logger=new uA("EngineVideoProfile",1,I.id)}setCaptureDeviceId(I){this._captureDeviceId=I}setCaptureConfig(I){this._videoCaptureConf=R(R({},this._videoCaptureConf),I)}getCaptureConfig(I){I=I||this._captureDeviceId;const g=R({},this._videoCaptureConf);return I==="user"||I==="environment"||I==="left"||I==="right"?(delete g.deviceId,g.facingMode=I):I&&(!HrA||Yo?g.deviceId={exact:I}:delete g.deviceId),g}getContentHint(){return this._contentHint}getPreferCodec(I){return I?this._screenPreferCodec:this._mainPreferCodec}setRemoteUserVideoConfig(I,g){typeof g=="object"?this._remoteVideoConfig.set(I,g):this._remoteSimulcastStreamType.set(I,g)}getSubLayer(I,g){const C=this._remoteSimulcastStreamType.get(I.userId),Q=this._remoteVideoConfig.get(I.userId);if(C){var B,E,i,e,o,t;const{videoDescriptions:s,subVideoDescriptions:v}=I.attributes||{},r=Array.isArray(v)?v:s;let n;return r.length===1?n=0:r.length===2?n=C===Si.VIDEO_STREAM_HIGH?0:1:r.length>=3&&(n={[Si.VIDEO_STREAM_HIGH]:0,[Si.VIDEO_STREAM_MID]:1,[Si.VIDEO_STREAM_LOW]:2}[C]),{spatialLayer:(B=(E=n&&((i=r[n])===null||i===void 0?void 0:i.video_index))!==null&&E!==void 0?E:n)!==null&&B!==void 0?B:0,spatialSubLayer:(e=(o=n&&((t=r[n])===null||t===void 0?void 0:t.sub_index))!==null&&o!==void 0?o:n)!==null&&e!==void 0?e:-1}}return Q?JY(Q,I):g?JY(g,I):void 0}getSimulcastMode(){return this._simulcastMode}async setSimulcastMode(I,g){if(!MPA())throw new U(m.NOT_SUPPORTED,"Simulcast is not supported");if(this._simulcastMode!==I){if(g!=null&&g.hasPublished){var C,Q;if((C=g.localStream)!==null&&C!==void 0&&C.videoHasPublish||(Q=g.localStream)!==null&&Q!==void 0&&Q.audioHasPublish)throw new U(m.SET_SIMULCAST_FAILED,"Cannot change simulcast mode after publishing the video streams");this._logger.print("setSimulcastMode()","change simulcast mode and unpublish."),await g.unpublish()}this._simulcastMode=I,I!==Li.VIDEO_ONLY_ONE&&this._autoGenerateSubVideoEncodeConfig()}}closeSimulcast(){this._simulcastMode=Li.VIDEO_ONLY_ONE}async setVideoEncodeConfigPolyfill(I){if(Array.isArray(I)){tD(I);const[g,...C]=I;this.setVideoEncodeConfig(g),await this.setSubVideoEncodeConfig(fW(C).call(C))}else this.setVideoEncodeConfig(I)}setVideoEncodeConfig(I){tD([I]);const g=this._midVideoEncodeConf||this._lowVideoEncodeConf;g&&vt(g)>=vt(I)?(this._logger.warn("setVideoEncodeConfig","smaller then substream"),this._invalidVideoEncodeConf=st(I),I=g):delete this._invalidVideoEncodeConf;const C=R({},I),{preferCodecName:Q}=C,B=ve(C,$DA);bw(B),this._logger.print("setVideoEncodeConfig","update encode config",I),this._highVideoEncodeConf=st(I),this._contentHint=B.contentHint,this._mainPreferCodec=Q,this._logger.print("setVideoEncodeConfig","update capture config",B),this._videoCaptureConf=B}async setSubVideoEncodeConfig(I,g,C){if(this._logger.print("setSubVideoEncodeConfig","%o, published=%s",I,g==null?void 0:g.hasPublished),I&&I.length>0){tD(I),Ws(I).call(I,(t,s)=>vt(t)-vt(s));const E=this._invalidVideoEncodeConf||this._highVideoEncodeConf,i=I[I.length-1];if(vt(i)>=vt(E))throw new U(m.SET_SIMULCAST_FAILED,"The resolution cannot exceed the mainstream");if(g!=null&&g.hasPublished&&I.length!==this._getSubLayers().length){var Q,B;if((Q=g.localStream)!==null&&Q!==void 0&&Q.videoHasPublish||(B=g.localStream)!==null&&B!==void 0&&B.audioHasPublish)throw new U(m.SET_SIMULCAST_FAILED,"Cannot change the number of substreams after publishing the video streams");await g.unpublish()}I.length>2&&(AI(this._ctx.id,"simulcast_over_limit","setLocalSimulcastMode: You can set parameters for up to 2 streams"),bi("setLocalSimulcastMode: You can set parameters for up to 2 streams"));const[e,o]=I;e&&(WY(E,e),this._lowVideoEncodeConf=st(e)),o&&(WY(E,o),this._midVideoEncodeConf=st(o)),this._invalidVideoEncodeConf&&(this.setVideoEncodeConfig(this._invalidVideoEncodeConf),await(C==null?void 0:C.updateVideoCaptureConfig(this._ctx.videoProfile.getCaptureConfig())))}else this._autoGenerateSubVideoEncodeConfig()}genVideoDescriptions(I){var g,C;const Q=[];let B=[];const E=[],i=[];let{width:e,height:o,frameRate:t,maxKbps:s}=I.videoEncodeConfig[0];e=jA(e),o=jA(o);const v=(g=I.videoTrack)===null||g===void 0?void 0:g.preprocessingTrack,{width:r,height:n,frameRate:a}=(C=v==null?void 0:v.getSettings())!==null&&C!==void 0?C:{};r&&(e=Math.floor(r)),n&&(o=Math.floor(n)),a&&(t=Math.floor(a)),(typeof t!="number"||Number.isNaN(t))&&(t=30),Q.push({width:e,height:o,framerate:t,maxkbps:s,rid:"0"}),E.unshift({maxBitrate:1e3*s,rid:"0",maxFramerate:t});const{serverConfig:c}=this._ctx;if(!(I.isScreen||this._simulcastMode===Li.VIDEO_ONLY_ONE||mI&&(c==null?void 0:c.videoCodec)!=="VP8")){const d=J9A(e,o);if(d>1){const l=this._getSubVideoEncodeConfig(d,{width:e,height:o});this._logger.info("simulcast() ","simulcastLayers: %o",l),i.push(!0),l.forEach((h,D)=>{const u={maxBitrate:1e3*h.maxkbps,scaleResolutionDownBy:h.scaleResolutionDownBy,rid:"".concat(D+1),maxFramerate:h.frameRate};E.unshift(u),Q.push({width:h.width,height:h.height,framerate:h.frameRate,maxkbps:h.maxkbps,rid:"".concat(D+1)}),i.push(!0)}),c!=null&&c.simulcastOnDemand&&(B=Q.map((h,D)=>R(R({},h),{},{video_index:D,sub_index:D})))}}return c!=null&&c.e2eFeedback&&(B=Q.map((d,l)=>R(R({},d),{},{video_index:l,sub_index:l}))),{videoDescriptions:Q,subVideoDescriptions:B,sendEncodings:E,activeSimulcastStreams:i}}getVideoEncodeConfig(){return[this._highVideoEncodeConf,this._midVideoEncodeConf,this._lowVideoEncodeConf].filter(I=>I)}setScreenEncodeConfig(I){this._screenEncodeConfig=I}getScreenEncodeConfig(){return this._screenEncodeConfig}checkSimulcastApiVersion(I){if(this._apiVersion){if(this._apiVersion!==I){const g="mixing old and new apis, please use ".concat(this._apiVersion==="new"?"setLocalSimulcastMode/setRemoteSimulcastStreamType":"enableSimulcastMode/setRemoteVideoConfig"," instead.");throw AI(this._ctx.id,"mixingOldAndNewApis",g),new U(m.MIXING_OLD_AND_NEW_APIS,g)}}else this._apiVersion=I}destroy(){this._videoCaptureConf=Nc,this._highVideoEncodeConf=st(Nc),delete this._invalidVideoEncodeConf,this._remoteVideoConfig.clear(),this._remoteSimulcastStreamType.clear()}_autoGenerateSubVideoEncodeConfig(){this._logger.print("_autoGenerateSubVideoEncodeConfig()","generate low stream.");const I=this._highVideoEncodeConf,g=jA(I.width),C=jA(I.height),Q=Math.min(g,C)/90;this._lowVideoEncodeConf={width:Math.floor(g/Q),height:Math.floor(C/Q),maxKbps:100,frameRate:10}}_getSubLayers(){const I=[];return this._midVideoEncodeConf&&I.push(this._midVideoEncodeConf),this._lowVideoEncodeConf&&I.push(this._lowVideoEncodeConf),I}_getSubVideoEncodeConfig(I,g){return this._getSubLayers().slice(1-I).map(C=>{if(C.width>C.height&&g.widthg.height){const i=C.width;C.width=C.height,C.height=i}const Q=jA(C.width),B=jA(C.height),E=Math.max(g.width/Q,g.height/B);return{width:Math.floor(g.width/E),height:Math.floor(g.height/E),scaleResolutionDownBy:E,frameRate:jA(C.frameRate)||15,maxkbps:C.maxKbps||600}})}__autoResetVideoEncoderConfig(I){const g=caA(this.getVideoEncodeConfig(),I);g&&(this.setVideoEncodeConfigPolyfill(g),this._logger.print("autoResetVideoEncoderConfig() result",JSON.stringify(g)),AI(this._ctx.id,"autoResetVideoEncoderConfig",JSON.stringify(g)))}}class nu{constructor(I){P(this,"_sendTimes",[]),P(this,"_bufferSizeLimit",void 0),P(this,"_totalSizeLimitPerSecond",void 0),P(this,"_limitModeInterval",void 0),P(this,"_limitModeQPS",void 0),P(this,"_interval",void 0),P(this,"_qps",void 0),this.setLimitMode(I)}setLimitMode(I){I===Qo.LIMIT_MODE?(this._bufferSizeLimit=1,this._totalSizeLimitPerSecond=30720,this._limitModeInterval=1e3,this._limitModeQPS=60):(this._bufferSizeLimit=64,delete this._totalSizeLimitPerSecond,delete this._limitModeInterval,delete this._limitModeQPS)}setQPS(I,g){this._interval=I,this._qps=g}check(I){var g,C;const Q=Date.now(),B=iaA(I,this._bufferSizeLimit);if(typeof this._totalSizeLimitPerSecond=="number"&&this._sendTimes.reduce((e,o)=>Q-o.ts<1e3?e+o.size:e,0)+B>this._totalSizeLimitPerSecond)throw new U(m.USER_MESSAGE_EXCEED_QPS,"user message exceed total size(".concat(this._totalSizeLimitPerSecond,")"));const E=(g=this._limitModeInterval)!==null&&g!==void 0?g:this._interval,i=(C=this._limitModeQPS)!==null&&C!==void 0?C:this._qps;if(typeof E=="number"&&typeof i=="number")if(this._sendTimes.length(A.RECONNECT="ice-reconnect",A.LEAVE="leave_room",A))(YM||{});const $c=Qo.NORMAL_MODE;class IuA{constructor(I,g,C){P(this,"engineDestroyed",!1),P(this,"avSync",!0),P(this,"callId",void 0),P(this,"streamRTT",{}),P(this,"useCloudProxy",!1),P(this,"videoProfile",void 0),P(this,"audioProfileManager",void 0),P(this,"extensionManager",void 0),P(this,"userPriority",new Map),P(this,"expectedIDC",void 0),P(this,"autoPlayPolicy",void 0),P(this,"joinRoomConfig",void 0),P(this,"signalingManager",void 0),P(this,"peerConnection",void 0),P(this,"pubSubLock",new tB("pubSubLock")),P(this,"visibility",!0),P(this,"rtsLimiter",{e2e:new nu($c),e2s:new nu($c),boradcast:new nu($c),conf:void 0,rtsMode:$c}),P(this,"serverConfig",void 0),P(this,"mediaParams",void 0),P(this,"subscribeFallbackOption",void 0),P(this,"joinRoomParams",void 0),P(this,"isPreConnection",!1),P(this,"_handler",void 0),P(this,"monitor",void 0),P(this,"_businessId",void 0),P(this,"_userStreamConfig",new Map),P(this,"_localAudioTrackDumpConfig",{[F.STREAM_INDEX_MAIN]:{callback:void 0,frameSize:void 0},[F.STREAM_INDEX_SCREEN]:{callback:void 0,frameSize:void 0}}),P(this,"_remoteAudioTrackDumpConfig",{[F.STREAM_INDEX_MAIN]:new Map,[F.STREAM_INDEX_SCREEN]:new Map}),P(this,"_targetCodec",void 0),P(this,"_targetScreenCodec",void 0),P(this,"earMonitorSettings",{[F.STREAM_INDEX_MAIN]:{position:QC.NONE,volume:100},[F.STREAM_INDEX_SCREEN]:{position:QC.NONE,volume:100}}),P(this,"localVideoTrack",void 0),P(this,"localAudioTrack",void 0),P(this,"publicAudioVolume",new Map),this.id=I,this.appId=g,this.monitor=tI(I),this.expectedIDC=C==null?void 0:C.expectedIDC,this.autoPlayPolicy=C==null?void 0:C.autoPlayPolicy,this.audioProfileManager=new W9A(g),this.extensionManager=new $lA(I),this.joinRoomConfig=new RQ(I),this.signalingManager=new _DA(this),this.videoProfile=new AuA(this)}set businessId(I){var g;this._businessId=I,(g=this.monitor)===null||g===void 0||g.set({rtc_business_id:I})}get businessId(){return this._businessId}set handler(I){var g;I&&this.resetPubSubLock("ice-reconnect"),(g=this._handler)===null||g===void 0||g.destroy(),this._handler=I}get handler(){return this._handler}get role(){return this.visibility?gm.NORMAL_USER:gm.SILENT_USER}set targetCodec(I){I&&[bI.H264,bI.VP8,bI.ByteVC1].forEach(g=>{I.toLowerCase()===g.toLowerCase()&&(this._targetCodec=g)})}set targetScreenCodec(I){I&&[bI.H264,bI.VP8,bI.ByteVC1].forEach(g=>{I.toLowerCase()===g.toLowerCase()&&(this._targetScreenCodec=g)})}get targetCodec(){return this._targetCodec}get targetScreenCodec(){return this._targetScreenCodec}resetPubSubLock(I){this.pubSubLock.closeReason=I,this.pubSubLock=new tB("pubSubLock")}setUserStreamConf(I,g,C){const Q=this._userStreamConfig.get(I)||{},B=Q[g]||{};Q[g]=R(R({},B),C),this._userStreamConfig.set(I,Q)}getRemoteMirrorType(I,g){var C;return!((C=this._userStreamConfig.get(I))===null||C===void 0||(C=C[g])===null||C===void 0||!C.mirrorType)}get rtsMode(){return this.rtsLimiter.rtsMode}setRTSMode(I){this.rtsLimiter.e2e.setLimitMode(I),this.rtsLimiter.boradcast.setLimitMode(I),this.rtsLimiter.e2s.setLimitMode(I),this.rtsLimiter.rtsMode=I}setRtsQpsConf(I){this.rtsLimiter.e2e.setQPS(I==null?void 0:I.rts_qps_interval,I==null?void 0:I.rts_e2e_qps_value),this.rtsLimiter.boradcast.setQPS(I==null?void 0:I.rts_qps_interval,I==null?void 0:I.rts_broadcast_qps_value),this.rtsLimiter.e2s.setQPS(I==null?void 0:I.rts_qps_interval,I==null?void 0:I.rts_e2s_qps_value),this.rtsLimiter.conf=I}destroy(){this.engineDestroyed=!0,this.signalingManager.destroy(),this.userPriority.clear(),this.avSync=!0,this._localAudioTrackDumpConfig={[F.STREAM_INDEX_MAIN]:{callback:void 0,frameSize:void 0},[F.STREAM_INDEX_SCREEN]:{callback:void 0,frameSize:void 0}},this._remoteAudioTrackDumpConfig[F.STREAM_INDEX_MAIN].clear(),this._remoteAudioTrackDumpConfig[F.STREAM_INDEX_SCREEN].clear(),this.extensionManager.destroy(),this.earMonitorSettings={[F.STREAM_INDEX_MAIN]:{position:QC.NONE,volume:100},[F.STREAM_INDEX_SCREEN]:{position:QC.NONE,volume:100}},this.publicAudioVolume.clear()}}function hB(A,I,g){const C=g.value;return g.value=async function(){var Q;const B=await this._ctx.pubSubLock.lock();((Q=this._ctx.handler)===null||Q===void 0?void 0:Q.name)==="chrome"&&B();try{const{closeReason:t}=this._ctx.pubSubLock;if(t)throw new U(m.UNEXPECTED_ERROR,t);for(var E=arguments.length,i=new Array(E),e=0;e{this._report("rtc_ice_state",{pc_session_id:this.peerConnectionId,direction:this.direction,error_code:0,ice_state:C.toUpperCase(),message:"",peer_connection_id:this.peerConnectionId,stream_id:"",stream_user_id:""})}),g.on("disconnect",()=>{this.emit("disconnect")})}async publish(I){this._context.videoProfile.closeSimulcast(),this.stream=I;const{videoDescriptions:g,subVideoDescriptions:C,audioTransceiverInit:Q,videoTransceiverInit:B}=super.internalPublish(I);I.audioTransceiver=this._peerConnection.addTransceiver(Q.track,Q.init),I.videoTransceiver=this._peerConnection.addTransceiver(B.track,B.init),Gk&&(I.initAudioEncodedTransform(),I.initVideoEncodedTransform()),this._report("rtc_begin_create_offer",{direction:"up",stream_id:"",stream_user_id:"",pc_session_id:this.peerConnectionId,vendor_mode:(I==null?void 0:I.vendorCode)||0});const E=await this.peer.createOfferSdp(),i=aA(),e=dA.parse(E);Array.isArray(e.media)&&(e.media=e.media.map(t=>{if(t.type==="video")(CQ||Yo)&&Array.isArray(t.ext)&&(t.ext=t.ext.filter(v=>{var r;return!(v!=null&&(r=v.uri)!==null&&r!==void 0&&r.includes("video-orientation"))})),CQ||this.addBitrateLimit(t,this._context.videoProfile.getVideoEncodeConfig()[0].maxKbps);else if(t.type==="audio"){const v=t==null?void 0:t.rtp.find(r=>r.codec==="opus");if(v&&t.fmtp){var s;const r=t.fmtp.find(n=>n.payload===v.payload);r&&(s=this._context)!==null&&s!==void 0&&s.audioProfileManager&&(r.config=this._context.audioProfileManager.getOpusConfigStr(r.config))}}return t}));const o={type:"offer",sdp:dA.write(e)};try{await this._peerConnection.setLocalDescription(o),this._report("rtc_set_description",{error_code:0,message:o.sdp||"",is_local:"1",direction:"up",stream_id:"",stream_user_id:"",elapse:aA()-i},{type:"offer"})}catch(t){throw this._report("rtc_set_description",{error_code:-1,message:t.message+o.sdp,is_local:"1",direction:"up",stream_id:"",stream_user_id:"",elapse:aA()-i},{type:"offer"}),t}return{partialSdp:o.sdp||"",audioMid:"0",videoMid:"1",type:"offer",semantics:"unified-plan",videoDescriptions:g,subVideoDescriptions:C,audioTransceiverInit:Q,videoTransceiverInit:B,peerConnectionMode:this.peerConnectionMode,peerConnectionId:this.peerConnectionId}}async subscribe(I){this.stream=I,this.direction="down",I.audioTransceiver=this._peerConnection.addTransceiver("audio",{direction:"recvonly"}),I.videoTransceiver=this._peerConnection.addTransceiver("video",{direction:"recvonly"}),Gk&&(I.initAudioEncodedTransform(),I.initVideoEncodedTransform()),this._report("rtc_begin_create_offer",{direction:"down",stream_id:I.streamId,stream_user_id:I.userId,pc_session_id:this.peerConnectionId,vendor_mode:I.vendorCode||0});const g=await this.peer.createOfferSdp(),C=aA(),Q=dA.parse(g);Array.isArray(Q.media)&&(Q.media=Q.media.map(E=>{if(E.type==="audio"){const i=E==null?void 0:E.rtp.find(e=>e.codec==="opus");if(i&&E!=null&&E.fmtp){const e=E==null?void 0:E.fmtp.find(o=>o.payload===i.payload);e&&this._context&&(e.config+=";stereo=1;sprop-stereo=1")}}return E}));const B={type:"offer",sdp:dA.write(Q)};try{await this._peerConnection.setLocalDescription(B),this._report("rtc_set_description",{error_code:0,message:B.sdp||"",is_local:"1",direction:"down",stream_id:I.streamId,stream_user_id:I.userId,elapse:aA()-C},{type:"offer"})}catch(E){throw this._report("rtc_set_description",{error_code:-1,message:E.message+B.sdp,is_local:"1",direction:"down",stream_id:I.streamId,stream_user_id:I.userId,elapse:aA()-C},{type:"offer"}),E}return{partialSdp:B.sdp||"",audioMid:"0",videoMid:"1",type:"offer",semantics:"unified-plan",peerConnectionMode:this.peerConnectionMode,peerConnectionId:this.peerConnectionId}}async handleAck(I){if(I.action===iI.publish||I.action===iI.subscribe){const{signalingAck:E,videoMid:i,videoCodec:e}=I,{sdp:o}=E,t=dA.parse(o);t.media=t.media.map(r=>(r.mid===i&&e&&R9(r,e),r));const s={sdp:dA.write(t),type:"answer"},v=aA();try{var g,C;await this._peerConnection.setRemoteDescription(s),this._report("rtc_set_description",{error_code:0,message:s.sdp||"",is_local:"1",direction:"down",stream_id:((g=I.stream)===null||g===void 0?void 0:g.streamId)||"",stream_user_id:(C=I.stream)===null||C===void 0?void 0:C.userId,elapse:aA()-v},{type:"answer"})}catch(r){var Q,B;throw this._report("rtc_set_description",{error_code:-1,message:r.message+s.sdp,is_local:"1",direction:"down",stream_id:((Q=I.stream)===null||Q===void 0?void 0:Q.streamId)||"",stream_user_id:(B=I.stream)===null||B===void 0?void 0:B.userId,elapse:aA()-v},{type:"offer"}),r}typeof I.onSuccess=="function"&&I.onSuccess()}else I.action!==iI.unpublish&&I.action!==iI.unsubscribe||this.destroy();return""}destroy(){this.peer.destroy(),super.destroy()}async getDefaultSdp(){return{sdp:"",type:"offer",semantics:""}}connect(){throw new Error("Method not implemented.")}async rollback(){try{this._peerConnection.close()}catch{}}get peerConnectionId(){return this._peerConnectionId}set peerConnectionId(I){this._peerConnectionId=I}}var guA=Object.defineProperty,CuA=Object.getOwnPropertyDescriptor,ii=(A,I,g,C)=>{for(var Q,B=CuA(I,g),E=A.length-1;E>=0;E--)(Q=A[E])&&(B=Q(I,g,B)||B);return B&&guA(I,g,B),B};class uE extends iQ{constructor(I,g){super(),P(this,"_logger",void 0),P(this,"_pubBackOff",new Map),this._ctx=I,this._roomConf=g,this._logger=new uA("RoomPublisher",2,I.id)}async hasPublished(I){return!!I.audioMid&&!!I.videoMid}async publish(I){return this._publish(I)}async _publish(I){var g,C,Q,B,E,i,e,o,t,s;this._logger.info("publish()","localStream: %o",I);const{videoTrack:v}=I,{audioTrack:r}=I,n=aA();let a,{handler:c}=this._ctx;this._roomConf.vendorConfig.enableMultiVendor?[c,a]=await this._getVendorPubSdpInfo(I):a=await this._ctx.handler.publish(I),this.emit("_test_pub_sdpInfo_",a);const{audioMid:d,videoMid:l}=a;I.pubAttributes={localaudio:!!r,localvideo:!!v,videostream:I.pubVideo,audiostream:I.pubAudio,extvideo:(v==null?void 0:v.sourceType)===oI.EXTERNAL,extaudio:(r==null?void 0:r.sourceType)===oI.EXTERNAL,videoDescriptions:a.videoDescriptions,videoType:eC.NORMAL};const h={attributes:R({},I.pubAttributes),audio:!0,video:!0,screen:I.isScreen,audioMid:d,videoMid:l,sdpInfo:{msid:I.stream.id,type:a.type,sdp:a.partialSdp,semantics:a.semantics},peerConnectionMode:(g=a)===null||g===void 0?void 0:g.peerConnectionMode,supportMultiVendor:!0},D=!this._roomConf.vendorConfig.enableMultiVendor&&I.enableSimulcast&&((C=this._ctx.serverConfig)===null||C===void 0?void 0:C.simulcastOnDemand)&&((Q=a.subVideoDescriptions)===null||Q===void 0?void 0:Q.length);let u;(D||(B=this._ctx.serverConfig)!==null&&B!==void 0&&B.e2eFeedback)&&(h.attributes.subVideoDescriptions=a.subVideoDescriptions),(E=a)!==null&&E!==void 0&&E.peerConnectionId&&(h.peerConnectionId=a.peerConnectionId);try{this.emit("_test_pub_body_",h),u=await this._ctx.signalingManager.sendSignaling("publish",h)}catch(V){var w;if(V instanceof Error?this._roomConf.report("rtc_publish_stat",{result:"fail",is_screen:"0",start:n,message:"".concat(V.name,": ").concat(V.message)}):V instanceof U&&this._roomConf.report("rtc_publish_stat",{result:"fail",is_screen:"0",start:n,message:"".concat(V.code,": ").concat(V.message)}),await((w=c)===null||w===void 0?void 0:w.rollback({msid:I.stream.id,stream:I,audioMid:d,videoMid:l})),V.code>=500&&V.code<600){this.emit("_test_pub_5xx_");const z=this._getPubBackOff(I.id);if(z.retryDuration<6e4)return this._logger.info("pubRetry",I.id,z.retryDuration),await new Promise(EA=>setTimeout(EA,z.interval)),z.retryDuration+=z.interval,z.interval=z.interval>4e3?8e3:2*z.interval,I.resetStream(),this.emit($.PUB_RETRY,{screen:I.isScreen}),this._publish(I);this._logger.info("pubRetry","end"),this._pubBackOff.delete(I.id)}else if(V.code===403)throw new U(m.TOKEN_NO_PUBLISH_PERMISSION,V.message||"token no publish permission");throw V}var b,y;this._roomConf.report("rtc_recv_answer",{error_code:0,answer_type:(i=u)===null||i===void 0?void 0:i.relayMessage.type,sequence_id:((e=u)===null||e===void 0||(e=e.relayMessage)===null||e===void 0?void 0:e.sequenceId)||0,message:(o=u)===null||o===void 0||(o=o.relayMessage)===null||o===void 0?void 0:o.sdp,direction:"up",stream_id:"",stream_user_id:"",pc_session_id:((t=c)===null||t===void 0?void 0:t.peerConnectionId)||""}),I.isScreen?I.setVideoCaps((b=u.relayMessage.content)===null||b===void 0?void 0:b.screenCaps):I.setVideoCaps((y=u.relayMessage.content)===null||y===void 0?void 0:y.videoCaps),I.streamId=u.streamId;const S=await I.getSelectedCodec();I.currentVideoCodec=S;const L=new Promise((V,z)=>{var EA,eA,K,p,J;(EA=c)===null||EA===void 0||EA.handleAck({action:iI.publish,streamId:u.streamId,audioMid:d,videoMid:l,audioTransceiverInit:(eA=a)===null||eA===void 0?void 0:eA.audioTransceiverInit,videoTransceiverInit:(K=a)===null||K===void 0?void 0:K.videoTransceiverInit,signalingAck:{sdp:(p=u)===null||p===void 0||(p=p.relayMessage)===null||p===void 0?void 0:p.sdp,sequenceId:(J=u)===null||J===void 0||(J=J.relayMessage)===null||J===void 0?void 0:J.sequenceId},stream:I,videoCodec:S,onSuccess:()=>{this._logger.info("publish()","publish success"),V(0)},onFail:Y=>{this._logger.info("publish()","publish fail"),z(Y)}})});!mI&&await L,this.emit("___afterHandleAckInPub"),(D&&this._ctx.videoProfile.getSimulcastMode()===Li.VIDEO_ON_DEMAND||(s=this._ctx.serverConfig)!==null&&s!==void 0&&s.e2eFeedback)&&this.emit(TE.RSCP,[{StreamIds:[I.stream.id],Metadata:{VideoIndex:0}}],!0),I.videoMid=l,I.audioMid=d,I.subVideoDescriptions=a.subVideoDescriptions,I.remoteSdp=u.relayMessage.sdp,this._roomConf.report("rtc_publish_stat",{result:"success",is_screen:"0",start:n,message:"unknown"})}async updatePubTrack(I){this._logger.info("updatePubTrack()","localStream: %o",I);const{videoTrack:g,audioTrack:C,pubAudio:Q,pubVideo:B}=I,E=I.vendorHandler||this._ctx.handler;let i=C==null?void 0:C.preprocessingTrack;const e=g==null?void 0:g.preprocessingTrack;var o,t;if(B&&e?(I.stopBlackFrame(),await((o=I.videoTransceiver)===null||o===void 0?void 0:o.sender.replaceTrack(e)),this._updateVideoDescriptions(I)):await((t=I.videoTransceiver)===null||t===void 0?void 0:t.sender.replaceTrack(null)),Q&&i){var s;const{mixType:c,mixedAudioTrack:d}=C;d&&c!==JQ.PLAYOUT&&i.enabled&&(i=d),await((s=I.audioTransceiver)===null||s===void 0?void 0:s.sender.replaceTrack(i))}else{var v;await((v=I.audioTransceiver)===null||v===void 0?void 0:v.sender.replaceTrack(null)),AI(this._ctx.id,"MediaClient.updatePubTrack(audio)","null")}await this._updatePublishCodec(I),this.emit("___onAfterReplaceTrack");try{AI(this._ctx.id,"MediaClient.updatePubTrack",JSON.stringify({audioStreamTrack:KQ(i),videoStreamTrack:KQ(e)}))}catch{}const r={localaudio:!!C,localvideo:!!g,videostream:B,audiostream:Q,extvideo:(g==null?void 0:g.sourceType)===oI.EXTERNAL,extaudio:(C==null?void 0:C.sourceType)===oI.EXTERNAL,videoType:g?eC.NORMAL:I.pubAttributes.videoType},n={};for(const[c,d]of Object.entries(r))d!==Reflect.get(I.pubAttributes,c)&&Reflect.set(n,c,d);if(!Object.keys(n).length)return;if(I.observer){const{observer:c}=I,{audiostream:d,videostream:l,localaudio:h,localvideo:D,extaudio:u,extvideo:w}=n;D!==void 0?w!==void 0?c.setPushVideo(w):c.setEnableVideo(D):l!==void 0&&c.setUnmuteVideo(l),h!==void 0?u!==void 0?c.setPushAudio(u):c.setEnableAudio(h):d!==void 0&&c.setUnmuteAudio(d)}I.pubAttributes=R(R({},I.pubAttributes),r),I.pubAttributes.videostream||I.stopBlackFrame();const a={roomId:this._roomConf.roomId,streamId:I.streamId,attributes:n};await this._ctx.signalingManager.sendSignaling("updateStreamAttributes",a),this.emit("___onAfterUpdateSignaling"),mI&&await(E==null?void 0:E.setCurrentDescription())}async _updatePublishCodec(I){this._logger.info("updatePublishCodec()","localStream: %o",I);const{audioMid:g,videoMid:C,remoteSdp:Q,streamId:B,currentVideoCodec:E}=I,i=await I.getSelectedCodec();if(this._logger.info("updatePublishCodec()","selectedCodec: %o",i),i!==E){if(I.currentVideoCodec=i,g&&C&&B&&Q){var e;return mI&&this._ctx.handler instanceof FM&&await((e=this._ctx.handler)===null||e===void 0?void 0:e._internalChangePubCodec()),new Promise((o,t)=>{var s;(s=this._ctx.handler)===null||s===void 0||s.handleAck({action:iI.publish,streamId:B,audioMid:g,videoMid:C,signalingAck:{sdp:Q,sequenceId:-1},videoCodec:i,onSuccess:o,onFail:t,stream:I})})}{const o=["audioMid","videoMid","streamId","remoteSdp"].filter(t=>!Reflect.get(I,t));this._logger.warn("updatePublishCodec()","fast return, because params: %o",o)}}else this._logger.warn("updatePublishCodec()","selectedCodec is equal to currentVideoCodec")}async unpublish(I){this._logger.info("unpublish()","localStream: %o",I);const g={roomId:this._roomConf.roomId,initStreamId:I.initStreamId,streamId:I.streamId};this._ctx.signalingManager.sendSignaling("unpublish",g).catch(()=>{});const C=I.vendorHandler||this._ctx.handler;I.stopBlackFrame(),await(C==null?void 0:C.handleAck({action:iI.unpublish,audioMid:I.audioMid,videoMid:I.videoMid,stream:I,streamId:I.streamId}))}async updatePubBlackFrame(I){var g;const C=I.genBlackFrame();C&&((g=I.videoTransceiver)===null||g===void 0||(g=g.sender)===null||g===void 0||g.replaceTrack(C),I.pubAttributes.videoType=eC.BLACK,this._ctx.signalingManager.sendSignaling("updateStreamAttributes",{roomId:this._roomConf.roomId,streamId:I.streamId,attributes:{videoType:eC.BLACK}}),I.on("black-frame-ended",()=>{var Q;(Q=I.videoTransceiver)===null||Q===void 0||(Q=Q.sender)===null||Q===void 0||Q.replaceTrack(null),I.pubAttributes.videoType=eC.NORMAL,this._ctx.signalingManager.sendSignaling("updateStreamAttributes",{roomId:this._roomConf.roomId,streamId:I.streamId,attributes:{videoType:eC.NORMAL}})}))}async cleanStream(I){return this._logger.info("cleanStream()","localStream: %o",I),I==null?void 0:I.clean()}async destroyStream(I){return this._logger.info("destroyStream()","localStream: %o",I),I==null?void 0:I.destroy()}destroy(I){I.forEach(g=>{g&&(this.unpublish(g).catch(()=>{}),this.destroyStream(g).catch(()=>{}))}),this._pubBackOff.clear(),super.removeAllListeners()}async _updateVideoDescriptions(I){var g;const C=this._ctx.videoProfile.genVideoDescriptions(I),Q=I.pubAttributes.videoDescriptions;if(Q.length!==C.videoDescriptions.length)return;const B={};if(Q.find((e,o)=>{if(e.framerate!==C.videoDescriptions[o].framerate||e.maxkbps!==C.videoDescriptions[o].maxkbps||e.width!==C.videoDescriptions[o].width||e.height!==C.videoDescriptions[o].height)return B.videoDescriptions=C.videoDescriptions,!0}),(g=I.subVideoDescriptions)===null||g===void 0||g.find((e,o)=>{if(e.framerate!==C.subVideoDescriptions[o].framerate||e.maxkbps!==C.subVideoDescriptions[o].maxkbps||e.width!==C.subVideoDescriptions[o].width||e.height!==C.subVideoDescriptions[o].height)return B.subVideoDescriptions=C.subVideoDescriptions,!0}),Object.keys(B).length>0){var E;this._ctx.signalingManager.sendSignaling("updateStreamAttributes",{roomId:this._roomConf.roomId,streamId:I.streamId,attributes:B});const e=(E=I.videoTransceiver)===null||E===void 0||(E=E.sender)===null||E===void 0?void 0:E.getParameters();var i;AI(this._ctx.id,"sender.getParameters",JSON.stringify(e),0,I.streamId),e&&Array.isArray(e==null?void 0:e.encodings)&&(e.encodings=e.encodings.map((o,t)=>{var s;return((s=o.rid)!==null&&s!==void 0?s:e.encodings.length===1?"0":void 0)===C.sendEncodings[t].rid&&(o.maxBitrate=C.sendEncodings[t].maxBitrate,o.maxFramerate=C.sendEncodings[t].maxFramerate,o.scaleResolutionDownBy=C.sendEncodings[t].scaleResolutionDownBy),o}),this._logger.info("sender.setParameters()",JSON.stringify(e.encodings)),AI(this._ctx.id,"sender.setParameters",JSON.stringify(e),0,I.streamId),(i=I.videoTransceiver)===null||i===void 0||i.sender.setParameters(e),AI(this._ctx.id,"Handler.updateScaleResolutionDownBy",JSON.stringify(e.encodings)))}}async _getVendorPubSdpInfo(I){const g=new L9(this._ctx,"");I.vendorHandler=new kM(this._ctx,g),I.pcSessionId&&(I.vendorHandler.peerConnectionId=I.pcSessionId);const C=await I.vendorHandler.publish(I),Q=I.vendorHandler;return Q.on("ice_state",B=>{this.emit(HI.ON_VENDOR_CONNECTION_STATE_CHANGE,{state:{checking:XA.CONNECTION_STATE_CONNECTING,connected:XA.CONNECTION_STATE_CONNECTED,disconnected:XA.CONNECTION_STATE_RECONNECTING}[B],userId:this._roomConf.userId})}),Q.once("disconnect",async()=>{var B;Q.removeAllListeners(),((B=this._ctx.peerConnection)===null||B===void 0?void 0:B.getIceConnectionState())==="connected"?(await this.unpublish(I),await this.publish(I),I.vendorHandler&&I.statsReport.setVar(I.vendorHandler)):this._logger.info("vendor ice failed",I.streamId)}),[Q,C]}_getPubBackOff(I){return this._pubBackOff.has(I)||this._pubBackOff.set(I,{interval:1e3,retryDuration:0}),this._pubBackOff.get(I)}}ii([ag],uE.prototype,"hasPublished"),ii([ag,hB,DA],uE.prototype,"publish"),ii([ag,hB,DA],uE.prototype,"updatePubTrack"),ii([ag,hB,DA],uE.prototype,"unpublish"),ii([ag,DA],uE.prototype,"updatePubBlackFrame"),ii([ag],uE.prototype,"cleanStream"),ii([ag],uE.prototype,"destroyStream"),ii([DA],uE.prototype,"_updateVideoDescriptions");var QuA=Object.defineProperty,BuA=Object.getOwnPropertyDescriptor,nQ=(A,I,g,C)=>{for(var Q,B=BuA(I,g),E=A.length-1;E>=0;E--)(Q=A[E])&&(B=Q(I,g,B)||B);return B&&QuA(I,g,B),B};class zC extends iQ{constructor(I,g){super(),P(this,"_logger",void 0),P(this,"_subBackOff",new Map),P(this,"_subResolves",{}),P(this,"_ontrackCallbackMap",new Map),this._ctx=I,this._roomConf=g,this._logger=new uA("RoomSubscriber",2,I.id)}async hasSubscribed(I){return I.streamState===uC.SUB_ED}async subscribe(I,g,C){if(I.streamState!==uC.SUB_ED)return this._subscribe(I,g,C);this._logger.warn("subscribe()","remoteStream ".concat(I.streamId," has been subscribed, silently return"))}async _subscribe(I,g,C){var Q,B,E,i,e,o,t,s,v,r,n,a,c,d;this._logger.info("subscribe()","mediaType: %o",g),pt("subscribe()",I,this._logger),I.streamState=uC.SUB_ING;let l=!1,h=!1;if($I(g)&&(h=!0),gI(g)&&(l=!0),!l&&this._roomConf.isMultiChatMode())return void(I.streamState=uC.INIT);const D=aA(),u=I.subVideo,w=[];this._subResolves[I.streamId]||(this._subResolves[I.streamId]=[]),w.push(new Promise((CA,LA)=>{this._subResolves[I.streamId].push(CA);const UA=setTimeout(()=>LA(new U(m.TIME_OUT,"wait video timeout for userId: ".concat(I.userId))),6e4),xA=rg=>{rg.mediaType==="video"&&(this._logger.info("remoteStream ".concat(I.userId," received video track")),I.off("ontrack",xA),clearTimeout(UA),CA(0))};I.on("ontrack",xA)})),this._roomConf.isMultiChatMode()||w.push(new Promise((CA,LA)=>{this._subResolves[I.streamId].push(CA);const UA=setTimeout(()=>LA(new U(m.TIME_OUT,"wait audio timeout for userId: ".concat(I.userId))),6e4),xA=rg=>{rg.mediaType==="audio"&&(this._logger.info("remoteStream ".concat(I.userId," received audio track")),I.off("ontrack",xA),clearTimeout(UA),CA(0))};I.on("ontrack",xA)}));const b=CA=>{I.ontrack(CA)};(Q=this._ctx.handler)===null||Q===void 0||Q.on("ontrack",b),this._ontrackCallbackMap.set(I,b);let y,{handler:S}=this._ctx;(B=this._ctx.serverConfig)!==null&&B!==void 0&&B.forceUniHandler||!I.enableVendorMode?y=await this._ctx.handler.subscribe(I,{multiChatMode:this._roomConf.isMultiChatMode()}):[S,y]=await this._getVendorSubSdpInfo(I,b);const{audioMid:L,videoMid:V}=y;I.subVideo=l;const z={spatialLayer:(C==null?void 0:C.spatialLayer)||0,temporalLayer:0,spatialSubLayer:(C==null?void 0:C.spatialSubLayer)||-1},EA={audio:!this._roomConf.isMultiChatMode(),video:!0,data:!0,screen:I.isScreen,browser:"chrome-stable",videoMid:V,audioMid:L,sdpInfo:{sdp:(E=y)===null||E===void 0?void 0:E.partialSdp,semantics:(i=y)===null||i===void 0?void 0:i.semantics,type:(e=y)===null||e===void 0?void 0:e.type},streamUserId:I.userId,streamId:I.streamId,config:{enableMediaType:{audio:!!this._roomConf.isMultiChatMode()||h,video:l},qualityLayer:z},extra:{enableSendRTT:!0},peerConnectionMode:(o=y)===null||o===void 0?void 0:o.peerConnectionMode,supportMultiVendor:!0};(t=y)!==null&&t!==void 0&&t.peerConnectionId&&(EA.peerConnectionId=y.peerConnectionId);const{subscribeFallbackOption:eA,userPriority:K}=this._ctx;typeof eA=="number"&&(EA.config.fallbackOption=eA),K.has(I.userId)&&(EA.config.priority=K.get(I.userId)),(s=y)!==null&&s!==void 0&&s.allSsrc&&(EA.extra.subscribeSSRC=y.allSsrc);const{signalingAck:p,audioTransceiverInit:J,videoTransceiverInit:Y}=y;let N;p&&(I.videoMid=V,I.audioMid=L,await new Promise((CA,LA)=>{var UA;(UA=S)===null||UA===void 0||UA.handleAck({action:iI.subscribe,streamId:I.streamId,audioMid:L,videoMid:V,audioTransceiverInit:J,videoTransceiverInit:Y,signalingAck:p,stream:I,onSuccess:()=>{this._logger.info("ssrc","success"),CA(0)},onFail:xA=>{this._logger.info("ssrc","fail",xA),LA(xA)}})}));try{this.emit("_test_sub_body_",EA);const CA=this._ctx.signalingManager.sendSignaling("subscribe",EA);this.emit("_test_during_signaling_",EA),N=await CA}catch(CA){var q;if(I.streamState=uC.INIT,CA instanceof Error&&this._roomConf.report("rtc_subscribe_stat",{result:"fail",start:D,message:CA.message,stream_user_id:I.userId}),CA.code>=500&&CA.code<600){this.emit("_test_sub_5xx_");const UA=this._getSubBackOff(I.streamId);var IA;if(UA.retryDuration<6e4)return this._logger.info("subRetry",I.streamId,UA.retryDuration),await new Promise(xA=>setTimeout(xA,UA.interval)),UA.retryDuration+=UA.interval,UA.interval=UA.interval>4e3?8e3:2*UA.interval,this.emit($.SUB_RETRY,{screen:I.isScreen,userId:I.userId}),await((IA=S)===null||IA===void 0?void 0:IA.handleAck({action:iI.unsubscribe,streamId:I.streamId,audioMid:L,videoMid:V,stream:I})),I.resetStream(),this._subscribe(I,g,C);this._logger.info("subRetry","end",I.streamId),this._subBackOff.delete(I.streamId)}I.subVideo=u,await((q=S)===null||q===void 0?void 0:q.rollback({msid:I.streamId,stream:I}));const LA={roomId:this._roomConf.roomId,streamId:I.streamId,userId:I.userId};throw await this._ctx.signalingManager.sendSignaling("unsubscribe",LA).catch(()=>{}),I.streamState=uC.INIT,CA.code===403?new U(m.TOKEN_NO_SUBSCRIBE_PERMISSION,CA.message||"token no subscribe permission"):CA}if(!N.relayMessage)throw this._roomConf.report("rtc_error",{error_code:-1009,message:"relayMessage is null"}),new U(m.UNEXPECTED_ERROR,"unable to subscribe");const{audioMid:gA,videoMid:vA}=(v=(r=N)===null||r===void 0?void 0:r.relayMessage)!==null&&v!==void 0?v:{},bA={[L]:gA,[V]:vA};this._logger.info("sub midmap",I.userId,bA),I.videoMid=V,I.audioMid=L,I.subMediaType=g,I.streamState=uC.SUB_ED,I.subLayer=z,this._roomConf.report("rtc_recv_answer",{error_code:0,answer_type:(n=N)===null||n===void 0||(n=n.relayMessage)===null||n===void 0?void 0:n.type,sequence_id:((a=N)===null||a===void 0||(a=a.relayMessage)===null||a===void 0?void 0:a.sequenceId)||0,message:(c=N)===null||c===void 0||(c=c.relayMessage)===null||c===void 0?void 0:c.sdp,direction:"down",stream_id:I.streamId,stream_user_id:I.userId,pc_session_id:((d=S)===null||d===void 0?void 0:d.peerConnectionId)||""});try{var nA;(nA=y)!==null&&nA!==void 0&&nA.signalingAck||await new Promise((CA,LA)=>{var UA,xA,rg,NA,MI;(UA=S)===null||UA===void 0||UA.handleAck({action:iI.subscribe,streamId:I.streamId,audioMid:L,videoMid:V,audioTransceiverInit:(xA=y)===null||xA===void 0?void 0:xA.audioTransceiverInit,videoTransceiverInit:(rg=y)===null||rg===void 0?void 0:rg.videoTransceiverInit,signalingAck:{sdp:(NA=N)===null||NA===void 0||(NA=NA.relayMessage)===null||NA===void 0?void 0:NA.sdp,sequenceId:(MI=N)===null||MI===void 0||(MI=MI.relayMessage)===null||MI===void 0?void 0:MI.sequenceId},stream:I,onSuccess:()=>{this._logger.info("sub ack","success"),CA(0)},onFail:KC=>{this._logger.info("sub ack","fail",KC),LA(KC)}})}),await Promise.all(w)}catch(CA){var H;CA instanceof Error&&this._roomConf.report("rtc_subscribe_stat",{result:"fail",start:D,message:CA.message,stream_user_id:I.userId});const LA={roomId:this._roomConf.roomId,streamId:I.streamId,userId:I.userId};throw await this._ctx.signalingManager.sendSignaling("unsubscribe",LA).catch(()=>{}),await((H=S)===null||H===void 0?void 0:H.handleAck({action:iI.unsubscribe,streamId:I.streamId,audioMid:L,videoMid:V,stream:I})),I.streamState=uC.INIT,I.resetStream(),CA}this._roomConf.isMultiChatMode()||(I.subAudio=h),this._roomConf.report("rtc_subscribe_stat",{result:"success",start:D,message:"unknown",stream_user_id:I.userId}),I.startReport(CA=>this.emit("onRemoteStreamStats",CA),S)}async unsubscribe(I){var g,C;pt("unsubscribe()",I,this._logger);const Q={roomId:this._roomConf.roomId,streamId:I.streamId,userId:I.userId},B=I.vendorHandler||this._ctx.handler;this._ctx.signalingManager.sendSignaling("unsubscribe",Q).catch(()=>{}),I.streamState=uC.INIT,I.subVideo=!1,(g=I.observer)===null||g===void 0||g.setSubscribeVideo(!1),!this._roomConf.isMultiChatMode()&&((C=I.observer)===null||C===void 0||C.setSubscribeAudio(!1));const E=await(B==null?void 0:B.handleAck({action:iI.unsubscribe,streamId:I.streamId,audioMid:I.audioMid,videoMid:I.videoMid,stream:I}));this._subResolves[E]&&this._subResolves[E].forEach(i=>i(0)),this._logger.info("unsubscribe","clean unsub ".concat(I.userId)),I.clean(),I.subMediaType=OC.NONE,this._removeOnTrackListener(I),I.statsReport.unsubscribe()}async unsubscribe4removeTrack(I,g,C){var Q,B,E,i;if(pt("unsubscribe4removeTrack()",I,this._logger),this._logger.info("unsubscribe4removeTrack()","sequenceId: ",g.sequenceId,"trackType: ",C),g.sequenceId{this.emit(HI.ON_VENDOR_CONNECTION_STATE_CHANGE,{state:{checking:XA.CONNECTION_STATE_CONNECTING,connected:XA.CONNECTION_STATE_CONNECTED,disconnected:XA.CONNECTION_STATE_RECONNECTING}[E],userId:I.userId})}),Q.once("disconnect",async()=>{var E;if(Q==null||Q.removeAllListeners(),((E=this._ctx.peerConnection)===null||E===void 0?void 0:E.getIceConnectionState())!=="connected")return void this._logger.info("vendor ice failed",I.streamId);const i=I.subMediaType;await this.unsubscribe(I),await this.subscribe(I,i),I.vendorHandler&&I.statsReport.setVar(I.vendorHandler),this.emit($.RESUBSCRIBE,{stream:I})}),[Q,B]}async subscribe4pushTrack(I,g){var C,Q,B;this._logger.info("subscribe4pushTrack()","streamInfo: %o",g),pt("subscribe4pushTrack()",I,this._logger),I.subAudio=!0;const E=await((C=this._ctx.handler)===null||C===void 0?void 0:C.subscribe(I,{multiChatMode:this._roomConf.isMultiChatMode()}));if(!E)throw new U(m.ADD_TRANSCEIVER_FAILED,"add transceiver failed");const{audioMid:i}=E,{videoMid:e}=E,o=[];o.push(new Promise((s,v)=>{const r=setTimeout(()=>v(new U(m.TIME_OUT,"wait audio timeout for userId: ".concat(I.userId))),6e4),n=a=>{a.mediaType==="audio"&&(this._logger.success("remoteStream ".concat(I.userId," received audio track")),I.off("ontrack",n),clearTimeout(r),s(0))};I.on("ontrack",n)}));const t=s=>{I.ontrack(s)};(Q=this._ctx.handler)===null||Q===void 0||Q.on("ontrack",t),this._ontrackCallbackMap.set(I,t),await((B=this._ctx.handler)===null||B===void 0?void 0:B.handleAck({action:iI.pushtrack,streamId:I.streamId,audioMid:i,videoMid:e,stream:I,audioTransceiverInit:E==null?void 0:E.audioTransceiverInit,videoTransceiverInit:E==null?void 0:E.videoTransceiverInit,signalingAck:g==null?void 0:g.message})),await Promise.all(o),I.videoMid=e,I.audioMid=i,I.startReport(s=>this.emit("onRemoteStreamStats",s),this._ctx.handler)}async updateUserAttributes(I){this._logger.info("updateUserAttributes()","attributes: %o",I),await this._ctx.signalingManager.sendSignaling("updateUserAttributes",{roomId:this._roomConf.roomId,sessionId:this._roomConf.sessionId,attributes:I})}async updateSubTrackLayer(I,g){if(this._logger.info("updateSubTrack()","subLayer: %o",g),I.subLayer.spatialLayer===g.spatialLayer&&I.subLayer.spatialSubLayer===g.spatialSubLayer)return void this._logger.warn("updateSubTrack()","subLayer no change");const C={roomId:this._roomConf.roomId,streamList:[I.streamId],streamId:I.streamId,streamUserId:I.userId,config:{qualityLayer:g}};return await this._ctx.signalingManager.sendSignaling("updateSubscribe",C),this.emit("___afterUpdateSubscribeSend"),I.subLayer=g,I}async updateSubPriority(I,g){if(this._logger.info("updateSubPriority()","priority: %o",g),I.priority===g)return this._logger.warn("updateSubPriority()","priority no change"),I;const C={roomId:this._roomConf.roomId,streamList:[I.streamId],streamId:I.streamId,streamUserId:I.userId,config:{priority:g}};return await this._ctx.signalingManager.sendSignaling("updateSubscribe",C),I.priority=g,I}async updateSubMediaType(I,g){var C;let Q=!1,B=!1;$I(g)&&(B=!0),gI(g)&&(Q=!0);const E={roomId:this._roomConf.roomId,streamList:[I.streamId],config:{enableMediaType:{video:Q,audio:!!this._roomConf.isMultiChatMode()||B}}};var i;return await this._ctx.signalingManager.sendSignaling("updateSubscribe",E),this._roomConf.isMultiChatMode()||((i=I.observer)===null||i===void 0||i.setUnmuteAudio(B),I.subAudio=B),(C=I.observer)===null||C===void 0||C.setUnmuteVideo(Q),I.subVideo=Q,I.subMediaType=g,I}async cleanStream(I){this._logger.info("cleanStream()","stream: %o",I),I==null||I.clean()}destroyStream(I){this._logger.info("destroyStream()","stream: %o",I),I==null||I.destroy()}destroy(I){var g;this._logger.info("destroy()","remoteStream: %o",I),I.forEach(C=>{this.unsubscribe(C).catch(()=>{}),this.destroyStream(C)}),this._subBackOff.clear(),this._ontrackCallbackMap.forEach((C,Q)=>{this._removeOnTrackListener(Q),this._ontrackCallbackMap.delete(Q)}),this._subResolves={},(g=this._ctx.handler)===null||g===void 0||g.removeAllListeners("ontrack"),super.removeAllListeners()}_getSubBackOff(I){return this._subBackOff.has(I)||this._subBackOff.set(I,{interval:1e3,retryDuration:0}),this._subBackOff.get(I)}}nQ([ag],zC.prototype,"hasSubscribed"),nQ([ag,hB,DA],zC.prototype,"subscribe"),nQ([ag,hB,DA],zC.prototype,"unsubscribe"),nQ([ag,hB,DA],zC.prototype,"unsubscribe4removeTrack"),nQ([DA],zC.prototype,"handleRemoveStream"),nQ([ag,hB,DA],zC.prototype,"subscribe4pushTrack"),nQ([ag,DA],zC.prototype,"updateUserAttributes"),nQ([ag,DA],zC.prototype,"updateSubTrackLayer"),nQ([ag,DA],zC.prototype,"updateSubPriority"),nQ([ag],zC.prototype,"updateSubMediaType"),nQ([ag],zC.prototype,"cleanStream"),nQ([ag],zC.prototype,"destroyStream");const Rk={[EC.communication]:[0],[EC.chat]:[0],[EC.chatRoom]:[1,"IES_chatroom"],[EC.coHost]:[1,"IES_PK"],[EC.meeting]:[16],[EC.classRoom]:[0]};class Gs extends iQ{constructor(I,g){super(),P(this,"_logger",void 0),P(this,"_authorization",void 0),P(this,"_joinRoom5xxTimer",void 0),P(this,"_joinTask",void 0),P(this,"_sdpInfo",void 0),this._ctx=I,this._roomConf=g,this._logger=new uA("RoomJoin",2,I.id),this._logger.info("constructor","invoke")}join(){let I,g,C=arguments.length>0&&arguments[0]!==void 0&&arguments[0];this._logger.info("join()");const Q=new Promise((B,E)=>{I=B,g=E,this._callJoinRoom(C).catch(i=>{const e=Array.isArray(i)&&i.length>0?i[0]:i;this._joinRoomFailed(e.message)})});return this._joinTask&&C?this._joinTask.startTime=aA():(this._joinTask={startTime:aA(),success:I,fail:g},this._roomConf.joinPromise=Q),this._reportJoinRoomStart(),Q}async updateToken(I){if(this._logger.info("updateToken()","newToken: %o",I),!this._ctx.appId||!this._roomConf.userId||!this._roomConf.roomId)return;const g={roomId:this._roomConf.roomId,userId:this._roomConf.userId,appId:this._ctx.appId,token:"Bearer ".concat(I)};try{await this._ctx.signalingManager.sendSignaling("updateToken",g)}catch{throw new U(m.UPDATE_TOKEN_WITH_INVALID_TOKEN,"invoke updateToken with an invalid token")}}async leave(){this._logger.info("leave()"),this._stopJoinRoom5xxRetry(),this._joinRoomFailed("leave_room");const I={Authorization:this._authorization,roomId:this._roomConf.roomId,sessionId:this._roomConf.sessionId};if(await this._ready2join(),!this._ctx.signalingManager.isConnected())return Promise.reject(new U(m.NOT_CONNECTED_YET,"server not connected"));await this._ctx.signalingManager.sendSignaling("leaveRoom",I,this._roomConf.rtsOnlySignalHeader)}destroy(){this._logger.info("destroy()"),this._joinRoomFailed("leave_room"),this._authorization=void 0,this._stopJoinRoom5xxRetry(),this.removeAllListeners()}async _ready2join(){var I;return await this._ctx.signalingManager.connect(),this._sdpInfo||(this._sdpInfo=await((I=this._ctx.handler)===null||I===void 0?void 0:I.getDefaultSdp())),Gs.supportedCodecs||(Gs.supportedCodecs=await qa()),{sdpInfo:this._sdpInfo,supportedCodecs:Gs.supportedCodecs}}async _callJoinRoom(I){var g,C;this._logger.info("_callJoinRoom","invoke"),delete this._sdpInfo;const{appId:Q,role:B,businessId:E,useCloudProxy:i,joinRoomParams:e,mediaParams:o}=this._ctx,{sdpInfo:t,supportedCodecs:s}=await this._ready2join(),v={Authorization:Ag.token2auth(Q,this._roomConf.roomId,this._roomConf.userId,this._roomConf.token),sessionId:this._roomConf.sessionId,timestamp:Date.now(),controlMessage:this._roomConf.getLiveControlMessage(),userAttributes:{extra_info:this._roomConf.userInfo.extraInfo,role:B},sdpInfo:t,params:{supportedCodecs:s,userAgent:window.navigator.userAgent,sdkVersion:YA.VERSION,deviceId:$A.getDeviceId(),appId:Q,roomId:this._roomConf.roomId,userId:this._roomConf.userId,businessId:E,enableCloudProxy:i,channelProfile:Rk[this._roomConf.roomProfileType]?"".concat(Rk[this._roomConf.roomProfileType][0]):"0",SDKCodecNegotiation:lA("SDK_CODEC_NEGOTIATION"),sdkType:"rtc",joinRoomMode:this._roomConf.isRTSOnlyRoom()?2:1,deviceType:"web",platformType:2,rtsMode:this._ctx.rtsMode,mediaProcessingType:(g=YA.MEDIA_PROCESSING_TYPE)!==null&&g!==void 0?g:0},options:{supportCheckTokenPrivilege:!0,supportTokenExpireCallBack:!0,enableSceneConfigV2:!0,enableUnBundleMode:!0,enableAudioMux:!0,enableBigRoomMode:!0,needNegotiateSDP:!0,supportMultiVendor:!0}};if(lA("AREA_CODE")==="AREA_CODE_US_OPCO"&&(v.params.mediaArea=JSON.stringify([{AreaList:["GEO:US_OPCO"],Attribute:"include"}])),e)for(const[D,u]of Object.entries(e))v.params[D]=u;o&&(v.mediaParams=o),lA("SIGNAL_CROP_JOINROOM")&&(C=v.sdpInfo)!==null&&C!==void 0&&C.sdp&&(v.sdpInfo.sdp=Q0A(v.sdpInfo.sdp)),Promise.resolve().then(()=>this.emit("onSendingJoinMessageHook"));try{var r,n,a,c;const D=I?"reconnected":"joinRoom",u=await this._joinRoomWithRetry(D,v);this._logger.success("join","send join message success");const{engine_WEB:w,_abtest_vid:b}=u.config||{};var d,l,h;this._authorization=v.Authorization,$A.setEngineWebConfig(this._ctx.appId,this._roomConf.roomId,w),this._ctx.serverConfig={videoCodec:w==null?void 0:w.video_codec,audioRed:!(w==null||!w.pub_audio_red),muteReplaceUnsub:!((r=u.config)===null||r===void 0||!r.mute_replace_unsub),simulcastOnDemand:((n=u.config)===null||n===void 0||(n=n.engine_VPM)===null||n===void 0||(n=n.ondemand)===null||n===void 0?void 0:n.enable)!==!1,forceUniHandler:((a=u.config)===null||a===void 0||(a=a.vendor_param)===null||a===void 0?void 0:a.vendor_stream_sub_mode)===1,e2eFeedback:w==null?void 0:w.e2e_feedback},lA("SDK_CODEC_NEGOTIATION")&&(this._ctx.targetCodec=(d=u.config)===null||d===void 0?void 0:d.targetCodec,this._ctx.targetScreenCodec=(l=u.config)===null||l===void 0?void 0:l.targetScreenCodec),typeof(w==null?void 0:w.av_sync)=="boolean"&&(this._ctx.avSync=w.av_sync),this._roomConf.rtcVid=b,u.vendorConfig&&this._roomConf.setVendorConfig(u.vendorConfig),BC.setAudioStallConfig(w),(c=u.relayMessage)!==null&&c!==void 0&&c.sdp&&((h=this._ctx.handler)===null||h===void 0||h.createAVMlineAnswerTpl(u.relayMessage.sdp)),this.emit($.JOIN_SUCCESS,{joinRes:u,reconnect:I}),this._joinRoomSuccess(u)}catch(D){const u={461:m.ROOM_FORBIDDEN,462:m.USER_FORBIDDEN};(D==null?void 0:D.code)>=700&&(D==null?void 0:D.code)<800?this._joinRoomFailed("token_error",m.INVALID_TOKEN):u[D==null?void 0:D.code]?this._joinRoomFailed((D==null?void 0:D.message)||u[D==null?void 0:D.code],u[D==null?void 0:D.code]):(D==null?void 0:D.code)===m.TIME_OUT&&this._ctx.joinRoomConfig.useTcpAfterJoinTimeout?(this._logger.error("join",fC.JOIN_TIMEOUT),this.safeEmit($.ON_REJOIN_WITH_TCP),this._ctx.signalingManager.reconnect(fC.JOIN_TIMEOUT,!0)):D.code===m.OPERATION_CANCEL&&this._ctx.signalingManager.isReconnecting()||this._joinRoomFailed((D==null?void 0:D.message)||"signaling_error")}}_joinRoomWithRetry(I,g,C){return new Promise((Q,B)=>{this._ctx.signalingManager.sendSignaling(I,g,this._roomConf.rtsOnlySignalHeader,1e4).then(E=>{this.emit("onJoinRoomAck",E),Q(E)}).catch(E=>{if(C=C||new _z,E.code>=500&&E.code<600&&aA()-C.initTs<6e4){const i=C.getRetryDelay();return this._logger.warn("_joinRoomWithRetry","joinRoom failed(code: ".concat(E.code,"), will retry after ").concat(i,"ms")),void(this._joinRoom5xxTimer=setTimeout(()=>{delete this._joinRoom5xxTimer,this._joinRoomWithRetry(I,g,C).then(Q).catch(B)},i))}B(E)})})}_stopJoinRoom5xxRetry(){this._joinRoom5xxTimer&&(clearTimeout(this._joinRoom5xxTimer),delete this._joinRoom5xxTimer)}_reportJoinRoomStart(){this._joinTask&&(this.emit("__joinRoomStartReport"),this._roomConf.report("join_room",{type:"begin",start:this._joinTask.startTime,result:!1,reason:""},{enable_cloud_proxy:this._ctx.useCloudProxy,expectedIDC:this._ctx.expectedIDC}))}_joinRoomSuccess(I){this._joinTask&&(this._joinTask.success(I),this.emit("__joinRoomSuccessReport"),this._roomConf.report("join_room",{type:"end",start:this._joinTask.startTime,result:!0,reason:""},{enable_cloud_proxy:this._ctx.useCloudProxy,expectedIDC:this._ctx.expectedIDC}),this._roomConf.report("rtc_join_room",{error_code:0,deviceModel:"web",deviceManufacturer:"web",elapse:aA()-this._joinTask.startTime}),delete this._joinTask,delete this._roomConf.joinPromise)}_joinRoomFailed(I,g){this._joinTask&&(this._joinTask.fail(new U(g||m.JOIN_ROOM_FAILED,I)),this.emit("__joinRoomFailedReport"),this._roomConf.report("join_room",{type:"end",start:this._joinTask.startTime,result:!1,reason:I},{enable_cloud_proxy:this._ctx.useCloudProxy,expectedIDC:this._ctx.expectedIDC}),delete this._joinTask,delete this._roomConf.joinPromise)}}P(Gs,"supportedCodecs",void 0);var EuA=Object.defineProperty,iuA=Object.getOwnPropertyDescriptor,lu=(A,I,g,C)=>{for(var Q,B=iuA(I,g),E=A.length-1;E>=0;E--)(Q=A[E])&&(B=Q(I,g,B)||B);return B&&EuA(I,g,B),B};class al{constructor(I,g){P(this,"_logger",void 0),this._ctx=I,this._roomConf=g,this._logger=new uA("RoomMessage",2,I.id)}sendUserMessage(I,g){return this._ctx.signalingManager.sendP2PMessage({to:I,from:this._roomConf.userId,room:this._roomConf.roomId,app:this._ctx.appId,msg:g})}async sendRoomMessage(I,g){const C={clientId:this._roomConf.userId,binary:g,message:"",roomId:this._roomConf.roomId};return C.message=g?await Ag.ab2b64str(I):I,this._ctx.signalingManager.sendSignaling("customMessage",C,this._roomConf.rtsOnlySignalHeader)}async controlMessage(I){this._logger.info("controlMessage()","params: %o",I);const g=I;I.type==="transcode"&&(g.roomId=this._roomConf.roomId),await this._ctx.signalingManager.sendSignaling("controlMessage",g)}}lu([DA],al.prototype,"sendUserMessage"),lu([DA],al.prototype,"sendRoomMessage"),lu([DA],al.prototype,"controlMessage");var euA=Object.defineProperty,ouA=Object.getOwnPropertyDescriptor,PI=(A,I,g,C)=>{for(var Q,B=ouA(I,g),E=A.length-1;E>=0;E--)(Q=A[E])&&(B=Q(I,g,B)||B);return B&&euA(I,g,B),B};const Lk={audiostream:!0,extaudio:!1,extvideo:!1,localaudio:!0,localvideo:!1,videoDescriptions:[],videostream:!1,publishTime:0};class EI extends iQ{constructor(I,g){super(),P(this,"_localStream",void 0),P(this,"_localScreenStream",void 0),P(this,"_remoteUsers",new Map),P(this,"_remoteStreams",new Map),P(this,"_remoteStreamStreamIdUserIdMap",{}),P(this,"_virtualStreams",[]),P(this,"_serverConfig",void 0),P(this,"_userDuplicateLoginTimerMap",new Map),P(this,"_networkQualityManager",void 0),P(this,"_videoSizeObserver",void 0),P(this,"_hasPublished",!1),P(this,"_subtitleTool",void 0),P(this,"_csrcUserIdMap",{}),P(this,"_publishOnDemandItem",void 0),P(this,"_onceTriggerBySignal",!1),P(this,"_pubTransceiverReady",!1),P(this,"_publishOnDemandBusy",!1),P(this,"logger",void 0),P(this,"_forwardStreamManager",void 0),P(this,"_publisher",void 0),P(this,"_subscriber",void 0),P(this,"_roomJoin",void 0),P(this,"_roomMessage",void 0),P(this,"_clearSignalListeners",void 0),this.config=I,this._ctx=g,this.logger=new uA("Room",1,g.id),this.logger.info("constructor","invoke"),this._publisher=new uE(g,I),this._addPublisherListeners(),this._subscriber=new zC(g,I),this._addSubscriberListeners(),this._roomJoin=new Gs(g,I),this._addJoinRoomHandler(),this._forwardStreamManager=new Nt(g,I),this._addForwardStreamListeners(),this._roomMessage=new al(g,I),this._networkQualityManager=new y9A(g),this._networkQualityManager.reportor=this._reportNetworkQuality.bind(this),this._videoSizeObserver=new w9A(this),this._videoSizeObserver.onchange=this._emitVideoSizeChange.bind(this),this._addSignalListeners()}get remoteUsers(){return this._remoteUsers}get remoteStreams(){return this._remoteStreams}get localStream(){return this._localStream}get localScreenStream(){return this._localScreenStream}get virtualStreams(){return this._virtualStreams}_addSignalListeners(){const I={[x.ON_ADD_STREAM]:this._onAddStream.bind(this),[x.ON_ADD_STREAM_LIST]:g=>{g&&Array.isArray(g.streamList)&&g.streamList.forEach(C=>this._onAddStream(C))},[x.ON_REMOVE_STREAM]:this._onRemoveStream.bind(this),[x.ON_REMOVE_STREAM_LIST]:g=>{g&&Array.isArray(g.streamList)&&g.streamList.forEach(C=>this._onRemoveStream(C))},[x.USER_CONNECTION]:this._onUserConnection.bind(this),[x.USER_CONNECTION_LIST]:g=>{g&&Array.isArray(g.userList)&&g.userList.forEach(C=>this._onUserConnection(C))},[x.USER_DISCONNECTION]:this._onUserDisconnection.bind(this),[x.USER_DISCONNECTION_LIST]:g=>{g&&Array.isArray(g.userList)&&g.userList.forEach(C=>this._onUserDisconnection(C))},[x.ON_UPDATE_ROOM_ATTRIBUTES]:this._onUpdateRoomAttributes.bind(this),[x.ON_UPDATE_USER_ATTRIBUTES]:this._onUpdateUserAttributes.bind(this),[x.ON_UPDATE_STREAM_ATTRIBUTES]:this._onUpdateStreamAttributes.bind(this),[x.ON_PUSH_TRACK]:this._onPushTrack.bind(this),[x.ON_REMOVE_TRACK]:this._onRemoveTrack.bind(this),[x.ON_CUSTOM_MESSAGE]:this._onCustomMessage.bind(this),[x.USER_MESSAGE_RECEIVED]:this._onUserMessageReceived.bind(this),[x.USER_BINARY_MESSAGE_RECEIVED]:this._onUserBinaryMessageReceived.bind(this),[x.POST_PROCESSING_MESSAGE]:this._onPostProcessingMessage.bind(this),[x.ON_USER_TOKEN_WILL_EXPIRE]:this._onUserTokenWillExpire.bind(this),[x.ON_TOKEN_PUBLISH_PRIVILEGE_WILL_EXPIRE]:this._onUserTokePublishPrivilegeWillExpire.bind(this),[x.ON_TOKEN_PUBLISH_PRIVILEGE_DID_EXPIRED]:this._onUserTokenPublishPrivilegeDidExpire.bind(this),[x.ON_TOKEN_SUBSCRIBE_PRIVILEGE_WILL_EXPIRE]:this._onUserTokeSubscribePrivilegeWillExpire.bind(this),[x.ON_TOKEN_SUBSCRIBE_PRIVILEGE_DID_EXPIRED]:this._onUserTokenSubscribePrivilegeDidExpire.bind(this),[x.STREAM_CONTROL_MESSAGE]:this._onStreamControlMessage.bind(this),[x.ENGINE_CONTROL_MESSAGE]:this._onEngineControlMessage.bind(this),[x.ON_STREAM_FAILED]:this._onStreamFailed.bind(this),[TE.RTT]:this._onRTT.bind(this),[TE.SSC]:this._onSSC.bind(this),[HI.ON_CONNECTION_STATE_CHANGE]:this._onConnectionStateChange.bind(this),[x.ON_SPEAKER_CHANGE]:this._onMeetingSpeakerChange.bind(this),[x.ON_FORWARD_DST_ROOM_USER_KICK]:this._forwardStreamManager.onForwardDstRoomUserKick.bind(this._forwardStreamManager),[TE.RSCP]:this._onRSCP.bind(this)};Object.keys(I).forEach(g=>{this._ctx.signalingManager.on(g,I[g])}),this._clearSignalListeners=()=>{Object.keys(I).forEach(g=>{this._ctx.signalingManager.off(g,I[g])})}}_addPublisherListeners(){this._publisher.on($.PUB_RETRY,I=>{this.emit($.PUB_RETRY,I)}),this._publisher.on(TE.RSCP,this._onRSCP.bind(this)),this._publisher.on(HI.ON_VENDOR_CONNECTION_STATE_CHANGE,I=>this.emit(HI.ON_VENDOR_CONNECTION_STATE_CHANGE,I))}_addSubscriberListeners(){this._subscriber.on(HI.ON_VENDOR_CONNECTION_STATE_CHANGE,I=>this.emit(HI.ON_VENDOR_CONNECTION_STATE_CHANGE,I)),this._subscriber.on("onRemoteStreamStats",I=>{this._networkQualityManager.updateDownlinkStats(I,this._findRemoteStreamByScreen(I.userId,I.isScreen)),lA("HIDDEN_STATS")||(I=DC(I)),this.emit($.ON_REMOTE_STREAM_STATS,I)}),this._subscriber.on($.RESUBSCRIBE,I=>{this.emit($.RESUBSCRIBE,I)}),this._subscriber.on($.SUB_RETRY,I=>{this.emit($.SUB_RETRY,I)})}_addJoinRoomHandler(){this._roomJoin.on($.JOIN_SUCCESS,this._onJoinSucc.bind(this)),this._roomJoin.on($.ON_REJOIN_WITH_TCP,()=>{this.emit($.ON_REJOIN_WITH_TCP)})}_addForwardStreamListeners(){this._forwardStreamManager.on($.ON_FORWARD_STREAM_ERROR,I=>{this.safeEmit($.ON_FORWARD_STREAM_ERROR,I)})}_onLocalStreamStats(I){const g=I.isScreen?this._localScreenStream:this.localStream;this._networkQualityManager.updateUplinkStats(I,g),lA("HIDDEN_STATS")||(I=DC(I)),this.emit($.ON_LOCAL_STREAM_STATS,I)}async join(){this.logger.info("join()"),this.config.startJoinTimestamp=aA();try{var I;const g=await this._roomJoin.join();return this._ctx.callId=g.callId,(I=g.roomAttributes)!==null&&I!==void 0&&I.multiChatMode&&this._handleFFAudioTrack(),this._initSubtitleTool(),{users:g.clients,streams:g.streams}}catch(g){if(g.code!==m.OPERATION_CANCEL)throw g}}async hasScreenPublished(){return!!this._localScreenStream&&this._publisher.hasPublished(this._localScreenStream)}async hasPublished(){return!!this._localStream&&this._publisher.hasPublished(this._localStream)}async publishScreen(I,g,C,Q){this.logger.info("publishScreen()"),this._localScreenStream||(this._localScreenStream=new b9(this._ctx,F.STREAM_INDEX_SCREEN),this.config.vendorConfig.enableMultiVendor&&(this._localScreenStream.pcSessionId=tC()),this._localScreenStream.isScreen=!0,this._localScreenStream.observer=new Ww(this._ctx,this._localScreenStream));let B=!1,E=!1,i=!1,e=!1;!this._localScreenStream.videoTrack&&I?(I.sourceType===oI.EXTERNAL&&(E=!0),B=!0):this._localScreenStream.videoTrack&&!I&&(B=!1),!this._localScreenStream.audioTrack&&g?(g.sourceType===oI.EXTERNAL&&(e=!0),i=!0):this._localScreenStream.audioTrack&&!g&&(i=!1),this._localScreenStream.videoTrack=I,this._localScreenStream.audioTrack=g,C&&($I(C)&&(this._localScreenStream.pubAudio=Q===wC.PUB),gI(C)&&(this._localScreenStream.pubVideo=Q===wC.PUB),this.logger.info("publishScreen mediaType","pubAudio: %o, pubVideo: %o",this._localScreenStream.pubAudio,this._localScreenStream.pubVideo));const o=await this._publisher.hasPublished(this._localScreenStream);if(!this._localScreenStream.pubAudio&&!this._localScreenStream.pubVideo)return o?this.unpublishScreen():void 0;if(o){var t,s,v,r;E?(t=this._localScreenStream.observer)===null||t===void 0||t.setPushVideo(B):(s=this._localScreenStream.observer)===null||s===void 0||s.setEnableVideo(B),e?(v=this._localScreenStream.observer)===null||v===void 0||v.setPushAudio(i):(r=this._localScreenStream.observer)===null||r===void 0||r.setEnableAudio(i),await this.updatePubScreenTrack()}else{var n;(n=this._localScreenStream.observer)===null||n===void 0||n.setPublish(!0),await this._publisher.publish(this._localScreenStream)}this._localScreenStream.pubAudio||this._localScreenStream.pubVideo?this._ctx.handler&&this._localScreenStream.startReport(this._onLocalStreamStats.bind(this),this._localScreenStream.vendorHandler||this._ctx.handler):this._localScreenStream.stopReport("unpublish screen")}async updatePubScreenTrack(){this.logger.info("updatePubScreenTrack","Invoke updatePubScreenTrack"),this._localScreenStream&&await this._publisher.updatePubTrack(this._localScreenStream)}async unpublishScreen(){var I;this.logger.info("unpublish","Invoke unpublishScreen"),this._localScreenStream&&((I=this._localScreenStream.observer)===null||I===void 0||I.setPublish(!1),await this._publisher.unpublish(this._localScreenStream),this._localScreenStream.stopReport("unpublish screen"),await this._publisher.cleanStream(this._localScreenStream),this._localScreenStream=void 0)}async liveControlMessage(I){var g;this.logger.info("controlMessage","Invoke controlMessage"),(g=I.transcodeMeta)===null||g===void 0||g.layout.regions.forEach(C=>{C.roomID=this.config.roomId}),this.config.setLiveControlMessage(I.action==="stopped"?void 0:I);try{await this._roomMessage.controlMessage(I)}catch(C){if(I.action!=="stopped")throw C}}async publicStreamControlMessage(I){I.action==="stopped"&&delete I.publicStreamMeta,await this._roomMessage.controlMessage(I)}getLocalStreamStats(){var I;return(I=this.localStream)===null||I===void 0?void 0:I.getLocalStreamStats()}async updateUserAttributes(){this.logger.info("updateUserAttributes","Invoke updateUserAttributes"),await this._subscriber.updateUserAttributes({role:this._ctx.role})}async publish(I,g,C,Q){let B=arguments.length>4&&arguments[4]!==void 0&&arguments[4];this.logger.info("publish","Invoke publish");let E=!1;this._localStream||(this._localStream=new b9(this._ctx),this.config.vendorConfig.enableMultiVendor&&(this._localStream.pcSessionId=tC()),this._localStream.observer=new Ww(this._ctx,this._localStream),E=!0,this._localStream.vendorCode=this.config.vendorConfig.vendorCode||0),this._localStream.videoTrack=I,this._localStream.audioTrack=g;const{pubAudio:i,pubVideo:e}=this._localStream;if(C&&($I(C)&&(this._localStream.pubAudio=Q===wC.PUB),gI(C)&&(this._localStream.pubVideo=Q===wC.PUB),this.logger.info("publish mediaType","pubAudio: %o, pubVideo: %o",this._localStream.pubAudio,this._localStream.pubVideo)),await this._publisher.hasPublished(this._localStream))try{this.emit("___onMediaServerClientPublish"),await this.updatePubTrack()}catch(d){throw this._localStream.pubAudio=i,this._localStream.pubVideo=e,d}else{if(!this._localStream.pubAudio&&!this._localStream.pubVideo)return;try{var o;if(B)(o=this._localStream.observer)===null||o===void 0||o.setLogin(!0);else if(E){var t,s;const d=!!this._localStream.videoTrack,l=!!this._localStream.audioTrack,h=((t=this._localStream.videoTrack)===null||t===void 0?void 0:t.sourceType)===oI.EXTERNAL,D=((s=this._localStream.audioTrack)===null||s===void 0?void 0:s.sourceType)===oI.EXTERNAL;if(this.config.isAutoPublish&&!this._hasPublished){var v,r,n,a;d&&(h?(v=this._localStream.observer)===null||v===void 0||v.setPushVideo(!0):(r=this._localStream.observer)===null||r===void 0||r.setEnableVideo(!0)),l&&(D?(n=this._localStream.observer)===null||n===void 0||n.setPushAudio(!0):(a=this._localStream.observer)===null||a===void 0||a.setEnableAudio(!0))}else{var c;(c=this._localStream.observer)===null||c===void 0||c.setPublish(!0)}}this.emit("___onMediaServerClientPublish"),await this._publisher.publish(this._localStream),this._hasPublished=!0,this.emit($.ON_PUBLISH_RESULT,{isScreen:!1,state:qB.PUBLISH_SUCC})}catch(d){throw this.emit($.ON_PUBLISH_RESULT,{isScreen:!1,state:qB.PUBLISH_FAIL,errorCode:d.code}),delete this._localStream,d}}this._localStream.pubAudio||this._localStream.pubVideo?this._ctx.handler&&this._localStream.startReport(this._onLocalStreamStats.bind(this),this._localStream.vendorHandler||this._ctx.handler):this._localStream.stopReport("unpublish")}async updatePubTrack(){this.logger.info("updatePubTrack","Invoke updatePubTrack"),this._localStream&&await this._publisher.updatePubTrack(this._localStream)}async unpublish(){this.logger.info("unpublish","Invoke unpublish"),this._localStream&&(await this._publisher.unpublish(this._localStream),this._localStream.stopReport("unpublish"),await this._publisher.cleanStream(this._localStream),this._localStream=void 0)}async subscribe(I,g){if(this.logger.info("subscribe","remoteStream %o",I),await this._subscriber.hasSubscribed(I)){const Q=I.subMediaType|g;return Q!==I.subMediaType?await this._subscriber.updateSubMediaType(I,Q):void 0}const C=this._ctx.videoProfile.getSubLayer(I,this.config.remoteVideoConfig);await this._subscriber.subscribe(I,g,C)}async updateSubVideoConfig(I){var g;const C=this._findRemoteStreamByScreen(I,!1);if(this.logger.info("updateSubVideoConfig","userId %s",I),!C||!await this._subscriber.hasSubscribed(C)||((g=C.attributes)===null||g===void 0||(g=g.videoDescriptions)===null||g===void 0?void 0:g.length)<=1)return;const Q=this._ctx.videoProfile.getSubLayer(C);return Q?(C.originalStreamIndex=Q.spatialLayer,this._subscriber.updateSubTrackLayer(C,Q)):void 0}async unsubscribe(I,g){var C;if(this.logger.info("unsubscribe","Invoke unsubscribe"),!await this._subscriber.hasSubscribed(I))return;const Q=I.subMediaType-(I.subMediaType&g);if(((C=this._ctx.serverConfig)===null||C===void 0||!C.muteReplaceUnsub)&&(Q===OC.NONE||this.config.isMultiChatMode()&&Q===iA.AUDIO))return await this._subscriber.unsubscribe(I);await this._subscriber.updateSubMediaType(I,Q)}async startSubtitle(I){if(!this._subtitleTool)throw new U(m.INVOKED_BEFORE_JOIN_ROOM,"join first");await this._subtitleTool.start(I)}async updateSubtitleConfig(I){if(!this._subtitleTool)throw new U(m.INVOKED_BEFORE_JOIN_ROOM,"join first");await this._subtitleTool.update(I)}async stopSubtitle(){var I;(I=this._subtitleTool)===null||I===void 0||I.stop()}async startForwardStream2Rooms(I){return this._forwardStreamManager.startForwardStream2Rooms(I)}async updateForwardStream2Rooms(I){return this._forwardStreamManager.updateForwardStream2Rooms(I)}async stopForwardStream2Rooms(){return this._forwardStreamManager.stopForwardStream2Rooms()}async pauseForwardStream2AllRooms(){return this._forwardStreamManager.pauseForwardStream2AllRooms()}async resumeForwardStream2AllRooms(){return this._forwardStreamManager.resumeForwardStream2AllRooms()}async updateMediaParams(I){return this._ctx.signalingManager.sendSignaling("updateMediaParams",{roomId:this.config.roomId,mediaParams:I})}async leave(){var I;let g=arguments.length>0&&arguments[0]!==void 0&&arguments[0];this.logger.info("leave","Invoke leave"),(I=this._subtitleTool)===null||I===void 0||I.destroy(),delete this._subtitleTool;try{for(const Q of this._remoteStreams.values())Array.isArray(Q)&&Q.forEach(B=>{var E;(E=B.observer)===null||E===void 0||E.setLogin(!1)});var C;this._localStream&&((C=this._localStream.observer)===null||C===void 0||C.setLogin(!1)),await this._roomJoin.leave().catch(()=>{}),this.destroy(),this.config.report("rtc_leave_room",{error_code:0,message:"",elapse:this.config.getStayRoomDuration()})}catch(Q){if(Q instanceof Error&&this.config.report("rtc_leave_room",{error_code:-1,message:Q.message,elapse:this.config.getStayRoomDuration()}),g)throw Q;this.destroy()}}updateRemoteUserPriority(I){var g;(g=this.remoteStreams.get(I))===null||g===void 0||g.forEach(C=>{const{userPriority:Q}=this._ctx;C.hasSubscribed&&Q.has(I)&&this._subscriber.updateSubPriority(C,Q.get(I))})}destroy(){var I,g,C;this.logger.info("destroy","Invoke destroy"),AI(this._ctx.id,"room_destroy","".concat(new Error().stack)),(I=this._subtitleTool)===null||I===void 0||I.destroy(),delete this._subtitleTool;const Q=P1(g=Array.from(this._remoteStreams.values())).call(g);this._subscriber.destroy(Q),this._subscriber.destroy(this._virtualStreams),this._publisher.destroy([this.localStream,this.localScreenStream]),this._roomJoin.destroy(),(C=this._clearSignalListeners)===null||C===void 0||C.call(this),this._remoteUsers=new Map,this._remoteStreams=new Map,this._localStream&&(this._localStream=void 0),this._localScreenStream&&(this._localScreenStream=void 0),this._userDuplicateLoginTimerMap.forEach(B=>{clearTimeout(B)}),this._userDuplicateLoginTimerMap.clear(),this._networkQualityManager.destroy(),this._videoSizeObserver.destroy(),this._csrcUserIdMap={},this._virtualStreams=[],this._remoteStreamStreamIdUserIdMap={},this._forwardStreamManager.destoy()}async updateToken(I){if(this.logger.info("updateToken","Invoke updateToken"),this.config.token=I,!this.config.isRTSOnlyRoom())try{await this._roomJoin.updateToken(I)}catch(g){throw this.safeEmit($.ON_ROOM_ERROR,{errorCode:m.UPDATE_TOKEN_WITH_INVALID_TOKEN}),g}}sendUserMessage(I,g){return this._ctx.rtsLimiter.e2e.check(g),this._roomMessage.sendUserMessage(I,g)}sendRoomMessage(I){let g=arguments.length>1&&arguments[1]!==void 0&&arguments[1];return this._ctx.rtsLimiter.boradcast.check(I),this._roomMessage.sendRoomMessage(I,g)}async maybeFillBackFrame2Stream(I){var g;I.refreshBlackFrameLifetime(),(g=I.videoTransceiver)!==null&&g!==void 0&&g.sender.track||this._publisher.updatePubBlackFrame(I)}_onJoinSucc(I){var g,C;let{joinRes:Q,reconnect:B}=I;this.logger.info("_onJoinSucc()","invoke. ".concat(B?"[reconnect]":"")),this.emit($.JOIN_SUCCESS,B),this._serverConfig=Q.config,this.config.updateRoomAttributes(Q.roomAttributes);const E=[],i=[],e=[],o=[],t=[];this.config.isRTSOnlyRoom()&&Array.isArray(Q.userInfos)&&(Q.clientsDetail=Q.userInfos.map(s=>({clientId:s.userId,clientJoinTime:s.userJoinTime}))),(g=Q.clientsDetail)===null||g===void 0||g.forEach(s=>{if(s.attributes&&(s.attributes.serverMuteVideo&&this.safeEmit($.ON_VIDEO_STREAM_BANNED,{uid:s.clientId,banned:s.attributes.serverMuteVideo===1}),s.attributes.serverMuteAudio&&this.safeEmit($.ON_AUDIO_STREAM_BANNED,{uid:s.clientId,banned:s.attributes.serverMuteAudio===1})),s.clientId===Q.clientId)return;const v=this._remoteUsers.get(s.clientId);v?v._stillExist=!0:E.push(s)});for(const s of this._remoteUsers.values())s._stillExist||i.push({clientId:s.userId}),delete s._stillExist;(C=Q.streams)===null||C===void 0||C.forEach(s=>{const v=this._findRemoteStreamByScreen(s.clientId,s.screen);this.config.updateUserPubInfo(s),v?(v.stillExist=!0,v.streamId=s.streamId,t.push(s)):o.push(s)});for(const s of this._remoteStreams.values())Array.isArray(s)&&s.forEach(v=>{v.stillExist?delete v.stillExist:e.push({clientId:v.userId,streamId:v.streamId,message:Uw.clientDisconnected})});i.forEach(s=>this._onUserDisconnection(s)),E.forEach(s=>this._onUserConnection(s)),e.forEach(s=>this._onRemoveStream(s)),o.forEach(s=>this._onAddStream(s,{fromSignal:!1})),t.forEach(s=>this._onUpdateStreamAttributes(s)),this.config.resetUserPubInfo(),B&&this._handleSendOrRecvStreamAfterReconnect(),this.emit("__joinSuccess")}_handleSendOrRecvStreamAfterReconnect(){var I;this._localStream&&(this._publisher.cleanStream(this._localStream).then(()=>{var g;this._localStream&&(this._localStream.vendorCode=this.config.vendorConfig.vendorCode||0,(g=this._localStream.observer)===null||g===void 0||g.setLogin(!0))}),this._publisher.publish(this._localStream).then(()=>{var g;this._ctx.handler&&((g=this._localStream)===null||g===void 0||g.startReport(this._onLocalStreamStats.bind(this),this._localStream.vendorHandler||this._ctx.handler)),this.emit($.ON_PUBLISH_RESULT,{isScreen:!1,state:qB.PUBLISH_SUCC,retry:!0})}).catch(g=>{this.logger.error("failed repub error:".concat(g)),this.emit($.ON_PUBLISH_RESULT,{isScreen:!1,state:qB.PUBLISH_FAIL,errorCode:g.code,retry:!0})})),this._localScreenStream&&(this._publisher.cleanStream(this._localScreenStream).then(()=>{var g;this._localScreenStream&&((g=this._localScreenStream.observer)===null||g===void 0||g.setLogin(!0))}),this._publisher.publish(this._localScreenStream).then(()=>{var g;this._ctx.handler&&((g=this._localScreenStream)===null||g===void 0||g.startReport(this._onLocalStreamStats.bind(this),this._localScreenStream.vendorHandler||this._ctx.handler)),this.emit($.ON_PUBLISH_RESULT,{isScreen:!0,state:qB.PUBLISH_SUCC,retry:!0})}).catch(g=>{this.logger.error("failed repub screen stream error:".concat(g)),this.emit($.ON_PUBLISH_RESULT,{isScreen:!0,state:qB.PUBLISH_FAIL,errorCode:g.code,retry:!0})}));for(const g of this._remoteStreams.values())Array.isArray(g)&&g.forEach(async C=>{if(C.hasSubscribed){C.resetHasSubscribed();try{var Q,B;this.logger.info("start resubscribe ".concat(C.userId," with ").concat(C.subMediaType)),gI(C.subMediaType)&&((Q=C.observer)===null||Q===void 0||Q.setSubscribeVideo(!0)),$I(C.subMediaType)&&((B=C.observer)===null||B===void 0||B.setSubscribeAudio(!0)),await this._subscriber.subscribe(C,C.subMediaType),this.logger.info("success resubscribe ".concat(C.userId," with ").concat(C.subMediaType)),this.safeEmit($.RESUBSCRIBE,{stream:C}),this.emit($.ON_SUBSCRIBE_RESULT,{state:Ds.SUBSCRIBE_SUCC,userId:C.userId,isScreen:C.isScreen,retry:!0})}catch(E){if(this.emit($.ON_SUBSCRIBE_RESULT,{state:Ds.SUBSCRIBE_FAIL,userId:C.userId,isScreen:C.isScreen,errorCode:E.code,retry:!0}),this.logger.error("failed resubscribe ".concat(C.userId," with ").concat(C.subMediaType,", error:").concat(E)),E.code===m.NOT_CONNECTED_YET)return void(C.streamState=uC.SUB_ED);await this._subscriber.cleanStream(C),C.resetHasSubscribed()}}});(I=this._subtitleTool)===null||I===void 0||I.reconnect(),this._forwardStreamManager.resumeFromReconnect()}_handleFFAudioTrack(){var I,g;const C=(I=this._ctx.handler)===null||I===void 0?void 0:I.audioTrack4ff,Q=(g=this._ctx.handler)===null||g===void 0?void 0:g.getTransceivers();if(C&&Array.isArray(Q)){const B=Q.find(E=>{var i;return(E==null||(i=E.receiver)===null||i===void 0?void 0:i.track)===C});if(B){const E=new y9(this._ctx,"ff-stream","ff-stream",!1,!1,Lk);E.virtual=!0,E.audioTransceiver=B,E.audioMid="0",E.audioTrack=Xz(this._ctx,C,{streamIndex:LI.VIRTUAL}),this._virtualStreams.push(E),this.safeEmit($.SUBSCRIBE_PUSH_TRACK,{stream:E})}}}_findRemoteStream(I,g){const C=this._remoteStreams.get(I);return Array.isArray(C)?C.find(Q=>Q.streamId===g):null}_findRemoteStreamByScreen(I,g){const C=this._remoteStreams.get(I);return Array.isArray(C)?C.find(Q=>Q.isScreen===g):null}_onAddStream(I){let{needEmit:g=!0,fromSignal:C=!0,virtual:Q=!1}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(I.clientId===this.config.userId)return;const{isAutoSubscribeAudio:B,isAutoSubscribeVideo:E}=this.config,i=this._findRemoteStreamByScreen(I.clientId,I.screen);if(i&&i.streamId!==I.streamId){var e;const t=(e=this._remoteStreams.get(I.clientId))===null||e===void 0?void 0:e.filter(s=>s.streamId!==i.streamId);this._subscriber.cleanStream(i),this._remoteStreams.set(I.clientId,t||[])}let o=this._findRemoteStream(I.clientId,I.streamId);if(this._remoteStreamStreamIdUserIdMap[I.streamId]=I.clientId,o)o.attributes=I.attributes;else if(o=new y9(this._ctx,I.clientId,I.streamId,I.screen,!1,I.attributes),o.virtual=Q,this._initStreamListeners(o),!Q){const t=this._remoteStreams.get(I.clientId);t?t.push(o):this._remoteStreams.set(I.clientId,[o])}if(o.remoteSessionId=I.remoteSessionId||"",o.observer=new qz(this._ctx,o),!o.isScreen&&E&&(C&&o.hasVideo&&(o.attributes.extvideo?(o.observer.setExternalVideoSource(!0),o.observer.setPushVideo(!0)):(o.observer.setExternalVideoSource(!1),o.observer.setPublishVideo(!0))),C&&o.hasAudio&&B&&!this.config.isMultiChatMode()&&(o.attributes.extaudio?(o.observer.setExternalAudioSource(!0),o.observer.setPushAudio(!0)):(o.observer.setExternalAudioSource(!1),o.observer.setPublishAudio(!0))),g&&!C)){const{isAutoSubscribeAudio:t,isAutoSubscribeVideo:s}=this.config;o.observer.setLogin(!0,{audio:!!t&&!this.config.isMultiChatMode(),video:!!s})}return g&&this.safeEmit(x.ON_ADD_STREAM,{stream:o}),o}_onUserConnection(I){var g;if(I.clientId===this.config.userId)return;const C=this._userDuplicateLoginTimerMap.get(I.clientId);if(typeof C=="number")return this._userDuplicateLoginTimerMap.delete(I.clientId),void self.clearTimeout(C);const Q={userId:I.clientId,extraInfo:(g=I.attributes)===null||g===void 0?void 0:g.extra_info};this._remoteUsers.set(I.clientId,R({},Q)),this.safeEmit(x.USER_CONNECTION,{userInfo:Q,publishState:this.config.getUserPubInfo(Q.userId)}),I.attributes&&(I.attributes.serverMuteVideo&&this.safeEmit($.ON_VIDEO_STREAM_BANNED,{uid:I.clientId,banned:I.attributes.serverMuteVideo===1}),I.attributes.serverMuteAudio&&this.safeEmit($.ON_AUDIO_STREAM_BANNED,{uid:I.clientId,banned:I.attributes.serverMuteAudio===1}))}_onUserDisconnection(I){let{clientId:g,tag:C,code:Q,forbiddenTime:B}=I;if(g)if(g===this.config.userInfo.userId){let E=null;C===ai.kickedByAdmin?E=m.KICKED_OUT:C===ai.onUserTokenDidExpire?E=m.TOKEN_EXPIRED:C===ai.userDuplicateLogin&&(E=m.DUPLICATE_LOGIN),Q===Ez.roomDismissByAdmin&&(E=m.ROOM_DISMISS),E&&this.safeEmit($.ON_ROOM_ERROR,{errorCode:E,forbiddenTime:B})}else{let E=Sr.DROPPED;C===ai.userLeave?E=Sr.QUIT:C===ai.kickedByAdmin?E=Sr.KICKED_BY_ADMIN:C===ai.roleChanged&&(E=Sr.SWITCH_TO_INVISIBLE);const i=()=>{var e;this._remoteUsers.delete(g);const o=[];(e=this._remoteStreams.get(g))===null||e===void 0||e.forEach(t=>{o.push(this._onRemoveStream({clientId:t.userId,streamId:t.streamId,message:Uw.clientDisconnected}))}),this._remoteStreams.delete(g),Promise.all(o).finally(()=>{this.safeEmit($.ON_USER_LEAVE,{userInfo:{userId:g},reason:E})})};if(C===ai.userDuplicateLogin){const e=this._userDuplicateLoginTimerMap.get(g);e&&self.clearTimeout(e);const o=self.setTimeout(i,5e3);this._userDuplicateLoginTimerMap.set(g,o)}else i()}}async _onRemoveStream(I){if(I.clientId===this.config.userId)return;const g=this._remoteStreams.get(I.clientId);if(!g)return;const C=g.find(i=>i.streamId===I.streamId);if(!C)return;var Q,B;C.hasVideo&&((Q=C.observer)===null||Q===void 0||Q.setPublishVideo(!1)),C.hasAudio&&!this.config.isMultiChatMode()&&((B=C.observer)===null||B===void 0||B.setPublishAudio(!1));const E=g.filter(i=>i.streamId!==I.streamId);this._remoteStreams.set(I.clientId,E);try{await this._subscriber.handleRemoveStream(C).then(()=>this._subscriber.cleanStream(C)).finally(()=>{this.safeEmit(x.ON_REMOVE_STREAM,{stream:C,reason:I.message,callback:()=>{this._subscriber.destroyStream(C)}})})}catch(i){console.error(i)}}_onUpdateUserAttributes(I){I.attributes&&(I.attributes.serverMuteVideo&&this.safeEmit($.ON_VIDEO_STREAM_BANNED,{uid:I.clientId,banned:I.attributes.serverMuteVideo===1}),I.attributes.serverMuteAudio&&this.safeEmit($.ON_AUDIO_STREAM_BANNED,{uid:I.clientId,banned:I.attributes.serverMuteAudio===1}))}_onUpdateRoomAttributes(I){var g;I.roomAttributes&&(this.config.updateRoomAttributes(I.roomAttributes),this._ctx&&(this._ctx.callId=I.roomAttributes.callId)),(g=I.roomAttributes)!==null&&g!==void 0&&g.multiChatMode&&this._handleFFAudioTrack()}_onUpdateStreamAttributes(I){const{isAutoSubscribeAudio:g,isAutoSubscribeVideo:C}=this.config,{clientId:Q,streamId:B,attributes:E}=I,i=this._findRemoteStream(Q,B);if(!i)return;const e=i.attributes,o=R(R({},e),E);let t=!1;const s=o.localaudio!==e.localaudio;let v=!1,r=!1;const n=o.localvideo!==e.localvideo;let a=!1,c=OC.NONE,d=OC.NONE;if(o.audiostream!==e.audiostream&&(t=o.localaudio,v=!!o.audiostream,o.audiostream?c|=iA.AUDIO:d|=iA.AUDIO),o.videostream!==e.videostream&&(r=o.localvideo,a=!!o.videostream,o.videostream?c|=iA.VIDEO:d|=iA.VIDEO),c&&this.safeEmit($.ON_USER_PUBLISH_STATE_CHANGE,{userId:Q,mediaType:c,isScreen:i.isScreen,pubState:wC.PUB,remoteStream:i}),d&&this.safeEmit($.ON_USER_PUBLISH_STATE_CHANGE,{userId:Q,mediaType:d,isScreen:i.isScreen,pubState:wC.UNPUB,remoteStream:i}),i.remoteSessionId=I.remoteSessionId||"",i.attributes=o,o.localaudio!==e.localaudio)if(o.localaudio){var l,h,D,u;(g||i.subAudio)&&o.audiostream&&(o.extaudio?((l=i.observer)===null||l===void 0||l.setExternalAudioSource(!0),(h=i.observer)===null||h===void 0||h.setPushAudio(!0)):((D=i.observer)===null||D===void 0||D.setExternalAudioSource(!1),(u=i.observer)===null||u===void 0||u.setEnableAudio(!0))),this.safeEmit($.ON_USER_START_AUDIO_CAPTURE,{userId:Q},i)}else{var w,b,y,S;o.extaudio?((w=i.observer)===null||w===void 0||w.setExternalAudioSource(!0),(b=i.observer)===null||b===void 0||b.setPushAudio(!1)):((y=i.observer)===null||y===void 0||y.setExternalAudioSource(!1),(S=i.observer)===null||S===void 0||S.setEnableAudio(!1)),!i.isScreen&&this.safeEmit($.ON_USER_STOP_AUDIO_CAPTURE,{userId:Q})}if(o.localvideo!==e.localvideo)if(o.localvideo){var L,V,z,EA;(C||i.subVideo)&&o.videostream&&(o.extvideo?((L=i.observer)===null||L===void 0||L.setExternalVideoSource(!0),(V=i.observer)===null||V===void 0||V.setPushVideo(!0)):((z=i.observer)===null||z===void 0||z.setExternalVideoSource(!1),(EA=i.observer)===null||EA===void 0||EA.setEnableVideo(!0))),this.safeEmit($.ON_USER_START_VIDEO_CAPTURE,{userId:Q})}else{var eA,K,p,J;o.extvideo?((eA=i.observer)===null||eA===void 0||eA.setExternalVideoSource(!0),(K=i.observer)===null||K===void 0||K.setPushVideo(!1)):((p=i.observer)===null||p===void 0||p.setExternalVideoSource(!1),(J=i.observer)===null||J===void 0||J.setEnableVideo(!1)),!i.isScreen&&this.safeEmit($.ON_USER_STOP_VIDEO_CAPTURE,{userId:Q})}var Y,N;t&&!s&&g&&((Y=i.observer)===null||Y===void 0||Y.setRemoteUnmuteAudio(v)),r&&!n&&C&&((N=i.observer)===null||N===void 0||N.setRemoteUnmuteVideo(a)),typeof o.videoType=="number"&&o.videoType!==e.videoType&&this.safeEmit($.VIDEO_TYPE_CHANGE,{userId:i.userId,isScreen:i.isScreen,type:o.videoType===eC.BLACK?Tw.BLACK:Tw.NORMAL})}_onPushTrack(I){var g;if((g=I.streamId)===null||g===void 0||!g.startsWith("audio_mux"))return void this.config.report("rtc_error",{message:"onPushTrack, userId: ".concat(I.clientId,", ").concat(I.streamId),error_code:TC.TRACK_ERROR});const C=this._onAddStream(R(R({},I),{},{attributes:Lk}),{needEmit:!1,fromSignal:!1,virtual:!0});C&&this._subscriber.subscribe4pushTrack(C,I).then(()=>{this.safeEmit($.SUBSCRIBE_PUSH_TRACK,{stream:C}),this._virtualStreams.push(C)}).catch(Q=>{this.logger.error("subscribe","push track failed %o",Q)})}_onRemoveTrack(I){let{clientId:g,streamId:C,message:Q,trackType:B}=I;this.logger.info("_onRemoveTrack","remove track: %o",g);const E=this._findRemoteStream(g,C);E&&(E.removeTrack=!0,this._subscriber.unsubscribe4removeTrack(E,Q,B),this.emit($.REMOVE_PUSH_TRACK,{stream:E,mediaType:B+1}))}_onMeetingSpeakerChange(I){if(Array.isArray(I==null?void 0:I.speakerCsrcInfo)){const g={};I==null||I.speakerCsrcInfo.forEach(C=>{let{csrc:Q,userId:B,isScreen:E}=C;E||(g[Q]=B)}),this._csrcUserIdMap=g}Array.isArray(I.muxStreamInUse)&&this._virtualStreams.forEach(g=>{var C;(C=I.muxStreamInUse)!==null&&C!==void 0&&C.includes(g.streamId)?g.virtualOccupy=!0:g.virtualOccupy=!1})}getActiveSpeakerInMultiChatMode(){const I=[];return this._virtualStreams.forEach(g=>{var C;const Q=(C=g.audioTransceiver)===null||C===void 0?void 0:C.receiver;if(Q){const[B]=Q.getContributingSources()||[];if(B){const{audioLevel:E,source:i}=B;this._csrcUserIdMap[i]&&I.push({userId:this._csrcUserIdMap[i],audioLevel:E})}}}),I.length&&Ws(I).call(I,(g,C)=>g.audioLevel-C.audioLevel),I}_onReconnecting(){var I,g;for(const C of this._remoteStreams.values())Array.isArray(C)&&C.forEach(Q=>{var B;(B=Q.observer)===null||B===void 0||B.setDisconnect(),this._subscriber.cleanStream(Q)});this._virtualStreams.forEach(C=>{var Q;this.emit($.REMOVE_PUSH_TRACK,{stream:C,mediaType:iA.AUDIO}),(Q=C.observer)===null||Q===void 0||Q.setDisconnect(),this._subscriber.cleanStream(C)}),this._virtualStreams=[],(I=this.localStream)===null||I===void 0||(I=I.observer)===null||I===void 0||I.setDisconnect(),this._publisher.cleanStream(this.localStream),(g=this.localScreenStream)===null||g===void 0||(g=g.observer)===null||g===void 0||g.setDisconnect(),this._publisher.cleanStream(this.localScreenStream)}_onConnectionStateChange(I){I.state===XA.CONNECTION_STATE_RECONNECTING?this._onReconnecting():I.state===XA.CONNECTION_STATE_RECONNECTED&&this._roomJoin.join(!0)}_initStreamListeners(I){I.on("ontrack",g=>{g.track}),I.on("onSEIMessage",g=>{this.emit($.ON_SEI_MESSAGED_RECEIVED,{sei:g,remoteStreamKey:{userId:I.userId,roomId:this.config.roomId,streamIndex:I.isScreen?F.STREAM_INDEX_SCREEN:F.STREAM_INDEX_MAIN}})})}_onCustomMessage(I){var g;(g=this._subtitleTool)!==null&&g!==void 0&&g.onMessageRecv(I)||this.safeEmit(x.ON_CUSTOM_MESSAGE,I)}_onUserMessageReceived(I){this.safeEmit(x.USER_MESSAGE_RECEIVED,{userId:I.from,message:I.msg})}_onUserBinaryMessageReceived(I){var g;const C={userId:I.from,message:I.msg};(g=this._subtitleTool)!==null&&g!==void 0&&g.onMessageRecv(C)||this.safeEmit(x.USER_BINARY_MESSAGE_RECEIVED,C)}_initSubtitleTool(){this._subtitleTool=new z0(this._ctx,this.config),this._subtitleTool.onEvent=I=>{this.emit($.ON_SUBTITLE_STATE_CHANGED,I)},this._subtitleTool.onMessage=I=>{this.emit($.ON_SUBTITLE_MESSAGE_RECEIVED,I)}}_onPostProcessingMessage(I){if(!I.body)return;var g;if(I.type==="subtitleCallback")return void((g=this._subtitleTool)===null||g===void 0||g.onResult(I));const C=I.body,Q=C.error||0;let B=wQ.START;const E=["success","parameter error","subscription timeout","ffmpeg error","cdn error","publish error"];if(C.protocol==="2.0"){switch(C.eventType){case"TranscodeStarted":C.error!==0&&(B=wQ.START_FAILED);break;case"TranscodeStateChanged":B=C.error!==0?wQ.START_FAILED:wQ.START_SUCCESS;break;case"TranscodeStopped":B=C.error!==0?wQ.STOP_FAILED:wQ.STOP_SUCCESS;break;case"TranscodeUpdated":B=C.error!==0?wQ.UPDATE_FAILED:wQ.UPDATE_SUCCESS}this.safeEmit(x.POST_PROCESSING_MESSAGE,{code:Q,protocol:C.protocol,error:C.error,eventType:B,message:E[Q]})}this.safeEmit(x.POST_PROCESSING_MESSAGE,{code:Q,message:E[Q],type:I.type})}_onUserTokenWillExpire(){this.safeEmit(x.ON_USER_TOKEN_WILL_EXPIRE,null)}_onUserTokePublishPrivilegeWillExpire(){this.safeEmit(x.ON_TOKEN_PUBLISH_PRIVILEGE_WILL_EXPIRE,null)}_onUserTokenPublishPrivilegeDidExpire(){this.safeEmit(x.ON_TOKEN_PUBLISH_PRIVILEGE_DID_EXPIRED,null)}_onUserTokeSubscribePrivilegeWillExpire(){this.safeEmit(x.ON_TOKEN_SUBSCRIBE_PRIVILEGE_WILL_EXPIRE,null)}_onUserTokenSubscribePrivilegeDidExpire(){this.safeEmit(x.ON_TOKEN_SUBSCRIBE_PRIVILEGE_DID_EXPIRED,null)}async _onStreamFailed(I){if(I.type==="publish"){var g,C;let Q;if(((g=this.localStream)===null||g===void 0?void 0:g.streamId)===I.streamId?Q=this.localStream:((C=this.localScreenStream)===null||C===void 0?void 0:C.streamId)===I.streamId&&(Q=this.localScreenStream),!Q)return;await this._publisher.unpublish(Q).catch(()=>{}),await this._publisher.cleanStream(Q),await this._publisher.publish(Q).catch(()=>{})}else if(I.type==="subscribe"){const Q=this._remoteStreamStreamIdUserIdMap[I.streamId],B=this._findRemoteStream(Q,I.streamId);if(B){const E=B.subMediaType,i=B.subLayer;await this._subscriber.unsubscribe(B),await this._subscriber.subscribe(B,E,i),this.safeEmit($.RESUBSCRIBE,{stream:B})}}}_onStreamControlMessage(I){var g,C;I.type===Qz.PushLimitWarn&&((g=this._localStream)!==null&&g!==void 0&&g.pubAudio||(C=this._localStream)!==null&&C!==void 0&&C.pubVideo||this.unpublish())}async _onPublishOnDemand(){var I,g,C;if(this._publishOnDemandItem&&!this._publishOnDemandBusy&&((I=this._serverConfig)===null||I===void 0||(I=I.engine_VPM)===null||I===void 0||(I=I.ondemand)===null||I===void 0?void 0:I.enable)!==!1){if((g=this._localStream)!==null&&g!==void 0&&g.videoTransceiver){this._publishOnDemandBusy=!0;const Q=this._publishOnDemandItem;this._publishOnDemandItem=void 0;const B=[],E=this._localStream.stream.id,{sender:i}=this._localStream.videoTransceiver,e=i.getParameters();if(AI(this._ctx.id,"sender.getParameters",JSON.stringify(e),0,E),Array.isArray(e.encodings)&&Array.isArray(Q)){const o={};this.logger.info("_onPublishOnDemand exec","usedDescriptions: %o",Q),Q.forEach(s=>{var v;if((v=s.StreamIds)!==null&&v!==void 0&&v.includes(E)){var r,n,a;const l=(r=(n=s.Metadata)===null||n===void 0?void 0:n.VideoIndex)!==null&&r!==void 0?r:0;let h=0;var c,d;(a=this._ctx.serverConfig)!==null&&a!==void 0&&a.e2eFeedback&&(h=Math.max(...Object.keys((c=(d=s.Metadata)===null||d===void 0?void 0:d.VideoKbpsHist)!==null&&c!==void 0?c:{}).map(D=>Number(D)),0)),o[l]={kbps:h}}});const t=[...this._localStream.pubAttributes.videoDescriptions];e.encodings=e.encodings.map(s=>{if(s.rid){if(o[s.rid]){var v;s.active=!0;const a=(v=o[s.rid])===null||v===void 0?void 0:v.kbps;a&&(s.maxBitrate=1e3*KY(s.rid,a,t))}else s.active=!1;const n=Number(s.rid);B[n]=s.active}else{var r;const n=(r=o[0])===null||r===void 0?void 0:r.kbps;n&&(s.maxBitrate=1e3*KY(void 0,n,t))}return s}),this.config.report("rtc_invoke_status",{sdk_api_name:"onPublishOnDemand",message:JSON.stringify(e.encodings),error_code:0,stream_id:E,elapse:0}),this._ctx.videoProfile.activeSimStreams=B}this.logger.info("sender.setParameters()",JSON.stringify(e.encodings)),AI(this._ctx.id,"sender.setParameters",JSON.stringify(e),0,E),await i.setParameters(e),this._publishOnDemandBusy=!1}else if((C=this._localStream)===null||C===void 0||!C.videoTransceiver)return;this._onPublishOnDemand()}}_onRTT(I){const{StreamIds:g,Metadata:C}=I;if(g!=null&&g.length&&C){const Q=g[0];this._ctx.streamRTT[Q]={audio:C.audio_rtt,video:C.video_rtt}}}_onRSCP(I,g){I.find(C=>{var Q,B;return C==null||(Q=C.StreamIds)===null||Q===void 0?void 0:Q.includes((B=this._localStream)===null||B===void 0||(B=B.stream)===null||B===void 0?void 0:B.id)})&&(g?this._pubTransceiverReady=!0:this._onceTriggerBySignal=!0,g&&this._onceTriggerBySignal||(this._publishOnDemandItem=I),this._pubTransceiverReady&&this._onPublishOnDemand())}_onSSC(I){const{StreamIds:g,Metadata:C}=I,Q=g[0],B=this._remoteStreamStreamIdUserIdMap[Q],E=this._findRemoteStream(B,Q),i={userId:B,isScreen:!!E&&E.isScreen,beforeVideoIndex:C.ssc_items[0].prev_layer_id,afterVideoIndex:C.ssc_items[0].cur_layer_id,beforeEnable:C.ssc_items[0].prev_video_open!==0,afterEnable:C.ssc_items[0].cur_video_open!==0,reason:C.ssc_items[0].change_reason};this.emit($.ON_SIMULCAST_SUBSCRIBE_FALLBACK,i)}_reportNetworkQuality(I,g){this.emit($.ON_NETWORK_QUALITY,I,g)}_emitVideoSizeChange(I,g,C,Q){this.emit($.ON_REMOTE_VIDEO_SIZE_CHANGED,{roomId:this.config.roomId,userId:I,streamIndex:g?F.STREAM_INDEX_SCREEN:F.STREAM_INDEX_MAIN},{width:C,height:Q})}async setAudioEncodeMaxBitrate(I,g){const C=I===F.STREAM_INDEX_MAIN?this.localStream:this.localScreenStream;if(C!=null&&C.pubAudio){var Q;const E=(Q=C.audioTransceiver)===null||Q===void 0?void 0:Q.sender.getParameters();var B;AI(this._ctx.id,"sender.getParameters",JSON.stringify(E),0,C.streamId),E!=null&&E.encodings.length&&(E.encodings[0].maxBitrate=1e3*g,AI(this._ctx.id,"sender.setParameters",JSON.stringify(E),0,C.streamId),await((B=C.audioTransceiver)===null||B===void 0?void 0:B.sender.setParameters(E)))}}_onEngineControlMessage(I){let{type:g,body:C}=I;if(g===Bz.CHANGE_CODEC){if(!lA("SDK_CODEC_NEGOTIATION"))return void this.logger.info("_onEngineControlMessage","SDK_CODEC_NEGOTIATION is false, ignore");const{codec:i,media:e,streamId:o}=C;if(!e||e==="audio")return;const t=i.split(",").map(v=>RE(v).call(v).toUpperCase());let s;var Q,B,E;this.logger.info("_onEngineControlMessage","changeCodec to %s",i),o?(((Q=this.localStream)===null||Q===void 0?void 0:Q.streamId)===o?s=this.localStream:((B=this.localScreenStream)===null||B===void 0?void 0:B.streamId)===o&&(s=this.localScreenStream),(E=s)===null||E===void 0||E.setChangeCodecs(t)):e==="video"?(s=this.localStream,this._ctx.targetCodec=t[0]):e==="screen"&&(s=this.localScreenStream,this._ctx.targetScreenCodec=t[0]),s&&this.emit($.UPDATE_PUBLISH,{streamIndex:s.isScreen?F.STREAM_INDEX_SCREEN:F.STREAM_INDEX_MAIN})}}}PI([DA],EI.prototype,"publishScreen"),PI([DA],EI.prototype,"updatePubScreenTrack"),PI([DA],EI.prototype,"unpublishScreen"),PI([DA],EI.prototype,"liveControlMessage"),PI([DA],EI.prototype,"publicStreamControlMessage"),PI([DA],EI.prototype,"updateUserAttributes"),PI([DA],EI.prototype,"publish"),PI([DA],EI.prototype,"updatePubTrack"),PI([DA],EI.prototype,"unpublish"),PI([DA],EI.prototype,"subscribe"),PI([DA],EI.prototype,"updateSubVideoConfig"),PI([DA],EI.prototype,"unsubscribe"),PI([DA],EI.prototype,"startSubtitle"),PI([DA],EI.prototype,"stopSubtitle"),PI([DA],EI.prototype,"startForwardStream2Rooms"),PI([DA],EI.prototype,"updateForwardStream2Rooms"),PI([DA],EI.prototype,"stopForwardStream2Rooms"),PI([DA],EI.prototype,"pauseForwardStream2AllRooms"),PI([DA],EI.prototype,"resumeForwardStream2AllRooms"),PI([DA],EI.prototype,"updateMediaParams"),PI([DA],EI.prototype,"updateRemoteUserPriority"),PI([DA],EI.prototype,"updateToken"),PI([DA],EI.prototype,"sendUserMessage"),PI([DA],EI.prototype,"sendRoomMessage"),PI([DA],EI.prototype,"maybeFillBackFrame2Stream");const Sk=async(A,I)=>{const g=new Audio(pQ.createObjectURL(new Blob([A],I)));try{return g.muted=!0,await g.play(),g.pause(),!0}catch{return!1}};var tuA=Object.defineProperty,suA=Object.getOwnPropertyDescriptor,qg=(A,I,g,C)=>{for(var Q,B=suA(I,g),E=A.length-1;E>=0;E--)(Q=A[E])&&(B=Q(I,g,B)||B);return B&&tuA(I,g,B),B};class Kg{constructor(I,g){P(this,"_sharedAudioContext",new AudioContext),P(this,"_workletReady",void 0),P(this,"_audioDestination",this._sharedAudioContext.createMediaStreamDestination()),P(this,"_localGainNode",this._sharedAudioContext.createGain()),P(this,"_bufferGainNode",this._sharedAudioContext.createGain()),P(this,"_audioBufferSource",void 0),P(this,"_localSource",void 0),P(this,"_context",void 0),P(this,"_failedAudioList",[]),P(this,"_startingIds",new Map),P(this,"_revokeURLs",new Set),P(this,"_audioFetchMap",new Map),P(this,"_audioFetchConfig",new Map),P(this,"mixingMap",new Map),P(this,"resourcesCache",new Map),P(this,"volumeConfig",new Map),P(this,"cachedBuffer",[]),P(this,"id","AudioMixingManager"),this.engineId=g,this._context=I;try{var C,Q;this._workletReady=(C=this._sharedAudioContext.audioWorklet)===null||C===void 0||(Q=C.addModule)===null||Q===void 0?void 0:Q.call(C,Kz),this._workletReady.catch(()=>{this._workletReady=null})}catch{this._workletReady=null}this._localGainNode.gain.value=1}mixMediaStream(I){this._localSource&&this._localSource.disconnect(this._localGainNode),this._localSource=this._sharedAudioContext.createMediaStreamSource(I),this._localSource.connect(this._localGainNode).connect(this._audioDestination)}async startAudioMixing(I,g,C){if(this._startingIds.get(I)!==void 0)return void console.warn("AudioMixing task id: ".concat(I," is starting"));this._startingIds.set(I,I);const{playCount:Q,type:B}=C;MA(B,"mixingType",NY(JQ));const E=this._context.getLocalAudioTrack();if(!E)return;const i=E.preprocessingTrack;i&&this.mixMediaStream(new MediaStream([i])),E.once("needReplaceTrack",()=>{this.mixMediaStream(new MediaStream([E.preprocessingTrack]))});const e=this.mixingMap.get(I);if(e!=null&&e.audioNode){e.audioNode.pause(),this._context.emitMessage({mixId:I,state:nC.AUDIO_MIXING_STATE_STOPPED,error:cC.AUDIO_MIXING_ERROR_OK});try{e.gainNode.disconnect(this._audioDestination),e.audioSource.disconnect(e.gainNode)}catch{}}let o;const t=this.resourcesCache.get(I);if(t&&t.filePath===g)o=t.getAudioNode();else{const n=await fetch(g,{mode:"cors"}).then(c=>{if(c.ok)return c.arrayBuffer();throw this._context.emitMessage({mixId:I,state:nC.AUDIO_MIXING_STATE_FAILED,error:cC.AUDIO_MIXING_ERROR_START_FAILED}),this._startingIds.delete(I),this.mixingMap.delete(I),new U(m.LOAD_RESOURCES_FAILED,c.statusText)});let a;if(g.endsWith("mp3")?a={type:"audio/mpeg"}:g.endsWith("aac")&&(a={type:"audio/aac"}),!await Sk(n,a))throw this._context.emitMessage({mixId:I,state:nC.AUDIO_MIXING_STATE_FAILED,error:cC.AUDIO_MIXING_ERROR_START_FAILED}),this._startingIds.delete(I),this.mixingMap.delete(I),new U(m.LOAD_RESOURCES_FAILED,"invalid audio resource");o=new Audio,o.crossOrigin="anonymous",o.src=pQ.createObjectURL(new Blob([n],a))}if(Q<=0)o.loop=!0;else if(Q>0){let n=Q;o.onended=()=>{--n>0?o.play():(this.mixingMap.delete(I),this._context.emitMessage({mixId:I,state:nC.AUDIO_MIXING_STATE_FINISHED,error:cC.AUDIO_MIXING_ERROR_OK}))}}try{await o.play()}catch(n){console.error(n),this._failedAudioList.push(o),this._context.onAutoPlayFailed({userId:this.id,kind:"audio",streamIndex:F.STREAM_INDEX_MAIN,mediaType:iA.AUDIO})}this._startingIds.delete(I);const s=this._sharedAudioContext.createMediaElementSource(o),v=this._sharedAudioContext.createGain(),r=this.volumeConfig.get(I);if(v.gain.value=r?r/100:1,s.connect(v).connect(this._audioDestination),this.mixingMap.set(I,{audioSource:s,audioNode:o,gainNode:v,type:"file"}),B===JQ.PUBLISH)try{v.disconnect(this._sharedAudioContext.destination)}catch{}else v.connect(this._sharedAudioContext.destination);this._context.updateLocalAudioTrack(this._audioDestination.stream.getAudioTracks()[0],C.type),this._context.emitMessage({mixId:I,state:nC.AUDIO_MIXING_STATE_PLAYING,error:cC.AUDIO_MIXING_ERROR_OK}),this.updateFetcher(I)}stopAudioMixing(I){const g=this.mixingMap.get(I);g&&g.type==="file"&&(this.mixingMap.delete(I),g.audioNode.pause(),g.audioSource.disconnect(g.gainNode),g.gainNode.disconnect(this._audioDestination),this.updateFetcher(I),this._context.emitMessage({mixId:I,state:nC.AUDIO_MIXING_STATE_STOPPED,error:cC.AUDIO_MIXING_ERROR_OK}))}pauseAudioMixing(I){const g=this.mixingMap.get(I);g&&(this._context.emitMessage({mixId:I,state:nC.AUDIO_MIXING_STATE_PAUSED,error:cC.AUDIO_MIXING_ERROR_OK}),g.audioNode.pause())}resumeAudioMixing(I){const g=this.mixingMap.get(I);g&&(this._context.emitMessage({mixId:I,state:nC.AUDIO_MIXING_STATE_PLAYING,error:cC.AUDIO_MIXING_ERROR_OK}),g.audioNode.play())}async preloadAudioMixing(I,g){this.stopAudioMixing(I);const C=await fetch(g,{mode:"cors"}).then(B=>{if(B.ok)return B.arrayBuffer();throw new U(m.LOAD_RESOURCES_FAILED,B.statusText)}).catch(B=>{throw this._context.emitMessage({mixId:I,state:nC.AUDIO_MIXING_STATE_FAILED,error:cC.AUDIO_MIXING_ERROR_PRELOAD_FAILED}),B instanceof U?B:new U(m.LOAD_RESOURCES_FAILED,"Load resources failed",B)});let Q;if(g.endsWith("mp3")?Q={type:"audio/mpeg"}:g.endsWith("aac")&&(Q={type:"audio/aac"}),!await Sk(C,Q))throw this._context.emitMessage({mixId:I,state:nC.AUDIO_MIXING_STATE_FAILED,error:cC.AUDIO_MIXING_ERROR_PRELOAD_FAILED}),new U(m.LOAD_RESOURCES_FAILED,"Load resources failed");this._context.emitMessage({mixId:I,state:nC.AUDIO_MIXING_STATE_PRELOADED,error:cC.AUDIO_MIXING_ERROR_OK}),this.resourcesCache.set(I,{getAudioNode:()=>{const B=pQ.createObjectURL(new Blob([C],Q));return this._revokeURLs.add(B),new Audio(B)},filePath:g,duration:0}),await new Promise(B=>{const E=pQ.createObjectURL(new Blob([C],Q)),i=new Audio(E);i.addEventListener("durationchange",()=>{const e=this.resourcesCache.get(I);e&&(e.duration=i.duration,this.resourcesCache.set(I,e)),pQ.revokeObjectURL(E),B(null)})})}unloadAudioMixing(I){this.resourcesCache.has(I)&&this.resourcesCache.delete(I)}getAudioMixingVolume(I){const g=this.mixingMap.get(I);return g?100*g.gainNode.gain.value:0}setAudioMixingVolume(I,g){g<0?g=0:g>400&&(g=400),this.volumeConfig.set(I,g);const C=this.mixingMap.get(I);C&&(C.gainNode.gain.value=Number(g)/100)}getAudioMixingDuration(I){const g=this.mixingMap.get(I),C=this.resourcesCache.get(I);return g||C?g?1e3*g.audioNode.duration:C?1e3*C.duration:0:0}getAudioMixingCurrentPosition(I){const g=this.mixingMap.get(I);return g?1e3*g.audioNode.currentTime:0}setAudioMixingPosition(I,g){const C=this.mixingMap.get(I);C&&(C.audioNode.currentTime=g/1e3,C.audioNode.play())}setAudioFrameCallback(I,g){var C;let Q=arguments.length>2&&arguments[2]!==void 0?arguments[2]:4096;if(MA(Q,"frameSize",[256,512,1024,2048,4096,8192,16384]),Q=(C=Q)!==null&&C!==void 0?C:4096,this._workletReady===null)throw new U(m.NOT_SUPPORTED,"Not support AudioWorklet");g?this._audioFetchConfig.set(I,{callback:g,frameSize:Q}):this._audioFetchConfig.delete(I),this.updateFetcher(I)}updateFetcher(I){var g,C;const{callback:Q,frameSize:B}=(g=this._audioFetchConfig.get(I))!==null&&g!==void 0?g:{},E=(C=this.mixingMap.get(I))===null||C===void 0?void 0:C.gainNode;if(E&&Q&&B){let i=this._audioFetchMap.get(I);i?i.setFrameSize(B):i=new TR(E,B,this._sharedAudioContext,this._workletReady),i.on("data",Q),this._audioFetchMap.set(I,i)}else{const i=this._audioFetchMap.get(I);i==null||i.removeAllListeners("data"),i==null||i.destroy(),this._audioFetchMap.delete(I)}}enableAudioMixingBuffer(I){MA(I,"type",NY(JQ));const g=this._context.getLocalAudioTrack();if(!g)return;const C=g.preprocessingTrack;if(C&&this.mixMediaStream(new MediaStream([C])),I===JQ.PUBLISH)try{this._bufferGainNode.disconnect(this._sharedAudioContext.destination)}catch{}else this._bufferGainNode.connect(this._sharedAudioContext.destination);this._context.updateLocalAudioTrack(this._audioDestination.stream.getAudioTracks()[0],I),this._bufferGainNode.connect(this._audioDestination),this._context.emitMessage({mixId:-1,state:nC.AUDIO_MIXING_STATE_PCM_ENABLED,error:cC.AUDIO_MIXING_ERROR_OK})}disableAudioMixingBuffer(){if(this.cachedBuffer=[],this._audioBufferSource){try{this._audioBufferSource.onended=null,this._audioBufferSource.disconnect(this._bufferGainNode),this._bufferGainNode.disconnect(this._audioDestination),this._bufferGainNode.disconnect(this._sharedAudioContext.destination)}catch{}finally{this._audioBufferSource=void 0}this._context.updateLocalAudioTrack(),this._context.emitMessage({mixId:-1,state:nC.AUDIO_MIXING_STATE_PCM_DISABLED,error:cC.AUDIO_MIXING_ERROR_OK})}}pushAudioMixingBuffer(I){if(!(this._audioBufferSource&&(this.cachedBuffer.push(I),this.cachedBuffer.length>0))){this._audioBufferSource=this._sharedAudioContext.createBufferSource(),this._audioBufferSource.buffer=I,this._audioBufferSource.connect(this._bufferGainNode);try{this._audioBufferSource.start()}catch{this._failedAudioList.push(this._audioBufferSource)}this._audioBufferSource.onended=()=>{var g;if((g=this._audioBufferSource)===null||g===void 0||g.disconnect(this._bufferGainNode),this._audioBufferSource=void 0,this.cachedBuffer.length){const C=this.cachedBuffer.shift();C&&this.pushAudioMixingBuffer(C)}}}}stopAll(){if(this._localSource)try{this._localSource.disconnect(this._localGainNode),delete this._localSource}catch{}this.mixingMap.forEach((I,g)=>{this.stopAudioMixing(g)})}get mixTrack(){return this._audioDestination.stream.getAudioTracks()[0]}get sharedAudioContext(){return this._sharedAudioContext}async resumeLocalPlay(){const I=[];for(const g of this._failedAudioList)try{g instanceof HTMLAudioElement?(g.muted=!1,await g.play()):g.start()}catch(C){I.push(g),console.error(C),this._context.onAutoPlayFailed({userId:this.id,kind:"audio",streamIndex:F.STREAM_INDEX_MAIN,mediaType:iA.AUDIO});break}this._failedAudioList=I}destroy(){const{_sharedAudioContext:I}=this;I.state!=="closed"&&typeof I.close=="function"&&I.close(),this.cachedBuffer=[],this.mixingMap.clear(),this.resourcesCache.clear(),this.volumeConfig.clear(),this._startingIds=new Map,this._revokeURLs.forEach(g=>{pQ.revokeObjectURL(g)})}}qg([Z(["id","filePath","options"])],Kg.prototype,"startAudioMixing"),qg([Z(["id"])],Kg.prototype,"stopAudioMixing"),qg([Z(["id"])],Kg.prototype,"pauseAudioMixing"),qg([Z(["id"])],Kg.prototype,"resumeAudioMixing"),qg([Z(["id"])],Kg.prototype,"preloadAudioMixing"),qg([Z(["id"])],Kg.prototype,"unloadAudioMixing"),qg([Z(["id"])],Kg.prototype,"getAudioMixingVolume"),qg([Z(["id","volume"])],Kg.prototype,"setAudioMixingVolume"),qg([Z(["id"])],Kg.prototype,"getAudioMixingDuration"),qg([Z(["id"])],Kg.prototype,"getAudioMixingCurrentPosition"),qg([Z(["id","position"])],Kg.prototype,"setAudioMixingPosition"),qg([Z(["id","callback","frameSize"])],Kg.prototype,"setAudioFrameCallback"),qg([Z(["type"])],Kg.prototype,"enableAudioMixingBuffer"),qg([Z()],Kg.prototype,"disableAudioMixingBuffer"),qg([Z(["buffer"])],Kg.prototype,"pushAudioMixingBuffer");class vuA extends UB.EventEmitter{constructor(I){super(),P(this,"_loginSessionId",null),P(this,"_userId",null),P(this,"_token",null),P(this,"_loginResolveCallback",void 0),P(this,"_loginRejectCallback",void 0),P(this,"_waitLoginToken",!1),P(this,"_serverParamsCache",void 0),P(this,"id",void 0),P(this,"logger",void 0),P(this,"_clearListeners",void 0),this._ctx=I,this.id=I.id,this.logger=new uA("RTSClient",1,I.id)}login(I,g){return new Promise((C,Q)=>{var B;if(this.logger.info("login","invoke login, token: %o, userId: %o",I,g),this._loginSessionId)throw new U(m.ALREADY_LOGIN,"Already logined");if(this._loginResolveCallback)throw new U(m.LOGIN_FAILED,"Is logging in, please try again later.");this._userId=g,this._token=I,(B=tI(this.id))===null||B===void 0||B.set({rtm_user_id:g}),this._loginResolveCallback=C,this._loginRejectCallback=Q,this._ctx.signalingManager.connect().then(()=>{this._addSignalEventHandler(),this._login()})})}async logout(){if(!this._loginSessionId||!this._userId)throw new U(m.NOT_LOGIN,"login first");this._checkNotInLimitMode("logout"),await this._ctx.signalingManager.sendSignaling("logout",{loginSessionId:this._loginSessionId,userId:this._userId,appId:this._ctx.appId},{functionType:We.C2RTM}).catch(()=>{}),this._clearState()}async updateLoginToken(I){return this._checkNotInLimitMode("updateLoginToken"),this._token=I,new Promise((g,C)=>{this._waitLoginToken?(this._loginResolveCallback=g,this._loginRejectCallback=C,this._login()):g()})}async getPeerOnlineStatus(I){if(!this._loginSessionId||!this._userId)throw new U(m.NOT_LOGIN,"login first");this._checkNotInLimitMode("getPeerOnlineStatus");const g=await this._ctx.signalingManager.sendSignaling("getPeerOnlineStatus",{loginSessionId:this._loginSessionId,userId:this._userId,appId:this._ctx.appId,peerUserId:I},{functionType:We.C2RTM});return g==null?void 0:g.status}async sendUserMessageOutsideRoom(I,g){if(!this._loginSessionId||!this._userId)throw new U(m.NOT_LOGIN,"login first");return this._checkNotInLimitMode("sendUserMessageOutsideRoom"),this._ctx.rtsLimiter.e2e.check(g),this._ctx.signalingManager.sendP2PMessage({from:this._userId,app:this._ctx.appId,to:I,room:"",msg:g})}async setRTSMessageLimit(I){I&&this._ctx.signalingManager.sendSignaling("RTSMessageLimit",{appId:this._ctx.appId,interval:I.rts_qps_interval,broadcast:I.rts_broadcast_qps_value,one2one:I.rts_e2e_qps_value,e2bs:I.rts_e2s_qps_value},{functionType:We.C2RTM}).catch(()=>{})}async setServerParams(I,g){try{if(OA(I,"signature"),OA(g,"url"),!this._loginSessionId||!this._userId)throw new U(m.NOT_LOGIN,"login first");await this._ctx.signalingManager.sendSignaling("setServerParams",{loginSessionId:this._loginSessionId,userId:this._userId,appId:this._ctx.appId,signature:I,url:g},{functionType:We.C2RTM}).catch(C=>{throw new U(m.UNEXPECTED_ERROR,C.msg)}),KI.setServerUrl(this.id,g),this._serverParamsCache={signature:I,url:g},this.emit("onServerParamsSetResult")}catch(C){throw this.emit("onServerParamsSetResult",C),C}}async sendServerMessage(I){if(!this._loginSessionId||!this._userId)throw new U(m.NOT_LOGIN,"login first");return this._checkNotInLimitMode("sendServerMessage"),this._ctx.rtsLimiter.e2s.check(I),this._ctx.signalingManager.sendP2PMessage({from:this._userId,app:this._ctx.appId,to:"",room:"",type:kR.BUSINESS_SERVER,msg:I})}destroy(){this.logger.info("destroy","invoke."),super.removeAllListeners(),this._loginResolveCallback&&this._loginRejectCallback&&(this._loginRejectCallback(new U(m.LOGIN_FAILED,"logout")),delete this._loginResolveCallback,delete this._loginRejectCallback),this._clearState(),delete this._serverParamsCache}_login(){var I;if(!this._userId)return;const g=KE();try{this._checkNotInLimitMode("login")}catch(Q){var C;(C=this._loginRejectCallback)===null||C===void 0||C.call(this,Q)}this._ctx.signalingManager.sendSignaling("login",{Token:Ag.token2auth(this._ctx.appId,null,this._userId,this._token),timestamp:Date.now(),loginSessionId:g,params:{userAgent:window.navigator.userAgent,sdkVersion:YA.VERSION,deviceId:$A.getDeviceId(),appId:this._ctx.appId,userId:this._userId,deviceType:"web",platformType:2,rtsMode:this._ctx.rtsMode,mediaProcessingType:(I=YA.MEDIA_PROCESSING_TYPE)!==null&&I!==void 0?I:0}},{functionType:We.C2RTM}).then(()=>{typeof this._loginResolveCallback=="function"&&this._loginResolveCallback(),this._loginSessionId=g,KI.setRtsSessionId(this.id,g),this._waitLoginToken=!1,this._serverParamsCache&&this.setServerParams(this._serverParamsCache.signature,this._serverParamsCache.url)}).catch(Q=>{const{code:B,message:E}=Q||{};let i,e;this._waitLoginToken=!1,B>=700&&B<800?B===708?(i=m.INVALID_PARAMS,e="Invalid userId"):(i=m.INVALID_TOKEN,e="Invalid token",this._waitLoginToken=!0,this._loginRejectCallback||this.emit("onRTMTokenError")):(i=m.LOGIN_FAILED,e="login failed"),typeof this._loginRejectCallback=="function"&&this._loginRejectCallback(new U(i,E||e))}).finally(()=>{delete this._loginResolveCallback,delete this._loginRejectCallback})}_addSignalEventHandler(){const I=E=>{E.state===XA.CONNECTION_STATE_RECONNECTED&&this._login()},g=()=>this._clearState(),C=E=>{this.emit("onUserMessageReceivedOutsideRoom",{userId:E.from,message:E.msg})},Q=E=>{this.emit("onUserBinaryMessageReceivedOutsideRoom",{userId:E.from,message:E.msg})},B=E=>{E.clientId!==this._userId||E.roomId||(this.emit("onUserDisconnection"),this._clearState())};this._ctx.signalingManager.on(HI.ON_CONNECTION_STATE_CHANGE,I),this._ctx.signalingManager.on(HI.ON_RECONNECT_FAILED,g),this._ctx.signalingManager.on(x.USER_MESSAGE_RECEIVED_OUTSIDE_ROOM,C),this._ctx.signalingManager.on(x.USER_BINARY_MESSAGE_RECEIVED_OUTSIDE_ROOM,Q),this._ctx.signalingManager.on(x.USER_DISCONNECTION,B),this._clearListeners=()=>{this._ctx.signalingManager.off(HI.ON_CONNECTION_STATE_CHANGE,I),this._ctx.signalingManager.off(HI.ON_RECONNECT_FAILED,g),this._ctx.signalingManager.off(x.USER_MESSAGE_RECEIVED_OUTSIDE_ROOM,C),this._ctx.signalingManager.off(x.USER_BINARY_MESSAGE_RECEIVED_OUTSIDE_ROOM,Q),this._ctx.signalingManager.off(x.USER_DISCONNECTION,B)}}_clearState(){var I;(I=this._clearListeners)===null||I===void 0||I.call(this),this._userId=null,this._token=null,this._loginSessionId=null,KI.setRtsSessionId(this.id,"")}_checkNotInLimitMode(I){if(this._ctx.rtsMode===Qo.LIMIT_MODE)throw new U(m.NOT_ALLOWED_IN_RESTRICTED_MODE,"not allow to call ".concat(I," in rts restricted mode"))}}var Rg=(A=>(A.onWTNPushStateChanged="onWTNPushStateChanged",A.onWTNPlayStateChanged="onWTNPlayStateChanged",A.onWTNRemoteAudioStateChanged="onWTNRemoteAudioStateChanged",A.onWTNRemoteVideoStateChanged="onWTNRemoteVideoStateChanged",A.onWTNRemoteVideoStats="onWTNRemoteVideoStats",A.onWTNRemoteAudioStats="onWTNRemoteAudioStats",A.onWTNFirstRemoteVideoFrameDecoded="onWTNFirstRemoteVideoFrameDecoded",A.onWTNSEIMessageReceived="onWTNSEIMessageReceived",A))(Rg||{}),mQ=(A=>(A[A.INIT=0]="INIT",A[A.START=1]="START",A[A.SUCCESS=2]="SUCCESS",A[A.STOP=3]="STOP",A[A.FAIL=4]="FAIL",A))(mQ||{}),bE=(A=>(A[A.PUSH_SUCCESS=0]="PUSH_SUCCESS",A[A.START_PUSH=1]="START_PUSH",A[A.STOP_PUSH=2]="STOP_PUSH",A[A.IN_RETRY=3]="IN_RETRY",A[A.RETRY_FAIL=4]="RETRY_FAIL",A[A.NO_PUSH_PERMISSION=5]="NO_PUSH_PERMISSION",A[A.STREAM_PUSH_BY_OTHER=6]="STREAM_PUSH_BY_OTHER",A))(bE||{}),mg=(A=>(A[A.INIT=0]="INIT",A[A.START=1]="START",A[A.SUCCESS=2]="SUCCESS",A[A.STOP=3]="STOP",A[A.FAIL=4]="FAIL",A))(mg||{}),lC=(A=>(A[A.PLAY_SUCCESS=0]="PLAY_SUCCESS",A[A.START_PLAY=1]="START_PLAY",A[A.STOP_PLAY=2]="STOP_PLAY",A[A.REMOTE_STOP=3]="REMOTE_STOP",A[A.REMOTE_FAILURE=4]="REMOTE_FAILURE",A[A.STREAM_BANNED=5]="STREAM_BANNED",A[A.NO_PLAY_PERMISSION=6]="NO_PLAY_PERMISSION",A[A.STREAM_NOT_EXIST=7]="STREAM_NOT_EXIST",A[A.IN_RETRY=8]="IN_RETRY",A[A.RETRY_FAIL=9]="RETRY_FAIL",A[A.INTERNAL=10]="INTERNAL",A[A.OVER_CLIENT_SUBSCRIBE_STREAM_LIMIT=1310]="OVER_CLIENT_SUBSCRIBE_STREAM_LIMIT",A[A.OVER_STREAM_SUBSCRIBE_USER_LIMIT=1311]="OVER_STREAM_SUBSCRIBE_USER_LIMIT",A[A.OVER_STREAM_SUBSCRIBE_REQUES_TLIMIT=1312]="OVER_STREAM_SUBSCRIBE_REQUES_TLIMIT",A))(lC||{}),QE=(A=>(A[A.STOPED=0]="STOPED",A[A.STARTING=1]="STARTING",A[A.DECODING=2]="DECODING",A[A.FROZEN=3]="FROZEN",A[A.FAILED=4]="FAILED",A))(QE||{}),yi=(A=>(A[A.INTERNAL=0]="INTERNAL",A[A.NETWORK_CONGESTION=1]="NETWORK_CONGESTION",A[A.NETWORK_RECOVERY=2]="NETWORK_RECOVERY",A[A.UNMUTE=3]="UNMUTE",A[A.MUTE=4]="MUTE",A[A.REMOTE_START=5]="REMOTE_START",A[A.REMOTE_STOP=6]="REMOTE_STOP",A))(yi||{}),BE=(A=>(A[A.STOPED=0]="STOPED",A[A.STARTING=1]="STARTING",A[A.DECODING=2]="DECODING",A[A.FROZEN=3]="FROZEN",A[A.FAILED=4]="FAILED",A))(BE||{}),wi=(A=>(A[A.INTERNAL=0]="INTERNAL",A[A.NETWORK_CONGESTION=1]="NETWORK_CONGESTION",A[A.NETWORK_RECOVERY=2]="NETWORK_RECOVERY",A[A.UNMUTE=3]="UNMUTE",A[A.MUTE=4]="MUTE",A[A.REMOTE_START=5]="REMOTE_START",A[A.REMOTE_STOP=6]="REMOTE_STOP",A))(wi||{});const F9={interval:1e3,retryDuration:0};class ruA extends b9{constructor(I,g,C){let Q=arguments.length>3&&arguments[3]!==void 0&&arguments[3];super(C,Xs.STREAM_INDEX_MAIN),P(this,"_state",mQ.INIT),P(this,"_stateChangeTs",aA()),P(this,"streamId",void 0),P(this,"Authorization",void 0),P(this,"_backOff",F9),this.token=g,this.streamId=I,this.logName="WTNLocalStream-".concat(I),this.observer=new Ww(this._ctx,this),this.Authorization=Ag.token2auth(C.appId,"",I,g),this._state=Q?mQ.FAIL:mQ.INIT}setState(I,g){const C=this._state;if(C===I)return;this.logger.print("setState",I,g),this._state=I;const Q=aA();this.safeEmit(Rg.onWTNPushStateChanged,{streamId:this.streamId,oldState:C,newState:I,reason:g,elapse:Q-this._stateChangeTs}),this._stateChangeTs=Q}getPushBackOff(){return this._backOff}updatePushBackOff(){this._backOff.retryDuration+=this._backOff.interval,this._backOff.interval=this._backOff.interval>4e3?8e3:2*this._backOff.interval}resetPushBackOff(){this._backOff=F9}}class auA extends y9{constructor(I,g,C){let Q=arguments.length>3&&arguments[3]!==void 0&&arguments[3];super(C,I,I,!1,!0,{audiostream:!0,localaudio:!0,videostream:!0,localvideo:!0,extaudio:!1,extvideo:!1,videoDescriptions:[]}),P(this,"_state",mg.INIT),P(this,"Authorization",void 0),P(this,"_stateChangeTs",aA()),P(this,"streamId",void 0),P(this,"_backOff",F9),P(this,"_audioState",QE.STOPED),P(this,"_videoState",BE.STOPED),this.token=g,this.streamId=I,this.logName="WTNRemoteStream-".concat(I),this.observer=new qz(this._ctx,this),this._initObserverEvent(Q),this.Authorization=Ag.token2auth(C.appId,"",I,g),this._state=Q?mg.FAIL:mg.INIT}setState(I,g){const C=this._state;if(C===I)return;this.logger.print("setState",I,g),this._state=I;const Q=aA();this.safeEmit(Rg.onWTNPlayStateChanged,{streamId:this.streamId,oldState:C,newState:I,reason:g,elapse:Q-this._stateChangeTs}),this._stateChangeTs=Q}get state(){return this._state}getPushBackOff(){return this._backOff}updatePushBackOff(){this._backOff.retryDuration+=this._backOff.interval,this._backOff.interval=this._backOff.interval>4e3?8e3:2*this._backOff.interval}resetPushBackOff(){this._backOff=F9}setVideoState(I,g){this._videoState!==I&&(I===BE.DECODING&&this.setVideoState(BE.STARTING,g),this.logger.print("setVideoState",I,g),this._videoState=I,this.safeEmit(Rg.onWTNRemoteVideoStateChanged,{streamId:this.streamId,state:I,reason:g}))}setAudioState(I,g){this._audioState!==I&&(I===QE.DECODING&&this.setAudioState(QE.STARTING,g),this.logger.print("setAudioState",I,g),this._audioState=I,this.safeEmit(Rg.onWTNRemoteAudioStateChanged,{streamId:this.streamId,state:I,reason:g}))}muteToSubMediaType(I,g){let C=!1;const Q=$I(this.subMediaType),B=gI(this.subMediaType);return typeof I=="boolean"&&Q===I&&(this.subMediaType+=I?-iA.AUDIO:iA.AUDIO,C=!0),typeof g=="boolean"&&B===g&&(this.subMediaType+=g?-iA.VIDEO:iA.VIDEO,C=!0),C}getEnableMediaType(){return{audio:$I(this.subMediaType),video:gI(this.subMediaType)}}_initObserverEvent(I){var g,C;(g=this.observer)===null||g===void 0||g.once("recvAudioFirstFrame",()=>{this.setAudioState(QE.DECODING,I?yi.NETWORK_RECOVERY:yi.REMOTE_START)}),(C=this.observer)===null||C===void 0||C.once("recvVideoFirstFrame",()=>{this.setVideoState(BE.DECODING,I?wi.NETWORK_RECOVERY:wi.REMOTE_START)})}}const PuA=["rid"];var cuA=Object.defineProperty,nuA=Object.getOwnPropertyDescriptor,_g=(A,I,g,C)=>{for(var Q,B=nuA(I,g),E=A.length-1;E>=0;E--)(Q=A[E])&&(B=Q(I,g,B)||B);return B&&cuA(I,g,B),B};class Jg extends iQ{constructor(I){super(),P(this,"_reportName","WTNStream"),P(this,"_localStreams",new Map),P(this,"_remoteStreams",new Map),P(this,"_logger",void 0),P(this,"_monitor",void 0),P(this,"_ontrackCallbackMap",new Map),P(this,"_pushTaskMap",new Map),P(this,"_playTaskMap",new Map),P(this,"engineId",void 0),P(this,"_publicVideoPlayerConfig",new Map),P(this,"__onSEIMessageReceived",void 0),P(this,"__onRemoteStreamStats",void 0),P(this,"__onResubscribe",void 0),P(this,"__onPlayerEvents",void 0),P(this,"_clearSignalListeners",void 0),this._ctx=I,this._monitor=tI(I.id),this._logger=new uA("WTNStream",1,I.id),this.engineId=I.id,this._addSignalListeners()}async startPushWTN(I,g,C,Q){let B=arguments.length>4&&arguments[4]!==void 0&&arguments[4];if(C=!!C,Q=!!Q,this._logger.print("startPushWTN",I,g,C,Q),sa(g),!kQ(I)&&OA(I,"token"),this._localStreams.get(g))return;const E=new ruA(g,I,this._ctx,B);this._addLocalStreamEventHandler(E),E.setState(mQ.START,bE.START_PUSH),this._localStreams.set(g,E),await this._ctx.signalingManager.connect(),E.videoTrack=this._ctx.localVideoTrack,E.audioTrack=this._ctx.localAudioTrack,E.pubAudio=!Q,E.pubVideo=!C,await new Promise((i,e)=>{B||this._pushTaskMap.set(g,{resolve:()=>{i(),E.startReport(()=>{},this._ctx.handler)},reject:e}),this._sendStartPushStreamSignal(E).catch(o=>e(o))})}async stopPushWTN(I){this._logger.print("stopPushWTN",I);const g=this._localStreams.get(I);g&&(g.setState(mQ.STOP,bE.STOP_PUSH),this._ctx.signalingManager.sendSignaling("stopPushStream",{appId:this._ctx.appId,streamId:I}).catch(()=>{}),await this._stopLocalStream(g))}async muteWTNLocalAudio(I,g){this._logger.print("muteWTNLocalAudio",I,g);const C=this._localStreams.get(I);if(!C)throw new U(m.INVALID_PARAMS,"streamId not found");this._assertNotConnect(),C.pubAudio=!g,await this._updatePushStream(C)}async muteWTNLocalVideo(I,g){this._logger.print("muteWTNLocalVideo",I,g);const C=this._localStreams.get(I);if(!C)throw new U(m.INVALID_PARAMS,"streamId not found");this._assertNotConnect(),C.pubVideo=!g,await this._updatePushStream(C)}sendWTNSEIMessage(I,g,C){this._logger.info("sendWTNSEIMessage()","streamId: %o, sei: %o, repeatCount: %o",I,g,C);const Q=this._localStreams.get(I);if(!Q||!Q.pubVideo&&!Q.pubAudio)return;if(!JE()&&!hv())return bi("Your browser does not support sending SEI"),!1;qe(C,"repeatCount",0,30);const B=typeof g=="string"?new Uint8Array(Ag.str2ab(g)):g;if(!g.length)return this._logger.warn("sei message must not be empty"),!1;if(B.byteLength>4096)return void this._logger.warn("sei size must not bigger than 4KB");EE||this._maybeFillBackFrame2Stream(Q);const E=KE();Q.sendSEIMessage({content:B,uuid:E,repeatCount:C+1}),setTimeout(async()=>{if(Q){var i;await Q.revokeSEIMessage(E)&&(console.error("[RTC WebSDK] sei timeout for message: %o",g),(i=this._monitor)===null||i===void 0||i.report("rtc_sdk_callback",{sdk_callback_name:"sendSEIMessage",message:"timeout for message: ".concat(g),error_code:400}))}},lA("SEI_TIME_OUT"))}async startPlayWTN(I,g,C,Q){var B;let E=arguments.length>4&&arguments[4]!==void 0&&arguments[4];C=!!C,Q=!!Q,this._logger.print("startPlayWTN",I,g,C,Q),sa(g),!kQ(I)&&OA(I,"token");let i=this._remoteStreams.get(g);if(i){if(i.state===mg.START||i.state===mg.SUCCESS)throw new U(m.REPEAT_PLAY,"repeat play public media stream");await this.stopPlayWTN(i.streamId)}i=new auA(g,I,this._ctx,E),this._addRemoteStreamEventHandler(i),i.setState(mg.START,lC.START_PLAY),i.muteToSubMediaType(Q,C),this._remoteStreams.set(g,i),(B=i.observer)===null||B===void 0||B.setLogin(!0,i.getEnableMediaType());try{await this._ctx.signalingManager.connect(),await new Promise((e,o)=>{E||this._playTaskMap.set(g,{resolve:e,reject:o}),this._sendStartPullStreamSignal(i).catch(t=>o(t))})}catch(e){throw this._remoteStreams.delete(g),e}}async stopPlayWTN(I){var g,C;this._logger.print("stopPlayWTN",I);const Q=this._remoteStreams.get(I);if(Q)return Q.setState(mg.STOP,lC.STOP_PLAY),Q.setAudioState(QE.STOPED,yi.MUTE),Q.setVideoState(BE.STOPED,wi.MUTE),(g=Q.observer)===null||g===void 0||g.setLogin(!1),Q==null||(C=Q.audioTrack)===null||C===void 0||C.stop(),this._remoteStreams.delete(I),await this._ctx.signalingManager.connect(),this._unsubscribePublicStream(Q)}async muteWTNRemoteAudio(I,g){this._logger.print("muteWTNRemoteAudio",I,g),this._assertNotConnect();const C=this._remoteStreams.get(I);if(!C)throw new U(m.INVALID_PARAMS,"streamId not found");var Q;C.muteToSubMediaType(g,null)&&((Q=C.observer)===null||Q===void 0||Q.setUnmuteAudio(!g),await this._updatePullStream(I,C),C.setAudioState(g?QE.STOPED:QE.DECODING,g?yi.MUTE:yi.UNMUTE))}async muteWTNRemoteVideo(I,g){this._logger.print("muteWTNRemoteVideo",I,g),this._assertNotConnect();const C=this._remoteStreams.get(I);if(!C)throw new U(m.INVALID_PARAMS,"streamId not found");var Q;C.muteToSubMediaType(null,g)&&((Q=C.observer)===null||Q===void 0||Q.setUnmuteVideo(!g),await this._updatePullStream(I,C),C.setVideoState(g?BE.STOPED:BE.DECODING,g?wi.MUTE:wi.UNMUTE))}setWTNRemoteVideoPlayer(I,g){var C;if(this._logger.print("setWTNRemoteVideoPlayer()","streamId: %o, videoPlayerOption: %o",I,g),(C=this._publicVideoPlayerConfig.get(I))===null||C===void 0||(C=C.player)===null||C===void 0||C.destroy(),!g.renderDom)return void this._publicVideoPlayerConfig.delete(I);const Q=new Pi(this._ctx.id,UQ,R(R({},g),{},{isLocal:!1,userId:I})),B=R(R({},g),{},{player:Q});return this._publicVideoPlayerConfig.set(I,B),this._updateVideoPlayerState(I),Q.domElement}setWTNRemoteAudioPlaybackVolume(I,g){var C;OA(I,"publicStreamId"),g=Cl(g,"volume",0,400),this._ctx.publicAudioVolume.set(I,g),(C=this._remoteStreams.get(I))===null||C===void 0||(C=C.audioTrack)===null||C===void 0||C.setVolume(g)}__getRemoteStreams(){return this._remoteStreams}__getPublicStreamTrack(I,g){const C=this._remoteStreams.get(I);if(C)return g==="video"?C.videoTrack:C.audioTrack}async _updatePushTrack(){this._localStreams.size!==0&&(this._logger.info("_updatePushTrack()"),await this._ctx.signalingManager.connect(),this._localStreams.forEach(async I=>{I.videoTrack=this._ctx.localVideoTrack,I.audioTrack=this._ctx.localAudioTrack,await this._updatePushStream(I)}))}destroy(){var I;this._remoteStreams.forEach(g=>{g.destroy()}),this._remoteStreams=new Map,this.removeAllListeners(),this._ontrackCallbackMap.clear(),this._publicVideoPlayerConfig.forEach(g=>{g.player.destroy()}),this._publicVideoPlayerConfig.clear(),(I=this._clearSignalListeners)===null||I===void 0||I.call(this)}async _sendStartPushStreamSignal(I){var g,C,Q,B;this._logger.print("_sendStartPushStreamSignal()","streamId: %s",I.streamId);const{streamId:E,Authorization:i,pubAudio:e,pubVideo:o}=I,{handler:t}=this._ctx;await(t==null?void 0:t.getDefaultSdp());const s=await t.publish(I),v=await qa(),{appId:r,businessId:n,useCloudProxy:a}=this._ctx,c={appId:r,streamId:E,Authorization:i,sdpInfo:{msid:I.stream.id,type:s.type,sdp:s.partialSdp,semantics:s.semantics},timestamp:Date.now(),params:{appId:r,businessId:n,userAgent:window.navigator.userAgent,sdkVersion:YA.VERSION,deviceId:$A.getDeviceId(),enableCloudProxy:a,channelProfile:"0",SDKCodecNegotiation:!0,supportedCodecs:v,sdkType:"rtc",joinRoomMode:1,deviceType:"web",platformType:2,rtsMode:this._ctx.rtsMode,mediaProcessingType:(g=YA.MEDIA_PROCESSING_TYPE)!==null&&g!==void 0?g:0},options:{supportCheckTokenPrivilege:!0,supportTokenExpireCallBack:!0,enableSceneConfigV2:!0,enableUnBundleMode:!0,enableAudioMux:!0,enableBigRoomMode:!0,needNegotiateSDP:!0,supportMultiVendor:!0,enableStreamStatusCallback:!0},attributes:{localaudio:!!I.audioTrack,localvideo:!!I.videoTrack,videostream:o,audiostream:e,extvideo:((C=I.videoTrack)===null||C===void 0?void 0:C.sourceType)===oI.EXTERNAL,extaudio:((Q=I.audioTrack)===null||Q===void 0?void 0:Q.sourceType)===oI.EXTERNAL,videoDescriptions:s.videoDescriptions.map(D=>ve(D,PuA)),videoType:eC.NORMAL},video:o,audio:e,screen:I.isScreen};let d;try{this.emit("__onSendingPushStreamMessageHook"),d=await this._ctx.signalingManager.sendSignaling("startPushStream",c)}catch(D){if(await(t==null?void 0:t.rollback({msid:I.stream.id,stream:I,audioMid:s.audioMid,videoMid:s.videoMid})),D.code>=500&&D.code<600){const u=I.getPushBackOff();if(u.retryDuration<6e4)return this._logger.info("pushRetry","start msid: %s, retryDuration: %s",I.id,u.retryDuration),await new Promise(w=>setTimeout(w,u.interval)),I.updatePushBackOff(),I.resetStream(),I.setState(mQ.START,bE.IN_RETRY),this._sendStartPushStreamSignal(I);throw this._logger.info("pushRetry","end"),I.setState(mQ.FAIL,bE.RETRY_FAIL),await this._stopLocalStream(I),I.resetPushBackOff(),new U(m.WTN_PUSH_FAILED,D.message||"server error")}if(D.code===401)throw I.setState(mQ.FAIL,bE.NO_PUSH_PERMISSION),await this._stopLocalStream(I),new U(m.WTN_PUSH_FAILED,D.message||"token error");if(D.code===m.OPERATION_CANCEL&&this._ctx.signalingManager.isReconnecting())return;throw new U(m.WTN_PUSH_FAILED,D.message||"push error")}I.pubAttributes=c.attributes;const l=await I.getSelectedCodec();I.currentVideoCodec=l;const h=new Promise((D,u)=>{var w,b;t==null||t.handleAck({action:iI.publish,streamId:E,audioMid:s.audioMid,videoMid:s.videoMid,audioTransceiverInit:s==null?void 0:s.audioTransceiverInit,videoTransceiverInit:s==null?void 0:s.videoTransceiverInit,signalingAck:{sdp:(w=d)===null||w===void 0||(w=w.relayMessage)===null||w===void 0?void 0:w.sdp,sequenceId:(b=d)===null||b===void 0||(b=b.relayMessage)===null||b===void 0?void 0:b.sequenceId},stream:I,videoCodec:l,onSuccess:()=>{this._logger.info("pushStream()","pushStream success"),I.setState(mQ.SUCCESS,bE.PUSH_SUCCESS),D(0)},onFail:y=>{this._logger.info("pushStream()","pushStream fail"),u(y)}})});!mI&&await h,(B=this._pushTaskMap.get(E))===null||B===void 0||B.resolve(),this._pushTaskMap.delete(E)}async _stopLocalStream(I){var g;I.stopBlackFrame(),await((g=this._ctx.handler)===null||g===void 0?void 0:g.handleAck({action:iI.unpublish,audioMid:I.audioMid,videoMid:I.videoMid,stream:I,streamId:I.streamId})),I.destroy(),this._localStreams.delete(I.streamId)}async _updatePushStream(I){var g,C,Q,B;const{videoTrack:E,audioTrack:i,pubAudio:e,pubVideo:o}=I;let t=(g=I.audioTrack)===null||g===void 0?void 0:g.preprocessingTrack;const s=(C=I.videoTrack)===null||C===void 0?void 0:C.preprocessingTrack;var v,r;if(o&&s?(I.stopBlackFrame(),await((v=I.videoTransceiver)===null||v===void 0?void 0:v.sender.replaceTrack(s))):await((r=I.videoTransceiver)===null||r===void 0?void 0:r.sender.replaceTrack(null)),e&&t){var n;const{mixType:h,mixedAudioTrack:D}=I.audioTrack;D&&h!==JQ.PLAYOUT&&t.enabled&&(t=D),await((n=I.audioTransceiver)===null||n===void 0?void 0:n.sender.replaceTrack(t))}else{var a;await((a=I.audioTransceiver)===null||a===void 0?void 0:a.sender.replaceTrack(null))}const c={localaudio:!!i,localvideo:!!E,videostream:o,audiostream:e,extvideo:(E==null?void 0:E.sourceType)===oI.EXTERNAL,extaudio:(i==null?void 0:i.sourceType)===oI.EXTERNAL,videoType:E?eC.NORMAL:I.pubAttributes.videoType},d={};for(const[h,D]of Object.entries(c))D!==Reflect.get(I.pubAttributes,h)&&Reflect.set(d,h,D);var l;Object.keys(d).length&&(I.pubAudio=(Q=c.audiostream)!==null&&Q!==void 0?Q:I.pubAudio,I.pubVideo=(B=c.videostream)!==null&&B!==void 0?B:I.pubVideo,I.pubAttributes=R(R({},I.pubAttributes),c),I.pubAttributes.videostream||I.stopBlackFrame(),await this._ctx.signalingManager.sendSignaling("updatePushStream",{appId:this._ctx.appId,streamId:I.streamId,attributes:c}),mI&&await((l=this._ctx.handler)===null||l===void 0?void 0:l.setCurrentDescription()))}async _sendStartPullStreamSignal(I){var g,C,Q,B,E;this._logger.print("startPullStream()","streamId:",I.streamId);const{streamId:i,Authorization:e}=I,{handler:o}=this._ctx,t=await(o==null?void 0:o.subscribe(I,{multiChatMode:!1}));if(!t)throw new U(m.ADD_TRANSCEIVER_FAILED,"add transceiver failed");const s=aA(),{audioMid:v,videoMid:r}=t,{appId:n,businessId:a,useCloudProxy:c}=this._ctx,d=await qa(),l={appId:n,streamId:i,Authorization:e,audio:!0,video:!0,screen:!1,timestamp:Date.now(),sdpInfo:{sdp:t.partialSdp,semantics:t.semantics,type:t.type},params:{appId:n,businessId:a,userAgent:window.navigator.userAgent,sdkVersion:YA.VERSION,deviceId:$A.getDeviceId(),enableCloudProxy:c,channelProfile:"0",SDKCodecNegotiation:!0,supportedCodecs:d,sdkType:"rtc",joinRoomMode:1,deviceType:"web",platformType:2,rtsMode:this._ctx.rtsMode,mediaProcessingType:(g=YA.MEDIA_PROCESSING_TYPE)!==null&&g!==void 0?g:0},options:{supportCheckTokenPrivilege:!0,supportTokenExpireCallBack:!0,enableSceneConfigV2:!0,enableUnBundleMode:!0,enableAudioMux:!0,enableBigRoomMode:!0,needNegotiateSDP:!0,supportMultiVendor:!0,enableStreamStatusCallback:!0},config:{enableMediaType:I.getEnableMediaType(),qualityLayer:{spatialLayer:0,temporalLayer:0}}};let h;try{this.emit("__onSendingPullStreamMessageHook"),h=await this._ctx.signalingManager.sendSignaling("startPullStream",l)}catch(y){if(await(o==null?void 0:o.rollback({msid:i,stream:I})),y.code===401)throw I.setState(mg.FAIL,lC.NO_PLAY_PERMISSION),new U(m.WTN_PLAY_FAILED,y.message||"token error");if(y.code===433)throw I.setState(mg.FAIL,lC.OVER_CLIENT_SUBSCRIBE_STREAM_LIMIT),new U(m.WTN_PLAY_FAILED,y.message||"over client subscribe stream limit");if(y.code===434)throw I.setState(mg.FAIL,lC.OVER_STREAM_SUBSCRIBE_USER_LIMIT),new U(m.WTN_PLAY_FAILED,y.message||"over stream subscribe user limit");if(y.code===m.OPERATION_CANCEL&&this._ctx.signalingManager.isReconnecting())return;throw I.setState(mg.FAIL,lC.INTERNAL),new U(m.WTN_PLAY_FAILED,y.message||"play wtn error")}const D=[];D.push(new Promise((y,S)=>{const L=setTimeout(()=>S(new U(m.WTN_PLAY_FAILED,"wait video timeout for streamId: ".concat(i))),6e4),V=z=>{z.mediaType==="video"&&(this._logger.success("remoteStream ".concat(I.userId," received video track")),I.off("ontrack",V),clearTimeout(L),y(0))};I.on("ontrack",V)})),D.push(new Promise((y,S)=>{const L=setTimeout(()=>S(new U(m.WTN_PLAY_FAILED,"wait audio timeout for streamId: ".concat(i))),6e4),V=z=>{z.mediaType==="audio"&&(this._logger.success("remoteStream ".concat(I.userId," received audio track")),I.off("ontrack",V),clearTimeout(L),y(0))};I.on("ontrack",V)}));const u=y=>{I.ontrack(y)};(C=this._ctx.handler)===null||C===void 0||C.on("ontrack",u),this._ontrackCallbackMap.set(I,u);const{sequenceId:w,sdp:b}=h.relayMessage;I.videoMid=r,I.audioMid=v,I.sequenceId=w,I.streamState=uC.SUB_ED,await((Q=this._ctx.handler)===null||Q===void 0?void 0:Q.handleAck({action:iI.subscribe,streamId:i,audioMid:v,videoMid:r,audioTransceiverInit:t.audioTransceiverInit,videoTransceiverInit:t.videoTransceiverInit,signalingAck:{sdp:b,sequenceId:w},stream:I})),await Promise.all(D),(B=this._monitor)===null||B===void 0||B.report("rtc_subscribe_stat",{result:"success",start:s,message:"unknown",stream_user_id:I.userId}),I.startReport(y=>{var S;y.publicStreamId=y.userId,delete y.userId,delete y.isScreen;const L=DC(y);L.audioStats&&this.safeEmit(Rg.onWTNRemoteAudioStats,{streamId:I.streamId,audioStats:L.audioStats}),L.videoStats&&this.safeEmit(Rg.onWTNRemoteVideoStats,{streamId:I.streamId,videoStats:L.videoStats}),(S=this.__onRemoteStreamStats)===null||S===void 0||S.call(this,L)},this._ctx.handler),this._updateVideoPlayerState(i),this._initAudioPlayer(i),I.subVideo=I.getEnableMediaType().video,I.subAudio=I.getEnableMediaType().audio,(E=this._playTaskMap.get(i))===null||E===void 0||E.resolve(),this._playTaskMap.delete(i)}async _unsubscribePublicStream(I){var g;pt("_unsubscribePublicStream()",I,this._logger);const C={appId:this._ctx.appId,streamId:I.streamId};try{await this._ctx.signalingManager.sendSignaling("stopPullStream",C)}catch{}I.streamState=uC.INIT,await((g=this._ctx.handler)===null||g===void 0?void 0:g.handleAck({action:iI.unsubscribe,streamId:I.streamId,audioMid:I.audioMid,videoMid:I.videoMid,stream:I})),I.subMediaType=OC.NONE,this._removeOnTrackListener(I),I.statsReport.unsubscribe(),I.destroy()}async _updatePullStream(I,g){const C=g.getEnableMediaType();await this._ctx.signalingManager.sendSignaling("updatePullStream",{appId:this._ctx.appId,streamId:I,config:{enableMediaType:C}}),g.subVideo=C.video,g.subAudio=C.audio}_removeOnTrackListener(I){const g=this._ontrackCallbackMap.get(I);if(g){const C=I.vendorHandler||this._ctx.handler;C==null||C.off("ontrack",g),this._ontrackCallbackMap.delete(I)}}_addSignalListeners(){const I={[HI.ON_CONNECTION_STATE_CHANGE]:g=>{g.state===XA.CONNECTION_STATE_RECONNECTED?(Array.from(this._remoteStreams.values()).forEach(C=>{const{streamId:Q,token:B}=C,{audio:E,video:i}=C.getEnableMediaType();C.destroy(),this._remoteStreams.delete(Q),this.startPlayWTN(B,Q,!i,!E,!0).then(()=>{var e;(e=this.__onResubscribe)===null||e===void 0||e.call(this,{stream:C})})}),Array.from(this._localStreams.values()).forEach(C=>{const{token:Q,pubAudio:B,pubVideo:E}=C;C.destroy(),this._localStreams.delete(C.streamId),this.startPushWTN(Q,C.streamId,!E,!B,!0)})):g.state===XA.CONNECTION_STATE_DISCONNECTED&&(this._remoteStreams.forEach(C=>{C.setState(mg.FAIL,lC.IN_RETRY),C.setAudioState(QE.FROZEN,yi.NETWORK_CONGESTION),C.setVideoState(BE.FROZEN,wi.NETWORK_CONGESTION)}),this._localStreams.forEach(C=>{C.setState(mQ.FAIL,bE.IN_RETRY)}))},[x.ON_STREAM_PUSHED_BY_OTHER]:g=>{const C=this._localStreams.get(g.streamId);this._logger.print("_addSignalListeners","onStreamPushedByOther",g.streamId),C&&(C.setState(mQ.FAIL,bE.STREAM_PUSH_BY_OTHER),this._stopLocalStream(C))},[x.ON_STREAM_PULL_STATE_CHANGED]:async g=>{const C=this._remoteStreams.get(g.streamId);if(this._logger.print("_addSignalListeners","onStreamPullStateChanged",g),C)switch(g.code){case 0:C.setState(mg.SUCCESS,lC.PLAY_SUCCESS);break;case 1:case 2:case 3:const B={1:lC.STREAM_NOT_EXIST,2:lC.REMOTE_STOP,3:lC.REMOTE_FAILURE}[g.code];C.setAudioState(QE.STOPED,yi.REMOTE_STOP),C.setVideoState(BE.STOPED,wi.REMOTE_STOP),C.setState(mg.FAIL,B);break;case 4:const E=C.getPushBackOff();var Q;E.retryDuration<6e4?(this._logger.info("subRetry",C.streamId,E.retryDuration),C.setState(mg.START,lC.IN_RETRY),await new Promise(i=>setTimeout(i,E.interval)),C.updatePushBackOff(),await((Q=this._ctx)===null||Q===void 0||(Q=Q.handler)===null||Q===void 0?void 0:Q.handleAck({action:iI.unsubscribe,streamId:C.streamId,audioMid:C.audioMid,videoMid:C.videoMid,stream:C})),C.clean(),await this._sendStartPullStreamSignal(C)):(C.setState(mg.FAIL,lC.RETRY_FAIL),this._logger.info("subRetry","end",C.streamId),C.resetPushBackOff())}}};Object.keys(I).forEach(g=>{this._ctx.signalingManager.on(g,I[g])}),this._clearSignalListeners=()=>{Object.keys(I).forEach(g=>{this._ctx.signalingManager.off(g,I[g])})}}_addLocalStreamEventHandler(I){I.on(Rg.onWTNPushStateChanged,g=>{this.safeEmit(Rg.onWTNPushStateChanged,g)})}_addRemoteStreamEventHandler(I){I.on(Rg.onWTNPlayStateChanged,g=>{this.safeEmit(Rg.onWTNPlayStateChanged,g)}),I.on(Rg.onWTNRemoteAudioStateChanged,g=>{this.safeEmit(Rg.onWTNRemoteAudioStateChanged,g)}),I.on(Rg.onWTNRemoteVideoStateChanged,g=>{this.safeEmit(Rg.onWTNRemoteVideoStateChanged,g)}),I.on("onSEIMessage",g=>{if(g instanceof Uint8Array){const Q=LaA(g);for(let B=0;B1&&arguments[1]!==void 0&&arguments[1],Q=arguments.length>2&&arguments[2]!==void 0?arguments[2]:F.STREAM_INDEX_MAIN;(g=this.__onPlayerEvents)===null||g===void 0||g.call(this,I,C,Q),I.on("playback_event",B=>{const E=this._remoteStreams.get(I.userId);if(B.eventName==="loadeddata"){const i=()=>{E&&B.type==="video"&&this.safeEmit(Rg.onWTNFirstRemoteVideoFrameDecoded,{streamId:E.streamId})};E==null||!E.observer||E.observer.audioFirstFrameReceived?i():E.observer.once("recvVideoFirstFrame",i)}})}async _maybeFillBackFrame2Stream(I){var g;if(I.refreshBlackFrameLifetime(),(g=I.videoTransceiver)===null||g===void 0||!g.sender.track){var C;const Q=I.genBlackFrame();if(!Q)return;(C=I.videoTransceiver)===null||C===void 0||(C=C.sender)===null||C===void 0||C.replaceTrack(Q),I.pubAttributes.videoType=eC.BLACK,this._ctx.signalingManager.sendSignaling("updatePushStream",{streamId:I.streamId,appId:this._ctx.appId,attributes:{videoType:eC.BLACK}}),I.on("black-frame-ended",()=>{var B;(B=I.videoTransceiver)===null||B===void 0||(B=B.sender)===null||B===void 0||B.replaceTrack(null),I.pubAttributes.videoType=eC.NORMAL,this._ctx.signalingManager.sendSignaling("updatePushStream",{streamId:I.streamId,appId:this._ctx.appId,attributes:{videoType:eC.NORMAL}})})}}safeEmit(I){for(var g=arguments.length,C=new Array(g>1?g-1:0),Q=1;Q3&&arguments[3]!==void 0?arguments[3]:3e4;if(!window.MediaRecorder)throw new U(m.NOT_SUPPORTED,"Your browser does not support MediaRecorder.");if(this._isAudioDeviceRecordTesting||this._isAudioPlaybackDeviceTesting)throw new U(m.REPEAT_DEVICE_TEST,"device test cannot be called repeatedly at the same time.");this._isAudioDeviceRecordTesting=!0,XI.info("startAudioDeviceRecordTest()","Invoke"),this._recoderTimer=setTimeout(()=>{XI.info("startAudioDeviceRecordTest()","".concat(Q,'ms automatic call method "stopAudioDeviceRecordAndPlayTest"')),this._stopAudioCaptureAndRecoder()},Q);try{this._onAutoplayFailed=g,await this._startAudioCaptureAndRecoder(I,C??100)}catch(B){throw this._isAudioDeviceRecordTesting=!1,delete this._onAutoplayFailed,B}delete this._audioCaptureAndRecoderResolve}stopAudioDeviceRecordAndPlayTest(){XI.info("stopAudioDeviceRecordAndPlayTest()","Invoke"),this._recoderTimer!==void 0&&(clearTimeout(this._recoderTimer),delete this._recoderTimer),this._stopAudioCaptureAndRecoder()}stopAudioDevicePlayTest(){this._isAudioDeviceRecordTesting&&(XI.info("stopAudioDevicePlayTest()","Invoke"),this._isAudioDeviceRecordTesting=!1,this._mediaRecorder&&(this._mediaRecorder.ondataavailable=null),this.stopAudioDeviceRecordAndPlayTest(),this._stopEmitAudioPlaybackDeviceTestVolume(),this._destroyAudioElement()),delete this._onAutoplayFailed}getRecordTrack(){return this._audioTrack}async setSinkId(I){if(XI.info("setSinkId()","Invoke"),HTMLAudioElement.prototype.setSinkId===void 0)throw new U(m.NOT_SUPPORTED,"setSinkId not supported by current browser");const g=await Xg.getAudioPlaybackDeviceById(I);if(!g)throw new U(m.INVALID_DEVICE_ID,"audio playback device id ".concat(I," is invalid"));return this._audioPlaybackDeviceId=I,this._setAudioCtxSinkId(),g}getSinkId(){return this._audioPlaybackDeviceId}destroy(){XI.info("destroy()","Invoke"),super.removeAllListeners(),this.stopAudioPlaybackDeviceTest(),this.stopAudioDevicePlayTest()}async _playAudioFile(I,g){return XI.info("_playAudioFile()","Invoke url=".concat(I,"; loop=").concat(g.loop)),new Promise((C,Q)=>{const B=UR("audio",{attributes:{src:I,crossOrigin:"anonymous"}});this._audioElement=B,B.loop=g.loop,this._audioLevelFetcher=new SR(B),B.onplaying=()=>{B.onplaying=null,XI.info("_playAudioFile()","onplaying"),C()},B.onerror=async E=>{var i;XI.error("_playAudioFile()","onerror",E);const e=E.message||(B==null||(i=B.error)===null||i===void 0?void 0:i.message);Q(new U(m.LOAD_RESOURCES_FAILED,"Failed to play recorded audio".concat(e?", reason: ".concat(e):".")))},this._setAudioCtxSinkId().then(()=>{var E,i;return(E=B.play())===null||E===void 0||(i=E.catch)===null||i===void 0?void 0:i.call(E,e=>{XI.warn("_playAudioFile()","autoplay error",e);const o="Failed to play recorded audio, ".concat(e.name,": ").concat(e.message);e.name==="NotAllowedError"&&this._onAutoplayFailed?this._onAutoplayFailed(()=>{var t;return Promise.all([(t=this._audioLevelFetcher)===null||t===void 0?void 0:t.resume(),B.play()])}):Q(new U(m.LOAD_RESOURCES_FAILED,o))})})})}_destroyAudioElement(){this._audioElement&&(XI.info("_destroyAudioElement()","Invoke"),this._audioElement.onplaying=null,this._audioElement.onerror=null,this._audioElement.src="",delete this._audioElement,typeof this._audioCaptureAndRecoderResolve=="function"&&this._audioCaptureAndRecoderResolve())}_startEmitAudioPlaybackDeviceTestVolume(I){I=Math.max(I,100),this._audioElement&&(XI.info("_startEmitAudioPlaybackDeviceTestVolume()","start timer(".concat(I,"ms)")),this._playbackDeviceTestTimer=self.setInterval(()=>{this._audioLevelFetcher&&this.emit("onAudioPlaybackDeviceTestVolume",this._audioLevelFetcher.getAudioLevel())},I))}_stopEmitAudioPlaybackDeviceTestVolume(){var I;this._playbackDeviceTestTimer!==void 0&&(XI.info("_stopEmitAudioPlaybackDeviceTestVolume()","stop timer"),self.clearInterval(this._playbackDeviceTestTimer),delete this._playbackDeviceTestTimer),(I=this._audioLevelFetcher)===null||I===void 0||I.destroy(),delete this._audioLevelFetcher}async _startAudioCaptureAndRecoder(I,g){this._audioTrack=await Jw(this._ctx,this._ctx.audioProfileManager.getConstraints()),this._audioTrack.setVolume(g+.01);const C=new MediaStream([this._audioTrack.preprocessingTrack]);return XI.info("startAudioDeviceRecordTest()","create microphone track success!"),new Promise((Q,B)=>{let E;typeof MediaRecorder.isTypeSupported=="function"&&(E=["audio/webm","audio/mp4"].find(e=>MediaRecorder.isTypeSupported(e)),XI.info("startAudioDeviceRecordTest()","use mimeType: ".concat(E))),this._mediaRecorder=new MediaRecorder(C,E?{mimeType:E}:void 0);const i=this._mediaRecorder.mimeType;this._mediaRecorder.ondataavailable=async e=>{if(this._isAudioDeviceRecordTesting){var o;XI.info("startAudioDeviceRecordTest()","get recorded file(mimeType: ".concat(i,")."));const t=new Blob([e.data],{type:i});try{await this._playAudioFile(pQ.createObjectURL(t),{loop:!1})}catch(s){return B(s)}this._startEmitAudioPlaybackDeviceTestVolume(I),(o=this._audioElement)===null||o===void 0||o.addEventListener("ended",()=>{this.stopAudioDevicePlayTest(),Q()}),this._audioCaptureAndRecoderResolve=Q}else Q()},this._mediaRecorder.onerror=e=>{B(new U(m.AUDIO_DEVICE_TEST_FAILED,e.message||"mediaRecorder error"))},this._audioCaptureAndRecoderResolve=Q,this._mediaRecorder.start()})}_stopAudioCaptureAndRecoder(){var I;this._mediaRecorder&&(this._mediaRecorder.state==="recording"&&this._mediaRecorder.stop(),delete this._mediaRecorder),(I=this._audioTrack)===null||I===void 0||I.destroy(),delete this._audioTrack}async _setAudioCtxSinkId(){let I=this._audioPlaybackDeviceId;if(I){I==="default"&&(I="");try{var g,C;(g=MQ.getAudioContextInstance())===null||g===void 0||(C=g.setSinkId)===null||C===void 0||C.call(g,I),XI.info("setSinkId","ctx.sinkId=".concat(I))}catch(Q){XI.error("setSinkId","failed, ".concat(Q.name," - ").concat(Q.message))}}}}const pM=()=>({url:"",video:{codec:_W.H264,width:640,height:360,fps:15,gop:2,kBitRate:NM(640,360,15)},audio:{codec:"AAC",kBitRate:64,sampleRate:48e3,channels:2,AACProfile:Ba.LC},layout:{regions:[],appData:"",backgroundColor:"#000000"}});function NM(A,I,g){return A*I<=288e3?g<=15?800:1200:A*I<=864e3?g<=15?1200:1800:A*I<=1152e3?g<=15?1600:2400:A*I<=2592e3?g<=15?2500:3750:g<=15?3300:5e3}function ZM(A){if(typeof A!="string"||!/^rtmps?:\/\//.test(A))throw new U(m.INVALID_PARAMS,"Invalid rtmp address")}function KM(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];if(A==null||!A.length)throw new U(m.INVALID_PARAMS,"regions should not be empty.");for(const I of A){if(typeof I.userId!="string")throw new U(m.INVALID_PARAMS,"region.userId(".concat(I.userId,") should be a string."));if(dC(I.userId),typeof I.isScreenStream!="boolean")throw new U(m.INVALID_PARAMS,"region.isScreenStream(".concat(I.isScreenStream,") should be a boolean."))}}function JM(A,I){var g,C;const Q=(s,v)=>{const r=s.reduce((a,c)=>a==null?void 0:a[c],I),n=s.reduce((a,c)=>a==null?void 0:a[c],pM());return r&&v(r)?r:n},B=s=>s%2==0?s:s+1,E=B(Q(["video","width"],s=>s>=2&&s<=1920)),i=B(Q(["video","height"],s=>s>=2&&s<=1920)),e=Q(["video","fps"],s=>s>=1&&s<=60),o=((g=I.video)===null||g===void 0?void 0:g.kBitRate)||0,t=Q(["audio","sampleRate"],s=>!![32e3,44100,48e3].find(v=>v===s||v/1e3===s));return{type:"transcode",action:A,transcodeMeta:{transcode:{url:I.url},control:{protocol:"2.0"},audio:{codec:Q(["audio","codec"],s=>s==="AAC"),bitRate:1e3*Q(["audio","kBitRate"],s=>s>=32&&s<=192),sampleRate:t<100?1e3*t:t,channels:Q(["audio","channels"],s=>[1,2].includes(s)),profile:Q(["audio","AACProfile"],s=>[Ba.LC,Ba.HEv1,Ba.HEv2].includes(s))},video:{codec:Q(["video","codec"],s=>["H264","H265"].includes(s)),fps:e,gop:Q(["video","gop"],s=>s>=1&&s<=5)*e,bitRate:1e3*(o>=16&&o<=1e4?o:NM(E,i,e)),width:E,height:i},layout:{canvas:{bgnd:Q(["layout","backgroundColor"],s=>/^#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})$/.test(s))},regions:((C=I.layout)===null||C===void 0||(C=C.regions)===null||C===void 0?void 0:C.map(s=>({alpha:!s.alpha||Number(s.alpha)>1||Number(s.alpha)<=0?1:Number(s.alpha),uid:s.userId,zorder:!s.zorder||Number(s.zorder)<0||Number(s.zorder)>100?0:Number(s.zorder),x:!s.x||Number(s.x)>=1||Number(s.x)<0?0:Number(s.x),y:!s.y||Number(s.y)>=1||Number(s.y)<0?0:Number(s.y),w:!s.w||Number(s.w)>1||Number(s.w)<=0?1:Number(s.w),h:!s.h||Number(s.h)>1||Number(s.h)<=0?1:Number(s.h),renderMode:s.renderMode&&[1,2,3].includes(s.renderMode)?s.renderMode:1,contentControl:s.contentControl&&[0,1,2].includes(s.contentControl)?s.contentControl:0,screen:!!s.isScreenStream})))||[],app_data:Q(["layout","appData"],s=>typeof s=="string")}}}}function duA(A){var I;ZM(A.url),KM((I=A.layout)===null||I===void 0?void 0:I.regions)}function huA(A){var I;A.url&&ZM(A.url),KM((I=A.layout)===null||I===void 0?void 0:I.regions)}function DuA(A){return JM("started",A)}function uuA(A){return JM("layoutChanged",A)}const Pt={getDefaultValue:pM,checkStartParams:duA,checkUpdateParams:huA,getStartParams:DuA,getUpdateParams:uuA};let du;const buA=A=>{du&&clearTimeout(du),du=setTimeout(()=>{for(const[I,g]of A)I!=null&&I.startsWith("mux")&&g.forEach(C=>{var Q;(Q=C.audioTrack)===null||Q===void 0||Q.pause()});for(const[I,g]of A)I!=null&&I.startsWith("mux")&&g.forEach(C=>{var Q;(Q=C.audioTrack)===null||Q===void 0||Q.play()})},2e3)};var yuA=yA,wuA=uv,muA=m0;yuA({target:"Object",stat:!0},{fromEntries:function(A){var I={};return wuA(A,function(g,C){muA(I,g,C)},{AS_ENTRIES:!0}),I}});var GuA=pC,RuA=GuA.Object.fromEntries,LuA=RuA,SuA=LuA,TuA=SuA,UuA=TuA,FuA=UuA,YuA=FuA,kuA=YuA,puA=kuA,Bo=CI(puA);const NuA=["ele","fakeEle"],ZuA=["orgTrack","mediaTrack","preprocessingTrack"],KuA=["orgTrack","mediaTrack","preprocessingTrack"],Tk=["currentTime","duration","ended","error","muted","networkState","paused","readyState","seekable","sinkId","src","volume"],JuA=["currentTime","sampleRate","state","baseLatency","outputLatency","sinkId"],Pl=["contentHint","enabled","id","kind","label","muted","readyState"],WuA=["currentDirection","direction","mid","stopped"];let QB;async function VuA(A){const I=Date.now();let g=[];A._ctx.handler&&A._ctx.handler._peerConnection&&(g=await A._ctx.handler._peerConnection.getStats());const C=[];return g.forEach(Q=>{C.push(Q)}),{timestamp:I,stats:C}}function Uk(A){const I={};if(A instanceof MediaStream){I.id=A.id,I.active=A.active;const g=A.getTracks();I.tracks=g.map(C=>Bo(Pl.map(Q=>[Q,C[Q]])))}return I}async function zuA(A){const I=Date.now(),g=[];var C;A._videoPlayer&&g.push({userId:"__local__",mediaType:"video",isScreen:!1,isPublic:!1,ele:A._videoPlayer._videoDom}),A._screenPlayer&&g.push({userId:"__local__",mediaType:"video",isScreen:!0,isPublic:!1,ele:A._screenPlayer._videoDom}),A._remoteVideoPlayer&&A._remoteVideoPlayer.forEach((B,E)=>{g.push({userId:E,mediaType:"video",isScreen:!1,isPublic:!1,ele:B?B._videoDom:void 0})}),A._remoteScreenPlayer&&((C=A._remoteScreenPlayer)===null||C===void 0||C.forEach((B,E)=>{g.push({userId:E,mediaType:"video",isScreen:!0,isPublic:!1,ele:B?B._videoDom:void 0})})),A._remoteAudioPlayer&&A._remoteAudioPlayer.forEach((B,E)=>{g.push({userId:E,mediaType:"audio",isScreen:!1,isPublic:!1,ele:B?B._audioDom:void 0,fakeEle:B?B._fakeAudioDom:void 0})}),A._remoteScreenAudioPlayer&&A._remoteScreenAudioPlayer.forEach((B,E)=>{g.push({userId:E,mediaType:"audio",isScreen:!0,isPublic:!1,ele:B?B._audioDom:void 0,fakeEle:B?B._fakeAudioDom:void 0})}),A._publicStreamVideoPlayer&&A._publicStreamVideoPlayer.forEach((B,E)=>{g.push({userId:E,mediaType:"video",isScreen:!1,isPublic:!0,ele:B?B._videoDom:void 0})}),A._publicStreamAudioPlayer&&A._publicStreamAudioPlayer.forEach((B,E)=>{g.push({userId:E,mediaType:"audio",isScreen:!1,isPublic:!0,ele:B?B._audioDom:void 0,fakeEle:B?B._fakeAudioDom:void 0})}),A._localVideoTrack&&A._localVideoTrack.videoPlayers&&A._localVideoTrack.videoPlayers.forEach((B,E)=>{g.push({playerId:E.toString(),userId:"__local__",mediaType:"video",isScreen:!1,isPublic:!1,ele:B._videoDom})}),A._localScreenTrack&&A._localScreenTrack.videoPlayers&&A._localScreenTrack.videoPlayers.forEach((B,E)=>{g.push({playerId:E.toString(),userId:"__local__",mediaType:"video",isScreen:!0,isPublic:!1,ele:B._videoDom})}),A._room&&A._room._remoteStreams&&A._room._remoteStreams.forEach((B,E)=>{B.forEach(i=>{if(i.audioTrack){const e=i.audioTrack._audioPlayer;g.push({userId:E,mediaType:"audio",isScreen:i.isScreen,isPublic:!1,ele:e?e._audioDom:void 0,fakeEle:e?e._fakeAudioDom:void 0})}i.videoTrack&&i.videoTrack.videoPlayers&&i.videoTrack.videoPlayers.forEach((e,o)=>{g.push({playerId:o.toString(),userId:E,mediaType:"video",isScreen:i.isScreen,isPublic:!1,ele:e?e._videoDom:void 0})})})});let Q=A._publicStreamManager;return Q||(Q=A._outsideRoom),Q&&Q.remoteStreams&&Q.remoteStreams.forEach((B,E)=>{if(B.audioTrack){const i=B.audioTrack._audioPlayer;g.push({userId:E,mediaType:"audio",isScreen:!1,isPublic:!0,ele:i?i._audioDom:void 0,fakeEle:i?i._fakeAudioDom:void 0})}B.videoTrack&&B.videoTrack.videoPlayers&&B.videoTrack.videoPlayers.forEach((i,e)=>{g.push({playerId:e.toString(),userId:E,mediaType:"video",isScreen:!1,isPublic:!0,ele:i?i._videoDom:void 0})})}),A&&A._room&&A._room._virtualStreams&&A._room._virtualStreams.forEach((B,E)=>{if(B.audioTrack){const i=B.audioTrack._audioPlayer;g.push({userId:"virtualStream-".concat(E),mediaType:"audio",isScreen:!1,isPublic:!1,isVirtual:!0,ele:i?i._audioDom:void 0,fakeEle:i?i._fakeAudioDom:void 0})}}),{timestamp:I,elementStats:g.map(B=>{let{ele:E,fakeEle:i}=B,e=ve(B,NuA);const o=R({ele:R({srcObject:E?Uk(E.srcObject):void 0},Bo(Tk.map(t=>[t,E[t]])))},e);return i&&(o.fakeEle=R({srcObject:Uk(i.srcObject)},Bo(Tk.map(t=>[t,i[t]])))),o})}}function WM(A){const I=[];let g=[];A&&A._room&&A._room._remoteStreams&&(g=A._room._remoteStreams.values());for(const C of g)C.forEach(Q=>{Q.audioTrack&&I.push(Q.audioTrack)});A._localAudioTrack&&I.push(A._localAudioTrack),A._localScreenAudioTrack&&I.push(A._localScreenAudioTrack);for(const C of I){if(C._audioLevelFetcher&&C._audioLevelFetcher._ctx)return C._audioLevelFetcher._ctx;if(C._ac)return C._ac;if(C._audioFetchMap&&Array.from(C._audioFetchMap.values()).length)return Array.from(C._audioFetchMap.values())[0]._ctx;if(C._ap&&C._ap._ac)return C._ap._ac}return null}async function MuA(A){const I=Date.now(),g=WM(A),C={};return g?(JuA.forEach(Q=>{C[Q]=g[Q]}),{timestamp:I,acState:C}):{timestamp:I,acState:void 0}}function VM(A){const I=[];A._localAudioTrack&&I.push({userId:"__local__",mediaType:"audio",isScreen:!1,isPublic:!1,isVirtual:!1,orgTrack:A._localAudioTrack._originTrack,mediaTrack:A._localAudioTrack._mediaTrack,preprocessingTrack:A._localAudioTrack._preProcessingTrack}),A._localScreenAudioTrack&&I.push({userId:"__local__",mediaType:"audio",isScreen:!0,isPublic:!1,isVirtual:!1,orgTrack:A._localScreenAudioTrack._originTrack,mediaTrack:A._localScreenAudioTrack._mediaTrack,preprocessingTrack:A._localScreenAudioTrack._preProcessingTrack}),A._localVideoTrack&&I.push({userId:"__local__",mediaType:"video",isScreen:!1,isPublic:!1,isVirtual:!1,orgTrack:A._localVideoTrack._originTrack,mediaTrack:A._localVideoTrack._mediaTrack,preprocessingTrack:A._localVideoTrack._preProcessingTrack}),A._localScreenVideoTrack&&I.push({userId:"__local__",mediaType:"video",isScreen:!0,isPublic:!1,isVirtual:!1,orgTrack:A._localScreenVideoTrack._originTrack,mediaTrack:A._localScreenVideoTrack._mediaTrack,preprocessingTrack:A._localScreenVideoTrack._preProcessingTrack}),A._room&&A._room._remoteStreams&&A._room._remoteStreams.forEach((C,Q)=>{C.forEach(B=>{B.audioTrack&&I.push({userId:Q,mediaType:"audio",isScreen:B.isScreen,isPublic:!1,isVirtual:!1,orgTrack:B.audioTrack._originTrack,mediaTrack:B.audioTrack._mediaTrack}),B.videoTrack&&I.push({userId:Q,mediaType:"video",isScreen:B.isScreen,isPublic:!1,isVirtual:!1,orgTrack:B.videoTrack._originTrack,mediaTrack:B.videoTrack._mediaTrack})})});let g=A._publicStreamManager;return g||(g=A._outsideRoom),g&&g.remoteStreams&&g.remoteStreams.forEach((C,Q)=>{C.audioTrack&&I.push({userId:Q,mediaType:"audio",isScreen:C.isScreen,isPublic:!0,isVirtual:!1,orgTrack:C.audioTrack._originTrack,mediaTrack:C.audioTrack._mediaTrack}),C.videoTrack&&I.push({userId:Q,mediaType:"video",isScreen:C.isScreen,isPublic:!0,isVirtual:!1,orgTrack:C.videoTrack._originTrack,mediaTrack:C.videoTrack._mediaTrack})}),A&&A._room&&A._room._virtualStreams&&A._room._virtualStreams.forEach((C,Q)=>{C.audioTrack&&I.push({userId:"virtualStream-".concat(Q),mediaType:"audio",isScreen:!1,isPublic:!1,isVirtual:!0,orgTrack:C.audioTrack._originTrack,mediaTrack:C.audioTrack._mediaTrack}),C.videoTrack&&I.push({userId:"virtualStream-".concat(Q),mediaType:"video",isScreen:!1,isPublic:!1,isVirtual:!0,orgTrack:C.videoTrack._originTrack,mediaTrack:C.videoTrack._mediaTrack})}),I}async function hu(A,I){if(!A)return;const g=new MediaStream;g.addTrack(A);const C=I.createMediaStreamSource(g),Q=I.createAnalyser();C.connect(Q),I.state==="suspended"&&(console.warn(I.state),I.resume());const B=new Uint8Array(2048);Q.getByteTimeDomainData(B),await new Promise(o=>{setTimeout(o,50)}),Q.getByteTimeDomainData(B),await new Promise(o=>{setTimeout(o,50)});let E=0;B.forEach(o=>E=Math.max(E,Math.abs(o-128)));const i=E/128*256,e=i>2?i:0;return C.disconnect(),Q.disconnect(),e}async function XuA(A){const I=Date.now();if(QB||(QB=new AudioContext),QB.state==="suspended"&&await new Promise(Q=>{const B=setTimeout(()=>{console.warn("[RTC_AMBULANCE] AudioContext resume failed, try to find one in RTCEngine"),QB=WM(A),QB&&console.warn("[RTC_AMBULANCE] find AudioContext in RTCEngine success"),Q()},1e3);QB.resume().then(()=>{clearTimeout(B),Q()},()=>{clearTimeout(B),QB=null,Q()})}),!QB)return void console.error("[RTC_AMBULANCE] get volume is not supported");const g=VM(A),C=[];return await Promise.all(g.filter(Q=>Q.mediaType==="audio").map(async Q=>{let{orgTrack:B,mediaTrack:E,preprocessingTrack:i}=Q;const e=R({},ve(Q,ZuA));await Promise.all([hu(B,QB).then(o=>{e.orgTrackVolume=o}),hu(E,QB).then(o=>{e.mediaTrackVolume=o}),hu(i,QB).then(o=>{e.preprocessingTrackVolume=o})]),C.push(e)})),{timestamp:I,trackVolumes:C}}async function juA(A){return{timestamp:Date.now(),trackStates:VM(A).map(I=>{let{orgTrack:g,mediaTrack:C,preprocessingTrack:Q}=I,B=ve(I,KuA);return R({orgTrack:g?Bo(Pl.map(E=>[E,g[E]])):void 0,mediaTrack:C?Bo(Pl.map(E=>[E,C[E]])):void 0,preprocessingTrack:Q?Bo(Pl.map(E=>[E,Q[E]])):void 0},B)})}}function Fk(A){if(!A)return;const I={track:A.track?A.track.id:void 0,transport:{state:A.transport?A.transport.state:void 0}};return A.transport&&A.transport.iceTransport&&(I.iceTransport={state:A.transport.iceTransport.state,role:A.transport.iceTransport.role,gatheringState:A.transport.iceTransport.gatheringState,component:A.transport.iceTransport.component}),I}async function fuA(A){const I=Date.now();let g=[];A._ctx._handler&&A._ctx._handler._peerConnection&&(g=A._ctx._handler._peerConnection.getTransceivers());const C=[];return g.forEach(Q=>{const B=R({sender:Fk(Q.sender),receiver:Fk(Q.receiver)},Bo(WuA.map(E=>[E,Q[E]])));C.push(B)}),{timestamp:I,tranceiverStates:C}}async function HuA(A){const I={stats:[],mediaElementStates:[],audioContextStates:[],volumes:[],trackStates:[],tranceiverStates:[]},g=[];return await new Promise(C=>{let Q,B=0;const E=()=>{g.push(VuA(A).then(i=>{I.stats.push(i)}),zuA(A).then(i=>{I.mediaElementStates.push(i)}),MuA(A).then(i=>{I.audioContextStates.push(i)}),XuA(A).then(i=>{I.volumes.push(i)}),juA(A).then(i=>{I.trackStates.push(i)}),fuA(A).then(i=>{I.tranceiverStates.push(i)})),B++,B>=10?Promise.all(g).then(()=>{C()}):(clearTimeout(Q),Q=setTimeout(E,500))};Q=setTimeout(E,500)}),console.log("RTC_AMBULANCE",I),I}class xuA{constructor(){P(this,"containers",new WeakSet)}getContainerById(I){return document.getElementById(I)}registerContainer(I){var g;return typeof I=="string"&&(I=(g=this.getContainerById(I))!==null&&g!==void 0?g:void 0),!(!I||this.containers.has(I))&&(this.containers.add(I),!0)}unregisterContainer(I){var g;return typeof I=="string"&&(I=(g=this.getContainerById(I))!==null&&g!==void 0?g:void 0),!!I&&(this.containers.delete(I),!0)}}const OuA=["videoStats","audioStats"];var Du,quA=Object.defineProperty,_uA=Object.getOwnPropertyDescriptor,f=(A,I,g,C)=>{for(var Q,B=_uA(I,g),E=A.length-1;E>=0;E--)(Q=A[E])&&(B=Q(I,g,B)||B);return B&&quA(I,g,B),B};const Cm=(Du=class extends iQ{constructor(A,I,g){var C;super(),C=this,P(this,"monitor",void 0),P(this,"logger",void 0),P(this,"_room",void 0),P(this,"_wtnStreamManager",void 0),P(this,"_appId",void 0),P(this,"_localImgVideoTrack",void 0),P(this,"_localImgScreenTrack",void 0),P(this,"_localScreenVideoTrack",void 0),P(this,"_localScreenAudioTrack",void 0),P(this,"_tempMixingAudioTrack",void 0),P(this,"_localAudioVolume",100),P(this,"_localScreenAudioVolume",100),P(this,"_remoteAudioVolume",new Map),P(this,"_remoteScreenAudioVolume",new Map),P(this,"_localVideoPlayerConfig",{[F.STREAM_INDEX_MAIN]:new Map,[F.STREAM_INDEX_SCREEN]:new Map}),P(this,"_remoteVideoPlayerConfig",{[F.STREAM_INDEX_MAIN]:new Map,[F.STREAM_INDEX_SCREEN]:new Map}),P(this,"_publicStreamIds",new Map),P(this,"_dummyMainImage",void 0),P(this,"_dummyScreenImage",void 0),P(this,"_trackSourceType",void 0),P(this,"_liveTranscodeConfig",void 0),P(this,"_startCloudProxyTimestamp",void 0),P(this,"_pauseAllSubscribeState",{audio:void 0,video:void 0,resumeAudioStreamIds:{},resumeVideoStreamIds:{}}),P(this,"_audioVolumeIndicationTimer",void 0),P(this,"_dummyMainTimer",void 0),P(this,"_dummyScreenTimer",void 0),P(this,"_audioPropertiesReportTimer",null),P(this,"_mirrorType",GQ.MIRROR_TYPE_RENDER),P(this,"_audioMixingManager",void 0),P(this,"_pubLock",void 0),P(this,"_subLocks",void 0),P(this,"_audioCaptureLock",void 0),P(this,"_videoCaptureLock",void 0),P(this,"_screenCaptureLock",void 0),P(this,"_subScreenLocks",void 0),P(this,"_rtmClient",void 0),P(this,"_messageStatisticsObserver",void 0),P(this,"_waitForNewToken",!1),P(this,"_originIceConfigRequestUrls",void 0),P(this,"_originConfigServerUrls",void 0),P(this,"_originLogServerUrl",void 0),P(this,"_audioDeviceManager",void 0),P(this,"_config",void 0),P(this,"_needClosePreTrack",!1),P(this,"_containerCollisionDetector",new xuA),P(this,"_ctx",void 0),P(this,"_removeDeviceEventHandler",void 0),P(this,"_updateMixAudioTrack",async function(Q){var B;let E=arguments.length>1&&arguments[1]!==void 0?arguments[1]:JQ.PLAYOUT_AND_PUBLISH;if(C.logger.info("_updateMixAudioTrack()"),!C._localAudioTrack)return void(Q&&(C._tempMixingAudioTrack={track:Q,type:E}));Q?(C._localAudioTrack.mixType=E,C._localAudioTrack.mixedAudioTrack=Q):(delete C._localAudioTrack.mixType,delete C._localAudioTrack.mixedAudioTrack),await((B=C._room)===null||B===void 0?void 0:B.hasPublished())&&await C._updatePublish(),C._wtnStreamManager._updatePushTrack()}),P(this,"_onVideoDeviceStateChange",Q=>{this.safeEmit(X.onVideoDeviceStateChanged,Q)}),P(this,"_onAudioDeviceStateChange",Q=>{this.safeEmit(X.onAudioDeviceStateChanged,Q)}),P(this,"_onAudioMixingMessage",Q=>{this.safeEmit(X.onAudioMixingStateChanged,Q)}),P(this,"_onAudioMixingAutoplayFailed",Q=>{this.safeEmit(X.onAutoplayFailed,Q)}),this.id=I,this._appId=A,this.monitor=tI(I),this._ctx=new IuA(I,A,g),this._pubLock=new tB("pubLock"),this._subLocks=new Map,this._subScreenLocks=new Map,this._audioCaptureLock=new tB("audioCap"),this._videoCaptureLock=new tB("videoCap"),this._screenCaptureLock=new tB("screenCap"),this._addDeviceEventHandler(),this._audioDeviceManager=new luA(this._ctx),this._addSignalingEventHandler(),this._wtnStreamManager=new Jg(this._ctx),this._addWTNStreamEventHandler(),K0&&(window.__rtc_engine__=this,window["__rtc_engine__".concat(Math.floor(100*Math.random()+1))]=this),this._trackSourceType={video:Wg.VIDEO_SOURCE_TYPE_INTERNAL,screenVideo:Wg.VIDEO_SOURCE_TYPE_INTERNAL,audio:VC.AUDIO_SOURCE_TYPE_INTERNAL,screenAudio:VC.AUDIO_SOURCE_TYPE_INTERNAL},this._config=g,this._rtmClient=new vuA(this._ctx),this._handleRTMClient(this._rtmClient),this._handleAudioDeviceManager(),this._messageStatisticsObserver=new UrA(I),this.logger=new uA("Engine",0,I),KI.createRTSMsgReportor(this.id),Cm.hasReportNativeDetector||(this.monitor.reportLongString("NativeDetector",JSON.stringify(J0)),Cm.hasReportNativeDetector=!0)}get appId(){return this._appId}set appId(A){this._appId=A}async updateToken(A){if(this.logger.info("updateToken()","token: %s",A),OA(A,"token"),this._room&&this._waitForNewToken)return this._waitForNewToken=!1,this._room.config.token=A,await this._join(this._room);if(!this._room)throw new U(m.UPDATE_TOKEN_BEFORE_JOIN,"update token before join room");await this._room.updateToken(A);const I=[];if(this._room.config.tokenPublishPrivilegeExpired&&this._room.config.isAutoPublish&&this._ctx.visibility&&I.push(this._updatePublish({mediaType:iA.AUDIO_AND_VIDEO})),this._room.config.tokenSubscribePrivilegeExpired){const{isAutoSubscribeAudio:g,isAutoSubscribeVideo:C}=this._room.config,Q=(g?iA.AUDIO:0)|(C?iA.VIDEO:0);Q&&I.push(this._triedResumeAllRemoteStreams(Q,!0))}await Promise.allSettled(I)}async setVideoCaptureDevice(A){if(this.logger.info("setVideoCaptureDevice()","deviceId: %s",A),OA(A,"deviceId"),!this._localVideoTrack)return void this._ctx.videoProfile.setCaptureDeviceId(A);if(cR&&EE&&this._localVideoTrack.originTrack.getSettings().deviceId===A)return;const I=this._ctx.videoProfile.getCaptureConfig(A);var g;EE&&xi&&YQ>=85&&YQ<=91&&((g=this.localVideoTrack)===null||g===void 0||g.removePlayerTrack()),this._needClosePreTrack=this._needClosePreTrack||zPA,this._needClosePreTrack&&(this._removeLocalTrackEvents(this._localVideoTrack),this._localVideoTrack.destroy(),delete this._localVideoTrack),this.logger.info("setVideoCaptureDevice()","start createCameraVideoTrack...");const C=await jc(this._ctx,I).catch(B=>{if(this._localVideoTrack&&!this._localVideoTrack.dummy)return this.logger.warn("setVideoCaptureDevice()","createCameraVideoTrack failed, stop pre VideoTrack."),this._removeLocalTrackEvents(this._localVideoTrack),this._localVideoTrack.destroy(),delete this._localVideoTrack,jc(this._ctx,I).then(E=>(this._needClosePreTrack=!0,E)).catch(async()=>{this.logger.error("setVideoCaptureDevice()","createCameraVideoTrack failed, rollback.");const E=await jc(this._ctx);throw this._switchTrack(E),B});throw B});this.logger.success("setVideoCaptureDevice()","createCameraVideoTrack success."),this._ctx.videoProfile.setCaptureDeviceId(A),this._localVideoTrack&&(this._removeLocalTrackEvents(this._localVideoTrack),this._localVideoTrack.destroy());const Q=this._ctx.videoProfile.getContentHint();Q&&C.setContentHint(Q),await this._switchTrack(C)}async setAudioCaptureDevice(A){var I;if(this.logger.info("setAudioCaptureDevice()","deviceId: %s",A),OA(A,"deviceId"),this._ctx.audioProfileManager.updateConstraints({deviceId:{exact:A}}),!this._localAudioTrack)return;this._localAudioTrack.destroy(),this._removeLocalTrackEvents(this._localAudioTrack);const g=await Jw(this._ctx,this._ctx.audioProfileManager.getConstraints());this._initLocalTrackEvents(g),this._localAudioTrack=g,this._localAudioTrack.setVolume(this._localAudioVolume),this._wtnStreamManager._updatePushTrack(),this._room&&(I=this._room.localStream)!==null&&I!==void 0&&I.pubAudio&&await this._updatePublish()}_addDeviceEventHandler(){Xg.on(X.onVideoDeviceStateChanged,this._onVideoDeviceStateChange),Xg.on(X.onAudioDeviceStateChanged,this._onAudioDeviceStateChange),this._removeDeviceEventHandler=()=>{Xg.off(X.onVideoDeviceStateChanged,this._onVideoDeviceStateChange),Xg.off(X.onAudioDeviceStateChanged,this._onAudioDeviceStateChange)}}_addSignalingEventHandler(){const A=this._ctx.signalingManager;A.on(HI.ON_CONNECTION_STATE_CHANGE,this._onConnectionStateChange.bind(this)),A.on(HI.ON_RECONNECT_FAILED,()=>{this.safeEmit(X.onError,{errorCode:m.RECONNECT_FAILED})}),A.on(HI.CONNECT_WITH_TCP,()=>{this.safeEmit(X.onIceConnectWithTcp)})}_addWTNStreamEventHandler(){this._wtnStreamManager.__onResubscribe=A=>{const I=A.stream;I&&(I.audioTrack&&this._updateAudioPlayerState(I),I.videoTrack&&this._updateVideoPlayerState(I))},this._wtnStreamManager.__onRemoteStreamStats=A=>{this.safeEmit(X.onPublicStreamStats,A)},this._wtnStreamManager.__onSEIMessageReceived=A=>{this.safeEmit(X.onPublicStreamSEIMessageReceived,A)},this._wtnStreamManager.__onPlayerEvents=(A,I,g)=>{this._initPlayerEvents(A,I,g)}}_addHandlerEventHandler(){var A,I,g,C,Q,B,E,i,e,o,t,s,v,r,n,a,c,d,l,h,D,u,w,b,y,S,L,V,z,EA,eA,K,p,J,Y,N,q,IA,gA,vA,bA,nA;(A=this._room)===null||A===void 0||A.on(x.ON_ADD_STREAM,this._onAddStream.bind(this)),(I=this._room)===null||I===void 0||I.on(x.ON_REMOVE_STREAM,this._onRemoveStream.bind(this)),(g=this._room)===null||g===void 0||g.on(x.USER_CONNECTION,this._onUserConnection.bind(this)),(C=this._room)===null||C===void 0||C.on($.ON_USER_LEAVE,this._onUserLeave.bind(this)),(Q=this._room)===null||Q===void 0||Q.on($.ON_ROOM_ERROR,this._onRoomError.bind(this)),(B=this._room)===null||B===void 0||B.on($.ON_NETWORK_QUALITY,this._onNetworkQuality.bind(this)),(E=this._room)===null||E===void 0||E.on(x.ON_CUSTOM_MESSAGE,this._onCustomMessage.bind(this)),(i=this._room)===null||i===void 0||i.on(x.USER_MESSAGE_RECEIVED,this._onUserMessageReceived.bind(this)),(e=this._room)===null||e===void 0||e.on(x.USER_BINARY_MESSAGE_RECEIVED,this._onUserBinaryMessageReceived.bind(this)),(o=this._room)===null||o===void 0||o.on(x.ON_USER_TOKEN_WILL_EXPIRE,this._onUserTokenWillExpire.bind(this)),(t=this._room)===null||t===void 0||t.on(x.ON_TOKEN_PUBLISH_PRIVILEGE_WILL_EXPIRE,this._onUserTokenPublishPrivilegeWillExpire.bind(this)),(s=this._room)===null||s===void 0||s.on(x.ON_TOKEN_PUBLISH_PRIVILEGE_DID_EXPIRED,this._onUserTokenPublishPrivilegeDidExpired.bind(this)),(v=this._room)===null||v===void 0||v.on(x.ON_TOKEN_SUBSCRIBE_PRIVILEGE_WILL_EXPIRE,this._onUserTokenSubscribePrivilegeWillExpire.bind(this)),(r=this._room)===null||r===void 0||r.on(x.ON_TOKEN_SUBSCRIBE_PRIVILEGE_DID_EXPIRED,this._onUserTokenSubscribePrivilegeDidExpired.bind(this)),(n=this._room)===null||n===void 0||n.on(x.POST_PROCESSING_MESSAGE,H=>{var CA;((CA=H)==null?void 0:CA.protocol)==="2.0"?this._onStreamMixingEvent({error:H.error,event:H.eventType,message:H.message}):H.type==="publicStreamCallback"?this._onPushPublicStreamResult(H):H.type==="transcodeStatusCallback"&&this._onLiveTranscodingResult(H)}),(a=this._room)===null||a===void 0||a.on(HI.ON_VENDOR_CONNECTION_STATE_CHANGE,H=>this.safeEmit(X.onVendorConnectionStateChanged,H)),(c=this._room)===null||c===void 0||c.on($.RESUBSCRIBE,this._onResubscribe.bind(this)),(d=this._room)===null||d===void 0||d.on($.SUBSCRIBE_PUSH_TRACK,this._onSubscribePushTrack.bind(this)),(l=this._room)===null||l===void 0||l.on($.REMOVE_PUSH_TRACK,this._onRemovePushTrack.bind(this)),(h=this._room)===null||h===void 0||h.on($.ON_PUBLISH_RESULT,H=>{var CA,LA,UA;H.state===qB.PUBLISH_SUCC&&((LA=this._room)===null||LA===void 0||LA.config.setTokenPublishPrivilegeExpired(!1)),H.state===qB.PUBLISH_FAIL&&H.errorCode===m.TOKEN_NO_PUBLISH_PERMISSION&&((UA=this._room)===null||UA===void 0||UA.config.setTokenPublishPrivilegeExpired(!0));const xA=!(H.retry||(CA=this._room)===null||CA===void 0||!CA.config.isAutoPublish);xA&&this.safeEmit(X.onAutoPublishResult,H),this.safeEmit(X.onPublishResult,{isScreen:H.isScreen,isAutoPublish:xA,errorCode:H.errorCode})}),(D=this._room)===null||D===void 0||D.on($.ON_SUBSCRIBE_RESULT,H=>{var CA;H.state===Ds.SUBSCRIBE_SUCC&&((CA=this._room)===null||CA===void 0||CA.config.setTokenSubscribePrivilegeExpired(!1)),H.state===Ds.SUBSCRIBE_FAIL&&H.errorCode===m.TOKEN_NO_SUBSCRIBE_PERMISSION&&this._handleLoseSubscribePrivilege(),this.safeEmit(X.onSubscribeResult,{userId:H.userId,isScreen:H.isScreen,isAutoSubscribe:!1,errorCode:H.errorCode})}),(u=this._room)===null||u===void 0||u.on($.ON_REMOTE_STREAM_STATS,H=>{this.safeEmit(X.onRemoteStreamStats,H)}),(w=this._room)===null||w===void 0||w.on($.ON_LOCAL_STREAM_STATS,H=>{this.safeEmit(X.onLocalStreamStats,H)}),(b=this._room)===null||b===void 0||b.on($.ON_SUBTITLE_STATE_CHANGED,H=>{this.safeEmit(X.onSubtitleStateChanged,H)}),(y=this._room)===null||y===void 0||y.on($.ON_SUBTITLE_MESSAGE_RECEIVED,H=>{this.safeEmit(X.onSubtitleMessageReceived,H)}),(S=this._room)===null||S===void 0||S.on($.ON_USER_PUBLISH_STATE_CHANGE,this._onUserPublishStateChange.bind(this)),(L=this._room)===null||L===void 0||L.on($.ON_USER_START_AUDIO_CAPTURE,(H,CA)=>{let{userId:LA}=H;this._updateAudioPlayerState(CA),this.safeEmit(X.onUserStartAudioCapture,{userId:LA})}),(V=this._room)===null||V===void 0||V.on($.ON_USER_STOP_AUDIO_CAPTURE,H=>{let{userId:CA}=H;this.safeEmit(X.onUserStopAudioCapture,{userId:CA})}),(z=this._room)===null||z===void 0||z.on($.ON_USER_START_VIDEO_CAPTURE,H=>{let{userId:CA}=H;this.safeEmit(X.onUserStartVideoCapture,{userId:CA})}),(EA=this._room)===null||EA===void 0||EA.on($.ON_USER_STOP_VIDEO_CAPTURE,H=>{let{userId:CA}=H;this.safeEmit(X.onUserStopVideoCapture,{userId:CA})}),(eA=this._room)===null||eA===void 0||eA.on($.ON_SEI_MESSAGED_RECEIVED,H=>{this.safeEmit(X.onSEIMessageReceived,H)}),(K=this._room)===null||K===void 0||K.on($.ON_REMOTE_VIDEO_SIZE_CHANGED,(H,CA)=>{this.safeEmit(X.onRemoteVideoSizeChanged,H,CA)}),(p=this._room)===null||p===void 0||p.on($.ON_SIMULCAST_SUBSCRIBE_FALLBACK,H=>this.safeEmit(X.onSimulcastSubscribeFallback,H)),(J=this._room)===null||J===void 0||J.on($.ON_VIDEO_STREAM_BANNED,H=>{this.safeEmit(X.onVideoStreamBanned,{uid:H.uid,banned:H.banned})}),(Y=this._room)===null||Y===void 0||Y.on($.ON_AUDIO_STREAM_BANNED,H=>{this.safeEmit(X.onAudioStreamBanned,{uid:H.uid,banned:H.banned})}),(N=this._room)===null||N===void 0||N.on($.ON_FORWARD_STREAM_ERROR,H=>{this.safeEmit(X.onForwardStreamError,H)}),(q=this._room)===null||q===void 0||q.on($.ON_REJOIN_WITH_TCP,()=>{this.safeEmit(X.onRejoinWithTcp)}),(IA=this._room)===null||IA===void 0||IA.on($.PUB_RETRY,H=>{this.safeEmit(X.onPublishRetry,H)}),(gA=this._room)===null||gA===void 0||gA.on($.SUB_RETRY,H=>{this.safeEmit(X.onSubscribeRetry,H)}),(vA=this._room)===null||vA===void 0||vA.on($.VIDEO_TYPE_CHANGE,H=>{this.safeEmit(X.onSEIStreamUpdate,H)}),(bA=this._room)===null||bA===void 0||bA.on($.JOIN_SUCCESS,H=>{this._ctx.isPreConnection||this.safeEmit(X.onConnectionStateChanged,{state:H?XA.CONNECTION_STATE_RECONNECTED:XA.CONNECTION_STATE_CONNECTED})}),(nA=this._room)===null||nA===void 0||nA.on($.UPDATE_PUBLISH,H=>{let{streamIndex:CA}=H;CA===F.STREAM_INDEX_MAIN?this._updatePublish():CA===F.STREAM_INDEX_SCREEN&&this._updateScreenPublish()})}safeEmit(A){for(var I=arguments.length,g=new Array(I>1?I-1:0),C=1;C{this.logger.error("_join","_updatePublish failed",C)}):(this.safeEmit(X.onAutoPublishResult,{isScreen:!1,state:qB.PUBLISH_FAIL}),this.safeEmit(X.onPublishResult,{isScreen:!1,isAutoPublish:!0,errorCode:m.NO_PUBLISH_PERMISSION}))),this.monitor.set({rtc_vid:A.config.rtcVid}),KI.setRoomId(this.id,A.config.roomId),KI.setUserId(this.id,A.config.userId),g}catch(g){throw g.code===m.INVALID_TOKEN?this._waitForNewToken=!0:(A.destroy(),this._room===A&&delete this._room),g}}async leaveRoom(){let A=arguments.length>0&&arguments[0]!==void 0&&arguments[0];this.logger.info("leaveRoom()");const I=this._room;delete this._room,this._ctx.resetPubSubLock(YM.LEAVE),this._ctx.callId=void 0,A?await(I==null?void 0:I.leave(A)):I==null||I.leave(A).catch(),this._removeHandlerEventHandler(),this._subLocks=new Map,this._subScreenLocks=new Map,this._ctx.audioProfileManager.setRoomId(),this._liveTranscodeConfig&&this.stopLiveTranscoding(),I==null||I.destroy(),this._remoteVideoPlayerConfig[F.STREAM_INDEX_MAIN].forEach(g=>{g.forEach(C=>{const{player:Q,renderDom:B}=C;Q==null||Q.destroy(),this._containerCollisionDetector.unregisterContainer(B)})}),this._remoteVideoPlayerConfig[F.STREAM_INDEX_MAIN].clear(),this._remoteVideoPlayerConfig[F.STREAM_INDEX_SCREEN].forEach(g=>{g.forEach(C=>{const{player:Q,renderDom:B}=C;Q==null||Q.destroy(),this._containerCollisionDetector.unregisterContainer(B)})}),this._remoteVideoPlayerConfig[F.STREAM_INDEX_SCREEN].clear(),this._publicStreamIds=new Map,KI.setRoomId(this.id,""),KI.setUserId(this.id,""),this.monitor.set({rtc_session_id:"",rtc_vid:""})}_destroyLocalTrack(){this._localAudioTrack&&(this._removeLocalTrackEvents(this._localAudioTrack),this._localAudioTrack.destroy(),this._localAudioTrack=void 0),this._localVideoTrack&&(this._removeLocalTrackEvents(this._localVideoTrack),this._localVideoTrack.destroy(),this._localVideoTrack=void 0),this._localScreenAudioTrack&&(this._removeLocalTrackEvents(this._localScreenAudioTrack),this._localScreenAudioTrack.destroy(),this._localScreenAudioTrack=void 0),this._localScreenVideoTrack&&(this._removeLocalTrackEvents(this._localScreenVideoTrack),this._localScreenVideoTrack.destroy(),this._localScreenVideoTrack=void 0),this._localImgVideoTrack&&(this._localImgVideoTrack.stop(),this._localImgVideoTrack=void 0),this._localImgScreenTrack&&(this._localImgScreenTrack.stop(),this._localImgScreenTrack=void 0)}destroy(){var A,I,g;this.logger.info("destroy()"),this.removeAllListeners(),this._removeHandlerEventHandler(),(A=this._removeDeviceEventHandler)===null||A===void 0||A.call(this),(I=this._room)===null||I===void 0||I.destroy(),this._room=void 0,this._subLocks=new Map,this._subScreenLocks=new Map,this._audioCaptureLock=new tB("audioCap"),this._videoCaptureLock=new tB("videoCap"),this._screenCaptureLock=new tB("screenCap"),this._pauseAllSubscribeState={audio:void 0,video:void 0,resumeVideoStreamIds:{},resumeAudioStreamIds:{}},this._messageStatisticsObserver.destroy(),this.monitor.destroy(),KI.destroyRTSMsgReportor(this.id),clearInterval(this._audioVolumeIndicationTimer),clearInterval(this._dummyMainTimer),clearInterval(this._dummyScreenTimer),this._audioVolumeIndicationTimer=void 0,this._stopAudioPropertiesReport(),this._destroyLocalTrack(),(g=this._audioMixingManager)===null||g===void 0||g.destroy(),this._rtmClient.destroy(),this._wtnStreamManager.destroy(),this._publicStreamIds=new Map,this._audioDeviceManager.destroy(),this._ctx.destroy(),this._localAudioVolume=100,this._localScreenAudioVolume=100,this._remoteAudioVolume.clear(),this._remoteScreenAudioVolume.clear(),this._localVideoPlayerConfig[F.STREAM_INDEX_MAIN].forEach(C=>{C.player.destroy()}),this._localVideoPlayerConfig[F.STREAM_INDEX_MAIN].clear(),this._localVideoPlayerConfig[F.STREAM_INDEX_SCREEN].forEach(C=>{C.player.destroy()}),this._localVideoPlayerConfig[F.STREAM_INDEX_SCREEN].clear(),this._remoteVideoPlayerConfig[F.STREAM_INDEX_MAIN].forEach(C=>{C.forEach(Q=>{Q.player.destroy()})}),this._remoteVideoPlayerConfig[F.STREAM_INDEX_MAIN].clear(),this._remoteVideoPlayerConfig[F.STREAM_INDEX_SCREEN].forEach(C=>{C.forEach(Q=>{Q.player.destroy()})}),this._remoteVideoPlayerConfig[F.STREAM_INDEX_SCREEN].clear()}async publishStream(A){this.logger.info("publishStream()","mediaType: %o",A),this._checkMediaType(A),this._assertNotInRoom(),gI(A)&&!this._localVideoTrack&&this._localImgVideoTrack&&(this._localVideoTrack=await v9A(this._ctx,this._localImgVideoTrack)),await this._updatePublish({mediaType:A},!0)}async unpublishStream(A,I){var g;if(this.logger.info("unpublishStream()","mediaType: %o",A),this._checkMediaType(A),this._assertNotInRoom(),I)return(g=this._room)===null||g===void 0?void 0:g.unpublish();await this._updatePublish({mediaType:A,pubState:wC.UNPUB},!0)}async publishScreen(A){this.logger.info("publishScreen()","mediaType: %o",A),this._checkMediaType(A),this._assertNotInRoom();try{gI(A)&&!this._localScreenVideoTrack&&this._localImgScreenTrack&&(this._localScreenVideoTrack=await r9A(this._ctx,this._localImgScreenTrack)),await this._updateScreenPublish({mediaType:A,pubState:wC.PUB})}catch(I){throw I instanceof U?I:new U(m.UNEXPECTED_ERROR,"unexpected error",I)}}async unpublishScreen(A){this.logger.info("unpublishScreen()","mediaType: %o",A),this._checkMediaType(A),this._assertNotInRoom(),await this._updateScreenPublish({mediaType:A,pubState:wC.UNPUB})}async subscribeStream(A,I){return this.logger.info("subscribeStream()","userId: %o, mediaType: %o",A,I),this._subscribe(!1,A,I)}async _subscribe(A,I,g){var C;const Q=g;if(g===iA.AUDIO&&(C=this._room)!==null&&C!==void 0&&C.config.isMultiChatMode())return void this.logger.warn("subscribeStream()","due to multiChatMode return");const B=this._room.remoteStreams.get(I),E=B==null?void 0:B.find(a=>a.isScreen===A);if(!E)throw new U(m.STREAM_NOT_EXIST,"stream not exist");const i=this._pauseAllSubscribeState.audio,e=this._pauseAllSubscribeState.video;this._pauseAllSubscribeState.audio&&(g-=g&iA.AUDIO),this._pauseAllSubscribeState.video&&(g-=g&iA.VIDEO),this.logger.warn("subscribeStream()","due to pauseAll mediaType: %o",g);const{hasSubscribed:o}=E;E.originalMediaType=g;try{var t;await this._room.subscribe(E,g),$I(g)&&this._updateAudioPlayerState(E),gI(g)&&this._updateVideoPlayerState(E);let a=0,c=0;if(i!==this._pauseAllSubscribeState.audio&&(this._pauseAllSubscribeState.audio?a|=iA.AUDIO:c|=iA.AUDIO),e!==this._pauseAllSubscribeState.video&&(this._pauseAllSubscribeState.video?a|=iA.VIDEO:c|=iA.VIDEO),a&&this.pauseAllSubscribedStream(a),c&&this.resumeAllSubscribedStream(c),$I(Q)&&(this._pauseAllSubscribeState.resumeAudioStreamIds[E.streamId]=E.streamId),gI(Q)&&(this._pauseAllSubscribeState.resumeVideoStreamIds[E.streamId]=E.streamId),E.audioTrack||E.videoTrack){var s,v;const d=!(A||!((s=this._room)!==null&&s!==void 0&&s.config.isAutoSubscribeAudio||(v=this._room)!==null&&v!==void 0&&v.config.isAutoSubscribeVideo)),l={userId:I,isScreen:!1,state:Ds.SUBSCRIBE_SUCC};d&&this.safeEmit(X.onAutoSubscribeResult,l),this.safeEmit(X.onSubscribeResult,{userId:I,isScreen:A,isAutoSubscribe:d})}var r,n;((t=this._room)===null||t===void 0||!t.config.isMultiChatMode())&&!o&&$I(g)&&E.hasAudio&&((r=E.observer)===null||r===void 0||r.setSubscribeAudio(!0)),!o&&gI(g)&&E.hasVideo&&((n=E.observer)===null||n===void 0||n.setSubscribeVideo(!0))}catch(a){throw a instanceof U&&a.code===m.TOKEN_NO_SUBSCRIBE_PERMISSION&&this._handleLoseSubscribePrivilege(),a}}async _handleLoseSubscribePrivilege(){var A;(A=this._room)===null||A===void 0||A.config.setTokenSubscribePrivilegeExpired(!0);try{await this._unSubscribeAllRemoteStreams()}catch{}}async unsubscribeStream(A,I){return this.logger.info("unsubscribeStream()","userId: %o, mediaType: %o",A,I),this._unsubscribe(!1,A,I)}async subscribeScreen(A,I){return this.logger.info("subscribeScreen() userId: %o, mediaType: %o",A,I),this._subscribe(!0,A,I)}async unsubscribeScreen(A,I){return this.logger.info("unsubscribeScreen() userId: %o, mediaType: %o",A,I),this._unsubscribe(!0,A,I)}_unsubscribe(A,I,g,C){var Q;if(g===iA.AUDIO&&(Q=this._room)!==null&&Q!==void 0&&Q.config.isMultiChatMode())return void this.logger.warn("subscribeStream()","due to multiChatMode return");const B=this._room.remoteStreams.get(I),E=B==null?void 0:B.find(e=>e.isScreen===A);if(!E)throw new U(m.STREAM_NOT_EXIST,"stream not exist");var i;return EE&&YQ&&YQ>=85&&YQ<=91&&g!==iA.AUDIO&&((i=E.videoTrack)===null||i===void 0||i.stopAll()),this._room.unsubscribe(E,g).then(()=>{C||($I(g)&&delete this._pauseAllSubscribeState.resumeAudioStreamIds[E.streamId],gI(g)&&delete this._pauseAllSubscribeState.resumeVideoStreamIds[E.streamId])})}async setRemoteVideoConfig(A,I){var g;return this.logger.info("setRemoteVideoConfig() userId: %o, remoteVideoConfig: %o",A,I),this._ctx.videoProfile.checkSimulcastApiVersion("old"),dC(A),oaA(I),this._ctx.videoProfile.setRemoteUserVideoConfig(A,I),(g=this._room)===null||g===void 0?void 0:g.updateSubVideoConfig(A).then(()=>{})}async setRemoteSimulcastStreamType(A,I){var g;this.logger.info("setRemoteSimulcastStreamType()","userId: %s, streamType: %s",A,I),this._ctx.videoProfile.checkSimulcastApiVersion("new"),dC(A),MA(I,"SimulcastStreamType",[Si.VIDEO_STREAM_HIGH,Si.VIDEO_STREAM_MID,Si.VIDEO_STREAM_LOW]),this._ctx.videoProfile.setRemoteUserVideoConfig(A,I),await((g=this._room)===null||g===void 0?void 0:g.updateSubVideoConfig(A))}async startVideoCapture(A){var I,g;if(this.logger.info("startVideoCapture()","deviceId: %s",A),kQ(A)||OA(A,"deviceId"),A&&this._ctx.videoProfile.setCaptureDeviceId(A),this._trackSourceType.video===Wg.VIDEO_SOURCE_TYPE_EXTERNAL)throw new U(m.STREAM_TYPE_NOT_MATCH,"setVideoSourceType as internal first");if(this._localVideoTrack&&!this._localVideoTrack.dummy)throw new U(m.REPEAT_CAPTURE,"Has already capture");let C={};const Q=await jc(this._ctx),B=this._ctx.videoProfile.getContentHint();B&&Q.setContentHint(B),this._initLocalTrackEvents(Q),this._localVideoTrack=Q,this._localVideoPlayerConfig[F.STREAM_INDEX_MAIN].forEach(e=>{var o,t;(o=this._localVideoTrack)===null||o===void 0||o.setPlayer(e,this._mirrorType,(t=this._config)===null||t===void 0?void 0:t.autoPlayPolicy,this._initPlayerEvents.bind(this))}),C=Q.originTrack.getSettings();const E={width:C.width,height:C.height};if(this._localVideoTrack.resolution=E,this._ctx.videoProfile.__autoResetVideoEncoderConfig(C),setTimeout(()=>this.safeEmit(X.onLocalVideoSizeChanged,{streamIndex:F.STREAM_INDEX_MAIN,info:E})),this._ctx.engineDestroyed)return this._destroyLocalTrack(),C;if(this._wtnStreamManager._updatePushTrack(),!this._room)return C;const{isAutoPublish:i}=this._room.config;return((I=this._room.localStream)!==null&&I!==void 0&&I.pubVideo||i)&&this._ctx.visibility&&this._updatePublish(),(g=this._room.localStream)===null||g===void 0||(g=g.observer)===null||g===void 0||g.setEnableVideo(!0),C}async getLocalStreamStats(){var A;return await((A=this._room)===null||A===void 0?void 0:A.getLocalStreamStats())}async stopVideoCapture(){var A,I;if(this.logger.info("stopVideoCapture()"),this._trackSourceType.video===Wg.VIDEO_SOURCE_TYPE_EXTERNAL)throw new U(m.STREAM_TYPE_NOT_MATCH,"setVideoSourceType as internal first");if(this._localVideoTrack&&!this._localVideoTrack.dummy){const g=this._ctx.extensionManager.getPluginByName(ws.PRE_PROCESSING,"RTCBeautyExtension");g&&g.emit("stop"),this._removeLocalTrackEvents(this._localVideoTrack),this._localVideoTrack.destroy(),this._localImgVideoTrack?this._localVideoTrack.setTrack(this._localImgVideoTrack,{isDummy:!0}):this._localVideoTrack=void 0}this._wtnStreamManager._updatePushTrack(),this._room&&((A=this._room.localStream)!==null&&A!==void 0&&A.pubVideo&&await this._updatePublish(),(I=this._room.localStream)===null||I===void 0||(I=I.observer)===null||I===void 0||I.setEnableVideo(!1))}async startAudioCapture(A){var I,g;if(this.logger.info("startAudioCapture()","deviceId: $o",A),kQ(A)||OA(A,"deviceId"),A&&this._ctx.audioProfileManager.updateConstraints({deviceId:{exact:A}}),this._trackSourceType.audio===VC.AUDIO_SOURCE_TYPE_EXTERNAL)throw new U(m.STREAM_TYPE_NOT_MATCH,"setAudioSourceType as internal first");if(this._localAudioTrack)throw new U(m.REPEAT_CAPTURE,"Has already capture");let C={};const Q=await Jw(this._ctx,this._ctx.audioProfileManager.getConstraints());C=Q.originTrack.getSettings(),this._initLocalTrackEvents(Q),this._localAudioTrack=Q,this._localAudioTrack.setVolume(this._localAudioVolume);const{frameSize:B,callback:E}=this._ctx._localAudioTrackDumpConfig[F.STREAM_INDEX_MAIN];B&&E&&this._localAudioTrack.setDataFetcher(B,E);const{position:i,volume:e}=this._ctx.earMonitorSettings[F.STREAM_INDEX_MAIN];if(i!==QC.NONE&&(this._localAudioTrack.play(i),this._localAudioTrack.setPlaybackVolume(e)),this._tempMixingAudioTrack&&(this._localAudioTrack.mixType=this._tempMixingAudioTrack.type,this._localAudioTrack.mixedAudioTrack=this._tempMixingAudioTrack.track,delete this._tempMixingAudioTrack),this._ctx.engineDestroyed)return this._destroyLocalTrack(),C;if(this._wtnStreamManager._updatePushTrack(),!this._room)return C;const{isAutoPublish:o}=this._room.config;return((I=this._room.localStream)!==null&&I!==void 0&&I.pubAudio||o)&&this._ctx.visibility&&this._updatePublish(),(g=this._room.localStream)===null||g===void 0||(g=g.observer)===null||g===void 0||g.setEnableAudio(!0),C}async stopAudioCapture(){var A,I,g;if(this.logger.info("stopAudioCapture()"),this._trackSourceType.audio===VC.AUDIO_SOURCE_TYPE_EXTERNAL)throw new U(m.STREAM_TYPE_NOT_MATCH,"setAudioSourceType as internal first");this._localAudioTrack&&(this._removeLocalTrackEvents(this._localAudioTrack),this._localAudioTrack.destroy()),this._localAudioTrack=void 0,(A=this._audioMixingManager)===null||A===void 0||A.stopAll(),this._wtnStreamManager._updatePushTrack(),this._room&&((I=this._room.localStream)!==null&&I!==void 0&&I.pubAudio&&await this._updatePublish(),(g=this._room.localStream)===null||g===void 0||(g=g.observer)===null||g===void 0||g.setEnableAudio(!1))}async startAudioAndVideoCapture(A,I){var g,C,Q,B;this.logger.print("startAudioAndVideoCapture","optionsOrAudioDeviceId: $o",A,"videoDeviceId: $o",I);const{audioDeviceId:E,videoDeviceId:i}=taA(A,I);if(E&&this._ctx.audioProfileManager.updateConstraints({deviceId:{exact:E}}),this._trackSourceType.video===Wg.VIDEO_SOURCE_TYPE_EXTERNAL||this._trackSourceType.audio===VC.AUDIO_SOURCE_TYPE_EXTERNAL)throw new U(m.STREAM_TYPE_NOT_MATCH,this._trackSourceType.video===Wg.VIDEO_SOURCE_TYPE_EXTERNAL?"setVideoSourceType as internal first":"setAudioSourceType as internal first");if(this._localVideoTrack&&!this._localVideoTrack.dummy)throw new U(m.REPEAT_CAPTURE,"video has already capture");if(this._localAudioTrack)throw new U(m.REPEAT_CAPTURE,"audio has already capture");const e=this._ctx.videoProfile.getCaptureConfig(i);let o={},t={};const{audioTrack:s,videoTrack:v}=await a9A(this._ctx,this._ctx.audioProfileManager.getConstraints(),e),r=this._ctx.videoProfile.getContentHint();r&&v.setContentHint(r),i&&this._ctx.videoProfile.setCaptureDeviceId(i),this._initLocalTrackEvents(v),this._localVideoTrack=v,this._localVideoPlayerConfig[F.STREAM_INDEX_MAIN].forEach(h=>{var D,u;(D=this._localVideoTrack)===null||D===void 0||D.setPlayer(h,this._mirrorType,(u=this._config)===null||u===void 0?void 0:u.autoPlayPolicy,this._initPlayerEvents.bind(this))}),this._initLocalTrackEvents(s),this._localAudioTrack=s,this._localAudioTrack.setVolume(this._localAudioVolume);const{frameSize:n,callback:a}=this._ctx._localAudioTrackDumpConfig[F.STREAM_INDEX_MAIN];n&&a&&this._localAudioTrack.setDataFetcher(n,a),this._tempMixingAudioTrack&&(this._localAudioTrack.mixType=this._tempMixingAudioTrack.type,this._localAudioTrack.mixedAudioTrack=this._tempMixingAudioTrack.track,delete this._tempMixingAudioTrack);let c=v.originTrack;o=c.getSettings();const d={width:o.width||0,height:o.height||0};if(this._localVideoTrack.resolution=d,this._ctx.videoProfile.__autoResetVideoEncoderConfig(o),setTimeout(()=>this.safeEmit(X.onLocalVideoSizeChanged,{streamIndex:F.STREAM_INDEX_MAIN,info:d})),c=s.originTrack,t=c.getSettings(),this._ctx.engineDestroyed)return this._destroyLocalTrack(),{audioTrackSettings:t,videoTrackSettings:o};if(this._wtnStreamManager._updatePushTrack(),!this._room)return{audioTrackSettings:t,videoTrackSettings:o};const{isAutoPublish:l}=this._room.config;return((g=this._room.localStream)!==null&&g!==void 0&&g.pubVideo||(C=this._room.localStream)!==null&&C!==void 0&&C.pubAudio||l)&&this._ctx.visibility&&this._updatePublish(),(Q=this._room.localStream)===null||Q===void 0||(Q=Q.observer)===null||Q===void 0||Q.setEnableVideo(!0),(B=this._room.localStream)===null||B===void 0||(B=B.observer)===null||B===void 0||B.setEnableAudio(!0),{audioTrackSettings:t,videoTrackSettings:o}}async startVideoAndAudioCapture(A,I){return this.startAudioAndVideoCapture(I,A)}getAudioMixingManager(){return this.logger.info("getAudioMixingManager()","invoke"),this._audioMixingManager||(this._audioMixingManager=new Kg({getLocalAudioTrack:()=>this._localAudioTrack,updateLocalAudioTrack:this._updateMixAudioTrack,emitMessage:this._onAudioMixingMessage,onAutoPlayFailed:this._onAudioMixingAutoplayFailed},this.id)),this._audioMixingManager}getWTNStreamManager(){return this._wtnStreamManager}getCallId(){var A;return(A=this._ctx)===null||A===void 0?void 0:A.callId}async startScreenCapture(){var A,I,g;let C=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(this.logger.info("startScreenCapture()","config: %o",C),this._trackSourceType.screenVideo===Wg.VIDEO_SOURCE_TYPE_EXTERNAL)throw new U(m.STREAM_TYPE_NOT_MATCH,"setVideoSourceType as internal first");if(this._trackSourceType.screenAudio===VC.AUDIO_SOURCE_TYPE_EXTERNAL)throw new U(m.STREAM_TYPE_NOT_MATCH,"setAudioSourceType as internal first");const[Q,B]=await P9A(this._ctx,C);B==null||B.setVolume(this._localScreenAudioVolume),this._localScreenVideoTrack&&!this._localScreenVideoTrack.dummy&&(this._removeLocalTrackEvents(this._localScreenVideoTrack),this._localScreenVideoTrack.destroy()),(A=this._localScreenAudioTrack)===null||A===void 0||A.destroy(),delete this._localScreenAudioTrack,this._localScreenVideoTrack=Q;const{contentHint:E}=this._ctx.videoProfile.getScreenEncodeConfig();E&&Q.setContentHint(E);const i=Q.originTrack;setTimeout(()=>{const e=i.getSettings(),o={width:e.width,height:e.height};Q.resolution=o,this.safeEmit(X.onLocalVideoSizeChanged,{streamIndex:F.STREAM_INDEX_SCREEN,info:{width:e.width,height:e.height}})},500),B&&(this._localScreenAudioTrack=B,this._initLocalTrackEvents(B)),this._localVideoPlayerConfig[F.STREAM_INDEX_SCREEN].forEach(e=>{var o,t;(o=this._localScreenVideoTrack)===null||o===void 0||o.setPlayer(e,GQ.MIRROR_TYPE_NONE,(t=this._config)===null||t===void 0?void 0:t.autoPlayPolicy,this._initPlayerEvents.bind(this))}),this._initLocalTrackEvents(this._localScreenVideoTrack,!0),((I=this._room)!==null&&I!==void 0&&(I=I.localScreenStream)!==null&&I!==void 0&&I.pubAudio||(g=this._room)!==null&&g!==void 0&&(g=g.localScreenStream)!==null&&g!==void 0&&g.pubVideo)&&await this._updateScreenPublish()}async stopScreenCapture(){var A,I,g,C;this.logger.info("stopScreenCapture()"),(A=this._localScreenVideoTrack)===null||A===void 0||A.stopAll(),this._localScreenVideoTrack&&(this._localScreenVideoTrack.dummy||(this._removeLocalTrackEvents(this._localScreenVideoTrack),this._localScreenVideoTrack.destroy(),this._localImgScreenTrack&&this._localScreenVideoTrack.setTrack(this._localImgScreenTrack,{isDummy:!0}))),this._localScreenAudioTrack&&(this._removeLocalTrackEvents(this._localScreenAudioTrack),this._localScreenAudioTrack.destroy()),this._localScreenAudioTrack=void 0,(I=this._localScreenVideoTrack)!==null&&I!==void 0&&I.dummy||(this._localScreenVideoTrack=void 0),((g=this._room)!==null&&g!==void 0&&(g=g.localScreenStream)!==null&&g!==void 0&&g.pubAudio||(C=this._room)!==null&&C!==void 0&&(C=C.localScreenStream)!==null&&C!==void 0&&C.pubVideo)&&await this._updateScreenPublish()}setLocalVideoPlayer(A,I){var g;this.logger.info("setLocalVideoPlayer()","streamIndex: %o, videoPlayerOption: %o",A,I),MA(A,"streamIndex",[F.STREAM_INDEX_MAIN,F.STREAM_INDEX_SCREEN]);const C=A===F.STREAM_INDEX_MAIN?this._localVideoTrack:this._localScreenVideoTrack,Q=(g=I==null?void 0:I.playerId)!==null&&g!==void 0?g:UQ;if(I==null||!I.renderDom){var B,E;(B=this._localVideoPlayerConfig[A].get(Q))===null||B===void 0||(B=B.player)===null||B===void 0||B.destroy();const s=(E=this._localVideoPlayerConfig[A].get(Q))===null||E===void 0?void 0:E.renderDom;return this._containerCollisionDetector.unregisterContainer(s),void this._localVideoPlayerConfig[A].delete(Q)}lF(I);const i=this._localVideoPlayerConfig[A].get(Q);if(!i){var e,o,t;const{renderDom:s}=I;if(!this._containerCollisionDetector.registerContainer(s))return this.monitor.report("rtc_error",{message:"RenderDom is not empty",error_code:TC.DUPLICATE_DOM}),void bi("renderDom is not empty");const v=new Pi(this._ctx.id,Q,R(R({},I),{},{isLocal:!0,isScreen:A===F.STREAM_INDEX_SCREEN,userId:(e=I.userId)!==null&&e!==void 0?e:"_local_"})),r=R(R({},I),{},{player:v});return this._localVideoPlayerConfig[A].set(Q,r),C==null||C.setPlayer(r,A===F.STREAM_INDEX_MAIN?this._mirrorType:GQ.MIRROR_TYPE_NONE,(o=this._config)===null||o===void 0?void 0:o.autoPlayPolicy,this._initPlayerEvents.bind(this)),(t=r.player)===null||t===void 0?void 0:t.domElement}I.renderMode!==void 0&&(C==null||C.setRenderMode(Q,I.renderMode),i.renderMode=I.renderMode)}async startLiveTranscoding(A){var I;this.logger.info("startLiveTranscoding()","transcode: %o",A),Pt.checkStartParams(A),this._liveTranscodeConfig=A;const g=(I=this._room)===null||I===void 0?void 0:I.config;if(g&&g.roomId.length+g.userId.length>126)throw new U(m.INVALID_PARAMS,"The roomId+userId must be within 126 bytes");try{this.safeEmit(X.onStreamMixingEvent,{event:wQ.START,error:0,message:""}),this._room&&this._ctx.signalingManager.isConnected()&&await this._room.liveControlMessage(Pt.getStartParams(this._liveTranscodeConfig))}catch(C){throw C instanceof U?C:new U(m.UNEXPECTED_ERROR,"unexpected error",C)}}async updateLiveTranscoding(A){var I,g;if(this.logger.info("updateLiveTranscoding()","transcode: %o",A),!this._liveTranscodeConfig)return;const C=Vw({},A);delete C.audio,(I=C.video)===null||I===void 0||delete I.codec,(g=C.video)===null||g===void 0||delete g.gop,Pt.checkUpdateParams(C),this._liveTranscodeConfig=Vw(this._liveTranscodeConfig,C);try{var Q;this.safeEmit(X.onStreamMixingEvent,{event:wQ.UPDATE,error:0,message:""}),await((Q=this._room)===null||Q===void 0?void 0:Q.liveControlMessage(Pt.getUpdateParams(this._liveTranscodeConfig)))}catch(B){throw B instanceof U?B:new U(m.UNEXPECTED_ERROR,"unexpected error",B)}}async stopLiveTranscoding(){if(this.logger.info("stopLiveTranscoding()"),this._liveTranscodeConfig){delete this._liveTranscodeConfig;try{var A;this.safeEmit(X.onStreamMixingEvent,{event:wQ.STOP,error:0,message:""}),await((A=this._room)===null||A===void 0?void 0:A.liveControlMessage({action:"stopped",type:"transcode"}))}catch(I){throw I instanceof U?I:new U(m.UNEXPECTED_ERROR,"unexpected error",I)}}}async startSubtitle(A){var I;this.logger.info("startSubtitle()","config: %o",A),this._assertNotInRoom(),await((I=this._room)===null||I===void 0?void 0:I.startSubtitle(A))}async updateSubtitleConfig(A){var I;this.logger.info("updateSubtitleConfig()","config: %o",A),this._assertNotInRoom(),await((I=this._room)===null||I===void 0?void 0:I.updateSubtitleConfig(A))}stopSubtitle(){var A;this.logger.info("stopSubtitle()","invoke"),(A=this._room)===null||A===void 0||A.stopSubtitle()}setBusinessId(A){return this.logger.info("setBusinessId()","businessId: %s",A),!QaA(A)&&!this._room&&(this._ctx.businessId=A,!0)}async setUserVisibility(A){var I;if(this.logger.info("setUserVisibility()","enable: %o",A),A=!!A,this._ctx.visibility!==A)if(this._room){var g;if(this._assertNotInRoom(),this._room.localStream&&((g=this._room.localStream.observer)===null||g===void 0||g.setPublisher(A)),!A){const C=await this._pubLock.lock();try{this._room.unpublish(),this._room.unpublishScreen()}finally{C()}}this._ctx.visibility=A;try{await this._room.updateUserAttributes()}catch(C){throw this._ctx.visibility=!A,C}A&&(I=this._room)!==null&&I!==void 0&&I.config.isAutoPublish&&this._updatePublish({mediaType:iA.AUDIO_AND_VIDEO})}else this._ctx.visibility=A}_initPlayerEvents(A){let I=arguments.length>1&&arguments[1]!==void 0&&arguments[1];const g=(arguments.length>2&&arguments[2]!==void 0?arguments[2]:F.STREAM_INDEX_MAIN)===F.STREAM_INDEX_SCREEN;A.on("playback_event",C=>{switch(C.eventName){case"timeupdate":return;case"loadeddata":if(C.type==="audio"){var Q;const i=A.userId.replace("_screen",""),e=(Q=this._room)===null||Q===void 0||(Q=Q.remoteStreams.get(i))===null||Q===void 0?void 0:Q.find(t=>t.isScreen===g),o=()=>{I?this.safeEmit(X.onFirstPublicStreamAudioFrameDecoded,{publicStreamId:i}):(this.safeEmit(X.onAudioFirstFrameDecoded,{userId:i,isScreen:g}),this.safeEmit(X.onRemoteAudioFirstFrame,{userId:i,isScreen:g})),this.monitor.report("first_remote_audio_render",{stream_id:"",stream_user_id:i||""},{isScreen:g})};e==null||!e.observer||e.observer.audioFirstFrameReceived?o():e.observer.once("recvAudioFirstFrame",o)}else{var B,E;const i={userId:A.userId,height:((B=A.domElement)===null||B===void 0?void 0:B.videoHeight)||0,width:((E=A.domElement)===null||E===void 0?void 0:E.videoWidth)||0,isScreen:g,playerId:A.playerId};I?(i.publicStreamId=i.userId,delete i.userId,delete i.isScreen,this.safeEmit(X.onFirstPublicStreamVideoFrameRendered,i),this.safeEmit(X.onFirstPublicStreamVideoFrameDecoded,i)):A.isLocal||(this.safeEmit(X.onVideoFirstFrameRendered,i),this.safeEmit(X.onVideoFirstFrameDecoded,i),this.safeEmit(X.onRemoteVideoFirstFrame,i)),this.monitor.report("first_remote_video_render",{stream_id:"",stream_user_id:C.userId||""},{isScreen:g})}break;case"autoplay-error":{I&&(C.publicStreamId=C.userId),AI(this.id,"autoplay-error",A instanceof Pi?"video":"audio",0,C.userId||"");const i={userId:C.userId,kind:A instanceof Pi?"video":"audio",mediaType:A instanceof Pi?iA.VIDEO:iA.AUDIO,streamIndex:A.isScreen?F.STREAM_INDEX_SCREEN:F.STREAM_INDEX_MAIN};return A instanceof Pi&&(i.playerId=A.playerId===UQ?void 0:A.playerId),void this.safeEmit(X.onAutoplayFailed,i)}}A instanceof Pi&&(C.playerId=A.playerId===UQ?void 0:A.playerId),this.safeEmit(X.onPlayerEvent,C)})}_initLocalTrackEvents(A){let I=arguments.length>1&&arguments[1]!==void 0&&arguments[1];["track-ended","track-mute","track-unmute"].forEach(g=>{A.on(g,async C=>{this.monitor.report("rtc_error",{message:"track-".concat(g," mediaType: ").concat(C.originTrack.kind),error_code:TC.TRACK_ERROR,capture_session_id:C.captureSessionId,media_type:g,reason:g});let Q=!1;C!==this._localScreenAudioTrack&&C!==this._localScreenVideoTrack||(Q=!0);const{kind:B}=C.originTrack;this.safeEmit({"track-ended":X.onTrackEnded,"track-mute":X.onTrackMute,"track-unmute":X.onTrackUnmute}[g],{kind:B,isScreen:Q}),(Yo||v9)&&(g==="track-mute"&&($B.emit(PB.ON_IOS_LOCAL_TRACK_MUTE,B),B==="audio"&&(await this.stopAudioCapture(),this.startAudioCapture())),g==="track-unmute"&&$B.emit(PB.ON_IOS_LOCAL_TRACK_UNMUTE,B))})}),A.on("resolution-change",g=>{this._ctx.extensionManager.getPluginsByType(ws.PRE_PROCESSING).forEach(C=>{var Q;C==null||(Q=C.applyConstraints)===null||Q===void 0||Q.call(C,I?F.STREAM_INDEX_SCREEN:F.STREAM_INDEX_MAIN,g)}),this.safeEmit(X.onLocalVideoSizeChanged,{streamIndex:I?F.STREAM_INDEX_SCREEN:F.STREAM_INDEX_MAIN,info:g})}),A.on("needReplaceTrack",()=>{if(A instanceof Do){var g,C;A.stopDataFetcher();const E=this._ctx._localAudioTrackDumpConfig[(g=A.streamIndex)!==null&&g!==void 0?g:F.STREAM_INDEX_MAIN];E!=null&&E.frameSize&&E!=null&&E.callback&&A.setDataFetcher(E.frameSize,E.callback);const{position:i,volume:e}=this._ctx.earMonitorSettings[(C=A.streamIndex)!==null&&C!==void 0?C:F.STREAM_INDEX_MAIN];if(i!==QC.NONE&&(A.play(i),A.setPlaybackVolume(e)),this._room){const{streamIndex:o}=A;var Q,B;o===F.STREAM_INDEX_MAIN?(Q=this._room.localStream)!==null&&Q!==void 0&&Q.pubAudio&&this._ctx.visibility&&this._updatePublish():(B=this._room.localStream)!==null&&B!==void 0&&B.pubAudio&&this._ctx.visibility&&this._updateScreenPublish()}}}),A.on("autoplay-error",g=>{this.safeEmit(X.onAutoplayFailed,g)})}_removeLocalTrackEvents(A){A.removeAllListeners("track-ended"),A.removeAllListeners("track-mute"),A.removeAllListeners("track-unmute"),A.removeAllListeners("resolution-change")}setRemoteVideoPlayer(A,I){var g,C,Q,B,E,i;this.logger.info("setRemoteVideoPlayer()","streamIndex: %o, videoPlayerOption: %o",A,I),MA(A,"streamIndex",[F.STREAM_INDEX_MAIN,F.STREAM_INDEX_SCREEN]),lF(I);const{userId:e}=I,o=A===F.STREAM_INDEX_SCREEN,t=(g=this._room)===null||g===void 0||(g=g.remoteStreams.get(e))===null||g===void 0?void 0:g.find(l=>l.isScreen===o),s=t==null?void 0:t.videoTrack,v=(C=I.playerId)!==null&&C!==void 0?C:UQ;(Q=this._getRemoteVideoPlayerConfig(A,e,v))===null||Q===void 0||(Q=Q.player)===null||Q===void 0||Q.destroy();const r=(B=this._getRemoteVideoPlayerConfig(A,e,v))===null||B===void 0?void 0:B.renderDom;var n;if(this._containerCollisionDetector.unregisterContainer(r),!I.renderDom)return void((n=this._remoteVideoPlayerConfig[A].get(e))===null||n===void 0||n.delete(v));const{renderDom:a}=I;if(!this._containerCollisionDetector.registerContainer(a))return this.monitor.report("rtc_error",{message:"RenderDom is not empty",error_code:TC.DUPLICATE_DOM}),void bi("renderDom is not empty");const c=new Pi(this.id,v,R(R({},I),{},{isLocal:!1,isScreen:o,userId:e})),d=R(R({},I),{},{player:c});return this._setRemoteVideoPlayerConfig(A,e,v,d),s==null||s.setPlayer(this.id,d,(E=this._config)===null||E===void 0?void 0:E.autoPlayPolicy,this._initPlayerEvents.bind(this)),t&&this._updateVideoPlayerState(t),(i=d.player)===null||i===void 0?void 0:i.domElement}setLocalVideoMirrorType(A){var I;this.logger.info("setLocalVideoMirrorType()","mirrorType: %o",A),MA(A,"mirrorType",[GQ.MIRROR_TYPE_NONE,GQ.MIRROR_TYPE_RENDER]),this._mirrorType=A,(I=this.localVideoTrack)===null||I===void 0||I.mirror(!!A)}setRemoteVideoMirrorType(A,I,g){var C;this.logger.info("setRemoteVideoMirrorType()","userId: %s, streamIndex: %o, mirrorType: %o",A,I,g),dC(A),MA(I,"streamIndex",[F.STREAM_INDEX_MAIN,F.STREAM_INDEX_SCREEN]),MA(g,"mirrorType",[GQ.MIRROR_TYPE_NONE,GQ.MIRROR_TYPE_RENDER]),this._ctx.setUserStreamConf(A,I,{mirrorType:g}),(C=this._room)===null||C===void 0||(C=C.remoteStreams.get(A))===null||C===void 0||(C=C.find(Q=>Q.isScreen===(I===F.STREAM_INDEX_SCREEN)))===null||C===void 0||(C=C.videoTrack)===null||C===void 0||C.mirror(!!g)}async setAudioPlaybackDevice(A){var I;this.logger.info("setAudioPlaybackDevice()","deviceId: %s",A),OA(A,"deviceId");const g=await this._audioDeviceManager.setSinkId(A);(I=this._room)===null||I===void 0||I.remoteStreams.forEach(C=>{C.forEach(Q=>{var B;(B=Q.audioTrack)===null||B===void 0||B.setPlaybackDevice(A)})}),this.safeEmit(X.onAudioPlaybackDeviceChanged,g),this.monitor.report("rtc_audio_device",{audio_event:"playout_device_switch",message:JSON.stringify(g),error_code:0})}async play(A){var I;let g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:iA.AUDIO_AND_VIDEO,C=arguments.length>2?arguments[2]:void 0,Q=arguments.length>3?arguments[3]:void 0;this.logger.info("play()","userId: %s, mediaType: %s, streamIndex: %s",A,g,C);const B=Q??UQ,E=!A||A===this._getUserId()||A==="local_user",i=C===void 0||C===F.STREAM_INDEX_MAIN,e=C===void 0||C===F.STREAM_INDEX_SCREEN,o=g!==iA.VIDEO,t=g!==iA.AUDIO,s=[];if(E&&t){if(i&&this._localVideoTrack){this._localVideoTrack.mirror(!!this._mirrorType);const a=this._localVideoTrack.play(B);a&&s.push(a)}if(e&&this._localScreenVideoTrack){var v;!((v=this._localScreenVideoTrack)===null||v===void 0)&&v.manuallyPlay(B)&&s.push()}}this._audioMixingManager&&A===this._audioMixingManager.id&&s.push(this._audioMixingManager.resumeLocalPlay());let r=[];var n;return(I=this._room)===null||I===void 0||I.remoteStreams.forEach((a,c)=>{A&&A!==c||a.forEach(d=>{d.audioTrack&&r.push(d.audioTrack),d.videoTrack&&r.push(d.videoTrack)})}),this._wtnStreamManager.__getRemoteStreams().forEach((a,c)=>{A&&A!==c||(a.audioTrack&&r.push(a.audioTrack),a.videoTrack&&r.push(a.videoTrack))}),i||(r=r.filter(a=>!!a.isScreen)),e||(r=r.filter(a=>!a.isScreen)),o||(r=r.filter(a=>a.mediaType!=="audio")),t||(r=r.filter(a=>a.mediaType!=="video")),o&&((n=this._room)===null||n===void 0||n.virtualStreams.forEach(a=>{a.audioTrack&&r.push(a.audioTrack)})),r.forEach(a=>{const c=a.manuallyPlay(B);c&&s.push(c)}),Promise.all(s).then(()=>{})}async stop(A){let I=arguments.length>1&&arguments[1]!==void 0?arguments[1]:iA.AUDIO_AND_VIDEO,g=arguments.length>2?arguments[2]:void 0,C=arguments.length>3?arguments[3]:void 0;this.logger.info("stop()","userId: %s, mediaType: %s, streamIndex: %s, playerId: %s",A,I,g,C);const Q=C??UQ,B=!A||A===this._getUserId()||A==="local_user",E=g===void 0||g===F.STREAM_INDEX_MAIN,i=g===void 0||g===F.STREAM_INDEX_SCREEN,e=I!==iA.VIDEO,o=I!==iA.AUDIO;if(B&&o&&(E&&this._localVideoTrack&&this._localVideoTrack.pause(Q),i&&this._localScreenVideoTrack&&this._localScreenVideoTrack.pause(Q)),A){var t;let s=[];(t=this._room)===null||t===void 0||(t=t.remoteStreams.get(A))===null||t===void 0||t.forEach(n=>{n.audioTrack&&s.push(n.audioTrack),n.videoTrack&&s.push(n.videoTrack)});const v=this._wtnStreamManager.__getPublicStreamTrack(A,"audio"),r=this._wtnStreamManager.__getPublicStreamTrack(A,"video");v&&s.push(v),r&&s.push(r),E||(s=s.filter(n=>!!n.isScreen)),i||(s=s.filter(n=>!n.isScreen)),e||(s=s.filter(n=>n.mediaType!=="audio")),o||(s=s.filter(n=>n.mediaType!=="video")),s.forEach(n=>{n.pause(Q)})}}getAudioVolume(A,I){MA(A,"streamIndex",[F.STREAM_INDEX_MAIN,F.STREAM_INDEX_SCREEN]);let g=0;if(I){var C;const Q=(C=this._room)===null||C===void 0||(C=C.remoteStreams.get(I))===null||C===void 0||(C=C.find(B=>B.isScreen===(A===F.STREAM_INDEX_SCREEN)))===null||C===void 0?void 0:C.audioTrack;Q&&(g=Q.getAudioLevel())}else{const Q=A===F.STREAM_INDEX_MAIN?this._localAudioTrack:this._localScreenAudioTrack;Q&&(g=Q.getAudioLevel())}return{linearVolume:g,nonlinearVolume:Er(g)}}setAudioFrameCallback(A,I,g){var C;let Q=arguments.length>3&&arguments[3]!==void 0?arguments[3]:4096;if(this.logger.info("setAudioFrameCallback()","streamIndex: %s, userId: %s, callback: %s, frameSize: %s",A,I,g?"true":"false",Q),MA(Q,"frameSize",[256,512,1024,2048,4096,8192,16384]),MQ.isWorkletReady===void 0&&MQ.getAudioContextInstance(),MQ.isWorkletReady===null)throw this.logger.error("setAudioFrameCallback()","Not support AudioWorklet"),new U(m.NOT_SUPPORTED,"Not support AudioWorklet");I?g?this._ctx._remoteAudioTrackDumpConfig[A].set(I,{callback:g,frameSize:Q}):this._ctx._remoteAudioTrackDumpConfig[A].delete(I):this._ctx._localAudioTrackDumpConfig[A]={callback:g,frameSize:g?Q:void 0};const B=I?(C=this._room)===null||C===void 0||(C=C.remoteStreams.get(I))===null||C===void 0||(C=C.find(E=>E.isScreen===(A===F.STREAM_INDEX_SCREEN)))===null||C===void 0?void 0:C.audioTrack:A===F.STREAM_INDEX_MAIN?this._localAudioTrack:this._localScreenAudioTrack;B?g?B.setDataFetcher(Q,g):B.stopDataFetcher():this.logger.warn("setAudioFrameCallback()","track not found")}async pauseAllSubscribedStream(A){return this.logger.info("pauseAllSubscribedStream()","mediaType: %o",A),this._checkMediaType(A),$I(A)&&(this._pauseAllSubscribeState.audio=!0),gI(A)&&(this._pauseAllSubscribeState.video=!0),this._room?this._pauseAllRemoteStreams(A):Promise.resolve()}async _pauseAllRemoteStreams(A){if(!this._room)return Promise.resolve();const I=[];return this._room.remoteStreams.forEach(g=>{Array.isArray(g)&&g.forEach(C=>{if(C.hasSubscribed){C.attributes.audiostream&&$I(A)&&(this._pauseAllSubscribeState.resumeAudioStreamIds[C.streamId]=C.streamId),C.attributes.videostream&&gI(A)&&(this._pauseAllSubscribeState.resumeVideoStreamIds[C.streamId]=C.streamId);const Q=this._unsubscribe(C.isScreen,C.userId,A,!0);Q&&I.push(Q)}})}),Promise.all(I).then(()=>{})}async resumeAllSubscribedStream(A){if(this.logger.info("resumeAllSubscribedStream()","mediaType: %o",A),this._checkMediaType(A),$I(A)&&(this._pauseAllSubscribeState.audio=!1),gI(A)&&(this._pauseAllSubscribeState.video=!1),!this._room)return Promise.resolve();await this._triedResumeAllRemoteStreams(A,!1)}async _triedResumeAllRemoteStreams(A,I){if(!this._room||this._pauseAllSubscribeState.audio&&A===iA.AUDIO||this._pauseAllSubscribeState.video&&A===iA.VIDEO||this._pauseAllSubscribeState.video&&this._pauseAllSubscribeState.audio&&A===iA.AUDIO_AND_VIDEO)return Promise.resolve();const g=[],C=[...Object.keys(this._pauseAllSubscribeState.resumeAudioStreamIds)],Q=[...Object.keys(this._pauseAllSubscribeState.resumeVideoStreamIds)];return this._room.remoteStreams.forEach(B=>{Array.isArray(B)&&B.forEach(E=>{if(I&&E.isScreen)return;const i=this._pauseAllSubscribeState.resumeAudioStreamIds[E.streamId],e=this._pauseAllSubscribeState.resumeVideoStreamIds[E.streamId];if(i&&$I(A)||e&&gI(A)){const o=this._subscribe(E.isScreen,E.userId,A).then(()=>{i&&$I(A)&&delete this._pauseAllSubscribeState.resumeAudioStreamIds[E.streamId],e&&gI(A)&&delete this._pauseAllSubscribeState.resumeVideoStreamIds[E.streamId]});o&&g.push(o)}})}),Promise.all(g).then(()=>{var B;return(B=this._room)===null||B===void 0||B.remoteStreams.forEach(E=>{Array.isArray(E)&&E.forEach(i=>{this._updateAudioPlayerState(i),this._updateVideoPlayerState(i)})}),Promise.resolve()}).finally(()=>{var B;return(B=this._room)!==null&&B!==void 0&&B.config.tokenSubscribePrivilegeExpired&&(C.forEach(E=>{this._pauseAllSubscribeState.resumeAudioStreamIds[E]=E}),Q.forEach(E=>{this._pauseAllSubscribeState.resumeVideoStreamIds[E]=E})),Promise.resolve()})}async sendUserMessage(A,I){var g;dC(A),this._assertNotInRoom();const C=Date.now();return(g=this._room)===null||g===void 0||(g=g.sendUserMessage(A,I))===null||g===void 0?void 0:g.then(Q=>(this._messageStatisticsObserver.countP2PMessage(!0,A,!1,C,Q),Q.id)).catch(Q=>{throw this._messageStatisticsObserver.countP2PMessage(!1,A,!1,C,Q),Q})}async sendUserBinaryMessage(A,I){var g;dC(A),eD(I,"message"),this._assertNotInRoom();const C=Date.now();return(g=this._room)===null||g===void 0||(g=g.sendUserMessage(A,I))===null||g===void 0?void 0:g.then(Q=>(this._messageStatisticsObserver.countP2PMessage(!0,A,!0,C,Q),Q.id)).catch(Q=>{throw this._messageStatisticsObserver.countP2PMessage(!1,A,!0,C,Q),Q})}async sendRoomMessage(A){var I,g;this._assertNotInRoom();const C=(I=this._room)===null||I===void 0?void 0:I.config.roomId,Q=Date.now();return(g=this._room)===null||g===void 0||(g=g.sendRoomMessage(A))===null||g===void 0?void 0:g.then(B=>(this._messageStatisticsObserver.countRoomMessage(!0,C,!1,Q),B)).catch(B=>{throw this._messageStatisticsObserver.countRoomMessage(!1,C,!1,Q),B})}async sendRoomBinaryMessage(A){var I,g;this._assertNotInRoom();const C=(I=this._room)===null||I===void 0?void 0:I.config.roomId,Q=Date.now();return(g=this._room)===null||g===void 0||(g=g.sendRoomMessage(A,!0))===null||g===void 0?void 0:g.then(B=>(this._messageStatisticsObserver.countRoomMessage(!0,C,!0,Q),B)).catch(B=>{throw this._messageStatisticsObserver.countRoomMessage(!1,C,!0,Q),B})}async setAudioCaptureConfig(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.logger.info("setAudioCaptureConfig()","config: %o",A),delete A.deviceId,bw(A),await this._shouldUpdateAudioConf("setAudioCaptureConfig")&&this._ctx.audioProfileManager.updateConstraints(A)}async setVideoCaptureConfig(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return this.logger.info("setVideoCaptureConfig()","config: %o",A),this._setVideoCaptureConfig(A)}async _setVideoCaptureConfig(){var A;let I=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};delete I.deviceId,bw(I);const g=R(R({},this._ctx.videoProfile.getCaptureConfig()),I);return this._localVideoTrack&&await this._localVideoTrack.updateVideoCaptureConfig(g),this._ctx.videoProfile.setCaptureConfig(g),((A=this._localVideoTrack)===null||A===void 0?void 0:A.originTrack.getSettings())||{}}enableSimulcastMode(A){this.logger.info("enableSimulcastMode()","enabled: %o",A),this._ctx.videoProfile.checkSimulcastApiVersion("old");try{return this._ctx.videoProfile.setSimulcastMode(A?Li.VIDEO_ON_DEMAND:Li.VIDEO_ONLY_ONE,this._room),!0}catch{return!1}}async setLocalSimulcastMode(A,I){var g;this.logger.info("setLocalSimulcastMode()","mode: %o, config: %o",A,I),this._ctx.videoProfile.checkSimulcastApiVersion("new"),await this._ctx.videoProfile.setSimulcastMode(A,this._room),await this._ctx.videoProfile.setSubVideoEncodeConfig(I,this._room,this._localVideoTrack),await((g=this._room)===null||g===void 0?void 0:g.hasPublished())&&this._updatePublish()}async setVideoEncoderConfig(A){var I;if(this.logger.info("setVideoEncoderConfig()","descriptions: %o",A),await this._ctx.videoProfile.setVideoEncodeConfigPolyfill(A),this._localVideoTrack){const g=this._ctx.videoProfile.getContentHint();g&&this._localVideoTrack.setContentHint(g),await this._localVideoTrack.updateVideoCaptureConfig(this._ctx.videoProfile.getCaptureConfig())}this._updateDummyCaptureImage(F.STREAM_INDEX_MAIN),await((I=this._room)===null||I===void 0?void 0:I.hasPublished())&&this._updatePublish()}setVideoEncoderAutoConfigList(A){if(Array.isArray(A))return Ws(A).call(A,(I,g)=>I.maxKbps-g.maxKbps),cV(A)}async setScreenEncoderConfig(A){var I;this.logger.info("setScreenEncoderConfig()","description: %o",A),this._ctx.videoProfile.setScreenEncodeConfig(A),this._localScreenVideoTrack&&(tV!=="16.1"&&await this._localScreenVideoTrack.updateVideoCaptureConfig(A),A.contentHint&&this._localScreenVideoTrack.setContentHint(A.contentHint)),this._updateDummyCaptureImage(F.STREAM_INDEX_SCREEN),await((I=this._room)===null||I===void 0?void 0:I.hasScreenPublished())&&this._updateScreenPublish()}sendSEIMessage(A,I,g){if(this.logger.info("sendSEIMessage()","streamIdex: %o, message: %o, repeatCount: %o",A,I,g),!JE()&&!hv())return bi("Your browser does not support sending SEI"),!1;MA(A,"streamIndex",[F.STREAM_INDEX_MAIN,F.STREAM_INDEX_SCREEN]),qe(g,"repeatCount",0,30);const C=typeof I=="string"?new Uint8Array(Ag.str2ab(I)):I;if(!I.length)return this.logger.warn("sei message must not be empty"),!1;let Q;if(A===F.STREAM_INDEX_MAIN){var B,E;if(!((B=this._room)!==null&&B!==void 0&&(B=B.localStream)!==null&&B!==void 0&&B.pubAudio||(E=this._room)!==null&&E!==void 0&&(E=E.localStream)!==null&&E!==void 0&&E.pubVideo))return;Q=this._room.localStream}else{var i,e;if(!((i=this._room)!==null&&i!==void 0&&(i=i.localScreenStream)!==null&&i!==void 0&&i.pubAudio||(e=this._room)!==null&&e!==void 0&&(e=e.localScreenStream)!==null&&e!==void 0&&e.pubVideo))return;Q=this._room.localScreenStream}if(C.byteLength>4096)return void this.logger.warn("sei size must not bigger than 4KB");var o;EE||(o=this._room)===null||o===void 0||o.maybeFillBackFrame2Stream(Q);const t=KE();return Q.sendSEIMessage({content:C,uuid:t,repeatCount:g+1}),setTimeout(async()=>{if(Q&&await Q.revokeSEIMessage(t)){const s="timeout for sei message(id: ".concat(t,")");console.error("[RTC WebSDK] ".concat(s)),this.monitor.report("rtc_sdk_callback",{sdk_callback_name:"sendSEIMessageTimeout",message:s,error_code:400})}},lA("SEI_TIME_OUT")),t}setAudioVolumeIndicationInterval(A){this.logger.info("setAudioVolumeIndicationInterval()","interval %o: ",A),(typeof A!="number"||A<200)&&(A=200);let I=[];this._audioVolumeIndicationTimer&&clearInterval(this._audioVolumeIndicationTimer),this._audioVolumeIndicationTimer=setInterval(()=>{var g,C;I=[],(g=this._room)===null||g===void 0||g.remoteStreams.forEach((B,E)=>{var i;if(B.length===0)return;const e=B.find(t=>!t.isScreen),o=e==null||(i=e.audioTrack)===null||i===void 0?void 0:i.getAudioLevel();I.push({userId:E,volume:o||0})});const Q=(C=this._localAudioTrack)===null||C===void 0?void 0:C.getAudioLevel();I.push({userId:this._getUserId(),volume:Q||0}),this.safeEmit(X.onAudioVolumeIndication,{speakers:I})},A)}_sendActiveSpeaker(A,I){if(this._room&&this._room.remoteUsers.size>=1){const g=A[0],C=I.reduce((B,E)=>B&&B.audioPropertiesInfo.nonlinearVolume>E.audioPropertiesInfo.nonlinearVolume?B:E,void 0);let Q;if(Q=g?C?g.audioPropertiesInfo.nonlinearVolume>C.audioPropertiesInfo.nonlinearVolume?g:C:g:C,Q&&Q.audioPropertiesInfo.nonlinearVolume>-35){let B;B=Q.streamKey?this._room.remoteUsers.get(Q.streamKey.userId):this._room.config.userInfo,B&&this.safeEmit(X.onActiveSpeaker,{userId:B.userId,extraInfo:B.extraInfo})}}}enableAudioPropertiesReport(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.logger.info("enableAudioPropertiesReport()","config %o: ",A);const{enableInBackground:I=!0,localMainReportMode:g=Tr.NORMAL,audioReportMode:C=i9.MICROPHONE}=A;let{interval:Q=100}=A;this._stopAudioPropertiesReport(),Q<=0||(Q=Math.max(100,Q),this._audioPropertiesReportTimer=self.setInterval(()=>{if(!I&&document.visibilityState==="hidden")return;const B=[],E=this._audioDeviceManager.getRecordTrack()||this._localAudioTrack;if(E){var i;const e=(i=this._room)===null||i===void 0||(i=i.localStream)===null||i===void 0?void 0:i.audioHasPublish,o=!!this._audioDeviceManager.getRecordTrack(),t=E.getAudioLevel(C),s=Er(t),v={streamIndex:F.STREAM_INDEX_MAIN,audioPropertiesInfo:{linearVolume:t,nonlinearVolume:s}};if(e||o)B.push(v);else switch(g){case Tr.DISCONNECT:break;case Tr.RESET:v.audioPropertiesInfo.linearVolume=0,v.audioPropertiesInfo.nonlinearVolume=-127,B.push(v);break;case Tr.NORMAL:B.push(v);break;default:throw new U(m.INVALID_PARAMS,"invalid localMainReportMode: ".concat(g," in config"))}}if(this._localScreenAudioTrack){const e=this._localScreenAudioTrack.getAudioLevel();B.push({streamIndex:F.STREAM_INDEX_SCREEN,audioPropertiesInfo:{linearVolume:e,nonlinearVolume:Er(e)}})}if(this.safeEmit(X.onLocalAudioPropertiesReport,B),this._room){const e=[];this._room.config.isMultiChatMode()?this._room.getActiveSpeakerInMultiChatMode().forEach(o=>{var t,s;const v=255*o.audioLevel;e.push({streamKey:{userId:o.userId,streamIndex:F.STREAM_INDEX_MAIN,roomId:(t=(s=this._room)===null||s===void 0?void 0:s.config.roomId)!==null&&t!==void 0?t:""},audioPropertiesInfo:{linearVolume:v,nonlinearVolume:Er(v)}})}):this._room.remoteStreams.forEach((o,t)=>{o.forEach(s=>{if(s.audioTrack){var v,r;const n=s.audioTrack.getAudioLevel();e.push({streamKey:{userId:t,streamIndex:s.isScreen?F.STREAM_INDEX_SCREEN:F.STREAM_INDEX_MAIN,roomId:(v=(r=this._room)===null||r===void 0?void 0:r.config.roomId)!==null&&v!==void 0?v:""},audioPropertiesInfo:{linearVolume:n,nonlinearVolume:Er(n)}})}})}),this.safeEmit(X.onRemoteAudioPropertiesReport,e),this._sendActiveSpeaker(B,e.filter(o=>o.streamKey.streamIndex!==F.STREAM_INDEX_SCREEN))}},Q))}async setVideoSourceType(A,I){this.logger.print("setVideoSourceType()","index: %o, videoSourceType: %o",A,I),MA(A,"streamIndex",[F.STREAM_INDEX_MAIN,F.STREAM_INDEX_SCREEN]),MA(I,"VideoSourceType",[Wg.VIDEO_SOURCE_TYPE_EXTERNAL,Wg.VIDEO_SOURCE_TYPE_INTERNAL]);const g=A===F.STREAM_INDEX_MAIN?"video":"screenVideo";if(this._trackSourceType[g]!==I){if(this._trackSourceType[g]=I,this.logger.print("setVideoSourceType","set ".concat(g," source type to ").concat(I)),this._localVideoTrack&&A===F.STREAM_INDEX_MAIN){var C,Q,B;let v=!1;if(I===Wg.VIDEO_SOURCE_TYPE_EXTERNAL){v=!0;const n=this._ctx.extensionManager.getPluginByName(ws.PRE_PROCESSING,"RTCBeautyExtension");n&&n.emit("stop"),this._removeLocalTrackEvents(this._localVideoTrack),this._localVideoTrack.destroy()}(C=this._localVideoTrack)===null||C===void 0||C.destroy(),this._localVideoTrack=void 0;const r=(Q=this._room)===null||Q===void 0?void 0:Q.config.isAutoPublish;var E,i;v?(E=this._room)===null||E===void 0||(E=E.localStream)===null||E===void 0||(E=E.observer)===null||E===void 0||E.setEnableVideo(!1):(i=this._room)===null||i===void 0||(i=i.localStream)===null||i===void 0||(i=i.observer)===null||i===void 0||i.setPushVideo(!1),((B=this._room)!==null&&B!==void 0&&(B=B.localStream)!==null&&B!==void 0&&B.pubVideo||r)&&await this._updatePublish()}if(this._localScreenVideoTrack&&A===F.STREAM_INDEX_SCREEN){var e,o;let v=!1;var t,s;I===Wg.VIDEO_SOURCE_TYPE_EXTERNAL&&(v=!0,this._removeLocalTrackEvents(this._localScreenVideoTrack),this._localScreenVideoTrack.destroy()),(e=this._localScreenVideoTrack)===null||e===void 0||e.destroy(),this._localScreenVideoTrack=void 0,v?(t=this._room)===null||t===void 0||(t=t.localScreenStream)===null||t===void 0||(t=t.observer)===null||t===void 0||t.setEnableVideo(!1):(s=this._room)===null||s===void 0||(s=s.localScreenStream)===null||s===void 0||(s=s.observer)===null||s===void 0||s.setPushVideo(!1),(o=this._room)!==null&&o!==void 0&&(o=o.localScreenStream)!==null&&o!==void 0&&o.pubVideo&&await this._updateScreenPublish()}}}async setExternalVideoTrack(A,I){if(this.logger.print("setExternalVideoTrack()","index: %o, track: %o",A,I),MA(A,"streamIndex",[F.STREAM_INDEX_MAIN,F.STREAM_INDEX_SCREEN]),nF(I),A===F.STREAM_INDEX_MAIN){var g,C;if(this._trackSourceType.video!==Wg.VIDEO_SOURCE_TYPE_EXTERNAL)throw new U(m.STREAM_TYPE_NOT_MATCH,"setVideoSourceType as external first");this._localVideoTrack=await n9A(this._ctx,I);const E=this._ctx.videoProfile.getContentHint();!I.contentHint&&E&&this._localVideoTrack.setContentHint(E),this._initLocalTrackEvents(this._localVideoTrack),this._localVideoPlayerConfig[F.STREAM_INDEX_MAIN].forEach(e=>{var o,t;(o=this._localVideoTrack)===null||o===void 0||o.setPlayer(e,this._mirrorType,(t=this._config)===null||t===void 0?void 0:t.autoPlayPolicy,this._initPlayerEvents.bind(this))});const i=(g=this._room)===null||g===void 0?void 0:g.config.isAutoPublish;((C=this._room)!==null&&C!==void 0&&(C=C.localStream)!==null&&C!==void 0&&C.pubVideo||i)&&await this._updatePublish()}if(A===F.STREAM_INDEX_SCREEN){var Q,B;if(this._trackSourceType.screenVideo!==Wg.VIDEO_SOURCE_TYPE_EXTERNAL)throw new U(m.STREAM_TYPE_NOT_MATCH,"setVideoSourceType as external first");this._localScreenVideoTrack=await d9A(this._ctx,I),this._initLocalTrackEvents(this._localScreenVideoTrack,!0),this._localVideoPlayerConfig[F.STREAM_INDEX_SCREEN].forEach(E=>{var i,e;(i=this._localScreenVideoTrack)===null||i===void 0||i.setPlayer(E,this._mirrorType,(e=this._config)===null||e===void 0?void 0:e.autoPlayPolicy,this._initPlayerEvents.bind(this))}),(Q=this._room)===null||Q===void 0||(Q=Q.localScreenStream)===null||Q===void 0||(Q=Q.observer)===null||Q===void 0||Q.setPushVideo(!0),(B=this._room)!==null&&B!==void 0&&(B=B.localScreenStream)!==null&&B!==void 0&&B.pubVideo&&await this._updateScreenPublish()}}async setAudioSourceType(A,I){this.logger.print("setAudioSourceType()","index: %o, audioSourceType: %o",A,I),MA(A,"streamIndex",[F.STREAM_INDEX_MAIN,F.STREAM_INDEX_SCREEN]),MA(I,"audioSourceType",[VC.AUDIO_SOURCE_TYPE_EXTERNAL,VC.AUDIO_SOURCE_TYPE_INTERNAL]);const g=A===F.STREAM_INDEX_MAIN?"audio":"screenAudio";if(this._trackSourceType[g]!==I){if(this._trackSourceType[g]=I,this.logger.print("setVideoSourceType","set ".concat(g," source type to ").concat(I)),this._localAudioTrack&&A===F.STREAM_INDEX_MAIN){var C,Q;let t=!1;this._trackSourceType.audio===VC.AUDIO_SOURCE_TYPE_EXTERNAL&&(t=!0,this._removeLocalTrackEvents(this._localAudioTrack),this._localAudioTrack.destroy()),this._localAudioTrack=void 0;const s=(C=this._room)===null||C===void 0?void 0:C.config.isAutoPublish;var B,E;t?(B=this._room)===null||B===void 0||(B=B.localStream)===null||B===void 0||(B=B.observer)===null||B===void 0||B.setEnableAudio(!1):(E=this._room)===null||E===void 0||(E=E.localStream)===null||E===void 0||(E=E.observer)===null||E===void 0||E.setPushAudio(!1),((Q=this._room)!==null&&Q!==void 0&&(Q=Q.localStream)!==null&&Q!==void 0&&Q.pubAudio||s)&&await this._updatePublish()}if(this._localScreenAudioTrack&&A===F.STREAM_INDEX_SCREEN){var i;let t=!1;var e,o;this._trackSourceType.audio===VC.AUDIO_SOURCE_TYPE_EXTERNAL&&(t=!0,this._removeLocalTrackEvents(this._localScreenAudioTrack),this._localScreenAudioTrack.destroy()),this._localScreenAudioTrack=void 0,t?(e=this._room)===null||e===void 0||(e=e.localScreenStream)===null||e===void 0||(e=e.observer)===null||e===void 0||e.setEnableAudio(!1):(o=this._room)===null||o===void 0||(o=o.localScreenStream)===null||o===void 0||(o=o.observer)===null||o===void 0||o.setPushAudio(!1),(i=this._room)!==null&&i!==void 0&&(i=i.localScreenStream)!==null&&i!==void 0&&i.pubAudio&&await this._updateScreenPublish()}}}async setExternalAudioTrack(A,I){if(this.logger.print("setExternalAudioTrack()","index: %o, track: %o",A,I),MA(A,"streamIndex",[F.STREAM_INDEX_MAIN,F.STREAM_INDEX_SCREEN]),nF(I),A===F.STREAM_INDEX_MAIN){var g,C,Q;if(this._trackSourceType.audio!==VC.AUDIO_SOURCE_TYPE_EXTERNAL)throw new U(m.STREAM_TYPE_NOT_MATCH,"setAudioSourceType as external first");this._localAudioTrack=await l9A(this._ctx,I),this._localAudioTrack.setVolume(this._localAudioVolume),this._initLocalTrackEvents(this._localAudioTrack);const i=this._ctx._localAudioTrackDumpConfig[F.STREAM_INDEX_MAIN];i.frameSize&&i.callback&&this._localAudioTrack.setDataFetcher(i.frameSize,i.callback);const{position:e,volume:o}=this._ctx.earMonitorSettings[F.STREAM_INDEX_MAIN];e!==QC.NONE&&(this.setEarMonitorMode(F.STREAM_INDEX_MAIN,e),this.setEarMonitorVolume(F.STREAM_INDEX_MAIN,o));const t=(g=this._room)===null||g===void 0?void 0:g.config.isAutoPublish;(C=this._room)===null||C===void 0||(C=C.localStream)===null||C===void 0||(C=C.observer)===null||C===void 0||C.setPushAudio(!0),((Q=this._room)!==null&&Q!==void 0&&(Q=Q.localStream)!==null&&Q!==void 0&&Q.pubAudio||t)&&await this._updatePublish()}if(A===F.STREAM_INDEX_SCREEN){var B,E;if(this._trackSourceType.screenAudio!==VC.AUDIO_SOURCE_TYPE_EXTERNAL)throw new U(m.STREAM_TYPE_NOT_MATCH,"setAudioSourceType as external first");this._localScreenAudioTrack=await h9A(this._ctx,I),this._localScreenAudioTrack.setVolume(this._localScreenAudioVolume),this._initLocalTrackEvents(this._localScreenAudioTrack);const i=this._ctx._localAudioTrackDumpConfig[F.STREAM_INDEX_SCREEN];i.frameSize&&i.callback&&this._localScreenAudioTrack.setDataFetcher(i.frameSize,i.callback);const{position:e,volume:o}=this._ctx.earMonitorSettings[F.STREAM_INDEX_SCREEN];e!==QC.NONE&&(this.setEarMonitorMode(F.STREAM_INDEX_SCREEN,e),this.setEarMonitorVolume(F.STREAM_INDEX_SCREEN,o)),(B=this._room)===null||B===void 0||(B=B.localScreenStream)===null||B===void 0||(B=B.observer)===null||B===void 0||B.setPushAudio(!0),(E=this._room)!==null&&E!==void 0&&(E=E.localScreenStream)!==null&&E!==void 0&&E.pubAudio&&await this._updateScreenPublish()}}async login(A,I){return this.logger.info("login()","token: %o, userInfo: %o",A,I),kQ(A)||OA(A,"token"),dC(I),this._rtmClient.login(A,I)}async logout(){return this.logger.info("logout()"),this._rtmClient.logout()}async updateLoginToken(A){return this.logger.info("updateLoginToken()","token: %o",A),kQ(A)||OA(A,"token"),this._rtmClient.updateLoginToken(A)}async getPeerOnlineStatus(A){return this.logger.info("getPeerOnlineStatus()","userId: %o",A),dC(A),this._rtmClient.getPeerOnlineStatus(A)}async sendUserMessageOutsideRoom(A,I){dC(A);const g=Date.now();return this._rtmClient.sendUserMessageOutsideRoom(A,I).then(C=>(this._messageStatisticsObserver.countUserMessageOutsideRoom(!0,A,!1,g,C),C.id)).catch(C=>{throw this._messageStatisticsObserver.countUserMessageOutsideRoom(!1,A,!1,g,C),C})}async sendUserBinaryMessageOutsideRoom(A,I){dC(A),eD(I,"message");const g=Date.now();return this._rtmClient.sendUserMessageOutsideRoom(A,I).then(C=>(this._messageStatisticsObserver.countUserMessageOutsideRoom(!0,A,!0,g,C),C.id)).catch(C=>{throw this._messageStatisticsObserver.countUserMessageOutsideRoom(!1,A,!0,g,C),C})}async setServerParams(A,I){return this.logger.info("setServerParams()","signature: %o, url: %0",A,I),this._rtmClient.setServerParams(A,I)}async sendServerMessage(A){OA(A,"message");const I=Date.now();return this._rtmClient.sendServerMessage(A).then(g=>{this._messageStatisticsObserver.countServerMessage(!0,!1,I,g)}).catch(g=>{throw this._messageStatisticsObserver.countServerMessage(!1,!1,I,g),g})}async sendServerBinaryMessage(A){eD(A,"message");const I=Date.now();return this._rtmClient.sendServerMessage(A).then(g=>{this._messageStatisticsObserver.countServerMessage(!0,!0,I,g)}).catch(g=>{throw this._messageStatisticsObserver.countServerMessage(!1,!0,I,g),g})}startCloudProxy(A){if(this._room)throw new U(m.START_CLOUD_PROXY_AFTER_JOIN,"[startCloudProxy] should be invoke before join room ");if(this.logger.info("startCloudProxy()",A),OA(A.logProxy,"logProxy"),Array.isArray(A.accessProxy))for(const I of A.accessProxy)OA(I,"accessProxy");else OA(A.accessProxy,"accessProxy");OA(A.configProxy,"configProxy"),this._originIceConfigRequestUrls=lA("ICE_CONFIG_REQUEST_URLS"),this._originLogServerUrl=lA("LOG_SERVER_URL"),this._originConfigServerUrls=lA("CONFIG_REQUEST_DOMAINS"),jC("ICE_CONFIG_REQUEST_URLS",A.accessProxy),jC("LOG_SERVER_URL",vaA(A.logProxy)),jC("CONFIG_REQUEST_DOMAINS",[A.configProxy]),$A.clearAccessNode(this._appId),$A.clearAccessUrls(),this._ctx.useCloudProxy=!0}stopCloudProxy(){var A,I,g;if(this._room)throw new U(m.STOP_CLOUD_PROXY_BEFORE_LEAVE,"[stopCloudProxy] should be invoke after leave room ");this.logger.info("stopCloudProxy()");const C=(A=this._originIceConfigRequestUrls)===null||A===void 0?void 0:A.map(Q=>Q.replace("https://","").replace("/dispatch/v1/AccessInfo?Action=GetAccessInfo",""));jC("ICE_CONFIG_REQUEST_URLS",C??[]),jC("LOG_SERVER_URL",(I=this._originLogServerUrl)!==null&&I!==void 0?I:""),jC("CONFIG_REQUEST_DOMAINS",(g=this._originConfigServerUrls)!==null&&g!==void 0?g:[]),$A.clearAccessNode(this._appId),$A.clearAccessUrls(),this._ctx.useCloudProxy=!1,this._startCloudProxyTimestamp=void 0}async startPushPublicStream(A,I){var g,C;if(this.logger.print("startPushPublicStream()","publicStreamId: %o, publicStreamParam: %o",A,I),sa(A),this._assertNotInRoom(),this._publicStreamIds.get(A))throw new U(m.REPEAT_PUSH,"repeat push public media stream");this._room&&((C=I.layout)===null||C===void 0||(C=C.regions)===null||C===void 0||C.map(B=>{var E;B.roomId=(E=this._room)===null||E===void 0?void 0:E.config.roomId}));const Q=dF(A,"started",I);return(g=this._room)===null||g===void 0||(g=g.publicStreamControlMessage(Q))===null||g===void 0?void 0:g.then(()=>{this._publicStreamIds.set(A,A)})}async updatePublicStreamParam(A,I){var g;this.logger.print("startPushPublicStream()","publicStreamId: %o, publicStreamParam: %o",A,I),sa(A),this._assertNotInRoom();const C=dF(A,"layoutChanged",I);return(g=this._room)===null||g===void 0?void 0:g.publicStreamControlMessage(C)}async stopPushPublicStream(A){var I;return this.logger.print("startPushPublicStream()","publicStreamId: %o",A),sa(A),this._assertNotInRoom(),(I=this._room)===null||I===void 0?void 0:I.publicStreamControlMessage({type:"publicstream",action:"stopped",publicStreamID:A}).then(()=>{this._publicStreamIds.delete(A)})}async startPlayPublicStream(A){await this._wtnStreamManager.startPlayWTN(null,A,!1,!1)}async stopPlayPublicStream(A){await this._wtnStreamManager.stopPlayWTN(A)}async setAudioProfile(A){this.logger.info("setAudioProfile()","profile: %o",A),await this._shouldUpdateAudioConf("setAudioProfile")&&this._ctx.audioProfileManager.setAudioProfile(A)}async setAudioEncodeMaxBitrate(A){if(this.logger.print("setAudioEncodeMaxBitrate()",A),qe(A,"maxBitrate",6,256),this._ctx.audioProfileManager.setCustomMaxBitrate(A),this._ctx.audioProfileManager.customMaxBitrate){var I,g,C,Q;if(mI&&((I=this._room)!==null&&I!==void 0&&(I=I.localStream)!==null&&I!==void 0&&I.pubAudio||(g=this._room)!==null&&g!==void 0&&(g=g.localScreenStream)!==null&&g!==void 0&&g.pubAudio))throw new U(m.NOT_SUPPORTED,"Your browser does not support set audio encode maxBitrate dynamically.");await((C=this._room)===null||C===void 0?void 0:C.setAudioEncodeMaxBitrate(F.STREAM_INDEX_MAIN,A)),await((Q=this._room)===null||Q===void 0?void 0:Q.setAudioEncodeMaxBitrate(F.STREAM_INDEX_SCREEN,A))}}setPublicStreamVideoPlayer(A,I){return this._wtnStreamManager.setWTNRemoteVideoPlayer(A,I)}async setDummyCaptureImagePath(A,I){return new Promise((g,C)=>{OA(I,"filePath");const Q=new Image;Q.crossOrigin="anonymous",Q.src=I,Q.onload=()=>{A===F.STREAM_INDEX_MAIN?this._dummyMainImage=Q:this._dummyScreenImage=Q;try{this._updateDummyCaptureImage(A),g()}catch(B){C(new U(m.UNEXPECTED_ERROR,B.message))}},Q.onerror=()=>{C(new U(m.UNEXPECTED_ERROR,"Load image error"))}})}_updateDummyCaptureImage(A){let I,g;if(A===F.STREAM_INDEX_MAIN?(I=this._dummyMainImage,g=this._ctx.videoProfile.getVideoEncodeConfig()[0]):(I=this._dummyScreenImage,g=this._ctx.videoProfile.getScreenEncodeConfig()),!I)return;const C=document.createElement("canvas"),Q=C.getContext("2d"),B=jA(g.width),E=jA(g.height);if(!Q)throw new U(m.UNEXPECTED_ERROR,"Not support canvas");let i,e;!B||!E||I.width<=B&&I.height<=E?(i=I.width,e=I.height):(i=Math.min(B,I.width*E/I.height),e=Math.min(E,I.height*B/I.width)),C.width=i,C.height=e,Q.drawImage(I,0,0,I.width,I.height,0,0,i,e);const o=window.setInterval(()=>{I&&Q.drawImage(I,0,0,I.width,I.height,0,0,i,e)},200);A===F.STREAM_INDEX_MAIN?(clearInterval(this._dummyMainTimer),this._dummyMainTimer=o):(clearInterval(this._dummyScreenTimer),this._dummyScreenTimer=o);const t=C.captureStream(5).getVideoTracks()[0];var s,v;A===F.STREAM_INDEX_MAIN?(this._localImgVideoTrack=t,(s=this._localVideoTrack)!==null&&s!==void 0&&s.dummy&&this._localVideoTrack.setTrack(this._localImgVideoTrack)):(this._localImgScreenTrack=t,(v=this._localScreenVideoTrack)!==null&&v!==void 0&&v.dummy&&this._localScreenVideoTrack.setTrack(this._localImgScreenTrack))}_addListenExtensionEvent(A){A.on("re-capture-audio",()=>{this._localAudioTrack&&this.stopAudioCapture().then(()=>{this.startAudioCapture()})}),A.on("re-capture-video",()=>{this._localVideoTrack&&!this._localVideoTrack.dummy&&this.stopVideoCapture().then(()=>{this.startVideoCapture()})}),A.on("reset-video-effect",async(I,g)=>{if(this._localVideoTrack&&!this._localVideoTrack.dummy){var C;this._localVideoTrack&&this._removeLocalTrackEvents(this._localVideoTrack);try{await this._localVideoTrack.generatePreProcessingTrack()}catch(Q){g(Q)}this._initLocalTrackEvents(this._localVideoTrack),this._localVideoTrack.stopAll(),this._localVideoTrack.playAll(),this.safeEmit(X.onLocalStreamTrackChangedByExtension,{streamIndex:F.STREAM_INDEX_MAIN,type:"video"}),I(),(C=this._room)!==null&&C!==void 0&&(C=C.localStream)!==null&&C!==void 0&&C.pubVideo&&await this._updatePublish(),this._wtnStreamManager._updatePushTrack()}I()})}async registerExtension(A){var I,g,C;A.monitor=this.monitor,A.logger=new uA(A.name,0,this.id);try{if(!await A.isSupported())throw new Error("This extension is not supported.")}catch{throw new Error("This extension is not supported.")}lA("VERSION")!==A.version&&(bi("This extension version is ".concat(A.version,", but the sdk version is ").concat(lA("VERSION"),".")),this.monitor.report("rtc_error",{message:"This extension version is ".concat(A.version,", but the sdk version is ").concat(lA("VERSION"),"."),error_code:-1}));let Q={};A.name==="RTCAIAnsExtension"&&(Q={overloadThreshold:lA("AINR_OVERLOAD_THRESHOLD"),enableCache:lA("AINR_ENABLE_DUMP"),urls:lA("AINR_URLS"),cacheTime:lA("AINR_CACHE_TIME"),dumpTime:lA("AINR_DUMP_TIME")}),Q=UaA(Q),await A.init(Q),this._ctx.extensionManager.register(A),this._addListenExtensionEvent(A),(I=this._localAudioTrack)===null||I===void 0||I.generatePreProcessingTrack(),(g=this._localVideoTrack)===null||g===void 0||g.generatePreProcessingTrack(),(C=this._localScreenAudioTrack)===null||C===void 0||C.generatePreProcessingTrack()}defaultTranscoding(){return JSON.parse(JSON.stringify(Pt.getDefaultValue()))}async _updatePublish(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},I=arguments.length>1&&arguments[1]!==void 0&&arguments[1];if(this.logger.info("_updatePublish()","config: %o",A),A=R(R({},{mediaType:void 0,invokeByJoinRoom:!1,pubState:wC.PUB}),A),!this._ctx.visibility)throw new U(m.NO_PUBLISH_PERMISSION,"no publish permission");const g=await this._pubLock.lock();if(this._room&&this._ctx.signalingManager.isConnected())try{await this._room.publish(this._localVideoTrack,this._localAudioTrack,A.mediaType,A.pubState,A.invokeByJoinRoom)}catch(C){throw C instanceof U?(C.code===m.TOKEN_NO_PUBLISH_PERMISSION&&this._room.config.setTokenPublishPrivilegeExpired(!0),C):new U(m.UNEXPECTED_ERROR,"unexpected error",C)}finally{g()}else if(g(),I)throw new U(m.NOT_CONNECTED_YET,"not connected")}async startAudioPlaybackDeviceTest(A,I){return this.logger.print("startAudioPlaybackDeviceTest()","filePath: %o, indicationInterval: %o",A,I),OA(A,"filePath"),qe(I,"indicationInterval"),await this._audioDeviceManager.startAudioPlaybackDeviceTest(A,I)}stopAudioPlaybackDeviceTest(){this.logger.info("stopAudioPlaybackDeviceTest()"),this._audioDeviceManager.stopAudioPlaybackDeviceTest()}async startAudioDeviceRecordTest(A,I){this.logger.print("startAudioDeviceRecordTest()","indicationInterval: %o",A),qe(A,"indicationInterval"),await this._audioDeviceManager.startAudioDeviceRecordTest(A,I,this._localAudioVolume)}stopAudioDeviceRecordAndPlayTest(){this.logger.info("stopAudioDeviceRecordAndPlayTest()"),this._audioDeviceManager.stopAudioDeviceRecordAndPlayTest()}stopAudioDevicePlayTest(){this.logger.info("stopAudioDevicePlayTest()"),this._audioDeviceManager.stopAudioDevicePlayTest()}setRemoteUserPriority(A,I){var g;this.logger.print("setRemoteUserPriority()","userId: %o, priority: %o",A,I);try{dC(A),MA(I,"priority",[xn.HIGH,xn.MEDIUM,xn.LOW])}catch(C){return console.warn(C),!1}return this._ctx.userPriority.set(A,I),(g=this._room)===null||g===void 0||g.updateRemoteUserPriority(A),!0}async takeLocalSnapshot(A){this.logger.print("takeLocalSnapshot()","streamIndex: %o",A),MA(A,"streamIndex",[F.STREAM_INDEX_MAIN,F.STREAM_INDEX_SCREEN]);const I=A===F.STREAM_INDEX_MAIN?this.localVideoTrack:this.localScreenVideoTrack;if(!I)throw new U(m.INVOKED_BEFORE_CAPTURE,"capture first");return I.snapshot()}async takeRemoteSnapshot(A,I){var g;this.logger.print("takeRemoteSnapshot()","id: %o, streamIndex: %o",A,I),OA(A,"id"),MA(I,"streamIndex",[F.STREAM_INDEX_MAIN,F.STREAM_INDEX_SCREEN]);const C=((g=this._room)===null||g===void 0||(g=g.remoteStreams.get(A))===null||g===void 0||(g=g.find(Q=>Q.isScreen===(I===F.STREAM_INDEX_SCREEN)))===null||g===void 0?void 0:g.videoTrack)||this._wtnStreamManager.__getPublicStreamTrack(A,"video");if(!C)throw new U(m.STREAM_NOT_EXIST,"stream not exist");return C.snapshot()}setSubscribeFallbackOption(A){this.logger.info("setSubscribeFallbackOption()","option: %o",A);try{MA(A,"option",[Hn.DISABLE,Hn.VIDEO_STREAM_LOW,Hn.AUDIO_ONLY])}catch(I){return console.warn(I),!1}return!this._room&&(this._ctx.subscribeFallbackOption=A,!0)}getLocalStreamTrack(A,I){let g,C;if(A===F.STREAM_INDEX_MAIN?(g=I==="video"?this.localVideoTrack:this.localAudioTrack,C=()=>{var E;return(E=this._room)===null||E===void 0?void 0:E.localStream}):(g=I==="video"?this.localScreenVideoTrack:this.localScreenAudioTrack,C=()=>{var E;return(E=this._room)===null||E===void 0?void 0:E.localScreenStream}),!g)return;const Q=g instanceof Do&&g.mixedAudioTrack?g.mixedAudioTrack:g.preprocessingTrack;if(!Q)return;const B=C();return this._reportMsTrackEvent(Q,(B==null?void 0:B.stream.id)||"local"),Q}getRemoteStreamTrack(A,I,g){var C;let Q;const B=((C=this._room)===null||C===void 0?void 0:C.remoteStreams.get(A))||[];if(B==null||!B.length)return;let E;var i,e,o,t;if(I===F.STREAM_INDEX_MAIN?(E=B.find(r=>!r.isScreen),Q=g==="video"?(i=E)===null||i===void 0?void 0:i.videoTrack:(e=E)===null||e===void 0?void 0:e.audioTrack):(E=B.find(r=>r.isScreen),Q=g==="video"?(o=E)===null||o===void 0?void 0:o.videoTrack:(t=E)===null||t===void 0?void 0:t.audioTrack),!Q)return;const s=Q.preprocessingTrack;if(!s||!E)return;const{streamId:v}=E;return this._reportMsTrackEvent(s,v),s}getPublicStreamTrack(A,I){const g=this._wtnStreamManager.__getPublicStreamTrack(A,I),C=g==null?void 0:g.preprocessingTrack;if(C)return C?(this._reportMsTrackEvent(C,A),C):void 0}setRemoteStreamRenderSync(A){return!this._room&&(this._ctx.avSync=!!A,!0)}setJoinRoomParams(A){A&&(this._ctx.joinRoomParams=A)}async setAudioSelectionConfig(A){MA(A,"audioSelectionPriority",[On.DEFAULT,On.HIGH]),this._ctx.mediaParams||(this._ctx.mediaParams={}),this._ctx.mediaParams.audioSelectionConfig={isHighPriority:A===On.HIGH},this._room&&await this._room.updateMediaParams(this._ctx.mediaParams)}setCaptureVolume(A,I){MA(A,"streamIndex",[F.STREAM_INDEX_MAIN,F.STREAM_INDEX_SCREEN]),I=Cl(I,"volume",0,400);var g,C,Q,B,E;A===F.STREAM_INDEX_SCREEN?((g=this._localScreenAudioTrack)===null||g===void 0||g.once("needReplaceTrack",()=>{var i;(i=this._room)===null||i===void 0||i.updatePubScreenTrack()}),(C=this._localScreenAudioTrack)===null||C===void 0||C.setVolume(I),this._localScreenAudioVolume=I):((Q=this._localAudioTrack)===null||Q===void 0||Q.once("needReplaceTrack",()=>{var i;(i=this._room)===null||i===void 0||i.updatePubTrack()}),(B=this._localAudioTrack)===null||B===void 0||B.setVolume(I),(E=this._audioDeviceManager.audioTrack)===null||E===void 0||E.setVolume(I),this._localAudioVolume=I)}setPlaybackVolume(A,I,g){var C,Q,B;if(dC(A),MA(I,"streamIndex",[F.STREAM_INDEX_MAIN,F.STREAM_INDEX_SCREEN]),g=Cl(g,"volume",0,400),(C=this._room)!==null&&C!==void 0&&C.config.isMultiChatMode())return void bi("setPlaybackVolume is not supported in Conference mode");const E=I===F.STREAM_INDEX_SCREEN;E?this._remoteScreenAudioVolume.set(A,g):this._remoteAudioVolume.set(A,g);const i=(Q=this._room)===null||Q===void 0||(Q=Q.remoteStreams.get(A))===null||Q===void 0?void 0:Q.find(e=>e.isScreen===E);i==null||(B=i.audioTrack)===null||B===void 0||B.setVolume(g)}setPublicStreamVolume(A,I){this._wtnStreamManager.setWTNRemoteAudioPlaybackVolume(A,I)}async startForwardStreamToRooms(A){return A.forEach(I=>{pc(I.roomId)}),this._assertNotInRoom(),await this._room.startForwardStream2Rooms(A)}async updateForwardStreamToRooms(A){return A.forEach(I=>{pc(I.roomId)}),this._assertNotInRoom(),await this._room.updateForwardStream2Rooms(A)}async stopForwardStreamToRooms(){return this._assertNotInRoom(),await this._room.stopForwardStream2Rooms()}async pauseForwardStreamToAllRooms(){return this._assertNotInRoom(),await this._room.pauseForwardStream2AllRooms()}async resumeForwardStreamToAllRooms(){return this._assertNotInRoom(),await this._room.resumeForwardStream2AllRooms()}async ambulance(){const A=await HuA(this),I=JSON.stringify(A);return this.monitor.reportLongString("ambulance",I),A}async setEarMonitorMode(A,I){this.logger.info("setEarMonitorMode()","streamIndex: %s, position: %s",A,I),MA(A,"streamIndex",[F.STREAM_INDEX_MAIN,F.STREAM_INDEX_SCREEN]),MA(I,"position",[QC.NONE,QC.AFTER_CAPTURE,QC.AFTER_PROCESS]),this._ctx.earMonitorSettings[A].position=I;const g=A===F.STREAM_INDEX_MAIN?this.localAudioTrack:A===F.STREAM_INDEX_SCREEN?this.localScreenAudioTrack:void 0;if(g)return I!==QC.NONE?g.play(I):g.stop();this.logger.warn("setEarMonitorMode()","local audio track not exist")}setEarMonitorVolume(A,I){this.logger.info("setEarMonitorVolume()","streamIndex: %s, volume: %s",A,I),MA(A,"streamIndex",[F.STREAM_INDEX_MAIN,F.STREAM_INDEX_SCREEN]),I=Cl(I,"volume",0,400),this._ctx.earMonitorSettings[A].volume=I;const g=A===F.STREAM_INDEX_MAIN?this.localAudioTrack:A===F.STREAM_INDEX_SCREEN?this.localScreenAudioTrack:void 0;if(g)return g.setPlaybackVolume(I);this.logger.warn("setEarMonitorVolume()","local audio track not exist")}setUserInfo(A,I){pc(A),dC(I),this.monitor.set({room_id:A,user_id:I})}_reportMsTrackEvent(A,I){if(!A.hookStop){A.hookStop=!0;const g=A.stop;A.stop=()=>{AI(this.id,"stop",I,0,I),g.call(A)}}}async _updateScreenPublish(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(this.logger.info("_updateScreenPublish()"),A=R(R({},{mediaType:void 0,pubState:wC.PUB}),A),!this._ctx.visibility)throw new U(m.NO_PUBLISH_PERMISSION,"no publish permission");const I=await this._pubLock.lock();if(this._room&&this._ctx.signalingManager.isConnected())try{await this._room.publishScreen(this._localScreenVideoTrack,this._localScreenAudioTrack,A.mediaType,A.pubState)}catch(g){throw g instanceof U?g:new U(m.UNEXPECTED_ERROR,"unexpected error",g)}finally{I()}else I()}_updateAudioPlayerState(A){this.logger.info("_updateAudioPlayerState()");const{userId:I,isScreen:g,isPublic:C}=A;if(A.audioTrack&&A.attributes.audiostream&&A.subAudio){var Q,B,E;if(!A.audioTrack.havePlayer()){var i,e;const r=new FR(this.id,I,{muted:((i=this._config)===null||i===void 0?void 0:i.autoPlayPolicy)===Ae.VIDEO_ONLY||((e=this._config)===null||e===void 0?void 0:e.autoPlayPolicy)===Ae.PLAY_MANUALLY,isScreen:!C&&g});A.audioTrack.setPlayer(r),A.audioTrack.bindPlayerEvent(this._initPlayerEvents.bind(this));const n=this._audioDeviceManager.getSinkId();n&&A.audioTrack.setPlaybackDevice(n)}A.audioTrack.play();const v=C?(Q=this._ctx.publicAudioVolume.get(I))!==null&&Q!==void 0?Q:100:g?(B=this._remoteScreenAudioVolume.get(I))!==null&&B!==void 0?B:100:(E=this._remoteAudioVolume.get(I))!==null&&E!==void 0?E:100;if(A.audioTrack.setVolume(v),CQ&&v9){var o,t;const r=(o=(t=this._room)===null||t===void 0?void 0:t.remoteStreams)!==null&&o!==void 0?o:new Map;buA(r)}}else{var s;(s=A.audioTrack)===null||s===void 0||s.stop()}}_updateVideoPlayerState(A){if(this.logger.info("_updateVideoPlayerState()"),A.videoTrack){const g=A.isPublic?this._wtnStreamManager._publicVideoPlayerConfig:this._remoteVideoPlayerConfig[A.isScreen?F.STREAM_INDEX_SCREEN:F.STREAM_INDEX_MAIN].get(A.userId);if(g)for(const[,C]of g){var I;A.videoTrack.setPlayer(this.id,C,(I=this._config)===null||I===void 0?void 0:I.autoPlayPolicy,this._initPlayerEvents.bind(this))}}}get _localVideoTrack(){return this._ctx.localVideoTrack}get _localAudioTrack(){return this._ctx.localAudioTrack}set _localVideoTrack(A){this._ctx.localVideoTrack=A}set _localAudioTrack(A){this._ctx.localAudioTrack=A}async _onAddStream(A){const I=A.stream,{localaudio:g,audiostream:C,localvideo:Q,videostream:B}=I.attributes;let E=OC.NONE;C&&(E|=iA.AUDIO),B&&(E|=iA.VIDEO),E&&(await new Promise(i=>setTimeout(i)),I.isScreen?this.safeEmit(X.onUserPublishScreen,{userId:I.userId,mediaType:E}):(this.safeEmit(X.onUserPublishStream,{userId:I.userId,mediaType:E,videoStreamDescriptions:I.attributes.videoDescriptions}),this._handleAutoSubscribe(I,!0)),this.safeEmit("onAddStream",{userId:I.userId,mediaType:E,isScreen:!!I.isScreen}),I.isScreen||(g&&this.safeEmit(X.onUserStartAudioCapture,{userId:I.userId}),Q&&this.safeEmit(X.onUserStartVideoCapture,{userId:I.userId})))}_handleAutoSubscribe(A,I){var g,C;let Q=OC.NONE;if((g=this._room)!==null&&g!==void 0&&g.config.isAutoSubscribeAudio&&(Q|=iA.AUDIO),(C=this._room)!==null&&C!==void 0&&C.config.isAutoSubscribeVideo&&(Q|=iA.VIDEO),Q){var B,E,i;I&&$I(Q)&&((E=A.observer)===null||E===void 0||E.setAutoSubscribeAudio(!0)),I&&gI(Q)&&((i=A.observer)===null||i===void 0||i.setAutoSubscribeVideo(!0)),(B=this._room)!==null&&B!==void 0&&B.config.tokenSubscribePrivilegeExpired?($I(Q)&&(this._pauseAllSubscribeState.resumeAudioStreamIds[A.streamId]=A.streamId),gI(Q)&&(this._pauseAllSubscribeState.resumeVideoStreamIds[A.streamId]=A.streamId)):this._subscribe(!1,A.userId,Q)}}_onRemoveStream(A){var I;const g=A.stream,C=(I=$uA[A.reason])!==null&&I!==void 0?I:_B.STREAM_REMOVE_REASON_OTHER,Q=g.isScreen?X.onUserUnpublishScreen:X.onUserUnpublishStream;let B=OC.NONE;g.attributes.audiostream&&(B|=iA.AUDIO),g.attributes.videostream&&(B|=iA.VIDEO),B!==OC.NONE&&(this.safeEmit(Q,{userId:g.userId,mediaType:B,reason:C}),this.safeEmit("onRemoveStream",{userId:g.userId,isScreen:g.isScreen})),delete this._pauseAllSubscribeState.resumeAudioStreamIds[g.streamId],delete this._pauseAllSubscribeState.resumeVideoStreamIds[g.streamId],typeof A.callback=="function"&&A.callback()}_onUserConnection(A){setTimeout(()=>this.safeEmit(X.onUserJoined,A))}_onUserLeave(A){this.safeEmit(X.onUserLeave,A)}_onRoomError(A){var I;this.safeEmit(X.onError,A),(I=this._room)===null||I===void 0||I.destroy(),this._room=void 0}_onNetworkQuality(){for(var A=arguments.length,I=new Array(A),g=0;g{var E;return(E=B.audioTrack)===null||E===void 0?void 0:E.stop()})}else A.state===XA.CONNECTION_STATE_CONNECTED&&this._rtmClient.setRTSMessageLimit(this._ctx.rtsLimiter.conf)}_stopAudioPropertiesReport(){this._audioPropertiesReportTimer!==null&&(clearInterval(this._audioPropertiesReportTimer),this._audioPropertiesReportTimer=null)}_onResubscribe(A){var I,g;A.stream&&((I=A.stream.videoTrack)===null||I===void 0||I.stopAll(),(g=A.stream.audioTrack)===null||g===void 0||g.stop(),this._updateAudioPlayerState(A.stream),this._updateVideoPlayerState(A.stream))}_onSubscribePushTrack(A){A.stream&&this._updateAudioPlayerState(A.stream)}_onRemovePushTrack(A){A.stream&&this._updateAudioPlayerState(A.stream)}_onUserPublishStateChange(A){let{userId:I,isScreen:g,mediaType:C,pubState:Q,remoteStream:B}=A;const E={userId:I,mediaType:C};C&iA.AUDIO&&setTimeout(()=>{this._updateAudioPlayerState(B)}),g?Q===wC.PUB?this.safeEmit(X.onUserPublishScreen,E):this.safeEmit(X.onUserUnpublishScreen,R(R({},E),{},{reason:_B.STREAM_REMOVE_REASON_UNPUBLISH})):Q===wC.PUB?(E.videoStreamDescriptions=B.attributes.videoDescriptions,this.safeEmit(X.onUserPublishStream,E),this._handleAutoSubscribe(B,!0)):this.safeEmit(X.onUserUnpublishStream,R(R({},E),{},{reason:_B.STREAM_REMOVE_REASON_UNPUBLISH}))}_onCustomMessage(A){const{message:I}=A;A.binary?this.safeEmit(X.onRoomBinaryMessageReceived,{userId:A.clientId,message:I}):this.safeEmit(X.onRoomMessageReceived,{userId:A.clientId,message:I})}_onUserMessageReceived(A){this._messageStatisticsObserver.recvP2PMessage(A.userId),this.safeEmit(X.onUserMessageReceived,A)}_onUserBinaryMessageReceived(A){this._messageStatisticsObserver.recvP2PMessage(A.userId),this.safeEmit(X.onUserBinaryMessageReceived,A)}_onLiveTranscodingResult(A){this.safeEmit(X.onLiveTranscodingResult,A)}_onStreamMixingEvent(A){this.safeEmit(X.onStreamMixingEvent,A)}_onUserTokenWillExpire(){this.safeEmit(X.onTokenWillExpire)}_onUserTokenPublishPrivilegeWillExpire(){this.safeEmit(X.onTokenPublishPrivilegeWillExpire)}async _onUserTokenPublishPrivilegeDidExpired(){var A,I,g;await((A=this._room)===null||A===void 0?void 0:A.unpublish()),await((I=this._room)===null||I===void 0?void 0:I.unpublishScreen()),(g=this._room)===null||g===void 0||g.config.setTokenPublishPrivilegeExpired(!0),this.safeEmit(X.onTokenPublishPrivilegeDidExpired,{errorCode:m.TOKEN_NO_PUBLISH_PERMISSION,message:"Token no longer has publish privilege"})}_onUserTokenSubscribePrivilegeWillExpire(){this.safeEmit(X.onTokenSubscribePrivilegeWillExpire)}async _onUserTokenSubscribePrivilegeDidExpired(){this._handleLoseSubscribePrivilege(),this.safeEmit(X.onTokenSubscribePrivilegeDidExpired,{errorCode:m.TOKEN_NO_SUBSCRIBE_PERMISSION,message:"Token no longer has subscribe privilege"})}async _unSubscribeAllRemoteStreams(){return this._room?this._pauseAllRemoteStreams(iA.AUDIO_AND_VIDEO):Promise.resolve()}_onPushPublicStreamResult(A){this.safeEmit(X.onPushPublicStreamResult,A)}_handleRTMClient(A){A.on("onUserMessageReceivedOutsideRoom",I=>{this._messageStatisticsObserver.recvP2POutRoomMessage(I.userId),this.safeEmit(X.onUserMessageReceivedOutsideRoom,I)}),A.on("onUserBinaryMessageReceivedOutsideRoom",I=>{this._messageStatisticsObserver.recvP2POutRoomMessage(I.userId),this.safeEmit(X.onUserBinaryMessageReceivedOutsideRoom,I)}),A.on("onUserDisconnection",()=>{this.safeEmit(X.onError,{errorCode:m.RTM_DUPLICATE_LOGIN})}),A.on("onRTMTokenError",()=>{this.safeEmit(X.onError,{errorCode:m.RTM_TOKEN_ERROR})}),A.on("onServerParamsSetResult",I=>{this.safeEmit(X.onServerParamsSetResult,I==null?void 0:I.code)})}getSubLock(A,I){const g=A?this._subScreenLocks:this._subLocks;let C=g.get(I);return C||(C=new tB("sub_".concat(A?1:0,"_").concat(I)),g.set(I,C)),C}get localAudioTrack(){return this._localAudioTrack}get localVideoTrack(){return this._localVideoTrack}get localScreenAudioTrack(){return this._localScreenAudioTrack}get localScreenVideoTrack(){return this._localScreenVideoTrack}get remoteStreams(){var A;const I=[];return(A=this._room)!==null&&A!==void 0&&A.remoteStreams&&this._room.remoteStreams.forEach(g=>{Array.isArray(g)&&g.forEach(C=>{I.push({userId:C.userId,isScreen:C.isScreen,hasVideo:C.hasVideo,hasAudio:C.hasAudio,videoStreamDescriptions:C.attributes.videoDescriptions})})}),I}get iceState(){var A;return(A=this._ctx.peerConnection)===null||A===void 0?void 0:A.getIceConnectionState()}get remoteUsers(){var A;const I=[];return(A=this._room)!==null&&A!==void 0&&A.remoteUsers&&this._room.remoteUsers.forEach(g=>{I.push({userId:g.userId})}),I}get multiChatMode(){var A;return!((A=this._room)===null||A===void 0||!A.config.isMultiChatMode())}get checkMediaType(){return this._checkMediaType}get assertNotInRoom(){return this._assertNotInRoom}get peerConnection(){var A;return(A=this._ctx.peerConnection)===null||A===void 0?void 0:A.getOriginRTCPeerConnection()}_handleAudioDeviceManager(){this._audioDeviceManager.on("onAudioPlaybackDeviceTestVolume",A=>{this.safeEmit(X.onAudioPlaybackDeviceTestVolume,A)})}_assertNotInRoom(){if(!this._room||!this._ctx.signalingManager.isConnected())throw new U(m.NOT_CONNECTED_YET,"server not connected")}_checkMediaType(A){MA(A,"mediaType",[iA.AUDIO,iA.VIDEO,iA.AUDIO_AND_VIDEO])}_getUserId(){var A;return((A=this._room)===null||A===void 0?void 0:A.config.userInfo.userId)||"local_user"}async _switchTrack(A){var I;this._initLocalTrackEvents(A),this._localVideoTrack=A,this._localVideoPlayerConfig[F.STREAM_INDEX_MAIN].forEach(g=>{var C;A.setPlayer(g,this._mirrorType,(C=this._config)===null||C===void 0?void 0:C.autoPlayPolicy,this._initPlayerEvents.bind(this))}),(I=this._room)!==null&&I!==void 0&&(I=I.localStream)!==null&&I!==void 0&&I.pubVideo&&await this._updatePublish(),this._wtnStreamManager._updatePushTrack()}async _shouldUpdateAudioConf(A){var I,g;const C=await((I=this._room)===null||I===void 0?void 0:I.hasPublished())||((g=this._room)===null||g===void 0||(g=g.localStream)===null||g===void 0?void 0:g.pubAudio)||this._localAudioTrack&&this._localAudioTrack.sourceType===oI.INTERNAL;if(C){const Q="engine.".concat(A," should be called before publishing or capturing.");console.warn("[RTC WebSDK]: ".concat(Q)),AI(this.id,A,Q)}return!C}_getRemoteVideoPlayerConfig(A,I,g){var C;return(C=this._remoteVideoPlayerConfig[A].get(I))===null||C===void 0?void 0:C.get(g)}_setRemoteVideoPlayerConfig(A,I,g,C){const Q=this._remoteVideoPlayerConfig[A].get(I)||new Map;Q.set(g,C),this._remoteVideoPlayerConfig[A].set(I,Q)}getRemoteVideoStats(){var A;const I=(A=this._room)===null||A===void 0?void 0:A.remoteStreams;if(!I||I.size===0)return{};const g={};return I.forEach((C,Q)=>{var B,E,i;let e,o;(B=C[0])!==null&&B!==void 0&&B.isScreen?(o=C[0],e=C[1]):(o=C[1],e=C[0]);const t={mainVideoStats:DC(((E=e)===null||E===void 0?void 0:E.getRemoteStreamStats().videoStats)||{}),screenVideoStats:DC(((i=o)===null||i===void 0?void 0:i.getRemoteStreamStats().videoStats)||{})};g[Q]=t}),g}getRemoteAudioStats(){var A;const I=(A=this._room)===null||A===void 0?void 0:A.remoteStreams;if(!I||I.size===0)return{};const g={};return I.forEach((C,Q)=>{var B,E,i;let e,o;(B=C[0])!==null&&B!==void 0&&B.isScreen?(o=C[0],e=C[1]):(o=C[1],e=C[0]);const t={mainAudioStats:DC(((E=e)===null||E===void 0?void 0:E.getRemoteStreamStats().audioStats)||{}),screenAudioStats:DC(((i=o)===null||i===void 0?void 0:i.getRemoteStreamStats().audioStats)||{})};g[Q]=t}),g}getLocalVideoStats(){var A,I;return{mainVideoStats:DC(((A=this._room)===null||A===void 0||(A=A.localStream)===null||A===void 0?void 0:A.getLocalStreamStats().videoStats)||{}),screenVideoStats:DC(((I=this._room)===null||I===void 0||(I=I.localScreenStream)===null||I===void 0?void 0:I.getLocalStreamStats().videoStats)||{})}}getLocalAudioStats(){var A,I;return{mainAudioStats:DC(((A=this._room)===null||A===void 0||(A=A.localStream)===null||A===void 0?void 0:A.getLocalStreamStats().audioStats)||{}),screenAudioStats:DC(((I=this._room)===null||I===void 0||(I=I.localScreenStream)===null||I===void 0?void 0:I.getLocalStreamStats().audioStats)||{})}}getPublicVideoStats(){const A=this._wtnStreamManager.__getRemoteStreams();if(!A||A.size===0)return{};const I={};return A.forEach((g,C)=>{const Q=DC(g.getRemoteStreamStats().videoStats||{});delete Q.isScreen,I[C]=Q}),I}getPublicAudioStats(){const A=this._wtnStreamManager.__getRemoteStreams();if(!A||A.size===0)return{};const I={};return A.forEach((g,C)=>{const Q=DC(g.getRemoteStreamStats().audioStats||{});delete Q.isScreen,I[C]=Q}),I}},P(Du,"hasReportNativeDetector",!1),Du);let j=Cm;f([Z()],j.prototype,"updateToken"),f([Z(),Ge("video")],j.prototype,"setVideoCaptureDevice"),f([Z(),Ge("audio")],j.prototype,"setAudioCaptureDevice"),f([Z()],j.prototype,"connect"),f([SaA,Z()],j.prototype,"joinRoom"),f([Z()],j.prototype,"leaveRoom"),f([Z()],j.prototype,"destroy"),f([Z(),hI],j.prototype,"publishStream"),f([Z(),hI],j.prototype,"unpublishStream"),f([Z(),hI],j.prototype,"publishScreen"),f([Z(),hI],j.prototype,"unpublishScreen"),f([Z(),hI],j.prototype,"subscribeStream"),f([Yk],j.prototype,"_subscribe"),f([Z(),hI],j.prototype,"unsubscribeStream"),f([Z(),hI],j.prototype,"subscribeScreen"),f([Z(),hI],j.prototype,"unsubscribeScreen"),f([Yk],j.prototype,"_unsubscribe"),f([Z(),kk],j.prototype,"setRemoteVideoConfig"),f([Z()],j.prototype,"setRemoteSimulcastStreamType"),f([Z(),Ge("video")],j.prototype,"startVideoCapture"),f([Z(),Ge("video")],j.prototype,"stopVideoCapture"),f([Z(),Ge("audio")],j.prototype,"startAudioCapture"),f([Z(),Ge("audio")],j.prototype,"stopAudioCapture"),f([Z(),Ge("all")],j.prototype,"startAudioAndVideoCapture"),f([Z()],j.prototype,"startVideoAndAudioCapture"),f([Z()],j.prototype,"getAudioMixingManager"),f([Z()],j.prototype,"getWTNStreamManager"),f([Z()],j.prototype,"getCallId"),f([Z(),pk],j.prototype,"startScreenCapture"),f([Z(),pk],j.prototype,"stopScreenCapture"),f([Z()],j.prototype,"setLocalVideoPlayer"),f([Z(),hI],j.prototype,"startLiveTranscoding"),f([Z(),hI],j.prototype,"updateLiveTranscoding"),f([Z(),hI],j.prototype,"stopLiveTranscoding"),f([Z(),hI],j.prototype,"startSubtitle"),f([Z(),hI],j.prototype,"updateSubtitleConfig"),f([Z(),hI],j.prototype,"stopSubtitle"),f([Z()],j.prototype,"setBusinessId"),f([Z(),hI],j.prototype,"setUserVisibility"),f([Z()],j.prototype,"setRemoteVideoPlayer"),f([Z()],j.prototype,"setLocalVideoMirrorType"),f([Z()],j.prototype,"setRemoteVideoMirrorType"),f([Z()],j.prototype,"setAudioPlaybackDevice"),f([Z()],j.prototype,"play"),f([Z()],j.prototype,"stop"),f([Z()],j.prototype,"getAudioVolume"),f([Z()],j.prototype,"setAudioFrameCallback"),f([Z(),hI],j.prototype,"pauseAllSubscribedStream"),f([Z(),hI],j.prototype,"resumeAllSubscribedStream"),f([Z()],j.prototype,"sendUserMessage"),f([Z()],j.prototype,"sendUserBinaryMessage"),f([Z()],j.prototype,"sendRoomMessage"),f([Z()],j.prototype,"sendRoomBinaryMessage"),f([Z()],j.prototype,"setAudioCaptureConfig"),f([uF("4.51"),Z()],j.prototype,"setVideoCaptureConfig"),f([Z()],j.prototype,"enableSimulcastMode"),f([Z()],j.prototype,"setLocalSimulcastMode"),f([Z()],j.prototype,"setVideoEncoderConfig"),f([Z()],j.prototype,"setScreenEncoderConfig"),f([Z(),hI],j.prototype,"sendSEIMessage"),f([uF("4.42"),Z()],j.prototype,"setAudioVolumeIndicationInterval"),f([Z()],j.prototype,"enableAudioPropertiesReport"),f([Z()],j.prototype,"setVideoSourceType"),f([Z()],j.prototype,"setExternalVideoTrack"),f([Z()],j.prototype,"setAudioSourceType"),f([Z()],j.prototype,"setExternalAudioTrack"),f([Z()],j.prototype,"login"),f([Z()],j.prototype,"logout"),f([Z()],j.prototype,"updateLoginToken"),f([Z()],j.prototype,"getPeerOnlineStatus"),f([Z()],j.prototype,"sendUserMessageOutsideRoom"),f([Z()],j.prototype,"sendUserBinaryMessageOutsideRoom"),f([Z()],j.prototype,"setServerParams"),f([Z()],j.prototype,"sendServerMessage"),f([Z()],j.prototype,"sendServerBinaryMessage"),f([Z()],j.prototype,"startCloudProxy"),f([Z()],j.prototype,"stopCloudProxy"),f([Z()],j.prototype,"startPushPublicStream"),f([Z()],j.prototype,"updatePublicStreamParam"),f([Z()],j.prototype,"stopPushPublicStream"),f([Z(["streamId"])],j.prototype,"startPlayPublicStream"),f([Z(["streamId"])],j.prototype,"stopPlayPublicStream"),f([Z()],j.prototype,"setAudioProfile"),f([Z()],j.prototype,"setAudioEncodeMaxBitrate"),f([Z()],j.prototype,"setPublicStreamVideoPlayer"),f([Z()],j.prototype,"setDummyCaptureImagePath"),f([Z()],j.prototype,"registerExtension"),f([Z()],j.prototype,"startAudioPlaybackDeviceTest"),f([Z()],j.prototype,"stopAudioPlaybackDeviceTest"),f([Z()],j.prototype,"startAudioDeviceRecordTest"),f([Z()],j.prototype,"stopAudioDeviceRecordAndPlayTest"),f([Z()],j.prototype,"stopAudioDevicePlayTest"),f([Z(),kk],j.prototype,"setRemoteUserPriority"),f([Z()],j.prototype,"takeLocalSnapshot"),f([Z()],j.prototype,"takeRemoteSnapshot"),f([Z()],j.prototype,"setSubscribeFallbackOption"),f([Z()],j.prototype,"getLocalStreamTrack"),f([Z()],j.prototype,"getRemoteStreamTrack"),f([Z()],j.prototype,"getPublicStreamTrack"),f([Z()],j.prototype,"setRemoteStreamRenderSync"),f([Z()],j.prototype,"setJoinRoomParams"),f([Z(),hI],j.prototype,"setAudioSelectionConfig"),f([Z(),hI],j.prototype,"startForwardStreamToRooms"),f([Z(),hI],j.prototype,"updateForwardStreamToRooms"),f([Z(),hI],j.prototype,"stopForwardStreamToRooms"),f([Z(),hI],j.prototype,"pauseForwardStreamToAllRooms"),f([Z(),hI],j.prototype,"resumeForwardStreamToAllRooms"),f([Z()],j.prototype,"setEarMonitorMode"),f([Z([],{debounce:2e3,debounceTag:function(A){return"".concat(A)}})],j.prototype,"setEarMonitorVolume"),f([Z()],j.prototype,"setUserInfo");const $uA={"client unpublished":_B.STREAM_REMOVE_REASON_UNPUBLISH,"publish failed":_B.STREAM_REMOVE_REASON_PUBLISH_FAILED,"stream removed":_B.STREAM_REMOVE_REASON_KEEP_LIVE_FAILED,"client disconnected":_B.STREAM_REMOVE_REASON_CLIENT_DISCONNECTED,"client republish":_B.STREAM_REMOVE_REASON_REPUBLISH,"token publish privilege expired":_B.STREAM_REMOVE_REASON_TOKEN_PRIVILEGE_EXPIRED};function Yk(A,I,g){const C=g.value;return g.value=async function(){for(var Q=arguments.length,B=new Array(Q),E=0;Et())}},C}}function pk(A,I,g){const C=g.value;return g.value=async function(){const Q=await this._screenCaptureLock.lock();try{for(var B=arguments.length,E=new Array(B),i=0;i{for(var Q,B=IbA(I,g),E=A.length-1;E>=0;E--)(Q=A[E])&&(B=Q(I,g,B)||B);return B&&AbA(I,g,B),B};class Zt extends j{constructor(I,g,C){super(I,g,C),P(this,"singleStreamRenderMode",!1),this.id=g,this.logger=new uA("BLWEngine",0,g),cV([{width:192,height:108,frameRate:15,maxKbps:100},{width:320,height:180,frameRate:15,maxKbps:140},{width:640,height:360,frameRate:15,maxKbps:400},{width:1280,height:720,frameRate:15,maxKbps:1e3},{width:1920,height:1080,frameRate:15,maxKbps:2e3}]),this._handleEngineEvents()}async subscribeStream(I,g){return this.logger.print("subscribeStream()","userId: %o, mediaType: %o",I,g),this.singleStreamRenderMode&&gI(g)&&super.subscribeScreen(I,iA.VIDEO).catch(C=>{this.logger.error("singleStreamRenderMode subscribeScreen()",C)}),super.subscribeStream(I,g)}async unsubscribeStream(I,g){return this.logger.print("unsubscribeStream()","userId: %o, mediaType: %o",I,g),this.singleStreamRenderMode&&gI(g)&&super.unsubscribeScreen(I,iA.VIDEO).catch(C=>{this.logger.error("singleStreamRenderMode unsubscribeScreen()",C)}),super.unsubscribeStream(I,g)}setRemoteScreenVideoStreamIndex(I){return this.logger.print("setRemoteScreenVideoStreamIndex()","streamIndex: %o",I),!this._room&&(this.singleStreamRenderMode=I===F.STREAM_INDEX_MAIN,!0)}setRemoteVideoPlayer(I,g){if(this.logger.print("setRemoteVideoPlayer()","streamIndex: %o, videoPlayerOption: %o",I,g),g==null||delete g.playerId,!this.singleStreamRenderMode||I!==F.STREAM_INDEX_SCREEN)return super.setRemoteVideoPlayer(I,g)}destroy(){this.singleStreamRenderMode=!1,super.destroy()}_updateVideoPlayerState(I){var g,C,Q,B;if(!this.singleStreamRenderMode)return super._updateVideoPlayerState(I);const{userId:E}=I,i=(g=this._room)===null||g===void 0?void 0:g.remoteStreams.get(E);let e,o;Array.isArray(i)&&i.forEach(l=>{l.isScreen?e=l:o=l});let t=(C=o)===null||C===void 0||(C=C.videoTrack)===null||C===void 0?void 0:C.dangerousGetPlayer(UQ);if(!t){var s;const l=(s=this._remoteVideoPlayerConfig[F.STREAM_INDEX_MAIN].get(E))===null||s===void 0?void 0:s.get(UQ);if(!l)return;var v,r,n;(v=o)===null||v===void 0||(v=v.videoTrack)===null||v===void 0||v.setPlayer(this.id,l,(r=this._config)===null||r===void 0?void 0:r.autoPlayPolicy,this._initPlayerEvents.bind(this)),t=(n=o)===null||n===void 0||(n=n.videoTrack)===null||n===void 0?void 0:n.dangerousGetPlayer(UQ)}var a,c,d;if(!I.isScreen&&(Q=e)!==null&&Q!==void 0&&Q.videoTrack&&e.videoHasPublish)return this.logger.print("_updateVideoPlayerState","prevent play main stream"),void((a=t)===null||a===void 0||a.playVideo(e.videoTrack));I.videoTrack?((c=this._config)===null||c===void 0?void 0:c.autoPlayPolicy)!==Ae.PLAY_MANUALLY&&((d=t)===null||d===void 0||d.playVideo(I.videoTrack)):(B=t)!==null&&B!==void 0&&B.played&&t.stop()}_handleEngineEvents(){this.on(X.onUserPublishScreen,I=>{if(this.singleStreamRenderMode&&gI(I.mediaType)){var g,C;const Q=(g=this._room)===null||g===void 0?void 0:g.remoteStreams.get(I.userId),B=Q==null?void 0:Q.find(i=>!i.isScreen),E=Q==null?void 0:Q.find(i=>i.isScreen);E!=null&&E.hasSubscribed?(this.logger.info("onUserPublishScreen","singleStreamRenderMode screen hasSubscribed"),this._updateVideoPlayerState(E)):((C=this._room)!==null&&C!==void 0&&C.config.isAutoSubscribeVideo||B!=null&&B.hasSubscribed&&gI(B.subMediaType))&&(this.logger.info("onUserPublishScreen","singleStreamRenderMode subscribeScreen"),this.subscribeScreen(I.userId,iA.VIDEO))}}),this.on(X.onUserUnpublishScreen,I=>{if(this.singleStreamRenderMode&&gI(I.mediaType)){var g;const C=(g=this._room)===null||g===void 0?void 0:g.remoteStreams.get(I.userId),Q=C==null?void 0:C.find(B=>!B.isScreen);Q&&setTimeout(()=>{this._updateVideoPlayerState(Q)})}})}}Pr([Z()],Zt.prototype,"subscribeStream"),Pr([Z()],Zt.prototype,"unsubscribeStream"),Pr([Z()],Zt.prototype,"setRemoteScreenVideoStreamIndex"),Pr([Z()],Zt.prototype,"setRemoteVideoPlayer"),Pr([Z()],Zt.prototype,"destroy");const zR=new uA("VERTC",0);Ks.storeKey="".concat(Date.now(),"-").concat($A.getDeviceId()),ta({rtc_sdk_version:YA.VERSION,device_id:$A.getDeviceId(),log_cache_key:Ks.storeKey}),BV(YA.LOG_SERVER_URL);let zM=1;const gbA=(A,I)=>{zR.info("createEngine","Invoke VERTC.createEngine"),OA(A,"appId");const g=(zM++).toString();return iV(g,{rtc_app_id:A,auto_play_policy:I==null?void 0:I.autoPlayPolicy}),new j(A,g,I)},CbA=(A,I)=>{zR.print("createBLWEngine","Invoke VERTC.createBLWEngine"),OA(A,"appId");const g=(zM++).toString();return iV(g,{rtc_app_id:A,auto_play_policy:I==null?void 0:I.autoPlayPolicy}),new Zt(A,g,I)},QbA=A=>{if(zR.info("destroyEngine","Invoke VERTC.destroyEngine"),!(A instanceof j))throw new U(m.INVALID_ENGINE,"Invalid engine object");A.destroy(),YrA(A.monitor)},BbA=async()=>Xg.enumerateDevices(),EbA=async function(){let A=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{video:!0,audio:!0};const{video:I,audio:g}=A,C={video:!1,audio:!1},Q=[];return I&&Q.push(Xg.getPermissions({video:!0,force:!0}).then(B=>{C.video=B.video,B.video||(C.videoExceptionError=B.reason)})),g&&Q.push(Xg.getPermissions({audio:!0,force:!0}).then(B=>{C.audio=B.audio,B.audio||(C.audioExceptionError=B.reason)})),await Promise.allSettled(Q),C},ibA=async()=>Xg.enumerateAudioCaptureDevices(),ebA=async()=>Xg.enumerateVideoCaptureDevices(),obA=async()=>Xg.enumerateAudioPlaybackDevices(),tbA=()=>YA.VERSION,sbA=()=>NPA(),vbA=()=>ZPA(),rbA=A=>{let{logLevel:I,LogfileSize:g}=A;I&&(Ks.logLevel=I),g&&(Ks.LogfileSize=g)},abA=A=>{Ks.download(A)};function uu(){for(var A=arguments.length,I=new Array(A),g=0;gC instanceof j?"[ENGINE]":C))}function PC(A,I){return function(){EV(I,0,uu(...arguments));const g=A(...arguments);return typeof(g==null?void 0:g.then)=="function"?g.then(C=>(Oh(I,0,uu(C)),C)).catch(C=>{throw Oh(I,C.code,C.message),C}):(Oh(I,0,uu(g)),g)}}class PbA{constructor(){P(this,"getSdkVersion",PC(tbA,"getSdkVersion")),P(this,"createEngine",PC(gbA,"createEngine")),P(this,"createBLWEngine",PC(CbA,"createBLWEngine")),P(this,"destroyEngine",PC(QbA,"destroyEngine")),P(this,"enumerateDevices",PC(BbA,"enumerateDevices")),P(this,"enableDevices",PC(EbA,"enableDevices")),P(this,"enumerateAudioCaptureDevices",PC(ibA,"enumerateAudioCaptureDevices")),P(this,"enumerateVideoCaptureDevices",PC(ebA,"enumerateVideoCaptureDevices")),P(this,"enumerateAudioPlaybackDevices",PC(obA,"enumerateAudioPlaybackDevices")),P(this,"getParameter",lA),P(this,"setParameter",jC),P(this,"isSupported",PC(sbA,"isSupported")),P(this,"getSupportedCodecs",PC(vbA,"getSupportedCodecs")),P(this,"getElectronScreenSources",PC(Mz,"getElectronScreenSources")),P(this,"events",X),P(this,"ErrorCode",m),P(this,"platform","VolcEngine"),P(this,"commitInfo","HEAD<3383712*>"),P(this,"downloadLog",PC(abA,"downloadLog")),P(this,"setLogConfig",PC(rbA,"setLogConfig"))}}var uI=new PbA,An=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function SA(A){return A&&A.__esModule&&Object.prototype.hasOwnProperty.call(A,"default")?A.default:A}var cr=function(A){return A&&A.Math===Math&&A},rI=cr(typeof globalThis=="object"&&globalThis)||cr(typeof window=="object"&&window)||cr(typeof self=="object"&&self)||cr(typeof An=="object"&&An)||cr(typeof An=="object"&&An)||function(){return this}()||Function("return this")(),JA=function(A){try{return!!A()}catch{return!0}},cbA=JA,SP=!cbA(function(){var A=(function(){}).bind();return typeof A!="function"||A.hasOwnProperty("prototype")}),nbA=SP,MM=Function.prototype,Nk=MM.apply,Zk=MM.call,yv=typeof Reflect=="object"&&Reflect.apply||(nbA?Zk.bind(Nk):function(){return Zk.apply(Nk,arguments)}),XM=SP,jM=Function.prototype,Qm=jM.call,lbA=XM&&jM.bind.bind(Qm,Qm),HA=XM?lbA:function(A){return function(){return Qm.apply(A,arguments)}},fM=HA,dbA=fM({}.toString),hbA=fM("".slice),xE=function(A){return hbA(dbA(A),8,-1)},DbA=xE,ubA=HA,Y9=function(A){if(DbA(A)==="Function")return ubA(A)},bu=typeof document=="object"&&document.all,YI=bu===void 0&&bu!==void 0?function(A){return typeof A=="function"||A===bu}:function(A){return typeof A=="function"},wv={},bbA=JA,kI=!bbA(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!==7}),ybA=SP,In=Function.prototype.call,zI=ybA?In.bind(In):function(){return In.apply(In,arguments)},X0={},HM={}.propertyIsEnumerable,xM=Object.getOwnPropertyDescriptor,wbA=xM&&!HM.call({1:2},1);X0.f=wbA?function(A){var I=xM(this,A);return!!I&&I.enumerable}:HM;var ei,cl,re=function(A,I){return{enumerable:!(1&A),configurable:!(2&A),writable:!(4&A),value:I}},mbA=HA,GbA=JA,RbA=xE,yu=Object,LbA=mbA("".split),MR=GbA(function(){return!yu("z").propertyIsEnumerable(0)})?function(A){return RbA(A)==="String"?LbA(A,""):yu(A)}:yu,mv=function(A){return A==null},SbA=mv,TbA=TypeError,Zo=function(A){if(SbA(A))throw new TbA("Can't call method on "+A);return A},UbA=MR,FbA=Zo,sE=function(A){return UbA(FbA(A))},YbA=YI,Eg=function(A){return typeof A=="object"?A!==null:YbA(A)},OI={},wu=OI,mu=rI,kbA=YI,Kk=function(A){return kbA(A)?A:void 0},sg=function(A,I){return arguments.length<2?Kk(wu[A])||Kk(mu[A]):wu[A]&&wu[A][I]||mu[A]&&mu[A][I]},pbA=HA,eQ=pbA({}.isPrototypeOf),NbA=rI,Jk=NbA.navigator,Wk=Jk&&Jk.userAgent,TP=Wk?String(Wk):"",OM=rI,Gu=TP,Vk=OM.process,zk=OM.Deno,Mk=Vk&&Vk.versions||zk&&zk.version,Xk=Mk&&Mk.v8;Xk&&(cl=(ei=Xk.split("."))[0]>0&&ei[0]<4?1:+(ei[0]+ei[1])),!cl&&Gu&&(!(ei=Gu.match(/Edge\/(\d+)/))||ei[1]>=74)&&(ei=Gu.match(/Chrome\/(\d+)/))&&(cl=+ei[1]);var j0=cl,jk=j0,ZbA=JA,KbA=rI,JbA=KbA.String,Gv=!!Object.getOwnPropertySymbols&&!ZbA(function(){var A=Symbol("symbol detection");return!JbA(A)||!(Object(A)instanceof Symbol)||!Symbol.sham&&jk&&jk<41}),WbA=Gv,qM=WbA&&!Symbol.sham&&typeof Symbol.iterator=="symbol",VbA=sg,zbA=YI,MbA=eQ,XbA=qM,jbA=Object,UP=XbA?function(A){return typeof A=="symbol"}:function(A){var I=VbA("Symbol");return zbA(I)&&MbA(I.prototype,jbA(A))},fbA=String,Rv=function(A){try{return fbA(A)}catch{return"Object"}},HbA=YI,xbA=Rv,ObA=TypeError,Dg=function(A){if(HbA(A))return A;throw new ObA(xbA(A)+" is not a function")},qbA=Dg,_bA=mv,XR=function(A,I){var g=A[I];return _bA(g)?void 0:qbA(g)},Ru=zI,Lu=YI,Su=Eg,$bA=TypeError,AyA=function(A,I){var g,C;if(I==="string"&&Lu(g=A.toString)&&!Su(C=Ru(g,A))||Lu(g=A.valueOf)&&!Su(C=Ru(g,A))||I!=="string"&&Lu(g=A.toString)&&!Su(C=Ru(g,A)))return C;throw new $bA("Can't convert object to primitive value")},_M={exports:{}},jR=!0,fk=rI,IyA=Object.defineProperty,gyA=function(A,I){try{IyA(fk,A,{value:I,configurable:!0,writable:!0})}catch{fk[A]=I}return I},CyA=rI,QyA=gyA,Hk="__core-js_shared__",xk=_M.exports=CyA[Hk]||QyA(Hk,{});(xk.versions||(xk.versions=[])).push({version:"3.39.0",mode:"pure",copyright:"© 2014-2024 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.39.0/LICENSE",source:"https://github.com/zloirock/core-js"});var fR=_M.exports,Ok=fR,Lv=function(A,I){return Ok[A]||(Ok[A]=I||{})},ByA=Zo,EyA=Object,qQ=function(A){return EyA(ByA(A))},iyA=HA,eyA=qQ,oyA=iyA({}.hasOwnProperty),vg=Object.hasOwn||function(A,I){return oyA(eyA(A),I)},tyA=HA,syA=0,vyA=Math.random(),ryA=tyA(1 .toString),f0=function(A){return"Symbol("+(A===void 0?"":A)+")_"+ryA(++syA+vyA,36)},ayA=rI,PyA=Lv,qk=vg,cyA=f0,nyA=Gv,lyA=qM,es=ayA.Symbol,Tu=PyA("wks"),dyA=lyA?es.for||es:es&&es.withoutSetter||cyA,GI=function(A){return qk(Tu,A)||(Tu[A]=nyA&&qk(es,A)?es[A]:dyA("Symbol."+A)),Tu[A]},hyA=zI,_k=Eg,$k=UP,DyA=XR,uyA=AyA,byA=GI,yyA=TypeError,wyA=byA("toPrimitive"),$M=function(A,I){if(!_k(A)||$k(A))return A;var g,C=DyA(A,wyA);if(C){if(I===void 0&&(I="default"),g=hyA(C,A,I),!_k(g)||$k(g))return g;throw new yyA("Can't convert object to primitive value")}return I===void 0&&(I="number"),uyA(A,I)},myA=$M,GyA=UP,HR=function(A){var I=myA(A,"string");return GyA(I)?I:I+""},RyA=rI,Ap=Eg,Bm=RyA.document,LyA=Ap(Bm)&&Ap(Bm.createElement),xR=function(A){return LyA?Bm.createElement(A):{}},SyA=kI,TyA=JA,UyA=xR,AX=!SyA&&!TyA(function(){return Object.defineProperty(UyA("div"),"a",{get:function(){return 7}}).a!==7}),FyA=kI,YyA=zI,kyA=X0,pyA=re,NyA=sE,ZyA=HR,KyA=vg,JyA=AX,Ip=Object.getOwnPropertyDescriptor;wv.f=FyA?Ip:function(A,I){if(A=NyA(A),I=ZyA(I),JyA)try{return Ip(A,I)}catch{}if(KyA(A,I))return pyA(!YyA(kyA.f,A,I),A[I])};var WyA=JA,VyA=YI,zyA=/#|\.prototype\./,FP=function(A,I){var g=XyA[MyA(A)];return g===fyA||g!==jyA&&(VyA(I)?WyA(I):!!I)},MyA=FP.normalize=function(A){return String(A).replace(zyA,".").toLowerCase()},XyA=FP.data={},jyA=FP.NATIVE="N",fyA=FP.POLYFILL="P",IX=FP,HyA=Dg,xyA=SP,OyA=Y9(Y9.bind),pg=function(A,I){return HyA(A),I===void 0?A:xyA?OyA(A,I):function(){return A.apply(I,arguments)}},ZC={},qyA=kI,_yA=JA,gX=qyA&&_yA(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!==42}),$yA=Eg,AwA=String,IwA=TypeError,Hg=function(A){if($yA(A))return A;throw new IwA(AwA(A)+" is not an object")},gwA=kI,CwA=AX,QwA=gX,gn=Hg,gp=HR,BwA=TypeError,Uu=Object.defineProperty,EwA=Object.getOwnPropertyDescriptor,Fu="enumerable",Yu="configurable",ku="writable";ZC.f=gwA?QwA?function(A,I,g){if(gn(A),I=gp(I),gn(g),typeof A=="function"&&I==="prototype"&&"value"in g&&ku in g&&!g[ku]){var C=EwA(A,I);C&&C[ku]&&(A[I]=g.value,g={configurable:Yu in g?g[Yu]:C[Yu],enumerable:Fu in g?g[Fu]:C[Fu],writable:!1})}return Uu(A,I,g)}:Uu:function(A,I,g){if(gn(A),I=gp(I),gn(g),CwA)try{return Uu(A,I,g)}catch{}if("get"in g||"set"in g)throw new BwA("Accessors not supported");return"value"in g&&(A[I]=g.value),A};var iwA=kI,ewA=ZC,owA=re,ae=iwA?function(A,I,g){return ewA.f(A,I,owA(1,g))}:function(A,I,g){return A[I]=g,A},nr=rI,twA=yv,swA=Y9,vwA=YI,rwA=wv.f,awA=IX,ct=OI,PwA=pg,nt=ae,Cp=vg,cwA=function(A){var I=function(g,C,Q){if(this instanceof I){switch(arguments.length){case 0:return new A;case 1:return new A(g);case 2:return new A(g,C)}return new A(g,C,Q)}return twA(A,this,arguments)};return I.prototype=A.prototype,I},BA=function(A,I){var g,C,Q,B,E,i,e,o,t,s=A.target,v=A.global,r=A.stat,n=A.proto,a=v?nr:r?nr[s]:nr[s]&&nr[s].prototype,c=v?ct:ct[s]||nt(ct,s,{})[s],d=c.prototype;for(B in I)C=!(g=awA(v?B:s+(r?".":"#")+B,A.forced))&&a&&Cp(a,B),i=c[B],C&&(e=A.dontCallGetSet?(t=rwA(a,B))&&t.value:a[B]),E=C&&e?e:I[B],(g||n||typeof i!=typeof E)&&(o=A.bind&&C?PwA(E,nr):A.wrap&&C?cwA(E):n&&vwA(E)?swA(E):E,(A.sham||E&&E.sham||i&&i.sham)&&nt(o,"sham",!0),nt(c,B,o),n&&(Cp(ct,Q=s+"Prototype")||nt(ct,Q,{}),nt(ct[Q],B,E),A.real&&d&&(g||!d[B])&&nt(d,B,E)))},nwA=HA,Pe=nwA([].slice),CX=HA,lwA=Dg,dwA=Eg,hwA=vg,Qp=Pe,DwA=SP,QX=Function,uwA=CX([].concat),bwA=CX([].join),pu={},ywA=function(A,I,g){if(!hwA(pu,I)){for(var C=[],Q=0;Q0?HwA:fwA)(I)},OwA=xwA,O0=function(A){var I=+A;return I!=I||I===0?0:OwA(I)},qwA=O0,_wA=Math.max,$wA=Math.min,_R=function(A,I){var g=qwA(A);return g<0?_wA(g+I,0):$wA(g,I)},AmA=O0,ImA=Math.min,rX=function(A){var I=AmA(A);return I>0?ImA(I,9007199254740991):0},gmA=rX,Ko=function(A){return gmA(A.length)},CmA=sE,QmA=_R,BmA=Ko,EmA=function(A){return function(I,g,C){var Q=CmA(I),B=BmA(Q);if(B===0)return!A&&-1;var E,i=QmA(C,B);if(A&&g!=g){for(;B>i;)if((E=Q[i++])!=E)return!0}else for(;B>i;i++)if((A||i in Q)&&Q[i]===g)return A||i||0;return!A&&-1}},aX={indexOf:EmA(!1)},YP={},imA=HA,Nu=vg,emA=sE,omA=aX.indexOf,tmA=YP,Bp=imA([].push),PX=function(A,I){var g,C=emA(A),Q=0,B=[];for(g in C)!Nu(tmA,g)&&Nu(C,g)&&Bp(B,g);for(;I.length>Q;)Nu(C,g=I[Q++])&&(~omA(B,g)||Bp(B,g));return B},$R=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],smA=PX,vmA=$R,q0=Object.keys||function(A){return smA(A,vmA)},rmA=kI,amA=gX,PmA=ZC,cmA=Hg,nmA=sE,lmA=q0;x0.f=rmA&&!amA?Object.defineProperties:function(A,I){cmA(A);for(var g,C=nmA(I),Q=lmA(I),B=Q.length,E=0;B>E;)PmA.f(A,g=Q[E++],C[g]);return A};var Cn,dmA=sg,cX=dmA("document","documentElement"),hmA=Lv,DmA=f0,Ep=hmA("keys"),_0=function(A){return Ep[A]||(Ep[A]=DmA(A))},umA=Hg,bmA=x0,ip=$R,ymA=YP,wmA=cX,mmA=xR,GmA=_0,ep=">",op="<",im="prototype",em="script",nX=GmA("IE_PROTO"),Zu=function(){},lX=function(A){return op+em+ep+A+op+"/"+em+ep},tp=function(A){A.write(lX("")),A.close();var I=A.parentWindow.Object;return A=null,I},RmA=function(){var A,I=mmA("iframe"),g="java"+em+":";return I.style.display="none",wmA.appendChild(I),I.src=String(g),(A=I.contentWindow.document).open(),A.write(lX("document.F=Object")),A.close(),A.F},ll=function(){try{Cn=new ActiveXObject("htmlfile")}catch{}ll=typeof document<"u"?document.domain&&Cn?tp(Cn):RmA():tp(Cn);for(var A=ip.length;A--;)delete ll[im][ip[A]];return ll()};ymA[nX]=!0;var ce=Object.create||function(A,I){var g;return A!==null?(Zu[im]=umA(A),g=new Zu,Zu[im]=null,g[nX]=A):g=ll(),I===void 0?g:bmA.f(g,I)},LmA=BA,SmA=sg,Ku=yv,TmA=BX,sp=vX,UmA=Hg,vp=Eg,FmA=ce,dX=JA,AL=SmA("Reflect","construct"),YmA=Object.prototype,kmA=[].push,hX=dX(function(){function A(){}return!(AL(function(){},[],A)instanceof A)}),DX=!dX(function(){AL(function(){})}),rp=hX||DX;LmA({target:"Reflect",stat:!0,forced:rp,sham:rp},{construct:function(A,I){sp(A),UmA(I);var g=arguments.length<3?A:sp(arguments[2]);if(DX&&!hX)return AL(A,I,g);if(A===g){switch(I.length){case 0:return new A;case 1:return new A(I[0]);case 2:return new A(I[0],I[1]);case 3:return new A(I[0],I[1],I[2]);case 4:return new A(I[0],I[1],I[2],I[3])}var C=[null];return Ku(kmA,C,I),new(Ku(TmA,A,C))}var Q=g.prototype,B=FmA(vp(Q)?Q:YmA),E=Ku(A,B,I);return vp(E)?E:B}});var pmA=OI,NmA=pmA.Reflect.construct,ZmA=NmA,KmA=ZmA,JmA=KmA,WmA=JmA,VmA=WmA,zmA=VmA,uX=zmA,MmA=SA(uX),XmA=uX,IL=SA(XmA),jmA=xE,Jo=Array.isArray||function(A){return jmA(A)==="Array"},fmA=BA,HmA=Jo;fmA({target:"Array",stat:!0},{isArray:HmA});var xmA=OI,OmA=xmA.Array.isArray,qmA=OmA,_mA=qmA,$mA=_mA,AGA=$mA,IGA=AGA,gGA=IGA,CGA=gGA,QGA=SA(CGA);function BGA(A){if(QGA(A))return A}var EGA=TypeError,iGA=9007199254740991,bX=function(A){if(A>iGA)throw EGA("Maximum allowed index exceeded");return A},eGA=kI,oGA=ZC,tGA=re,$0=function(A,I,g){eGA?oGA.f(A,I,tGA(0,g)):A[I]=g},ap=Jo,sGA=H0,vGA=Eg,rGA=GI,aGA=rGA("species"),Pp=Array,PGA=function(A){var I;return ap(A)&&(I=A.constructor,(sGA(I)&&(I===Pp||ap(I.prototype))||vGA(I)&&(I=I[aGA])===null)&&(I=void 0)),I===void 0?Pp:I},cGA=PGA,yX=function(A,I){return new(cGA(A))(I===0?0:I)},nGA=JA,lGA=GI,dGA=j0,hGA=lGA("species"),gL=function(A){return dGA>=51||!nGA(function(){var I=[];return(I.constructor={})[hGA]=function(){return{foo:1}},I[A](Boolean).foo!==1})},DGA=BA,uGA=JA,bGA=Jo,yGA=Eg,wGA=qQ,mGA=Ko,cp=bX,np=$0,GGA=yX,RGA=gL,LGA=GI,SGA=j0,wX=LGA("isConcatSpreadable"),TGA=SGA>=51||!uGA(function(){var A=[];return A[wX]=!1,A.concat()[0]!==A}),UGA=function(A){if(!yGA(A))return!1;var I=A[wX];return I!==void 0?!!I:bGA(A)},FGA=!TGA||!RGA("concat");DGA({target:"Array",proto:!0,forced:FGA},{concat:function(A){var I,g,C,Q,B,E=wGA(this),i=GGA(E,0),e=0;for(I=-1,C=arguments.length;Il;l++)if((i||l in a)&&(r=d(v=a[l],l,n),A))if(I)D[l]=r;else if(r)switch(A){case 3:return!0;case 5:return v;case 6:return l;case 2:up(D,v)}else switch(A){case 4:return!1;case 7:up(D,v)}return B?-1:C||Q?Q:D}},Ad={forEach:bp(0),filter:bp(2)},Qn=BA,KP=rI,QL=zI,wRA=HA,Rs=kI,dt=Gv,mRA=JA,ng=vg,GRA=eQ,tm=Hg,Id=sE,BL=HR,RRA=_Q,sm=re,xs=ce,SX=q0,LRA=kP,TX=CL,SRA=pP,UX=wv,FX=ZC,TRA=x0,YX=X0,yp=ne,URA=NP,EL=Lv,FRA=_0,kX=YP,wp=f0,YRA=GI,kRA=ZP,pRA=pI,NRA=RX,ZRA=vE,pX=le,gd=Ad.forEach,RC=FRA("hidden"),N9="Symbol",AP="prototype",KRA=pX.set,mp=pX.getterFor(N9),DB=Object[AP],os=KP.Symbol,dl=os&&os[AP],JRA=KP.RangeError,WRA=KP.TypeError,Vu=KP.QObject,NX=UX.f,Eo=FX.f,ZX=TX.f,VRA=YX.f,KX=wRA([].push),WE=EL("symbols"),JP=EL("op-symbols"),zRA=EL("wks"),zu=!Vu||!Vu[AP]||!Vu[AP].findChild,JX=function(A,I,g){var C=NX(DB,I);C&&delete DB[I],Eo(A,I,g),C&&A!==DB&&Eo(DB,I,C)},vm=Rs&&mRA(function(){return xs(Eo({},"a",{get:function(){return Eo(this,"a",{value:7}).a}})).a!==7})?JX:Eo,Mu=function(A,I){var g=WE[A]=xs(dl);return KRA(g,{type:N9,tag:A,description:I}),Rs||(g.description=I),g},Z9=function(A,I,g){A===DB&&Z9(JP,I,g),tm(A);var C=BL(I);return tm(g),ng(WE,C)?(g.enumerable?(ng(A,RC)&&A[RC][C]&&(A[RC][C]=!1),g=xs(g,{enumerable:sm(0,!1)})):(ng(A,RC)||Eo(A,RC,sm(1,xs(null))),A[RC][C]=!0),vm(A,C,g)):Eo(A,C,g)},rm=function(A,I){tm(A);var g=Id(I),C=SX(g).concat(VX(g));return gd(C,function(Q){Rs&&!QL(WX,g,Q)||Z9(A,Q,g[Q])}),A},MRA=function(A,I){return I===void 0?xs(A):rm(xs(A),I)},WX=function(A){var I=BL(A),g=QL(VRA,this,I);return!(this===DB&&ng(WE,I)&&!ng(JP,I))&&(!(g||!ng(this,I)||!ng(WE,I)||ng(this,RC)&&this[RC][I])||g)},Gp=function(A,I){var g=Id(A),C=BL(I);if(g!==DB||!ng(WE,C)||ng(JP,C)){var Q=NX(g,C);return!Q||!ng(WE,C)||ng(g,RC)&&g[RC][C]||(Q.enumerable=!0),Q}},Rp=function(A){var I=ZX(Id(A)),g=[];return gd(I,function(C){ng(WE,C)||ng(kX,C)||KX(g,C)}),g},VX=function(A){var I=A===DB,g=ZX(I?JP:Id(A)),C=[];return gd(g,function(Q){!ng(WE,Q)||I&&!ng(DB,Q)||KX(C,WE[Q])}),C};dt||(yp(dl=(os=function(){if(GRA(dl,this))throw new WRA("Symbol is not a constructor");var A=arguments.length&&arguments[0]!==void 0?RRA(arguments[0]):void 0,I=wp(A),g=function(C){var Q=this===void 0?KP:this;Q===DB&&QL(g,JP,C),ng(Q,RC)&&ng(Q[RC],I)&&(Q[RC][I]=!1);var B=sm(1,C);try{vm(Q,I,B)}catch(E){if(!(E instanceof JRA))throw E;JX(Q,I,B)}};return Rs&&zu&&vm(DB,I,{configurable:!0,set:g}),Mu(I,A)})[AP],"toString",function(){return mp(this).tag}),yp(os,"withoutSetter",function(A){return Mu(wp(A),A)}),YX.f=WX,FX.f=Z9,TRA.f=rm,UX.f=Gp,LRA.f=TX.f=Rp,SRA.f=VX,kRA.f=function(A){return Mu(YRA(A),A)},Rs&&URA(dl,"description",{configurable:!0,get:function(){return mp(this).description}})),Qn({global:!0,wrap:!0,forced:!dt,sham:!dt},{Symbol:os}),gd(SX(zRA),function(A){pRA(A)}),Qn({target:N9,stat:!0,forced:!dt},{useSetter:function(){zu=!0},useSimple:function(){zu=!1}}),Qn({target:"Object",stat:!0,forced:!dt,sham:!Rs},{create:MRA,defineProperty:Z9,defineProperties:rm,getOwnPropertyDescriptor:Gp}),Qn({target:"Object",stat:!0,forced:!dt},{getOwnPropertyNames:Rp}),NRA(),ZRA(os,N9),kX[RC]=!0;var XRA=Gv,zX=XRA&&!!Symbol.for&&!!Symbol.keyFor,jRA=BA,fRA=sg,HRA=vg,xRA=_Q,MX=Lv,ORA=zX,Xu=MX("string-to-symbol-registry"),qRA=MX("symbol-to-string-registry");jRA({target:"Symbol",stat:!0,forced:!ORA},{for:function(A){var I=xRA(A);if(HRA(Xu,I))return Xu[I];var g=fRA("Symbol")(I);return Xu[I]=g,qRA[g]=I,g}});var _RA=BA,$RA=vg,ALA=UP,ILA=Rv,gLA=Lv,CLA=zX,Lp=gLA("symbol-to-string-registry");_RA({target:"Symbol",stat:!0,forced:!CLA},{keyFor:function(A){if(!ALA(A))throw new TypeError(ILA(A)+" is not a symbol");if($RA(Lp,A))return Lp[A]}});var QLA=HA,Sp=Jo,BLA=YI,Tp=xE,ELA=_Q,Up=QLA([].push),iLA=function(A){if(BLA(A))return A;if(Sp(A)){for(var I=A.length,g=[],C=0;C=I.length)return A.target=null,on(void 0,!0);switch(A.kind){case"keys":return on(g,!1);case"values":return on(I[g],!1)}return on([g,I[g]],!1)},"values"),Hp.Arguments=Hp.Array;var WSA={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},VSA=WSA,zSA=rI,MSA=vE,xp=Tv;for(var fu in VSA)MSA(zSA[fu],fu),xp[fu]=xp.Array;var XSA=zLA,jSA=XSA,fSA=GI,HSA=ZC.f,Op=fSA("metadata"),qp=Function.prototype;qp[Op]===void 0&&HSA(qp,Op,{value:null});var xSA=pI;xSA("asyncDispose");var OSA=pI;OSA("dispose");var qSA=pI;qSA("metadata");var _SA=jSA,$SA=_SA,A2A=sg,I2A=HA,eL=A2A("Symbol"),g2A=eL.keyFor,C2A=I2A(eL.prototype.valueOf),Bj=eL.isRegisteredSymbol||function(A){try{return g2A(C2A(A))!==void 0}catch{return!1}},Q2A=BA,B2A=Bj;Q2A({target:"Symbol",stat:!0},{isRegisteredSymbol:B2A});for(var E2A=Lv,_p=sg,i2A=HA,e2A=UP,o2A=GI,tn=_p("Symbol"),$p=tn.isWellKnownSymbol,Ej=_p("Object","getOwnPropertyNames"),t2A=i2A(tn.prototype.valueOf),A7=E2A("wks"),Hu=0,I7=Ej(tn),s2A=I7.length;Hu=i?A?"":void 0:(C=C7(B,E))<55296||C>56319||E+1===i||(Q=C7(B,E+1))<56320||Q>57343?A?S2A(B,E):C:A?T2A(B,E,E+2):Q-56320+(C-55296<<10)+65536}},ej={codeAt:Q7(!1),charAt:Q7(!0)},U2A=ej.charAt,F2A=_Q,oj=le,Y2A=iL,B7=Qd,tj="String Iterator",k2A=oj.set,p2A=oj.getterFor(tj);Y2A(String,"String",function(A){k2A(this,{type:tj,string:F2A(A),index:0})},function(){var A,I=p2A(this),g=I.string,C=I.index;return C>=g.length?B7(void 0,!0):(A=U2A(g,C),I.index+=A.length,B7(A,!1))});var N2A=Sv,E7=XR,Z2A=mv,K2A=Tv,J2A=GI,W2A=J2A("iterator"),VP=function(A){if(!Z2A(A))return E7(A,W2A)||E7(A,"@@iterator")||K2A[N2A(A)]},V2A=VP,z2A=V2A,M2A=z2A,X2A=M2A,j2A=X2A,f2A=j2A,H2A=f2A,x2A=H2A,O2A=x2A,q2A=SA(O2A),_2A=kI,$2A=Jo,ATA=TypeError,ITA=Object.getOwnPropertyDescriptor,gTA=_2A&&!function(){if(this!==void 0)return!0;try{Object.defineProperty([],"length",{writable:!1}).length=1}catch(A){return A instanceof TypeError}}(),CTA=gTA?function(A,I){if($2A(A)&&!ITA(A,"length").writable)throw new ATA("Cannot set read only .length");return A.length=I}:function(A,I){return A.length=I},QTA=BA,BTA=qQ,ETA=Ko,iTA=CTA,eTA=bX,oTA=JA,tTA=oTA(function(){return[].push.call({length:4294967296},1)!==4294967297}),sTA=function(){try{Object.defineProperty([],"length",{writable:!1}).push()}catch(A){return A instanceof TypeError}},vTA=tTA||!sTA();QTA({target:"Array",proto:!0,forced:vTA},{push:function(A){var I=BTA(this),g=ETA(I),C=arguments.length;eTA(g+C);for(var Q=0;Q1?arguments[1]:void 0,B=Q!==void 0;B&&(Q=vUA(Q,C>2?arguments[2]:void 0));var E,i,e,o,t,s,v=hUA(I),r=0;if(!v||this===s7&&cUA(v))for(E=lUA(I),i=g?new this(E):s7(E);E>r;r++)s=B?Q(I[r],r):I[r],t7(i,r,s);else for(i=g?new this:[],t=(o=dUA(I,v)).next;!(e=rUA(t,o)).done;r++)s=B?PUA(o,Q,[e.value,r],!0):e.value,t7(i,r,s);return i.length=r,i},DUA=GI,cj=DUA("iterator"),nj=!1;try{var uUA=0,v7={next:function(){return{done:!!uUA++}},return:function(){nj=!0}};v7[cj]=function(){return this},Array.from(v7,function(){throw 2})}catch{}var lj=function(A,I){try{if(!I&&!nj)return!1}catch{return!1}var g=!1;try{var C={};C[cj]=function(){return{next:function(){return{done:g=!0}}}},A(C)}catch{}return g},bUA=BA,yUA=Pj,wUA=lj,mUA=!wUA(function(A){Array.from(A)});bUA({target:"Array",stat:!0,forced:mUA},{from:yUA});var GUA=OI,RUA=GUA.Array.from,LUA=RUA,SUA=LUA,TUA=SUA,UUA=TUA,FUA=UUA,YUA=FUA,kUA=YUA,pUA=SA(kUA);function r7(A,I){(I==null||I>A.length)&&(I=A.length);for(var g=0,C=Array(I);g1?arguments[1]:void 0)},NFA=BA;NFA({target:"Array",proto:!0,forced:[].forEach!==P7},{forEach:P7});var ZFA=de,KFA=ZFA("Array","forEach"),JFA=KFA,WFA=JFA,VFA=Sv,zFA=vg,MFA=eQ,XFA=WFA,_u=Array.prototype,jFA={DOMTokenList:!0,NodeList:!0},fFA=function(A){var I=A.forEach;return A===_u||MFA(_u,A)&&I===_u.forEach||zFA(jFA,VFA(A))?XFA:I},HFA=fFA,xFA=HFA,OFA=xFA,qFA=OFA,wj=qFA,la=SA(wj),_FA=BA,$FA=gj;_FA({target:"Object",stat:!0},{setPrototypeOf:$FA});var AYA=OI,IYA=AYA.Object.setPrototypeOf,gYA=IYA,CYA=gYA,QYA=CYA,BYA=QYA,EYA=BYA,iYA=EYA,eYA=iYA,IP=SA(eYA),oYA=sg,tYA=HA,sYA=kP,vYA=pP,rYA=Hg,aYA=tYA([].concat),mj=oYA("Reflect","ownKeys")||function(A){var I=sYA.f(rYA(A)),g=vYA.f;return g?aYA(I,g(A)):I},c7=vg,PYA=mj,cYA=wv,nYA=ZC,lYA=function(A,I,g){for(var C=PYA(I),Q=nYA.f,B=cYA.f,E=0;EB;B++)if((i=d(A[B]))&&l7(h7,i))return i;return new Dl(!1)}C=JYA(A,Q)}for(e=v?A.next:C.next;!(o=kYA(e,C)).done;){try{i=d(o.value)}catch(l){d7(C,"throw",l)}if(typeof i=="object"&&i&&l7(h7,i))return i}return new Dl(!1)},zYA=_Q,MYA=function(A,I){return A===void 0?arguments.length<2?"":I:zYA(A)},XYA=BA,jYA=eQ,fYA=Cd,J9=gj,HYA=lYA,Lj=ce,$u=ae,Ab=re,xYA=DYA,OYA=FYA,qYA=FB,_YA=MYA,$YA=GI,AkA=$YA("toStringTag"),W9=Error,IkA=[].push,Os=function(A,I){var g,C=jYA(Ib,this);J9?g=J9(new W9,C?fYA(this):Ib):(g=C?this:Lj(Ib),$u(g,AkA,"Error")),I!==void 0&&$u(g,"message",_YA(I)),OYA(g,Os,g.stack,1),arguments.length>2&&xYA(g,arguments[2]);var Q=[];return qYA(A,IkA,{that:Q}),$u(g,"errors",Q),g};J9?J9(Os,W9):HYA(Os,W9,{name:!0});var Ib=Os.prototype=Lj(W9.prototype,{constructor:Ab(1,Os),message:Ab(1,""),name:Ab(1,"AggregateError")});XYA({global:!0},{AggregateError:Os});var gP,ht,D7,gb,dr=rI,gkA=TP,CkA=xE,sn=function(A){return gkA.slice(0,A.length)===A},Sj=sn("Bun/")?"BUN":sn("Cloudflare-Workers")?"CLOUDFLARE":sn("Deno/")?"DENO":sn("Node.js/")?"NODE":dr.Bun&&typeof Bun.version=="string"?"BUN":dr.Deno&&typeof Deno.version=="object"?"DENO":CkA(dr.process)==="process"?"NODE":dr.window&&dr.document?"BROWSER":"REST",QkA=Sj,sL=QkA==="NODE",BkA=sg,EkA=NP,ikA=GI,ekA=kI,u7=ikA("species"),Tj=function(A){var I=BkA(A);ekA&&I&&!I[u7]&&EkA(I,u7,{configurable:!0,get:function(){return this}})},okA=eQ,tkA=TypeError,zP=function(A,I){if(okA(I,A))return A;throw new tkA("Incorrect invocation")},b7=Hg,skA=vX,vkA=mv,rkA=GI,akA=rkA("species"),Uj=function(A,I){var g,C=b7(A).constructor;return C===void 0||vkA(g=b7(C)[akA])?I:skA(g)},PkA=TypeError,MP=function(A,I){if(A1?a7A(arguments,1):[],g=P7A.f(this),C=$j(function(){return r7A(c7A(A),void 0,I)});return(C.error?g.reject:g.resolve)(C.value),g.promise}});var l7A=BA,d7A=rE;l7A({target:"Promise",stat:!0},{withResolvers:function(){var A=d7A.f(this);return{promise:A.promise,resolve:A.resolve,reject:A.reject}}});var h7A=BA,ym=wo,D7A=JA,u7A=sg,b7A=YI,y7A=Uj,f7=_j,w7A=ym&&ym.prototype,m7A=!!ym&&D7A(function(){w7A.finally.call({then:function(){}},function(){})});h7A({target:"Promise",proto:!0,real:!0,forced:m7A},{finally:function(A){var I=y7A(this,u7A("Promise")),g=b7A(A);return this.then(g?function(C){return f7(I,A()).then(function(){return C})}:A,g?function(C){return f7(I,A()).then(function(){throw C})}:A)}});var G7A=OI,R7A=G7A.Promise,L7A=R7A,S7A=L7A,T7A=S7A,U7A=T7A,F7A=U7A,Y7A=F7A,Af=Y7A,cL=SA(Af),k7A=BA,p7A=HA,N7A=Jo,Z7A=p7A([].reverse),H7=[1,2];k7A({target:"Array",proto:!0,forced:String(H7)===String(H7.reverse())},{reverse:function(){return N7A(this)&&(this.length=this.length),Z7A(this)}});var K7A=de,J7A=K7A("Array","reverse"),W7A=eQ,V7A=J7A,cb=Array.prototype,z7A=function(A){var I=A.reverse;return A===cb||W7A(cb,A)&&I===cb.reverse?V7A:I},M7A=z7A,X7A=M7A,j7A=X7A,f7A=j7A,H7A=f7A,x7A=H7A,O7A=x7A,q7A=SA(O7A);function sB(){/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */sB=function(){return I};var A,I={},g=Object.prototype,C=g.hasOwnProperty,Q=yo||function(K,p,J){K[p]=J.value},B=typeof _e=="function"?_e:{},E=B.iterator||"@@iterator",i=B.asyncIterator||"@@asyncIterator",e=B.toStringTag||"@@toStringTag";function o(K,p,J){return yo(K,p,{value:J,enumerable:!0,configurable:!0,writable:!0}),K[p]}try{o({},"")}catch{o=function(p,J,Y){return p[J]=Y}}function t(K,p,J,Y){var N=p&&p.prototype instanceof d?p:d,q=hl(N.prototype),IA=new EA(Y||[]);return Q(q,"_invoke",{value:S(K,J,IA)}),q}function s(K,p,J){try{return{type:"normal",arg:K.call(p,J)}}catch(Y){return{type:"throw",arg:Y}}}I.wrap=t;var v="suspendedStart",r="suspendedYield",n="executing",a="completed",c={};function d(){}function l(){}function h(){}var D={};o(D,E,function(){return this});var u=na&&na(na(eA([])));u&&u!==g&&C.call(u,E)&&(D=u);var w=h.prototype=d.prototype=hl(D);function b(K){var p;la(p=["next","throw","return"]).call(p,function(J){o(K,J,function(Y){return this._invoke(J,Y)})})}function y(K,p){function J(N,q,IA,gA){var vA=s(K[N],K,q);if(vA.type!=="throw"){var bA=vA.arg,nA=bA.value;return nA&&bo(nA)=="object"&&C.call(nA,"__await")?p.resolve(nA.__await).then(function(H){J("next",H,IA,gA)},function(H){J("throw",H,IA,gA)}):p.resolve(nA).then(function(H){bA.value=H,IA(bA)},function(H){return J("throw",H,IA,gA)})}gA(vA.arg)}var Y;Q(this,"_invoke",{value:function(N,q){function IA(){return new p(function(gA,vA){J(N,q,gA,vA)})}return Y=Y?Y.then(IA,IA):IA()}})}function S(K,p,J){var Y=v;return function(N,q){if(Y===n)throw Error("Generator is already running");if(Y===a){if(N==="throw")throw q;return{value:A,done:!0}}for(J.method=N,J.arg=q;;){var IA=J.delegate;if(IA){var gA=L(IA,J);if(gA){if(gA===c)continue;return gA}}if(J.method==="next")J.sent=J._sent=J.arg;else if(J.method==="throw"){if(Y===v)throw Y=a,J.arg;J.dispatchException(J.arg)}else J.method==="return"&&J.abrupt("return",J.arg);Y=n;var vA=s(K,p,J);if(vA.type==="normal"){if(Y=J.done?a:r,vA.arg===c)continue;return{value:vA.arg,done:J.done}}vA.type==="throw"&&(Y=a,J.method="throw",J.arg=vA.arg)}}}function L(K,p){var J=p.method,Y=K.iterator[J];if(Y===A)return p.delegate=null,J==="throw"&&K.iterator.return&&(p.method="return",p.arg=A,L(K,p),p.method==="throw")||J!=="return"&&(p.method="throw",p.arg=new TypeError("The iterator does not provide a '"+J+"' method")),c;var N=s(Y,K.iterator,p.arg);if(N.type==="throw")return p.method="throw",p.arg=N.arg,p.delegate=null,c;var q=N.arg;return q?q.done?(p[K.resultName]=q.value,p.next=K.nextLoc,p.method!=="return"&&(p.method="next",p.arg=A),p.delegate=null,c):q:(p.method="throw",p.arg=new TypeError("iterator result is not an object"),p.delegate=null,c)}function V(K){var p,J={tryLoc:K[0]};1 in K&&(J.catchLoc=K[1]),2 in K&&(J.finallyLoc=K[2],J.afterLoc=K[3]),K9(p=this.tryEntries).call(p,J)}function z(K){var p=K.completion||{};p.type="normal",delete p.arg,K.completion=p}function EA(K){this.tryEntries=[{tryLoc:"root"}],la(K).call(K,V,this),this.reset(!0)}function eA(K){if(K||K===""){var p=K[E];if(p)return p.call(K);if(typeof K.next=="function")return K;if(!isNaN(K.length)){var J=-1,Y=function N(){for(;++J=0;--Y){var N=this.tryEntries[Y],q=N.completion;if(N.tryLoc==="root")return J("end");if(N.tryLoc<=this.prev){var IA=C.call(N,"catchLoc"),gA=C.call(N,"finallyLoc");if(IA&&gA){if(this.prev=0;--J){var Y=this.tryEntries[J];if(Y.tryLoc<=this.prev&&C.call(Y,"finallyLoc")&&this.prev=0;--p){var J=this.tryEntries[p];if(J.finallyLoc===K)return this.complete(J.completion,J.afterLoc),z(J),c}},catch:function(K){for(var p=this.tryEntries.length-1;p>=0;--p){var J=this.tryEntries[p];if(J.tryLoc===K){var Y=J.completion;if(Y.type==="throw"){var N=Y.arg;z(J)}return N}}throw Error("illegal catch attempt")},delegateYield:function(K,p,J){return this.delegate={iterator:eA(K),resultName:p,nextLoc:J},this.method==="next"&&(this.arg=A),c}},I}function x7(A,I,g,C,Q,B,E){try{var i=A[B](E),e=i.value}catch(o){return void g(o)}i.done?I(e):cL.resolve(e).then(C,Q)}function Wr(A){return function(){var I=this,g=arguments;return new cL(function(C,Q){var B=A.apply(I,g);function E(e){x7(B,C,Q,E,i,"next",e)}function i(e){x7(B,C,Q,E,i,"throw",e)}E(void 0)})}}var _7A=BA,$7A=qQ,If=q0,ANA=JA,INA=ANA(function(){If(1)});_7A({target:"Object",stat:!0,forced:INA},{keys:function(A){return If($7A(A))}});var gNA=OI,CNA=gNA.Object.keys,QNA=CNA,BNA=QNA,ENA=BNA,iNA=ENA,eNA=iNA,oNA=eNA,gf=oNA,tNA=SA(gf),sNA=OI,vNA=sNA.Object.getOwnPropertySymbols,rNA=vNA,aNA=rNA,PNA=aNA,cNA=PNA,nNA=cNA,lNA=nNA,Cf=lNA,O7=SA(Cf),dNA=BA,hNA=Ad.filter,DNA=gL,uNA=DNA("filter");dNA({target:"Array",proto:!0,forced:!uNA},{filter:function(A){return hNA(this,A,arguments.length>1?arguments[1]:void 0)}});var bNA=de,yNA=bNA("Array","filter"),wNA=eQ,mNA=yNA,nb=Array.prototype,GNA=function(A){var I=A.filter;return A===nb||wNA(nb,A)&&I===nb.filter?mNA:I},RNA=GNA,LNA=RNA,SNA=LNA,TNA=SNA,UNA=TNA,FNA=UNA,YNA=FNA,kNA=SA(YNA),Qf={exports:{}},pNA=BA,NNA=JA,ZNA=sE,Bf=wv.f,Ef=kI,KNA=!Ef||NNA(function(){Bf(1)});pNA({target:"Object",stat:!0,forced:KNA,sham:!Ef},{getOwnPropertyDescriptor:function(A,I){return Bf(ZNA(A),I)}});var JNA=OI,ef=JNA.Object,WNA=Qf.exports=function(A,I){return ef.getOwnPropertyDescriptor(A,I)};ef.getOwnPropertyDescriptor.sham&&(WNA.sham=!0);var VNA=Qf.exports,zNA=VNA,MNA=zNA,XNA=MNA,jNA=XNA,fNA=jNA,HNA=fNA,of=HNA,tf=SA(of),xNA=BA,ONA=kI,qNA=mj,_NA=sE,$NA=wv,AZA=$0;xNA({target:"Object",stat:!0,sham:!ONA},{getOwnPropertyDescriptors:function(A){for(var I,g,C=_NA(A),Q=$NA.f,B=qNA(C),E={},i=0;B.length>i;)(g=Q(C,I=B[i++]))!==void 0&&AZA(E,I,g);return E}});var IZA=OI,gZA=IZA.Object.getOwnPropertyDescriptors,CZA=gZA,QZA=CZA,BZA=QZA,EZA=BZA,iZA=EZA,eZA=iZA,oZA=eZA,q7=SA(oZA),sf={exports:{}},tZA=BA,sZA=kI,_7=x0.f;tZA({target:"Object",stat:!0,forced:Object.defineProperties!==_7,sham:!sZA},{defineProperties:_7});var vZA=OI,vf=vZA.Object,rZA=sf.exports=function(A,I){return vf.defineProperties(A,I)};vf.defineProperties.sham&&(rZA.sham=!0);var aZA=sf.exports,PZA=aZA,cZA=PZA,nZA=cZA,lZA=nZA,dZA=lZA,hZA=dZA,DZA=hZA,uZA=SA(DZA),bZA=ZP,yZA=bZA.f("toPrimitive"),wZA=yZA,mZA=wZA,GZA=mZA,RZA=GZA,LZA=RZA,SZA=LZA,TZA=SZA,UZA=SA(TZA);function FZA(A,I){if(bo(A)!="object"||!A)return A;var g=A[UZA];if(g!==void 0){var C=g.call(A,I);if(bo(C)!="object")return C;throw new TypeError("@@toPrimitive must return a primitive value.")}return(I==="string"?String:Number)(A)}function rf(A){var I=FZA(A,"string");return bo(I)=="symbol"?I:I+""}function Lg(A,I,g){return(I=rf(I))in A?yo(A,I,{value:g,enumerable:!0,configurable:!0,writable:!0}):A[I]=g,A}function $7(A,I){var g=tNA(A);if(O7){var C=O7(A);I&&(C=kNA(C).call(C,function(Q){return tf(A,Q).enumerable})),K9(g).apply(g,C)}return g}function ut(A){for(var I=1;I1?arguments[1]:void 0);t=t?t.next:s.first;)for(v(t.value,t.key,this);t&&t.removed;)t=t.previous},has:function(o){return!!e(this,o)}}),QN(B,g?{get:function(o){var t=e(this,o);return t&&t.value},set:function(o,t){return i(this,o===0?0:o,t)}}:{add:function(o){return i(this,o=o===0?0:o,o)}}),Dr&&KKA(B,"size",{configurable:!0,get:function(){return E(this).size}}),Q},setStrong:function(A,I,g){var C=I+" Iterator",Q=db(I),B=db(C);MKA(A,I,function(E,i){iN(this,{type:C,target:E,state:Q(E),kind:i,last:null})},function(){for(var E=B(this),i=E.kind,e=E.last;e&&e.removed;)e=e.previous;return E.target&&(E.last=e=e?e.next:E.state.first)?BN(i==="keys"?e.key:i==="values"?e.value:[e.key,e.value],!1):(E.target=null,BN(void 0,!0))},g?"entries":"values",!g,!0),XKA(I)}},fKA=NKA,HKA=jKA;fKA("Map",function(A){return function(){return A(this,arguments.length?arguments[0]:void 0)}},HKA);var xKA=function(A,I){return I===1?function(g,C){return g[A](C)}:function(g,C,Q){return g[A](C,Q)}},OKA=sg,Pn=xKA,eN=OKA("Map"),oQ={Map:eN,set:Pn("set",2),get:Pn("get",1),has:Pn("has",1),remove:Pn("delete",1),proto:eN.prototype},qKA=BA,_KA=HA,$KA=Dg,A8A=Zo,I8A=FB,id=oQ,g8A=jR,C8A=id.Map,Q8A=id.has,B8A=id.get,E8A=id.set,i8A=_KA([].push);qKA({target:"Map",stat:!0,forced:g8A},{groupBy:function(A,I){A8A(A),$KA(I);var g=new C8A,C=0;return I8A(A,function(Q){var B=I(Q,C++);Q8A(g,B)?i8A(B8A(g,B),Q):E8A(g,B,[Q])}),g}});var e8A=OI,o8A=e8A.Map,t8A=o8A,s8A=t8A,v8A=s8A,r8A=v8A,a8A=pg,P8A=Hg,c8A=qQ,n8A=FB,l8A=function(A,I,g){return function(C){var Q=c8A(C),B=arguments.length,E=B>1?arguments[1]:void 0,i=E!==void 0,e=i?a8A(E,B>2?arguments[2]:void 0):void 0,o=new A,t=0;return n8A(Q,function(s){var v=i?e(s,t++):s;g?I(o,P8A(v)[0],v[1]):I(o,v)}),o}},d8A=BA,oN=oQ,h8A=l8A;d8A({target:"Map",stat:!0,forced:!0},{from:h8A(oN.Map,oN.set,!0)});var D8A=Hg,u8A=function(A,I,g){return function(){for(var C=new A,Q=arguments.length,B=0;B1?arguments[1]:void 0);return X8A(I,function(C,Q){if(!g(C,Q,I))return!1},!0)!==!1}});var j8A=BA,f8A=pg,H8A=xg,bf=oQ,x8A=aE,O8A=bf.Map,q8A=bf.set;j8A({target:"Map",proto:!0,real:!0,forced:!0},{filter:function(A){var I=H8A(this),g=f8A(A,arguments.length>1?arguments[1]:void 0),C=new O8A;return x8A(I,function(Q,B){g(Q,B,I)&&q8A(C,B,Q)}),C}});var _8A=BA,$8A=pg,AJA=xg,IJA=aE;_8A({target:"Map",proto:!0,real:!0,forced:!0},{find:function(A){var I=AJA(this),g=$8A(A,arguments.length>1?arguments[1]:void 0),C=IJA(I,function(Q,B){if(g(Q,B,I))return{value:Q}},!0);return C&&C.value}});var gJA=BA,CJA=pg,QJA=xg,BJA=aE;gJA({target:"Map",proto:!0,real:!0,forced:!0},{findKey:function(A){var I=QJA(this),g=CJA(A,arguments.length>1?arguments[1]:void 0),C=BJA(I,function(Q,B){if(g(Q,B,I))return{key:B}},!0);return C&&C.key}});var EJA=function(A,I){return A===I||A!=A&&I!=I},iJA=BA,eJA=EJA,oJA=xg,tJA=aE;iJA({target:"Map",proto:!0,real:!0,forced:!0},{includes:function(A){return tJA(oJA(this),function(I){if(eJA(I,A))return!0},!0)===!0}});var sJA=BA,vJA=xg,wL=oQ,rJA=wL.get,aJA=wL.has,PJA=wL.set;sJA({target:"Map",proto:!0,real:!0,forced:!0},{getOrInsert:function(A,I){return aJA(vJA(this),A)?rJA(this,A):(PJA(this,A,I),I)}});var cJA=BA,nJA=Dg,lJA=xg,mL=oQ,dJA=mL.get,hJA=mL.has,DJA=mL.set;cJA({target:"Map",proto:!0,real:!0,forced:!0},{getOrInsertComputed:function(A,I){if(lJA(this),nJA(I),hJA(this,A))return dJA(this,A);A===0&&1/A==-1/0&&(A=0);var g=I(A);return DJA(this,A,g),g}});var uJA=BA,bJA=xg,yJA=aE;uJA({target:"Map",proto:!0,real:!0,forced:!0},{keyOf:function(A){var I=yJA(bJA(this),function(g,C){if(g===A)return{key:C}},!0);return I&&I.key}});var wJA=BA,mJA=pg,GJA=xg,yf=oQ,RJA=aE,LJA=yf.Map,SJA=yf.set;wJA({target:"Map",proto:!0,real:!0,forced:!0},{mapKeys:function(A){var I=GJA(this),g=mJA(A,arguments.length>1?arguments[1]:void 0),C=new LJA;return RJA(I,function(Q,B){SJA(C,g(Q,B,I),Q)}),C}});var TJA=BA,UJA=pg,FJA=xg,wf=oQ,YJA=aE,kJA=wf.Map,pJA=wf.set;TJA({target:"Map",proto:!0,real:!0,forced:!0},{mapValues:function(A){var I=FJA(this),g=UJA(A,arguments.length>1?arguments[1]:void 0),C=new kJA;return YJA(I,function(Q,B){pJA(C,B,g(Q,B,I))}),C}});var NJA=BA,ZJA=xg,KJA=FB,JJA=oQ.set;NJA({target:"Map",proto:!0,real:!0,forced:!0},{merge:function(A){for(var I=ZJA(this),g=arguments.length,C=0;C1?arguments[1]:void 0);return xJA(I,function(C,Q){if(g(C,Q,I))return!0},!0)===!0}});var OJA=BA,rN=Dg,qJA=xg,GL=oQ,_JA=TypeError,$JA=GL.get,AWA=GL.has,IWA=GL.set;OJA({target:"Map",proto:!0,real:!0,forced:!0},{update:function(A,I){var g=qJA(this),C=arguments.length;rN(I);var Q=AWA(g,A);if(!Q&&C<3)throw new _JA("Updating absent value");var B=Q?$JA(g,A):rN(C>2?arguments[2]:void 0)(A,g);return IWA(g,A,I(B,A,g)),g}});var cn=zI,hb=Dg,nn=YI,gWA=Hg,CWA=TypeError,mf=function(A,I){var g,C=gWA(this),Q=hb(C.get),B=hb(C.has),E=hb(C.set),i=arguments.length>2?arguments[2]:void 0;if(!nn(I)&&!nn(i))throw new CWA("At least one callback required");return cn(B,C,A)?(g=cn(Q,C,A),nn(I)&&(g=I(g),cn(E,C,A,g))):nn(i)&&(g=i(),cn(E,C,A,g)),g},QWA=BA,BWA=mf;QWA({target:"Map",proto:!0,real:!0,forced:!0},{upsert:BWA});var EWA=BA,iWA=mf;EWA({target:"Map",proto:!0,real:!0,forced:!0},{updateOrInsert:iWA});var eWA=r8A,oWA=eWA,tWA=oWA,sWA=tWA,Db=SA(sWA),vWA=de,rWA=vWA("Array","concat"),aWA=eQ,PWA=rWA,ub=Array.prototype,cWA=function(A){var I=A.concat;return A===ub||aWA(ub,A)&&I===ub.concat?PWA:I},nWA=cWA,lWA=nWA,dWA=lWA,hWA=dWA,DWA=hWA,uWA=DWA,bWA=uWA,yWA=bWA,bC=SA(yWA),wWA=wj,Vr=SA(wWA),mWA=Af,GWA=SA(mWA),RWA=gf,LWA=SA(RWA),SWA=af,TWA=SA(SWA),UWA=O0,FWA=_Q,YWA=Zo,kWA=RangeError,pWA=function(A){var I=FWA(YWA(this)),g="",C=UWA(A);if(C<0||C===1/0)throw new kWA("Wrong number of repetitions");for(;C>0;(C>>>=1)&&(I+=I))1&C&&(g+=I);return g},Gf=HA,NWA=rX,aN=_Q,ZWA=pWA,KWA=Zo,JWA=Gf(ZWA),WWA=Gf("".slice),VWA=Math.ceil,zWA=function(A){return function(I,g,C){var Q,B,E=aN(KWA(I)),i=NWA(g),e=E.length,o=C===void 0?" ":aN(C);return i<=e||o===""?E:((B=JWA(o,VWA((Q=i-e)/o.length))).length>Q&&(B=WWA(B,0,Q)),A?E+B:B+E)}},MWA={start:zWA(!1)},he=HA,PN=JA,Re=MWA.start,XWA=RangeError,jWA=isFinite,fWA=Math.abs,OE=Date.prototype,bb=OE.toISOString,HWA=he(OE.getTime),xWA=he(OE.getUTCDate),OWA=he(OE.getUTCFullYear),qWA=he(OE.getUTCHours),_WA=he(OE.getUTCMilliseconds),$WA=he(OE.getUTCMinutes),A1A=he(OE.getUTCMonth),I1A=he(OE.getUTCSeconds),g1A=PN(function(){return bb.call(new Date(-50000000000001))!=="0385-07-25T07:06:39.999Z"})||!PN(function(){bb.call(new Date(NaN))})?function(){if(!jWA(HWA(this)))throw new XWA("Invalid time value");var A=this,I=OWA(A),g=_WA(A),C=I<0?"-":I>9999?"+":"";return C+Re(fWA(I),C?6:4,0)+"-"+Re(A1A(A)+1,2,0)+"-"+Re(xWA(A),2,0)+"T"+Re(qWA(A),2,0)+":"+Re($WA(A),2,0)+":"+Re(I1A(A),2,0)+"."+Re(g,3,0)+"Z"}:bb,C1A=BA,Rf=zI,Q1A=qQ,B1A=$M,E1A=g1A,i1A=xE,e1A=JA,o1A=e1A(function(){return new Date(NaN).toJSON()!==null||Rf(Date.prototype.toJSON,{toISOString:function(){return 1}})!==1});C1A({target:"Date",proto:!0,forced:o1A},{toJSON:function(A){var I=Q1A(this),g=B1A(I,"number");return typeof g!="number"||isFinite(g)?"toISOString"in I||i1A(I)!=="Date"?I.toISOString():Rf(E1A,I):null}});var wm=OI,t1A=yv;wm.JSON||(wm.JSON={stringify:JSON.stringify});var s1A=function(A,I,g){return t1A(wm.JSON.stringify,null,arguments)},v1A=s1A,r1A=v1A,a1A=r1A,P1A=a1A,c1A=P1A,n1A=c1A,l1A=n1A,d1A=l1A,mm=SA(d1A),h1A=BA,D1A=HA,u1A=_R,b1A=RangeError,cN=String.fromCharCode,nN=String.fromCodePoint,y1A=D1A([].join),w1A=!!nN&&nN.length!==1;h1A({target:"String",stat:!0,forced:w1A},{fromCodePoint:function(A){for(var I,g=[],C=arguments.length,Q=0;C>Q;){if(I=+arguments[Q++],u1A(I,1114111)!==I)throw new b1A(I+" is not a valid code point");g[Q]=I<65536?cN(I):cN(55296+((I-=65536)>>10),I%1024+56320)}return y1A(g,"")}});var m1A=JA,G1A=GI,R1A=kI,lN=jR,L1A=G1A("iterator"),ed=!m1A(function(){var A=new URL("b?a=1&b=2&c=3","https://a"),I=A.searchParams,g=new URLSearchParams("a=1&a=2&b=3"),C="";return A.pathname="c%20d",I.forEach(function(Q,B){I.delete("b"),C+=B+Q}),g.delete("a",2),g.delete("b",void 0),lN&&(!A.toJSON||!g.has("a",1)||g.has("a",2)||!g.has("a",void 0)||g.has("b"))||!I.size&&(lN||!R1A)||!I.sort||A.href!=="https://a/c%20d?a=1&c=3"||I.get("c")!=="3"||String(new URLSearchParams("?a=1"))!=="a=1"||!I[L1A]||new URL("https://a@b").username!=="a"||new URLSearchParams(new URLSearchParams("a=b")).get("a")!=="b"||new URL("https://тест").host!=="xn--e1aybc"||new URL("https://a#б").hash!=="#%D0%B1"||C!=="a1c3"||new URL("https://x",void 0).host!=="x"}),dN=Pe,S1A=Math.floor,Gm=function(A,I){var g=A.length;if(g<8)for(var C,Q,B=1;B0;)A[Q]=A[--Q];Q!==B++&&(A[Q]=C)}else for(var E=S1A(g/2),i=Gm(dN(A,0,E),I),e=Gm(dN(A,E),I),o=i.length,t=e.length,s=0,v=0;s0&&A&g;g>>=1)I++;return I},CVA=function(A){var I=null;switch(A.length){case 1:I=A[0];break;case 2:I=(31&A[0])<<6|63&A[1];break;case 3:I=(15&A[0])<<12|(63&A[1])<<6|63&A[2];break;case 4:I=(7&A[0])<<18|(63&A[1])<<12|(63&A[2])<<6|63&A[3]}return I>1114111?null:I},SN=function(A){for(var I=(A=Yf(A,AVA," ")).length,g="",C=0;CI){g+="%",C++;continue}var B=LN(A,C+1);if(B!=B){g+=Q,C++;continue}C+=2;var E=gVA(B);if(E===0)Q=x1A(B);else{if(E===1||E>4){g+=Gb,C++;continue}for(var i=[B],e=1;eI||yl(A,C)!=="%");){var o=LN(A,C+1);if(o!=o){C+=3;break}if(o>191||o<128)break;pi(i,o),C+=2,e++}if(i.length!==E){g+=Gb;continue}var t=CVA(i);t===null?g+=Gb:Q=O1A(t)}}g+=Q,C++}return g},QVA=/[!'()~]|%20/g,BVA={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},EVA=function(A){return BVA[A]},TN=function(A){return Yf(H1A(A),QVA,EVA)},Rb=p1A(function(A,I){Ff(this,{type:Uf,target:bQ(A).entries,index:0,kind:I})},_s,function(){var A=j1A(this),I=A.target,g=A.index++;if(!I||g>=I.length)return A.target=null,dn(void 0,!0);var C=I[g];switch(A.kind){case"keys":return dn(C.key,!1);case"values":return dn(C.value,!1)}return dn([C.key,C.value],!1)},!0),pf=function(A){this.entries=[],this.url=null,A!==void 0&&(Tf(A)?this.parseObject(A):this.parseQuery(typeof A=="string"?yl(A,0)==="?"?kf(A,1):A:gC(A)))};pf.prototype={type:_s,bindURL:function(A){this.url=A,this.update()},parseObject:function(A){var I,g,C,Q,B,E,i,e=this.entries,o=V1A(A);if(o)for(g=(I=bN(A,o)).next;!(C=ln(g,I)).done;){if(B=(Q=bN(J1A(C.value))).next,(E=ln(B,Q)).done||(i=ln(B,Q)).done||!ln(B,Q).done)throw new f1A("Expected sequence with length 2");pi(e,{key:gC(E.value),value:gC(i.value)})}else for(var t in A)N1A(A,t)&&pi(e,{key:t,value:gC(A[t])})},parseQuery:function(A){if(A)for(var I,g,C=this.entries,Q=RN(A,"&"),B=0;B0?arguments[0]:void 0));zr||(this.size=A.entries.length)},Kt=M9.prototype;if(Y1A(Kt,{append:function(A,I){var g=bQ(this);bt(arguments.length,2),pi(g.entries,{key:gC(A),value:gC(I)}),zr||this.length++,g.updateURL()},delete:function(A){for(var I=bQ(this),g=bt(arguments.length,1),C=I.entries,Q=gC(A),B=g<2?void 0:arguments[1],E=B===void 0?B:gC(B),i=0;ig.key?1:-1}),A.updateURL()},forEach:function(A){for(var I,g=bQ(this).entries,C=Z1A(A,arguments.length>1?arguments[1]:void 0),Q=0;Q1?UN(arguments[1]):{})}}),wb(z9)){var Lb=function(A){return Sf(this,mb),new z9(A,arguments.length>1?UN(arguments[1]):{})};mb.constructor=Lb,Lb.prototype=mb,yb({global:!0,dontCallGetSet:!0,forced:!0},{Request:Lb})}}var lQ,oVA={URLSearchParams:M9,getState:bQ},FN=kI,tVA=HA,sVA=zI,vVA=JA,Sb=q0,rVA=pP,aVA=X0,PVA=qQ,cVA=MR,yt=Object.assign,YN=Object.defineProperty,nVA=tVA([].concat),lVA=!yt||vVA(function(){if(FN&&yt({b:1},yt(YN({},"a",{enumerable:!0,get:function(){YN(this,"b",{value:3,enumerable:!1})}}),{b:2})).b!==1)return!0;var A={},I={},g=Symbol("assign detection"),C="abcdefghijklmnopqrst";return A[g]=7,C.split("").forEach(function(Q){I[Q]=Q}),yt({},A)[g]!==7||Sb(yt({},I)).join("")!==C})?function(A,I){for(var g=PVA(A),C=arguments.length,Q=1,B=rVA.f,E=aVA.f;C>Q;)for(var i,e=cVA(arguments[Q++]),o=B?nVA(Sb(e),B(e)):Sb(e),t=o.length,s=0;t>s;)i=o[s++],FN&&!sVA(E,e,i)||(g[i]=e[i]);return g}:yt,Wo=HA,Tb=2147483647,ua=36,Nf=1,Rm=26,dVA=38,hVA=700,DVA=72,uVA=128,bVA="-",yVA=/[^\0-\u007E]/,Zf=/[.\u3002\uFF0E\uFF61]/g,kN="Overflow: input needs wider integers to process",Ub=ua-Nf,pN=RangeError,wVA=Wo(Zf.exec),ss=Math.floor,Fb=String.fromCharCode,NN=Wo("".charCodeAt),Kf=Wo([].join),Ni=Wo([].push),mVA=Wo("".replace),GVA=Wo("".split),RVA=Wo("".toLowerCase),LVA=function(A){for(var I=[],g=0,C=A.length;g=55296&&Q<=56319&&g>1,A+=ss(A/I);A>Ub*Rm>>1;)A=ss(A/Ub),C+=ua;return ss(C+(Ub+1)*A/(A+dVA))},TVA=function(A){var I,g,C=[],Q=(A=LVA(A)).length,B=uVA,E=0,i=DVA;for(I=0;I=B&&gss((Tb-E)/s))throw new pN(kN);for(E+=(t-B)*s,B=t,I=0;ITb)throw new pN(kN);if(g===B){for(var v=E,r=ua;;){var n=r<=i?Nf:r>=i+Rm?Rm:r-i;if(v?@[\\\]^|]/,IzA=/[\0\t\n\r #/:<>?@[\\\]^|]/,gzA=/^[\u0000-\u0020]+/,CzA=/(^|[^\u0000-\u0020])[\u0000-\u0020]+$/,QzA=/[\t\n\r]/g,BzA=function(A){var I,g,C,Q,B,E,i,e=fVA(A,".");if(e.length&&e[e.length-1]===""&&e.length--,(I=e.length)>4)return A;for(g=[],C=0;C1&&FQ(Q,0)==="0"&&(B=nB(qVA,Q)?16:8,Q=ba(Q,B===8?1:2)),Q==="")E=0;else{if(!nB(B===10?$VA:B===8?_VA:zf,Q))return A;E=j9(Q,B)}Jt(g,E)}for(C=0;C=JN(256,5-I))return null}else if(E>255)return null;for(i=XVA(g),C=0;C6))return;for(C=0;v();){if(Q=null,C>0){if(!(v()==="."&&C<4))return;s++}if(!nB(Tm,v()))return;for(;nB(Tm,v());){if(B=j9(v(),10),Q===null)Q=B;else{if(Q===0)return;Q=10*Q+B}if(Q>255)return;s++}e[o]=256*e[o]+Q,++C!==2&&C!==4||o++}if(C!==4)return;break}if(v()===":"){if(s++,!v())return}else if(v())return;e[o++]=I}else{if(t!==null)return;s++,t=++o}}if(t!==null)for(E=o-t,o=7;o!==0&&E>0;)i=e[o],e[o--]=e[t+E-1],e[t+--E]=i;else if(o!==8)return;return e},izA=function(A){for(var I=null,g=1,C=null,Q=0,B=0;B<8;B++)A[B]!==0?(Q>g&&(I=C,g=Q),C=null,Q=0):(C===null&&(C=B),++Q);return Q>g?C:I},br=function(A){var I,g,C,Q;if(typeof A=="number"){for(I=[],g=0;g<4;g++)HVA(I,A%256),A=zVA(A/256);return Mr(I,".")}if(typeof A=="object"){for(I="",C=izA(A),g=0;g<8;g++)Q&&A[g]===0||(Q&&(Q=!1),C===g?(I+=g?":":"::",Q=!0):(I+=MVA(A[g],16),g<7&&(I+=":")));return"["+I+"]"}return A},wl={},Mf=UL({},wl,{" ":1,'"':1,"<":1,">":1,"`":1}),Xf=UL({},Mf,{"#":1,"?":1,"{":1,"}":1}),pb=UL({},Xf,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),oi=function(A,I){var g=pVA(A,0);return g>32&&g<127&&!Lm(I,A)?A:encodeURIComponent(A)},Dn={ftp:21,file:null,http:80,https:443,ws:80,wss:443},Xr=function(A,I){var g;return A.length===2&&nB(Vf,FQ(A,0))&&((g=FQ(A,1))===":"||!I&&g==="|")},VN=function(A){var I;return A.length>1&&Xr(ba(A,0,2))&&(A.length===2||(I=FQ(A,2))==="/"||I==="\\"||I==="?"||I==="#")},ezA=function(A){return A==="."||f9(A)==="%2e"},ozA=function(A){return(A=f9(A))===".."||A==="%2e."||A===".%2e"||A==="%2e%2e"},Nb={},zN={},Zb={},MN={},XN={},Kb={},jN={},fN={},un={},bn={},Jb={},Wb={},Vb={},zb={},HN={},Mb={},mt={},jB={},xN={},Se={},hE={},FL=function(A,I,g){var C,Q,B,E=yE(A);if(I){if(Q=this.parse(E))throw new Sm(Q);this.searchParams=null}else{if(g!==void 0&&(C=new FL(g,!0)),Q=this.parse(E,null,C))throw new Sm(Q);(B=VVA(new WVA)).bindURL(this),this.searchParams=B}};FL.prototype={type:"URL",parse:function(A,I,g){var C,Q,B,E,i=this,e=I||Nb,o=0,t="",s=!1,v=!1,r=!1;for(A=yE(A),I||(i.scheme="",i.username="",i.password="",i.host=null,i.port=null,i.path=[],i.query=null,i.fragment=null,i.cannotBeABaseURL=!1,A=Yb(A,gzA,""),A=Yb(A,CzA,"$1")),A=Yb(A,QzA,""),C=wt(A);o<=C.length;){switch(Q=C[o],e){case Nb:if(!Q||!nB(Vf,Q)){if(I)return kb;e=Zb;continue}t+=f9(Q),e=zN;break;case zN:if(Q&&(nB(OVA,Q)||Q==="+"||Q==="-"||Q==="."))t+=f9(Q);else{if(Q!==":"){if(I)return kb;t="",e=Zb,o=0;continue}if(I&&(i.isSpecial()!==Lm(Dn,t)||t==="file"&&(i.includesCredentials()||i.port!==null)||i.scheme==="file"&&!i.host))return;if(i.scheme=t,I)return void(i.isSpecial()&&Dn[i.scheme]===i.port&&(i.port=null));t="",i.scheme==="file"?e=zb:i.isSpecial()&&g&&g.scheme===i.scheme?e=MN:i.isSpecial()?e=fN:C[o+1]==="/"?(e=XN,o++):(i.cannotBeABaseURL=!0,Jt(i.path,""),e=xN)}break;case Zb:if(!g||g.cannotBeABaseURL&&Q!=="#")return kb;if(g.cannotBeABaseURL&&Q==="#"){i.scheme=g.scheme,i.path=BB(g.path),i.query=g.query,i.fragment="",i.cannotBeABaseURL=!0,e=hE;break}e=g.scheme==="file"?zb:Kb;continue;case MN:if(Q!=="/"||C[o+1]!=="/"){e=Kb;continue}e=un,o++;break;case XN:if(Q==="/"){e=bn;break}e=jB;continue;case Kb:if(i.scheme=g.scheme,Q===lQ)i.username=g.username,i.password=g.password,i.host=g.host,i.port=g.port,i.path=BB(g.path),i.query=g.query;else if(Q==="/"||Q==="\\"&&i.isSpecial())e=jN;else if(Q==="?")i.username=g.username,i.password=g.password,i.host=g.host,i.port=g.port,i.path=BB(g.path),i.query="",e=Se;else{if(Q!=="#"){i.username=g.username,i.password=g.password,i.host=g.host,i.port=g.port,i.path=BB(g.path),i.path.length--,e=jB;continue}i.username=g.username,i.password=g.password,i.host=g.host,i.port=g.port,i.path=BB(g.path),i.query=g.query,i.fragment="",e=hE}break;case jN:if(!i.isSpecial()||Q!=="/"&&Q!=="\\"){if(Q!=="/"){i.username=g.username,i.password=g.password,i.host=g.host,i.port=g.port,e=jB;continue}e=bn}else e=un;break;case fN:if(e=un,Q!=="/"||FQ(t,o+1)!=="/")continue;o++;break;case un:if(Q!=="/"&&Q!=="\\"){e=bn;continue}break;case bn:if(Q==="@"){s&&(t="%40"+t),s=!0,B=wt(t);for(var n=0;n65535)return WN;i.port=i.isSpecial()&&d===Dn[i.scheme]?null:d,t=""}if(I)return;e=mt;continue}return WN}t+=Q;break;case zb:if(i.scheme="file",Q==="/"||Q==="\\")e=HN;else{if(!g||g.scheme!=="file"){e=jB;continue}switch(Q){case lQ:i.host=g.host,i.path=BB(g.path),i.query=g.query;break;case"?":i.host=g.host,i.path=BB(g.path),i.query="",e=Se;break;case"#":i.host=g.host,i.path=BB(g.path),i.query=g.query,i.fragment="",e=hE;break;default:VN(Mr(BB(C,o),""))||(i.host=g.host,i.path=BB(g.path),i.shortenPath()),e=jB;continue}}break;case HN:if(Q==="/"||Q==="\\"){e=Mb;break}g&&g.scheme==="file"&&!VN(Mr(BB(C,o),""))&&(Xr(g.path[0],!0)?Jt(i.path,g.path[0]):i.host=g.host),e=jB;continue;case Mb:if(Q===lQ||Q==="/"||Q==="\\"||Q==="?"||Q==="#"){if(!I&&Xr(t))e=jB;else if(t===""){if(i.host="",I)return;e=mt}else{if(E=i.parseHost(t))return E;if(i.host==="localhost"&&(i.host=""),I)return;t="",e=mt}continue}t+=Q;break;case mt:if(i.isSpecial()){if(e=jB,Q!=="/"&&Q!=="\\")continue}else if(I||Q!=="?")if(I||Q!=="#"){if(Q!==lQ&&(e=jB,Q!=="/"))continue}else i.fragment="",e=hE;else i.query="",e=Se;break;case jB:if(Q===lQ||Q==="/"||Q==="\\"&&i.isSpecial()||!I&&(Q==="?"||Q==="#")){if(ozA(t)?(i.shortenPath(),Q==="/"||Q==="\\"&&i.isSpecial()||Jt(i.path,"")):ezA(t)?Q==="/"||Q==="\\"&&i.isSpecial()||Jt(i.path,""):(i.scheme==="file"&&!i.path.length&&Xr(t)&&(i.host&&(i.host=""),t=FQ(t,0)+":"),Jt(i.path,t)),t="",i.scheme==="file"&&(Q===lQ||Q==="?"||Q==="#"))for(;i.path.length>1&&i.path[0]==="";)jVA(i.path);Q==="?"?(i.query="",e=Se):Q==="#"&&(i.fragment="",e=hE)}else t+=oi(Q,Xf);break;case xN:Q==="?"?(i.query="",e=Se):Q==="#"?(i.fragment="",e=hE):Q!==lQ&&(i.path[0]+=oi(Q,wl));break;case Se:I||Q!=="#"?Q!==lQ&&(Q==="'"&&i.isSpecial()?i.query+="%27":i.query+=Q==="#"?"%23":oi(Q,wl)):(i.fragment="",e=hE);break;case hE:Q!==lQ&&(i.fragment+=oi(Q,Mf))}o++}},parseHost:function(A){var I,g,C;if(FQ(A,0)==="["){if(FQ(A,A.length-1)!=="]"||!(I=EzA(ba(A,1,-1))))return Le;this.host=I}else if(this.isSpecial()){if(A=NVA(A),nB(AzA,A)||(I=BzA(A))===null)return Le;this.host=I}else{if(nB(IzA,A))return Le;for(I="",g=wt(A),C=0;C1?arguments[1]:void 0,C=JVA(I,new FL(A,!1,g));SL||(I.href=C.serialize(),I.origin=C.getOrigin(),I.protocol=C.getProtocol(),I.username=C.getUsername(),I.password=C.getPassword(),I.host=C.getHost(),I.hostname=C.getHostname(),I.port=C.getPort(),I.pathname=C.getPathname(),I.search=C.getSearch(),I.searchParams=C.getSearchParams(),I.hash=C.getHash())},AC=$s.prototype,hQ=function(A,I){return{get:function(){return X9(this)[A]()},set:I&&function(g){return X9(this)[I](g)},configurable:!0,enumerable:!0}};if(SL&&(dQ(AC,"href",hQ("serialize","setHref")),dQ(AC,"origin",hQ("getOrigin")),dQ(AC,"protocol",hQ("getProtocol","setProtocol")),dQ(AC,"username",hQ("getUsername","setUsername")),dQ(AC,"password",hQ("getPassword","setPassword")),dQ(AC,"host",hQ("getHost","setHost")),dQ(AC,"hostname",hQ("getHostname","setHostname")),dQ(AC,"port",hQ("getPort","setPort")),dQ(AC,"pathname",hQ("getPathname","setPathname")),dQ(AC,"search",hQ("getSearch","setSearch")),dQ(AC,"searchParams",hQ("getSearchParams")),dQ(AC,"hash",hQ("getHash","setHash"))),hn(AC,"toJSON",function(){return X9(this).serialize()},{enumerable:!0}),hn(AC,"toString",function(){return X9(this).serialize()},{enumerable:!0}),ur){var ON=ur.createObjectURL,qN=ur.revokeObjectURL;ON&&hn($s,"createObjectURL",KN(ON,ur)),qN&&hn($s,"revokeObjectURL",KN(qN,ur))}ZVA($s,"URL"),FVA({global:!0,forced:!YVA,sham:!SL},{URL:$s});var tzA=BA,szA=sg,jf=JA,vzA=MP,_N=_Q,rzA=ed,YL=szA("URL"),azA=rzA&&jf(function(){YL.canParse()}),PzA=jf(function(){return YL.canParse.length!==1});tzA({target:"URL",stat:!0,forced:!azA||PzA},{canParse:function(A){var I=vzA(arguments.length,1),g=_N(A),C=I<2||arguments[1]===void 0?void 0:_N(arguments[1]);try{return!!new YL(g,C)}catch{return!1}}});var czA=BA,nzA=sg,lzA=MP,$N=_Q,dzA=ed,hzA=nzA("URL");czA({target:"URL",stat:!0,forced:!dzA},{parse:function(A){var I=lzA(arguments.length,1),g=$N(A),C=I<2||arguments[1]===void 0?void 0:$N(arguments[1]);try{return new hzA(g,C)}catch{return null}}});var DzA=OI,uzA=DzA.URL,bzA=uzA,yzA=bzA,wzA=yzA,mzA=wzA,GzA=mzA,RzA=GzA,LzA=RzA,SzA=LzA,AZ=SA(SzA),TzA=BA,UzA=Y9,FzA=aX.indexOf,YzA=yj,Um=UzA([].indexOf),ff=!!Um&&1/Um([1],1,-0)<0,kzA=ff||!YzA("indexOf");TzA({target:"Array",proto:!0,forced:kzA},{indexOf:function(A){var I=arguments.length>1?arguments[1]:void 0;return ff?Um(this,A,I)||0:FzA(this,A,I)}});var pzA=de,NzA=pzA("Array","indexOf"),ZzA=eQ,KzA=NzA,Xb=Array.prototype,JzA=function(A){var I=A.indexOf;return A===Xb||ZzA(Xb,A)&&I===Xb.indexOf?KzA:I},WzA=JzA,VzA=WzA,zzA=VzA,MzA=zzA,XzA=MzA,jzA=XzA,fzA=jzA,HzA=fzA,xzA=SA(HzA),Hf="IWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciB0PSJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6e307ZnVuY3Rpb24gZSh0KXtyZXR1cm4gdCYmdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCwiZGVmYXVsdCIpP3QuZGVmYXVsdDp0fXZhciByPWZ1bmN0aW9uKHQpe3JldHVybiB0JiZ0Lk1hdGg9PT1NYXRoJiZ0fSxuPXIoIm9iamVjdCI9PXR5cGVvZiBnbG9iYWxUaGlzJiZnbG9iYWxUaGlzKXx8cigib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93KXx8cigib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYpfHxyKCJvYmplY3QiPT10eXBlb2YgdCYmdCl8fHIoIm9iamVjdCI9PXR5cGVvZiB0JiZ0KXx8ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30oKXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSxvPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4hIXQoKX1jYXRjaChlKXtyZXR1cm4hMH19LGk9IW8oKGZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24oKXt9LmJpbmQoKTtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgdHx8dC5oYXNPd25Qcm9wZXJ0eSgicHJvdG90eXBlIil9KSksYT1pLHU9RnVuY3Rpb24ucHJvdG90eXBlLGM9dS5hcHBseSxzPXUuY2FsbCxmPSJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmUmVmbGVjdC5hcHBseXx8KGE/cy5iaW5kKGMpOmZ1bmN0aW9uKCl7cmV0dXJuIHMuYXBwbHkoYyxhcmd1bWVudHMpfSksbD1pLGg9RnVuY3Rpb24ucHJvdG90eXBlLHA9aC5jYWxsLHY9bCYmaC5iaW5kLmJpbmQocCxwKSxkPWw/djpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcC5hcHBseSh0LGFyZ3VtZW50cyl9fSx5PWQsZz15KHt9LnRvU3RyaW5nKSxtPXkoIiIuc2xpY2UpLGI9ZnVuY3Rpb24odCl7cmV0dXJuIG0oZyh0KSw4LC0xKX0sdz1iLE89ZCxTPWZ1bmN0aW9uKHQpe2lmKCJGdW5jdGlvbiI9PT13KHQpKXJldHVybiBPKHQpfSxFPSJvYmplY3QiPT10eXBlb2YgZG9jdW1lbnQmJmRvY3VtZW50LmFsbCxUPXZvaWQgMD09PUUmJnZvaWQgMCE9PUU/ZnVuY3Rpb24odCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHR8fHQ9PT1FfTpmdW5jdGlvbih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdH0seD17fSxqPSFvKChmdW5jdGlvbigpe3JldHVybiA3IT09T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LDEse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pWzFdfSkpLE09aSxrPUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsLEE9TT9rLmJpbmQoayk6ZnVuY3Rpb24oKXtyZXR1cm4gay5hcHBseShrLGFyZ3VtZW50cyl9LFA9e30sTD17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxSPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsTj1SJiYhTC5jYWxsKHsxOjJ9LDEpO1AuZj1OP2Z1bmN0aW9uKHQpe3ZhciBlPVIodGhpcyx0KTtyZXR1cm4hIWUmJmUuZW51bWVyYWJsZX06TDt2YXIgXyxDLEY9ZnVuY3Rpb24odCxlKXtyZXR1cm57ZW51bWVyYWJsZTohKDEmdCksY29uZmlndXJhYmxlOiEoMiZ0KSx3cml0YWJsZTohKDQmdCksdmFsdWU6ZX19LEk9byxEPWIsVT1PYmplY3Qsej1kKCIiLnNwbGl0KSxCPUkoKGZ1bmN0aW9uKCl7cmV0dXJuIVUoInoiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKX0pKT9mdW5jdGlvbih0KXtyZXR1cm4iU3RyaW5nIj09PUQodCk/eih0LCIiKTpVKHQpfTpVLEc9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXR9LEg9RyxXPVR5cGVFcnJvcixKPWZ1bmN0aW9uKHQpe2lmKEgodCkpdGhyb3cgbmV3IFcoIkNhbid0IGNhbGwgbWV0aG9kIG9uICIrdCk7cmV0dXJuIHR9LEs9QixWPUoscT1mdW5jdGlvbih0KXtyZXR1cm4gSyhWKHQpKX0sWT1ULFg9ZnVuY3Rpb24odCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0P251bGwhPT10OlkodCl9LFo9e30sJD1aLFE9bix0dD1ULGV0PWZ1bmN0aW9uKHQpe3JldHVybiB0dCh0KT90OnZvaWQgMH0scnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP2V0KCRbdF0pfHxldChRW3RdKTokW3RdJiYkW3RdW2VdfHxRW3RdJiZRW3RdW2VdfSxudD1kKHt9LmlzUHJvdG90eXBlT2YpLG90PW4ubmF2aWdhdG9yLGl0PW90JiZvdC51c2VyQWdlbnQsYXQ9aXQ/U3RyaW5nKGl0KToiIix1dD1uLGN0PWF0LHN0PXV0LnByb2Nlc3MsZnQ9dXQuRGVubyxsdD1zdCYmc3QudmVyc2lvbnN8fGZ0JiZmdC52ZXJzaW9uLGh0PWx0JiZsdC52ODtodCYmKEM9KF89aHQuc3BsaXQoIi4iKSlbMF0+MCYmX1swXTw0PzE6KyhfWzBdK19bMV0pKSwhQyYmY3QmJighKF89Y3QubWF0Y2goL0VkZ2VcLyhcZCspLykpfHxfWzFdPj03NCkmJihfPWN0Lm1hdGNoKC9DaHJvbWVcLyhcZCspLykpJiYoQz0rX1sxXSk7dmFyIHB0PUMsdnQ9cHQsZHQ9byx5dD1uLlN0cmluZyxndD0hIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJiFkdCgoZnVuY3Rpb24oKXt2YXIgdD1TeW1ib2woInN5bWJvbCBkZXRlY3Rpb24iKTtyZXR1cm4heXQodCl8fCEoT2JqZWN0KHQpaW5zdGFuY2VvZiBTeW1ib2wpfHwhU3ltYm9sLnNoYW0mJnZ0JiZ2dDw0MX0pKSxtdD1ndCYmIVN5bWJvbC5zaGFtJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcixidD1ydCx3dD1ULE90PW50LFN0PU9iamVjdCxFdD1tdD9mdW5jdGlvbih0KXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3ZhciBlPWJ0KCJTeW1ib2wiKTtyZXR1cm4gd3QoZSkmJk90KGUucHJvdG90eXBlLFN0KHQpKX0sVHQ9U3RyaW5nLHh0PWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gVHQodCl9Y2F0Y2goZSl7cmV0dXJuIk9iamVjdCJ9fSxqdD1ULE10PXh0LGt0PVR5cGVFcnJvcixBdD1mdW5jdGlvbih0KXtpZihqdCh0KSlyZXR1cm4gdDt0aHJvdyBuZXcga3QoTXQodCkrIiBpcyBub3QgYSBmdW5jdGlvbiIpfSxQdD1BdCxMdD1HLFJ0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dFtlXTtyZXR1cm4gTHQocik/dm9pZCAwOlB0KHIpfSxOdD1BLF90PVQsQ3Q9WCxGdD1UeXBlRXJyb3IsSXQ9e2V4cG9ydHM6e319LER0PW4sVXQ9T2JqZWN0LmRlZmluZVByb3BlcnR5LHp0PW4sQnQ9ZnVuY3Rpb24odCxlKXt0cnl7VXQoRHQsdCx7dmFsdWU6ZSxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KX1jYXRjaChyKXtEdFt0XT1lfXJldHVybiBlfSxHdD0iX19jb3JlLWpzX3NoYXJlZF9fIixIdD1JdC5leHBvcnRzPXp0W0d0XXx8QnQoR3Qse30pOyhIdC52ZXJzaW9uc3x8KEh0LnZlcnNpb25zPVtdKSkucHVzaCh7dmVyc2lvbjoiMy4zOS4wIixtb2RlOiJwdXJlIixjb3B5cmlnaHQ6IsKpIDIwMTQtMjAyNCBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSIsbGljZW5zZToiaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi92My4zOS4wL0xJQ0VOU0UiLHNvdXJjZToiaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMifSk7dmFyIFd0PUl0LmV4cG9ydHMsSnQ9V3QsS3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4gSnRbdF18fChKdFt0XT1lfHx7fSl9LFZ0PUoscXQ9T2JqZWN0LFl0PWZ1bmN0aW9uKHQpe3JldHVybiBxdChWdCh0KSl9LFh0PVl0LFp0PWQoe30uaGFzT3duUHJvcGVydHkpLCR0PU9iamVjdC5oYXNPd258fGZ1bmN0aW9uKHQsZSl7cmV0dXJuIFp0KFh0KHQpLGUpfSxRdD1kLHRlPTAsZWU9TWF0aC5yYW5kb20oKSxyZT1RdCgxLi50b1N0cmluZyksbmU9ZnVuY3Rpb24odCl7cmV0dXJuIlN5bWJvbCgiKyh2b2lkIDA9PT10PyIiOnQpKyIpXyIrcmUoKyt0ZStlZSwzNil9LG9lPUt0LGllPSR0LGFlPW5lLHVlPWd0LGNlPW10LHNlPW4uU3ltYm9sLGZlPW9lKCJ3a3MiKSxsZT1jZT9zZS5mb3J8fHNlOnNlJiZzZS53aXRob3V0U2V0dGVyfHxhZSxoZT1mdW5jdGlvbih0KXtyZXR1cm4gaWUoZmUsdCl8fChmZVt0XT11ZSYmaWUoc2UsdCk/c2VbdF06bGUoIlN5bWJvbC4iK3QpKSxmZVt0XX0scGU9QSx2ZT1YLGRlPUV0LHllPVJ0LGdlPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbjtpZigic3RyaW5nIj09PWUmJl90KHI9dC50b1N0cmluZykmJiFDdChuPU50KHIsdCkpKXJldHVybiBuO2lmKF90KHI9dC52YWx1ZU9mKSYmIUN0KG49TnQocix0KSkpcmV0dXJuIG47aWYoInN0cmluZyIhPT1lJiZfdChyPXQudG9TdHJpbmcpJiYhQ3Qobj1OdChyLHQpKSlyZXR1cm4gbjt0aHJvdyBuZXcgRnQoIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfSxtZT1UeXBlRXJyb3IsYmU9aGUoInRvUHJpbWl0aXZlIiksd2U9ZnVuY3Rpb24odCxlKXtpZighdmUodCl8fGRlKHQpKXJldHVybiB0O3ZhciByLG49eWUodCxiZSk7aWYobil7aWYodm9pZCAwPT09ZSYmKGU9ImRlZmF1bHQiKSxyPXBlKG4sdCxlKSwhdmUocil8fGRlKHIpKXJldHVybiByO3Rocm93IG5ldyBtZSgiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlIil9cmV0dXJuIHZvaWQgMD09PWUmJihlPSJudW1iZXIiKSxnZSh0LGUpfSxPZT13ZSxTZT1FdCxFZT1mdW5jdGlvbih0KXt2YXIgZT1PZSh0LCJzdHJpbmciKTtyZXR1cm4gU2UoZSk/ZTplKyIifSxUZT1YLHhlPW4uZG9jdW1lbnQsamU9VGUoeGUpJiZUZSh4ZS5jcmVhdGVFbGVtZW50KSxNZT1mdW5jdGlvbih0KXtyZXR1cm4gamU/eGUuY3JlYXRlRWxlbWVudCh0KTp7fX0sa2U9TWUsQWU9IWomJiFvKChmdW5jdGlvbigpe3JldHVybiA3IT09T2JqZWN0LmRlZmluZVByb3BlcnR5KGtlKCJkaXYiKSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KSksUGU9aixMZT1BLFJlPVAsTmU9RixfZT1xLENlPUVlLEZlPSR0LEllPUFlLERlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7eC5mPVBlP0RlOmZ1bmN0aW9uKHQsZSl7aWYodD1fZSh0KSxlPUNlKGUpLEllKXRyeXtyZXR1cm4gRGUodCxlKX1jYXRjaChyKXt9aWYoRmUodCxlKSlyZXR1cm4gTmUoIUxlKFJlLmYsdCxlKSx0W2VdKX07dmFyIFVlPW8semU9VCxCZT0vI3xcLnByb3RvdHlwZVwuLyxHZT1mdW5jdGlvbih0LGUpe3ZhciByPVdlW0hlKHQpXTtyZXR1cm4gcj09PUtlfHxyIT09SmUmJih6ZShlKT9VZShlKTohIWUpfSxIZT1HZS5ub3JtYWxpemU9ZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZyh0KS5yZXBsYWNlKEJlLCIuIikudG9Mb3dlckNhc2UoKX0sV2U9R2UuZGF0YT17fSxKZT1HZS5OQVRJVkU9Ik4iLEtlPUdlLlBPTFlGSUxMPSJQIixWZT1HZSxxZT1BdCxZZT1pLFhlPVMoUy5iaW5kKSxaZT1mdW5jdGlvbih0LGUpe3JldHVybiBxZSh0KSx2b2lkIDA9PT1lP3Q6WWU/WGUodCxlKTpmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KGUsYXJndW1lbnRzKX19LCRlPXt9LFFlPWomJm8oKGZ1bmN0aW9uKCl7cmV0dXJuIDQyIT09T2JqZWN0LmRlZmluZVByb3BlcnR5KChmdW5jdGlvbigpe30pLCJwcm90b3R5cGUiLHt2YWx1ZTo0Mix3cml0YWJsZTohMX0pLnByb3RvdHlwZX0pKSx0cj1YLGVyPVN0cmluZyxycj1UeXBlRXJyb3IsbnI9ZnVuY3Rpb24odCl7aWYodHIodCkpcmV0dXJuIHQ7dGhyb3cgbmV3IHJyKGVyKHQpKyIgaXMgbm90IGFuIG9iamVjdCIpfSxvcj1qLGlyPUFlLGFyPVFlLHVyPW5yLGNyPUVlLHNyPVR5cGVFcnJvcixmcj1PYmplY3QuZGVmaW5lUHJvcGVydHksbHI9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixocj0iZW51bWVyYWJsZSIscHI9ImNvbmZpZ3VyYWJsZSIsdnI9IndyaXRhYmxlIjskZS5mPW9yP2FyP2Z1bmN0aW9uKHQsZSxyKXtpZih1cih0KSxlPWNyKGUpLHVyKHIpLCJmdW5jdGlvbiI9PXR5cGVvZiB0JiYicHJvdG90eXBlIj09PWUmJiJ2YWx1ZSJpbiByJiZ2ciBpbiByJiYhclt2cl0pe3ZhciBuPWxyKHQsZSk7biYmblt2cl0mJih0W2VdPXIudmFsdWUscj17Y29uZmlndXJhYmxlOnByIGluIHI/cltwcl06bltwcl0sZW51bWVyYWJsZTpociBpbiByP3JbaHJdOm5baHJdLHdyaXRhYmxlOiExfSl9cmV0dXJuIGZyKHQsZSxyKX06ZnI6ZnVuY3Rpb24odCxlLHIpe2lmKHVyKHQpLGU9Y3IoZSksdXIociksaXIpdHJ5e3JldHVybiBmcih0LGUscil9Y2F0Y2gobil7fWlmKCJnZXQiaW4gcnx8InNldCJpbiByKXRocm93IG5ldyBzcigiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQiKTtyZXR1cm4idmFsdWUiaW4gciYmKHRbZV09ci52YWx1ZSksdH07dmFyIGRyPSRlLHlyPUYsZ3I9aj9mdW5jdGlvbih0LGUscil7cmV0dXJuIGRyLmYodCxlLHlyKDEscikpfTpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRbZV09cix0fSxtcj1uLGJyPWYsd3I9UyxPcj1ULFNyPXguZixFcj1WZSxUcj1aLHhyPVplLGpyPWdyLE1yPSR0LGtyPWZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHIsbixvKXtpZih0aGlzIGluc3RhbmNlb2YgZSl7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IHQ7Y2FzZSAxOnJldHVybiBuZXcgdChyKTtjYXNlIDI6cmV0dXJuIG5ldyB0KHIsbil9cmV0dXJuIG5ldyB0KHIsbixvKX1yZXR1cm4gYnIodCx0aGlzLGFyZ3VtZW50cyl9O3JldHVybiBlLnByb3RvdHlwZT10LnByb3RvdHlwZSxlfSxBcj1mdW5jdGlvbih0LGUpe3ZhciByLG4sbyxpLGEsdSxjLHMsZixsPXQudGFyZ2V0LGg9dC5nbG9iYWwscD10LnN0YXQsdj10LnByb3RvLGQ9aD9tcjpwP21yW2xdOm1yW2xdJiZtcltsXS5wcm90b3R5cGUseT1oP1RyOlRyW2xdfHxqcihUcixsLHt9KVtsXSxnPXkucHJvdG90eXBlO2ZvcihpIGluIGUpbj0hKHI9RXIoaD9pOmwrKHA/Ii4iOiIjIikraSx0LmZvcmNlZCkpJiZkJiZNcihkLGkpLHU9eVtpXSxuJiYoYz10LmRvbnRDYWxsR2V0U2V0PyhmPVNyKGQsaSkpJiZmLnZhbHVlOmRbaV0pLGE9biYmYz9jOmVbaV0sKHJ8fHZ8fHR5cGVvZiB1IT10eXBlb2YgYSkmJihzPXQuYmluZCYmbj94cihhLG1yKTp0LndyYXAmJm4/a3IoYSk6diYmT3IoYSk/d3IoYSk6YSwodC5zaGFtfHxhJiZhLnNoYW18fHUmJnUuc2hhbSkmJmpyKHMsInNoYW0iLCEwKSxqcih5LGkscyksdiYmKE1yKFRyLG89bCsiUHJvdG90eXBlIil8fGpyKFRyLG8se30pLGpyKFRyW29dLGksYSksdC5yZWFsJiZnJiYocnx8IWdbaV0pJiZqcihnLGksYSkpKX0sUHI9e307UHJbaGUoInRvU3RyaW5nVGFnIildPSJ6Ijt2YXIgTHI9IltvYmplY3Qgel0iPT09U3RyaW5nKFByKSxScj1McixOcj1ULF9yPWIsQ3I9aGUoInRvU3RyaW5nVGFnIiksRnI9T2JqZWN0LElyPSJBcmd1bWVudHMiPT09X3IoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKSxEcj1Scj9fcjpmdW5jdGlvbih0KXt2YXIgZSxyLG47cmV0dXJuIHZvaWQgMD09PXQ/IlVuZGVmaW5lZCI6bnVsbD09PXQ/Ik51bGwiOiJzdHJpbmciPT10eXBlb2Yocj1mdW5jdGlvbih0LGUpe3RyeXtyZXR1cm4gdFtlXX1jYXRjaChyKXt9fShlPUZyKHQpLENyKSk/cjpJcj9fcihlKToiT2JqZWN0Ij09PShuPV9yKGUpKSYmTnIoZS5jYWxsZWUpPyJBcmd1bWVudHMiOm59LFVyPURyLHpyPVN0cmluZyxCcj1mdW5jdGlvbih0KXtpZigiU3ltYm9sIj09PVVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nIik7cmV0dXJuIHpyKHQpfSxHcj17fSxIcj1NYXRoLmNlaWwsV3I9TWF0aC5mbG9vcixKcj1NYXRoLnRydW5jfHxmdW5jdGlvbih0KXt2YXIgZT0rdDtyZXR1cm4oZT4wP1dyOkhyKShlKX0sS3I9ZnVuY3Rpb24odCl7dmFyIGU9K3Q7cmV0dXJuIGUhPWV8fDA9PT1lPzA6SnIoZSl9LFZyPUtyLHFyPU1hdGgubWF4LFlyPU1hdGgubWluLFhyPWZ1bmN0aW9uKHQsZSl7dmFyIHI9VnIodCk7cmV0dXJuIHI8MD9xcihyK2UsMCk6WXIocixlKX0sWnI9S3IsJHI9TWF0aC5taW4sUXI9ZnVuY3Rpb24odCl7dmFyIGU9WnIodCk7cmV0dXJuIGU+MD8kcihlLDkwMDcxOTkyNTQ3NDA5OTEpOjB9LHRuPVFyLGVuPWZ1bmN0aW9uKHQpe3JldHVybiB0bih0Lmxlbmd0aCl9LHJuPXEsbm49WHIsb249ZW4sYW49ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUscixuKXt2YXIgbz1ybihlKSxpPW9uKG8pO2lmKDA9PT1pKXJldHVybiF0JiYtMTt2YXIgYSx1PW5uKG4saSk7aWYodCYmciE9cil7Zm9yKDtpPnU7KWlmKChhPW9bdSsrXSkhPWEpcmV0dXJuITB9ZWxzZSBmb3IoO2k+dTt1KyspaWYoKHR8fHUgaW4gbykmJm9bdV09PT1yKXJldHVybiB0fHx1fHwwO3JldHVybiF0JiYtMX19LHVuPXtpbmNsdWRlczphbighMCksaW5kZXhPZjphbighMSl9LGNuPXt9LHNuPSR0LGZuPXEsbG49dW4uaW5kZXhPZixobj1jbixwbj1kKFtdLnB1c2gpLHZuPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1mbih0KSxvPTAsaT1bXTtmb3IociBpbiBuKSFzbihobixyKSYmc24obixyKSYmcG4oaSxyKTtmb3IoO2UubGVuZ3RoPm87KXNuKG4scj1lW28rK10pJiYofmxuKGkscil8fHBuKGkscikpO3JldHVybiBpfSxkbj1bImNvbnN0cnVjdG9yIiwiaGFzT3duUHJvcGVydHkiLCJpc1Byb3RvdHlwZU9mIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJ0b0xvY2FsZVN0cmluZyIsInRvU3RyaW5nIiwidmFsdWVPZiJdLHluPXZuLGduPWRuLG1uPU9iamVjdC5rZXlzfHxmdW5jdGlvbih0KXtyZXR1cm4geW4odCxnbil9LGJuPWosd249UWUsT249JGUsU249bnIsRW49cSxUbj1tbjtHci5mPWJuJiYhd24/T2JqZWN0LmRlZmluZVByb3BlcnRpZXM6ZnVuY3Rpb24odCxlKXtTbih0KTtmb3IodmFyIHIsbj1FbihlKSxvPVRuKGUpLGk9by5sZW5ndGgsYT0wO2k+YTspT24uZih0LHI9b1thKytdLG5bcl0pO3JldHVybiB0fTt2YXIgeG4sam49cnQoImRvY3VtZW50IiwiZG9jdW1lbnRFbGVtZW50IiksTW49bmUsa249S3QoImtleXMiKSxBbj1mdW5jdGlvbih0KXtyZXR1cm4ga25bdF18fChrblt0XT1Nbih0KSl9LFBuPW5yLExuPUdyLFJuPWRuLE5uPWNuLF9uPWpuLENuPU1lLEZuPSJwcm90b3R5cGUiLEluPSJzY3JpcHQiLERuPUFuKCJJRV9QUk9UTyIpLFVuPWZ1bmN0aW9uKCl7fSx6bj1mdW5jdGlvbih0KXtyZXR1cm4iPCIrSW4rIj4iK3QrIjwvIitJbisiPiJ9LEJuPWZ1bmN0aW9uKHQpe3Qud3JpdGUoem4oIiIpKSx0LmNsb3NlKCk7dmFyIGU9dC5wYXJlbnRXaW5kb3cuT2JqZWN0O3JldHVybiB0PW51bGwsZX0sR249ZnVuY3Rpb24oKXt0cnl7eG49bmV3IEFjdGl2ZVhPYmplY3QoImh0bWxmaWxlIil9Y2F0Y2gobyl7fXZhciB0LGUscjtHbj0idW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50P2RvY3VtZW50LmRvbWFpbiYmeG4/Qm4oeG4pOihlPUNuKCJpZnJhbWUiKSxyPSJqYXZhIitJbisiOiIsZS5zdHlsZS5kaXNwbGF5PSJub25lIixfbi5hcHBlbmRDaGlsZChlKSxlLnNyYz1TdHJpbmcociksKHQ9ZS5jb250ZW50V2luZG93LmRvY3VtZW50KS5vcGVuKCksdC53cml0ZSh6bigiZG9jdW1lbnQuRj1PYmplY3QiKSksdC5jbG9zZSgpLHQuRik6Qm4oeG4pO2Zvcih2YXIgbj1Sbi5sZW5ndGg7bi0tOylkZWxldGUgR25bRm5dW1JuW25dXTtyZXR1cm4gR24oKX07Tm5bRG5dPSEwO3ZhciBIbj1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbih0LGUpe3ZhciByO3JldHVybiBudWxsIT09dD8oVW5bRm5dPVBuKHQpLHI9bmV3IFVuLFVuW0ZuXT1udWxsLHJbRG5dPXQpOnI9R24oKSx2b2lkIDA9PT1lP3I6TG4uZihyLGUpfSxXbj17fSxKbj12bixLbj1kbi5jb25jYXQoImxlbmd0aCIsInByb3RvdHlwZSIpO1duLmY9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXN8fGZ1bmN0aW9uKHQpe3JldHVybiBKbih0LEtuKX07dmFyIFZuPXt9LHFuPWQoW10uc2xpY2UpLFluPWIsWG49cSxabj1Xbi5mLCRuPXFuLFFuPSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzP09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdyk6W107Vm4uZj1mdW5jdGlvbih0KXtyZXR1cm4gUW4mJiJXaW5kb3ciPT09WW4odCk/ZnVuY3Rpb24odCl7dHJ5e3JldHVybiBabih0KX1jYXRjaChlKXtyZXR1cm4gJG4oUW4pfX0odCk6Wm4oWG4odCkpfTt2YXIgdG89e307dG8uZj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO3ZhciBlbz1ncixybz1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gbiYmbi5lbnVtZXJhYmxlP3RbZV09cjplbyh0LGUsciksdH0sbm89JGUsb289ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuby5mKHQsZSxyKX0saW89e30sYW89aGU7aW8uZj1hbzt2YXIgdW8sY28sc28sZm89Wixsbz0kdCxobz1pbyxwbz0kZS5mLHZvPWZ1bmN0aW9uKHQpe3ZhciBlPWZvLlN5bWJvbHx8KGZvLlN5bWJvbD17fSk7bG8oZSx0KXx8cG8oZSx0LHt2YWx1ZTpoby5mKHQpfSl9LHlvPUEsZ289cnQsbW89aGUsYm89cm8sd289ZnVuY3Rpb24oKXt2YXIgdD1nbygiU3ltYm9sIiksZT10JiZ0LnByb3RvdHlwZSxyPWUmJmUudmFsdWVPZixuPW1vKCJ0b1ByaW1pdGl2ZSIpO2UmJiFlW25dJiZibyhlLG4sKGZ1bmN0aW9uKHQpe3JldHVybiB5byhyLHRoaXMpfSkse2FyaXR5OjF9KX0sT289RHIsU289THI/e30udG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCAiK09vKHRoaXMpKyJdIn0sRW89THIsVG89JGUuZix4bz1ncixqbz0kdCxNbz1Tbyxrbz1oZSgidG9TdHJpbmdUYWciKSxBbz1mdW5jdGlvbih0LGUscixuKXt2YXIgbz1yP3Q6dCYmdC5wcm90b3R5cGU7byYmKGpvKG8sa28pfHxUbyhvLGtvLHtjb25maWd1cmFibGU6ITAsdmFsdWU6ZX0pLG4mJiFFbyYmeG8obywidG9TdHJpbmciLE1vKSl9LFBvPVQsTG89bi5XZWFrTWFwLFJvPVBvKExvKSYmL25hdGl2ZSBjb2RlLy50ZXN0KFN0cmluZyhMbykpLE5vPW4sX289WCxDbz1ncixGbz0kdCxJbz1XdCxEbz1BbixVbz1jbix6bz0iT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQiLEJvPU5vLlR5cGVFcnJvcixHbz1Oby5XZWFrTWFwO2lmKFJvfHxJby5zdGF0ZSl7dmFyIEhvPUlvLnN0YXRlfHwoSW8uc3RhdGU9bmV3IEdvKTtIby5nZXQ9SG8uZ2V0LEhvLmhhcz1Iby5oYXMsSG8uc2V0PUhvLnNldCx1bz1mdW5jdGlvbih0LGUpe2lmKEhvLmhhcyh0KSl0aHJvdyBuZXcgQm8oem8pO3JldHVybiBlLmZhY2FkZT10LEhvLnNldCh0LGUpLGV9LGNvPWZ1bmN0aW9uKHQpe3JldHVybiBIby5nZXQodCl8fHt9fSxzbz1mdW5jdGlvbih0KXtyZXR1cm4gSG8uaGFzKHQpfX1lbHNle3ZhciBXbz1Ebygic3RhdGUiKTtVb1tXb109ITAsdW89ZnVuY3Rpb24odCxlKXtpZihGbyh0LFdvKSl0aHJvdyBuZXcgQm8oem8pO3JldHVybiBlLmZhY2FkZT10LENvKHQsV28sZSksZX0sY289ZnVuY3Rpb24odCl7cmV0dXJuIEZvKHQsV28pP3RbV29dOnt9fSxzbz1mdW5jdGlvbih0KXtyZXR1cm4gRm8odCxXbyl9fXZhciBKbz17c2V0OnVvLGdldDpjbyxoYXM6c28sZW5mb3JjZTpmdW5jdGlvbih0KXtyZXR1cm4gc28odCk/Y28odCk6dW8odCx7fSl9LGdldHRlckZvcjpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHI7aWYoIV9vKGUpfHwocj1jbyhlKSkudHlwZSE9PXQpdGhyb3cgbmV3IEJvKCJJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICIrdCsiIHJlcXVpcmVkIik7cmV0dXJuIHJ9fX0sS289YixWbz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbih0KXtyZXR1cm4iQXJyYXkiPT09S28odCl9LHFvPVQsWW89V3QsWG89ZChGdW5jdGlvbi50b1N0cmluZyk7cW8oWW8uaW5zcGVjdFNvdXJjZSl8fChZby5pbnNwZWN0U291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiBYbyh0KX0pO3ZhciBabz1Zby5pbnNwZWN0U291cmNlLCRvPWQsUW89byx0aT1ULGVpPURyLHJpPVpvLG5pPWZ1bmN0aW9uKCl7fSxvaT1ydCgiUmVmbGVjdCIsImNvbnN0cnVjdCIpLGlpPS9eXHMqKD86Y2xhc3N8ZnVuY3Rpb24pXGIvLGFpPSRvKGlpLmV4ZWMpLHVpPSFpaS50ZXN0KG5pKSxjaT1mdW5jdGlvbih0KXtpZighdGkodCkpcmV0dXJuITE7dHJ5e3JldHVybiBvaShuaSxbXSx0KSwhMH1jYXRjaChlKXtyZXR1cm4hMX19LHNpPWZ1bmN0aW9uKHQpe2lmKCF0aSh0KSlyZXR1cm4hMTtzd2l0Y2goZWkodCkpe2Nhc2UiQXN5bmNGdW5jdGlvbiI6Y2FzZSJHZW5lcmF0b3JGdW5jdGlvbiI6Y2FzZSJBc3luY0dlbmVyYXRvckZ1bmN0aW9uIjpyZXR1cm4hMX10cnl7cmV0dXJuIHVpfHwhIWFpKGlpLHJpKHQpKX1jYXRjaChlKXtyZXR1cm4hMH19O3NpLnNoYW09ITA7dmFyIGZpPSFvaXx8UW8oKGZ1bmN0aW9uKCl7dmFyIHQ7cmV0dXJuIGNpKGNpLmNhbGwpfHwhY2koT2JqZWN0KXx8IWNpKChmdW5jdGlvbigpe3Q9ITB9KSl8fHR9KSk/c2k6Y2ksbGk9Vm8saGk9ZmkscGk9WCx2aT1oZSgic3BlY2llcyIpLGRpPUFycmF5LHlpPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiBsaSh0KSYmKGU9dC5jb25zdHJ1Y3RvciwoaGkoZSkmJihlPT09ZGl8fGxpKGUucHJvdG90eXBlKSl8fHBpKGUpJiZudWxsPT09KGU9ZVt2aV0pKSYmKGU9dm9pZCAwKSksdm9pZCAwPT09ZT9kaTplfSxnaT1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcoeWkodCkpKDA9PT1lPzA6ZSl9LG1pPVplLGJpPUIsd2k9WXQsT2k9ZW4sU2k9Z2ksRWk9ZChbXS5wdXNoKSxUaT1mdW5jdGlvbih0KXt2YXIgZT0xPT09dCxyPTI9PT10LG49Mz09PXQsbz00PT09dCxpPTY9PT10LGE9Nz09PXQsdT01PT09dHx8aTtyZXR1cm4gZnVuY3Rpb24oYyxzLGYsbCl7Zm9yKHZhciBoLHAsdj13aShjKSxkPWJpKHYpLHk9T2koZCksZz1taShzLGYpLG09MCxiPWx8fFNpLHc9ZT9iKGMseSk6cnx8YT9iKGMsMCk6dm9pZCAwO3k+bTttKyspaWYoKHV8fG0gaW4gZCkmJihwPWcoaD1kW21dLG0sdiksdCkpaWYoZSl3W21dPXA7ZWxzZSBpZihwKXN3aXRjaCh0KXtjYXNlIDM6cmV0dXJuITA7Y2FzZSA1OnJldHVybiBoO2Nhc2UgNjpyZXR1cm4gbTtjYXNlIDI6RWkodyxoKX1lbHNlIHN3aXRjaCh0KXtjYXNlIDQ6cmV0dXJuITE7Y2FzZSA3OkVpKHcsaCl9cmV0dXJuIGk/LTE6bnx8bz9vOnd9fSx4aT17Zm9yRWFjaDpUaSgwKSxtYXA6VGkoMSksZmlsdGVyOlRpKDIpLHNvbWU6VGkoMyksZXZlcnk6VGkoNCksZmluZDpUaSg1KSxmaW5kSW5kZXg6VGkoNiksZmlsdGVyUmVqZWN0OlRpKDcpfSxqaT1BcixNaT1uLGtpPUEsQWk9ZCxQaT1qLExpPWd0LFJpPW8sTmk9JHQsX2k9bnQsQ2k9bnIsRmk9cSxJaT1FZSxEaT1CcixVaT1GLHppPUhuLEJpPW1uLEdpPVduLEhpPVZuLFdpPXRvLEppPXgsS2k9JGUsVmk9R3IscWk9UCxZaT1ybyxYaT1vbyxaaT1LdCwkaT1jbixRaT1uZSx0YT1oZSxlYT1pbyxyYT12byxuYT13byxvYT1BbyxpYT1KbyxhYT14aS5mb3JFYWNoLHVhPUFuKCJoaWRkZW4iKSxjYT0iU3ltYm9sIixzYT0icHJvdG90eXBlIixmYT1pYS5zZXQsbGE9aWEuZ2V0dGVyRm9yKGNhKSxoYT1PYmplY3Rbc2FdLHBhPU1pLlN5bWJvbCx2YT1wYSYmcGFbc2FdLGRhPU1pLlJhbmdlRXJyb3IseWE9TWkuVHlwZUVycm9yLGdhPU1pLlFPYmplY3QsbWE9SmkuZixiYT1LaS5mLHdhPUhpLmYsT2E9cWkuZixTYT1BaShbXS5wdXNoKSxFYT1aaSgic3ltYm9scyIpLFRhPVppKCJvcC1zeW1ib2xzIikseGE9WmkoIndrcyIpLGphPSFnYXx8IWdhW3NhXXx8IWdhW3NhXS5maW5kQ2hpbGQsTWE9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPW1hKGhhLGUpO24mJmRlbGV0ZSBoYVtlXSxiYSh0LGUsciksbiYmdCE9PWhhJiZiYShoYSxlLG4pfSxrYT1QaSYmUmkoKGZ1bmN0aW9uKCl7cmV0dXJuIDchPT16aShiYSh7fSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiBiYSh0aGlzLCJhIix7dmFsdWU6N30pLmF9fSkpLmF9KSk/TWE6YmEsQWE9ZnVuY3Rpb24odCxlKXt2YXIgcj1FYVt0XT16aSh2YSk7cmV0dXJuIGZhKHIse3R5cGU6Y2EsdGFnOnQsZGVzY3JpcHRpb246ZX0pLFBpfHwoci5kZXNjcmlwdGlvbj1lKSxyfSxQYT1mdW5jdGlvbih0LGUscil7dD09PWhhJiZQYShUYSxlLHIpLENpKHQpO3ZhciBuPUlpKGUpO3JldHVybiBDaShyKSxOaShFYSxuKT8oci5lbnVtZXJhYmxlPyhOaSh0LHVhKSYmdFt1YV1bbl0mJih0W3VhXVtuXT0hMSkscj16aShyLHtlbnVtZXJhYmxlOlVpKDAsITEpfSkpOihOaSh0LHVhKXx8YmEodCx1YSxVaSgxLHppKG51bGwpKSksdFt1YV1bbl09ITApLGthKHQsbixyKSk6YmEodCxuLHIpfSxMYT1mdW5jdGlvbih0LGUpe0NpKHQpO3ZhciByPUZpKGUpLG49QmkocikuY29uY2F0KENhKHIpKTtyZXR1cm4gYWEobiwoZnVuY3Rpb24oZSl7UGkmJiFraShSYSxyLGUpfHxQYSh0LGUscltlXSl9KSksdH0sUmE9ZnVuY3Rpb24odCl7dmFyIGU9SWkodCkscj1raShPYSx0aGlzLGUpO3JldHVybiEodGhpcz09PWhhJiZOaShFYSxlKSYmIU5pKFRhLGUpKSYmKCEocnx8IU5pKHRoaXMsZSl8fCFOaShFYSxlKXx8TmkodGhpcyx1YSkmJnRoaXNbdWFdW2VdKXx8cil9LE5hPWZ1bmN0aW9uKHQsZSl7dmFyIHI9RmkodCksbj1JaShlKTtpZihyIT09aGF8fCFOaShFYSxuKXx8TmkoVGEsbikpe3ZhciBvPW1hKHIsbik7cmV0dXJuIW98fCFOaShFYSxuKXx8Tmkocix1YSkmJnJbdWFdW25dfHwoby5lbnVtZXJhYmxlPSEwKSxvfX0sX2E9ZnVuY3Rpb24odCl7dmFyIGU9d2EoRmkodCkpLHI9W107cmV0dXJuIGFhKGUsKGZ1bmN0aW9uKHQpe05pKEVhLHQpfHxOaSgkaSx0KXx8U2Eocix0KX0pKSxyfSxDYT1mdW5jdGlvbih0KXt2YXIgZT10PT09aGEscj13YShlP1RhOkZpKHQpKSxuPVtdO3JldHVybiBhYShyLChmdW5jdGlvbih0KXshTmkoRWEsdCl8fGUmJiFOaShoYSx0KXx8U2EobixFYVt0XSl9KSksbn07TGl8fChwYT1mdW5jdGlvbigpe2lmKF9pKHZhLHRoaXMpKXRocm93IG5ldyB5YSgiU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yIik7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP0RpKGFyZ3VtZW50c1swXSk6dm9pZCAwLGU9UWkodCkscj1mdW5jdGlvbih0KXt2YXIgbj12b2lkIDA9PT10aGlzP01pOnRoaXM7bj09PWhhJiZraShyLFRhLHQpLE5pKG4sdWEpJiZOaShuW3VhXSxlKSYmKG5bdWFdW2VdPSExKTt2YXIgbz1VaSgxLHQpO3RyeXtrYShuLGUsbyl9Y2F0Y2goaSl7aWYoIShpIGluc3RhbmNlb2YgZGEpKXRocm93IGk7TWEobixlLG8pfX07cmV0dXJuIFBpJiZqYSYma2EoaGEsZSx7Y29uZmlndXJhYmxlOiEwLHNldDpyfSksQWEoZSx0KX0sWWkodmE9cGFbc2FdLCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIGxhKHRoaXMpLnRhZ30pKSxZaShwYSwid2l0aG91dFNldHRlciIsKGZ1bmN0aW9uKHQpe3JldHVybiBBYShRaSh0KSx0KX0pKSxxaS5mPVJhLEtpLmY9UGEsVmkuZj1MYSxKaS5mPU5hLEdpLmY9SGkuZj1fYSxXaS5mPUNhLGVhLmY9ZnVuY3Rpb24odCl7cmV0dXJuIEFhKHRhKHQpLHQpfSxQaSYmWGkodmEsImRlc2NyaXB0aW9uIix7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBsYSh0aGlzKS5kZXNjcmlwdGlvbn19KSksamkoe2dsb2JhbDohMCxjb25zdHJ1Y3RvcjohMCx3cmFwOiEwLGZvcmNlZDohTGksc2hhbTohTGl9LHtTeW1ib2w6cGF9KSxhYShCaSh4YSksKGZ1bmN0aW9uKHQpe3JhKHQpfSkpLGppKHt0YXJnZXQ6Y2Esc3RhdDohMCxmb3JjZWQ6IUxpfSx7dXNlU2V0dGVyOmZ1bmN0aW9uKCl7amE9ITB9LHVzZVNpbXBsZTpmdW5jdGlvbigpe2phPSExfX0pLGppKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6IUxpLHNoYW06IVBpfSx7Y3JlYXRlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWU/emkodCk6TGEoemkodCksZSl9LGRlZmluZVByb3BlcnR5OlBhLGRlZmluZVByb3BlcnRpZXM6TGEsZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOk5hfSksamkoe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDohTGl9LHtnZXRPd25Qcm9wZXJ0eU5hbWVzOl9hfSksbmEoKSxvYShwYSxjYSksJGlbdWFdPSEwO3ZhciBGYT1ndCYmISFTeW1ib2wuZm9yJiYhIVN5bWJvbC5rZXlGb3IsSWE9QXIsRGE9cnQsVWE9JHQsemE9QnIsQmE9S3QsR2E9RmEsSGE9QmEoInN0cmluZy10by1zeW1ib2wtcmVnaXN0cnkiKSxXYT1CYSgic3ltYm9sLXRvLXN0cmluZy1yZWdpc3RyeSIpO0lhKHt0YXJnZXQ6IlN5bWJvbCIsc3RhdDohMCxmb3JjZWQ6IUdhfSx7Zm9yOmZ1bmN0aW9uKHQpe3ZhciBlPXphKHQpO2lmKFVhKEhhLGUpKXJldHVybiBIYVtlXTt2YXIgcj1EYSgiU3ltYm9sIikoZSk7cmV0dXJuIEhhW2VdPXIsV2Fbcl09ZSxyfX0pO3ZhciBKYT1BcixLYT0kdCxWYT1FdCxxYT14dCxZYT1GYSxYYT1LdCgic3ltYm9sLXRvLXN0cmluZy1yZWdpc3RyeSIpO0phKHt0YXJnZXQ6IlN5bWJvbCIsc3RhdDohMCxmb3JjZWQ6IVlhfSx7a2V5Rm9yOmZ1bmN0aW9uKHQpe2lmKCFWYSh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKHFhKHQpKyIgaXMgbm90IGEgc3ltYm9sIik7aWYoS2EoWGEsdCkpcmV0dXJuIFhhW3RdfX0pO3ZhciBaYT1WbywkYT1ULFFhPWIsdHU9QnIsZXU9ZChbXS5wdXNoKSxydT1BcixudT1ydCxvdT1mLGl1PUEsYXU9ZCx1dT1vLGN1PVQsc3U9RXQsZnU9cW4sbHU9ZnVuY3Rpb24odCl7aWYoJGEodCkpcmV0dXJuIHQ7aWYoWmEodCkpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPVtdLG49MDtuPGU7bisrKXt2YXIgbz10W25dOyJzdHJpbmciPT10eXBlb2Ygbz9ldShyLG8pOiJudW1iZXIiIT10eXBlb2YgbyYmIk51bWJlciIhPT1RYShvKSYmIlN0cmluZyIhPT1RYShvKXx8ZXUocix0dShvKSl9dmFyIGk9ci5sZW5ndGgsYT0hMDtyZXR1cm4gZnVuY3Rpb24odCxlKXtpZihhKXJldHVybiBhPSExLGU7aWYoWmEodGhpcykpcmV0dXJuIGU7Zm9yKHZhciBuPTA7bjxpO24rKylpZihyW25dPT09dClyZXR1cm4gZX19fSxodT1ndCxwdT1TdHJpbmcsdnU9bnUoIkpTT04iLCJzdHJpbmdpZnkiKSxkdT1hdSgvLi8uZXhlYykseXU9YXUoIiIuY2hhckF0KSxndT1hdSgiIi5jaGFyQ29kZUF0KSxtdT1hdSgiIi5yZXBsYWNlKSxidT1hdSgxLi50b1N0cmluZyksd3U9L1tcdUQ4MDAtXHVERkZGXS9nLE91PS9eW1x1RDgwMC1cdURCRkZdJC8sU3U9L15bXHVEQzAwLVx1REZGRl0kLyxFdT0haHV8fHV1KChmdW5jdGlvbigpe3ZhciB0PW51KCJTeW1ib2wiKSgic3RyaW5naWZ5IGRldGVjdGlvbiIpO3JldHVybiJbbnVsbF0iIT09dnUoW3RdKXx8Int9IiE9PXZ1KHthOnR9KXx8Int9IiE9PXZ1KE9iamVjdCh0KSl9KSksVHU9dXUoKGZ1bmN0aW9uKCl7cmV0dXJuJyJcXHVkZjA2XFx1ZDgzNCInIT09dnUoIlx1ZGYwNlx1ZDgzNCIpfHwnIlxcdWRlYWQiJyE9PXZ1KCJcdWRlYWQiKX0pKSx4dT1mdW5jdGlvbih0LGUpe3ZhciByPWZ1KGFyZ3VtZW50cyksbj1sdShlKTtpZihjdShuKXx8dm9pZCAwIT09dCYmIXN1KHQpKXJldHVybiByWzFdPWZ1bmN0aW9uKHQsZSl7aWYoY3UobikmJihlPWl1KG4sdGhpcyxwdSh0KSxlKSksIXN1KGUpKXJldHVybiBlfSxvdSh2dSxudWxsLHIpfSxqdT1mdW5jdGlvbih0LGUscil7dmFyIG49eXUocixlLTEpLG89eXUocixlKzEpO3JldHVybiBkdShPdSx0KSYmIWR1KFN1LG8pfHxkdShTdSx0KSYmIWR1KE91LG4pPyJcXHUiK2J1KGd1KHQsMCksMTYpOnR9O3Z1JiZydSh7dGFyZ2V0OiJKU09OIixzdGF0OiEwLGFyaXR5OjMsZm9yY2VkOkV1fHxUdX0se3N0cmluZ2lmeTpmdW5jdGlvbih0LGUscil7dmFyIG49ZnUoYXJndW1lbnRzKSxvPW91KEV1P3h1OnZ1LG51bGwsbik7cmV0dXJuIFR1JiYic3RyaW5nIj09dHlwZW9mIG8/bXUobyx3dSxqdSk6b319KTt2YXIgTXU9dG8sa3U9WXQ7QXIoe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGZvcmNlZDohZ3R8fG8oKGZ1bmN0aW9uKCl7TXUuZigxKX0pKX0se2dldE93blByb3BlcnR5U3ltYm9sczpmdW5jdGlvbih0KXt2YXIgZT1NdS5mO3JldHVybiBlP2Uoa3UodCkpOltdfX0pO3ZhciBBdT1lKFouT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyksUHU9dW4uaW5jbHVkZXM7QXIoe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDpvKChmdW5jdGlvbigpe3JldHVybiFBcnJheSgxKS5pbmNsdWRlcygpfSkpfSx7aW5jbHVkZXM6ZnVuY3Rpb24odCl7cmV0dXJuIFB1KHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSk7dmFyIEx1PW4sUnU9WixOdT1mdW5jdGlvbih0LGUpe3ZhciByPVJ1W3QrIlByb3RvdHlwZSJdLG49ciYmcltlXTtpZihuKXJldHVybiBuO3ZhciBvPUx1W3RdLGk9byYmby5wcm90b3R5cGU7cmV0dXJuIGkmJmlbZV19LF91PU51KCJBcnJheSIsImluY2x1ZGVzIiksQ3U9WCxGdT1iLEl1PWhlKCJtYXRjaCIpLER1PWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiBDdSh0KSYmKHZvaWQgMCE9PShlPXRbSXVdKT8hIWU6IlJlZ0V4cCI9PT1GdSh0KSl9LFV1PVR5cGVFcnJvcix6dT1oZSgibWF0Y2giKSxCdT1BcixHdT1mdW5jdGlvbih0KXtpZihEdSh0KSl0aHJvdyBuZXcgVXUoIlRoZSBtZXRob2QgZG9lc24ndCBhY2NlcHQgcmVndWxhciBleHByZXNzaW9ucyIpO3JldHVybiB0fSxIdT1KLFd1PUJyLEp1PWZ1bmN0aW9uKHQpe3ZhciBlPS8uLzt0cnl7Ii8uLyJbdF0oZSl9Y2F0Y2gocil7dHJ5e3JldHVybiBlW3p1XT0hMSwiLy4vIlt0XShlKX1jYXRjaChuKXt9fXJldHVybiExfSxLdT1kKCIiLmluZGV4T2YpO0J1KHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOiFKdSgiaW5jbHVkZXMiKX0se2luY2x1ZGVzOmZ1bmN0aW9uKHQpe3JldHVybiEhfkt1KFd1KEh1KHRoaXMpKSxXdShHdSh0KSksYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pO3ZhciBWdT1OdSgiU3RyaW5nIiwiaW5jbHVkZXMiKSxxdT1udCxZdT1fdSxYdT1WdSxadT1BcnJheS5wcm90b3R5cGUsJHU9U3RyaW5nLnByb3RvdHlwZSxRdT1lKChmdW5jdGlvbih0KXt2YXIgZT10LmluY2x1ZGVzO3JldHVybiB0PT09WnV8fHF1KFp1LHQpJiZlPT09WnUuaW5jbHVkZXM/WXU6InN0cmluZyI9PXR5cGVvZiB0fHx0PT09JHV8fHF1KCR1LHQpJiZlPT09JHUuaW5jbHVkZXM/WHU6ZX0pKTtmdW5jdGlvbiB0Yyh0LGUpe2lmKG51bGw9PXQpcmV0dXJue307dmFyIHIsbixvPWZ1bmN0aW9uKHQsZSl7aWYobnVsbD09dClyZXR1cm57fTt2YXIgcj17fTtmb3IodmFyIG4gaW4gdClpZih7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbikpe2lmKFF1KGUpLmNhbGwoZSxuKSljb250aW51ZTtyW25dPXRbbl19cmV0dXJuIHJ9KHQsZSk7aWYoQXUpe3ZhciBpPUF1KHQpO2ZvcihuPTA7bjxpLmxlbmd0aDtuKyspcj1pW25dLFF1KGUpLmNhbGwoZSxyKXx8e30ucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh0LHIpJiYob1tyXT10W3JdKX1yZXR1cm4gb312YXIgZWM9VHlwZUVycm9yLHJjPWZ1bmN0aW9uKHQpe2lmKHQ+OTAwNzE5OTI1NDc0MDk5MSl0aHJvdyBlYygiTWF4aW11bSBhbGxvd2VkIGluZGV4IGV4Y2VlZGVkIik7cmV0dXJuIHR9LG5jPWosb2M9JGUsaWM9RixhYz1mdW5jdGlvbih0LGUscil7bmM/b2MuZih0LGUsaWMoMCxyKSk6dFtlXT1yfSx1Yz1vLGNjPXB0LHNjPWhlKCJzcGVjaWVzIiksZmM9ZnVuY3Rpb24odCl7cmV0dXJuIGNjPj01MXx8IXVjKChmdW5jdGlvbigpe3ZhciBlPVtdO3JldHVybihlLmNvbnN0cnVjdG9yPXt9KVtzY109ZnVuY3Rpb24oKXtyZXR1cm57Zm9vOjF9fSwxIT09ZVt0XShCb29sZWFuKS5mb299KSl9LGxjPUFyLGhjPW8scGM9Vm8sdmM9WCxkYz1ZdCx5Yz1lbixnYz1yYyxtYz1hYyxiYz1naSx3Yz1mYyxPYz1wdCxTYz1oZSgiaXNDb25jYXRTcHJlYWRhYmxlIiksRWM9T2M+PTUxfHwhaGMoKGZ1bmN0aW9uKCl7dmFyIHQ9W107cmV0dXJuIHRbU2NdPSExLHQuY29uY2F0KClbMF0hPT10fSkpLFRjPWZ1bmN0aW9uKHQpe2lmKCF2Yyh0KSlyZXR1cm4hMTt2YXIgZT10W1NjXTtyZXR1cm4gdm9pZCAwIT09ZT8hIWU6cGModCl9O2xjKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxhcml0eToxLGZvcmNlZDohRWN8fCF3YygiY29uY2F0Iil9LHtjb25jYXQ6ZnVuY3Rpb24odCl7dmFyIGUscixuLG8saSxhPWRjKHRoaXMpLHU9YmMoYSwwKSxjPTA7Zm9yKGU9LTEsbj1hcmd1bWVudHMubGVuZ3RoO2U8bjtlKyspaWYoVGMoaT0tMT09PWU/YTphcmd1bWVudHNbZV0pKWZvcihvPXljKGkpLGdjKGMrbykscj0wO3I8bztyKyssYysrKXIgaW4gaSYmbWModSxjLGlbcl0pO2Vsc2UgZ2MoYysxKSxtYyh1LGMrKyxpKTtyZXR1cm4gdS5sZW5ndGg9Yyx1fX0pLHZvKCJhc3luY0l0ZXJhdG9yIiksdm8oImhhc0luc3RhbmNlIiksdm8oImlzQ29uY2F0U3ByZWFkYWJsZSIpLHZvKCJpdGVyYXRvciIpLHZvKCJtYXRjaCIpLHZvKCJtYXRjaEFsbCIpLHZvKCJyZXBsYWNlIiksdm8oInNlYXJjaCIpLHZvKCJzcGVjaWVzIiksdm8oInNwbGl0Iik7dmFyIHhjPXdvO3ZvKCJ0b1ByaW1pdGl2ZSIpLHhjKCk7dmFyIGpjPXJ0LE1jPUFvO3ZvKCJ0b1N0cmluZ1RhZyIpLE1jKGpjKCJTeW1ib2wiKSwiU3ltYm9sIiksdm8oInVuc2NvcGFibGVzIiksQW8obi5KU09OLCJKU09OIiwhMCk7dmFyIGtjLEFjLFBjLExjPVouU3ltYm9sLFJjPXt9LE5jPWosX2M9JHQsQ2M9RnVuY3Rpb24ucHJvdG90eXBlLEZjPU5jJiZPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLEljPV9jKENjLCJuYW1lIiksRGM9e0VYSVNUUzpJYyxQUk9QRVI6SWMmJiJzb21ldGhpbmciPT09ZnVuY3Rpb24oKXt9Lm5hbWUsQ09ORklHVVJBQkxFOkljJiYoIU5jfHxOYyYmRmMoQ2MsIm5hbWUiKS5jb25maWd1cmFibGUpfSxVYz0hbygoZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiB0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1udWxsLE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgdCkhPT10LnByb3RvdHlwZX0pKSx6Yz0kdCxCYz1ULEdjPVl0LEhjPVVjLFdjPUFuKCJJRV9QUk9UTyIpLEpjPU9iamVjdCxLYz1KYy5wcm90b3R5cGUsVmM9SGM/SmMuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24odCl7dmFyIGU9R2ModCk7aWYoemMoZSxXYykpcmV0dXJuIGVbV2NdO3ZhciByPWUuY29uc3RydWN0b3I7cmV0dXJuIEJjKHIpJiZlIGluc3RhbmNlb2Ygcj9yLnByb3RvdHlwZTplIGluc3RhbmNlb2YgSmM/S2M6bnVsbH0scWM9byxZYz1ULFhjPVgsWmM9SG4sJGM9VmMsUWM9cm8sdHM9aGUoIml0ZXJhdG9yIiksZXM9ITE7W10ua2V5cyYmKCJuZXh0ImluKFBjPVtdLmtleXMoKSk/KEFjPSRjKCRjKFBjKSkpIT09T2JqZWN0LnByb3RvdHlwZSYmKGtjPUFjKTplcz0hMCk7dmFyIHJzPSFYYyhrYyl8fHFjKChmdW5jdGlvbigpe3ZhciB0PXt9O3JldHVybiBrY1t0c10uY2FsbCh0KSE9PXR9KSk7WWMoKGtjPXJzP3t9OlpjKGtjKSlbdHNdKXx8UWMoa2MsdHMsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSk7dmFyIG5zPXtJdGVyYXRvclByb3RvdHlwZTprYyxCVUdHWV9TQUZBUklfSVRFUkFUT1JTOmVzfSxvcz1ucy5JdGVyYXRvclByb3RvdHlwZSxpcz1Ibixhcz1GLHVzPUFvLGNzPVJjLHNzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGZzPWQsbHM9QXQsaHM9WCxwcz1mdW5jdGlvbih0KXtyZXR1cm4gaHModCl8fG51bGw9PT10fSx2cz1TdHJpbmcsZHM9VHlwZUVycm9yLHlzPWZ1bmN0aW9uKHQsZSxyKXt0cnl7cmV0dXJuIGZzKGxzKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxlKVtyXSkpfWNhdGNoKG4pe319LGdzPVgsbXM9Sixicz1mdW5jdGlvbih0KXtpZihwcyh0KSlyZXR1cm4gdDt0aHJvdyBuZXcgZHMoIkNhbid0IHNldCAiK3ZzKHQpKyIgYXMgYSBwcm90b3R5cGUiKX0sd3M9T2JqZWN0LnNldFByb3RvdHlwZU9mfHwoIl9fcHJvdG9fXyJpbnt9P2Z1bmN0aW9uKCl7dmFyIHQsZT0hMSxyPXt9O3RyeXsodD15cyhPYmplY3QucHJvdG90eXBlLCJfX3Byb3RvX18iLCJzZXQiKSkocixbXSksZT1yIGluc3RhbmNlb2YgQXJyYXl9Y2F0Y2gobil7fXJldHVybiBmdW5jdGlvbihyLG4pe3JldHVybiBtcyhyKSxicyhuKSxncyhyKT8oZT90KHIsbik6ci5fX3Byb3RvX189bixyKTpyfX0oKTp2b2lkIDApLE9zPUFyLFNzPUEsRXM9RGMsVHM9ZnVuY3Rpb24odCxlLHIsbil7dmFyIG89ZSsiIEl0ZXJhdG9yIjtyZXR1cm4gdC5wcm90b3R5cGU9aXMob3Mse25leHQ6YXMoKyFuLHIpfSksdXModCxvLCExLCEwKSxjc1tvXT1zcyx0fSx4cz1WYyxqcz1BbyxNcz1ybyxrcz1SYyxBcz1ucyxQcz1Fcy5QUk9QRVIsTHM9QXMuQlVHR1lfU0FGQVJJX0lURVJBVE9SUyxScz1oZSgiaXRlcmF0b3IiKSxOcz0ia2V5cyIsX3M9InZhbHVlcyIsQ3M9ImVudHJpZXMiLEZzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LElzPWZ1bmN0aW9uKHQsZSxyLG4sbyxpLGEpe1RzKHIsZSxuKTt2YXIgdSxjLHMsZj1mdW5jdGlvbih0KXtpZih0PT09byYmZClyZXR1cm4gZDtpZighTHMmJnQmJnQgaW4gcClyZXR1cm4gcFt0XTtzd2l0Y2godCl7Y2FzZSBOczpjYXNlIF9zOmNhc2UgQ3M6cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyByKHRoaXMsdCl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgcih0aGlzKX19LGw9ZSsiIEl0ZXJhdG9yIixoPSExLHA9dC5wcm90b3R5cGUsdj1wW1JzXXx8cFsiQEBpdGVyYXRvciJdfHxvJiZwW29dLGQ9IUxzJiZ2fHxmKG8pLHk9IkFycmF5Ij09PWUmJnAuZW50cmllc3x8djtpZih5JiYodT14cyh5LmNhbGwobmV3IHQpKSkhPT1PYmplY3QucHJvdG90eXBlJiZ1Lm5leHQmJihqcyh1LGwsITAsITApLGtzW2xdPUZzKSxQcyYmbz09PV9zJiZ2JiZ2Lm5hbWUhPT1fcyYmKGg9ITAsZD1mdW5jdGlvbigpe3JldHVybiBTcyh2LHRoaXMpfSksbylpZihjPXt2YWx1ZXM6Zihfcyksa2V5czppP2Q6ZihOcyksZW50cmllczpmKENzKX0sYSlmb3IocyBpbiBjKShMc3x8aHx8IShzIGluIHApKSYmTXMocCxzLGNbc10pO2Vsc2UgT3Moe3RhcmdldDplLHByb3RvOiEwLGZvcmNlZDpMc3x8aH0sYyk7cmV0dXJuIGEmJnBbUnNdIT09ZCYmTXMocCxScyxkLHtuYW1lOm99KSxrc1tlXT1kLGN9LERzPWZ1bmN0aW9uKHQsZSl7cmV0dXJue3ZhbHVlOnQsZG9uZTplfX0sVXM9cSx6cz1SYyxCcz1KbzskZS5mO3ZhciBHcz1JcyxIcz1EcyxXcz0iQXJyYXkgSXRlcmF0b3IiLEpzPUJzLnNldCxLcz1Ccy5nZXR0ZXJGb3IoV3MpO0dzKEFycmF5LCJBcnJheSIsKGZ1bmN0aW9uKHQsZSl7SnModGhpcyx7dHlwZTpXcyx0YXJnZXQ6VXModCksaW5kZXg6MCxraW5kOmV9KX0pLChmdW5jdGlvbigpe3ZhciB0PUtzKHRoaXMpLGU9dC50YXJnZXQscj10LmluZGV4Kys7aWYoIWV8fHI+PWUubGVuZ3RoKXJldHVybiB0LnRhcmdldD1udWxsLEhzKHZvaWQgMCwhMCk7c3dpdGNoKHQua2luZCl7Y2FzZSJrZXlzIjpyZXR1cm4gSHMociwhMSk7Y2FzZSJ2YWx1ZXMiOnJldHVybiBIcyhlW3JdLCExKX1yZXR1cm4gSHMoW3IsZVtyXV0sITEpfSksInZhbHVlcyIpLHpzLkFyZ3VtZW50cz16cy5BcnJheTt2YXIgVnM9e0NTU1J1bGVMaXN0OjAsQ1NTU3R5bGVEZWNsYXJhdGlvbjowLENTU1ZhbHVlTGlzdDowLENsaWVudFJlY3RMaXN0OjAsRE9NUmVjdExpc3Q6MCxET01TdHJpbmdMaXN0OjAsRE9NVG9rZW5MaXN0OjEsRGF0YVRyYW5zZmVySXRlbUxpc3Q6MCxGaWxlTGlzdDowLEhUTUxBbGxDb2xsZWN0aW9uOjAsSFRNTENvbGxlY3Rpb246MCxIVE1MRm9ybUVsZW1lbnQ6MCxIVE1MU2VsZWN0RWxlbWVudDowLE1lZGlhTGlzdDowLE1pbWVUeXBlQXJyYXk6MCxOYW1lZE5vZGVNYXA6MCxOb2RlTGlzdDoxLFBhaW50UmVxdWVzdExpc3Q6MCxQbHVnaW46MCxQbHVnaW5BcnJheTowLFNWR0xlbmd0aExpc3Q6MCxTVkdOdW1iZXJMaXN0OjAsU1ZHUGF0aFNlZ0xpc3Q6MCxTVkdQb2ludExpc3Q6MCxTVkdTdHJpbmdMaXN0OjAsU1ZHVHJhbnNmb3JtTGlzdDowLFNvdXJjZUJ1ZmZlckxpc3Q6MCxTdHlsZVNoZWV0TGlzdDowLFRleHRUcmFja0N1ZUxpc3Q6MCxUZXh0VHJhY2tMaXN0OjAsVG91Y2hMaXN0OjB9LHFzPW4sWXM9QW8sWHM9UmM7Zm9yKHZhciBacyBpbiBWcylZcyhxc1tac10sWnMpLFhzW1pzXT1Ycy5BcnJheTt2YXIgJHM9TGMsUXM9aGUsdGY9JGUuZixlZj1RcygibWV0YWRhdGEiKSxyZj1GdW5jdGlvbi5wcm90b3R5cGU7dm9pZCAwPT09cmZbZWZdJiZ0ZihyZixlZix7dmFsdWU6bnVsbH0pLHZvKCJhc3luY0Rpc3Bvc2UiKSx2bygiZGlzcG9zZSIpLHZvKCJtZXRhZGF0YSIpO3ZhciBuZj0kcyxvZj1kLGFmPXJ0KCJTeW1ib2wiKSx1Zj1hZi5rZXlGb3IsY2Y9b2YoYWYucHJvdG90eXBlLnZhbHVlT2YpLHNmPWFmLmlzUmVnaXN0ZXJlZFN5bWJvbHx8ZnVuY3Rpb24odCl7dHJ5e3JldHVybiB2b2lkIDAhPT11ZihjZih0KSl9Y2F0Y2goZSl7cmV0dXJuITF9fTtBcih7dGFyZ2V0OiJTeW1ib2wiLHN0YXQ6ITB9LHtpc1JlZ2lzdGVyZWRTeW1ib2w6c2Z9KTtmb3IodmFyIGZmPUt0LGxmPXJ0LGhmPWQscGY9RXQsdmY9aGUsZGY9bGYoIlN5bWJvbCIpLHlmPWRmLmlzV2VsbEtub3duU3ltYm9sLGdmPWxmKCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiksbWY9aGYoZGYucHJvdG90eXBlLnZhbHVlT2YpLGJmPWZmKCJ3a3MiKSx3Zj0wLE9mPWdmKGRmKSxTZj1PZi5sZW5ndGg7d2Y8U2Y7d2YrKyl0cnl7dmFyIEVmPU9mW3dmXTtwZihkZltFZl0pJiZ2ZihFZil9Y2F0Y2goa1Mpe312YXIgVGY9ZnVuY3Rpb24odCl7aWYoeWYmJnlmKHQpKXJldHVybiEwO3RyeXtmb3IodmFyIGU9bWYodCkscj0wLG49Z2YoYmYpLG89bi5sZW5ndGg7cjxvO3IrKylpZihiZltuW3JdXT09ZSlyZXR1cm4hMH1jYXRjaChrUyl7fXJldHVybiExfTtBcih7dGFyZ2V0OiJTeW1ib2wiLHN0YXQ6ITAsZm9yY2VkOiEwfSx7aXNXZWxsS25vd25TeW1ib2w6VGZ9KSx2bygiY3VzdG9tTWF0Y2hlciIpLHZvKCJvYnNlcnZhYmxlIiksQXIoe3RhcmdldDoiU3ltYm9sIixzdGF0OiEwLG5hbWU6ImlzUmVnaXN0ZXJlZFN5bWJvbCJ9LHtpc1JlZ2lzdGVyZWQ6c2Z9KSxBcih7dGFyZ2V0OiJTeW1ib2wiLHN0YXQ6ITAsbmFtZToiaXNXZWxsS25vd25TeW1ib2wiLGZvcmNlZDohMH0se2lzV2VsbEtub3duOlRmfSksdm8oIm1hdGNoZXIiKSx2bygibWV0YWRhdGFLZXkiKSx2bygicGF0dGVybk1hdGNoIiksdm8oInJlcGxhY2VBbGwiKTt2YXIgeGY9ZShuZiksamY9ZCxNZj1LcixrZj1CcixBZj1KLFBmPWpmKCIiLmNoYXJBdCksTGY9amYoIiIuY2hhckNvZGVBdCksUmY9amYoIiIuc2xpY2UpLE5mPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLHIpe3ZhciBuLG8saT1rZihBZihlKSksYT1NZihyKSx1PWkubGVuZ3RoO3JldHVybiBhPDB8fGE+PXU/dD8iIjp2b2lkIDA6KG49TGYoaSxhKSk8NTUyOTZ8fG4+NTYzMTl8fGErMT09PXV8fChvPUxmKGksYSsxKSk8NTYzMjB8fG8+NTczNDM/dD9QZihpLGEpOm46dD9SZihpLGEsYSsyKTpvLTU2MzIwKyhuLTU1Mjk2PDwxMCkrNjU1MzZ9fSxfZj17Y29kZUF0Ok5mKCExKSxjaGFyQXQ6TmYoITApfS5jaGFyQXQsQ2Y9QnIsRmY9Sm8sSWY9SXMsRGY9RHMsVWY9IlN0cmluZyBJdGVyYXRvciIsemY9RmYuc2V0LEJmPUZmLmdldHRlckZvcihVZik7SWYoU3RyaW5nLCJTdHJpbmciLChmdW5jdGlvbih0KXt6Zih0aGlzLHt0eXBlOlVmLHN0cmluZzpDZih0KSxpbmRleDowfSl9KSwoZnVuY3Rpb24oKXt2YXIgdCxlPUJmKHRoaXMpLHI9ZS5zdHJpbmcsbj1lLmluZGV4O3JldHVybiBuPj1yLmxlbmd0aD9EZih2b2lkIDAsITApOih0PV9mKHIsbiksZS5pbmRleCs9dC5sZW5ndGgsRGYodCwhMSkpfSkpO3ZhciBHZj1lKGlvLmYoIml0ZXJhdG9yIikpO2Z1bmN0aW9uIEhmKHQpe3JldHVybihIZj0iZnVuY3Rpb24iPT10eXBlb2YgeGYmJiJzeW1ib2wiPT10eXBlb2YgR2Y/ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCYmImZ1bmN0aW9uIj09dHlwZW9mIHhmJiZ0LmNvbnN0cnVjdG9yPT09eGYmJnQhPT14Zi5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHR9KSh0KX12YXIgV2Y9e2V4cG9ydHM6e319LEpmPUFyLEtmPWosVmY9JGUuZjtKZih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOk9iamVjdC5kZWZpbmVQcm9wZXJ0eSE9PVZmLHNoYW06IUtmfSx7ZGVmaW5lUHJvcGVydHk6VmZ9KTt2YXIgcWY9Wi5PYmplY3QsWWY9V2YuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHFmLmRlZmluZVByb3BlcnR5KHQsZSxyKX07cWYuZGVmaW5lUHJvcGVydHkuc2hhbSYmKFlmLnNoYW09ITApO3ZhciBYZj1lKFdmLmV4cG9ydHMpO0FyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxzaGFtOiFqfSx7Y3JlYXRlOkhufSk7dmFyIFpmPVouT2JqZWN0LCRmPWUoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIFpmLmNyZWF0ZSh0LGUpfSkpLFFmPVl0LHRsPVZjLGVsPVVjO0FyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6bygoZnVuY3Rpb24oKXt0bCgxKX0pKSxzaGFtOiFlbH0se2dldFByb3RvdHlwZU9mOmZ1bmN0aW9uKHQpe3JldHVybiB0bChRZih0KSl9fSk7dmFyIHJsPWUoWi5PYmplY3QuZ2V0UHJvdG90eXBlT2YpLG5sPW8sb2w9eGkuZm9yRWFjaCxpbD1mdW5jdGlvbih0LGUpe3ZhciByPVtdW3RdO3JldHVybiEhciYmbmwoKGZ1bmN0aW9uKCl7ci5jYWxsKG51bGwsZXx8ZnVuY3Rpb24oKXtyZXR1cm4gMX0sMSl9KSl9KCJmb3JFYWNoIik/W10uZm9yRWFjaDpmdW5jdGlvbih0KXtyZXR1cm4gb2wodGhpcyx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX07QXIoe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDpbXS5mb3JFYWNoIT09aWx9LHtmb3JFYWNoOmlsfSk7dmFyIGFsPU51KCJBcnJheSIsImZvckVhY2giKSx1bD1EcixjbD0kdCxzbD1udCxmbD1hbCxsbD1BcnJheS5wcm90b3R5cGUsaGw9e0RPTVRva2VuTGlzdDohMCxOb2RlTGlzdDohMH0scGw9ZnVuY3Rpb24odCl7dmFyIGU9dC5mb3JFYWNoO3JldHVybiB0PT09bGx8fHNsKGxsLHQpJiZlPT09bGwuZm9yRWFjaHx8Y2woaGwsdWwodCkpP2ZsOmV9LHZsPWUocGwpLGRsPWoseWw9Vm8sZ2w9VHlwZUVycm9yLG1sPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsYmw9ZGwmJiFmdW5jdGlvbigpe2lmKHZvaWQgMCE9PXRoaXMpcmV0dXJuITA7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwibGVuZ3RoIix7d3JpdGFibGU6ITF9KS5sZW5ndGg9MX1jYXRjaChrUyl7cmV0dXJuIGtTIGluc3RhbmNlb2YgVHlwZUVycm9yfX0oKSx3bD1ZdCxPbD1lbixTbD1ibD9mdW5jdGlvbih0LGUpe2lmKHlsKHQpJiYhbWwodCwibGVuZ3RoIikud3JpdGFibGUpdGhyb3cgbmV3IGdsKCJDYW5ub3Qgc2V0IHJlYWQgb25seSAubGVuZ3RoIik7cmV0dXJuIHQubGVuZ3RoPWV9OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGVuZ3RoPWV9LEVsPXJjO0FyKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxhcml0eToxLGZvcmNlZDpvKChmdW5jdGlvbigpe3JldHVybiA0Mjk0OTY3Mjk3IT09W10ucHVzaC5jYWxsKHtsZW5ndGg6NDI5NDk2NzI5Nn0sMSl9KSl8fCFmdW5jdGlvbigpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sImxlbmd0aCIse3dyaXRhYmxlOiExfSkucHVzaCgpfWNhdGNoKGtTKXtyZXR1cm4ga1MgaW5zdGFuY2VvZiBUeXBlRXJyb3J9fSgpfSx7cHVzaDpmdW5jdGlvbih0KXt2YXIgZT13bCh0aGlzKSxyPU9sKGUpLG49YXJndW1lbnRzLmxlbmd0aDtFbChyK24pO2Zvcih2YXIgbz0wO288bjtvKyspZVtyXT1hcmd1bWVudHNbb10scisrO3JldHVybiBTbChlLHIpLHJ9fSk7dmFyIFRsPU51KCJBcnJheSIsInB1c2giKSx4bD1udCxqbD1UbCxNbD1BcnJheS5wcm90b3R5cGUsa2w9ZSgoZnVuY3Rpb24odCl7dmFyIGU9dC5wdXNoO3JldHVybiB0PT09TWx8fHhsKE1sLHQpJiZlPT09TWwucHVzaD9qbDplfSkpO0FyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMH0se3NldFByb3RvdHlwZU9mOndzfSk7dmFyIEFsPWUoWi5PYmplY3Quc2V0UHJvdG90eXBlT2YpLFBsPXJ0LExsPVduLFJsPXRvLE5sPW5yLF9sPWQoW10uY29uY2F0KSxDbD1QbCgiUmVmbGVjdCIsIm93bktleXMiKXx8ZnVuY3Rpb24odCl7dmFyIGU9TGwuZihObCh0KSkscj1SbC5mO3JldHVybiByP19sKGUscih0KSk6ZX0sRmw9JHQsSWw9Q2wsRGw9eCxVbD0kZSx6bD1YLEJsPWdyLEdsPUVycm9yLEhsPWQoIiIucmVwbGFjZSksV2w9U3RyaW5nKG5ldyBHbCgienhjYXNkIikuc3RhY2spLEpsPS9cblxzKmF0IFteOl0qOlteXG5dKi8sS2w9SmwudGVzdChXbCksVmw9RixxbD0hbygoZnVuY3Rpb24oKXt2YXIgdD1uZXcgRXJyb3IoImEiKTtyZXR1cm4hKCJzdGFjayJpbiB0KXx8KE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJzdGFjayIsVmwoMSw3KSksNyE9PXQuc3RhY2spfSkpLFlsPWdyLFhsPWZ1bmN0aW9uKHQsZSl7aWYoS2wmJiJzdHJpbmciPT10eXBlb2YgdCYmIUdsLnByZXBhcmVTdGFja1RyYWNlKWZvcig7ZS0tOyl0PUhsKHQsSmwsIiIpO3JldHVybiB0fSxabD1xbCwkbD1FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSxRbD1SYyx0aD1oZSgiaXRlcmF0b3IiKSxlaD1BcnJheS5wcm90b3R5cGUscmg9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PXQmJihRbC5BcnJheT09PXR8fGVoW3RoXT09PXQpfSxuaD1EcixvaD1SdCxpaD1HLGFoPVJjLHVoPWhlKCJpdGVyYXRvciIpLGNoPWZ1bmN0aW9uKHQpe2lmKCFpaCh0KSlyZXR1cm4gb2godCx1aCl8fG9oKHQsIkBAaXRlcmF0b3IiKXx8YWhbbmgodCldfSxzaD1BLGZoPUF0LGxoPW5yLGhoPXh0LHBoPWNoLHZoPVR5cGVFcnJvcixkaD1mdW5jdGlvbih0LGUpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg8Mj9waCh0KTplO2lmKGZoKHIpKXJldHVybiBsaChzaChyLHQpKTt0aHJvdyBuZXcgdmgoaGgodCkrIiBpcyBub3QgaXRlcmFibGUiKX0seWg9QSxnaD1ucixtaD1SdCxiaD1mdW5jdGlvbih0LGUscil7dmFyIG4sbztnaCh0KTt0cnl7aWYoIShuPW1oKHQsInJldHVybiIpKSl7aWYoInRocm93Ij09PWUpdGhyb3cgcjtyZXR1cm4gcn1uPXloKG4sdCl9Y2F0Y2goa1Mpe289ITAsbj1rU31pZigidGhyb3ciPT09ZSl0aHJvdyByO2lmKG8pdGhyb3cgbjtyZXR1cm4gZ2gobikscn0sd2g9WmUsT2g9QSxTaD1ucixFaD14dCxUaD1yaCx4aD1lbixqaD1udCxNaD1kaCxraD1jaCxBaD1iaCxQaD1UeXBlRXJyb3IsTGg9ZnVuY3Rpb24odCxlKXt0aGlzLnN0b3BwZWQ9dCx0aGlzLnJlc3VsdD1lfSxSaD1MaC5wcm90b3R5cGUsTmg9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLG8saSxhLHUsYyxzLGY9ciYmci50aGF0LGw9ISghcnx8IXIuQVNfRU5UUklFUyksaD0hKCFyfHwhci5JU19SRUNPUkQpLHA9ISghcnx8IXIuSVNfSVRFUkFUT1IpLHY9ISghcnx8IXIuSU5URVJSVVBURUQpLGQ9d2goZSxmKSx5PWZ1bmN0aW9uKHQpe3JldHVybiBuJiZBaChuLCJub3JtYWwiLHQpLG5ldyBMaCghMCx0KX0sZz1mdW5jdGlvbih0KXtyZXR1cm4gbD8oU2godCksdj9kKHRbMF0sdFsxXSx5KTpkKHRbMF0sdFsxXSkpOnY/ZCh0LHkpOmQodCl9O2lmKGgpbj10Lml0ZXJhdG9yO2Vsc2UgaWYocCluPXQ7ZWxzZXtpZighKG89a2godCkpKXRocm93IG5ldyBQaChFaCh0KSsiIGlzIG5vdCBpdGVyYWJsZSIpO2lmKFRoKG8pKXtmb3IoaT0wLGE9eGgodCk7YT5pO2krKylpZigodT1nKHRbaV0pKSYmamgoUmgsdSkpcmV0dXJuIHU7cmV0dXJuIG5ldyBMaCghMSl9bj1NaCh0LG8pfWZvcihjPWg/dC5uZXh0Om4ubmV4dDshKHM9T2goYyxuKSkuZG9uZTspe3RyeXt1PWcocy52YWx1ZSl9Y2F0Y2goa1Mpe0FoKG4sInRocm93IixrUyl9aWYoIm9iamVjdCI9PXR5cGVvZiB1JiZ1JiZqaChSaCx1KSlyZXR1cm4gdX1yZXR1cm4gbmV3IExoKCExKX0sX2g9QnIsQ2g9QXIsRmg9bnQsSWg9VmMsRGg9d3MsVWg9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1JbChlKSxvPVVsLmYsaT1EbC5mLGE9MDthPG4ubGVuZ3RoO2ErKyl7dmFyIHU9blthXTtGbCh0LHUpfHxyJiZGbChyLHUpfHxvKHQsdSxpKGUsdSkpfX0semg9SG4sQmg9Z3IsR2g9RixIaD1mdW5jdGlvbih0LGUpe3psKGUpJiYiY2F1c2UiaW4gZSYmQmwodCwiY2F1c2UiLGUuY2F1c2UpfSxXaD1mdW5jdGlvbih0LGUscixuKXtabCYmKCRsPyRsKHQsZSk6WWwodCwic3RhY2siLFhsKHIsbikpKX0sSmg9TmgsS2g9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09dD9hcmd1bWVudHMubGVuZ3RoPDI/IiI6ZTpfaCh0KX0sVmg9aGUoInRvU3RyaW5nVGFnIikscWg9RXJyb3IsWWg9W10ucHVzaCxYaD1mdW5jdGlvbih0LGUpe3ZhciByLG49RmgoWmgsdGhpcyk7RGg/cj1EaChuZXcgcWgsbj9JaCh0aGlzKTpaaCk6KHI9bj90aGlzOnpoKFpoKSxCaChyLFZoLCJFcnJvciIpKSx2b2lkIDAhPT1lJiZCaChyLCJtZXNzYWdlIixLaChlKSksV2gocixYaCxyLnN0YWNrLDEpLGFyZ3VtZW50cy5sZW5ndGg+MiYmSGgocixhcmd1bWVudHNbMl0pO3ZhciBvPVtdO3JldHVybiBKaCh0LFloLHt0aGF0Om99KSxCaChyLCJlcnJvcnMiLG8pLHJ9O0RoP0RoKFhoLHFoKTpVaChYaCxxaCx7bmFtZTohMH0pO3ZhciBaaD1YaC5wcm90b3R5cGU9emgocWgucHJvdG90eXBlLHtjb25zdHJ1Y3RvcjpHaCgxLFhoKSxtZXNzYWdlOkdoKDEsIiIpLG5hbWU6R2goMSwiQWdncmVnYXRlRXJyb3IiKX0pO0NoKHtnbG9iYWw6ITAsY29uc3RydWN0b3I6ITAsYXJpdHk6Mn0se0FnZ3JlZ2F0ZUVycm9yOlhofSk7dmFyICRoLFFoLHRwLGVwLHJwPW4sbnA9YXQsb3A9YixpcD1mdW5jdGlvbih0KXtyZXR1cm4gbnAuc2xpY2UoMCx0Lmxlbmd0aCk9PT10fSxhcD1pcCgiQnVuLyIpPyJCVU4iOmlwKCJDbG91ZGZsYXJlLVdvcmtlcnMiKT8iQ0xPVURGTEFSRSI6aXAoIkRlbm8vIik/IkRFTk8iOmlwKCJOb2RlLmpzLyIpPyJOT0RFIjpycC5CdW4mJiJzdHJpbmciPT10eXBlb2YgQnVuLnZlcnNpb24/IkJVTiI6cnAuRGVubyYmIm9iamVjdCI9PXR5cGVvZiBEZW5vLnZlcnNpb24/IkRFTk8iOiJwcm9jZXNzIj09PW9wKHJwLnByb2Nlc3MpPyJOT0RFIjpycC53aW5kb3cmJnJwLmRvY3VtZW50PyJCUk9XU0VSIjoiUkVTVCIsdXA9Ik5PREUiPT09YXAsY3A9cnQsc3A9b28sZnA9aixscD1oZSgic3BlY2llcyIpLGhwPWZ1bmN0aW9uKHQpe3ZhciBlPWNwKHQpO2ZwJiZlJiYhZVtscF0mJnNwKGUsbHAse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc319KX0scHA9bnQsdnA9VHlwZUVycm9yLGRwPWZ1bmN0aW9uKHQsZSl7aWYocHAoZSx0KSlyZXR1cm4gdDt0aHJvdyBuZXcgdnAoIkluY29ycmVjdCBpbnZvY2F0aW9uIil9LHlwPWZpLGdwPXh0LG1wPVR5cGVFcnJvcixicD1ucix3cD1mdW5jdGlvbih0KXtpZih5cCh0KSlyZXR1cm4gdDt0aHJvdyBuZXcgbXAoZ3AodCkrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciIpfSxPcD1HLFNwPWhlKCJzcGVjaWVzIiksRXA9ZnVuY3Rpb24odCxlKXt2YXIgcixuPWJwKHQpLmNvbnN0cnVjdG9yO3JldHVybiB2b2lkIDA9PT1ufHxPcChyPWJwKG4pW1NwXSk/ZTp3cChyKX0sVHA9VHlwZUVycm9yLHhwPS8oPzppcGFkfGlwaG9uZXxpcG9kKS4qYXBwbGV3ZWJraXQvaS50ZXN0KGF0KSxqcD1uLE1wPWYsa3A9WmUsQXA9VCxQcD0kdCxMcD1vLFJwPWpuLE5wPXFuLF9wPU1lLENwPWZ1bmN0aW9uKHQsZSl7aWYodDxlKXRocm93IG5ldyBUcCgiTm90IGVub3VnaCBhcmd1bWVudHMiKTtyZXR1cm4gdH0sRnA9eHAsSXA9dXAsRHA9anAuc2V0SW1tZWRpYXRlLFVwPWpwLmNsZWFySW1tZWRpYXRlLHpwPWpwLnByb2Nlc3MsQnA9anAuRGlzcGF0Y2gsR3A9anAuRnVuY3Rpb24sSHA9anAuTWVzc2FnZUNoYW5uZWwsV3A9anAuU3RyaW5nLEpwPTAsS3A9e30sVnA9Im9ucmVhZHlzdGF0ZWNoYW5nZSI7THAoKGZ1bmN0aW9uKCl7JGg9anAubG9jYXRpb259KSk7dmFyIHFwPWZ1bmN0aW9uKHQpe2lmKFBwKEtwLHQpKXt2YXIgZT1LcFt0XTtkZWxldGUgS3BbdF0sZSgpfX0sWXA9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cXAodCl9fSxYcD1mdW5jdGlvbih0KXtxcCh0LmRhdGEpfSxacD1mdW5jdGlvbih0KXtqcC5wb3N0TWVzc2FnZShXcCh0KSwkaC5wcm90b2NvbCsiLy8iKyRoLmhvc3QpfTtEcCYmVXB8fChEcD1mdW5jdGlvbih0KXtDcChhcmd1bWVudHMubGVuZ3RoLDEpO3ZhciBlPUFwKHQpP3Q6R3AodCkscj1OcChhcmd1bWVudHMsMSk7cmV0dXJuIEtwWysrSnBdPWZ1bmN0aW9uKCl7TXAoZSx2b2lkIDAscil9LFFoKEpwKSxKcH0sVXA9ZnVuY3Rpb24odCl7ZGVsZXRlIEtwW3RdfSxJcD9RaD1mdW5jdGlvbih0KXt6cC5uZXh0VGljayhZcCh0KSl9OkJwJiZCcC5ub3c/UWg9ZnVuY3Rpb24odCl7QnAubm93KFlwKHQpKX06SHAmJiFGcD8oZXA9KHRwPW5ldyBIcCkucG9ydDIsdHAucG9ydDEub25tZXNzYWdlPVhwLFFoPWtwKGVwLnBvc3RNZXNzYWdlLGVwKSk6anAuYWRkRXZlbnRMaXN0ZW5lciYmQXAoanAucG9zdE1lc3NhZ2UpJiYhanAuaW1wb3J0U2NyaXB0cyYmJGgmJiJmaWxlOiIhPT0kaC5wcm90b2NvbCYmIUxwKFpwKT8oUWg9WnAsanAuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsWHAsITEpKTpRaD1WcCBpbiBfcCgic2NyaXB0Iik/ZnVuY3Rpb24odCl7UnAuYXBwZW5kQ2hpbGQoX3AoInNjcmlwdCIpKVtWcF09ZnVuY3Rpb24oKXtScC5yZW1vdmVDaGlsZCh0aGlzKSxxcCh0KX19OmZ1bmN0aW9uKHQpe3NldFRpbWVvdXQoWXAodCksMCl9KTt2YXIgJHA9e3NldDpEcCxjbGVhcjpVcH0sUXA9bix0dj1qLGV2PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IscnY9ZnVuY3Rpb24oKXt0aGlzLmhlYWQ9bnVsbCx0aGlzLnRhaWw9bnVsbH07cnYucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24odCl7dmFyIGU9e2l0ZW06dCxuZXh0Om51bGx9LHI9dGhpcy50YWlsO3I/ci5uZXh0PWU6dGhpcy5oZWFkPWUsdGhpcy50YWlsPWV9LGdldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuaGVhZDtpZih0KXJldHVybiBudWxsPT09KHRoaXMuaGVhZD10Lm5leHQpJiYodGhpcy50YWlsPW51bGwpLHQuaXRlbX19O3ZhciBudixvdixpdixhdix1dixjdj1ydixzdj0vaXBhZHxpcGhvbmV8aXBvZC9pLnRlc3QoYXQpJiYidW5kZWZpbmVkIiE9dHlwZW9mIFBlYmJsZSxmdj0vd2ViMHMoPyEuKmNocm9tZSkvaS50ZXN0KGF0KSxsdj1uLGh2PWZ1bmN0aW9uKHQpe2lmKCF0dilyZXR1cm4gUXBbdF07dmFyIGU9ZXYoUXAsdCk7cmV0dXJuIGUmJmUudmFsdWV9LHB2PVplLHZ2PSRwLnNldCxkdj1jdix5dj14cCxndj1zdixtdj1mdixidj11cCx3dj1sdi5NdXRhdGlvbk9ic2VydmVyfHxsdi5XZWJLaXRNdXRhdGlvbk9ic2VydmVyLE92PWx2LmRvY3VtZW50LFN2PWx2LnByb2Nlc3MsRXY9bHYuUHJvbWlzZSxUdj1odigicXVldWVNaWNyb3Rhc2siKTtpZighVHYpe3ZhciB4dj1uZXcgZHYsanY9ZnVuY3Rpb24oKXt2YXIgdCxlO2ZvcihidiYmKHQ9U3YuZG9tYWluKSYmdC5leGl0KCk7ZT14di5nZXQoKTspdHJ5e2UoKX1jYXRjaChrUyl7dGhyb3cgeHYuaGVhZCYmbnYoKSxrU310JiZ0LmVudGVyKCl9O3l2fHxidnx8bXZ8fCF3dnx8IU92PyFndiYmRXYmJkV2LnJlc29sdmU/KChhdj1Fdi5yZXNvbHZlKHZvaWQgMCkpLmNvbnN0cnVjdG9yPUV2LHV2PXB2KGF2LnRoZW4sYXYpLG52PWZ1bmN0aW9uKCl7dXYoanYpfSk6YnY/bnY9ZnVuY3Rpb24oKXtTdi5uZXh0VGljayhqdil9Oih2dj1wdih2dixsdiksbnY9ZnVuY3Rpb24oKXt2dihqdil9KToob3Y9ITAsaXY9T3YuY3JlYXRlVGV4dE5vZGUoIiIpLG5ldyB3dihqdikub2JzZXJ2ZShpdix7Y2hhcmFjdGVyRGF0YTohMH0pLG52PWZ1bmN0aW9uKCl7aXYuZGF0YT1vdj0hb3Z9KSxUdj1mdW5jdGlvbih0KXt4di5oZWFkfHxudigpLHh2LmFkZCh0KX19dmFyIE12PVR2LGt2PWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm57ZXJyb3I6ITEsdmFsdWU6dCgpfX1jYXRjaChrUyl7cmV0dXJue2Vycm9yOiEwLHZhbHVlOmtTfX19LEF2PW4uUHJvbWlzZSxQdj1uLEx2PUF2LFJ2PVQsTnY9VmUsX3Y9Wm8sQ3Y9aGUsRnY9YXAsSXY9cHQsRHY9THYmJkx2LnByb3RvdHlwZSxVdj1Ddigic3BlY2llcyIpLHp2PSExLEJ2PVJ2KFB2LlByb21pc2VSZWplY3Rpb25FdmVudCksR3Y9e0NPTlNUUlVDVE9SOk52KCJQcm9taXNlIiwoZnVuY3Rpb24oKXt2YXIgdD1fdihMdiksZT10IT09U3RyaW5nKEx2KTtpZighZSYmNjY9PT1JdilyZXR1cm4hMDtpZighRHYuY2F0Y2h8fCFEdi5maW5hbGx5KXJldHVybiEwO2lmKCFJdnx8SXY8NTF8fCEvbmF0aXZlIGNvZGUvLnRlc3QodCkpe3ZhciByPW5ldyBMdigoZnVuY3Rpb24odCl7dCgxKX0pKSxuPWZ1bmN0aW9uKHQpe3QoKGZ1bmN0aW9uKCl7fSksKGZ1bmN0aW9uKCl7fSkpfTtpZigoci5jb25zdHJ1Y3Rvcj17fSlbVXZdPW4sISh6dj1yLnRoZW4oKGZ1bmN0aW9uKCl7fSkpaW5zdGFuY2VvZiBuKSlyZXR1cm4hMH1yZXR1cm4hKGV8fCJCUk9XU0VSIiE9PUZ2JiYiREVOTyIhPT1Gdnx8QnYpfSkpLFJFSkVDVElPTl9FVkVOVDpCdixTVUJDTEFTU0lORzp6dn0sSHY9e30sV3Y9QXQsSnY9VHlwZUVycm9yLEt2PWZ1bmN0aW9uKHQpe3ZhciBlLHI7dGhpcy5wcm9taXNlPW5ldyB0KChmdW5jdGlvbih0LG4pe2lmKHZvaWQgMCE9PWV8fHZvaWQgMCE9PXIpdGhyb3cgbmV3IEp2KCJCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvciIpO2U9dCxyPW59KSksdGhpcy5yZXNvbHZlPVd2KGUpLHRoaXMucmVqZWN0PVd2KHIpfTtIdi5mPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgS3YodCl9O3ZhciBWdixxdixZdj1BcixYdj11cCxadj1uLCR2PUEsUXY9cm8sdGQ9QW8sZWQ9aHAscmQ9QXQsbmQ9VCxvZD1YLGlkPWRwLGFkPUVwLHVkPSRwLnNldCxjZD1NdixzZD1mdW5jdGlvbih0LGUpe3RyeXsxPT09YXJndW1lbnRzLmxlbmd0aD9jb25zb2xlLmVycm9yKHQpOmNvbnNvbGUuZXJyb3IodCxlKX1jYXRjaChrUyl7fX0sZmQ9a3YsbGQ9Y3YsaGQ9Sm8scGQ9QXYsdmQ9R3YsZGQ9SHYseWQ9IlByb21pc2UiLGdkPXZkLkNPTlNUUlVDVE9SLG1kPXZkLlJFSkVDVElPTl9FVkVOVCxiZD1oZC5nZXR0ZXJGb3IoeWQpLHdkPWhkLnNldCxPZD1wZCYmcGQucHJvdG90eXBlLFNkPXBkLEVkPU9kLFRkPVp2LlR5cGVFcnJvcix4ZD1adi5kb2N1bWVudCxqZD1adi5wcm9jZXNzLE1kPWRkLmYsa2Q9TWQsQWQ9ISEoeGQmJnhkLmNyZWF0ZUV2ZW50JiZadi5kaXNwYXRjaEV2ZW50KSxQZD0idW5oYW5kbGVkcmVqZWN0aW9uIixMZD1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4hKCFvZCh0KXx8IW5kKGU9dC50aGVuKSkmJmV9LFJkPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixvLGk9ZS52YWx1ZSxhPTE9PT1lLnN0YXRlLHU9YT90Lm9rOnQuZmFpbCxjPXQucmVzb2x2ZSxzPXQucmVqZWN0LGY9dC5kb21haW47dHJ5e3U/KGF8fCgyPT09ZS5yZWplY3Rpb24mJklkKGUpLGUucmVqZWN0aW9uPTEpLCEwPT09dT9yPWk6KGYmJmYuZW50ZXIoKSxyPXUoaSksZiYmKGYuZXhpdCgpLG89ITApKSxyPT09dC5wcm9taXNlP3MobmV3IFRkKCJQcm9taXNlLWNoYWluIGN5Y2xlIikpOihuPUxkKHIpKT8kdihuLHIsYyxzKTpjKHIpKTpzKGkpfWNhdGNoKGtTKXtmJiYhbyYmZi5leGl0KCkscyhrUyl9fSxOZD1mdW5jdGlvbih0LGUpe3Qubm90aWZpZWR8fCh0Lm5vdGlmaWVkPSEwLGNkKChmdW5jdGlvbigpe2Zvcih2YXIgcixuPXQucmVhY3Rpb25zO3I9bi5nZXQoKTspUmQocix0KTt0Lm5vdGlmaWVkPSExLGUmJiF0LnJlamVjdGlvbiYmQ2QodCl9KSkpfSxfZD1mdW5jdGlvbih0LGUscil7dmFyIG4sbztBZD8oKG49eGQuY3JlYXRlRXZlbnQoIkV2ZW50IikpLnByb21pc2U9ZSxuLnJlYXNvbj1yLG4uaW5pdEV2ZW50KHQsITEsITApLFp2LmRpc3BhdGNoRXZlbnQobikpOm49e3Byb21pc2U6ZSxyZWFzb246cn0sIW1kJiYobz1adlsib24iK3RdKT9vKG4pOnQ9PT1QZCYmc2QoIlVuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbiIscil9LENkPWZ1bmN0aW9uKHQpeyR2KHVkLFp2LChmdW5jdGlvbigpe3ZhciBlLHI9dC5mYWNhZGUsbj10LnZhbHVlO2lmKEZkKHQpJiYoZT1mZCgoZnVuY3Rpb24oKXtYdj9qZC5lbWl0KCJ1bmhhbmRsZWRSZWplY3Rpb24iLG4scik6X2QoUGQscixuKX0pKSx0LnJlamVjdGlvbj1Ydnx8RmQodCk/MjoxLGUuZXJyb3IpKXRocm93IGUudmFsdWV9KSl9LEZkPWZ1bmN0aW9uKHQpe3JldHVybiAxIT09dC5yZWplY3Rpb24mJiF0LnBhcmVudH0sSWQ9ZnVuY3Rpb24odCl7JHYodWQsWnYsKGZ1bmN0aW9uKCl7dmFyIGU9dC5mYWNhZGU7WHY/amQuZW1pdCgicmVqZWN0aW9uSGFuZGxlZCIsZSk6X2QoInJlamVjdGlvbmhhbmRsZWQiLGUsdC52YWx1ZSl9KSl9LERkPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZnVuY3Rpb24obil7dChlLG4scil9fSxVZD1mdW5jdGlvbih0LGUscil7dC5kb25lfHwodC5kb25lPSEwLHImJih0PXIpLHQudmFsdWU9ZSx0LnN0YXRlPTIsTmQodCwhMCkpfSx6ZD1mdW5jdGlvbih0LGUscil7aWYoIXQuZG9uZSl7dC5kb25lPSEwLHImJih0PXIpO3RyeXtpZih0LmZhY2FkZT09PWUpdGhyb3cgbmV3IFRkKCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZiIpO3ZhciBuPUxkKGUpO24/Y2QoKGZ1bmN0aW9uKCl7dmFyIHI9e2RvbmU6ITF9O3RyeXskdihuLGUsRGQoemQscix0KSxEZChVZCxyLHQpKX1jYXRjaChrUyl7VWQocixrUyx0KX19KSk6KHQudmFsdWU9ZSx0LnN0YXRlPTEsTmQodCwhMSkpfWNhdGNoKGtTKXtVZCh7ZG9uZTohMX0sa1MsdCl9fX07Z2QmJihFZD0oU2Q9ZnVuY3Rpb24odCl7aWQodGhpcyxFZCkscmQodCksJHYoVnYsdGhpcyk7dmFyIGU9YmQodGhpcyk7dHJ5e3QoRGQoemQsZSksRGQoVWQsZSkpfWNhdGNoKGtTKXtVZChlLGtTKX19KS5wcm90b3R5cGUsKFZ2PWZ1bmN0aW9uKHQpe3dkKHRoaXMse3R5cGU6eWQsZG9uZTohMSxub3RpZmllZDohMSxwYXJlbnQ6ITEscmVhY3Rpb25zOm5ldyBsZCxyZWplY3Rpb246ITEsc3RhdGU6MCx2YWx1ZTpudWxsfSl9KS5wcm90b3R5cGU9UXYoRWQsInRoZW4iLChmdW5jdGlvbih0LGUpe3ZhciByPWJkKHRoaXMpLG49TWQoYWQodGhpcyxTZCkpO3JldHVybiByLnBhcmVudD0hMCxuLm9rPSFuZCh0KXx8dCxuLmZhaWw9bmQoZSkmJmUsbi5kb21haW49WHY/amQuZG9tYWluOnZvaWQgMCwwPT09ci5zdGF0ZT9yLnJlYWN0aW9ucy5hZGQobik6Y2QoKGZ1bmN0aW9uKCl7UmQobixyKX0pKSxuLnByb21pc2V9KSkscXY9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgVnYsZT1iZCh0KTt0aGlzLnByb21pc2U9dCx0aGlzLnJlc29sdmU9RGQoemQsZSksdGhpcy5yZWplY3Q9RGQoVWQsZSl9LGRkLmY9TWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1TZHx8dW5kZWZpbmVkPT09dD9uZXcgcXYodCk6a2QodCl9KSxZdih7Z2xvYmFsOiEwLGNvbnN0cnVjdG9yOiEwLHdyYXA6ITAsZm9yY2VkOmdkfSx7UHJvbWlzZTpTZH0pLHRkKFNkLHlkLCExLCEwKSxlZCh5ZCk7dmFyIEJkPWhlKCJpdGVyYXRvciIpLEdkPSExO3RyeXt2YXIgSGQ9MCxXZD17bmV4dDpmdW5jdGlvbigpe3JldHVybntkb25lOiEhSGQrK319LHJldHVybjpmdW5jdGlvbigpe0dkPSEwfX07V2RbQmRdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LEFycmF5LmZyb20oV2QsKGZ1bmN0aW9uKCl7dGhyb3cgMn0pKX1jYXRjaChrUyl7fXZhciBKZD1mdW5jdGlvbih0LGUpe3RyeXtpZighZSYmIUdkKXJldHVybiExfWNhdGNoKGtTKXtyZXR1cm4hMX12YXIgcj0hMTt0cnl7dmFyIG49e307bltCZF09ZnVuY3Rpb24oKXtyZXR1cm57bmV4dDpmdW5jdGlvbigpe3JldHVybntkb25lOnI9ITB9fX19LHQobil9Y2F0Y2goa1Mpe31yZXR1cm4gcn0sS2Q9QXYsVmQ9R3YuQ09OU1RSVUNUT1J8fCFKZCgoZnVuY3Rpb24odCl7S2QuYWxsKHQpLnRoZW4odm9pZCAwLChmdW5jdGlvbigpe30pKX0pKSxxZD1BLFlkPUF0LFhkPUh2LFpkPWt2LCRkPU5oO0FyKHt0YXJnZXQ6IlByb21pc2UiLHN0YXQ6ITAsZm9yY2VkOlZkfSx7YWxsOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj1YZC5mKGUpLG49ci5yZXNvbHZlLG89ci5yZWplY3QsaT1aZCgoZnVuY3Rpb24oKXt2YXIgcj1ZZChlLnJlc29sdmUpLGk9W10sYT0wLHU9MTskZCh0LChmdW5jdGlvbih0KXt2YXIgYz1hKysscz0hMTt1KysscWQocixlLHQpLnRoZW4oKGZ1bmN0aW9uKHQpe3N8fChzPSEwLGlbY109dCwtLXV8fG4oaSkpfSksbyl9KSksLS11fHxuKGkpfSkpO3JldHVybiBpLmVycm9yJiZvKGkudmFsdWUpLHIucHJvbWlzZX19KTt2YXIgUWQ9QXIsdHk9R3YuQ09OU1RSVUNUT1I7QXYmJkF2LnByb3RvdHlwZSxRZCh7dGFyZ2V0OiJQcm9taXNlIixwcm90bzohMCxmb3JjZWQ6dHkscmVhbDohMH0se2NhdGNoOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRoZW4odm9pZCAwLHQpfX0pO3ZhciBleT1BLHJ5PUF0LG55PUh2LG95PWt2LGl5PU5oO0FyKHt0YXJnZXQ6IlByb21pc2UiLHN0YXQ6ITAsZm9yY2VkOlZkfSx7cmFjZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9bnkuZihlKSxuPXIucmVqZWN0LG89b3koKGZ1bmN0aW9uKCl7dmFyIG89cnkoZS5yZXNvbHZlKTtpeSh0LChmdW5jdGlvbih0KXtleShvLGUsdCkudGhlbihyLnJlc29sdmUsbil9KSl9KSk7cmV0dXJuIG8uZXJyb3ImJm4oby52YWx1ZSksci5wcm9taXNlfX0pO3ZhciBheT1IdjtBcih7dGFyZ2V0OiJQcm9taXNlIixzdGF0OiEwLGZvcmNlZDpHdi5DT05TVFJVQ1RPUn0se3JlamVjdDpmdW5jdGlvbih0KXt2YXIgZT1heS5mKHRoaXMpO3JldHVybigwLGUucmVqZWN0KSh0KSxlLnByb21pc2V9fSk7dmFyIHV5PW5yLGN5PVgsc3k9SHYsZnk9ZnVuY3Rpb24odCxlKXtpZih1eSh0KSxjeShlKSYmZS5jb25zdHJ1Y3Rvcj09PXQpcmV0dXJuIGU7dmFyIHI9c3kuZih0KTtyZXR1cm4oMCxyLnJlc29sdmUpKGUpLHIucHJvbWlzZX0sbHk9QXIsaHk9QXYscHk9R3YuQ09OU1RSVUNUT1Isdnk9ZnksZHk9cnQoIlByb21pc2UiKSx5eT0hcHk7bHkoe3RhcmdldDoiUHJvbWlzZSIsc3RhdDohMCxmb3JjZWQ6dHJ1ZX0se3Jlc29sdmU6ZnVuY3Rpb24odCl7cmV0dXJuIHZ5KHl5JiZ0aGlzPT09ZHk/aHk6dGhpcyx0KX19KTt2YXIgZ3k9QSxteT1BdCxieT1Idix3eT1rdixPeT1OaDtBcih7dGFyZ2V0OiJQcm9taXNlIixzdGF0OiEwLGZvcmNlZDpWZH0se2FsbFNldHRsZWQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWJ5LmYoZSksbj1yLnJlc29sdmUsbz1yLnJlamVjdCxpPXd5KChmdW5jdGlvbigpe3ZhciByPW15KGUucmVzb2x2ZSksbz1bXSxpPTAsYT0xO095KHQsKGZ1bmN0aW9uKHQpe3ZhciB1PWkrKyxjPSExO2ErKyxneShyLGUsdCkudGhlbigoZnVuY3Rpb24odCl7Y3x8KGM9ITAsb1t1XT17c3RhdHVzOiJmdWxmaWxsZWQiLHZhbHVlOnR9LC0tYXx8bihvKSl9KSwoZnVuY3Rpb24odCl7Y3x8KGM9ITAsb1t1XT17c3RhdHVzOiJyZWplY3RlZCIscmVhc29uOnR9LC0tYXx8bihvKSl9KSl9KSksLS1hfHxuKG8pfSkpO3JldHVybiBpLmVycm9yJiZvKGkudmFsdWUpLHIucHJvbWlzZX19KTt2YXIgU3k9QSxFeT1BdCxUeT1ydCx4eT1IdixqeT1rdixNeT1OaCxreT0iTm8gb25lIHByb21pc2UgcmVzb2x2ZWQiO0FyKHt0YXJnZXQ6IlByb21pc2UiLHN0YXQ6ITAsZm9yY2VkOlZkfSx7YW55OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj1UeSgiQWdncmVnYXRlRXJyb3IiKSxuPXh5LmYoZSksbz1uLnJlc29sdmUsaT1uLnJlamVjdCxhPWp5KChmdW5jdGlvbigpe3ZhciBuPUV5KGUucmVzb2x2ZSksYT1bXSx1PTAsYz0xLHM9ITE7TXkodCwoZnVuY3Rpb24odCl7dmFyIGY9dSsrLGw9ITE7YysrLFN5KG4sZSx0KS50aGVuKChmdW5jdGlvbih0KXtsfHxzfHwocz0hMCxvKHQpKX0pLChmdW5jdGlvbih0KXtsfHxzfHwobD0hMCxhW2ZdPXQsLS1jfHxpKG5ldyByKGEsa3kpKSl9KSl9KSksLS1jfHxpKG5ldyByKGEsa3kpKX0pKTtyZXR1cm4gYS5lcnJvciYmaShhLnZhbHVlKSxuLnByb21pc2V9fSk7dmFyIEF5PUFyLFB5PWYsTHk9cW4sUnk9SHYsTnk9QXQsX3k9a3YsQ3k9bi5Qcm9taXNlLEZ5PSExO0F5KHt0YXJnZXQ6IlByb21pc2UiLHN0YXQ6ITAsZm9yY2VkOiFDeXx8IUN5LnRyeXx8X3koKGZ1bmN0aW9uKCl7Q3kudHJ5KChmdW5jdGlvbih0KXtGeT04PT09dH0pLDgpfSkpLmVycm9yfHwhRnl9LHt0cnk6ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4xP0x5KGFyZ3VtZW50cywxKTpbXSxyPVJ5LmYodGhpcyksbj1feSgoZnVuY3Rpb24oKXtyZXR1cm4gUHkoTnkodCksdm9pZCAwLGUpfSkpO3JldHVybihuLmVycm9yP3IucmVqZWN0OnIucmVzb2x2ZSkobi52YWx1ZSksci5wcm9taXNlfX0pO3ZhciBJeT1IdjtBcih7dGFyZ2V0OiJQcm9taXNlIixzdGF0OiEwfSx7d2l0aFJlc29sdmVyczpmdW5jdGlvbigpe3ZhciB0PUl5LmYodGhpcyk7cmV0dXJue3Byb21pc2U6dC5wcm9taXNlLHJlc29sdmU6dC5yZXNvbHZlLHJlamVjdDp0LnJlamVjdH19fSk7dmFyIER5PUFyLFV5PUF2LHp5PW8sQnk9cnQsR3k9VCxIeT1FcCxXeT1meSxKeT1VeSYmVXkucHJvdG90eXBlO0R5KHt0YXJnZXQ6IlByb21pc2UiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiEhVXkmJnp5KChmdW5jdGlvbigpe0p5LmZpbmFsbHkuY2FsbCh7dGhlbjpmdW5jdGlvbigpe319LChmdW5jdGlvbigpe30pKX0pKX0se2ZpbmFsbHk6ZnVuY3Rpb24odCl7dmFyIGU9SHkodGhpcyxCeSgiUHJvbWlzZSIpKSxyPUd5KHQpO3JldHVybiB0aGlzLnRoZW4ocj9mdW5jdGlvbihyKXtyZXR1cm4gV3koZSx0KCkpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KSl9OnQscj9mdW5jdGlvbihyKXtyZXR1cm4gV3koZSx0KCkpLnRoZW4oKGZ1bmN0aW9uKCl7dGhyb3cgcn0pKX06dCl9fSk7dmFyIEt5PVouUHJvbWlzZSxWeT1lKEt5KSxxeT1BcixZeT1WbyxYeT1kKFtdLnJldmVyc2UpLFp5PVsxLDJdO3F5KHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6U3RyaW5nKFp5KT09PVN0cmluZyhaeS5yZXZlcnNlKCkpfSx7cmV2ZXJzZTpmdW5jdGlvbigpe3JldHVybiBZeSh0aGlzKSYmKHRoaXMubGVuZ3RoPXRoaXMubGVuZ3RoKSxYeSh0aGlzKX19KTt2YXIgJHk9TnUoIkFycmF5IiwicmV2ZXJzZSIpLFF5PW50LHRnPSR5LGVnPUFycmF5LnByb3RvdHlwZSxyZz1lKChmdW5jdGlvbih0KXt2YXIgZT10LnJldmVyc2U7cmV0dXJuIHQ9PT1lZ3x8UXkoZWcsdCkmJmU9PT1lZy5yZXZlcnNlP3RnOmV9KSksbmc9QXIsb2c9Vm8saWc9ZmksYWc9WCx1Zz1YcixjZz1lbixzZz1xLGZnPWFjLGxnPWhlLGhnPXFuLHBnPWZjKCJzbGljZSIpLHZnPWxnKCJzcGVjaWVzIiksZGc9QXJyYXkseWc9TWF0aC5tYXg7bmcoe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDohcGd9LHtzbGljZTpmdW5jdGlvbih0LGUpe3ZhciByLG4sbyxpPXNnKHRoaXMpLGE9Y2coaSksdT11Zyh0LGEpLGM9dWcodm9pZCAwPT09ZT9hOmUsYSk7aWYob2coaSkmJihyPWkuY29uc3RydWN0b3IsKGlnKHIpJiYocj09PWRnfHxvZyhyLnByb3RvdHlwZSkpfHxhZyhyKSYmbnVsbD09PShyPXJbdmddKSkmJihyPXZvaWQgMCkscj09PWRnfHx2b2lkIDA9PT1yKSlyZXR1cm4gaGcoaSx1LGMpO2ZvcihuPW5ldyh2b2lkIDA9PT1yP2RnOnIpKHlnKGMtdSwwKSksbz0wO3U8Yzt1KyssbysrKXUgaW4gaSYmZmcobixvLGlbdV0pO3JldHVybiBuLmxlbmd0aD1vLG59fSk7dmFyIGdnPU51KCJBcnJheSIsInNsaWNlIiksbWc9bnQsYmc9Z2csd2c9QXJyYXkucHJvdG90eXBlLE9nPWUoKGZ1bmN0aW9uKHQpe3ZhciBlPXQuc2xpY2U7cmV0dXJuIHQ9PT13Z3x8bWcod2csdCkmJmU9PT13Zy5zbGljZT9iZzplfSkpO2Z1bmN0aW9uIFNnKCl7U2c9ZnVuY3Rpb24oKXtyZXR1cm4gZX07dmFyIHQsZT17fSxyPU9iamVjdC5wcm90b3R5cGUsbj1yLmhhc093blByb3BlcnR5LG89WGZ8fGZ1bmN0aW9uKHQsZSxyKXt0W2VdPXIudmFsdWV9LGk9ImZ1bmN0aW9uIj09dHlwZW9mIHhmP3hmOnt9LGE9aS5pdGVyYXRvcnx8IkBAaXRlcmF0b3IiLHU9aS5hc3luY0l0ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIixjPWkudG9TdHJpbmdUYWd8fCJAQHRvU3RyaW5nVGFnIjtmdW5jdGlvbiBzKHQsZSxyKXtyZXR1cm4gWGYodCxlLHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksdFtlXX10cnl7cyh7fSwiIil9Y2F0Y2goTCl7cz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRbZV09cn19ZnVuY3Rpb24gZih0LGUscixuKXt2YXIgaT1lJiZlLnByb3RvdHlwZSBpbnN0YW5jZW9mIGc/ZTpnLGE9JGYoaS5wcm90b3R5cGUpLHU9bmV3IEEobnx8W10pO3JldHVybiBvKGEsIl9pbnZva2UiLHt2YWx1ZTp4KHQscix1KX0pLGF9ZnVuY3Rpb24gbCh0LGUscil7dHJ5e3JldHVybnt0eXBlOiJub3JtYWwiLGFyZzp0LmNhbGwoZSxyKX19Y2F0Y2gobil7cmV0dXJue3R5cGU6InRocm93Iixhcmc6bn19fWUud3JhcD1mO3ZhciBoPSJzdXNwZW5kZWRTdGFydCIscD0ic3VzcGVuZGVkWWllbGQiLHY9ImV4ZWN1dGluZyIsZD0iY29tcGxldGVkIix5PXt9O2Z1bmN0aW9uIGcoKXt9ZnVuY3Rpb24gbSgpe31mdW5jdGlvbiBiKCl7fXZhciB3PXt9O3ModyxhLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpO3ZhciBPPXJsJiZybChybChQKFtdKSkpO08mJk8hPT1yJiZuLmNhbGwoTyxhKSYmKHc9Tyk7dmFyIFM9Yi5wcm90b3R5cGU9Zy5wcm90b3R5cGU9JGYodyk7ZnVuY3Rpb24gRSh0KXt2YXIgZTt2bChlPVsibmV4dCIsInRocm93IiwicmV0dXJuIl0pLmNhbGwoZSwoZnVuY3Rpb24oZSl7cyh0LGUsKGZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pbnZva2UoZSx0KX0pKX0pKX1mdW5jdGlvbiBUKHQsZSl7ZnVuY3Rpb24gcihvLGksYSx1KXt2YXIgYz1sKHRbb10sdCxpKTtpZigidGhyb3ciIT09Yy50eXBlKXt2YXIgcz1jLmFyZyxmPXMudmFsdWU7cmV0dXJuIGYmJiJvYmplY3QiPT1IZihmKSYmbi5jYWxsKGYsIl9fYXdhaXQiKT9lLnJlc29sdmUoZi5fX2F3YWl0KS50aGVuKChmdW5jdGlvbih0KXtyKCJuZXh0Iix0LGEsdSl9KSwoZnVuY3Rpb24odCl7cigidGhyb3ciLHQsYSx1KX0pKTplLnJlc29sdmUoZikudGhlbigoZnVuY3Rpb24odCl7cy52YWx1ZT10LGEocyl9KSwoZnVuY3Rpb24odCl7cmV0dXJuIHIoInRocm93Iix0LGEsdSl9KSl9dShjLmFyZyl9dmFyIGk7byh0aGlzLCJfaW52b2tlIix7dmFsdWU6ZnVuY3Rpb24odCxuKXtmdW5jdGlvbiBvKCl7cmV0dXJuIG5ldyBlKChmdW5jdGlvbihlLG8pe3IodCxuLGUsbyl9KSl9cmV0dXJuIGk9aT9pLnRoZW4obyxvKTpvKCl9fSl9ZnVuY3Rpb24geChlLHIsbil7dmFyIG89aDtyZXR1cm4gZnVuY3Rpb24oaSxhKXtpZihvPT09dil0aHJvdyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKG89PT1kKXtpZigidGhyb3ciPT09aSl0aHJvdyBhO3JldHVybnt2YWx1ZTp0LGRvbmU6ITB9fWZvcihuLm1ldGhvZD1pLG4uYXJnPWE7Oyl7dmFyIHU9bi5kZWxlZ2F0ZTtpZih1KXt2YXIgYz1qKHUsbik7aWYoYyl7aWYoYz09PXkpY29udGludWU7cmV0dXJuIGN9fWlmKCJuZXh0Ij09PW4ubWV0aG9kKW4uc2VudD1uLl9zZW50PW4uYXJnO2Vsc2UgaWYoInRocm93Ij09PW4ubWV0aG9kKXtpZihvPT09aCl0aHJvdyBvPWQsbi5hcmc7bi5kaXNwYXRjaEV4Y2VwdGlvbihuLmFyZyl9ZWxzZSJyZXR1cm4iPT09bi5tZXRob2QmJm4uYWJydXB0KCJyZXR1cm4iLG4uYXJnKTtvPXY7dmFyIHM9bChlLHIsbik7aWYoIm5vcm1hbCI9PT1zLnR5cGUpe2lmKG89bi5kb25lP2Q6cCxzLmFyZz09PXkpY29udGludWU7cmV0dXJue3ZhbHVlOnMuYXJnLGRvbmU6bi5kb25lfX0idGhyb3ciPT09cy50eXBlJiYobz1kLG4ubWV0aG9kPSJ0aHJvdyIsbi5hcmc9cy5hcmcpfX19ZnVuY3Rpb24gaihlLHIpe3ZhciBuPXIubWV0aG9kLG89ZS5pdGVyYXRvcltuXTtpZihvPT09dClyZXR1cm4gci5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT1uJiZlLml0ZXJhdG9yLnJldHVybiYmKHIubWV0aG9kPSJyZXR1cm4iLHIuYXJnPXQsaihlLHIpLCJ0aHJvdyI9PT1yLm1ldGhvZCl8fCJyZXR1cm4iIT09biYmKHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9bmV3IFR5cGVFcnJvcigiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnIituKyInIG1ldGhvZCIpKSx5O3ZhciBpPWwobyxlLml0ZXJhdG9yLHIuYXJnKTtpZigidGhyb3ciPT09aS50eXBlKXJldHVybiByLm1ldGhvZD0idGhyb3ciLHIuYXJnPWkuYXJnLHIuZGVsZWdhdGU9bnVsbCx5O3ZhciBhPWkuYXJnO3JldHVybiBhP2EuZG9uZT8ocltlLnJlc3VsdE5hbWVdPWEudmFsdWUsci5uZXh0PWUubmV4dExvYywicmV0dXJuIiE9PXIubWV0aG9kJiYoci5tZXRob2Q9Im5leHQiLHIuYXJnPXQpLHIuZGVsZWdhdGU9bnVsbCx5KTphOihyLm1ldGhvZD0idGhyb3ciLHIuYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0Iiksci5kZWxlZ2F0ZT1udWxsLHkpfWZ1bmN0aW9uIE0odCl7dmFyIGUscj17dHJ5TG9jOnRbMF19OzEgaW4gdCYmKHIuY2F0Y2hMb2M9dFsxXSksMiBpbiB0JiYoci5maW5hbGx5TG9jPXRbMl0sci5hZnRlckxvYz10WzNdKSxrbChlPXRoaXMudHJ5RW50cmllcykuY2FsbChlLHIpfWZ1bmN0aW9uIGsodCl7dmFyIGU9dC5jb21wbGV0aW9ufHx7fTtlLnR5cGU9Im5vcm1hbCIsZGVsZXRlIGUuYXJnLHQuY29tcGxldGlvbj1lfWZ1bmN0aW9uIEEodCl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLHZsKHQpLmNhbGwodCxNLHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFAoZSl7aWYoZXx8IiI9PT1lKXt2YXIgcj1lW2FdO2lmKHIpcmV0dXJuIHIuY2FsbChlKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZS5uZXh0KXJldHVybiBlO2lmKCFpc05hTihlLmxlbmd0aCkpe3ZhciBvPS0xLGk9ZnVuY3Rpb24gcigpe2Zvcig7KytvPGUubGVuZ3RoOylpZihuLmNhbGwoZSxvKSlyZXR1cm4gci52YWx1ZT1lW29dLHIuZG9uZT0hMSxyO3JldHVybiByLnZhbHVlPXQsci5kb25lPSEwLHJ9O3JldHVybiBpLm5leHQ9aX19dGhyb3cgbmV3IFR5cGVFcnJvcihIZihlKSsiIGlzIG5vdCBpdGVyYWJsZSIpfXJldHVybiBtLnByb3RvdHlwZT1iLG8oUywiY29uc3RydWN0b3IiLHt2YWx1ZTpiLGNvbmZpZ3VyYWJsZTohMH0pLG8oYiwiY29uc3RydWN0b3IiLHt2YWx1ZTptLGNvbmZpZ3VyYWJsZTohMH0pLG0uZGlzcGxheU5hbWU9cyhiLGMsIkdlbmVyYXRvckZ1bmN0aW9uIiksZS5pc0dlbmVyYXRvckZ1bmN0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPSJmdW5jdGlvbiI9PXR5cGVvZiB0JiZ0LmNvbnN0cnVjdG9yO3JldHVybiEhZSYmKGU9PT1tfHwiR2VuZXJhdG9yRnVuY3Rpb24iPT09KGUuZGlzcGxheU5hbWV8fGUubmFtZSkpfSxlLm1hcms9ZnVuY3Rpb24odCl7cmV0dXJuIEFsP0FsKHQsYik6KHQuX19wcm90b19fPWIscyh0LGMsIkdlbmVyYXRvckZ1bmN0aW9uIikpLHQucHJvdG90eXBlPSRmKFMpLHR9LGUuYXdyYXA9ZnVuY3Rpb24odCl7cmV0dXJue19fYXdhaXQ6dH19LEUoVC5wcm90b3R5cGUpLHMoVC5wcm90b3R5cGUsdSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxlLkFzeW5jSXRlcmF0b3I9VCxlLmFzeW5jPWZ1bmN0aW9uKHQscixuLG8saSl7dm9pZCAwPT09aSYmKGk9VnkpO3ZhciBhPW5ldyBUKGYodCxyLG4sbyksaSk7cmV0dXJuIGUuaXNHZW5lcmF0b3JGdW5jdGlvbihyKT9hOmEubmV4dCgpLnRoZW4oKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRvbmU/dC52YWx1ZTphLm5leHQoKX0pKX0sRShTKSxzKFMsYywiR2VuZXJhdG9yIikscyhTLGEsKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSkscyhTLCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSJ9KSksZS5rZXlzPWZ1bmN0aW9uKHQpe3ZhciBlPU9iamVjdCh0KSxyPVtdO2Zvcih2YXIgbiBpbiBlKWtsKHIpLmNhbGwocixuKTtyZXR1cm4gcmcocikuY2FsbChyKSxmdW5jdGlvbiB0KCl7Zm9yKDtyLmxlbmd0aDspe3ZhciBuPXIucG9wKCk7aWYobiBpbiBlKXJldHVybiB0LnZhbHVlPW4sdC5kb25lPSExLHR9cmV0dXJuIHQuZG9uZT0hMCx0fX0sZS52YWx1ZXM9UCxBLnByb3RvdHlwZT17Y29uc3RydWN0b3I6QSxyZXNldDpmdW5jdGlvbihlKXt2YXIgcjtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD10LHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9Im5leHQiLHRoaXMuYXJnPXQsdmwocj10aGlzLnRyeUVudHJpZXMpLmNhbGwocixrKSwhZSlmb3IodmFyIG8gaW4gdGhpcykidCI9PT1vLmNoYXJBdCgwKSYmbi5jYWxsKHRoaXMsbykmJiFpc05hTigrT2cobykuY2FsbChvLDEpKSYmKHRoaXNbb109dCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIHQ9dGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247aWYoInRocm93Ij09PXQudHlwZSl0aHJvdyB0LmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbihlKXtpZih0aGlzLmRvbmUpdGhyb3cgZTt2YXIgcj10aGlzO2Z1bmN0aW9uIG8obixvKXtyZXR1cm4gdS50eXBlPSJ0aHJvdyIsdS5hcmc9ZSxyLm5leHQ9bixvJiYoci5tZXRob2Q9Im5leHQiLHIuYXJnPXQpLCEhb31mb3IodmFyIGk9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2k+PTA7LS1pKXt2YXIgYT10aGlzLnRyeUVudHJpZXNbaV0sdT1hLmNvbXBsZXRpb247aWYoInJvb3QiPT09YS50cnlMb2MpcmV0dXJuIG8oImVuZCIpO2lmKGEudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBjPW4uY2FsbChhLCJjYXRjaExvYyIpLHM9bi5jYWxsKGEsImZpbmFsbHlMb2MiKTtpZihjJiZzKXtpZih0aGlzLnByZXY8YS5jYXRjaExvYylyZXR1cm4gbyhhLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8YS5maW5hbGx5TG9jKXJldHVybiBvKGEuZmluYWxseUxvYyl9ZWxzZSBpZihjKXtpZih0aGlzLnByZXY8YS5jYXRjaExvYylyZXR1cm4gbyhhLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFzKXRocm93IEVycm9yKCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseSIpO2lmKHRoaXMucHJldjxhLmZpbmFsbHlMb2MpcmV0dXJuIG8oYS5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtyPj0wOy0tcil7dmFyIG89dGhpcy50cnlFbnRyaWVzW3JdO2lmKG8udHJ5TG9jPD10aGlzLnByZXYmJm4uY2FsbChvLCJmaW5hbGx5TG9jIikmJnRoaXMucHJldjxvLmZpbmFsbHlMb2Mpe3ZhciBpPW87YnJlYWt9fWkmJigiYnJlYWsiPT09dHx8ImNvbnRpbnVlIj09PXQpJiZpLnRyeUxvYzw9ZSYmZTw9aS5maW5hbGx5TG9jJiYoaT1udWxsKTt2YXIgYT1pP2kuY29tcGxldGlvbjp7fTtyZXR1cm4gYS50eXBlPXQsYS5hcmc9ZSxpPyh0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5uZXh0PWkuZmluYWxseUxvYyx5KTp0aGlzLmNvbXBsZXRlKGEpfSxjb21wbGV0ZTpmdW5jdGlvbih0LGUpe2lmKCJ0aHJvdyI9PT10LnR5cGUpdGhyb3cgdC5hcmc7cmV0dXJuImJyZWFrIj09PXQudHlwZXx8ImNvbnRpbnVlIj09PXQudHlwZT90aGlzLm5leHQ9dC5hcmc6InJldHVybiI9PT10LnR5cGU/KHRoaXMucnZhbD10aGlzLmFyZz10LmFyZyx0aGlzLm1ldGhvZD0icmV0dXJuIix0aGlzLm5leHQ9ImVuZCIpOiJub3JtYWwiPT09dC50eXBlJiZlJiYodGhpcy5uZXh0PWUpLHl9LGZpbmlzaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgcj10aGlzLnRyeUVudHJpZXNbZV07aWYoci5maW5hbGx5TG9jPT09dClyZXR1cm4gdGhpcy5jb21wbGV0ZShyLmNvbXBsZXRpb24sci5hZnRlckxvYyksayhyKSx5fX0sY2F0Y2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtlPj0wOy0tZSl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW2VdO2lmKHIudHJ5TG9jPT09dCl7dmFyIG49ci5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1uLnR5cGUpe3ZhciBvPW4uYXJnO2socil9cmV0dXJuIG99fXRocm93IEVycm9yKCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHQiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbihlLHIsbil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOlAoZSkscmVzdWx0TmFtZTpyLG5leHRMb2M6bn0sIm5leHQiPT09dGhpcy5tZXRob2QmJih0aGlzLmFyZz10KSx5fX0sZX1mdW5jdGlvbiBFZyh0LGUscixuLG8saSxhKXt0cnl7dmFyIHU9dFtpXShhKSxjPXUudmFsdWV9Y2F0Y2gocyl7cmV0dXJuIHZvaWQgcihzKX11LmRvbmU/ZShjKTpWeS5yZXNvbHZlKGMpLnRoZW4obixvKX1mdW5jdGlvbiBUZyh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgVnkoKGZ1bmN0aW9uKG4sbyl7dmFyIGk9dC5hcHBseShlLHIpO2Z1bmN0aW9uIGEodCl7RWcoaSxuLG8sYSx1LCJuZXh0Iix0KX1mdW5jdGlvbiB1KHQpe0VnKGksbixvLGEsdSwidGhyb3ciLHQpfWEodm9pZCAwKX0pKX19ZnVuY3Rpb24geGcodCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX12YXIgamc9ZShpby5mKCJ0b1ByaW1pdGl2ZSIpKTtmdW5jdGlvbiBNZyh0KXt2YXIgZT1mdW5jdGlvbih0LGUpe2lmKCJvYmplY3QiIT1IZih0KXx8IXQpcmV0dXJuIHQ7dmFyIHI9dFtqZ107aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKHQsZXx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9SGYobikpcmV0dXJuIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1lP1N0cmluZzpOdW1iZXIpKHQpfSh0LCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09SGYoZSk/ZTplKyIifWZ1bmN0aW9uIGtnKHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxYZih0LE1nKG4ua2V5KSxuKX19ZnVuY3Rpb24gQWcodCxlLHIpe3JldHVybiBlJiZrZyh0LnByb3RvdHlwZSxlKSxyJiZrZyh0LHIpLFhmKHQsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksdH1mdW5jdGlvbiBQZyh0LGUscil7cmV0dXJuKGU9TWcoZSkpaW4gdD9YZih0LGUse3ZhbHVlOnIsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTp0W2VdPXIsdH12YXIgTGc9e2V4cG9ydHM6e319LFJnPW8oKGZ1bmN0aW9uKCl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEFycmF5QnVmZmVyKXt2YXIgdD1uZXcgQXJyYXlCdWZmZXIoOCk7T2JqZWN0LmlzRXh0ZW5zaWJsZSh0KSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImEiLHt2YWx1ZTo4fSl9fSkpLE5nPW8sX2c9WCxDZz1iLEZnPVJnLElnPU9iamVjdC5pc0V4dGVuc2libGUsRGc9TmcoKGZ1bmN0aW9uKCl7SWcoMSl9KSl8fEZnP2Z1bmN0aW9uKHQpe3JldHVybiEhX2codCkmJigoIUZnfHwiQXJyYXlCdWZmZXIiIT09Q2codCkpJiYoIUlnfHxJZyh0KSkpfTpJZyxVZz0hbygoZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmlzRXh0ZW5zaWJsZShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKX0pKSx6Zz1BcixCZz1kLEdnPWNuLEhnPVgsV2c9JHQsSmc9JGUuZixLZz1XbixWZz1WbixxZz1EZyxZZz1VZyxYZz0hMSxaZz1uZSgibWV0YSIpLCRnPTAsUWc9ZnVuY3Rpb24odCl7SmcodCxaZyx7dmFsdWU6e29iamVjdElEOiJPIiskZysrLHdlYWtEYXRhOnt9fX0pfSx0bT1MZy5leHBvcnRzPXtlbmFibGU6ZnVuY3Rpb24oKXt0bS5lbmFibGU9ZnVuY3Rpb24oKXt9LFhnPSEwO3ZhciB0PUtnLmYsZT1CZyhbXS5zcGxpY2UpLHI9e307cltaZ109MSx0KHIpLmxlbmd0aCYmKEtnLmY9ZnVuY3Rpb24ocil7Zm9yKHZhciBuPXQociksbz0wLGk9bi5sZW5ndGg7bzxpO28rKylpZihuW29dPT09Wmcpe2UobixvLDEpO2JyZWFrfXJldHVybiBufSx6Zyh7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOiEwfSx7Z2V0T3duUHJvcGVydHlOYW1lczpWZy5mfSkpfSxmYXN0S2V5OmZ1bmN0aW9uKHQsZSl7aWYoIUhnKHQpKXJldHVybiJzeW1ib2wiPT10eXBlb2YgdD90Oigic3RyaW5nIj09dHlwZW9mIHQ/IlMiOiJQIikrdDtpZighV2codCxaZykpe2lmKCFxZyh0KSlyZXR1cm4iRiI7aWYoIWUpcmV0dXJuIkUiO1FnKHQpfXJldHVybiB0W1pnXS5vYmplY3RJRH0sZ2V0V2Vha0RhdGE6ZnVuY3Rpb24odCxlKXtpZighV2codCxaZykpe2lmKCFxZyh0KSlyZXR1cm4hMDtpZighZSlyZXR1cm4hMTtRZyh0KX1yZXR1cm4gdFtaZ10ud2Vha0RhdGF9LG9uRnJlZXplOmZ1bmN0aW9uKHQpe3JldHVybiBZZyYmWGcmJnFnKHQpJiYhV2codCxaZykmJlFnKHQpLHR9fTtHZ1taZ109ITA7dmFyIGVtPUxnLmV4cG9ydHMscm09QXIsbm09bixvbT1lbSxpbT1vLGFtPWdyLHVtPU5oLGNtPWRwLHNtPVQsZm09WCxsbT1HLGhtPUFvLHBtPSRlLmYsdm09eGkuZm9yRWFjaCxkbT1qLHltPUpvLnNldCxnbT1Kby5nZXR0ZXJGb3IsbW09cm8sYm09SG4sd209b28sT209ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbiBpbiBlKXImJnIudW5zYWZlJiZ0W25dP3Rbbl09ZVtuXTptbSh0LG4sZVtuXSxyKTtyZXR1cm4gdH0sU209WmUsRW09ZHAsVG09Ryx4bT1OaCxqbT1JcyxNbT1EcyxrbT1ocCxBbT1qLFBtPWVtLmZhc3RLZXksTG09Sm8uc2V0LFJtPUpvLmdldHRlckZvcixObT17Z2V0Q29uc3RydWN0b3I6ZnVuY3Rpb24odCxlLHIsbil7dmFyIG89dCgoZnVuY3Rpb24odCxvKXtFbSh0LGkpLExtKHQse3R5cGU6ZSxpbmRleDpibShudWxsKSxmaXJzdDpudWxsLGxhc3Q6bnVsbCxzaXplOjB9KSxBbXx8KHQuc2l6ZT0wKSxUbShvKXx8eG0obyx0W25dLHt0aGF0OnQsQVNfRU5UUklFUzpyfSl9KSksaT1vLnByb3RvdHlwZSxhPVJtKGUpLHU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLG8saT1hKHQpLHU9Yyh0LGUpO3JldHVybiB1P3UudmFsdWU9cjooaS5sYXN0PXU9e2luZGV4Om89UG0oZSwhMCksa2V5OmUsdmFsdWU6cixwcmV2aW91czpuPWkubGFzdCxuZXh0Om51bGwscmVtb3ZlZDohMX0saS5maXJzdHx8KGkuZmlyc3Q9dSksbiYmKG4ubmV4dD11KSxBbT9pLnNpemUrKzp0LnNpemUrKywiRiIhPT1vJiYoaS5pbmRleFtvXT11KSksdH0sYz1mdW5jdGlvbih0LGUpe3ZhciByLG49YSh0KSxvPVBtKGUpO2lmKCJGIiE9PW8pcmV0dXJuIG4uaW5kZXhbb107Zm9yKHI9bi5maXJzdDtyO3I9ci5uZXh0KWlmKHIua2V5PT09ZSlyZXR1cm4gcn07cmV0dXJuIE9tKGkse2NsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PWEodGhpcyksZT10LmZpcnN0O2U7KWUucmVtb3ZlZD0hMCxlLnByZXZpb3VzJiYoZS5wcmV2aW91cz1lLnByZXZpb3VzLm5leHQ9bnVsbCksZT1lLm5leHQ7dC5maXJzdD10Lmxhc3Q9bnVsbCx0LmluZGV4PWJtKG51bGwpLEFtP3Quc2l6ZT0wOnRoaXMuc2l6ZT0wfSxkZWxldGU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPWEoZSksbj1jKGUsdCk7aWYobil7dmFyIG89bi5uZXh0LGk9bi5wcmV2aW91cztkZWxldGUgci5pbmRleFtuLmluZGV4XSxuLnJlbW92ZWQ9ITAsaSYmKGkubmV4dD1vKSxvJiYoby5wcmV2aW91cz1pKSxyLmZpcnN0PT09biYmKHIuZmlyc3Q9byksci5sYXN0PT09biYmKHIubGFzdD1pKSxBbT9yLnNpemUtLTplLnNpemUtLX1yZXR1cm4hIW59LGZvckVhY2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9YSh0aGlzKSxuPVNtKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApO2U9ZT9lLm5leHQ6ci5maXJzdDspZm9yKG4oZS52YWx1ZSxlLmtleSx0aGlzKTtlJiZlLnJlbW92ZWQ7KWU9ZS5wcmV2aW91c30saGFzOmZ1bmN0aW9uKHQpe3JldHVybiEhYyh0aGlzLHQpfX0pLE9tKGkscj97Z2V0OmZ1bmN0aW9uKHQpe3ZhciBlPWModGhpcyx0KTtyZXR1cm4gZSYmZS52YWx1ZX0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHUodGhpcywwPT09dD8wOnQsZSl9fTp7YWRkOmZ1bmN0aW9uKHQpe3JldHVybiB1KHRoaXMsdD0wPT09dD8wOnQsdCl9fSksQW0mJndtKGksInNpemUiLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcykuc2l6ZX19KSxvfSxzZXRTdHJvbmc6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWUrIiBJdGVyYXRvciIsbz1SbShlKSxpPVJtKG4pO2ptKHQsZSwoZnVuY3Rpb24odCxlKXtMbSh0aGlzLHt0eXBlOm4sdGFyZ2V0OnQsc3RhdGU6byh0KSxraW5kOmUsbGFzdDpudWxsfSl9KSwoZnVuY3Rpb24oKXtmb3IodmFyIHQ9aSh0aGlzKSxlPXQua2luZCxyPXQubGFzdDtyJiZyLnJlbW92ZWQ7KXI9ci5wcmV2aW91cztyZXR1cm4gdC50YXJnZXQmJih0Lmxhc3Q9cj1yP3IubmV4dDp0LnN0YXRlLmZpcnN0KT9NbSgia2V5cyI9PT1lP3Iua2V5OiJ2YWx1ZXMiPT09ZT9yLnZhbHVlOltyLmtleSxyLnZhbHVlXSwhMSk6KHQudGFyZ2V0PW51bGwsTW0odm9pZCAwLCEwKSl9KSxyPyJlbnRyaWVzIjoidmFsdWVzIiwhciwhMCksa20oZSl9fTsoZnVuY3Rpb24odCxlLHIpe3ZhciBuLG89LTEhPT10LmluZGV4T2YoIk1hcCIpLGk9LTEhPT10LmluZGV4T2YoIldlYWsiKSxhPW8/InNldCI6ImFkZCIsdT1ubVt0XSxjPXUmJnUucHJvdG90eXBlLHM9e307aWYoZG0mJnNtKHUpJiYoaXx8Yy5mb3JFYWNoJiYhaW0oKGZ1bmN0aW9uKCl7KG5ldyB1KS5lbnRyaWVzKCkubmV4dCgpfSkpKSl7dmFyIGY9KG49ZSgoZnVuY3Rpb24oZSxyKXt5bShjbShlLGYpLHt0eXBlOnQsY29sbGVjdGlvbjpuZXcgdX0pLGxtKHIpfHx1bShyLGVbYV0se3RoYXQ6ZSxBU19FTlRSSUVTOm99KX0pKSkucHJvdG90eXBlLGw9Z20odCk7dm0oWyJhZGQiLCJjbGVhciIsImRlbGV0ZSIsImZvckVhY2giLCJnZXQiLCJoYXMiLCJzZXQiLCJrZXlzIiwidmFsdWVzIiwiZW50cmllcyJdLChmdW5jdGlvbih0KXt2YXIgZT0iYWRkIj09PXR8fCJzZXQiPT09dDshKHQgaW4gYyl8fGkmJiJjbGVhciI9PT10fHxhbShmLHQsKGZ1bmN0aW9uKHIsbil7dmFyIG89bCh0aGlzKS5jb2xsZWN0aW9uO2lmKCFlJiZpJiYhZm0ocikpcmV0dXJuImdldCI9PT10JiZ2b2lkIDA7dmFyIGE9b1t0XSgwPT09cj8wOnIsbik7cmV0dXJuIGU/dGhpczphfSkpfSkpLGl8fHBtKGYsInNpemUiLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGwodGhpcykuY29sbGVjdGlvbi5zaXplfX0pfWVsc2Ugbj1yLmdldENvbnN0cnVjdG9yKGUsdCxvLGEpLG9tLmVuYWJsZSgpO2htKG4sdCwhMSwhMCksc1t0XT1uLHJtKHtnbG9iYWw6ITAsZm9yY2VkOiEwfSxzKSxpfHxyLnNldFN0cm9uZyhuLHQsbyl9KSgiTWFwIiwoZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcyxhcmd1bWVudHMubGVuZ3RoP2FyZ3VtZW50c1swXTp2b2lkIDApfX0pLE5tKTt2YXIgX209ZnVuY3Rpb24odCxlKXtyZXR1cm4gMT09PWU/ZnVuY3Rpb24oZSxyKXtyZXR1cm4gZVt0XShyKX06ZnVuY3Rpb24oZSxyLG4pe3JldHVybiBlW3RdKHIsbil9fSxDbT1ydCgiTWFwIiksRm09e01hcDpDbSxzZXQ6X20oInNldCIsMiksZ2V0Ol9tKCJnZXQiLDEpLGhhczpfbSgiaGFzIiwxKSxyZW1vdmU6X20oImRlbGV0ZSIsMSkscHJvdG86Q20ucHJvdG90eXBlfSxJbT1BcixEbT1BdCxVbT1KLHptPU5oLEJtPUZtLk1hcCxHbT1GbS5oYXMsSG09Rm0uZ2V0LFdtPUZtLnNldCxKbT1kKFtdLnB1c2gpO0ltKHt0YXJnZXQ6Ik1hcCIsc3RhdDohMCxmb3JjZWQ6dHJ1ZX0se2dyb3VwQnk6ZnVuY3Rpb24odCxlKXtVbSh0KSxEbShlKTt2YXIgcj1uZXcgQm0sbj0wO3JldHVybiB6bSh0LChmdW5jdGlvbih0KXt2YXIgbz1lKHQsbisrKTtHbShyLG8pP0ptKEhtKHIsbyksdCk6V20ocixvLFt0XSl9KSkscn19KTt2YXIgS209Wi5NYXAsVm09WmUscW09bnIsWW09WXQsWG09TmgsWm09ZnVuY3Rpb24odCxlLHIpe3JldHVybiBmdW5jdGlvbihuKXt2YXIgbz1ZbShuKSxpPWFyZ3VtZW50cy5sZW5ndGgsYT1pPjE/YXJndW1lbnRzWzFdOnZvaWQgMCx1PXZvaWQgMCE9PWEsYz11P1ZtKGEsaT4yP2FyZ3VtZW50c1syXTp2b2lkIDApOnZvaWQgMCxzPW5ldyB0LGY9MDtyZXR1cm4gWG0obywoZnVuY3Rpb24odCl7dmFyIG49dT9jKHQsZisrKTp0O3I/ZShzLHFtKG4pWzBdLG5bMV0pOmUocyxuKX0pKSxzfX07QXIoe3RhcmdldDoiTWFwIixzdGF0OiEwLGZvcmNlZDohMH0se2Zyb206Wm0oRm0uTWFwLEZtLnNldCwhMCl9KTt2YXIgJG09bnIsUW09ZnVuY3Rpb24odCxlLHIpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgbj1uZXcgdCxvPWFyZ3VtZW50cy5sZW5ndGgsaT0wO2k8bztpKyspe3ZhciBhPWFyZ3VtZW50c1tpXTtyP2UobiwkbShhKVswXSxhWzFdKTplKG4sYSl9cmV0dXJuIG59fTtBcih7dGFyZ2V0OiJNYXAiLHN0YXQ6ITAsZm9yY2VkOiEwfSx7b2Y6UW0oRm0uTWFwLEZtLnNldCwhMCl9KTt2YXIgdGI9QSxlYj1OaCxyYj1ULG5iPUF0LG9iPUZtLk1hcDtBcih7dGFyZ2V0OiJNYXAiLHN0YXQ6ITAsZm9yY2VkOiEwfSx7a2V5Qnk6ZnVuY3Rpb24odCxlKXt2YXIgcj1uZXcocmIodGhpcyk/dGhpczpvYik7bmIoZSk7dmFyIG49bmIoci5zZXQpO3JldHVybiBlYih0LChmdW5jdGlvbih0KXt0YihuLHIsZSh0KSx0KX0pKSxyfX0pO3ZhciBpYj14dCxhYj1UeXBlRXJyb3IsdWI9ZnVuY3Rpb24odCl7aWYoIm9iamVjdCI9PXR5cGVvZiB0JiYic2l6ZSJpbiB0JiYiaGFzImluIHQmJiJnZXQiaW4gdCYmInNldCJpbiB0JiYiZGVsZXRlImluIHQmJiJlbnRyaWVzImluIHQpcmV0dXJuIHQ7dGhyb3cgbmV3IGFiKGliKHQpKyIgaXMgbm90IGEgbWFwIil9LGNiPXViLHNiPUZtLnJlbW92ZTtBcih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiEwfSx7ZGVsZXRlQWxsOmZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9Y2IodGhpcykscj0hMCxuPTAsbz1hcmd1bWVudHMubGVuZ3RoO248bztuKyspdD1zYihlLGFyZ3VtZW50c1tuXSkscj1yJiZ0O3JldHVybiEhcn19KTt2YXIgZmI9dWIsbGI9Rm0uZ2V0LGhiPUZtLmhhcyxwYj1GbS5zZXQ7QXIoe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDohMH0se2VtcGxhY2U6ZnVuY3Rpb24odCxlKXt2YXIgcixuLG89ZmIodGhpcyk7cmV0dXJuIGhiKG8sdCk/KHI9bGIobyx0KSwidXBkYXRlImluIGUmJihyPWUudXBkYXRlKHIsdCxvKSxwYihvLHQscikpLHIpOihuPWUuaW5zZXJ0KHQsbykscGIobyx0LG4pLG4pfX0pO3ZhciB2Yj1BLGRiPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4sbyxpPXI/dDp0Lml0ZXJhdG9yLGE9dC5uZXh0OyEobj12YihhLGkpKS5kb25lOylpZih2b2lkIDAhPT0obz1lKG4udmFsdWUpKSlyZXR1cm4gb30seWI9ZnVuY3Rpb24odCxlLHIpe3JldHVybiByP2RiKHQuZW50cmllcygpLChmdW5jdGlvbih0KXtyZXR1cm4gZSh0WzFdLHRbMF0pfSksITApOnQuZm9yRWFjaChlKX0sZ2I9WmUsbWI9dWIsYmI9eWI7QXIoe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDohMH0se2V2ZXJ5OmZ1bmN0aW9uKHQpe3ZhciBlPW1iKHRoaXMpLHI9Z2IodCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCk7cmV0dXJuITEhPT1iYihlLChmdW5jdGlvbih0LG4pe2lmKCFyKHQsbixlKSlyZXR1cm4hMX0pLCEwKX19KTt2YXIgd2I9WmUsT2I9dWIsU2I9eWIsRWI9Rm0uTWFwLFRiPUZtLnNldDtBcih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiEwfSx7ZmlsdGVyOmZ1bmN0aW9uKHQpe3ZhciBlPU9iKHRoaXMpLHI9d2IodCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCksbj1uZXcgRWI7cmV0dXJuIFNiKGUsKGZ1bmN0aW9uKHQsbyl7cih0LG8sZSkmJlRiKG4sbyx0KX0pKSxufX0pO3ZhciB4Yj1aZSxqYj11YixNYj15YjtBcih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiEwfSx7ZmluZDpmdW5jdGlvbih0KXt2YXIgZT1qYih0aGlzKSxyPXhiKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApLG49TWIoZSwoZnVuY3Rpb24odCxuKXtpZihyKHQsbixlKSlyZXR1cm57dmFsdWU6dH19KSwhMCk7cmV0dXJuIG4mJm4udmFsdWV9fSk7dmFyIGtiPVplLEFiPXViLFBiPXliO0FyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6ITB9LHtmaW5kS2V5OmZ1bmN0aW9uKHQpe3ZhciBlPUFiKHRoaXMpLHI9a2IodCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCksbj1QYihlLChmdW5jdGlvbih0LG4pe2lmKHIodCxuLGUpKXJldHVybntrZXk6bn19KSwhMCk7cmV0dXJuIG4mJm4ua2V5fX0pO3ZhciBMYj1mdW5jdGlvbih0LGUpe3JldHVybiB0PT09ZXx8dCE9dCYmZSE9ZX0sUmI9dWIsTmI9eWI7QXIoe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDohMH0se2luY2x1ZGVzOmZ1bmN0aW9uKHQpe3JldHVybiEwPT09TmIoUmIodGhpcyksKGZ1bmN0aW9uKGUpe2lmKExiKGUsdCkpcmV0dXJuITB9KSwhMCl9fSk7dmFyIF9iPXViLENiPUZtLmdldCxGYj1GbS5oYXMsSWI9Rm0uc2V0O0FyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6ITB9LHtnZXRPckluc2VydDpmdW5jdGlvbih0LGUpe3JldHVybiBGYihfYih0aGlzKSx0KT9DYih0aGlzLHQpOihJYih0aGlzLHQsZSksZSl9fSk7dmFyIERiPUF0LFViPXViLHpiPUZtLmdldCxCYj1GbS5oYXMsR2I9Rm0uc2V0O0FyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6ITB9LHtnZXRPckluc2VydENvbXB1dGVkOmZ1bmN0aW9uKHQsZSl7aWYoVWIodGhpcyksRGIoZSksQmIodGhpcyx0KSlyZXR1cm4gemIodGhpcyx0KTswPT09dCYmMS90PT0tMS8wJiYodD0wKTt2YXIgcj1lKHQpO3JldHVybiBHYih0aGlzLHQscikscn19KTt2YXIgSGI9dWIsV2I9eWI7QXIoe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDohMH0se2tleU9mOmZ1bmN0aW9uKHQpe3ZhciBlPVdiKEhiKHRoaXMpLChmdW5jdGlvbihlLHIpe2lmKGU9PT10KXJldHVybntrZXk6cn19KSwhMCk7cmV0dXJuIGUmJmUua2V5fX0pO3ZhciBKYj1aZSxLYj11YixWYj15YixxYj1GbS5NYXAsWWI9Rm0uc2V0O0FyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6ITB9LHttYXBLZXlzOmZ1bmN0aW9uKHQpe3ZhciBlPUtiKHRoaXMpLHI9SmIodCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCksbj1uZXcgcWI7cmV0dXJuIFZiKGUsKGZ1bmN0aW9uKHQsbyl7WWIobixyKHQsbyxlKSx0KX0pKSxufX0pO3ZhciBYYj1aZSxaYj11YiwkYj15YixRYj1GbS5NYXAsdHc9Rm0uc2V0O0FyKHt0YXJnZXQ6Ik1hcCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6ITB9LHttYXBWYWx1ZXM6ZnVuY3Rpb24odCl7dmFyIGU9WmIodGhpcykscj1YYih0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKSxuPW5ldyBRYjtyZXR1cm4gJGIoZSwoZnVuY3Rpb24odCxvKXt0dyhuLG8scih0LG8sZSkpfSkpLG59fSk7dmFyIGV3PXViLHJ3PU5oLG53PUZtLnNldDtBcih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsYXJpdHk6MSxmb3JjZWQ6ITB9LHttZXJnZTpmdW5jdGlvbih0KXtmb3IodmFyIGU9ZXcodGhpcykscj1hcmd1bWVudHMubGVuZ3RoLG49MDtuPHI7KXJ3KGFyZ3VtZW50c1tuKytdLChmdW5jdGlvbih0LHIpe253KGUsdCxyKX0pLHtBU19FTlRSSUVTOiEwfSk7cmV0dXJuIGV9fSk7dmFyIG93PUF0LGl3PXViLGF3PXliLHV3PVR5cGVFcnJvcjtBcih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiEwfSx7cmVkdWNlOmZ1bmN0aW9uKHQpe3ZhciBlPWl3KHRoaXMpLHI9YXJndW1lbnRzLmxlbmd0aDwyLG49cj92b2lkIDA6YXJndW1lbnRzWzFdO2lmKG93KHQpLGF3KGUsKGZ1bmN0aW9uKG8saSl7cj8ocj0hMSxuPW8pOm49dChuLG8saSxlKX0pKSxyKXRocm93IG5ldyB1dygiUmVkdWNlIG9mIGVtcHR5IG1hcCB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTtyZXR1cm4gbn19KTt2YXIgY3c9WmUsc3c9dWIsZnc9eWI7QXIoe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDohMH0se3NvbWU6ZnVuY3Rpb24odCl7dmFyIGU9c3codGhpcykscj1jdyh0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKTtyZXR1cm4hMD09PWZ3KGUsKGZ1bmN0aW9uKHQsbil7aWYocih0LG4sZSkpcmV0dXJuITB9KSwhMCl9fSk7dmFyIGx3PUF0LGh3PXViLHB3PVR5cGVFcnJvcix2dz1GbS5nZXQsZHc9Rm0uaGFzLHl3PUZtLnNldDtBcih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiEwfSx7dXBkYXRlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9aHcodGhpcyksbj1hcmd1bWVudHMubGVuZ3RoO2x3KGUpO3ZhciBvPWR3KHIsdCk7aWYoIW8mJm48Myl0aHJvdyBuZXcgcHcoIlVwZGF0aW5nIGFic2VudCB2YWx1ZSIpO3ZhciBpPW8/dncocix0KTpsdyhuPjI/YXJndW1lbnRzWzJdOnZvaWQgMCkodCxyKTtyZXR1cm4geXcocix0LGUoaSx0LHIpKSxyfX0pO3ZhciBndz1BLG13PUF0LGJ3PVQsd3c9bnIsT3c9VHlwZUVycm9yLFN3PWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj13dyh0aGlzKSxvPW13KG4uZ2V0KSxpPW13KG4uaGFzKSxhPW13KG4uc2V0KSx1PWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO2lmKCFidyhlKSYmIWJ3KHUpKXRocm93IG5ldyBPdygiQXQgbGVhc3Qgb25lIGNhbGxiYWNrIHJlcXVpcmVkIik7cmV0dXJuIGd3KGksbix0KT8ocj1ndyhvLG4sdCksYncoZSkmJihyPWUociksZ3coYSxuLHQscikpKTpidyh1KSYmKHI9dSgpLGd3KGEsbix0LHIpKSxyfTtBcih7dGFyZ2V0OiJNYXAiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiEwfSx7dXBzZXJ0OlN3fSksQXIoe3RhcmdldDoiTWFwIixwcm90bzohMCxyZWFsOiEwLG5hbWU6InVwc2VydCIsZm9yY2VkOiEwfSx7dXBkYXRlT3JJbnNlcnQ6U3d9KTt2YXIgRXc9ZShLbSksVHc9ZCx4dz1BdCxqdz1YLE13PSR0LGt3PXFuLEF3PWksUHc9RnVuY3Rpb24sTHc9VHcoW10uY29uY2F0KSxSdz1UdyhbXS5qb2luKSxOdz17fSxfdz1Bdz9Qdy5iaW5kOmZ1bmN0aW9uKHQpe3ZhciBlPXh3KHRoaXMpLHI9ZS5wcm90b3R5cGUsbj1rdyhhcmd1bWVudHMsMSksbz1mdW5jdGlvbigpe3ZhciByPUx3KG4sa3coYXJndW1lbnRzKSk7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBvP2Z1bmN0aW9uKHQsZSxyKXtpZighTXcoTncsZSkpe2Zvcih2YXIgbj1bXSxvPTA7bzxlO28rKyluW29dPSJhWyIrbysiXSI7TndbZV09UHcoIkMsYSIsInJldHVybiBuZXcgQygiK1J3KG4sIiwiKSsiKSIpfXJldHVybiBOd1tlXSh0LHIpfShlLHIubGVuZ3RoLHIpOmUuYXBwbHkodCxyKX07cmV0dXJuIGp3KHIpJiYoby5wcm90b3R5cGU9ciksb30sQ3c9X3c7QXIoe3RhcmdldDoiRnVuY3Rpb24iLHByb3RvOiEwLGZvcmNlZDpGdW5jdGlvbi5iaW5kIT09Q3d9LHtiaW5kOkN3fSk7dmFyIEZ3PU51KCJGdW5jdGlvbiIsImJpbmQiKSxJdz1udCxEdz1GdyxVdz1GdW5jdGlvbi5wcm90b3R5cGUsenc9ZSgoZnVuY3Rpb24odCl7dmFyIGU9dC5iaW5kO3JldHVybiB0PT09VXd8fEl3KFV3LHQpJiZlPT09VXcuYmluZD9EdzplfSkpLEJ3PWUoS3kpLEd3PU51KCJBcnJheSIsImNvbmNhdCIpLEh3PW50LFd3PUd3LEp3PUFycmF5LnByb3RvdHlwZSxLdz1lKChmdW5jdGlvbih0KXt2YXIgZT10LmNvbmNhdDtyZXR1cm4gdD09PUp3fHxIdyhKdyx0KSYmZT09PUp3LmNvbmNhdD9XdzplfSkpLFZ3PXhpLm1hcDtBcih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsZm9yY2VkOiFmYygibWFwIil9LHttYXA6ZnVuY3Rpb24odCl7cmV0dXJuIFZ3KHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSk7dmFyIHF3PU51KCJBcnJheSIsIm1hcCIpLFl3PW50LFh3PXF3LFp3PUFycmF5LnByb3RvdHlwZSwkdz1lKChmdW5jdGlvbih0KXt2YXIgZT10Lm1hcDtyZXR1cm4gdD09PVp3fHxZdyhadyx0KSYmZT09PVp3Lm1hcD9YdzplfSkpLFF3PWUocGwpLHRPPVl0LGVPPVhyLHJPPWVuLG5PPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Tyh0aGlzKSxyPXJPKGUpLG49YXJndW1lbnRzLmxlbmd0aCxvPWVPKG4+MT9hcmd1bWVudHNbMV06dm9pZCAwLHIpLGk9bj4yP2FyZ3VtZW50c1syXTp2b2lkIDAsYT12b2lkIDA9PT1pP3I6ZU8oaSxyKTthPm87KWVbbysrXT10O3JldHVybiBlfTtBcih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITB9LHtmaWxsOm5PfSk7dmFyIG9PPU51KCJBcnJheSIsImZpbGwiKSxpTz1udCxhTz1vTyx1Tz1BcnJheS5wcm90b3R5cGUsY089ZSgoZnVuY3Rpb24odCl7dmFyIGU9dC5maWxsO3JldHVybiB0PT09dU98fGlPKHVPLHQpJiZlPT09dU8uZmlsbD9hTzplfSkpLHNPPU5oLGZPPWFjO0FyKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMH0se2Zyb21FbnRyaWVzOmZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiBzTyh0LChmdW5jdGlvbih0LHIpe2ZPKGUsdCxyKX0pLHtBU19FTlRSSUVTOiEwfSksZX19KTt2YXIgbE89ZShaLk9iamVjdC5mcm9tRW50cmllcyksaE89bnIscE89Ymgsdk89WmUsZE89QSx5Tz1ZdCxnTz1mdW5jdGlvbih0LGUscixuKXt0cnl7cmV0dXJuIG4/ZShoTyhyKVswXSxyWzFdKTplKHIpfWNhdGNoKGtTKXtwTyh0LCJ0aHJvdyIsa1MpfX0sbU89cmgsYk89Zmksd089ZW4sT089YWMsU089ZGgsRU89Y2gsVE89QXJyYXkseE89ZnVuY3Rpb24odCl7dmFyIGU9eU8odCkscj1iTyh0aGlzKSxuPWFyZ3VtZW50cy5sZW5ndGgsbz1uPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxpPXZvaWQgMCE9PW87aSYmKG89dk8obyxuPjI/YXJndW1lbnRzWzJdOnZvaWQgMCkpO3ZhciBhLHUsYyxzLGYsbCxoPUVPKGUpLHA9MDtpZighaHx8dGhpcz09PVRPJiZtTyhoKSlmb3IoYT13TyhlKSx1PXI/bmV3IHRoaXMoYSk6VE8oYSk7YT5wO3ArKylsPWk/byhlW3BdLHApOmVbcF0sT08odSxwLGwpO2Vsc2UgZm9yKHU9cj9uZXcgdGhpczpbXSxmPShzPVNPKGUsaCkpLm5leHQ7IShjPWRPKGYscykpLmRvbmU7cCsrKWw9aT9nTyhzLG8sW2MudmFsdWUscF0sITApOmMudmFsdWUsT08odSxwLGwpO3JldHVybiB1Lmxlbmd0aD1wLHV9O0FyKHt0YXJnZXQ6IkFycmF5IixzdGF0OiEwLGZvcmNlZDohSmQoKGZ1bmN0aW9uKHQpe0FycmF5LmZyb20odCl9KSl9LHtmcm9tOnhPfSk7dmFyIGpPPWUoWi5BcnJheS5mcm9tKSxNTz1OdSgiQXJyYXkiLCJ2YWx1ZXMiKSxrTz1EcixBTz0kdCxQTz1udCxMTz1NTyxSTz1BcnJheS5wcm90b3R5cGUsTk89e0RPTVRva2VuTGlzdDohMCxOb2RlTGlzdDohMH0sX089ZSgoZnVuY3Rpb24odCl7dmFyIGU9dC52YWx1ZXM7cmV0dXJuIHQ9PT1ST3x8UE8oUk8sdCkmJmU9PT1STy52YWx1ZXN8fEFPKE5PLGtPKHQpKT9MTzplfSkpLENPPUtyLEZPPUJyLElPPUosRE89UmFuZ2VFcnJvcixVTz1kLHpPPVFyLEJPPUJyLEdPPUosSE89VU8oKGZ1bmN0aW9uKHQpe3ZhciBlPUZPKElPKHRoaXMpKSxyPSIiLG49Q08odCk7aWYobjwwfHxuPT09MS8wKXRocm93IG5ldyBETygiV3JvbmcgbnVtYmVyIG9mIHJlcGV0aXRpb25zIik7Zm9yKDtuPjA7KG4+Pj49MSkmJihlKz1lKSkxJm4mJihyKz1lKTtyZXR1cm4gcn0pKSxXTz1VTygiIi5zbGljZSksSk89TWF0aC5jZWlsLEtPPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLHIsbil7dmFyIG8saSxhPUJPKEdPKGUpKSx1PXpPKHIpLGM9YS5sZW5ndGgscz12b2lkIDA9PT1uPyIgIjpCTyhuKTtyZXR1cm4gdTw9Y3x8IiI9PT1zP2E6KChpPUhPKHMsSk8oKG89dS1jKS9zLmxlbmd0aCkpKS5sZW5ndGg+byYmKGk9V08oaSwwLG8pKSx0P2EraTppK2EpfX0sVk89ZCxxTz1vLFlPPXtzdGFydDpLTyghMSksZW5kOktPKCEwKX0uc3RhcnQsWE89UmFuZ2VFcnJvcixaTz1pc0Zpbml0ZSwkTz1NYXRoLmFicyxRTz1EYXRlLnByb3RvdHlwZSx0Uz1RTy50b0lTT1N0cmluZyxlUz1WTyhRTy5nZXRUaW1lKSxyUz1WTyhRTy5nZXRVVENEYXRlKSxuUz1WTyhRTy5nZXRVVENGdWxsWWVhciksb1M9Vk8oUU8uZ2V0VVRDSG91cnMpLGlTPVZPKFFPLmdldFVUQ01pbGxpc2Vjb25kcyksYVM9Vk8oUU8uZ2V0VVRDTWludXRlcyksdVM9Vk8oUU8uZ2V0VVRDTW9udGgpLGNTPVZPKFFPLmdldFVUQ1NlY29uZHMpLHNTPXFPKChmdW5jdGlvbigpe3JldHVybiIwMzg1LTA3LTI1VDA3OjA2OjM5Ljk5OVoiIT09dFMuY2FsbChuZXcgRGF0ZSgtNTAwMDAwMDAwMDAwMDEpKX0pKXx8IXFPKChmdW5jdGlvbigpe3RTLmNhbGwobmV3IERhdGUoTmFOKSl9KSk/ZnVuY3Rpb24oKXtpZighWk8oZVModGhpcykpKXRocm93IG5ldyBYTygiSW52YWxpZCB0aW1lIHZhbHVlIik7dmFyIHQ9dGhpcyxlPW5TKHQpLHI9aVModCksbj1lPDA/Ii0iOmU+OTk5OT8iKyI6IiI7cmV0dXJuIG4rWU8oJE8oZSksbj82OjQsMCkrIi0iK1lPKHVTKHQpKzEsMiwwKSsiLSIrWU8oclModCksMiwwKSsiVCIrWU8ob1ModCksMiwwKSsiOiIrWU8oYVModCksMiwwKSsiOiIrWU8oY1ModCksMiwwKSsiLiIrWU8ociwzLDApKyJaIn06dFMsZlM9QSxsUz1ZdCxoUz13ZSxwUz1zUyx2Uz1iO0FyKHt0YXJnZXQ6IkRhdGUiLHByb3RvOiEwLGZvcmNlZDpvKChmdW5jdGlvbigpe3JldHVybiBudWxsIT09bmV3IERhdGUoTmFOKS50b0pTT04oKXx8MSE9PWZTKERhdGUucHJvdG90eXBlLnRvSlNPTix7dG9JU09TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gMX19KX0pKX0se3RvSlNPTjpmdW5jdGlvbih0KXt2YXIgZT1sUyh0aGlzKSxyPWhTKGUsIm51bWJlciIpO3JldHVybiJudW1iZXIiIT10eXBlb2Ygcnx8aXNGaW5pdGUocik/InRvSVNPU3RyaW5nImluIGV8fCJEYXRlIiE9PXZTKGUpP2UudG9JU09TdHJpbmcoKTpmUyhwUyxlKTpudWxsfX0pO3ZhciBkUz1aLHlTPWY7ZFMuSlNPTnx8KGRTLkpTT049e3N0cmluZ2lmeTpKU09OLnN0cmluZ2lmeX0pO3ZhciBnUz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHlTKGRTLkpTT04uc3RyaW5naWZ5LG51bGwsYXJndW1lbnRzKX0sbVM9ZShnUyksYlM9ZnVuY3Rpb24oKXtyZXR1cm4gQWcoKGZ1bmN0aW9uIHQoZSl7eGcodGhpcyx0KSxQZyh0aGlzLCJfY2FjaGUiLHZvaWQgMCksUGcodGhpcywiX2NhY2hlSGVhZCIsMCksdGhpcy5fY2FjaGU9bmV3IEZsb2F0MzJBcnJheShlKX0pLFt7a2V5OiJjYWNoZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU7aWYodC5sZW5ndGgrdGhpcy5fY2FjaGVIZWFkPnRoaXMuX2NhY2hlLmxlbmd0aCYmKGU9dC5zdWJhcnJheSh0aGlzLl9jYWNoZS5sZW5ndGgtdGhpcy5fY2FjaGVIZWFkKSx0PXQuc3ViYXJyYXkoMCx0aGlzLl9jYWNoZS5sZW5ndGgtdGhpcy5fY2FjaGVIZWFkKSksdGhpcy5fY2FjaGUuc2V0KHQsdGhpcy5fY2FjaGVIZWFkKSx0aGlzLl9jYWNoZUhlYWQrPXQubGVuZ3RoLHRoaXMuX2NhY2hlSGVhZD09PXRoaXMuX2NhY2hlLmxlbmd0aCYmKHRoaXMuX2NhY2hlSGVhZD0wKSxlKXJldHVybiB0aGlzLmNhY2hlKGUpfX0se2tleToiZ2V0Q2FjaGUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEZsb2F0MzJBcnJheSh0aGlzLl9jYWNoZS5sZW5ndGgpO3JldHVybiB0LnNldCh0aGlzLl9jYWNoZS5zdWJhcnJheSh0aGlzLl9jYWNoZUhlYWQpKSx0LnNldCh0aGlzLl9jYWNoZS5zdWJhcnJheSgwLHRoaXMuX2NhY2hlSGVhZCksdGhpcy5fY2FjaGUubGVuZ3RoLXRoaXMuX2NhY2hlSGVhZCksdH19XSl9KCk7ZnVuY3Rpb24gd1ModCxlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MDtyZXR1cm4gZS5sZW5ndGgrcj50Lmxlbmd0aCYmKGU9ZS5zdWJhcnJheSgwLHQubGVuZ3RoLXIpKSx0LnNldChlLHIpLHIrZS5sZW5ndGh9dmFyIE9TPVsiZXZlbnQiXSxTUz00OGUzLEVTPWZ1bmN0aW9uKCl7cmV0dXJuIEFnKChmdW5jdGlvbiB0KGUpe3ZhciByO3hnKHRoaXMsdCksUGcodGhpcywiY2FjaGVNYW5hZ2VyTWFwIixuZXcgRXcpLFBnKHRoaXMsImR1bXBNYXAiLHZvaWQgMCksUGcodGhpcywiZHVtcEhlYWQiLDApLFBnKHRoaXMsImR1bXBMZW5ndGgiLDApLFBnKHRoaXMsImNhY2hlTGVuZ3RoIiwwKSxQZyh0aGlzLCJvdmVybG9hZFRocmVzaG9sZCIsdm9pZCAwKSxQZyh0aGlzLCJpc09uIix2b2lkIDApLFBnKHRoaXMsImd1bHBVcmwiLHZvaWQgMCksUGcodGhpcywid2FzbVVybCIsdm9pZCAwKSxQZyh0aGlzLCJ0eXBlNU1vZGVsVXJsIix2b2lkIDApLFBnKHRoaXMsInR5cGU2TW9kZWxVcmwiLHZvaWQgMCksUGcodGhpcywiYW5zTGV2ZWwiLHZvaWQgMCksUGcodGhpcywiaXNFbmhhbmNlTW9kZSIsdm9pZCAwKSxQZyh0aGlzLCJhaW5yVHlwZSIsdm9pZCAwKSxQZyh0aGlzLCJpc01vZHVsZVJlYWR5IiwhMSksUGcodGhpcywiaXNFbmdpbmVSZWFkeSIsITEpLFBnKHRoaXMsImN1cnJlbnRDaGFubmVsIix2b2lkIDApLFBnKHRoaXMsImN1cnJlbnRTYW1wbGVSYXRlIix2b2lkIDApLFBnKHRoaXMsIkFJTlIiLHZvaWQgMCksUGcodGhpcywibnJFbmdpbmVMaXN0IixbXSk7dmFyIG49ZS5lbmFibGVDYWNoZSxvPWUuY2FjaGVUaW1lLGk9ZS5vdmVybG9hZFRocmVzaG9sZCxhPWUuaXNPbix1PWUudXJscyxjPWUuYW5zTGV2ZWwscz1lLmlzRW5oYW5jZU1vZGUsZj1lLmFpbnJUeXBlLGw9dS5ndWxwVXJsLGg9dS53YXNtVXJsLHA9dS50eXBlNU1vZGVsVXJsLHY9dS50eXBlNk1vZGVsVXJsO24mJih0aGlzLmNhY2hlTGVuZ3RoPW8qU1MpLHRoaXMub3ZlcmxvYWRUaHJlc2hvbGQ9aSx0aGlzLmlzT249YSx0aGlzLmd1bHBVcmw9bCx0aGlzLndhc21Vcmw9aCx0aGlzLnR5cGU1TW9kZWxVcmw9cCx0aGlzLnR5cGU2TW9kZWxVcmw9dix0aGlzLmFuc0xldmVsPWMsdGhpcy5pc0VuaGFuY2VNb2RlPXMsdGhpcy5haW5yVHlwZT1mLHNlbGYuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsencocj10aGlzLmhhbmRsZU1lc3NhZ2UpLmNhbGwocix0aGlzKSksdGhpcy5pbml0V29ya2VyKCl9KSxbe2tleToiaW5pdFdvcmtlciIsdmFsdWU6KG49VGcoU2coKS5tYXJrKChmdW5jdGlvbiB0KCl7dmFyIGUscixuLG89dGhpcztyZXR1cm4gU2coKS53cmFwKChmdW5jdGlvbih0KXtmb3IoOzspc3dpdGNoKHQucHJldj10Lm5leHQpe2Nhc2UgMDpyZXR1cm4gZT10aGlzLmd1bHBVcmwscj10aGlzLndhc21VcmwsdC5wcmV2PTEsdC5uZXh0PTQsaW1wb3J0KGUpO2Nhc2UgNDpyZXR1cm4gbj10LnNlbnQuZGVmYXVsdCx0Lm5leHQ9NyxuZXcgQncoKGZ1bmN0aW9uKHQpe28uQUlOUj17d2FzbUJpbmFyeUZpbGU6cixvblJ1bnRpbWVJbml0aWFsaXplZDpmdW5jdGlvbigpe3QoKX19LG4oby5BSU5SKX0pKTtjYXNlIDc6dGhpcy5pc01vZHVsZVJlYWR5PSEwLHQubmV4dD0xNDticmVhaztjYXNlIDEwOnQucHJldj0xMCx0LnQwPXQuY2F0Y2goMSksVFMoImVycm9yIiwiaW5pdFdvcmtlciBlcnJvciAiLmNvbmNhdCh0LnQwKSksdGhpcy5pc01vZHVsZVJlYWR5PSExO2Nhc2UgMTQ6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0LHRoaXMsW1sxLDEwXV0pfSkpKSxmdW5jdGlvbigpe3JldHVybiBuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJpbml0RW5naW5lIix2YWx1ZToocj1UZyhTZygpLm1hcmsoKGZ1bmN0aW9uIHQoZSxyKXt2YXIgbixvLGksYSx1LGMscyxmO3JldHVybiBTZygpLndyYXAoKGZ1bmN0aW9uKHQpe2Zvcig7Oylzd2l0Y2godC5wcmV2PXQubmV4dCl7Y2FzZSAwOmlmKHRoaXMuQUlOUil7dC5uZXh0PTM7YnJlYWt9cmV0dXJuIFRTKCJlcnJvciIsIkFJTlIgbW9kdWxlIG5vdCByZWFkeSIpLHQuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDM6bz10aGlzLnR5cGU2TW9kZWxVcmwsaT10aGlzLnR5cGU1TW9kZWxVcmwsYT10aGlzLmFuc0xldmVsLHU9dGhpcy5pc0VuaGFuY2VNb2RlLGM9dGhpcy5haW5yVHlwZSxUUygiaW5mbyIsS3cobj0iaW50ZXJBdWRpb05yIHNhbXBsZVJhdGU6ICIuY29uY2F0KGUsIiwgY2hhbm5lbDogIikpLmNhbGwobixyKSk7Y2FzZSA1OmlmKCFyLS0pe3QubmV4dD0yMjticmVha31pZihzPW5ldyB0aGlzLkFJTlIuQXVkaW9OckVuZ2luZShlLDEsNiksZj0iIiw1IT09Yyl7dC5uZXh0PTE0O2JyZWFrfXJldHVybiB0Lm5leHQ9MTEseFMoaSk7Y2FzZSAxMTpmPXQuc2VudCx0Lm5leHQ9MTg7YnJlYWs7Y2FzZSAxNDppZig2IT09Yyl7dC5uZXh0PTE4O2JyZWFrfXJldHVybiB0Lm5leHQ9MTcseFMobyk7Y2FzZSAxNzpmPXQuc2VudDtjYXNlIDE4OnMuaW5pdEF1ZGlvTnIoZixjLHUsYSksdGhpcy5uckVuZ2luZUxpc3QucHVzaChzKSx0Lm5leHQ9NTticmVhaztjYXNlIDIyOmNhc2UiZW5kIjpyZXR1cm4gdC5zdG9wKCl9fSksdCx0aGlzKX0pKSksZnVuY3Rpb24odCxlKXtyZXR1cm4gci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToic2V0TW9kZSIsdmFsdWU6KGU9VGcoU2coKS5tYXJrKChmdW5jdGlvbiB0KGUscixuKXt2YXIgbyxpLGEsdSxjLHM7cmV0dXJuIFNnKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYodGhpcy5hbnNMZXZlbD1lLHRoaXMuaXNFbmhhbmNlTW9kZT1yLHRoaXMuYWluclR5cGU9bix1PXRoaXMudHlwZTVNb2RlbFVybCxjPXRoaXMudHlwZTZNb2RlbFVybCxUUygiaW5mbyIsS3cobz1LdyhpPSJzZXRNb2RlIGFuc0xldmVsOiAiLmNvbmNhdChlLCIsIGlzRW5oYW5jZU1vZGU6ICIpKS5jYWxsKGksciwiLCBhaW5yVHlwZTogIikpLmNhbGwobyxuKSkscz0iIiw1IT09bil7dC5uZXh0PTEyO2JyZWFrfXJldHVybiB0Lm5leHQ9OSx4Uyh1KTtjYXNlIDk6cz10LnNlbnQsdC5uZXh0PTE2O2JyZWFrO2Nhc2UgMTI6aWYoNiE9PW4pe3QubmV4dD0xNjticmVha31yZXR1cm4gdC5uZXh0PTE1LHhTKGMpO2Nhc2UgMTU6cz10LnNlbnQ7Y2FzZSAxNjpyZXR1cm4gdC5uZXh0PTE4LEJ3LmFsbCgkdyhhPXRoaXMubnJFbmdpbmVMaXN0KS5jYWxsKGEsKGZ1bmN0aW9uKHQpe3JldHVybiB0LmVuZ2luZVNldENvbmZpZyhzLG4scixlKX0pKSk7Y2FzZSAxODpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyl9KSkpLGZ1bmN0aW9uKHQscixuKXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiZHVtcCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU7aWYoISh0aGlzLmNhY2hlTGVuZ3RoPD0wKSl7dmFyIHI9dCpTUyxuPW5ldyBFdyxvPTA7UXcoZT10aGlzLmNhY2hlTWFuYWdlck1hcCkuY2FsbChlLChmdW5jdGlvbih0LGUpe3ZhciBpPXQuZ2V0Q2FjaGUoKSxhPW5ldyBGbG9hdDMyQXJyYXkocik7bz13UyhhLGkpLG4uc2V0KGUsYSl9KSksdGhpcy5kdW1wTWFwPW4sdGhpcy5kdW1wSGVhZD1vLHRoaXMuZHVtcExlbmd0aD1yLHRoaXMuY2hlY2tGb3JEdW1wKG4scixvKX19fSx7a2V5OiJ0cmFuc2Zvcm0iLHZhbHVlOih0PVRnKFNnKCkubWFyaygoZnVuY3Rpb24gdChlLHIpe3ZhciBuLG8saSxhLHUsYyxzLGYsbCxoLHAsdixkLHksZyxtLGIsdyxPLFMsRSxULHgsaixNLGs7cmV0dXJuIFNnKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6aWYoaT10aGlzLmlzT24sYT10aGlzLmlzRW5naW5lUmVhZHksdT10aGlzLmlzTW9kdWxlUmVhZHksYz10aGlzLmN1cnJlbnRTYW1wbGVSYXRlLHM9dGhpcy5jdXJyZW50Q2hhbm5lbCxmPXRoaXMub3ZlcmxvYWRUaHJlc2hvbGQsbD10aGlzLm5yRW5naW5lTGlzdCxoPXRoaXMuY2FjaGVMZW5ndGgscD10aGlzLmR1bXBNYXAsdj10aGlzLmR1bXBIZWFkLGQ9dGhpcy5kdW1wTGVuZ3RoLHk9ZS5mb3JtYXQsZz1lLm51bWJlck9mQ2hhbm5lbHMsbT1lLm51bWJlck9mRnJhbWVzLGI9ZS5zYW1wbGVSYXRlLHc9ZS50aW1lc3RhbXAsaSl7dC5uZXh0PTU7YnJlYWt9cmV0dXJuIHIuZW5xdWV1ZShlKSx0LmFicnVwdCgicmV0dXJuIik7Y2FzZSA1OmlmKHUpe3QubmV4dD03O2JyZWFrfXJldHVybiB0LmFicnVwdCgicmV0dXJuIik7Y2FzZSA3OmlmKE89YiE9PWN8fGchPT1zLGI9PT1TUyl7dC5uZXh0PTEzO2JyZWFrfXJldHVybiBUUygiZXJyb3IiLCJVbnN1cHBvcnRlZCBzYW1wbGVSYXRlOiAiLmNvbmNhdChiLCIsIHNpbGVudCB0dXJuIG9mZiIpKSx0aGlzLmlzT249ITEsdGhpcy5lbWl0KCJvblVuc3VwcG9ydGVkIix7ZXZlbnQ6Im9uVW5zdXBwb3J0ZWQiLG1lc3NhZ2U6IlVuc3VwcG9ydGVkIHNhbXBsZVJhdGUifSksdC5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMTM6aWYoYSYmIU8pe3QubmV4dD0yNjticmVha31yZXR1cm4gdC5wcmV2PTE0LHRoaXMuaXNFbmdpbmVSZWFkeT0hMCx0aGlzLmN1cnJlbnRDaGFubmVsPWcsdGhpcy5jdXJyZW50U2FtcGxlUmF0ZT1iLHQubmV4dD0yMCx0aGlzLmluaXRFbmdpbmUoYixnKTtjYXNlIDIwOnQubmV4dD0yNjticmVhaztjYXNlIDIyOnJldHVybiB0LnByZXY9MjIsdC50MD10LmNhdGNoKDE0KSxUUygiZXJyb3IiLCJpbml0RW5naW5lIGZhaWxlZCwgZXJyb3I6ICIuY29uY2F0KHQudDAsIiAiKSksdC5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMjY6aWYodm9pZCAwIT09KFM9TVMoeSkpKXt0Lm5leHQ9MzA7YnJlYWt9cmV0dXJuIFRTKCJlcnJvciIsIlVua25vd24gZm9ybWF0OiAiLmNvbmNhdCh5KSksdC5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMzA6RT1wZXJmb3JtYW5jZS5ub3coKSxUPSR3KG49Y08obz1uZXcgQXJyYXkoZykpLmNhbGwobywwKSkuY2FsbChuLChmdW5jdGlvbigpe3JldHVybiBuZXcgRmxvYXQzMkFycmF5KG0pfSkpLFF3KFQpLmNhbGwoVCwoZnVuY3Rpb24odCxyKXtlLmNvcHlUbyh0LHtwbGFuZUluZGV4OnIsZm9ybWF0Onl9KX0pKSx4PVtdLFF3KFQpLmNhbGwoVCwoZnVuY3Rpb24odCxlKXt2YXIgcj1sW2VdO3IuZ2V0SW5wdXREYXRhQnVmZmVyKCkuc2V0KHQpO3ZhciBuPXIucHJvY2Vzc0ZyYW1lKFMsMSk7eC5wdXNoKG4pfSkpLGg+MCYmKHRoaXMuY2FjaGUoVCwiaW5wdXQiKSx0aGlzLmNhY2hlKHgsIm91dHB1dCIpLHAmJih0aGlzLmNhY2hlVG9EdW1wKFQscCx2LCJpbnB1dCIpLGo9dGhpcy5jYWNoZVRvRHVtcCh4LHAsdiwib3V0cHV0IiksdGhpcy5jaGVja0ZvckR1bXAocCxkLGopKSksTT1uZXcgRmxvYXQzMkFycmF5KG0qZyksUXcoeCkuY2FsbCh4LChmdW5jdGlvbih0LGUpe00uc2V0KHQsZSptKX0pKSxyLmVucXVldWUobmV3IEF1ZGlvRGF0YSh7Zm9ybWF0Onksc2FtcGxlUmF0ZTpiLG51bWJlck9mRnJhbWVzOm0sbnVtYmVyT2ZDaGFubmVsczpnLHRpbWVzdGFtcDp3LGRhdGE6TX0pKSwoaz1wZXJmb3JtYW5jZS5ub3coKSktRT5mJiZ0aGlzLmVtaXQoIm9uT3ZlcmxvYWQiLHtldmVudDoib25PdmVybG9hZCIsZWxhcHNlZFRpbWU6ay1FfSk7Y2FzZSA0MTpjYXNlImVuZCI6cmV0dXJuIHQuc3RvcCgpfX0pLHQsdGhpcyxbWzE0LDIyXV0pfSkpKSxmdW5jdGlvbihlLHIpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJnZXRDYWNoZU1hbmFnZXIiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY2FjaGVNYW5hZ2VyTWFwLmdldCh0KTtyZXR1cm4gZXx8KGU9bmV3IGJTKHRoaXMuY2FjaGVMZW5ndGgpLHRoaXMuY2FjaGVNYW5hZ2VyTWFwLnNldCh0LGUpKSxlfX0se2tleToiY2FjaGUiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcztRdyh0KS5jYWxsKHQsKGZ1bmN0aW9uKHQsbil7dmFyIG8saT1LdyhvPSIiLmNvbmNhdChlLCItIikpLmNhbGwobyxuKTtyLmdldENhY2hlTWFuYWdlcihpKS5jYWNoZSh0KX0pKX19LHtrZXk6ImNhY2hlVG9EdW1wIix2YWx1ZTpmdW5jdGlvbih0LGUscixuKXt2YXIgbz0wO3JldHVybiBRdyh0KS5jYWxsKHQsKGZ1bmN0aW9uKHQsaSl7dmFyIGEsdT1LdyhhPSIiLmNvbmNhdChuLCItIikpLmNhbGwoYSxpKSxjPWUuZ2V0KHUpO2MmJihvPXdTKGMsdCxyKSl9KSksb319LHtrZXk6ImNoZWNrRm9yRHVtcCIsdmFsdWU6ZnVuY3Rpb24odCxlLHIpe2lmKHQmJnI+PWUpe3ZhciBuLG89bE8odCksaT0kdyhuPWpPKF9PKHQpLmNhbGwodCkpKS5jYWxsKG4sKGZ1bmN0aW9uKHQpe3JldHVybiB0LmJ1ZmZlcn0pKTt0aGlzLmVtaXQoIm9uRHVtcCIse2V2ZW50OiJvbkR1bXAiLGR1bXBNYXA6b30saSksdGhpcy5kdW1wTWFwPXZvaWQgMH10aGlzLmR1bXBIZWFkPXJ9fSx7a2V5OiJlbWl0Iix2YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpbXTtzZWxmLnBvc3RNZXNzYWdlKHt0eXBlOnQsZGF0YTplfSx7dHJhbnNmZXI6cn0pfX0se2tleToiaGFuZGxlTWVzc2FnZSIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUscj10LmRhdGEsbj1yLmV2ZW50LG89dGMocixPUyk7aWYoVFMoImluZm8iLEt3KGU9IiIuY29uY2F0KG4sIiAiKSkuY2FsbChlLG1TKG8pKSksImNyZWF0ZVByb2Nlc3MiPT09bil7dmFyIGksYT1vLnNvdXJjZSx1PW8uc2luayxjPW5ldyBUcmFuc2Zvcm1TdHJlYW0oe3RyYW5zZm9ybTp6dyhpPXRoaXMudHJhbnNmb3JtKS5jYWxsKGksdGhpcyl9KTthLnBpcGVUaHJvdWdoKGMpLnBpcGVUbyh1KX1lbHNlIGlmKCJzd2l0Y2hPbiI9PT1uKXt2YXIgcz1vLmlzT247dGhpcy5pc09uPXN9ZWxzZSBpZigic2V0TW9kZSI9PT1uKXt2YXIgZj1vLmFuc0xldmVsLGw9by5pc0VuaGFuY2VNb2RlLGg9by5haW5yVHlwZTt0aGlzLnNldE1vZGUoZixsLGgpfWVsc2UgaWYoImR1bXAiPT09bil7dmFyIHA9by50b3RhbFRpbWU7dGhpcy5kdW1wKHApfX19XSk7dmFyIHQsZSxyLG59KCk7ZnVuY3Rpb24gVFModCxlKXtzZWxmLnBvc3RNZXNzYWdlKHt0eXBlOiJsb2ciLGRhdGE6e3R5cGU6dCxtZXNzYWdlOmV9fSl9ZnVuY3Rpb24geFModCl7cmV0dXJuIGpTLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBqUygpe3JldHVybihqUz1UZyhTZygpLm1hcmsoKGZ1bmN0aW9uIHQoZSl7dmFyIHI7cmV0dXJuIFNnKCkud3JhcCgoZnVuY3Rpb24odCl7Zm9yKDs7KXN3aXRjaCh0LnByZXY9dC5uZXh0KXtjYXNlIDA6cmV0dXJuIHQubmV4dD0yLGZldGNoKGUpO2Nhc2UgMjpyZXR1cm4gcj10LnNlbnQsdC5uZXh0PTUsci5hcnJheUJ1ZmZlcigpO2Nhc2UgNTpyZXR1cm4gdC5hYnJ1cHQoInJldHVybiIsdC5zZW50KTtjYXNlIDY6Y2FzZSJlbmQiOnJldHVybiB0LnN0b3AoKX19KSx0KX0pKSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBNUyh0KXtyZXR1cm4iZjMyLXBsYW5hciI9PT10PzA6InMzMi1wbGFuYXIiPT09dD8xOiJzMTYtcGxhbmFyIj09PXQ/MjoidTgtcGxhbmFyIj09PXQ/Mzp2b2lkIDB9c2VsZi5vbm1lc3NhZ2U9ZnVuY3Rpb24odCl7dmFyIGU9dC5kYXRhO2lmKCJpbml0Ij09PWUuZXZlbnQpe3ZhciByPWUuY29uZmlnO25ldyBFUyhyKX19fSgpOwo=",IZ=typeof window<"u"&&window.Blob&&new Blob([atob(Hf)],{type:"text/javascript;charset=utf-8"});function OzA(){var A;try{if(!(A=IZ&&(AZ||window.webkitURL).createObjectURL(IZ)))throw"";return new Worker(A)}catch{return new Worker("data:application/javascript;base64,"+Hf)}finally{var I;!(typeof window<"u"&&xzA(I=navigator.userAgent).call(I,"Trident/")>0)&&A&&(AZ||window.webkitlRL).revokeObjectURL(A)}}var qzA=uj,gZ=SA(qzA),_zA=sj,$zA=SA(_zA),AMA=Cf,CZ=SA(AMA),xf={exports:{}};(function(A){var I=Object.prototype.hasOwnProperty,g="~";function C(){}function Q(e,o,t){this.fn=e,this.context=o,this.once=t||!1}function B(e,o,t,s,v){if(typeof t!="function")throw new TypeError("The listener must be a function");var r=new Q(t,s||e,v),n=g?g+o:o;return e._events[n]?e._events[n].fn?e._events[n]=[e._events[n],r]:e._events[n].push(r):(e._events[n]=r,e._eventsCount++),e}function E(e,o){--e._eventsCount==0?e._events=new C:delete e._events[o]}function i(){this._events=new C,this._eventsCount=0}gZ&&(C.prototype=gZ(null),new C().__proto__||(g=!1)),i.prototype.eventNames=function(){var e,o,t=[];if(this._eventsCount===0)return t;for(o in e=this._events)I.call(e,o)&&t.push(g?$zA(o).call(o,1):o);return CZ?bC(t).call(t,CZ(e)):t},i.prototype.listeners=function(e){var o=g?g+e:e,t=this._events[o];if(!t)return[];if(t.fn)return[t.fn];for(var s=0,v=t.length,r=new Array(v);s")}}]);var I}(),Of=function(A){return A[A.CAPTURE=0]="CAPTURE",A[A.PRE_PROCESSING=1]="PRE_PROCESSING",A[A.ENCODE=2]="ENCODE",A[A.TRANSFER=3]="TRANSFER",A[A.POST_PROCESSING=4]="POST_PROCESSING",A[A.DECODE=5]="DECODE",A[A.RENDERING=6]="RENDERING",A}(Of||{}),jr=function(A){return A[A.STREAM_INDEX_MAIN=0]="STREAM_INDEX_MAIN",A[A.STREAM_INDEX_SCREEN=1]="STREAM_INDEX_SCREEN",A}(jr||{}),qf=function(A){return A[A.EXTERNAL=0]="EXTERNAL",A[A.INTERNAL=1]="INTERNAL",A}(qf||{});function QMA(A,I,g){return I=mo(I),dL(A,Ed()?IL(I,g||[],mo(A).constructor):I.apply(A,g))}var BMA=function(){function A(){var I,g;nL(this,A);for(var C=arguments.length,Q=new Array(C),B=0;B=0;E--)(Q=A[E])&&(B=Q(I,g,B)||B);return B&&vMA(I,g,B),B},aMA={overloadThreshold:20,enableCache:!1,cacheTime:30,dumpTime:90,ansMode:vs.AUTO,resample:!0,urls:{gulpUrl:EMA,wasmUrl:iMA,type5ModelUrl:eMA,type6ModelUrl:oMA}},wn=Lg(Lg(Lg(Lg({},vs.AUTO,{ansLevel:3,isEnhanceMode:!1,ainrType:6}),vs.LOW,{ansLevel:3,isEnhanceMode:!1,ainrType:0}),vs.MEDIUM,{ansLevel:3,isEnhanceMode:!0,ainrType:0}),vs.HIGH,{ansLevel:3,isEnhanceMode:!1,ainrType:5}),Ne=function(){function A(B){var E,i;return nL(this,A),Lg(i=sMA(this,A),"name","RTCAIAnsExtension"),Lg(i,"version","4.66.5"),Lg(i,"_config",void 0),Lg(i,"_workerMap",new Db),Lg(i,"_enableMap",new Db),Lg(i,"_context",void 0),Lg(i,"_contextNodes",new Db),i._config=ut(ut({},aMA),B),i._enableMap.set(bC(E="".concat(jr.STREAM_INDEX_MAIN,"-")).call(E,pe.AUDIO_SOURCE_TYPE_INTERNAL),!0),i._config.resample&&typeof AudioContext<"u"&&(i._context=new AudioContext({sampleRate:48e3})),i}return hL(A,BMA),lL(A,[{key:"applyConstraints",value:function(B,E){}},{key:"init",value:(Q=Wr(sB().mark(function B(E){return sB().wrap(function(i){for(;;)switch(i.prev=i.next){case 0:this._config=ut(ut({},this._config),E),this._initWorker(jr.STREAM_INDEX_MAIN,pe.AUDIO_SOURCE_TYPE_INTERNAL);case 2:case"end":return i.stop()}},B,this)})),function(B){return Q.apply(this,arguments)})},{key:"effect",value:(C=Wr(sB().mark(function B(E,i){var e,o,t,s,v,r,n,a,c,d,l,h,D;return sB().wrap(function(u){for(;;)switch(u.prev=u.next){case 0:if(e=i||E.mediaTrack,o=E.mediaType,t=E.sourceType,s=E.streamIndex,t!==void 0&&s!==void 0){u.next=5;break}return(v=this.logger)===null||v===void 0||v.warn(bC(r="[AINR] track sourceType or streamIndex is undefined, sourceType: ".concat(t,", streamIndex: ")).call(r,s)),u.abrupt("return",e);case 5:if(o!=="audio"){u.next=16;break}return this._destroyWorker(s),n=this._initWorker(s,t===qf.INTERNAL?pe.AUDIO_SOURCE_TYPE_INTERNAL:pe.AUDIO_SOURCE_TYPE_EXTERNAL),a=n.worker,c=E.mediaTrack,this._config.resample&&(c=this.resample(s,c)),d=new MediaStreamTrackProcessor(c),l=new MediaStreamTrackGenerator("audio"),h=d.readable,D=l.writable,a.postMessage({event:"createProcess",source:h,sink:D},[h,D]),u.abrupt("return",l||e);case 16:return u.abrupt("return",e);case 17:case"end":return u.stop()}},B,this)})),function(B,E){return C.apply(this,arguments)})},{key:"enable",value:function(){var B,E,i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{streamIndex:jr.STREAM_INDEX_MAIN,sourceType:pe.AUDIO_SOURCE_TYPE_INTERNAL},e=i.streamIndex,o=i.sourceType;this._enableMap.set(bC(B="".concat(e,"-")).call(B,o),!0);var t=(E=this._workerMap.get(e))!==null&&E!==void 0?E:this._initWorker(e,o),s=t.worker;t.sourceType===o&&s.postMessage({event:"switchOn",isOn:!0})}},{key:"disable",value:function(){var B,E,i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{streamIndex:jr.STREAM_INDEX_MAIN,sourceType:pe.AUDIO_SOURCE_TYPE_INTERNAL},e=i.streamIndex,o=i.sourceType;this._enableMap.set(bC(B="".concat(e,"-")).call(B,o),!1);var t=(E=this._workerMap.get(e))!==null&&E!==void 0?E:{},s=t.worker,v=t.sourceType;s&&v===o&&s.postMessage({event:"switchOn",isOn:!1})}},{key:"isSupported",value:function(){return cMA()}},{key:"isOpen",value:function(B){var E,i=B.streamIndex,e=B.sourceType;return this._enableMap.get(bC(E="".concat(i,"-")).call(E,e))||!1}},{key:"setAnsMode",value:(g=Wr(sB().mark(function B(E){var i,e,o,t,s;return sB().wrap(function(v){for(;;)switch(v.prev=v.next){case 0:this._config.ansMode=E,e=wn[E],o=e.ansLevel,t=e.isEnhanceMode,s=e.ainrType,Vr(i=this._workerMap).call(i,function(r){r.worker.postMessage({event:"setMode",ansLevel:o,isEnhanceMode:t,ainrType:s})});case 3:case"end":return v.stop()}},B,this)})),function(B){return g.apply(this,arguments)})},{key:"dump",value:(I=Wr(sB().mark(function B(E){var i,e,o=this;return sB().wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(e=(i=this._workerMap.get(E))===null||i===void 0?void 0:i.worker){t.next=3;break}throw new Error("worker not found");case 3:return e.postMessage({event:"dump",totalTime:this._config.dumpTime}),t.abrupt("return",new GWA(function(s){o.once("onDump",function(v){var r,n,a,c=v.dumpMap,d=[],l=[];Vr(r=LWA(c)).call(r,function(b){var y=c[b],S=KUA(b.split("-"),2),L=S[0];S[1],L==="input"?d.push(y):L==="output"&&l.push(y)});var h=bC(n="".concat(fr.BEFORE_PROCESS,"_")).call(n,E,"_",48e3,".wav"),D=bC(a="".concat(fr.AFTER_PROCESS,"_")).call(a,E,"_",48e3,".wav"),u=QZ(d,48e3,h),w=QZ(l,48e3,D);s(Lg(Lg({},fr.BEFORE_PROCESS,{file:u,name:h}),fr.AFTER_PROCESS,{file:w,name:D}))})}));case 5:case"end":return t.stop()}},B,this)})),function(B){return I.apply(this,arguments)})},{key:"_initWorker",value:function(B,E){var i,e,o=ut(ut({},this._config),{},{isOn:this._enableMap.get(bC(i="".concat(B,"-")).call(i,E))||!1,ansLevel:wn[this._config.ansMode].ansLevel,isEnhanceMode:wn[this._config.ansMode].isEnhanceMode,ainrType:wn[this._config.ansMode].ainrType}),t=new OzA;return t.postMessage({event:"init",config:o}),t.addEventListener("message",TWA(e=this._handleWorkerMessage).call(e,this)),this._workerMap.set(B,{worker:t,sourceType:E}),{worker:t,sourceType:E}}},{key:"_handleWorkerMessage",value:function(B){var E,i,e,o,t=B.data,s=t.type,v=t.data;if(s!=="log")if(s!=="onDump"){if((E=this.logger)===null||E===void 0||E.info("_handleWorkerMessage",bC(i="type ".concat(s,", data ")).call(i,v)),s==="onOverload")this.emit(Fm.onOverload,{elapsedTime:v.elapsedTime});else{if(s!=="onUnsupported")return;this.emit(Fm.onUnsupported,{message:v.message})}(e=this.monitor)===null||e===void 0||e.report("rtc_sdk_callback",{sdk_callback_name:bC(o="".concat(this.name,".")).call(o,s),error_code:0,message:mm(v||{})})}else this.emit("onDump",v);else{var r,n=v.type,a=v.message;(r=this.logger)===null||r===void 0||r[n]("worker",a)}}},{key:"_destroyWorker",value:function(B){var E,i=(E=this._workerMap.get(B))===null||E===void 0?void 0:E.worker;i&&(i.terminate(),this._workerMap.delete(B))}},{key:"resample",value:function(B,E){var i=this._context;if(!i)return E;var e=E.id,o=this._contextNodes.get(B);o&&o.id!==e&&(o.source.disconnect(),o.dest.disconnect());var t=new MediaStreamAudioSourceNode(i,{mediaStream:new MediaStream([E])}),s=new MediaStreamAudioDestinationNode(i);return t.connect(s),this._contextNodes.set(B,{id:e,source:t,dest:s}),s.stream.getAudioTracks()[0]}},{key:"destroy",value:function(){var B,E,i,e=this;Vr(B=this._workerMap).call(B,function(o,t){e._destroyWorker(t)}),Vr(E=this._contextNodes).call(E,function(o){var t=o.source,s=o.dest;t.disconnect(),s.disconnect()}),this._workerMap.clear(),this._contextNodes.clear(),(i=this._context)===null||i===void 0||i.close()}}]);var I,g,C,Q}();function PMA(){var A,I,g={ie:null,firefox:null,chrome:null,opera:null,safari:null,edge:null},C=navigator.userAgent.toLowerCase();for(var Q in(A=C.match(/msie ([\d.]+)/))?g.ie=A[1]:(A=C.match(/firefox\/([\d.]+)/))?g.firefox=A[1]:(A=C.match(/edg\/([\d.]+)/))?g.edge=A[1]:(A=C.match(/chrome\/([\d.]+)/))?g.chrome=A[1]:(A=C.match(/opera.([\d.]+)/))?g.opera=A[1]:(A=C.match(/version\/([\d.]+).*safari/))&&(g.safari=A[1]),g)g[Q]!==null&&(A=Q,I=g[Q].split(".")[0]);return{browser:A,version:I}}function cMA(){var A=PMA(),I=A.browser,g=A.version,C={chrome:94,edge:94,opera:80};return C[I]&&g>=C[I]&&!!window.MediaStreamTrackProcessor&&!!window.MediaStreamTrackGenerator&&!!window.TransformStream}Rt([Gt],Ne.prototype,"init"),Rt([Gt],Ne.prototype,"enable"),Rt([Gt],Ne.prototype,"disable"),Rt([Gt],Ne.prototype,"isSupported"),Rt([Gt],Ne.prototype,"setAnsMode"),Rt([Gt],Ne.prototype,"dump");var eo={};eo.d=function(A,I){for(var g in I)eo.o(I,g)&&!eo.o(A,g)&&Object.defineProperty(A,g,{enumerable:!0,get:I[g]})};eo.o=function(A,I){return Object.prototype.hasOwnProperty.call(A,I)};eo.r=function(A){typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(A,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(A,"__esModule",{value:!0})};var _f={};eo.r(_f);eo.d(_f,{checkDevicePermission:()=>dMA,checkPermission:()=>lMA,getAudioDevices:()=>Hr,isScreenShareDevice:()=>kL,isScreenShareSupported:()=>$f,sleep:()=>nMA});const nMA=A=>{if(A<0)throw new Error("Sleep duration must be non-negative");return new Promise(I=>setTimeout(I,A))},lMA=async function(){let{audio:A=!0,video:I=!1}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};try{return(await uI.enableDevices({audio:A,video:I})).audio}catch(g){return console.error("Failed to check device permissions:",g),!1}},dMA=async function(){let A=arguments.length>0&&arguments[0]!==void 0&&arguments[0];return await uI.enableDevices({audio:!0,video:A})},Hr=async function(){let{video:A=!1}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},I=[];return A?(I=await uI.enumerateDevices(),$f()&&I.push({deviceId:"screenShare",kind:"videoinput",label:"Screen Share",groupId:"screenShare"})):I=await[...await uI.enumerateAudioCaptureDevices(),...await uI.enumerateAudioPlaybackDevices()],I!=null&&I.length?{audioInputs:I.filter(g=>g.deviceId&&g.kind==="audioinput"),audioOutputs:I.filter(g=>g.deviceId&&g.kind==="audiooutput"),videoInputs:I.filter(g=>g.deviceId&&g.kind==="videoinput")}:{audioInputs:[],audioOutputs:[],videoInputs:[]}},kL=A=>A==="screenShare";function $f(){var A,I;return!!(!((I=navigator)===null||I===void 0||(A=I.mediaDevices)===null||A===void 0)&&A.getDisplayMedia)}var A5=function(A){return A.ALL="realtime.event",A.ALL_CLIENT="client.*",A.ALL_SERVER="server.*",A.CONNECTED="client.connected",A.CONNECTING="client.connecting",A.INTERRUPTED="client.interrupted",A.DISCONNECTED="client.disconnected",A.AUDIO_UNMUTED="client.audio.unmuted",A.AUDIO_MUTED="client.audio.muted",A.VIDEO_ON="client.video.on",A.VIDEO_OFF="client.video.off",A.PLAYER_EVENT="client.video.event",A.ERROR="client.error",A.SUPPRESS_STATIONARY_NOISE="client.suppress.stationary.noise",A.SUPPRESS_NON_STATIONARY_NOISE="client.suppress.non.stationary.noise",A.AUDIO_INPUT_DEVICE_CHANGED="client.input.device.changed",A.AUDIO_OUTPUT_DEVICE_CHANGED="client.output.device.changed",A.VIDEO_INPUT_DEVICE_CHANGED="client.video.input.device.changed",A.NETWORK_QUALITY="client.network.quality",A.BOT_JOIN="server.bot.join",A.BOT_LEAVE="server.bot.leave",A.AUDIO_AGENT_SPEECH_STARTED="server.audio.agent.speech_started",A.AUDIO_AGENT_SPEECH_STOPPED="server.audio.agent.speech_stopped",A.SERVER_ERROR="server.error",A.AUDIO_USER_SPEECH_STARTED="server.audio.user.speech_started",A.AUDIO_USER_SPEECH_STOPPED="server.audio.user.speech_stopped",A.SESSION_CREATED="server.session.created",A.SESSION_UPDATE="server.session.update",A}(A5||{});const ZA=A5;var iB=function(A){return A.DEVICE_ACCESS_ERROR="DEVICE_ACCESS_ERROR",A.STREAM_CREATION_ERROR="STREAM_CREATION_ERROR",A.CONNECTION_ERROR="CONNECTION_ERROR",A.DISCONNECTION_ERROR="DISCONNECTION_ERROR",A.INTERRUPT_ERROR="INTERRUPT_ERROR",A.EVENT_HANDLER_ERROR="EVENT_HANDLER_ERROR",A.PERMISSION_DENIED="PERMISSION_DENIED",A.NETWORK_ERROR="NETWORK_ERROR",A.INVALID_STATE="INVALID_STATE",A.CREATE_ROOM_ERROR="CREATE_ROOM_ERROR",A.PARSE_MESSAGE_ERROR="PARSE_MESSAGE_ERROR",A.HANDLER_MESSAGE_ERROR="HANDLER_MESSAGE_ERROR",A}({});class OB extends Error{constructor(I,g,C){super(`[${I}] ${g}`),this.name="RealtimeAPIError",this.code=I,this.error=C}}class I5{clearEventHandlers(){this.eventHandlers={}}on(I,g){return this._log(`on ${I} event`),this.eventHandlers[I]=this.eventHandlers[I]||[],this.eventHandlers[I].push(g),g}off(I,g){this._log(`off ${I} event`);const C=this.eventHandlers[I]||[];if(g){const Q=C.indexOf(g);if(Q===-1){console.warn(`Could not turn off specified event listener for "${I}": not found as a listener`);return}C.splice(Q,1)}else delete this.eventHandlers[I]}_dispatchToHandlers(I,g,C,Q){for(const B of C)if(!Q||I.startsWith(Q))try{B(I,g)}catch{throw new OB(iB.HANDLER_MESSAGE_ERROR,`Failed to handle message: ${I}`)}}dispatch(I,g){(!(arguments.length>2)||arguments[2]===void 0||arguments[2])&&this._log(`dispatch ${I} event`,g);const Q=(this.eventHandlers[I]||[]).slice();this._dispatchToHandlers(I,g,Q);const B=(this.eventHandlers[ZA.ALL]||[]).slice();this._dispatchToHandlers(I,g,B);const E=(this.eventHandlers[ZA.ALL_CLIENT]||[]).slice();this._dispatchToHandlers(I,g,E,"client.");const i=(this.eventHandlers[ZA.ALL_SERVER]||[]).slice();this._dispatchToHandlers(I,g,i,"server.")}_log(I,g){this._debug&&console.log(`[RealtimeClient] ${I}`,g)}constructor(I=!1){this.eventHandlers={},this._debug=I}}class hMA extends I5{bindEngineEvents(){this.engine.on(uI.events.onUserMessageReceived,this.handleMessage),this.engine.on(uI.events.onUserJoined,this.handleUserJoin),this.engine.on(uI.events.onUserLeave,this.handleUserLeave),this.engine.on(uI.events.onError,this.handleEventError),this.engine.on(uI.events.onNetworkQuality,this.handleNetworkQuality),this._isSupportVideo&&this.engine.on(uI.events.onPlayerEvent,this.handlePlayerEvent),this._debug&&(this.engine.on(uI.events.onLocalAudioPropertiesReport,this.handleLocalAudioPropertiesReport),this.engine.on(uI.events.onRemoteAudioPropertiesReport,this.handleRemoteAudioPropertiesReport))}removeEventListener(){this.engine.off(uI.events.onUserMessageReceived,this.handleMessage),this.engine.off(uI.events.onUserJoined,this.handleUserJoin),this.engine.off(uI.events.onUserLeave,this.handleUserLeave),this.engine.off(uI.events.onError,this.handleEventError),this.engine.off(uI.events.onNetworkQuality,this.handleNetworkQuality),this._isSupportVideo&&this.engine.off(uI.events.onPlayerEvent,this.handlePlayerEvent),this._debug&&(this.engine.off(uI.events.onLocalAudioPropertiesReport,this.handleLocalAudioPropertiesReport),this.engine.off(uI.events.onRemoteAudioPropertiesReport,this.handleRemoteAudioPropertiesReport))}_parseMessage(I){try{return JSON.parse(I.message)}catch(g){throw new OB(iB.PARSE_MESSAGE_ERROR,(g==null?void 0:g.message)||"Unknown error")}}handleMessage(I){try{const g=this._parseMessage(I);this.dispatch(`server.${g.event_type}`,g)}catch(g){g instanceof OB?g.code===iB.PARSE_MESSAGE_ERROR?this.dispatch(ZA.ERROR,{message:`Failed to parse message: ${I.message}`,error:g}):g.code===iB.HANDLER_MESSAGE_ERROR&&this.dispatch(ZA.ERROR,{message:`Failed to handle message: ${I.message}`,error:g}):this.dispatch(ZA.ERROR,g)}}handleEventError(I){this.dispatch(ZA.ERROR,I)}handleUserJoin(I){this.joinUserId=I.userInfo.userId,this.dispatch(ZA.BOT_JOIN,I)}handleUserLeave(I){this.dispatch(ZA.BOT_LEAVE,I)}handlePlayerEvent(I){this.dispatch(ZA.PLAYER_EVENT,I)}handleNetworkQuality(I,g){this.dispatch(ZA.NETWORK_QUALITY,{uplinkNetworkQuality:I,downlinkNetworkQuality:g})}async joinRoom(I){const{token:g,roomId:C,uid:Q,audioMutedDefault:B,videoOnDefault:E,isAutoSubscribeAudio:i}=I;try{await this.engine.joinRoom(g,C,{userId:Q},{isAutoPublish:!B,isAutoSubscribeAudio:i,isAutoSubscribeVideo:this._isSupportVideo&&E})}catch(e){if(e instanceof Error)throw new OB(iB.CONNECTION_ERROR,e.message)}}async setAudioInputDevice(I){if((await Hr()).audioInputs.findIndex(C=>C.deviceId===I)===-1)throw new OB(iB.DEVICE_ACCESS_ERROR,`Audio input device not found: ${I}`);this.engine.stopAudioCapture(),await this.engine.startAudioCapture(I)}async setAudioOutputDevice(I){if((await Hr({video:!1})).audioOutputs.findIndex(C=>C.deviceId===I)===-1)throw new OB(iB.DEVICE_ACCESS_ERROR,`Audio output device not found: ${I}`);await this.engine.setAudioPlaybackDevice(I)}async setVideoInputDevice(I){let g=!(arguments.length>1)||arguments[1]===void 0||arguments[1];var C;if((await Hr({video:!0})).videoInputs.findIndex(E=>E.deviceId===I)===-1)throw new OB(iB.DEVICE_ACCESS_ERROR,`Video input device not found: ${I}`);if(await this.changeVideoState(!1),kL(I)){if(this._streamIndex===F.STREAM_INDEX_MAIN&&this.engine.setLocalVideoPlayer(F.STREAM_INDEX_MAIN),g){var B;this.engine.setVideoSourceType(F.STREAM_INDEX_SCREEN,Wg.VIDEO_SOURCE_TYPE_INTERNAL),await this.engine.startScreenCapture((B=this._videoConfig)===null||B===void 0?void 0:B.screenConfig),await this.engine.publishScreen(iA.VIDEO)}this._streamIndex=F.STREAM_INDEX_SCREEN}else this._streamIndex===F.STREAM_INDEX_SCREEN&&this.engine.setLocalVideoPlayer(F.STREAM_INDEX_SCREEN),g&&await this.engine.startVideoCapture(I),this._streamIndex=F.STREAM_INDEX_MAIN;this.engine.setLocalVideoPlayer(this._streamIndex,{renderDom:((C=this._videoConfig)===null||C===void 0?void 0:C.renderDom)||"local-player",userId:this._roomUserId})}async createLocalStream(I,g){this._roomUserId=I;const C=await Hr({video:this._isSupportVideo});if(!C.audioInputs.length)throw new OB(iB.DEVICE_ACCESS_ERROR,"Failed to get audio devices");if(this._isSupportVideo&&!C.videoInputs.length)throw new OB(iB.DEVICE_ACCESS_ERROR,"Failed to get video devices");await this.engine.startAudioCapture(C.audioInputs[0].deviceId),this._isSupportVideo&&this.setVideoInputDevice((g==null?void 0:g.videoInputDeviceId)||C.videoInputs[0].deviceId,g==null?void 0:g.videoOnDefault)}async disconnect(){try{await this.engine.leaveRoom(),this.removeEventListener(),this.clearEventHandlers(),uI.destroyEngine(this.engine)}catch(I){throw this.dispatch(ZA.ERROR,I),I}}async changeAudioState(I){try{I?await this.engine.publishStream(iA.AUDIO):await this.engine.unpublishStream(iA.AUDIO)}catch(g){throw this.dispatch(ZA.ERROR,g),g}}async changeVideoState(I){try{if(I)if(this._streamIndex===F.STREAM_INDEX_MAIN)await this.engine.startVideoCapture();else{var g;this.engine.setVideoSourceType(F.STREAM_INDEX_SCREEN,Wg.VIDEO_SOURCE_TYPE_INTERNAL),await this.engine.startScreenCapture((g=this._videoConfig)===null||g===void 0?void 0:g.screenConfig),await this.engine.publishScreen(iA.VIDEO)}else this._streamIndex===F.STREAM_INDEX_MAIN?await this.engine.stopVideoCapture():(await this.engine.stopScreenCapture(),await this.engine.unpublishScreen(iA.VIDEO))}catch(C){throw this.dispatch(ZA.ERROR,C),C}}async stop(){try{const I=await this.engine.sendUserMessage(this.joinUserId,JSON.stringify({id:"event_1",event_type:"conversation.chat.cancel",data:{}}));this._log(`interrupt ${this.joinUserId} ${I}`)}catch(I){throw this.dispatch(ZA.ERROR,I),I}}async sendMessage(I){try{const g=await this.engine.sendUserMessage(this.joinUserId,JSON.stringify(I));this._log(`sendMessage ${this.joinUserId} ${JSON.stringify(I)} ${g}`)}catch(g){throw this.dispatch(ZA.ERROR,g),g}}enableAudioPropertiesReport(I){this.engine.enableAudioPropertiesReport(I)}handleLocalAudioPropertiesReport(I){var g,C;this._debug&&((C=I[0])===null||C===void 0||(g=C.audioPropertiesInfo)===null||g===void 0?void 0:g.linearVolume)>0&&console.log("handleLocalAudioPropertiesReport",I)}handleRemoteAudioPropertiesReport(I){this._debug&&console.log("handleRemoteAudioPropertiesReport",I)}async enableAudioNoiseReduction(){var I;await((I=this.engine)===null||I===void 0?void 0:I.setAudioCaptureConfig({noiseSuppression:!0,echoCancellation:!0,autoGainControl:!0}))}async initAIAnsExtension(){const I=new Ne;await this.engine.registerExtension(I),this._AIAnsExtension=I}changeAIAnsExtension(I){if(I){var g;(g=this._AIAnsExtension)===null||g===void 0||g.enable()}else{var C;(C=this._AIAnsExtension)===null||C===void 0||C.disable()}}async startAudioPlaybackDeviceTest(){try{await this.engine.startAudioPlaybackDeviceTest("audio-test.wav",200)}catch(I){throw this.dispatch(ZA.ERROR,I),I}}stopAudioPlaybackDeviceTest(){try{this.engine.stopAudioPlaybackDeviceTest()}catch(I){throw this.dispatch(ZA.ERROR,I),I}}getRtcEngine(){return this.engine}constructor(I,g=!1,C=!1,Q=!1,B){super(g),this.joinUserId="",this._AIAnsExtension=null,this._isSupportVideo=!1,C&&uI.setParameter("ICE_CONFIG_REQUEST_URLS",["rtc-test.bytedance.com"]),this.engine=uI.createEngine(I),this.handleMessage=this.handleMessage.bind(this),this.handleUserJoin=this.handleUserJoin.bind(this),this.handleUserLeave=this.handleUserLeave.bind(this),this.handleEventError=this.handleEventError.bind(this),this.handlePlayerEvent=this.handlePlayerEvent.bind(this),this.handleNetworkQuality=this.handleNetworkQuality.bind(this),this.handleLocalAudioPropertiesReport=this.handleLocalAudioPropertiesReport.bind(this),this.handleRemoteAudioPropertiesReport=this.handleRemoteAudioPropertiesReport.bind(this),this._isSupportVideo=Q,this._videoConfig=B}}const DMA="6705332c79516e015e3e5f0c";class SXA extends I5{async connect(){var I;const{botId:g,conversationId:C,voiceId:Q,getRoomInfo:B}=this._config;this.dispatch(ZA.CONNECTING,{});let E;try{if(B)E=await B();else{let t;this._config.videoConfig&&(t=kL(this._config.videoConfig.videoInputDeviceId)?{video_config:{stream_video_type:"screen"}}:{video_config:{stream_video_type:"main"}}),E=await this._api.audio.rooms.create({bot_id:g,conversation_id:C||void 0,voice_id:Q&&Q.length>0?Q:void 0,connector_id:this._config.connectorId,uid:this._config.userId||void 0,workflow_id:this._config.workflowId||void 0,config:t})}}catch(t){throw this.dispatch(ZA.ERROR,t),new OB(iB.CREATE_ROOM_ERROR,t instanceof Error?t.message:"Unknown error",t)}if(this._isTestEnv=DMA===E.app_id,this._client=new hMA(E.app_id,this._config.debug,this._isTestEnv,this._isSupportVideo,this._config.videoConfig),this._client.bindEngineEvents(),this._client.on(ZA.ALL,(t,s)=>{this.dispatch(t,s,!1)}),this._config.suppressStationaryNoise&&(await this._client.enableAudioNoiseReduction(),this.dispatch(ZA.SUPPRESS_STATIONARY_NOISE,{})),this._config.suppressNonStationaryNoise)try{await this._client.initAIAnsExtension(),this._client.changeAIAnsExtension(!0),this.dispatch(ZA.SUPPRESS_NON_STATIONARY_NOISE,{})}catch(t){console.warn("Config suppressNonStationaryNoise is not supported",t)}var i,e,o;await this._client.joinRoom({token:E.token,roomId:E.room_id,uid:E.uid,audioMutedDefault:(i=this._config.audioMutedDefault)!==null&&i!==void 0&&i,videoOnDefault:(e=(I=this._config.videoConfig)===null||I===void 0?void 0:I.videoOnDefault)===null||e===void 0||e,isAutoSubscribeAudio:(o=this._config.isAutoSubscribeAudio)===null||o===void 0||o}),await this._client.createLocalStream(E.uid,this._config.videoConfig),this.isConnected=!0,this.dispatch(ZA.CONNECTED,{roomId:E.room_id,uid:E.uid,token:E.token,appId:E.app_id})}async interrupt(){var I;await((I=this._client)===null||I===void 0?void 0:I.stop()),this.dispatch(ZA.INTERRUPTED,{})}async disconnect(){var I;await((I=this._client)===null||I===void 0?void 0:I.disconnect()),this.isConnected=!1,this._client=null,this.dispatch(ZA.DISCONNECTED,{})}async sendMessage(I){var g;await((g=this._client)===null||g===void 0?void 0:g.sendMessage(I));const C=typeof I.event_type=="string"?I.event_type:"unknown_event";this.dispatch(`client.${C}`,I)}async setAudioEnable(I){var g;await((g=this._client)===null||g===void 0?void 0:g.changeAudioState(I)),I?this.dispatch(ZA.AUDIO_UNMUTED,{}):this.dispatch(ZA.AUDIO_MUTED,{})}async setVideoEnable(I){var g;await((g=this._client)===null||g===void 0?void 0:g.changeVideoState(I)),I?this.dispatch(ZA.VIDEO_ON,{}):this.dispatch(ZA.VIDEO_OFF,{})}enableAudioPropertiesReport(I){if(this._config.debug){var g;return(g=this._client)===null||g===void 0||g.enableAudioPropertiesReport(I),!0}return console.warn("enableAudioPropertiesReport is not supported in non-debug mode"),!1}async startAudioPlaybackDeviceTest(){if(this._config.debug){var I;await((I=this._client)===null||I===void 0?void 0:I.startAudioPlaybackDeviceTest())}else console.warn("startAudioPlaybackDeviceTest is not supported in non-debug mode")}stopAudioPlaybackDeviceTest(){if(this._config.debug){var I;(I=this._client)===null||I===void 0||I.stopAudioPlaybackDeviceTest()}else console.warn("stopAudioPlaybackDeviceTest is not supported in non-debug mode")}async setAudioInputDevice(I){var g;await((g=this._client)===null||g===void 0?void 0:g.setAudioInputDevice(I)),this.dispatch(ZA.AUDIO_INPUT_DEVICE_CHANGED,{deviceId:I})}async setAudioOutputDevice(I){var g;await((g=this._client)===null||g===void 0?void 0:g.setAudioOutputDevice(I)),this.dispatch(ZA.AUDIO_OUTPUT_DEVICE_CHANGED,{deviceId:I})}async setVideoInputDevice(I){var g;await((g=this._client)===null||g===void 0?void 0:g.setVideoInputDevice(I)),this.dispatch(ZA.VIDEO_INPUT_DEVICE_CHANGED,{deviceId:I})}getRtcEngine(){var I;return(I=this._client)===null||I===void 0?void 0:I.getRtcEngine()}constructor(I){super(I.debug),this._client=null,this.isConnected=!1,this._isTestEnv=!1,this._isSupportVideo=!1,this._config=I;var g;const C=(g=this._config.baseURL)!==null&&g!==void 0?g:"https://api.coze.cn";this._config.baseURL=C,this._api=new v6({token:this._config.accessToken,baseURL:C,allowPersonalAccessTokenInBrowser:this._config.allowPersonalAccessTokenInBrowser}),this._isSupportVideo=!!I.videoConfig}}class oo extends Error{constructor(I,g){const C=new.target.prototype;super(`${I}: Status code '${g}'`),this.statusCode=g,this.__proto__=C}}class pL extends Error{constructor(I="A timeout occurred."){const g=new.target.prototype;super(I),this.__proto__=g}}class uB extends Error{constructor(I="An abort occurred."){const g=new.target.prototype;super(I),this.__proto__=g}}class uMA extends Error{constructor(I,g){const C=new.target.prototype;super(I),this.transport=g,this.errorType="UnsupportedTransportError",this.__proto__=C}}class bMA extends Error{constructor(I,g){const C=new.target.prototype;super(I),this.transport=g,this.errorType="DisabledTransportError",this.__proto__=C}}class yMA extends Error{constructor(I,g){const C=new.target.prototype;super(I),this.transport=g,this.errorType="FailedToStartTransportError",this.__proto__=C}}class BZ extends Error{constructor(I){const g=new.target.prototype;super(I),this.errorType="FailedToNegotiateWithServerError",this.__proto__=g}}class wMA extends Error{constructor(I,g){const C=new.target.prototype;super(I),this.innerErrors=g,this.__proto__=C}}class g5{constructor(I,g,C){this.statusCode=I,this.statusText=g,this.content=C}}class od{get(I,g){return this.send({...g,method:"GET",url:I})}post(I,g){return this.send({...g,method:"POST",url:I})}delete(I,g){return this.send({...g,method:"DELETE",url:I})}getCookieString(I){return""}}var M;(function(A){A[A.Trace=0]="Trace",A[A.Debug=1]="Debug",A[A.Information=2]="Information",A[A.Warning=3]="Warning",A[A.Error=4]="Error",A[A.Critical=5]="Critical",A[A.None=6]="None"})(M||(M={}));class CP{constructor(){}log(I,g){}}CP.instance=new CP;const mMA="8.0.7";class Ig{static isRequired(I,g){if(I==null)throw new Error(`The '${g}' argument is required.`)}static isNotEmpty(I,g){if(!I||I.match(/^\s*$/))throw new Error(`The '${g}' argument should not be empty.`)}static isIn(I,g,C){if(!(I in g))throw new Error(`Unknown ${C} value: ${I}.`)}}class SI{static get isBrowser(){return!SI.isNode&&typeof window=="object"&&typeof window.document=="object"}static get isWebWorker(){return!SI.isNode&&typeof self=="object"&&"importScripts"in self}static get isReactNative(){return!SI.isNode&&typeof window=="object"&&typeof window.document>"u"}static get isNode(){return typeof process<"u"&&process.release&&process.release.name==="node"}}function QP(A,I){let g="";return Go(A)?(g=`Binary data of length ${A.byteLength}`,I&&(g+=`. Content: '${GMA(A)}'`)):typeof A=="string"&&(g=`String data of length ${A.length}`,I&&(g+=`. Content: '${A}'`)),g}function GMA(A){const I=new Uint8Array(A);let g="";return I.forEach(C=>{const Q=C<16?"0":"";g+=`0x${Q}${C.toString(16)} `}),g.substr(0,g.length-1)}function Go(A){return A&&typeof ArrayBuffer<"u"&&(A instanceof ArrayBuffer||A.constructor&&A.constructor.name==="ArrayBuffer")}async function C5(A,I,g,C,Q,B){const E={},[i,e]=Av();E[i]=e,A.log(M.Trace,`(${I} transport) sending data. ${QP(Q,B.logMessageContent)}.`);const o=Go(Q)?"arraybuffer":"text",t=await g.post(C,{content:Q,headers:{...E,...B.headers},responseType:o,timeout:B.timeout,withCredentials:B.withCredentials});A.log(M.Trace,`(${I} transport) request complete. Response status: ${t.statusCode}.`)}function RMA(A){return A===void 0?new H9(M.Information):A===null?CP.instance:A.log!==void 0?A:new H9(A)}class LMA{constructor(I,g){this._subject=I,this._observer=g}dispose(){const I=this._subject.observers.indexOf(this._observer);I>-1&&this._subject.observers.splice(I,1),this._subject.observers.length===0&&this._subject.cancelCallback&&this._subject.cancelCallback().catch(g=>{})}}class H9{constructor(I){this._minLevel=I,this.out=console}log(I,g){if(I>=this._minLevel){const C=`[${new Date().toISOString()}] ${M[I]}: ${g}`;switch(I){case M.Critical:case M.Error:this.out.error(C);break;case M.Warning:this.out.warn(C);break;case M.Information:this.out.info(C);break;default:this.out.log(C);break}}}}function Av(){let A="X-SignalR-User-Agent";return SI.isNode&&(A="User-Agent"),[A,SMA(mMA,TMA(),FMA(),UMA())]}function SMA(A,I,g,C){let Q="Microsoft SignalR/";const B=A.split(".");return Q+=`${B[0]}.${B[1]}`,Q+=` (${A}; `,I&&I!==""?Q+=`${I}; `:Q+="Unknown OS; ",Q+=`${g}`,C?Q+=`; ${C}`:Q+="; Unknown Runtime Version",Q+=")",Q}function TMA(){if(SI.isNode)switch(process.platform){case"win32":return"Windows NT";case"darwin":return"macOS";case"linux":return"Linux";default:return process.platform}else return""}function UMA(){if(SI.isNode)return process.versions.node}function FMA(){return SI.isNode?"NodeJS":"Browser"}function jb(A){return A.stack?A.stack:A.message?A.message:`${A}`}function YMA(){if(typeof globalThis<"u")return globalThis;if(typeof self<"u")return self;if(typeof window<"u")return window;if(typeof global<"u")return global;throw new Error("could not find global")}class kMA extends od{constructor(I){if(super(),this._logger=I,typeof fetch>"u"||SI.isNode){const g=typeof __webpack_require__=="function"?__non_webpack_require__:require;this._jar=new(g("tough-cookie")).CookieJar,typeof fetch>"u"?this._fetchType=g("node-fetch"):this._fetchType=fetch,this._fetchType=g("fetch-cookie")(this._fetchType,this._jar)}else this._fetchType=fetch.bind(YMA());if(typeof AbortController>"u"){const g=typeof __webpack_require__=="function"?__non_webpack_require__:require;this._abortControllerType=g("abort-controller")}else this._abortControllerType=AbortController}async send(I){if(I.abortSignal&&I.abortSignal.aborted)throw new uB;if(!I.method)throw new Error("No method defined.");if(!I.url)throw new Error("No url defined.");const g=new this._abortControllerType;let C;I.abortSignal&&(I.abortSignal.onabort=()=>{g.abort(),C=new uB});let Q=null;if(I.timeout){const e=I.timeout;Q=setTimeout(()=>{g.abort(),this._logger.log(M.Warning,"Timeout from HTTP request."),C=new pL},e)}I.content===""&&(I.content=void 0),I.content&&(I.headers=I.headers||{},Go(I.content)?I.headers["Content-Type"]="application/octet-stream":I.headers["Content-Type"]="text/plain;charset=UTF-8");let B;try{B=await this._fetchType(I.url,{body:I.content,cache:"no-cache",credentials:I.withCredentials===!0?"include":"same-origin",headers:{"X-Requested-With":"XMLHttpRequest",...I.headers},method:I.method,mode:"cors",redirect:"follow",signal:g.signal})}catch(e){throw C||(this._logger.log(M.Warning,`Error from HTTP request. ${e}.`),e)}finally{Q&&clearTimeout(Q),I.abortSignal&&(I.abortSignal.onabort=null)}if(!B.ok){const e=await EZ(B,"text");throw new oo(e||B.statusText,B.status)}const i=await EZ(B,I.responseType);return new g5(B.status,B.statusText,i)}getCookieString(I){let g="";return SI.isNode&&this._jar&&this._jar.getCookies(I,(C,Q)=>g=Q.join("; ")),g}}function EZ(A,I){let g;switch(I){case"arraybuffer":g=A.arrayBuffer();break;case"text":g=A.text();break;case"blob":case"document":case"json":throw new Error(`${I} is not supported.`);default:g=A.text();break}return g}class pMA extends od{constructor(I){super(),this._logger=I}send(I){return I.abortSignal&&I.abortSignal.aborted?Promise.reject(new uB):I.method?I.url?new Promise((g,C)=>{const Q=new XMLHttpRequest;Q.open(I.method,I.url,!0),Q.withCredentials=I.withCredentials===void 0?!0:I.withCredentials,Q.setRequestHeader("X-Requested-With","XMLHttpRequest"),I.content===""&&(I.content=void 0),I.content&&(Go(I.content)?Q.setRequestHeader("Content-Type","application/octet-stream"):Q.setRequestHeader("Content-Type","text/plain;charset=UTF-8"));const B=I.headers;B&&Object.keys(B).forEach(E=>{Q.setRequestHeader(E,B[E])}),I.responseType&&(Q.responseType=I.responseType),I.abortSignal&&(I.abortSignal.onabort=()=>{Q.abort(),C(new uB)}),I.timeout&&(Q.timeout=I.timeout),Q.onload=()=>{I.abortSignal&&(I.abortSignal.onabort=null),Q.status>=200&&Q.status<300?g(new g5(Q.status,Q.statusText,Q.response||Q.responseText)):C(new oo(Q.response||Q.responseText||Q.statusText,Q.status))},Q.onerror=()=>{this._logger.log(M.Warning,`Error from HTTP request. ${Q.status}: ${Q.statusText}.`),C(new oo(Q.statusText,Q.status))},Q.ontimeout=()=>{this._logger.log(M.Warning,"Timeout from HTTP request."),C(new pL)},Q.send(I.content)}):Promise.reject(new Error("No url defined.")):Promise.reject(new Error("No method defined."))}}class NMA extends od{constructor(I){if(super(),typeof fetch<"u"||SI.isNode)this._httpClient=new kMA(I);else if(typeof XMLHttpRequest<"u")this._httpClient=new pMA(I);else throw new Error("No usable HttpClient found.")}send(I){return I.abortSignal&&I.abortSignal.aborted?Promise.reject(new uB):I.method?I.url?this._httpClient.send(I):Promise.reject(new Error("No url defined.")):Promise.reject(new Error("No method defined."))}getCookieString(I){return this._httpClient.getCookieString(I)}}class $C{static write(I){return`${I}${$C.RecordSeparator}`}static parse(I){if(I[I.length-1]!==$C.RecordSeparator)throw new Error("Message is incomplete.");const g=I.split($C.RecordSeparator);return g.pop(),g}}$C.RecordSeparatorCode=30;$C.RecordSeparator=String.fromCharCode($C.RecordSeparatorCode);class ZMA{writeHandshakeRequest(I){return $C.write(JSON.stringify(I))}parseHandshakeResponse(I){let g,C;if(Go(I)){const i=new Uint8Array(I),e=i.indexOf($C.RecordSeparatorCode);if(e===-1)throw new Error("Message is incomplete.");const o=e+1;g=String.fromCharCode.apply(null,Array.prototype.slice.call(i.slice(0,o))),C=i.byteLength>o?i.slice(o).buffer:null}else{const i=I,e=i.indexOf($C.RecordSeparator);if(e===-1)throw new Error("Message is incomplete.");const o=e+1;g=i.substring(0,o),C=i.length>o?i.substring(o):null}const Q=$C.parse(g),B=JSON.parse(Q[0]);if(B.type)throw new Error("Expected a handshake response from the server.");return[C,B]}}var wA;(function(A){A[A.Invocation=1]="Invocation",A[A.StreamItem=2]="StreamItem",A[A.Completion=3]="Completion",A[A.StreamInvocation=4]="StreamInvocation",A[A.CancelInvocation=5]="CancelInvocation",A[A.Ping=6]="Ping",A[A.Close=7]="Close",A[A.Ack=8]="Ack",A[A.Sequence=9]="Sequence"})(wA||(wA={}));class KMA{constructor(){this.observers=[]}next(I){for(const g of this.observers)g.next(I)}error(I){for(const g of this.observers)g.error&&g.error(I)}complete(){for(const I of this.observers)I.complete&&I.complete()}subscribe(I){return this.observers.push(I),new LMA(this,I)}}class JMA{constructor(I,g,C){this._bufferSize=1e5,this._messages=[],this._totalMessageCount=0,this._waitForSequenceMessage=!1,this._nextReceivingSequenceId=1,this._latestReceivedSequenceId=0,this._bufferedByteCount=0,this._reconnectInProgress=!1,this._protocol=I,this._connection=g,this._bufferSize=C}async _send(I){const g=this._protocol.writeMessage(I);let C=Promise.resolve();if(this._isInvocationMessage(I)){this._totalMessageCount++;let Q=()=>{},B=()=>{};Go(g)?this._bufferedByteCount+=g.byteLength:this._bufferedByteCount+=g.length,this._bufferedByteCount>=this._bufferSize&&(C=new Promise((E,i)=>{Q=E,B=i})),this._messages.push(new WMA(g,this._totalMessageCount,Q,B))}try{this._reconnectInProgress||await this._connection.send(g)}catch{this._disconnected()}await C}_ack(I){let g=-1;for(let C=0;Cthis._nextReceivingSequenceId){this._connection.stop(new Error("Sequence ID greater than amount of messages we've received."));return}this._nextReceivingSequenceId=I.sequenceId}_disconnected(){this._reconnectInProgress=!0,this._waitForSequenceMessage=!0}async _resend(){const I=this._messages.length!==0?this._messages[0]._id:this._totalMessageCount+1;await this._connection.send(this._protocol.writeMessage({type:wA.Sequence,sequenceId:I}));const g=this._messages;for(const C of g)await this._connection.send(C._message);this._reconnectInProgress=!1}_dispose(I){I??(I=new Error("Unable to reconnect to server."));for(const g of this._messages)g._rejector(I)}_isInvocationMessage(I){switch(I.type){case wA.Invocation:case wA.StreamItem:case wA.Completion:case wA.StreamInvocation:case wA.CancelInvocation:return!0;case wA.Close:case wA.Sequence:case wA.Ping:case wA.Ack:return!1}}_ackTimer(){this._ackTimerHandle===void 0&&(this._ackTimerHandle=setTimeout(async()=>{try{this._reconnectInProgress||await this._connection.send(this._protocol.writeMessage({type:wA.Ack,sequenceId:this._latestReceivedSequenceId}))}catch{}clearTimeout(this._ackTimerHandle),this._ackTimerHandle=void 0},1e3))}}class WMA{constructor(I,g,C,Q){this._message=I,this._id=g,this._resolver=C,this._rejector=Q}}const VMA=30*1e3,zMA=15*1e3,MMA=1e5;var DI;(function(A){A.Disconnected="Disconnected",A.Connecting="Connecting",A.Connected="Connected",A.Disconnecting="Disconnecting",A.Reconnecting="Reconnecting"})(DI||(DI={}));class NL{static create(I,g,C,Q,B,E,i){return new NL(I,g,C,Q,B,E,i)}constructor(I,g,C,Q,B,E,i){this._nextKeepAlive=0,this._freezeEventListener=()=>{this._logger.log(M.Warning,"The page is being frozen, this will likely lead to the connection being closed and messages being lost. For more information see the docs at https://learn.microsoft.com/aspnet/core/signalr/javascript-client#bsleep")},Ig.isRequired(I,"connection"),Ig.isRequired(g,"logger"),Ig.isRequired(C,"protocol"),this.serverTimeoutInMilliseconds=B??VMA,this.keepAliveIntervalInMilliseconds=E??zMA,this._statefulReconnectBufferSize=i??MMA,this._logger=g,this._protocol=C,this.connection=I,this._reconnectPolicy=Q,this._handshakeProtocol=new ZMA,this.connection.onreceive=e=>this._processIncomingData(e),this.connection.onclose=e=>this._connectionClosed(e),this._callbacks={},this._methods={},this._closedCallbacks=[],this._reconnectingCallbacks=[],this._reconnectedCallbacks=[],this._invocationId=0,this._receivedHandshakeResponse=!1,this._connectionState=DI.Disconnected,this._connectionStarted=!1,this._cachedPingMessage=this._protocol.writeMessage({type:wA.Ping})}get state(){return this._connectionState}get connectionId(){return this.connection&&this.connection.connectionId||null}get baseUrl(){return this.connection.baseUrl||""}set baseUrl(I){if(this._connectionState!==DI.Disconnected&&this._connectionState!==DI.Reconnecting)throw new Error("The HubConnection must be in the Disconnected or Reconnecting state to change the url.");if(!I)throw new Error("The HubConnection url must be a valid url.");this.connection.baseUrl=I}start(){return this._startPromise=this._startWithStateTransitions(),this._startPromise}async _startWithStateTransitions(){if(this._connectionState!==DI.Disconnected)return Promise.reject(new Error("Cannot start a HubConnection that is not in the 'Disconnected' state."));this._connectionState=DI.Connecting,this._logger.log(M.Debug,"Starting HubConnection.");try{await this._startInternal(),SI.isBrowser&&window.document.addEventListener("freeze",this._freezeEventListener),this._connectionState=DI.Connected,this._connectionStarted=!0,this._logger.log(M.Debug,"HubConnection connected successfully.")}catch(I){return this._connectionState=DI.Disconnected,this._logger.log(M.Debug,`HubConnection failed to start successfully because of error '${I}'.`),Promise.reject(I)}}async _startInternal(){this._stopDuringStartError=void 0,this._receivedHandshakeResponse=!1;const I=new Promise((g,C)=>{this._handshakeResolver=g,this._handshakeRejecter=C});await this.connection.start(this._protocol.transferFormat);try{let g=this._protocol.version;this.connection.features.reconnect||(g=1);const C={protocol:this._protocol.name,version:g};if(this._logger.log(M.Debug,"Sending handshake request."),await this._sendMessage(this._handshakeProtocol.writeHandshakeRequest(C)),this._logger.log(M.Information,`Using HubProtocol '${this._protocol.name}'.`),this._cleanupTimeout(),this._resetTimeoutPeriod(),this._resetKeepAliveInterval(),await I,this._stopDuringStartError)throw this._stopDuringStartError;(this.connection.features.reconnect||!1)&&(this._messageBuffer=new JMA(this._protocol,this.connection,this._statefulReconnectBufferSize),this.connection.features.disconnected=this._messageBuffer._disconnected.bind(this._messageBuffer),this.connection.features.resend=()=>{if(this._messageBuffer)return this._messageBuffer._resend()}),this.connection.features.inherentKeepAlive||await this._sendMessage(this._cachedPingMessage)}catch(g){throw this._logger.log(M.Debug,`Hub handshake failed with error '${g}' during start(). Stopping HubConnection.`),this._cleanupTimeout(),this._cleanupPingTimer(),await this.connection.stop(g),g}}async stop(){const I=this._startPromise;this.connection.features.reconnect=!1,this._stopPromise=this._stopInternal(),await this._stopPromise;try{await I}catch{}}_stopInternal(I){if(this._connectionState===DI.Disconnected)return this._logger.log(M.Debug,`Call to HubConnection.stop(${I}) ignored because it is already in the disconnected state.`),Promise.resolve();if(this._connectionState===DI.Disconnecting)return this._logger.log(M.Debug,`Call to HttpConnection.stop(${I}) ignored because the connection is already in the disconnecting state.`),this._stopPromise;const g=this._connectionState;return this._connectionState=DI.Disconnecting,this._logger.log(M.Debug,"Stopping HubConnection."),this._reconnectDelayHandle?(this._logger.log(M.Debug,"Connection stopped during reconnect delay. Done reconnecting."),clearTimeout(this._reconnectDelayHandle),this._reconnectDelayHandle=void 0,this._completeClose(),Promise.resolve()):(g===DI.Connected&&this._sendCloseMessage(),this._cleanupTimeout(),this._cleanupPingTimer(),this._stopDuringStartError=I||new uB("The connection was stopped before the hub handshake could complete."),this.connection.stop(I))}async _sendCloseMessage(){try{await this._sendWithProtocol(this._createCloseMessage())}catch{}}stream(I,...g){const[C,Q]=this._replaceStreamingParams(g),B=this._createStreamInvocation(I,g,Q);let E;const i=new KMA;return i.cancelCallback=()=>{const e=this._createCancelInvocation(B.invocationId);return delete this._callbacks[B.invocationId],E.then(()=>this._sendWithProtocol(e))},this._callbacks[B.invocationId]=(e,o)=>{if(o){i.error(o);return}else e&&(e.type===wA.Completion?e.error?i.error(new Error(e.error)):i.complete():i.next(e.item))},E=this._sendWithProtocol(B).catch(e=>{i.error(e),delete this._callbacks[B.invocationId]}),this._launchStreams(C,E),i}_sendMessage(I){return this._resetKeepAliveInterval(),this.connection.send(I)}_sendWithProtocol(I){return this._messageBuffer?this._messageBuffer._send(I):this._sendMessage(this._protocol.writeMessage(I))}send(I,...g){const[C,Q]=this._replaceStreamingParams(g),B=this._sendWithProtocol(this._createInvocation(I,g,!0,Q));return this._launchStreams(C,B),B}invoke(I,...g){const[C,Q]=this._replaceStreamingParams(g),B=this._createInvocation(I,g,!1,Q);return new Promise((i,e)=>{this._callbacks[B.invocationId]=(t,s)=>{if(s){e(s);return}else t&&(t.type===wA.Completion?t.error?e(new Error(t.error)):i(t.result):e(new Error(`Unexpected message type: ${t.type}`)))};const o=this._sendWithProtocol(B).catch(t=>{e(t),delete this._callbacks[B.invocationId]});this._launchStreams(C,o)})}on(I,g){!I||!g||(I=I.toLowerCase(),this._methods[I]||(this._methods[I]=[]),this._methods[I].indexOf(g)===-1&&this._methods[I].push(g))}off(I,g){if(!I)return;I=I.toLowerCase();const C=this._methods[I];if(C)if(g){const Q=C.indexOf(g);Q!==-1&&(C.splice(Q,1),C.length===0&&delete this._methods[I])}else delete this._methods[I]}onclose(I){I&&this._closedCallbacks.push(I)}onreconnecting(I){I&&this._reconnectingCallbacks.push(I)}onreconnected(I){I&&this._reconnectedCallbacks.push(I)}_processIncomingData(I){if(this._cleanupTimeout(),this._receivedHandshakeResponse||(I=this._processHandshakeResponse(I),this._receivedHandshakeResponse=!0),I){const g=this._protocol.parseMessages(I,this._logger);for(const C of g)if(!(this._messageBuffer&&!this._messageBuffer._shouldProcessMessage(C)))switch(C.type){case wA.Invocation:this._invokeClientMethod(C).catch(Q=>{this._logger.log(M.Error,`Invoke client method threw error: ${jb(Q)}`)});break;case wA.StreamItem:case wA.Completion:{const Q=this._callbacks[C.invocationId];if(Q){C.type===wA.Completion&&delete this._callbacks[C.invocationId];try{Q(C)}catch(B){this._logger.log(M.Error,`Stream callback threw error: ${jb(B)}`)}}break}case wA.Ping:break;case wA.Close:{this._logger.log(M.Information,"Close message received from server.");const Q=C.error?new Error("Server returned an error on close: "+C.error):void 0;C.allowReconnect===!0?this.connection.stop(Q):this._stopPromise=this._stopInternal(Q);break}case wA.Ack:this._messageBuffer&&this._messageBuffer._ack(C);break;case wA.Sequence:this._messageBuffer&&this._messageBuffer._resetSequence(C);break;default:this._logger.log(M.Warning,`Invalid message type: ${C.type}.`);break}}this._resetTimeoutPeriod()}_processHandshakeResponse(I){let g,C;try{[C,g]=this._handshakeProtocol.parseHandshakeResponse(I)}catch(Q){const B="Error parsing handshake response: "+Q;this._logger.log(M.Error,B);const E=new Error(B);throw this._handshakeRejecter(E),E}if(g.error){const Q="Server returned handshake error: "+g.error;this._logger.log(M.Error,Q);const B=new Error(Q);throw this._handshakeRejecter(B),B}else this._logger.log(M.Debug,"Server handshake complete.");return this._handshakeResolver(),C}_resetKeepAliveInterval(){this.connection.features.inherentKeepAlive||(this._nextKeepAlive=new Date().getTime()+this.keepAliveIntervalInMilliseconds,this._cleanupPingTimer())}_resetTimeoutPeriod(){if((!this.connection.features||!this.connection.features.inherentKeepAlive)&&(this._timeoutHandle=setTimeout(()=>this.serverTimeout(),this.serverTimeoutInMilliseconds),this._pingServerHandle===void 0)){let I=this._nextKeepAlive-new Date().getTime();I<0&&(I=0),this._pingServerHandle=setTimeout(async()=>{if(this._connectionState===DI.Connected)try{await this._sendMessage(this._cachedPingMessage)}catch{this._cleanupPingTimer()}},I)}}serverTimeout(){this.connection.stop(new Error("Server timeout elapsed without receiving a message from the server."))}async _invokeClientMethod(I){const g=I.target.toLowerCase(),C=this._methods[g];if(!C){this._logger.log(M.Warning,`No client method with the name '${g}' found.`),I.invocationId&&(this._logger.log(M.Warning,`No result given for '${g}' method and invocation ID '${I.invocationId}'.`),await this._sendWithProtocol(this._createCompletionMessage(I.invocationId,"Client didn't provide a result.",null)));return}const Q=C.slice(),B=!!I.invocationId;let E,i,e;for(const o of Q)try{const t=E;E=await o.apply(this,I.arguments),B&&E&&t&&(this._logger.log(M.Error,`Multiple results provided for '${g}'. Sending error to server.`),e=this._createCompletionMessage(I.invocationId,"Client provided multiple results.",null)),i=void 0}catch(t){i=t,this._logger.log(M.Error,`A callback for the method '${g}' threw error '${t}'.`)}e?await this._sendWithProtocol(e):B?(i?e=this._createCompletionMessage(I.invocationId,`${i}`,null):E!==void 0?e=this._createCompletionMessage(I.invocationId,null,E):(this._logger.log(M.Warning,`No result given for '${g}' method and invocation ID '${I.invocationId}'.`),e=this._createCompletionMessage(I.invocationId,"Client didn't provide a result.",null)),await this._sendWithProtocol(e)):E&&this._logger.log(M.Error,`Result given for '${g}' method but server is not expecting a result.`)}_connectionClosed(I){this._logger.log(M.Debug,`HubConnection.connectionClosed(${I}) called while in state ${this._connectionState}.`),this._stopDuringStartError=this._stopDuringStartError||I||new uB("The underlying connection was closed before the hub handshake could complete."),this._handshakeResolver&&this._handshakeResolver(),this._cancelCallbacksWithError(I||new Error("Invocation canceled due to the underlying connection being closed.")),this._cleanupTimeout(),this._cleanupPingTimer(),this._connectionState===DI.Disconnecting?this._completeClose(I):this._connectionState===DI.Connected&&this._reconnectPolicy?this._reconnect(I):this._connectionState===DI.Connected&&this._completeClose(I)}_completeClose(I){if(this._connectionStarted){this._connectionState=DI.Disconnected,this._connectionStarted=!1,this._messageBuffer&&(this._messageBuffer._dispose(I??new Error("Connection closed.")),this._messageBuffer=void 0),SI.isBrowser&&window.document.removeEventListener("freeze",this._freezeEventListener);try{this._closedCallbacks.forEach(g=>g.apply(this,[I]))}catch(g){this._logger.log(M.Error,`An onclose callback called with error '${I}' threw error '${g}'.`)}}}async _reconnect(I){const g=Date.now();let C=0,Q=I!==void 0?I:new Error("Attempting to reconnect due to a unknown error."),B=this._getNextRetryDelay(C++,0,Q);if(B===null){this._logger.log(M.Debug,"Connection not reconnecting because the IRetryPolicy returned null on the first reconnect attempt."),this._completeClose(I);return}if(this._connectionState=DI.Reconnecting,I?this._logger.log(M.Information,`Connection reconnecting because of error '${I}'.`):this._logger.log(M.Information,"Connection reconnecting."),this._reconnectingCallbacks.length!==0){try{this._reconnectingCallbacks.forEach(E=>E.apply(this,[I]))}catch(E){this._logger.log(M.Error,`An onreconnecting callback called with error '${I}' threw error '${E}'.`)}if(this._connectionState!==DI.Reconnecting){this._logger.log(M.Debug,"Connection left the reconnecting state in onreconnecting callback. Done reconnecting.");return}}for(;B!==null;){if(this._logger.log(M.Information,`Reconnect attempt number ${C} will start in ${B} ms.`),await new Promise(E=>{this._reconnectDelayHandle=setTimeout(E,B)}),this._reconnectDelayHandle=void 0,this._connectionState!==DI.Reconnecting){this._logger.log(M.Debug,"Connection left the reconnecting state during reconnect delay. Done reconnecting.");return}try{if(await this._startInternal(),this._connectionState=DI.Connected,this._logger.log(M.Information,"HubConnection reconnected successfully."),this._reconnectedCallbacks.length!==0)try{this._reconnectedCallbacks.forEach(E=>E.apply(this,[this.connection.connectionId]))}catch(E){this._logger.log(M.Error,`An onreconnected callback called with connectionId '${this.connection.connectionId}; threw error '${E}'.`)}return}catch(E){if(this._logger.log(M.Information,`Reconnect attempt failed because of error '${E}'.`),this._connectionState!==DI.Reconnecting){this._logger.log(M.Debug,`Connection moved to the '${this._connectionState}' from the reconnecting state during reconnect attempt. Done reconnecting.`),this._connectionState===DI.Disconnecting&&this._completeClose();return}Q=E instanceof Error?E:new Error(E.toString()),B=this._getNextRetryDelay(C++,Date.now()-g,Q)}}this._logger.log(M.Information,`Reconnect retries have been exhausted after ${Date.now()-g} ms and ${C} failed attempts. Connection disconnecting.`),this._completeClose()}_getNextRetryDelay(I,g,C){try{return this._reconnectPolicy.nextRetryDelayInMilliseconds({elapsedMilliseconds:g,previousRetryCount:I,retryReason:C})}catch(Q){return this._logger.log(M.Error,`IRetryPolicy.nextRetryDelayInMilliseconds(${I}, ${g}) threw error '${Q}'.`),null}}_cancelCallbacksWithError(I){const g=this._callbacks;this._callbacks={},Object.keys(g).forEach(C=>{const Q=g[C];try{Q(null,I)}catch(B){this._logger.log(M.Error,`Stream 'error' callback called with '${I}' threw error: ${jb(B)}`)}})}_cleanupPingTimer(){this._pingServerHandle&&(clearTimeout(this._pingServerHandle),this._pingServerHandle=void 0)}_cleanupTimeout(){this._timeoutHandle&&clearTimeout(this._timeoutHandle)}_createInvocation(I,g,C,Q){if(C)return Q.length!==0?{arguments:g,streamIds:Q,target:I,type:wA.Invocation}:{arguments:g,target:I,type:wA.Invocation};{const B=this._invocationId;return this._invocationId++,Q.length!==0?{arguments:g,invocationId:B.toString(),streamIds:Q,target:I,type:wA.Invocation}:{arguments:g,invocationId:B.toString(),target:I,type:wA.Invocation}}}_launchStreams(I,g){if(I.length!==0){g||(g=Promise.resolve());for(const C in I)I[C].subscribe({complete:()=>{g=g.then(()=>this._sendWithProtocol(this._createCompletionMessage(C)))},error:Q=>{let B;Q instanceof Error?B=Q.message:Q&&Q.toString?B=Q.toString():B="Unknown error",g=g.then(()=>this._sendWithProtocol(this._createCompletionMessage(C,B)))},next:Q=>{g=g.then(()=>this._sendWithProtocol(this._createStreamItemMessage(C,Q)))}})}}_replaceStreamingParams(I){const g=[],C=[];for(let Q=0;Q0)&&(g=!1,this._accessToken=await this._accessTokenFactory()),this._setAuthorizationHeader(I);const C=await this._innerClient.send(I);return g&&C.statusCode===401&&this._accessTokenFactory?(this._accessToken=await this._accessTokenFactory(),this._setAuthorizationHeader(I),await this._innerClient.send(I)):C}_setAuthorizationHeader(I){I.headers||(I.headers={}),this._accessToken?I.headers[to.Authorization]=`Bearer ${this._accessToken}`:this._accessTokenFactory&&I.headers[to.Authorization]&&delete I.headers[to.Authorization]}getCookieString(I){return this._innerClient.getCookieString(I)}}var eg;(function(A){A[A.None=0]="None",A[A.WebSockets=1]="WebSockets",A[A.ServerSentEvents=2]="ServerSentEvents",A[A.LongPolling=4]="LongPolling"})(eg||(eg={}));var zg;(function(A){A[A.Text=1]="Text",A[A.Binary=2]="Binary"})(zg||(zg={}));let fMA=class{constructor(){this._isAborted=!1,this.onabort=null}abort(){this._isAborted||(this._isAborted=!0,this.onabort&&this.onabort())}get signal(){return this}get aborted(){return this._isAborted}};class eZ{get pollAborted(){return this._pollAbort.aborted}constructor(I,g,C){this._httpClient=I,this._logger=g,this._pollAbort=new fMA,this._options=C,this._running=!1,this.onreceive=null,this.onclose=null}async connect(I,g){if(Ig.isRequired(I,"url"),Ig.isRequired(g,"transferFormat"),Ig.isIn(g,zg,"transferFormat"),this._url=I,this._logger.log(M.Trace,"(LongPolling transport) Connecting."),g===zg.Binary&&typeof XMLHttpRequest<"u"&&typeof new XMLHttpRequest().responseType!="string")throw new Error("Binary protocols over XmlHttpRequest not implementing advanced features are not supported.");const[C,Q]=Av(),B={[C]:Q,...this._options.headers},E={abortSignal:this._pollAbort.signal,headers:B,timeout:1e5,withCredentials:this._options.withCredentials};g===zg.Binary&&(E.responseType="arraybuffer");const i=`${I}&_=${Date.now()}`;this._logger.log(M.Trace,`(LongPolling transport) polling: ${i}.`);const e=await this._httpClient.get(i,E);e.statusCode!==200?(this._logger.log(M.Error,`(LongPolling transport) Unexpected response code: ${e.statusCode}.`),this._closeError=new oo(e.statusText||"",e.statusCode),this._running=!1):this._running=!0,this._receiving=this._poll(this._url,E)}async _poll(I,g){try{for(;this._running;)try{const C=`${I}&_=${Date.now()}`;this._logger.log(M.Trace,`(LongPolling transport) polling: ${C}.`);const Q=await this._httpClient.get(C,g);Q.statusCode===204?(this._logger.log(M.Information,"(LongPolling transport) Poll terminated by server."),this._running=!1):Q.statusCode!==200?(this._logger.log(M.Error,`(LongPolling transport) Unexpected response code: ${Q.statusCode}.`),this._closeError=new oo(Q.statusText||"",Q.statusCode),this._running=!1):Q.content?(this._logger.log(M.Trace,`(LongPolling transport) data received. ${QP(Q.content,this._options.logMessageContent)}.`),this.onreceive&&this.onreceive(Q.content)):this._logger.log(M.Trace,"(LongPolling transport) Poll timed out, reissuing.")}catch(C){this._running?C instanceof pL?this._logger.log(M.Trace,"(LongPolling transport) Poll timed out, reissuing."):(this._closeError=C,this._running=!1):this._logger.log(M.Trace,`(LongPolling transport) Poll errored after shutdown: ${C.message}`)}}finally{this._logger.log(M.Trace,"(LongPolling transport) Polling complete."),this.pollAborted||this._raiseOnClose()}}async send(I){return this._running?C5(this._logger,"LongPolling",this._httpClient,this._url,I,this._options):Promise.reject(new Error("Cannot send until the transport is connected"))}async stop(){this._logger.log(M.Trace,"(LongPolling transport) Stopping polling."),this._running=!1,this._pollAbort.abort();try{await this._receiving,this._logger.log(M.Trace,`(LongPolling transport) sending DELETE request to ${this._url}.`);const I={},[g,C]=Av();I[g]=C;const Q={headers:{...I,...this._options.headers},timeout:this._options.timeout,withCredentials:this._options.withCredentials};let B;try{await this._httpClient.delete(this._url,Q)}catch(E){B=E}B?B instanceof oo&&(B.statusCode===404?this._logger.log(M.Trace,"(LongPolling transport) A 404 response was returned from sending a DELETE request."):this._logger.log(M.Trace,`(LongPolling transport) Error sending a DELETE request: ${B}`)):this._logger.log(M.Trace,"(LongPolling transport) DELETE request accepted.")}finally{this._logger.log(M.Trace,"(LongPolling transport) Stop finished."),this._raiseOnClose()}}_raiseOnClose(){if(this.onclose){let I="(LongPolling transport) Firing onclose event.";this._closeError&&(I+=" Error: "+this._closeError),this._logger.log(M.Trace,I),this.onclose(this._closeError)}}}class HMA{constructor(I,g,C,Q){this._httpClient=I,this._accessToken=g,this._logger=C,this._options=Q,this.onreceive=null,this.onclose=null}async connect(I,g){return Ig.isRequired(I,"url"),Ig.isRequired(g,"transferFormat"),Ig.isIn(g,zg,"transferFormat"),this._logger.log(M.Trace,"(SSE transport) Connecting."),this._url=I,this._accessToken&&(I+=(I.indexOf("?")<0?"?":"&")+`access_token=${encodeURIComponent(this._accessToken)}`),new Promise((C,Q)=>{let B=!1;if(g!==zg.Text){Q(new Error("The Server-Sent Events transport only supports the 'Text' transfer format"));return}let E;if(SI.isBrowser||SI.isWebWorker)E=new this._options.EventSource(I,{withCredentials:this._options.withCredentials});else{const i=this._httpClient.getCookieString(I),e={};e.Cookie=i;const[o,t]=Av();e[o]=t,E=new this._options.EventSource(I,{withCredentials:this._options.withCredentials,headers:{...e,...this._options.headers}})}try{E.onmessage=i=>{if(this.onreceive)try{this._logger.log(M.Trace,`(SSE transport) data received. ${QP(i.data,this._options.logMessageContent)}.`),this.onreceive(i.data)}catch(e){this._close(e);return}},E.onerror=i=>{B?this._close():Q(new Error("EventSource failed to connect. The connection could not be found on the server, either the connection ID is not present on the server, or a proxy is refusing/buffering the connection. If you have multiple servers check that sticky sessions are enabled."))},E.onopen=()=>{this._logger.log(M.Information,`SSE connected to ${this._url}`),this._eventSource=E,B=!0,C()}}catch(i){Q(i);return}})}async send(I){return this._eventSource?C5(this._logger,"SSE",this._httpClient,this._url,I,this._options):Promise.reject(new Error("Cannot send until the transport is connected"))}stop(){return this._close(),Promise.resolve()}_close(I){this._eventSource&&(this._eventSource.close(),this._eventSource=void 0,this.onclose&&this.onclose(I))}}class xMA{constructor(I,g,C,Q,B,E){this._logger=C,this._accessTokenFactory=g,this._logMessageContent=Q,this._webSocketConstructor=B,this._httpClient=I,this.onreceive=null,this.onclose=null,this._headers=E}async connect(I,g){Ig.isRequired(I,"url"),Ig.isRequired(g,"transferFormat"),Ig.isIn(g,zg,"transferFormat"),this._logger.log(M.Trace,"(WebSockets transport) Connecting.");let C;return this._accessTokenFactory&&(C=await this._accessTokenFactory()),new Promise((Q,B)=>{I=I.replace(/^http/,"ws");let E;const i=this._httpClient.getCookieString(I);let e=!1;if(SI.isNode||SI.isReactNative){const o={},[t,s]=Av();o[t]=s,C&&(o[to.Authorization]=`Bearer ${C}`),i&&(o[to.Cookie]=i),E=new this._webSocketConstructor(I,void 0,{headers:{...o,...this._headers}})}else C&&(I+=(I.indexOf("?")<0?"?":"&")+`access_token=${encodeURIComponent(C)}`);E||(E=new this._webSocketConstructor(I)),g===zg.Binary&&(E.binaryType="arraybuffer"),E.onopen=o=>{this._logger.log(M.Information,`WebSocket connected to ${I}.`),this._webSocket=E,e=!0,Q()},E.onerror=o=>{let t=null;typeof ErrorEvent<"u"&&o instanceof ErrorEvent?t=o.error:t="There was an error with the transport",this._logger.log(M.Information,`(WebSockets transport) ${t}.`)},E.onmessage=o=>{if(this._logger.log(M.Trace,`(WebSockets transport) data received. ${QP(o.data,this._logMessageContent)}.`),this.onreceive)try{this.onreceive(o.data)}catch(t){this._close(t);return}},E.onclose=o=>{if(e)this._close(o);else{let t=null;typeof ErrorEvent<"u"&&o instanceof ErrorEvent?t=o.error:t="WebSocket failed to connect. The connection could not be found on the server, either the endpoint may not be a SignalR endpoint, the connection ID is not present on the server, or there is a proxy blocking WebSockets. If you have multiple servers check that sticky sessions are enabled.",B(new Error(t))}}})}send(I){return this._webSocket&&this._webSocket.readyState===this._webSocketConstructor.OPEN?(this._logger.log(M.Trace,`(WebSockets transport) sending data. ${QP(I,this._logMessageContent)}.`),this._webSocket.send(I),Promise.resolve()):Promise.reject("WebSocket is not in the OPEN state")}stop(){return this._webSocket&&this._close(void 0),Promise.resolve()}_close(I){this._webSocket&&(this._webSocket.onclose=()=>{},this._webSocket.onmessage=()=>{},this._webSocket.onerror=()=>{},this._webSocket.close(),this._webSocket=void 0),this._logger.log(M.Trace,"(WebSockets transport) socket closed."),this.onclose&&(this._isCloseEvent(I)&&(I.wasClean===!1||I.code!==1e3)?this.onclose(new Error(`WebSocket closed with status code: ${I.code} (${I.reason||"no reason given"}).`)):I instanceof Error?this.onclose(I):this.onclose())}_isCloseEvent(I){return I&&typeof I.wasClean=="boolean"&&typeof I.code=="number"}}const oZ=100;class OMA{constructor(I,g={}){if(this._stopPromiseResolver=()=>{},this.features={},this._negotiateVersion=1,Ig.isRequired(I,"url"),this._logger=RMA(g.logger),this.baseUrl=this._resolveUrl(I),g=g||{},g.logMessageContent=g.logMessageContent===void 0?!1:g.logMessageContent,typeof g.withCredentials=="boolean"||g.withCredentials===void 0)g.withCredentials=g.withCredentials===void 0?!0:g.withCredentials;else throw new Error("withCredentials option was not a 'boolean' or 'undefined' value");g.timeout=g.timeout===void 0?100*1e3:g.timeout;let C=null,Q=null;if(SI.isNode&&typeof require<"u"){const B=typeof __webpack_require__=="function"?__non_webpack_require__:require;C=B("ws"),Q=B("eventsource")}!SI.isNode&&typeof WebSocket<"u"&&!g.WebSocket?g.WebSocket=WebSocket:SI.isNode&&!g.WebSocket&&C&&(g.WebSocket=C),!SI.isNode&&typeof EventSource<"u"&&!g.EventSource?g.EventSource=EventSource:SI.isNode&&!g.EventSource&&typeof Q<"u"&&(g.EventSource=Q),this._httpClient=new jMA(g.httpClient||new NMA(this._logger),g.accessTokenFactory),this._connectionState="Disconnected",this._connectionStarted=!1,this._options=g,this.onreceive=null,this.onclose=null}async start(I){if(I=I||zg.Binary,Ig.isIn(I,zg,"transferFormat"),this._logger.log(M.Debug,`Starting connection with transfer format '${zg[I]}'.`),this._connectionState!=="Disconnected")return Promise.reject(new Error("Cannot start an HttpConnection that is not in the 'Disconnected' state."));if(this._connectionState="Connecting",this._startInternalPromise=this._startInternal(I),await this._startInternalPromise,this._connectionState==="Disconnecting"){const g="Failed to start the HttpConnection before stop() was called.";return this._logger.log(M.Error,g),await this._stopPromise,Promise.reject(new uB(g))}else if(this._connectionState!=="Connected"){const g="HttpConnection.startInternal completed gracefully but didn't enter the connection into the connected state!";return this._logger.log(M.Error,g),Promise.reject(new uB(g))}this._connectionStarted=!0}send(I){return this._connectionState!=="Connected"?Promise.reject(new Error("Cannot send data if the connection is not in the 'Connected' State.")):(this._sendQueue||(this._sendQueue=new ZL(this.transport)),this._sendQueue.send(I))}async stop(I){if(this._connectionState==="Disconnected")return this._logger.log(M.Debug,`Call to HttpConnection.stop(${I}) ignored because the connection is already in the disconnected state.`),Promise.resolve();if(this._connectionState==="Disconnecting")return this._logger.log(M.Debug,`Call to HttpConnection.stop(${I}) ignored because the connection is already in the disconnecting state.`),this._stopPromise;this._connectionState="Disconnecting",this._stopPromise=new Promise(g=>{this._stopPromiseResolver=g}),await this._stopInternal(I),await this._stopPromise}async _stopInternal(I){this._stopError=I;try{await this._startInternalPromise}catch{}if(this.transport){try{await this.transport.stop()}catch(g){this._logger.log(M.Error,`HttpConnection.transport.stop() threw error '${g}'.`),this._stopConnection()}this.transport=void 0}else this._logger.log(M.Debug,"HttpConnection.transport is undefined in HttpConnection.stop() because start() failed.")}async _startInternal(I){let g=this.baseUrl;this._accessTokenFactory=this._options.accessTokenFactory,this._httpClient._accessTokenFactory=this._accessTokenFactory;try{if(this._options.skipNegotiation)if(this._options.transport===eg.WebSockets)this.transport=this._constructTransport(eg.WebSockets),await this._startTransport(g,I);else throw new Error("Negotiation can only be skipped when using the WebSocket transport directly.");else{let C=null,Q=0;do{if(C=await this._getNegotiationResponse(g),this._connectionState==="Disconnecting"||this._connectionState==="Disconnected")throw new uB("The connection was stopped during negotiation.");if(C.error)throw new Error(C.error);if(C.ProtocolVersion)throw new Error("Detected a connection attempt to an ASP.NET SignalR Server. This client only supports connecting to an ASP.NET Core SignalR Server. See https://aka.ms/signalr-core-differences for details.");if(C.url&&(g=C.url),C.accessToken){const B=C.accessToken;this._accessTokenFactory=()=>B,this._httpClient._accessToken=B,this._httpClient._accessTokenFactory=void 0}Q++}while(C.url&&Q0?Promise.reject(new wMA(`Unable to connect to the server with any of the available transports. ${E.join(" ")}`,E)):Promise.reject(new Error("None of the transports supported by the client are supported by the server."))}_constructTransport(I){switch(I){case eg.WebSockets:if(!this._options.WebSocket)throw new Error("'WebSocket' is not supported in your environment.");return new xMA(this._httpClient,this._accessTokenFactory,this._logger,this._options.logMessageContent,this._options.WebSocket,this._options.headers||{});case eg.ServerSentEvents:if(!this._options.EventSource)throw new Error("'EventSource' is not supported in your environment.");return new HMA(this._httpClient,this._httpClient._accessToken,this._logger,this._options);case eg.LongPolling:return new eZ(this._httpClient,this._logger,this._options);default:throw new Error(`Unknown transport: ${I}.`)}}_startTransport(I,g){return this.transport.onreceive=this.onreceive,this.features.reconnect?this.transport.onclose=async C=>{let Q=!1;if(this.features.reconnect)try{this.features.disconnected(),await this.transport.connect(I,g),await this.features.resend()}catch{Q=!0}else{this._stopConnection(C);return}Q&&this._stopConnection(C)}:this.transport.onclose=C=>this._stopConnection(C),this.transport.connect(I,g)}_resolveTransportOrError(I,g,C,Q){const B=eg[I.transport];if(B==null)return this._logger.log(M.Debug,`Skipping transport '${I.transport}' because it is not supported by this client.`),new Error(`Skipping transport '${I.transport}' because it is not supported by this client.`);if(qMA(g,B))if(I.transferFormats.map(i=>zg[i]).indexOf(C)>=0){if(B===eg.WebSockets&&!this._options.WebSocket||B===eg.ServerSentEvents&&!this._options.EventSource)return this._logger.log(M.Debug,`Skipping transport '${eg[B]}' because it is not supported in your environment.'`),new uMA(`'${eg[B]}' is not supported in your environment.`,B);this._logger.log(M.Debug,`Selecting transport '${eg[B]}'.`);try{return this.features.reconnect=B===eg.WebSockets?Q:void 0,this._constructTransport(B)}catch(i){return i}}else return this._logger.log(M.Debug,`Skipping transport '${eg[B]}' because it does not support the requested transfer format '${zg[C]}'.`),new Error(`'${eg[B]}' does not support ${zg[C]}.`);else return this._logger.log(M.Debug,`Skipping transport '${eg[B]}' because it was disabled by the client.`),new bMA(`'${eg[B]}' is disabled by the client.`,B)}_isITransport(I){return I&&typeof I=="object"&&"connect"in I}_stopConnection(I){if(this._logger.log(M.Debug,`HttpConnection.stopConnection(${I}) called while in state ${this._connectionState}.`),this.transport=void 0,I=this._stopError||I,this._stopError=void 0,this._connectionState==="Disconnected"){this._logger.log(M.Debug,`Call to HttpConnection.stopConnection(${I}) was ignored because the connection is already in the disconnected state.`);return}if(this._connectionState==="Connecting")throw this._logger.log(M.Warning,`Call to HttpConnection.stopConnection(${I}) was ignored because the connection is still in the connecting state.`),new Error(`HttpConnection.stopConnection(${I}) was called while the connection is still in the connecting state.`);if(this._connectionState==="Disconnecting"&&this._stopPromiseResolver(),I?this._logger.log(M.Error,`Connection disconnected with error '${I}'.`):this._logger.log(M.Information,"Connection disconnected."),this._sendQueue&&(this._sendQueue.stop().catch(g=>{this._logger.log(M.Error,`TransportSendQueue.stop() threw error '${g}'.`)}),this._sendQueue=void 0),this.connectionId=void 0,this._connectionState="Disconnected",this._connectionStarted){this._connectionStarted=!1;try{this.onclose&&this.onclose(I)}catch(g){this._logger.log(M.Error,`HttpConnection.onclose(${I}) threw error '${g}'.`)}}}_resolveUrl(I){if(I.lastIndexOf("https://",0)===0||I.lastIndexOf("http://",0)===0)return I;if(!SI.isBrowser)throw new Error(`Cannot resolve '${I}'.`);const g=window.document.createElement("a");return g.href=I,this._logger.log(M.Information,`Normalizing '${I}' to '${g.href}'.`),g.href}_resolveNegotiateUrl(I){const g=new URL(I);g.pathname.endsWith("/")?g.pathname+="negotiate":g.pathname+="/negotiate";const C=new URLSearchParams(g.searchParams);return C.has("negotiateVersion")||C.append("negotiateVersion",this._negotiateVersion.toString()),C.has("useStatefulReconnect")?C.get("useStatefulReconnect")==="true"&&(this._options._useStatefulReconnect=!0):this._options._useStatefulReconnect===!0&&C.append("useStatefulReconnect","true"),g.search=C.toString(),g.toString()}}function qMA(A,I){return!A||(I&A)!==0}class ZL{constructor(I){this._transport=I,this._buffer=[],this._executing=!0,this._sendBufferedData=new mn,this._transportResult=new mn,this._sendLoopPromise=this._sendLoop()}send(I){return this._bufferData(I),this._transportResult||(this._transportResult=new mn),this._transportResult.promise}stop(){return this._executing=!1,this._sendBufferedData.resolve(),this._sendLoopPromise}_bufferData(I){if(this._buffer.length&&typeof this._buffer[0]!=typeof I)throw new Error(`Expected data to be of type ${typeof this._buffer} but was of type ${typeof I}`);this._buffer.push(I),this._sendBufferedData.resolve()}async _sendLoop(){for(;;){if(await this._sendBufferedData.promise,!this._executing){this._transportResult&&this._transportResult.reject("Connection stopped.");break}this._sendBufferedData=new mn;const I=this._transportResult;this._transportResult=void 0;const g=typeof this._buffer[0]=="string"?this._buffer.join(""):ZL._concatBuffers(this._buffer);this._buffer.length=0;try{await this._transport.send(g),I.resolve()}catch(C){I.reject(C)}}}static _concatBuffers(I){const g=I.map(B=>B.byteLength).reduce((B,E)=>B+E),C=new Uint8Array(g);let Q=0;for(const B of I)C.set(new Uint8Array(B),Q),Q+=B.byteLength;return C.buffer}}class mn{constructor(){this.promise=new Promise((I,g)=>[this._resolver,this._rejecter]=[I,g])}resolve(){this._resolver()}reject(I){this._rejecter(I)}}const _MA="json";class $MA{constructor(){this.name=_MA,this.version=2,this.transferFormat=zg.Text}parseMessages(I,g){if(typeof I!="string")throw new Error("Invalid input for JSON hub protocol. Expected a string.");if(!I)return[];g===null&&(g=CP.instance);const C=$C.parse(I),Q=[];for(const B of C){const E=JSON.parse(B);if(typeof E.type!="number")throw new Error("Invalid payload.");switch(E.type){case wA.Invocation:this._isInvocationMessage(E);break;case wA.StreamItem:this._isStreamItemMessage(E);break;case wA.Completion:this._isCompletionMessage(E);break;case wA.Ping:break;case wA.Close:break;case wA.Ack:this._isAckMessage(E);break;case wA.Sequence:this._isSequenceMessage(E);break;default:g.log(M.Information,"Unknown message type '"+E.type+"' ignored.");continue}Q.push(E)}return Q}writeMessage(I){return $C.write(JSON.stringify(I))}_isInvocationMessage(I){this._assertNotEmptyString(I.target,"Invalid payload for Invocation message."),I.invocationId!==void 0&&this._assertNotEmptyString(I.invocationId,"Invalid payload for Invocation message.")}_isStreamItemMessage(I){if(this._assertNotEmptyString(I.invocationId,"Invalid payload for StreamItem message."),I.item===void 0)throw new Error("Invalid payload for StreamItem message.")}_isCompletionMessage(I){if(I.result&&I.error)throw new Error("Invalid payload for Completion message.");!I.result&&I.error&&this._assertNotEmptyString(I.error,"Invalid payload for Completion message."),this._assertNotEmptyString(I.invocationId,"Invalid payload for Completion message.")}_isAckMessage(I){if(typeof I.sequenceId!="number")throw new Error("Invalid SequenceId for Ack message.")}_isSequenceMessage(I){if(typeof I.sequenceId!="number")throw new Error("Invalid SequenceId for Sequence message.")}_assertNotEmptyString(I,g){if(typeof I!="string"||I==="")throw new Error(g)}}const AXA={trace:M.Trace,debug:M.Debug,info:M.Information,information:M.Information,warn:M.Warning,warning:M.Warning,error:M.Error,critical:M.Critical,none:M.None};function IXA(A){const I=AXA[A.toLowerCase()];if(typeof I<"u")return I;throw new Error(`Unknown log level: ${A}`)}class UXA{configureLogging(I){if(Ig.isRequired(I,"logging"),gXA(I))this.logger=I;else if(typeof I=="string"){const g=IXA(I);this.logger=new H9(g)}else this.logger=new H9(I);return this}withUrl(I,g){return Ig.isRequired(I,"url"),Ig.isNotEmpty(I,"url"),this.url=I,typeof g=="object"?this.httpConnectionOptions={...this.httpConnectionOptions,...g}:this.httpConnectionOptions={...this.httpConnectionOptions,transport:g},this}withHubProtocol(I){return Ig.isRequired(I,"protocol"),this.protocol=I,this}withAutomaticReconnect(I){if(this.reconnectPolicy)throw new Error("A reconnectPolicy has already been set.");return I?Array.isArray(I)?this.reconnectPolicy=new iZ(I):this.reconnectPolicy=I:this.reconnectPolicy=new iZ,this}withServerTimeout(I){return Ig.isRequired(I,"milliseconds"),this._serverTimeoutInMilliseconds=I,this}withKeepAliveInterval(I){return Ig.isRequired(I,"milliseconds"),this._keepAliveIntervalInMilliseconds=I,this}withStatefulReconnect(I){return this.httpConnectionOptions===void 0&&(this.httpConnectionOptions={}),this.httpConnectionOptions._useStatefulReconnect=!0,this._statefulReconnectBufferSize=I==null?void 0:I.bufferSize,this}build(){const I=this.httpConnectionOptions||{};if(I.logger===void 0&&(I.logger=this.logger),!this.url)throw new Error("The 'HubConnectionBuilder.withUrl' method must be called before building the connection.");const g=new OMA(this.url,I);return NL.create(g,this.logger||CP.instance,this.protocol||new $MA,this.reconnectPolicy,this._serverTimeoutInMilliseconds,this._keepAliveIntervalInMilliseconds,this._statefulReconnectBufferSize)}}function gXA(A){return A.log!==void 0}export{UXA as H,M as L,QXA as O,EXA as R,YH as a,eXA as b,BXA as c,Uq as d,ZA as e,RXA as f,OB as g,iB as h,SXA as i,CXA as j,iXA as k,AA as r,oXA as t,_f as u};