nexgui4 1.0.9 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- !function(g,A,I,C,e,t,n,a,r){Object.defineProperty(g,Symbol.toStringTag,{value:"Module"});var o=Object.create,i=Object.defineProperty,l=Object.getOwnPropertyDescriptor,s=Object.getOwnPropertyNames,c=Object.getPrototypeOf,u=Object.prototype.hasOwnProperty,__commonJSMin=(g,A)=>()=>(A||(g((A={exports:{}}).exports,A),g=null),A.exports),__copyProps=(g,A,I,C)=>{if(A&&"object"==typeof A||"function"==typeof A)for(var e,t=s(A),n=0,a=t.length;n<a;n++)e=t[n],u.call(g,e)||e===I||i(g,e,{get:(g=>A[g]).bind(null,e),enumerable:!(C=l(A,e))||C.enumerable});return g},__toESM=(g,A,I)=>(I=null!=g?o(c(g)):{},__copyProps(!A&&g&&g.__esModule?I:i(I,"default",{value:g,enumerable:!0}),g));e=__toESM(e,1);var m=200,applyCap=(g,A)=>!Number.isFinite(A)||A<=0?g:g.length>A?g.slice(g.length-A):g,createFeedModel=({cap:g=m}={})=>{let A=[];return{add:I=>{A=applyCap(A.concat(I),g)},addEntries:I=>{Array.isArray(I)&&0!==I.length&&(A=applyCap(A.concat(I),g))},replaceEntries:I=>{A=applyCap(Array.isArray(I)?[...I]:[],g)},snapshot:()=>[...A],clear:()=>{A=[]},destroy:()=>{A=[]}}},d=3e3,p=1e3,h=5e3,createStreamModel=({onAppend:g=()=>{},onClear:A=()=>{}}={})=>{let I=0,C=0,e=[],t=[],n=null,a=null;const r=new Set,notify=()=>{C++,a=null,r.forEach(g=>g())},retainLiveTail=g=>{if(g.length<3e3)return g;const A=g.slice(-p),I=[];for(let C=g.length-1;C>=0&&I.length<1e3;C--)g[C].gagged||I.push(g[C]);return 0===I.length?A:[...new Map([...A,...I].map(g=>[g.id,g])).values()].sort((g,A)=>g.id-A.id)},callCallback=(g,...A)=>{try{const I=g(...A);I&&"function"==typeof I.catch&&I.catch(()=>{})}catch{}};return{subscribe:g=>(r.add(g),()=>r.delete(g)),getSnapshot:()=>(a||(a={version:C,buffer:e,filteredBuffer:t,promptLine:n,totalLines:e.length}),a),addLines:A=>{const C=[],a=[];let r=null;for(const g of A){if("main"!==(g.buffer??"main"))continue;const A={id:I++,html:g.html,timestamp:g.timestamp,isPrompt:g.isPrompt,isMonospace:g.isMonospace,shouldLog:g.shouldLog,gagged:Boolean(g.gagged),buffer:g.buffer??"main"};C.push(A),A.isPrompt?r=A:a.push(A)}0!==C.length&&(e=retainLiveTail([...e,...C]),t=retainLiveTail([...t,...a]),r&&(n=r),callCallback(g,C),notify())},clear:()=>{e=[],t=[],n=null,I=0,callCallback(A),notify()},getStats:()=>({totalLines:e.length,filteredLines:t.length,liveBufferCount:e.length,liveFilteredCount:t.length,version:C,subscribers:r.size,sessionTotalLines:I,nextId:I,liveBufferCapThreshold:d,liveBufferRetainCount:p})}},y=5e3,appendWithCap=(g,A,I)=>{if(0===A.length)return g;const C=g.concat(A);return!Number.isFinite(I)||I<=0?C:C.length>I?C.slice(C.length-I):C},createTranscriptModel=({cap:g=y}={})=>{let A=0,I=0,C=[],e=null;const t=new Set,notify=()=>{I++,e=null,t.forEach(g=>g())};return{subscribe:g=>(t.add(g),()=>t.delete(g)),getSnapshot:()=>(e||(e={version:I,items:C,totalLines:C.length}),e),addLines:I=>{const e=[];for(const g of I)e.push({id:A++,html:g.html,timestamp:g.timestamp,isPrompt:Boolean(g.isPrompt),isMonospace:Boolean(g.isMonospace),shouldLog:g.shouldLog,hasMXP:(g.html||"").includes("mxp_send"),buffer:g.buffer});0!==e.length&&(C=appendWithCap(C,e,g),notify())},clear:()=>{C=[],A=0,notify()},getStats:()=>({totalLines:C.length,version:I,subscribers:t.size})}},b=Object.freeze({SYSTEM_PHASE:"nexgui4.system.phase",SYSTEM_READY:"nexgui4.system.ready",SYSTEM_DESTROYED:"nexgui4.system.destroyed"}),x=Object.freeze({TIMER_STARTED:"nexgui4.domain.timer.started",TIMER_UPDATED:"nexgui4.domain.timer.updated",TIMER_EXPIRED:"nexgui4.domain.timer.expired",TIMER_CLEARED:"nexgui4.domain.timer.cleared",STATS_UPDATED:"nexgui4.domain.stats.updated",TARGET_CHANGED:"nexgui4.domain.target.changed",STREAM_LINE:"nexgui4.domain.stream.line",PARTY_UPDATED:"nexgui4.domain.party.updated",PARTY_MEMBER_LEFT:"nexgui4.domain.party.member.left",ROOM_UPDATED:"nexgui4.domain.room.updated",DEFENCE_GAINED:"nexgui4.domain.defence.gained",DEFENCE_LOST:"nexgui4.domain.defence.lost",DEFENCES_REPLACED:"nexgui4.domain.defence.replaced",CHARACTER_UPDATED:"nexgui4.domain.character.updated",CLASS_CHANGED:"nexgui4.domain.character.class.changed"}),v=Object.freeze({STREAM_LINE:"nexgui4.ingress.stream.line",TIMER_STARTED:"nexgui4.ingress.timer.started",STATS_UPDATED:"nexgui4.ingress.stats.updated",TARGET_CHANGED:"nexgui4.ingress.target.changed",ROOM_UPDATED:"nexgui4.ingress.room.updated",DEFENCE_GAINED:"nexgui4.ingress.defence.gained",DEFENCE_LOST:"nexgui4.ingress.defence.lost",CLASS_CHANGED:"nexgui4.ingress.character.class.changed"}),E=Object.freeze({THEME_CHANGED:"nexgui4.ui.theme.changed",HOST_SETTINGS_CHANGED:"nexgui4.ui.host.settings.changed"}),w=Object.freeze({...b,...x,...E}),hasOwn=(g,A)=>Boolean(g)&&Object.prototype.hasOwnProperty.call(g,A),normalizeNumber$3=g=>{const A=Number(g);return Number.isFinite(A)?A:0},normalizeDuration=g=>Math.max(0,Math.abs(normalizeNumber$3(g))),normalizeDirection$1=(g,A="countdown")=>g&&"object"==typeof g?"countup"===g.direction||"countup"===g.mode||!1===g.countDown?"countup":"countdown":A,normalizePosition$1=(g,A="top")=>"string"==typeof g?"bottom"===g?"bottom":"top":g&&"object"==typeof g?"bottom"===g.position?"bottom":"top":A,normalizeStayVisible=(g,A=!0)=>g&&"object"==typeof g&&hasOwn(g,"stayVisible")?!0===g.stayVisible:A,normalizeGroupIds=(g,A=[])=>{if(!g||"object"!=typeof g)return[...A];const I=hasOwn(g,"groupIds")?g.groupIds:hasOwn(g,"groupId")?g.groupId:hasOwn(g,"group")?g.group:null;if(null==I)return[...A];const C=Array.isArray(I)?I:[I],e=new Set,t=[];for(const n of C){if("string"!=typeof n)continue;const g=n.trim();g&&!e.has(g)&&(e.add(g),t.push(g))}return t},isVisibleTimer=g=>!0===g.stayVisible||!0===g.enabled&&!0===g.running,areGroupIdsEqual=(g,A)=>g.length===A.length&&g.every((g,I)=>g===A[I]),areTimerSnapshotsEqual=(g,A)=>g.id===A.id&&g.durationMs===A.durationMs&&g.startedAt===A.startedAt&&g.label===A.label&&g.direction===A.direction&&g.position===A.position&&g.stayVisible===A.stayVisible&&g.enabled===A.enabled&&g.running===A.running&&g.elapsedMs===A.elapsedMs&&g.remainingMs===A.remainingMs&&areGroupIdsEqual(g.groupIds,A.groupIds),getIdleElapsedMs=g=>!0===g.stayVisible?g.durationMs:0,noopSetTimer=()=>null,noopClearTimer$1=()=>{},createTimerModel=({eventBus:g,now:A=()=>0,setTimer:I=noopSetTimer,clearTimer:C=noopClearTimer$1}={})=>{const e=new Map;let t=[];const getElapsedMs=g=>g.running&&null!=g.startedAt?Math.min(g.durationMs,Math.max(0,normalizeNumber$3(A())-normalizeNumber$3(g.startedAt))):g.elapsedMs,cloneTimer=g=>{const A=getElapsedMs(g);return{id:g.id,durationMs:g.durationMs,startedAt:g.startedAt,label:g.label,direction:g.direction,position:g.position,stayVisible:g.stayVisible,groupIds:[...g.groupIds],enabled:g.enabled,running:g.running,elapsedMs:A,remainingMs:Math.max(0,g.durationMs-A)}},clearScheduledExpiry=g=>{null!=g.timeoutId&&(C(g.timeoutId),g.timeoutId=null)},emitTimerUpdated=A=>{g.emit(x.TIMER_UPDATED,cloneTimer(A))},expire=A=>{const I=e.get(A);I&&(clearScheduledExpiry(I),I.elapsedMs=I.durationMs,I.startedAt=null,I.enabled=!1,I.running=!1,g.emit(x.TIMER_EXPIRED,{...cloneTimer(I),reason:"expired"}))},scheduleExpiry=g=>{clearScheduledExpiry(g),g.timeoutId=I(()=>expire(g.id),g.durationMs)},createDormantTimer=(g,A,I,C,e)=>{const t=A??e?.durationMs??0,n=normalizeStayVisible(C,e?.stayVisible??!0);return{id:g,durationMs:t,startedAt:null,label:"string"==typeof I?I:e?.label??"",direction:normalizeDirection$1(C,e?.direction??"countdown"),position:normalizePosition$1(C,e?.position??"top"),stayVisible:n,groupIds:normalizeGroupIds(C,e?.groupIds??[]),enabled:!1,running:!1,elapsedMs:n?t:0,timeoutId:null}},createTimer=(g,A,I,C)=>{const t=e.get(g);t&&clearScheduledExpiry(t);const n=createDormantTimer(g,normalizeDuration(A),I,C,t);return e.set(g,n),emitTimerUpdated(n),cloneTimer(n)},start=I=>{const C=e.get(I);if(!C)return null;clearScheduledExpiry(C),C.elapsedMs=0,C.startedAt=A(),C.enabled=!0,C.running=!0,scheduleExpiry(C);const t=cloneTimer(C);return g.emit(x.TIMER_STARTED,t),t},remove=A=>{const I=e.get(A);if(!I)return null;clearScheduledExpiry(I);const C=cloneTimer(I);return e.delete(A),g.emit(x.TIMER_EXPIRED,{...C,reason:"removed"}),C},list=(g={})=>{const A="string"==typeof g?g:g.groupId??null,I="object"==typeof g&&!0===g?.visibleOnly;return[...e.values()].map(g=>cloneTimer(g)).filter(g=>!(A&&!g.groupIds.includes(A)||I&&!isVisibleTimer(g)))},snapshot=()=>list({visibleOnly:!0});return{add:(g,A,I="",C)=>{const e=createTimer(g,A,I,C);return C&&"object"==typeof C&&!0===C.autoStart?start(g):e},clearAll:()=>{if(0===e.size)return 0;const A=e.size;return e.forEach(g=>clearScheduledExpiry(g)),e.clear(),g.emit(x.TIMER_CLEARED),A},destroy:()=>{e.forEach(g=>clearScheduledExpiry(g)),e.clear()},get:g=>{const A=e.get(g);return A?cloneTimer(A):null},list,read:()=>{const g=[...e.values()].map(g=>cloneTimer(g)).filter(g=>isVisibleTimer(g));return t.length===g.length&&t.every((A,I)=>areTimerSnapshotsEqual(A,g[I]))||(t=g),t},remove,reset:g=>{const A=e.get(g);return A?(clearScheduledExpiry(A),A.elapsedMs=getIdleElapsedMs(A),A.startedAt=null,A.enabled=!1,A.running=!1,emitTimerUpdated(A),cloneTimer(A)):null},snapshot,start,stop:g=>{const A=e.get(g);return A?(clearScheduledExpiry(A),A.elapsedMs=getElapsedMs(A),A.startedAt=null,A.enabled=!1,A.running=!1,emitTimerUpdated(A),cloneTimer(A)):null}}},isPlainObject=g=>"[object Object]"===Object.prototype.toString.call(g),toNumber=(g,A=0)=>{const I="number"==typeof g?g:"string"==typeof g&&g.trim().length>0?Number(g):NaN;return Number.isFinite(I)?I:A},toPercent=g=>{if("number"==typeof g&&Number.isFinite(g))return g;if("string"!=typeof g)return null;const A=Number.parseInt(g.replace("%","").trim(),10);return Number.isNaN(A)?null:A},toTrimmedString=g=>"string"==typeof g&&g.trim().length>0?g.trim():null,toBooleanFlag=g=>!0===g||1===g||"1"===g,stripAnsi=g=>"string"==typeof g?g.replace(/\u001b\[[0-9;]*m/g,"").trim():"",extractNamedValue=g=>Array.isArray(g)?toTrimmedString(g[0]):isPlainObject(g)?toTrimmedString(g.name):toTrimmedString(g),deepFreeze=g=>{if(!g||"object"!=typeof g||Object.isFrozen(g))return g;Object.freeze(g);for(const A of Object.values(g))deepFreeze(A);return g},parseFontSize=(g,A=14)=>{if("number"==typeof g&&Number.isFinite(g)&&g>0)return g;if("string"==typeof g){const A=Number.parseFloat(g);if(Number.isFinite(A)&&A>0)return A}return A},R={hp:{current:0,max:0},mp:{current:0,max:0},ep:{current:0,max:0},wp:{current:0,max:0},nl:{current:0,max:0},gold:0,bank:0,xp:0,xpToNext:0},createStatsModel=({eventBus:g}={})=>{let A=structuredClone(R);const read=()=>A;return{update:I=>{for(const g of Object.keys(I)){const C=I[g];null===C||"object"!=typeof C||Array.isArray(C)?A[g]=C:A[g]={...A[g],...C}}g.emit(x.STATS_UPDATED,read())},read,snapshot:()=>deepFreeze(structuredClone(A)),destroy:()=>{A=structuredClone(R)}}},S=Object.freeze({goldCollection:!0,targetCalls:!0,affCalls:!0,callTargets:!1,callAffs:!1,gagChat:!1}),M=Object.freeze([{key:"goldCollection",label:"Collect Gold",tooltip:"Legacy party automation flag for gold collection behaviour."},{key:"targetCalls",label:"Accept Targets",tooltip:"Accept leader target calls from party chat."},{key:"affCalls",label:"Accept Affs",tooltip:"Accept legacy affliction call messages from party chat."},{key:"callTargets",label:"Call Targets",tooltip:"Legacy toggle preserved for compatibility with party workflows."},{key:"callAffs",label:"Call Affs",tooltip:"Legacy toggle preserved for compatibility with party workflows."},{key:"gagChat",label:"Gag Chat",tooltip:"Hide party chat lines from the display stream."}]),T=Object.freeze(M.map(({key:g})=>g)),isNonEmptyString=g=>"string"==typeof g&&g.trim().length>0,trimToEmpty=g=>isNonEmptyString(g)?g.trim():"",N=trimToEmpty,normalizeLookupKey=g=>trimToEmpty(g).toLowerCase(),toDisplayName=g=>trimToEmpty(g).replace(/[_-]+/g," ").replace(/\s+/g," ").replace(/\b([a-z])/g,g=>g.toUpperCase()),capitalizeFirst=g=>{const A=trimToEmpty(g);return A?A.charAt(0).toUpperCase()+A.slice(1):""},cloneSettings=g=>({...S,...g}),cloneState=g=>({members:[...g.members],leader:g.leader,selfName:g.selfName,settings:cloneSettings(g.settings)}),normalizeMembers=g=>{const A=[],I=new Set;return(Array.isArray(g)?g:[]).forEach(g=>{const C=N("string"==typeof g?g:g?.name);C&&!I.has(C)&&(I.add(C),A.push(C))}),A},reconcileLeader=(g,A)=>A.includes(g.leader)?g.leader:g.selfName&&A.includes(g.selfName)?g.selfName:A[0]??"",ensureSelfMember=(g,A)=>!g.selfName||A.includes(g.selfName)?A:[g.selfName,...A],createPartyModel=({eventBus:g}={})=>{let A={members:[],leader:"",selfName:"",settings:cloneSettings(S)};const emitUpdated=()=>{g.emit(x.PARTY_UPDATED,snapshot())},snapshot=()=>cloneState(A);return{update:g=>{const I=ensureSelfMember(A,normalizeMembers(g)),C=reconcileLeader(A,I);A.leader===C&&A.members.length===I.length&&A.members.every((g,A)=>g===I[A])||(A={...A,members:I,leader:C},emitUpdated())},addMember:g=>{const I=N(g);I&&!A.members.includes(I)&&(A={...A,members:[...A.members,I],leader:A.leader||I},emitUpdated())},removeMember:I=>{const C=N(I);if(!C||C===A.selfName||!A.members.includes(C))return;const e=A.members.filter(g=>g!==C);A={...A,members:e,leader:reconcileLeader(A,e)},g.emit(x.PARTY_MEMBER_LEFT,{name:C}),emitUpdated()},setLeader:g=>{const I=N(g);I&&A.members.includes(I)&&A.leader!==I&&(A={...A,leader:I},emitUpdated())},setSelf:g=>{const I=N(g);if(!I)return;const C=ensureSelfMember({...A,selfName:I},A.members.filter(g=>g!==I)),e=C.includes(A.leader)?A.leader:I;A.selfName===I&&A.leader===e&&A.members.length===C.length&&A.members.every((g,A)=>g===C[A])||(A={...A,selfName:I,members:C,leader:e},emitUpdated())},setSetting:(g,I)=>{if(!T.includes(g))throw new Error(`[nexGui4] Unknown party setting "${String(g)}".`);const C=!0===I;A.settings[g]!==C&&(A={...A,settings:{...A.settings,[g]:C}},emitUpdated())},read:()=>A,snapshot,destroy:()=>{A={members:[],leader:"",selfName:"",settings:cloneSettings(S)}}}},G={players:[],npcs:[],items:[],roomName:"",roomId:""},cloneRoomCollection=g=>Array.isArray(g)?structuredClone(g):[],createRoomModel=({eventBus:g}={})=>{let A=structuredClone(G);const read=()=>A;return{update:I=>{A={players:I.players?[...I.players]:[],npcs:cloneRoomCollection(I.npcs),items:cloneRoomCollection(I.items),roomName:I.roomName??"",roomId:I.roomId??""},g.emit(x.ROOM_UPDATED,read())},read,snapshot:()=>({players:[...A.players],npcs:cloneRoomCollection(A.npcs),items:cloneRoomCollection(A.items),roomName:A.roomName,roomId:A.roomId}),destroy:()=>{A=structuredClone(G)}}},D={name:"",class:"",level:0,gender:null,balance:!1,equilibrium:!1,classBalanceType:null,classBalanceReady:null,currentAffs:[],limbs:{}},createCharacterModel=({eventBus:g}={})=>{let A={...D};const read=()=>A;return{update:I=>{A={...A,...I},g.emit(x.CHARACTER_UPDATED,read())},read,setClass:I=>{A={...A,class:I},g.emit(x.CLASS_CHANGED,{class:I})},snapshot:()=>deepFreeze(structuredClone(A)),destroy:()=>{A={...D}}}},normalizeGender$1=g=>{if("string"!=typeof g)return null;const A=g.trim().toLowerCase();return"female"===A?"female":"male"===A?"male":null},normalizeAfflictionName=g=>{if(Array.isArray(g))return normalizeAfflictionName(g[0]);if(isPlainObject(g))return normalizeAfflictionName(g.name??g.affliction??g.id);if("string"!=typeof g)return null;const A=g.trim().toLowerCase();return A.length>0?A:null},normalizeAfflictionList=g=>{if(Array.isArray(g)){const A=g.map(g=>normalizeAfflictionName(g)).filter(Boolean);return A.length>0?Array.from(new Set(A)):null}return isPlainObject(g)?normalizeAfflictionList(Object.keys(g)):null},normalizeLimbMap=g=>isPlainObject(g)?Object.fromEntries(Object.entries(g).map(([g,A])=>null!==A&&"object"==typeof A?[g,structuredClone(A)]:[g,{percent:toNumber(A)}])):null,buildCharacterDetailPatch=g=>{if(!isPlainObject(g))return null;const A={},I=normalizeGender$1(g.gender),C=normalizeAfflictionList(g.currentAffs??g.afflictions),e=normalizeLimbMap(g.limbs);return I&&(A.gender=I),C&&(A.currentAffs=C),e&&(A.limbs=e),Object.keys(A).length>0?A:null},applyCharacterAfflictionEvent=(g,A,I)=>{if("Char.Afflictions.Add"!==A&&"Char.Afflictions.Remove"!==A)return!1;const C=normalizeAfflictionName(I);if(!C)return!1;const e=g.snapshot(),t=Array.isArray(e.currentAffs)?e.currentAffs:[];return"Char.Afflictions.Add"===A?!t.includes(C)&&(g.update({currentAffs:[...t,C]}),!0):(g.update({currentAffs:t.filter(g=>g!==C)}),!0)},j=["id","ID"],P=["Text","text","short_desc"],B=["HP","hp","hpperc"],hasAnyKey=(g,A)=>A.some(A=>Object.prototype.hasOwnProperty.call(g,A)),readFirst=(g,A)=>{for(const I of A)if(Object.prototype.hasOwnProperty.call(g,I))return g[I]},normalizeId=g=>"number"==typeof g&&Number.isFinite(g)?String(g):toTrimmedString(g),readHpText=g=>"number"==typeof g&&Number.isFinite(g)?String(g):toTrimmedString(g),deriveIsPlayer=g=>"-1"===String(g),createEmptyTargetRecord=()=>({id:null,name:null,isPlayer:!1,hpPercent:null,hpText:null,hpDelta:null,gender:null,currentAffs:[],limbs:{}}),createTargetModel=({eventBus:g}={})=>{let A=createEmptyTargetRecord(),I=0;const read=()=>A,emitChange=()=>{I+=1,g?.emit?.(x.TARGET_CHANGED,read())};return{setIdentity:g=>{if(!isPlainObject(g))return!1;const I=hasAnyKey(g,j),C=hasAnyKey(g,P),e=I?normalizeId(readFirst(g,j)):A.id,t=C?toTrimmedString(readFirst(g,P)):A.name,n=e!==A.id,a=t!==A.name;if(!n&&!a)return!1;const r=n?createEmptyTargetRecord():A,o=hasAnyKey(g,B),i=o?readHpText(readFirst(g,B)):r.hpText,l=o?toPercent(readHpText(readFirst(g,B))):r.hpPercent;return A={...r,id:e,name:t,isPlayer:deriveIsPlayer(e),hpText:i,hpPercent:l},emitChange(),!0},applyDetail:g=>{if(!isPlainObject(g))return!1;const I={};if("number"==typeof g.hpPercent&&Number.isFinite(g.hpPercent))I.hpPercent=g.hpPercent;else if("string"==typeof g.hpPercent){const A=toPercent(g.hpPercent);null!=A&&(I.hpPercent=A)}const C=readHpText(g.hpText);null!=C&&(I.hpText=C),"number"==typeof g.hpDelta&&Number.isFinite(g.hpDelta)&&(I.hpDelta=g.hpDelta);const e=normalizeGender$1(g.gender);e&&(I.gender=e);const t=normalizeAfflictionList(g.currentAffs??g.afflictions);t&&(I.currentAffs=t);const n=normalizeLimbMap(g.limbs);return n&&(I.limbs=n),0!==Object.keys(I).length&&(A={...A,...I},emitChange(),!0)},clear:()=>{A=createEmptyTargetRecord(),emitChange()},read,snapshot:()=>deepFreeze(structuredClone(A)),getVersion:()=>I,destroy:()=>{A=createEmptyTargetRecord()}}},createDefenceModel=({eventBus:g}={})=>{let A=[];const replaceAll=(I=[])=>{A=Array.isArray(I)?[...new Set(I.map(g=>"string"==typeof g?g.trim():"").filter(Boolean))].sort():[],g.emit(x.DEFENCES_REPLACED,{defences:snapshot()})},snapshot=()=>[...A];return{gain:I=>{A.includes(I)||(A=[...A,I].sort()),g.emit(x.DEFENCE_GAINED,{name:I})},lose:I=>{A.includes(I)&&(A=A.filter(g=>g!==I)),g.emit(x.DEFENCE_LOST,{name:I})},replaceAll,reset:()=>{A=[]},read:()=>A,snapshot,destroy:()=>{A=[]}}},normalizeClassBalanceType=g=>"string"==typeof g&&g.trim().length>0?g.trim():null,normalizeClassStatList=g=>Array.isArray(g)?g.reduce((g,A)=>{if("string"!=typeof A)return g;const I=A.trim();return I?(g.push(I),g):g},[]):[],resolveClassBalanceReady=({classStats:g,classBalanceType:A})=>{const I=normalizeClassBalanceType(A);if(!I)return null;const C=normalizeClassStatList(g).map(g=>g.toLowerCase()),e=`${I.toLowerCase()}: yes`,t=`${I.toLowerCase()}: no`;return!!C.includes(e)||!C.includes(t)&&null},createClassBalanceController=()=>{let g=null,A=[];const snapshot=()=>({classBalanceType:g,classBalanceReady:resolveClassBalanceReady({classStats:A,classBalanceType:g})});return{getType:()=>g,setType:A=>(g=normalizeClassBalanceType(A),snapshot()),updateFromVitals:g=>(A=normalizeClassStatList(g?.charstats),snapshot()),destroy:()=>{g=null,A=[]}}},O=Object.freeze(["m","mx"]),L=new Set(O),isRoomNpcAttrib=g=>"string"==typeof g&&L.has(g),isRoomNpcItem=g=>"object"==typeof g&&null!==g&&isRoomNpcAttrib(g.attrib),getRoomEntryId=g=>isPlainObject(g)&&null!=g.id?String(g.id):null,isRoomLocation=g=>"room"===toTrimmedString(g?.location)?.toLowerCase(),splitRoomEntries=g=>(Array.isArray(g)?structuredClone(g):[]).reduce((g,A)=>(isRoomNpcItem(A)?g.npcs.push(A):g.items.push(A),g),{items:[],npcs:[]}),extractRoomItemList=g=>Array.isArray(g?.items)?g.items:Array.isArray(g?.Items)?g.Items:Array.isArray(g?.room)?g.room:[],extractRoomItemEntry=g=>isPlainObject(g?.item)?g.item:isPlainObject(g?.Item)?g.Item:isPlainObject(g)?g:null,removeRoomItemEntry=(g,A)=>g.filter(g=>getRoomEntryId(g)!==A),upsertRoomItemEntry=(g,A)=>{const I=getRoomEntryId(A);if(!I)return[...g,structuredClone(A)];const C=structuredClone(g),e=C.findIndex(g=>getRoomEntryId(g)===I);return-1===e?(C.push(structuredClone(A)),C):(C[e]=structuredClone(A),C)},normalizeRoomPlayerEntries=g=>Array.isArray(g)?g:Array.isArray(g?.Players)?g.Players:Array.isArray(g?.players)?g.players:[],extractRoomPlayerName=g=>extractNamedValue(g)??toTrimmedString(g?.fullname),createRoomOccupantsModel=({roomModel:g,playerDirectory:A}={})=>{const rememberRoomPlayers=g=>{A?.rememberRoomPlayers?.(g)},apply=(A,I)=>{const C=g.snapshot();switch(A){case"Room.Info":return g.update({...C,roomName:toTrimmedString(I?.name)??"",roomId:I?.num??I?.id??""}),!0;case"Room.Players":{const A=normalizeRoomPlayerEntries(I),e=A.map(extractRoomPlayerName).filter(Boolean);return rememberRoomPlayers(A),g.update({...C,players:e}),!0}case"Room.Addplayer":case"Room.AddPlayer":{const A=toTrimmedString(I?.name)??extractNamedValue(I)??toTrimmedString(I?.fullname);return!(!A||C.players.includes(A)||(rememberRoomPlayers([I]),g.update({...C,players:[...C.players,A]}),0))}case"Room.RemovePlayer":{const A=extractNamedValue(I);return!!A&&(g.update({...C,players:C.players.filter(g=>g!==A)}),!0)}case"Char.Items.List":return!!isRoomLocation(I)&&(g.update({...C,...splitRoomEntries(extractRoomItemList(I))}),!0);case"Char.Items.Add":case"Char.Items.Update":{if(!isRoomLocation(I))return!1;const A=extractRoomItemEntry(I);if(!A)return!1;const e=getRoomEntryId(A),t=null==e?C.npcs:removeRoomItemEntry(C.npcs,e),n=null==e?C.items:removeRoomItemEntry(C.items,e);return g.update({...C,npcs:isRoomNpcItem(A)?upsertRoomItemEntry(t,A):t,items:isRoomNpcItem(A)?n:upsertRoomItemEntry(n,A)}),!0}case"Char.Items.Remove":{if(!isRoomLocation(I))return!1;const A=getRoomEntryId(extractRoomItemEntry(I));return!!A&&(g.update({...C,npcs:removeRoomItemEntry(C.npcs,A),items:removeRoomItemEntry(C.items,A)}),!0)}default:return!1}};return Object.freeze({apply})},z=Object.freeze({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"}),escapeHtml=g=>String(g??"").replace(/[&<>"']/g,g=>z[g]),Z=Object.freeze({amp:"&",lt:"<",gt:">",quot:'"',apos:"'",nbsp:" "}),stripHtml=g=>{if(!g||"string"!=typeof g)return g??"";let A=g.replace(/<[^>]+>/g,"");return A=A.replace(/&([^;]+);/g,(g,A)=>{if(Z[A])return Z[A];if(A.startsWith("#")){const g=A.startsWith("#x")?parseInt(A.substring(2),16):parseInt(A.substring(1),10);if(!isNaN(g))return String.fromCharCode(g)}return g}),A},F=Object.freeze({"a monolith sigil":{color:"red",text:"A MONOLITH SIGIL"},"a cube sigil":{color:"yellow",text:"A CUBE SIGIL"},"some gold sovereigns":{color:"gold",text:"GOLD COINS"}}),K=Object.freeze({angle:Object.freeze({open:"<",close:">"}),square:Object.freeze({open:"[",close:"]"}),curly:Object.freeze({open:"{",close:"}"}),round:Object.freeze({open:"(",close:")"})}),styleAttribute$2=g=>{const A=Object.entries(g).filter(([,g])=>g);return 0===A.length?"":` style="${A.map(([g,A])=>`${g}: ${A}`).join("; ")}"`},createTextSegment=(g,A,I={})=>({text:g,color:A,italic:Boolean(I.italic),bold:Boolean(I.bold)}),renderSegmentHtml=g=>`<span${styleAttribute$2({color:g.color,"font-style":g.italic?"italic":null,"font-weight":g.bold?"700":null})}>${escapeHtml(g.text)}</span>`,createStaticRule=(g,A,I,C)=>Object.freeze({family:"room-text",id:g,gate:A,pattern:I,createMarker:()=>C}),createDirectionalRule=(g,A,I,C,e,t,n,a)=>Object.freeze({family:"room-text",id:g,gate:A,pattern:I,createMarker:g=>({frame:C,frameColor:e,segments:[createTextSegment(t,n),createTextSegment(capitalizeFirst(g?.groups?.direction),a)]})}),createSigilRule=(g,A,I,C,e)=>createStaticRule(g,A,I,{frame:"curly",frameColor:"yellow",segments:[createTextSegment("Sigil: ","silver"),createTextSegment(C,e)]}),createRuneRule=(g,A,I,C)=>createStaticRule(g,A,I,{frame:"round",frameColor:"red",segments:[createTextSegment("Rune: ","silver"),createTextSegment(C,"aquamarine")]}),createConquestRule=(g,A,I,C,e)=>createStaticRule(g,A,I,{frame:null,frameColor:null,leftIcons:[{id:"shield-halved",colors:["silver",e],size:12}],rightIcons:[{id:"shield-halved",colors:[e,"silver"],size:12}],segments:[createTextSegment(" Conquest: ","slategray"),createTextSegment(C,e)]}),Y=Object.freeze([createStaticRule("totem","runic totem",/A runic totem is planted solidly in the ground\./,{frame:"angle",frameColor:"dodgerblue",segments:[createTextSegment("TOTEM","Tomato")]}),createStaticRule("frozenGround","slick with",/The ground is slick with ice\./,{frame:"angle",frameColor:"dodgerblue",segments:[createTextSegment("Frozen Ground","PowderBlue")]}),createStaticRule("graveHands","rotting flesh",/Hands of rotting flesh and white bone push up from the ground/,{frame:"angle",frameColor:"crimson",segments:[createTextSegment("Gravehands","Beige")]}),createDirectionalRule("icewall","icewall",/An icewall is here, blocking passage to the (?<direction>\w+)\./,"square","red","Icewall: ","dodgerblue","aquamarine"),createDirectionalRule("stonewall","wall of stone",/A large wall of stone stands here, blocking passage to the (?<direction>\w+)\./,"square","red","Stonewall: ","silver","aquamarine"),createSigilRule("cubeSigil","cube",/Resting on the ground is a cube-shaped silver sigil\./,"Cube","aquamarine"),createSigilRule("eyeSigil","obsidian",/An obsidian eye sigil is here\./,"Eye","lightgreen"),createSigilRule("monolithSigil","monolith",/A sigil in the shape of a small, rectangular monolith is on the ground\./,"Monolith","red"),createSigilRule("keySigil","key-shaped",/Lying flat on the ground is a key-shaped sigil\./,"Key","lightPink"),createRuneRule("kena","nightmares",/A rune that looks like something out of your nightmares has been sketched into the ground here\./,"Kena"),createRuneRule("uruz","lightning bolt",/A rune like a lightning bolt has been sketched into the ground here\./,"Uruz"),createRuneRule("fehu","closed eye",/A rune like a closed eye has been sketched into the ground here\./,"Fehu"),createRuneRule("pithikhan","square box",/A rune resembling a square box has been sketched into the ground here\./,"Pithikhan"),createRuneRule("inguz","stick man",/A rune that looks like a stick man has been sketched into the ground here\./,"Inguz"),createRuneRule("wunjo","open eye",/A rune like an open eye has been sketched into the ground here\./,"Wunjo"),createRuneRule("sowulu","a nail",/A rune that looks like a nail has been sketched into the ground here\./,"Sowulu"),createRuneRule("isaz","flurry of lighning",/A rune like a flurry of lightning bolts has been sketched into the ground here\./,"Isaz"),createRuneRule("dagaz","rising sun",/A rune like a rising sun has been sketched into the ground here\./,"Dagaz"),createRuneRule("raido","resembling a horse",/A rune resembling a horse has been sketched into the ground here\./,"Raido"),createRuneRule("nauthiz","resembling a leech",/A rune resembling a leech has been sketched into the ground here\./,"Nauthiz"),createRuneRule("mannaz","resembling a bell",/A rune resembling a bell has been sketched into the ground here\./,"Mannaz"),createRuneRule("othala","resembling a mountain",/A rune resembling a mountain range has been sketched into the ground here\./,"Othala"),createRuneRule("sleizak","resembling a viper",/A rune resembling a viper has been sketched into the ground here\./,"Sleizak"),createRuneRule("tiwaz","upward-pointing arrow",/A rune like an upward-pointing arrow has been sketched into the ground here\./,"Tiwaz"),createRuneRule("nairat","like a butterfly",/A rune shaped like a butterfly has been sketched into the ground here\./,"Nairat"),createRuneRule("eihwaz","like a yew",/A rune shaped like a yew has been sketched into the ground here\./,"Eihwaz"),createConquestRule("conquestAshtan","warp-touched",/Crackling ozone heralds warp-touched mirage, their coming the advent of change\./,"Ashtan ","#990099"),createConquestRule("conquestCyrene","draconic tracks",/Bound in ice, draconic tracks scribe a glittering path across the earth\./,"Cyrene ","#009999"),createConquestRule("conquestNeraeos","Cerulean waters",/Cerulean waters preside, fathom and depths stirred to roiling currents by the pervasive will of Neraeos Pelagia, Lord of the Sea\./,"Cyrene ","#009999"),createConquestRule("conquestEleusis","fecundity",/Nature's fecundity floods the surrounds with the clamour of life in a chittering refrain\./,"Eleusis ","#00e600"),createConquestRule("conquestHashan","leaden shadow",/Lines of leaden shadow coil underfoot, turning earth to metal by alchemical writ\./,"Hashan ","#999900"),createConquestRule("conquestMhaldor","red-hued",/A noxious, red-hued fog overwhelms the area with a thick, palpable vapour\./,"Mhaldor ","#e60000"),createConquestRule("conquestTargossas","mien",/Radiant light joins with calescent heat, suffusing the area with a harsh, blinding mien\./,"Targossas ","#ffffff"),createConquestRule("conquestUnderworld","ashen earth",/Soul's blood pools on ashen earth turned dust, an inviolable call to death's advance\./,"Underworld ","tomato")]),V=new Map,W=new Set,notifyOverrideSubscribers=()=>{for(const g of W)g()},subscribeToRoomItemOverrides=g=>(W.add(g),()=>W.delete(g)),setUserRoomItemOverride=(g,A)=>{const I=normalizeLookupKey(g);I&&(V.set(I,A),notifyOverrideSubscribers())},removeUserRoomItemOverride=g=>{const A=normalizeLookupKey(g);A&&(V.delete(A),notifyOverrideSubscribers())},getUserRoomItemOverride=g=>{const A=normalizeLookupKey(g);return A?V.get(A)??null:null},listUserRoomItemOverrides=()=>Array.from(V.entries()),getRoomItemOverride=g=>{if("string"==typeof g){const A=normalizeLookupKey(g);return V.get(A)??F[A]??null}if(!g||"object"!=typeof g)return null;const A=normalizeLookupKey(g.id),I=normalizeLookupKey(g.name);return V.get(A)??V.get(I)??F[A]??F[I]??null},renderRoomMarkerHtml=(g,A={})=>{const I=g.frame?K[g.frame]:null,C=A.iconRenderer,e=Array.isArray(g.leftIcons)?g.leftIcons.map(g=>C?.(g)??"").join(""):"",t=Array.isArray(g.rightIcons)?g.rightIcons.map(g=>C?.(g)??"").join(""):"";return[e,I?renderSegmentHtml(createTextSegment(I.open,g.frameColor,{bold:!0})):"",g.segments.map(renderSegmentHtml).join(""),I?renderSegmentHtml(createTextSegment(I.close,g.frameColor,{bold:!0})):"",t].join("")},matchRoomTextReplacements=g=>isNonEmptyString(g)?Y.flatMap(A=>{if(!g.includes(A.gate))return[];const I=g.match(A.pattern);return I?[{rule:A,match:I,marker:A.createMarker(I)}]:[]}):[],replaceRoomText=(g,A={})=>{if(!isNonEmptyString(g))return g;let I=g;for(const{rule:C,match:e,marker:t}of matchRoomTextReplacements(g))I=I.replace(C.pattern,renderRoomMarkerHtml(t,A));return I},createWormholeExitDescriptor=({warp:g,currentArea:A}={})=>{if(!g||"object"!=typeof g)return null;const I=A&&A===g.area?g.name:g.areaName;return isNonEmptyString(I)?{family:"room-exit",command:"worm warp",label:`Wormhole: (${I})`}:null},renderWormholeExitHtml=g=>g?`<span>, and <a class="mxp_send" href="#" rel="${escapeHtml(g.command)}">${escapeHtml(g.label)}</a>.</span>`:"",extractPartyChatPayload=g=>{if(!isPlainObject(g)||"party"!==toTrimmedString(g.channel)?.toLowerCase())return null;const A=toTrimmedString(g.talker),I=stripAnsi(g.text);return A&&I?{talker:A,message:I.match(/^\(Party\): (\w+) says, "(.+)"$/)?.[2]??I}:null},capitalizeLookupName=g=>`${g.charAt(0).toUpperCase()}${g.slice(1)}`,createPartyAutomationModel=({characterModel:g,partyModel:A,playerDirectory:I,sendCommand:C}={})=>{const send=g=>{"function"==typeof C&&C(g)},processChannelText=C=>{const e=extractPartyChatPayload(C);if(!e)return!1;const t=A.snapshot();if(!t.settings.targetCalls||e.talker!==t.leader)return!1;const n=e.message.match(/^Target: (.+)\.$/)??e.message.match(/^(?:Target|TARGET) (.+)\.$/);if(n){const A=toTrimmedString(n[1]);if(!A)return!1;const C=g.snapshot(),e=I.getPlayerProfile(C.name)?.city??"",t=I.getPlayerProfile(capitalizeLookupName(A))??I.getPlayerProfile(A);return!(t?.city&&e&&t.city===e||(send(`settarget ${A}`),send(`enemy ${A}`),0))}const a=e.message.match(/^Enemy (.+)\.$/);if(a){const g=toTrimmedString(a[1]);if(g)return send(`enemy ${g}`),!0}return!1},processEvent=(g,A)=>"Comm.Channel.Text"===g&&processChannelText(A);return Object.freeze({processChannelText,processEvent})},freezeMethodGroups=g=>Object.freeze(Object.fromEntries(Object.entries(g).map(([g,A])=>[g,Object.freeze([...A])]))),U=freezeMethodGroups({commands:["send","sendGmcp"],variables:["getVariable","setVariable"],target:["getTarget","setTarget"],output:["notice","displayHtmlLine","gagCurrentBlock"],host:["getHostSettings","setHostSetting","getHostLayoutSnapshot","updateHostLayoutAttributes","focusInput","getConfiguredDefences","getActiveDefences"],events:["on","off"],lifecycle:["destroy"]}),H=Object.freeze(Object.values(U).flat()),assertAdapterContract=g=>{const A=H;for(const I of A)if("function"!=typeof g?.[I])throw new Error(`[nexGui4] Adapter missing required method: "${I}"`);return g},normalizeConfiguredDefenceList=g=>{if(!Array.isArray(g))return[];const A=new Set;return g.reduce((g,I)=>{if("string"!=typeof I)return g;const C=I.trim();return!C||A.has(C)||(A.add(C),g.push(C)),g},[])},createDefenceStore=({defenceModel:g,eventBus:A,configuredDefences:C=[]})=>{const readDefences=()=>g.read?.()??g.snapshot(),e=(0,I.create)(()=>({defences:readDefences(),configuredDefences:normalizeConfiguredDefenceList(C),gainDefence:A=>g.gain(A),loseDefence:A=>g.lose(A),resetDefences:()=>{g.reset(),e.setState({defences:readDefences()})},setConfiguredDefences:g=>{e.setState({configuredDefences:normalizeConfiguredDefenceList(g)})}})),refreshDefences=()=>{e.setState({defences:readDefences()})};return A.on(x.DEFENCE_GAINED,refreshDefences),A.on(x.DEFENCE_LOST,refreshDefences),A.on(x.DEFENCES_REPLACED,refreshDefences),e},isRecord=g=>"[object Object]"===Object.prototype.toString.call(g),extractDefenceName=g=>"string"==typeof g?g:isRecord(g)&&"string"==typeof g.name?g.name:null,removeTrackedHandler=(g,A,I)=>{const C=g.get(A);if(C){if("string"==typeof I)C.delete(I);else for(const[g,A]of C.entries())if(A===I){C.delete(g);break}0===C.size&&g.delete(A)}},normalizeListenerIdSegment=g=>String(g).replace(/[^A-Za-z0-9]+/g,"-").replace(/^-+|-+$/g,"").replace(/-{2,}/g,"-"),createDefaultListenerId=(g,A)=>{const I=`nexGui4-${normalizeListenerIdSegment(g)||"event"}`;if(!A||0===A.size)return I;let C=A.size+1,e=`${I}-${C}`;for(;A.has(e);)C+=1,e=`${I}-${C}`;return e},Q="#00B1D2",X=`<span style="color:${Q};">[-</span><span style="color:#FDDB27;">nexGui</span><span style="color:${Q};">-] </span>`,renderNoticeHtml=(g,A)=>{if(A?.html)return X+String(g);const I=A&&"object"==typeof A?A.style:A,C=escapeHtml(g);return"string"==typeof I&&I.trim()?X+`<span style="color: ${escapeHtml(I.trim())};">${C}</span>`:X+C},getHostSettings=()=>nexusclient.settings?.()??{},getHostLayout=()=>nexusclient.ui?.()?.layout?.()??null,updateHostLayoutAttributes=g=>{const A=getHostLayout();A?.flexModel?.doAction&&"function"==typeof A.model&&A.flexModel.doAction({type:"FlexLayout_UpdateModelAttributes",data:{json:{...A.model()?.global??{},...g}}})},extractLegacyRuntimeConfiguredDefences=()=>normalizeConfiguredDefenceList(globalThis.nexGui?.defences),extractNexSysConfiguredDefences=()=>{const g=globalThis.nexSys?.defPrios,A=globalThis.nexSys?.defs;if("[object Object]"!==Object.prototype.toString.call(g)||"[object Object]"!==Object.prototype.toString.call(A))return[];const I=Object.entries(g.keepup??{}).filter(([,g])=>Boolean(g)).map(([g])=>g).filter(g=>Boolean(A?.[g]?.prio)),C=Object.entries(g.static??{}).filter(([,g])=>Boolean(g)).map(([g])=>g).filter(g=>Boolean(A?.[g]?.prio));return normalizeConfiguredDefenceList([...I,...C])},resolveConfiguredDefences=()=>{const g=extractLegacyRuntimeConfiguredDefences();return g.length>0?g:extractNexSysConfiguredDefences()},extractActiveDefencesFromGmcpNode=g=>Array.isArray(g)?normalizeConfiguredDefenceList(g.map(extractDefenceName).filter(Boolean)):isRecord(g)?Array.isArray(g.defences)?extractActiveDefencesFromGmcpNode(g.defences):normalizeConfiguredDefenceList(Object.entries(g).map(([g,A])=>extractDefenceName(A)??g)):[],extractGmcpActiveDefences=()=>normalizeConfiguredDefenceList([...extractActiveDefencesFromGmcpNode(globalThis.GMCP?.Defences),...extractActiveDefencesFromGmcpNode(globalThis.GMCP?.Char?.Defences)]),extractNexSysActiveDefences=(g=[])=>{const A=globalThis.nexSys?.api?.defs?.have;return"function"!=typeof A?[]:normalizeConfiguredDefenceList(g).filter(g=>{try{return Boolean(A(g))}catch{return!1}})},resolveActiveDefences=(g=[])=>normalizeConfiguredDefenceList([...extractGmcpActiveDefences(),...extractNexSysActiveDefences(g)]),createNexusAdapter=({playerRelationships:g}={})=>{const A=new Map;return assertAdapterContract({send:A=>(g?.trackRelationshipCommand?.(A),nexusclient.send_commands(A)),sendGmcp:(g,A)=>nexusclient.datahandler().send_GMCP(g,A),getVariable:g=>nexusclient.variables().vars?.[g],setVariable:(g,A)=>{const I=nexusclient.variables();I.vars??={},I.vars[g]=A},getTarget:()=>null,setTarget:g=>{nexusclient.setTarget(g)},notice:(g,A)=>{if("function"==typeof nexusclient.add_html_line)return void nexusclient.add_html_line(renderNoticeHtml(g,A));const I=A&&"object"==typeof A?A.style:A;"function"==typeof nexusclient.writeLine&&nexusclient.writeLine(g,I)},displayHtmlLine:g=>{"function"==typeof nexusclient.add_html_line&&nexusclient.add_html_line(String(g))},getHostSettings,setHostSetting:(g,A)=>{getHostSettings()[g]=A},getHostLayoutSnapshot:()=>getHostLayout()?.model?.()?.global??{},updateHostLayoutAttributes,focusInput:()=>{nexusclient.focusInput?.()},getConfiguredDefences:resolveConfiguredDefences,getActiveDefences:resolveActiveDefences,gagCurrentBlock:()=>nexusclient.current_block?.forEach(g=>g.gag=!0),on:(g,I,C)=>{A.has(g)||A.set(g,new Map);const e=A.get(g),t=null!=C?.id?C:{...C,id:createDefaultListenerId(g,e)},n=eventStream.registerEvent(g,I,t);return A.get(g).set(n,I),()=>{eventStream.removeListener(g,n),removeTrackedHandler(A,g,n)}},off:(g,I)=>{eventStream.removeListener(g,I),removeTrackedHandler(A,g,I)},destroy:()=>{for(const[g,I]of A.entries())for(const A of I.keys())eventStream.removeListener(g,A);A.clear()}})},J=Object.freeze({"(hidden)":"orange","(none)":"orange",ashtan:"#990099",cyrene:"#009999",eleusis:"#00e600",hashan:"#999900",mhaldor:"#e60000",targossas:"#ffffff",garden:"yellow",underworld:"tomato"}),normalizePlayerCityKey=g=>{if(!isNonEmptyString(g))return"";const A=g.trim().toLowerCase();return"(hidden)"===A||"(none)"===A?A:A.replace(/\(.+?\)/g,"").replace(/,.*$/g,"").trim()},getPlayerCityColor=(g,A="orange")=>{const I=normalizePlayerCityKey(g);return I?J[I]??A:A},resolveRoomPlayerName=(g,A)=>isNonEmptyString(g)?g.trim():isPlainObject(g)?isNonEmptyString(g.name)?g.name.trim():isNonEmptyString(g.fullname)?A?.resolvePlayerNameFromFullname?.(g.fullname)??"":"":"",buildFallbackPlayerProfile=(g,A)=>{if(!isPlainObject(g))return null;const I={loaded:!0,name:A};return isNonEmptyString(g.city)&&(I.city=normalizePlayerCityKey(g.city)),isNonEmptyString(g.class)&&(I.class=g.class.trim()),isNonEmptyString(g.fullname)&&(I.fullname=g.fullname.trim()),"number"==typeof g.level&&Number.isFinite(g.level)?I.level=g.level:isNonEmptyString(g.level)&&(I.level=g.level.trim()),Object.keys(I).length>2?I:null},mergePlayerPresentationProfile=(g,A)=>g?A?{...A,...g,loaded:!0===g.loaded||!0===A.loaded}:g:A,resolvePlayerPresentationColor=({name:g,profile:A,playerDirectory:I}={})=>!0===A?.loaded&&isNonEmptyString(A.city)?getPlayerCityColor(A.city):I?.getPlayerColor?.(N(g))??"grey",q=Object.freeze(["ashtan","cyrene","eleusis","hashan","mhaldor","targossas","(none)","(hidden)","underworld","garden"]),_='<span style="color:#888888">No players are visible to Quick Who.</span>',$="#aaaaaa",gg="#00B1D2",Ag="#888888",Ig='<span style="color:#666666">, </span>',Cg="padding:0 10px 0 0;vertical-align:top;white-space:nowrap;min-width:5ch",eg="#ffffff",tg="#ff0000",toProperCase=g=>String(g).replace(/\b[a-z]/g,g=>g.toUpperCase()),resolveQuickWhoCity=g=>{const A=normalizePlayerCityKey(g);return q.includes(A)?A:"(none)"},renderQuickWhoName=({name:g,color:A,ally:I,enemy:C,cityEnemy:e})=>{const t=`<span style="${e?`color:${A};font-style:italic`:`color:${A}`}">${escapeHtml(g)}</span>`;if(I||C){const g=`<span style="color:${I?eg:tg};font-weight:bold">`;return`${g}(</span>${t}${g})</span>`}return t},renderQuickWhoHtml=(g,{totalLine:A}={})=>{const I=new Map;let C=0;for(const n of Array.isArray(g)?g:[]){if(!isNonEmptyString(n?.name))continue;const g=resolveQuickWhoCity(n.city);I.has(g)||I.set(g,[]),I.get(g).push({name:n.name.trim(),color:getPlayerCityColor(g),ally:!0===n.ally,enemy:!0===n.enemy,cityEnemy:!0===n.cityEnemy}),C+=1}if(0===C)return _;const e=q.filter(g=>I.has(g)).map(g=>{const A=I.get(g),C=A.map(renderQuickWhoName).join(Ig);return`<tr><td style="color:${getPlayerCityColor(g)};font-weight:bold;padding:0 10px 0 0;vertical-align:top;white-space:nowrap">${escapeHtml(toProperCase(g))}</td><td style="color:${$};${Cg}">(${A.length})</td><td style="vertical-align:top">${C}</td></tr>`}).join(""),t=`text-align:left;color:${gg};padding:0 10px 3px 0;white-space:nowrap`;return`<table style="border-collapse:collapse"><thead><tr><th style="${t}">City</th><th style="${t};min-width:5ch">Count</th><th style="text-align:left;color:${gg};padding:0 0 3px 0;white-space:nowrap">Players</th></tr></thead><tbody>${e}<tr><td colspan="3" style="color:${Ag};padding-top:3px">${escapeHtml(isNonEmptyString(A)?A:`Total: ${C} player${1===C?"":"s"}`)}</td></tr></tbody></table>`},cloneProfileValue=g=>Array.isArray(g)||isPlainObject(g)?structuredClone(g):g,sanitizeProfilePatch=(g={})=>{if(!isPlainObject(g))return{};const A={};for(const[I,C]of Object.entries(g))"name"!==I&&"regex"!==I&&"user"!==I&&("loaded"!==I?"city"!==I?"fullname"!==I?"source"!==I?"loadedAt"!==I&&"remoteSyncedAt"!==I?null!=C&&("string"!=typeof C?("number"==typeof C||"boolean"==typeof C||Array.isArray(C)||isPlainObject(C))&&(A[I]=cloneProfileValue(C)):C.trim().length>0&&(A[I]=C.trim())):"number"==typeof C&&Number.isFinite(C)?A[I]=C:null===C&&(A[I]=null):"local"!==C&&"public"!==C&&"remote"!==C||(A.source=C):isNonEmptyString(C)&&(A.fullname=C.trim()):isNonEmptyString(C)&&(A.city=normalizePlayerCityKey(C)):A.loaded=!0===C);return A},resolveFetch$1=g=>"function"==typeof g?g:null,createPlayerDirectoryModel=({fetchImpl:g,now:A=()=>0}={})=>{const I=new Map,C=new Map,e=new Map,t=new Map,n=new Set;let a=0;const notifyListeners=()=>{a+=1,n.forEach(g=>{try{g()}catch{}})},upsertProfile=(g,A={})=>{const t=N(g);if(!t)return;const n={...I.get(t)??{name:t,city:"",fullname:"",loaded:!1,source:"local",loadedAt:null,remoteSyncedAt:null},...sanitizeProfilePatch(A),name:t};I.set(t,n),e.set(normalizeLookupKey(t),t),isNonEmptyString(n.fullname)&&C.set(n.fullname.trim(),t),notifyListeners()},resolveStoredName=g=>{const A=N(g);return A?I.has(A)?A:e.get(normalizeLookupKey(A))??A:""},getStoredProfileByNormalizedName=g=>g&&I.has(g)?I.get(g)??null:null,getPlayerProfile=g=>{const A=getStoredProfileByNormalizedName(resolveStoredName(g));return A?{...A}:null},fetchCharacterProfile=async I=>{const C=N(I),e=resolveStoredName(I),n=normalizeLookupKey(I);if(!C)return null;if(t.has(n))return t.get(n);const a=resolveFetch$1(g);if("function"!=typeof a)return e?getPlayerProfile(e):null;const r=(async()=>{try{const g=await a(`https://api.achaea.com/characters/${C.toLowerCase()}.json`,{cache:"no-store"});if(!g.ok)return e?getPlayerProfile(e):null;const I=await g.json(),t=resolveStoredName(I?.name??C);return upsertProfile(t,{...I,loaded:!0,source:"public",loadedAt:A()}),getPlayerProfile(t)}catch{return e?getPlayerProfile(e):null}finally{t.delete(n)}})();return t.set(n,r),r},refreshPlayerProfile=async g=>{const A=await fetchCharacterProfile(g);if(A)return A;const I=resolveStoredName(g);return I?getPlayerProfile(I):null},subscribePlayerDirectory=g=>(n.add(g),()=>{n.delete(g)}),rememberPlayerStatus=({name:g,city:A,fullname:I,...C}={})=>{const e=N(g);e&&upsertProfile(e,{...C,name:e,city:A,fullname:I,loaded:!0})},rememberChannelPlayers=g=>{Array.isArray(g)&&g.forEach(g=>{const A=N(g?.name);A&&(upsertProfile(A,{fullname:g?.fullname}),I.get(A)?.loaded||fetchCharacterProfile(A))})},rememberRoomPlayers=g=>{Array.isArray(g)&&g.forEach(g=>{const A=N(g?.name??g);A&&(upsertProfile(A,{fullname:g?.fullname}),I.get(A)?.loaded||fetchCharacterProfile(A))})},resolvePlayerNameFromFullname=g=>{if(!isNonEmptyString(g))return"";const A=g.trim();return C.get(A)||N(A.split(/\s+/).at(-1))},getPlayerColorByNormalizedName=g=>{const A=getStoredProfileByNormalizedName(g);return A?.loaded&&A.city?getPlayerCityColor(A.city):"grey"},getPlayerColor=g=>getPlayerColorByNormalizedName(resolveStoredName(g)),resetPlayerDirectory=()=>{I.clear(),C.clear(),e.clear(),t.clear(),notifyListeners()},hydrateFromCacheEntries=g=>{Array.isArray(g)&&g.forEach(g=>{const A=N(g?.name);A&&upsertProfile(A,{...g,loaded:!0})})},hydrateFromRemoteEntries=g=>{if(!Array.isArray(g))return;const I=A();g.forEach(g=>{const A=N(g?.name);A&&upsertProfile(A,{...g,loaded:!0,source:"remote",remoteSyncedAt:I})})},getAllPlayerProfiles=()=>Array.from(I.values()).map(g=>({...g})),getKnownPlayerNames=()=>Array.from(I.keys()),destroy=()=>{I.clear(),C.clear(),e.clear(),t.clear(),n.clear()};return Object.freeze({getAllPlayerProfiles,getKnownPlayerNames,getPlayerColor,getPlayerColorByNormalizedName,getPlayerProfile,getVersion:()=>a,hydrateFromCacheEntries,hydrateFromRemoteEntries,refreshPlayerProfile,rememberChannelPlayers,rememberPlayerStatus,rememberRoomPlayers,resetPlayerDirectory,resolvePlayerNameFromFullname,subscribePlayerDirectory,destroy})},ng=createPlayerDirectoryModel(),getDefaultPlayerDirectoryModel=()=>ng,getPlayerProfile=g=>ng.getPlayerProfile(g),updateSetMembership=(g,A,I)=>{if(!A)return!1;const C=g.has(A);return I&&!C?(g.add(A),!0):!(I||!C||(g.delete(A),0))},normalizeNames=g=>Array.isArray(g)?new Set(g.map(g=>N(g)).filter(Boolean)):new Set,replaceSetContents=(g,A)=>{const I=normalizeNames(A);let C=!1;return[...g].forEach(A=>{I.has(A)||(g.delete(A),C=!0)}),I.forEach(A=>{g.has(A)||(g.add(A),C=!0)}),C},createPlayerRelationshipsModel=()=>{const g=new Set,A=new Set,I=new Set,C=new Set;let e=0;const notifyListeners=()=>{e+=1,C.forEach(g=>{try{g()}catch{}})},subscribePlayerRelationships=g=>(C.add(g),()=>{C.delete(g)}),rememberEnemyPlayer=I=>{const C=N(I),e=updateSetMembership(g,C,!0),t=updateSetMembership(A,C,!1);(e||t)&&notifyListeners()},rememberAllyPlayer=I=>{const C=N(I),e=updateSetMembership(A,C,!0),t=updateSetMembership(g,C,!1);(e||t)&&notifyListeners()},forgetEnemyPlayer=A=>{updateSetMembership(g,N(A),!1)&&notifyListeners()},forgetAllyPlayer=g=>{updateSetMembership(A,N(g),!1)&&notifyListeners()},rememberCityEnemyPlayer=g=>{updateSetMembership(I,N(g),!0)&&notifyListeners()},isEnemyPlayerByNormalizedName=A=>g.has(A),isAllyPlayerByNormalizedName=g=>A.has(g),isCityEnemyPlayerByNormalizedName=g=>I.has(g),isEnemyPlayer=g=>isEnemyPlayerByNormalizedName(N(g)),isAllyPlayer=g=>isAllyPlayerByNormalizedName(N(g)),isCityEnemyPlayer=g=>isCityEnemyPlayerByNormalizedName(N(g)),replaceEnemyPlayers=I=>{const C=normalizeNames(I);let e=replaceSetContents(g,[...C]);C.forEach(g=>{e=updateSetMembership(A,g,!1)||e}),e&&notifyListeners()},replaceAllyPlayers=I=>{const C=normalizeNames(I);let e=replaceSetContents(A,[...C]);C.forEach(A=>{e=updateSetMembership(g,A,!1)||e}),e&&notifyListeners()},replaceCityEnemyPlayers=g=>{replaceSetContents(I,g)&&notifyListeners()},trackRelationshipCommand=g=>{if(!isNonEmptyString(g))return;const A=g.trim(),I=A.match(/^enemy\s+(.+)$/i);if(I)return void rememberEnemyPlayer(I[1]);const C=A.match(/^ally\s+(.+)$/i);if(C)return void rememberAllyPlayer(C[1]);const e=A.match(/^city enemy\s+(.+)$/i);e&&rememberCityEnemyPlayer(e[1])},resetPlayerRelationships=()=>{g.clear(),A.clear(),I.clear(),notifyListeners()},destroy=()=>{g.clear(),A.clear(),I.clear(),C.clear()};return Object.freeze({forgetAllyPlayer,forgetEnemyPlayer,getVersion:()=>e,isAllyPlayer,isAllyPlayerByNormalizedName,isCityEnemyPlayer,isCityEnemyPlayerByNormalizedName,isEnemyPlayer,isEnemyPlayerByNormalizedName,rememberAllyPlayer,rememberCityEnemyPlayer,rememberEnemyPlayer,replaceAllyPlayers,replaceCityEnemyPlayers,replaceEnemyPlayers,resetPlayerRelationships,subscribePlayerRelationships,trackRelationshipCommand,destroy})},ag=createPlayerRelationshipsModel(),getDefaultPlayerRelationshipsModel=()=>ag,rg=25,cloneDiagnosticValue=g=>Array.isArray(g)?g.map(g=>cloneDiagnosticValue(g)):isPlainObject(g)?Object.fromEntries(Object.entries(g).map(([g,A])=>[g,cloneDiagnosticValue(A)])):g,toPublicEntry=({_signature:g,...A})=>cloneDiagnosticValue(A),buildSignature=({channel:g,action:A,status:I,name:C=null,detail:e=null})=>JSON.stringify([g,A,I,C,e]),createPlayerDirectoryDiagnosticsModel=({historyLimit:g=rg,now:A=()=>0}={})=>{let I=[],C={};const recordPlayerDirectoryDiagnostic=({channel:e,action:t,status:n,name:a=null,detail:r=null})=>{const o=buildSignature({channel:e,action:t,status:n,name:a,detail:r}),i=A(),l=I.at(-1);if(l?._signature===o)return l.at=i,l.count+=1,void(C[e]=toPublicEntry(l));I.push({at:i,channel:e,action:t,status:n,...a?{name:a}:{},...null==r?{}:{detail:cloneDiagnosticValue(r)},count:1,_signature:o}),I.length>g&&I.splice(0,I.length-g),C[e]=toPublicEntry(I.at(-1))},getPlayerDirectoryDiagnosticsSnapshot=()=>({latest:cloneDiagnosticValue(C),history:I.map(g=>toPublicEntry(g))}),resetPlayerDirectoryDiagnostics=()=>{I=[],C={}};return Object.freeze({getPlayerDirectoryDiagnosticsSnapshot,recordPlayerDirectoryDiagnostic,resetPlayerDirectoryDiagnostics,destroy:resetPlayerDirectoryDiagnostics})},og=createPlayerDirectoryDiagnosticsModel(),getDefaultPlayerDirectoryDiagnosticsModel=()=>og,recordPlayerDirectoryDiagnostic=g=>og.recordPlayerDirectoryDiagnostic(g),toInt=g=>{if("number"==typeof g)return Number.isFinite(g)?Math.trunc(g):null;if("string"!=typeof g)return null;const A=g.trim().replace(/,/g,"").replace(/(\d)\s*[kK]\b/g,"$1000").replace(/(\d)\s*[mM]\b/g,"$1000000");if(!A)return null;const I=Number.parseInt(A,10);return Number.isNaN(I)?null:I},ig=C.z.preprocess(g=>"string"==typeof g?g.trim():"",C.z.string()),lg=C.z.preprocess(toInt,C.z.number().int().nullable()),sg=C.z.object({name:C.z.preprocess(g=>"string"==typeof g?g.trim():"",C.z.string().min(1)),fullname:ig,city:ig,house:ig,class:ig,level:lg,mob_kills:lg,player_kills:lg,xp_rank:lg,explorer_rank:lg,user:C.z.string().trim().min(1).optional()}),cg=Object.freeze({DISABLED:"disabled",OK:"ok",UNAVAILABLE:"unavailable",REJECTED:"rejected"}),httpStatusToRemoteStatus=g=>401===g||403===g?cg.REJECTED:g>=500||0===g?cg.UNAVAILABLE:g>=200&&g<300?cg.OK:cg.UNAVAILABLE,createNullRemotePlayerService=()=>({checkAvailability:async()=>cg.DISABLED,hydrateDirectory:async()=>({ok:!1,remoteStatus:cg.DISABLED}),upsertProfile:async()=>({ok:!1,remoteStatus:cg.DISABLED}),deleteProfile:async()=>({ok:!1,remoteStatus:cg.DISABLED}),queryCharacters:async()=>[]}),createLambdaRemotePlayerService=({apiUrl:g,apiKey:A="",fetchFn:I=null}={})=>{if("string"!=typeof g||!g.trim())return createNullRemotePlayerService();const C=g.trim(),e="function"==typeof I?I:null,call=async({method:g,params:I={},body:t})=>{const n=new URLSearchParams;for(const[A,C]of Object.entries(I))void 0!==C&&n.set(A,String(C));const a=n.toString()?`${C}?${n}`:C,r={"Content-Type":"application/json"};A&&(r["x-api-key"]=A);const o={method:g,headers:r};void 0!==t&&(o.body=JSON.stringify(t));const i=await e(a,o);return{status:i.status,ok:i.ok,response:i}};return{checkAvailability:async()=>{if("function"!=typeof e)return cg.UNAVAILABLE;try{const{status:g}=await call({method:"GET",params:{check:"auth"}});return httpStatusToRemoteStatus(g)}catch{return cg.UNAVAILABLE}},hydrateDirectory:async()=>{if("function"!=typeof e)return{ok:!1,remoteStatus:cg.UNAVAILABLE};try{const{status:g,ok:A,response:I}=await call({method:"GET"}),C=httpStatusToRemoteStatus(g);if(!A)return{ok:!1,remoteStatus:C};const e=await I.json();return{ok:!0,entries:Array.isArray(e)?e:[],remoteStatus:cg.OK}}catch{return{ok:!1,remoteStatus:cg.UNAVAILABLE}}},upsertProfile:async g=>{if("function"!=typeof e)return{ok:!1,remoteStatus:cg.UNAVAILABLE};const A=sg.safeParse(g);if(!A.success)return{ok:!1,remoteStatus:cg.REJECTED};try{const{status:g,ok:I}=await call({method:"POST",body:A.data});return{ok:I,remoteStatus:httpStatusToRemoteStatus(g)}}catch{return{ok:!1,remoteStatus:cg.UNAVAILABLE}}},deleteProfile:async g=>{if("function"!=typeof e)return{ok:!1,remoteStatus:cg.UNAVAILABLE};try{const{status:A,ok:I}=await call({method:"DELETE",params:{name:g}});return{ok:I,remoteStatus:httpStatusToRemoteStatus(A)}}catch{return{ok:!1,remoteStatus:cg.UNAVAILABLE}}},queryCharacters:async g=>{if("function"!=typeof e)return[];if(!g||"object"!=typeof g||Array.isArray(g)||0===Object.keys(g).length)return[];try{const{ok:A,response:I}=await call({method:"GET",params:{filter:JSON.stringify(g)}});if(!A)return[];const C=await I.json();return Array.isArray(C)?C:[]}catch{return[]}}}},ug="playerDirectory",mg="function"==typeof queueMicrotask?queueMicrotask:g=>Promise.resolve().then(g),resolvePlayerDirectory$1=g=>g??getDefaultPlayerDirectoryModel(),resolveDiagnostics=g=>g??getDefaultPlayerDirectoryDiagnosticsModel(),resolveCacheReader=(g,A)=>"function"==typeof g?g:"function"==typeof g?.readCache?g.readCache.bind(g):"function"==typeof A?A:null,resolveCacheWriter=(g,A)=>"function"==typeof g?g:"function"==typeof g?.writeCache?g.writeCache.bind(g):"function"==typeof A?A:null,parseStoredSnapshot=g=>Array.isArray(g)?g:null,createSnapshotSaver=(g,A)=>I=>{"function"==typeof I&&I(A,g.getAllPlayerProfiles().filter(g=>g.loaded&&(g.city||g.fullname)))},createPlayerDirectoryLifecycle=({playerDirectory:g,diagnostics:A,readCache:I,writeCache:C,storageKey:e=ug}={})=>{const t=resolvePlayerDirectory$1(g),n=resolveDiagnostics(A),a=createSnapshotSaver(t,e);let r=!1,o=null,i=!1,l=!1;const recordDiagnostic=g=>n.recordPlayerDirectoryDiagnostic(g),isDirectorySeeded=()=>r,resetSeededFlag=()=>{r=!1},warmDirectoryFromCache=g=>{const A=resolveCacheReader(g,I);try{const g=A?.(e),I=parseStoredSnapshot(g);null!==I&&I.length>0&&t.hydrateFromCacheEntries(I)}catch{}finally{r=!0}},saveDirectorySnapshot=g=>{a(resolveCacheWriter(g,C))},subscribePersistence=g=>{const A=resolveCacheWriter(g,C);if(o?.(),o=null,i=!1,l=!0,"function"!=typeof A||"function"!=typeof t.subscribePlayerDirectory)return l=!1,()=>{};const scheduleSave=()=>{l&&!i&&(i=!0,mg(()=>{i=!1,l&&saveDirectorySnapshot(A)}))};return o=t.subscribePlayerDirectory(scheduleSave),()=>{l=!1,o?.(),o=null}},refreshDirectoryFromRemote=async(g,A)=>{try{const I=await g.hydrateDirectory(),C=Array.isArray(I?.entries)?I.entries.length:0;recordDiagnostic({channel:"remote",action:"hydrateDirectory",status:I?.remoteStatus??cg.UNAVAILABLE,detail:{ok:!0===I?.ok,entryCount:C}}),I.ok&&Array.isArray(I.entries)&&I.entries.length>0&&(t.hydrateFromRemoteEntries(I.entries),saveDirectorySnapshot(A))}catch{recordDiagnostic({channel:"remote",action:"hydrateDirectory",status:cg.UNAVAILABLE,detail:{ok:!1,exception:!0}})}},reset=()=>{r=!1,i=!1,l=!1,o?.(),o=null,n.resetPlayerDirectoryDiagnostics?.()};return Object.freeze({destroy:reset,isDirectorySeeded,refreshDirectoryFromRemote,reset,resetSeededFlag,saveDirectorySnapshot,subscribePersistence,warmDirectoryFromCache})},dg=createPlayerDirectoryLifecycle(),isDirectorySeeded=()=>dg.isDirectorySeeded(),ACHAEA_CHARACTER_URL=g=>`https://api.achaea.com/characters/${g.toLowerCase()}.json`,pg=Object.freeze({OK:"ok",AUTHORITATIVE_FAILURE:"authoritative_failure",TRANSIENT_FAILURE:"transient_failure"}),fetchPublicProfileForSync=async(g,{fetchFn:A=null}={})=>{if("function"!=typeof A)return{outcome:pg.TRANSIENT_FAILURE,data:null};try{const I=await A(ACHAEA_CHARACTER_URL(g),{method:"GET",cache:"no-store"});if(!I.ok)return{outcome:I.status>=500?pg.TRANSIENT_FAILURE:pg.AUTHORITATIVE_FAILURE,data:null};const C=await I.json();return{outcome:pg.OK,data:C}}catch{return{outcome:pg.TRANSIENT_FAILURE,data:null}}},normalizeCrowdsourceCity=(g,A,{getPlayerProfile:I=getPlayerProfile}={})=>{if("Romeo"===A||"Juliet"===A)return"garden";const C="string"==typeof g?.city?g.city:"";if(""===C)return"garden";if("(hidden)"===C.toLowerCase()){const g=I(A)?.city??"";return g&&"(hidden)"!==g?g:"(none)"}return C},createCrowdsourceSyncHandler=({remoteService:g,getSelfName:A=()=>null,getPlayerProfile:I=getPlayerProfile,isSeeded:C=isDirectorySeeded,recordDiagnostic:e=recordPlayerDirectoryDiagnostic,fetchFn:t=null,fetchProfileForSync:n=g=>fetchPublicProfileForSync(g,{fetchFn:t}),maxConcurrent:a=3})=>{let r=[];const o=new Set,i=[],processOneName=async C=>{const t=A();if(t&&C===t)return;const{outcome:a,data:r}=await n(C);if(a===pg.OK&&r){const A=normalizeCrowdsourceCity(r,C,{getPlayerProfile:I}),n={...r,city:A};t&&(n.user=t);const a=await g.upsertProfile(n);return void(a?.ok||e({channel:"crowdsource",action:"upsertProfile",status:a?.remoteStatus??"unavailable",name:C}))}if(a===pg.AUTHORITATIVE_FAILURE){e({channel:"crowdsource",action:"publicProfileFetch",status:pg.AUTHORITATIVE_FAILURE,name:C});const A=await g.deleteProfile(C);return void e({channel:"crowdsource",action:"deleteProfile",status:A?.remoteStatus??"unavailable",name:C,detail:{ok:!0===A?.ok}})}e({channel:"crowdsource",action:"publicProfileFetch",status:pg.TRANSIENT_FAILURE,name:C})},drainQueue=()=>{for(;o.size<a&&i.length>0;){const g=i.shift();g&&!o.has(g)&&(o.add(g),processOneName(g).finally(()=>{o.delete(g),drainQueue()}))}},enqueue=g=>{for(const A of g)o.has(A)||i.includes(A)||i.push(A);drainQueue()};return g=>{if(!C())return;if(!Array.isArray(g))return;const A=g.map(g=>"string"==typeof g?.name?g.name.trim():"").filter(Boolean),I=A.filter(g=>!r.includes(g));r=[...A],I.length>0&&enqueue(I)}},isPresent=g=>null!=g&&String(g).length>0,classAttribute=g=>isPresent(g)?` class="${escapeHtml(g)}"`:"",styleAttribute$1=(g={})=>{const A=Object.entries(g??{}).filter(([,g])=>isPresent(g)).map(([g,A])=>`${escapeHtml(g)}:${escapeHtml(A)}`).join(";");return A?` style="${A};"`:""},titleAttribute=g=>isPresent(g)?` title="${escapeHtml(g)}"`:"",span=(g,{className:A=null,style:I=null}={})=>`<span${classAttribute(A)}${styleAttribute$1(I)}>${g}</span>`,textNode=g=>({kind:"text",text:g}),classTextNode=(g,A)=>({kind:"class-text",className:g,text:A}),styledTextNode=(g,{className:A=null,fg:I=null,bg:C=null}={})=>({kind:"styled-text",className:A,text:g,fg:I,bg:C}),relationshipNameNode=g=>({kind:"relationship-name",descriptor:g}),iconBandingNode=({icon:g,colors:A,size:I,children:C})=>({kind:"icon-banding",icon:g,colors:A,size:I,children:C}),hg=Object.freeze({className:"ng-target-format",borderColor:"rgb(255, 0, 0)",boxShadow:"inset 0 0 0 1px rgb(255, 0, 0)",padding:"0 2px"}),yg=Object.freeze({ally:Object.freeze({className:"ng-brkt ng-brkt-ally",color:"#ffffff",open:"(",close:")"}),enemy:Object.freeze({className:"ng-brkt ng-brkt-enemy",color:"#ff0000",open:"(",close:")"})}),createRelationshipNameDescriptor=(g,A={})=>{if(!isNonEmptyString(g))return null;const I={family:"inline-name",text:g.trim(),color:A.color??"grey",italic:Boolean(A.isCityEnemy),target:Boolean(A.isTarget),bracket:null,targetStyle:hg};return A.isAlly?I.bracket=yg.ally:A.isEnemy&&(I.bracket=yg.enemy),I},createPlayerRelationshipDescriptor=(g,A={})=>{if(!isNonEmptyString(g))return null;const I=g.trim(),C=isNonEmptyString(A.targetName)?A.targetName.trim():"",e=Boolean(A.isAlly),t=Boolean(A.isEnemy),n=Boolean(A.isCityEnemy),a=A.isTarget??(!1!==A.targetFormatting&&C.length>0&&C===I);return createRelationshipNameDescriptor(I,{color:A.color??"grey",isAlly:e,isEnemy:t,isCityEnemy:n,isTarget:a})},renderBracket=(g,A)=>`<span class="${g.className}"${styleAttribute$1({color:g.color,"font-weight":"bold"})}>${escapeHtml(A)}</span>`,renderRelationshipNameHtml=g=>{if(!g)return"";const A=`<span${styleAttribute$1({color:g.color,"font-style":g.italic?"italic":null})}>${escapeHtml(g.text)}</span>`,I=g.bracket?[renderBracket(g.bracket,g.bracket.open),A,renderBracket(g.bracket,g.bracket.close)].join(""):A;return g.target?`<span class="${g.targetStyle.className}"${styleAttribute$1({"box-shadow":g.targetStyle.boxShadow??`inset 0 0 0 1px ${g.targetStyle.borderColor}`,padding:g.targetStyle.padding})}>${I}</span>`:I},fg=Object.freeze({original:" ".repeat(8),adjusted:" ".repeat(6)}),bg=new WeakMap,isAsciiUppercase=g=>{if("string"!=typeof g||0===g.length)return!1;const A=g.charCodeAt(0);return A>=65&&A<=90},isNameCharacter=g=>{if("string"!=typeof g||0===g.length)return!1;if("'"===g||"-"===g)return!0;const A=g.charCodeAt(0);return A>=65&&A<=90||A>=97&&A<=122},extractUniqueWords=g=>{const A="string"==typeof g?g.match(/[A-Z][A-Za-z'-]*/g):null;return A?[...new Set(A)]:[]},resolveDescriptorFactory=({createDescriptor:g,relationshipFormatter:A}={})=>"function"==typeof g?g:"function"==typeof A?A:"function"==typeof A?.createDescriptor?A.createDescriptor:null,resolveCompiledHighlighter=g=>{const A=g?.compiledHighlighter;return A&&Array.isArray(A.namesByLength)&&A.entries instanceof Map&&0!==A.entries.size?A:null},getCompiledInitialCharacters=g=>{const A=bg.get(g);if(A)return A;const I=new Set;return g.entries.forEach((g,A)=>{"string"==typeof A&&A.length>0&&I.add(A.charAt(0))}),bg.set(g,I),I},hasPotentialCompiledMatch=(g,A)=>{if("string"!=typeof g||0===g.length)return!1;const I=getCompiledInitialCharacters(A);for(let C=0;C<g.length;C+=1)if(I.has(g.charAt(C)))return!0;return!1},resolvePossessiveBaseName=(g,A)=>{if("string"!=typeof g||!(A instanceof Map))return null;const I=g.endsWith("'s")||g.endsWith("'S")?2:g.endsWith("'")?1:0;if(0===I)return null;const C=g.slice(0,g.length-I);return A.has(C)?C:null},applyCompiledHighlighting=(g,A,I)=>{if(!hasPotentialCompiledMatch(g.text(),A))return!1;const C=g.formatted();if("string"!=typeof C||0===C.length)return!1;let e=0,t=0,n=null,a=!1;for(;e<C.length;){const g=C.charAt(e);if("<"===g){const g=C.indexOf(">",e+1);if(-1===g)break;e=g+1;continue}if(!isAsciiUppercase(g)){e+=1;continue}let r=e+1;for(;r<C.length&&isNameCharacter(C.charAt(r));)r+=1;const o=C.slice(e,r),i=A.entries.has(o)?o:resolvePossessiveBaseName(o,A.entries),l=i?A.entries.get(i):null;l?(null===n?n=[C.slice(0,e)]:n.push(C.slice(t,e)),n.push(l.html),t=e+i.length,e=r,I&&l.adjustsMonospacePadding&&(a=!0)):e=r}if(null===n)return!1;let r=n.join("")+C.slice(t);return a&&(r=r.replace(fg.original,fg.adjusted)),g.formatted=()=>r,!0},buildReplacementMapFromDescriptors=(g,A)=>{const I=new Map;return g.forEach(g=>{const C=A(g);C&&"grey"!==C.color&&I.set(g,{html:renderRelationshipNameHtml(C),bracketed:Boolean(C.bracket),adjustsMonospacePadding:Boolean(C.bracket)})}),I},applyInlineNameHighlighting=(g,{createDescriptor:A,relationshipFormatter:I,monospace:C=!1}={})=>{if(!g||g.nexSkillReplacement||"function"!=typeof g.text||"function"!=typeof g.formatted)return!1;const e=resolveCompiledHighlighter(I);if(e)return applyCompiledHighlighting(g,e,C);const t=resolveDescriptorFactory({createDescriptor:A,relationshipFormatter:I});if(!t)return!1;const n=buildReplacementMapFromDescriptors(extractUniqueWords(g.text()),t);if(0===n.size)return!1;const a=g.formatted();if("string"!=typeof a||0===a.length)return!1;let r=a,o=!1;for(const i of[...n.keys()].sort((g,A)=>A.length-g.length)){const g=n.get(i);g&&r.includes(i)&&(r=r.split(i).join(g.html),C&&g.adjustsMonospacePadding&&(r=r.replace(fg.original,fg.adjusted)),o=!0)}return!!o&&(g.formatted=()=>r,!0)},sortNamesByLengthDesc=(g,A)=>A.length-g.length,normalizeKnownNames=g=>{if(!Array.isArray(g))return[];const A=new Set,I=[];return g.forEach(g=>{const C=N(g);C&&!A.has(C)&&(A.add(C),I.push(C))}),I},createCompiledInlineHighlighter=({knownNames:g=[],createDescriptor:A}={})=>{const I=new Map,C=normalizeKnownNames(g);return"function"!=typeof A||0===C.length?Object.freeze({namesByLength:Object.freeze([]),entries:I}):(C.forEach(g=>{const C=A(g);C&&"grey"!==C.color&&I.set(g,Object.freeze({html:renderRelationshipNameHtml(C),bracketed:Boolean(C.bracket),adjustsMonospacePadding:Boolean(C.bracket)}))}),Object.freeze({namesByLength:Object.freeze(C.filter(g=>I.has(g)).sort(sortNamesByLengthDesc)),entries:I}))},callPredicate=(g,A)=>{if("function"!=typeof g)return!1;try{return Boolean(g(A))}catch{return!1}},callColorResolver=(g,A)=>{if("function"!=typeof g)return"grey";try{return g(A)??"grey"}catch{return"grey"}},readKnownNames=g=>{if(Array.isArray(g))return g;if("function"!=typeof g)return[];try{const A=g();return Array.isArray(A)?A:[]}catch{return[]}},createRelationshipNameFormatter=(g={})=>{const A=N(g.targetName),I=!1!==g.allyEnemyFormatting,C=!1!==g.targetFormatting,e=g.getPlayerColorByNormalizedName??g.getPlayerColor,t=g.isAllyPlayerByNormalizedName??g.isAllyPlayer,n=g.isEnemyPlayerByNormalizedName??g.isEnemyPlayer,a=g.isCityEnemyPlayerByNormalizedName??g.isCityEnemyPlayer,r=Array.isArray(g.knownPlayerNames)||"function"==typeof g.getKnownPlayerNames,o=readKnownNames(g.knownPlayerNames??g.getKnownPlayerNames),i=new Set(o.map(N).filter(Boolean)),createDescriptor=(g,o={})=>{const l=N(g),s=N(o.text)||l;if(!l||!s)return null;const c=o.isAlly??(I&&callPredicate(t,l)),u=o.isEnemy??callPredicate(n,l),m=o.isCityEnemy??callPredicate(a,l),d=o.isTarget??(C&&(!r||i.has(l))&&A.length>0&&A===l);return createPlayerRelationshipDescriptor(s,{color:o.color??callColorResolver(e,l),isAlly:c,isEnemy:u,isCityEnemy:m,isTarget:d})},l=createCompiledInlineHighlighter({knownNames:o,createDescriptor});return Object.freeze({compiledHighlighter:l,createDescriptor,renderHtml:(g,A={})=>renderRelationshipNameHtml(createDescriptor(g,A))})},getUiSettings$3=g=>g?.persistenceStore?.getAll?.()?.ui??{},getTargetState$1=g=>g?.stores?.target?.getState?.()??{},xg=Object.freeze(["allyEnemyFormatting","targetFormatting","targetName","playerDirectory","playerDirectoryVersion","playerRelationships","playerRelationshipsVersion"]),vg=new WeakMap,Eg=null,readModelVersion=g=>{if("function"!=typeof g?.getVersion)return null;try{return g.getVersion()}catch{return null}},createFormatterSignature=(g,A={})=>{const I=getUiSettings$3(g),C=getTargetState$1(g),e=A.playerDirectory??g?.playerDirectory??null,t=A.playerRelationships??g?.playerRelationships??null;return{allyEnemyFormatting:!1!==I.allyEnemyFormatting,targetFormatting:!1!==I.targetFormatting,targetName:N(A.targetName??(C.isPlayer?C.name:null)??null),playerDirectory:e,playerDirectoryVersion:readModelVersion(e),playerRelationships:t,playerRelationshipsVersion:readModelVersion(t)}},signaturesEqual$1=(g,A)=>null!==g&&null!==A&&xg.every(I=>Object.is(g[I],A[I])),readCachedFormatter=g=>g&&"object"==typeof g?vg.get(g)??null:Eg,writeCachedFormatter=(g,A)=>g&&"object"==typeof g?(vg.set(g,A),A):(Eg=A,A),createFormatterFromSignature=g=>{const{playerDirectory:A,playerRelationships:I}=g;return createRelationshipNameFormatter({allyEnemyFormatting:g.allyEnemyFormatting,targetFormatting:g.targetFormatting,targetName:g.targetName,getKnownPlayerNames:A?.getKnownPlayerNames?.bind(A),getPlayerColor:A?.getPlayerColor?.bind(A),getPlayerColorByNormalizedName:A?.getPlayerColorByNormalizedName?.bind(A),isAllyPlayer:I?.isAllyPlayer?.bind(I),isAllyPlayerByNormalizedName:I?.isAllyPlayerByNormalizedName?.bind(I),isEnemyPlayer:I?.isEnemyPlayer?.bind(I),isEnemyPlayerByNormalizedName:I?.isEnemyPlayerByNormalizedName?.bind(I),isCityEnemyPlayer:I?.isCityEnemyPlayer?.bind(I),isCityEnemyPlayerByNormalizedName:I?.isCityEnemyPlayerByNormalizedName?.bind(I)})},clearRelationshipNameFormatterCache=g=>{g&&"object"==typeof g?vg.delete(g):(void 0===g&&(vg=new WeakMap),Eg=null)},createRelationshipNameFormatterFromContext=(g,A={})=>{const I=createFormatterSignature(g,A),C=readCachedFormatter(g);if(signaturesEqual$1(C?.signature??null,I))return C.formatter;const e=createFormatterFromSignature(I);return writeCachedFormatter(g,{signature:I,formatter:e}),e},applyContextInlineNameHighlighting=(g,{contextValue:A=null,monospace:I=!1}={})=>applyInlineNameHighlighting(g,{relationshipFormatter:createRelationshipNameFormatterFromContext(A),monospace:I}),highlightInlineNamesInText=(g,{contextValue:A=null}={})=>{const I={text:()=>g,formatted:()=>g};return applyContextInlineNameHighlighting(I,{contextValue:A})?{content:I.formatted(),isHtml:!0}:{content:g,isHtml:void 0}},wg=deepFreeze([["a CRITICAL","2x"],["CRUSHING","4x"],["OBLITERATING","8x"],["ANNIHILATINGLY","16x"],["WORLD","32x"],["PLANE","64x"],["coalescence of power","MAYA"]]),Rg=deepFreeze({"physical cutting":"#708090","physical blunt":"#708090",magical:"#FFFFFF",poison:"#9ACD32",psychic:"#663399",fire:"#8B0000",cold:"#87CEFA",electricity:"#FFD700",asphyxiation:"#D2B48C",raw:"#FFB6C1",unblockable:"#FFB6C1"}),Sg=deepFreeze({attack:"orange",battlerage:"yellow",affliction:"red"}),Mg=deepFreeze({attainment:"yellow",gear:"plum"}),Tg=deepFreeze({eat:{id:"eat",fg:"gold",text:"Eat: ",banding:["{","}"]},smoke:{id:"smoke",fg:"orchid",text:"Smoke: ",banding:["{","}"]},apply:{id:"apply",fg:"aquamarine",text:"Apply: ",banding:["{","}"]},sip:{id:"sip",fg:"HotPink",text:"Sip: ",banding:["{","}"]},focus:{id:"focus",fg:"BlueViolet",text:"Focus",banding:["{","}"]},tattoo:{id:"tattoo",fg:"cornflowerBlue",text:"Tattoo: ",banding:["||","||"]},shield:{id:"shield",fg:"cyan",text:" Shield ",banding:{icon:"shield-cross",colors:["cyan","goldenrod"],size:16}},rebounding:{id:"rebounding",fg:"white",text:" Rebounding ",banding:{icon:"shield-cross",colors:["white","goldenrod"],size:16}},prismatic:{id:"prismatic",fg:"yellow",text:" Prismatic ",banding:{icon:"shield-cross",colors:["goldenrod","white"],size:16}},tree:{id:"tree",fg:"lawngreen",text:" Tree ",banding:{icon:"tree",colors:["green","brown"],size:16}},npcslain:{id:"npcslain",fg:"red",text:" SLAIN ",banding:{icon:"tombstone",colors:["grey","white"],size:18}}}),Ng=deepFreeze({id:"default",fg:"grey",text:"Action",bg:"",banding:["[","]"]}),toDamageSlug$1=g=>g.toLowerCase().replace(/\s+/g,"-"),getSkillColor=g=>Mg[g]??"orange",getSkillClass=g=>g&&Mg[g]?`ng-skill-${g}`:"ng-skill-default",getUserActionDefinition=g=>Tg[g]??{...Ng,id:g},getUserActionClass=g=>g&&Tg[g]?`ng-action-${g}`:"ng-action-default",getDamageClass=g=>g&&void 0!==Rg[g]?`ng-dmg-${toDamageSlug$1(g)}`:"ng-dmg-unknown",hpPercentToColor=g=>{if(null==g||!Number.isFinite(g))return"grey";const A=Math.max(0,Math.min(100,g)),I=1.2*A,C=(A<75?50:Math.abs(A-100)/2+25)/100,k=g=>(g+I/30)%12,e=1*Math.min(C,1-C),f=g=>C-e*Math.max(-1,Math.min(k(g)-3,Math.min(9-k(g),1))),toHex=g=>Math.round(255*g).toString(16).padStart(2,"0");return`#${toHex(f(0))}${toHex(f(8))}${toHex(f(4))}`},Gg="You",createSegment=(g,A=null,I=!1)=>({text:g,fg:A,bg:null,bold:I}),resolvePatternLength$1=g=>{const A=trimToEmpty(g?.matchType),I=g?.patterns?.[A];return Array.isArray(I)?I.length:0},createNameDescriptor=(g,{relationshipFormatter:A,selfName:I,selfText:C,targetName:e})=>{const t=trimToEmpty(g);return t?"self"===t||I&&t===I?createRelationshipNameDescriptor(C,{color:"lightpink",isTarget:e===t}):"function"==typeof A?.createDescriptor?A.createDescriptor(t,{text:t}):createRelationshipNameDescriptor(t,{color:"grey",isAlly:!1,isEnemy:!1,isCityEnemy:!1,isTarget:e===t}):null},createPreviewSegments=({actor:g,actionLabel:A,actionColor:I,target:C,info:e})=>{const t=[];if(g){const A=g.bracket?`${g.bracket.open}${g.text}${g.bracket.close}`:g.text;t.push(createSegment(A,g.color)),t.push(createSegment(" "))}if(isNonEmptyString(A)&&t.push(createSegment(A.trim(),I,!0)),C){t.push(createSegment(" "));const g=C.bracket?`${C.bracket.open}${C.text}${C.bracket.close}`:C.text;t.push(createSegment(g,C.color))}return isNonEmptyString(e)&&(t.push(createSegment(" ")),t.push(createSegment(`[${toDisplayName(e)}]`,"cadetblue"))),t},createReplacementDescriptor=(g,A,I={})=>{if("nexSkillMatch"!==g&&"nexSkillNpcMatch"!==g)return null;if(!A||"object"!=typeof A||Array.isArray(A))return null;const C=trimToEmpty(I.selfName),e=trimToEmpty(I.selfText)||Gg,t=trimToEmpty(I.targetName),n=I.relationshipFormatter,a="nexSkillNpcMatch"===g?"npc":"user",r="user"===a?getUserActionDefinition(A.id):null,o=createNameDescriptor(A.user,{relationshipFormatter:n,selfName:C,selfText:e,targetName:t}),i=createNameDescriptor(A.target,{relationshipFormatter:n,selfName:C,selfText:e,targetName:t}),l=trimToEmpty(A.fullName)||toDisplayName(A.skill||A.id),s="npc"===a?Array.isArray(A.tags)&&A.tags.length>0?A.tags.map(toDisplayName).join(", "):l:trimToEmpty(r?.text)||l,c="npc"===a?"red":r?.fg??getSkillColor(A.skill),u=createPreviewSegments({actor:o,actionLabel:s,actionColor:c,target:i,info:A.info}),m=u.map(g=>g.text).join(""),d=Math.max(resolvePatternLength$1(A)-1,0);return{family:"skill",eventName:g,buffer:"combat",variant:a,id:trimToEmpty(A.id),matchType:trimToEmpty(A.matchType),skill:{id:trimToEmpty(A.skill),name:l,color:getSkillColor(A.skill)},actor:o,target:i,tags:Array.isArray(A.tags)?A.tags.map(trimToEmpty).filter(Boolean):[],info:isNonEmptyString(A.info)?A.info.trim():null,userAction:r,hostMutation:{replaceCurrentLine:!0,companionLineCount:d,tooltipSource:"npc"===a&&Array.isArray(A.tags)&&A.tags.includes("damage")&&"self"===A.target?"health-lost":null},preview:{tag:"npc"===a?"«npc»":"[act]",tagColor:c,text:m,segments:u},metadata:{actionTypeColors:Sg,critLabels:wg,damageColors:Rg}}},kg=Object.freeze({fg:null,bg:null,bold:!1}),createPlainSegment=g=>({text:g,...kg}),extractName=g=>extractNamedValue(g),createStructuredLine=(g,A,I,C,e,t={})=>({type:"combat"===e?"combat":"system",buffer:e,segments:[createPlainSegment(C)],metadata:{event:g,tag:A,tagColor:I,details:t}}),pickDefined=(g,A=null)=>void 0===g?A:g,resolveSkillReplacementDetails=(g,A)=>{if(!isPlainObject(A))return null;const I=isPlainObject(A.sourcePayload)?A.sourcePayload:A,C=isPlainObject(A.replacement)?A.replacement:createReplacementDescriptor(g,I);return C?{replacement:C,context:A.context??A.replacementContext,crit:pickDefined(A.crit),damage:pickDefined(A.damage),healthLost:Array.isArray(A.healthLost)?A.healthLost:[],tooltip:pickDefined(A.tooltip),originalLine:pickDefined(A.originalLine),matchType:"string"==typeof A.matchType?A.matchType:C.matchType,actorId:"string"==typeof A.actorId?A.actorId:"string"==typeof I.user?I.user.trim():null,targetHpText:pickDefined(A.targetHpText),targetHpPercent:pickDefined(A.targetHpPercent),hpDeltaText:pickDefined(A.hpDeltaText),sourcePayload:I}:null},createSkillReplacementLine=(g,A)=>{const I=resolveSkillReplacementDetails(g,A);if(!I)return null;const{replacement:C}=I,e=C.preview??{};return{type:"replacement",buffer:"system"===C.buffer?"system":"combat",segments:Array.isArray(e.segments)?e.segments:[],metadata:{event:g,tag:"string"==typeof e.tag?e.tag:"",tagColor:"string"==typeof e.tagColor?e.tagColor:null,details:I}}},parsePercent$1=g=>{if(null==g)return null;const A=Number.parseInt(String(g).replace("%",""),10);return Number.isNaN(A)?null:A},extractTargetEventId=g=>{if(!isPlainObject(g))return null;const A=g.id??g.target;return"number"==typeof A&&Number.isFinite(A)?String(A):toTrimmedString(A)},extractTargetEventLabel=g=>toTrimmedString(g?.short_desc)??toTrimmedString(g?.name)??toTrimmedString(g?.text)??(extractTargetEventId(g)?`Target ${extractTargetEventId(g)}`:null),getTargetHpValue=g=>g?.hpperc??g?.hpPercent??g?.hp??null,hasNexsysTargetIdentityChange=g=>{const A=isPlainObject(g?.changedFields)?g.changedFields:null;return!A||["id","target","text","name","short_desc"].some(g=>Object.prototype.hasOwnProperty.call(A,g))},createTargetLine=(g,A,I)=>createStructuredLine(g,"[Target]","red",I,"combat",{id:extractTargetEventId(A),hpPercent:parsePercent$1(getTargetHpValue(A)),shortDescription:toTrimmedString(A?.short_desc)??toTrimmedString(A?.text)}),parseStreamEventLine=(g,A)=>{switch(g){case"Char.Defences.Add":{const I=extractName(A);return I?createStructuredLine(g,"+def","lawngreen",toDisplayName(I),"system",{name:I,direction:"gained",description:A&&"object"==typeof A&&!Array.isArray(A)?A.desc??null:null}):null}case"Char.Defences.Remove":{const I=extractName(A);return I?createStructuredLine(g,"-def","crimson",toDisplayName(I),"system",{name:I,direction:"lost"}):null}case"Char.Afflictions.Add":{const I=extractName(A);return I?createStructuredLine(g,"+aff","crimson",toDisplayName(I),"system",{name:I,direction:"gained",description:A&&"object"==typeof A&&!Array.isArray(A)?A.desc??null:null}):null}case"Char.Afflictions.Remove":{const I=extractName(A);return I?createStructuredLine(g,"-aff","lawngreen",toDisplayName(I),"system",{name:I,direction:"lost"}):null}case"nexsys4.system.target.changed":{if(!isPlainObject(A)||!hasNexsysTargetIdentityChange(A))return null;const I=extractTargetEventLabel(A);return I?createTargetLine(g,A,I):null}case"nexsys4.serverside.aff.priority.set":case"nexsys4.serverside.def.priority.set":{if(!isPlainObject(A))return null;const I="string"==typeof A.id&&A.id.trim().length>0?A.id.trim():null,C="number"==typeof A.priority&&Number.isFinite(A.priority)?A.priority:null;return I&&null!=C?createStructuredLine(g,`[Prio] ${C}`,"deepskyblue",toDisplayName(I),"system",{id:I,priority:C,accepted:!0===A.accepted,kind:g.includes(".aff.")?"affliction":"defence"}):null}case"nexSkillMatch":case"nexSkillNpcMatch":return createSkillReplacementLine(g,A);default:return null}},styleAttribute=g=>{const A=Object.entries(g).filter(([,g])=>g);return 0===A.length?"":` style="${A.map(([g,A])=>`${g}: ${A}`).join("; ")}"`},renderChunk=g=>`<span${styleAttribute({color:g.fg,"background-color":g.bg,"font-weight":g.bold?"700":null})}>${escapeHtml(g.text)}</span>`,renderSegmentsHtml=g=>g.map(renderChunk).join(""),resolveTimestamp=g=>g.timestamp??g.metadata?.timestamp??Date.now(),createDisplayLine=({html:g,timestamp:A,isPrompt:I=!1,isMonospace:C=!1,shouldLog:e=!0,buffer:t="main"})=>({id:null,html:g,timestamp:A,isPrompt:I,isMonospace:C,shouldLog:e,buffer:t}),renderStructuredRowHtml=(g,A)=>{const I=g.metadata?.tag??"";return[`<span class="nexgui4-stream-row nexgui4-stream-row--${A}" style="display: grid; grid-template-columns: auto minmax(0, 1fr); column-gap: 0.5rem; align-items: baseline;">`,`<span class="nexgui4-stream-row__tag mono"${styleAttribute({color:g.metadata?.tagColor??null})}>${escapeHtml(I)}</span>`,`<span class="nexgui4-stream-row__payload">${renderSegmentsHtml(g.segments)}</span>`,"</span>"].join("")},renderColorLine=g=>{const A=resolveTimestamp(g);return createDisplayLine({html:`<span class="nexgui4-color-line">${renderSegmentsHtml(g.segments)}</span>`,timestamp:A,isPrompt:g.isPrompt??!1,isMonospace:g.isMonospace??!1,shouldLog:g.shouldLog??!0,buffer:"main"})},hasTagList=g=>Array.isArray(g),isPveDamageTags=g=>hasTagList(g)&&g.includes("pve")&&g.includes("damage"),Dg=Object.freeze({options:Object.freeze({msgReplace:!0,damageNumbers:!0}),target:Object.freeze({hpText:null,hpPercent:null,hpDeltaText:null}),styles:Object.freeze({getAfflictionStyle:()=>({fg:"grey",bg:null}),resolveCureInfoStyle:(g,A="cadetblue")=>({fg:A,bg:null})}),icons:Object.freeze({dualTone:null})}),capitalize=g=>"string"==typeof g&&g.length>0?g.charAt(0).toUpperCase()+g.slice(1):"",getRuntimeStyle=g=>({fg:"string"==typeof g?.fg?g.fg:null,bg:"string"==typeof g?.bg?g.bg:null}),resolveRenderContext=(g={})=>{const A=g.context??g.replacementContext??{};return{options:{...Dg.options,...A.options??{}},target:{...Dg.target,...A.target??{}},styles:{...Dg.styles,...A.styles??{}},icons:{...Dg.icons,...A.icons??{}}}},withSeparators=(g,A)=>g.flatMap((g,I)=>0===I?[g]:[A,g]),createTitle=g=>{const A="string"==typeof g.originalLine?g.originalLine:null,I=[A?`Source: ${A}`:null,"string"==typeof g.tooltip?g.tooltip:null].filter(Boolean);return I.length>0?I.join("\n---\n"):null},createActorNodes=g=>g?[relationshipNameNode(g)]:[],createUserActionNodes=(g,A,I)=>{const{id:C,text:e,banding:t}=g,n=[classTextNode(getUserActionClass(C),e)];if(A){const{fg:C,bg:e}=getRuntimeStyle(I.styles.resolveCureInfoStyle?.(A,g.fg));n.push(styledTextNode(capitalize(A),{className:"ng-info-text",fg:C??g.fg,bg:e}))}if(Array.isArray(t)){const[g,A]=t;return[classTextNode("ng-brkt",g),...n,classTextNode("ng-brkt",A)]}return[iconBandingNode({icon:t.icon,colors:t.colors,size:t.size,children:n})]},createTargetHpValueNodes=(g,A)=>{const I="number"==typeof g.targetHpPercent?g.targetHpPercent:"number"==typeof A.target.hpPercent?A.target.hpPercent:null,C="string"==typeof g.targetHpText?g.targetHpText:"string"==typeof A.target.hpText?A.target.hpText:null;return null!=I?[styledTextNode(`${I}%`,{fg:hpPercentToColor(I)})]:C?[classTextNode("ng-muted",C)]:[]},createDamageValueNodes=(g,A)=>{const I=g.damage;return I&&"string"==typeof I.damage?[classTextNode(getDamageClass(I.type),I.damage)]:createTargetHpValueNodes(g,A)},createUserSkillAttackNodes=(g,A,I)=>{const{skill:C,info:e,tags:t,target:n}=g,a=[classTextNode("ng-brkt","["),classTextNode(getSkillClass(C.id),C.name),classTextNode("ng-brkt","]")];e&&a.push(textNode(" "),classTextNode("ng-info-text",capitalize(e)));const r=isPveDamageTags(t),o="firstPerson"===A.matchType||!A.actorId;if(r){const g="string"==typeof A.crit?A.crit:"Hit",C=o&&I.options.damageNumbers?createDamageValueNodes(A,I):createTargetHpValueNodes(A,I);a.push(classTextNode("ng-crit-separator",`: ${g} `)),C.length>0&&a.push(classTextNode("ng-dmg-bracket","("),...C,classTextNode("ng-dmg-bracket",")"))}return a},createUserActionColumnNodes=(g,A,I)=>{const{userAction:C,info:e}=g;return C&&Tg[C.id]?createUserActionNodes(C,e??null,I):createUserSkillAttackNodes(g,A,I)},createNpcActionColumnNodes=(g,A,I)=>{const{tags:C,target:e,skill:t}=g;if(!C||0===C.length)return[classTextNode("ng-muted",t.name)];const n=C.map(g=>{if("damage"===g&&"You"===e?.text)return classTextNode("ng-hp-loss","string"==typeof A.hpDeltaText&&A.hpDeltaText?A.hpDeltaText:"string"==typeof I.target.hpDeltaText&&I.target.hpDeltaText?I.target.hpDeltaText:"-0%");const{fg:C,bg:t}=getRuntimeStyle(I.styles.getAfflictionStyle?.(g));return styledTextNode(capitalize(g),{fg:C??"grey",bg:t})});return[classTextNode("ng-npc-bracket","«"),...withSeparators(n,classTextNode("ng-muted",", ")),classTextNode("ng-npc-bracket","»")]},createTargetColumnNodes=(g,A,I)=>{if(!g)return[];const C=relationshipNameNode(g);if(!g.text.includes(" ")||"grey"!==g.color)return[C];const e="number"==typeof A.targetHpPercent?A.targetHpPercent:"number"==typeof I.target.hpPercent?I.target.hpPercent:null,t="string"==typeof A.targetHpText?A.targetHpText:"string"==typeof I.target.hpText?I.target.hpText:null;return null!=e?[classTextNode("ng-dmg-bracket","("),styledTextNode(`${e}%`,{fg:hpPercentToColor(e)}),classTextNode("ng-dmg-bracket",") "),C]:t?[classTextNode("ng-dmg-bracket","("),classTextNode("ng-muted",t),classTextNode("ng-dmg-bracket",") "),C]:[C]},createReplacementViewModel=(g,A={})=>{if(!g||"object"!=typeof g)return null;const I=resolveRenderContext(A),C="npc"===g.variant?createNpcActionColumnNodes(g,A,I):createUserActionColumnNodes(g,A,I);return{family:"skill",eventName:g.eventName,variant:g.variant,layout:"replacement-row",title:createTitle(A),previewText:"string"==typeof g.preview?.text?g.preview.text:"",columns:{actor:createActorNodes(g.actor),action:C,target:createTargetColumnNodes(g.target,A,I)},assets:{dualToneIcons:I.icons.dualTone},metadata:{skillId:g.skill?.id??"",actionId:g.userAction?.id??null,matchType:"string"==typeof A.matchType?A.matchType:g.matchType,actorId:"string"==typeof A.actorId?A.actorId:null,tags:Array.isArray(g.tags)?[...g.tags]:[]}}},jg=new Map,normalizeColors=g=>Array.isArray(g)?1===g.length?[g[0],g[0]]:[g[0]??"currentColor",g[1]??g[0]??"currentColor"]:[g??"currentColor",g??"currentColor"],buildIconHtml=(g,A,I=16,C=null)=>{const e=normalizeColors(A),t=C?.[g];if(!Array.isArray(t))return"";const[n,a,,,r]=t;if(!Array.isArray(r)||r.length<2)return"";const o=`${g}-${e.join(",")}-${I}-${n}-${a}-${r.join("|")}`,i=jg.get(o);if(i)return i;const[l,s]=e,c=['<svg xmlns="http://www.w3.org/2000/svg" class="svg-inline--fa icon" aria-hidden="true" focusable="false"',` style="height:${escapeHtml(String(I))}px; --ng-fill-1:${escapeHtml(l)}; --ng-fill-2:${escapeHtml(s)};"`,` viewBox="0 0 ${escapeHtml(String(n))} ${escapeHtml(String(a))}">`,'<g class="fa-group">',`<path class="ng-icon-fill-1" d="${escapeHtml(r[0])}"></path>`,`<path class="ng-icon-fill-2" d="${escapeHtml(r[1])}"></path>`,"</g>","</svg>"].join("");return jg.set(o,c),c},buildIconBandingHtml=(g,A,I,C,e=null)=>{const t=buildIconHtml(g,A,I,e);return t?`${t}${C}${t}`:`«${C}»`},renderStyledTextNode=g=>span(escapeHtml(g.text),{className:g.className,style:{color:g.fg,"background-color":g.bg}}),renderReplacementHtmlNode=(g,A={})=>{if(!g||"object"!=typeof g)return"";switch(g.kind){case"text":return escapeHtml(g.text);case"class-text":return span(escapeHtml(g.text),{className:g.className});case"styled-text":return renderStyledTextNode(g);case"relationship-name":return renderRelationshipNameHtml(g.descriptor);case"icon-banding":return buildIconBandingHtml(g.icon,g.colors,g.size,renderReplacementHtmlNodes(g.children,A),A.dualToneIcons??null);case"group":return renderReplacementHtmlNodes(g.children,A);default:return""}},renderReplacementHtmlNodes=(g,A={})=>Array.isArray(g)?g.map(g=>renderReplacementHtmlNode(g,A)).join(""):"",renderColumn=(g,A)=>`<span class="nexgui4-replacement-row__${A}">${renderReplacementHtmlNodes(g?.columns?.[A],g?.assets)}</span>`,renderReplacementHtml=g=>[`<span class="nexgui4-replacement-row"${titleAttribute(g?.title)}>`,'<span class="nexgui4-replacement-row__buffer"></span>',renderColumn(g,"actor"),renderColumn(g,"action"),renderColumn(g,"target"),"</span>"].join(""),colorText=(g,A)=>g?span(escapeHtml(A),{style:{color:g}}):escapeHtml(A),renderFallbackPreviewHtml=g=>`<span class="nexgui4-replacement-row">${Array.isArray(g.segments)?g.segments.map(g=>g.fg?colorText(g.fg,g.text):escapeHtml(g.text)).join(""):""}</span>`,generateReplacementHtml=(g,A={})=>renderReplacementHtml(createReplacementViewModel(g,A)),renderReplacementLine=g=>{const A=resolveTimestamp(g),I=g.metadata?.details??{},C=I.replacement??null;return createDisplayLine({html:C?generateReplacementHtml(C,I):renderFallbackPreviewHtml(g),timestamp:A,isPrompt:!1,isMonospace:!1,shouldLog:g.shouldLog??!0,buffer:"system"===g.buffer?"system":"combat"})},Pg=/^Health lost: (\d+) \((.+?)\)\.$/,Bg=/^Damage dealt: (\d+) \((.+?)\)\.$/,Og=Object.freeze({crit:null,damage:null,healthLost:Object.freeze([]),tooltip:null,originalLine:null,consumedLineIndexes:Object.freeze([])}),getLineText=g=>g?"function"==typeof g.parsed_line?.text?g.parsed_line.text():"string"==typeof g.line?g.line:"":"",resolvePatternLength=g=>{const A="string"==typeof g.matchType?g.matchType.trim():"",I=g.patterns?.[A];return Array.isArray(I)?I.length:0},isPveDamageAction=g=>isPveDamageTags(g.tags),isNpcDamageToSelf=g=>Array.isArray(g.tags)&&g.tags.includes("damage")&&"self"===g.target,isFirstPersonOrActorless=g=>"firstPerson"===("string"==typeof g.matchType?g.matchType.trim():"")||("string"==typeof g.user?0===g.user.trim().length:!g.user),shouldCollectDamageDealt=(g,A)=>Boolean(A?.damageNumbers)&&isFirstPersonOrActorless(g),collectCrit=(g,A)=>{const I=getLineText(g?.[A]);for(const[C,e]of wg)if(I.includes(C))return{crit:e,consumedLineIndex:A};return{crit:"Hit",consumedLineIndex:null}},collectDamageDealt=(g,A)=>{const I=getLineText(g?.[A]).match(Bg);return I?{damage:I[1],type:I[2],consumedLineIndex:A}:null},collectHealthLost=(g,A)=>{if(!Array.isArray(g))return{healthLost:[],consumedLineIndexes:[]};const I=[],C=[];for(let e=A;e<g.length-1;e++){const A=getLineText(g[e]).match(Pg);A&&(I.push({damage:A[1],type:A[2]}),C.push(e))}return{healthLost:I,consumedLineIndexes:C}},collectReplacementSideData=(g,A,I,C={})=>{if(!g||"object"!=typeof g||Array.isArray(g)||!Array.isArray(A)||!I||"number"!=typeof I.index)return{...Og,healthLost:[],consumedLineIndexes:[]};const e=g,t=new Set,n=getLineText(I)||null,a=resolvePatternLength(e),r=Math.max(a-1,0),o={crit:null,damage:null,healthLost:[],tooltip:null,originalLine:n};for(let i=1;i<=r;i++)t.add(I.index+i);if(isPveDamageAction(e)){const g=I.index+1,n=collectCrit(A,g);if(o.crit=n.crit,null!=n.consumedLineIndex&&t.add(n.consumedLineIndex),shouldCollectDamageDealt(e,C)){const I=collectDamageDealt(A,null!=n.consumedLineIndex?g+1:g);I&&(o.damage={damage:I.damage,type:I.type},t.add(I.consumedLineIndex))}}if(isNpcDamageToSelf(e)){const g=collectHealthLost(A,I.index+1);o.healthLost=g.healthLost,o.tooltip=g.healthLost.length>0?g.healthLost.map(({damage:g,type:A})=>`${g} (${A})`).join("\n"):null,g.consumedLineIndexes.forEach(g=>{t.add(g)})}return{...o,consumedLineIndexes:[...t].filter(g=>g!==I.index).sort((g,A)=>g-A)}},Lg="You",zg="cadetblue",Zg=Object.freeze(["contextValue","persistenceStore","persistenceVersion","msgReplace","damageNumbers","selfName","targetName","hpText","hpPercent","hpDeltaText","playerDirectory","playerDirectoryVersion","playerRelationships","playerRelationshipsVersion","allyEnemyFormatting","targetFormatting","afflictionStyles","cureStyles","herbNames","herbMinerals","dualToneIcons"]),Fg=null,Kg=null,toNullableString=g=>isNonEmptyString(g)?g.trim():null,parsePercent=g=>{if("number"==typeof g&&Number.isFinite(g))return g;if("string"!=typeof g)return null;const A=g.match(/-?\d+(?:\.\d+)?/),I=A?Number(A[0]):NaN;return Number.isFinite(I)?I:null},getGlobals$1=()=>globalThis,getContextValue$2=()=>getGlobals$1().nexGui?.__contextValue??null,getCharacterState$1=g=>g?.stores?.character?.getState?.()??{},getTargetState=g=>g?.stores?.target?.getState?.()??{},getUiSettings$2=g=>g?.persistenceStore?.getAll?.()?.ui??{},getPersistenceVersion=g=>"function"==typeof g?.persistenceStore?.getVersion?g.persistenceStore.getVersion():null,getModelVersion$2=g=>"function"==typeof g?.getVersion?g.getVersion():null,resolveUiSettings=(g,A)=>null!==A&&Fg?.contextValue===g&&Fg.persistenceStore===g?.persistenceStore&&Fg.persistenceVersion===A?Fg.uiSettings:getUiSettings$2(g),normalizeStyle=(g,A)=>({fg:toNullableString(g?.fg)??A,bg:toNullableString(g?.bg)}),createStyleResolvers=()=>({getAfflictionStyle:g=>normalizeStyle(getGlobals$1().nexSys?.prompt?.affAbbrev?.[g]??null,"grey"),resolveCureInfoStyle:(g,A=zg)=>{if(!isNonEmptyString(g))return{fg:A,bg:null};const I=getGlobals$1().nexSys,C=I?.tables?.herb_name_to_herb?.[g]??g,e=I?.prompt?.cureColors?.[C]??I?.prompt?.cureColors?.[I?.tables?.herb_to_mineral?.[C]]??null;return e?normalizeStyle(e,A):{fg:A,bg:null}}}),signaturesEqual=(g,A)=>null!==g&&null!==A&&Zg.every(I=>Object.is(g[I],A[I])),readContextInputs=()=>{const g=getGlobals$1(),A=getContextValue$2(),I=resolveUiSettings(A,getPersistenceVersion(A)),C=getPersistenceVersion(A),e=A?.stores?.settings?.getState?.()?.options??I,t=getCharacterState$1(A),n=getTargetState(A),a=g.GMCP?.Target??{},r=g.nexSys??null,o=r?.prompt??null,i=r?.tables??null,l=toNullableString(a.HP)??toNullableString(a.hpperc)??toNullableString(a.lastHP)??toNullableString(n.hpText),s=parsePercent(a.HP??a.hpperc??a.lastHP??n.hpPercent),c=n.isPlayer?toNullableString(n.name):null,u=toNullableString(o?.vars?.diffhp?.text)??("number"==typeof a.hpChange?`${a.hpChange}%`:toNullableString(a.hpChange)),m=Boolean(e.msgReplace),d=Boolean(e.damageNumbers),p=toNullableString(t.name)??toNullableString(g.GMCP?.Char?.Status?.name)??"",h=g.window?.___FONT_AWESOME___?.styles?.fad??null;return{contextValue:A,persistenceStore:A?.persistenceStore??null,persistenceVersion:C,uiSettings:I,msgReplace:m,damageNumbers:d,selfName:p,targetName:c,hpText:l,hpPercent:s,hpDeltaText:u,playerDirectory:A?.playerDirectory??null,playerDirectoryVersion:getModelVersion$2(A?.playerDirectory),playerRelationships:A?.playerRelationships??null,playerRelationshipsVersion:getModelVersion$2(A?.playerRelationships),allyEnemyFormatting:I.allyEnemyFormatting,targetFormatting:I.targetFormatting,afflictionStyles:o?.affAbbrev??null,cureStyles:o?.cureColors??null,herbNames:i?.herb_name_to_herb??null,herbMinerals:i?.herb_to_mineral??null,dualToneIcons:h}},createContextFromInputs=g=>({options:{msgReplace:g.msgReplace,damageNumbers:g.damageNumbers},self:{name:g.selfName,label:Lg},target:{name:g.targetName,hpText:g.hpText,hpPercent:g.hpPercent,hpDeltaText:g.hpDeltaText},styles:createStyleResolvers(),icons:{dualTone:g.dualToneIcons},playerDirectory:g.playerDirectory,playerRelationships:g.playerRelationships,relationshipFormatter:createRelationshipNameFormatterFromContext(g.contextValue,{targetName:g.targetName})}),clearMessageReplacementContextCache=()=>{Fg=null,Kg=null},createMessageReplacementContext=()=>{const g=readContextInputs();return signaturesEqual(Fg,g)&&Kg?Kg:(Fg=g,Kg=createContextFromInputs(g))},getGlobals=()=>globalThis,getHostBlock=()=>getGlobals().nexusclient?.current_block??null,getHostCurrentLine=()=>getGlobals().nexusclient?.current_line??null,createRenderContext=g=>({options:g.options,target:g.target,styles:g.styles,icons:g.icons}),createSkillReplacementPipelinePayload=(g,A,{context:I,sideData:C})=>{const e=createReplacementDescriptor(g,A,{relationshipFormatter:I.relationshipFormatter,selfName:I.self.name,selfText:I.self.label,targetName:I.target.name});return e?{kind:"nexgui4.skillReplacement",sourcePayload:A,replacement:e,context:createRenderContext(I),crit:C.crit,damage:C.damage,healthLost:C.healthLost,tooltip:C.tooltip,originalLine:C.originalLine,matchType:"string"==typeof A.matchType?A.matchType.trim():null,actorId:"string"==typeof A.user?A.user.trim():null,targetHpText:I.target.hpText,targetHpPercent:I.target.hpPercent,hpDeltaText:I.target.hpDeltaText}:null},renderPipelinePayloadForHost=(g,A)=>{const I=parseStreamEventLine(g,A);return I?renderReplacementLine(I).html:null},createSkillReplacementGagHandler=(g,A,{emitReplacement:I}={})=>C=>{if(!g())return;if(!C||"object"!=typeof C||Array.isArray(C))return;const e=C,t=getHostBlock(),n=getHostCurrentLine();if(!t||!n||"number"!=typeof n.index)return;const{index:a}=n,r=createMessageReplacementContext(),o=collectReplacementSideData(e,t,n,r.options),i=createSkillReplacementPipelinePayload(A,e,{context:r,sideData:o});if(!i)return;if(I?.(i),!n.parsed_line)return;const l=renderPipelinePayloadForHost(A,i);l&&(o.consumedLineIndexes.forEach(g=>{const A=t[g];A&&g!==a&&(A.gag=!0)}),n.parsed_line.nexSkillReplacement=!0,n.parsed_line.formatted=()=>l)},getOptions=()=>createMessageReplacementContext().options,isReplacementEnabled=()=>Boolean(getOptions().msgReplace),Yg="nexGui4",normalizeNexGuiClassReflexName=g=>{const A=toTrimmedString(g)?.replace(/\s+/g,"").toLowerCase();return A?`nexGui.${A}`:null},readCurrentHostClassName=(g=globalThis.GMCP)=>toTrimmedString(g?.Char?.Status?.class),runNexGuiClassReflex=(g,{nexusClient:A=globalThis.nexusclient,packageName:I=Yg}={})=>{const C=normalizeNexGuiClassReflexName(g);C&&A?.reflexes?.()?.run_function?.(C,{},I)},runNexGuiClassReflexForCurrentHostClass=(g={})=>runNexGuiClassReflex(readCurrentHostClassName(g.gmcp),g),Vg=new Set(["blindness","deafness","insomnia"]),Wg="https://api.achaea.com/characters.json",passthroughParser=g=>g,resolvePlayerDirectory=g=>g??getDefaultPlayerDirectoryModel(),getContextValue$1=()=>globalThis.nexGui?.__contextValue??null,resolvePlayerRelationships$1=g=>g??getContextValue$1()?.playerRelationships??getDefaultPlayerRelationshipsModel(),resolveFetch=g=>"function"==typeof g?g:"function"==typeof globalThis.fetch?globalThis.fetch.bind(globalThis):null,getUiSettings$1=()=>getContextValue$1()?.persistenceStore?.getAll?.()?.ui??{},getCharacterState=()=>getContextValue$1()?.stores?.character?.getState?.()??{},isLoginTrackerEnabled=()=>Boolean(getUiSettings$1()?.loginTracker),shouldEmitAffliction=g=>{const A=extractNamedValue(g);return!Vg.has(A)},extractChannelPlayerNames=g=>Array.isArray(g)?g.map(g=>g?.name).filter(isNonEmptyString).map(g=>g.trim()):[],fetchActiveCharacterNames=async(g=recordPlayerDirectoryDiagnostic,A=null)=>{if("function"!=typeof A)return g({channel:"presence",action:"charactersListFetch",status:"unavailable",detail:{fetchAvailable:!1}}),[];try{const I=await A(Wg,{cache:"no-store"});if(!I.ok)return g({channel:"presence",action:"charactersListFetch",status:"unavailable",detail:{httpStatus:I.status}}),[];const C=await I.json();return Array.isArray(C?.characters)?C.characters.map(g=>g?.name).filter(isNonEmptyString).map(g=>g.trim()):[]}catch{return g({channel:"presence",action:"charactersListFetch",status:"unavailable",detail:{exception:!0}}),[]}},createLoginTrackerNoticeHtml=(g,A,I,C)=>`<span>${createRelationshipNameFormatterFromContext(getContextValue$1(),{playerDirectory:I,playerRelationships:C}).renderHtml(g)} logged ${A}</span>`,emitBridgeEvent=({eventBus:g,topic:A,sourceEvent:I,payload:C,parser:e=passthroughParser,meta:t})=>{g.emit(A,{event:I,data:e(C),meta:t})},normalizeNexsysTargetChangedPayload=g=>isPlainObject(g)&&isPlainObject(g.current)?{...g.current,changedFields:isPlainObject(g.changedFields)?g.changedFields:{}}:g,Ug=["id","ID"],Hg=["Text","text","short_desc"],readTargetField=(g,A)=>{if(!isPlainObject(g))return null;for(const I of A)if(Object.prototype.hasOwnProperty.call(g,I)){const A=g[I];return"number"==typeof A&&Number.isFinite(A)?String(A):isNonEmptyString(A)?A.trim():null}return null},createGatedTargetInfoEmitHandler=g=>{let A,I;return C=>{const e=readTargetField(C,Ug),t=readTargetField(C,Hg);e===A&&t===I||(A=e,I=t,emitBridgeEvent({eventBus:g,topic:v.TARGET_CHANGED,sourceEvent:"IRE.Target.Info",payload:C,parser:passthroughParser}))}},parseCurrentHostClassChangedPayload=()=>({class:readCurrentHostClassName()}),createEmitHandler=(g,A)=>I=>{A.filter&&!A.filter(I)||(emitBridgeEvent({eventBus:g,topic:A.topic,sourceEvent:A.eventName,payload:I,parser:A.parser,meta:A.meta}),A.afterEmit?.(I))},createSkillReplacementEmitHandler=(g,A)=>createSkillReplacementGagHandler(isReplacementEnabled,A,{emitReplacement:I=>{emitBridgeEvent({eventBus:g,topic:v.STREAM_LINE,sourceEvent:A,payload:I,parser:passthroughParser,meta:{buffer:"combat",sourceModel:"replacement"}})}}),createLoginTrackerHandler=(g,A,I,C,e)=>{let t=[];return async n=>{if(!isLoginTrackerEnabled())return;const a=extractChannelPlayerNames(n),r=await fetchActiveCharacterNames(C,e),o=[...new Set([...a,...r])];if(0===t.length)return void(t=o);const i=[getCharacterState()?.name,globalThis.GMCP?.Char?.Status?.name].find(isNonEmptyString)?.trim(),l=t.filter(g=>!o.includes(g));o.filter(g=>!t.includes(g)).forEach(C=>{C!==i&&g.notice(createLoginTrackerNoticeHtml(C,"in",A,I),{html:!0})}),l.forEach(C=>{C!==i&&g.notice(createLoginTrackerNoticeHtml(C,"out",A,I),{html:!0})}),t=o}},seedCurrentRoomState=g=>{const A=globalThis.GMCP?.Room;isPlainObject(A?.Info)&&emitBridgeEvent({eventBus:g,topic:v.ROOM_UPDATED,sourceEvent:"Room.Info",payload:A.Info,parser:passthroughParser}),Array.isArray(A?.Players)&&emitBridgeEvent({eventBus:g,topic:v.ROOM_UPDATED,sourceEvent:"Room.Players",payload:A.Players,parser:passthroughParser})},Qg=[{eventName:"nexsys4.system.target.changed",topic:v.TARGET_CHANGED,parser:normalizeNexsysTargetChangedPayload},{eventName:"Room.RemovePlayer",topic:v.ROOM_UPDATED,parser:passthroughParser},{eventName:"Room.Addplayer",topic:v.ROOM_UPDATED,parser:passthroughParser},{eventName:"Room.AddPlayer",topic:v.ROOM_UPDATED,parser:passthroughParser},{eventName:"Room.Players",topic:v.ROOM_UPDATED,parser:passthroughParser},{eventName:"Room.Info",topic:v.ROOM_UPDATED,parser:passthroughParser},{eventName:"Char.Items.List",topic:v.ROOM_UPDATED,parser:passthroughParser},{eventName:"Char.Items.Add",topic:v.ROOM_UPDATED,parser:passthroughParser},{eventName:"Char.Items.Remove",topic:v.ROOM_UPDATED,parser:passthroughParser},{eventName:"Char.Items.Update",topic:v.ROOM_UPDATED,parser:passthroughParser},{eventName:"Char.Defences.Add",topic:v.DEFENCE_GAINED,parser:passthroughParser},{eventName:"Char.Defences.Remove",topic:v.DEFENCE_LOST,parser:passthroughParser},{eventName:"Char.Afflictions.Add",topic:v.STREAM_LINE,parser:passthroughParser,filter:shouldEmitAffliction,meta:{buffer:"system"}},{eventName:"Char.Afflictions.Remove",topic:v.STREAM_LINE,parser:passthroughParser,filter:shouldEmitAffliction,meta:{buffer:"system"}},{eventName:"Char.Vitals",topic:v.STATS_UPDATED,parser:passthroughParser},{eventName:"nexsys4.system.class.changed",topic:v.CLASS_CHANGED,parser:parseCurrentHostClassChangedPayload,afterEmit:()=>runNexGuiClassReflexForCurrentHostClass()},{eventName:"Comm.Channel.Text",topic:v.STREAM_LINE,parser:passthroughParser},{eventName:"Char.Status",topic:v.STATS_UPDATED,parser:passthroughParser},{eventName:"IRE.Misc.Achievement",topic:v.STATS_UPDATED,parser:passthroughParser,meta:{sourceModel:"stats"}},{eventName:"IRE.Time.List",topic:v.STATS_UPDATED,parser:passthroughParser,meta:{sourceModel:"stats"}},{eventName:"nexSkillMatch",topic:v.TIMER_STARTED,parser:passthroughParser,meta:{sourceModel:"timers"}},{eventName:"nexsys4.serverside.aff.priority.set",topic:v.STREAM_LINE,parser:passthroughParser,meta:{buffer:"system"}},{eventName:"nexsys4.serverside.def.priority.set",topic:v.STREAM_LINE,parser:passthroughParser,meta:{buffer:"system"}}],createStartUpGagHandler=g=>function(){g.gagCurrentBlock()},registerGmcpBindings=({adapter:g,eventBus:A,playerDirectory:I,playerDirectoryLifecycle:C,playerRelationships:e,playerDirectoryDiagnostics:t,remoteService:n,fetchFn:a})=>{const r=resolvePlayerDirectory(I),o=resolvePlayerRelationships$1(e),i=t?.recordPlayerDirectoryDiagnostic??recordPlayerDirectoryDiagnostic,l=n??createNullRemotePlayerService(),s=resolveFetch(a),c=[],u=createStartUpGagHandler(g),m=createLoginTrackerHandler(g,r,o,i,s),d=createCrowdsourceSyncHandler({remoteService:l,getPlayerProfile:r.getPlayerProfile,isSeeded:C?.isDirectorySeeded,recordDiagnostic:i,fetchFn:s,getSelfName:()=>[getCharacterState()?.name,globalThis.GMCP?.Char?.Status?.name].find(isNonEmptyString)?.trim()??null});c.push(g.on("nexSkillMatch",createSkillReplacementEmitHandler(A,"nexSkillMatch"))),c.push(g.on("nexSkillNpcMatch",createSkillReplacementEmitHandler(A,"nexSkillNpcMatch")));for(const p of Qg){const I=createEmitHandler(A,p);c.push(g.on(p.eventName,I))}return globalThis.nexSys||c.push(g.on("IRE.Target.Info",createGatedTargetInfoEmitHandler(A))),c.push(g.on("Comm.Channel.Players",g=>{r.rememberChannelPlayers(g),d(g)})),c.push(g.on("Comm.Channel.Players",m)),seedCurrentRoomState(A),c.push(g.on("IRE.Time.Update",()=>{g.sendGmcp("IRE.Time.Request")})),c.push(g.on("PromptEvent",u,{id:"nexGuiStartUpGag"})),c.push(g.on("nexGuiLoaded",()=>{g.off("PromptEvent","nexGuiStartUpGag"),g.notice("nexGui loaded using startup spam gag.")},{once:!0})),()=>{for(const g of c)g()}},emitStartupReadySignal=g=>{g.send("echo raiseEvent nexGuiLoaded")},createEventBus=({label:g="nexgui4.eventBus",debugEnabled:A=!1,traceLimit:I=500}={})=>{const C=new Map,e=[],pushTrace=(C,t)=>{const n={at:Date.now(),type:C,detail:t};return e.push(n),e.length>I&&e.splice(0,e.length-I),A&&console.log(`[${g}]`,C,t),n},on=(g,A)=>(C.has(g)||C.set(g,new Set),C.get(g).add(A),()=>off(g,A)),off=(g,A)=>C.get(g)?.delete(A);return{on,off,emit:(g,A)=>{pushTrace(g,A),C.get(g)?.forEach(g=>g(A))},clear:()=>{C.clear(),e.length=0},getTrace:()=>[...e],setDebugEnabled:g=>{A=g}}},joinFontFamily=(...g)=>g.join(", "),Xg=joinFontFamily('"Roboto Mono"',"Consolas","monospace"),Jg=Object.freeze([Object.freeze({label:"Roboto Mono",value:Xg}),Object.freeze({label:"Consolas",value:joinFontFamily("Consolas","Monaco","monospace")}),Object.freeze({label:"JetBrains Mono",value:joinFontFamily('"JetBrains Mono"',"Consolas","monospace")}),Object.freeze({label:"Fira Code",value:joinFontFamily('"Fira Code"',"Consolas","monospace")}),Object.freeze({label:"Source Code Pro",value:joinFontFamily('"Source Code Pro"',"Consolas","monospace")}),Object.freeze({label:"Courier New",value:joinFontFamily('"Courier New"',"monospace")})]),normalizeDisplayFontFamily=g=>"string"!=typeof g?Xg:g.trim()||Xg,normalizeDisplayFontSize=(g,A=14)=>{if("number"==typeof g&&Number.isFinite(g)&&g>0)return Math.round(g);if("string"==typeof g){const A=Number.parseFloat(g);if(Number.isFinite(A)&&A>0)return Math.round(A)}return A},readHostDisplayFontFamily=(g={})=>normalizeDisplayFontFamily("function"==typeof g?.get_font_family?g.get_font_family():g?.font_family),readHostDisplayFontSize=(g={})=>normalizeDisplayFontSize(g?.font_size),qg=1,clonePersistenceValue=g=>Array.isArray(g)?g.map(g=>clonePersistenceValue(g)):isPlainObject(g)?Object.fromEntries(Object.entries(g).map(([g,A])=>[g,clonePersistenceValue(A)])):g,normalizeLeafValue=(g,A)=>"boolean"==typeof g?"boolean"==typeof A?A:g:"number"==typeof g?"number"==typeof A&&Number.isFinite(A)?A:g:"string"==typeof g?"string"==typeof A?A:g:clonePersistenceValue(g),applySchemaPatch=(g,A,I)=>{if(isPlainObject(I))for(const C of Object.keys(g)){if("version"===C||!Object.hasOwn(I,C))continue;const e=g[C],t=I[C];Array.isArray(e)?A[C]=Array.isArray(t)?clonePersistenceValue(t):clonePersistenceValue(e):isPlainObject(e)?applySchemaPatch(e,A[C],t):A[C]=normalizeLeafValue(e,t)}},createSchemaSnapshot=(g,...A)=>{const I=clonePersistenceValue(g);for(const C of A)applySchemaPatch(g,I,C);return Object.hasOwn(g,"version")&&(I.version=g.version),I},_g="nexGui4Settings",$g=Object.freeze({SETTINGS:"settings",GAME_STATS:"gameStats",UI:"ui"}),gA=deepFreeze({version:qg,theme:{backgroundImage:"",fontSize:12,displayFontFamily:Xg,displayFontSize:14,backgroundOpacity:.5,hue:0},ui:{loginTracker:!1,msgReplace:!1,showCombatStream:!1,showSystemStream:!1,logoutDownload:!1,virtualizedLogs:!1,allyEnemyFormatting:!0,targetFormatting:!0,damageNumbers:!0,nativeDisplay:!1},party:{goldCollection:!0,targetCalls:!0,affCalls:!0,callTargets:!1,callAffs:!1,gagChat:!1}}),AA=deepFreeze({version:qg,kills:0,month:{deaths:0,goldCap:0,month:0,startingGold:0,startingKills:0,startingXp:0,currentXp:0,xpValue:0,year:0}}),IA=deepFreeze({version:qg,scrollbackModal:{width:600,height:400,x:0,y:0}}),normalizePersistenceFragment=(g,A)=>Array.isArray(g)?Array.isArray(A)?clonePersistenceValue(A):clonePersistenceValue(g):isPlainObject(g)?createSchemaSnapshot(g,A):normalizeLeafValue(g,A),migrateSettingsPersistence=g=>createSchemaSnapshot(gA,g),migrateGameStatsPersistence=g=>createSchemaSnapshot(AA,g),migrateUiPersistence=g=>createSchemaSnapshot(IA,g),parseStoredValue$1=g=>{if("string"!=typeof g)return g;try{return JSON.parse(g)}catch{return g}},isEquivalentValue=(g,A)=>JSON.stringify(g)===JSON.stringify(A),CA="playerDirectory",readRootState=g=>{const A=g.getVariable(_g);if(!A||"object"!=typeof A||Array.isArray(A))return{rootState:{},changed:void 0!==A};if(!Object.hasOwn(A,CA))return{rootState:A,changed:!1};const{[CA]:I,...C}=A;return{rootState:C,changed:!0}},createPersistenceStore=({adapter:g,sliceKey:A=$g.SETTINGS,schema:I=gA,migrate:C=migrateSettingsPersistence}={})=>{const e=assertAdapterContract(g);let t=0;const markChanged=()=>{t+=1},assertSchemaKey=g=>{if("string"!=typeof g||"version"===g||!Object.hasOwn(I,g))throw new Error(`[nexGui4] Unknown persistence key "${String(g)}" for slice "${A}"`)},readState=()=>{const{rootState:g,changed:I}=readRootState(e),t=g[A],n=parseStoredValue$1(t),a=C(n);if(I||void 0===t||"string"==typeof t||!isEquivalentValue(n,a)){const I={...g,[A]:a};e.setVariable(_g,I),markChanged()}return a};return{get:g=>(assertSchemaKey(g),clonePersistenceValue(readState()[g])),set:(g,C)=>{assertSchemaKey(g);const t={...readState(),version:I.version,[g]:normalizePersistenceFragment(I[g],C)},{rootState:n}=readRootState(e),a={...n,[A]:t};return e.setVariable(_g,a),markChanged(),clonePersistenceValue(t[g])},getAll:()=>clonePersistenceValue(readState()),getVersion:()=>t,reset:()=>{const g=clonePersistenceValue(I),{rootState:C}=readRootState(e),t={...C,[A]:g};return e.setVariable(_g,t),markChanged(),clonePersistenceValue(g)}}},bindFunction=(g,A)=>"function"==typeof g?.[A]?g[A].bind(g):null,noopTimer=()=>null,noopClearTimer=()=>{},getPublicDualToneIcons=g=>g.window?.___FONT_AWESOME___?.styles?.fad??null,createBrowserRuntimePorts=(g=globalThis)=>Object.freeze({fetch:bindFunction(g,"fetch"),now:()=>Date.now(),setTimeout:bindFunction(g,"setTimeout")??noopTimer,clearTimeout:bindFunction(g,"clearTimeout")??noopClearTimer,setInterval:bindFunction(g,"setInterval")??noopTimer,clearInterval:bindFunction(g,"clearInterval")??noopClearTimer,getPublicDualToneIcons:()=>getPublicDualToneIcons(g)}),freezePhaseList=g=>Object.freeze([...g]),eA=Object.freeze({INIT:"INIT",PREPARING:"PREPARING",BOOTING:"BOOTING",MOUNTING_UI:"MOUNTING_UI",HYDRATING_LAYOUT:"HYDRATING_LAYOUT",RUNNING:"RUNNING",FAILED:"FAILED",DESTROYED:"DESTROYED"}),tA=Object.freeze({[eA.INIT]:freezePhaseList([eA.PREPARING,eA.DESTROYED]),[eA.PREPARING]:freezePhaseList([eA.BOOTING,eA.FAILED,eA.DESTROYED]),[eA.BOOTING]:freezePhaseList([eA.MOUNTING_UI,eA.FAILED,eA.DESTROYED]),[eA.MOUNTING_UI]:freezePhaseList([eA.HYDRATING_LAYOUT,eA.FAILED,eA.DESTROYED]),[eA.HYDRATING_LAYOUT]:freezePhaseList([eA.RUNNING,eA.FAILED,eA.DESTROYED]),[eA.RUNNING]:freezePhaseList([eA.FAILED,eA.DESTROYED]),[eA.FAILED]:freezePhaseList([eA.PREPARING,eA.DESTROYED]),[eA.DESTROYED]:freezePhaseList([])}),isPhaseTransitionAllowed=(g,A)=>tA[g]?.includes(A)??!1,nA=Object.freeze([eA.PREPARING,eA.BOOTING,eA.MOUNTING_UI,eA.HYDRATING_LAYOUT,eA.RUNNING]),aA=3,rA=250,toErrorMessage=g=>g instanceof Error&&g.message?g.message:"string"==typeof g&&g.length>0?g:"Unknown startup failure",getRetryDelayMs=(g,A)=>A*2**Math.max(0,g-1),createStartupOrchestrator=({adapter:g,eventBus:A,phaseHandlers:I={},maxAttempts:C=aA,retryDelayMs:e=rA,setTimeoutFn:t=setTimeout,clearTimeoutFn:n=clearTimeout})=>{let a=eA.INIT,r=0,o=null,i=null,l=null,s=!1;const getState=()=>({phase:a,attempts:r,lastError:o}),transitionTo=(g,I={})=>{if(!isPhaseTransitionAllowed(a,g))throw new Error(`[nexGui4] Invalid startup phase transition: ${a} -> ${g}`);const C=a;return a=g,A.emit(w.SYSTEM_PHASE,{phase:g,previousPhase:C,attempt:I.attempt??r,...void 0!==I.error?{error:I.error}:{},...void 0!==I.retryDelayMs?{retryDelayMs:I.retryDelayMs}:{},...void 0!==I.permanent?{permanent:I.permanent}:{}}),g===eA.RUNNING&&A.emit(w.SYSTEM_READY,{phase:g,previousPhase:C,attempt:I.attempt??r}),getState()},clearPendingRetry=()=>{l&&(n(l.timerId),l.resolve(),l=null)},waitForRetry=g=>new Promise(A=>{l={timerId:t(()=>{l=null,A()},g),resolve:A}}),runPhase=async C=>{const e=I[C];"function"==typeof e&&await e({phase:C,attempt:r,adapter:g,eventBus:A})},runAttempt=async()=>{r+=1;try{for(const g of nA){if(s)return getState();transitionTo(g,{attempt:r}),await runPhase(g)}return o=null,getState()}catch(A){o=A;const I=r<C,t=I?getRetryDelayMs(r,e):0;if(transitionTo(eA.FAILED,{attempt:r,error:A,...I?{retryDelayMs:t}:{permanent:!0}}),!I)throw g.notice(`[nexGui4] Startup failed after ${r} attempts: ${toErrorMessage(A)}`),A;return await waitForRetry(t),s?getState():runAttempt()}};return{start:()=>i||(s?Promise.reject(new Error("[nexGui4] Cannot start startupOrchestrator after destroy().")):a===eA.RUNNING?Promise.resolve(getState()):(i=runAttempt().finally(()=>{i=null}),i)),destroy:()=>(a===eA.DESTROYED||(s=!0,clearPendingRetry(),transitionTo(eA.DESTROYED,{attempt:r})),getState()),getState}},oA="nexgui4_scrollback",iA=1,lA="session_lines",toSortedLines=g=>Array.from(g.values()).sort((g,A)=>g.id-A.id),resolveIndexedDb=g=>void 0!==g?g:globalThis.indexedDB,resolveKeyRange=g=>void 0!==g?g:globalThis.IDBKeyRange,createIndexedDbManager=({dbName:g=oA,dbVersion:A=iA,storeName:I=lA,indexedDb:C,keyRange:e,logger:t=null}={})=>{const n=resolveIndexedDb(C),a=resolveKeyRange(e);let r=null,o=null,i=new Map,l=!n||!a,s=!1;const debug=(...g)=>t?.debug?.(...g),warn=(...g)=>t?.warn?.(...g),switchToFallback=g=>{r&&(r.close?.(),r=null),l=!0,warn("[nexGui4] IndexedDB unavailable; using in-memory scrollback storage.",g)},assertActive=()=>{if(s)throw new Error("[nexGui4] IndexedDB manager has been destroyed.")},initialize=()=>(assertActive(),l||r?Promise.resolve():o||(o=new Promise(C=>{let e=!1;const settleWithFallback=g=>{e||(e=!0,o=null,switchToFallback(g),C())},settleWithDb=g=>{e?g?.close?.():(e=!0,r=g,debug("[nexGui4] IndexedDB scrollback storage initialized."),C())};let t;try{t=n.open(g,A)}catch(a){return void settleWithFallback(a)}t.onupgradeneeded=g=>{const A=g.target.result;A.objectStoreNames.contains(I)||A.createObjectStore(I,{keyPath:"id"})},t.onsuccess=g=>{settleWithDb(g.target.result)},t.onerror=g=>{settleWithFallback(g.target.error)},t.onblocked=g=>{settleWithFallback(g)}}),o)),ensureDb=async()=>(assertActive(),l?null:r||(await initialize(),r)),writeBatch=async g=>{if(assertActive(),0===g.length)return;if(l){for(const A of g)i.set(A.id,A);return}const A=await ensureDb();if(!l&&A)return new Promise((C,e)=>{const t=A.transaction([I],"readwrite"),n=t.objectStore(I);t.oncomplete=()=>{C()},t.onerror=g=>{e(g.target.error)},t.onabort=g=>{e(g.target.error)};for(const A of g)n.put(A)});await writeBatch(g)},readRange=async(g,A)=>{if(assertActive(),l)return toSortedLines(i).filter(I=>I.id>=g&&I.id<=A);const C=await ensureDb();return l||!C?readRange(g,A):new Promise((e,t)=>{const n=C.transaction([I],"readonly").objectStore(I),r=a.bound(g,A),o=n.getAll(r);o.onsuccess=()=>{e(o.result)},o.onerror=g=>{t(g.target.error)}})},readIds=async g=>{if(assertActive(),0===g.length)return[];if(l)return g.map(g=>i.get(g)).filter(Boolean);const A=await ensureDb();return l||!A?readIds(g):new Promise((C,e)=>{const t=A.transaction([I],"readonly"),n=t.objectStore(I),a=[];let r=!1;t.oncomplete=()=>{if(r)return;const A=new Map(a.map(g=>[g.id,g]));C(g.map(g=>A.get(g)).filter(Boolean))},t.onerror=g=>{r=!0,e(g.target.error)},t.onabort=g=>{r=!0,e(g.target.error)};for(const A of g){const g=n.get(A);g.onsuccess=()=>{void 0!==g.result&&a.push(g.result)}}})},readAll=async()=>{if(assertActive(),l)return toSortedLines(i);const g=await ensureDb();return l||!g?readAll():new Promise((A,C)=>{const e=g.transaction([I],"readonly").objectStore(I).getAll();e.onsuccess=()=>{A(e.result)},e.onerror=g=>{C(g.target.error)}})},clear=async()=>{if(assertActive(),l)return void i.clear();const g=await ensureDb();if(!l&&g)return new Promise((A,C)=>{const e=g.transaction([I],"readwrite").objectStore(I).clear();e.onsuccess=()=>{A()},e.onerror=g=>{C(g.target.error)}});await clear()},close=()=>{r?.close?.(),r=null,o=null},destroy=()=>{s||(close(),i=new Map,s=!0)};return{initialize,writeBatch,readRange,readIds,readAll,clear,close,destroy,isFallback:()=>l}},sA=Object.freeze([]),normalizeEntries=g=>(Array.isArray(g)?g:[]).filter(g=>g&&"number"==typeof g.id).map(g=>({...g})),estimateSearchBytes=(g,A)=>2*A+32*g,createScrollbackSessionStore=({storage:g=createIndexedDbManager(),writeBatchSize:A=500,writeDebounceMs:I=h,setTimeoutFn:C=setTimeout,clearTimeoutFn:e=clearTimeout,logger:t=null}={})=>{let n=[],a=null,r=Promise.resolve(),o=[],i=0,l=!1,s=null;const reportAsyncError=g=>{t?.error?.("[nexGui4] Scrollback session operation failed.",g)},assertActive=()=>{if(l)throw new Error("[nexGui4] Scrollback session store has been destroyed.")},cancelFlushTimer=()=>{a&&(e(a),a=null)},enqueueOperation=g=>{const A=r.then(g);return r=A.catch(()=>{}),A},takePendingWrites=()=>{if(cancelFlushTimer(),0===n.length)return sA;const g=n;return n=[],g},enqueuePendingWrite=()=>{const A=takePendingWrites();return 0===A.length?r:enqueueOperation(()=>g.writeBatch(A))},scheduleFlush=()=>{a||0===n.length||(a=C(()=>{a=null,enqueuePendingWrite().catch(reportAsyncError)},I))},resetSearchRecords=()=>{o=[],i=0},appendSearchRecords=g=>{for(const A of g){const g=stripHtml(A.html).toLowerCase();o.push({id:A.id,isPrompt:Boolean(A.isPrompt),text:g}),i+=g.length}},flush=()=>(assertActive(),enqueuePendingWrite()),readRange=async(A,I)=>(assertActive(),await flush(),enqueueOperation(()=>g.readRange(A,I))),readIds=async A=>(assertActive(),await flush(),Array.isArray(A)&&0!==A.length?enqueueOperation(()=>g.readIds(A)):[]),readAll=async()=>(assertActive(),await flush(),enqueueOperation(()=>g.readAll())),search=async(A,{includePrompts:I=!0}={})=>{assertActive();const C=String(A??"").trim().toLowerCase();if(await flush(),!C)return[];const e=o.filter(g=>I||!g.isPrompt).filter(g=>g.text.includes(C)).map(g=>g.id);return 0===e.length?[]:enqueueOperation(()=>g.readIds(e))};return{initialize:()=>(assertActive(),enqueueOperation(()=>g.initialize?.()??Promise.resolve())),append:g=>{if(l)return;const I=normalizeEntries(g);0!==I.length&&(appendSearchRecords(I),n.push(...I),n.length>=A?enqueuePendingWrite().catch(reportAsyncError):scheduleFlush())},flush,clear:()=>(assertActive(),cancelFlushTimer(),n=[],resetSearchRecords(),enqueueOperation(()=>g.clear())),readRange,readIds,readAll,search,getStats:()=>({pendingCount:n.length,pendingFlushScheduled:Boolean(a),storageFallback:Boolean(g.isFallback?.()),searchLineCount:o.length,searchTextChars:i,estimatedSearchBytes:estimateSearchBytes(o.length,i),writeBatchSize:A,writeDebounceMs:I,destroyed:l}),destroy:()=>{if(s)return s;const A=enqueuePendingWrite();return l=!0,s=A.catch(reportAsyncError).finally(()=>{cancelFlushTimer(),n=[],resetSearchRecords(),"function"==typeof g.destroy?g.destroy():g.close?.()}),s}}},EMPTY_QUERY=async()=>[],NULL_GET=async()=>null,createCdbApi=({query:g=EMPTY_QUERY,get:A=NULL_GET}={})=>Object.freeze({query:A=>g(A),get:g=>A(g)}),createCharacterApi=({characterModel:g=null}={})=>{const getCharacterSnapshot=()=>g?.snapshot?.()??{},A=Object.freeze({get:()=>getCharacterSnapshot().class??"",is:g=>normalizeLookupKey(getCharacterSnapshot().class)===normalizeLookupKey(g)});return Object.freeze({class:A})},EMPTY_ICON_HTML=()=>"",noopNotice=()=>{},createDisplayApi=({playerColor:g=()=>"grey",iconHtml:A=EMPTY_ICON_HTML,notice:I=noopNotice}={})=>{const C="function"==typeof A?A:EMPTY_ICON_HTML,e="function"==typeof I?I:noopNotice;return Object.freeze({playerColor:A=>g(A),iconHtml:(g,A,I)=>C(g,A,I),notice:(g,A)=>e(g,A)})},NOOP$6=()=>{},toFrozenList$1=g=>Object.freeze(Array.isArray(g)?[...g]:[]),createCustomizeApi=({setConfiguredDefences:g=NOOP$6,setClassBalanceType:A=NOOP$6,mountNativeDisplay:I=NOOP$6,unmountNativeDisplay:C=NOOP$6}={})=>{const e=Object.freeze({set:A=>toFrozenList$1(g(A))}),t=Object.freeze({set:g=>A(g)}),n=Object.freeze({mount:()=>{I()},unmount:()=>{C()}});return Object.freeze({defences:e,classBalance:t,nativeDisplay:n})},NOOP$5=()=>!1,toFrozenList=g=>Object.freeze(Array.isArray(g)?[...g]:[]),createLayoutApi=({presetIds:g=[],applyPreset:A=NOOP$5,saveLayout:I=NOOP$5,restoreLayout:C=NOOP$5,hasSavedLayout:e=()=>!1}={})=>{const t=toFrozenList(g);return Object.freeze({list:()=>t,apply:g=>Boolean(A(g)),save:()=>Boolean(I()),restore:()=>Boolean(C()),hasSaved:()=>Boolean(e())})},NOOP$4=()=>({members:[],leader:"",selfName:""}),createPartyApi=({getSnapshot:g=NOOP$4}={})=>{const isMember=A=>{const I=normalizeLookupKey(A);return!!I&&g().members.some(g=>normalizeLookupKey(g)===I)};return Object.freeze({isMember})},toReadOnlySnapshot=g=>g&&"object"==typeof g?deepFreeze(structuredClone(g)):g,createPlayersApi=({getPlayer:g=()=>null,getPlayerColor:A=()=>"grey",refreshPlayer:I=async()=>null,display:C=()=>{},isAlly:e=()=>!1,isEnemy:t=()=>!1,isCityEnemy:n=()=>!1}={})=>{const get=A=>{const I=g(A);return I?toReadOnlySnapshot(I):null},color=g=>A(g),fetch=async A=>{try{const g=await I(A);if(g)return toReadOnlySnapshot(g)}catch{}const C=g(A);return C?toReadOnlySnapshot(C):null},qwFormat=(A,I={})=>{const a=renderQuickWhoHtml((Array.isArray(A)?A:[]).map(A=>{const I="string"==typeof A?A:A?.name;return"string"!=typeof I||""===I.trim()?null:{name:I,city:A&&"object"==typeof A&&null!=A.city?A.city:g(I)?.city,ally:e(I),enemy:t(I),cityEnemy:n(I)}}).filter(Boolean),I);return C(a),a};return Object.freeze({get,color,fetch,qwFormat})},NOOP$3=()=>{},NOOP_LIST=()=>[],NOOP_GET=()=>null,cA=["text","color","background"],normalizeOverride=g=>{if(!g||"object"!=typeof g)return null;const A={};for(const I of cA)"string"==typeof g[I]&&g[I]&&(A[I]=g[I]);return Object.keys(A).length>0?Object.freeze(A):null},createRoomApi=({setItemOverride:g=NOOP$3,removeItemOverride:A=NOOP$3,listItemOverrides:I=NOOP_LIST,getItemOverride:C=NOOP_GET}={})=>{const e=Object.freeze({set:(A,I)=>{const C=normalizeOverride(I);return C?(g(A,C),C):null},remove:g=>{A(g)},get:g=>C(g),list:()=>Object.freeze(I().map(([g,A])=>Object.freeze({name:g,override:A})))});return Object.freeze({items:e})},isTranscriptModel=g=>Boolean(g&&"function"==typeof g.addLines&&"function"==typeof g.getSnapshot),assertHtml=g=>{if("string"!=typeof g||0===g.length)throw new TypeError('api.stream.add requires a non-empty "html" string.')},resolveTargetModel=(g,A,I)=>{if("system"===g)return A;if("combat"===g)return I;throw new RangeError('api.stream.add requires "stream" to be either "system" or "combat".')},toReadOnlyEntry=g=>g?Object.freeze({...g}):null,createStreamApi=({systemStream:g=null,combatStream:A=null,now:I=Date.now}={})=>{const add=({html:C,stream:e}={})=>{assertHtml(C);const t=resolveTargetModel(e,g,A);if(!isTranscriptModel(t))return null;const n=I();return t.addLines([{html:C,timestamp:n,isPrompt:!1,isMonospace:!1,shouldLog:!0,buffer:e}]),toReadOnlyEntry(t.getSnapshot().items.at(-1))};return Object.freeze({add})},NOOP$2=()=>{},normalizeTargetValue=g=>{if(null==g)return null;const A=String(g).trim();return A.length>0?A:null},normalizeTargetLookupKey=g=>null==g?"":normalizeLookupKey(String(g)),createTargetApi=({targetModel:g=null,setTarget:A=NOOP$2}={})=>{const readTarget=()=>g?.read?.()??{};return Object.freeze({get:()=>{const g=readTarget();return{id:g.id??null,name:g.name??null,isPlayer:Boolean(g.isPlayer)}},set:g=>{const I=normalizeTargetValue(g);return A(I),I},is:g=>{const A=normalizeTargetLookupKey(g);if(!A)return!1;const I=readTarget();return normalizeTargetLookupKey(I.id)===A||normalizeTargetLookupKey(I.name)===A}})},createNoopTimerModel=()=>({add:()=>null,clearAll:()=>0,get:()=>null,list:()=>[],remove:()=>null,reset:()=>null,start:()=>null,stop:()=>null}),hasListFilters=g=>"string"==typeof g||null!==g&&"object"==typeof g,resolveGroupId=g=>"string"==typeof g?g:g&&"object"==typeof g&&"string"==typeof g.groupId?g.groupId:null,createTimersApi=({timerModel:g}={})=>{const A=g??createNoopTimerModel(),get=g=>A.get(g),list=g=>{if(!hasListFilters(g))throw new TypeError("api.timers.list requires filters; read nexGui.state.timers.list for the unfiltered snapshot.");return A.list(g)},start=g=>A.start(g),stop=g=>A.stop(g),reset=g=>A.reset(g),remove=g=>A.remove(g),add=(g,I,C="",e)=>A.add(g,I,C,e),clear=g=>{const I=resolveGroupId(g);if(!I)return A.clearAll();const C=A.list({groupId:I});for(const e of C)A.remove(e.id);return C.length};return Object.freeze({add,clear,get,list,remove,reset,start,stop})},toFrozenSnapshot=g=>g&&"object"==typeof g?deepFreeze(structuredClone(g)):g,uA=Object.freeze({name:"",class:"",level:0,gender:null,balance:!1,equilibrium:!1,classBalanceType:null,classBalanceReady:null,currentAffs:Object.freeze([]),limbs:Object.freeze({})}),createCharacterState=({characterModel:g=null}={})=>()=>toFrozenSnapshot(g?.snapshot?.()??uA),createCustomizeState=({getConfiguredDefences:g=()=>[],classBalanceController:A=null}={})=>()=>{const I=g();return toFrozenSnapshot({defences:Array.isArray(I)?I:[],classBalance:A?.getType?.()??null})},mA=Object.freeze({members:Object.freeze([]),leader:"",selfName:"",settings:Object.freeze({})}),createPartyState=({partyModel:g=null}={})=>()=>toFrozenSnapshot(g?.snapshot?.()??mA),dA=Object.freeze(new Map),pA=Object.freeze({}),buildDirectoryMap=g=>{const A=g?.getAllPlayerProfiles?.();if(!Array.isArray(A)||0===A.length)return dA;const I=new Map;for(const C of A){const g=N(C?.name);g&&I.set(g,deepFreeze(structuredClone(C)))}return Object.freeze(I)},createPlayersState=({playerDirectory:g=null,cityPalette:A=pA}={})=>{const I=A&&"object"==typeof A?deepFreeze(structuredClone(A)):pA;let C=null,e=null;return()=>{const A=g?.getVersion?.()??null;if(null!==e&&null!==A&&A===C)return e;const t=Object.freeze({directory:buildDirectoryMap(g),cityPalette:I});return C=A,e=t,t}},hA=Object.freeze({ref:Object.freeze({id:"",name:""}),items:Object.freeze([]),occupants:Object.freeze({players:Object.freeze([]),npcs:Object.freeze([])})}),createRoomState=({roomModel:g=null}={})=>()=>{const A=g?.snapshot?.();return A?toFrozenSnapshot({ref:{id:A.roomId??"",name:A.roomName??""},items:Array.isArray(A.items)?A.items:[],occupants:{players:Array.isArray(A.players)?A.players:[],npcs:Array.isArray(A.npcs)?A.npcs:[]}}):hA},yA=Object.freeze({instance:Object.freeze({kills:0,goldGained:0,xpPercent:0,xpValue:0,deaths:0,startedAt:0}),session:Object.freeze({kills:0,goldGained:0,xpPercent:0,xpValue:0,deaths:0,startedAt:0}),month:Object.freeze({kills:0,goldGained:0,xpPercent:0,xpValue:0,deaths:0,startedAt:0,goldCap:0,year:0,month:0})}),createStatsState=({playStatsModel:g=null}={})=>()=>toFrozenSnapshot(g?.snapshot?.()??yA),createSystemState=({version:g="",isMounted:A=()=>!1,startupOrchestrator:I=null}={})=>()=>toFrozenSnapshot({version:g,mounted:Boolean(A()),phase:I?.getState?.().phase??"INIT"}),fA=Object.freeze(createEmptyTargetRecord()),createTargetState=({targetModel:g=null}={})=>()=>toFrozenSnapshot(g?.snapshot?.()??fA),createTimersState=({timerModel:g=null}={})=>()=>toFrozenSnapshot({list:g?.list?.()??[]}),composePublicApi=({version:g,startupOrchestrator:A,isMounted:I,character:C,target:e,timerModel:t,players:n,colors:a,display:r,customize:o,layout:i,party:l,room:s,stats:c,stream:u,cdb:m}={})=>{const d=createPlayersApi(n),p=createDisplayApi({playerColor:r?.playerColor??a?.playerColor??d.color,iconHtml:r?.iconHtml??a?.iconHtml,notice:r?.notice??a?.notice}),h={system:createSystemState({version:g,isMounted:I,startupOrchestrator:A}),character:createCharacterState({characterModel:C?.characterModel}),target:createTargetState({targetModel:e?.targetModel}),party:createPartyState({partyModel:l?.partyModel}),room:createRoomState({roomModel:s?.roomModel}),stats:createStatsState({playStatsModel:c?.playStatsModel}),players:createPlayersState({playerDirectory:n?.playerDirectory,cityPalette:a?.cityPalette}),timers:createTimersState({timerModel:t}),customize:createCustomizeState({getConfiguredDefences:o?.getConfiguredDefences,classBalanceController:o?.classBalanceController})},stateSnapshot=()=>Object.freeze({system:h.system(),character:h.character(),target:h.target(),party:h.party(),room:h.room(),stats:h.stats(),players:h.players(),timers:h.timers(),customize:h.customize()}),y=Object.freeze({character:createCharacterApi(C),target:createTargetApi(e),players:d,display:p,colors:p,timers:createTimersApi({timerModel:t}),customize:createCustomizeApi(o),layout:createLayoutApi(i),party:createPartyApi({getSnapshot:l?.getSnapshot}),room:createRoomApi(s),stream:createStreamApi(u),cdb:createCdbApi({query:m?.query,get:m?.get})}),b={};return Object.defineProperty(b,"state",{enumerable:!0,get:stateSnapshot}),Object.defineProperty(b,"api",{value:y,enumerable:!0}),Object.freeze(b)},bA="feather-pointed",tab=(g,A={})=>({type:"tab",id:g,name:g,component:g,helpText:g,icon:bA,...A}),hostTab=g=>({type:"tab",...g}),rightBorder=(g={})=>({type:"border",location:"right",...g}),xA={layout:{type:"row",id:"main",children:[{type:"row",id:"#f21df3e7-48ef-48f4-b77d-96a4cfc93903",weight:11.055408908360821,children:[{type:"tabset",id:"container_1",weight:6.080414549807837,children:[tab("nexDefences")]},{type:"tabset",id:"#fc94a4e0-6b58-42b5-826f-6e0c3bec80a7",weight:5.235912529001193,children:[tab("nexTimers")]},{type:"tabset",id:"#3251f844-bd3f-4ebb-aca9-9a4dfe9d0add",weight:5.49476101474438,children:[tab("nexTarget")]},{type:"tabset",id:"#5a449b58-0188-4ab9-9c98-023ed517a477",weight:5.316690055933218,children:[tab("nexStats",{borderWidth:725})]}]},{type:"row",id:"#70e4ecdf-81dc-40c6-b536-b62595eff99b",weight:54.4266284719302,children:[{type:"tabset",id:"#f85f4040-6d4a-49c7-94bd-7244f1a3b32d",weight:11.507047541573453,children:[hostTab({id:"all_comm",name:"All Comm",helpText:"Global Communication Window",component:"all_comm",icon:"message-lines"})]},{type:"tabset",id:"#fdd3f126-a4e3-4f24-9e2b-03b2f25825ec",weight:46.37955039657086,enableDrop:!1,enableTabStrip:!1,active:!0,children:[hostTab({id:"#90968890-c02d-44ac-947a-5651201350c8",component:"center"})]}]},{type:"row",id:"#105ad70c-29c2-4f15-b764-c2c124fd5e36",weight:41.18462928637565,children:[{type:"row",id:"#6c8d384b-ce25-444f-9ece-92e8d7c1c7f4",weight:26.295598569968487,children:[{type:"tabset",id:"#14f8b2aa-bc7c-4e2b-b6cb-b05931394b2a",weight:48.76712328767123,children:[tab("nexFeed")]},{type:"tabset",id:"#887e45a7-0b29-446f-862b-d6dde018fc96",weight:51.23287671232877,children:[tab("nexMetrics")]}]},{type:"row",id:"#64cee95d-aaef-477c-965e-76cdabd2a677",weight:35.830262173583016,children:[{type:"row",id:"#c365b5e0-6c0c-4de0-81f2-872ed286499d",weight:39.93115318416523,children:[{type:"tabset",id:"#01137e43-37f6-4f66-aa8a-b129d202fc29",weight:49.54337899543379,children:[tab("nexItems")]},{type:"tabset",id:"#e4c4c437-aba2-45ff-b168-f72896c253fa",weight:50.45662100456621,children:[tab("nexNpcs")]}]},{type:"tabset",id:"#59491b6a-bab3-415d-8367-25c562f46ae9",weight:60.06884681583477,selected:1,children:[hostTab({id:"map",name:"Map",helpText:"Map",component:"map",icon:"route"}),hostTab({id:"nexMap",name:"nexMap",helpText:"nexMap",component:"nexMap",icon:bA})]}]},{type:"tabset",id:"#63176cb9-c8b3-452a-afff-1e828d13e678",weight:6.009664560737805,children:[tab("nexPlayers")]},{type:"row",id:"#9e30489f-3eaf-4afe-90f6-23087c97698d",weight:19.364474695710708,children:[{type:"tabset",id:"#688e21f9-7929-4c29-92ce-9a9500c8fb63",weight:34.47319574635062,children:[tab("nexCombat")]},{type:"tabset",id:"#a79f5a9f-83b7-4f6a-b3c9-1c3e5843cc7e",weight:34.83104898939232,children:[tab("nexSystem")]}]}]}]},borders:[rightBorder({size:700,children:[tab("nexOptions",{borderWidth:300}),tab("nexParty",{borderWidth:300})]}),{type:"border",location:"left",children:[]},{type:"border",location:"top",children:[]},{type:"border",location:"bottom",children:[]}]},vA={layout:{type:"row",id:"main",children:[{type:"row",id:"#70e4ecdf-81dc-40c6-b536-b62595eff99b",weight:57.26509774852639,children:[{type:"tabset",id:"#f85f4040-6d4a-49c7-94bd-7244f1a3b32d",weight:17.557736227615205,selected:1,children:[hostTab({id:"map",name:"Map",helpText:"Map",component:"map",icon:"route"}),hostTab({id:"nexMap",name:"nexMap",helpText:"nexMap",component:"nexMap",icon:bA})]},{type:"row",id:"#bcb4f90b-4716-4f9b-9b22-ffd8741be626",weight:7.090289581370549,children:[{type:"tabset",id:"#b54bf1ab-4145-4041-9e67-8e6b789724b1",weight:11.363636363636363,children:[tab("nexPlayers")]},{type:"tabset",id:"#3df7c443-17f5-406e-9a45-54879deb731e",weight:26.79425837320574,children:[tab("nexNpcs")]},{type:"tabset",id:"#5c7c36a2-9496-4e6f-a1df-c581f898f7ac",weight:36.8421052631579,active:!0,children:[tab("nexItems")]}]},{type:"tabset",id:"#1eaac23b-4eae-486d-8915-90a25f41f9e0",weight:2.6494514015995967,children:[hostTab({id:"all_comm",name:"All Comm",helpText:"Global Communication Window",component:"all_comm",icon:"message-lines"})]},{type:"tabset",id:"#fdd3f126-a4e3-4f24-9e2b-03b2f25825ec",weight:30.58912072755898,enableDrop:!1,enableTabStrip:!1,children:[hostTab({id:"#90968890-c02d-44ac-947a-5651201350c8",component:"center"})]}]}]},borders:[rightBorder({size:700,children:[tab("nexOptions",{borderWidth:300}),tab("nexParty",{borderWidth:300}),tab("nexMetrics"),tab("nexStats",{borderWidth:725}),tab("nexCombat"),tab("nexSystem"),tab("nexTarget"),tab("nexDefences"),tab("nexTimers"),tab("nexFeed")]})]},EA=Object.freeze({kDesktop:xA,mobile:vA}),wA=Object.freeze(Object.keys(EA)),getLayoutPreset=g=>EA[g]??null,createCharacterStore=({characterModel:g,eventBus:A})=>{const C=(0,I.create)(()=>({...g.read(),updateCharacter:A=>g.update(A),setClass:A=>g.setClass(A)})),refreshCharacter=()=>{C.setState(g.read())};return A.on(x.CHARACTER_UPDATED,refreshCharacter),A.on(x.CLASS_CHANGED,refreshCharacter),C},createTargetStore=({targetModel:g,eventBus:A})=>{const C=(0,I.create)(()=>({...g.read()})),refreshTarget=()=>{C.setState(g.read())};return A.on(x.TARGET_CHANGED,refreshTarget),C},projectEntries=(g,A)=>g.length===A.length&&g.every((g,I)=>Object.is(g,A[I]))?g:A,createFeedStore=({feedModel:g})=>(0,I.create)((A,I)=>{const refresh=()=>{A({entries:projectEntries(I().entries,g.snapshot())})};return{entries:g.snapshot(),addEntry:A=>{g.add(A),refresh()},addEntries:A=>{if("function"==typeof g.addEntries)g.addEntries(A);else for(const I of A)g.add(I);refresh()},replaceEntries:A=>{if("function"==typeof g.replaceEntries)g.replaceEntries(A);else{g.clear();for(const I of A)g.add(I)}refresh()},clear:()=>{g.clear(),refresh()}}}),createPartyStore=({partyModel:g,eventBus:A})=>{const readParty=()=>g.read?.()??g.snapshot(),C=(0,I.create)(()=>({...readParty(),updateParty:A=>g.update(A),addMember:A=>g.addMember(A),removeMember:A=>g.removeMember(A),setLeader:A=>g.setLeader(A),setSelf:A=>g.setSelf(A),setSetting:(A,I)=>g.setSetting(A,I)})),refreshParty=()=>{C.setState(readParty())};return A.on(x.PARTY_UPDATED,refreshParty),A.on(x.PARTY_MEMBER_LEFT,refreshParty),C},RA=/^You have gained (\d+) experience\.$/,SA=/^You have made (\d+) out of 450000 gold this month\.$/,toFiniteNumber=(g,A=null)=>{const I="number"==typeof g?g:"string"==typeof g&&g.trim().length>0?Number(g):NaN;return Number.isFinite(I)?I:A},toInteger=(g,A=null)=>{const I=toFiniteNumber(g,NaN);return Number.isFinite(I)?Math.trunc(I):A},toStatusXp=g=>{if(!g||"object"!=typeof g)return null;const A="string"==typeof g.level?Number.parseInt(g.level,10):toInteger(g.level,null),I=toFiniteNumber("string"==typeof g.xp?g.xp.replace("%",""):g.xp,null);return null==A||null==I?null:A+I/100},makeScope=g=>({kills:0,goldGained:0,xpPercent:0,xpValue:0,deaths:0,startedAt:g}),makeMonthScope=g=>({...makeScope(g),goldCap:0,year:0,month:0}),cloneSnapshot=g=>structuredClone(g),normalizePersistedStats=g=>migrateGameStatsPersistence(g??AA),createPlayStatsModel=({persistedGameStats:g,now:A=()=>Date.now()}={})=>{const I=A(),C=normalizePersistedStats(g),e=C.month??AA.month,t=toInteger(e.xpValue??e.xp,0);let n=toInteger(C.kills,0),a=null,r=toFiniteNumber(e.currentXp,null);const o=new Set,i=new Set,l=I,s={instance:{initialized:!1,startingGold:null,startingKills:n,startingXp:null,startedAt:I},session:{initialized:!1,startingGold:null,startingKills:n,startingXp:null,startedAt:I},month:{initialized:toInteger(e.year,0)>0&&toInteger(e.month,0)>0,startingGold:toInteger(e.startingGold,null),startingKills:toInteger(e.startingKills,n),startingXp:toFiniteNumber(e.startingXp,null),startedAt:l}};let c={instance:makeScope(I),session:makeScope(I),month:{...makeMonthScope(l),goldCap:toInteger(e.goldCap,0),year:toInteger(e.year,0),month:toInteger(e.month,0),xpValue:t,deaths:toInteger(e.deaths,0)}};const read=()=>c,updateScope=(g,A)=>{if(!A||"object"!=typeof A)return;const I=c[g],C={...I,...A};Object.keys(A).some(g=>!Object.prototype.hasOwnProperty.call(I,g)||!Object.is(I[g],C[g]))&&(c={...c,[g]:C})},toPersistenceSnapshot=()=>({kills:n,month:{deaths:c.month.deaths,goldCap:c.month.goldCap,month:c.month.month,startingGold:s.month.startingGold??0,startingKills:s.month.startingKills??n,startingXp:s.month.startingXp??0,currentXp:r??0,xpValue:c.month.xpValue,year:c.month.year}}),emitRead=()=>{const g=read();o.forEach(A=>A(g))},emitPersistenceSnapshot=()=>{const g=toPersistenceSnapshot();i.forEach(A=>A(g))},emitChange=({persist:g=!1}={})=>{emitRead(),g&&emitPersistenceSnapshot()},ensureScopeBaseline=g=>{const A=s[g];A.initialized||null==a||(A.initialized=!0,A.startingGold=a,A.startingKills=n,A.startingXp=r>0?r:null)},refreshScope=g=>{const A=s[g];if(!A.initialized||null==A.startingGold||null==a)return;const I={kills:n-A.startingKills,goldGained:a-A.startingGold};null==A.startingXp&&r>0&&(A.startingXp=r),null!=A.startingXp&&r>0&&(I.xpPercent=Number((100*(r-A.startingXp)).toFixed(2))),updateScope(g,I)},refreshAllScopes=()=>{ensureScopeBaseline("instance"),ensureScopeBaseline("session"),ensureScopeBaseline("month"),refreshScope("instance"),refreshScope("session"),refreshScope("month"),emitChange({persist:!0})},incrementXpValue=g=>{!Number.isFinite(g)||g<=0||(updateScope("instance",{xpValue:c.instance.xpValue+g}),updateScope("session",{xpValue:c.session.xpValue+g}),updateScope("month",{xpValue:c.month.xpValue+g}),emitChange({persist:!0}))},setMonthGoldCap=g=>{!Number.isFinite(g)||g<0||(updateScope("month",{goldCap:g}),emitChange({persist:!0}))};return{destroy:()=>{o.clear(),i.clear()},handleAchievement:g=>{if("TotalCreaturesKilled"!==g?.name)return{requestGoldCap:!1};const A=toInteger(g?.value,n);return null!=A&&(n=A,refreshAllScopes()),{requestGoldCap:!0}},handleStatus:g=>{a=toInteger(g?.gold,a),r=toStatusXp(g)??r,refreshAllScopes()},handleTimeList:g=>{const I=toInteger(g?.mon,null),C=toInteger(g?.year,null);if(null!=I){if(I!==c.month.month||null!=C&&C!==c.month.year){const g=A();return s.month={initialized:null!=a&&null!=r,startingGold:a,startingKills:n,startingXp:r,startedAt:g},c={...c,month:{...makeMonthScope(g),year:C??0,month:I}},void emitChange({persist:!0})}updateScope("month",{year:C??c.month.year,month:I}),emitChange({persist:!0})}},processStreamEntries:g=>{Array.isArray(g)&&0!==g.length&&g.forEach(g=>{if(g?.isPrompt)return;const A=stripHtml(g?.html).trim(),I=A.match(RA);if(I)return void incrementXpValue(toInteger(I[1],0));const C=A.match(SA);C&&setMonthGoldCap(toInteger(C[1],0))})},read,resetInstance:()=>{const g=A();s.instance={initialized:null!=a&&null!=r,startingGold:a,startingKills:n,startingXp:r,startedAt:g},c={...c,instance:makeScope(g)},emitChange()},snapshot:()=>cloneSnapshot(c),subscribe:g=>(o.add(g),()=>o.delete(g)),subscribePersistence:g=>(i.add(g),()=>i.delete(g)),toPersistenceSnapshot,updateInstance:g=>{updateScope("instance",g),emitChange()},updateMonth:g=>{updateScope("month",g),emitChange()},updateSession:g=>{updateScope("session",g),emitChange()}}},createPlayStatsStore=({playStatsModel:g}={})=>{const A=g??createPlayStatsModel(),C=(0,I.create)(()=>({...A.read(),updateInstance:g=>A.updateInstance(g),updateSession:g=>A.updateSession(g),updateMonth:g=>A.updateMonth(g),resetInstance:()=>A.resetInstance()})),refreshStats=()=>{C.setState(A.read())},e=A.subscribe(refreshStats);return Object.defineProperty(C,"destroy",{value:()=>{e()},enumerable:!1}),C},createRoomStore=({roomModel:g,eventBus:A})=>{const readRoom=()=>g.read?.()??g.snapshot(),C=(0,I.create)(()=>({...readRoom(),updateRoom:A=>g.update(A)})),refreshRoom=()=>{C.setState(readRoom())};return A.on(x.ROOM_UPDATED,refreshRoom),C},createStatsStore=({statsModel:g,eventBus:A})=>{const C=(0,I.create)(()=>({...g.read(),updateStats:A=>g.update(A)})),refreshStats=()=>{C.setState(g.read())};return A.on(x.STATS_UPDATED,refreshStats),C},immer$1=g=>(I,C,e)=>(e.setState=(g,C,...e)=>I("function"==typeof g?(0,A.produce)(g):g,C,...e),g(e.setState,C,e)),MA=Object.freeze({purpleGalaxy:"https://cdn.pixabay.com/photo/2018/12/18/22/30/background-3883188_960_720.jpg",blueGalaxy:"https://cdn.pixabay.com/photo/2022/06/08/05/47/stars-7249785_960_720.jpg",orangeGalaxy:"https://cdn.pixabay.com/photo/2015/08/28/11/27/space-911785_960_720.jpg",greenGalaxy:"https://cdn.pixabay.com/photo/2017/08/15/08/23/stars-2643089_960_720.jpg",stars:"https://s3-us-west-2.amazonaws.com/s.cdpn.io/1231630/stars.png",darkForest:"https://i.pinimg.com/originals/44/6e/3b/446e3b79395a287ca32f7977dd83b290.jpg"}),TA=Object.freeze(Object.keys(MA)),NA=new Map(Object.entries(MA).map(([g,A])=>[A,g])),canonicalizeBackgroundImageValue=g=>{if("string"!=typeof g)return"";const A=g.trim();return A?Object.hasOwn(MA,A)?A:NA.get(A)??A:""},resolveBackgroundImageSource=g=>{const A=canonicalizeBackgroundImageValue(g);return MA[A]??A},GA=deepFreeze({background:{primary:"#0d0d0d",panel:"#141414",header:"#1a1a1a",modal:"#1e1e1e"},text:{primary:"#FFF5D6",secondary:"#C0B090",muted:"#706050",accent:"#FFD700"},game:{hp:"#e05555",mp:"#5588e0",ep:"#55c055",wp:"#e0a035",nl:"#a055e0",timerActive:"#55aaff",timerCritical:"#ff5533"},spacing:{unit:4},radius:{panel:4,tag:2},theme:{backgroundImage:"",fontSize:12,displayFontFamily:Xg,displayFontSize:14,backgroundOpacity:.5,hue:0},replacement:{bracketAllyColor:"#ffffff",bracketEnemyColor:"#ff0000",targetBorderColor:"rgb(255, 0, 0)",selfNameColor:"lightpink",infoColor:"cadetblue",unknownNameColor:"grey",npcTagBracketColor:"red",damageNumberBracketColor:"#808080"}}),cloneTokens$1=g=>structuredClone(g),mergeTokenPatch=(g,A)=>{const I=cloneTokens$1(g);if(!isPlainObject(A))return I;const applyPatch=(g,A)=>{for(const[I,C]of Object.entries(A))void 0!==C&&(Array.isArray(C)?g[I]=structuredClone(C):isPlainObject(C)&&isPlainObject(g[I])?applyPatch(g[I],C):g[I]=structuredClone(C))};return applyPatch(I,A),I},normalizeThemeTokens=g=>{if(!isPlainObject(g))return g;const A={...g};return Object.hasOwn(g,"backgroundImage")&&(A.backgroundImage=canonicalizeBackgroundImageValue(g.backgroundImage)),Object.hasOwn(g,"displayFontFamily")&&(A.displayFontFamily=normalizeDisplayFontFamily(g.displayFontFamily)),Object.hasOwn(g,"displayFontSize")&&(A.displayFontSize=normalizeDisplayFontSize(g.displayFontSize)),{...A}},normalizeTokens=g=>({...g,theme:normalizeThemeTokens(g.theme)}),createThemeStore=({eventBus:g,persistenceStore:A}={})=>{const C=normalizeTokens(mergeTokenPatch(GA,{theme:A&&"function"==typeof A.get?normalizeThemeTokens(A.get("theme")):void 0})),e=(0,I.create)(immer$1(()=>({tokens:C,updateTokens:I=>{const C=normalizeTokens(mergeTokenPatch(e.getState().tokens,I));A&&"function"==typeof A.set&&A.set("theme",C.theme),e.setState({tokens:C}),g.emit(w.THEME_CHANGED,{tokens:cloneTokens$1(C)})},resetTokens:()=>{const I=cloneTokens$1(GA);A&&"function"==typeof A.set&&A.set("theme",I.theme),e.setState({tokens:I}),g.emit(w.THEME_CHANGED,{tokens:cloneTokens$1(I)})}})));return e},createTimerStore=({timerModel:g,eventBus:A})=>{const readTimers=()=>g.read?.()??g.snapshot(),C=(0,I.create)(()=>({timers:readTimers(),addTimer:(A,I,C="",e)=>g.add(A,I,C,e),removeTimer:A=>g.remove(A),clearAll:()=>g.clearAll()})),refreshTimers=()=>{C.setState({timers:readTimers()})};return A.on(x.TIMER_STARTED,refreshTimers),A.on(x.TIMER_UPDATED,refreshTimers),A.on(x.TIMER_EXPIRED,refreshTimers),A.on(x.TIMER_CLEARED,refreshTimers),C},createUiStore=({persistenceStore:g}={})=>(0,I.create)(immer$1((A,I)=>({activeTab:{},modalOpen:null,settings:g?.get?.("ui")??{},netflixMode:!1,setActiveTab:(g,I)=>A(A=>{A.activeTab[g]=I}),openModal:g=>A({modalOpen:g}),closeModal:()=>A({modalOpen:null}),setSetting:(C,e)=>{const t={...I().settings,[C]:e};A(g=>{g.settings=t}),g?.set?.("ui",t)},setNetflixMode:g=>A(A=>{A.netflixMode=Boolean(g)})}))),fetchLiveCharacter=async(g,{fetchFn:A=null}={})=>{const I="string"==typeof g?g.trim():"";if(!I)return null;const{outcome:C,data:e}=await fetchPublicProfileForSync(I,{fetchFn:A});if(C!==pg.OK||!e)return null;const t=sg.safeParse(e);return t.success?t.data:null},createMessageRegistry=()=>{const g=new Map;return{register:(A,I)=>(g.set(A,I),I),lookup:A=>g.get(A)??null,listTypes:()=>[...g.keys()].sort((g,A)=>g.localeCompare(A))}},kA=["#000000","#800000","#008000","#808000","#000080","#800080","#008080","#c0c0c0","#808080","#ff0000","#00ff00","#ffff00","#0000ff","#ff00ff","#00ffff","#ffffff"],DA=[0,95,135,175,215,255],hex2=g=>g.toString(16).padStart(2,"0"),jA={};for(let Ze=0;Ze<16;Ze++)jA[Ze]=kA[Ze];for(let Ze=16;Ze<=231;Ze++){const g=Ze-16,A=Math.floor(g/36),I=Math.floor(g%36/6),C=g%6,e=DA[A],t=DA[I],n=DA[C];jA[Ze]=`#${hex2(e)}${hex2(t)}${hex2(n)}`}for(let Ze=232;Ze<=255;Ze++){const g=8+10*(Ze-232);jA[Ze]=`#${hex2(g)}${hex2(g)}${hex2(g)}`}var PA=/\x1b\[([0-9;]*)m|([^\x1b]+)/g,stdColor=(g,A)=>jA[A?g+8:g],parseAnsi=g=>{const A=[];let I,C=null,e=null,t=!1;for(PA.lastIndex=0;null!==(I=PA.exec(g));){if(void 0!==I[2]){A.push({text:I[2],fg:C,bg:e,bold:t});continue}const g=I[1],n=0===g.length?[0]:g.split(";").map(Number);let a=0;for(;a<n.length;){const g=n[a];0===g?(C=null,e=null,t=!1):1===g?t=!0:g>=30&&g<=37?C=stdColor(g-30,t):g>=40&&g<=47?e=stdColor(g-40,!1):g>=90&&g<=97?C=jA[g-90+8]:g>=100&&g<=107?e=jA[g-100+8]:38===g&&5===n[a+1]&&void 0!==n[a+2]?(C=jA[n[a+2]]??null,a+=2):48===g&&5===n[a+1]&&void 0!==n[a+2]&&(e=jA[n[a+2]]??null,a+=2),a++}}return A},BA=/\x1b\[[0-9;]*m/g,OA=/^\d+h,\s*\d+m,\s*\d+e,\s*\d+w/,parsePromptLine=g=>{const A=g.replace(BA,"").trim();return{isPrompt:OA.test(A),text:A}},renderCombatLine=g=>{const A=resolveTimestamp(g);return createDisplayLine({html:renderStructuredRowHtml(g,"combat"),timestamp:A,isPrompt:!1,isMonospace:!1,shouldLog:g.shouldLog??!0,buffer:"combat"})},renderSystemLine=g=>{const A=resolveTimestamp(g);return createDisplayLine({html:renderStructuredRowHtml(g,"system"),timestamp:A,isPrompt:!1,isMonospace:!1,shouldLog:g.shouldLog??!0,buffer:"system"})},LA=Object.freeze({main:renderColorLine,system:renderSystemLine,combat:renderCombatLine,replacement:renderReplacementLine}),isMessageInput=g=>Boolean(g&&"object"==typeof g&&!Array.isArray(g)&&"string"==typeof g.event&&Object.prototype.hasOwnProperty.call(g,"payload")),parseRawLine=(g,A,I)=>{const C=A(g),e=I(g);return{type:"main",buffer:"main",segments:C,metadata:{text:e.text,source:"raw"},isPrompt:e.isPrompt,isMonospace:e.isPrompt,shouldLog:!0}},withTimestamp=(g,A)=>null!=g.timestamp||null!=g.metadata?.timestamp?g:{...g,timestamp:A()},validateDependencies=(g,A,I)=>{if(!g||"function"!=typeof g.addLines)throw new TypeError("createMessagePipeline requires a streamModel with addLines(lines).");if(null!=I&&"function"!=typeof I.addLines)throw new TypeError("createMessagePipeline side transcript models must expose addLines(lines).");if(!A||"function"!=typeof A.register||"function"!=typeof A.lookup)throw new TypeError("createMessagePipeline requires a registry with register(type, renderer) and lookup(type).")},createMessagePipeline=({streamModel:g,registry:A=createMessageRegistry(),parseAnsi:I=parseAnsi,parsePromptLine:C=parsePromptLine,parseStreamEventLine:e=parseStreamEventLine,renderColorLine:t=LA.main,renderCombatLine:n=LA.combat,renderReplacementLine:a=LA.replacement,renderSystemLine:r=LA.system,systemStreamModel:o=null,combatStreamModel:i=null,now:l=Date.now})=>{validateDependencies(g,A,o),validateDependencies(g,A,i),A.register("main",t),A.register("system",r),A.register("combat",n),A.register("replacement",a);const resolveTargetModel=A=>"system"===A?o??g:"combat"===A?i??g:g,renderAndStore=g=>{if(!g)return null;const I=A.lookup(g.type);if(!I)return null;const C=I(withTimestamp(g,l));return resolveTargetModel(C?.buffer??g.buffer).addLines([C]),C};function process(g,A){return"string"==typeof g&&1===arguments.length?renderAndStore(parseRawLine(g,I,C)):"string"==typeof g&&arguments.length>1?renderAndStore(e(g,A)):isMessageInput(g)?renderAndStore(e(g.event,g.payload)):null}return{process,registry:A}},parseLevel=g=>{if("number"==typeof g&&Number.isFinite(g))return g;if("string"!=typeof g)return 0;const A=g.match(/\d+/);return A?Number.parseInt(A[0],10):0},buildVitalsStatsPatch=g=>isPlainObject(g)?{hp:{current:toNumber(g.hp),max:toNumber(g.maxhp)},mp:{current:toNumber(g.mp),max:toNumber(g.maxmp)},ep:{current:toNumber(g.ep),max:toNumber(g.maxep)},wp:{current:toNumber(g.wp),max:toNumber(g.maxwp)},nl:{current:toNumber(g.nl),max:toNumber(g.maxnl,100)}}:null,buildVitalsCharacterPatch=g=>isPlainObject(g)?{balance:toBooleanFlag(g.bal),equilibrium:toBooleanFlag(g.eq),...buildCharacterDetailPatch(g)??{}}:null,buildStatusSync=g=>{if(!isPlainObject(g))return null;const A=toPercent(g.xp),I=toTrimmedString(g.class);return{statsPatch:{gold:toNumber(g.gold),bank:toNumber(g.bank),...null==A?{}:{xp:A,xpToNext:Math.max(0,100-A)}},characterPatch:{...toTrimmedString(g.name)?{name:g.name.trim()}:{},level:parseLevel(g.level),...buildCharacterDetailPatch(g)??{}},className:I,city:toTrimmedString(g.city)}},isBridgeEnvelope=g=>isPlainObject(g)&&"string"==typeof g.event&&Object.prototype.hasOwnProperty.call(g,"data"),createGmcpIngressController=({adapter:g,eventBus:A,timerModel:I,streamModel:C,systemStreamModel:e,combatStreamModel:t,statsModel:n,partyModel:a,roomModel:r,characterModel:o,targetModel:i,defenceModel:l,classBalanceController:s,playerDirectory:c,roomOccupantsModel:u=createRoomOccupantsModel({roomModel:r,playerDirectory:c}),partyAutomationModel:m=createPartyAutomationModel({characterModel:o,partyModel:a,playerDirectory:c,sendCommand:A=>g.send(A)})}={})=>{const d=createMessagePipeline({streamModel:C,systemStreamModel:e,combatStreamModel:t}),p=[],subscribe=(g,I)=>{p.push(A.on(g,I))},processDisplayBridge=g=>{isBridgeEnvelope(g)&&d.process(g.event,g.data)};return subscribe(v.STREAM_LINE,g=>{isBridgeEnvelope(g)&&(applyCharacterAfflictionEvent(o,g.event,g.data),m.processEvent(g.event,g.data),processDisplayBridge(g))}),subscribe(v.TIMER_STARTED,g=>{if(!isBridgeEnvelope(g)||"nexSkillMatch"!==g.event)return;if("self"!==g.data?.user)return;const A=toTrimmedString(g.data?.id);if(!A)return;const C=I.get(A);C&&I.start(C.id)}),subscribe(v.DEFENCE_GAINED,g=>{if(!isBridgeEnvelope(g))return;const A=extractNamedValue(g.data);A&&l.gain(A),processDisplayBridge(g)}),subscribe(v.DEFENCE_LOST,g=>{if(!isBridgeEnvelope(g))return;const A=extractNamedValue(g.data);A&&l.lose(A),processDisplayBridge(g)}),subscribe(v.TARGET_CHANGED,g=>{isBridgeEnvelope(g)&&(i.setIdentity(g.data),processDisplayBridge(g))}),subscribe(v.STATS_UPDATED,g=>{if(isBridgeEnvelope(g)){if("Char.Vitals"===g.event){const A=buildVitalsStatsPatch(g.data),I=buildVitalsCharacterPatch(g.data),C=s.updateFromVitals(g.data);A&&n.update(A),(I||C)&&o.update({...I??{},...C??{}})}if("Char.Status"===g.event){const A=buildStatusSync(g.data);if(!A)return;n.update(A.statsPatch),o.update(A.characterPatch),a.setSelf(A.characterPatch.name??g.data?.name),c.rememberPlayerStatus({...g.data,name:A.characterPatch.name??g.data?.name,city:A.city,fullname:g.data?.fullname}),A.className&&o.setClass(A.className)}}}),subscribe(v.ROOM_UPDATED,g=>{isBridgeEnvelope(g)&&u.apply(g.event,g.data)}),subscribe(v.CLASS_CHANGED,g=>{if(!isBridgeEnvelope(g))return;const A=toTrimmedString(g.data?.class)??toTrimmedString(g.data);A&&o.setClass(A)}),Object.freeze({destroy:()=>{p.forEach(g=>g?.())}})},zA=Object.freeze({}),areDisplayHostSettingsEqual=(g,A)=>g.showPrompts===A.showPrompts&&g.showTimestamps===A.showTimestamps,freezeDisplayHostSettings=g=>Object.freeze(g),readDisplayHostSettings=g=>{const A=g?.()??zA;return freezeDisplayHostSettings({showPrompts:Boolean(A.show_prompts),showTimestamps:Boolean(A.show_timestamps)})},resolvePayloadSnapshot$2=(g,A)=>{if(!A||"object"!=typeof A||"string"!=typeof A.key)return null;if(!("value"in A))return null;switch(A.key){case"show_prompts":{const I=Boolean(A.value);return I===g.showPrompts?g:freezeDisplayHostSettings({...g,showPrompts:I})}case"single_prompt":{const I=!Boolean(A.value);return I===g.showPrompts?g:freezeDisplayHostSettings({...g,showPrompts:I})}case"show_timestamps":{const I=Boolean(A.value);return I===g.showTimestamps?g:freezeDisplayHostSettings({...g,showTimestamps:I})}default:return null}},createHostDisplaySettingsModel=({eventBus:g,readHostSettings:A})=>{if(!g||"function"!=typeof g.on)throw new Error("createHostDisplaySettingsModel requires an eventBus with on(topic, listener).");if("function"!=typeof A)throw new Error("createHostDisplaySettingsModel requires readHostSettings().");let I=readDisplayHostSettings(A);const C=new Set,notifyListeners=()=>{for(const g of C)g()},commitSnapshot=g=>(!g||areDisplayHostSettingsEqual(I,g)||(I=g,notifyListeners()),I),syncFromHost=()=>commitSnapshot(readDisplayHostSettings(A)),handleHostSettingsChanged=g=>{const A=resolvePayloadSnapshot$2(I,g);A&&commitSnapshot(A)},e=g.on(w.HOST_SETTINGS_CHANGED,handleHostSettingsChanged),t=g.on(w.SYSTEM_PHASE,syncFromHost),subscribe=g=>(C.add(g),()=>{C.delete(g)}),getSnapshot=()=>I,destroy=()=>{e?.(),t?.(),C.clear()};return Object.freeze({destroy,getSnapshot,subscribe})},ZA=Object.freeze({}),areHostSettingsEqual=(g,A)=>g.echo_input===A.echo_input&&g.echo_gmcp===A.echo_gmcp&&g.single_prompt===A.single_prompt&&g.show_timestamps===A.show_timestamps,freezeHostSettings=g=>Object.freeze(g),readHostSettingsFromHost=g=>{const A=g?.()??ZA;return freezeHostSettings({echo_input:Boolean(A.echo_input),echo_gmcp:Boolean(A.echo_gmcp),single_prompt:!Boolean(A.show_prompts),show_timestamps:Boolean(A.show_timestamps)})},resolvePayloadSnapshot$1=(g,A)=>{if(!A||"object"!=typeof A||"string"!=typeof A.key)return null;if(!("value"in A))return null;switch(A.key){case"echo_input":{const I=Boolean(A.value);return I===g.echo_input?g:freezeHostSettings({...g,echo_input:I})}case"echo_gmcp":{const I=Boolean(A.value);return I===g.echo_gmcp?g:freezeHostSettings({...g,echo_gmcp:I})}case"single_prompt":{const I=Boolean(A.value);return I===g.single_prompt?g:freezeHostSettings({...g,single_prompt:I})}case"show_prompts":{const I=!Boolean(A.value);return I===g.single_prompt?g:freezeHostSettings({...g,single_prompt:I})}case"show_timestamps":{const I=Boolean(A.value);return I===g.show_timestamps?g:freezeHostSettings({...g,show_timestamps:I})}default:return null}},createHostSettingsModel=({eventBus:g,readHostSettings:A})=>{if(!g||"function"!=typeof g.on)throw new Error("createHostSettingsModel requires an eventBus with on(topic, listener).");if("function"!=typeof A)throw new Error("createHostSettingsModel requires readHostSettings().");let I=readHostSettingsFromHost(A);const C=new Set,notifyListeners=()=>{for(const g of C)g()},commitSnapshot=g=>(!g||areHostSettingsEqual(I,g)||(I=g,notifyListeners()),I),syncFromHost=()=>commitSnapshot(readHostSettingsFromHost(A)),handleHostSettingsChanged=g=>{const A=resolvePayloadSnapshot$1(I,g);A&&commitSnapshot(A)},e=g.on(w.HOST_SETTINGS_CHANGED,handleHostSettingsChanged),t=g.on(w.SYSTEM_PHASE,syncFromHost),subscribe=g=>(C.add(g),()=>{C.delete(g)}),getSnapshot=()=>I,destroy=()=>{e?.(),t?.(),C.clear()};return Object.freeze({destroy,getSnapshot,subscribe})},FA=Object.freeze({}),areHostLayoutsEqual=(g,A)=>g.display_tabstrip===A.display_tabstrip,freezeHostLayout=g=>Object.freeze(g),readHostLayoutFromHost=g=>{const A=g?.()??FA;return freezeHostLayout({display_tabstrip:"boolean"!=typeof A.tabSetEnableTabStrip||A.tabSetEnableTabStrip})},resolvePayloadSnapshot=(g,A)=>{if(!A||"object"!=typeof A||"string"!=typeof A.key)return null;if(!("value"in A))return null;if("display_tabstrip"===A.key){const I=Boolean(A.value);return I===g.display_tabstrip?g:freezeHostLayout({...g,display_tabstrip:I})}return null},createHostLayoutModel=({eventBus:g,readHostLayout:A})=>{if(!g||"function"!=typeof g.on)throw new Error("createHostLayoutModel requires an eventBus with on(topic, listener).");if("function"!=typeof A)throw new Error("createHostLayoutModel requires readHostLayout().");let I=readHostLayoutFromHost(A);const C=new Set,notifyListeners=()=>{for(const g of C)g()},commitSnapshot=g=>(!g||areHostLayoutsEqual(I,g)||(I=g,notifyListeners()),I),syncFromHost=()=>commitSnapshot(readHostLayoutFromHost(A)),handleHostSettingsChanged=g=>{const A=resolvePayloadSnapshot(I,g);A?commitSnapshot(A):syncFromHost()},e=g.on(w.HOST_SETTINGS_CHANGED,handleHostSettingsChanged),t=g.on(w.SYSTEM_PHASE,syncFromHost),subscribe=g=>(C.add(g),()=>{C.delete(g)}),getSnapshot=()=>I,destroy=()=>{e?.(),t?.(),C.clear()};return Object.freeze({destroy,getSnapshot,subscribe})},hasPersistenceAdapter=g=>g&&"function"==typeof g.getVariable&&"function"==typeof g.setVariable,createPlayStatsPersistence=({adapter:g}={})=>{if(!hasPersistenceAdapter(g))return null;const A=createPersistenceStore({adapter:g,sliceKey:$g.GAME_STATS,schema:AA,migrate:migrateGameStatsPersistence});return{read:()=>A.getAll(),write:g=>{A.set("kills",g?.kills??0),A.set("month",g?.month??{})}}},safeUnsubscribe=g=>{"function"==typeof g&&g()},resolveStreamEntries=(g,A)=>{const I=g.getSnapshot(),C=Array.isArray(I?.buffer)?I.buffer:[];if(0===C.length)return{entries:[],lastProcessedStreamId:-1};const e=C.filter(g=>g.id>A);return{entries:e,lastProcessedStreamId:e.length>0?e[e.length-1].id:A}},createPlayStatsController=({adapter:g,now:A,persistence:I=createPlayStatsPersistence({adapter:g}),streamModel:C}={})=>{const e=createPlayStatsModel({persistedGameStats:I?.read?.(),now:A}),t=[];let n=-1,a=!1;if(I&&"function"==typeof I.write&&t.push(e.subscribePersistence(g=>{I.write(g)})),g&&"function"==typeof g.on&&(t.push(g.on("Char.Status",e.handleStatus)),t.push(g.on("IRE.Misc.Achievement",A=>{e.handleAchievement(A)?.requestGoldCap&&"function"==typeof g.send&&g.send("goldcap")})),t.push(g.on("IRE.Time.List",e.handleTimeList))),C&&"function"==typeof C.subscribe&&"function"==typeof C.getSnapshot){const processStreamSnapshot=()=>{const g=resolveStreamEntries(C,n);n=g.lastProcessedStreamId,e.processStreamEntries(g.entries)};t.push(C.subscribe(processStreamSnapshot))}return{destroy:()=>{a||(a=!0,t.splice(0).forEach(safeUnsubscribe))},model:e}},KA=(0,e.createContext)(null),useNexGui=()=>{const g=(0,e.useContext)(KA);if(null===g)throw new Error("useNexGui must be used inside NexGuiContext.Provider");return g},NexGuiMountRoot=()=>null,createReactMountLifecycle=({contextValue:g,RootComponent:A=NexGuiMountRoot}={})=>{const I=new Map;let C=!1;const unmountContainer=g=>{const A=I.get(g);A&&(I.delete(g),A.unmount())},mount=n=>{if(C)throw new Error("[nexGui4] Cannot mount a destroyed nexGui instance.");if(!n||"object"!=typeof n||1!==n.nodeType)throw new TypeError("[nexGui4] mount(container) requires a DOM element container.");unmountContainer(n);const a=(0,t.createRoot)(n);return I.set(n,a),a.render((0,e.createElement)(KA.Provider,{value:g},(0,e.createElement)(A))),{unmount:()=>{unmountContainer(n)}}},destroy=()=>{if(!C){C=!0;for(const g of[...I.keys()])unmountContainer(g)}};return Object.freeze({mount,destroy,isMounted:()=>I.size>0})},NOOP$1=()=>{},normalizeCommand=g=>"function"==typeof g?g:NOOP$1,createPlatformTabsController=()=>{let g=NOOP$1,A=NOOP$1,I=NOOP$1,C=NOOP$1,e=NOOP$1,hasSavedLayout=()=>!1;const resetNativeDisplayCommands=()=>{g=NOOP$1,A=NOOP$1},resetLayoutCommands=()=>{I=NOOP$1,C=NOOP$1,e=NOOP$1,hasSavedLayout=()=>!1};return Object.freeze({mountNativeDisplay:(...A)=>g(...A),unmountNativeDisplay:(...g)=>A(...g),configureNativeDisplayCommands:(I={})=>{const C=normalizeCommand(I.mountNativeDisplay),e=normalizeCommand(I.unmountNativeDisplay);return g=C,A=e,()=>{g===C&&A===e&&resetNativeDisplayCommands()}},resetNativeDisplayCommands,applyLayoutPreset:(...g)=>I(...g),saveLayout:(...g)=>C(...g),restoreLayout:(...g)=>e(...g),hasSavedLayout:(...g)=>hasSavedLayout(...g),configureLayoutCommands:(g={})=>{const A=normalizeCommand(g.applyLayoutPreset),t=normalizeCommand(g.saveLayout),n=normalizeCommand(g.restoreLayout),a="function"==typeof g.hasSavedLayout?g.hasSavedLayout:()=>!1;return I=A,C=t,e=n,hasSavedLayout=a,()=>{I===A&&C===t&&e===n&&hasSavedLayout===a&&resetLayoutCommands()}},resetLayoutCommands})};(0,A.setAutoFreeze)(!1);var YA="1.0.9",resolveRuntimePorts=(g={})=>{const A=createBrowserRuntimePorts(),I=g&&"object"==typeof g?g:{};return Object.freeze({...A,...I})},resolveConfiguredDefenceList=g=>normalizeConfiguredDefenceList(g.getConfiguredDefences?.()),resolveActiveDefenceList=(g,A=[])=>normalizeConfiguredDefenceList(g.getActiveDefences?.(A)),seedInitialDisplayTheme=({adapter:g,persistenceStore:A})=>{if(void 0!==g.getVariable("nexGui4Settings")?.settings)return;const I=g.getHostSettings?.()??{},C=A.get("theme");A.set("theme",{...C,displayFontFamily:readHostDisplayFontFamily(I),displayFontSize:readHostDisplayFontSize(I)})},withRelationshipCommandTracking=(g,A)=>{const I=assertAdapterContract(g);if(!A||"function"!=typeof A.trackRelationshipCommand)return I;const C=Object.create(I),e=I.send.bind(I);return Object.defineProperty(C,"send",{value:g=>(A.trackRelationshipCommand(g),e(g)),enumerable:!0}),assertAdapterContract(C)},resolveAdapter=({adapter:g,playerRelationships:A}={})=>withRelationshipCommandTracking(g??createNexusAdapter(),A),createNexGui=({adapter:g,debugEnabled:A=!1,traceLimit:I=500,autoStart:C=!0,playerDirectory:e,playerRelationships:t,startupPhaseHandlers:n,remoteService:a,runtimePorts:r}={})=>{const o=resolveRuntimePorts(r),i=t??createPlayerRelationshipsModel(),l=resolveAdapter({adapter:g,playerRelationships:i}),s=createEventBus({label:"nexgui4",debugEnabled:A,traceLimit:I}),c=e??createPlayerDirectoryModel({fetchImpl:o.fetch,now:o.now}),u=createPlayerDirectoryDiagnosticsModel({now:o.now}),m=createPlayerDirectoryLifecycle({playerDirectory:c,diagnostics:u}),d=createPlatformTabsController(),p=createHostDisplaySettingsModel({eventBus:s,readHostSettings:()=>l.getHostSettings?.()??{}}),h=createHostSettingsModel({eventBus:s,readHostSettings:()=>l.getHostSettings?.()??{}}),y=createHostLayoutModel({eventBus:s,readHostLayout:()=>l.getHostLayoutSnapshot?.()??{}}),b=createTimerModel({eventBus:s,now:o.now,setTimer:o.setTimeout,clearTimer:o.clearTimeout}),x=createScrollbackSessionStore({storage:createIndexedDbManager(),setTimeoutFn:o.setTimeout,clearTimeoutFn:o.clearTimeout,logger:console}),E=createStreamModel({onAppend:g=>x.append(g),onClear:()=>{x.clear().catch(g=>{console.error("[nexGui4] Failed to clear scrollback session.",g)})}}),R=createTranscriptModel({cap:5e3}),S=createTranscriptModel({cap:5e3}),M=createStatsModel({eventBus:s}),T=createPartyModel({eventBus:s}),N=createRoomModel({eventBus:s}),G=createCharacterModel({eventBus:s}),D=createTargetModel({eventBus:s}),j=createDefenceModel({eventBus:s}),P=createFeedModel({cap:5e3}),B=createClassBalanceController(),O=createRoomOccupantsModel({roomModel:N,playerDirectory:c}),L=createPlayStatsController({adapter:l,streamModel:E,now:o.now}),z=createPartyAutomationModel({characterModel:G,partyModel:T,playerDirectory:c,sendCommand:g=>l.send(g)}),Z=resolveConfiguredDefenceList(l),F=resolveActiveDefenceList(l,Z);j.replaceAll(F);const K=createPersistenceStore({adapter:l,sliceKey:$g.SETTINGS});seedInitialDisplayTheme({adapter:l,persistenceStore:K});const Y=createPersistenceStore({adapter:l,sliceKey:$g.UI,schema:IA,migrate:migrateUiPersistence});for(const[v,w]of Object.entries(K.get("party")))T.setSetting(v,w);s.on(w.PARTY_UPDATED,({settings:g})=>{K.set("party",g)});const V=createGmcpIngressController({adapter:l,eventBus:s,timerModel:b,streamModel:E,systemStreamModel:R,combatStreamModel:S,statsModel:M,partyModel:T,roomModel:N,characterModel:G,targetModel:D,defenceModel:j,classBalanceController:B,playerDirectory:c,roomOccupantsModel:O,partyAutomationModel:z}),W=createDefenceStore({defenceModel:j,eventBus:s,configuredDefences:Z}),U=Object.freeze({timers:createTimerStore({timerModel:b,eventBus:s}),stream:E,stats:createStatsStore({statsModel:M,eventBus:s}),party:createPartyStore({partyModel:T,eventBus:s}),room:createRoomStore({roomModel:N,eventBus:s}),character:createCharacterStore({characterModel:G,eventBus:s}),target:createTargetStore({targetModel:D,eventBus:s}),defence:W,theme:createThemeStore({eventBus:s,persistenceStore:K}),ui:createUiStore({persistenceStore:K}),feed:createFeedStore({feedModel:P}),playStats:createPlayStatsStore({playStatsModel:L.model}),systemStream:R,combatStream:S});let H=!1,Q=null;const syncActiveDefencesFromHost=()=>{const g=U.defence.getState().configuredDefences??[];j.replaceAll(resolveActiveDefenceList(l,g))},scheduleActiveDefenceResync=()=>{null!=Q&&o.clearTimeout(Q),Q=o.setTimeout(()=>{Q=null,H||syncActiveDefencesFromHost()},0)};s.on(v.CLASS_CHANGED,scheduleActiveDefenceResync);const X=registerGmcpBindings({adapter:l,eventBus:s,playerDirectory:c,playerDirectoryLifecycle:m,playerRelationships:i,playerDirectoryDiagnostics:u,remoteService:a,fetchFn:o.fetch}),q={adapter:l,eventBus:s,hostDisplaySettingsModel:p,hostSettingsModel:h,hostLayoutModel:y,playerDirectory:c,playerDirectoryLifecycle:m,playerDirectoryDiagnostics:u,playerRelationships:i,stores:U,streamModel:E,scrollbackSession:x,persistenceStore:K,scrollbackLayoutStore:Y,platformTabs:d,formatInlineNames:g=>highlightInlineNamesInText(g,{contextValue:q})},_=createReactMountLifecycle({contextValue:q});let $=null;const initializeScrollbackSession=async()=>{try{if(await x.initialize(),H)return;await x.clear()}catch(g){if(H)return;console.warn("[nexGui4] Scrollback session startup degraded; continuing.",g)}},gg=createStartupOrchestrator({adapter:l,eventBus:s,phaseHandlers:{...n,[eA.PREPARING]:async g=>{await initializeScrollbackSession(),await(n?.[eA.PREPARING]?.(g))}},setTimeoutFn:o.setTimeout,clearTimeoutFn:o.clearTimeout}),startRuntime=()=>($??=gg.start(),$.catch(()=>{}),$),mount=g=>{if(H)throw new Error("[nexGui4] Cannot mount a destroyed nexGui instance.");return _.mount(g)},destroy=()=>{H||(H=!0,null!=Q&&(o.clearTimeout(Q),Q=null),_.destroy(),gg.destroy(),p.destroy(),h.destroy(),y.destroy(),X?.(),V.destroy(),L.destroy(),U.playStats.destroy?.(),s.emit(w.SYSTEM_DESTROYED,{version:YA}),b.destroy(),P.destroy(),T.destroy(),N.destroy(),M.destroy(),G.destroy(),D.destroy(),j.destroy(),L.model.destroy(),B.destroy(),x.destroy(),m.destroy?.(),c.destroy?.(),i.destroy?.(),clearRelationshipNameFormatterCache(q),clearMessageReplacementContextCache(),d.resetNativeDisplayCommands(),d.resetLayoutCommands(),l.destroy(),s.clear())},Ag=composePublicApi({version:YA,startupOrchestrator:gg,isMounted:()=>_.isMounted(),character:{characterModel:G},target:{targetModel:D,setTarget:g=>{l.setTarget(g)}},timerModel:b,players:{playerDirectory:c,getPlayer:c.getPlayerProfile,getPlayerColor:c.getPlayerColor,refreshPlayer:c.refreshPlayerProfile,display:g=>l.displayHtmlLine(g),isAlly:i.isAllyPlayer,isEnemy:i.isEnemyPlayer,isCityEnemy:i.isCityEnemyPlayer},display:{notice:(g,A)=>l.notice(g,A)},colors:{cityPalette:J,iconHtml:(g,A,I)=>buildIconHtml(g,A,I,o.getPublicDualToneIcons?.()??null)},customize:{getConfiguredDefences:()=>U.defence.getState().configuredDefences,setConfiguredDefences:g=>(U.defence.getState().setConfiguredDefences(normalizeConfiguredDefenceList(g)),U.defence.getState().configuredDefences),classBalanceController:B,setClassBalanceType:g=>{const A=B.setType(g);return G.update(A),B.getType()},mountNativeDisplay:()=>d.mountNativeDisplay(),unmountNativeDisplay:()=>d.unmountNativeDisplay()},layout:{presetIds:wA,applyPreset:g=>d.applyLayoutPreset(g),saveLayout:()=>d.saveLayout(),restoreLayout:()=>d.restoreLayout(),hasSavedLayout:()=>d.hasSavedLayout()},party:{partyModel:T,getSnapshot:()=>T.snapshot()},room:{roomModel:N,setItemOverride:setUserRoomItemOverride,removeItemOverride:removeUserRoomItemOverride,listItemOverrides:listUserRoomItemOverrides,getItemOverride:getUserRoomItemOverride},stats:{playStatsModel:L.model},stream:{systemStream:U.systemStream,combatStream:U.combatStream},cdb:{query:g=>a?.queryCharacters?.(g)??[],get:g=>fetchLiveCharacter(g,{fetchFn:o.fetch})}}),Ig={version:YA,mount,stores:U,debug:{getEventTrace:()=>s.getTrace(),setDebugEnabled:g=>s.setDebugEnabled(g),stream:{getStats:()=>({...E.getStats(),scrollbackSession:x.getStats()}),getScrollbackStats:()=>x.getStats(),getDbStats:async()=>{try{const g=await x.readAll(),A=x.getStats();return{fallback:A.storageFallback,count:g.length,firstId:g[0]?.id,lastId:g[g.length-1]?.id,scrollbackSession:A}}catch(g){return{error:g.message}}}},playerDirectory:{getSnapshot:()=>u.getPlayerDirectoryDiagnosticsSnapshot()}},destroy};return Object.defineProperty(Ig,"state",{enumerable:!0,get:()=>Ag.state}),Object.defineProperty(Ig,"api",{value:Ag.api,enumerable:!0}),Object.defineProperty(Ig,"__contextValue",{value:q,enumerable:!1}),Object.defineProperty(Ig,"__start",{value:startRuntime,enumerable:!1}),C&&startRuntime(),Ig},cloneTokens=g=>structuredClone(g),buildHueFilter=g=>`hue-rotate(${g}deg)`,createMuiTheme=(g=GA)=>{const A=g??GA;return(0,a.createTheme)({spacing:A.spacing.unit,shape:{borderRadius:A.radius.panel},typography:{fontSize:A.theme.fontSize},palette:{mode:"dark",primary:{main:A.text.accent},background:{default:A.background.primary,paper:A.background.panel},text:{primary:A.text.primary,secondary:A.text.secondary,disabled:A.text.muted},hp:{main:A.game.hp},mp:{main:A.game.mp},ep:{main:A.game.ep},wp:{main:A.game.wp},nl:{main:A.game.nl},timerActive:{main:A.game.timerActive},timerCritical:{main:A.game.timerCritical}},components:{MuiTooltip:{defaultProps:{arrow:!0,placement:"top"}},MuiPaper:{defaultProps:{elevation:0}},MuiButton:{defaultProps:{size:"small"}},MuiSwitch:{defaultProps:{size:"small"}},MuiSlider:{defaultProps:{size:"small"}}},nexGui:{backgroundImage:resolveBackgroundImageSource(A.theme.backgroundImage),backgroundOpacity:A.theme.backgroundOpacity,backgroundFilter:buildHueFilter(A.theme.hue),radius:cloneTokens(A.radius),tokens:cloneTokens(A)}})},VA=__commonJSMin((g,A)=>{var I="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED";A.exports=I}),WA=__commonJSMin((g,A)=>{var I=VA();function emptyFunction(){}function emptyFunctionWithReset(){}emptyFunctionWithReset.resetWarningCache=emptyFunction,A.exports=function(){function shim(g,A,C,e,t,n){if(n!==I){var a=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw a.name="Invariant Violation",a}}function getShim(){return shim}shim.isRequired=shim;var g={array:shim,bigint:shim,bool:shim,func:shim,number:shim,object:shim,string:shim,symbol:shim,any:shim,arrayOf:getShim,element:shim,elementType:shim,instanceOf:getShim,node:shim,objectOf:getShim,oneOf:getShim,oneOfType:getShim,shape:getShim,exact:getShim,checkPropTypes:emptyFunctionWithReset,resetWarningCache:emptyFunction};return g.PropTypes=g,g}}),UA=__toESM(__commonJSMin((g,A)=>{A.exports=WA()()})(),1),DefenceTagComponent=({name:g})=>React.createElement(n.Paper,{className:"defence-tag",elevation:3,sx:{fontFamily:"inherit",fontSize:"inherit",px:.75,py:"2px",textAlign:"center",width:"100%"}},g);DefenceTagComponent.displayName="DefenceTag",DefenceTagComponent.propTypes={name:UA.default.string.isRequired};var HA=(0,e.memo)(DefenceTagComponent);HA.displayName="DefenceTag",HA.propTypes=DefenceTagComponent.propTypes;var getErrorMessage=g=>g instanceof Error&&g.message?g.message:"string"==typeof g&&g.length>0?g:"Unknown panel error.",QA=class extends e.Component{static displayName="PanelErrorBoundary";static propTypes={children:UA.default.node,panelName:UA.default.node.isRequired};static getDerivedStateFromError(g){return{error:g}}constructor(g){super(g),this.state={error:null}}componentDidCatch(){}render(){const{children:g,panelName:A}=this.props,{error:I}=this.state;return I?React.createElement(n.Box,{className:"nexgui4-panel-error-boundary",role:"alert",sx:{backgroundColor:"background.paper",border:1,borderColor:"divider",borderRadius:1,color:"text.primary",display:"flex",flex:1,flexDirection:"column",gap:1,minHeight:0,minWidth:0,p:1.5,width:"100%"}},React.createElement(n.Typography,{component:"h2",sx:{fontSize:"0.95rem",fontWeight:700}},A),React.createElement(n.Typography,{color:"text.secondary",variant:"body2"},"This panel failed to render."),React.createElement(n.Typography,{sx:{fontFamily:"monospace",overflowWrap:"anywhere"},variant:"body2"},getErrorMessage(I))):g}},isIterable=g=>Symbol.iterator in g,hasIterableEntries=g=>"entries"in g,compareEntries=(g,A)=>{const I=g instanceof Map?g:new Map(g.entries()),C=A instanceof Map?A:new Map(A.entries());if(I.size!==C.size)return!1;for(const[e,t]of I)if(!C.has(e)||!Object.is(t,C.get(e)))return!1;return!0},compareIterables=(g,A)=>{const I=g[Symbol.iterator](),C=A[Symbol.iterator]();let e=I.next(),t=C.next();for(;!e.done&&!t.done;){if(!Object.is(e.value,t.value))return!1;e=I.next(),t=C.next()}return!!e.done&&!!t.done};function shallow(g,A){return!!Object.is(g,A)||"object"==typeof g&&null!==g&&"object"==typeof A&&null!==A&&Object.getPrototypeOf(g)===Object.getPrototypeOf(A)&&(isIterable(g)&&isIterable(A)?hasIterableEntries(g)&&hasIterableEntries(A)?compareEntries(g,A):compareIterables(g,A):compareEntries({entries:()=>Object.entries(g)},{entries:()=>Object.entries(A)}))}function useShallow(g){const A=e.default.useRef(void 0);return I=>{const C=g(I);return shallow(A.current,C)?A.current:A.current=C}}var selectDefenceSlice=g=>({configuredDefences:g.configuredDefences,defences:g.defences,gainDefence:g.gainDefence,loseDefence:g.loseDefence,resetDefences:g.resetDefences,setConfiguredDefences:g.setConfiguredDefences}),useDefence=()=>{const{stores:g}=useNexGui();return g.defence(useShallow(selectDefenceSlice))},getFlipTransform$10=g=>{switch(g){case 1:return"scaleX(-1) scaleY(-1)";case 2:return"scaleY(-1)";case 3:return"scaleX(-1)";default:return"none"}},DefencesPanelInner=()=>{const g=(0,a.useTheme)(),[A]=(0,e.useState)(()=>Math.floor(4*Math.random())),{configuredDefences:I,defences:C}=useDefence(),t=g?.nexGui?.backgroundImage??"",r=g?.nexGui?.backgroundOpacity??.5,o=g?.nexGui?.backgroundFilter??"none",i=new Set(C),l=I.filter(g=>!i.has(g)),s=l.length>0;return React.createElement(n.Box,{className:"defences-panel",sx:{color:"text.primary",fontFamily:g.typography.fontFamily,fontSize:g.typography.fontSize,height:"100%",overflow:"hidden",position:"relative",width:"100%"}},t?React.createElement(n.Box,{"aria-hidden":"true",className:"defences-panel__background",sx:{backgroundImage:`url(${t})`,backgroundPosition:"center",backgroundSize:"cover",filter:o,inset:0,opacity:r,position:"absolute",transform:getFlipTransform$10(A),zIndex:0}}):null,s?React.createElement(n.Box,{className:"defences-panel__content",sx:{height:"100%",overflowY:"auto",p:1,position:"relative",width:"100%",zIndex:1}},React.createElement(n.Paper,{className:"defences-panel__surface",elevation:0,sx:{backgroundColor:(0,a.alpha)(g.palette.background.paper,.78),minHeight:"100%",p:1}},React.createElement(n.Stack,{spacing:.5,sx:{position:"relative",width:"100%"}},l.map(g=>React.createElement(HA,{key:g,name:g}))))):null)};DefencesPanelInner.displayName="DefencesPanelInner";var DefencesPanel=()=>React.createElement(QA,{panelName:"Defences"},React.createElement(DefencesPanelInner,null));DefencesPanel.displayName="DefencesPanel";var XA=1,JA=24,qA=8,noop$3=()=>{},defaultEstimateSize=()=>48,defaultGetItemKey=(g,A)=>g?.id??A,joinClassNames=(...g)=>g.filter(Boolean).join(" "),getVirtualItemEnd=g=>Number.isFinite(g?.end)?g.end:Number.isFinite(g?.size)?g.start+g.size:g?.start??0,getElementWidth=(g,A=null)=>{const I=A?.contentRect?.width??g.getBoundingClientRect?.().width??g.clientWidth;return Number.isFinite(I)?I:0},getVerticalScrollbarGutterWidth=g=>{if(!g)return 0;const A=Number(g.offsetWidth),I=Number(g.clientWidth);return Number.isFinite(A)&&Number.isFinite(I)?Math.max(0,A-I):0},isNearBottom=g=>g.scrollHeight-g.scrollTop-g.clientHeight<=JA,isPinnedToDisplayTail=g=>g.scrollHeight-g.scrollTop-g.clientHeight<=XA,TranscriptViewportComponent=({items:g,renderItem:A,getItemKey:I=defaultGetItemKey,itemKeyVersion:C=null,displayPinKey:t=null,estimateSize:a=defaultEstimateSize,overscan:o=5,fontFamily:i="inherit",fontSize:l,border:s=!1,mode:c="panel",onRequestHistory:u=noop$3,onScrollLockChange:m=noop$3,activeMatchIndex:d=-1,footer:p=null,fallbackToAllItems:h=!1,onSendCommand:y=noop$3,showScrollLockBadge:b=!1,viewportSx:x,viewportTestId:v="virtual-scroll-viewport"},E)=>{const w=(0,e.useRef)(null),R=(0,e.useRef)(null),S=(0,e.useRef)({animationFrame:0,width:null}),M=(0,e.useRef)(g),T=(0,e.useRef)(I),N=(0,e.useRef)({getItemKey:null,itemKeyRevision:null,lookup:null}),[G,D]=(0,e.useState)(!1),[j,P]=(0,e.useState)(0),[B,O]=(0,e.useState)(0),L="display"===c,z=parseFontSize(l);M.current=g,T.current=I;const Z=C??g;N.current.getItemKey===I&&N.current.itemKeyRevision===Z||(N.current={getItemKey:I,itemKeyRevision:Z,lookup:g=>T.current(M.current[g],g)});const F=N.current.lookup,K=(0,e.useCallback)(()=>w.current,[]),Y=(0,r.useVirtualizer)({count:g.length,initialRect:{height:400,width:0},getScrollElement:K,estimateSize:a,getItemKey:F,overscan:o}),V=Y.getTotalSize(),W=Y.getVirtualItems(),U=W[0]??null,H=W.at(-1)??null,Q=U?Math.max(0,U.start):0,X=H?Math.max(0,V-getVirtualItemEnd(H)):0,J=h&&0===W.length&&g.length>0,q=joinClassNames("nexgui4-transcript-spacer",!J&&(L?"nexgui4-transcript-spacer--display":"nexgui4-transcript-spacer--panel")),_=J?void 0:L?0===W.length?{height:`${V}px`}:{paddingBottom:`${X}px`,paddingTop:`${Q}px`}:{height:`${V}px`},$=null==l?void 0:"number"==typeof l?`${l}px`:l,gg=joinClassNames("nexgui4-transcript-scroll-viewport",L?"nexgui4-transcript-scroll-viewport--display":"nexgui4-transcript-scroll-viewport--panel"),Ag={fontFamily:i,fontSize:$},Ig={right:`${qA+j}px`},Cg=(0,e.useCallback)(g=>{const A=getVerticalScrollbarGutterWidth(g);P(g=>g===A?g:A)},[]),eg=(0,e.useCallback)(()=>{const g=w.current;g&&(g.scrollTop=g.scrollHeight)},[]);(0,e.useImperativeHandle)(E,()=>({scrollToBottom:eg,scrollToIndex:(g,A)=>Y.scrollToIndex(g,A)}),[Y,eg]),(0,e.useLayoutEffect)(()=>{if(!L)return void(R.current=null);const A=w.current;if(!A)return;const I={itemCount:g.length,scrollHeight:A.scrollHeight,totalSize:V},C=R.current;null!=C&&C.itemCount===I.itemCount&&C.scrollHeight===I.scrollHeight&&C.totalSize===I.totalSize&&isPinnedToDisplayTail(A)||(A.scrollTop=A.scrollHeight,R.current=I)},[t,B,L,g.length,V]),(0,e.useLayoutEffect)(()=>{L||G||0===g.length||Y.scrollToIndex(g.length-1,{align:"end"})},[L,G,g.length,Y]),(0,e.useLayoutEffect)(()=>{const g=Y.measure,A=window.ResizeObserver,I=S.current;if(!L)return I.width=null,void(I.animationFrame&&(window.cancelAnimationFrame(I.animationFrame),I.animationFrame=0));const C=w.current;if(!C||"function"!=typeof g||"function"!=typeof A)return;I.width=getElementWidth(C);const scheduleMeasure=A=>{I.width!==A&&(I.width=A,I.animationFrame&&window.cancelAnimationFrame(I.animationFrame),I.animationFrame=window.requestAnimationFrame(()=>{I.animationFrame=0,g(),O(g=>g+1)}))},e=new A(g=>{scheduleMeasure(getElementWidth(C,g[0]))});return e.observe(C),()=>{e.disconnect(),I.animationFrame&&(window.cancelAnimationFrame(I.animationFrame),I.animationFrame=0)}},[L,Y]),(0,e.useLayoutEffect)(()=>{if(L)return void P(0);const g=w.current;if(!g)return;Cg(g);const A=window.ResizeObserver;if("function"!=typeof A)return;const I=new A(()=>{Cg(g)});return I.observe(g),()=>{I.disconnect()}},[L,Cg]),(0,e.useLayoutEffect)(()=>{L||Cg(w.current)},[L,g.length,V,Cg]),(0,e.useEffect)(()=>{0===g.length&&D(!1)},[g.length]),(0,e.useEffect)(()=>{m(G)},[G,m]);const tg=(0,e.useCallback)(g=>{if(L)return;Cg(g.currentTarget);const A=!isNearBottom(g.currentTarget);D(g=>g===A?g:A)},[L,Cg]);(0,e.useEffect)(()=>{const g=w.current;if(!g)return;const handleWheel=g=>{!L||g.deltaY>=0||(g.preventDefault(),u())};return g.addEventListener("wheel",handleWheel,{passive:!1}),()=>g.removeEventListener("wheel",handleWheel)},[L,u]);const ng=(0,e.useCallback)(g=>{if(!(g.target instanceof Element))return;const A=g.target.closest("a");if(!A||!g.currentTarget.contains(A))return;if(A.classList.contains("url_link"))return;const I=A.getAttribute("rel");I&&(g.preventDefault(),y(I))},[y]);return React.createElement(n.Box,{component:"section",sx:{border:s?1:0,borderColor:"divider",borderRadius:s?1:0,display:"flex",flex:1,flexDirection:"column",minHeight:0,position:"relative"}},b&&G?React.createElement(n.Box,{component:"div","data-testid":"scroll-lock-badge",role:"status",style:Ig,sx:{backgroundColor:"background.paper",border:1,borderColor:"divider",borderRadius:1,boxShadow:1,color:"text.secondary",fontSize:"0.75rem",px:1,py:.5,position:"absolute",top:8,zIndex:2}},"Scroll lock"):null,React.createElement(n.Box,{className:gg,component:"div",onClick:ng,"data-testid":v,onScroll:tg,ref:w,style:Ag,sx:x},React.createElement("div",{className:q,"data-testid":"virtual-scroll-spacer",style:_},J?g.map((g,C)=>React.createElement("div",{className:"nexgui4-transcript-row","data-index":C,key:I(g,C)},A(g,{fontSize:z,index:C,isActiveMatch:C===d}))):W.map(I=>{const C=g[I.index];return null==C?null:React.createElement("div",{className:joinClassNames("nexgui4-transcript-row",L?"nexgui4-transcript-row--display":"nexgui4-transcript-row--panel"),"data-index":I.index,key:I.key,ref:Y.measureElement,style:L?void 0:{transform:`translateY(${I.start}px)`}},A(C,{fontSize:z,index:I.index,isActiveMatch:I.index===d}))})),p))};TranscriptViewportComponent.displayName="TranscriptViewport",TranscriptViewportComponent.propTypes={activeMatchIndex:UA.default.number,border:UA.default.bool,displayPinKey:UA.default.oneOfType([UA.default.number,UA.default.string]),estimateSize:UA.default.func,fallbackToAllItems:UA.default.bool,fontFamily:UA.default.string,fontSize:UA.default.oneOfType([UA.default.number,UA.default.string]),footer:UA.default.node,getItemKey:UA.default.func,itemKeyVersion:UA.default.oneOfType([UA.default.number,UA.default.string]),items:UA.default.array.isRequired,mode:UA.default.oneOf(["panel","display"]),onRequestHistory:UA.default.func,onSendCommand:UA.default.func,onScrollLockChange:UA.default.func,overscan:UA.default.number,renderItem:UA.default.func.isRequired,showScrollLockBadge:UA.default.bool,viewportSx:UA.default.oneOfType([UA.default.array,UA.default.func,UA.default.object]),viewportTestId:UA.default.string};var _A=(0,e.forwardRef)(TranscriptViewportComponent);_A.displayName="TranscriptViewport",_A.propTypes=TranscriptViewportComponent.propTypes;var padTwo=g=>String(g).padStart(2,"0"),padThree=g=>String(g).padStart(3,"0"),formatNumericTimestamp=(g,A=!0)=>{const I=new Date(g),C=[padTwo(I.getHours()),padTwo(I.getMinutes()),padTwo(I.getSeconds())].join(":");return A?`${C}.${padThree(I.getMilliseconds())}`:C},resolveTimestampLabel=(g,A=!0)=>"string"==typeof g&&g.length>0?g:Number.isFinite(g)?formatNumericTimestamp(g,A):null,resolveDateTime=g=>Number.isFinite(g)?new Date(g).toISOString():void 0,TimestampComponent=({timestamp:g,fontFamily:A=Xg,fontSize:I,highlight:C=!1,className:e="ng-timestamp timestamp mono no_out",includeMilliseconds:t=!0})=>{const n=resolveTimestampLabel(g,t);return null===n?null:React.createElement("time",{className:e,dateTime:resolveDateTime(g),style:C?{backgroundColor:"string"==typeof C?C:"yellow",fontFamily:A,fontSize:I}:{fontFamily:A,fontSize:I}},n)};TimestampComponent.displayName="Timestamp",TimestampComponent.propTypes={className:UA.default.string,fontFamily:UA.default.string,fontSize:UA.default.oneOfType([UA.default.number,UA.default.string]),highlight:UA.default.bool,includeMilliseconds:UA.default.bool,timestamp:UA.default.oneOfType([UA.default.number,UA.default.string]).isRequired};var $A=(0,e.memo)(TimestampComponent);$A.displayName="Timestamp",$A.propTypes=TimestampComponent.propTypes;var gI=UA.default.shape({content:UA.default.node,id:UA.default.oneOfType([UA.default.number,UA.default.string]),isHtml:UA.default.bool,timestamp:UA.default.number}),renderContent=(g,A)=>null==g||!1===g?null:(0,e.isValidElement)(g)?g:A?React.createElement(n.Typography,{component:"span",sx:{color:"text.primary",display:"inline",lineHeight:1.5},variant:"body2",dangerouslySetInnerHTML:{__html:g}}):React.createElement(n.Typography,{component:"span",sx:{color:"text.primary",display:"inline",lineHeight:1.5},variant:"body2"},g),FeedEntryComponent=({entry:g,fontSize:A})=>React.createElement(n.Box,{className:"feed-entry","data-feed-entry-id":g.id??void 0,sx:{alignItems:"flex-start",columnGap:1,display:"flex",minWidth:0,py:.5,width:"100%"}},Number.isFinite(g.timestamp)?React.createElement($A,{timestamp:g.timestamp,fontSize:A,includeMilliseconds:!1}):null,React.createElement(n.Box,{className:"feed-entry__content",sx:{flex:1,minWidth:0,overflowWrap:"anywhere"}},renderContent(g.content,g.isHtml)));FeedEntryComponent.displayName="FeedEntry",FeedEntryComponent.propTypes={entry:gI.isRequired,fontSize:UA.default.oneOfType([UA.default.number,UA.default.string])};var AI=(0,e.memo)(FeedEntryComponent);AI.displayName="FeedEntry",AI.propTypes=FeedEntryComponent.propTypes;var getFlipTransform$9=g=>{switch(g){case 1:return"scaleX(-1) scaleY(-1)";case 2:return"scaleY(-1)";case 3:return"scaleX(-1)";default:return"none"}},PanelBackgroundComponent=({backgroundClassName:g,children:A=null,component:I="div",contentClassName:C,contentSx:t,sx:r,...o})=>{const i=(0,a.useTheme)(),[l]=(0,e.useState)(()=>Math.floor(4*Math.random())),s=i?.nexGui?.backgroundImage??"",c=i?.nexGui?.backgroundOpacity??.5,u=i?.nexGui?.backgroundFilter??"none";return React.createElement(n.Box,{component:I,sx:[{display:"flex",flex:1,height:"100%",minHeight:0,minWidth:0,overflow:"hidden",position:"relative",width:"100%"},r],...o},s?React.createElement(n.Box,{"aria-hidden":"true",className:g,sx:{backgroundImage:`url(${s})`,backgroundPosition:"center",backgroundSize:"cover",filter:u,inset:0,opacity:c,position:"absolute",transform:getFlipTransform$9(l),zIndex:0}}):null,React.createElement(n.Box,{className:C,sx:[{display:"flex",flex:1,minHeight:0,minWidth:0,position:"relative",zIndex:1},t]},A))};PanelBackgroundComponent.displayName="PanelBackground",PanelBackgroundComponent.propTypes={backgroundClassName:UA.default.string,children:UA.default.node,component:UA.default.elementType,contentClassName:UA.default.string,contentSx:UA.default.oneOfType([UA.default.array,UA.default.func,UA.default.object]),sx:UA.default.oneOfType([UA.default.array,UA.default.func,UA.default.object])};var II=(0,e.memo)(PanelBackgroundComponent);II.displayName="PanelBackground",II.propTypes=PanelBackgroundComponent.propTypes;var noopSubscribe$1=()=>()=>{},getModelVersion$1=g=>"function"==typeof g?.getVersion?g.getVersion():0,selectEntries=g=>g.entries,colorEntry=(g,A)=>{if("string"!=typeof g?.content||0===g.content.length||"function"!=typeof A)return g;const{content:I,isHtml:C}=A(g.content);return I!==g.content||C?{...g,content:I,isHtml:C}:g},useFeed=()=>{const{stores:g,playerDirectory:A,playerRelationships:I,formatInlineNames:C}=useNexGui(),t=g.feed(selectEntries),n=(0,e.useMemo)(()=>({subscribe:g=>{const C=A?.subscribePlayerDirectory?.(g)??noopSubscribe$1(),e=I?.subscribePlayerRelationships?.(g)??noopSubscribe$1();return()=>{C?.(),e?.()}},getSnapshot:()=>`${getModelVersion$1(A)}:${getModelVersion$1(I)}`}),[A,I]),a=(0,e.useSyncExternalStore)(n.subscribe,n.getSnapshot,n.getSnapshot),r=(0,e.useRef)(null);return null===r.current&&(r.current=new WeakMap),{entries:(0,e.useMemo)(()=>{const g=r.current;return t.map(A=>{if(null===A||"object"!=typeof A)return A;const I=g.get(A);if(I&&I.version===a)return I.value;const e=colorEntry(A,C);return I&&I.value.content===e.content&&I.value.isHtml===e.isHtml?(g.set(A,{version:a,value:I.value}),I.value):(g.set(A,{version:a,value:e}),e)})},[t,a,C])}},GameFeedInner=()=>{const g=(0,a.useTheme)(),{entries:A}=useFeed(),I=A.at(-1)?.id??A.length,C=(0,e.useCallback)((g,{fontSize:A}={})=>React.createElement(AI,{entry:g,fontSize:A}),[]);return 0===A.length?React.createElement(II,{backgroundClassName:"game-feed__background",className:"game-feed game-feed--empty",contentClassName:"game-feed__content",contentSx:{alignItems:"center",color:"text.secondary",justifyContent:"center",p:2}},React.createElement(n.Typography,{variant:"body2"},"No feed entries")):React.createElement(II,{backgroundClassName:"game-feed__background",className:"game-feed",contentClassName:"game-feed__content",contentSx:{minHeight:0}},React.createElement(_A,{itemKeyVersion:I,items:A,fontFamily:g.typography.fontFamily,fontSize:g.typography.fontSize,renderItem:C,showScrollLockBadge:!1,viewportSx:{p:1}}))};GameFeedInner.displayName="GameFeedInner";var GameFeed=()=>React.createElement(QA,{panelName:"GameFeed"},React.createElement(GameFeedInner,null));GameFeed.displayName="GameFeed";var noop$2=()=>{},CI="nexgui4-structured-stream-panel__timestamp ng-timestamp timestamp mono no_out",eI=UA.default.shape({hasMXP:UA.default.bool.isRequired,html:UA.default.string.isRequired,id:UA.default.number.isRequired,timestamp:UA.default.oneOfType([UA.default.number,UA.default.string]).isRequired}),buildLineClassName$1=g=>["nexgui4-structured-stream-panel__line",g.isMonospace?"mono":null].filter(Boolean).join(" "),StructuredStreamRowComponent=({line:g,onSendCommand:A=noop$2})=>{const handleMXP=g=>{if(!(g.target instanceof Element))return;const I=g.target.closest("a");if(!I||!g.currentTarget.contains(I))return;if(I.classList.contains("url_link"))return;const C=I.getAttribute("rel");C&&(g.preventDefault(),A(C))};return React.createElement(n.Box,{component:"div",className:buildLineClassName$1(g),"data-stream-entry-id":g.id,onClick:g.hasMXP?handleMXP:null,sx:{alignItems:"baseline",columnGap:"0.5rem",display:"grid",gridTemplateColumns:"12ch minmax(0, 1fr)",minWidth:0,width:"100%",zIndex:1,"& .nexgui4-structured-stream-panel__payload":{minWidth:0,overflowWrap:"anywhere"},"& .nexgui4-stream-row":{alignItems:"baseline",display:"grid",gridTemplateColumns:"auto minmax(0, 1fr)",columnGap:"0.5rem",width:"100%"},"& .nexgui4-replacement-row":{width:"100%"}}},React.createElement($A,{className:CI,fontFamily:"inherit",timestamp:g.timestamp}),React.createElement(n.Box,{component:"span",className:"nexgui4-structured-stream-panel__payload",dangerouslySetInnerHTML:{__html:g.html}}))};StructuredStreamRowComponent.displayName="StructuredStreamRow",StructuredStreamRowComponent.propTypes={line:eI.isRequired,onSendCommand:UA.default.func};var tI=(0,e.memo)(StructuredStreamRowComponent);tI.displayName="StructuredStreamRow",tI.propTypes=StructuredStreamRowComponent.propTypes;var StructuredStreamPanelComponent=({items:g,itemKeyVersion:A=null,onSendCommand:I=noop$2,className:C})=>{const t=(0,a.useTheme)(),n=(0,e.useCallback)(g=>React.createElement(tI,{line:g,onSendCommand:I}),[I]);return React.createElement(II,{backgroundClassName:"nexgui4-structured-stream-panel__background",className:C,component:"section",contentClassName:"nexgui4-structured-stream-panel__content",contentSx:{color:"text.primary",fontFamily:"inherit",fontSize:"inherit"},"data-testid":"structured-stream-panel"},React.createElement(_A,{fontFamily:t.typography.fontFamily,fontSize:t.typography.fontSize,itemKeyVersion:A,items:g,renderItem:n,showScrollLockBadge:!1,viewportSx:{p:"5px"}}))};StructuredStreamPanelComponent.displayName="StructuredStreamPanel",StructuredStreamPanelComponent.propTypes={className:UA.default.string,itemKeyVersion:UA.default.oneOfType([UA.default.number,UA.default.string]),items:UA.default.arrayOf(eI).isRequired,onSendCommand:UA.default.func};var nI=(0,e.memo)(StructuredStreamPanelComponent);nI.displayName="StructuredStreamPanel",nI.propTypes=StructuredStreamPanelComponent.propTypes;var aI=new WeakMap,assertTranscriptModel=g=>{if(!g||"function"!=typeof g.subscribe||"function"!=typeof g.getSnapshot)throw new Error("useTranscript requires a transcript model with subscribe(listener) and getSnapshot().")},getTranscriptModelBindings=g=>{assertTranscriptModel(g);let A=aI.get(g);if(!A){const subscribe=A=>g.subscribe(A),getSnapshot=()=>g.getSnapshot();A=Object.freeze({subscribe,getSnapshot}),aI.set(g,A)}return A},useTranscript=g=>{const{subscribe:A,getSnapshot:I}=getTranscriptModelBindings(g),C=(0,e.useSyncExternalStore)(A,I,I);return{version:C.version,items:C.items,totalLines:C.totalLines}},CombatStreamInner=()=>{const{adapter:g,stores:A}=useNexGui(),{items:I,version:C}=useTranscript(A.combatStream),t=(0,e.useCallback)(A=>g.send(A),[g]);return React.createElement(nI,{className:"nexgui4-combat-stream",itemKeyVersion:C,items:I,onSendCommand:t})};CombatStreamInner.displayName="CombatStreamInner";var CombatStream=()=>React.createElement(QA,{panelName:"Combat Stream"},React.createElement(CombatStreamInner,null));CombatStream.displayName="CombatStream";var getRoomItemLookupEntry=g=>g&&"object"==typeof g?getRoomItemOverride(g):null,getRoomItemBackground=g=>getRoomItemLookupEntry(g)?.background??void 0,getRoomItemColor=g=>{const A=getRoomItemLookupEntry(g);return A?A.color:"t"===g?.attrib?"orange":void 0},getRoomItemLabel=g=>{if("string"==typeof g)return g;const A=getRoomItemLookupEntry(g);return A?A.text:g?.name},getRoomItemCommands=g=>{const A=["Probe"];return"string"==typeof g?.attrib&&g.attrib.includes("t")&&A.unshift("Get"),A},sortRoomItemsLikeNexGui3=g=>[...g].sort((g,A)=>{const I=getRoomItemLookupEntry(g);return getRoomItemLookupEntry(A)&&!I?-1:"t"!==A?.attrib||"t"===g?.attrib||I?1:-1}),selectRoomSlice=g=>({players:g.players,npcs:g.npcs,items:g.items,roomName:g.roomName,roomId:g.roomId,updateRoom:g.updateRoom}),useRoom=()=>{const{stores:g}=useNexGui();return g.room(useShallow(selectRoomSlice))},toDisplayItem=(g,A)=>"string"==typeof g?{commands:[],id:null,key:`room-item-string-${A}-${g}`,label:getRoomItemLabel(g),name:g,raw:g,rowBackground:void 0,rowColor:void 0}:g&&"object"==typeof g?{commands:null==g.id?[]:getRoomItemCommands(g),id:g.id??null,key:`room-item-${g.id??`${A}-${g.name??"unknown"}`}`,label:getRoomItemLabel(g)??g.name??"",name:g.name??"",raw:g,rowBackground:getRoomItemBackground(g),rowColor:getRoomItemColor(g)}:null,useRoomItemsViewModel=()=>{const{adapter:g}=useNexGui(),{items:A}=useRoom(),[I,C]=(0,e.useState)(0);(0,e.useEffect)(()=>subscribeToRoomItemOverrides(()=>C(g=>g+1)),[]);const t=(0,e.useMemo)(()=>sortRoomItemsLikeNexGui3((A??[]).filter(g=>!isRoomNpcItem(g))).map((g,A)=>toDisplayItem(g,A)).filter(Boolean),[A,I]),n=(0,e.useCallback)((A,I)=>{null!=I?.id&&g?.send?.(`${A} ${I.id}`)},[g]);return(0,e.useMemo)(()=>({items:t,sendItemCommand:n}),[t,n])},getFlipTransform$8=g=>{switch(g){case 1:return"scaleX(-1) scaleY(-1)";case 2:return"scaleY(-1)";case 3:return"scaleX(-1)";default:return"none"}},ItemsPanelInner=()=>{const g=(0,a.useTheme)(),{items:A,sendItemCommand:I}=useRoomItemsViewModel(),[C]=(0,e.useState)(()=>Math.floor(4*Math.random())),[t,r]=(0,e.useState)(null),[o,i]=(0,e.useState)(null),l=g?.nexGui?.backgroundImage??"",s=g?.nexGui?.backgroundOpacity??.5,c=g?.nexGui?.backgroundFilter??"none",u=Boolean(t),m=o?.commands??[],handleCloseMenu=()=>{r(null),i(null)},handleOpenMenu=(g,A)=>{A&&null!=A.id&&0!==A.commands.length&&(i(A),r(g.currentTarget))},handleCommandClick=g=>{null!=o?.id?(I(g,o),handleCloseMenu()):handleCloseMenu()};return React.createElement(n.Box,{className:"items-panel",sx:{color:"text.primary",fontFamily:g.typography.fontFamily,fontSize:g.typography.fontSize,height:"100%",overflow:"hidden",position:"relative",width:"100%"}},l?React.createElement(n.Box,{"aria-hidden":"true",className:"items-panel__background",sx:{backgroundImage:`url(${l})`,backgroundPosition:"center",backgroundSize:"cover",filter:c,height:"100%",inset:0,left:0,opacity:s,position:"absolute",top:0,transform:getFlipTransform$8(C),width:"100%",zIndex:0}}):null,React.createElement(n.Box,{className:"items-panel__content","data-testid":"items-panel-content",sx:{display:"flex",flexDirection:"column-reverse",height:"100%",overflow:"auto",position:"relative",width:"100%",zIndex:1}},A.length>0?React.createElement(n.Box,{className:"items-panel__rows",sx:{display:"table",m:"10px",maxWidth:"100%",p:"1px",position:"relative",textAlign:"left"}},A.map(g=>{const A=null!=g.id&&g.commands.length>0;return React.createElement(n.Box,{key:g.key,className:["items-panel__row",A?"items-panel__row--interactive":""].filter(Boolean).join(" "),onClick:A?A=>handleOpenMenu(A,g):void 0,onContextMenu:A?A=>{A.preventDefault(),handleOpenMenu(A,g)}:void 0,sx:{backgroundColor:g.rowBackground??"transparent",cursor:A?"pointer":"inherit",display:"table-row"}},React.createElement(n.Box,{component:"div",sx:{color:"cyan",display:"table-cell",padding:"0px 5px 0px 2px",whiteSpace:"nowrap"}},React.createElement(n.Typography,{component:"span",sx:{color:"inherit",fontVariantNumeric:"tabular-nums"},variant:"body2"},g.id??"")),React.createElement(n.Box,{component:"div",sx:{display:"table-cell",padding:0,width:"100%"}},React.createElement(n.Typography,{component:"span",sx:{color:g.rowColor??"text.primary"},variant:"body2"},g.label)))})):null),React.createElement(n.Menu,{anchorEl:t,onClose:handleCloseMenu,open:u,slotProps:{paper:{sx:{backgroundColor:"#000000",border:"1px solid #ffffff"}}}},m.map(g=>React.createElement(n.MenuItem,{key:g,onClick:()=>handleCommandClick(g)},g))))};ItemsPanelInner.displayName="ItemsPanelInner";var ItemsPanel=()=>React.createElement(QA,{panelName:"Items"},React.createElement(ItemsPanelInner,null));ItemsPanel.displayName="ItemsPanel";var rI=600,oI=400,clampScrollbackGeometryValue=(g,A,I)=>Math.min(Math.max(g,A),I),parseStoredValue=g=>{if("string"!=typeof g)return g;try{return JSON.parse(g)}catch{return g}},hasUsablePersistenceAdapter=g=>"function"==typeof g?.getVariable&&"function"==typeof g?.setVariable,hasSavedGeometry=g=>!!hasUsablePersistenceAdapter(g)&&isPlainObject(parseStoredValue((g.getVariable("nexGui4Settings")||{})[$g.UI])?.scrollbackModal),getScrollbackViewportBounds=()=>"undefined"==typeof window?{width:800,height:600}:{width:Math.max(320,window.innerWidth),height:Math.max(240,window.innerHeight)},getMinimumScrollbackGeometry=()=>{const g=getScrollbackViewportBounds();return{width:Math.min(rI,g.width),height:Math.min(oI,g.height)}},getDefaultScrollbackGeometry=()=>{const g=getScrollbackViewportBounds(),A=getMinimumScrollbackGeometry(),I=clampScrollbackGeometryValue(Math.round(.7*g.width),A.width,g.width),C=clampScrollbackGeometryValue(Math.round(.7*g.height),A.height,g.height);return{x:Math.round((g.width-I)/2),y:Math.round((g.height-C)/2),width:I,height:C}},normalizeScrollbackGeometry=g=>{const A=getDefaultScrollbackGeometry(),I=getScrollbackViewportBounds(),C=getMinimumScrollbackGeometry(),e=clampScrollbackGeometryValue(Number(g?.width)||A.width,C.width,I.width),t=clampScrollbackGeometryValue(Number(g?.height)||A.height,C.height,I.height);return{x:clampScrollbackGeometryValue(Number(g?.x)||0,0,Math.max(0,I.width-e)),y:clampScrollbackGeometryValue(Number(g?.y)||0,0,Math.max(0,I.height-t)),width:e,height:t}},useScrollbackLayout=()=>{const g=(0,e.useContext)(KA),A=g?.adapter,I=g?.scrollbackLayoutStore,C=g?.persistenceStore?.getAll?.()?.ui??{},t=(0,e.useMemo)(()=>I&&hasSavedGeometry(A)?normalizeScrollbackGeometry(I.get("scrollbackModal")):getDefaultScrollbackGeometry(),[A,I]),n=(0,e.useCallback)(g=>{I?.set("scrollbackModal",normalizeScrollbackGeometry(g))},[I]);return{focusHostInput:(0,e.useCallback)(()=>{A?.focusInput?.()},[A]),initialGeometry:t,persistGeometry:n,useVirtualizedLogs:Boolean(C.virtualizedLogs)}},iI=.8,useScrollbackHydration=({items:g,open:A,scrollbackSession:I,getViewportElement:C,dispatchViewportScroll:t,setScrollLock:n,onViewportOpened:a})=>{const[r,o]=(0,e.useState)([]),[i,l]=(0,e.useState)(!1),[s,c]=(0,e.useState)(!0),u=(0,e.useRef)([]);u.current=r;const m=(0,e.useRef)({hasMore:!0,isLoading:!1});m.current={hasMore:s,isLoading:i},(0,e.useEffect)(()=>{if(!A)return o([]),void c(!0);o(A=>{if(0===g.length)return[];if(0===A.length)return[...g];const I=A[A.length-1]?.id??-1,C=g.filter(g=>g.id>I);return C.length>0?[...A,...C]:A})},[g,A]);const d=(0,e.useCallback)(async()=>{if(!m.current.hasMore||m.current.isLoading)return;const g=u.current[0]?.id;if(void 0===g||g<=0)return m.current={...m.current,hasMore:!1},void c(!1);if(!I?.readRange)return m.current={...m.current,hasMore:!1},void c(!1);m.current={...m.current,isLoading:!0},l(!0);try{const A=Math.max(0,g-500),e=g-1,t=await I.readRange(A,e);if(0===t.length)return m.current={...m.current,hasMore:!1},void c(!1);o(g=>{const A=new Set(g.map(g=>g.id));return[...t.filter(g=>!A.has(g.id)),...g]});const n=C();if(n){const g=n.scrollHeight,A=n.scrollTop;window.requestAnimationFrame(()=>{n.scrollTop=A+(n.scrollHeight-g)})}}catch(A){console.error("[nexGui4] Failed to load older lines",A)}finally{m.current={...m.current,isLoading:!1},l(!1)}},[C,I]);return(0,e.useEffect)(()=>{if(!A)return;let g=!0,I=null,e=null;const r=window.requestAnimationFrame(()=>{window.requestAnimationFrame(()=>{if(!g)return;const A=C();if(!A)return;I=A;const r=Math.max(0,A.scrollHeight-A.clientHeight),o=A.clientHeight*iI,i=Math.max(0,r-o);A.scrollTop=i,t(A),n(i<r),a?.(),e=()=>{const{hasMore:g,isLoading:I}=m.current;A.scrollTop<300&&g&&!I&&d()},A.addEventListener("scroll",e,{passive:!0})})});return()=>{g=!1,window.cancelAnimationFrame(r),I&&e&&I.removeEventListener("scroll",e)}},[t,C,d,a,A,n]),{hydratedItems:r,hasMore:s,isLoadingMore:i,hydrateToId:(0,e.useCallback)(async g=>{if(!I?.readRange)return;const A=u.current[0]?.id,C=u.current[u.current.length-1]?.id;let e,t;if(void 0===A)e=g,t=g;else if(g<A)e=g,t=A-1;else{if(!(g>C))return;e=C+1,t=g}m.current={...m.current,isLoading:!0},l(!0);try{const g=await I.readRange(e,t);g.length>0&&o(A=>{const I=new Set(A.map(g=>g.id));return[...g.filter(g=>!I.has(g.id)),...A].sort((g,A)=>g.id-A.id)})}catch(n){console.error("[nexGui4] Failed to hydrate to ID",n)}finally{m.current={...m.current,isLoading:!1},l(!1)}},[I])}},useScrollbackSearch=({scrollbackSession:g,open:A,showPrompts:I,showGagged:C=!1,onCursorChange:t})=>{const[n,a]=(0,e.useState)(""),[r,o]=(0,e.useState)(""),[i,l]=(0,e.useState)([]),[s,c]=(0,e.useState)(!1),[u,m]=(0,e.useState)(-1),d=(0,e.useCallback)(()=>{a(""),o(""),m(-1)},[]);(0,e.useEffect)(()=>{A||(d(),l([]),c(!1))},[A,d]),(0,e.useEffect)(()=>{if(!r)return l([]),void c(!1);let A=!0;return c(!0),(async()=>{try{if(g?.search){const I=await g.search(r,{includePrompts:!0});return void(A&&l(I))}A&&l([])}catch(I){console.error("[nexGui4] Failed searching scrollback session",I)}finally{A&&c(!1)}})(),()=>{A=!1}},[r,g]);const p=(0,e.useMemo)(()=>r?i.filter(g=>I||!g.isPrompt).filter(g=>C||!g.gagged):[],[r,i,C,I]),h=p.length;(0,e.useEffect)(()=>{if(!A||!r)return void m(-1);if(0===h)return void m(-1);const g=h-1;m(g),t?.(g)},[r,t,A,h]);const y=(0,e.useCallback)(g=>{a(g.target.value)},[]),b=(0,e.useCallback)(g=>{if("Enter"!==g.key)return;const A=g.target.value??"";if(A!==r)return void o(A);if(0===h)return;const I=u-1<0?h-1:u-1;m(I),t?.(I)},[r,t,u,h]),x=r.length>0,v=x&&n.length>0&&0===h;return{searchBarText:n,setSearchBarText:a,committedSearchTerm:r,searchResults:p,isSearching:s,isSearchActive:x,searchMatchCount:h,searchCursor:u,hasNoMatch:v,searchStatusText:s?"Searching...":v?"No match":h>0&&u>=0?`${u+1}/${h}`:"",resetSearch:d,handleSearchInput:y,handleSearchKeyDown:b}},lI=1500,useScrollbackSelection=({visibleItems:g,showTimestamps:A=!0})=>{const[I,C]=(0,e.useState)(null),[t,n]=(0,e.useState)(null),[a,r]=(0,e.useState)(!1),o=(0,e.useRef)({a:null,b:null});o.current={a:I,b:t};const i=(0,e.useCallback)(g=>{const{a:A,b:I}=o.current;A===g||I===g?(C(null),n(null)):null===A?C(g):null===I?n(g):(C(g),n(null))},[]),l=(0,e.useMemo)(()=>{if(null==I||null==t)return null;const A=Math.min(I,t),C=Math.max(I,t);return g.filter(g=>g.id>=A&&g.id<=C)},[I,t,g]);return{selectionA:I,selectionB:t,selectedRangeItems:l,copyConfirmed:a,handleLineSelect:i,handleCopyRange:(0,e.useCallback)(async()=>{if(!l?.length)return;const g=l.map(g=>{const I=stripHtml(g.html);if(A){const A=resolveTimestampLabel(g.timestamp);return A?`${A} ${I}`:I}return I}).join("\n");try{await navigator.clipboard.writeText(g),r(!0),window.setTimeout(()=>r(!1),lI)}catch{}},[l,A]),isLineSelected:(0,e.useCallback)(g=>{const A=g===I||g===t;return null==I||null==t?{isEndpoint:A,inRange:!1}:{isEndpoint:A,inRange:g>=Math.min(I,t)&&g<=Math.max(I,t)}},[I,t])}},sI="nexgui4-log.html",cI="text/html;charset=utf-8",toDate=g=>{if(g instanceof Date)return Number.isNaN(g.getTime())?null:g;if("number"==typeof g&&Number.isFinite(g)){const A=new Date(g);return Number.isNaN(A.getTime())?null:A}return null},formatTimestamp$1=g=>{const A="string"==typeof g&&g.trim().length>0?g:null;if(A)return A;const I=toDate(g)??new Date,pad=(g,A=2)=>String(g).padStart(A,"0");return[pad(I.getHours()),pad(I.getMinutes()),pad(I.getSeconds())].join(":")+`.${pad(I.getMilliseconds(),3)}`},formatLogDate=(g=new Date)=>`${g.getFullYear()}-${g.getMonth()+1}-${g.getDate()}`,resolveCssFontSize$1=g=>null==g?"14px":"number"==typeof g?`${g}px`:String(g),collectPaletteCss=()=>{if("undefined"==typeof document)return"";try{return Array.from(document.getElementById("ng-palette")?.sheet?.cssRules??[]).map(g=>g.cssText).join("\n")}catch{return""}},collectNexGuiStyles=()=>"undefined"==typeof document?"":document.getElementById("nexGuicss")?.outerHTML??"",normalizeLogLine=(g,A)=>({html:String(g?.html??""),id:Number.isFinite(Number(g?.id))&&null!==g?.id?Number(g.id):A,isMonospace:Boolean(g?.isMonospace),isPrompt:Boolean(g?.isPrompt),shouldLog:Boolean(g?.shouldLog),timestamp:formatTimestamp$1(g?.timestamp)}),normalizeLogLines=g=>g.map((g,A)=>normalizeLogLine(g,A)),serializeJsonForInlineScript=g=>JSON.stringify(g).replace(/</g,"\\u003c").replace(/>/g,"\\u003e").replace(/&/g,"\\u0026").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029"),buildLogTitle=g=>g&&String(g).trim().length>0?String(g):`nexGui4 Scrollback - ${formatLogDate()}`,buildBaseStyle=({fontFamily:g,fontSize:A})=>`\n html,\n body {\n background: black;\n color: #ccc;\n margin: 0;\n min-height: 100%;\n }\n\n body {\n box-sizing: border-box;\n font-family: ${g};\n font-size: ${A};\n padding: 12px;\n }\n\n .nexgui4-log-line {\n box-sizing: border-box;\n font-family: ${g};\n font-size: ${A};\n line-height: 1.2;\n overflow-wrap: anywhere;\n white-space: pre-wrap;\n }\n\n .nexgui4-log-line.mono,\n .nexgui4-log-line .mono {\n font-family: ${g};\n }\n\n .nexgui4-log-timestamp {\n color: #555;\n font-family: ${g};\n margin-right: 1ch;\n }\n\n .nexgui4-log-payload {\n min-width: 0;\n }\n`,buildHead=({title:g,fontFamily:A,fontSize:I})=>{const C=collectPaletteCss(),e=collectNexGuiStyles();return`<head>\n <meta charset="utf-8" />\n <title>${escapeHtml(g)}</title>\n <style>\n${buildBaseStyle({fontFamily:A,fontSize:I})}\n </style>\n <style id="ng-palette">${C}</style>\n ${e}\n </head>`},buildLogLineClassName=g=>["nexgui4-log-line",g.isPrompt?"prompt textline":"textline",g.isMonospace?"mono":null].filter(Boolean).join(" "),renderStaticLogRow=g=>`<div class="${buildLogLineClassName(g)}"><span class="nexgui4-log-timestamp timestamp mono no_out">${escapeHtml(g.timestamp)}&nbsp;</span><span class="nexgui4-log-payload">${g.html}</span></div>`,buildStandardHtmlLog=(g,{fontFamily:A=Xg,fontSize:I,title:C}={})=>{const e=resolveCssFontSize$1(I),t=buildLogTitle(C),n=normalizeLogLines(g).map(renderStaticLogRow).join("\n");return`<!doctype html>\n<html>\n ${buildHead({title:t,fontFamily:A,fontSize:e})}\n <body>\n${n}\n </body>\n</html>`},buildVirtualizedLogScript=(g,A)=>`\n (() => {\n const allLines = ${serializeJsonForInlineScript(g)};\n const viewport = document.getElementById("nexgui4-log-viewport");\n const spacer = document.getElementById("nexgui4-log-spacer");\n const rows = document.getElementById("nexgui4-log-rows");\n const searchInput = document.getElementById("nexgui4-log-search");\n const status = document.getElementById("nexgui4-log-search-status");\n const timestampToggle = document.getElementById("nexgui4-log-timestamps");\n const promptToggle = document.getElementById("nexgui4-log-prompts");\n\n let showTimestamps = true;\n let showPrompts = true;\n let displayLines = allLines;\n let heights = [];\n let offsets = [];\n let searchTerm = "";\n let searchMatches = [];\n let searchIndex = -1;\n let renderFrame = 0;\n let ignoreScrollAdjust = false;\n const overscan = 8;\n const lineTextCache = new WeakMap();\n const textProbe = document.createElement("div");\n\n const estimate = Math.max(18, ${Math.max(18,A)});\n const escapeText = (value) =>\n String(value ?? "")\n .replaceAll("&", "&amp;")\n .replaceAll("<", "&lt;")\n .replaceAll(">", "&gt;")\n .replaceAll('"', "&quot;")\n .replaceAll("'", "&#39;");\n\n const readLineText = (line) => {\n if (lineTextCache.has(line)) {\n return lineTextCache.get(line);\n }\n\n textProbe.innerHTML = line.html ?? "";\n const text = (textProbe.textContent || "").toLowerCase();\n lineTextCache.set(line, text);\n return text;\n };\n\n const rebuildMetrics = () => {\n offsets = new Array(displayLines.length + 1);\n offsets[0] = 0;\n for (let index = 0; index < displayLines.length; index += 1) {\n offsets[index + 1] = offsets[index] + (heights[index] || estimate);\n }\n spacer.style.height = (offsets[offsets.length - 1] || 0) + "px";\n };\n\n const findIndexAt = (offset) => {\n let low = 0;\n let high = displayLines.length;\n while (low < high) {\n const mid = Math.floor((low + high) / 2);\n if (offsets[mid + 1] < offset) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return low;\n };\n\n const updateStatus = () => {\n if (!searchTerm) {\n status.textContent = "";\n return;\n }\n\n status.textContent = searchMatches.length\n ? "(" + (searchIndex + 1) + " of " + searchMatches.length + ") Line: " + searchMatches[searchIndex]\n : "No entry found";\n };\n\n const classNameForLine = (line) =>\n "nexgui4-log-line " +\n (line.isPrompt ? "prompt textline" : "textline") +\n (line.isMonospace ? " mono" : "");\n\n const render = () => {\n renderFrame = 0;\n const top = viewport.scrollTop;\n const bottom = top + viewport.clientHeight;\n const start = Math.max(0, findIndexAt(top) - overscan);\n const end = Math.min(displayLines.length, findIndexAt(bottom) + overscan + 1);\n const activeDisplayIndex = searchMatches[searchIndex] ?? -1;\n let html = "";\n\n for (let index = start; index < end; index += 1) {\n const line = displayLines[index];\n const timestamp = showTimestamps\n ? '<span class="nexgui4-log-timestamp timestamp mono no_out">' +\n escapeText(line.timestamp) +\n "&nbsp;</span>"\n : "";\n const activeClass = activeDisplayIndex === index ? " nexgui4-log-line--active" : "";\n\n html +=\n '<div class="' +\n classNameForLine(line) +\n activeClass +\n '" data-index="' +\n index +\n '" style="transform:translateY(' +\n offsets[index] +\n 'px)">' +\n timestamp +\n '<span class="nexgui4-log-payload">' +\n line.html +\n "</span></div>";\n }\n\n rows.innerHTML = html;\n window.requestAnimationFrame(measureRenderedRows);\n };\n\n const requestRender = () => {\n if (renderFrame) {\n return;\n }\n\n renderFrame = window.requestAnimationFrame(render);\n };\n\n const measureRenderedRows = () => {\n let changed = false;\n let scrollAdjustment = 0;\n const currentScrollTop = viewport.scrollTop;\n\n rows.querySelectorAll("[data-index]").forEach((row) => {\n const index = Number(row.getAttribute("data-index"));\n const measured = Math.ceil(row.getBoundingClientRect().height);\n const oldHeight = heights[index] || estimate;\n\n if (Number.isFinite(index) && measured > 0 && Math.abs(oldHeight - measured) > 1) {\n if (offsets[index] < currentScrollTop) {\n scrollAdjustment += (measured - oldHeight);\n }\n heights[index] = measured;\n changed = true;\n }\n });\n\n if (changed) {\n rebuildMetrics();\n if (scrollAdjustment !== 0) {\n ignoreScrollAdjust = true;\n viewport.scrollTop = currentScrollTop + scrollAdjustment;\n }\n render();\n }\n };\n\n const rebuildDisplayLines = () => {\n displayLines = showPrompts ? allLines : allLines.filter((line) => !line.isPrompt);\n heights = new Array(displayLines.length);\n searchMatches = [];\n searchIndex = -1;\n\n if (searchTerm) {\n searchMatches = displayLines.reduce((matches, line, index) => {\n if (readLineText(line).includes(searchTerm)) {\n matches.push(index);\n }\n return matches;\n }, []);\n searchIndex = searchMatches.length > 0 ? 0 : -1;\n }\n\n rebuildMetrics();\n updateStatus();\n requestRender();\n };\n\n const scrollToActiveSearchMatch = () => {\n if (searchIndex < 0) {\n return;\n }\n\n viewport.scrollTop = Math.max(\n 0,\n offsets[searchMatches[searchIndex]] - viewport.clientHeight / 2,\n );\n requestRender();\n };\n\n const runSearch = () => {\n const nextTerm = searchInput.value.trim().toLowerCase();\n\n if (nextTerm !== searchTerm) {\n searchTerm = nextTerm;\n rebuildDisplayLines();\n } else if (searchMatches.length > 0) {\n searchIndex = (searchIndex + 1) % searchMatches.length;\n updateStatus();\n requestRender();\n }\n\n scrollToActiveSearchMatch();\n };\n\n viewport.addEventListener("scroll", () => {\n if (ignoreScrollAdjust) {\n ignoreScrollAdjust = false;\n return;\n }\n requestRender();\n }, { passive: true });\n window.addEventListener("resize", () => {\n heights = new Array(displayLines.length);\n rebuildMetrics();\n requestRender();\n });\n searchInput.addEventListener("keydown", (event) => {\n if (event.key === "Enter") {\n runSearch();\n }\n });\n timestampToggle.addEventListener("change", () => {\n showTimestamps = timestampToggle.checked;\n heights = new Array(displayLines.length);\n rebuildMetrics();\n requestRender();\n });\n promptToggle.addEventListener("change", () => {\n showPrompts = promptToggle.checked;\n rebuildDisplayLines();\n });\n\n rebuildDisplayLines();\n viewport.scrollTop = Math.max(0, spacer.offsetHeight - viewport.clientHeight);\n requestRender();\n })();\n`,buildVirtualizedHtmlLog=(g,{fontFamily:A=Xg,fontSize:I,title:C}={})=>{const e=resolveCssFontSize$1(I),t=Number.parseFloat(e)||14,n=buildLogTitle(C),a=normalizeLogLines(g);return`<!doctype html>\n<html>\n ${buildHead({title:n,fontFamily:A,fontSize:e})}\n <body class="nexgui4-log-body--virtual">\n <div class="nexgui4-log-toolbar">\n <input id="nexgui4-log-search" aria-label="Search log" placeholder="Search" />\n <span id="nexgui4-log-search-status" aria-live="polite"></span>\n <label><input id="nexgui4-log-timestamps" type="checkbox" checked /> Timestamps</label>\n <label><input id="nexgui4-log-prompts" type="checkbox" checked /> Prompts</label>\n </div>\n <div id="nexgui4-log-viewport" class="nexgui4-log-viewport">\n <div id="nexgui4-log-spacer" class="nexgui4-log-spacer">\n <div id="nexgui4-log-rows" class="nexgui4-log-rows"></div>\n </div>\n </div>\n <style>\n .nexgui4-log-body--virtual {\n height: 100vh;\n overflow: hidden;\n padding: 0;\n }\n\n .nexgui4-log-toolbar {\n align-items: center;\n background: #050505;\n border-bottom: 1px solid #333;\n box-sizing: border-box;\n display: flex;\n gap: 12px;\n height: 42px;\n padding: 6px 10px;\n }\n\n .nexgui4-log-toolbar input[type="text"],\n #nexgui4-log-search {\n background: #111;\n border: 1px solid #444;\n color: #eee;\n font: inherit;\n padding: 4px 6px;\n width: 24ch;\n }\n\n #nexgui4-log-search-status {\n color: #aaa;\n min-width: 18ch;\n }\n\n .nexgui4-log-toolbar label {\n align-items: center;\n display: inline-flex;\n gap: 4px;\n white-space: nowrap;\n }\n\n .nexgui4-log-viewport {\n height: calc(100vh - 42px);\n overflow-y: auto;\n position: relative;\n }\n\n .nexgui4-log-spacer {\n position: relative;\n width: 100%;\n }\n\n .nexgui4-log-rows {\n left: 0;\n position: absolute;\n top: 0;\n width: 100%;\n }\n\n .nexgui4-log-rows .nexgui4-log-line {\n left: 0;\n padding: 0 12px;\n position: absolute;\n top: 0;\n width: 100%;\n }\n\n .nexgui4-log-line--active {\n background: #e5e7eb;\n color: #111827;\n }\n </style>\n <script>\n${buildVirtualizedLogScript(a,Math.ceil(1.25*t))}\n <\/script>\n </body>\n</html>`},buildHtmlLog=(g,A,I={})=>A?buildVirtualizedHtmlLog(g,I):buildStandardHtmlLog(g,I),downloadBuffer=(g,A,{fontFamily:I=Xg,fontSize:C,title:e}={})=>{if("undefined"==typeof document||"undefined"==typeof Blob||"undefined"==typeof URL||"function"!=typeof URL.createObjectURL||0===g.length)return;const t=buildHtmlLog(g,A,{fontFamily:I,fontSize:C,title:e}),n=URL.createObjectURL(new Blob([t],{type:cI})),a=document.createElement("a");a.href=n,a.download=sI,a.style.display="none",document.body.append(a),a.click(),a.remove(),URL.revokeObjectURL(n)},useScrollbackDownload=({scrollbackSession:g,visibleItems:A,isSearchActive:I,useVirtualizedLogs:C,fontFamily:t,fontSize:n})=>({handleDownload:(0,e.useCallback)(async()=>{let e=A;if(!I&&g?.readAll)try{const A=await g.readAll();A&&A.length>0&&(e=A)}catch(a){console.error("[nexGui4] Failed to read all lines for download",a)}downloadBuffer(e,C,{fontFamily:t,fontSize:n})},[t,n,I,g,C,A])}),uI=12,mI=18,dI={height:"--nexgui4-scrollback-height",width:"--nexgui4-scrollback-width",x:"--nexgui4-scrollback-left",y:"--nexgui4-scrollback-top"},pI=[{direction:"n",sx:{cursor:"n-resize",height:uI,left:mI,right:mI,top:-6}},{direction:"s",sx:{bottom:-6,cursor:"s-resize",height:uI,left:mI,right:mI}},{direction:"e",sx:{bottom:mI,cursor:"e-resize",right:-6,top:mI,width:uI}},{direction:"w",sx:{bottom:mI,cursor:"w-resize",left:-6,top:mI,width:uI}},{direction:"ne",sx:{cursor:"ne-resize",height:mI,right:-6,top:-6,width:mI}},{direction:"nw",sx:{cursor:"nw-resize",height:mI,left:-6,top:-6,width:mI}},{direction:"se",sx:{bottom:-6,cursor:"se-resize",height:mI,right:-6,width:mI}},{direction:"sw",sx:{bottom:-6,cursor:"sw-resize",height:mI,left:-6,width:mI}}],areScrollbackGeometriesEqual=(g,A)=>g?.x===A?.x&&g?.y===A?.y&&g?.width===A?.width&&g?.height===A?.height,getScrollbackPaperGeometryStyle=g=>({[dI.height]:`${g.height}px`,[dI.width]:`${g.width}px`,[dI.x]:`${g.x}px`,[dI.y]:`${g.y}px`}),applyScrollbackPaperGeometry=(g,A)=>{g&&A&&Object.entries(getScrollbackPaperGeometryStyle(A)).forEach(([A,I])=>{g.style.setProperty(A,I)})},useScrollbackGeometry=({initialGeometry:g,persistGeometry:A,contentRef:I})=>{const C=(0,e.useRef)(null),t=(0,e.useRef)(g),n=(0,e.useRef)(g),[a,r]=(0,e.useState)(()=>getScrollbackPaperGeometryStyle(g)),o=(0,e.useCallback)(()=>C.current??I.current?.closest('[data-testid="scrollback-dialog-paper"]')??I.current?.closest(".MuiDialog-paper")??null,[I]),i=(0,e.useCallback)(g=>{const A=normalizeScrollbackGeometry("function"==typeof g?g(n.current):g);return n.current=A,applyScrollbackPaperGeometry(o(),A),A},[o]),l=(0,e.useCallback)(g=>{const A=i(g);return areScrollbackGeometriesEqual(t.current,A)||(t.current=A,r(getScrollbackPaperGeometryStyle(A))),A},[i]),s=(0,e.useCallback)((g,I)=>{const C=document.body.style.userSelect;document.body.style.userSelect="none";const handlePointerMove=g=>{I(g)},handlePointerUp=()=>{document.body.style.userSelect=C,document.removeEventListener("pointermove",handlePointerMove),document.removeEventListener("pointerup",handlePointerUp),A(l(n.current))};document.addEventListener("pointermove",handlePointerMove),document.addEventListener("pointerup",handlePointerUp),g.currentTarget.setPointerCapture?.(g.pointerId)},[l,A]);return{paperRef:C,paperGeometryStyle:a,handleDragPointerDown:(0,e.useCallback)(g=>{if(0!==g.button)return;g.preventDefault();const A=n.current,I=g.clientX-A.x,C=g.clientY-A.y;s(g,g=>{i({...A,x:g.clientX-I,y:g.clientY-C})})},[i,s]),handleResizePointerDown:(0,e.useCallback)(g=>A=>{if(0!==A.button)return;A.preventDefault(),A.stopPropagation();const I=n.current,C=A.clientX,e=A.clientY,t=I.x+I.width,a=I.y+I.height,r=getMinimumScrollbackGeometry();s(A,A=>{let n=I;if(g.includes("e")&&(n={...n,width:clampScrollbackGeometryValue(I.width+(A.clientX-C),r.width,getScrollbackViewportBounds().width-I.x)}),g.includes("s")&&(n={...n,height:clampScrollbackGeometryValue(I.height+(A.clientY-e),r.height,getScrollbackViewportBounds().height-I.y)}),g.includes("w")){const g=clampScrollbackGeometryValue(I.x+(A.clientX-C),0,t-r.width);n={...n,x:g,width:t-g}}if(g.includes("n")){const g=clampScrollbackGeometryValue(I.y+(A.clientY-e),0,a-r.height);n={...n,y:g,height:a-g}}i(n)})},[i,s]),reaffirmCommittedGeometry:(0,e.useCallback)(()=>{l(g=>g)},[l])}},hI={id:UA.default.number.isRequired,html:UA.default.string.isRequired,timestamp:UA.default.string.isRequired,isPrompt:UA.default.bool.isRequired,isMonospace:UA.default.bool.isRequired,shouldLog:UA.default.bool.isRequired,gagged:UA.default.bool},yI=UA.default.exact(hI),buildLineClassName=(g,A)=>["nexgui4-virtual-scroll-line",g.isPrompt?"prompt textline":"textline",g.isMonospace?"mono":null,g.shouldLog?"nexguilog":null,g.gagged?"nexgui4-virtual-scroll-line--gagged":null,A?"nexgui4-virtual-scroll-line--timestamped":null].filter(Boolean).join(" "),VirtualScrollLineComponent=({fontFamily:g,line:A,isActiveMatch:I=!1,isMatch:C=!1,timestampClassName:e,showTimestamp:t=!0})=>React.createElement("div",{className:buildLineClassName(A,t)},t?React.createElement($A,{fontFamily:g,timestamp:A.timestamp,highlight:I?"yellow":!!C&&"rgba(255, 255, 0, 0.35)",className:e}):null,React.createElement("span",{className:"nexgui4-virtual-scroll-line__payload",dangerouslySetInnerHTML:{__html:A.html}}));VirtualScrollLineComponent.displayName="VirtualScrollLine",VirtualScrollLineComponent.propTypes={fontFamily:UA.default.string,isActiveMatch:UA.default.bool,isMatch:UA.default.bool,line:yI.isRequired,showTimestamp:UA.default.bool,timestampClassName:UA.default.string};var areVirtualScrollLinePropsEqual=(g,A)=>g.line.id===A.line.id&&g.fontFamily===A.fontFamily&&g.showTimestamp===A.showTimestamp&&g.isActiveMatch===A.isActiveMatch&&g.isMatch===A.isMatch&&g.timestampClassName===A.timestampClassName,fI=(0,e.memo)(VirtualScrollLineComponent,areVirtualScrollLinePropsEqual);fI.displayName="VirtualScrollLine",fI.propTypes=VirtualScrollLineComponent.propTypes;var bI=UA.default.oneOfType([yI,UA.default.oneOf([null])]),PromptLineComponent=({fontFamily:g,promptLine:A=null,show:I=!1,showTimestamp:C=!0,timestampClassName:e})=>I&&A?React.createElement("div",{className:"nexgui4-prompt-line"},React.createElement(fI,{fontFamily:g,line:A,showTimestamp:C,timestampClassName:e})):null;PromptLineComponent.displayName="PromptLine",PromptLineComponent.propTypes={fontFamily:UA.default.string,promptLine:bI,show:UA.default.bool.isRequired,showTimestamp:UA.default.bool,timestampClassName:UA.default.string};var xI=(0,e.memo)(PromptLineComponent);xI.displayName="PromptLine",xI.propTypes=PromptLineComponent.propTypes;var noop$1=()=>{},vI=UA.default.oneOfType([yI,UA.default.oneOf([null])]),estimateLineSize=g=>Math.ceil(1.25*g),VirtualScrollBufferComponent=({items:g,promptLine:A=null,showPromptInline:I=!0,showTimestamp:C=!0,onSendCommand:t=noop$1,fontFamily:n=Xg,fontSize:a=14,itemKeyVersion:r=null,border:o=!0,onRequestScrollback:i=noop$1,onScrollLockChange:l=noop$1,activeMatchIndex:s=-1,timestampClassName:c,overscan:u=5,renderItem:m},d)=>{const p=parseFontSize(a,14),h=(0,e.useCallback)(()=>estimateLineSize(p),[p]),y=(0,e.useCallback)((g,A)=>g?.id??A,[]),b=o?null:`${g.length}:${g.at(-1)?.id??""}:${I?"":A?.id??""}`,x=(0,e.useCallback)((g,{isActiveMatch:A})=>React.createElement(fI,{fontFamily:n,line:g,isActiveMatch:A,showTimestamp:C,timestampClassName:c}),[n,C,c]);return React.createElement(_A,{ref:d,activeMatchIndex:s,border:o,displayPinKey:b,estimateSize:h,fontFamily:n,fontSize:a,footer:React.createElement(xI,{fontFamily:n,promptLine:A,show:Boolean(A)&&!I,showTimestamp:C,timestampClassName:c}),getItemKey:y,itemKeyVersion:r,items:g,mode:o?"panel":"display",onRequestHistory:i,onSendCommand:t,onScrollLockChange:l,overscan:u,renderItem:m??x,showScrollLockBadge:o})};VirtualScrollBufferComponent.displayName="VirtualScrollBuffer",VirtualScrollBufferComponent.propTypes={activeMatchIndex:UA.default.number,border:UA.default.bool,fontFamily:UA.default.string,fontSize:UA.default.oneOfType([UA.default.number,UA.default.string]),itemKeyVersion:UA.default.oneOfType([UA.default.number,UA.default.string]),items:UA.default.arrayOf(yI).isRequired,onRequestScrollback:UA.default.func,onScrollLockChange:UA.default.func,onSendCommand:UA.default.func,overscan:UA.default.number,promptLine:vI,renderItem:UA.default.func,showPromptInline:UA.default.bool,showTimestamp:UA.default.bool,timestampClassName:UA.default.string};var EI=(0,e.forwardRef)(VirtualScrollBufferComponent);EI.displayName="VirtualScrollBuffer",EI.propTypes=VirtualScrollBufferComponent.propTypes;var wI=UA.default.oneOfType([yI,UA.default.oneOf([null])]),noop=()=>{},RI=.8,SI=1,MI=2,TI=48,NI="nexgui4-scrollback-timestamp ng-timestamp timestamp mono no_out",resolveCssFontSize=g=>null==g?"14px":"number"==typeof g?`${g}px`:String(g),getScrollbackWheelDeltaPixels=(g,A)=>{const I=Number(g?.deltaY);if(!Number.isFinite(I)||0===I)return 0;if(g?.deltaMode===SI)return I*TI;if(g?.deltaMode===MI){const g=Number(A?.clientHeight);return I*Math.max(0,Number.isFinite(g)?g:0)*RI}return I},resolveDialogSurfaceBackground=g=>g.nexGui?.tokens?.background?.modal??g.palette.background.paper,resolveModalBackground=g=>g.palette.common.black,resolveHeaderBackground=g=>g.nexGui?.tokens?.background?.header??g.palette.background.default,GI=(0,e.memo)(({isEndpoint:g,inRange:A,onClick:I})=>React.createElement(n.Box,{"aria-label":"Select line for copy range",component:"button",onClick:I,sx:I=>({position:"absolute",left:0,top:"4px",bgcolor:g?I.palette.primary.main:"transparent",borderRadius:"50%",borderStyle:"solid",borderWidth:2,borderColor:g?I.palette.primary.main:I.palette.divider,boxSizing:"border-box",cursor:"pointer",display:"block",height:12,lineHeight:1,opacity:g?1:A?.6:.25,outline:"none",p:0,transition:"opacity 0.12s, background-color 0.12s, border-color 0.12s",userSelect:"none",width:12,"&:hover":{borderColor:I.palette.primary.main,opacity:1},"&:focus-visible":{outline:`2px solid ${I.palette.primary.main}`,outlineOffset:2}})}));GI.displayName="SelectionBubble",GI.propTypes={inRange:UA.default.bool.isRequired,isEndpoint:UA.default.bool.isRequired,onClick:UA.default.func.isRequired};var ScrollbackModalDialog=({open:g,onClose:A,items:I,filteredItems:C=I,itemKeyVersion:t=null,scrollbackSession:a=null,promptLine:r=null,onSendCommand:o=noop,fontFamily:i=Xg,fontSize:l=14,showTimestamp:s=!0})=>{const[c,u]=(0,e.useState)(!0),[m,d]=(0,e.useState)(s),[p,h]=(0,e.useState)(!1),[y,b]=(0,e.useState)(!1),{focusHostInput:x,initialGeometry:v,persistGeometry:E,useVirtualizedLogs:w}=useScrollbackLayout(),R=(0,e.useRef)(null),S=(0,e.useRef)(null),M=(0,e.useCallback)(()=>S.current?.querySelector('[data-testid="virtual-scroll-viewport"]')??null,[]),T=(0,e.useCallback)(g=>{g.dispatchEvent(new Event("scroll",{bubbles:!0}))},[]),N=(0,e.useCallback)(g=>{const A=M();if(!A)return!1;const I=Math.max(0,A.scrollHeight-A.clientHeight);return A.scrollTop=clampScrollbackGeometryValue(A.scrollTop+g,0,I),!0},[M]),G=(0,e.useCallback)(()=>{const g=M();g?(g.scrollTop=g.scrollHeight,T(g)):R.current?.scrollToBottom?.(),b(!1)},[T,M]),{hydratedItems:D,isLoadingMore:j,hydrateToId:P}=useScrollbackHydration({items:I,open:g,scrollbackSession:a,getViewportElement:M,dispatchViewportScroll:T,setScrollLock:b}),{paperRef:B,paperGeometryStyle:O,handleDragPointerDown:L,handleResizePointerDown:z,reaffirmCommittedGeometry:Z}=useScrollbackGeometry({initialGeometry:v,persistGeometry:E,contentRef:S}),{searchBarText:F,searchResults:K,isSearchActive:Y,searchCursor:V,searchStatusText:W,hasNoMatch:U,resetSearch:H,handleSearchInput:Q,handleSearchKeyDown:X}=useScrollbackSearch({scrollbackSession:a,open:g,showPrompts:c,showGagged:p}),J=(0,e.useMemo)(()=>D.filter(g=>(c||!g.isPrompt)&&(p||!g.gagged)),[D,p,c]),q=(0,e.useMemo)(()=>V>=0&&V<K.length?K[V]:null,[V,K]);(0,e.useEffect)(()=>{if(!g||!q)return;const A=q.id,I=J.findIndex(g=>g.id===A);I>=0?(R.current?.scrollToIndex?.(I,{align:"center"}),b(!0)):P(A)},[q,J,P,g]);const _=(0,e.useMemo)(()=>Y&&q?J.findIndex(g=>g.id===q.id):-1,[Y,q,J]),$=(0,e.useMemo)(()=>new Set(K.map(g=>g.id)),[K]),gg=resolveCssFontSize(l),{selectionA:Ag,selectionB:Ig,selectedRangeItems:Cg,copyConfirmed:eg,handleLineSelect:tg,handleCopyRange:ng,isLineSelected:ag}=useScrollbackSelection({visibleItems:J,showTimestamps:m}),{handleDownload:rg}=useScrollbackDownload({scrollbackSession:a,visibleItems:Y?K:J,isSearchActive:Y,useVirtualizedLogs:w,fontFamily:i,fontSize:l}),og=(0,e.useCallback)((g,{isActiveMatch:A})=>{const{isEndpoint:I,inRange:C}=ag(g.id),e=$.has(g.id);return React.createElement(n.Box,{sx:g=>({position:"relative",pl:"18px",bgcolor:C?I?g.palette.action.selected:g.palette.action.hover:void 0})},React.createElement(GI,{isEndpoint:I,inRange:C,onClick:()=>tg(g.id)}),React.createElement(fI,{fontFamily:i,isActiveMatch:A,isMatch:e,line:g,showTimestamp:m,timestampClassName:NI}))},[i,tg,ag,m,$]);(0,e.useEffect)(()=>{y||H()},[H,y]),(0,e.useEffect)(()=>{g?Z():b(!1)},[g,Z]),(0,e.useEffect)(()=>{if(!g)return;const A=M();if(!A)return;const handleWheel=g=>{if(g.ctrlKey)return;const I=getScrollbackWheelDeltaPixels(g,A);0!==I&&(g.preventDefault(),g.stopPropagation(),N(I))};return A.addEventListener("wheel",handleWheel,{passive:!1}),()=>{A.removeEventListener("wheel",handleWheel)}},[M,g,N]),(0,e.useEffect)(()=>{if(!g)return;const handleWindowKeyDown=g=>"PageUp"===g.key?(g.preventDefault(),g.stopPropagation(),void N(-(M()?.clientHeight??0)*RI)):"PageDown"===g.key?(g.preventDefault(),g.stopPropagation(),void N((M()?.clientHeight??0)*RI)):void("Escape"===g.key&&(g.preventDefault(),g.stopPropagation(),A(),window.setTimeout(()=>{x()},0)));return window.addEventListener("keydown",handleWindowKeyDown,!0),()=>{window.removeEventListener("keydown",handleWindowKeyDown,!0)}},[x,M,A,g,N]);const ig=(0,e.useCallback)((g,A)=>{u(A)},[]),lg=(0,e.useCallback)((g,A)=>{d(A)},[]),sg=(0,e.useCallback)((g,A)=>{h(A)},[]),cg=(0,e.useCallback)(()=>{G()},[G]),ug=(0,e.useCallback)((g,I)=>{"backdropClick"!==I&&(A(),window.setTimeout(()=>{x()},0))},[x,A]),mg=a?.getStats?.(),dg=Y?J.length:mg?.searchLineCount??J.length;return React.createElement(n.Dialog,{open:g,onClose:ug,hideBackdrop:!0,disableEnforceFocus:!0,disableAutoFocus:!0,maxWidth:!1,sx:g=>({pointerEvents:"auto",zIndex:g.zIndex.modal+10,"& .MuiDialog-container":{alignItems:"flex-start",justifyContent:"flex-start",pointerEvents:"none"},"& .MuiDialogTitle-root":{cursor:"grab",fontFamily:i,fontSize:gg,userSelect:"none"},"& .MuiDialogTitle-root:active":{cursor:"grabbing"},"& .MuiButton-root, & .MuiInputBase-root, & .MuiInputLabel-root":{fontFamily:i,fontSize:gg}}),slotProps:{backdrop:{invisible:!0},paper:{"data-testid":"scrollback-dialog-paper",ref:B,style:O,sx:g=>({backgroundImage:"none",backgroundColor:resolveDialogSurfaceBackground(g),border:1,borderColor:"divider",boxShadow:24,color:"text.primary",isolation:"isolate",position:"fixed",pointerEvents:"auto",left:`var(${dI.x})`,top:`var(${dI.y})`,width:`var(${dI.width})`,height:`var(${dI.height})`,m:0,maxWidth:"none",maxHeight:"none",display:"flex",flexDirection:"column",fontFamily:i,fontSize:gg,overflow:"hidden",zIndex:g.zIndex.modal+11})}}},React.createElement(n.DialogTitle,{onPointerDown:L,sx:g=>({backgroundColor:resolveHeaderBackground(g),borderBottom:1,borderColor:"divider",backgroundImage:"none",p:1,touchAction:"none"})},"Scrollback Buffer"),React.createElement(n.DialogContent,{ref:S,sx:g=>({backgroundColor:resolveModalBackground(g),backgroundImage:"none",color:"text.primary",display:"flex",flex:1,minHeight:0,overflow:"hidden",p:0,position:"relative"})},j?React.createElement(n.Box,{sx:{position:"absolute",top:8,left:"50%",transform:"translateX(-50%)",zIndex:10,backgroundColor:"rgba(0, 0, 0, 0.7)",borderRadius:"4px",padding:"4px 8px",display:"flex",alignItems:"center",gap:"8px",color:"primary.main",fontSize:"0.75rem",border:"1px solid",borderColor:"divider"}},React.createElement(n.CircularProgress,{size:12,thickness:5}),"Loading history..."):null,React.createElement(EI,{activeMatchIndex:_,border:!0,fontFamily:i,fontSize:l,itemKeyVersion:t,items:J,onSendCommand:o,onScrollLockChange:b,promptLine:r,ref:R,renderItem:og,showPromptInline:!0,showTimestamp:m,timestampClassName:NI})),React.createElement(n.DialogActions,null,React.createElement(n.TextField,{size:"small",label:"Search",value:F,onInput:Q,onKeyDown:X,error:U,slotProps:{htmlInput:{"aria-label":"Search scrollback"}},sx:{width:"20ch"}}),W?React.createElement(n.Box,{"aria-live":"polite",component:"div",role:"status",sx:g=>({color:U?g.palette.error.main:g.palette.text.secondary,fontSize:g.typography.pxToRem(12),lineHeight:1.2,whiteSpace:"nowrap"})},W):null,React.createElement(n.Box,{sx:{flex:1}}),React.createElement(n.FormControlLabel,{control:React.createElement(n.Switch,{checked:c,onChange:ig,size:"small"}),label:"Show Prompts",sx:{mr:1,userSelect:"none"}}),React.createElement(n.FormControlLabel,{control:React.createElement(n.Switch,{checked:m,onChange:lg,size:"small"}),label:"Show Timestamps",sx:{mr:1,userSelect:"none"}}),React.createElement(n.FormControlLabel,{control:React.createElement(n.Switch,{checked:p,onChange:sg,size:"small"}),label:"Show Gagged",sx:{mr:1,userSelect:"none"}}),null!=Cg?React.createElement(n.Button,{color:eg?"success":"primary",onClick:ng,size:"small",variant:"outlined"},eg?"Copied!":`Copy (${Cg.length})`):null,y?React.createElement(n.Button,{onClick:cg,size:"small",variant:"outlined"},"Bottom"):null,React.createElement(n.Button,{onClick:rg,size:"small",variant:"outlined"},"Download (#",dg,")"),React.createElement(n.Button,{onClick:ug,size:"small"},"Close")),pI.map(g=>React.createElement(n.Box,{component:"span","data-testid":`scrollback-resize-handle-${g.direction}`,key:g.direction,onPointerDown:z(g.direction),sx:{position:"absolute",touchAction:"none",zIndex:2,...g.sx}})))};ScrollbackModalDialog.displayName="ScrollbackModalDialog";var kI={fontFamily:UA.default.string,fontSize:UA.default.oneOfType([UA.default.number,UA.default.string]),filteredItems:UA.default.arrayOf(yI),itemKeyVersion:UA.default.oneOfType([UA.default.number,UA.default.string]),scrollbackSession:UA.default.object,items:UA.default.arrayOf(yI).isRequired,onClose:UA.default.func.isRequired,onSendCommand:UA.default.func,open:UA.default.bool.isRequired,promptLine:wI,showTimestamp:UA.default.bool};ScrollbackModalDialog.propTypes=kI;var ScrollbackModalComponent=g=>g.open?React.createElement(ScrollbackModalDialog,g):null;ScrollbackModalComponent.displayName="ScrollbackModal",ScrollbackModalComponent.propTypes=kI;var DI=(0,e.memo)(ScrollbackModalComponent);DI.displayName="ScrollbackModal",DI.propTypes=ScrollbackModalComponent.propTypes;var identity=g=>g,useHostDisplaySetting=(g=identity,A=Object.is)=>{const{hostDisplaySettingsModel:I}=useNexGui();if(!I||"function"!=typeof I.subscribe||"function"!=typeof I.getSnapshot)throw new Error("useHostDisplaySetting requires NexGuiContext hostDisplaySettingsModel with subscribe(listener) and getSnapshot().");const C=(0,e.useMemo)(()=>{let C=g(I.getSnapshot());const getSnapshot=()=>{const e=g(I.getSnapshot());return A(C,e)||(C=e),C},subscribe=e=>I.subscribe(()=>{const t=g(I.getSnapshot());A(C,t)||(C=t,e())});return Object.freeze({getSnapshot,subscribe})},[I,A,g]);return(0,e.useSyncExternalStore)(C.subscribe,C.getSnapshot,C.getSnapshot)},useHostDisplaySettings=()=>useHostDisplaySetting(),jI=Object.freeze({}),PI=Object.freeze({}),createHostBridge=g=>Object.freeze({getSettings:()=>g?.getHostSettings?.()??jI,setSetting:(A,I)=>{g?.setHostSetting?.(A,I)},getLayoutSnapshot:()=>g?.getHostLayoutSnapshot?.()??PI,updateLayoutAttributes:A=>{g?.updateHostLayoutAttributes?.(A)},focusInput:()=>{g?.focusInput?.()}}),useHostBridge=()=>{const{adapter:g}=useNexGui();return(0,e.useMemo)(()=>createHostBridge(g),[g])},useHostFocus=()=>{const g=useHostBridge();return(0,e.useCallback)(()=>{g.focusInput()},[g])},BI=new WeakMap,assertStreamModel=g=>{if(!g||"function"!=typeof g.subscribe||"function"!=typeof g.getSnapshot)throw new Error("useStream requires NexGuiContext streamModel with subscribe(listener) and getSnapshot().")},getStreamModelBindings=g=>{assertStreamModel(g);let A=BI.get(g);if(!A){const subscribe=A=>g.subscribe(A),getSnapshot=()=>g.getSnapshot();A=Object.freeze({subscribe,getSnapshot}),BI.set(g,A)}return A},useStreamSnapshot=()=>{const{streamModel:g}=useNexGui(),{subscribe:A,getSnapshot:I}=getStreamModelBindings(g);return(0,e.useSyncExternalStore)(A,I,I)},selectUiSlice=g=>({activeTab:g.activeTab,modalOpen:g.modalOpen,setActiveTab:g.setActiveTab,openModal:g.openModal,closeModal:g.closeModal,settings:g.settings,setSetting:g.setSetting}),useUi=()=>{const{stores:g}=useNexGui();return g.ui(useShallow(selectUiSlice))},OI="scrollback",getPromptShownTailStartIndex=(g,A,I)=>{const C=Math.max(0,g.length-I);let e=0;for(let t=g.length-1;t>=C;t--)if(!g[t]?.isPrompt&&(e++,e===A))return t;return C},selectMainDisplayLiveTailItems=({allItems:g,filteredItems:A,showPrompts:I,nonPromptLimit:C=100,totalItemLimit:e=100})=>{const t=I?g:A;if(t.length<=C)return t;if(!I)return t.slice(-C);const n=getPromptShownTailStartIndex(t,C,e);return 0===n?t:t.slice(n)},useMainDisplayViewModel=()=>{const{adapter:g,scrollbackSession:A}=useNexGui(),I=useHostFocus(),{showPrompts:C,showTimestamps:t}=useHostDisplaySettings(),{buffer:n,filteredBuffer:a,promptLine:r,version:o}=useStreamSnapshot(),{modalOpen:i,openModal:l,closeModal:s}=useUi(),c=(0,e.useMemo)(()=>selectMainDisplayLiveTailItems({allItems:n.some(g=>g.gagged)?n.filter(g=>!g.gagged):n,filteredItems:a.some(g=>g.gagged)?a.filter(g=>!g.gagged):a,showPrompts:C}),[n,a,C]),u=C?null:r,m=c.at(-1),d=`${C?"all":"filtered"}:${c.length}:${m?.id??"none"}`,p=(0,e.useCallback)(()=>{i!==OI&&l(OI)},[i,l]),h=(0,e.useCallback)(()=>{s()},[s]),y=(0,e.useCallback)(A=>{g?.send?.(A)},[g]);return{allItems:n,closeScrollback:h,displayItems:c,displayItemKeyVersion:d,displayPromptLine:u,filteredItems:a,focusHostInput:I,openScrollback:p,promptLine:r,scrollbackItemKeyVersion:o,scrollbackOpen:i===OI,scrollbackSession:A,sendCommand:y,showTimestamps:t}},selectThemeSlice=g=>({tokens:g.tokens,updateTokens:g.updateTokens,resetTokens:g.resetTokens}),useTheme$9=()=>{const{stores:g}=useNexGui(),A=g.theme(useShallow(selectThemeSlice)),I=(0,e.useMemo)(()=>createMuiTheme(A.tokens),[A.tokens]);return(0,e.useMemo)(()=>({...A,theme:I}),[A,I])},LI="nexgui4-main-display-timestamp ng-timestamp timestamp mono no_out",zI=10,MainDisplayInner=()=>{const g=(0,e.useRef)(null),{tokens:A}=useTheme$9(),{allItems:I,closeScrollback:C,displayItems:t,displayItemKeyVersion:a,displayPromptLine:r,filteredItems:o,focusHostInput:i,openScrollback:l,promptLine:s,scrollbackItemKeyVersion:c,scrollbackOpen:u,scrollbackSession:m,sendCommand:d,showTimestamps:p}=useMainDisplayViewModel(),h=A.theme.displayFontFamily,y=A.theme.displayFontSize,b=(0,e.useCallback)(()=>{l()},[l]),x=(0,e.useCallback)(()=>{C(),g.current?.scrollToBottom(),i()},[C,i]);return React.createElement(n.Box,{className:"main-display main-display__content",sx:{display:"flex",flex:1,minHeight:0,minWidth:0,overflow:"hidden",position:"relative",width:"100%"}},React.createElement(n.Box,{"data-testid":"main-display-buffer",sx:{display:"flex",flex:1,minHeight:0,position:"relative"}},React.createElement(EI,{ref:g,border:!1,fontFamily:h,fontSize:y,itemKeyVersion:a,items:t,onRequestScrollback:b,onSendCommand:d,overscan:zI,promptLine:r,showPromptInline:!1,showTimestamp:p,timestampClassName:LI})),React.createElement(DI,{fontFamily:h,fontSize:y,filteredItems:o,items:I,itemKeyVersion:c,scrollbackSession:m,onClose:x,onSendCommand:d,open:u,promptLine:s,showTimestamp:p}))};MainDisplayInner.displayName="MainDisplayInner";var MainDisplay=()=>React.createElement(QA,{panelName:"Main Display"},React.createElement(MainDisplayInner,null));MainDisplay.displayName="MainDisplay";var selectPlayStatsSlice=g=>({instance:g.instance,session:g.session,month:g.month,updateInstance:g.updateInstance,updateSession:g.updateSession,updateMonth:g.updateMonth,resetInstance:g.resetInstance}),usePlayStats=()=>{const{stores:g}=useNexGui();return g.playStats(useShallow(selectPlayStatsSlice))},ZI="metrics",FI=Object.freeze(["instance","session","month"]),KI=Object.freeze({instance:"Instance",session:"Session",month:"Month"}),YI=1e3,VI=35e4,WI=45e4,getFlipTransform$7=g=>{switch(g){case 1:return"scaleX(-1) scaleY(-1)";case 2:return"scaleY(-1)";case 3:return"scaleX(-1)";default:return"none"}},formatNumber$1=g=>g.toLocaleString("en-US"),formatPercent=g=>`${g.toFixed(2)}%`,formatElapsed=(g,A=Date.now())=>{const I=Math.max(0,A-g),C=Math.floor(I/1e3),e=Math.floor(C/3600),t=Math.floor(C%3600/60);return[e>0?`${e}h`:null,e>0||t>0?`${t}m`:null,C%60+"s"].filter(Boolean).join(" ")},formatPerHour=(g,A,I=Date.now())=>{const C=Math.max(0,I-A)/36e5,e=parseInt(g/C,10);return e>0?formatNumber$1(e):"0"},resolveActiveTabId$2=g=>"string"==typeof g&&FI.includes(g)?g:"number"==typeof g?FI[g]??"month":"month",UI={kills:UA.default.number.isRequired,goldGained:UA.default.number.isRequired,xpPercent:UA.default.number.isRequired,xpValue:UA.default.number.isRequired,deaths:UA.default.number.isRequired,startedAt:UA.default.number.isRequired},HI=UA.default.shape(UI),QI=UA.default.shape({...UI,goldCap:UA.default.number.isRequired,year:UA.default.number,month:UA.default.number}),StatTable=({rows:g})=>React.createElement(n.Box,{component:"table",sx:{borderCollapse:"collapse","& td":{pb:.5,pr:2,verticalAlign:"top"},"& td:last-of-type":{fontVariantNumeric:"tabular-nums"}}},React.createElement("tbody",null,g.map((g,A)=>React.createElement("tr",{key:`${g.label}-${A}`},React.createElement("td",null,g.label),React.createElement("td",null,g.value)))));StatTable.displayName="MetricsPanelStatTable",StatTable.propTypes={rows:UA.default.arrayOf(UA.default.shape({label:UA.default.string.isRequired,value:UA.default.node.isRequired})).isRequired};var LinearProgressWithLabel=({label:g,value:A})=>React.createElement(n.Box,{sx:{mt:2}},React.createElement(n.Box,{sx:{fontSize:"9px",mb:.25}},g),React.createElement(n.Box,{sx:{alignItems:"center",display:"flex"}},React.createElement(n.Box,{sx:{mr:1,width:"100%"}},React.createElement(n.LinearProgress,{"aria-label":g,sx:{borderRadius:5,height:5},value:A,variant:"determinate"})),React.createElement(n.Box,{sx:{minWidth:35}},React.createElement(n.Typography,{color:"text.secondary",variant:"body2"},`${A}%`))));LinearProgressWithLabel.displayName="MetricsPanelLinearProgressWithLabel",LinearProgressWithLabel.propTypes={label:UA.default.string.isRequired,value:UA.default.number.isRequired};var MonthGoldCap=({goldCap:g})=>React.createElement(n.Box,{sx:{mt:1}},React.createElement(LinearProgressWithLabel,{label:"Soft Gold Cap",value:g<=VI?parseInt(g/VI*100,10):100}),React.createElement(LinearProgressWithLabel,{label:"Hard Gold Cap",value:g<=WI?parseInt(g/WI*100,10):100}));MonthGoldCap.displayName="MetricsPanelMonthGoldCap",MonthGoldCap.propTypes={goldCap:UA.default.number.isRequired};var ScopeContent=({now:g,onReset:A,scope:I,scopeKey:C})=>{const t=(0,e.useMemo)(()=>{const A=[{label:"Total Kills:",value:formatNumber$1(I.kills)},{label:"Total Gold:",value:formatNumber$1(I.goldGained)},{label:"Total XP:",value:formatPercent(I.xpPercent)},{label:"Total XP:",value:formatNumber$1(I.xpValue)},{label:"Total Deaths:",value:formatNumber$1(I.deaths)}];return"month"!==C?[...A,{label:"Time:",value:formatElapsed(I.startedAt,g)},{label:"XP/Hr:",value:formatPerHour(I.xpValue,I.startedAt,g)},{label:"Gold/Hr:",value:formatPerHour(I.goldGained,I.startedAt,g)}]:[...A,{label:"Gold Cap:",value:formatNumber$1(I.goldCap)}]},[g,I,C]);return React.createElement(n.Box,null,React.createElement(StatTable,{rows:t}),"instance"===C?React.createElement(n.Button,{onClick:A,sx:{mt:1},variant:"outlined"},"Reset"):null,"month"===C?React.createElement(MonthGoldCap,{goldCap:I.goldCap}):null)};ScopeContent.displayName="MetricsPanelScopeContent",ScopeContent.propTypes={now:UA.default.number.isRequired,onReset:UA.default.func.isRequired,scope:UA.default.oneOfType([HI,QI]).isRequired,scopeKey:UA.default.oneOf(["instance","session","month"]).isRequired};var MetricsPanelInner=()=>{const g=(0,a.useTheme)(),{activeTab:A,setActiveTab:I}=useUi(),{instance:C,session:t,month:r,resetInstance:o}=usePlayStats(),[i]=(0,e.useState)(()=>Math.floor(4*Math.random())),[l,s]=(0,e.useState)(()=>Date.now()),c=g?.nexGui?.backgroundImage??"",u=g?.nexGui?.backgroundOpacity??.5,m=g?.nexGui?.backgroundFilter??"none",d=resolveActiveTabId$2(A[ZI]),p={instance:C,session:t,month:r};(0,e.useEffect)(()=>{if("month"===d)return void s(Date.now());s(Date.now());const g=window.setInterval(()=>{s(Date.now())},YI);return()=>{window.clearInterval(g)}},[d]);const handleTabChange=(g,A)=>{const C=FI.indexOf(A);C>=0&&I(ZI,C)};return React.createElement(n.Box,{className:"metrics-panel",sx:{color:"text.primary",height:"100%",overflow:"hidden",position:"relative",width:"100%"}},c?React.createElement(n.Box,{"aria-hidden":"true",className:"metrics-panel__background",sx:{backgroundImage:`url(${c})`,backgroundPosition:"center",backgroundSize:"cover",filter:m,inset:0,opacity:u,position:"absolute",transform:getFlipTransform$7(i),zIndex:0}}):null,React.createElement(n.Box,{className:"metrics-panel__content",sx:{display:"flex",flexDirection:"column",fontFamily:g.typography.fontFamily,fontSize:g.nexusFontSize??g.typography.fontSize,height:"100%",position:"relative",width:"100%",zIndex:1}},React.createElement(n.Box,{sx:{borderBottom:1,borderColor:"divider"}},React.createElement(n.Tabs,{"aria-label":"stats tabs",onChange:handleTabChange,value:d},FI.map(g=>React.createElement(n.Tab,{key:g,label:KI[g],value:g})))),React.createElement(n.Box,{sx:{flex:1,overflowY:"auto",p:2}},React.createElement(n.Typography,{component:"div",sx:{color:"text.primary",fontFamily:"inherit",fontSize:"inherit",position:"relative"}},React.createElement(ScopeContent,{now:l,onReset:o,scope:p[d],scopeKey:d})))))};MetricsPanelInner.displayName="MetricsPanelInner";var MetricsPanel=()=>React.createElement(QA,{panelName:"Metrics"},React.createElement(MetricsPanelInner,null));MetricsPanel.displayName="MetricsPanel";var XI={id:UA.default.oneOfType([UA.default.number,UA.default.string]).isRequired,name:UA.default.string.isRequired},JI=UA.default.shape(XI),RoomNpcRowComponent=({indent:g=0,interactive:A=!1,isTarget:I=!1,npc:C,onContextMenu:e,onSelect:t})=>{const a=g>0?g:0,r=g>0?g:2;return React.createElement(n.Box,{className:["room-npc-row",A?"room-npc-row--interactive":"",I?"room-npc-row--target":""].filter(Boolean).join(" "),onClick:A?()=>t?.(C):void 0,onContextMenu:A?g=>{e?.(g,C)}:void 0,sx:{cursor:A?"pointer":"inherit",display:"table-row",outline:I?"1px solid red":""}},React.createElement(n.Box,{component:"div",sx:{color:"cyan",display:"table-cell",padding:`0px 5px 0px ${r}px`,whiteSpace:"nowrap"}},React.createElement(n.Typography,{component:"span",sx:{color:"inherit",fontVariantNumeric:"tabular-nums"},variant:"body2"},C.id)),React.createElement(n.Box,{component:"div",sx:{display:"table-cell",padding:`0px 5px 0px ${a}px`,width:"100%"}},React.createElement(n.Typography,{component:"span",sx:{color:"text.primary"},variant:"body2"},C.name)))};RoomNpcRowComponent.displayName="RoomNpcRow",RoomNpcRowComponent.propTypes={npc:JI.isRequired,indent:UA.default.number,interactive:UA.default.bool,isTarget:UA.default.bool,onContextMenu:UA.default.func,onSelect:UA.default.func};var qI=(0,e.memo)(RoomNpcRowComponent);qI.displayName="RoomNpcRow",qI.propTypes=RoomNpcRowComponent.propTypes;var selectTargetSlice=g=>({id:g.id,name:g.name,isPlayer:g.isPlayer,hpPercent:g.hpPercent,hpText:g.hpText,hpDelta:g.hpDelta,gender:g.gender,currentAffs:g.currentAffs,limbs:g.limbs}),useTarget=()=>{const{stores:g}=useNexGui();return g.target(useShallow(selectTargetSlice))},_I=[/a dervish/,/a sharp-toothed gremlin/,/a chaos orb/,/a bloodleech/,/a minion of chaos/,/a worm/,/a green slime/,/a soulmaster/,/a humbug/,/a chimera/,/a bubonis/,/a chaos storm/,/a chaos hound/,/a withered crone/,/a pathfinder/,/a doppleganger/,/an ethereal firelord/,/a simpering sycophant/,/a water weird/,/an eldritch abomination/,/Khaseem/],$I=[/a shipmate/,/a spectral shipmate/],gC=[/a swarthy swashbuckler/],AC=new Set(["guard","person-military-pointing"]),IC=new Set(["face-angry-horns","fiend","monster"]),CC=new Set(["humanoid","person"]),getFlipTransform$6=g=>{switch(g){case 1:return"scaleX(-1) scaleY(-1)";case 2:return"scaleY(-1)";case 3:return"scaleX(-1)";default:return"none"}},partition=(g,A)=>g.reduce((g,I,C,e)=>(A(I,C,e)?g[0].push(I):g[1].push(I),g),[[],[]]),toNpcEntry=g=>g&&"object"==typeof g&&"string"==typeof g.name?{...g,id:g.id??g.name}:"string"==typeof g?{attrib:"m",id:g,name:g}:null,matchesPatternList=(g,A)=>"string"==typeof g&&A.some(A=>A.test(g)),isVisibleNpc=g=>"m"===g?.attrib||"mx"===g?.attrib,isGuardNpc=g=>AC.has(g?.icon??"")&&"mx"===g?.attrib,isEntityNpc=g=>IC.has(g?.icon??"")&&matchesPatternList(g?.name,_I),isShipmateNpc=g=>matchesPatternList(g?.name,$I),isSwashbucklerNpc=g=>CC.has(g?.icon??"")&&matchesPatternList(g?.name,gC),isTargetNpc=(g,A)=>!A.isPlayer&&null!=g?.id&&null!=A.id&&String(g.id)===String(A.id),NpcGroupHeader=({count:g,expanded:A,onToggle:I,title:C})=>g<1?null:React.createElement(n.Box,{className:"npcs-panel__group-header",onClick:I,sx:{cursor:"pointer",display:"table-row"}},React.createElement(n.Box,{component:"div",sx:{color:"cyan",display:"table-cell",fontFamily:"monospace",padding:"0px 5px 0px 0px",pl:"1rem",whiteSpace:"nowrap"}},React.createElement(n.Typography,{component:"span",sx:{color:"inherit",fontFamily:"inherit"},variant:"body2"},A?"-":"+ ")),React.createElement(n.Box,{component:"div",sx:{display:"table-cell"}},React.createElement(n.Typography,{component:"span",sx:{color:"text.primary"},variant:"body2"},"(",g,") ",C)));NpcGroupHeader.displayName="NpcGroupHeader",NpcGroupHeader.propTypes={count:UA.default.number.isRequired,expanded:UA.default.bool.isRequired,onToggle:UA.default.func.isRequired,title:UA.default.string.isRequired};var NpcsPanelInner=()=>{const g=(0,a.useTheme)(),{adapter:A}=useNexGui(),{npcs:I}=useRoom(),C=useTarget(),[t]=(0,e.useState)(()=>Math.floor(4*Math.random())),[r,o]=(0,e.useState)(!1),[i,l]=(0,e.useState)(!1),[s,c]=(0,e.useState)(!1),[u,m]=(0,e.useState)(!1),d=g?.nexGui?.backgroundImage??"",p=g?.nexGui?.backgroundOpacity??.5,h=g?.nexGui?.backgroundFilter??"none",y=(0,e.useMemo)(()=>(I??[]).map(g=>toNpcEntry(g)).filter(Boolean),[I]),b=(0,e.useMemo)(()=>{let g=[],A=[],I=[],C=[],e=y;return[g,e]=partition(e,isGuardNpc),[A,e]=partition(e,isEntityNpc),[I,e]=partition(e,isShipmateNpc),[C,e]=partition(e,isSwashbucklerNpc),{guards:g,entities:A,shipmates:I,swashbucklers:C,npcs:e.filter(isVisibleNpc)}},[y]),handleNpcSelect=g=>{null!=g?.id&&A.send(`settarget ${g.id}`)},handleNpcContextMenu=g=>{g.preventDefault(),A.notice?.("RIGHT CLICK RIGHT CLICK RIGHT CLICK")};return React.createElement(n.Box,{className:"npcs-panel",sx:{height:"100%",overflow:"hidden",position:"relative",width:"100%"}},d?React.createElement(n.Box,{"aria-hidden":"true",className:"npcs-panel__background",sx:{backgroundImage:`url(${d})`,backgroundPosition:"center",backgroundSize:"cover",filter:h,inset:0,opacity:p,position:"absolute",transform:getFlipTransform$6(t),zIndex:0}}):null,React.createElement(n.Box,{className:"npcs-panel__content",sx:{background:`linear-gradient(180deg, ${(0,a.alpha)("#050505",.18)} 0%, ${(0,a.alpha)("#050505",.36)} 100%)`,color:"text.primary",height:"100%",overflow:"auto",position:"relative",width:"100%",zIndex:1}},React.createElement(n.Box,{className:"npcs-panel__rows",sx:{cursor:"pointer",display:"table",fontSize:g.typography.fontSize,m:"10px",maxWidth:"100%",p:"1px",position:"relative",textAlign:"left"}},React.createElement(NpcGroupHeader,{count:b.guards.length,expanded:i,onToggle:()=>l(g=>!g),title:"City Guards"}),i?b.guards.map(g=>React.createElement(qI,{key:`guard-${g.id}`,indent:12,isTarget:isTargetNpc(g,C),npc:g})):null,React.createElement(NpcGroupHeader,{count:b.entities.length,expanded:r,onToggle:()=>o(g=>!g),title:"Entities"}),r?b.entities.map(g=>React.createElement(qI,{key:`entity-${g.id}`,indent:12,isTarget:isTargetNpc(g,C),npc:g})):null,React.createElement(NpcGroupHeader,{count:b.shipmates.length,expanded:s,onToggle:()=>c(g=>!g),title:"Shipmates"}),s?b.shipmates.map(g=>React.createElement(qI,{key:`shipmate-${g.id}`,indent:12,isTarget:isTargetNpc(g,C),npc:g})):null,React.createElement(NpcGroupHeader,{count:b.swashbucklers.length,expanded:u,onToggle:()=>m(g=>!g),title:"Swashbucklers"}),u?b.swashbucklers.map(g=>React.createElement(qI,{key:`swashbuckler-${g.id}`,indent:12,isTarget:isTargetNpc(g,C),npc:g})):null,b.npcs.map(g=>React.createElement(qI,{key:`npc-${g.id}`,interactive:!0,isTarget:isTargetNpc(g,C),npc:g,onContextMenu:handleNpcContextMenu,onSelect:handleNpcSelect})))))};NpcsPanelInner.displayName="NpcsPanelInner";var NpcsPanel=()=>React.createElement(QA,{panelName:"NPCs"},React.createElement(NpcsPanelInner,null));NpcsPanel.displayName="NpcsPanel";var eC=Object.freeze([]),tC=UA.default.shape({content:UA.default.node,id:UA.default.string.isRequired,label:UA.default.node.isRequired}),resolveActiveTabId$1=(g,A)=>g.some(g=>g.id===A)?A:g[0]?.id??!1,getFlipTransform$5=g=>{switch(g){case 1:return"scaleX(-1) scaleY(-1)";case 2:return"scaleY(-1)";case 3:return"scaleX(-1)";default:return"none"}},TabContainerComponent=({tabs:g=eC,activeTab:A=null,backgroundImage:I="",backgroundOpacity:C=.5,backgroundFilter:t="none",onTabChange:a})=>{const[r]=(0,e.useState)(()=>Math.floor(4*Math.random())),o=resolveActiveTabId$1(g,A),i=g.find(g=>g.id===o)??null;return 0===g.length?null:React.createElement(n.Box,{className:"nexgui4-tab-container",sx:{display:"flex",flex:1,flexDirection:"column",height:"100%",minHeight:0,minWidth:0,overflow:"hidden",position:"relative",width:"100%"}},I?React.createElement(n.Box,{"aria-hidden":"true",className:"nexgui4-tab-container__background",sx:{backgroundImage:`url(${I})`,backgroundPosition:"center",backgroundSize:"cover",filter:t,inset:0,opacity:C,position:"absolute",transform:getFlipTransform$5(r),zIndex:0}}):null,React.createElement(n.Box,{className:"nexgui4-tab-container__surface",sx:{display:"flex",flex:1,flexDirection:"column",minHeight:0,minWidth:0,position:"relative",zIndex:1}},React.createElement(n.Tabs,{allowScrollButtonsMobile:!0,"aria-label":"Panel tabs",className:"nexgui4-tab-container__tabs",onChange:(g,A)=>a(A),scrollButtons:"auto",sx:{borderBottom:1,borderColor:"divider",minHeight:40,"& .MuiTab-root":{minHeight:40,textTransform:"none"}},value:o,variant:"scrollable"},g.map(g=>React.createElement(n.Tab,{"aria-controls":`nexgui4-tab-panel-${g.id}`,id:`nexgui4-tab-${g.id}`,key:g.id,label:g.label,value:g.id}))),React.createElement(n.Box,{"aria-labelledby":i?`nexgui4-tab-${i.id}`:void 0,className:"nexgui4-tab-container__tabpanel",id:i?`nexgui4-tab-panel-${i.id}`:void 0,role:"tabpanel",sx:{display:"flex",flex:1,minHeight:0,minWidth:0,overflow:"auto",p:2,position:"relative",zIndex:1}},i?.content??null)))};TabContainerComponent.displayName="TabContainer",TabContainerComponent.propTypes={activeTab:UA.default.oneOfType([UA.default.string,UA.default.oneOf([null])]),backgroundFilter:UA.default.string,backgroundImage:UA.default.string,backgroundOpacity:UA.default.number,onTabChange:UA.default.func.isRequired,tabs:UA.default.arrayOf(tC)};var nC=(0,e.memo)(TabContainerComponent);nC.displayName="TabContainer",nC.propTypes=TabContainerComponent.propTypes;var aC="title",rC="popover",oC={cursor:"help",display:"inline-flex",maxWidth:"100%"},renderLabel=(g,A,I)=>{const C=React.createElement(n.Typography,{component:"span",variant:"body2"},g);return A?I===aC?React.createElement(n.Box,{component:"span",sx:oC,title:A},C):React.createElement(n.Tooltip,{describeChild:!0,placement:"top-start",title:A},React.createElement(n.Box,{component:"span",sx:oC},C)):C},ConfigToggleComponent=({label:g,value:A,onChange:I,tooltip:C="",tooltipMode:e=rC})=>React.createElement(n.FormControlLabel,{control:React.createElement(n.Switch,{checked:A,onChange:()=>I(!A)}),label:renderLabel(g,C,e),sx:{alignItems:"center",gap:1,justifyContent:"space-between",m:0,width:"100%","& .MuiFormControlLabel-label":{flex:1}}});ConfigToggleComponent.displayName="ConfigToggle",ConfigToggleComponent.propTypes={label:UA.default.string.isRequired,onChange:UA.default.func.isRequired,tooltip:UA.default.string,tooltipMode:UA.default.oneOf([rC,aC]),value:UA.default.bool.isRequired};var iC=(0,e.memo)(ConfigToggleComponent);iC.displayName="ConfigToggle",iC.propTypes=ConfigToggleComponent.propTypes;var NOOP=()=>{},resolveCommand=g=>"function"==typeof g?g:NOOP,createNativeDisplayCommands=g=>Object.freeze({mount:resolveCommand(g?.mountNativeDisplay),unmount:resolveCommand(g?.unmountNativeDisplay)}),useNativeDisplayCommands=()=>{const{platformTabs:g}=useNexGui();return(0,e.useMemo)(()=>createNativeDisplayCommands(g),[g])},lC="sfx/arcade sound",sC="nexGui4.netflixMode",cC="nexGui4.netflixMode",uC="https://images.ctfassets.net/y2ske730sjqp/821Wg4N9hJD8vs5FBcCGg/9eaf66123397cc61be14e40174123c40/Vector__3_.svg?w=460",mC="netflixModeEmoteColor",dC="netflixModeScenarios",pC="#afffff",hC=/^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/,resolveNetflixEmoteColor=g=>"string"==typeof g&&hC.test(g.trim())?g.trim():pC,resolveNetflixScenarioEnabled=(g,A)=>{const I=g?.[A];return"boolean"!=typeof I||I},renderNetflixNoticeHtml=g=>`<span style="height:15px;overflow:hidden"><img src="${uC}" style="height:16px"/> Mode ${g}.</span>`,resolveSelfName=g=>{const A=g?.getState?.()?.name;if(isNonEmptyString(A))return A.trim().toLowerCase();const I=globalThis.GMCP?.Char?.Status?.name;return isNonEmptyString(I)?I.trim().toLowerCase():null},yC=Object.freeze([{id:"nameMentioned",label:"Name Mentioned",predicate:(g,{selfName:A})=>!(!A||"string"!=typeof g?.text)&&g.text.toLowerCase().includes(A)},{id:"saysChannel",label:"Says",predicate:g=>"says"===g?.channel},{id:"tellsChannel",label:"Tells",predicate:g=>"tells"===g?.channel}]),fC=Object.freeze([{id:"emote",label:"Emote",regex:/^/,resolveFg:({emoteColor:g})=>g}]),bC=Object.freeze([{id:"affGot",label:"Aff Got",eventName:"nexsys4.aff.got"},{id:"defLost",label:"Def Lost",eventName:"nexsys4.def.lost"},{id:"damage",label:"Damage",eventName:"nexsys4.system.health.changed"},{id:"roomChanged",label:"Room Changed",eventName:"nexsys4.system.room.changed"}]),xC=Object.freeze([...yC.map(({id:g,label:A})=>({id:g,label:A,source:"commChannel"})),...bC.map(({id:g,label:A})=>({id:g,label:A,source:"event"})),...fC.map(({id:g,label:A})=>({id:g,label:A,source:"trigger"}))]),playNetflixSound=()=>{nexusclient.ui?.()?.sounds?.()?.play_sound?.(lC)},evaluateCommChannelPayload=(g,A,I)=>{for(const C of yC)if(resolveNetflixScenarioEnabled(I,C.id)&&C.predicate(g??{},A))return!0;return!1},attachCommChannelListener=(g,A)=>{const handler=I=>{const C=resolveSelfName(g),e=A();evaluateCommChannelPayload(I,{selfName:C},e)&&playNetflixSound()};return eventStream.registerEvent("Comm.Channel.Text",handler,{id:sC}),()=>{eventStream.removeListener("Comm.Channel.Text",sC)}},attachTriggerScenarios=(g,A)=>{for(const I of fC){if(!resolveNetflixScenarioEnabled(A,I.id))continue;const C=I.resolveFg?.({emoteColor:g})??I.fg;nexAction.triggers.add({id:`${cC}.${I.id}`,regex:I.regex,tags:[cC],fg:C,action:playNetflixSound})}return()=>{nexAction.triggers.remove([cC])}},areTriggerScenarioOverridesEqual=(g,A)=>{for(const I of fC)if(resolveNetflixScenarioEnabled(g,I.id)!==resolveNetflixScenarioEnabled(A,I.id))return!1;return!0},attachEventScenarios=g=>{const A=[];for(const I of bC){const C=`${sC}.eventScenario.${I.id}`,handler=A=>{resolveNetflixScenarioEnabled(g(),I.id)&&(I.predicate&&!I.predicate(A)||playNetflixSound())};eventStream.registerEvent(I.eventName,handler,{id:C}),A.push(()=>eventStream.removeListener(I.eventName,C))}return()=>{for(const g of A)g()}},readEmoteColorFromUiState=g=>resolveNetflixEmoteColor(g?.settings?.[mC]),readScenarioOverridesFromUiState=g=>g?.settings?.netflixModeScenarios??null,createNetflixModeController=({adapter:g,uiStore:A,characterStore:I})=>{if(!A||"function"!=typeof A.getState||"function"!=typeof A.subscribe)return()=>{};let C=null,e=null,t=null,n=!1,a=null,r=null;const getScenarioOverrides=()=>readScenarioOverridesFromUiState(A.getState()),enable=(A,o)=>{n||(C=attachCommChannelListener(I,getScenarioOverrides),e=attachTriggerScenarios(A,o),t=attachEventScenarios(getScenarioOverrides),a=A,r=o,n=!0,g?.notice?.(renderNetflixNoticeHtml("Enabled"),{html:!0}))},disable=()=>{n&&(C?.(),e?.(),t?.(),C=null,e=null,t=null,a=null,r=null,n=!1,g?.notice?.(renderNetflixNoticeHtml("Disabled"),{html:!0}))},reattachTriggers=(g,A)=>{e?.(),e=attachTriggerScenarios(g,A),a=g,r=A},sync=g=>{const A=readEmoteColorFromUiState(g),I=readScenarioOverridesFromUiState(g);if(g?.netflixMode){if(!n)return void enable(A,I);const g=A!==a,C=!areTriggerScenarioOverridesEqual(I,r);(g||C)&&reattachTriggers(A,I)}else disable()};sync(A.getState());const o=A.subscribe((g,A)=>{const I=Boolean(g?.netflixMode),C=Boolean(A?.netflixMode),e=readEmoteColorFromUiState(g),t=readEmoteColorFromUiState(A),n=readScenarioOverridesFromUiState(g),a=readScenarioOverridesFromUiState(A);I===C&&e===t&&n===a||sync(g)});return()=>{o(),n&&(C?.(),e?.(),t?.(),C=null,e=null,t=null,a=null,r=null,n=!1)}},useNetflixModeSettings=()=>{const{stores:g}=useNexGui(),A=g.ui(g=>g.netflixMode),I=g.ui(g=>g.setNetflixMode),C=g.ui(g=>g.settings?.[mC]),t=g.ui(g=>g.settings?.[dC]),n=g.ui(g=>g.setSetting),a=(0,e.useCallback)(g=>{n(mC,resolveNetflixEmoteColor(g))},[n]),r=(0,e.useCallback)((A,I)=>{n(dC,{...g.ui.getState().settings?.netflixModeScenarios??{},[A]:Boolean(I)})},[n,g]),o=(0,e.useMemo)(()=>xC.map(({id:g,label:A})=>({id:g,label:A,enabled:resolveNetflixScenarioEnabled(t,g),setEnabled:A=>r(g,A)})),[t,r]);return{enabled:Boolean(A),setEnabled:I,emoteColor:resolveNetflixEmoteColor(C),defaultEmoteColor:pC,setEmoteColor:a,logoUrl:uC,scenarios:o}},vC=[{key:"loginTracker",label:"Login Tracker",tooltip:"Show formatted login/logout notices by diffing the who list against Achaea's public character roster. Uses ally/enemy and target name formatting, and excludes your own character."},{key:"logoutDownload",label:"Auto-Download Log on Logout",tooltip:"Automatically download the scrollback buffer as an HTML log when you disconnect."},{key:"virtualizedLogs",label:"Virtualized HTML Logs",tooltip:"Download logs as an interactive virtualized HTML viewer for long sessions."}],NetflixModeSection=()=>{const{enabled:g,setEnabled:A,emoteColor:I,setEmoteColor:C,logoUrl:e,scenarios:t}=useNetflixModeSettings();return React.createElement(n.Box,{sx:{display:"flex",flexDirection:"column",gap:1}},React.createElement(n.Typography,{gutterBottom:!0,sx:{alignItems:"center",display:"flex",gap:.75},variant:"subtitle2"},React.createElement(n.Box,{alt:"Netflix",component:"img",src:e,sx:{display:"block",height:14,width:"auto"}}),"Mode"),React.createElement(iC,{label:"Enabled",onChange:A,tooltip:"Play an attention chime on enabled catches below. Resets to off each session.",tooltipMode:"title",value:g}),React.createElement(n.Box,{sx:{display:"flex",flexDirection:"column",gap:.25,pl:1}},React.createElement(n.Typography,{color:"text.secondary",sx:{mb:.25},variant:"caption"},"Catches"),t.map(g=>React.createElement(iC,{key:g.id,label:g.label,onChange:g.setEnabled,tooltipMode:"title",value:g.enabled}))),React.createElement(n.Box,{sx:{display:"flex",flexDirection:"column",gap:.5},title:"Color used by the emote attention trigger. Set this to your configured emote line color so the trigger matches emotes in your room."},React.createElement(n.Typography,{variant:"body2"},"Emote Color"),React.createElement(n.Box,{sx:{alignItems:"center",display:"flex",gap:1}},React.createElement(n.Box,{component:"input","aria-label":"Netflix Mode emote color",onChange:g=>C(g.target.value),sx:{background:"transparent",border:"1px solid rgba(255,255,255,0.2)",borderRadius:1,cursor:"pointer",height:28,padding:0,width:40},type:"color",value:I}),React.createElement(n.Typography,{sx:{fontFamily:"monospace"},variant:"caption"},I))))};NetflixModeSection.displayName="NetflixModeSection";var OptionsAdvancedInner=()=>{const{stores:g}=useNexGui(),A=useNativeDisplayCommands(),I=g.ui(g=>g.settings),C=g.ui(g=>g.setSetting),[t,a]=(0,e.useState)(!1),handleToggle=(g,A)=>{C(g,A)},handleNativeDisplay=g=>{handleToggle("nativeDisplay",g),g?A.mount():A.unmount()};return React.createElement(n.Box,{className:"options-advanced",sx:{display:"flex",flexDirection:"column",gap:1.5,p:1.5}},React.createElement(n.Typography,{gutterBottom:!0,variant:"subtitle2"},"Advanced Options"),React.createElement(n.Divider,{sx:{mb:1}}),React.createElement(n.Box,{sx:{columnGap:3,display:"grid",gridTemplateColumns:{xs:"minmax(0, 1fr)",md:"repeat(2, minmax(0, 1fr))"},rowGap:1.5}},React.createElement(n.Box,{sx:{display:"flex",flexDirection:"column",gap:.5,minWidth:0}},vC.map(({key:g,label:A,tooltip:C})=>React.createElement(iC,{key:g,label:A,onChange:A=>handleToggle(g,A),tooltip:C,tooltipMode:"title",value:Boolean(I[g])})),React.createElement(n.Divider,{sx:{my:1}}),React.createElement(n.Typography,{gutterBottom:!0,variant:"subtitle2"},"Experimental"),React.createElement(iC,{label:"Native Display Override",onChange:handleNativeDisplay,tooltip:"Mount the nexGui display in the Nexus output area instead of a panel tab. Applies immediately; the tab panel is hidden on the next reload.",tooltipMode:"title",value:Boolean(I.nativeDisplay)}),React.createElement(n.Divider,{sx:{my:1}}),React.createElement(n.Typography,{gutterBottom:!0,variant:"subtitle2"},"Debug"),React.createElement(iC,{label:"Event Bus Debug Mode",onChange:a,tooltip:"Log all internal events to the browser console. Session-only.",tooltipMode:"title",value:t})),React.createElement(n.Box,{sx:{display:"flex",flexDirection:"column",gap:.5,minWidth:0}},React.createElement(NetflixModeSection,null))))};OptionsAdvancedInner.displayName="OptionsAdvancedInner";var OptionsAdvanced=()=>React.createElement(QA,{panelName:"Options Advanced"},React.createElement(OptionsAdvancedInner,null));OptionsAdvanced.displayName="OptionsAdvanced";var resolveSliderValue$1=g=>Array.isArray(g)?g[0]??0:g,OptionsDisplayInner=()=>{const{tokens:g,updateTokens:A}=useTheme$9(),{settings:I,setSetting:C}=useUi(),t=(0,e.useMemo)(()=>{const A=g.theme.displayFontFamily;return Jg.some(({value:g})=>g===A)?Jg:[{label:A,value:A},...Jg]},[g.theme.displayFontFamily]),handleUiToggle=(g,A)=>{C(g,A)},handleDisplayFontFamily=g=>{A({theme:{displayFontFamily:g.target.value}})},handleDisplayFontSize=(g,I)=>{A({theme:{displayFontSize:resolveSliderValue$1(I)}})};return React.createElement(n.Box,{className:"options-display",sx:{display:"flex",flexDirection:"column",gap:1.5,p:1.5}},React.createElement(n.Typography,{gutterBottom:!0,variant:"subtitle2"},"Main Display / Scrollback Style"),React.createElement(n.Divider,null),React.createElement(n.FormControl,{fullWidth:!0,size:"small"},React.createElement(n.InputLabel,{id:"display-font-family-select-label"},"Font Family"),React.createElement(n.Select,{label:"Font Family",labelId:"display-font-family-select-label",onChange:handleDisplayFontFamily,value:g.theme.displayFontFamily},t.map(g=>React.createElement(n.MenuItem,{key:g.value,value:g.value},g.label)))),React.createElement(n.Box,{sx:{display:"flex",flexDirection:"column",gap:1}},React.createElement(n.Typography,{variant:"caption",color:"text.secondary"},"Display Font Size: ",g.theme.displayFontSize,"px"),React.createElement(n.Slider,{"aria-label":"Display font size",max:20,min:8,onChange:handleDisplayFontSize,step:1,value:g.theme.displayFontSize})),React.createElement(n.Divider,{sx:{mt:.5}}),React.createElement(n.Typography,{gutterBottom:!0,variant:"subtitle2"},"Formatting"),React.createElement(iC,{label:"Ally / Enemy Formatting",onChange:g=>handleUiToggle("allyEnemyFormatting",g),tooltip:"Apply ally and enemy markers to recognised player names in panels and game output.",tooltipMode:"title",value:!1!==I.allyEnemyFormatting}),React.createElement(iC,{label:"Target Formatting",onChange:g=>handleUiToggle("targetFormatting",g),tooltip:"Highlight your current target in game output.",tooltipMode:"title",value:!1!==I.targetFormatting}))};OptionsDisplayInner.displayName="OptionsDisplayInner";var OptionsDisplay=()=>React.createElement(QA,{panelName:"Options Display"},React.createElement(OptionsDisplayInner,null));OptionsDisplay.displayName="OptionsDisplay";var EC=Object.freeze([{key:"showCombatStream",label:"Combat Stream",tooltip:"Route combat messages to a separate stream panel."},{key:"showSystemStream",label:"System Stream",tooltip:"Route system messages to a separate stream panel."},{key:"damageNumbers",label:"Damage Numbers",tooltip:"Show damage number overlays on combat output."},{key:"msgReplace",label:"Message Replace",tooltip:"Apply structured replacement rows for skill actions (nexSkillMatch / nexSkillNpcMatch). Inline name highlighting is controlled separately by the Ally/Enemy Formatting toggle."}]),useGameOptionToggles=()=>{const{stores:g}=useNexGui(),A=g.ui(g=>g.settings),I=g.ui(g=>g.setSetting);return(0,e.useMemo)(()=>EC.map(g=>({key:g.key,label:g.label,tooltip:g.tooltip,value:Boolean(A[g.key]),onChange:A=>I(g.key,A)})),[I,A])},wC=Object.freeze([{key:"echo_input",label:"Echo Input",tooltip:"Mirror your typed commands into the game output stream.",setValue:(g,A)=>{g.setSetting("echo_input",A)}},{key:"echo_gmcp",label:"Display GMCP",tooltip:"Show inbound GMCP payloads in the output stream.",setValue:(g,A)=>{g.setSetting("echo_gmcp",A)}},{key:"single_prompt",label:"Single Prompt",tooltip:"Collapse the duplicate Nexus prompt line into a single prompt.",setValue:(g,A)=>{g.setSetting("show_prompts",!A)}},{key:"show_timestamps",label:"Display Timestamps",tooltip:"Show Nexus timestamps in the main output stream.",setValue:(g,A)=>{g.setSetting("show_timestamps",A)}},{key:"display_tabstrip",label:"Display Tabstrip",tooltip:"Show the FlexLayout tab strip for docked Nexus tabs.",setValue:(g,A)=>{g.updateLayoutAttributes({tabSetEnableTabStrip:A})}}]),useHostSettingsToggles=()=>{const{eventBus:g,hostSettingsModel:A,hostLayoutModel:I}=useNexGui(),C=useHostBridge(),t=(0,e.useSyncExternalStore)(A.subscribe,A.getSnapshot),n=(0,e.useSyncExternalStore)(I.subscribe,I.getSnapshot),a=(0,e.useCallback)(({key:A,setValue:I},e)=>{I(C,e),g.emit(w.HOST_SETTINGS_CHANGED,{key:A,value:e})},[g,C]);return(0,e.useMemo)(()=>wC.map(g=>({key:g.key,label:g.label,tooltip:g.tooltip,value:"display_tabstrip"===g.key?Boolean(n.display_tabstrip):Boolean(t[g.key]),onChange:A=>a(g,A)})),[t,n,a])},OptionsGameInner=()=>{const g=useHostSettingsToggles(),A=useGameOptionToggles();return React.createElement(n.Box,{className:"options-game",sx:{display:"flex",flexDirection:"column",gap:.5,p:1.5}},React.createElement(n.Typography,{gutterBottom:!0,variant:"subtitle2"},"Game Options"),React.createElement(n.Divider,{sx:{mb:1}}),React.createElement(n.Box,{sx:{columnGap:3,display:"grid",gridTemplateColumns:{xs:"minmax(0, 1fr)",md:"repeat(2, minmax(0, 1fr))"},rowGap:1.5}},React.createElement(n.Box,{sx:{display:"flex",flexDirection:"column",gap:.5,minWidth:0}},React.createElement(n.Typography,{gutterBottom:!0,variant:"subtitle2"},"Nexus Config"),g.map(({key:g,label:A,tooltip:I,value:C,onChange:e})=>React.createElement(iC,{key:g,label:A,onChange:e,tooltip:I,tooltipMode:"title",value:C}))),React.createElement(n.Box,{sx:{display:"flex",flexDirection:"column",gap:.5,minWidth:0}},React.createElement(n.Typography,{gutterBottom:!0,variant:"subtitle2"},"nexGui Config"),A.map(({key:g,label:A,tooltip:I,value:C,onChange:e})=>React.createElement(iC,{key:g,label:A,onChange:e,tooltip:I,tooltipMode:"title",value:C})))))};OptionsGameInner.displayName="OptionsGameInner";var OptionsGame=()=>React.createElement(QA,{panelName:"Options Game"},React.createElement(OptionsGameInner,null));OptionsGame.displayName="OptionsGame";var RC="__none__",SC="__custom__",resolveSliderValue=g=>Array.isArray(g)?g[0]??0:g,OptionsStyleInner=()=>{const{tokens:g,updateTokens:A}=useTheme$9(),I=canonicalizeBackgroundImageValue(g.theme.backgroundImage),C=TA.includes(I)?I:I?SC:RC,handleFontSize=(g,I)=>{A({theme:{fontSize:resolveSliderValue(I)}})},handleOpacity=(g,I)=>{A({theme:{backgroundOpacity:resolveSliderValue(I)}})},handleHue=(g,I)=>{A({theme:{hue:resolveSliderValue(I)}})},handleCustomBgImage=g=>{A({theme:{backgroundImage:g.target.value}})},handleBackgroundImageSelect=g=>{const{value:I}=g.target;I!==RC?I!==SC?A({theme:{backgroundImage:I}}):C!==SC&&A({theme:{backgroundImage:""}}):A({theme:{backgroundImage:""}})};return React.createElement(n.Box,{className:"options-style",sx:{display:"flex",flexDirection:"column",gap:1.5,p:1.5}},React.createElement(n.Typography,{gutterBottom:!0,variant:"subtitle2"},"Panel Display Style"),React.createElement(n.Divider,null),React.createElement(n.Box,{sx:{display:"flex",flexDirection:"column",gap:1}},React.createElement(n.Typography,{variant:"caption",color:"text.secondary"},"Panel Font Size: ",g.theme.fontSize,"px"),React.createElement(n.Slider,{"aria-label":"Panel font size",max:20,min:8,onChange:handleFontSize,step:1,value:g.theme.fontSize})),React.createElement(n.Box,{sx:{display:"flex",flexDirection:"column",gap:1}},React.createElement(n.Typography,{variant:"caption",color:"text.secondary"},"Background Opacity: ",Math.round(100*g.theme.backgroundOpacity),"%"),React.createElement(n.Slider,{"aria-label":"Background opacity",max:1,min:0,onChange:handleOpacity,step:.01,value:g.theme.backgroundOpacity})),React.createElement(n.Box,{sx:{display:"flex",flexDirection:"column",gap:1}},React.createElement(n.Typography,{variant:"caption",color:"text.secondary"},"Hue Shift: ",g.theme.hue,"°"),React.createElement(n.Slider,{"aria-label":"Hue shift",max:360,min:0,onChange:handleHue,step:1,value:g.theme.hue})),React.createElement(n.FormControl,{fullWidth:!0,size:"small"},React.createElement(n.InputLabel,{id:"background-image-select-label"},"Background Image"),React.createElement(n.Select,{label:"Background Image",labelId:"background-image-select-label",onChange:handleBackgroundImageSelect,value:C},React.createElement(n.MenuItem,{value:RC},"None"),TA.map(g=>React.createElement(n.MenuItem,{key:g,value:g},g)),React.createElement(n.MenuItem,{value:SC},"Custom URL"))),React.createElement(n.TextField,{InputLabelProps:{shrink:!0},fullWidth:!0,label:"Background Image URL",onChange:handleCustomBgImage,placeholder:"https://...",size:"small",value:g.theme.backgroundImage,variant:"outlined"}))};OptionsStyleInner.displayName="OptionsStyleInner";var OptionsStyle=()=>React.createElement(QA,{panelName:"Options Panels"},React.createElement(OptionsStyleInner,null));OptionsStyle.displayName="OptionsStyle";var MC="options",TC=Object.freeze([{content:React.createElement(OptionsGame,null),id:"game",label:"Game"},{content:React.createElement(OptionsStyle,null),id:"style",label:"Panels"},{content:React.createElement(OptionsDisplay,null),id:"display",label:"Display"},{content:React.createElement(OptionsAdvanced,null),id:"advanced",label:"Advanced"}]),resolveActiveTabId=g=>"string"==typeof g?g:"number"==typeof g?TC[g]?.id??TC[0].id:TC[0].id,OptionsPanelInner=()=>{const g=useTheme$9(),{activeTab:A,setActiveTab:I}=useUi(),C=g.theme?.nexGui?.backgroundImage??"",e=g.theme?.nexGui?.backgroundOpacity??.5,t=g.theme?.nexGui?.backgroundFilter??"none",handleTabChange=g=>{const A=TC.findIndex(A=>A.id===g);A>=0&&I(MC,A)};return React.createElement(nC,{activeTab:resolveActiveTabId(A[MC]),backgroundFilter:t,backgroundImage:C,backgroundOpacity:e,onTabChange:handleTabChange,tabs:TC})};OptionsPanelInner.displayName="OptionsPanelInner";var OptionsPanel=()=>React.createElement(QA,{panelName:"Options"},React.createElement(OptionsPanelInner,null));OptionsPanel.displayName="OptionsPanel";var PartyMemberRowComponent=({name:g,color:A="text.primary",disabled:I=!1,onClick:C=null})=>{const e="function"==typeof C&&!I;return React.createElement(n.Box,{className:"party-member-row",onClick:e?()=>C(g):void 0,role:e?"button":void 0,sx:{alignItems:"center",cursor:e?"pointer":"default",display:"flex",minHeight:24,px:.5},tabIndex:e?0:void 0},React.createElement(n.Typography,{component:"span",sx:{color:A,fontWeight:500,lineHeight:1.35},variant:"body2"},g))};PartyMemberRowComponent.displayName="PartyMemberRow",PartyMemberRowComponent.propTypes={color:UA.default.string,disabled:UA.default.bool,name:UA.default.string.isRequired,onClick:UA.default.func};var NC=(0,e.memo)(PartyMemberRowComponent);NC.displayName="PartyMemberRow",NC.propTypes=PartyMemberRowComponent.propTypes;var selectPartySlice=g=>({members:g.members,leader:g.leader,selfName:g.selfName,settings:g.settings,updateParty:g.updateParty,addMember:g.addMember,removeMember:g.removeMember,setLeader:g.setLeader,setSelf:g.setSelf,setSetting:g.setSetting}),useParty=()=>{const{stores:g}=useNexGui();return g.party(useShallow(selectPartySlice))},noopSubscribe=()=>()=>{},fallbackFalse=()=>!1,fallbackNull=()=>null,fallbackName=()=>"",fallbackColor=()=>"grey",getModelVersion=g=>"function"==typeof g?.getVersion?g.getVersion():0,createDirectoryBinding=(g,A)=>{const subscribe=I=>{const C=g?.subscribePlayerDirectory?.(I)??noopSubscribe(),e=A?.subscribePlayerRelationships?.(I)??noopSubscribe();return()=>{C?.(),e?.()}},getSnapshot=()=>`${getModelVersion(g)}:${getModelVersion(A)}`;return Object.freeze({getSnapshot,subscribe})},usePlayerDirectory=()=>{const{playerDirectory:g,playerRelationships:A}=useNexGui(),I=(0,e.useMemo)(()=>createDirectoryBinding(g,A),[g,A]),C=(0,e.useSyncExternalStore)(I.subscribe,I.getSnapshot,I.getSnapshot);return(0,e.useMemo)(()=>Object.freeze({version:C,getPlayerColor:g?.getPlayerColor?.bind(g)??fallbackColor,getPlayerProfile:g?.getPlayerProfile?.bind(g)??fallbackNull,isAllyPlayer:A?.isAllyPlayer?.bind(A)??fallbackFalse,isCityEnemyPlayer:A?.isCityEnemyPlayer?.bind(A)??fallbackFalse,isEnemyPlayer:A?.isEnemyPlayer?.bind(A)??fallbackFalse,resolvePlayerNameFromFullname:g?.resolvePlayerNameFromFullname?.bind(g)??fallbackName}),[g,A,C])},usePartyViewModel=()=>{const g=usePlayerDirectory(),{members:A,leader:I,selfName:C,settings:t,setLeader:n,addMember:a,removeMember:r,setSetting:o}=useParty();return(0,e.useMemo)(()=>{g.version;const e=A.map(A=>({color:g.getPlayerColor(A),disabled:A===C,name:A})),i=A.map(A=>({color:g.getPlayerColor(A),name:A})),l=M.map(({key:g,label:A,tooltip:I})=>({key:g,label:A,tooltip:I,value:Boolean(t?.[g]),onChange:A=>o(g,A)}));return{addMember:a,leader:I&&A.includes(I)?I:"",leaderColor:I?g.getPlayerColor(I):null,leaderOptions:i,memberRows:e,members:A,removeMember:r,selfName:C,setLeader:n,toggles:l}},[a,I,A,g,r,C,n,o,t])},getFlipTransform$4=g=>{switch(g){case 1:return"scaleX(-1) scaleY(-1)";case 2:return"scaleY(-1)";case 3:return"scaleX(-1)";default:return"none"}},PartyPanelInner=()=>{const g=(0,a.useTheme)(),[A]=(0,e.useState)(()=>Math.floor(4*Math.random())),[I,C]=(0,e.useState)(""),{addMember:t,leader:r,leaderColor:o,leaderOptions:i,memberRows:l,members:s,removeMember:c,setLeader:u,toggles:m}=usePartyViewModel(),d=g?.nexGui?.backgroundImage??"",p=g?.nexGui?.backgroundOpacity??.5,h=g?.nexGui?.backgroundFilter??"none",y=(0,e.useCallback)(g=>{"Enter"===g.key&&I.trim()&&(t(I.trim()),C(""))},[t,I]);return React.createElement(n.Box,{className:"party-panel",sx:{height:"100%",overflow:"hidden",position:"relative",width:"100%"}},d?React.createElement(n.Box,{"aria-hidden":"true",className:"party-panel__background",sx:{backgroundImage:`url(${d})`,backgroundPosition:"center",backgroundSize:"cover",filter:h,inset:0,opacity:p,position:"absolute",transform:getFlipTransform$4(A),zIndex:0}}):null,React.createElement(n.Box,{className:"party-panel__content",sx:{background:`linear-gradient(180deg, ${(0,a.alpha)("#050505",.28)} 0%, ${(0,a.alpha)("#050505",.56)} 100%)`,display:"grid",gridTemplateColumns:"1fr 1fr",gap:2,height:"100%",overflowY:"auto",p:1.25,position:"relative",width:"100%",zIndex:1}},React.createElement(n.Box,{sx:{display:"flex",flexDirection:"column",gap:.5,minWidth:0}},React.createElement(n.TextField,{label:"Add member",onChange:g=>C(g.target.value),onKeyDown:y,size:"small",sx:{mb:.5,width:"15ch"},value:I}),React.createElement(n.Typography,{component:"span",sx:{color:"text.secondary",fontSize:11,fontWeight:700,letterSpacing:.4,pb:.25,textTransform:"uppercase"}},"Party Members"),s.length>0?l.map(g=>React.createElement(NC,{color:g.color,disabled:g.disabled,key:g.name,name:g.name,onClick:c})):React.createElement(n.Typography,{color:"text.secondary",variant:"body2"},"No party members")),React.createElement(n.Box,{sx:{display:"flex",flexDirection:"column",gap:1}},React.createElement(n.FormControl,{fullWidth:!0,size:"small"},React.createElement(n.InputLabel,{id:"nexgui4-party-leader-label"},"Party Leader"),React.createElement(n.Select,{disabled:0===s.length,label:"Party Leader",labelId:"nexgui4-party-leader-label",onChange:g=>u(g.target.value),sx:{color:o??"text.primary",minWidth:"18ch"},value:r},i.map(g=>React.createElement(n.MenuItem,{key:g.name,sx:{color:g.color},value:g.name},g.name)))),React.createElement(n.Divider,{sx:{my:.5}}),React.createElement(n.Typography,{component:"span",sx:{color:"text.secondary",fontSize:11,fontWeight:700,letterSpacing:.4,textTransform:"uppercase"}},"Party Behaviour"),m.map(({key:g,label:A,tooltip:I,value:C,onChange:e})=>React.createElement(iC,{key:g,label:A,onChange:e,tooltip:I,value:C})))))};PartyPanelInner.displayName="PartyPanelInner";var PartyPanel=()=>React.createElement(QA,{panelName:"Party"},React.createElement(PartyPanelInner,null));PartyPanel.displayName="PartyPanel";var GC={color:UA.default.string.isRequired,isAlly:UA.default.bool,isEnemy:UA.default.bool,isTarget:UA.default.bool,name:UA.default.string.isRequired},kC=UA.default.exact(GC),RoomPlayerRowComponent=({onHover:g,onLeave:A,onSelect:I,player:C})=>{const e=C.isEnemy?"#ff0000":"#ffffff",t=C.isAlly||C.isEnemy;return React.createElement(n.Box,{className:"room-player-row",onClick:()=>I(C.name),onMouseEnter:g,onMouseLeave:A,sx:{alignItems:"center",cursor:"pointer",display:"inline-flex",gap:.125,margin:"2px 4px",minHeight:g=>`${Number(g.typography.fontSize)+8}px`,outline:C.isTarget?"1px solid red":"",px:.25,py:.125,position:"relative",zIndex:1}},t?React.createElement(n.Typography,{component:"span",sx:{color:e,fontWeight:700},variant:"body2"},"("):null,React.createElement(n.Typography,{component:"span",sx:{color:C.color,fontWeight:700},variant:"body2"},C.name),t?React.createElement(n.Typography,{component:"span",sx:{color:e,fontWeight:700},variant:"body2"},")"):null)};RoomPlayerRowComponent.displayName="RoomPlayerRow",RoomPlayerRowComponent.propTypes={onHover:UA.default.func.isRequired,onLeave:UA.default.func.isRequired,onSelect:UA.default.func.isRequired,player:kC.isRequired};var DC=(0,e.memo)(RoomPlayerRowComponent);DC.displayName="RoomPlayerRow",DC.propTypes=RoomPlayerRowComponent.propTypes;var jC=new Set(["regex","user","time","loaded"]),formatCellValue=g=>Array.isArray(g)?g.join(", "):null!==g&&"object"==typeof g?JSON.stringify(g):String(g),PC=UA.default.objectOf(UA.default.oneOfType([UA.default.string,UA.default.number,UA.default.bool,UA.default.array,UA.default.object])),PlayerPopoverComponent=({anchorEl:g=null,onClose:A,player:I})=>{const C=(0,e.useMemo)(()=>Object.entries(I??{}).flatMap(([g,A])=>jC.has(g)||null==A?[]:React.createElement("tr",{key:g},React.createElement("td",{style:{color:"cyan",padding:"0 5px 0 2px"}},g),React.createElement("td",{style:{padding:0}},formatCellValue(A)))),[I]);return I?React.createElement(n.Popover,{anchorEl:g,anchorOrigin:{horizontal:"left",vertical:"top"},disableRestoreFocus:!0,onClose:A,open:Boolean(g),sx:{pointerEvents:"none"},slotProps:{paper:{sx:{backgroundColor:"#000000",border:"1px solid #ffffff"}}},transformOrigin:{horizontal:"right",vertical:"bottom"}},React.createElement("table",{style:{background:"black",borderSpacing:"0px",fontSize:"13px",margin:"10px",maxWidth:"100%",padding:"1px",textAlign:"left"}},React.createElement("thead",null,React.createElement("tr",null,React.createElement("th",{style:{width:"auto"}}),React.createElement("th",{style:{width:"auto"}}))),React.createElement("tbody",null,C))):null};PlayerPopoverComponent.displayName="PlayerPopover",PlayerPopoverComponent.propTypes={anchorEl:UA.default.instanceOf(Element),onClose:UA.default.func.isRequired,player:PC},PlayerPopoverComponent.defaultProps={player:null};var BC=(0,e.memo)(PlayerPopoverComponent);BC.displayName="PlayerPopover",BC.propTypes=PlayerPopoverComponent.propTypes;var selectCharacterSlice=g=>({name:g.name,class:g.class,level:g.level,gender:g.gender,balance:g.balance,equilibrium:g.equilibrium,currentAffs:g.currentAffs,limbs:g.limbs,updateCharacter:g.updateCharacter,setClass:g.setClass}),useCharacter=()=>{const{stores:g}=useNexGui();return g.character(useShallow(selectCharacterSlice))},resolvePlayerProfile=(g,A,I)=>mergePlayerPresentationProfile(I.getPlayerProfile(A),buildFallbackPlayerProfile(g,A)),useRoomPlayersViewModel=()=>{const{adapter:g}=useNexGui(),{players:A}=useRoom(),{name:I}=useCharacter(),{isPlayer:C,name:t}=useTarget(),{members:n}=useParty(),a=usePlayerDirectory(),r=(0,e.useMemo)(()=>{a.version;const g=new Set((n??[]).filter(g=>"string"==typeof g&&g.length>0&&g!==I)),e=a.getPlayerProfile(I)?.city??"";return[...A??[]].map(A=>{const I=resolveRoomPlayerName(A,a);if(!I)return null;const n=resolvePlayerProfile(A,I,a),r=!0===n?.loaded,o=a.isEnemyPlayer(I),i=a.isAllyPlayer(I)||g.has(I);let l=5;return r&&(l=o?0:i?1:n.city===e?2:"garden"===n.city?3:4),{color:resolvePlayerPresentationColor({name:I,profile:n,playerDirectory:a}),isAlly:i,isEnemy:o,isTarget:C&&I===t,loaded:r,name:I,profile:n,priority:l}}).filter(Boolean).sort((g,A)=>g.priority!==A.priority?g.priority-A.priority:g.name.localeCompare(A.name))},[n,a,A,I,C,t]),o=(0,e.useCallback)(A=>{g?.send?.(`settarget ${A}`)},[g]);return(0,e.useMemo)(()=>({players:r,selectPlayer:o}),[r,o])},getFlipTransform$3=g=>{switch(g){case 1:return"scaleX(-1) scaleY(-1)";case 2:return"scaleY(-1)";case 3:return"scaleX(-1)";default:return"none"}},PlayersPanelInner=()=>{const g=(0,a.useTheme)(),{players:A,selectPlayer:I}=useRoomPlayersViewModel(),[C]=(0,e.useState)(()=>Math.floor(4*Math.random())),[t,r]=(0,e.useState)(null),[o,i]=(0,e.useState)(""),l=g?.nexGui?.backgroundImage??"",s=g?.nexGui?.backgroundOpacity??.5,c=g?.nexGui?.backgroundFilter??"none",u=o?A.find(g=>g.name===o)?.profile??null:null;(0,e.useEffect)(()=>{t&&(o&&A.some(g=>g.name===o)||(r(null),i("")))},[t,o,A]);const handleClosePopover=()=>{r(null),i("")};return 0===A.length?React.createElement(n.Box,{className:"players-panel players-panel--empty",sx:{alignItems:"center",color:"text.secondary",display:"flex",flex:1,justifyContent:"center",p:2}},React.createElement(n.Typography,{variant:"body2"},"No players in room")):React.createElement(n.Box,{className:"players-panel",sx:{height:"100%",overflow:"hidden",position:"relative",width:"100%"}},l?React.createElement(n.Box,{"aria-hidden":"true",className:"players-panel__background",sx:{backgroundImage:`url(${l})`,backgroundPosition:"center",backgroundSize:"cover",filter:c,inset:0,opacity:s,position:"absolute",transform:getFlipTransform$3(C),zIndex:0}}):null,React.createElement(n.Box,{className:"players-panel__content",sx:{alignContent:"flex-start",background:`linear-gradient(180deg, ${(0,a.alpha)("#050505",.28)} 0%, ${(0,a.alpha)("#050505",.56)} 100%)`,color:"text.primary",display:"flex",flexDirection:"row",flexWrap:"wrap",height:"100%",overflowY:"auto",position:"relative",width:"100%",zIndex:1}},A.map((g,A)=>React.createElement(DC,{key:`${g.name}-${A}`,onHover:A=>{g.loaded?(r(A.currentTarget),i(g.name)):handleClosePopover()},onLeave:handleClosePopover,onSelect:I,player:g}))),React.createElement(BC,{anchorEl:t,onClose:handleClosePopover,player:u?.loaded?u:null}))};PlayersPanelInner.displayName="PlayersPanelInner";var PlayersPanel=()=>React.createElement(QA,{panelName:"Players"},React.createElement(PlayersPanelInner,null));PlayersPanel.displayName="PlayersPanel";var OC="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAI0AAADUCAYAAACh36CaAAAACXBIWXMAAA7EAAAOxAGVKw4bAAA4HGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS41LWMwMjEgNzkuMTU0OTExLCAyMDEzLzEwLzI5LTExOjQ3OjE2ICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE1LTA0LTA2VDExOjM1OjI4LTA3OjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTUtMDQtMDZUMTM6NTY6MzktMDc6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8eG1wOk1ldGFkYXRhRGF0ZT4yMDE1LTA0LTA2VDEzOjU2OjM5LTA3OjAwPC94bXA6TWV0YWRhdGFEYXRlPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICAgICA8cGhvdG9zaG9wOkNvbG9yTW9kZT4zPC9waG90b3Nob3A6Q29sb3JNb2RlPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjkwNzk4Nzk4LTRlOWItMTM0YS04MzBjLTQ2MTJlNWVhZDJjYTwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+eG1wLmRpZDo5MDc5ODc5OC00ZTliLTEzNGEtODMwYy00NjEyZTVlYWQyY2E8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+eG1wLmRpZDo5MDc5ODc5OC00ZTliLTEzNGEtODMwYy00NjEyZTVlYWQyY2E8L3htcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5jcmVhdGVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6OTA3OTg3OTgtNGU5Yi0xMzRhLTgzMGMtNDYxMmU1ZWFkMmNhPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE1LTA0LTA2VDExOjM1OjI4LTA3OjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3htcE1NOkhpc3Rvcnk+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjk2MDAwMC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+OTYwMDAwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjY1NTM1PC9leGlmOkNvbG9yU3BhY2U+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj4xNDE8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+MjEyPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz6NaNPuAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAVqSURBVHja7Nt/TNRlHMDxz07vjjt+DqVAHJJmYaxWkQj+GP7MCbg0c5WuNdOtVVstbKw/ZLMWTnNaKrOmqBCRLuEYiCHoJbaFyB1igIaIDg7CBGbyQzAiP/3RMK1kXP35fX+3977/fJ9/nr32PHf3fE9UVYi8iUkg0BBoCDQEGgINEWgINAQaAg2BhsjIaO6+QkOCJXpqpDwcGS4h44Ls05+MmvP6K8tWfZi6bvXWtLdemB37xNPhoeOtPlaLjA8OlOAg/3vGg8ZgaEwmk/j52iRyYqjMmv548ttrV+7ZszXVVZS1uf1k3s6rZQe3N+/b/n556purdj86JSLZbB4rFosZNEZfacIeCH5k96aU+q7aYtXOStXOMzrYfFJ7Lx3Xm5eOq3ZUql47rR0/FGlG+ru1gf6+k0BjbDRRR7I//lV/b9AbPx7TVrdDPe58bXU7/sr15737Yqnq7Yuan5neIyKRoDEomnfWrizSW/XaVl2gHpfjXix/y+PK15/OFqj21+obry4vAI0x0YSfcmQM6s8V6nHljwjmbjh67bR++/WOWyISBhqDofHztcfXObO1//KJUYEZrv/yCa0p2682H0s8aAyGxm7zWXi2dL8OXHF6icaprpJMtVrM80BjPDQz/guagStOrfpmr1rMY2NAYzA0Ex4c/1itM1tver09OdVdknnbajFPBo2B0AT4+yY8t3hOZWXxnsGbTd6h6W0s0wvlX2pcTPRhi3nsctAYBI3JZIrNSE/p62s6rlfPFXqFpqv+qHbUFeuS+XGH7TZrEmiMsz35rFu1tGao9ZTXaHoay7Thu1x9KCIsVUQmgMY4aKI+3/xep3ad8QpMq9uhHXXF2t90Qte+lJw1bWpkAmiMg8a++vlnK9wlmdrdUDrqH/eGt6daZ7bGx0Sv97P7sNIY7RhhzYuJn3i72ui1Cn152cJPOUYwKJqQcUHzz5/M0d7GslGB6W44pk3fH9KJYSGzQWMwNEsXzZSkBXES+9S0iCPZW3SwpXxUaIY8p7Qkd1u3iASDxmBopkwKl8kRE8RqMY85+NnGy9pVpS1VI3+uaXHlq153afaODQ0iIjabVfx8baAx4ktYK5PnbdHuam2vKbzv6xEel0PbawpVb1TrisSEDSIiY0wmGWMygcaIaETEt9yR0aSD57Wt2vGPb1IeV762VReo/nZBS3K3NYqIlTf3QCM+VktMwb5NQ9pfq531R7X5TJ62uh3aXJWnXfVHVQfqNG/vR3cOKUEDmuHrmQ/Wv9atv7hV+86pXnfduW9MWdMjIrP+bRBojI1GRCQwcUH8oZxdaX05u9K6vti5oXfx3BlfiUjA/QaABjQSFOifmLxoVtaKpLmZSQtnHgjwsy8Z6XnQ8A9LAg2BhkBDoCHQEIGGQEOgIdAQaIhAQ6Ah0BBoCDREoCHQEGgINAQaAg2TQKAh0BBoCDQEGiLQEGgINAQaAg0RaAg0BBoCDYGGCDQEGgINgYZAQ6AhAg2BhkBDoCHQEIGGQEOgIdAQaIhAQ6Ah0BBoCDREoCHQEGgINAQaAg0RaAg0BBoCDYGGCDQEGgINgYZAQwQaAg2BhkBDoCECDYGGQEOgIdAQaIhAQ6Ah0BBoCDREoCHQEGgINAQaItAQaAg0BBoCDRGTQKAh0BBoCDQEGiLQEGgINAQaAg0RaAg0BBoCDYGGCDQEGgINgYZAQ6BhEgg0BBoCDYGGQEMEGgINgYZAQ6AhAg2BhkBDoCHQEIGGQEOgIdAQaAg0RKAh0BBoCDQEGiLQEGgINAQaAg0RaAg0BBoCDYGGCDQEGgINgYZAQ6AhAg2BhkBDoCHQEIGGQEOgIdAQaIhAQ/+zPwYASIhrmburemkAAAAASUVORK5CYII=",LC="data:image/png;base64,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",zC="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAI0AAADUCAYAAACh36CaAAAACXBIWXMAAA7EAAAOxAGVKw4bAAA4HGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS41LWMwMjEgNzkuMTU0OTExLCAyMDEzLzEwLzI5LTExOjQ3OjE2ICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE1LTA0LTA2VDExOjI4OjM0LTA3OjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTUtMDQtMDZUMTM6NTY6MzctMDc6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8eG1wOk1ldGFkYXRhRGF0ZT4yMDE1LTA0LTA2VDEzOjU2OjM3LTA3OjAwPC94bXA6TWV0YWRhdGFEYXRlPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICAgICA8cGhvdG9zaG9wOkNvbG9yTW9kZT4zPC9waG90b3Nob3A6Q29sb3JNb2RlPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjM2YjMxYTk5LTUwNTYtZTY0OC04OTZkLWI5NTYxMzk2MjViMjwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+eG1wLmRpZDozNmIzMWE5OS01MDU2LWU2NDgtODk2ZC1iOTU2MTM5NjI1YjI8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+eG1wLmRpZDozNmIzMWE5OS01MDU2LWU2NDgtODk2ZC1iOTU2MTM5NjI1YjI8L3htcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5jcmVhdGVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6MzZiMzFhOTktNTA1Ni1lNjQ4LTg5NmQtYjk1NjEzOTYyNWIyPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE1LTA0LTA2VDExOjI4OjM0LTA3OjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3htcE1NOkhpc3Rvcnk+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjk2MDAwMC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+OTYwMDAwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjY1NTM1PC9leGlmOkNvbG9yU3BhY2U+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj4xNDE8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+MjEyPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg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",ZC="data:image/png;base64,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vmXxPHQEOiGK5+82m9WCprYgkqqu3uVyDWrX5YqiXMVzzz23Ue5v3LRu3XfQEwpnnA5OJFMoneDFdL8/mLFojCjKZZw4cWLO0sULW++cX7ruqae+hVBrB5LJFETx4oFIs8mA3r4BDEajeb0f87rZ/xfNzc3T1j215vOP3/mniltvvxkdDa2QpPSFp60/MhmNCPcPoqcnfOXvDrlGFOUStm7det+Pn3nUoHc70Xa2FRCEzEP1IxIpCb4iN5Lx4TF/fng0inIJgbbWGU6rGcGzrVf8SpB4PIGyUh+KPAWCLMuXn3iNKMolxIYi1TabBYeOfKEwxqDTnb+b2MjZRVEQRk42CgBjkFXFGI/Hr/bdIVmjKBptbW0V86dPuDktpbHn0yM6k9GAdFqGTqeDfuTb8RgwEoZBb9BDTUuefH6BNEXRsNvtw5KMuMNpQ3nphGgsnoSgE+XheDImKyq6+yJSe2dvymYxw2QwAIzBYjHHbTZbTLtXriiKhtfrDSuW0vWv/PvW9B1LF8pOuw1ed4EcHY6nFEVBSZFXL+p1amNbBwKdIZjtVljM1jF/WGI0inIJf/P00z87fKrtzNw5lW6mqqn3dh4cSiaT1orJpbBajaoegmA1GVHgdkJKSegKR8Z8Cng0inIZQ0NxFukbgN5g0JtNeuv8eTPMwWAIJ+vbBixWk2Iym1B/ugWrH/sRnlj71D9q14/FuP5DaVfS0NBQ9b21j7+Tjg/OuXv5IrQHe5CUJEQGoqieVoZAsAct3cP7X3rppSfnzp17TLt+LCjKFSiKoovH49a6urrZX3zxxcydO3feVVpaGjSZTGmj0Sht3Ljx+9o1+UBROESvKRyiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKBz6X15rejmpXenZAAAAAElFTkSuQmCC",FC="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAI0AAADUCAYAAACh36CaAAAACXBIWXMAAA7EAAAOxAGVKw4bAAA4HGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS41LWMwMjEgNzkuMTU0OTExLCAyMDEzLzEwLzI5LTExOjQ3OjE2ICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE1LTA0LTA2VDExOjM0OjUwLTA3OjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTUtMDQtMDZUMTM6NTY6MzktMDc6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8eG1wOk1ldGFkYXRhRGF0ZT4yMDE1LTA0LTA2VDEzOjU2OjM5LTA3OjAwPC94bXA6TWV0YWRhdGFEYXRlPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICAgICA8cGhvdG9zaG9wOkNvbG9yTW9kZT4zPC9waG90b3Nob3A6Q29sb3JNb2RlPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjE0Y2RkMDRhLWU2OGMtYzM0My1iYjJmLWYxNDE5ZjAxMDRmYTwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+eG1wLmRpZDoxNGNkZDA0YS1lNjhjLWMzNDMtYmIyZi1mMTQxOWYwMTA0ZmE8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+eG1wLmRpZDoxNGNkZDA0YS1lNjhjLWMzNDMtYmIyZi1mMTQxOWYwMTA0ZmE8L3htcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5jcmVhdGVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6MTRjZGQwNGEtZTY4Yy1jMzQzLWJiMmYtZjE0MTlmMDEwNGZhPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE1LTA0LTA2VDExOjM0OjUwLTA3OjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3htcE1NOkhpc3Rvcnk+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjk2MDAwMC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+OTYwMDAwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjY1NTM1PC9leGlmOkNvbG9yU3BhY2U+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj4xNDE8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+MjEyPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg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",KC="data:image/png;base64,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",YC="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAI0AAADUCAYAAACh36CaAAAACXBIWXMAAA7EAAAOxAGVKw4bAAA4HGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS41LWMwMjEgNzkuMTU0OTExLCAyMDEzLzEwLzI5LTExOjQ3OjE2ICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE1LTA0LTA2VDExOjI5OjIyLTA3OjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTUtMDQtMDZUMTM6NTY6MzctMDc6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8eG1wOk1ldGFkYXRhRGF0ZT4yMDE1LTA0LTA2VDEzOjU2OjM3LTA3OjAwPC94bXA6TWV0YWRhdGFEYXRlPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICAgICA8cGhvdG9zaG9wOkNvbG9yTW9kZT4zPC9waG90b3Nob3A6Q29sb3JNb2RlPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjcxZWY1OGIzLTljYTItOTc0Zi05YmNjLTMxMTg4ZGY0NTk4ZDwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+eG1wLmRpZDo3MWVmNThiMy05Y2EyLTk3NGYtOWJjYy0zMTE4OGRmNDU5OGQ8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+eG1wLmRpZDo3MWVmNThiMy05Y2EyLTk3NGYtOWJjYy0zMTE4OGRmNDU5OGQ8L3htcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5jcmVhdGVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6NzFlZjU4YjMtOWNhMi05NzRmLTliY2MtMzExODhkZjQ1OThkPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE1LTA0LTA2VDExOjI5OjIyLTA3OjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3htcE1NOkhpc3Rvcnk+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjk2MDAwMC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+OTYwMDAwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjY1NTM1PC9leGlmOkNvbG9yU3BhY2U+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj4xNDE8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+MjEyPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg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",VC="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGUAAADUCAYAAACF6u0fAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAJZaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49J++7vycgaWQ9J1c1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCc/Pg0KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyI+PHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj48cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0idXVpZDpmYWY1YmRkNS1iYTNkLTExZGEtYWQzMS1kMzNkNzUxODJmMWIiIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj48ZXhpZjpEYXRlVGltZU9yaWdpbmFsPjIwMTUtMDQtMDZUMTM6MDI6MTc8L2V4aWY6RGF0ZVRpbWVPcmlnaW5hbD48L3JkZjpEZXNjcmlwdGlvbj48cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0idXVpZDpmYWY1YmRkNS1iYTNkLTExZGEtYWQzMS1kMzNkNzUxODJmMWIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+PHhtcDpDcmVhdGVEYXRlPjIwMTUtMDQtMDZUMTM6MDI6MTc8L3htcDpDcmVhdGVEYXRlPjwvcmRmOkRlc2NyaXB0aW9uPjwvcmRmOlJERj48L3g6eG1wbWV0YT4NCjw/eHBhY2tldCBlbmQ9J3cnPz5R5wApAAAAIXRFWHRDcmVhdGlvbiBUaW1lADIwMTU6MDQ6MDYgMTM6MDI6MTdRT8CsAAAOzUlEQVR4Xu3da3Bc5X3H8d9zzu7Zszdpd3W/2hKSLPkiHHzBEIdgjI1DWlKGhJR4HGCwmTimk7hN3AG3xaRTAnQGQ2rqCSa4wWXS0qGBBBfjC3XMuMZYxrYMkixZV+uCtLta7a6013PpC4GdPZa9F5v2efH/zOybc57nebHfOdrds2ePmK7rIHwRjBvI/z+KwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiH2Zf8QtaOjo/HA/n33RiNTxcMjY5aNj/x595wFS38JJk4ax5LP6br+pTx6enpq7v/OfQfeee05PTnwB10Pn9K7j72hv7bjyYgSj1Qax9Pj0uNLOVLefvvtb73w3FNv7frHv0Z1RQlOtnYgPBnRxyfCrGHejftuuu3PvmGcQy657q8p27dv37xz+9NvPfPERjgdNpw624nhUT8Ghr3MIkmYv3DZLuMckuq6Hilbtmx5zi0Gf/rNO2+Fw27VHXYbM4kirLIFFosZk1NRCO6G9Y6i2b8yziWXXLcojz766MsrFpZveODh+xAdGdNDkxEWjycgCJcORkFgsOWXHnbVLluRMpmkuC5/vp566qkn51ZaNzyw/n6MdPTANx5kyaSSEoQxhlg8ge6uT29PTPpuT1mApLjmKCdPnlx0+sND2378owfh7eyFoqpgjBmHAQCssgXdvUOY8A7fpiam5hj3k2nXHOXFF1/80ZaNa4FEAtFo7IpBdF1HvtOB4TE/JoJBh66pNuMYMu2aooyPj3smRgf+9JYl8zEyNJry58qIMYZAMIxR7zjsNltcFMWEcQyZduVnMQPDw8PlFSUuF2QLFEU17k5hs8o43zcEk0lEUUnZeWaSLxjHkGnXFEVVVVFRNcDwom6k6zrc7jz0D46g0J0Pye45CiaGjOPItCs/kxlwuVwTegbvqU2iiEgkhmMnP8Hy5bd8BJN83jiGXHJNUSwWS9xsNitg00eD0fS5HKBszmz8cs9voSRVLLr5tteN40iqa4rS09NTG56cMmOGd1yKosLlcqKqfhZe3fkbfHSqHT/b+uNW2Mt/YRxLUl1TlMPv719bV1OJnq5+SGbTxe2arqO6sgTdfcPat9f+FY4cb8WzWzeitH7pIykLkBnlHMXn8xVa9dC6W26aixNnzukOuw26rkMym1BW5EHL6Xb9hZf/I95QW6W9/NwWlNY2P88kZ4txHXK5nM997d69+2GnMvTq3XfcgjNt5/X6mkoGBkSjcRz8oAXBcERds2Kp0Divno30D8NVs/Qeq6vs98Z1yOVyPlIOHHjv7trqcthsMupqKlk8kUQoFNU+Ptupe1x5eOj+NWJFSSHrPz+AZFKBxGJfN65BZpZTlFgsJk8GfIvn3FCNMV8A8XgCjDEk1KTe3HQDVt22GJFIDBOhSQgCQ3GRB4ePHKs0rkNmllOUtra2uVWlebPtRW4kEklg+oMk8h02UZYtzB8IQ9N1MMaQ57DDHwhiZCL538Z1yMxyitLV1VW/4tabgISCL16SGGNQVQ2qqqa8Q853O3Hs5CeQrXb/pa3kanKO4spzAEllpo8oF+m6DlitONl6DpWVlYPG/WRmOUWJxWJyIqkAVwkCAKIoAtEYzvcNKoWFhT7jfjKznKJ0dHQ0Tk5FgauchAQAqyzhsxEvwlHWXldXR+e7MnT1Z3UGw8PD5Xv37v1mIBgChKsfKvl5DpzrGUBhaXmrcR+5sqyj/Oebb94Xi8XkYGgKYFeerus6BJsV7V19WLly5SHjfnJlV35Wr2BoaGDBV5csQCQWnz4FfAWMMUAQcOTDVmXVqlUHjPvJlWUdJTw+evP999wBp9MOJBXjbgCAqmqorCpD68lPMOCNHKd3XtnJKsrp06cX1lW6my2SJemQrQlN04xDoGk6nA4bIJnxt8/uwoYNG+iKyCxlFeWVV15Z/40Vy9BwQ3Vi4bw6fXwi9RtdXddhNonwzK7Az/5hJ4qrG1958MEHf50yiKSVcRS/31/gG+r6TkNtFeY1zLJXVxZbYp+f8wIATdNgkcwoW9iE3S//O3p96r/s2rVrg3Edkl7GUQ4cOLDqtqXzi5ndClVRAR1M0fSIpiKhqCoKClworqnEq9t34439H+/bvXv3w8Y1SGYyjnLs2LFblyxsQiIYhqppEAQB0WgiGUnEtdmVpQiFJvGtb/8F/u75PUOv/+vra43zSeYyjuL3eStceQ7E49PX0DEGKErSKptN8qfn+qJbn/lV8Hf7j2LPnj3rPB7PuHE+yVzGUSaCIfvkVASiKEIUBEiSGZJkMnsDQS2hI1ZW7Mpft27dnhUrVtAp+muUcZSurq6agaEx2ApcsNqtelf3BdhlmVWWFgpNNeXuj892Ko899tgO4zySvYyiHDp0aKUkKA1FBS7oCSX5z6+9c2H/0Zbku4ePw2I2Y8wXgLts9t6lS5d+ZJxLspc2yujoaMmOf3rh73/++A9QUVE2+fTzu5XWtg7P1q0/NFeUFuL9//kYFaVFsMtmu3EuyU3aKK2trc133Dxn/p989254x7zWI8fPiFt+8IBtasSLWxfPh8vlTMbiCQhqbF4wGMw3zifZSxtlamrKLui6ExY3/nD8jFhRXqh8ZdE8+CdCYIxBtljEeCKJuurisoGBgWrjfJK9tFGcTmd4YGhsEojjzKfn9a8tni+zeEJgn5/nUhVFGBwZw9KFTThx4sQS43ySvbRRGhoaOq0Od1eivx+aprFFzY2CPzB9lGiaBtkiYWTUj+qKEvh83nLjfJK9tFEmJycdE6EJR3tXH6yyRa+uKEHs8w+QsXgCJYUexBMJSJIZQxf6mo3zSfbSRunv75817hurZozhphsb47JFuvizB03TYTaLqKupRFGBCw5Z8iSTSbNxDZKdtFG8Xm+RTZYtHo9LramsCGnapW8bGZsOU+DOh1Tkgc2kNo2NjRWnLECyljZKb29vTXlJISqrSsX5DbPcgeDlv4pLJhVAUeHze8tHR0dLjPtJdtJGGRoaqigudAGCAJNZMP/xkfIFQWBAPI7+wc8gy3LMuJ9kJ22UQCDgVjUd0DQoSuqNCzRdh8kkoqTIg+HBUYj2ggNz585tS1mAZC1tFADQcfnRAQAWafq8VyQax5v/dRjf+966ncYxJHtpo8iyHBMFAcYuuq5DtkgwmU3qG787hLM9gXfuvffe36aOIrlIG6WkpGRUUdTLrhv+4gY4laVF4r+9/b7+/YfXP5s6guQqbRS32x3w+icuuxrSbpPR1TsIfyCIujmNLUuWLDmRMoDkLG2UgoIC/+Bn3hmPFOjA+EQYqsYCFoslnjqC5CptFI/HM943MAJlKgKTKF7cnkgoKC8tAACEwpGr35iFZCVtlAULFpwNRdTOnv5hOBzWi9uTioJ8Z57myXeioLCALpS4jtJGaWxs7PjK4iVHTpzugMOVd3G7pmlgTBfKSwvhtFku1SLXLG0UAFi9evX+46faAEG4eDJSEARMBMNo7+qHriXolP11lFGUlStXHmrt7AtHAkFYpOmTwA6bFYPDPuXNfUdQXpxfEolE6E5310lGUTwez7gjv+SD1o4euPKdAABFVTG7ukwLBSMTe/d/kO/z+QqN80huMooCAGvWrHn3bHs3JE8+NE3HVCSK/Dy79MIzfymVuB2egwcP3mmcQ3KTcZS77rrrvd/vP4rImB+yRYIgCAiGwmCiYFu/9h60tLQsNs4huck4Sn19fdf4lHqqs2cQDvv0my1BEDDYcwFfX74IFXnqxpdeemmTcR7JXsZRAGDhjc09xYVuxBOXbpSqaTp8Y35s/ZuNiIy27di2bdu2lEkka1lFGZ8I617/BCySdHGbIDBEojGM9Q7ipz9Zj+VN7ieXf3VZZ1tb29yUySRjWUUJBAKOWDwOUUydJggC4vEEBjv7cOear+HQb56p3/zDh0709PTUpgwkGckqSjgcLHXYbTPeg5gxBjCgt70bFo8LT/5kvW3fvn1rjONIehlHiUQithuqSiwNtVUITU4ZdwN/FObCuR64nXacOXOarpjMQcZREomEBDCz2SRC16a/IBYYg2j4VxyiIOCDD8+qVtkCEcmqlEVIRjKOIklSIhAcd6uqBsYYBMagqKoejU9/jWIyidA0aKJo0t45eJQxgaGxyn3H0NBQhXEtcnVZRbHKtqgOQJLMsNtk+MfDypgvoJrNJvjHQ1ElqSpJVdUbG2bF8hx2xJLqpM1mixjXIleXcRSTyaQ4HI6oyW5F/+Bn6OodhGgW9LLSImiqhslIPOZyO5jLaRNX374s9vQvfp20Fzc84Xa7A8a1yNVlHAUAfOPh0dhUFG6PCw6bDCWpaE6HVSsrL4aiJq1vvXcsrCbV+ILGWs/Z3rH2TZs20W8gc5BVlIceefT572/ahq7ufkiSBKvNpp5s7Q719g2ieUGD7HbZJdFiEgPjE4hGk/T/UXKU9c2iW1paFm/evHl7fUXe8vLSIvRdGIEoCjCbTJg3pwbvvv8hLHZ3y4s7dn63tra2xzifpJd1lC888fjjzyaVpCkSiVi93rGS1avXvNvU1NTe3NzcarfbpwRBuPwWRyQjOUchX56sXlPI/w2KwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwiGKwqH/BQ7zVIHJod2dAAAAAElFTkSuQmCC",WC="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAI0AAADUCAYAAACh36CaAAAACXBIWXMAAA7EAAAOxAGVKw4bAAA4HGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS41LWMwMjEgNzkuMTU0OTExLCAyMDEzLzEwLzI5LTExOjQ3OjE2ICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE1LTA0LTA2VDExOjMwOjIwLTA3OjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTUtMDQtMDZUMTM6NTY6NDAtMDc6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8eG1wOk1ldGFkYXRhRGF0ZT4yMDE1LTA0LTA2VDEzOjU2OjQwLTA3OjAwPC94bXA6TWV0YWRhdGFEYXRlPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICAgICA8cGhvdG9zaG9wOkNvbG9yTW9kZT4zPC9waG90b3Nob3A6Q29sb3JNb2RlPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjk1NjQ4ZGJmLTljNTUtZTY0Zi1iNDAxLWNlOTdkZGIxYzQ5NjwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+eG1wLmRpZDo5NTY0OGRiZi05YzU1LWU2NGYtYjQwMS1jZTk3ZGRiMWM0OTY8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+eG1wLmRpZDo5NTY0OGRiZi05YzU1LWU2NGYtYjQwMS1jZTk3ZGRiMWM0OTY8L3htcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5jcmVhdGVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6OTU2NDhkYmYtOWM1NS1lNjRmLWI0MDEtY2U5N2RkYjFjNDk2PC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE1LTA0LTA2VDExOjMwOjIwLTA3OjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3htcE1NOkhpc3Rvcnk+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjk2MDAwMC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+OTYwMDAwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjY1NTM1PC9leGlmOkNvbG9yU3BhY2U+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj4xNDE8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+MjEyPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg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",UC="data:image/png;base64,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",HC="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAI0AAADUCAYAAACh36CaAAAACXBIWXMAAA7EAAAOxAGVKw4bAAA4HGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS41LWMwMjEgNzkuMTU0OTExLCAyMDEzLzEwLzI5LTExOjQ3OjE2ICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE1LTA0LTA2VDExOjM1OjU2LTA3OjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTUtMDQtMDZUMTM6NTY6MzgtMDc6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8eG1wOk1ldGFkYXRhRGF0ZT4yMDE1LTA0LTA2VDEzOjU2OjM4LTA3OjAwPC94bXA6TWV0YWRhdGFEYXRlPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICAgICA8cGhvdG9zaG9wOkNvbG9yTW9kZT4zPC9waG90b3Nob3A6Q29sb3JNb2RlPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjFiYTIzODgyLWRmMjYtMGQ0OS04YzU4LTMzMzU4ZWMwZDE2YzwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+eG1wLmRpZDoxYmEyMzg4Mi1kZjI2LTBkNDktOGM1OC0zMzM1OGVjMGQxNmM8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+eG1wLmRpZDoxYmEyMzg4Mi1kZjI2LTBkNDktOGM1OC0zMzM1OGVjMGQxNmM8L3htcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5jcmVhdGVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6MWJhMjM4ODItZGYyNi0wZDQ5LThjNTgtMzMzNThlYzBkMTZjPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE1LTA0LTA2VDExOjM1OjU2LTA3OjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3htcE1NOkhpc3Rvcnk+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjk2MDAwMC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+OTYwMDAwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjY1NTM1PC9leGlmOkNvbG9yU3BhY2U+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj4xNDE8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+MjEyPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg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",QC="data:image/png;base64,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",XC=Object.freeze([{key:"head",label:"H:"},{key:"torso",label:"T:"},{key:"leftarm",label:"LA:"},{key:"rightarm",label:"RA:"},{key:"leftleg",label:"LL:"},{key:"rightleg",label:"RL:"}]),normalizeValue=g=>{const A=Number(g);return Number.isFinite(A)?`${Math.round(A)}`:"0"},JC=UA.default.shape({head:UA.default.oneOfType([UA.default.number,UA.default.string]).isRequired,torso:UA.default.oneOfType([UA.default.number,UA.default.string]).isRequired,leftarm:UA.default.oneOfType([UA.default.number,UA.default.string]).isRequired,rightarm:UA.default.oneOfType([UA.default.number,UA.default.string]).isRequired,leftleg:UA.default.oneOfType([UA.default.number,UA.default.string]).isRequired,rightleg:UA.default.oneOfType([UA.default.number,UA.default.string]).isRequired}),LimbColumnComponent=({values:g})=>React.createElement(n.Box,{"aria-hidden":"true",className:"nexus-man__limb-column",sx:{color:"text.primary",display:"flex",flexDirection:"column",fontSize:13,lineHeight:1.5,minWidth:"8ch",width:"8ch"}},XC.map(({key:A,label:I})=>React.createElement(n.Box,{className:`nexus-man__limb-row nexus-man__limb-row--${A}`,key:A,sx:{display:"flex",justifyContent:"space-between",width:"8ch"}},React.createElement(n.Typography,{component:"span",sx:{color:"text.primary",fontFamily:"inherit",fontSize:"inherit",width:"3ch"}},I),React.createElement(n.Typography,{component:"span",sx:{color:"text.primary",fontFamily:"inherit",fontSize:"inherit",textAlign:"left",width:"5ch"}},normalizeValue(g[A])))));LimbColumnComponent.displayName="LimbColumn",LimbColumnComponent.propTypes={values:JC.isRequired};var qC=(0,e.memo)(LimbColumnComponent);qC.displayName="LimbColumn",qC.propTypes=LimbColumnComponent.propTypes;var _C=Object.freeze({male:Object.freeze({head:LC,torso:QC,leftarm:ZC,rightarm:VC,leftleg:KC,rightleg:UC}),female:Object.freeze({head:OC,torso:HC,leftarm:zC,rightarm:YC,leftleg:FC,rightleg:WC})}),$C=Object.freeze([{key:"leftleg",label:"left leg"},{key:"rightleg",label:"right leg"},{key:"torso",label:"torso"},{key:"head",label:"head"},{key:"leftarm",label:"left arm"},{key:"rightarm",label:"right arm"}]),ge=UA.default.shape({percent:UA.default.oneOfType([UA.default.number,UA.default.string]),value:UA.default.oneOfType([UA.default.number,UA.default.string]),damagePercent:UA.default.oneOfType([UA.default.number,UA.default.string])}),normalizeGender=g=>"string"==typeof g&&"female"===g.trim().toLowerCase()?"female":"male",normalizeAfflictions=g=>Array.isArray(g)?g.map(g=>"string"==typeof g?g.trim().toLowerCase():`${g??""}`.trim().toLowerCase()).filter(g=>g.length>0):[],toNumericValue=g=>{const A=Number(g);return Number.isFinite(A)?A:0},getLimbEntry=(g,A)=>{const I=[A];"leftarm"===A?I.push("leftArm"):"rightarm"===A?I.push("rightArm"):"leftleg"===A?I.push("leftLeg"):"rightleg"===A&&I.push("rightLeg");for(const C of I)if(g?.[C])return g[C];return{}},buildLimbValues=g=>({head:toNumericValue(getLimbEntry(g,"head").percent??getLimbEntry(g,"head").value),torso:toNumericValue(getLimbEntry(g,"torso").percent??getLimbEntry(g,"torso").value),leftarm:toNumericValue(getLimbEntry(g,"leftarm").percent??getLimbEntry(g,"leftarm").value),rightarm:toNumericValue(getLimbEntry(g,"rightarm").percent??getLimbEntry(g,"rightarm").value),leftleg:toNumericValue(getLimbEntry(g,"leftleg").percent??getLimbEntry(g,"leftleg").value),rightleg:toNumericValue(getLimbEntry(g,"rightleg").percent??getLimbEntry(g,"rightleg").value)}),getLimbState=(g,A)=>{if("torso"===A){if(g.includes("mildtrauma"))return"mild-trauma";if(g.includes("serioustrauma"))return"serious-trauma"}return g.includes(`broken${A}`)?"broken":g.includes(`damaged${A}`)?"damaged":g.includes(`mangled${A}`)?"mangled":"healthy"},getFilterReference=(g,A)=>"broken"===g?`url(#${A.yellow})`:"damaged"===g||"mild-trauma"===g?`url(#${A.orange})`:"mangled"===g||"serious-trauma"===g?`url(#${A.red})`:"",NexusManComponent=({currentAffs:g=[],gender:A="male",limbs:I={}})=>{const C=(0,e.useId)().replace(/[:]/g,""),t={yellow:`${C}-yellowShift`,orange:`${C}-orangeShift`,red:`${C}-redShift`},a=normalizeGender(A),r=_C[a],o=normalizeAfflictions(g),i=buildLimbValues(I);return React.createElement(n.Box,{"aria-label":"NexusMan body status display",className:"nexus-man","data-gender":a,role:"img",sx:{alignItems:"center",display:"flex",flexDirection:"row",gap:1,justifyContent:"center",width:"100%"}},React.createElement("svg",{"aria-hidden":"true",height:"0",width:"0"},React.createElement("defs",null,React.createElement("filter",{id:t.yellow},React.createElement("feColorMatrix",{type:"matrix",values:"1 0 0 0 0\r\n 0 1 0 0 0\r\n 0 0 0 0 0\r\n 0 0 0 1 0"})),React.createElement("filter",{id:t.orange},React.createElement("feColorMatrix",{type:"matrix",values:"1 1 0 0 0\r\n 0 0.45 0 0 0\r\n 0 0 0 0 0\r\n 0 0 0 1 0"})),React.createElement("filter",{id:t.red},React.createElement("feColorMatrix",{type:"matrix",values:"1 0 0 0 0\r\n 0 0 0 0 0\r\n 0 0 0 0 0\r\n 0 0 0 1 0"})))),React.createElement(n.Box,{className:"nexus-man__figure",sx:{flex:"1 1 auto",height:"100%",maxWidth:"202px",minHeight:"120px",overflow:"hidden",position:"relative",width:"100%"}},$C.map(({key:g,label:A})=>{const I=getLimbState(o,g),C=getFilterReference(I,t);return React.createElement(n.Box,{alt:"","aria-hidden":"true",className:`nexus-man__layer nexus-man__layer--${g}`,component:"img","data-damage-state":I,"data-limb":g,key:g,src:r[g],sx:{filter:C,height:"100%",left:0,objectFit:"contain",position:"absolute",top:0,width:"100%"},title:A})})),React.createElement(qC,{values:i}))};NexusManComponent.displayName="NexusMan",NexusManComponent.propTypes={currentAffs:UA.default.arrayOf(UA.default.string),gender:UA.default.oneOf(["male","female"]),limbs:UA.default.objectOf(ge)};var Ae=(0,e.memo)(NexusManComponent);Ae.displayName="NexusMan",Ae.propTypes=NexusManComponent.propTypes;var Ie=Object.freeze(["hp","mp","ep","wp","nl"]),clamp$1=(g,A,I)=>Math.min(I,Math.max(A,g)),normalizeNumber$2=g=>{const A=Number(g);return Number.isFinite(A)?A:0},formatNumber=g=>normalizeNumber$2(g).toLocaleString(),getBaseColor=(g,A)=>g?.palette?.[A]?.main??g?.nexGui?.tokens?.game?.[A]??GA.game[A],getPercentage=(g,A)=>{const I=normalizeNumber$2(g),C=normalizeNumber$2(A);return C<=0?0:clamp$1(I/C*100,0,100)},getHpColor=g=>g<=25?"#d9534f":g<=50?"#d9832e":g<=75?"#b7b33d":"#2fa35a",getGaugeColor=(g,A,I)=>"hp"===A?getHpColor(I):getBaseColor(g,A),StatBarComponent=({type:g,current:A,max:I,label:C=g.toUpperCase()})=>{const e=(0,a.useTheme)(),t=normalizeNumber$2(A),r=normalizeNumber$2(I),o=getPercentage(t,r),i=getGaugeColor(e,g,o),l=`${Math.round(o)}%`;return React.createElement(n.Box,{className:`stat-bar stat-bar--${g}`,sx:{minWidth:0,width:"100%"}},React.createElement(n.Box,{"aria-label":C,"aria-valuemax":100,"aria-valuemin":0,"aria-valuenow":Math.round(o),className:`stat-bar__progress stat-bar__progress--${g}`,role:"progressbar",sx:{backgroundColor:(0,a.alpha)(i,.14),border:`1px solid ${(0,a.alpha)(i,.48)}`,borderRadius:1,minHeight:22,overflow:"hidden",position:"relative",width:"100%"}},React.createElement(n.Box,{"aria-hidden":"true",sx:{backgroundColor:i,bottom:0,left:0,opacity:.68,position:"absolute",top:0,transition:"width 180ms ease",width:`${o}%`}}),React.createElement(n.Box,{sx:{alignItems:"center",color:"text.primary",display:"flex",gap:1,justifyContent:"space-between",minHeight:22,px:.75,position:"relative",zIndex:1}},React.createElement(n.Typography,{component:"span",sx:{color:"text.primary",fontSize:11,fontWeight:700,letterSpacing:.5,textTransform:"uppercase"}},C),React.createElement(n.Typography,{component:"span",sx:{color:"text.primary",fontSize:11,fontVariantNumeric:"tabular-nums",textShadow:"0 0 3px rgba(0, 0, 0, 0.85)"}},formatNumber(t)," / ",formatNumber(r)," (",l,")"))))};StatBarComponent.displayName="StatBar",StatBarComponent.propTypes={current:UA.default.number.isRequired,label:UA.default.string,max:UA.default.number.isRequired,type:UA.default.oneOf(Ie).isRequired};var Ce=(0,e.memo)(StatBarComponent);Ce.displayName="StatBar",Ce.propTypes=StatBarComponent.propTypes;var selectStatsSlice=g=>({hp:g.hp,mp:g.mp,ep:g.ep,wp:g.wp,nl:g.nl,gold:g.gold,bank:g.bank,xp:g.xp,xpToNext:g.xpToNext,updateStats:g.updateStats}),useStats=()=>{const{stores:g}=useNexGui();return g.stats(useShallow(selectStatsSlice))},ee=Object.freeze([{type:"hp",label:"HP"},{type:"mp",label:"MP"},{type:"ep",label:"EP"},{type:"wp",label:"WP"},{type:"nl",label:"NL"}]),getFlipTransform$2=g=>{switch(g){case 1:return"scaleX(-1) scaleY(-1)";case 2:return"scaleY(-1)";case 3:return"scaleX(-1)";default:return"none"}},Indicator=({className:g,label:A,ready:I})=>React.createElement(n.Box,{className:g,sx:{alignItems:"center",backgroundColor:I?"rgba(18, 42, 26, 0.82)":"rgba(24, 24, 24, 0.82)",border:"1px solid",borderColor:I?"rgba(102, 221, 144, 0.7)":"rgba(192, 176, 144, 0.22)",borderRadius:999,color:I?"#66dd90":"text.disabled",display:"inline-flex",gap:.5,px:1,py:.25}},React.createElement(n.Box,{"aria-hidden":"true",sx:{backgroundColor:I?"#66dd90":"rgba(192, 176, 144, 0.35)",borderRadius:"50%",boxShadow:I?"0 0 8px rgba(102, 221, 144, 0.5)":"none",flexShrink:0,height:6,width:6}}),React.createElement(n.Typography,{component:"span",sx:{color:"inherit",fontSize:11,fontWeight:700,letterSpacing:.5,textTransform:"uppercase"}},A)),StatsPanelInner=()=>{const g=(0,a.useTheme)(),[A]=(0,e.useState)(()=>Math.floor(4*Math.random())),{hp:I,mp:C,ep:t,wp:r,nl:o}=useStats(),{balance:i,currentAffs:l,equilibrium:s,gender:c,limbs:u}=useCharacter(),m=g?.nexGui?.backgroundImage??"",d=g?.nexGui?.backgroundOpacity??.5,p=g?.nexGui?.backgroundFilter??"none";return React.createElement(n.Box,{className:"stats-panel",sx:{height:"100%",overflow:"hidden",position:"relative",width:"100%"}},m?React.createElement(n.Box,{"aria-hidden":"true",className:"stats-panel__background",sx:{backgroundImage:`url(${m})`,backgroundPosition:"center",backgroundSize:"cover",filter:p,inset:0,opacity:d,position:"absolute",transform:getFlipTransform$2(A),zIndex:0}}):null,React.createElement(n.Box,{className:"stats-panel__content",sx:{background:`linear-gradient(180deg, ${(0,a.alpha)("#050505",.3)} 0%, ${(0,a.alpha)("#050505",.55)} 100%)`,display:"flex",flexDirection:"column",gap:1,height:"100%",p:1,position:"relative",width:"100%",zIndex:1}},React.createElement(n.Box,{className:"stats-panel__body",sx:{alignItems:"center",display:"flex",justifyContent:"center",minHeight:120}},React.createElement(Ae,{currentAffs:l,gender:c??"male",limbs:u})),React.createElement(n.Box,{className:"stats-panel__indicators",sx:{display:"flex",gap:1,justifyContent:"center"}},React.createElement(Indicator,{className:"stats-panel__balance stats-panel__balance--"+(i?"ready":"waiting"),label:"Balance",ready:i}),React.createElement(Indicator,{className:"stats-panel__equilibrium stats-panel__equilibrium--"+(s?"ready":"waiting"),label:"Equilibrium",ready:s})),React.createElement(n.Box,{className:"stats-panel__bars",sx:{display:"flex",flex:"1 1 auto",flexDirection:"column",gap:.75,justifyContent:"flex-end"}},ee.map(({type:g,label:A})=>{const e={hp:I,mp:C,ep:t,wp:r,nl:o}[g]??{current:0,max:0};return React.createElement(Ce,{current:e.current??0,key:g,label:A,max:e.max??0,type:g})}))))};Indicator.displayName="StatsPanelIndicator",Indicator.propTypes={className:UA.default.string.isRequired,label:UA.default.string.isRequired,ready:UA.default.bool.isRequired},StatsPanelInner.displayName="StatsPanelInner";var StatsPanel=()=>React.createElement(QA,{panelName:"Stats"},React.createElement(StatsPanelInner,null));StatsPanel.displayName="StatsPanel";var SystemStreamInner=()=>{const{adapter:g,stores:A}=useNexGui(),{items:I,version:C}=useTranscript(A.systemStream),t=(0,e.useCallback)(A=>g.send(A),[g]);return React.createElement(nI,{className:"nexgui4-system-stream",itemKeyVersion:C,items:I,onSendCommand:t})};SystemStreamInner.displayName="SystemStreamInner";var SystemStream=()=>React.createElement(QA,{panelName:"System Stream"},React.createElement(SystemStreamInner,null));SystemStream.displayName="SystemStream";var getFlipTransform$1=g=>{switch(g){case 1:return"scaleX(-1) scaleY(-1)";case 2:return"scaleY(-1)";case 3:return"scaleX(-1)";default:return"none"}},TargetPanelInner=()=>{const g=(0,a.useTheme)(),[A]=(0,e.useState)(()=>Math.floor(4*Math.random())),I=g?.nexGui?.backgroundImage??"",C=g?.nexGui?.backgroundOpacity??.5,t=g?.nexGui?.backgroundFilter??"none";return React.createElement(n.Box,{className:"target-panel",sx:{height:"100%",overflow:"hidden",position:"relative",width:"100%"}},I?React.createElement(n.Box,{"aria-hidden":"true",className:"target-panel__background",sx:{backgroundImage:`url(${I})`,backgroundPosition:"center",backgroundSize:"cover",filter:t,inset:0,opacity:C,position:"absolute",transform:getFlipTransform$1(A),zIndex:0}}):null,React.createElement(n.Box,{className:"target-panel__content",sx:{background:`linear-gradient(180deg, ${(0,a.alpha)("#050505",.18)} 0%, ${(0,a.alpha)("#050505",.36)} 100%)`,display:"flex",flexDirection:"column",height:"100%",minHeight:0,position:"relative",width:"100%",zIndex:1}},React.createElement(n.Box,{className:"target-panel__body",sx:{alignItems:"center",display:"flex",flex:1,justifyContent:"center",minHeight:0,p:1}},React.createElement(Ae,{currentAffs:[],gender:"male",limbs:{}}))))};TargetPanelInner.displayName="TargetPanelInner";var TargetPanel=()=>React.createElement(QA,{panelName:"Target"},React.createElement(TargetPanelInner,null));TargetPanel.displayName="TargetPanel";var clamp=(g,A,I)=>Math.min(I,Math.max(A,g)),normalizeNumber$1=g=>{const A=Number(g);return Number.isFinite(A)?A:0},normalizeDirection=(g,A)=>"countup"===g||!1===A?"countup":"countdown",getElapsedMs=(g,A)=>Math.max(0,normalizeNumber$1(A)-normalizeNumber$1(g)),getElapsedPercentage=(g,A)=>{const I=Math.max(0,Math.abs(normalizeNumber$1(A)));return I<=0?100:clamp(g/I*100,0,100)},formatTimerValue=g=>{const A=Math.max(0,normalizeNumber$1(g))/1e3;return A<10?`${A.toFixed(1)}s`:A<=60?`${A.toFixed(0)}s`:`${Math.floor(A/60)}m ${(A%60).toFixed(0)}s`},hslToHex=(g,A=100,I=50)=>{const C=I/100,k=A=>(A+g/30)%12,e=A/100*Math.min(C,1-C),f=g=>C-e*Math.max(-1,Math.min(k(g)-3,Math.min(9-k(g),1)));return"#"+[f(0),f(8),f(4)].map(g=>Math.round(255*g).toString(16).padStart(2,"0")).join("")},getGradientColor=g=>hslToHex(1.2*clamp(normalizeNumber$1(g),0,100),100,g<75?50:Math.abs(g-100)/2+25),getProgressValue=(g,A,I)=>{const C=getElapsedPercentage(g,A);return"countup"===I?C:clamp(100-C,0,100)},TimerBarComponent=({id:g,label:A,durationMs:I,startedAt:C,elapsedMs:e=0,now:t,tickIntervalMs:r,running:o=!0,direction:i="countdown",countDown:l})=>{const s=(0,a.useTheme)(),c=Math.max(0,Math.abs(normalizeNumber$1(I))),u=normalizeDirection(i,l),m=clamp(!1!==o&&null!=C?getElapsedMs(C,t):normalizeNumber$1(e),0,c),d=getProgressValue(m,c,u),p=formatTimerValue(c-m),h=A?.trim()||g,y=getGradientColor(d),b=Math.max(22,normalizeNumber$1(s?.typography?.fontSize)+10),x=`${h} (${p})`,v=Math.max(0,normalizeNumber$1(r)),E=0===d||100===d?"none":`transform ${v}ms linear, background-color ${v}ms linear`;return React.createElement(n.Box,{className:`timer-bar timer-bar--${u}`,"data-timer-id":g,sx:{border:"1.5px solid #aaa",borderRadius:"6px",fontSize:s.typography.fontSize,margin:"3px 0",overflow:"hidden",position:"relative",width:"100%"}},React.createElement(n.LinearProgress,{"aria-label":h,"aria-valuetext":x,className:`timer-bar__progress timer-bar__progress--${u}`,sx:{backgroundColor:"transparent",height:b,"& .MuiLinearProgress-bar":{backgroundColor:y,borderRadius:"4px",transition:E}},value:d,variant:"determinate"}),React.createElement(n.Box,{sx:{alignItems:"center",color:"#FFF5D6",display:"flex",inset:0,px:1.25,pointerEvents:"none",position:"absolute"}},React.createElement(n.Typography,{component:"span",sx:{color:"inherit",fontSize:"inherit",minWidth:0,overflow:"hidden",textOverflow:"ellipsis",textShadow:"-1px -1px 1px #000, 1px -1px 1px #000, -1px 1px 1px #000, 1px 1px 1px #000",whiteSpace:"nowrap"},variant:"body2"},x)))};TimerBarComponent.displayName="TimerBar",TimerBarComponent.propTypes={countDown:UA.default.bool,direction:UA.default.oneOf(["countup","countdown"]),durationMs:UA.default.number.isRequired,elapsedMs:UA.default.number,id:UA.default.string.isRequired,label:UA.default.string.isRequired,now:UA.default.number.isRequired,running:UA.default.bool,startedAt:UA.default.number,tickIntervalMs:UA.default.number.isRequired};var te=(0,e.memo)(TimerBarComponent);te.displayName="TimerBar",te.propTypes=TimerBarComponent.propTypes;var ne=[],normalizeNumber=g=>{const A=Number(g);return Number.isFinite(A)?A:0},isRunningTimer=g=>!1!==g?.running&&null!=g?.startedAt,getRemainingMs=(g,A)=>{const I=Math.max(0,Math.abs(normalizeNumber(g.durationMs))),C=Math.max(0,normalizeNumber(A)-normalizeNumber(g.startedAt));return Math.max(0,I-C)},getClockState=(g,A)=>{let I=1/0,C=!1;for(const e of g??[])isRunningTimer(e)&&(C=!0,I=Math.min(I,getRemainingMs(e,A)));return{isTicking:C,tickIntervalMs:C&&I<1e4?100:500}},useTimerClock=(g=ne)=>{const[A,I]=(0,e.useState)(()=>Date.now()),{isTicking:C,tickIntervalMs:t}=(0,e.useMemo)(()=>getClockState(g,A),[A,g]);return(0,e.useEffect)(()=>{if(!C)return;const tick=()=>I(Date.now());tick();const g=setInterval(tick,t);return()=>clearInterval(g)},[C,t]),(0,e.useMemo)(()=>({now:A,tickIntervalMs:t,isTicking:C}),[C,A,t])},selectTimerView=({id:g,durationMs:A,startedAt:I,label:C,direction:e,position:t,stayVisible:n,enabled:a,running:r,elapsedMs:o,remainingMs:i})=>({id:g,durationMs:A,startedAt:I,label:C,direction:e,position:t,stayVisible:n,enabled:a,running:r,elapsedMs:o,remainingMs:i}),selectTimersSlice=g=>({timerEntries:g.timers,addTimer:g.addTimer,removeTimer:g.removeTimer,clearAll:g.clearAll}),useTimers=()=>{const{stores:g}=useNexGui(),{timerEntries:A,addTimer:I,removeTimer:C,clearAll:t}=g.timers(useShallow(selectTimersSlice)),n=(0,e.useMemo)(()=>A.map(selectTimerView),[A]);return(0,e.useMemo)(()=>({timers:n,addTimer:I,removeTimer:C,clearAll:t}),[I,t,C,n])},getFlipTransform=g=>{switch(g){case 1:return"scaleX(-1) scaleY(-1)";case 2:return"scaleY(-1)";case 3:return"scaleX(-1)";default:return"none"}},normalizePosition=g=>"bottom"===g?"bottom":"top",partitionTimers=g=>g.reduce((g,A)=>(g[normalizePosition(A.position)].push(A),g),{top:[],bottom:[]}),TimersPanelInner=()=>{const g=(0,a.useTheme)(),{timers:A}=useTimers(),[I]=(0,e.useState)(()=>Math.floor(4*Math.random())),C=g?.nexGui?.backgroundImage??"",t=g?.nexGui?.backgroundOpacity??.5,r=g?.nexGui?.backgroundFilter??"none",{now:o,tickIntervalMs:i}=useTimerClock(A),{top:l,bottom:s}=(0,e.useMemo)(()=>partitionTimers(A),[A]);return React.createElement(n.Box,{className:"timers-panel",sx:{color:"text.primary",fontFamily:g.typography.fontFamily,fontSize:g.typography.fontSize,height:"100%",overflow:"hidden",position:"relative",width:"100%"}},C?React.createElement(n.Box,{"aria-hidden":"true",className:"timers-panel__background",sx:{backgroundImage:`url(${C})`,backgroundPosition:"center",backgroundSize:"cover",filter:r,inset:0,opacity:t,position:"absolute",transform:getFlipTransform(I),zIndex:0}}):null,React.createElement(n.Box,{className:"timers-panel__content","data-testid":"timers-panel",sx:{display:"flex",flexDirection:"column",height:"100%",justifyContent:"space-between",overflowY:"auto",p:1,position:"relative",width:"100%",zIndex:1}},React.createElement(n.Box,{className:"timers-panel__stack timers-panel__stack--top","data-testid":"timers-panel-top",sx:{display:"flex",flexDirection:"column"}},l.map(g=>React.createElement(te,{key:g.id,countDown:g.countDown,direction:g.direction,durationMs:g.durationMs,elapsedMs:g.elapsedMs,id:g.id,label:g.label,now:o,running:g.running,startedAt:g.startedAt,tickIntervalMs:i}))),React.createElement(n.Box,{className:"timers-panel__stack timers-panel__stack--bottom","data-testid":"timers-panel-bottom",sx:{display:"flex",flexDirection:"column"}},s.map(g=>React.createElement(te,{key:g.id,countDown:g.countDown,direction:g.direction,durationMs:g.durationMs,elapsedMs:g.elapsedMs,id:g.id,label:g.label,now:o,running:g.running,startedAt:g.startedAt,tickIntervalMs:i})))))};TimersPanelInner.displayName="TimersPanelInner";var TimersPanel=()=>React.createElement(QA,{panelName:"Timers"},React.createElement(TimersPanelInner,null));TimersPanel.displayName="TimersPanel";var ae=Object.freeze(["nexTimers","nexParty","nexPlayers","nexNpcs","nexItems","nexStats","nexSystem","nexCombat","nexDefences","nexFeed","nexTarget","nexOptions","nexMetrics"]),getTabComponents=()=>({nexTimers:TimersPanel,nexParty:PartyPanel,nexPlayers:PlayersPanel,nexNpcs:NpcsPanel,nexItems:ItemsPanel,nexStats:StatsPanel,nexSystem:SystemStream,nexCombat:CombatStream,nexDefences:DefencesPanel,nexFeed:GameFeed,nexTarget:TargetPanel,nexOptions:OptionsPanel,nexMetrics:MetricsPanel}),getLayout$1=()=>nexusclient.ui().layout(),getStoredLayout=g=>nexusclient._ui?._layout??g,createTabNode=g=>({type:"tab",id:g,name:g,component:g,icon:"feather-pointed",helpText:g}),resolveContextValue=g=>{const A=g??globalThis.nexGui?.__contextValue;if(!A)throw new Error("[nexGui4] initializeTabs requires a NexGuiContext value from the active runtime.");return A},selectThemeTokens=g=>g.tokens,NexusTabRoot=({Component:g,contextValue:A})=>{const I=A.stores.theme(selectThemeTokens),C=e.useMemo(()=>createMuiTheme(I),[I]);return e.createElement(KA.Provider,{value:A},e.createElement(a.StyledEngineProvider,{injectFirst:!0},e.createElement(a.ThemeProvider,{theme:C},e.createElement(n.Box,{className:"nexgui4-panel-root",sx:{display:"flex",flex:1,height:"100%",minHeight:0,minWidth:0,width:"100%"}},e.createElement(g)))))},registerTabFactory=(g,A,I,C)=>{g.nexoverrides[A]=g=>e.createElement(NexusTabRoot,{Component:I,contextValue:C})},generateTabs=({skipIds:g=[]}={})=>{const A=getLayout$1().flexModel,I=A.getNodeById("map");if(!I)return console.warn("[nexGui4] generateTabs(): map node not found in layout model."),[...ae];const C=I.getParent?.()?.getId?.()||"root";return ae.forEach(I=>{g.includes(I)||A.getNodeById(I)||A.doAction({type:"FlexLayout_AddNode",data:{json:createTabNode(I),toNode:C,location:"center"}})}),[...ae]},mountNativeDisplay=({contextValue:g}={})=>{const A=resolveContextValue(g),I=getLayout$1();void 0===I.nexoverrides&&(I.nexoverrides={}),I.nexoverrides.output_main=g=>e.createElement(NexusTabRoot,{Component:MainDisplay,contextValue:A});try{nexusclient.buffer().limit=100}catch{}},unmountNativeDisplay=()=>{const g=getLayout$1();delete g?.nexoverrides?.output_main;try{nexusclient.buffer().limit=0}catch{}},initializeTabs=({contextValue:g}={})=>{const A=resolveContextValue(g),I=getLayout$1(),C=getStoredLayout(I),e=I.flexModel;return void 0===I.get_tab_object_original&&(I.get_tab_object_original=I.get_tab_object),void 0===C.get_tab_object_original&&(C.get_tab_object_original=I.get_tab_object_original),void 0===I.nexoverrides&&(I.nexoverrides={}),Object.entries(getTabComponents()).forEach(([g,C])=>{registerTabFactory(I,g,C,A)}),I.get_tab_object=function(g,A){return this.nexoverrides[g]?this.nexoverrides[g](A):nexusclient._ui._layout.get_tab_object_original(g,A)},e.doAction({data:{tabNode:"map"},type:"FlexLayout_SelectTab"}),I.nexoverrides},re="nexGuiLayout",getLayout=()=>nexusclient.ui().layout(),setModelPreservingGlobal=({layout:g,borders:A})=>{const I=getLayout(),C=I.flexModel.toJson();I.set_model({global:C.global,borders:A,layout:g})},applyLayoutPreset=g=>{const A=getLayoutPreset(g);return!!A&&(setModelPreservingGlobal(A),!0)},saveCurrentLayout=()=>{const g=getLayout().model();return nexusclient.variables().vars[re]={layout:JSON.stringify(g.layout),borders:JSON.stringify(g.borders)},!0},readSavedLayout=()=>{const g=nexusclient.variables?.()?.vars?.[re];if(!g?.layout||!g?.borders)return null;try{return{layout:JSON.parse(g.layout),borders:JSON.parse(g.borders)}}catch{return null}},hasSavedLayout=()=>null!==readSavedLayout(),restoreSavedLayout=()=>{const g=readSavedLayout();return!!g&&(setModelPreservingGlobal(g),!0)},getRawText=g=>g?"function"==typeof g.parsed_line?.text?g.parsed_line.text():"string"==typeof g.line?g.line:"":"",getFormattedHtml=g=>g?"function"==typeof g.parsed_line?.formatted?g.parsed_line.formatted():getRawText(g):"",patchFormatted=(g,A)=>{g?.parsed_line&&"object"==typeof g.parsed_line&&(g.parsed_line.formatted=()=>A)},createIconRenderer=()=>{const g=createMessageReplacementContext();return A=>buildIconHtml(A.id,A.colors,A.size,g.icons.dualTone)},lineContains=(g,A)=>!!getRawText(g).includes(A)||!("string"!=typeof g?.line||!g.line.includes(A)),findBlockIndex=(g,A)=>g.findIndex(g=>lineContains(g,A)),applyRoomReplacements=g=>{if(!Array.isArray(g)||0===g.length)return;const A=findBlockIndex(g,"<RName");if(A<0)return;const I=g[A],C=g[A+1];if(!C)return;const e=getFormattedHtml(C),t=replaceRoomText(e,{iconRenderer:createIconRenderer()});if(t!==e&&patchFormatted(C,t),(getRawText(I)||getFormattedHtml(I)).includes("Flying above"))return;const n=globalThis.nexMap;if(!n?.status?.loaded)return;const a=findBlockIndex(g,"<RExits");if(a<0)return;const r=globalThis.GMCP?.Room?.Info?.num;if(!r)return;const o="function"==typeof n.warpTarget?n.warpTarget(r):null;if(!o)return;const i=createWormholeExitDescriptor({warp:o,currentArea:n.status?.currentArea});if(!i)return;const l=g[a];let s=getFormattedHtml(l);s=s.replace(" and",""),s=s.replace(".",renderWormholeExitHtml(i)),patchFormatted(l,s)},registerEvents=g=>{const A=[];return((g,I,C={})=>{const e=`nexGui4-${g.replace(/\W+/g,"-")}`;eventStream.registerEvent(g,I,{...C,id:e,tags:["nexGui4"]}),A.push({eventName:g,id:e})})("Room.Info",g=>{nexAction.triggers.enable("nexGui4.roomReplacements")}),()=>{A.forEach(({eventName:g,id:A})=>{eventStream.removeListener?.(g,A)})}},safeCall$2=(g,A,...I)=>"function"==typeof g?g.call(A,...I):void 0,getHostLineText=g=>g&&"object"==typeof g?g.parsed_line?safeCall$2(g.parsed_line.text,g.parsed_line)??"":"string"==typeof g.line?g.line:g.html_line&&"string"==typeof g.html_text?stripHtml(g.html_text):"":"",isLikelyPartyName=g=>/^[A-Za-z][A-Za-z'-]*$/.test(g),normalizePartyMembersLine=g=>g.replace(/\.$/,"").split(", ").map(g=>g.trim()).filter(Boolean),extractRealmPartyMembers=(g,A)=>g.map(g=>A?.resolvePlayerNameFromFullname?.(g)).filter(isLikelyPartyName),resolvePlayerRelationships=g=>g?.playerRelationships??getDefaultPlayerRelationshipsModel(),registerTriggers=g=>{const A=resolvePlayerRelationships(g);return nexAction.triggers.add({id:"nexGui4.party.chatGag",regex:/^\(Party\): \w+ says, ".+"$/,tags:["nexGui4"],action:()=>{(g?.stores?.party?.getState?.()??null)?.settings?.gagChat&&(nexusclient.current_line.gag=!0)}}),nexAction.triggers.add({id:"nexGui4.party.memberJoined",regex:/^\(Party\): (\w+) has joined your party\.$/,tags:["nexGui4"],action:A=>{(g?.stores?.party?.getState?.()??null)?.addMember?.(A[1])}}),nexAction.triggers.add({id:"nexGui4.party.memberLeft",regex:/^\(Party\): (\w+) has left your party\.$/,tags:["nexGui4"],action:A=>{(g?.stores?.party?.getState?.()??null)?.removeMember?.(A[1])}}),nexAction.triggers.add({id:"nexGui4.party.listHeader",regex:"Your party has the following members:",tags:["nexGui4"],action:()=>{const A=g?.stores?.party?.getState?.()??null,I=nexusclient.current_block??[],C=I.indexOf(nexusclient.current_line);if(C<0)return;const e=I[C+2],t=getHostLineText(e);A?.updateParty?.(normalizePartyMembersLine(t))}}),nexAction.triggers.add({id:"nexGui4.party.realmsHeader",regex:"The following members of your party are in the realms:",tags:["nexGui4"],action:()=>{const A=g?.stores?.party?.getState?.()??null,I=nexusclient.current_block??[],C=I.indexOf(nexusclient.current_line);if(C<0)return;const e=I.slice(C+1).map(getHostLineText);A?.updateParty?.(extractRealmPartyMembers(e,g?.playerDirectory))}}),nexAction.triggers.add({id:"nexGui4.party.noParty",regex:"You are not the member of any party",tags:["nexGui4"],action:()=>{(g?.stores?.party?.getState?.()??null)?.updateParty?.([])}}),nexAction.triggers.add({id:"nexGui4.party.leftParty",regex:"You have left your party",tags:["nexGui4"],action:()=>{(g?.stores?.party?.getState?.()??null)?.updateParty?.([])}}),nexAction.triggers.add({id:"nexGui4.party.joinedParty",regex:/^You have joined \w+'s party\.$/,tags:["nexGui4"],action:()=>{g?.adapter?.send?.("party members")}}),nexAction.triggers.add({id:"nexGui4.rel.cityEnemiesHeader",regex:/^Enemies of .+ of \w+:$/,tags:["nexGui4"],action:()=>{const g=nexusclient.current_block??[],I=g.indexOf(nexusclient.current_line);if(I<0)return;const C=g[I+1],e=getHostLineText(C).replaceAll(" ","").split(",").map(g=>g.trim()).filter(isLikelyPartyName);A.replaceCityEnemyPlayers(e)}}),nexAction.triggers.add({id:"nexGui4.rel.enemiesHeader",regex:"You have the following enemies:",tags:["nexGui4"],action:()=>{const g=nexusclient.current_block??[],I=g.indexOf(nexusclient.current_line);if(I<0)return;const C=g.slice(I).map(getHostLineText),e=[];for(let A=1;A<C.length-1;A+=1){const g=C[A];g&&!g.includes(" ")&&e.push(g)}A.replaceEnemyPlayers(e.filter(isLikelyPartyName))}}),nexAction.triggers.add({id:"nexGui4.rel.noEnemies",regex:"You have no enemies.",tags:["nexGui4"],action:()=>{A.replaceEnemyPlayers([])}}),nexAction.triggers.add({id:"nexGui4.rel.noEnemiesForgive",regex:"In a moment of forgiveness, you declare that you have no enemies.",tags:["nexGui4"],action:()=>{A.replaceEnemyPlayers([])}}),nexAction.triggers.add({id:"nexGui4.rel.enemyRemoved",regex:/^You declare that (\w+) will no longer be one of your enemies\.$/,tags:["nexGui4"],action:g=>{A.forgetEnemyPlayer(g[1])}}),nexAction.triggers.add({id:"nexGui4.rel.enemyAdded",regex:/^(\w+) is now one of your enemies\.$/,tags:["nexGui4"],action:g=>{A.rememberEnemyPlayer(g[1])}}),nexAction.triggers.add({id:"nexGui4.rel.alliesHeader",regex:"You have the following allies:",tags:["nexGui4"],action:()=>{const g=nexusclient.current_block??[],I=g.indexOf(nexusclient.current_line);if(I<0)return;const C=g.slice(I).map(getHostLineText),e=[];for(let A=1;A<C.length-1;A+=1){const g=C[A];if(!g)continue;if(g.includes("You have"))break;let I;I=g.includes("lust")?g.split(" ")[7]?.trim():g.split(" ")[0]?.trim(),isLikelyPartyName(I)&&e.push(I)}A.replaceAllyPlayers(e)}}),nexAction.triggers.add({id:"nexGui4.rel.allyRemoved",regex:/^You declare that (\w+) will no longer be one of your allies\.$/,tags:["nexGui4"],action:g=>{A.forgetAllyPlayer(g[1])}}),nexAction.triggers.add({id:"nexGui4.rel.allyAdded",regex:/^(\w+) is now one of your allies\.$/,tags:["nexGui4"],action:g=>{A.rememberAllyPlayer(g[1])}}),nexAction.triggers.add({id:"nexGui4.roomReplacements",regex:/^/,tags:["nexGui4"],action:()=>{applyRoomReplacements(nexusclient.current_block??[]),nexAction.triggers.disable("nexGui4.roomReplacements")},enabled:!1}),()=>{nexAction.triggers.remove(["nexGui4"])}},oe="scrollback",ie="__nexGuiInlineHighlightingContext",le="__nexGuiInitialHostBufferSynced",se=null,ce=null,getRuntime=()=>globalThis.nexGui??null,getContextValue=g=>g??getRuntime()?.__contextValue??null,getUiStoreState=g=>g?.stores?.ui?.getState?.()??null,getStreamModel=g=>g?.streamModel??g?.stores?.stream??null,getScrollbackSession=g=>g?.scrollbackSession??null,getUiSettings=g=>g?.persistenceStore?.getAll?.()?.ui??{},formatTimestamp=(g=!1,A=Date.now())=>{const I=new Date(A),C=String(I.getHours()).padStart(2,"0"),e=String(I.getMinutes()).padStart(2,"0"),t=String(I.getSeconds()).padStart(2,"0");return g?`${C}:${e}:${t}.${String(I.getMilliseconds()).padStart(3,"0")}`:`${C}:${e}:${t}`},safeCall$1=(g,A,...I)=>"function"==typeof g?g.call(A,...I):void 0,readRuntimeInlineHighlightingContext=g=>g?.[ie]??g?.__contextValue??null,writeRuntimeInlineHighlightingContext=(g,A)=>{if(!g||"object"!=typeof g)return;const I=readRuntimeInlineHighlightingContext(g);Object.is(I,A)||(I&&I!==A&&clearRelationshipNameFormatterCache(I),Object.prototype.hasOwnProperty.call(g,ie)?g[ie]=A:Object.defineProperty(g,ie,{value:A,writable:!0,enumerable:!1,configurable:!0}))},ensureRuntimeColors=g=>{const A=getRuntime();if(!A)return{inLineHighlighting:A=>applyContextInlineNameHighlighting(A,{contextValue:g})};if(writeRuntimeInlineHighlightingContext(A,g),A.colors&&"function"==typeof A.colors.inLineHighlighting)return A.colors;const I=Object.freeze({inLineHighlighting:g=>applyContextInlineNameHighlighting(g,{contextValue:readRuntimeInlineHighlightingContext(A)})});return Object.defineProperty(A,"colors",{value:I,enumerable:!1,configurable:!0}),I},toArray=g=>Array.isArray(g)?g:[],createExtraBreakLine=()=>({html:"<span> </span>",timestamp:Date.now(),isPrompt:!1,isMonospace:!1,shouldLog:!1,gagged:!1,buffer:"main"}),getCurrentPromptHtml=g=>{const A=getStreamModel(g)?.getSnapshot?.()?.promptLine;return"string"==typeof A?.html?A.html:null},convertHostLine=(g,A="main",I=null)=>{if(!g||"object"!=typeof g)return null;if(g.html_line&&"string"==typeof g.html_text&&g.html_text.length>0)return g.gag&&!g.log?null:{html:g.html_text,timestamp:g.timestamp_ms,isPrompt:!1,isMonospace:!1,shouldLog:Boolean(g.log),gagged:Boolean(g.gag),buffer:A};if(!g.parsed_line)return null;const C=safeCall$1(g.parsed_line.text,g.parsed_line)??"";return!C.length||g.gag&&!g.log?null:(I?.inLineHighlighting(g.parsed_line),{html:safeCall$1(g.parsed_line.formatted,g.parsed_line)??C,timestamp:g.timestamp_ms,isPrompt:Boolean(g.is_prompt),isMonospace:Boolean(g.monospace),shouldLog:Boolean(g.log),gagged:Boolean(g.gag),buffer:A})},convertHostLines=(g,A,I=null,C=null)=>{const e=toArray(g);if(0===e.length)return[];const t=e.map(g=>convertHostLine(g,"main",I)).filter(Boolean);if(0===t.length)return[];if(!t.some(g=>!g.isPrompt)){const g=t[t.length-1];return g&&g.html!==C?t:[]}return A&&t.some(g=>!g.isPrompt&&!g.gagged)?[createExtraBreakLine(),...t]:t},appendConvertedLines=(g,A)=>{Array.isArray(A)&&0!==A.length&&getStreamModel(g)?.addLines?.(A)},hasInitialHostBufferSync=g=>Boolean(g?.[le]),markInitialHostBufferSynced=g=>{g&&"object"==typeof g&&(Object.prototype.hasOwnProperty.call(g,le)?g[le]=!0:Object.defineProperty(g,le,{value:!0,writable:!0,enumerable:!1,configurable:!0}))},syncInitialHostBuffer=(g,A,I=null)=>{if(hasInitialHostBufferSync(g))return;markInitialHostBufferSynced(g);const C=toArray(A?.lines);0!==C.length&&appendConvertedLines(g,convertHostLines(C,Boolean(nexusclient.settings?.().extra_break),I,getCurrentPromptHtml(g)))},getNextStreamSessionId=g=>{const A=getStreamModel(g),I=A?.getStats?.(),C=Number(I?.nextId??I?.sessionTotalLines);if(Number.isFinite(C))return Math.max(0,Math.floor(C));const e=(A?.getSnapshot?.()?.buffer??[]).at(-1)?.id;return Number.isFinite(e)?Math.max(0,Math.floor(e+1)):0},downloadScrollbackSessionSlice=async(g,A)=>{if("undefined"==typeof document||"undefined"==typeof Blob||"undefined"==typeof URL||"function"!=typeof URL.createObjectURL)return;const I=getScrollbackSession(g);if(!I?.readRange)return;const C=getUiSettings(g),e=Boolean(C.virtualizedLogs);let t=[];try{t=await I.readRange(Math.max(0,Math.floor(Number(A)||0)),Number.MAX_SAFE_INTEGER)}catch(n){return void console.error("[nexGui4] Failed reading scrollback log export",n)}0!==t.length&&downloadBuffer(t,e)},undoFooterLayout=()=>{if("undefined"==typeof document)return;const g=document.getElementById("status_vars");g&&["status-target","status-bank","status-gold","status-level","status-ping"].forEach(A=>{const I=document.getElementById(A);I&&g.prepend(I)})},isScrollbackRendererEnabled=()=>!1!==globalThis.nexusclient?.variables?.()?.vars?.nexGuiSettings?.options?.nexGuiRenderer,isScrollbackOpen=g=>getUiStoreState(g)?.modalOpen===oe,openScrollback=g=>getUiStoreState(g)?.openModal?.(oe),closeScrollback=g=>getUiStoreState(g)?.closeModal?.(),saveOriginalMethod=(g,A,I,{nullish:C=!1}={})=>{const e=`${I}_original`,t=Object.prototype.hasOwnProperty.call(A,e);return C?A[e]??=A[I]:void 0===A[e]&&(A[e]=A[I]),g.push(()=>{void 0!==A[e]&&(A[I]=A[e]),t||delete A[e]}),A[e]},removePatches=()=>{se?.(),se=null,ce=null},applyPatches=({contextValue:g}={})=>{const A=ce;if(removePatches(),"undefined"==typeof nexusclient)throw new Error("[nexGui4] applyPatches requires the live nexusclient host.");const I=getContextValue(g);if(!I)throw new Error("[nexGui4] applyPatches requires a live NexGui context value.");A&&A!==I&&clearRelationshipNameFormatterCache(A),ce=I;const C=ensureRuntimeColors(I),e=[],t={logStartSessionId:null},n=nexusclient.ui().layout(),a=nexusclient._ui?._layout??n,r=nexusclient.datahandler(),o=nexusclient.platform(),i=nexusclient.serverapi(),l=nexusclient.log(),s=nexusclient.buffer();syncInitialHostBuffer(I,s,C);const c=Object.prototype.hasOwnProperty.call(r,"handle_GMCP_original"),u=Object.prototype.hasOwnProperty.call(n,"get_tab_object_original"),m=Object.prototype.hasOwnProperty.call(a,"get_tab_object_original"),d=Object.prototype.hasOwnProperty.call(n,"nexoverrides"),p=new Map(ae.filter(g=>Object.prototype.hasOwnProperty.call(n.nexoverrides??{},g)).map(g=>[g,n.nexoverrides[g]]));initializeTabs({contextValue:I}),e.push(()=>{const g=getRuntime();g&&"object"==typeof g&&delete g[ie],void 0!==n.get_tab_object_original&&(n.get_tab_object=n.get_tab_object_original),ae.forEach(g=>{n.nexoverrides&&(p.has(g)?n.nexoverrides[g]=p.get(g):delete n.nexoverrides[g])}),!d&&n.nexoverrides&&0===Object.keys(n.nexoverrides).length&&delete n.nexoverrides,u||delete n.get_tab_object_original,m||delete a.get_tab_object_original});const h=saveOriginalMethod(e,nexusclient,"process_lines");nexusclient.process_lines=function(g){const A=safeCall$1(h,this,g);return this.gagged||appendConvertedLines(I,convertHostLines(g,Boolean(nexusclient.settings?.().extra_break),C,getCurrentPromptHtml(I))),A};const y=saveOriginalMethod(e,nexusclient,"_add_line");nexusclient._add_line=function(g,A){const C=!this.current_block,e=safeCall$1(y,this,g,A);if(!C)return e;appendConvertedLines(I,[convertHostLine(g,A??"main")].filter(Boolean))},"undefined"==typeof nexSys&&(saveOriginalMethod(e,s,"add_block"),s.add_block=function(g){let A=0,I=0;for(let e=0;e<g.length;++e){const C=g[e];C.log&&I++,C.gag||!C.parsed_line&&!C.html_line||(!C.is_prompt||A?(!C.parsed_line||safeCall$1(C.parsed_line.text,C.parsed_line)||0!==A&&e!==g.length-1)&&(safeCall$1(this._fill_tab_completion,this,C),A++,this.lineid++,C.id=this.lineid,this.lines.push(C),this.unread=!0):C.gag=!0)}const C=safeCall$1(this.prune_lines,this);(A||I||C)&&safeCall$1(this.on_lines_changed,this)});const b=saveOriginalMethod(e,l,"enable");l.enable=function(){const g=safeCall$1(b,this),A=getNextStreamSessionId(I);return t.logStartSessionId=Math.max(0,A-100),g};const x=saveOriginalMethod(e,l,"disable");l.disable=function(){const g=safeCall$1(x,this),A=getUiSettings(I);if(null!=t.logStartSessionId||A.logoutDownload){const g=t.logStartSessionId??0;t.logStartSessionId=null,downloadScrollbackSessionSlice(I,g)}return g};const v=saveOriginalMethod(e,i,"on_disconnect");i.on_disconnect=function(){this.__anonymous=!1,this.__game=null,this.__name=null,undoFooterLayout();const g=getUiSettings(I);if(null!=t.logStartSessionId||g.logoutDownload){const g=t.logStartSessionId??0;t.logStartSessionId=null,downloadScrollbackSessionSlice(I,g)}return safeCall$1(v,this)},saveOriginalMethod(e,o,"on_key_down",{nullish:!0}),o.on_key_down=function(g,A,C,e){return C&&e&&76===g||33===g&&isScrollbackRendererEnabled()&&!isScrollbackOpen(I)?(openScrollback(I),!0):(27===g&&closeScrollback(I),safeCall$1(this.on_key_down_original,this,g,A,C,e))},void 0===r.handle_GMCP_original&&(r.handle_GMCP_original=r.handle_GMCP),e.push(()=>{void 0!==r.handle_GMCP_original&&(r.handle_GMCP=r.handle_GMCP_original,c||delete r.handle_GMCP_original)}),r.handle_GMCP=function(g,A){if("Comm.Channel.Text"===g){const g="string"==typeof A?(()=>{try{return JSON.parse(A)}catch{return null}})():A;if("says"===g?.channel&&"string"==typeof g.talker&&g.talker.indexOf(" ")>-1&&-1===g.talker.indexOf("Discord"))return;if(g?.talker===globalThis.GMCP?.Char?.Status?.name&&"string"==typeof g.text&&g.text.includes("Duanathar."))return}return safeCall$1(this.handle_GMCP_original,this,g,A)};const E=saveOriginalMethod(e,n,"write_channel");n.write_channel=function(g,A){if(!A||"function"!=typeof this.channel_id_from_cmd||"function"!=typeof this.channel_record)return safeCall$1(E,this,g,A);ensureRuntimeColors(I).inLineHighlighting(A);const C=Date.now(),e=[{parsed_line:A,timestamp_ms:formatTimestamp(!0,C),timestamp:formatTimestamp(!1,C)}],t=this.channel_id_from_cmd(g),n=this.channel_record(t);if(n)try{n.buffer.add_block(e)}catch{}try{this._nexus.comm_buffer().add_block(e)}catch{}};const w=registerTriggers(I),R=registerEvents(I);return e.push(w),e.push(R),se=()=>{for(;e.length>0;)e.pop()?.();ce=null,se=null},removePatches},installGlobalNexGui=g=>(globalThis.nexGui?.destroy?.(),globalThis.nexGui=g,g),ue="nexgui4-styles",me=new Map,getStyleElement=()=>{if("undefined"==typeof document||"function"!=typeof document.getElementById||!document.head)return null;const g=document.getElementById(ue);if(g)return g;const A=document.createElement("style");return A.id=ue,document.head.appendChild(A),A},registerNexguiStyles=(g,A)=>{if(!g||"string"!=typeof A)return;const I=getStyleElement();I&&(me.set(g,A.trim()),I.textContent=Array.from(me.values()).filter(Boolean).join("\n\n"))},de="replacement-base",pe=GA.replacement,toDamageSlug=g=>g.toLowerCase().replace(/\s+/g,"-"),buildCatalogRules=()=>[".ng-skill-default { color: orange; }",Object.entries(Mg).map(([g,A])=>`.ng-skill-${g} { color: ${A}; }`).join("\n"),".ng-action-default { color: grey; }",Object.entries(Tg).map(([g,A])=>`.ng-action-${g} { color: ${A.fg}; }`).join("\n"),".ng-dmg-unknown { color: grey; }",Object.entries(Rg).map(([g,A])=>`.ng-dmg-${toDamageSlug(g)} { color: ${A}; }`).join("\n"),".ng-muted { color: grey; }",".ng-npc-bracket { color: red; font-weight: bold; }",".ng-crit-separator { color: white; }",".ng-dmg-bracket { color: #808080; }",".ng-hp-loss { color: tomato; }",".ng-info-text { color: cadetblue; font-style: italic; }"].filter(Boolean).join("\n"),he=`\n/* nexGui4 replacement visual primitives — injected by replacementStyles.js */\n.ng-brkt { font-weight: bold; }\n.ng-brkt-ally { color: ${pe.bracketAllyColor}; }\n.ng-brkt-enemy { color: ${pe.bracketEnemyColor}; }\n.ng-italic { font-style: italic; }\n.ng-target-format {\n box-decoration-break: clone;\n -webkit-box-decoration-break: clone;\n box-shadow: inset 0 0 0 1px ${pe.targetBorderColor};\n padding: 0 2px;\n position: relative;\n z-index: 1;\n}\n.ng-icon-fill-1 { fill: var(--ng-fill-1); }\n.ng-icon-fill-2 { fill: var(--ng-fill-2); }\n\n/* Legacy message replacement row classes retained for compatibility. */\n.ng-seg { display: table-cell; color: #aaa; }\n.ng-msgline { display: inline-table; width: calc(100% - 15ch); }\n.ng-w-0 { width: 0; }\n.ng-w-5 { width: 5%; }\n.ng-w-30 { width: 30%; }\n.ng-w-35 { width: 35%; }\n\n/* Flex layout for structured skill replacement rows. Width is 100% of whatever\n space the host surface gives the row: the side-stream panels place it in a\n grid track that already excludes the timestamp, while the inline main-display\n / scrollback line reserves the timestamp's width on the row itself (see\n transcriptStyles.js). */\n.nexgui4-replacement-row {\n display: inline-flex;\n width: 100%;\n min-width: 0;\n overflow: hidden;\n vertical-align: top;\n}\n.nexgui4-replacement-row__buffer {\n flex: 0 0 5%;\n}\n.nexgui4-replacement-row__actor {\n flex: 0 0 30%;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.nexgui4-replacement-row__action {\n flex: 0 0 35%;\n}\n.nexgui4-replacement-row__target {\n flex: 1;\n min-width: 0;\n}\n\n/* Panel-specific stream overrides */\n.nexgui4-combat-stream .nexgui4-replacement-row__buffer {\n display: none;\n}\n\n${buildCatalogRules()}\n`.trim(),injectReplacementBaseStyles=()=>{registerNexguiStyles(de,he)},ye="transcript-viewport",fe="\n/* nexGui4 transcript viewport primitives. */\n.nexgui4-transcript-scroll-viewport {\n flex: 1;\n min-height: 0;\n overflow-anchor: none;\n overflow-y: auto;\n position: relative;\n margin: 5px;\n}\n\n.nexgui4-transcript-scroll-viewport--display {\n -ms-overflow-style: none;\n scrollbar-width: none;\n}\n\n.nexgui4-transcript-scroll-viewport--display::-webkit-scrollbar {\n display: none;\n}\n\n.nexgui4-transcript-spacer {\n width: 100%;\n}\n\n.nexgui4-transcript-spacer--display {\n box-sizing: border-box;\n}\n\n.nexgui4-transcript-spacer--panel {\n position: relative;\n}\n\n.nexgui4-transcript-row {\n width: 100%;\n}\n\n.nexgui4-transcript-row--panel {\n left: 0;\n position: absolute;\n top: 0;\n}\n\n.nexgui4-virtual-scroll-line {\n contain: layout style paint;\n display: block;\n font-family: inherit;\n min-width: 0;\n}\n\n.nexgui4-virtual-scroll-line.nexguilog {\n display: block !important;\n}\n\n/* Transcript lines flow inline (timestamp + payload) so wrapped text returns\n to the left margin — standard wrapping with inline timestamps. A structured\n replacement row is tabular and must not wrap, so (as in nexGui3) it reserves\n the inline timestamp's width and fills the rest of the line. The display font\n is monospace, so the ch reservation lines up with the timestamp; the slack\n over the 13ch timestamp (12ch label + 1ch ng-timestamp margin) keeps it off\n the next line. The reservation is scoped by the static --timestamped class\n (set when a timestamp is rendered) rather than :has(), so it never adds\n selector-matching cost to the streaming transcript; with timestamps hidden\n the class is absent and the base .nexgui4-replacement-row rule keeps the row\n at full width. */\n.nexgui4-virtual-scroll-line--timestamped .nexgui4-replacement-row {\n width: calc(100% - 15ch);\n}\n\n.nexgui4-main-display-timestamp.timestamp,\n.nexgui4-scrollback-timestamp.timestamp,\n.nexgui4-structured-stream-panel__timestamp.timestamp {\n display: inline !important;\n}\n\n.nexgui4-virtual-scroll-line__payload {\n overflow-wrap: anywhere;\n white-space: pre-wrap;\n}\n\n/* Gagged-but-logged lines never appear on the live display; in scrollback they\n are dimmed and italicised so reviewers can tell they were suppressed live. */\n.nexgui4-virtual-scroll-line--gagged {\n font-style: italic;\n opacity: 0.6;\n}\n\n.nexgui4-prompt-line {\n position: static;\n width: 100%;\n}\n".trim(),injectTranscriptStyles=()=>{registerNexguiStyles(ye,fe)},be={"shield-halved":[512,512,["shield-alt"],"f3ed",["M256 0c.2 0 .5 0 .7 0c4.6 0 9.2 1 13.4 2.9L458.4 82.8c22 9.3 38.4 31 38.3 57.2c-.5 99.2-41.3 280.7-213.6 363.2c-8.3 4-17.4 6-26.4 6V0H256z","M256.7 0c-.2 0-.5 0-.7 0c-4.6 0-9.2 1-13.4 2.9L54.3 82.8c-22 9.3-38.4 31-38.3 57.2c.5 99.2 41.3 280.7 213.6 363.2c8.3 4 17.4 6 26.4 6V0h.7z"]],"shield-cross":[512,512,[9960],"f712",["M224 10.8L54.3 82.8c-22 9.3-38.4 31-38.3 57.2c0 6.4 .2 13 .6 20H192c17.7 0 32-14.3 32-32V10.8zM24.7 224C43.7 319.9 97.4 437.2 224 500.4V256c0-17.7-14.3-32-32-32H24.7zM288 500.4C414.6 437.2 468.3 319.9 487.3 224H320c-17.7 0-32 14.3-32 32V500.4zM495.4 160c.4-7 .6-13.7 .6-20c.1-26.2-16.3-47.9-38.3-57.2L288 10.8V128c0 17.7 14.3 32 32 32H495.4z","M288 10.8L269.4 2.9C265.2 1 260.7 0 256 0s-9.2 1-13.4 2.9L224 10.8V128c0 17.7-14.3 32-32 32H16.6c1.1 19.4 3.6 41.1 8.1 64H192c17.7 0 32 14.3 32 32V500.4c1.9 .9 3.7 1.8 5.6 2.7c16.7 8 36.1 8 52.8 0c1.9-.9 3.8-1.8 5.6-2.7V256c0-17.7 14.3-32 32-32H487.3c4.5-22.9 7.1-44.6 8.1-64H320c-17.7 0-32-14.3-32-32V10.8z"]],tree:[448,512,[127794],"f1bb",["M210.6 5.9L62 169.4c-3.9 4.2-6 9.8-6 15.5C56 197.7 66.3 208 79.1 208H104L30.6 281.4c-4.2 4.2-6.6 10-6.6 16C24 309.9 34.1 320 46.6 320H80L5.4 409.5C1.9 413.7 0 419 0 424.5c0 13 10.5 23.5 23.5 23.5H192V224c0-17.7 14.3-32 32-32s32 14.3 32 32V448H424.5c13 0 23.5-10.5 23.5-23.5c0-5.5-1.9-10.8-5.4-15L368 320h33.4c12.5 0 22.6-10.1 22.6-22.6c0-6-2.4-11.8-6.6-16L344 208h24.9c12.7 0 23.1-10.3 23.1-23.1c0-5.7-2.1-11.3-6-15.5L237.4 5.9C234 2.1 229.1 0 224 0s-10 2.1-13.4 5.9z","M224 192c17.7 0 32 14.3 32 32V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V224c0-17.7 14.3-32 32-32z"]],droplet:[384,512,[128167,"tint"],"f043",["M192 512C86 512 0 426 0 320C0 228.8 130.2 57.7 166.6 11.7C172.6 4.2 181.5 0 191.1 0h1.8c9.6 0 18.5 4.2 24.5 11.7C253.8 57.7 384 228.8 384 320c0 106-86 192-192 192zM96 336c0-8.8-7.2-16-16-16s-16 7.2-16 16c0 61.9 50.1 112 112 112c8.8 0 16-7.2 16-16s-7.2-16-16-16c-44.2 0-80-35.8-80-80z","M80 320c8.8 0 16 7.2 16 16c0 44.2 35.8 80 80 80c8.8 0 16 7.2 16 16s-7.2 16-16 16c-61.9 0-112-50.1-112-112c0-8.8 7.2-16 16-16z"]],tombstone:[448,512,[],"f720",["M224 0C118 0 32 86 32 192V448H416V192C416 86 330 0 224 0zm24 152v40h48c13.3 0 24 10.7 24 24s-10.7 24-24 24H248V360c0 13.3-10.7 24-24 24s-24-10.7-24-24V240H152c-13.3 0-24-10.7-24-24s10.7-24 24-24h48V152c0-13.3 10.7-24 24-24s24 10.7 24 24z","M248 152c0-13.3-10.7-24-24-24s-24 10.7-24 24v40H152c-13.3 0-24 10.7-24 24s10.7 24 24 24h48V360c0 13.3 10.7 24 24 24s24-10.7 24-24V240h48c13.3 0 24-10.7 24-24s-10.7-24-24-24H248V152zM32 448c-17.7 0-32 14.3-32 32s14.3 32 32 32H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H32z"]],feather:[512,512,[129718],"f52d",["M97.9 448h84c49.7 0 97.9-14.4 139-41c11.1-7.2 5.5-23-7.8-23c-5.1 0-9.2-4.1-9.2-9.2c0-4.1 2.7-7.6 6.5-8.8l81-24.3c2.5-.8 4.8-2.1 6.7-4l22.4-22.4c10.1-10.1 2.9-27.3-11.3-27.3l-32.2 0c-5.1 0-9.2-4.1-9.2-9.2c0-4.1 2.7-7.6 6.5-8.8l112-33.6c4-1.2 7.4-3.9 9.3-7.7C506.4 207.6 512 184.1 512 160c0-41-16.3-80.3-45.3-109.3l-5.5-5.5C432.3 16.3 393 0 352 0s-80.3 16.3-109.3 45.3L139 149C91 197 64 262.1 64 330v84L311 167c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9L97.9 448z","M24 512c-6.2 0-12.3-2.3-17-7c-9.4-9.4-9.4-24.6 0-33.9L311 167c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9L41 505c-4.7 4.7-10.8 7-17 7z"]],"fish-fins":[576,512,[],"e4f2",["M182 150.4C221.3 120.9 273.7 96 336 96s114.7 24.9 154 54.4c39.2 29.4 67.2 64.7 81.6 89.5c5.8 9.9 5.8 22.2 0 32.1c-14.4 24.8-42.5 60.1-81.6 89.5C450.7 391.1 398.3 416 336 416s-114.7-24.9-154-54.4c-15.3-11.5-29-23.9-40.7-36.3L48.1 379.6c-12.5 7.3-28.4 5.3-38.7-4.9S-3 348.7 4.2 336.1L50 256 4.2 175.9c-7.2-12.6-5-28.4 5.3-38.6s26.1-12.2 38.7-4.9l93.1 54.3c11.8-12.3 25.4-24.8 40.7-36.3zM448 256a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z","M238.9 36.9C227.7 44 222 57.3 224.6 70.3l9.7 48.6C264.1 105.1 298.2 96 336 96c5.7 0 11.3 .2 16.8 .6L275.2 38.4c-10.6-8-25-8.5-36.3-1.5zm-4.6 356.2l-9.7 48.6c-2.6 13 3.1 26.3 14.3 33.3s25.6 6.5 36.3-1.5l77.6-58.2c-5.5 .4-11.1 .6-16.8 .6c-37.8 0-71.9-9.1-101.7-22.9z"]]},xe="host-surface",ve="character_module_class",Ee="100%",we="15%",Re="\nhtml { -webkit-font-smoothing: subpixel-antialiased; }\n.flexlayout__splitter { background-color: grey; }\n.flexlayout__tab { background-color: #000 !important; }\n.output { padding: 5px; }\n.nexguilog { display: none; }\n\n.ng-timestamp { margin-right: 1ch; }\n\n.ng-virtual-list {\n background: black;\n width: 100%;\n overflow-y: auto;\n contain: strict;\n padding-bottom: 0;\n}\n\n.ng-virtual-list--border { border-bottom: 1px solid #ccc; }\n\n.ng-virtual-anchor {\n overflow-anchor: none;\n width: 100%;\n color: white;\n white-space: pre-wrap;\n word-wrap: break-word;\n}\n\n.ng-ListItem { contain: layout inline-size; }\n\n.nexgui4-tab-container {\n isolation: isolate;\n overflow: hidden;\n position: relative;\n}\n\n.nexgui4-tab-container__background {\n inset: 0;\n pointer-events: none;\n position: absolute;\n z-index: 0;\n}\n\n.nexgui4-tab-container__surface,\n.nexgui4-tab-container__tabs,\n.nexgui4-tab-container__tabpanel {\n position: relative;\n z-index: 1;\n}\n".trim(),injectHostStyles=()=>{registerNexguiStyles(xe,Re)},setClassBalanceIconReadyState=g=>{if("undefined"==typeof document)return;const A=document.getElementById(ve);A&&(A.style.opacity=!0===g?Ee:!1===g?we:"")},bindClassBalanceIcon=({characterStore:g}={})=>{if(!g||"function"!=typeof g.getState||"function"!=typeof g.subscribe)return()=>{};const sync=(A=g.getState())=>{setClassBalanceIconReadyState(A?.classBalanceReady??null)};return sync(),g.subscribe(g=>{sync(g)})},injectFontAwesomeIcons=()=>{"undefined"!=typeof window&&window.___FONT_AWESOME___?.styles?.fad&&Object.assign(window.___FONT_AWESOME___.styles.fad,be)},Se=300,Me=null,forceFooterHostElementsVisible=g=>{g?.setHostSetting?.("show_gauges",!0),g?.setHostSetting?.("show_balances",!0)},applyFooterLayout=()=>{if("undefined"==typeof document)return;const g=document.getElementsByClassName("bottom_view")[0];g&&(g.style.padding="0px",g.children[2]&&(g.children[2].style.margin="0px"));const A=document.getElementById("status_vars");if(A){for(let I=0;I<A.children.length;I++)Object.assign(A.children[I].style,{fontSize:"14.4px",marginTop:"auto",marginBottom:"auto",verticalAlign:"middle"});Object.assign(A.style,{justifyContent:"flex-start",alignItems:"center",marginTop:0,marginBottom:0});const g=document.getElementById("component_balances");g&&(A.prepend(g),g.style.minWidth="50px",g.style.marginTop="5px",g.style.gap="2px")}const I=document.getElementById("extra_icons");I&&(Object.assign(I.style,{display:"flex",justifyContent:"end",gap:"10px"}),["status-bank","status-gold","status-level","status-ping"].forEach(g=>{const A=document.getElementById(g);A&&I.prepend(A)}));const C=document.getElementById("status-ping");C&&(C.style.minWidth="57px");const e=document.getElementById("left_icons");if(e){Object.assign(e.style,{minWidth:"300px",maxWidth:"500px"}),e.children[0]&&(e.children[0].style.visibility="hidden",e.children[0].style.width="0px");const g=document.getElementById("status-target");g&&(e.prepend(g),g.style.fontSize="12px",g.style.fontWeight="bold")}const t=document.getElementById("footer");if(t&&I){const g=document.getElementById("gauges");if(g){t.insertBefore(g,I),Object.assign(g.style,{display:"flex",transform:"scaleY(0.85)",minWidth:0,flexGrow:100,alignItems:"center"});for(const A of g.children)A.children[1]&&(A.children[1].style.fontSize="12px"),A.style.flexGrow=1}}document.getElementById(ve)?.remove();const n=document.createElement("div");n.id=ve,n.className="balance class-balance",n.style.flexGrow="1",n.innerHTML=`<svg aria-hidden="true" focusable="false" data-prefix="fad" data-icon="hourglass" class="svg-inline--fa fa-star fa-w-18" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512" color="#33FFD4" style="font-size: 20px;"><g class="fa-group"><path class="fa-secondary" fill="currentColor" d="${window.___FONT_AWESOME___?.styles?.fa?.hourglass?.[4]??""}"></path><path class="fa-primary" fill="currentColor" d=""></path></g></svg>`,document.getElementById("component_balances")?.appendChild(n),document.getElementById("balance_balance")?.setAttribute("style","flex-grow: 1"),document.getElementById("balance_equilibrium")?.setAttribute("style","flex-grow: 1")},configureFlexLayout=()=>{if("undefined"==typeof nexusclient)return;const g=nexusclient.ui().layout(),A=g.model()?.global??{},I="boolean"!=typeof A.tabSetEnableTabStrip||A.tabSetEnableTabStrip;g.flexModel.doAction({type:"FlexLayout_UpdateModelAttributes",data:{json:{splitterSize:2,tabSetEnableTabStrip:I,tabEnableClose:!1,tabSetEnableMaximize:!1,borderEnableAutoHide:!0,borderEnableDrop:!0}}}),["right","left","top","bottom"].forEach(A=>{g.model().borders.find(g=>g.location===A)||g.model().borders.push({type:"border",location:A,children:[]})});const borderLeaveEvent=()=>{Me&&(document.getElementsByClassName("MuiPopover-root MuiMenu-root MuiModal-root").length||g.flexModel.doAction({type:"FlexLayout_SelectTab",data:{tabNode:Me}}))},C=document.getElementsByClassName("flexlayout__tab_border_right");for(let t=0;t<C.length;t++)C[t].addEventListener("mouseleave",borderLeaveEvent);const borderMouseOverEvent=A=>{const I=A.target.title;I&&(g.flexModel.getNodeById(I)?.isVisible()||(Me=I,g.flexModel.doAction({type:"FlexLayout_SelectTab",data:{tabNode:Me}})))},e=document.getElementsByClassName("flexlayout__border_button_right");for(let t=0;t<e.length;t++){const A=e[t];A.addEventListener("mouseenter",borderMouseOverEvent);const I=g.model().borders[0]?.children.find(g=>g.id===A.title);I&&I.borderWidth<Se&&(I.borderWidth=Se)}},Te="nexGui4",Ne="https://unpkg.com/nexgui4/dist/nexGui4.nxs",Ge="khaseem",ke=1e4,De=[{key:"classCustomizations",names:["nexGui.classCustomizations","classCustomizations"]},{key:"userSettings",names:["nexGui.userSettings","userSettings","userCustomizations"]}],je=new Set(De.flatMap(({names:g})=>g.map(g=>g.toLowerCase()))),toLowerName=g=>String(g??"").trim().toLowerCase(),clonePackageItem=g=>{if(!g||"object"!=typeof g)return null;if("function"==typeof structuredClone)try{return structuredClone(g)}catch{}try{return JSON.parse(JSON.stringify(g))}catch{return g}},safeCall=g=>{try{return g()}catch{return null}},getReflexes=g=>safeCall(()=>g?.reflexes?.())??null,getPackageRegistry=g=>{const A=safeCall(()=>g?.packages?.());if("function"==typeof A?.get)return A;const I=safeCall(()=>getReflexes(g)?.packages?.());return"function"==typeof I?.get?I:null},getNexGuiPackage=(g,A=Te)=>safeCall(()=>getPackageRegistry(g)?.get(A))??null,findPackageItemByNames=(g,A)=>{if(!Array.isArray(g))return null;const I=new Set(A.map(toLowerName));return g.find(g=>I.has(toLowerName(g?.name)))??null},captureCustomizationGroups=g=>De.map(({key:A,names:I})=>{const C=findPackageItemByNames(g?.items,I);return C?{key:A,names:I,data:clonePackageItem(C)}:null}).filter(Boolean),applyCustomizationGroup=(g,A,I)=>{const C=findPackageItemByNames(g?.items,A.names);return!(!C||!A.data||("function"==typeof C.apply?(C.apply(A.data,I),0):"object"!=typeof C||"object"!=typeof A.data||(Object.assign(C,clonePackageItem(A.data)),0)))},enableRuntimePackageGroups=g=>{Array.isArray(g?.items)&&g.items.filter(g=>"group"===g?.type&&!je.has(toLowerName(g.name))).forEach(g=>{g.enabled=!0})},reportUpdateError=({adapter:g,consoleObj:A,message:I,nexusClient:C})=>{A.error(I),"function"!=typeof g?.notice?"function"!=typeof C?.display?C?.display_notice?.(I,"red"):C.display(I):g.notice(I,"red")},createAbortSignal=({AbortControllerCtor:g,setTimeoutFn:A,timeoutMs:I})=>{if(!g||I<=0)return{signal:void 0,timeout:null};const C=new g,e=A(()=>C.abort(),I);return{signal:C.signal,timeout:e}},updateNxs=async({adapter:g=null,clearTimeoutFn:A=clearTimeout,consoleObj:I=console,fetchFn:C=globalThis.fetch,nexusClient:e=globalThis.nexusclient,packageName:t=Te,setTimeoutFn:n=setTimeout,skipCharacterName:a=Ge,timeoutMs:r=ke,url:o=Ne}={})=>{if(toLowerName(e?.charname)===toLowerName(a))return null;const i=getPackageRegistry(e);if(!i)return null;let l=null;try{if("function"!=typeof C)throw new Error("fetch is not available.");const g=i.get(t);if(!g||"function"!=typeof g.apply)throw new Error(`${t} package is not installed in Nexus.`);const A=captureCustomizationGroups(g),{signal:I,timeout:a}=createAbortSignal({AbortControllerCtor:globalThis.AbortController,setTimeoutFn:n,timeoutMs:r});l=a;const s=await C(o,{cache:"no-store",...I?{signal:I}:{}});if(!s?.ok)throw new Error(`${t} update failed: ${s?.status??"unknown"} ${s?.statusText??""}`.trim());const c=await s.json(),u=getReflexes(e),m=getNexGuiPackage(e,t);m.apply(c,u);const d=getNexGuiPackage(e,t)??m;return A.forEach(g=>{applyCustomizationGroup(d,g,u)}),enableRuntimePackageGroups(d),c}catch(s){return reportUpdateError({adapter:g,consoleObj:I,message:"AbortError"===s?.name?`${t} update timed out. Check your connection.`:`${t} update error: ${s?.message??String(s)}`,nexusClient:e}),null}finally{null!==l&&A(l)}},Pe="https://api.achaea.com/gamefeed.json",Be=5e3,normalizeFetchedEntries=g=>Array.isArray(g)?g.filter(Boolean):[],parseTimestamp=g=>{if("string"!=typeof g||0===g.trim().length)return;const A=g.trim(),I=A.match(/^(\d{4})-(\d{2})-(\d{2})[ T](\d{2}):(\d{2}):(\d{2})$/);if(I){const[,g,A,C,e,t,n]=I;return Date.UTC(Number(g),Number(A)-1,Number(C),Number(e),Number(t),Number(n),0)}const C=A.includes("T")?A:A.replace(" ","T"),e=/(?:Z|[+-]\d{2}:?\d{2})$/i.test(C),t=Date.parse(e?C:`${C}Z`);return Number.isFinite(t)?t:void 0},toStoreEntry=g=>({content:g.description??g.caption??null,id:g.id??void 0,timestamp:parseTimestamp(g.date)}),mapEntries=g=>g.map(g=>toStoreEntry(g)),applySnapshot=(g,A)=>{const I=g?.getState?.();if(!I)return;const C=mapEntries(A);if("function"!=typeof I.replaceEntries){I.clear();for(const g of C)I.addEntry(g)}else I.replaceEntries(C)},appendEntries=(g,A)=>{const I=g?.getState?.();if(!I)return;const C=mapEntries(A);if("function"!=typeof I.addEntries)for(const e of C)I.addEntry(e);else I.addEntries(C)},createGameFeedPoller=({feedStore:g,fetchFn:A=null,setIntervalFn:I=null,clearIntervalFn:C=null,intervalMs:e=Be,url:t=Pe})=>{let n=null,a=null,r=!1,o=null;const syncFromRemote=async()=>{if("function"!=typeof A)return[];try{const I=await A(t,{cache:"no-store"});if(!I?.ok)return[];const C=normalizeFetchedEntries(await I.json());if(!r||0===C.length)return C;const e=C.at(-1)?.id??null;if(null==e)return applySnapshot(g,C),C;if(null==o)return applySnapshot(g,C),o=e,C;if(e===o)return[];const n=C.findIndex(g=>g?.id===o);return n<0?applySnapshot(g,C):appendEntries(g,C.slice(n+1)),o=e,C}catch{return[]}},pollOnce=()=>a||(a=syncFromRemote().finally(()=>{a=null}),a);return{start:()=>{r||(r=!0,pollOnce(),"function"==typeof I&&(n=I(()=>{pollOnce()},e)))},stop:()=>{r=!1,null!==n&&"function"==typeof C&&(C(n),n=null)},pollOnce}},Oe="https://2a9fwzdazf.execute-api.us-east-2.amazonaws.com/nexGui/cdb",Le="zr1te94RPZ4yaMJCc6j134eAxDsCpkmm48py1GaD",resolveRemoteService=({remoteService:g,remotePlayerService:A,fetchFn:I}={})=>{if(g)return g;const C=A??{apiUrl:Oe,apiKey:Le};return createLambdaRemotePlayerService({...C,fetchFn:C.fetchFn??I})},bootstrapNexus=(g={})=>{const{adapter:A,autoStart:I,startupPhaseHandlers:C,remoteService:e,remotePlayerService:t,feedPollingEnabled:n=!0,runtimePorts:a,...r}=g,o=a??createBrowserRuntimePorts(),i=createNexusAdapter(),l=resolveRemoteService({remoteService:e,remotePlayerService:t,fetchFn:o.fetch});let s,c=!1,u=!1,m=!1,d=!1,p=!1,h=!1,y=!1,b=null,removeLivePatches=()=>{},removeClassBalanceBinding=()=>{},removeNetflixModeController=()=>{},removeNativeDisplayCommands=()=>{},removeLayoutCommands=()=>{};const ensureFeedPoller=()=>n?(b??=createGameFeedPoller({feedStore:s.stores.feed,fetchFn:o.fetch,setIntervalFn:o.setInterval,clearIntervalFn:o.clearInterval}),b):null;return s=createNexGui({adapter:i,autoStart:!1,remoteService:l,startupPhaseHandlers:{[eA.BOOTING]:async()=>{const g=updateNxs({adapter:i,fetchFn:o.fetch,setTimeoutFn:o.setTimeout,clearTimeoutFn:o.clearTimeout});injectHostStyles(),injectTranscriptStyles(),injectReplacementBaseStyles(),injectFontAwesomeIcons();const A=s.__contextValue,I=A?.persistenceStore?.get("ui")?.nativeDisplay??!1;if(c||(generateTabs(),c=!0),u||(forceFooterHostElementsVisible(i),configureFlexLayout(),applyFooterLayout(),u=!0),d||(removeClassBalanceBinding=bindClassBalanceIcon({characterStore:s.stores.character}),d=!0),p||(removeNetflixModeController=createNetflixModeController({adapter:i,uiStore:s.stores.ui,characterStore:s.stores.character}),p=!0),m||(removeLivePatches=applyPatches({contextValue:A}),m=!0,I&&A.platformTabs.mountNativeDisplay()),!h){const g=i.destroy.bind(i);i.destroy=()=>{b?.stop(),removeNativeDisplayCommands(),removeLayoutCommands(),removeClassBalanceBinding(),d=!1,removeNetflixModeController(),p=!1,m&&(removeLivePatches(),m=!1),g()},h=!0}y||(i.send("stat"),i.send("pwho"),i.send("enemies"),i.send("allies"),i.send("city enemies"),i.send("date"),i.send("ql"),y=!0),A.playerDirectoryLifecycle.warmDirectoryFromCache(),A.playerDirectoryLifecycle.refreshDirectoryFromRemote(l),ensureFeedPoller()?.start(),await g}},runtimePorts:o,...r}),removeNativeDisplayCommands=s.__contextValue.platformTabs.configureNativeDisplayCommands({mountNativeDisplay:()=>mountNativeDisplay({contextValue:s.__contextValue}),unmountNativeDisplay:()=>{unmountNativeDisplay()}}),removeLayoutCommands=s.__contextValue.platformTabs.configureLayoutCommands({applyLayoutPreset,saveLayout:saveCurrentLayout,restoreLayout:restoreSavedLayout,hasSavedLayout}),installGlobalNexGui(s),s.__start().catch(()=>{}).then(()=>{emitStartupReadySignal(i),runNexGuiClassReflexForCurrentHostClass()}),s},createMockAdapter=({playerRelationships:g}={})=>{const A=[],I=[],C=new Map,e=new Map,t={echo_input:!1,echo_gmcp:!1,show_prompts:!0,show_timestamps:!1},n={tabSetEnableTabStrip:!1};let a=0,r=0;const getListenerBucket=g=>(e.has(g)||e.set(g,new Map),e.get(g)),resolveListenerId=(g,A={})=>A.id??"listener-"+ ++r,removeListener=(g,A)=>{const I=e.get(g);if(!I)return!1;if("string"==typeof A)return I.delete(A);for(const[C,e]of I.entries())if(e.handler===A)return I.delete(C),!0;return!1},o=assertAdapterContract({send:I=>{g?.trackRelationshipCommand?.(I),A.push(I)},sendGmcp:(g,I)=>A.push({gmcp:g,data:I}),getVariable:g=>C.get(g),setVariable:(g,A)=>C.set(g,A),getTarget:()=>C.get("_target")??null,setTarget:g=>C.set("_target",g),notice:()=>{},displayHtmlLine:g=>{I.push(String(g))},getHostSettings:()=>t,setHostSetting:(g,A)=>{t[g]=A},getHostLayoutSnapshot:()=>n,updateHostLayoutAttributes:g=>{Object.assign(n,g)},focusInput:()=>{},getConfiguredDefences:()=>[],getActiveDefences:()=>[],gagCurrentBlock:()=>{a+=1},on:(g,A,I)=>{const C=resolveListenerId(A,I);return getListenerBucket(g).set(C,{handler:A,once:Boolean(I?.once)}),()=>removeListener(g,C)},off:(g,A)=>removeListener(g,A),destroy:()=>{e.clear()}});return o._test={getSentCommands:()=>[...A],clearCommands:()=>{A.length=0},getGaggedBlockCount:()=>a,getDisplayedLines:()=>[...I],triggerEvent:(g,A)=>{const I=e.get(g);if(I)for(const[C,e]of[...I.entries()])e.handler(A),e.once&&I.delete(C)},setVariable:(g,A)=>C.set(g,A)},o},bootstrapPlayground=(g={})=>{const{feedPollingEnabled:A=!0,startupPhaseHandlers:I={},runtimePorts:C,...e}=g,t=C??createBrowserRuntimePorts(),n=createMockAdapter();let a,r=null;const ensureFeedPoller=()=>A?(r??=createGameFeedPoller({feedStore:a.stores.feed,fetchFn:t.fetch,setIntervalFn:t.setInterval,clearIntervalFn:t.clearInterval}),r):null;a=createNexGui({adapter:n,runtimePorts:t,startupPhaseHandlers:{...I,[eA.BOOTING]:async g=>{await(I[eA.BOOTING]?.(g)),injectTranscriptStyles(),ensureFeedPoller()?.start()}},...e});const o=a.destroy.bind(a);return a.destroy=()=>{r?.stop(),o()},a},ze=Object.freeze({NexGuiContext:KA,applyInlineNameHighlighting,createMuiTheme,createReplacementDescriptor,generateReplacementHtml,injectReplacementBaseStyles,isRoomNpcItem,nexGuiIcons:be,panels:Object.freeze({CombatStream,DefencesPanel,GameFeed,ItemsPanel,MainDisplay,MetricsPanel,NpcsPanel,OptionsPanel,PartyPanel,PlayersPanel,StatsPanel,SystemStream,TargetPanel,TimersPanel})});g.TOPICS=w,g.bootstrapNexus=bootstrapNexus,g.bootstrapPlayground=bootstrapPlayground,g.composePublicApi=composePublicApi,g.createMockAdapter=createMockAdapter,g.createNexGui=createNexGui,g.createNexusAdapter=createNexusAdapter,g.defaultTokens=GA,g.playground=ze,g.updateNxs=updateNxs}(globalThis.nexGui=globalThis.nexGui||{},nexRuntime.immer,nexRuntime.zustand,nexRuntime.zod,React,ReactDOM,nexRuntime.mui,nexRuntime.muiStyles,nexRuntime.tanstackReactVirtual);
1
+ !function(g,A,I,C,e,t,n,a,r){Object.defineProperty(g,Symbol.toStringTag,{value:"Module"});var o=Object.create,i=Object.defineProperty,l=Object.getOwnPropertyDescriptor,s=Object.getOwnPropertyNames,c=Object.getPrototypeOf,u=Object.prototype.hasOwnProperty,__commonJSMin=(g,A)=>()=>(A||(g((A={exports:{}}).exports,A),g=null),A.exports),__copyProps=(g,A,I,C)=>{if(A&&"object"==typeof A||"function"==typeof A)for(var e,t=s(A),n=0,a=t.length;n<a;n++)e=t[n],u.call(g,e)||e===I||i(g,e,{get:(g=>A[g]).bind(null,e),enumerable:!(C=l(A,e))||C.enumerable});return g},__toESM=(g,A,I)=>(I=null!=g?o(c(g)):{},__copyProps(!A&&g&&g.__esModule?I:i(I,"default",{value:g,enumerable:!0}),g));e=__toESM(e,1);var m=200,applyCap=(g,A)=>!Number.isFinite(A)||A<=0?g:g.length>A?g.slice(g.length-A):g,createFeedModel=({cap:g=m}={})=>{let A=[];return{add:I=>{A=applyCap(A.concat(I),g)},addEntries:I=>{Array.isArray(I)&&0!==I.length&&(A=applyCap(A.concat(I),g))},replaceEntries:I=>{A=applyCap(Array.isArray(I)?[...I]:[],g)},snapshot:()=>[...A],clear:()=>{A=[]},destroy:()=>{A=[]}}},d=3e3,p=1e3,h=5e3,createStreamModel=({onAppend:g=()=>{},onClear:A=()=>{}}={})=>{let I=0,C=0,e=[],t=[],n=null,a=null;const r=new Set,notify=()=>{C++,a=null,r.forEach(g=>g())},retainLiveTail=g=>{if(g.length<3e3)return g;const A=g.slice(-p),I=[];for(let C=g.length-1;C>=0&&I.length<1e3;C--)g[C].gagged||I.push(g[C]);return 0===I.length?A:[...new Map([...A,...I].map(g=>[g.id,g])).values()].sort((g,A)=>g.id-A.id)},callCallback=(g,...A)=>{try{const I=g(...A);I&&"function"==typeof I.catch&&I.catch(()=>{})}catch{}};return{subscribe:g=>(r.add(g),()=>r.delete(g)),getSnapshot:()=>(a||(a={version:C,buffer:e,filteredBuffer:t,promptLine:n,totalLines:e.length}),a),addLines:A=>{const C=[],a=[];let r=null;for(const g of A){if("main"!==(g.buffer??"main"))continue;const A={id:I++,html:g.html,timestamp:g.timestamp,isPrompt:g.isPrompt,isMonospace:g.isMonospace,shouldLog:g.shouldLog,gagged:Boolean(g.gagged),buffer:g.buffer??"main"};C.push(A),A.isPrompt?r=A:a.push(A)}0!==C.length&&(e=retainLiveTail([...e,...C]),t=retainLiveTail([...t,...a]),r&&(n=r),callCallback(g,C),notify())},clear:()=>{e=[],t=[],n=null,I=0,callCallback(A),notify()},getStats:()=>({totalLines:e.length,filteredLines:t.length,liveBufferCount:e.length,liveFilteredCount:t.length,version:C,subscribers:r.size,sessionTotalLines:I,nextId:I,liveBufferCapThreshold:d,liveBufferRetainCount:p})}},y=5e3,appendWithCap=(g,A,I)=>{if(0===A.length)return g;const C=g.concat(A);return!Number.isFinite(I)||I<=0?C:C.length>I?C.slice(C.length-I):C},createTranscriptModel=({cap:g=y}={})=>{let A=0,I=0,C=[],e=null;const t=new Set,notify=()=>{I++,e=null,t.forEach(g=>g())};return{subscribe:g=>(t.add(g),()=>t.delete(g)),getSnapshot:()=>(e||(e={version:I,items:C,totalLines:C.length}),e),addLines:I=>{const e=[];for(const g of I)e.push({id:A++,html:g.html,timestamp:g.timestamp,isPrompt:Boolean(g.isPrompt),isMonospace:Boolean(g.isMonospace),shouldLog:g.shouldLog,hasMXP:(g.html||"").includes("mxp_send"),buffer:g.buffer});0!==e.length&&(C=appendWithCap(C,e,g),notify())},clear:()=>{C=[],A=0,notify()},getStats:()=>({totalLines:C.length,version:I,subscribers:t.size})}},b=Object.freeze({SYSTEM_PHASE:"nexgui4.system.phase",SYSTEM_READY:"nexgui4.system.ready",SYSTEM_DESTROYED:"nexgui4.system.destroyed"}),x=Object.freeze({TIMER_STARTED:"nexgui4.domain.timer.started",TIMER_UPDATED:"nexgui4.domain.timer.updated",TIMER_EXPIRED:"nexgui4.domain.timer.expired",TIMER_CLEARED:"nexgui4.domain.timer.cleared",STATS_UPDATED:"nexgui4.domain.stats.updated",TARGET_CHANGED:"nexgui4.domain.target.changed",STREAM_LINE:"nexgui4.domain.stream.line",PARTY_UPDATED:"nexgui4.domain.party.updated",PARTY_MEMBER_LEFT:"nexgui4.domain.party.member.left",ROOM_UPDATED:"nexgui4.domain.room.updated",DEFENCE_GAINED:"nexgui4.domain.defence.gained",DEFENCE_LOST:"nexgui4.domain.defence.lost",DEFENCES_REPLACED:"nexgui4.domain.defence.replaced",CHARACTER_UPDATED:"nexgui4.domain.character.updated",CLASS_CHANGED:"nexgui4.domain.character.class.changed"}),v=Object.freeze({STREAM_LINE:"nexgui4.ingress.stream.line",TIMER_STARTED:"nexgui4.ingress.timer.started",STATS_UPDATED:"nexgui4.ingress.stats.updated",TARGET_CHANGED:"nexgui4.ingress.target.changed",ROOM_UPDATED:"nexgui4.ingress.room.updated",DEFENCE_GAINED:"nexgui4.ingress.defence.gained",DEFENCE_LOST:"nexgui4.ingress.defence.lost",CLASS_CHANGED:"nexgui4.ingress.character.class.changed"}),E=Object.freeze({THEME_CHANGED:"nexgui4.ui.theme.changed",HOST_SETTINGS_CHANGED:"nexgui4.ui.host.settings.changed"}),w=Object.freeze({...b,...x,...E}),hasOwn=(g,A)=>Boolean(g)&&Object.prototype.hasOwnProperty.call(g,A),normalizeNumber$3=g=>{const A=Number(g);return Number.isFinite(A)?A:0},normalizeDuration=g=>Math.max(0,Math.abs(normalizeNumber$3(g))),normalizeDirection$1=(g,A="countdown")=>g&&"object"==typeof g?"countup"===g.direction||"countup"===g.mode||!1===g.countDown?"countup":"countdown":A,normalizePosition$1=(g,A="top")=>"string"==typeof g?"bottom"===g?"bottom":"top":g&&"object"==typeof g?"bottom"===g.position?"bottom":"top":A,normalizeStayVisible=(g,A=!0)=>g&&"object"==typeof g&&hasOwn(g,"stayVisible")?!0===g.stayVisible:A,normalizeGroupIds=(g,A=[])=>{if(!g||"object"!=typeof g)return[...A];const I=hasOwn(g,"groupIds")?g.groupIds:hasOwn(g,"groupId")?g.groupId:hasOwn(g,"group")?g.group:null;if(null==I)return[...A];const C=Array.isArray(I)?I:[I],e=new Set,t=[];for(const n of C){if("string"!=typeof n)continue;const g=n.trim();g&&!e.has(g)&&(e.add(g),t.push(g))}return t},isVisibleTimer=g=>!0===g.stayVisible||!0===g.enabled&&!0===g.running,areGroupIdsEqual=(g,A)=>g.length===A.length&&g.every((g,I)=>g===A[I]),areTimerSnapshotsEqual=(g,A)=>g.id===A.id&&g.durationMs===A.durationMs&&g.startedAt===A.startedAt&&g.label===A.label&&g.direction===A.direction&&g.position===A.position&&g.stayVisible===A.stayVisible&&g.enabled===A.enabled&&g.running===A.running&&g.elapsedMs===A.elapsedMs&&g.remainingMs===A.remainingMs&&areGroupIdsEqual(g.groupIds,A.groupIds),getIdleElapsedMs=g=>!0===g.stayVisible?g.durationMs:0,noopSetTimer=()=>null,noopClearTimer$1=()=>{},createTimerModel=({eventBus:g,now:A=()=>0,setTimer:I=noopSetTimer,clearTimer:C=noopClearTimer$1}={})=>{const e=new Map;let t=[];const getElapsedMs=g=>g.running&&null!=g.startedAt?Math.min(g.durationMs,Math.max(0,normalizeNumber$3(A())-normalizeNumber$3(g.startedAt))):g.elapsedMs,cloneTimer=g=>{const A=getElapsedMs(g);return{id:g.id,durationMs:g.durationMs,startedAt:g.startedAt,label:g.label,direction:g.direction,position:g.position,stayVisible:g.stayVisible,groupIds:[...g.groupIds],enabled:g.enabled,running:g.running,elapsedMs:A,remainingMs:Math.max(0,g.durationMs-A)}},clearScheduledExpiry=g=>{null!=g.timeoutId&&(C(g.timeoutId),g.timeoutId=null)},emitTimerUpdated=A=>{g.emit(x.TIMER_UPDATED,cloneTimer(A))},expire=A=>{const I=e.get(A);I&&(clearScheduledExpiry(I),I.elapsedMs=I.durationMs,I.startedAt=null,I.enabled=!1,I.running=!1,g.emit(x.TIMER_EXPIRED,{...cloneTimer(I),reason:"expired"}))},scheduleExpiry=g=>{clearScheduledExpiry(g),g.timeoutId=I(()=>expire(g.id),g.durationMs)},createDormantTimer=(g,A,I,C,e)=>{const t=A??e?.durationMs??0,n=normalizeStayVisible(C,e?.stayVisible??!0);return{id:g,durationMs:t,startedAt:null,label:"string"==typeof I?I:e?.label??"",direction:normalizeDirection$1(C,e?.direction??"countdown"),position:normalizePosition$1(C,e?.position??"top"),stayVisible:n,groupIds:normalizeGroupIds(C,e?.groupIds??[]),enabled:!1,running:!1,elapsedMs:n?t:0,timeoutId:null}},createTimer=(g,A,I,C)=>{const t=e.get(g);t&&clearScheduledExpiry(t);const n=createDormantTimer(g,normalizeDuration(A),I,C,t);return e.set(g,n),emitTimerUpdated(n),cloneTimer(n)},start=I=>{const C=e.get(I);if(!C)return null;clearScheduledExpiry(C),C.elapsedMs=0,C.startedAt=A(),C.enabled=!0,C.running=!0,scheduleExpiry(C);const t=cloneTimer(C);return g.emit(x.TIMER_STARTED,t),t},remove=A=>{const I=e.get(A);if(!I)return null;clearScheduledExpiry(I);const C=cloneTimer(I);return e.delete(A),g.emit(x.TIMER_EXPIRED,{...C,reason:"removed"}),C},list=(g={})=>{const A="string"==typeof g?g:g.groupId??null,I="object"==typeof g&&!0===g?.visibleOnly;return[...e.values()].map(g=>cloneTimer(g)).filter(g=>!(A&&!g.groupIds.includes(A)||I&&!isVisibleTimer(g)))},snapshot=()=>list({visibleOnly:!0});return{add:(g,A,I="",C)=>{const e=createTimer(g,A,I,C);return C&&"object"==typeof C&&!0===C.autoStart?start(g):e},clearAll:()=>{if(0===e.size)return 0;const A=e.size;return e.forEach(g=>clearScheduledExpiry(g)),e.clear(),g.emit(x.TIMER_CLEARED),A},destroy:()=>{e.forEach(g=>clearScheduledExpiry(g)),e.clear()},get:g=>{const A=e.get(g);return A?cloneTimer(A):null},list,read:()=>{const g=[...e.values()].map(g=>cloneTimer(g)).filter(g=>isVisibleTimer(g));return t.length===g.length&&t.every((A,I)=>areTimerSnapshotsEqual(A,g[I]))||(t=g),t},remove,reset:g=>{const A=e.get(g);return A?(clearScheduledExpiry(A),A.elapsedMs=getIdleElapsedMs(A),A.startedAt=null,A.enabled=!1,A.running=!1,emitTimerUpdated(A),cloneTimer(A)):null},snapshot,start,stop:g=>{const A=e.get(g);return A?(clearScheduledExpiry(A),A.elapsedMs=getElapsedMs(A),A.startedAt=null,A.enabled=!1,A.running=!1,emitTimerUpdated(A),cloneTimer(A)):null}}},isPlainObject=g=>"[object Object]"===Object.prototype.toString.call(g),toNumber=(g,A=0)=>{const I="number"==typeof g?g:"string"==typeof g&&g.trim().length>0?Number(g):NaN;return Number.isFinite(I)?I:A},toPercent=g=>{if("number"==typeof g&&Number.isFinite(g))return g;if("string"!=typeof g)return null;const A=Number.parseInt(g.replace("%","").trim(),10);return Number.isNaN(A)?null:A},toTrimmedString=g=>"string"==typeof g&&g.trim().length>0?g.trim():null,toBooleanFlag=g=>!0===g||1===g||"1"===g,stripAnsi=g=>"string"==typeof g?g.replace(/\u001b\[[0-9;]*m/g,"").trim():"",extractNamedValue=g=>Array.isArray(g)?toTrimmedString(g[0]):isPlainObject(g)?toTrimmedString(g.name):toTrimmedString(g),deepFreeze=g=>{if(!g||"object"!=typeof g||Object.isFrozen(g))return g;Object.freeze(g);for(const A of Object.values(g))deepFreeze(A);return g},parseFontSize=(g,A=14)=>{if("number"==typeof g&&Number.isFinite(g)&&g>0)return g;if("string"==typeof g){const A=Number.parseFloat(g);if(Number.isFinite(A)&&A>0)return A}return A},R={hp:{current:0,max:0},mp:{current:0,max:0},ep:{current:0,max:0},wp:{current:0,max:0},nl:{current:0,max:0},gold:0,bank:0,xp:0,xpToNext:0},createStatsModel=({eventBus:g}={})=>{let A=structuredClone(R);const read=()=>A;return{update:I=>{for(const g of Object.keys(I)){const C=I[g];null===C||"object"!=typeof C||Array.isArray(C)?A[g]=C:A[g]={...A[g],...C}}g.emit(x.STATS_UPDATED,read())},read,snapshot:()=>deepFreeze(structuredClone(A)),destroy:()=>{A=structuredClone(R)}}},S=Object.freeze({goldCollection:!0,targetCalls:!0,affCalls:!0,callTargets:!1,callAffs:!1,gagChat:!1}),M=Object.freeze([{key:"goldCollection",label:"Collect Gold",tooltip:"Legacy party automation flag for gold collection behaviour."},{key:"targetCalls",label:"Accept Targets",tooltip:"Accept leader target calls from party chat."},{key:"affCalls",label:"Accept Affs",tooltip:"Accept legacy affliction call messages from party chat."},{key:"callTargets",label:"Call Targets",tooltip:"Legacy toggle preserved for compatibility with party workflows."},{key:"callAffs",label:"Call Affs",tooltip:"Legacy toggle preserved for compatibility with party workflows."},{key:"gagChat",label:"Gag Chat",tooltip:"Hide party chat lines from the display stream."}]),T=Object.freeze(M.map(({key:g})=>g)),isNonEmptyString=g=>"string"==typeof g&&g.trim().length>0,trimToEmpty=g=>isNonEmptyString(g)?g.trim():"",N=trimToEmpty,normalizeLookupKey=g=>trimToEmpty(g).toLowerCase(),toDisplayName=g=>trimToEmpty(g).replace(/[_-]+/g," ").replace(/\s+/g," ").replace(/\b([a-z])/g,g=>g.toUpperCase()),capitalizeFirst=g=>{const A=trimToEmpty(g);return A?A.charAt(0).toUpperCase()+A.slice(1):""},cloneSettings=g=>({...S,...g}),cloneState=g=>({members:[...g.members],leader:g.leader,selfName:g.selfName,settings:cloneSettings(g.settings)}),normalizeMembers=g=>{const A=[],I=new Set;return(Array.isArray(g)?g:[]).forEach(g=>{const C=N("string"==typeof g?g:g?.name);C&&!I.has(C)&&(I.add(C),A.push(C))}),A},reconcileLeader=(g,A)=>A.includes(g.leader)?g.leader:g.selfName&&A.includes(g.selfName)?g.selfName:A[0]??"",ensureSelfMember=(g,A)=>!g.selfName||A.includes(g.selfName)?A:[g.selfName,...A],createPartyModel=({eventBus:g}={})=>{let A={members:[],leader:"",selfName:"",settings:cloneSettings(S)};const emitUpdated=()=>{g.emit(x.PARTY_UPDATED,snapshot())},snapshot=()=>cloneState(A);return{update:g=>{const I=ensureSelfMember(A,normalizeMembers(g)),C=reconcileLeader(A,I);A.leader===C&&A.members.length===I.length&&A.members.every((g,A)=>g===I[A])||(A={...A,members:I,leader:C},emitUpdated())},addMember:g=>{const I=N(g);I&&!A.members.includes(I)&&(A={...A,members:[...A.members,I],leader:A.leader||I},emitUpdated())},removeMember:I=>{const C=N(I);if(!C||C===A.selfName||!A.members.includes(C))return;const e=A.members.filter(g=>g!==C);A={...A,members:e,leader:reconcileLeader(A,e)},g.emit(x.PARTY_MEMBER_LEFT,{name:C}),emitUpdated()},setLeader:g=>{const I=N(g);I&&A.members.includes(I)&&A.leader!==I&&(A={...A,leader:I},emitUpdated())},setSelf:g=>{const I=N(g);if(!I)return;const C=ensureSelfMember({...A,selfName:I},A.members.filter(g=>g!==I)),e=C.includes(A.leader)?A.leader:I;A.selfName===I&&A.leader===e&&A.members.length===C.length&&A.members.every((g,A)=>g===C[A])||(A={...A,selfName:I,members:C,leader:e},emitUpdated())},setSetting:(g,I)=>{if(!T.includes(g))throw new Error(`[nexGui4] Unknown party setting "${String(g)}".`);const C=!0===I;A.settings[g]!==C&&(A={...A,settings:{...A.settings,[g]:C}},emitUpdated())},read:()=>A,snapshot,destroy:()=>{A={members:[],leader:"",selfName:"",settings:cloneSettings(S)}}}},G={players:[],npcs:[],items:[],roomName:"",roomId:""},cloneRoomCollection=g=>Array.isArray(g)?structuredClone(g):[],createRoomModel=({eventBus:g}={})=>{let A=structuredClone(G);const read=()=>A;return{update:I=>{A={players:I.players?[...I.players]:[],npcs:cloneRoomCollection(I.npcs),items:cloneRoomCollection(I.items),roomName:I.roomName??"",roomId:I.roomId??""},g.emit(x.ROOM_UPDATED,read())},read,snapshot:()=>({players:[...A.players],npcs:cloneRoomCollection(A.npcs),items:cloneRoomCollection(A.items),roomName:A.roomName,roomId:A.roomId}),destroy:()=>{A=structuredClone(G)}}},D={name:"",class:"",level:0,gender:null,balance:!1,equilibrium:!1,classBalanceType:null,classBalanceReady:null,currentAffs:[],limbs:{}},createCharacterModel=({eventBus:g}={})=>{let A={...D};const read=()=>A;return{update:I=>{A={...A,...I},g.emit(x.CHARACTER_UPDATED,read())},read,setClass:I=>{A={...A,class:I},g.emit(x.CLASS_CHANGED,{class:I})},snapshot:()=>deepFreeze(structuredClone(A)),destroy:()=>{A={...D}}}},normalizeGender$1=g=>{if("string"!=typeof g)return null;const A=g.trim().toLowerCase();return"female"===A?"female":"male"===A?"male":null},normalizeAfflictionName=g=>{if(Array.isArray(g))return normalizeAfflictionName(g[0]);if(isPlainObject(g))return normalizeAfflictionName(g.name??g.affliction??g.id);if("string"!=typeof g)return null;const A=g.trim().toLowerCase();return A.length>0?A:null},normalizeAfflictionList=g=>{if(Array.isArray(g)){const A=g.map(g=>normalizeAfflictionName(g)).filter(Boolean);return A.length>0?Array.from(new Set(A)):null}return isPlainObject(g)?normalizeAfflictionList(Object.keys(g)):null},normalizeLimbMap=g=>isPlainObject(g)?Object.fromEntries(Object.entries(g).map(([g,A])=>null!==A&&"object"==typeof A?[g,structuredClone(A)]:[g,{percent:toNumber(A)}])):null,buildCharacterDetailPatch=g=>{if(!isPlainObject(g))return null;const A={},I=normalizeGender$1(g.gender),C=normalizeAfflictionList(g.currentAffs??g.afflictions),e=normalizeLimbMap(g.limbs);return I&&(A.gender=I),C&&(A.currentAffs=C),e&&(A.limbs=e),Object.keys(A).length>0?A:null},applyCharacterAfflictionEvent=(g,A,I)=>{if("Char.Afflictions.Add"!==A&&"Char.Afflictions.Remove"!==A)return!1;const C=normalizeAfflictionName(I);if(!C)return!1;const e=g.snapshot(),t=Array.isArray(e.currentAffs)?e.currentAffs:[];return"Char.Afflictions.Add"===A?!t.includes(C)&&(g.update({currentAffs:[...t,C]}),!0):(g.update({currentAffs:t.filter(g=>g!==C)}),!0)},j=["id","ID"],P=["Text","text","short_desc"],B=["HP","hp","hpperc"],hasAnyKey=(g,A)=>A.some(A=>Object.prototype.hasOwnProperty.call(g,A)),readFirst=(g,A)=>{for(const I of A)if(Object.prototype.hasOwnProperty.call(g,I))return g[I]},normalizeId=g=>"number"==typeof g&&Number.isFinite(g)?String(g):toTrimmedString(g),readHpText=g=>"number"==typeof g&&Number.isFinite(g)?String(g):toTrimmedString(g),deriveIsPlayer=g=>"-1"===String(g),createEmptyTargetRecord=()=>({id:null,name:null,isPlayer:!1,hpPercent:null,hpText:null,hpDelta:null,gender:null,currentAffs:[],limbs:{}}),createTargetModel=({eventBus:g}={})=>{let A=createEmptyTargetRecord(),I=0;const read=()=>A,emitChange=()=>{I+=1,g?.emit?.(x.TARGET_CHANGED,read())};return{setIdentity:g=>{if(!isPlainObject(g))return!1;const I=hasAnyKey(g,j),C=hasAnyKey(g,P),e=I?normalizeId(readFirst(g,j)):A.id,t=C?toTrimmedString(readFirst(g,P)):A.name,n=e!==A.id,a=t!==A.name;if(!n&&!a)return!1;const r=n?createEmptyTargetRecord():A,o=hasAnyKey(g,B),i=o?readHpText(readFirst(g,B)):r.hpText,l=o?toPercent(readHpText(readFirst(g,B))):r.hpPercent;return A={...r,id:e,name:t,isPlayer:deriveIsPlayer(e),hpText:i,hpPercent:l},emitChange(),!0},applyDetail:g=>{if(!isPlainObject(g))return!1;const I={};if("number"==typeof g.hpPercent&&Number.isFinite(g.hpPercent))I.hpPercent=g.hpPercent;else if("string"==typeof g.hpPercent){const A=toPercent(g.hpPercent);null!=A&&(I.hpPercent=A)}const C=readHpText(g.hpText);null!=C&&(I.hpText=C),"number"==typeof g.hpDelta&&Number.isFinite(g.hpDelta)&&(I.hpDelta=g.hpDelta);const e=normalizeGender$1(g.gender);e&&(I.gender=e);const t=normalizeAfflictionList(g.currentAffs??g.afflictions);t&&(I.currentAffs=t);const n=normalizeLimbMap(g.limbs);return n&&(I.limbs=n),0!==Object.keys(I).length&&(A={...A,...I},emitChange(),!0)},clear:()=>{A=createEmptyTargetRecord(),emitChange()},read,snapshot:()=>deepFreeze(structuredClone(A)),getVersion:()=>I,destroy:()=>{A=createEmptyTargetRecord()}}},createDefenceModel=({eventBus:g}={})=>{let A=[];const replaceAll=(I=[])=>{A=Array.isArray(I)?[...new Set(I.map(g=>"string"==typeof g?g.trim():"").filter(Boolean))].sort():[],g.emit(x.DEFENCES_REPLACED,{defences:snapshot()})},snapshot=()=>[...A];return{gain:I=>{A.includes(I)||(A=[...A,I].sort()),g.emit(x.DEFENCE_GAINED,{name:I})},lose:I=>{A.includes(I)&&(A=A.filter(g=>g!==I)),g.emit(x.DEFENCE_LOST,{name:I})},replaceAll,reset:()=>{A=[]},read:()=>A,snapshot,destroy:()=>{A=[]}}},normalizeClassBalanceType=g=>"string"==typeof g&&g.trim().length>0?g.trim():null,normalizeClassStatList=g=>Array.isArray(g)?g.reduce((g,A)=>{if("string"!=typeof A)return g;const I=A.trim();return I?(g.push(I),g):g},[]):[],resolveClassBalanceReady=({classStats:g,classBalanceType:A})=>{const I=normalizeClassBalanceType(A);if(!I)return null;const C=normalizeClassStatList(g).map(g=>g.toLowerCase()),e=`${I.toLowerCase()}: yes`,t=`${I.toLowerCase()}: no`;return!!C.includes(e)||!C.includes(t)&&null},createClassBalanceController=()=>{let g=null,A=[];const snapshot=()=>({classBalanceType:g,classBalanceReady:resolveClassBalanceReady({classStats:A,classBalanceType:g})});return{getType:()=>g,setType:A=>(g=normalizeClassBalanceType(A),snapshot()),updateFromVitals:g=>(A=normalizeClassStatList(g?.charstats),snapshot()),destroy:()=>{g=null,A=[]}}},O=Object.freeze(["m","mx"]),L=new Set(O),isRoomNpcAttrib=g=>"string"==typeof g&&L.has(g),isRoomNpcItem=g=>"object"==typeof g&&null!==g&&isRoomNpcAttrib(g.attrib),getRoomEntryId=g=>isPlainObject(g)&&null!=g.id?String(g.id):null,isRoomLocation=g=>"room"===toTrimmedString(g?.location)?.toLowerCase(),splitRoomEntries=g=>(Array.isArray(g)?structuredClone(g):[]).reduce((g,A)=>(isRoomNpcItem(A)?g.npcs.push(A):g.items.push(A),g),{items:[],npcs:[]}),extractRoomItemList=g=>Array.isArray(g?.items)?g.items:Array.isArray(g?.Items)?g.Items:Array.isArray(g?.room)?g.room:[],extractRoomItemEntry=g=>isPlainObject(g?.item)?g.item:isPlainObject(g?.Item)?g.Item:isPlainObject(g)?g:null,removeRoomItemEntry=(g,A)=>g.filter(g=>getRoomEntryId(g)!==A),upsertRoomItemEntry=(g,A)=>{const I=getRoomEntryId(A);if(!I)return[...g,structuredClone(A)];const C=structuredClone(g),e=C.findIndex(g=>getRoomEntryId(g)===I);return-1===e?(C.push(structuredClone(A)),C):(C[e]=structuredClone(A),C)},normalizeRoomPlayerEntries=g=>Array.isArray(g)?g:Array.isArray(g?.Players)?g.Players:Array.isArray(g?.players)?g.players:[],extractRoomPlayerName=g=>extractNamedValue(g)??toTrimmedString(g?.fullname),createRoomOccupantsModel=({roomModel:g,playerDirectory:A}={})=>{const rememberRoomPlayers=g=>{A?.rememberRoomPlayers?.(g)},apply=(A,I)=>{const C=g.snapshot();switch(A){case"Room.Info":return g.update({...C,roomName:toTrimmedString(I?.name)??"",roomId:I?.num??I?.id??""}),!0;case"Room.Players":{const A=normalizeRoomPlayerEntries(I),e=A.map(extractRoomPlayerName).filter(Boolean);return rememberRoomPlayers(A),g.update({...C,players:e}),!0}case"Room.Addplayer":case"Room.AddPlayer":{const A=toTrimmedString(I?.name)??extractNamedValue(I)??toTrimmedString(I?.fullname);return!(!A||C.players.includes(A)||(rememberRoomPlayers([I]),g.update({...C,players:[...C.players,A]}),0))}case"Room.RemovePlayer":{const A=extractNamedValue(I);return!!A&&(g.update({...C,players:C.players.filter(g=>g!==A)}),!0)}case"Char.Items.List":return!!isRoomLocation(I)&&(g.update({...C,...splitRoomEntries(extractRoomItemList(I))}),!0);case"Char.Items.Add":case"Char.Items.Update":{if(!isRoomLocation(I))return!1;const A=extractRoomItemEntry(I);if(!A)return!1;const e=getRoomEntryId(A),t=null==e?C.npcs:removeRoomItemEntry(C.npcs,e),n=null==e?C.items:removeRoomItemEntry(C.items,e);return g.update({...C,npcs:isRoomNpcItem(A)?upsertRoomItemEntry(t,A):t,items:isRoomNpcItem(A)?n:upsertRoomItemEntry(n,A)}),!0}case"Char.Items.Remove":{if(!isRoomLocation(I))return!1;const A=getRoomEntryId(extractRoomItemEntry(I));return!!A&&(g.update({...C,npcs:removeRoomItemEntry(C.npcs,A),items:removeRoomItemEntry(C.items,A)}),!0)}default:return!1}};return Object.freeze({apply})},z=Object.freeze({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"}),escapeHtml=g=>String(g??"").replace(/[&<>"']/g,g=>z[g]),Z=Object.freeze({amp:"&",lt:"<",gt:">",quot:'"',apos:"'",nbsp:" "}),stripHtml=g=>{if(!g||"string"!=typeof g)return g??"";let A=g.replace(/<[^>]+>/g,"");return A=A.replace(/&([^;]+);/g,(g,A)=>{if(Z[A])return Z[A];if(A.startsWith("#")){const g=A.startsWith("#x")?parseInt(A.substring(2),16):parseInt(A.substring(1),10);if(!isNaN(g))return String.fromCharCode(g)}return g}),A},F=Object.freeze({"a monolith sigil":{color:"red",text:"A MONOLITH SIGIL"},"a cube sigil":{color:"yellow",text:"A CUBE SIGIL"},"some gold sovereigns":{color:"gold",text:"GOLD COINS"}}),K=Object.freeze({angle:Object.freeze({open:"<",close:">"}),square:Object.freeze({open:"[",close:"]"}),curly:Object.freeze({open:"{",close:"}"}),round:Object.freeze({open:"(",close:")"})}),styleAttribute$2=g=>{const A=Object.entries(g).filter(([,g])=>g);return 0===A.length?"":` style="${A.map(([g,A])=>`${g}: ${A}`).join("; ")}"`},createTextSegment=(g,A,I={})=>({text:g,color:A,italic:Boolean(I.italic),bold:Boolean(I.bold)}),renderSegmentHtml=g=>`<span${styleAttribute$2({color:g.color,"font-style":g.italic?"italic":null,"font-weight":g.bold?"700":null})}>${escapeHtml(g.text)}</span>`,createStaticRule=(g,A,I,C)=>Object.freeze({family:"room-text",id:g,gate:A,pattern:I,createMarker:()=>C}),createDirectionalRule=(g,A,I,C,e,t,n,a)=>Object.freeze({family:"room-text",id:g,gate:A,pattern:I,createMarker:g=>({frame:C,frameColor:e,segments:[createTextSegment(t,n),createTextSegment(capitalizeFirst(g?.groups?.direction),a)]})}),createSigilRule=(g,A,I,C,e)=>createStaticRule(g,A,I,{frame:"curly",frameColor:"yellow",segments:[createTextSegment("Sigil: ","silver"),createTextSegment(C,e)]}),createRuneRule=(g,A,I,C)=>createStaticRule(g,A,I,{frame:"round",frameColor:"red",segments:[createTextSegment("Rune: ","silver"),createTextSegment(C,"aquamarine")]}),createConquestRule=(g,A,I,C,e)=>createStaticRule(g,A,I,{frame:null,frameColor:null,leftIcons:[{id:"shield-halved",colors:["silver",e],size:12}],rightIcons:[{id:"shield-halved",colors:[e,"silver"],size:12}],segments:[createTextSegment(" Conquest: ","slategray"),createTextSegment(C,e)]}),Y=Object.freeze([createStaticRule("totem","runic totem",/A runic totem is planted solidly in the ground\./,{frame:"angle",frameColor:"dodgerblue",segments:[createTextSegment("TOTEM","Tomato")]}),createStaticRule("frozenGround","slick with",/The ground is slick with ice\./,{frame:"angle",frameColor:"dodgerblue",segments:[createTextSegment("Frozen Ground","PowderBlue")]}),createStaticRule("graveHands","rotting flesh",/Hands of rotting flesh and white bone push up from the ground/,{frame:"angle",frameColor:"crimson",segments:[createTextSegment("Gravehands","Beige")]}),createDirectionalRule("icewall","icewall",/An icewall is here, blocking passage to the (?<direction>\w+)\./,"square","red","Icewall: ","dodgerblue","aquamarine"),createDirectionalRule("stonewall","wall of stone",/A large wall of stone stands here, blocking passage to the (?<direction>\w+)\./,"square","red","Stonewall: ","silver","aquamarine"),createSigilRule("cubeSigil","cube",/Resting on the ground is a cube-shaped silver sigil\./,"Cube","aquamarine"),createSigilRule("eyeSigil","obsidian",/An obsidian eye sigil is here\./,"Eye","lightgreen"),createSigilRule("monolithSigil","monolith",/A sigil in the shape of a small, rectangular monolith is on the ground\./,"Monolith","red"),createSigilRule("keySigil","key-shaped",/Lying flat on the ground is a key-shaped sigil\./,"Key","lightPink"),createRuneRule("kena","nightmares",/A rune that looks like something out of your nightmares has been sketched into the ground here\./,"Kena"),createRuneRule("uruz","lightning bolt",/A rune like a lightning bolt has been sketched into the ground here\./,"Uruz"),createRuneRule("fehu","closed eye",/A rune like a closed eye has been sketched into the ground here\./,"Fehu"),createRuneRule("pithikhan","square box",/A rune resembling a square box has been sketched into the ground here\./,"Pithikhan"),createRuneRule("inguz","stick man",/A rune that looks like a stick man has been sketched into the ground here\./,"Inguz"),createRuneRule("wunjo","open eye",/A rune like an open eye has been sketched into the ground here\./,"Wunjo"),createRuneRule("sowulu","a nail",/A rune that looks like a nail has been sketched into the ground here\./,"Sowulu"),createRuneRule("isaz","flurry of lighning",/A rune like a flurry of lightning bolts has been sketched into the ground here\./,"Isaz"),createRuneRule("dagaz","rising sun",/A rune like a rising sun has been sketched into the ground here\./,"Dagaz"),createRuneRule("raido","resembling a horse",/A rune resembling a horse has been sketched into the ground here\./,"Raido"),createRuneRule("nauthiz","resembling a leech",/A rune resembling a leech has been sketched into the ground here\./,"Nauthiz"),createRuneRule("mannaz","resembling a bell",/A rune resembling a bell has been sketched into the ground here\./,"Mannaz"),createRuneRule("othala","resembling a mountain",/A rune resembling a mountain range has been sketched into the ground here\./,"Othala"),createRuneRule("sleizak","resembling a viper",/A rune resembling a viper has been sketched into the ground here\./,"Sleizak"),createRuneRule("tiwaz","upward-pointing arrow",/A rune like an upward-pointing arrow has been sketched into the ground here\./,"Tiwaz"),createRuneRule("nairat","like a butterfly",/A rune shaped like a butterfly has been sketched into the ground here\./,"Nairat"),createRuneRule("eihwaz","like a yew",/A rune shaped like a yew has been sketched into the ground here\./,"Eihwaz"),createConquestRule("conquestAshtan","warp-touched",/Crackling ozone heralds warp-touched mirage, their coming the advent of change\./,"Ashtan ","#990099"),createConquestRule("conquestCyrene","draconic tracks",/Bound in ice, draconic tracks scribe a glittering path across the earth\./,"Cyrene ","#009999"),createConquestRule("conquestNeraeos","Cerulean waters",/Cerulean waters preside, fathom and depths stirred to roiling currents by the pervasive will of Neraeos Pelagia, Lord of the Sea\./,"Cyrene ","#009999"),createConquestRule("conquestEleusis","fecundity",/Nature's fecundity floods the surrounds with the clamour of life in a chittering refrain\./,"Eleusis ","#00e600"),createConquestRule("conquestHashan","leaden shadow",/Lines of leaden shadow coil underfoot, turning earth to metal by alchemical writ\./,"Hashan ","#999900"),createConquestRule("conquestMhaldor","red-hued",/A noxious, red-hued fog overwhelms the area with a thick, palpable vapour\./,"Mhaldor ","#e60000"),createConquestRule("conquestTargossas","mien",/Radiant light joins with calescent heat, suffusing the area with a harsh, blinding mien\./,"Targossas ","#ffffff"),createConquestRule("conquestUnderworld","ashen earth",/Soul's blood pools on ashen earth turned dust, an inviolable call to death's advance\./,"Underworld ","tomato")]),V=new Map,W=new Set,notifyOverrideSubscribers=()=>{for(const g of W)g()},subscribeToRoomItemOverrides=g=>(W.add(g),()=>W.delete(g)),setUserRoomItemOverride=(g,A)=>{const I=normalizeLookupKey(g);I&&(V.set(I,A),notifyOverrideSubscribers())},removeUserRoomItemOverride=g=>{const A=normalizeLookupKey(g);A&&(V.delete(A),notifyOverrideSubscribers())},getUserRoomItemOverride=g=>{const A=normalizeLookupKey(g);return A?V.get(A)??null:null},listUserRoomItemOverrides=()=>Array.from(V.entries()),getRoomItemOverride=g=>{if("string"==typeof g){const A=normalizeLookupKey(g);return V.get(A)??F[A]??null}if(!g||"object"!=typeof g)return null;const A=normalizeLookupKey(g.id),I=normalizeLookupKey(g.name);return V.get(A)??V.get(I)??F[A]??F[I]??null},renderRoomMarkerHtml=(g,A={})=>{const I=g.frame?K[g.frame]:null,C=A.iconRenderer,e=Array.isArray(g.leftIcons)?g.leftIcons.map(g=>C?.(g)??"").join(""):"",t=Array.isArray(g.rightIcons)?g.rightIcons.map(g=>C?.(g)??"").join(""):"";return[e,I?renderSegmentHtml(createTextSegment(I.open,g.frameColor,{bold:!0})):"",g.segments.map(renderSegmentHtml).join(""),I?renderSegmentHtml(createTextSegment(I.close,g.frameColor,{bold:!0})):"",t].join("")},matchRoomTextReplacements=g=>isNonEmptyString(g)?Y.flatMap(A=>{if(!g.includes(A.gate))return[];const I=g.match(A.pattern);return I?[{rule:A,match:I,marker:A.createMarker(I)}]:[]}):[],replaceRoomText=(g,A={})=>{if(!isNonEmptyString(g))return g;let I=g;for(const{rule:C,match:e,marker:t}of matchRoomTextReplacements(g))I=I.replace(C.pattern,renderRoomMarkerHtml(t,A));return I},createWormholeExitDescriptor=({warp:g,currentArea:A}={})=>{if(!g||"object"!=typeof g)return null;const I=A&&A===g.area?g.name:g.areaName;return isNonEmptyString(I)?{family:"room-exit",command:"worm warp",label:`Wormhole: (${I})`}:null},renderWormholeExitHtml=g=>g?`<span>, and <a class="mxp_send" href="#" rel="${escapeHtml(g.command)}">${escapeHtml(g.label)}</a>.</span>`:"",extractPartyChatPayload=g=>{if(!isPlainObject(g)||"party"!==toTrimmedString(g.channel)?.toLowerCase())return null;const A=toTrimmedString(g.talker),I=stripAnsi(g.text);return A&&I?{talker:A,message:I.match(/^\(Party\): (\w+) says, "(.+)"$/)?.[2]??I}:null},capitalizeLookupName=g=>`${g.charAt(0).toUpperCase()}${g.slice(1)}`,createPartyAutomationModel=({characterModel:g,partyModel:A,playerDirectory:I,sendCommand:C}={})=>{const send=g=>{"function"==typeof C&&C(g)},processChannelText=C=>{const e=extractPartyChatPayload(C);if(!e)return!1;const t=A.snapshot();if(!t.settings.targetCalls||e.talker!==t.leader)return!1;const n=e.message.match(/^Target: (.+)\.$/)??e.message.match(/^(?:Target|TARGET) (.+)\.$/);if(n){const A=toTrimmedString(n[1]);if(!A)return!1;const C=g.snapshot(),e=I.getPlayerProfile(C.name)?.city??"",t=I.getPlayerProfile(capitalizeLookupName(A))??I.getPlayerProfile(A);return!(t?.city&&e&&t.city===e||(send(`settarget ${A}`),send(`enemy ${A}`),0))}const a=e.message.match(/^Enemy (.+)\.$/);if(a){const g=toTrimmedString(a[1]);if(g)return send(`enemy ${g}`),!0}return!1},processEvent=(g,A)=>"Comm.Channel.Text"===g&&processChannelText(A);return Object.freeze({processChannelText,processEvent})},freezeMethodGroups=g=>Object.freeze(Object.fromEntries(Object.entries(g).map(([g,A])=>[g,Object.freeze([...A])]))),U=freezeMethodGroups({commands:["send","sendGmcp"],variables:["getVariable","setVariable"],target:["getTarget","setTarget"],output:["notice","displayHtmlLine","gagCurrentBlock"],host:["getHostSettings","setHostSetting","getHostLayoutSnapshot","updateHostLayoutAttributes","focusInput","getConfiguredDefences","getActiveDefences"],events:["on","off"],lifecycle:["destroy"]}),H=Object.freeze(Object.values(U).flat()),assertAdapterContract=g=>{const A=H;for(const I of A)if("function"!=typeof g?.[I])throw new Error(`[nexGui4] Adapter missing required method: "${I}"`);return g},normalizeConfiguredDefenceList=g=>{if(!Array.isArray(g))return[];const A=new Set;return g.reduce((g,I)=>{if("string"!=typeof I)return g;const C=I.trim();return!C||A.has(C)||(A.add(C),g.push(C)),g},[])},createDefenceStore=({defenceModel:g,eventBus:A,configuredDefences:C=[]})=>{const readDefences=()=>g.read?.()??g.snapshot(),e=(0,I.create)(()=>({defences:readDefences(),configuredDefences:normalizeConfiguredDefenceList(C),gainDefence:A=>g.gain(A),loseDefence:A=>g.lose(A),resetDefences:()=>{g.reset(),e.setState({defences:readDefences()})},setConfiguredDefences:g=>{e.setState({configuredDefences:normalizeConfiguredDefenceList(g)})}})),refreshDefences=()=>{e.setState({defences:readDefences()})};return A.on(x.DEFENCE_GAINED,refreshDefences),A.on(x.DEFENCE_LOST,refreshDefences),A.on(x.DEFENCES_REPLACED,refreshDefences),e},isRecord=g=>"[object Object]"===Object.prototype.toString.call(g),extractDefenceName=g=>"string"==typeof g?g:isRecord(g)&&"string"==typeof g.name?g.name:null,removeTrackedHandler=(g,A,I)=>{const C=g.get(A);if(C){if("string"==typeof I)C.delete(I);else for(const[g,A]of C.entries())if(A===I){C.delete(g);break}0===C.size&&g.delete(A)}},normalizeListenerIdSegment=g=>String(g).replace(/[^A-Za-z0-9]+/g,"-").replace(/^-+|-+$/g,"").replace(/-{2,}/g,"-"),createDefaultListenerId=(g,A)=>{const I=`nexGui4-${normalizeListenerIdSegment(g)||"event"}`;if(!A||0===A.size)return I;let C=A.size+1,e=`${I}-${C}`;for(;A.has(e);)C+=1,e=`${I}-${C}`;return e},Q="#00B1D2",X=`<span style="color:${Q};">[-</span><span style="color:#FDDB27;">nexGui</span><span style="color:${Q};">-] </span>`,renderNoticeHtml=(g,A)=>{if(A?.html)return X+String(g);const I=A&&"object"==typeof A?A.style:A,C=escapeHtml(g);return"string"==typeof I&&I.trim()?X+`<span style="color: ${escapeHtml(I.trim())};">${C}</span>`:X+C},getHostSettings=()=>nexusclient.settings?.()??{},getHostLayout=()=>nexusclient.ui?.()?.layout?.()??null,updateHostLayoutAttributes=g=>{const A=getHostLayout();A?.flexModel?.doAction&&"function"==typeof A.model&&A.flexModel.doAction({type:"FlexLayout_UpdateModelAttributes",data:{json:{...A.model()?.global??{},...g}}})},extractLegacyRuntimeConfiguredDefences=()=>normalizeConfiguredDefenceList(globalThis.nexGui?.defences),extractNexSysConfiguredDefences=()=>{const g=globalThis.nexSys?.defPrios,A=globalThis.nexSys?.defs;if("[object Object]"!==Object.prototype.toString.call(g)||"[object Object]"!==Object.prototype.toString.call(A))return[];const I=Object.entries(g.keepup??{}).filter(([,g])=>Boolean(g)).map(([g])=>g).filter(g=>Boolean(A?.[g]?.prio)),C=Object.entries(g.static??{}).filter(([,g])=>Boolean(g)).map(([g])=>g).filter(g=>Boolean(A?.[g]?.prio));return normalizeConfiguredDefenceList([...I,...C])},resolveConfiguredDefences=()=>{const g=extractLegacyRuntimeConfiguredDefences();return g.length>0?g:extractNexSysConfiguredDefences()},extractActiveDefencesFromGmcpNode=g=>Array.isArray(g)?normalizeConfiguredDefenceList(g.map(extractDefenceName).filter(Boolean)):isRecord(g)?Array.isArray(g.defences)?extractActiveDefencesFromGmcpNode(g.defences):normalizeConfiguredDefenceList(Object.entries(g).map(([g,A])=>extractDefenceName(A)??g)):[],extractGmcpActiveDefences=()=>normalizeConfiguredDefenceList([...extractActiveDefencesFromGmcpNode(globalThis.GMCP?.Defences),...extractActiveDefencesFromGmcpNode(globalThis.GMCP?.Char?.Defences)]),extractNexSysActiveDefences=(g=[])=>{const A=globalThis.nexSys?.api?.defs?.have;return"function"!=typeof A?[]:normalizeConfiguredDefenceList(g).filter(g=>{try{return Boolean(A(g))}catch{return!1}})},resolveActiveDefences=(g=[])=>normalizeConfiguredDefenceList([...extractGmcpActiveDefences(),...extractNexSysActiveDefences(g)]),createNexusAdapter=({playerRelationships:g}={})=>{const A=new Map;return assertAdapterContract({send:A=>(g?.trackRelationshipCommand?.(A),nexusclient.send_commands(A)),sendGmcp:(g,A)=>nexusclient.datahandler().send_GMCP(g,A),getVariable:g=>nexusclient.variables().vars?.[g],setVariable:(g,A)=>{const I=nexusclient.variables();I.vars??={},I.vars[g]=A},getTarget:()=>null,setTarget:g=>{nexusclient.setTarget(g)},notice:(g,A)=>{if("function"==typeof nexusclient.add_html_line)return void nexusclient.add_html_line(renderNoticeHtml(g,A));const I=A&&"object"==typeof A?A.style:A;"function"==typeof nexusclient.writeLine&&nexusclient.writeLine(g,I)},displayHtmlLine:g=>{"function"==typeof nexusclient.add_html_line&&nexusclient.add_html_line(String(g))},getHostSettings,setHostSetting:(g,A)=>{getHostSettings()[g]=A},getHostLayoutSnapshot:()=>getHostLayout()?.model?.()?.global??{},updateHostLayoutAttributes,focusInput:()=>{nexusclient.focusInput?.()},getConfiguredDefences:resolveConfiguredDefences,getActiveDefences:resolveActiveDefences,gagCurrentBlock:()=>nexusclient.current_block?.forEach(g=>g.gag=!0),on:(g,I,C)=>{A.has(g)||A.set(g,new Map);const e=A.get(g),t=null!=C?.id?C:{...C,id:createDefaultListenerId(g,e)},n=eventStream.registerEvent(g,I,t);return A.get(g).set(n,I),()=>{eventStream.removeListener(g,n),removeTrackedHandler(A,g,n)}},off:(g,I)=>{eventStream.removeListener(g,I),removeTrackedHandler(A,g,I)},destroy:()=>{for(const[g,I]of A.entries())for(const A of I.keys())eventStream.removeListener(g,A);A.clear()}})},J=Object.freeze({"(hidden)":"orange","(none)":"orange",ashtan:"#990099",cyrene:"#009999",eleusis:"#00e600",hashan:"#999900",mhaldor:"#e60000",targossas:"#ffffff",garden:"yellow",underworld:"tomato"}),normalizePlayerCityKey=g=>{if(!isNonEmptyString(g))return"";const A=g.trim().toLowerCase();return"(hidden)"===A||"(none)"===A?A:A.replace(/\(.+?\)/g,"").replace(/,.*$/g,"").trim()},getPlayerCityColor=(g,A="orange")=>{const I=normalizePlayerCityKey(g);return I?J[I]??A:A},resolveRoomPlayerName=(g,A)=>isNonEmptyString(g)?g.trim():isPlainObject(g)?isNonEmptyString(g.name)?g.name.trim():isNonEmptyString(g.fullname)?A?.resolvePlayerNameFromFullname?.(g.fullname)??"":"":"",buildFallbackPlayerProfile=(g,A)=>{if(!isPlainObject(g))return null;const I={loaded:!0,name:A};return isNonEmptyString(g.city)&&(I.city=normalizePlayerCityKey(g.city)),isNonEmptyString(g.class)&&(I.class=g.class.trim()),isNonEmptyString(g.fullname)&&(I.fullname=g.fullname.trim()),"number"==typeof g.level&&Number.isFinite(g.level)?I.level=g.level:isNonEmptyString(g.level)&&(I.level=g.level.trim()),Object.keys(I).length>2?I:null},mergePlayerPresentationProfile=(g,A)=>g?A?{...A,...g,loaded:!0===g.loaded||!0===A.loaded}:g:A,resolvePlayerPresentationColor=({name:g,profile:A,playerDirectory:I}={})=>!0===A?.loaded&&isNonEmptyString(A.city)?getPlayerCityColor(A.city):I?.getPlayerColor?.(N(g))??"grey",q=Object.freeze(["ashtan","cyrene","eleusis","hashan","mhaldor","targossas","(none)","(hidden)","underworld","garden"]),_='<span style="color:#888888">No players are visible to Quick Who.</span>',$="#aaaaaa",gg="#00B1D2",Ag="#888888",Ig='<span style="color:#666666">, </span>',Cg="padding:0 10px 0 0;vertical-align:top;white-space:nowrap;min-width:5ch",eg="#ffffff",tg="#ff0000",toProperCase=g=>String(g).replace(/\b[a-z]/g,g=>g.toUpperCase()),resolveQuickWhoCity=g=>{const A=normalizePlayerCityKey(g);return q.includes(A)?A:"(none)"},renderQuickWhoName=({name:g,color:A,ally:I,enemy:C,cityEnemy:e})=>{const t=`<span style="${e?`color:${A};font-style:italic`:`color:${A}`}">${escapeHtml(g)}</span>`;if(I||C){const g=`<span style="color:${I?eg:tg};font-weight:bold">`;return`${g}(</span>${t}${g})</span>`}return t},renderQuickWhoHtml=(g,{totalLine:A}={})=>{const I=new Map;let C=0;for(const n of Array.isArray(g)?g:[]){if(!isNonEmptyString(n?.name))continue;const g=resolveQuickWhoCity(n.city);I.has(g)||I.set(g,[]),I.get(g).push({name:n.name.trim(),color:getPlayerCityColor(g),ally:!0===n.ally,enemy:!0===n.enemy,cityEnemy:!0===n.cityEnemy}),C+=1}if(0===C)return _;const e=q.filter(g=>I.has(g)).map(g=>{const A=I.get(g),C=A.map(renderQuickWhoName).join(Ig);return`<tr><td style="color:${getPlayerCityColor(g)};font-weight:bold;padding:0 10px 0 0;vertical-align:top;white-space:nowrap">${escapeHtml(toProperCase(g))}</td><td style="color:${$};${Cg}">(${A.length})</td><td style="vertical-align:top">${C}</td></tr>`}).join(""),t=`text-align:left;color:${gg};padding:0 10px 3px 0;white-space:nowrap`;return`<table style="border-collapse:collapse"><thead><tr><th style="${t}">City</th><th style="${t};min-width:5ch">Count</th><th style="text-align:left;color:${gg};padding:0 0 3px 0;white-space:nowrap">Players</th></tr></thead><tbody>${e}<tr><td colspan="3" style="color:${Ag};padding-top:3px">${escapeHtml(isNonEmptyString(A)?A:`Total: ${C} player${1===C?"":"s"}`)}</td></tr></tbody></table>`},cloneProfileValue=g=>Array.isArray(g)||isPlainObject(g)?structuredClone(g):g,sanitizeProfilePatch=(g={})=>{if(!isPlainObject(g))return{};const A={};for(const[I,C]of Object.entries(g))"name"!==I&&"regex"!==I&&"user"!==I&&("loaded"!==I?"city"!==I?"fullname"!==I?"source"!==I?"loadedAt"!==I&&"remoteSyncedAt"!==I?null!=C&&("string"!=typeof C?("number"==typeof C||"boolean"==typeof C||Array.isArray(C)||isPlainObject(C))&&(A[I]=cloneProfileValue(C)):C.trim().length>0&&(A[I]=C.trim())):"number"==typeof C&&Number.isFinite(C)?A[I]=C:null===C&&(A[I]=null):"local"!==C&&"public"!==C&&"remote"!==C||(A.source=C):isNonEmptyString(C)&&(A.fullname=C.trim()):isNonEmptyString(C)&&(A.city=normalizePlayerCityKey(C)):A.loaded=!0===C);return A},resolveFetch$1=g=>"function"==typeof g?g:null,createPlayerDirectoryModel=({fetchImpl:g,now:A=()=>0}={})=>{const I=new Map,C=new Map,e=new Map,t=new Map,n=new Set;let a=0;const notifyListeners=()=>{a+=1,n.forEach(g=>{try{g()}catch{}})},upsertProfile=(g,A={})=>{const t=N(g);if(!t)return;const n={...I.get(t)??{name:t,city:"",fullname:"",loaded:!1,source:"local",loadedAt:null,remoteSyncedAt:null},...sanitizeProfilePatch(A),name:t};I.set(t,n),e.set(normalizeLookupKey(t),t),isNonEmptyString(n.fullname)&&C.set(n.fullname.trim(),t),notifyListeners()},resolveStoredName=g=>{const A=N(g);return A?I.has(A)?A:e.get(normalizeLookupKey(A))??A:""},getStoredProfileByNormalizedName=g=>g&&I.has(g)?I.get(g)??null:null,getPlayerProfile=g=>{const A=getStoredProfileByNormalizedName(resolveStoredName(g));return A?{...A}:null},fetchCharacterProfile=async I=>{const C=N(I),e=resolveStoredName(I),n=normalizeLookupKey(I);if(!C)return null;if(t.has(n))return t.get(n);const a=resolveFetch$1(g);if("function"!=typeof a)return e?getPlayerProfile(e):null;const r=(async()=>{try{const g=await a(`https://api.achaea.com/characters/${C.toLowerCase()}.json`,{cache:"no-store"});if(!g.ok)return e?getPlayerProfile(e):null;const I=await g.json(),t=resolveStoredName(I?.name??C);return upsertProfile(t,{...I,loaded:!0,source:"public",loadedAt:A()}),getPlayerProfile(t)}catch{return e?getPlayerProfile(e):null}finally{t.delete(n)}})();return t.set(n,r),r},refreshPlayerProfile=async g=>{const A=await fetchCharacterProfile(g);if(A)return A;const I=resolveStoredName(g);return I?getPlayerProfile(I):null},subscribePlayerDirectory=g=>(n.add(g),()=>{n.delete(g)}),rememberPlayerStatus=({name:g,city:A,fullname:I,...C}={})=>{const e=N(g);e&&upsertProfile(e,{...C,name:e,city:A,fullname:I,loaded:!0})},rememberChannelPlayers=g=>{Array.isArray(g)&&g.forEach(g=>{const A=N(g?.name);A&&(upsertProfile(A,{fullname:g?.fullname}),I.get(A)?.loaded||fetchCharacterProfile(A))})},rememberRoomPlayers=g=>{Array.isArray(g)&&g.forEach(g=>{const A=N(g?.name??g);A&&(upsertProfile(A,{fullname:g?.fullname}),I.get(A)?.loaded||fetchCharacterProfile(A))})},resolvePlayerNameFromFullname=g=>{if(!isNonEmptyString(g))return"";const A=g.trim();return C.get(A)||N(A.split(/\s+/).at(-1))},getPlayerColorByNormalizedName=g=>{const A=getStoredProfileByNormalizedName(g);return A?.loaded&&A.city?getPlayerCityColor(A.city):"grey"},getPlayerColor=g=>getPlayerColorByNormalizedName(resolveStoredName(g)),resetPlayerDirectory=()=>{I.clear(),C.clear(),e.clear(),t.clear(),notifyListeners()},hydrateFromCacheEntries=g=>{Array.isArray(g)&&g.forEach(g=>{const A=N(g?.name);A&&upsertProfile(A,{...g,loaded:!0})})},hydrateFromRemoteEntries=g=>{if(!Array.isArray(g))return;const I=A();g.forEach(g=>{const A=N(g?.name);A&&upsertProfile(A,{...g,loaded:!0,source:"remote",remoteSyncedAt:I})})},getAllPlayerProfiles=()=>Array.from(I.values()).map(g=>({...g})),getKnownPlayerNames=()=>Array.from(I.keys()),destroy=()=>{I.clear(),C.clear(),e.clear(),t.clear(),n.clear()};return Object.freeze({getAllPlayerProfiles,getKnownPlayerNames,getPlayerColor,getPlayerColorByNormalizedName,getPlayerProfile,getVersion:()=>a,hydrateFromCacheEntries,hydrateFromRemoteEntries,refreshPlayerProfile,rememberChannelPlayers,rememberPlayerStatus,rememberRoomPlayers,resetPlayerDirectory,resolvePlayerNameFromFullname,subscribePlayerDirectory,destroy})},ng=createPlayerDirectoryModel(),getDefaultPlayerDirectoryModel=()=>ng,getPlayerProfile=g=>ng.getPlayerProfile(g),updateSetMembership=(g,A,I)=>{if(!A)return!1;const C=g.has(A);return I&&!C?(g.add(A),!0):!(I||!C||(g.delete(A),0))},normalizeNames=g=>Array.isArray(g)?new Set(g.map(g=>N(g)).filter(Boolean)):new Set,replaceSetContents=(g,A)=>{const I=normalizeNames(A);let C=!1;return[...g].forEach(A=>{I.has(A)||(g.delete(A),C=!0)}),I.forEach(A=>{g.has(A)||(g.add(A),C=!0)}),C},createPlayerRelationshipsModel=()=>{const g=new Set,A=new Set,I=new Set,C=new Set;let e=0;const notifyListeners=()=>{e+=1,C.forEach(g=>{try{g()}catch{}})},subscribePlayerRelationships=g=>(C.add(g),()=>{C.delete(g)}),rememberEnemyPlayer=I=>{const C=N(I),e=updateSetMembership(g,C,!0),t=updateSetMembership(A,C,!1);(e||t)&&notifyListeners()},rememberAllyPlayer=I=>{const C=N(I),e=updateSetMembership(A,C,!0),t=updateSetMembership(g,C,!1);(e||t)&&notifyListeners()},forgetEnemyPlayer=A=>{updateSetMembership(g,N(A),!1)&&notifyListeners()},forgetAllyPlayer=g=>{updateSetMembership(A,N(g),!1)&&notifyListeners()},rememberCityEnemyPlayer=g=>{updateSetMembership(I,N(g),!0)&&notifyListeners()},isEnemyPlayerByNormalizedName=A=>g.has(A),isAllyPlayerByNormalizedName=g=>A.has(g),isCityEnemyPlayerByNormalizedName=g=>I.has(g),isEnemyPlayer=g=>isEnemyPlayerByNormalizedName(N(g)),isAllyPlayer=g=>isAllyPlayerByNormalizedName(N(g)),isCityEnemyPlayer=g=>isCityEnemyPlayerByNormalizedName(N(g)),replaceEnemyPlayers=I=>{const C=normalizeNames(I);let e=replaceSetContents(g,[...C]);C.forEach(g=>{e=updateSetMembership(A,g,!1)||e}),e&&notifyListeners()},replaceAllyPlayers=I=>{const C=normalizeNames(I);let e=replaceSetContents(A,[...C]);C.forEach(A=>{e=updateSetMembership(g,A,!1)||e}),e&&notifyListeners()},replaceCityEnemyPlayers=g=>{replaceSetContents(I,g)&&notifyListeners()},trackRelationshipCommand=g=>{if(!isNonEmptyString(g))return;const A=g.trim(),I=A.match(/^enemy\s+(.+)$/i);if(I)return void rememberEnemyPlayer(I[1]);const C=A.match(/^ally\s+(.+)$/i);if(C)return void rememberAllyPlayer(C[1]);const e=A.match(/^city enemy\s+(.+)$/i);e&&rememberCityEnemyPlayer(e[1])},resetPlayerRelationships=()=>{g.clear(),A.clear(),I.clear(),notifyListeners()},destroy=()=>{g.clear(),A.clear(),I.clear(),C.clear()};return Object.freeze({forgetAllyPlayer,forgetEnemyPlayer,getVersion:()=>e,isAllyPlayer,isAllyPlayerByNormalizedName,isCityEnemyPlayer,isCityEnemyPlayerByNormalizedName,isEnemyPlayer,isEnemyPlayerByNormalizedName,rememberAllyPlayer,rememberCityEnemyPlayer,rememberEnemyPlayer,replaceAllyPlayers,replaceCityEnemyPlayers,replaceEnemyPlayers,resetPlayerRelationships,subscribePlayerRelationships,trackRelationshipCommand,destroy})},ag=createPlayerRelationshipsModel(),getDefaultPlayerRelationshipsModel=()=>ag,rg=25,cloneDiagnosticValue=g=>Array.isArray(g)?g.map(g=>cloneDiagnosticValue(g)):isPlainObject(g)?Object.fromEntries(Object.entries(g).map(([g,A])=>[g,cloneDiagnosticValue(A)])):g,toPublicEntry=({_signature:g,...A})=>cloneDiagnosticValue(A),buildSignature=({channel:g,action:A,status:I,name:C=null,detail:e=null})=>JSON.stringify([g,A,I,C,e]),createPlayerDirectoryDiagnosticsModel=({historyLimit:g=rg,now:A=()=>0}={})=>{let I=[],C={};const recordPlayerDirectoryDiagnostic=({channel:e,action:t,status:n,name:a=null,detail:r=null})=>{const o=buildSignature({channel:e,action:t,status:n,name:a,detail:r}),i=A(),l=I.at(-1);if(l?._signature===o)return l.at=i,l.count+=1,void(C[e]=toPublicEntry(l));I.push({at:i,channel:e,action:t,status:n,...a?{name:a}:{},...null==r?{}:{detail:cloneDiagnosticValue(r)},count:1,_signature:o}),I.length>g&&I.splice(0,I.length-g),C[e]=toPublicEntry(I.at(-1))},getPlayerDirectoryDiagnosticsSnapshot=()=>({latest:cloneDiagnosticValue(C),history:I.map(g=>toPublicEntry(g))}),resetPlayerDirectoryDiagnostics=()=>{I=[],C={}};return Object.freeze({getPlayerDirectoryDiagnosticsSnapshot,recordPlayerDirectoryDiagnostic,resetPlayerDirectoryDiagnostics,destroy:resetPlayerDirectoryDiagnostics})},og=createPlayerDirectoryDiagnosticsModel(),getDefaultPlayerDirectoryDiagnosticsModel=()=>og,recordPlayerDirectoryDiagnostic=g=>og.recordPlayerDirectoryDiagnostic(g),toInt=g=>{if("number"==typeof g)return Number.isFinite(g)?Math.trunc(g):null;if("string"!=typeof g)return null;const A=g.trim().replace(/,/g,"").replace(/(\d)\s*[kK]\b/g,"$1000").replace(/(\d)\s*[mM]\b/g,"$1000000");if(!A)return null;const I=Number.parseInt(A,10);return Number.isNaN(I)?null:I},ig=C.z.preprocess(g=>"string"==typeof g?g.trim():"",C.z.string()),lg=C.z.preprocess(toInt,C.z.number().int().nullable()),sg=C.z.object({name:C.z.preprocess(g=>"string"==typeof g?g.trim():"",C.z.string().min(1)),fullname:ig,city:ig,house:ig,class:ig,level:lg,mob_kills:lg,player_kills:lg,xp_rank:lg,explorer_rank:lg,user:C.z.string().trim().min(1).optional()}),cg=Object.freeze({DISABLED:"disabled",OK:"ok",UNAVAILABLE:"unavailable",REJECTED:"rejected"}),httpStatusToRemoteStatus=g=>401===g||403===g?cg.REJECTED:g>=500||0===g?cg.UNAVAILABLE:g>=200&&g<300?cg.OK:cg.UNAVAILABLE,createNullRemotePlayerService=()=>({checkAvailability:async()=>cg.DISABLED,hydrateDirectory:async()=>({ok:!1,remoteStatus:cg.DISABLED}),upsertProfile:async()=>({ok:!1,remoteStatus:cg.DISABLED}),deleteProfile:async()=>({ok:!1,remoteStatus:cg.DISABLED}),queryCharacters:async()=>[]}),createLambdaRemotePlayerService=({apiUrl:g,apiKey:A="",fetchFn:I=null}={})=>{if("string"!=typeof g||!g.trim())return createNullRemotePlayerService();const C=g.trim(),e="function"==typeof I?I:null,call=async({method:g,params:I={},body:t})=>{const n=new URLSearchParams;for(const[A,C]of Object.entries(I))void 0!==C&&n.set(A,String(C));const a=n.toString()?`${C}?${n}`:C,r={"Content-Type":"application/json"};A&&(r["x-api-key"]=A);const o={method:g,headers:r};void 0!==t&&(o.body=JSON.stringify(t));const i=await e(a,o);return{status:i.status,ok:i.ok,response:i}};return{checkAvailability:async()=>{if("function"!=typeof e)return cg.UNAVAILABLE;try{const{status:g}=await call({method:"GET",params:{check:"auth"}});return httpStatusToRemoteStatus(g)}catch{return cg.UNAVAILABLE}},hydrateDirectory:async()=>{if("function"!=typeof e)return{ok:!1,remoteStatus:cg.UNAVAILABLE};try{const{status:g,ok:A,response:I}=await call({method:"GET"}),C=httpStatusToRemoteStatus(g);if(!A)return{ok:!1,remoteStatus:C};const e=await I.json();return{ok:!0,entries:Array.isArray(e)?e:[],remoteStatus:cg.OK}}catch{return{ok:!1,remoteStatus:cg.UNAVAILABLE}}},upsertProfile:async g=>{if("function"!=typeof e)return{ok:!1,remoteStatus:cg.UNAVAILABLE};const A=sg.safeParse(g);if(!A.success)return{ok:!1,remoteStatus:cg.REJECTED};try{const{status:g,ok:I}=await call({method:"POST",body:A.data});return{ok:I,remoteStatus:httpStatusToRemoteStatus(g)}}catch{return{ok:!1,remoteStatus:cg.UNAVAILABLE}}},deleteProfile:async g=>{if("function"!=typeof e)return{ok:!1,remoteStatus:cg.UNAVAILABLE};try{const{status:A,ok:I}=await call({method:"DELETE",params:{name:g}});return{ok:I,remoteStatus:httpStatusToRemoteStatus(A)}}catch{return{ok:!1,remoteStatus:cg.UNAVAILABLE}}},queryCharacters:async g=>{if("function"!=typeof e)return[];if(!g||"object"!=typeof g||Array.isArray(g)||0===Object.keys(g).length)return[];try{const{ok:A,response:I}=await call({method:"GET",params:{filter:JSON.stringify(g)}});if(!A)return[];const C=await I.json();return Array.isArray(C)?C:[]}catch{return[]}}}},ug="playerDirectory",mg="function"==typeof queueMicrotask?queueMicrotask:g=>Promise.resolve().then(g),resolvePlayerDirectory$1=g=>g??getDefaultPlayerDirectoryModel(),resolveDiagnostics=g=>g??getDefaultPlayerDirectoryDiagnosticsModel(),resolveCacheReader=(g,A)=>"function"==typeof g?g:"function"==typeof g?.readCache?g.readCache.bind(g):"function"==typeof A?A:null,resolveCacheWriter=(g,A)=>"function"==typeof g?g:"function"==typeof g?.writeCache?g.writeCache.bind(g):"function"==typeof A?A:null,parseStoredSnapshot=g=>Array.isArray(g)?g:null,createSnapshotSaver=(g,A)=>I=>{"function"==typeof I&&I(A,g.getAllPlayerProfiles().filter(g=>g.loaded&&(g.city||g.fullname)))},createPlayerDirectoryLifecycle=({playerDirectory:g,diagnostics:A,readCache:I,writeCache:C,storageKey:e=ug}={})=>{const t=resolvePlayerDirectory$1(g),n=resolveDiagnostics(A),a=createSnapshotSaver(t,e);let r=!1,o=null,i=!1,l=!1;const recordDiagnostic=g=>n.recordPlayerDirectoryDiagnostic(g),isDirectorySeeded=()=>r,resetSeededFlag=()=>{r=!1},warmDirectoryFromCache=g=>{const A=resolveCacheReader(g,I);try{const g=A?.(e),I=parseStoredSnapshot(g);null!==I&&I.length>0&&t.hydrateFromCacheEntries(I)}catch{}finally{r=!0}},saveDirectorySnapshot=g=>{a(resolveCacheWriter(g,C))},subscribePersistence=g=>{const A=resolveCacheWriter(g,C);if(o?.(),o=null,i=!1,l=!0,"function"!=typeof A||"function"!=typeof t.subscribePlayerDirectory)return l=!1,()=>{};const scheduleSave=()=>{l&&!i&&(i=!0,mg(()=>{i=!1,l&&saveDirectorySnapshot(A)}))};return o=t.subscribePlayerDirectory(scheduleSave),()=>{l=!1,o?.(),o=null}},refreshDirectoryFromRemote=async(g,A)=>{try{const I=await g.hydrateDirectory(),C=Array.isArray(I?.entries)?I.entries.length:0;recordDiagnostic({channel:"remote",action:"hydrateDirectory",status:I?.remoteStatus??cg.UNAVAILABLE,detail:{ok:!0===I?.ok,entryCount:C}}),I.ok&&Array.isArray(I.entries)&&I.entries.length>0&&(t.hydrateFromRemoteEntries(I.entries),saveDirectorySnapshot(A))}catch{recordDiagnostic({channel:"remote",action:"hydrateDirectory",status:cg.UNAVAILABLE,detail:{ok:!1,exception:!0}})}},reset=()=>{r=!1,i=!1,l=!1,o?.(),o=null,n.resetPlayerDirectoryDiagnostics?.()};return Object.freeze({destroy:reset,isDirectorySeeded,refreshDirectoryFromRemote,reset,resetSeededFlag,saveDirectorySnapshot,subscribePersistence,warmDirectoryFromCache})},dg=createPlayerDirectoryLifecycle(),isDirectorySeeded=()=>dg.isDirectorySeeded(),ACHAEA_CHARACTER_URL=g=>`https://api.achaea.com/characters/${g.toLowerCase()}.json`,pg=Object.freeze({OK:"ok",AUTHORITATIVE_FAILURE:"authoritative_failure",TRANSIENT_FAILURE:"transient_failure"}),fetchPublicProfileForSync=async(g,{fetchFn:A=null}={})=>{if("function"!=typeof A)return{outcome:pg.TRANSIENT_FAILURE,data:null};try{const I=await A(ACHAEA_CHARACTER_URL(g),{method:"GET",cache:"no-store"});if(!I.ok)return{outcome:I.status>=500?pg.TRANSIENT_FAILURE:pg.AUTHORITATIVE_FAILURE,data:null};const C=await I.json();return{outcome:pg.OK,data:C}}catch{return{outcome:pg.TRANSIENT_FAILURE,data:null}}},normalizeCrowdsourceCity=(g,A,{getPlayerProfile:I=getPlayerProfile}={})=>{if("Romeo"===A||"Juliet"===A)return"garden";const C="string"==typeof g?.city?g.city:"";if(""===C)return"garden";if("(hidden)"===C.toLowerCase()){const g=I(A)?.city??"";return g&&"(hidden)"!==g?g:"(none)"}return C},createCrowdsourceSyncHandler=({remoteService:g,getSelfName:A=()=>null,getPlayerProfile:I=getPlayerProfile,isSeeded:C=isDirectorySeeded,recordDiagnostic:e=recordPlayerDirectoryDiagnostic,fetchFn:t=null,fetchProfileForSync:n=g=>fetchPublicProfileForSync(g,{fetchFn:t}),maxConcurrent:a=3})=>{let r=[];const o=new Set,i=[],processOneName=async C=>{const t=A();if(t&&C===t)return;const{outcome:a,data:r}=await n(C);if(a===pg.OK&&r){const A=normalizeCrowdsourceCity(r,C,{getPlayerProfile:I}),n={...r,city:A};t&&(n.user=t);const a=await g.upsertProfile(n);return void(a?.ok||e({channel:"crowdsource",action:"upsertProfile",status:a?.remoteStatus??"unavailable",name:C}))}if(a===pg.AUTHORITATIVE_FAILURE){e({channel:"crowdsource",action:"publicProfileFetch",status:pg.AUTHORITATIVE_FAILURE,name:C});const A=await g.deleteProfile(C);return void e({channel:"crowdsource",action:"deleteProfile",status:A?.remoteStatus??"unavailable",name:C,detail:{ok:!0===A?.ok}})}e({channel:"crowdsource",action:"publicProfileFetch",status:pg.TRANSIENT_FAILURE,name:C})},drainQueue=()=>{for(;o.size<a&&i.length>0;){const g=i.shift();g&&!o.has(g)&&(o.add(g),processOneName(g).finally(()=>{o.delete(g),drainQueue()}))}},enqueue=g=>{for(const A of g)o.has(A)||i.includes(A)||i.push(A);drainQueue()};return g=>{if(!C())return;if(!Array.isArray(g))return;const A=g.map(g=>"string"==typeof g?.name?g.name.trim():"").filter(Boolean),I=A.filter(g=>!r.includes(g));r=[...A],I.length>0&&enqueue(I)}},isPresent=g=>null!=g&&String(g).length>0,classAttribute=g=>isPresent(g)?` class="${escapeHtml(g)}"`:"",styleAttribute$1=(g={})=>{const A=Object.entries(g??{}).filter(([,g])=>isPresent(g)).map(([g,A])=>`${escapeHtml(g)}:${escapeHtml(A)}`).join(";");return A?` style="${A};"`:""},titleAttribute=g=>isPresent(g)?` title="${escapeHtml(g)}"`:"",span=(g,{className:A=null,style:I=null}={})=>`<span${classAttribute(A)}${styleAttribute$1(I)}>${g}</span>`,textNode=g=>({kind:"text",text:g}),classTextNode=(g,A)=>({kind:"class-text",className:g,text:A}),styledTextNode=(g,{className:A=null,fg:I=null,bg:C=null}={})=>({kind:"styled-text",className:A,text:g,fg:I,bg:C}),relationshipNameNode=g=>({kind:"relationship-name",descriptor:g}),iconBandingNode=({icon:g,colors:A,size:I,children:C})=>({kind:"icon-banding",icon:g,colors:A,size:I,children:C}),hg=Object.freeze({className:"ng-target-format",borderColor:"rgb(255, 0, 0)",boxShadow:"inset 0 0 0 1px rgb(255, 0, 0)",padding:"0 2px"}),yg=Object.freeze({ally:Object.freeze({className:"ng-brkt ng-brkt-ally",color:"#ffffff",open:"(",close:")"}),enemy:Object.freeze({className:"ng-brkt ng-brkt-enemy",color:"#ff0000",open:"(",close:")"})}),createRelationshipNameDescriptor=(g,A={})=>{if(!isNonEmptyString(g))return null;const I={family:"inline-name",text:g.trim(),color:A.color??"grey",italic:Boolean(A.isCityEnemy),target:Boolean(A.isTarget),bracket:null,targetStyle:hg};return A.isAlly?I.bracket=yg.ally:A.isEnemy&&(I.bracket=yg.enemy),I},createPlayerRelationshipDescriptor=(g,A={})=>{if(!isNonEmptyString(g))return null;const I=g.trim(),C=isNonEmptyString(A.targetName)?A.targetName.trim():"",e=Boolean(A.isAlly),t=Boolean(A.isEnemy),n=Boolean(A.isCityEnemy),a=A.isTarget??(!1!==A.targetFormatting&&C.length>0&&C===I);return createRelationshipNameDescriptor(I,{color:A.color??"grey",isAlly:e,isEnemy:t,isCityEnemy:n,isTarget:a})},renderBracket=(g,A)=>`<span class="${g.className}"${styleAttribute$1({color:g.color,"font-weight":"bold"})}>${escapeHtml(A)}</span>`,renderRelationshipNameHtml=g=>{if(!g)return"";const A=`<span${styleAttribute$1({color:g.color,"font-style":g.italic?"italic":null})}>${escapeHtml(g.text)}</span>`,I=g.bracket?[renderBracket(g.bracket,g.bracket.open),A,renderBracket(g.bracket,g.bracket.close)].join(""):A;return g.target?`<span class="${g.targetStyle.className}"${styleAttribute$1({"box-shadow":g.targetStyle.boxShadow??`inset 0 0 0 1px ${g.targetStyle.borderColor}`,padding:g.targetStyle.padding})}>${I}</span>`:I},fg=Object.freeze({original:" ".repeat(8),adjusted:" ".repeat(6)}),bg=new WeakMap,isAsciiUppercase=g=>{if("string"!=typeof g||0===g.length)return!1;const A=g.charCodeAt(0);return A>=65&&A<=90},isNameCharacter=g=>{if("string"!=typeof g||0===g.length)return!1;if("'"===g||"-"===g)return!0;const A=g.charCodeAt(0);return A>=65&&A<=90||A>=97&&A<=122},extractUniqueWords=g=>{const A="string"==typeof g?g.match(/[A-Z][A-Za-z'-]*/g):null;return A?[...new Set(A)]:[]},resolveDescriptorFactory=({createDescriptor:g,relationshipFormatter:A}={})=>"function"==typeof g?g:"function"==typeof A?A:"function"==typeof A?.createDescriptor?A.createDescriptor:null,resolveCompiledHighlighter=g=>{const A=g?.compiledHighlighter;return A&&Array.isArray(A.namesByLength)&&A.entries instanceof Map&&0!==A.entries.size?A:null},getCompiledInitialCharacters=g=>{const A=bg.get(g);if(A)return A;const I=new Set;return g.entries.forEach((g,A)=>{"string"==typeof A&&A.length>0&&I.add(A.charAt(0))}),bg.set(g,I),I},hasPotentialCompiledMatch=(g,A)=>{if("string"!=typeof g||0===g.length)return!1;const I=getCompiledInitialCharacters(A);for(let C=0;C<g.length;C+=1)if(I.has(g.charAt(C)))return!0;return!1},resolvePossessiveBaseName=(g,A)=>{if("string"!=typeof g||!(A instanceof Map))return null;const I=g.endsWith("'s")||g.endsWith("'S")?2:g.endsWith("'")?1:0;if(0===I)return null;const C=g.slice(0,g.length-I);return A.has(C)?C:null},applyCompiledHighlighting=(g,A,I)=>{if(!hasPotentialCompiledMatch(g.text(),A))return!1;const C=g.formatted();if("string"!=typeof C||0===C.length)return!1;let e=0,t=0,n=null,a=!1;for(;e<C.length;){const g=C.charAt(e);if("<"===g){const g=C.indexOf(">",e+1);if(-1===g)break;e=g+1;continue}if(!isAsciiUppercase(g)){e+=1;continue}let r=e+1;for(;r<C.length&&isNameCharacter(C.charAt(r));)r+=1;const o=C.slice(e,r),i=A.entries.has(o)?o:resolvePossessiveBaseName(o,A.entries),l=i?A.entries.get(i):null;l?(null===n?n=[C.slice(0,e)]:n.push(C.slice(t,e)),n.push(l.html),t=e+i.length,e=r,I&&l.adjustsMonospacePadding&&(a=!0)):e=r}if(null===n)return!1;let r=n.join("")+C.slice(t);return a&&(r=r.replace(fg.original,fg.adjusted)),g.formatted=()=>r,!0},buildReplacementMapFromDescriptors=(g,A)=>{const I=new Map;return g.forEach(g=>{const C=A(g);C&&"grey"!==C.color&&I.set(g,{html:renderRelationshipNameHtml(C),bracketed:Boolean(C.bracket),adjustsMonospacePadding:Boolean(C.bracket)})}),I},applyInlineNameHighlighting=(g,{createDescriptor:A,relationshipFormatter:I,monospace:C=!1}={})=>{if(!g||g.nexSkillReplacement||"function"!=typeof g.text||"function"!=typeof g.formatted)return!1;const e=resolveCompiledHighlighter(I);if(e)return applyCompiledHighlighting(g,e,C);const t=resolveDescriptorFactory({createDescriptor:A,relationshipFormatter:I});if(!t)return!1;const n=buildReplacementMapFromDescriptors(extractUniqueWords(g.text()),t);if(0===n.size)return!1;const a=g.formatted();if("string"!=typeof a||0===a.length)return!1;let r=a,o=!1;for(const i of[...n.keys()].sort((g,A)=>A.length-g.length)){const g=n.get(i);g&&r.includes(i)&&(r=r.split(i).join(g.html),C&&g.adjustsMonospacePadding&&(r=r.replace(fg.original,fg.adjusted)),o=!0)}return!!o&&(g.formatted=()=>r,!0)},sortNamesByLengthDesc=(g,A)=>A.length-g.length,normalizeKnownNames=g=>{if(!Array.isArray(g))return[];const A=new Set,I=[];return g.forEach(g=>{const C=N(g);C&&!A.has(C)&&(A.add(C),I.push(C))}),I},createCompiledInlineHighlighter=({knownNames:g=[],createDescriptor:A}={})=>{const I=new Map,C=normalizeKnownNames(g);return"function"!=typeof A||0===C.length?Object.freeze({namesByLength:Object.freeze([]),entries:I}):(C.forEach(g=>{const C=A(g);C&&"grey"!==C.color&&I.set(g,Object.freeze({html:renderRelationshipNameHtml(C),bracketed:Boolean(C.bracket),adjustsMonospacePadding:Boolean(C.bracket)}))}),Object.freeze({namesByLength:Object.freeze(C.filter(g=>I.has(g)).sort(sortNamesByLengthDesc)),entries:I}))},callPredicate=(g,A)=>{if("function"!=typeof g)return!1;try{return Boolean(g(A))}catch{return!1}},callColorResolver=(g,A)=>{if("function"!=typeof g)return"grey";try{return g(A)??"grey"}catch{return"grey"}},readKnownNames=g=>{if(Array.isArray(g))return g;if("function"!=typeof g)return[];try{const A=g();return Array.isArray(A)?A:[]}catch{return[]}},createRelationshipNameFormatter=(g={})=>{const A=N(g.targetName),I=!1!==g.allyEnemyFormatting,C=!1!==g.targetFormatting,e=g.getPlayerColorByNormalizedName??g.getPlayerColor,t=g.isAllyPlayerByNormalizedName??g.isAllyPlayer,n=g.isEnemyPlayerByNormalizedName??g.isEnemyPlayer,a=g.isCityEnemyPlayerByNormalizedName??g.isCityEnemyPlayer,r=Array.isArray(g.knownPlayerNames)||"function"==typeof g.getKnownPlayerNames,o=readKnownNames(g.knownPlayerNames??g.getKnownPlayerNames),i=new Set(o.map(N).filter(Boolean)),createDescriptor=(g,o={})=>{const l=N(g),s=N(o.text)||l;if(!l||!s)return null;const c=o.isAlly??(I&&callPredicate(t,l)),u=o.isEnemy??callPredicate(n,l),m=o.isCityEnemy??callPredicate(a,l),d=o.isTarget??(C&&(!r||i.has(l))&&A.length>0&&A===l);return createPlayerRelationshipDescriptor(s,{color:o.color??callColorResolver(e,l),isAlly:c,isEnemy:u,isCityEnemy:m,isTarget:d})},l=createCompiledInlineHighlighter({knownNames:o,createDescriptor});return Object.freeze({compiledHighlighter:l,createDescriptor,renderHtml:(g,A={})=>renderRelationshipNameHtml(createDescriptor(g,A))})},getUiSettings$3=g=>g?.persistenceStore?.getAll?.()?.ui??{},getTargetState$1=g=>g?.stores?.target?.getState?.()??{},xg=Object.freeze(["allyEnemyFormatting","targetFormatting","targetName","playerDirectory","playerDirectoryVersion","playerRelationships","playerRelationshipsVersion"]),vg=new WeakMap,Eg=null,readModelVersion=g=>{if("function"!=typeof g?.getVersion)return null;try{return g.getVersion()}catch{return null}},createFormatterSignature=(g,A={})=>{const I=getUiSettings$3(g),C=getTargetState$1(g),e=A.playerDirectory??g?.playerDirectory??null,t=A.playerRelationships??g?.playerRelationships??null;return{allyEnemyFormatting:!1!==I.allyEnemyFormatting,targetFormatting:!1!==I.targetFormatting,targetName:N(A.targetName??(C.isPlayer?C.name:null)??null),playerDirectory:e,playerDirectoryVersion:readModelVersion(e),playerRelationships:t,playerRelationshipsVersion:readModelVersion(t)}},signaturesEqual$1=(g,A)=>null!==g&&null!==A&&xg.every(I=>Object.is(g[I],A[I])),readCachedFormatter=g=>g&&"object"==typeof g?vg.get(g)??null:Eg,writeCachedFormatter=(g,A)=>g&&"object"==typeof g?(vg.set(g,A),A):(Eg=A,A),createFormatterFromSignature=g=>{const{playerDirectory:A,playerRelationships:I}=g;return createRelationshipNameFormatter({allyEnemyFormatting:g.allyEnemyFormatting,targetFormatting:g.targetFormatting,targetName:g.targetName,getKnownPlayerNames:A?.getKnownPlayerNames?.bind(A),getPlayerColor:A?.getPlayerColor?.bind(A),getPlayerColorByNormalizedName:A?.getPlayerColorByNormalizedName?.bind(A),isAllyPlayer:I?.isAllyPlayer?.bind(I),isAllyPlayerByNormalizedName:I?.isAllyPlayerByNormalizedName?.bind(I),isEnemyPlayer:I?.isEnemyPlayer?.bind(I),isEnemyPlayerByNormalizedName:I?.isEnemyPlayerByNormalizedName?.bind(I),isCityEnemyPlayer:I?.isCityEnemyPlayer?.bind(I),isCityEnemyPlayerByNormalizedName:I?.isCityEnemyPlayerByNormalizedName?.bind(I)})},clearRelationshipNameFormatterCache=g=>{g&&"object"==typeof g?vg.delete(g):(void 0===g&&(vg=new WeakMap),Eg=null)},createRelationshipNameFormatterFromContext=(g,A={})=>{const I=createFormatterSignature(g,A),C=readCachedFormatter(g);if(signaturesEqual$1(C?.signature??null,I))return C.formatter;const e=createFormatterFromSignature(I);return writeCachedFormatter(g,{signature:I,formatter:e}),e},applyContextInlineNameHighlighting=(g,{contextValue:A=null,monospace:I=!1}={})=>applyInlineNameHighlighting(g,{relationshipFormatter:createRelationshipNameFormatterFromContext(A),monospace:I}),highlightInlineNamesInText=(g,{contextValue:A=null}={})=>{const I={text:()=>g,formatted:()=>g};return applyContextInlineNameHighlighting(I,{contextValue:A})?{content:I.formatted(),isHtml:!0}:{content:g,isHtml:void 0}},wg=deepFreeze([["a CRITICAL","2x"],["CRUSHING","4x"],["OBLITERATING","8x"],["ANNIHILATINGLY","16x"],["WORLD","32x"],["PLANE","64x"],["coalescence of power","MAYA"]]),Rg=deepFreeze({"physical cutting":"#708090","physical blunt":"#708090",magical:"#FFFFFF",poison:"#9ACD32",psychic:"#663399",fire:"#8B0000",cold:"#87CEFA",electricity:"#FFD700",asphyxiation:"#D2B48C",raw:"#FFB6C1",unblockable:"#FFB6C1"}),Sg=deepFreeze({attack:"orange",battlerage:"yellow",affliction:"red"}),Mg=deepFreeze({attainment:"yellow",gear:"plum"}),Tg=deepFreeze({eat:{id:"eat",fg:"gold",text:"Eat: ",banding:["{","}"]},smoke:{id:"smoke",fg:"orchid",text:"Smoke: ",banding:["{","}"]},apply:{id:"apply",fg:"aquamarine",text:"Apply: ",banding:["{","}"]},sip:{id:"sip",fg:"HotPink",text:"Sip: ",banding:["{","}"]},focus:{id:"focus",fg:"BlueViolet",text:"Focus",banding:["{","}"]},tattoo:{id:"tattoo",fg:"cornflowerBlue",text:"Tattoo: ",banding:["||","||"]},shield:{id:"shield",fg:"cyan",text:" Shield ",banding:{icon:"shield-cross",colors:["cyan","goldenrod"],size:16}},rebounding:{id:"rebounding",fg:"white",text:" Rebounding ",banding:{icon:"shield-cross",colors:["white","goldenrod"],size:16}},prismatic:{id:"prismatic",fg:"yellow",text:" Prismatic ",banding:{icon:"shield-cross",colors:["goldenrod","white"],size:16}},tree:{id:"tree",fg:"lawngreen",text:" Tree ",banding:{icon:"tree",colors:["green","brown"],size:16}},npcslain:{id:"npcslain",fg:"red",text:" SLAIN ",banding:{icon:"tombstone",colors:["grey","white"],size:18}}}),Ng=deepFreeze({id:"default",fg:"grey",text:"Action",bg:"",banding:["[","]"]}),toDamageSlug$1=g=>g.toLowerCase().replace(/\s+/g,"-"),getSkillColor=g=>Mg[g]??"orange",getSkillClass=g=>g&&Mg[g]?`ng-skill-${g}`:"ng-skill-default",getUserActionDefinition=g=>Tg[g]??{...Ng,id:g},getUserActionClass=g=>g&&Tg[g]?`ng-action-${g}`:"ng-action-default",getDamageClass=g=>g&&void 0!==Rg[g]?`ng-dmg-${toDamageSlug$1(g)}`:"ng-dmg-unknown",hpPercentToColor=g=>{if(null==g||!Number.isFinite(g))return"grey";const A=Math.max(0,Math.min(100,g)),I=1.2*A,C=(A<75?50:Math.abs(A-100)/2+25)/100,k=g=>(g+I/30)%12,e=1*Math.min(C,1-C),f=g=>C-e*Math.max(-1,Math.min(k(g)-3,Math.min(9-k(g),1))),toHex=g=>Math.round(255*g).toString(16).padStart(2,"0");return`#${toHex(f(0))}${toHex(f(8))}${toHex(f(4))}`},Gg="You",createSegment=(g,A=null,I=!1)=>({text:g,fg:A,bg:null,bold:I}),resolvePatternLength$1=g=>{const A=trimToEmpty(g?.matchType),I=g?.patterns?.[A];return Array.isArray(I)?I.length:0},createNameDescriptor=(g,{relationshipFormatter:A,selfName:I,selfText:C,targetName:e})=>{const t=trimToEmpty(g);return t?"self"===t||I&&t===I?createRelationshipNameDescriptor(C,{color:"lightpink",isTarget:e===t}):"function"==typeof A?.createDescriptor?A.createDescriptor(t,{text:t}):createRelationshipNameDescriptor(t,{color:"grey",isAlly:!1,isEnemy:!1,isCityEnemy:!1,isTarget:e===t}):null},createPreviewSegments=({actor:g,actionLabel:A,actionColor:I,target:C,info:e})=>{const t=[];if(g){const A=g.bracket?`${g.bracket.open}${g.text}${g.bracket.close}`:g.text;t.push(createSegment(A,g.color)),t.push(createSegment(" "))}if(isNonEmptyString(A)&&t.push(createSegment(A.trim(),I,!0)),C){t.push(createSegment(" "));const g=C.bracket?`${C.bracket.open}${C.text}${C.bracket.close}`:C.text;t.push(createSegment(g,C.color))}return isNonEmptyString(e)&&(t.push(createSegment(" ")),t.push(createSegment(`[${toDisplayName(e)}]`,"cadetblue"))),t},createReplacementDescriptor=(g,A,I={})=>{if("nexSkillMatch"!==g&&"nexSkillNpcMatch"!==g)return null;if(!A||"object"!=typeof A||Array.isArray(A))return null;const C=trimToEmpty(I.selfName),e=trimToEmpty(I.selfText)||Gg,t=trimToEmpty(I.targetName),n=I.relationshipFormatter,a="nexSkillNpcMatch"===g?"npc":"user",r="user"===a?getUserActionDefinition(A.id):null,o=createNameDescriptor(A.user,{relationshipFormatter:n,selfName:C,selfText:e,targetName:t}),i=createNameDescriptor(A.target,{relationshipFormatter:n,selfName:C,selfText:e,targetName:t}),l=trimToEmpty(A.fullName)||toDisplayName(A.skill||A.id),s="npc"===a?Array.isArray(A.tags)&&A.tags.length>0?A.tags.map(toDisplayName).join(", "):l:trimToEmpty(r?.text)||l,c="npc"===a?"red":r?.fg??getSkillColor(A.skill),u=createPreviewSegments({actor:o,actionLabel:s,actionColor:c,target:i,info:A.info}),m=u.map(g=>g.text).join(""),d=Math.max(resolvePatternLength$1(A)-1,0);return{family:"skill",eventName:g,buffer:"combat",variant:a,id:trimToEmpty(A.id),matchType:trimToEmpty(A.matchType),skill:{id:trimToEmpty(A.skill),name:l,color:getSkillColor(A.skill)},actor:o,target:i,tags:Array.isArray(A.tags)?A.tags.map(trimToEmpty).filter(Boolean):[],info:isNonEmptyString(A.info)?A.info.trim():null,userAction:r,hostMutation:{replaceCurrentLine:!0,companionLineCount:d,tooltipSource:"npc"===a&&Array.isArray(A.tags)&&A.tags.includes("damage")&&"self"===A.target?"health-lost":null},preview:{tag:"npc"===a?"«npc»":"[act]",tagColor:c,text:m,segments:u},metadata:{actionTypeColors:Sg,critLabels:wg,damageColors:Rg}}},kg=Object.freeze({fg:null,bg:null,bold:!1}),createPlainSegment=g=>({text:g,...kg}),extractName=g=>extractNamedValue(g),createStructuredLine=(g,A,I,C,e,t={})=>({type:"combat"===e?"combat":"system",buffer:e,segments:[createPlainSegment(C)],metadata:{event:g,tag:A,tagColor:I,details:t}}),pickDefined=(g,A=null)=>void 0===g?A:g,resolveSkillReplacementDetails=(g,A)=>{if(!isPlainObject(A))return null;const I=isPlainObject(A.sourcePayload)?A.sourcePayload:A,C=isPlainObject(A.replacement)?A.replacement:createReplacementDescriptor(g,I);return C?{replacement:C,context:A.context??A.replacementContext,crit:pickDefined(A.crit),damage:pickDefined(A.damage),healthLost:Array.isArray(A.healthLost)?A.healthLost:[],tooltip:pickDefined(A.tooltip),originalLine:pickDefined(A.originalLine),matchType:"string"==typeof A.matchType?A.matchType:C.matchType,actorId:"string"==typeof A.actorId?A.actorId:"string"==typeof I.user?I.user.trim():null,targetHpText:pickDefined(A.targetHpText),targetHpPercent:pickDefined(A.targetHpPercent),hpDeltaText:pickDefined(A.hpDeltaText),sourcePayload:I}:null},createSkillReplacementLine=(g,A)=>{const I=resolveSkillReplacementDetails(g,A);if(!I)return null;const{replacement:C}=I,e=C.preview??{};return{type:"replacement",buffer:"system"===C.buffer?"system":"combat",segments:Array.isArray(e.segments)?e.segments:[],metadata:{event:g,tag:"string"==typeof e.tag?e.tag:"",tagColor:"string"==typeof e.tagColor?e.tagColor:null,details:I}}},parsePercent$1=g=>{if(null==g)return null;const A=Number.parseInt(String(g).replace("%",""),10);return Number.isNaN(A)?null:A},extractTargetEventId=g=>{if(!isPlainObject(g))return null;const A=g.id??g.target;return"number"==typeof A&&Number.isFinite(A)?String(A):toTrimmedString(A)},extractTargetEventLabel=g=>toTrimmedString(g?.short_desc)??toTrimmedString(g?.name)??toTrimmedString(g?.text)??(extractTargetEventId(g)?`Target ${extractTargetEventId(g)}`:null),getTargetHpValue=g=>g?.hpperc??g?.hpPercent??g?.hp??null,hasNexsysTargetIdentityChange=g=>{const A=isPlainObject(g?.changedFields)?g.changedFields:null;return!A||["id","target","text","name","short_desc"].some(g=>Object.prototype.hasOwnProperty.call(A,g))},createTargetLine=(g,A,I)=>createStructuredLine(g,"[Target]","red",I,"combat",{id:extractTargetEventId(A),hpPercent:parsePercent$1(getTargetHpValue(A)),shortDescription:toTrimmedString(A?.short_desc)??toTrimmedString(A?.text)}),parseStreamEventLine=(g,A)=>{switch(g){case"Char.Defences.Add":{const I=extractName(A);return I?createStructuredLine(g,"+def","lawngreen",toDisplayName(I),"system",{name:I,direction:"gained",description:A&&"object"==typeof A&&!Array.isArray(A)?A.desc??null:null}):null}case"Char.Defences.Remove":{const I=extractName(A);return I?createStructuredLine(g,"-def","crimson",toDisplayName(I),"system",{name:I,direction:"lost"}):null}case"Char.Afflictions.Add":{const I=extractName(A);return I?createStructuredLine(g,"+aff","crimson",toDisplayName(I),"system",{name:I,direction:"gained",description:A&&"object"==typeof A&&!Array.isArray(A)?A.desc??null:null}):null}case"Char.Afflictions.Remove":{const I=extractName(A);return I?createStructuredLine(g,"-aff","lawngreen",toDisplayName(I),"system",{name:I,direction:"lost"}):null}case"nexsys4.system.target.changed":{if(!isPlainObject(A)||!hasNexsysTargetIdentityChange(A))return null;const I=extractTargetEventLabel(A);return I?createTargetLine(g,A,I):null}case"nexsys4.serverside.aff.priority.set":case"nexsys4.serverside.def.priority.set":{if(!isPlainObject(A))return null;const I="string"==typeof A.id&&A.id.trim().length>0?A.id.trim():null,C="number"==typeof A.priority&&Number.isFinite(A.priority)?A.priority:null;return I&&null!=C?createStructuredLine(g,`[Prio] ${C}`,"deepskyblue",toDisplayName(I),"system",{id:I,priority:C,accepted:!0===A.accepted,kind:g.includes(".aff.")?"affliction":"defence"}):null}case"nexSkillMatch":case"nexSkillNpcMatch":return createSkillReplacementLine(g,A);default:return null}},styleAttribute=g=>{const A=Object.entries(g).filter(([,g])=>g);return 0===A.length?"":` style="${A.map(([g,A])=>`${g}: ${A}`).join("; ")}"`},renderChunk=g=>`<span${styleAttribute({color:g.fg,"background-color":g.bg,"font-weight":g.bold?"700":null})}>${escapeHtml(g.text)}</span>`,renderSegmentsHtml=g=>g.map(renderChunk).join(""),resolveTimestamp=g=>g.timestamp??g.metadata?.timestamp??Date.now(),createDisplayLine=({html:g,timestamp:A,isPrompt:I=!1,isMonospace:C=!1,shouldLog:e=!0,buffer:t="main"})=>({id:null,html:g,timestamp:A,isPrompt:I,isMonospace:C,shouldLog:e,buffer:t}),renderStructuredRowHtml=(g,A)=>{const I=g.metadata?.tag??"";return[`<span class="nexgui4-stream-row nexgui4-stream-row--${A}" style="display: grid; grid-template-columns: auto minmax(0, 1fr); column-gap: 0.5rem; align-items: baseline;">`,`<span class="nexgui4-stream-row__tag mono"${styleAttribute({color:g.metadata?.tagColor??null})}>${escapeHtml(I)}</span>`,`<span class="nexgui4-stream-row__payload">${renderSegmentsHtml(g.segments)}</span>`,"</span>"].join("")},renderColorLine=g=>{const A=resolveTimestamp(g);return createDisplayLine({html:`<span class="nexgui4-color-line">${renderSegmentsHtml(g.segments)}</span>`,timestamp:A,isPrompt:g.isPrompt??!1,isMonospace:g.isMonospace??!1,shouldLog:g.shouldLog??!0,buffer:"main"})},hasTagList=g=>Array.isArray(g),isPveDamageTags=g=>hasTagList(g)&&g.includes("pve")&&g.includes("damage"),Dg=Object.freeze({options:Object.freeze({msgReplace:!0,damageNumbers:!0}),target:Object.freeze({hpText:null,hpPercent:null,hpDeltaText:null}),styles:Object.freeze({getAfflictionStyle:()=>({fg:"grey",bg:null}),resolveCureInfoStyle:(g,A="cadetblue")=>({fg:A,bg:null})}),icons:Object.freeze({dualTone:null})}),capitalize=g=>"string"==typeof g&&g.length>0?g.charAt(0).toUpperCase()+g.slice(1):"",getRuntimeStyle=g=>({fg:"string"==typeof g?.fg?g.fg:null,bg:"string"==typeof g?.bg?g.bg:null}),resolveRenderContext=(g={})=>{const A=g.context??g.replacementContext??{};return{options:{...Dg.options,...A.options??{}},target:{...Dg.target,...A.target??{}},styles:{...Dg.styles,...A.styles??{}},icons:{...Dg.icons,...A.icons??{}}}},withSeparators=(g,A)=>g.flatMap((g,I)=>0===I?[g]:[A,g]),createTitle=g=>{const A="string"==typeof g.originalLine?g.originalLine:null,I=[A?`Source: ${A}`:null,"string"==typeof g.tooltip?g.tooltip:null].filter(Boolean);return I.length>0?I.join("\n---\n"):null},createActorNodes=g=>g?[relationshipNameNode(g)]:[],createUserActionNodes=(g,A,I)=>{const{id:C,text:e,banding:t}=g,n=[classTextNode(getUserActionClass(C),e)];if(A){const{fg:C,bg:e}=getRuntimeStyle(I.styles.resolveCureInfoStyle?.(A,g.fg));n.push(styledTextNode(capitalize(A),{className:"ng-info-text",fg:C??g.fg,bg:e}))}if(Array.isArray(t)){const[g,A]=t;return[classTextNode("ng-brkt",g),...n,classTextNode("ng-brkt",A)]}return[iconBandingNode({icon:t.icon,colors:t.colors,size:t.size,children:n})]},createTargetHpValueNodes=(g,A)=>{const I="number"==typeof g.targetHpPercent?g.targetHpPercent:"number"==typeof A.target.hpPercent?A.target.hpPercent:null,C="string"==typeof g.targetHpText?g.targetHpText:"string"==typeof A.target.hpText?A.target.hpText:null;return null!=I?[styledTextNode(`${I}%`,{fg:hpPercentToColor(I)})]:C?[classTextNode("ng-muted",C)]:[]},createDamageValueNodes=(g,A)=>{const I=g.damage;return I&&"string"==typeof I.damage?[classTextNode(getDamageClass(I.type),I.damage)]:createTargetHpValueNodes(g,A)},createUserSkillAttackNodes=(g,A,I)=>{const{skill:C,info:e,tags:t,target:n}=g,a=[classTextNode("ng-brkt","["),classTextNode(getSkillClass(C.id),C.name),classTextNode("ng-brkt","]")];e&&a.push(textNode(" "),classTextNode("ng-info-text",capitalize(e)));const r=isPveDamageTags(t),o="firstPerson"===A.matchType||!A.actorId;if(r){const g="string"==typeof A.crit?A.crit:"Hit",C=o&&I.options.damageNumbers?createDamageValueNodes(A,I):createTargetHpValueNodes(A,I);a.push(classTextNode("ng-crit-separator",`: ${g} `)),C.length>0&&a.push(classTextNode("ng-dmg-bracket","("),...C,classTextNode("ng-dmg-bracket",")"))}return a},createUserActionColumnNodes=(g,A,I)=>{const{userAction:C,info:e}=g;return C&&Tg[C.id]?createUserActionNodes(C,e??null,I):createUserSkillAttackNodes(g,A,I)},createNpcActionColumnNodes=(g,A,I)=>{const{tags:C,target:e,skill:t}=g;if(!C||0===C.length)return[classTextNode("ng-muted",t.name)];const n=C.map(g=>{if("damage"===g&&"You"===e?.text)return classTextNode("ng-hp-loss","string"==typeof A.hpDeltaText&&A.hpDeltaText?A.hpDeltaText:"string"==typeof I.target.hpDeltaText&&I.target.hpDeltaText?I.target.hpDeltaText:"-0%");const{fg:C,bg:t}=getRuntimeStyle(I.styles.getAfflictionStyle?.(g));return styledTextNode(capitalize(g),{fg:C??"grey",bg:t})});return[classTextNode("ng-npc-bracket","«"),...withSeparators(n,classTextNode("ng-muted",", ")),classTextNode("ng-npc-bracket","»")]},createTargetColumnNodes=(g,A,I)=>{if(!g)return[];const C=relationshipNameNode(g);if(!g.text.includes(" ")||"grey"!==g.color)return[C];const e="number"==typeof A.targetHpPercent?A.targetHpPercent:"number"==typeof I.target.hpPercent?I.target.hpPercent:null,t="string"==typeof A.targetHpText?A.targetHpText:"string"==typeof I.target.hpText?I.target.hpText:null;return null!=e?[classTextNode("ng-dmg-bracket","("),styledTextNode(`${e}%`,{fg:hpPercentToColor(e)}),classTextNode("ng-dmg-bracket",") "),C]:t?[classTextNode("ng-dmg-bracket","("),classTextNode("ng-muted",t),classTextNode("ng-dmg-bracket",") "),C]:[C]},createReplacementViewModel=(g,A={})=>{if(!g||"object"!=typeof g)return null;const I=resolveRenderContext(A),C="npc"===g.variant?createNpcActionColumnNodes(g,A,I):createUserActionColumnNodes(g,A,I);return{family:"skill",eventName:g.eventName,variant:g.variant,layout:"replacement-row",title:createTitle(A),previewText:"string"==typeof g.preview?.text?g.preview.text:"",columns:{actor:createActorNodes(g.actor),action:C,target:createTargetColumnNodes(g.target,A,I)},assets:{dualToneIcons:I.icons.dualTone},metadata:{skillId:g.skill?.id??"",actionId:g.userAction?.id??null,matchType:"string"==typeof A.matchType?A.matchType:g.matchType,actorId:"string"==typeof A.actorId?A.actorId:null,tags:Array.isArray(g.tags)?[...g.tags]:[]}}},jg=new Map,normalizeColors=g=>Array.isArray(g)?1===g.length?[g[0],g[0]]:[g[0]??"currentColor",g[1]??g[0]??"currentColor"]:[g??"currentColor",g??"currentColor"],buildIconHtml=(g,A,I=16,C=null)=>{const e=normalizeColors(A),t=C?.[g];if(!Array.isArray(t))return"";const[n,a,,,r]=t;if(!Array.isArray(r)||r.length<2)return"";const o=`${g}-${e.join(",")}-${I}-${n}-${a}-${r.join("|")}`,i=jg.get(o);if(i)return i;const[l,s]=e,c=['<svg xmlns="http://www.w3.org/2000/svg" class="svg-inline--fa icon" aria-hidden="true" focusable="false"',` style="height:${escapeHtml(String(I))}px; --ng-fill-1:${escapeHtml(l)}; --ng-fill-2:${escapeHtml(s)};"`,` viewBox="0 0 ${escapeHtml(String(n))} ${escapeHtml(String(a))}">`,'<g class="fa-group">',`<path class="ng-icon-fill-1" d="${escapeHtml(r[0])}"></path>`,`<path class="ng-icon-fill-2" d="${escapeHtml(r[1])}"></path>`,"</g>","</svg>"].join("");return jg.set(o,c),c},buildIconBandingHtml=(g,A,I,C,e=null)=>{const t=buildIconHtml(g,A,I,e);return t?`${t}${C}${t}`:`«${C}»`},renderStyledTextNode=g=>span(escapeHtml(g.text),{className:g.className,style:{color:g.fg,"background-color":g.bg}}),renderReplacementHtmlNode=(g,A={})=>{if(!g||"object"!=typeof g)return"";switch(g.kind){case"text":return escapeHtml(g.text);case"class-text":return span(escapeHtml(g.text),{className:g.className});case"styled-text":return renderStyledTextNode(g);case"relationship-name":return renderRelationshipNameHtml(g.descriptor);case"icon-banding":return buildIconBandingHtml(g.icon,g.colors,g.size,renderReplacementHtmlNodes(g.children,A),A.dualToneIcons??null);case"group":return renderReplacementHtmlNodes(g.children,A);default:return""}},renderReplacementHtmlNodes=(g,A={})=>Array.isArray(g)?g.map(g=>renderReplacementHtmlNode(g,A)).join(""):"",renderColumn=(g,A)=>`<span class="nexgui4-replacement-row__${A}">${renderReplacementHtmlNodes(g?.columns?.[A],g?.assets)}</span>`,renderReplacementHtml=g=>[`<span class="nexgui4-replacement-row"${titleAttribute(g?.title)}>`,'<span class="nexgui4-replacement-row__buffer"></span>',renderColumn(g,"actor"),renderColumn(g,"action"),renderColumn(g,"target"),"</span>"].join(""),colorText=(g,A)=>g?span(escapeHtml(A),{style:{color:g}}):escapeHtml(A),renderFallbackPreviewHtml=g=>`<span class="nexgui4-replacement-row">${Array.isArray(g.segments)?g.segments.map(g=>g.fg?colorText(g.fg,g.text):escapeHtml(g.text)).join(""):""}</span>`,generateReplacementHtml=(g,A={})=>renderReplacementHtml(createReplacementViewModel(g,A)),renderReplacementLine=g=>{const A=resolveTimestamp(g),I=g.metadata?.details??{},C=I.replacement??null;return createDisplayLine({html:C?generateReplacementHtml(C,I):renderFallbackPreviewHtml(g),timestamp:A,isPrompt:!1,isMonospace:!1,shouldLog:g.shouldLog??!0,buffer:"system"===g.buffer?"system":"combat"})},Pg=/^Health lost: (\d+) \((.+?)\)\.$/,Bg=/^Damage dealt: (\d+) \((.+?)\)\.$/,Og=Object.freeze({crit:null,damage:null,healthLost:Object.freeze([]),tooltip:null,originalLine:null,consumedLineIndexes:Object.freeze([])}),getLineText=g=>g?"function"==typeof g.parsed_line?.text?g.parsed_line.text():"string"==typeof g.line?g.line:"":"",resolvePatternLength=g=>{const A="string"==typeof g.matchType?g.matchType.trim():"",I=g.patterns?.[A];return Array.isArray(I)?I.length:0},isPveDamageAction=g=>isPveDamageTags(g.tags),isNpcDamageToSelf=g=>Array.isArray(g.tags)&&g.tags.includes("damage")&&"self"===g.target,isFirstPersonOrActorless=g=>"firstPerson"===("string"==typeof g.matchType?g.matchType.trim():"")||("string"==typeof g.user?0===g.user.trim().length:!g.user),shouldCollectDamageDealt=(g,A)=>Boolean(A?.damageNumbers)&&isFirstPersonOrActorless(g),collectCrit=(g,A)=>{const I=getLineText(g?.[A]);for(const[C,e]of wg)if(I.includes(C))return{crit:e,consumedLineIndex:A};return{crit:"Hit",consumedLineIndex:null}},collectDamageDealt=(g,A)=>{const I=getLineText(g?.[A]).match(Bg);return I?{damage:I[1],type:I[2],consumedLineIndex:A}:null},collectHealthLost=(g,A)=>{if(!Array.isArray(g))return{healthLost:[],consumedLineIndexes:[]};const I=[],C=[];for(let e=A;e<g.length-1;e++){const A=getLineText(g[e]).match(Pg);A&&(I.push({damage:A[1],type:A[2]}),C.push(e))}return{healthLost:I,consumedLineIndexes:C}},collectReplacementSideData=(g,A,I,C={})=>{if(!g||"object"!=typeof g||Array.isArray(g)||!Array.isArray(A)||!I||"number"!=typeof I.index)return{...Og,healthLost:[],consumedLineIndexes:[]};const e=g,t=new Set,n=getLineText(I)||null,a=resolvePatternLength(e),r=Math.max(a-1,0),o={crit:null,damage:null,healthLost:[],tooltip:null,originalLine:n};for(let i=1;i<=r;i++)t.add(I.index+i);if(isPveDamageAction(e)){const g=I.index+1,n=collectCrit(A,g);if(o.crit=n.crit,null!=n.consumedLineIndex&&t.add(n.consumedLineIndex),shouldCollectDamageDealt(e,C)){const I=collectDamageDealt(A,null!=n.consumedLineIndex?g+1:g);I&&(o.damage={damage:I.damage,type:I.type},t.add(I.consumedLineIndex))}}if(isNpcDamageToSelf(e)){const g=collectHealthLost(A,I.index+1);o.healthLost=g.healthLost,o.tooltip=g.healthLost.length>0?g.healthLost.map(({damage:g,type:A})=>`${g} (${A})`).join("\n"):null,g.consumedLineIndexes.forEach(g=>{t.add(g)})}return{...o,consumedLineIndexes:[...t].filter(g=>g!==I.index).sort((g,A)=>g-A)}},Lg="You",zg="cadetblue",Zg=Object.freeze(["contextValue","persistenceStore","persistenceVersion","msgReplace","damageNumbers","selfName","targetName","hpText","hpPercent","hpDeltaText","playerDirectory","playerDirectoryVersion","playerRelationships","playerRelationshipsVersion","allyEnemyFormatting","targetFormatting","afflictionStyles","cureStyles","herbNames","herbMinerals","dualToneIcons"]),Fg=null,Kg=null,toNullableString=g=>isNonEmptyString(g)?g.trim():null,parsePercent=g=>{if("number"==typeof g&&Number.isFinite(g))return g;if("string"!=typeof g)return null;const A=g.match(/-?\d+(?:\.\d+)?/),I=A?Number(A[0]):NaN;return Number.isFinite(I)?I:null},getGlobals$1=()=>globalThis,getContextValue$2=()=>getGlobals$1().nexGui?.__contextValue??null,getCharacterState$1=g=>g?.stores?.character?.getState?.()??{},getTargetState=g=>g?.stores?.target?.getState?.()??{},getUiSettings$2=g=>g?.persistenceStore?.getAll?.()?.ui??{},getPersistenceVersion=g=>"function"==typeof g?.persistenceStore?.getVersion?g.persistenceStore.getVersion():null,getModelVersion$2=g=>"function"==typeof g?.getVersion?g.getVersion():null,resolveUiSettings=(g,A)=>null!==A&&Fg?.contextValue===g&&Fg.persistenceStore===g?.persistenceStore&&Fg.persistenceVersion===A?Fg.uiSettings:getUiSettings$2(g),normalizeStyle=(g,A)=>({fg:toNullableString(g?.fg)??A,bg:toNullableString(g?.bg)}),createStyleResolvers=()=>({getAfflictionStyle:g=>normalizeStyle(getGlobals$1().nexSys?.prompt?.affAbbrev?.[g]??null,"grey"),resolveCureInfoStyle:(g,A=zg)=>{if(!isNonEmptyString(g))return{fg:A,bg:null};const I=getGlobals$1().nexSys,C=I?.tables?.herb_name_to_herb?.[g]??g,e=I?.prompt?.cureColors?.[C]??I?.prompt?.cureColors?.[I?.tables?.herb_to_mineral?.[C]]??null;return e?normalizeStyle(e,A):{fg:A,bg:null}}}),signaturesEqual=(g,A)=>null!==g&&null!==A&&Zg.every(I=>Object.is(g[I],A[I])),readContextInputs=()=>{const g=getGlobals$1(),A=getContextValue$2(),I=resolveUiSettings(A,getPersistenceVersion(A)),C=getPersistenceVersion(A),e=A?.stores?.settings?.getState?.()?.options??I,t=getCharacterState$1(A),n=getTargetState(A),a=g.GMCP?.Target??{},r=g.nexSys??null,o=r?.prompt??null,i=r?.tables??null,l=toNullableString(a.HP)??toNullableString(a.hpperc)??toNullableString(a.lastHP)??toNullableString(n.hpText),s=parsePercent(a.HP??a.hpperc??a.lastHP??n.hpPercent),c=n.isPlayer?toNullableString(n.name):null,u=toNullableString(o?.vars?.diffhp?.text)??("number"==typeof a.hpChange?`${a.hpChange}%`:toNullableString(a.hpChange)),m=Boolean(e.msgReplace),d=Boolean(e.damageNumbers),p=toNullableString(t.name)??toNullableString(g.GMCP?.Char?.Status?.name)??"",h=g.window?.___FONT_AWESOME___?.styles?.fad??null;return{contextValue:A,persistenceStore:A?.persistenceStore??null,persistenceVersion:C,uiSettings:I,msgReplace:m,damageNumbers:d,selfName:p,targetName:c,hpText:l,hpPercent:s,hpDeltaText:u,playerDirectory:A?.playerDirectory??null,playerDirectoryVersion:getModelVersion$2(A?.playerDirectory),playerRelationships:A?.playerRelationships??null,playerRelationshipsVersion:getModelVersion$2(A?.playerRelationships),allyEnemyFormatting:I.allyEnemyFormatting,targetFormatting:I.targetFormatting,afflictionStyles:o?.affAbbrev??null,cureStyles:o?.cureColors??null,herbNames:i?.herb_name_to_herb??null,herbMinerals:i?.herb_to_mineral??null,dualToneIcons:h}},createContextFromInputs=g=>({options:{msgReplace:g.msgReplace,damageNumbers:g.damageNumbers},self:{name:g.selfName,label:Lg},target:{name:g.targetName,hpText:g.hpText,hpPercent:g.hpPercent,hpDeltaText:g.hpDeltaText},styles:createStyleResolvers(),icons:{dualTone:g.dualToneIcons},playerDirectory:g.playerDirectory,playerRelationships:g.playerRelationships,relationshipFormatter:createRelationshipNameFormatterFromContext(g.contextValue,{targetName:g.targetName})}),clearMessageReplacementContextCache=()=>{Fg=null,Kg=null},createMessageReplacementContext=()=>{const g=readContextInputs();return signaturesEqual(Fg,g)&&Kg?Kg:(Fg=g,Kg=createContextFromInputs(g))},getGlobals=()=>globalThis,getHostBlock=()=>getGlobals().nexusclient?.current_block??null,getHostCurrentLine=()=>getGlobals().nexusclient?.current_line??null,createRenderContext=g=>({options:g.options,target:g.target,styles:g.styles,icons:g.icons}),createSkillReplacementPipelinePayload=(g,A,{context:I,sideData:C})=>{const e=createReplacementDescriptor(g,A,{relationshipFormatter:I.relationshipFormatter,selfName:I.self.name,selfText:I.self.label,targetName:I.target.name});return e?{kind:"nexgui4.skillReplacement",sourcePayload:A,replacement:e,context:createRenderContext(I),crit:C.crit,damage:C.damage,healthLost:C.healthLost,tooltip:C.tooltip,originalLine:C.originalLine,matchType:"string"==typeof A.matchType?A.matchType.trim():null,actorId:"string"==typeof A.user?A.user.trim():null,targetHpText:I.target.hpText,targetHpPercent:I.target.hpPercent,hpDeltaText:I.target.hpDeltaText}:null},renderPipelinePayloadForHost=(g,A)=>{const I=parseStreamEventLine(g,A);return I?renderReplacementLine(I).html:null},createSkillReplacementGagHandler=(g,A,{emitReplacement:I}={})=>C=>{if(!g())return;if(!C||"object"!=typeof C||Array.isArray(C))return;const e=C,t=getHostBlock(),n=getHostCurrentLine();if(!t||!n||"number"!=typeof n.index)return;const{index:a}=n,r=createMessageReplacementContext(),o=collectReplacementSideData(e,t,n,r.options),i=createSkillReplacementPipelinePayload(A,e,{context:r,sideData:o});if(!i)return;if(I?.(i),!n.parsed_line)return;const l=renderPipelinePayloadForHost(A,i);l&&(o.consumedLineIndexes.forEach(g=>{const A=t[g];A&&g!==a&&(A.gag=!0)}),n.parsed_line.nexSkillReplacement=!0,n.parsed_line.formatted=()=>l)},getOptions=()=>createMessageReplacementContext().options,isReplacementEnabled=()=>Boolean(getOptions().msgReplace),Yg="nexGui4",normalizeNexGuiClassReflexName=g=>{const A=toTrimmedString(g)?.replace(/\s+/g,"").toLowerCase();return A?`nexGui.${A}`:null},readCurrentHostClassName=(g=globalThis.GMCP)=>toTrimmedString(g?.Char?.Status?.class),runNexGuiClassReflex=(g,{nexusClient:A=globalThis.nexusclient,packageName:I=Yg}={})=>{const C=normalizeNexGuiClassReflexName(g);C&&A?.reflexes?.()?.run_function?.(C,{},I)},runNexGuiClassReflexForCurrentHostClass=(g={})=>runNexGuiClassReflex(readCurrentHostClassName(g.gmcp),g),Vg=new Set(["blindness","deafness","insomnia"]),Wg="https://api.achaea.com/characters.json",passthroughParser=g=>g,resolvePlayerDirectory=g=>g??getDefaultPlayerDirectoryModel(),getContextValue$1=()=>globalThis.nexGui?.__contextValue??null,resolvePlayerRelationships$1=g=>g??getContextValue$1()?.playerRelationships??getDefaultPlayerRelationshipsModel(),resolveFetch=g=>"function"==typeof g?g:"function"==typeof globalThis.fetch?globalThis.fetch.bind(globalThis):null,getUiSettings$1=()=>getContextValue$1()?.persistenceStore?.getAll?.()?.ui??{},getCharacterState=()=>getContextValue$1()?.stores?.character?.getState?.()??{},isLoginTrackerEnabled=()=>Boolean(getUiSettings$1()?.loginTracker),shouldEmitAffliction=g=>{const A=extractNamedValue(g);return!Vg.has(A)},extractChannelPlayerNames=g=>Array.isArray(g)?g.map(g=>g?.name).filter(isNonEmptyString).map(g=>g.trim()):[],fetchActiveCharacterNames=async(g=recordPlayerDirectoryDiagnostic,A=null)=>{if("function"!=typeof A)return g({channel:"presence",action:"charactersListFetch",status:"unavailable",detail:{fetchAvailable:!1}}),[];try{const I=await A(Wg,{cache:"no-store"});if(!I.ok)return g({channel:"presence",action:"charactersListFetch",status:"unavailable",detail:{httpStatus:I.status}}),[];const C=await I.json();return Array.isArray(C?.characters)?C.characters.map(g=>g?.name).filter(isNonEmptyString).map(g=>g.trim()):[]}catch{return g({channel:"presence",action:"charactersListFetch",status:"unavailable",detail:{exception:!0}}),[]}},createLoginTrackerNoticeHtml=(g,A,I,C)=>`<span>${createRelationshipNameFormatterFromContext(getContextValue$1(),{playerDirectory:I,playerRelationships:C}).renderHtml(g)} logged ${A}</span>`,emitBridgeEvent=({eventBus:g,topic:A,sourceEvent:I,payload:C,parser:e=passthroughParser,meta:t})=>{g.emit(A,{event:I,data:e(C),meta:t})},normalizeNexsysTargetChangedPayload=g=>isPlainObject(g)&&isPlainObject(g.current)?{...g.current,changedFields:isPlainObject(g.changedFields)?g.changedFields:{}}:g,Ug=["id","ID"],Hg=["Text","text","short_desc"],readTargetField=(g,A)=>{if(!isPlainObject(g))return null;for(const I of A)if(Object.prototype.hasOwnProperty.call(g,I)){const A=g[I];return"number"==typeof A&&Number.isFinite(A)?String(A):isNonEmptyString(A)?A.trim():null}return null},createGatedTargetInfoEmitHandler=g=>{let A,I;return C=>{const e=readTargetField(C,Ug),t=readTargetField(C,Hg);e===A&&t===I||(A=e,I=t,emitBridgeEvent({eventBus:g,topic:v.TARGET_CHANGED,sourceEvent:"IRE.Target.Info",payload:C,parser:passthroughParser}))}},parseCurrentHostClassChangedPayload=()=>({class:readCurrentHostClassName()}),createEmitHandler=(g,A)=>I=>{A.filter&&!A.filter(I)||(emitBridgeEvent({eventBus:g,topic:A.topic,sourceEvent:A.eventName,payload:I,parser:A.parser,meta:A.meta}),A.afterEmit?.(I))},createSkillReplacementEmitHandler=(g,A)=>createSkillReplacementGagHandler(isReplacementEnabled,A,{emitReplacement:I=>{emitBridgeEvent({eventBus:g,topic:v.STREAM_LINE,sourceEvent:A,payload:I,parser:passthroughParser,meta:{buffer:"combat",sourceModel:"replacement"}})}}),createLoginTrackerHandler=(g,A,I,C,e)=>{let t=[];return async n=>{if(!isLoginTrackerEnabled())return;const a=extractChannelPlayerNames(n),r=await fetchActiveCharacterNames(C,e),o=[...new Set([...a,...r])];if(0===t.length)return void(t=o);const i=[getCharacterState()?.name,globalThis.GMCP?.Char?.Status?.name].find(isNonEmptyString)?.trim(),l=t.filter(g=>!o.includes(g));o.filter(g=>!t.includes(g)).forEach(C=>{C!==i&&g.notice(createLoginTrackerNoticeHtml(C,"in",A,I),{html:!0})}),l.forEach(C=>{C!==i&&g.notice(createLoginTrackerNoticeHtml(C,"out",A,I),{html:!0})}),t=o}},seedCurrentRoomState=g=>{const A=globalThis.GMCP?.Room;isPlainObject(A?.Info)&&emitBridgeEvent({eventBus:g,topic:v.ROOM_UPDATED,sourceEvent:"Room.Info",payload:A.Info,parser:passthroughParser}),Array.isArray(A?.Players)&&emitBridgeEvent({eventBus:g,topic:v.ROOM_UPDATED,sourceEvent:"Room.Players",payload:A.Players,parser:passthroughParser})},Qg=[{eventName:"nexsys4.system.target.changed",topic:v.TARGET_CHANGED,parser:normalizeNexsysTargetChangedPayload},{eventName:"Room.RemovePlayer",topic:v.ROOM_UPDATED,parser:passthroughParser},{eventName:"Room.Addplayer",topic:v.ROOM_UPDATED,parser:passthroughParser},{eventName:"Room.AddPlayer",topic:v.ROOM_UPDATED,parser:passthroughParser},{eventName:"Room.Players",topic:v.ROOM_UPDATED,parser:passthroughParser},{eventName:"Room.Info",topic:v.ROOM_UPDATED,parser:passthroughParser},{eventName:"Char.Items.List",topic:v.ROOM_UPDATED,parser:passthroughParser},{eventName:"Char.Items.Add",topic:v.ROOM_UPDATED,parser:passthroughParser},{eventName:"Char.Items.Remove",topic:v.ROOM_UPDATED,parser:passthroughParser},{eventName:"Char.Items.Update",topic:v.ROOM_UPDATED,parser:passthroughParser},{eventName:"Char.Defences.Add",topic:v.DEFENCE_GAINED,parser:passthroughParser},{eventName:"Char.Defences.Remove",topic:v.DEFENCE_LOST,parser:passthroughParser},{eventName:"Char.Afflictions.Add",topic:v.STREAM_LINE,parser:passthroughParser,filter:shouldEmitAffliction,meta:{buffer:"system"}},{eventName:"Char.Afflictions.Remove",topic:v.STREAM_LINE,parser:passthroughParser,filter:shouldEmitAffliction,meta:{buffer:"system"}},{eventName:"Char.Vitals",topic:v.STATS_UPDATED,parser:passthroughParser},{eventName:"nexsys4.system.class.changed",topic:v.CLASS_CHANGED,parser:parseCurrentHostClassChangedPayload,afterEmit:()=>runNexGuiClassReflexForCurrentHostClass()},{eventName:"Comm.Channel.Text",topic:v.STREAM_LINE,parser:passthroughParser},{eventName:"Char.Status",topic:v.STATS_UPDATED,parser:passthroughParser},{eventName:"IRE.Misc.Achievement",topic:v.STATS_UPDATED,parser:passthroughParser,meta:{sourceModel:"stats"}},{eventName:"IRE.Time.List",topic:v.STATS_UPDATED,parser:passthroughParser,meta:{sourceModel:"stats"}},{eventName:"nexSkillMatch",topic:v.TIMER_STARTED,parser:passthroughParser,meta:{sourceModel:"timers"}},{eventName:"nexsys4.serverside.aff.priority.set",topic:v.STREAM_LINE,parser:passthroughParser,meta:{buffer:"system"}},{eventName:"nexsys4.serverside.def.priority.set",topic:v.STREAM_LINE,parser:passthroughParser,meta:{buffer:"system"}}],createStartUpGagHandler=g=>function(){g.gagCurrentBlock()},registerGmcpBindings=({adapter:g,eventBus:A,playerDirectory:I,playerDirectoryLifecycle:C,playerRelationships:e,playerDirectoryDiagnostics:t,remoteService:n,fetchFn:a})=>{const r=resolvePlayerDirectory(I),o=resolvePlayerRelationships$1(e),i=t?.recordPlayerDirectoryDiagnostic??recordPlayerDirectoryDiagnostic,l=n??createNullRemotePlayerService(),s=resolveFetch(a),c=[],u=createStartUpGagHandler(g),m=createLoginTrackerHandler(g,r,o,i,s),d=createCrowdsourceSyncHandler({remoteService:l,getPlayerProfile:r.getPlayerProfile,isSeeded:C?.isDirectorySeeded,recordDiagnostic:i,fetchFn:s,getSelfName:()=>[getCharacterState()?.name,globalThis.GMCP?.Char?.Status?.name].find(isNonEmptyString)?.trim()??null});c.push(g.on("nexSkillMatch",createSkillReplacementEmitHandler(A,"nexSkillMatch"))),c.push(g.on("nexSkillNpcMatch",createSkillReplacementEmitHandler(A,"nexSkillNpcMatch")));for(const p of Qg){const I=createEmitHandler(A,p);c.push(g.on(p.eventName,I))}return globalThis.nexSys||c.push(g.on("IRE.Target.Info",createGatedTargetInfoEmitHandler(A))),c.push(g.on("Comm.Channel.Players",g=>{r.rememberChannelPlayers(g),d(g)})),c.push(g.on("Comm.Channel.Players",m)),seedCurrentRoomState(A),c.push(g.on("IRE.Time.Update",()=>{g.sendGmcp("IRE.Time.Request")})),c.push(g.on("PromptEvent",u,{id:"nexGuiStartUpGag"})),c.push(g.on("nexGuiLoaded",()=>{g.off("PromptEvent","nexGuiStartUpGag"),g.notice("nexGui loaded using startup spam gag.")},{once:!0})),()=>{for(const g of c)g()}},emitStartupReadySignal=g=>{g.send("echo raiseEvent nexGuiLoaded")},createEventBus=({label:g="nexgui4.eventBus",debugEnabled:A=!1,traceLimit:I=500}={})=>{const C=new Map,e=[],pushTrace=(C,t)=>{const n={at:Date.now(),type:C,detail:t};return e.push(n),e.length>I&&e.splice(0,e.length-I),A&&console.log(`[${g}]`,C,t),n},on=(g,A)=>(C.has(g)||C.set(g,new Set),C.get(g).add(A),()=>off(g,A)),off=(g,A)=>C.get(g)?.delete(A);return{on,off,emit:(g,A)=>{pushTrace(g,A),C.get(g)?.forEach(g=>g(A))},clear:()=>{C.clear(),e.length=0},getTrace:()=>[...e],setDebugEnabled:g=>{A=g}}},joinFontFamily=(...g)=>g.join(", "),Xg=joinFontFamily('"Roboto Mono"',"Consolas","monospace"),Jg=Object.freeze([Object.freeze({label:"Roboto Mono",value:Xg}),Object.freeze({label:"Consolas",value:joinFontFamily("Consolas","Monaco","monospace")}),Object.freeze({label:"JetBrains Mono",value:joinFontFamily('"JetBrains Mono"',"Consolas","monospace")}),Object.freeze({label:"Fira Code",value:joinFontFamily('"Fira Code"',"Consolas","monospace")}),Object.freeze({label:"Source Code Pro",value:joinFontFamily('"Source Code Pro"',"Consolas","monospace")}),Object.freeze({label:"Courier New",value:joinFontFamily('"Courier New"',"monospace")})]),normalizeDisplayFontFamily=g=>"string"!=typeof g?Xg:g.trim()||Xg,normalizeDisplayFontSize=(g,A=14)=>{if("number"==typeof g&&Number.isFinite(g)&&g>0)return Math.round(g);if("string"==typeof g){const A=Number.parseFloat(g);if(Number.isFinite(A)&&A>0)return Math.round(A)}return A},readHostDisplayFontFamily=(g={})=>normalizeDisplayFontFamily("function"==typeof g?.get_font_family?g.get_font_family():g?.font_family),readHostDisplayFontSize=(g={})=>normalizeDisplayFontSize(g?.font_size),qg=1,clonePersistenceValue=g=>Array.isArray(g)?g.map(g=>clonePersistenceValue(g)):isPlainObject(g)?Object.fromEntries(Object.entries(g).map(([g,A])=>[g,clonePersistenceValue(A)])):g,normalizeLeafValue=(g,A)=>"boolean"==typeof g?"boolean"==typeof A?A:g:"number"==typeof g?"number"==typeof A&&Number.isFinite(A)?A:g:"string"==typeof g?"string"==typeof A?A:g:clonePersistenceValue(g),applySchemaPatch=(g,A,I)=>{if(isPlainObject(I))for(const C of Object.keys(g)){if("version"===C||!Object.hasOwn(I,C))continue;const e=g[C],t=I[C];Array.isArray(e)?A[C]=Array.isArray(t)?clonePersistenceValue(t):clonePersistenceValue(e):isPlainObject(e)?applySchemaPatch(e,A[C],t):A[C]=normalizeLeafValue(e,t)}},createSchemaSnapshot=(g,...A)=>{const I=clonePersistenceValue(g);for(const C of A)applySchemaPatch(g,I,C);return Object.hasOwn(g,"version")&&(I.version=g.version),I},_g="nexGui4Settings",$g=Object.freeze({SETTINGS:"settings",GAME_STATS:"gameStats",UI:"ui"}),gA=deepFreeze({version:qg,theme:{backgroundImage:"",fontSize:12,displayFontFamily:Xg,displayFontSize:14,backgroundOpacity:.5,hue:0},ui:{loginTracker:!1,msgReplace:!1,showCombatStream:!1,showSystemStream:!1,logoutDownload:!1,virtualizedLogs:!1,allyEnemyFormatting:!0,targetFormatting:!0,damageNumbers:!0,nativeDisplay:!1},party:{goldCollection:!0,targetCalls:!0,affCalls:!0,callTargets:!1,callAffs:!1,gagChat:!1}}),AA=deepFreeze({version:qg,kills:0,month:{deaths:0,goldCap:0,month:0,startingGold:0,startingKills:0,startingXp:0,currentXp:0,xpValue:0,year:0}}),IA=deepFreeze({version:qg,scrollbackModal:{width:600,height:400,x:0,y:0}}),normalizePersistenceFragment=(g,A)=>Array.isArray(g)?Array.isArray(A)?clonePersistenceValue(A):clonePersistenceValue(g):isPlainObject(g)?createSchemaSnapshot(g,A):normalizeLeafValue(g,A),migrateSettingsPersistence=g=>createSchemaSnapshot(gA,g),migrateGameStatsPersistence=g=>createSchemaSnapshot(AA,g),migrateUiPersistence=g=>createSchemaSnapshot(IA,g),parseStoredValue$1=g=>{if("string"!=typeof g)return g;try{return JSON.parse(g)}catch{return g}},isEquivalentValue=(g,A)=>JSON.stringify(g)===JSON.stringify(A),CA="playerDirectory",readRootState=g=>{const A=g.getVariable(_g);if(!A||"object"!=typeof A||Array.isArray(A))return{rootState:{},changed:void 0!==A};if(!Object.hasOwn(A,CA))return{rootState:A,changed:!1};const{[CA]:I,...C}=A;return{rootState:C,changed:!0}},createPersistenceStore=({adapter:g,sliceKey:A=$g.SETTINGS,schema:I=gA,migrate:C=migrateSettingsPersistence}={})=>{const e=assertAdapterContract(g);let t=0;const markChanged=()=>{t+=1},assertSchemaKey=g=>{if("string"!=typeof g||"version"===g||!Object.hasOwn(I,g))throw new Error(`[nexGui4] Unknown persistence key "${String(g)}" for slice "${A}"`)},readState=()=>{const{rootState:g,changed:I}=readRootState(e),t=g[A],n=parseStoredValue$1(t),a=C(n);if(I||void 0===t||"string"==typeof t||!isEquivalentValue(n,a)){const I={...g,[A]:a};e.setVariable(_g,I),markChanged()}return a};return{get:g=>(assertSchemaKey(g),clonePersistenceValue(readState()[g])),set:(g,C)=>{assertSchemaKey(g);const t={...readState(),version:I.version,[g]:normalizePersistenceFragment(I[g],C)},{rootState:n}=readRootState(e),a={...n,[A]:t};return e.setVariable(_g,a),markChanged(),clonePersistenceValue(t[g])},getAll:()=>clonePersistenceValue(readState()),getVersion:()=>t,reset:()=>{const g=clonePersistenceValue(I),{rootState:C}=readRootState(e),t={...C,[A]:g};return e.setVariable(_g,t),markChanged(),clonePersistenceValue(g)}}},bindFunction=(g,A)=>"function"==typeof g?.[A]?g[A].bind(g):null,noopTimer=()=>null,noopClearTimer=()=>{},getPublicDualToneIcons=g=>g.window?.___FONT_AWESOME___?.styles?.fad??null,createBrowserRuntimePorts=(g=globalThis)=>Object.freeze({fetch:bindFunction(g,"fetch"),now:()=>Date.now(),setTimeout:bindFunction(g,"setTimeout")??noopTimer,clearTimeout:bindFunction(g,"clearTimeout")??noopClearTimer,setInterval:bindFunction(g,"setInterval")??noopTimer,clearInterval:bindFunction(g,"clearInterval")??noopClearTimer,getPublicDualToneIcons:()=>getPublicDualToneIcons(g)}),freezePhaseList=g=>Object.freeze([...g]),eA=Object.freeze({INIT:"INIT",PREPARING:"PREPARING",BOOTING:"BOOTING",MOUNTING_UI:"MOUNTING_UI",HYDRATING_LAYOUT:"HYDRATING_LAYOUT",RUNNING:"RUNNING",FAILED:"FAILED",DESTROYED:"DESTROYED"}),tA=Object.freeze({[eA.INIT]:freezePhaseList([eA.PREPARING,eA.DESTROYED]),[eA.PREPARING]:freezePhaseList([eA.BOOTING,eA.FAILED,eA.DESTROYED]),[eA.BOOTING]:freezePhaseList([eA.MOUNTING_UI,eA.FAILED,eA.DESTROYED]),[eA.MOUNTING_UI]:freezePhaseList([eA.HYDRATING_LAYOUT,eA.FAILED,eA.DESTROYED]),[eA.HYDRATING_LAYOUT]:freezePhaseList([eA.RUNNING,eA.FAILED,eA.DESTROYED]),[eA.RUNNING]:freezePhaseList([eA.FAILED,eA.DESTROYED]),[eA.FAILED]:freezePhaseList([eA.PREPARING,eA.DESTROYED]),[eA.DESTROYED]:freezePhaseList([])}),isPhaseTransitionAllowed=(g,A)=>tA[g]?.includes(A)??!1,nA=Object.freeze([eA.PREPARING,eA.BOOTING,eA.MOUNTING_UI,eA.HYDRATING_LAYOUT,eA.RUNNING]),aA=3,rA=250,toErrorMessage=g=>g instanceof Error&&g.message?g.message:"string"==typeof g&&g.length>0?g:"Unknown startup failure",getRetryDelayMs=(g,A)=>A*2**Math.max(0,g-1),createStartupOrchestrator=({adapter:g,eventBus:A,phaseHandlers:I={},maxAttempts:C=aA,retryDelayMs:e=rA,setTimeoutFn:t=setTimeout,clearTimeoutFn:n=clearTimeout})=>{let a=eA.INIT,r=0,o=null,i=null,l=null,s=!1;const getState=()=>({phase:a,attempts:r,lastError:o}),transitionTo=(g,I={})=>{if(!isPhaseTransitionAllowed(a,g))throw new Error(`[nexGui4] Invalid startup phase transition: ${a} -> ${g}`);const C=a;return a=g,A.emit(w.SYSTEM_PHASE,{phase:g,previousPhase:C,attempt:I.attempt??r,...void 0!==I.error?{error:I.error}:{},...void 0!==I.retryDelayMs?{retryDelayMs:I.retryDelayMs}:{},...void 0!==I.permanent?{permanent:I.permanent}:{}}),g===eA.RUNNING&&A.emit(w.SYSTEM_READY,{phase:g,previousPhase:C,attempt:I.attempt??r}),getState()},clearPendingRetry=()=>{l&&(n(l.timerId),l.resolve(),l=null)},waitForRetry=g=>new Promise(A=>{l={timerId:t(()=>{l=null,A()},g),resolve:A}}),runPhase=async C=>{const e=I[C];"function"==typeof e&&await e({phase:C,attempt:r,adapter:g,eventBus:A})},runAttempt=async()=>{r+=1;try{for(const g of nA){if(s)return getState();transitionTo(g,{attempt:r}),await runPhase(g)}return o=null,getState()}catch(A){o=A;const I=r<C,t=I?getRetryDelayMs(r,e):0;if(transitionTo(eA.FAILED,{attempt:r,error:A,...I?{retryDelayMs:t}:{permanent:!0}}),!I)throw g.notice(`[nexGui4] Startup failed after ${r} attempts: ${toErrorMessage(A)}`),A;return await waitForRetry(t),s?getState():runAttempt()}};return{start:()=>i||(s?Promise.reject(new Error("[nexGui4] Cannot start startupOrchestrator after destroy().")):a===eA.RUNNING?Promise.resolve(getState()):(i=runAttempt().finally(()=>{i=null}),i)),destroy:()=>(a===eA.DESTROYED||(s=!0,clearPendingRetry(),transitionTo(eA.DESTROYED,{attempt:r})),getState()),getState}},oA="nexgui4_scrollback",iA=1,lA="session_lines",toSortedLines=g=>Array.from(g.values()).sort((g,A)=>g.id-A.id),resolveIndexedDb=g=>void 0!==g?g:globalThis.indexedDB,resolveKeyRange=g=>void 0!==g?g:globalThis.IDBKeyRange,createIndexedDbManager=({dbName:g=oA,dbVersion:A=iA,storeName:I=lA,indexedDb:C,keyRange:e,logger:t=null}={})=>{const n=resolveIndexedDb(C),a=resolveKeyRange(e);let r=null,o=null,i=new Map,l=!n||!a,s=!1;const debug=(...g)=>t?.debug?.(...g),warn=(...g)=>t?.warn?.(...g),switchToFallback=g=>{r&&(r.close?.(),r=null),l=!0,warn("[nexGui4] IndexedDB unavailable; using in-memory scrollback storage.",g)},assertActive=()=>{if(s)throw new Error("[nexGui4] IndexedDB manager has been destroyed.")},initialize=()=>(assertActive(),l||r?Promise.resolve():o||(o=new Promise(C=>{let e=!1;const settleWithFallback=g=>{e||(e=!0,o=null,switchToFallback(g),C())},settleWithDb=g=>{e?g?.close?.():(e=!0,r=g,debug("[nexGui4] IndexedDB scrollback storage initialized."),C())};let t;try{t=n.open(g,A)}catch(a){return void settleWithFallback(a)}t.onupgradeneeded=g=>{const A=g.target.result;A.objectStoreNames.contains(I)||A.createObjectStore(I,{keyPath:"id"})},t.onsuccess=g=>{settleWithDb(g.target.result)},t.onerror=g=>{settleWithFallback(g.target.error)},t.onblocked=g=>{settleWithFallback(g)}}),o)),ensureDb=async()=>(assertActive(),l?null:r||(await initialize(),r)),writeBatch=async g=>{if(assertActive(),0===g.length)return;if(l){for(const A of g)i.set(A.id,A);return}const A=await ensureDb();if(!l&&A)return new Promise((C,e)=>{const t=A.transaction([I],"readwrite"),n=t.objectStore(I);t.oncomplete=()=>{C()},t.onerror=g=>{e(g.target.error)},t.onabort=g=>{e(g.target.error)};for(const A of g)n.put(A)});await writeBatch(g)},readRange=async(g,A)=>{if(assertActive(),l)return toSortedLines(i).filter(I=>I.id>=g&&I.id<=A);const C=await ensureDb();return l||!C?readRange(g,A):new Promise((e,t)=>{const n=C.transaction([I],"readonly").objectStore(I),r=a.bound(g,A),o=n.getAll(r);o.onsuccess=()=>{e(o.result)},o.onerror=g=>{t(g.target.error)}})},readIds=async g=>{if(assertActive(),0===g.length)return[];if(l)return g.map(g=>i.get(g)).filter(Boolean);const A=await ensureDb();return l||!A?readIds(g):new Promise((C,e)=>{const t=A.transaction([I],"readonly"),n=t.objectStore(I),a=[];let r=!1;t.oncomplete=()=>{if(r)return;const A=new Map(a.map(g=>[g.id,g]));C(g.map(g=>A.get(g)).filter(Boolean))},t.onerror=g=>{r=!0,e(g.target.error)},t.onabort=g=>{r=!0,e(g.target.error)};for(const A of g){const g=n.get(A);g.onsuccess=()=>{void 0!==g.result&&a.push(g.result)}}})},readAll=async()=>{if(assertActive(),l)return toSortedLines(i);const g=await ensureDb();return l||!g?readAll():new Promise((A,C)=>{const e=g.transaction([I],"readonly").objectStore(I).getAll();e.onsuccess=()=>{A(e.result)},e.onerror=g=>{C(g.target.error)}})},clear=async()=>{if(assertActive(),l)return void i.clear();const g=await ensureDb();if(!l&&g)return new Promise((A,C)=>{const e=g.transaction([I],"readwrite").objectStore(I).clear();e.onsuccess=()=>{A()},e.onerror=g=>{C(g.target.error)}});await clear()},close=()=>{r?.close?.(),r=null,o=null},destroy=()=>{s||(close(),i=new Map,s=!0)};return{initialize,writeBatch,readRange,readIds,readAll,clear,close,destroy,isFallback:()=>l}},sA=Object.freeze([]),normalizeEntries=g=>(Array.isArray(g)?g:[]).filter(g=>g&&"number"==typeof g.id).map(g=>({...g})),estimateSearchBytes=(g,A)=>2*A+32*g,createScrollbackSessionStore=({storage:g=createIndexedDbManager(),writeBatchSize:A=500,writeDebounceMs:I=h,setTimeoutFn:C=setTimeout,clearTimeoutFn:e=clearTimeout,logger:t=null}={})=>{let n=[],a=null,r=Promise.resolve(),o=[],i=0,l=!1,s=null;const reportAsyncError=g=>{t?.error?.("[nexGui4] Scrollback session operation failed.",g)},assertActive=()=>{if(l)throw new Error("[nexGui4] Scrollback session store has been destroyed.")},cancelFlushTimer=()=>{a&&(e(a),a=null)},enqueueOperation=g=>{const A=r.then(g);return r=A.catch(()=>{}),A},takePendingWrites=()=>{if(cancelFlushTimer(),0===n.length)return sA;const g=n;return n=[],g},enqueuePendingWrite=()=>{const A=takePendingWrites();return 0===A.length?r:enqueueOperation(()=>g.writeBatch(A))},scheduleFlush=()=>{a||0===n.length||(a=C(()=>{a=null,enqueuePendingWrite().catch(reportAsyncError)},I))},resetSearchRecords=()=>{o=[],i=0},appendSearchRecords=g=>{for(const A of g){const g=stripHtml(A.html).toLowerCase();o.push({id:A.id,isPrompt:Boolean(A.isPrompt),text:g}),i+=g.length}},flush=()=>(assertActive(),enqueuePendingWrite()),readRange=async(A,I)=>(assertActive(),await flush(),enqueueOperation(()=>g.readRange(A,I))),readIds=async A=>(assertActive(),await flush(),Array.isArray(A)&&0!==A.length?enqueueOperation(()=>g.readIds(A)):[]),readAll=async()=>(assertActive(),await flush(),enqueueOperation(()=>g.readAll())),search=async(A,{includePrompts:I=!0}={})=>{assertActive();const C=String(A??"").trim().toLowerCase();if(await flush(),!C)return[];const e=o.filter(g=>I||!g.isPrompt).filter(g=>g.text.includes(C)).map(g=>g.id);return 0===e.length?[]:enqueueOperation(()=>g.readIds(e))};return{initialize:()=>(assertActive(),enqueueOperation(()=>g.initialize?.()??Promise.resolve())),append:g=>{if(l)return;const I=normalizeEntries(g);0!==I.length&&(appendSearchRecords(I),n.push(...I),n.length>=A?enqueuePendingWrite().catch(reportAsyncError):scheduleFlush())},flush,clear:()=>(assertActive(),cancelFlushTimer(),n=[],resetSearchRecords(),enqueueOperation(()=>g.clear())),readRange,readIds,readAll,search,getStats:()=>({pendingCount:n.length,pendingFlushScheduled:Boolean(a),storageFallback:Boolean(g.isFallback?.()),searchLineCount:o.length,searchTextChars:i,estimatedSearchBytes:estimateSearchBytes(o.length,i),writeBatchSize:A,writeDebounceMs:I,destroyed:l}),destroy:()=>{if(s)return s;const A=enqueuePendingWrite();return l=!0,s=A.catch(reportAsyncError).finally(()=>{cancelFlushTimer(),n=[],resetSearchRecords(),"function"==typeof g.destroy?g.destroy():g.close?.()}),s}}},EMPTY_QUERY=async()=>[],NULL_GET=async()=>null,createCdbApi=({query:g=EMPTY_QUERY,get:A=NULL_GET}={})=>Object.freeze({query:A=>g(A),get:g=>A(g)}),createCharacterApi=({characterModel:g=null}={})=>{const getCharacterSnapshot=()=>g?.snapshot?.()??{},A=Object.freeze({get:()=>getCharacterSnapshot().class??"",is:g=>normalizeLookupKey(getCharacterSnapshot().class)===normalizeLookupKey(g)});return Object.freeze({class:A})},EMPTY_ICON_HTML=()=>"",noopNotice=()=>{},createDisplayApi=({playerColor:g=()=>"grey",iconHtml:A=EMPTY_ICON_HTML,notice:I=noopNotice}={})=>{const C="function"==typeof A?A:EMPTY_ICON_HTML,e="function"==typeof I?I:noopNotice;return Object.freeze({playerColor:A=>g(A),iconHtml:(g,A,I)=>C(g,A,I),notice:(g,A)=>e(g,A)})},NOOP$6=()=>{},toFrozenList$1=g=>Object.freeze(Array.isArray(g)?[...g]:[]),createCustomizeApi=({setConfiguredDefences:g=NOOP$6,setClassBalanceType:A=NOOP$6,mountNativeDisplay:I=NOOP$6,unmountNativeDisplay:C=NOOP$6}={})=>{const e=Object.freeze({set:A=>toFrozenList$1(g(A))}),t=Object.freeze({set:g=>A(g)}),n=Object.freeze({mount:()=>{I()},unmount:()=>{C()}});return Object.freeze({defences:e,classBalance:t,nativeDisplay:n})},NOOP$5=()=>!1,toFrozenList=g=>Object.freeze(Array.isArray(g)?[...g]:[]),createLayoutApi=({presetIds:g=[],applyPreset:A=NOOP$5,saveLayout:I=NOOP$5,restoreLayout:C=NOOP$5,hasSavedLayout:e=()=>!1}={})=>{const t=toFrozenList(g);return Object.freeze({list:()=>t,apply:g=>Boolean(A(g)),save:()=>Boolean(I()),restore:()=>Boolean(C()),hasSaved:()=>Boolean(e())})},NOOP$4=()=>({members:[],leader:"",selfName:""}),createPartyApi=({getSnapshot:g=NOOP$4}={})=>{const isMember=A=>{const I=normalizeLookupKey(A);return!!I&&g().members.some(g=>normalizeLookupKey(g)===I)};return Object.freeze({isMember})},toReadOnlySnapshot=g=>g&&"object"==typeof g?deepFreeze(structuredClone(g)):g,createPlayersApi=({getPlayer:g=()=>null,getPlayerColor:A=()=>"grey",refreshPlayer:I=async()=>null,display:C=()=>{},isAlly:e=()=>!1,isEnemy:t=()=>!1,isCityEnemy:n=()=>!1}={})=>{const get=A=>{const I=g(A);return I?toReadOnlySnapshot(I):null},color=g=>A(g),fetch=async A=>{try{const g=await I(A);if(g)return toReadOnlySnapshot(g)}catch{}const C=g(A);return C?toReadOnlySnapshot(C):null},qwFormat=(A,I={})=>{const a=renderQuickWhoHtml((Array.isArray(A)?A:[]).map(A=>{const I="string"==typeof A?A:A?.name;return"string"!=typeof I||""===I.trim()?null:{name:I,city:A&&"object"==typeof A&&null!=A.city?A.city:g(I)?.city,ally:e(I),enemy:t(I),cityEnemy:n(I)}}).filter(Boolean),I);return C(a),a};return Object.freeze({get,color,fetch,qwFormat})},NOOP$3=()=>{},NOOP_LIST=()=>[],NOOP_GET=()=>null,cA=["text","color","background"],normalizeOverride=g=>{if(!g||"object"!=typeof g)return null;const A={};for(const I of cA)"string"==typeof g[I]&&g[I]&&(A[I]=g[I]);return Object.keys(A).length>0?Object.freeze(A):null},createRoomApi=({setItemOverride:g=NOOP$3,removeItemOverride:A=NOOP$3,listItemOverrides:I=NOOP_LIST,getItemOverride:C=NOOP_GET}={})=>{const e=Object.freeze({set:(A,I)=>{const C=normalizeOverride(I);return C?(g(A,C),C):null},remove:g=>{A(g)},get:g=>C(g),list:()=>Object.freeze(I().map(([g,A])=>Object.freeze({name:g,override:A})))});return Object.freeze({items:e})},isTranscriptModel=g=>Boolean(g&&"function"==typeof g.addLines&&"function"==typeof g.getSnapshot),assertHtml=g=>{if("string"!=typeof g||0===g.length)throw new TypeError('api.stream.add requires a non-empty "html" string.')},resolveTargetModel=(g,A,I)=>{if("system"===g)return A;if("combat"===g)return I;throw new RangeError('api.stream.add requires "stream" to be either "system" or "combat".')},toReadOnlyEntry=g=>g?Object.freeze({...g}):null,createStreamApi=({systemStream:g=null,combatStream:A=null,now:I=Date.now}={})=>{const add=({html:C,stream:e}={})=>{assertHtml(C);const t=resolveTargetModel(e,g,A);if(!isTranscriptModel(t))return null;const n=I();return t.addLines([{html:C,timestamp:n,isPrompt:!1,isMonospace:!1,shouldLog:!0,buffer:e}]),toReadOnlyEntry(t.getSnapshot().items.at(-1))};return Object.freeze({add})},NOOP$2=()=>{},normalizeTargetValue=g=>{if(null==g)return null;const A=String(g).trim();return A.length>0?A:null},normalizeTargetLookupKey=g=>null==g?"":normalizeLookupKey(String(g)),createTargetApi=({targetModel:g=null,setTarget:A=NOOP$2}={})=>{const readTarget=()=>g?.read?.()??{};return Object.freeze({get:()=>{const g=readTarget();return{id:g.id??null,name:g.name??null,isPlayer:Boolean(g.isPlayer)}},set:g=>{const I=normalizeTargetValue(g);return A(I),I},is:g=>{const A=normalizeTargetLookupKey(g);if(!A)return!1;const I=readTarget();return normalizeTargetLookupKey(I.id)===A||normalizeTargetLookupKey(I.name)===A}})},createNoopTimerModel=()=>({add:()=>null,clearAll:()=>0,get:()=>null,list:()=>[],remove:()=>null,reset:()=>null,start:()=>null,stop:()=>null}),hasListFilters=g=>"string"==typeof g||null!==g&&"object"==typeof g,resolveGroupId=g=>"string"==typeof g?g:g&&"object"==typeof g&&"string"==typeof g.groupId?g.groupId:null,createTimersApi=({timerModel:g}={})=>{const A=g??createNoopTimerModel(),get=g=>A.get(g),list=g=>{if(!hasListFilters(g))throw new TypeError("api.timers.list requires filters; read nexGui.state.timers.list for the unfiltered snapshot.");return A.list(g)},start=g=>A.start(g),stop=g=>A.stop(g),reset=g=>A.reset(g),remove=g=>A.remove(g),add=(g,I,C="",e)=>A.add(g,I,C,e),clear=g=>{const I=resolveGroupId(g);if(!I)return A.clearAll();const C=A.list({groupId:I});for(const e of C)A.remove(e.id);return C.length};return Object.freeze({add,clear,get,list,remove,reset,start,stop})},toFrozenSnapshot=g=>g&&"object"==typeof g?deepFreeze(structuredClone(g)):g,uA=Object.freeze({name:"",class:"",level:0,gender:null,balance:!1,equilibrium:!1,classBalanceType:null,classBalanceReady:null,currentAffs:Object.freeze([]),limbs:Object.freeze({})}),createCharacterState=({characterModel:g=null}={})=>()=>toFrozenSnapshot(g?.snapshot?.()??uA),createCustomizeState=({getConfiguredDefences:g=()=>[],classBalanceController:A=null}={})=>()=>{const I=g();return toFrozenSnapshot({defences:Array.isArray(I)?I:[],classBalance:A?.getType?.()??null})},mA=Object.freeze({members:Object.freeze([]),leader:"",selfName:"",settings:Object.freeze({})}),createPartyState=({partyModel:g=null}={})=>()=>toFrozenSnapshot(g?.snapshot?.()??mA),dA=Object.freeze(new Map),pA=Object.freeze({}),buildDirectoryMap=g=>{const A=g?.getAllPlayerProfiles?.();if(!Array.isArray(A)||0===A.length)return dA;const I=new Map;for(const C of A){const g=N(C?.name);g&&I.set(g,deepFreeze(structuredClone(C)))}return Object.freeze(I)},createPlayersState=({playerDirectory:g=null,cityPalette:A=pA}={})=>{const I=A&&"object"==typeof A?deepFreeze(structuredClone(A)):pA;let C=null,e=null;return()=>{const A=g?.getVersion?.()??null;if(null!==e&&null!==A&&A===C)return e;const t=Object.freeze({directory:buildDirectoryMap(g),cityPalette:I});return C=A,e=t,t}},hA=Object.freeze({ref:Object.freeze({id:"",name:""}),items:Object.freeze([]),occupants:Object.freeze({players:Object.freeze([]),npcs:Object.freeze([])})}),createRoomState=({roomModel:g=null}={})=>()=>{const A=g?.snapshot?.();return A?toFrozenSnapshot({ref:{id:A.roomId??"",name:A.roomName??""},items:Array.isArray(A.items)?A.items:[],occupants:{players:Array.isArray(A.players)?A.players:[],npcs:Array.isArray(A.npcs)?A.npcs:[]}}):hA},yA=Object.freeze({instance:Object.freeze({kills:0,goldGained:0,xpPercent:0,xpValue:0,deaths:0,startedAt:0}),session:Object.freeze({kills:0,goldGained:0,xpPercent:0,xpValue:0,deaths:0,startedAt:0}),month:Object.freeze({kills:0,goldGained:0,xpPercent:0,xpValue:0,deaths:0,startedAt:0,goldCap:0,year:0,month:0})}),createStatsState=({playStatsModel:g=null}={})=>()=>toFrozenSnapshot(g?.snapshot?.()??yA),createSystemState=({version:g="",isMounted:A=()=>!1,startupOrchestrator:I=null}={})=>()=>toFrozenSnapshot({version:g,mounted:Boolean(A()),phase:I?.getState?.().phase??"INIT"}),fA=Object.freeze(createEmptyTargetRecord()),createTargetState=({targetModel:g=null}={})=>()=>toFrozenSnapshot(g?.snapshot?.()??fA),createTimersState=({timerModel:g=null}={})=>()=>toFrozenSnapshot({list:g?.list?.()??[]}),composePublicApi=({version:g,startupOrchestrator:A,isMounted:I,character:C,target:e,timerModel:t,players:n,colors:a,display:r,customize:o,layout:i,party:l,room:s,stats:c,stream:u,cdb:m}={})=>{const d=createPlayersApi(n),p=createDisplayApi({playerColor:r?.playerColor??a?.playerColor??d.color,iconHtml:r?.iconHtml??a?.iconHtml,notice:r?.notice??a?.notice}),h={system:createSystemState({version:g,isMounted:I,startupOrchestrator:A}),character:createCharacterState({characterModel:C?.characterModel}),target:createTargetState({targetModel:e?.targetModel}),party:createPartyState({partyModel:l?.partyModel}),room:createRoomState({roomModel:s?.roomModel}),stats:createStatsState({playStatsModel:c?.playStatsModel}),players:createPlayersState({playerDirectory:n?.playerDirectory,cityPalette:a?.cityPalette}),timers:createTimersState({timerModel:t}),customize:createCustomizeState({getConfiguredDefences:o?.getConfiguredDefences,classBalanceController:o?.classBalanceController})},stateSnapshot=()=>Object.freeze({system:h.system(),character:h.character(),target:h.target(),party:h.party(),room:h.room(),stats:h.stats(),players:h.players(),timers:h.timers(),customize:h.customize()}),y=Object.freeze({character:createCharacterApi(C),target:createTargetApi(e),players:d,display:p,colors:p,timers:createTimersApi({timerModel:t}),customize:createCustomizeApi(o),layout:createLayoutApi(i),party:createPartyApi({getSnapshot:l?.getSnapshot}),room:createRoomApi(s),stream:createStreamApi(u),cdb:createCdbApi({query:m?.query,get:m?.get})}),b={};return Object.defineProperty(b,"state",{enumerable:!0,get:stateSnapshot}),Object.defineProperty(b,"api",{value:y,enumerable:!0}),Object.freeze(b)},bA="feather-pointed",tab=(g,A={})=>({type:"tab",id:g,name:g,component:g,helpText:g,icon:bA,...A}),hostTab=g=>({type:"tab",...g}),rightBorder=(g={})=>({type:"border",location:"right",...g}),xA={layout:{type:"row",id:"main",children:[{type:"row",id:"#f21df3e7-48ef-48f4-b77d-96a4cfc93903",weight:11.055408908360821,children:[{type:"tabset",id:"container_1",weight:6.080414549807837,children:[tab("nexDefences")]},{type:"tabset",id:"#fc94a4e0-6b58-42b5-826f-6e0c3bec80a7",weight:5.235912529001193,children:[tab("nexTimers")]},{type:"tabset",id:"#3251f844-bd3f-4ebb-aca9-9a4dfe9d0add",weight:5.49476101474438,children:[tab("nexTarget")]},{type:"tabset",id:"#5a449b58-0188-4ab9-9c98-023ed517a477",weight:5.316690055933218,children:[tab("nexStats",{borderWidth:725})]}]},{type:"row",id:"#70e4ecdf-81dc-40c6-b536-b62595eff99b",weight:54.4266284719302,children:[{type:"tabset",id:"#f85f4040-6d4a-49c7-94bd-7244f1a3b32d",weight:11.507047541573453,children:[hostTab({id:"all_comm",name:"All Comm",helpText:"Global Communication Window",component:"all_comm",icon:"message-lines"})]},{type:"tabset",id:"#fdd3f126-a4e3-4f24-9e2b-03b2f25825ec",weight:46.37955039657086,enableDrop:!1,enableTabStrip:!1,active:!0,children:[hostTab({id:"#90968890-c02d-44ac-947a-5651201350c8",component:"center"})]}]},{type:"row",id:"#105ad70c-29c2-4f15-b764-c2c124fd5e36",weight:41.18462928637565,children:[{type:"row",id:"#6c8d384b-ce25-444f-9ece-92e8d7c1c7f4",weight:26.295598569968487,children:[{type:"tabset",id:"#14f8b2aa-bc7c-4e2b-b6cb-b05931394b2a",weight:48.76712328767123,children:[tab("nexFeed")]},{type:"tabset",id:"#887e45a7-0b29-446f-862b-d6dde018fc96",weight:51.23287671232877,children:[tab("nexMetrics")]}]},{type:"row",id:"#64cee95d-aaef-477c-965e-76cdabd2a677",weight:35.830262173583016,children:[{type:"row",id:"#c365b5e0-6c0c-4de0-81f2-872ed286499d",weight:39.93115318416523,children:[{type:"tabset",id:"#01137e43-37f6-4f66-aa8a-b129d202fc29",weight:49.54337899543379,children:[tab("nexItems")]},{type:"tabset",id:"#e4c4c437-aba2-45ff-b168-f72896c253fa",weight:50.45662100456621,children:[tab("nexNpcs")]}]},{type:"tabset",id:"#59491b6a-bab3-415d-8367-25c562f46ae9",weight:60.06884681583477,selected:1,children:[hostTab({id:"map",name:"Map",helpText:"Map",component:"map",icon:"route"}),hostTab({id:"nexMap",name:"nexMap",helpText:"nexMap",component:"nexMap",icon:bA})]}]},{type:"tabset",id:"#63176cb9-c8b3-452a-afff-1e828d13e678",weight:6.009664560737805,children:[tab("nexPlayers")]},{type:"row",id:"#9e30489f-3eaf-4afe-90f6-23087c97698d",weight:19.364474695710708,children:[{type:"tabset",id:"#688e21f9-7929-4c29-92ce-9a9500c8fb63",weight:34.47319574635062,children:[tab("nexCombat")]},{type:"tabset",id:"#a79f5a9f-83b7-4f6a-b3c9-1c3e5843cc7e",weight:34.83104898939232,children:[tab("nexSystem")]}]}]}]},borders:[rightBorder({size:700,children:[tab("nexOptions",{borderWidth:300}),tab("nexParty",{borderWidth:300})]}),{type:"border",location:"left",children:[]},{type:"border",location:"top",children:[]},{type:"border",location:"bottom",children:[]}]},vA={layout:{type:"row",id:"main",children:[{type:"row",id:"#70e4ecdf-81dc-40c6-b536-b62595eff99b",weight:57.26509774852639,children:[{type:"tabset",id:"#f85f4040-6d4a-49c7-94bd-7244f1a3b32d",weight:17.557736227615205,selected:1,children:[hostTab({id:"map",name:"Map",helpText:"Map",component:"map",icon:"route"}),hostTab({id:"nexMap",name:"nexMap",helpText:"nexMap",component:"nexMap",icon:bA})]},{type:"row",id:"#bcb4f90b-4716-4f9b-9b22-ffd8741be626",weight:7.090289581370549,children:[{type:"tabset",id:"#b54bf1ab-4145-4041-9e67-8e6b789724b1",weight:11.363636363636363,children:[tab("nexPlayers")]},{type:"tabset",id:"#3df7c443-17f5-406e-9a45-54879deb731e",weight:26.79425837320574,children:[tab("nexNpcs")]},{type:"tabset",id:"#5c7c36a2-9496-4e6f-a1df-c581f898f7ac",weight:36.8421052631579,active:!0,children:[tab("nexItems")]}]},{type:"tabset",id:"#1eaac23b-4eae-486d-8915-90a25f41f9e0",weight:2.6494514015995967,children:[hostTab({id:"all_comm",name:"All Comm",helpText:"Global Communication Window",component:"all_comm",icon:"message-lines"})]},{type:"tabset",id:"#fdd3f126-a4e3-4f24-9e2b-03b2f25825ec",weight:30.58912072755898,enableDrop:!1,enableTabStrip:!1,children:[hostTab({id:"#90968890-c02d-44ac-947a-5651201350c8",component:"center"})]}]}]},borders:[rightBorder({size:700,children:[tab("nexOptions",{borderWidth:300}),tab("nexParty",{borderWidth:300}),tab("nexMetrics"),tab("nexStats",{borderWidth:725}),tab("nexCombat"),tab("nexSystem"),tab("nexTarget"),tab("nexDefences"),tab("nexTimers"),tab("nexFeed")]})]},EA=Object.freeze({kDesktop:xA,mobile:vA}),wA=Object.freeze(Object.keys(EA)),getLayoutPreset=g=>EA[g]??null,createCharacterStore=({characterModel:g,eventBus:A})=>{const C=(0,I.create)(()=>({...g.read(),updateCharacter:A=>g.update(A),setClass:A=>g.setClass(A)})),refreshCharacter=()=>{C.setState(g.read())};return A.on(x.CHARACTER_UPDATED,refreshCharacter),A.on(x.CLASS_CHANGED,refreshCharacter),C},createTargetStore=({targetModel:g,eventBus:A})=>{const C=(0,I.create)(()=>({...g.read()})),refreshTarget=()=>{C.setState(g.read())};return A.on(x.TARGET_CHANGED,refreshTarget),C},projectEntries=(g,A)=>g.length===A.length&&g.every((g,I)=>Object.is(g,A[I]))?g:A,createFeedStore=({feedModel:g})=>(0,I.create)((A,I)=>{const refresh=()=>{A({entries:projectEntries(I().entries,g.snapshot())})};return{entries:g.snapshot(),addEntry:A=>{g.add(A),refresh()},addEntries:A=>{if("function"==typeof g.addEntries)g.addEntries(A);else for(const I of A)g.add(I);refresh()},replaceEntries:A=>{if("function"==typeof g.replaceEntries)g.replaceEntries(A);else{g.clear();for(const I of A)g.add(I)}refresh()},clear:()=>{g.clear(),refresh()}}}),createPartyStore=({partyModel:g,eventBus:A})=>{const readParty=()=>g.read?.()??g.snapshot(),C=(0,I.create)(()=>({...readParty(),updateParty:A=>g.update(A),addMember:A=>g.addMember(A),removeMember:A=>g.removeMember(A),setLeader:A=>g.setLeader(A),setSelf:A=>g.setSelf(A),setSetting:(A,I)=>g.setSetting(A,I)})),refreshParty=()=>{C.setState(readParty())};return A.on(x.PARTY_UPDATED,refreshParty),A.on(x.PARTY_MEMBER_LEFT,refreshParty),C},RA=/^You have gained (\d+) experience\.$/,SA=/^You have made (\d+) out of 450000 gold this month\.$/,toFiniteNumber=(g,A=null)=>{const I="number"==typeof g?g:"string"==typeof g&&g.trim().length>0?Number(g):NaN;return Number.isFinite(I)?I:A},toInteger=(g,A=null)=>{const I=toFiniteNumber(g,NaN);return Number.isFinite(I)?Math.trunc(I):A},toStatusXp=g=>{if(!g||"object"!=typeof g)return null;const A="string"==typeof g.level?Number.parseInt(g.level,10):toInteger(g.level,null),I=toFiniteNumber("string"==typeof g.xp?g.xp.replace("%",""):g.xp,null);return null==A||null==I?null:A+I/100},makeScope=g=>({kills:0,goldGained:0,xpPercent:0,xpValue:0,deaths:0,startedAt:g}),makeMonthScope=g=>({...makeScope(g),goldCap:0,year:0,month:0}),cloneSnapshot=g=>structuredClone(g),normalizePersistedStats=g=>migrateGameStatsPersistence(g??AA),createPlayStatsModel=({persistedGameStats:g,now:A=()=>Date.now()}={})=>{const I=A(),C=normalizePersistedStats(g),e=C.month??AA.month,t=toInteger(e.xpValue??e.xp,0);let n=toInteger(C.kills,0),a=null,r=toFiniteNumber(e.currentXp,null);const o=new Set,i=new Set,l=I,s={instance:{initialized:!1,startingGold:null,startingKills:n,startingXp:null,startedAt:I},session:{initialized:!1,startingGold:null,startingKills:n,startingXp:null,startedAt:I},month:{initialized:toInteger(e.year,0)>0&&toInteger(e.month,0)>0,startingGold:toInteger(e.startingGold,null),startingKills:toInteger(e.startingKills,n),startingXp:toFiniteNumber(e.startingXp,null),startedAt:l}};let c={instance:makeScope(I),session:makeScope(I),month:{...makeMonthScope(l),goldCap:toInteger(e.goldCap,0),year:toInteger(e.year,0),month:toInteger(e.month,0),xpValue:t,deaths:toInteger(e.deaths,0)}};const read=()=>c,updateScope=(g,A)=>{if(!A||"object"!=typeof A)return;const I=c[g],C={...I,...A};Object.keys(A).some(g=>!Object.prototype.hasOwnProperty.call(I,g)||!Object.is(I[g],C[g]))&&(c={...c,[g]:C})},toPersistenceSnapshot=()=>({kills:n,month:{deaths:c.month.deaths,goldCap:c.month.goldCap,month:c.month.month,startingGold:s.month.startingGold??0,startingKills:s.month.startingKills??n,startingXp:s.month.startingXp??0,currentXp:r??0,xpValue:c.month.xpValue,year:c.month.year}}),emitRead=()=>{const g=read();o.forEach(A=>A(g))},emitPersistenceSnapshot=()=>{const g=toPersistenceSnapshot();i.forEach(A=>A(g))},emitChange=({persist:g=!1}={})=>{emitRead(),g&&emitPersistenceSnapshot()},ensureScopeBaseline=g=>{const A=s[g];A.initialized||null==a||(A.initialized=!0,A.startingGold=a,A.startingKills=n,A.startingXp=r>0?r:null)},refreshScope=g=>{const A=s[g];if(!A.initialized||null==A.startingGold||null==a)return;const I={kills:n-A.startingKills,goldGained:a-A.startingGold};null==A.startingXp&&r>0&&(A.startingXp=r),null!=A.startingXp&&r>0&&(I.xpPercent=Number((100*(r-A.startingXp)).toFixed(2))),updateScope(g,I)},refreshAllScopes=()=>{ensureScopeBaseline("instance"),ensureScopeBaseline("session"),ensureScopeBaseline("month"),refreshScope("instance"),refreshScope("session"),refreshScope("month"),emitChange({persist:!0})},incrementXpValue=g=>{!Number.isFinite(g)||g<=0||(updateScope("instance",{xpValue:c.instance.xpValue+g}),updateScope("session",{xpValue:c.session.xpValue+g}),updateScope("month",{xpValue:c.month.xpValue+g}),emitChange({persist:!0}))},setMonthGoldCap=g=>{!Number.isFinite(g)||g<0||(updateScope("month",{goldCap:g}),emitChange({persist:!0}))};return{destroy:()=>{o.clear(),i.clear()},handleAchievement:g=>{if("TotalCreaturesKilled"!==g?.name)return{requestGoldCap:!1};const A=toInteger(g?.value,n);return null!=A&&(n=A,refreshAllScopes()),{requestGoldCap:!0}},handleStatus:g=>{a=toInteger(g?.gold,a),r=toStatusXp(g)??r,refreshAllScopes()},handleTimeList:g=>{const I=toInteger(g?.mon,null),C=toInteger(g?.year,null);if(null!=I){if(I!==c.month.month||null!=C&&C!==c.month.year){const g=A();return s.month={initialized:null!=a&&null!=r,startingGold:a,startingKills:n,startingXp:r,startedAt:g},c={...c,month:{...makeMonthScope(g),year:C??0,month:I}},void emitChange({persist:!0})}updateScope("month",{year:C??c.month.year,month:I}),emitChange({persist:!0})}},processStreamEntries:g=>{Array.isArray(g)&&0!==g.length&&g.forEach(g=>{if(g?.isPrompt)return;const A=stripHtml(g?.html).trim(),I=A.match(RA);if(I)return void incrementXpValue(toInteger(I[1],0));const C=A.match(SA);C&&setMonthGoldCap(toInteger(C[1],0))})},read,resetInstance:()=>{const g=A();s.instance={initialized:null!=a&&null!=r,startingGold:a,startingKills:n,startingXp:r,startedAt:g},c={...c,instance:makeScope(g)},emitChange()},snapshot:()=>cloneSnapshot(c),subscribe:g=>(o.add(g),()=>o.delete(g)),subscribePersistence:g=>(i.add(g),()=>i.delete(g)),toPersistenceSnapshot,updateInstance:g=>{updateScope("instance",g),emitChange()},updateMonth:g=>{updateScope("month",g),emitChange()},updateSession:g=>{updateScope("session",g),emitChange()}}},createPlayStatsStore=({playStatsModel:g}={})=>{const A=g??createPlayStatsModel(),C=(0,I.create)(()=>({...A.read(),updateInstance:g=>A.updateInstance(g),updateSession:g=>A.updateSession(g),updateMonth:g=>A.updateMonth(g),resetInstance:()=>A.resetInstance()})),refreshStats=()=>{C.setState(A.read())},e=A.subscribe(refreshStats);return Object.defineProperty(C,"destroy",{value:()=>{e()},enumerable:!1}),C},createRoomStore=({roomModel:g,eventBus:A})=>{const readRoom=()=>g.read?.()??g.snapshot(),C=(0,I.create)(()=>({...readRoom(),updateRoom:A=>g.update(A)})),refreshRoom=()=>{C.setState(readRoom())};return A.on(x.ROOM_UPDATED,refreshRoom),C},createStatsStore=({statsModel:g,eventBus:A})=>{const C=(0,I.create)(()=>({...g.read(),updateStats:A=>g.update(A)})),refreshStats=()=>{C.setState(g.read())};return A.on(x.STATS_UPDATED,refreshStats),C},immer$1=g=>(I,C,e)=>(e.setState=(g,C,...e)=>I("function"==typeof g?(0,A.produce)(g):g,C,...e),g(e.setState,C,e)),MA=Object.freeze({purpleGalaxy:"https://cdn.pixabay.com/photo/2018/12/18/22/30/background-3883188_960_720.jpg",blueGalaxy:"https://cdn.pixabay.com/photo/2022/06/08/05/47/stars-7249785_960_720.jpg",orangeGalaxy:"https://cdn.pixabay.com/photo/2015/08/28/11/27/space-911785_960_720.jpg",greenGalaxy:"https://cdn.pixabay.com/photo/2017/08/15/08/23/stars-2643089_960_720.jpg",stars:"https://s3-us-west-2.amazonaws.com/s.cdpn.io/1231630/stars.png",darkForest:"https://i.pinimg.com/originals/44/6e/3b/446e3b79395a287ca32f7977dd83b290.jpg"}),TA=Object.freeze(Object.keys(MA)),NA=new Map(Object.entries(MA).map(([g,A])=>[A,g])),canonicalizeBackgroundImageValue=g=>{if("string"!=typeof g)return"";const A=g.trim();return A?Object.hasOwn(MA,A)?A:NA.get(A)??A:""},resolveBackgroundImageSource=g=>{const A=canonicalizeBackgroundImageValue(g);return MA[A]??A},GA=deepFreeze({background:{primary:"#0d0d0d",panel:"#141414",header:"#1a1a1a",modal:"#1e1e1e"},text:{primary:"#FFF5D6",secondary:"#C0B090",muted:"#706050",accent:"#FFD700"},game:{hp:"#e05555",mp:"#5588e0",ep:"#55c055",wp:"#e0a035",nl:"#a055e0",timerActive:"#55aaff",timerCritical:"#ff5533"},spacing:{unit:4},radius:{panel:4,tag:2},theme:{backgroundImage:"",fontSize:12,displayFontFamily:Xg,displayFontSize:14,backgroundOpacity:.5,hue:0},replacement:{bracketAllyColor:"#ffffff",bracketEnemyColor:"#ff0000",targetBorderColor:"rgb(255, 0, 0)",selfNameColor:"lightpink",infoColor:"cadetblue",unknownNameColor:"grey",npcTagBracketColor:"red",damageNumberBracketColor:"#808080"}}),cloneTokens$1=g=>structuredClone(g),mergeTokenPatch=(g,A)=>{const I=cloneTokens$1(g);if(!isPlainObject(A))return I;const applyPatch=(g,A)=>{for(const[I,C]of Object.entries(A))void 0!==C&&(Array.isArray(C)?g[I]=structuredClone(C):isPlainObject(C)&&isPlainObject(g[I])?applyPatch(g[I],C):g[I]=structuredClone(C))};return applyPatch(I,A),I},normalizeThemeTokens=g=>{if(!isPlainObject(g))return g;const A={...g};return Object.hasOwn(g,"backgroundImage")&&(A.backgroundImage=canonicalizeBackgroundImageValue(g.backgroundImage)),Object.hasOwn(g,"displayFontFamily")&&(A.displayFontFamily=normalizeDisplayFontFamily(g.displayFontFamily)),Object.hasOwn(g,"displayFontSize")&&(A.displayFontSize=normalizeDisplayFontSize(g.displayFontSize)),{...A}},normalizeTokens=g=>({...g,theme:normalizeThemeTokens(g.theme)}),createThemeStore=({eventBus:g,persistenceStore:A}={})=>{const C=normalizeTokens(mergeTokenPatch(GA,{theme:A&&"function"==typeof A.get?normalizeThemeTokens(A.get("theme")):void 0})),e=(0,I.create)(immer$1(()=>({tokens:C,updateTokens:I=>{const C=normalizeTokens(mergeTokenPatch(e.getState().tokens,I));A&&"function"==typeof A.set&&A.set("theme",C.theme),e.setState({tokens:C}),g.emit(w.THEME_CHANGED,{tokens:cloneTokens$1(C)})},resetTokens:()=>{const I=cloneTokens$1(GA);A&&"function"==typeof A.set&&A.set("theme",I.theme),e.setState({tokens:I}),g.emit(w.THEME_CHANGED,{tokens:cloneTokens$1(I)})}})));return e},createTimerStore=({timerModel:g,eventBus:A})=>{const readTimers=()=>g.read?.()??g.snapshot(),C=(0,I.create)(()=>({timers:readTimers(),addTimer:(A,I,C="",e)=>g.add(A,I,C,e),removeTimer:A=>g.remove(A),clearAll:()=>g.clearAll()})),refreshTimers=()=>{C.setState({timers:readTimers()})};return A.on(x.TIMER_STARTED,refreshTimers),A.on(x.TIMER_UPDATED,refreshTimers),A.on(x.TIMER_EXPIRED,refreshTimers),A.on(x.TIMER_CLEARED,refreshTimers),C},createUiStore=({persistenceStore:g}={})=>(0,I.create)(immer$1((A,I)=>({activeTab:{},modalOpen:null,settings:g?.get?.("ui")??{},netflixMode:!1,setActiveTab:(g,I)=>A(A=>{A.activeTab[g]=I}),openModal:g=>A({modalOpen:g}),closeModal:()=>A({modalOpen:null}),setSetting:(C,e)=>{const t={...I().settings,[C]:e};A(g=>{g.settings=t}),g?.set?.("ui",t)},setNetflixMode:g=>A(A=>{A.netflixMode=Boolean(g)})}))),fetchLiveCharacter=async(g,{fetchFn:A=null}={})=>{const I="string"==typeof g?g.trim():"";if(!I)return null;const{outcome:C,data:e}=await fetchPublicProfileForSync(I,{fetchFn:A});if(C!==pg.OK||!e)return null;const t=sg.safeParse(e);return t.success?t.data:null},createMessageRegistry=()=>{const g=new Map;return{register:(A,I)=>(g.set(A,I),I),lookup:A=>g.get(A)??null,listTypes:()=>[...g.keys()].sort((g,A)=>g.localeCompare(A))}},kA=["#000000","#800000","#008000","#808000","#000080","#800080","#008080","#c0c0c0","#808080","#ff0000","#00ff00","#ffff00","#0000ff","#ff00ff","#00ffff","#ffffff"],DA=[0,95,135,175,215,255],hex2=g=>g.toString(16).padStart(2,"0"),jA={};for(let Ze=0;Ze<16;Ze++)jA[Ze]=kA[Ze];for(let Ze=16;Ze<=231;Ze++){const g=Ze-16,A=Math.floor(g/36),I=Math.floor(g%36/6),C=g%6,e=DA[A],t=DA[I],n=DA[C];jA[Ze]=`#${hex2(e)}${hex2(t)}${hex2(n)}`}for(let Ze=232;Ze<=255;Ze++){const g=8+10*(Ze-232);jA[Ze]=`#${hex2(g)}${hex2(g)}${hex2(g)}`}var PA=/\x1b\[([0-9;]*)m|([^\x1b]+)/g,stdColor=(g,A)=>jA[A?g+8:g],parseAnsi=g=>{const A=[];let I,C=null,e=null,t=!1;for(PA.lastIndex=0;null!==(I=PA.exec(g));){if(void 0!==I[2]){A.push({text:I[2],fg:C,bg:e,bold:t});continue}const g=I[1],n=0===g.length?[0]:g.split(";").map(Number);let a=0;for(;a<n.length;){const g=n[a];0===g?(C=null,e=null,t=!1):1===g?t=!0:g>=30&&g<=37?C=stdColor(g-30,t):g>=40&&g<=47?e=stdColor(g-40,!1):g>=90&&g<=97?C=jA[g-90+8]:g>=100&&g<=107?e=jA[g-100+8]:38===g&&5===n[a+1]&&void 0!==n[a+2]?(C=jA[n[a+2]]??null,a+=2):48===g&&5===n[a+1]&&void 0!==n[a+2]&&(e=jA[n[a+2]]??null,a+=2),a++}}return A},BA=/\x1b\[[0-9;]*m/g,OA=/^\d+h,\s*\d+m,\s*\d+e,\s*\d+w/,parsePromptLine=g=>{const A=g.replace(BA,"").trim();return{isPrompt:OA.test(A),text:A}},renderCombatLine=g=>{const A=resolveTimestamp(g);return createDisplayLine({html:renderStructuredRowHtml(g,"combat"),timestamp:A,isPrompt:!1,isMonospace:!1,shouldLog:g.shouldLog??!0,buffer:"combat"})},renderSystemLine=g=>{const A=resolveTimestamp(g);return createDisplayLine({html:renderStructuredRowHtml(g,"system"),timestamp:A,isPrompt:!1,isMonospace:!1,shouldLog:g.shouldLog??!0,buffer:"system"})},LA=Object.freeze({main:renderColorLine,system:renderSystemLine,combat:renderCombatLine,replacement:renderReplacementLine}),isMessageInput=g=>Boolean(g&&"object"==typeof g&&!Array.isArray(g)&&"string"==typeof g.event&&Object.prototype.hasOwnProperty.call(g,"payload")),parseRawLine=(g,A,I)=>{const C=A(g),e=I(g);return{type:"main",buffer:"main",segments:C,metadata:{text:e.text,source:"raw"},isPrompt:e.isPrompt,isMonospace:e.isPrompt,shouldLog:!0}},withTimestamp=(g,A)=>null!=g.timestamp||null!=g.metadata?.timestamp?g:{...g,timestamp:A()},validateDependencies=(g,A,I)=>{if(!g||"function"!=typeof g.addLines)throw new TypeError("createMessagePipeline requires a streamModel with addLines(lines).");if(null!=I&&"function"!=typeof I.addLines)throw new TypeError("createMessagePipeline side transcript models must expose addLines(lines).");if(!A||"function"!=typeof A.register||"function"!=typeof A.lookup)throw new TypeError("createMessagePipeline requires a registry with register(type, renderer) and lookup(type).")},createMessagePipeline=({streamModel:g,registry:A=createMessageRegistry(),parseAnsi:I=parseAnsi,parsePromptLine:C=parsePromptLine,parseStreamEventLine:e=parseStreamEventLine,renderColorLine:t=LA.main,renderCombatLine:n=LA.combat,renderReplacementLine:a=LA.replacement,renderSystemLine:r=LA.system,systemStreamModel:o=null,combatStreamModel:i=null,now:l=Date.now})=>{validateDependencies(g,A,o),validateDependencies(g,A,i),A.register("main",t),A.register("system",r),A.register("combat",n),A.register("replacement",a);const resolveTargetModel=A=>"system"===A?o??g:"combat"===A?i??g:g,renderAndStore=g=>{if(!g)return null;const I=A.lookup(g.type);if(!I)return null;const C=I(withTimestamp(g,l));return resolveTargetModel(C?.buffer??g.buffer).addLines([C]),C};function process(g,A){return"string"==typeof g&&1===arguments.length?renderAndStore(parseRawLine(g,I,C)):"string"==typeof g&&arguments.length>1?renderAndStore(e(g,A)):isMessageInput(g)?renderAndStore(e(g.event,g.payload)):null}return{process,registry:A}},parseLevel=g=>{if("number"==typeof g&&Number.isFinite(g))return g;if("string"!=typeof g)return 0;const A=g.match(/\d+/);return A?Number.parseInt(A[0],10):0},buildVitalsStatsPatch=g=>isPlainObject(g)?{hp:{current:toNumber(g.hp),max:toNumber(g.maxhp)},mp:{current:toNumber(g.mp),max:toNumber(g.maxmp)},ep:{current:toNumber(g.ep),max:toNumber(g.maxep)},wp:{current:toNumber(g.wp),max:toNumber(g.maxwp)},nl:{current:toNumber(g.nl),max:toNumber(g.maxnl,100)}}:null,buildVitalsCharacterPatch=g=>isPlainObject(g)?{balance:toBooleanFlag(g.bal),equilibrium:toBooleanFlag(g.eq),...buildCharacterDetailPatch(g)??{}}:null,buildStatusSync=g=>{if(!isPlainObject(g))return null;const A=toPercent(g.xp),I=toTrimmedString(g.class);return{statsPatch:{gold:toNumber(g.gold),bank:toNumber(g.bank),...null==A?{}:{xp:A,xpToNext:Math.max(0,100-A)}},characterPatch:{...toTrimmedString(g.name)?{name:g.name.trim()}:{},level:parseLevel(g.level),...buildCharacterDetailPatch(g)??{}},className:I,city:toTrimmedString(g.city)}},isBridgeEnvelope=g=>isPlainObject(g)&&"string"==typeof g.event&&Object.prototype.hasOwnProperty.call(g,"data"),createGmcpIngressController=({adapter:g,eventBus:A,timerModel:I,streamModel:C,systemStreamModel:e,combatStreamModel:t,statsModel:n,partyModel:a,roomModel:r,characterModel:o,targetModel:i,defenceModel:l,classBalanceController:s,playerDirectory:c,roomOccupantsModel:u=createRoomOccupantsModel({roomModel:r,playerDirectory:c}),partyAutomationModel:m=createPartyAutomationModel({characterModel:o,partyModel:a,playerDirectory:c,sendCommand:A=>g.send(A)})}={})=>{const d=createMessagePipeline({streamModel:C,systemStreamModel:e,combatStreamModel:t}),p=[],subscribe=(g,I)=>{p.push(A.on(g,I))},processDisplayBridge=g=>{isBridgeEnvelope(g)&&d.process(g.event,g.data)};return subscribe(v.STREAM_LINE,g=>{isBridgeEnvelope(g)&&(applyCharacterAfflictionEvent(o,g.event,g.data),m.processEvent(g.event,g.data),processDisplayBridge(g))}),subscribe(v.TIMER_STARTED,g=>{if(!isBridgeEnvelope(g)||"nexSkillMatch"!==g.event)return;if("self"!==g.data?.user)return;const A=toTrimmedString(g.data?.id);if(!A)return;const C=I.get(A);C&&I.start(C.id)}),subscribe(v.DEFENCE_GAINED,g=>{if(!isBridgeEnvelope(g))return;const A=extractNamedValue(g.data);A&&l.gain(A),processDisplayBridge(g)}),subscribe(v.DEFENCE_LOST,g=>{if(!isBridgeEnvelope(g))return;const A=extractNamedValue(g.data);A&&l.lose(A),processDisplayBridge(g)}),subscribe(v.TARGET_CHANGED,g=>{isBridgeEnvelope(g)&&(i.setIdentity(g.data),processDisplayBridge(g))}),subscribe(v.STATS_UPDATED,g=>{if(isBridgeEnvelope(g)){if("Char.Vitals"===g.event){const A=buildVitalsStatsPatch(g.data),I=buildVitalsCharacterPatch(g.data),C=s.updateFromVitals(g.data);A&&n.update(A),(I||C)&&o.update({...I??{},...C??{}})}if("Char.Status"===g.event){const A=buildStatusSync(g.data);if(!A)return;n.update(A.statsPatch),o.update(A.characterPatch),a.setSelf(A.characterPatch.name??g.data?.name),c.rememberPlayerStatus({...g.data,name:A.characterPatch.name??g.data?.name,city:A.city,fullname:g.data?.fullname}),A.className&&o.setClass(A.className)}}}),subscribe(v.ROOM_UPDATED,g=>{isBridgeEnvelope(g)&&u.apply(g.event,g.data)}),subscribe(v.CLASS_CHANGED,g=>{if(!isBridgeEnvelope(g))return;const A=toTrimmedString(g.data?.class)??toTrimmedString(g.data);A&&o.setClass(A)}),Object.freeze({destroy:()=>{p.forEach(g=>g?.())}})},zA=Object.freeze({}),areDisplayHostSettingsEqual=(g,A)=>g.showPrompts===A.showPrompts&&g.showTimestamps===A.showTimestamps,freezeDisplayHostSettings=g=>Object.freeze(g),readDisplayHostSettings=g=>{const A=g?.()??zA;return freezeDisplayHostSettings({showPrompts:Boolean(A.show_prompts),showTimestamps:Boolean(A.show_timestamps)})},resolvePayloadSnapshot$2=(g,A)=>{if(!A||"object"!=typeof A||"string"!=typeof A.key)return null;if(!("value"in A))return null;switch(A.key){case"show_prompts":{const I=Boolean(A.value);return I===g.showPrompts?g:freezeDisplayHostSettings({...g,showPrompts:I})}case"single_prompt":{const I=!Boolean(A.value);return I===g.showPrompts?g:freezeDisplayHostSettings({...g,showPrompts:I})}case"show_timestamps":{const I=Boolean(A.value);return I===g.showTimestamps?g:freezeDisplayHostSettings({...g,showTimestamps:I})}default:return null}},createHostDisplaySettingsModel=({eventBus:g,readHostSettings:A})=>{if(!g||"function"!=typeof g.on)throw new Error("createHostDisplaySettingsModel requires an eventBus with on(topic, listener).");if("function"!=typeof A)throw new Error("createHostDisplaySettingsModel requires readHostSettings().");let I=readDisplayHostSettings(A);const C=new Set,notifyListeners=()=>{for(const g of C)g()},commitSnapshot=g=>(!g||areDisplayHostSettingsEqual(I,g)||(I=g,notifyListeners()),I),syncFromHost=()=>commitSnapshot(readDisplayHostSettings(A)),handleHostSettingsChanged=g=>{const A=resolvePayloadSnapshot$2(I,g);A&&commitSnapshot(A)},e=g.on(w.HOST_SETTINGS_CHANGED,handleHostSettingsChanged),t=g.on(w.SYSTEM_PHASE,syncFromHost),subscribe=g=>(C.add(g),()=>{C.delete(g)}),getSnapshot=()=>I,destroy=()=>{e?.(),t?.(),C.clear()};return Object.freeze({destroy,getSnapshot,subscribe})},ZA=Object.freeze({}),areHostSettingsEqual=(g,A)=>g.echo_input===A.echo_input&&g.echo_gmcp===A.echo_gmcp&&g.single_prompt===A.single_prompt&&g.show_timestamps===A.show_timestamps,freezeHostSettings=g=>Object.freeze(g),readHostSettingsFromHost=g=>{const A=g?.()??ZA;return freezeHostSettings({echo_input:Boolean(A.echo_input),echo_gmcp:Boolean(A.echo_gmcp),single_prompt:!Boolean(A.show_prompts),show_timestamps:Boolean(A.show_timestamps)})},resolvePayloadSnapshot$1=(g,A)=>{if(!A||"object"!=typeof A||"string"!=typeof A.key)return null;if(!("value"in A))return null;switch(A.key){case"echo_input":{const I=Boolean(A.value);return I===g.echo_input?g:freezeHostSettings({...g,echo_input:I})}case"echo_gmcp":{const I=Boolean(A.value);return I===g.echo_gmcp?g:freezeHostSettings({...g,echo_gmcp:I})}case"single_prompt":{const I=Boolean(A.value);return I===g.single_prompt?g:freezeHostSettings({...g,single_prompt:I})}case"show_prompts":{const I=!Boolean(A.value);return I===g.single_prompt?g:freezeHostSettings({...g,single_prompt:I})}case"show_timestamps":{const I=Boolean(A.value);return I===g.show_timestamps?g:freezeHostSettings({...g,show_timestamps:I})}default:return null}},createHostSettingsModel=({eventBus:g,readHostSettings:A})=>{if(!g||"function"!=typeof g.on)throw new Error("createHostSettingsModel requires an eventBus with on(topic, listener).");if("function"!=typeof A)throw new Error("createHostSettingsModel requires readHostSettings().");let I=readHostSettingsFromHost(A);const C=new Set,notifyListeners=()=>{for(const g of C)g()},commitSnapshot=g=>(!g||areHostSettingsEqual(I,g)||(I=g,notifyListeners()),I),syncFromHost=()=>commitSnapshot(readHostSettingsFromHost(A)),handleHostSettingsChanged=g=>{const A=resolvePayloadSnapshot$1(I,g);A&&commitSnapshot(A)},e=g.on(w.HOST_SETTINGS_CHANGED,handleHostSettingsChanged),t=g.on(w.SYSTEM_PHASE,syncFromHost),subscribe=g=>(C.add(g),()=>{C.delete(g)}),getSnapshot=()=>I,destroy=()=>{e?.(),t?.(),C.clear()};return Object.freeze({destroy,getSnapshot,subscribe})},FA=Object.freeze({}),areHostLayoutsEqual=(g,A)=>g.display_tabstrip===A.display_tabstrip,freezeHostLayout=g=>Object.freeze(g),readHostLayoutFromHost=g=>{const A=g?.()??FA;return freezeHostLayout({display_tabstrip:"boolean"!=typeof A.tabSetEnableTabStrip||A.tabSetEnableTabStrip})},resolvePayloadSnapshot=(g,A)=>{if(!A||"object"!=typeof A||"string"!=typeof A.key)return null;if(!("value"in A))return null;if("display_tabstrip"===A.key){const I=Boolean(A.value);return I===g.display_tabstrip?g:freezeHostLayout({...g,display_tabstrip:I})}return null},createHostLayoutModel=({eventBus:g,readHostLayout:A})=>{if(!g||"function"!=typeof g.on)throw new Error("createHostLayoutModel requires an eventBus with on(topic, listener).");if("function"!=typeof A)throw new Error("createHostLayoutModel requires readHostLayout().");let I=readHostLayoutFromHost(A);const C=new Set,notifyListeners=()=>{for(const g of C)g()},commitSnapshot=g=>(!g||areHostLayoutsEqual(I,g)||(I=g,notifyListeners()),I),syncFromHost=()=>commitSnapshot(readHostLayoutFromHost(A)),handleHostSettingsChanged=g=>{const A=resolvePayloadSnapshot(I,g);A?commitSnapshot(A):syncFromHost()},e=g.on(w.HOST_SETTINGS_CHANGED,handleHostSettingsChanged),t=g.on(w.SYSTEM_PHASE,syncFromHost),subscribe=g=>(C.add(g),()=>{C.delete(g)}),getSnapshot=()=>I,destroy=()=>{e?.(),t?.(),C.clear()};return Object.freeze({destroy,getSnapshot,subscribe})},hasPersistenceAdapter=g=>g&&"function"==typeof g.getVariable&&"function"==typeof g.setVariable,createPlayStatsPersistence=({adapter:g}={})=>{if(!hasPersistenceAdapter(g))return null;const A=createPersistenceStore({adapter:g,sliceKey:$g.GAME_STATS,schema:AA,migrate:migrateGameStatsPersistence});return{read:()=>A.getAll(),write:g=>{A.set("kills",g?.kills??0),A.set("month",g?.month??{})}}},safeUnsubscribe=g=>{"function"==typeof g&&g()},resolveStreamEntries=(g,A)=>{const I=g.getSnapshot(),C=Array.isArray(I?.buffer)?I.buffer:[];if(0===C.length)return{entries:[],lastProcessedStreamId:-1};const e=C.filter(g=>g.id>A);return{entries:e,lastProcessedStreamId:e.length>0?e[e.length-1].id:A}},createPlayStatsController=({adapter:g,now:A,persistence:I=createPlayStatsPersistence({adapter:g}),streamModel:C}={})=>{const e=createPlayStatsModel({persistedGameStats:I?.read?.(),now:A}),t=[];let n=-1,a=!1;if(I&&"function"==typeof I.write&&t.push(e.subscribePersistence(g=>{I.write(g)})),g&&"function"==typeof g.on&&(t.push(g.on("Char.Status",e.handleStatus)),t.push(g.on("IRE.Misc.Achievement",A=>{e.handleAchievement(A)?.requestGoldCap&&"function"==typeof g.send&&g.send("goldcap")})),t.push(g.on("IRE.Time.List",e.handleTimeList))),C&&"function"==typeof C.subscribe&&"function"==typeof C.getSnapshot){const processStreamSnapshot=()=>{const g=resolveStreamEntries(C,n);n=g.lastProcessedStreamId,e.processStreamEntries(g.entries)};t.push(C.subscribe(processStreamSnapshot))}return{destroy:()=>{a||(a=!0,t.splice(0).forEach(safeUnsubscribe))},model:e}},KA=(0,e.createContext)(null),useNexGui=()=>{const g=(0,e.useContext)(KA);if(null===g)throw new Error("useNexGui must be used inside NexGuiContext.Provider");return g},NexGuiMountRoot=()=>null,createReactMountLifecycle=({contextValue:g,RootComponent:A=NexGuiMountRoot}={})=>{const I=new Map;let C=!1;const unmountContainer=g=>{const A=I.get(g);A&&(I.delete(g),A.unmount())},mount=n=>{if(C)throw new Error("[nexGui4] Cannot mount a destroyed nexGui instance.");if(!n||"object"!=typeof n||1!==n.nodeType)throw new TypeError("[nexGui4] mount(container) requires a DOM element container.");unmountContainer(n);const a=(0,t.createRoot)(n);return I.set(n,a),a.render((0,e.createElement)(KA.Provider,{value:g},(0,e.createElement)(A))),{unmount:()=>{unmountContainer(n)}}},destroy=()=>{if(!C){C=!0;for(const g of[...I.keys()])unmountContainer(g)}};return Object.freeze({mount,destroy,isMounted:()=>I.size>0})},NOOP$1=()=>{},normalizeCommand=g=>"function"==typeof g?g:NOOP$1,createPlatformTabsController=()=>{let g=NOOP$1,A=NOOP$1,I=NOOP$1,C=NOOP$1,e=NOOP$1,hasSavedLayout=()=>!1;const resetNativeDisplayCommands=()=>{g=NOOP$1,A=NOOP$1},resetLayoutCommands=()=>{I=NOOP$1,C=NOOP$1,e=NOOP$1,hasSavedLayout=()=>!1};return Object.freeze({mountNativeDisplay:(...A)=>g(...A),unmountNativeDisplay:(...g)=>A(...g),configureNativeDisplayCommands:(I={})=>{const C=normalizeCommand(I.mountNativeDisplay),e=normalizeCommand(I.unmountNativeDisplay);return g=C,A=e,()=>{g===C&&A===e&&resetNativeDisplayCommands()}},resetNativeDisplayCommands,applyLayoutPreset:(...g)=>I(...g),saveLayout:(...g)=>C(...g),restoreLayout:(...g)=>e(...g),hasSavedLayout:(...g)=>hasSavedLayout(...g),configureLayoutCommands:(g={})=>{const A=normalizeCommand(g.applyLayoutPreset),t=normalizeCommand(g.saveLayout),n=normalizeCommand(g.restoreLayout),a="function"==typeof g.hasSavedLayout?g.hasSavedLayout:()=>!1;return I=A,C=t,e=n,hasSavedLayout=a,()=>{I===A&&C===t&&e===n&&hasSavedLayout===a&&resetLayoutCommands()}},resetLayoutCommands})};(0,A.setAutoFreeze)(!1);var YA="1.1.0",resolveRuntimePorts=(g={})=>{const A=createBrowserRuntimePorts(),I=g&&"object"==typeof g?g:{};return Object.freeze({...A,...I})},resolveConfiguredDefenceList=g=>normalizeConfiguredDefenceList(g.getConfiguredDefences?.()),resolveActiveDefenceList=(g,A=[])=>normalizeConfiguredDefenceList(g.getActiveDefences?.(A)),seedInitialDisplayTheme=({adapter:g,persistenceStore:A})=>{if(void 0!==g.getVariable("nexGui4Settings")?.settings)return;const I=g.getHostSettings?.()??{},C=A.get("theme");A.set("theme",{...C,displayFontFamily:readHostDisplayFontFamily(I),displayFontSize:readHostDisplayFontSize(I)})},withRelationshipCommandTracking=(g,A)=>{const I=assertAdapterContract(g);if(!A||"function"!=typeof A.trackRelationshipCommand)return I;const C=Object.create(I),e=I.send.bind(I);return Object.defineProperty(C,"send",{value:g=>(A.trackRelationshipCommand(g),e(g)),enumerable:!0}),assertAdapterContract(C)},resolveAdapter=({adapter:g,playerRelationships:A}={})=>withRelationshipCommandTracking(g??createNexusAdapter(),A),createNexGui=({adapter:g,debugEnabled:A=!1,traceLimit:I=500,autoStart:C=!0,playerDirectory:e,playerRelationships:t,startupPhaseHandlers:n,remoteService:a,runtimePorts:r}={})=>{const o=resolveRuntimePorts(r),i=t??createPlayerRelationshipsModel(),l=resolveAdapter({adapter:g,playerRelationships:i}),s=createEventBus({label:"nexgui4",debugEnabled:A,traceLimit:I}),c=e??createPlayerDirectoryModel({fetchImpl:o.fetch,now:o.now}),u=createPlayerDirectoryDiagnosticsModel({now:o.now}),m=createPlayerDirectoryLifecycle({playerDirectory:c,diagnostics:u}),d=createPlatformTabsController(),p=createHostDisplaySettingsModel({eventBus:s,readHostSettings:()=>l.getHostSettings?.()??{}}),h=createHostSettingsModel({eventBus:s,readHostSettings:()=>l.getHostSettings?.()??{}}),y=createHostLayoutModel({eventBus:s,readHostLayout:()=>l.getHostLayoutSnapshot?.()??{}}),b=createTimerModel({eventBus:s,now:o.now,setTimer:o.setTimeout,clearTimer:o.clearTimeout}),x=createScrollbackSessionStore({storage:createIndexedDbManager(),setTimeoutFn:o.setTimeout,clearTimeoutFn:o.clearTimeout,logger:console}),E=createStreamModel({onAppend:g=>x.append(g),onClear:()=>{x.clear().catch(g=>{console.error("[nexGui4] Failed to clear scrollback session.",g)})}}),R=createTranscriptModel({cap:5e3}),S=createTranscriptModel({cap:5e3}),M=createStatsModel({eventBus:s}),T=createPartyModel({eventBus:s}),N=createRoomModel({eventBus:s}),G=createCharacterModel({eventBus:s}),D=createTargetModel({eventBus:s}),j=createDefenceModel({eventBus:s}),P=createFeedModel({cap:5e3}),B=createClassBalanceController(),O=createRoomOccupantsModel({roomModel:N,playerDirectory:c}),L=createPlayStatsController({adapter:l,streamModel:E,now:o.now}),z=createPartyAutomationModel({characterModel:G,partyModel:T,playerDirectory:c,sendCommand:g=>l.send(g)}),Z=resolveConfiguredDefenceList(l),F=resolveActiveDefenceList(l,Z);j.replaceAll(F);const K=createPersistenceStore({adapter:l,sliceKey:$g.SETTINGS});seedInitialDisplayTheme({adapter:l,persistenceStore:K});const Y=createPersistenceStore({adapter:l,sliceKey:$g.UI,schema:IA,migrate:migrateUiPersistence});for(const[v,w]of Object.entries(K.get("party")))T.setSetting(v,w);s.on(w.PARTY_UPDATED,({settings:g})=>{K.set("party",g)});const V=createGmcpIngressController({adapter:l,eventBus:s,timerModel:b,streamModel:E,systemStreamModel:R,combatStreamModel:S,statsModel:M,partyModel:T,roomModel:N,characterModel:G,targetModel:D,defenceModel:j,classBalanceController:B,playerDirectory:c,roomOccupantsModel:O,partyAutomationModel:z}),W=createDefenceStore({defenceModel:j,eventBus:s,configuredDefences:Z}),U=Object.freeze({timers:createTimerStore({timerModel:b,eventBus:s}),stream:E,stats:createStatsStore({statsModel:M,eventBus:s}),party:createPartyStore({partyModel:T,eventBus:s}),room:createRoomStore({roomModel:N,eventBus:s}),character:createCharacterStore({characterModel:G,eventBus:s}),target:createTargetStore({targetModel:D,eventBus:s}),defence:W,theme:createThemeStore({eventBus:s,persistenceStore:K}),ui:createUiStore({persistenceStore:K}),feed:createFeedStore({feedModel:P}),playStats:createPlayStatsStore({playStatsModel:L.model}),systemStream:R,combatStream:S});let H=!1,Q=null;const syncActiveDefencesFromHost=()=>{const g=U.defence.getState().configuredDefences??[];j.replaceAll(resolveActiveDefenceList(l,g))},scheduleActiveDefenceResync=()=>{null!=Q&&o.clearTimeout(Q),Q=o.setTimeout(()=>{Q=null,H||syncActiveDefencesFromHost()},0)};s.on(v.CLASS_CHANGED,scheduleActiveDefenceResync);const X=registerGmcpBindings({adapter:l,eventBus:s,playerDirectory:c,playerDirectoryLifecycle:m,playerRelationships:i,playerDirectoryDiagnostics:u,remoteService:a,fetchFn:o.fetch}),q={adapter:l,eventBus:s,hostDisplaySettingsModel:p,hostSettingsModel:h,hostLayoutModel:y,playerDirectory:c,playerDirectoryLifecycle:m,playerDirectoryDiagnostics:u,playerRelationships:i,stores:U,streamModel:E,scrollbackSession:x,persistenceStore:K,scrollbackLayoutStore:Y,platformTabs:d,formatInlineNames:g=>highlightInlineNamesInText(g,{contextValue:q})},_=createReactMountLifecycle({contextValue:q});let $=null;const initializeScrollbackSession=async()=>{try{if(await x.initialize(),H)return;await x.clear()}catch(g){if(H)return;console.warn("[nexGui4] Scrollback session startup degraded; continuing.",g)}},gg=createStartupOrchestrator({adapter:l,eventBus:s,phaseHandlers:{...n,[eA.PREPARING]:async g=>{await initializeScrollbackSession(),await(n?.[eA.PREPARING]?.(g))}},setTimeoutFn:o.setTimeout,clearTimeoutFn:o.clearTimeout}),startRuntime=()=>($??=gg.start(),$.catch(()=>{}),$),mount=g=>{if(H)throw new Error("[nexGui4] Cannot mount a destroyed nexGui instance.");return _.mount(g)},destroy=()=>{H||(H=!0,null!=Q&&(o.clearTimeout(Q),Q=null),_.destroy(),gg.destroy(),p.destroy(),h.destroy(),y.destroy(),X?.(),V.destroy(),L.destroy(),U.playStats.destroy?.(),s.emit(w.SYSTEM_DESTROYED,{version:YA}),b.destroy(),P.destroy(),T.destroy(),N.destroy(),M.destroy(),G.destroy(),D.destroy(),j.destroy(),L.model.destroy(),B.destroy(),x.destroy(),m.destroy?.(),c.destroy?.(),i.destroy?.(),clearRelationshipNameFormatterCache(q),clearMessageReplacementContextCache(),d.resetNativeDisplayCommands(),d.resetLayoutCommands(),l.destroy(),s.clear())},Ag=composePublicApi({version:YA,startupOrchestrator:gg,isMounted:()=>_.isMounted(),character:{characterModel:G},target:{targetModel:D,setTarget:g=>{l.setTarget(g)}},timerModel:b,players:{playerDirectory:c,getPlayer:c.getPlayerProfile,getPlayerColor:c.getPlayerColor,refreshPlayer:c.refreshPlayerProfile,display:g=>l.displayHtmlLine(g),isAlly:i.isAllyPlayer,isEnemy:i.isEnemyPlayer,isCityEnemy:i.isCityEnemyPlayer},display:{notice:(g,A)=>l.notice(g,A)},colors:{cityPalette:J,iconHtml:(g,A,I)=>buildIconHtml(g,A,I,o.getPublicDualToneIcons?.()??null)},customize:{getConfiguredDefences:()=>U.defence.getState().configuredDefences,setConfiguredDefences:g=>(U.defence.getState().setConfiguredDefences(normalizeConfiguredDefenceList(g)),U.defence.getState().configuredDefences),classBalanceController:B,setClassBalanceType:g=>{const A=B.setType(g);return G.update(A),B.getType()},mountNativeDisplay:()=>d.mountNativeDisplay(),unmountNativeDisplay:()=>d.unmountNativeDisplay()},layout:{presetIds:wA,applyPreset:g=>d.applyLayoutPreset(g),saveLayout:()=>d.saveLayout(),restoreLayout:()=>d.restoreLayout(),hasSavedLayout:()=>d.hasSavedLayout()},party:{partyModel:T,getSnapshot:()=>T.snapshot()},room:{roomModel:N,setItemOverride:setUserRoomItemOverride,removeItemOverride:removeUserRoomItemOverride,listItemOverrides:listUserRoomItemOverrides,getItemOverride:getUserRoomItemOverride},stats:{playStatsModel:L.model},stream:{systemStream:U.systemStream,combatStream:U.combatStream},cdb:{query:g=>a?.queryCharacters?.(g)??[],get:g=>fetchLiveCharacter(g,{fetchFn:o.fetch})}}),Ig={version:YA,mount,stores:U,debug:{getEventTrace:()=>s.getTrace(),setDebugEnabled:g=>s.setDebugEnabled(g),stream:{getStats:()=>({...E.getStats(),scrollbackSession:x.getStats()}),getScrollbackStats:()=>x.getStats(),getDbStats:async()=>{try{const g=await x.readAll(),A=x.getStats();return{fallback:A.storageFallback,count:g.length,firstId:g[0]?.id,lastId:g[g.length-1]?.id,scrollbackSession:A}}catch(g){return{error:g.message}}}},playerDirectory:{getSnapshot:()=>u.getPlayerDirectoryDiagnosticsSnapshot()}},destroy};return Object.defineProperty(Ig,"state",{enumerable:!0,get:()=>Ag.state}),Object.defineProperty(Ig,"api",{value:Ag.api,enumerable:!0}),Object.defineProperty(Ig,"__contextValue",{value:q,enumerable:!1}),Object.defineProperty(Ig,"__start",{value:startRuntime,enumerable:!1}),C&&startRuntime(),Ig},cloneTokens=g=>structuredClone(g),buildHueFilter=g=>`hue-rotate(${g}deg)`,createMuiTheme=(g=GA)=>{const A=g??GA;return(0,a.createTheme)({spacing:A.spacing.unit,shape:{borderRadius:A.radius.panel},typography:{fontSize:A.theme.fontSize},palette:{mode:"dark",primary:{main:A.text.accent},background:{default:A.background.primary,paper:A.background.panel},text:{primary:A.text.primary,secondary:A.text.secondary,disabled:A.text.muted},hp:{main:A.game.hp},mp:{main:A.game.mp},ep:{main:A.game.ep},wp:{main:A.game.wp},nl:{main:A.game.nl},timerActive:{main:A.game.timerActive},timerCritical:{main:A.game.timerCritical}},components:{MuiTooltip:{defaultProps:{arrow:!0,placement:"top"}},MuiPaper:{defaultProps:{elevation:0}},MuiButton:{defaultProps:{size:"small"}},MuiSwitch:{defaultProps:{size:"small"}},MuiSlider:{defaultProps:{size:"small"}}},nexGui:{backgroundImage:resolveBackgroundImageSource(A.theme.backgroundImage),backgroundOpacity:A.theme.backgroundOpacity,backgroundFilter:buildHueFilter(A.theme.hue),radius:cloneTokens(A.radius),tokens:cloneTokens(A)}})},VA=__commonJSMin((g,A)=>{var I="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED";A.exports=I}),WA=__commonJSMin((g,A)=>{var I=VA();function emptyFunction(){}function emptyFunctionWithReset(){}emptyFunctionWithReset.resetWarningCache=emptyFunction,A.exports=function(){function shim(g,A,C,e,t,n){if(n!==I){var a=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw a.name="Invariant Violation",a}}function getShim(){return shim}shim.isRequired=shim;var g={array:shim,bigint:shim,bool:shim,func:shim,number:shim,object:shim,string:shim,symbol:shim,any:shim,arrayOf:getShim,element:shim,elementType:shim,instanceOf:getShim,node:shim,objectOf:getShim,oneOf:getShim,oneOfType:getShim,shape:getShim,exact:getShim,checkPropTypes:emptyFunctionWithReset,resetWarningCache:emptyFunction};return g.PropTypes=g,g}}),UA=__toESM(__commonJSMin((g,A)=>{A.exports=WA()()})(),1),DefenceTagComponent=({name:g})=>React.createElement(n.Paper,{className:"defence-tag",elevation:3,sx:{fontFamily:"inherit",fontSize:"inherit",px:.75,py:"2px",textAlign:"center",width:"100%"}},g);DefenceTagComponent.displayName="DefenceTag",DefenceTagComponent.propTypes={name:UA.default.string.isRequired};var HA=(0,e.memo)(DefenceTagComponent);HA.displayName="DefenceTag",HA.propTypes=DefenceTagComponent.propTypes;var getErrorMessage=g=>g instanceof Error&&g.message?g.message:"string"==typeof g&&g.length>0?g:"Unknown panel error.",QA=class extends e.Component{static displayName="PanelErrorBoundary";static propTypes={children:UA.default.node,panelName:UA.default.node.isRequired};static getDerivedStateFromError(g){return{error:g}}constructor(g){super(g),this.state={error:null}}componentDidCatch(){}render(){const{children:g,panelName:A}=this.props,{error:I}=this.state;return I?React.createElement(n.Box,{className:"nexgui4-panel-error-boundary",role:"alert",sx:{backgroundColor:"background.paper",border:1,borderColor:"divider",borderRadius:1,color:"text.primary",display:"flex",flex:1,flexDirection:"column",gap:1,minHeight:0,minWidth:0,p:1.5,width:"100%"}},React.createElement(n.Typography,{component:"h2",sx:{fontSize:"0.95rem",fontWeight:700}},A),React.createElement(n.Typography,{color:"text.secondary",variant:"body2"},"This panel failed to render."),React.createElement(n.Typography,{sx:{fontFamily:"monospace",overflowWrap:"anywhere"},variant:"body2"},getErrorMessage(I))):g}},isIterable=g=>Symbol.iterator in g,hasIterableEntries=g=>"entries"in g,compareEntries=(g,A)=>{const I=g instanceof Map?g:new Map(g.entries()),C=A instanceof Map?A:new Map(A.entries());if(I.size!==C.size)return!1;for(const[e,t]of I)if(!C.has(e)||!Object.is(t,C.get(e)))return!1;return!0},compareIterables=(g,A)=>{const I=g[Symbol.iterator](),C=A[Symbol.iterator]();let e=I.next(),t=C.next();for(;!e.done&&!t.done;){if(!Object.is(e.value,t.value))return!1;e=I.next(),t=C.next()}return!!e.done&&!!t.done};function shallow(g,A){return!!Object.is(g,A)||"object"==typeof g&&null!==g&&"object"==typeof A&&null!==A&&Object.getPrototypeOf(g)===Object.getPrototypeOf(A)&&(isIterable(g)&&isIterable(A)?hasIterableEntries(g)&&hasIterableEntries(A)?compareEntries(g,A):compareIterables(g,A):compareEntries({entries:()=>Object.entries(g)},{entries:()=>Object.entries(A)}))}function useShallow(g){const A=e.default.useRef(void 0);return I=>{const C=g(I);return shallow(A.current,C)?A.current:A.current=C}}var selectDefenceSlice=g=>({configuredDefences:g.configuredDefences,defences:g.defences,gainDefence:g.gainDefence,loseDefence:g.loseDefence,resetDefences:g.resetDefences,setConfiguredDefences:g.setConfiguredDefences}),useDefence=()=>{const{stores:g}=useNexGui();return g.defence(useShallow(selectDefenceSlice))},getFlipTransform$10=g=>{switch(g){case 1:return"scaleX(-1) scaleY(-1)";case 2:return"scaleY(-1)";case 3:return"scaleX(-1)";default:return"none"}},DefencesPanelInner=()=>{const g=(0,a.useTheme)(),[A]=(0,e.useState)(()=>Math.floor(4*Math.random())),{configuredDefences:I,defences:C}=useDefence(),t=g?.nexGui?.backgroundImage??"",r=g?.nexGui?.backgroundOpacity??.5,o=g?.nexGui?.backgroundFilter??"none",i=new Set(C),l=I.filter(g=>!i.has(g)),s=l.length>0;return React.createElement(n.Box,{className:"defences-panel",sx:{color:"text.primary",fontFamily:g.typography.fontFamily,fontSize:g.typography.fontSize,height:"100%",overflow:"hidden",position:"relative",width:"100%"}},t?React.createElement(n.Box,{"aria-hidden":"true",className:"defences-panel__background",sx:{backgroundImage:`url(${t})`,backgroundPosition:"center",backgroundSize:"cover",filter:o,inset:0,opacity:r,position:"absolute",transform:getFlipTransform$10(A),zIndex:0}}):null,s?React.createElement(n.Box,{className:"defences-panel__content",sx:{height:"100%",overflowY:"auto",p:1,position:"relative",width:"100%",zIndex:1}},React.createElement(n.Paper,{className:"defences-panel__surface",elevation:0,sx:{backgroundColor:(0,a.alpha)(g.palette.background.paper,.78),minHeight:"100%",p:1}},React.createElement(n.Stack,{spacing:.5,sx:{position:"relative",width:"100%"}},l.map(g=>React.createElement(HA,{key:g,name:g}))))):null)};DefencesPanelInner.displayName="DefencesPanelInner";var DefencesPanel=()=>React.createElement(QA,{panelName:"Defences"},React.createElement(DefencesPanelInner,null));DefencesPanel.displayName="DefencesPanel";var XA=1,JA=24,qA=8,noop$3=()=>{},defaultEstimateSize=()=>48,defaultGetItemKey=(g,A)=>g?.id??A,joinClassNames=(...g)=>g.filter(Boolean).join(" "),getVirtualItemEnd=g=>Number.isFinite(g?.end)?g.end:Number.isFinite(g?.size)?g.start+g.size:g?.start??0,getElementWidth=(g,A=null)=>{const I=A?.contentRect?.width??g.getBoundingClientRect?.().width??g.clientWidth;return Number.isFinite(I)?I:0},getVerticalScrollbarGutterWidth=g=>{if(!g)return 0;const A=Number(g.offsetWidth),I=Number(g.clientWidth);return Number.isFinite(A)&&Number.isFinite(I)?Math.max(0,A-I):0},isNearBottom=g=>g.scrollHeight-g.scrollTop-g.clientHeight<=JA,isPinnedToDisplayTail=g=>g.scrollHeight-g.scrollTop-g.clientHeight<=XA,TranscriptViewportComponent=({items:g,renderItem:A,getItemKey:I=defaultGetItemKey,itemKeyVersion:C=null,displayPinKey:t=null,estimateSize:a=defaultEstimateSize,overscan:o=5,fontFamily:i="inherit",fontSize:l,border:s=!1,mode:c="panel",onRequestHistory:u=noop$3,onScrollLockChange:m=noop$3,activeMatchIndex:d=-1,footer:p=null,fallbackToAllItems:h=!1,onSendCommand:y=noop$3,showScrollLockBadge:b=!1,viewportSx:x,viewportTestId:v="virtual-scroll-viewport"},E)=>{const w=(0,e.useRef)(null),R=(0,e.useRef)(null),S=(0,e.useRef)({animationFrame:0,width:null}),M=(0,e.useRef)(g),T=(0,e.useRef)(I),N=(0,e.useRef)({getItemKey:null,itemKeyRevision:null,lookup:null}),[G,D]=(0,e.useState)(!1),[j,P]=(0,e.useState)(0),[B,O]=(0,e.useState)(0),L="display"===c,z=parseFontSize(l);M.current=g,T.current=I;const Z=C??g;N.current.getItemKey===I&&N.current.itemKeyRevision===Z||(N.current={getItemKey:I,itemKeyRevision:Z,lookup:g=>T.current(M.current[g],g)});const F=N.current.lookup,K=(0,e.useCallback)(()=>w.current,[]),Y=(0,r.useVirtualizer)({count:g.length,initialRect:{height:400,width:0},getScrollElement:K,estimateSize:a,getItemKey:F,overscan:o}),V=Y.getTotalSize(),W=Y.getVirtualItems(),U=W[0]??null,H=W.at(-1)??null,Q=U?Math.max(0,U.start):0,X=H?Math.max(0,V-getVirtualItemEnd(H)):0,J=h&&0===W.length&&g.length>0,q=joinClassNames("nexgui4-transcript-spacer",!J&&(L?"nexgui4-transcript-spacer--display":"nexgui4-transcript-spacer--panel")),_=J?void 0:L?0===W.length?{height:`${V}px`}:{paddingBottom:`${X}px`,paddingTop:`${Q}px`}:{height:`${V}px`},$=null==l?void 0:"number"==typeof l?`${l}px`:l,gg=joinClassNames("nexgui4-transcript-scroll-viewport",L?"nexgui4-transcript-scroll-viewport--display":"nexgui4-transcript-scroll-viewport--panel"),Ag={fontFamily:i,fontSize:$},Ig={right:`${qA+j}px`},Cg=(0,e.useCallback)(g=>{const A=getVerticalScrollbarGutterWidth(g);P(g=>g===A?g:A)},[]),eg=(0,e.useCallback)(()=>{const g=w.current;g&&(g.scrollTop=g.scrollHeight)},[]);(0,e.useImperativeHandle)(E,()=>({scrollToBottom:eg,scrollToIndex:(g,A)=>Y.scrollToIndex(g,A)}),[Y,eg]),(0,e.useLayoutEffect)(()=>{if(!L)return void(R.current=null);const A=w.current;if(!A)return;const I={itemCount:g.length,scrollHeight:A.scrollHeight,totalSize:V},C=R.current;null!=C&&C.itemCount===I.itemCount&&C.scrollHeight===I.scrollHeight&&C.totalSize===I.totalSize&&isPinnedToDisplayTail(A)||(A.scrollTop=A.scrollHeight,R.current=I)},[t,B,L,g.length,V]),(0,e.useLayoutEffect)(()=>{L||G||0===g.length||Y.scrollToIndex(g.length-1,{align:"end"})},[L,G,g.length,Y]),(0,e.useLayoutEffect)(()=>{const g=Y.measure,A=window.ResizeObserver,I=S.current;if(!L)return I.width=null,void(I.animationFrame&&(window.cancelAnimationFrame(I.animationFrame),I.animationFrame=0));const C=w.current;if(!C||"function"!=typeof g||"function"!=typeof A)return;I.width=getElementWidth(C);const scheduleMeasure=A=>{I.width!==A&&(I.width=A,I.animationFrame&&window.cancelAnimationFrame(I.animationFrame),I.animationFrame=window.requestAnimationFrame(()=>{I.animationFrame=0,g(),O(g=>g+1)}))},e=new A(g=>{scheduleMeasure(getElementWidth(C,g[0]))});return e.observe(C),()=>{e.disconnect(),I.animationFrame&&(window.cancelAnimationFrame(I.animationFrame),I.animationFrame=0)}},[L,Y]),(0,e.useLayoutEffect)(()=>{if(L)return void P(0);const g=w.current;if(!g)return;Cg(g);const A=window.ResizeObserver;if("function"!=typeof A)return;const I=new A(()=>{Cg(g)});return I.observe(g),()=>{I.disconnect()}},[L,Cg]),(0,e.useLayoutEffect)(()=>{L||Cg(w.current)},[L,g.length,V,Cg]),(0,e.useEffect)(()=>{0===g.length&&D(!1)},[g.length]),(0,e.useEffect)(()=>{m(G)},[G,m]);const tg=(0,e.useCallback)(g=>{if(L)return;Cg(g.currentTarget);const A=!isNearBottom(g.currentTarget);D(g=>g===A?g:A)},[L,Cg]);(0,e.useEffect)(()=>{const g=w.current;if(!g)return;const handleWheel=g=>{!L||g.deltaY>=0||(g.preventDefault(),u())};return g.addEventListener("wheel",handleWheel,{passive:!1}),()=>g.removeEventListener("wheel",handleWheel)},[L,u]);const ng=(0,e.useCallback)(g=>{if(!(g.target instanceof Element))return;const A=g.target.closest("a");if(!A||!g.currentTarget.contains(A))return;if(A.classList.contains("url_link"))return;const I=A.getAttribute("rel");I&&(g.preventDefault(),y(I))},[y]);return React.createElement(n.Box,{component:"section",sx:{border:s?1:0,borderColor:"divider",borderRadius:s?1:0,display:"flex",flex:1,flexDirection:"column",minHeight:0,position:"relative"}},b&&G?React.createElement(n.Box,{component:"div","data-testid":"scroll-lock-badge",role:"status",style:Ig,sx:{backgroundColor:"background.paper",border:1,borderColor:"divider",borderRadius:1,boxShadow:1,color:"text.secondary",fontSize:"0.75rem",px:1,py:.5,position:"absolute",top:8,zIndex:2}},"Scroll lock"):null,React.createElement(n.Box,{className:gg,component:"div",onClick:ng,"data-testid":v,onScroll:tg,ref:w,style:Ag,sx:x},React.createElement("div",{className:q,"data-testid":"virtual-scroll-spacer",style:_},J?g.map((g,C)=>React.createElement("div",{className:"nexgui4-transcript-row","data-index":C,key:I(g,C)},A(g,{fontSize:z,index:C,isActiveMatch:C===d}))):W.map(I=>{const C=g[I.index];return null==C?null:React.createElement("div",{className:joinClassNames("nexgui4-transcript-row",L?"nexgui4-transcript-row--display":"nexgui4-transcript-row--panel"),"data-index":I.index,key:I.key,ref:Y.measureElement,style:L?void 0:{transform:`translateY(${I.start}px)`}},A(C,{fontSize:z,index:I.index,isActiveMatch:I.index===d}))})),p))};TranscriptViewportComponent.displayName="TranscriptViewport",TranscriptViewportComponent.propTypes={activeMatchIndex:UA.default.number,border:UA.default.bool,displayPinKey:UA.default.oneOfType([UA.default.number,UA.default.string]),estimateSize:UA.default.func,fallbackToAllItems:UA.default.bool,fontFamily:UA.default.string,fontSize:UA.default.oneOfType([UA.default.number,UA.default.string]),footer:UA.default.node,getItemKey:UA.default.func,itemKeyVersion:UA.default.oneOfType([UA.default.number,UA.default.string]),items:UA.default.array.isRequired,mode:UA.default.oneOf(["panel","display"]),onRequestHistory:UA.default.func,onSendCommand:UA.default.func,onScrollLockChange:UA.default.func,overscan:UA.default.number,renderItem:UA.default.func.isRequired,showScrollLockBadge:UA.default.bool,viewportSx:UA.default.oneOfType([UA.default.array,UA.default.func,UA.default.object]),viewportTestId:UA.default.string};var _A=(0,e.forwardRef)(TranscriptViewportComponent);_A.displayName="TranscriptViewport",_A.propTypes=TranscriptViewportComponent.propTypes;var padTwo=g=>String(g).padStart(2,"0"),padThree=g=>String(g).padStart(3,"0"),formatNumericTimestamp=(g,A=!0)=>{const I=new Date(g),C=[padTwo(I.getHours()),padTwo(I.getMinutes()),padTwo(I.getSeconds())].join(":");return A?`${C}.${padThree(I.getMilliseconds())}`:C},resolveTimestampLabel=(g,A=!0)=>"string"==typeof g&&g.length>0?g:Number.isFinite(g)?formatNumericTimestamp(g,A):null,resolveDateTime=g=>Number.isFinite(g)?new Date(g).toISOString():void 0,TimestampComponent=({timestamp:g,fontFamily:A=Xg,fontSize:I,highlight:C=!1,className:e="ng-timestamp timestamp mono no_out",includeMilliseconds:t=!0})=>{const n=resolveTimestampLabel(g,t);return null===n?null:React.createElement("time",{className:e,dateTime:resolveDateTime(g),style:C?{backgroundColor:"string"==typeof C?C:"yellow",fontFamily:A,fontSize:I}:{fontFamily:A,fontSize:I}},n)};TimestampComponent.displayName="Timestamp",TimestampComponent.propTypes={className:UA.default.string,fontFamily:UA.default.string,fontSize:UA.default.oneOfType([UA.default.number,UA.default.string]),highlight:UA.default.bool,includeMilliseconds:UA.default.bool,timestamp:UA.default.oneOfType([UA.default.number,UA.default.string]).isRequired};var $A=(0,e.memo)(TimestampComponent);$A.displayName="Timestamp",$A.propTypes=TimestampComponent.propTypes;var gI=UA.default.shape({content:UA.default.node,id:UA.default.oneOfType([UA.default.number,UA.default.string]),isHtml:UA.default.bool,timestamp:UA.default.number}),renderContent=(g,A)=>null==g||!1===g?null:(0,e.isValidElement)(g)?g:A?React.createElement(n.Typography,{component:"span",sx:{color:"text.primary",display:"inline",lineHeight:1.5},variant:"body2",dangerouslySetInnerHTML:{__html:g}}):React.createElement(n.Typography,{component:"span",sx:{color:"text.primary",display:"inline",lineHeight:1.5},variant:"body2"},g),FeedEntryComponent=({entry:g,fontSize:A})=>React.createElement(n.Box,{className:"feed-entry","data-feed-entry-id":g.id??void 0,sx:{alignItems:"flex-start",columnGap:1,display:"flex",minWidth:0,py:.5,width:"100%"}},Number.isFinite(g.timestamp)?React.createElement($A,{timestamp:g.timestamp,fontSize:A,includeMilliseconds:!1}):null,React.createElement(n.Box,{className:"feed-entry__content",sx:{flex:1,minWidth:0,overflowWrap:"anywhere"}},renderContent(g.content,g.isHtml)));FeedEntryComponent.displayName="FeedEntry",FeedEntryComponent.propTypes={entry:gI.isRequired,fontSize:UA.default.oneOfType([UA.default.number,UA.default.string])};var AI=(0,e.memo)(FeedEntryComponent);AI.displayName="FeedEntry",AI.propTypes=FeedEntryComponent.propTypes;var getFlipTransform$9=g=>{switch(g){case 1:return"scaleX(-1) scaleY(-1)";case 2:return"scaleY(-1)";case 3:return"scaleX(-1)";default:return"none"}},PanelBackgroundComponent=({backgroundClassName:g,children:A=null,component:I="div",contentClassName:C,contentSx:t,sx:r,...o})=>{const i=(0,a.useTheme)(),[l]=(0,e.useState)(()=>Math.floor(4*Math.random())),s=i?.nexGui?.backgroundImage??"",c=i?.nexGui?.backgroundOpacity??.5,u=i?.nexGui?.backgroundFilter??"none";return React.createElement(n.Box,{component:I,sx:[{display:"flex",flex:1,height:"100%",minHeight:0,minWidth:0,overflow:"hidden",position:"relative",width:"100%"},r],...o},s?React.createElement(n.Box,{"aria-hidden":"true",className:g,sx:{backgroundImage:`url(${s})`,backgroundPosition:"center",backgroundSize:"cover",filter:u,inset:0,opacity:c,position:"absolute",transform:getFlipTransform$9(l),zIndex:0}}):null,React.createElement(n.Box,{className:C,sx:[{display:"flex",flex:1,minHeight:0,minWidth:0,position:"relative",zIndex:1},t]},A))};PanelBackgroundComponent.displayName="PanelBackground",PanelBackgroundComponent.propTypes={backgroundClassName:UA.default.string,children:UA.default.node,component:UA.default.elementType,contentClassName:UA.default.string,contentSx:UA.default.oneOfType([UA.default.array,UA.default.func,UA.default.object]),sx:UA.default.oneOfType([UA.default.array,UA.default.func,UA.default.object])};var II=(0,e.memo)(PanelBackgroundComponent);II.displayName="PanelBackground",II.propTypes=PanelBackgroundComponent.propTypes;var noopSubscribe$1=()=>()=>{},getModelVersion$1=g=>"function"==typeof g?.getVersion?g.getVersion():0,selectEntries=g=>g.entries,colorEntry=(g,A)=>{if("string"!=typeof g?.content||0===g.content.length||"function"!=typeof A)return g;const{content:I,isHtml:C}=A(g.content);return I!==g.content||C?{...g,content:I,isHtml:C}:g},useFeed=()=>{const{stores:g,playerDirectory:A,playerRelationships:I,formatInlineNames:C}=useNexGui(),t=g.feed(selectEntries),n=(0,e.useMemo)(()=>({subscribe:g=>{const C=A?.subscribePlayerDirectory?.(g)??noopSubscribe$1(),e=I?.subscribePlayerRelationships?.(g)??noopSubscribe$1();return()=>{C?.(),e?.()}},getSnapshot:()=>`${getModelVersion$1(A)}:${getModelVersion$1(I)}`}),[A,I]),a=(0,e.useSyncExternalStore)(n.subscribe,n.getSnapshot,n.getSnapshot),r=(0,e.useRef)(null);return null===r.current&&(r.current=new WeakMap),{entries:(0,e.useMemo)(()=>{const g=r.current;return t.map(A=>{if(null===A||"object"!=typeof A)return A;const I=g.get(A);if(I&&I.version===a)return I.value;const e=colorEntry(A,C);return I&&I.value.content===e.content&&I.value.isHtml===e.isHtml?(g.set(A,{version:a,value:I.value}),I.value):(g.set(A,{version:a,value:e}),e)})},[t,a,C])}},GameFeedInner=()=>{const g=(0,a.useTheme)(),{entries:A}=useFeed(),I=A.at(-1)?.id??A.length,C=(0,e.useCallback)((g,{fontSize:A}={})=>React.createElement(AI,{entry:g,fontSize:A}),[]);return 0===A.length?React.createElement(II,{backgroundClassName:"game-feed__background",className:"game-feed game-feed--empty",contentClassName:"game-feed__content",contentSx:{alignItems:"center",color:"text.secondary",justifyContent:"center",p:2}},React.createElement(n.Typography,{variant:"body2"},"No feed entries")):React.createElement(II,{backgroundClassName:"game-feed__background",className:"game-feed",contentClassName:"game-feed__content",contentSx:{minHeight:0}},React.createElement(_A,{itemKeyVersion:I,items:A,fontFamily:g.typography.fontFamily,fontSize:g.typography.fontSize,renderItem:C,showScrollLockBadge:!1,viewportSx:{p:1}}))};GameFeedInner.displayName="GameFeedInner";var GameFeed=()=>React.createElement(QA,{panelName:"GameFeed"},React.createElement(GameFeedInner,null));GameFeed.displayName="GameFeed";var noop$2=()=>{},CI="nexgui4-structured-stream-panel__timestamp ng-timestamp timestamp mono no_out",eI=UA.default.shape({hasMXP:UA.default.bool.isRequired,html:UA.default.string.isRequired,id:UA.default.number.isRequired,timestamp:UA.default.oneOfType([UA.default.number,UA.default.string]).isRequired}),buildLineClassName$1=g=>["nexgui4-structured-stream-panel__line",g.isMonospace?"mono":null].filter(Boolean).join(" "),StructuredStreamRowComponent=({line:g,onSendCommand:A=noop$2})=>{const handleMXP=g=>{if(!(g.target instanceof Element))return;const I=g.target.closest("a");if(!I||!g.currentTarget.contains(I))return;if(I.classList.contains("url_link"))return;const C=I.getAttribute("rel");C&&(g.preventDefault(),A(C))};return React.createElement(n.Box,{component:"div",className:buildLineClassName$1(g),"data-stream-entry-id":g.id,onClick:g.hasMXP?handleMXP:null,sx:{alignItems:"baseline",columnGap:"0.5rem",display:"grid",gridTemplateColumns:"12ch minmax(0, 1fr)",minWidth:0,width:"100%",zIndex:1,"& .nexgui4-structured-stream-panel__payload":{minWidth:0,overflowWrap:"anywhere"},"& .nexgui4-stream-row":{alignItems:"baseline",display:"grid",gridTemplateColumns:"auto minmax(0, 1fr)",columnGap:"0.5rem",width:"100%"},"& .nexgui4-replacement-row":{width:"100%"}}},React.createElement($A,{className:CI,fontFamily:"inherit",timestamp:g.timestamp}),React.createElement(n.Box,{component:"span",className:"nexgui4-structured-stream-panel__payload",dangerouslySetInnerHTML:{__html:g.html}}))};StructuredStreamRowComponent.displayName="StructuredStreamRow",StructuredStreamRowComponent.propTypes={line:eI.isRequired,onSendCommand:UA.default.func};var tI=(0,e.memo)(StructuredStreamRowComponent);tI.displayName="StructuredStreamRow",tI.propTypes=StructuredStreamRowComponent.propTypes;var StructuredStreamPanelComponent=({items:g,itemKeyVersion:A=null,onSendCommand:I=noop$2,className:C})=>{const t=(0,a.useTheme)(),n=(0,e.useCallback)(g=>React.createElement(tI,{line:g,onSendCommand:I}),[I]);return React.createElement(II,{backgroundClassName:"nexgui4-structured-stream-panel__background",className:C,component:"section",contentClassName:"nexgui4-structured-stream-panel__content",contentSx:{color:"text.primary",fontFamily:"inherit",fontSize:"inherit"},"data-testid":"structured-stream-panel"},React.createElement(_A,{fontFamily:t.typography.fontFamily,fontSize:t.typography.fontSize,itemKeyVersion:A,items:g,renderItem:n,showScrollLockBadge:!1,viewportSx:{p:"5px"}}))};StructuredStreamPanelComponent.displayName="StructuredStreamPanel",StructuredStreamPanelComponent.propTypes={className:UA.default.string,itemKeyVersion:UA.default.oneOfType([UA.default.number,UA.default.string]),items:UA.default.arrayOf(eI).isRequired,onSendCommand:UA.default.func};var nI=(0,e.memo)(StructuredStreamPanelComponent);nI.displayName="StructuredStreamPanel",nI.propTypes=StructuredStreamPanelComponent.propTypes;var aI=new WeakMap,assertTranscriptModel=g=>{if(!g||"function"!=typeof g.subscribe||"function"!=typeof g.getSnapshot)throw new Error("useTranscript requires a transcript model with subscribe(listener) and getSnapshot().")},getTranscriptModelBindings=g=>{assertTranscriptModel(g);let A=aI.get(g);if(!A){const subscribe=A=>g.subscribe(A),getSnapshot=()=>g.getSnapshot();A=Object.freeze({subscribe,getSnapshot}),aI.set(g,A)}return A},useTranscript=g=>{const{subscribe:A,getSnapshot:I}=getTranscriptModelBindings(g),C=(0,e.useSyncExternalStore)(A,I,I);return{version:C.version,items:C.items,totalLines:C.totalLines}},CombatStreamInner=()=>{const{adapter:g,stores:A}=useNexGui(),{items:I,version:C}=useTranscript(A.combatStream),t=(0,e.useCallback)(A=>g.send(A),[g]);return React.createElement(nI,{className:"nexgui4-combat-stream",itemKeyVersion:C,items:I,onSendCommand:t})};CombatStreamInner.displayName="CombatStreamInner";var CombatStream=()=>React.createElement(QA,{panelName:"Combat Stream"},React.createElement(CombatStreamInner,null));CombatStream.displayName="CombatStream";var getRoomItemLookupEntry=g=>g&&"object"==typeof g?getRoomItemOverride(g):null,getRoomItemBackground=g=>getRoomItemLookupEntry(g)?.background??void 0,getRoomItemColor=g=>{const A=getRoomItemLookupEntry(g);return A?A.color:"t"===g?.attrib?"orange":void 0},getRoomItemLabel=g=>{if("string"==typeof g)return g;const A=getRoomItemLookupEntry(g);return A?A.text:g?.name},getRoomItemCommands=g=>{const A=["Probe"];return"string"==typeof g?.attrib&&g.attrib.includes("t")&&A.unshift("Get"),A},sortRoomItemsLikeNexGui3=g=>[...g].sort((g,A)=>{const I=getRoomItemLookupEntry(g);return getRoomItemLookupEntry(A)&&!I?-1:"t"!==A?.attrib||"t"===g?.attrib||I?1:-1}),selectRoomSlice=g=>({players:g.players,npcs:g.npcs,items:g.items,roomName:g.roomName,roomId:g.roomId,updateRoom:g.updateRoom}),useRoom=()=>{const{stores:g}=useNexGui();return g.room(useShallow(selectRoomSlice))},toDisplayItem=(g,A)=>"string"==typeof g?{commands:[],id:null,key:`room-item-string-${A}-${g}`,label:getRoomItemLabel(g),name:g,raw:g,rowBackground:void 0,rowColor:void 0}:g&&"object"==typeof g?{commands:null==g.id?[]:getRoomItemCommands(g),id:g.id??null,key:`room-item-${g.id??`${A}-${g.name??"unknown"}`}`,label:getRoomItemLabel(g)??g.name??"",name:g.name??"",raw:g,rowBackground:getRoomItemBackground(g),rowColor:getRoomItemColor(g)}:null,useRoomItemsViewModel=()=>{const{adapter:g}=useNexGui(),{items:A}=useRoom(),[I,C]=(0,e.useState)(0);(0,e.useEffect)(()=>subscribeToRoomItemOverrides(()=>C(g=>g+1)),[]);const t=(0,e.useMemo)(()=>sortRoomItemsLikeNexGui3((A??[]).filter(g=>!isRoomNpcItem(g))).map((g,A)=>toDisplayItem(g,A)).filter(Boolean),[A,I]),n=(0,e.useCallback)((A,I)=>{null!=I?.id&&g?.send?.(`${A} ${I.id}`)},[g]);return(0,e.useMemo)(()=>({items:t,sendItemCommand:n}),[t,n])},getFlipTransform$8=g=>{switch(g){case 1:return"scaleX(-1) scaleY(-1)";case 2:return"scaleY(-1)";case 3:return"scaleX(-1)";default:return"none"}},ItemsPanelInner=()=>{const g=(0,a.useTheme)(),{items:A,sendItemCommand:I}=useRoomItemsViewModel(),[C]=(0,e.useState)(()=>Math.floor(4*Math.random())),[t,r]=(0,e.useState)(null),[o,i]=(0,e.useState)(null),l=g?.nexGui?.backgroundImage??"",s=g?.nexGui?.backgroundOpacity??.5,c=g?.nexGui?.backgroundFilter??"none",u=Boolean(t),m=o?.commands??[],handleCloseMenu=()=>{r(null),i(null)},handleOpenMenu=(g,A)=>{A&&null!=A.id&&0!==A.commands.length&&(i(A),r(g.currentTarget))},handleCommandClick=g=>{null!=o?.id?(I(g,o),handleCloseMenu()):handleCloseMenu()};return React.createElement(n.Box,{className:"items-panel",sx:{color:"text.primary",fontFamily:g.typography.fontFamily,fontSize:g.typography.fontSize,height:"100%",overflow:"hidden",position:"relative",width:"100%"}},l?React.createElement(n.Box,{"aria-hidden":"true",className:"items-panel__background",sx:{backgroundImage:`url(${l})`,backgroundPosition:"center",backgroundSize:"cover",filter:c,height:"100%",inset:0,left:0,opacity:s,position:"absolute",top:0,transform:getFlipTransform$8(C),width:"100%",zIndex:0}}):null,React.createElement(n.Box,{className:"items-panel__content","data-testid":"items-panel-content",sx:{display:"flex",flexDirection:"column-reverse",height:"100%",overflow:"auto",position:"relative",width:"100%",zIndex:1}},A.length>0?React.createElement(n.Box,{className:"items-panel__rows",sx:{display:"table",m:"10px",maxWidth:"100%",p:"1px",position:"relative",textAlign:"left"}},A.map(g=>{const A=null!=g.id&&g.commands.length>0;return React.createElement(n.Box,{key:g.key,className:["items-panel__row",A?"items-panel__row--interactive":""].filter(Boolean).join(" "),onClick:A?A=>handleOpenMenu(A,g):void 0,onContextMenu:A?A=>{A.preventDefault(),handleOpenMenu(A,g)}:void 0,sx:{backgroundColor:g.rowBackground??"transparent",cursor:A?"pointer":"inherit",display:"table-row"}},React.createElement(n.Box,{component:"div",sx:{color:"cyan",display:"table-cell",padding:"0px 5px 0px 2px",whiteSpace:"nowrap"}},React.createElement(n.Typography,{component:"span",sx:{color:"inherit",fontVariantNumeric:"tabular-nums"},variant:"body2"},g.id??"")),React.createElement(n.Box,{component:"div",sx:{display:"table-cell",padding:0,width:"100%"}},React.createElement(n.Typography,{component:"span",sx:{color:g.rowColor??"text.primary"},variant:"body2"},g.label)))})):null),React.createElement(n.Menu,{anchorEl:t,onClose:handleCloseMenu,open:u,slotProps:{paper:{sx:{backgroundColor:"#000000",border:"1px solid #ffffff"}}}},m.map(g=>React.createElement(n.MenuItem,{key:g,onClick:()=>handleCommandClick(g)},g))))};ItemsPanelInner.displayName="ItemsPanelInner";var ItemsPanel=()=>React.createElement(QA,{panelName:"Items"},React.createElement(ItemsPanelInner,null));ItemsPanel.displayName="ItemsPanel";var rI=600,oI=400,clampScrollbackGeometryValue=(g,A,I)=>Math.min(Math.max(g,A),I),parseStoredValue=g=>{if("string"!=typeof g)return g;try{return JSON.parse(g)}catch{return g}},hasUsablePersistenceAdapter=g=>"function"==typeof g?.getVariable&&"function"==typeof g?.setVariable,hasSavedGeometry=g=>!!hasUsablePersistenceAdapter(g)&&isPlainObject(parseStoredValue((g.getVariable("nexGui4Settings")||{})[$g.UI])?.scrollbackModal),getScrollbackViewportBounds=()=>"undefined"==typeof window?{width:800,height:600}:{width:Math.max(320,window.innerWidth),height:Math.max(240,window.innerHeight)},getMinimumScrollbackGeometry=()=>{const g=getScrollbackViewportBounds();return{width:Math.min(rI,g.width),height:Math.min(oI,g.height)}},getDefaultScrollbackGeometry=()=>{const g=getScrollbackViewportBounds(),A=getMinimumScrollbackGeometry(),I=clampScrollbackGeometryValue(Math.round(.7*g.width),A.width,g.width),C=clampScrollbackGeometryValue(Math.round(.7*g.height),A.height,g.height);return{x:Math.round((g.width-I)/2),y:Math.round((g.height-C)/2),width:I,height:C}},normalizeScrollbackGeometry=g=>{const A=getDefaultScrollbackGeometry(),I=getScrollbackViewportBounds(),C=getMinimumScrollbackGeometry(),e=clampScrollbackGeometryValue(Number(g?.width)||A.width,C.width,I.width),t=clampScrollbackGeometryValue(Number(g?.height)||A.height,C.height,I.height);return{x:clampScrollbackGeometryValue(Number(g?.x)||0,0,Math.max(0,I.width-e)),y:clampScrollbackGeometryValue(Number(g?.y)||0,0,Math.max(0,I.height-t)),width:e,height:t}},useScrollbackLayout=()=>{const g=(0,e.useContext)(KA),A=g?.adapter,I=g?.scrollbackLayoutStore,C=g?.persistenceStore?.getAll?.()?.ui??{},t=(0,e.useMemo)(()=>I&&hasSavedGeometry(A)?normalizeScrollbackGeometry(I.get("scrollbackModal")):getDefaultScrollbackGeometry(),[A,I]),n=(0,e.useCallback)(g=>{I?.set("scrollbackModal",normalizeScrollbackGeometry(g))},[I]);return{focusHostInput:(0,e.useCallback)(()=>{A?.focusInput?.()},[A]),initialGeometry:t,persistGeometry:n,useVirtualizedLogs:Boolean(C.virtualizedLogs)}},iI=.8,useScrollbackHydration=({items:g,open:A,scrollbackSession:I,getViewportElement:C,dispatchViewportScroll:t,setScrollLock:n,onViewportOpened:a})=>{const[r,o]=(0,e.useState)([]),[i,l]=(0,e.useState)(!1),[s,c]=(0,e.useState)(!0),u=(0,e.useRef)([]);u.current=r;const m=(0,e.useRef)({hasMore:!0,isLoading:!1});m.current={hasMore:s,isLoading:i},(0,e.useEffect)(()=>{if(!A)return o([]),void c(!0);o(A=>{if(0===g.length)return[];if(0===A.length)return[...g];const I=A[A.length-1]?.id??-1,C=g.filter(g=>g.id>I);return C.length>0?[...A,...C]:A})},[g,A]);const d=(0,e.useCallback)(async()=>{if(!m.current.hasMore||m.current.isLoading)return;const g=u.current[0]?.id;if(void 0===g||g<=0)return m.current={...m.current,hasMore:!1},void c(!1);if(!I?.readRange)return m.current={...m.current,hasMore:!1},void c(!1);m.current={...m.current,isLoading:!0},l(!0);try{const A=Math.max(0,g-500),e=g-1,t=await I.readRange(A,e);if(0===t.length)return m.current={...m.current,hasMore:!1},void c(!1);o(g=>{const A=new Set(g.map(g=>g.id));return[...t.filter(g=>!A.has(g.id)),...g]});const n=C();if(n){const g=n.scrollHeight,A=n.scrollTop;window.requestAnimationFrame(()=>{n.scrollTop=A+(n.scrollHeight-g)})}}catch(A){console.error("[nexGui4] Failed to load older lines",A)}finally{m.current={...m.current,isLoading:!1},l(!1)}},[C,I]);return(0,e.useEffect)(()=>{if(!A)return;let g=!0,I=null,e=null;const r=window.requestAnimationFrame(()=>{window.requestAnimationFrame(()=>{if(!g)return;const A=C();if(!A)return;I=A;const r=Math.max(0,A.scrollHeight-A.clientHeight),o=A.clientHeight*iI,i=Math.max(0,r-o);A.scrollTop=i,t(A),n(i<r),a?.(),e=()=>{const{hasMore:g,isLoading:I}=m.current;A.scrollTop<300&&g&&!I&&d()},A.addEventListener("scroll",e,{passive:!0})})});return()=>{g=!1,window.cancelAnimationFrame(r),I&&e&&I.removeEventListener("scroll",e)}},[t,C,d,a,A,n]),{hydratedItems:r,hasMore:s,isLoadingMore:i,hydrateToId:(0,e.useCallback)(async g=>{if(!I?.readRange)return;const A=u.current[0]?.id,C=u.current[u.current.length-1]?.id;let e,t;if(void 0===A)e=g,t=g;else if(g<A)e=g,t=A-1;else{if(!(g>C))return;e=C+1,t=g}m.current={...m.current,isLoading:!0},l(!0);try{const g=await I.readRange(e,t);g.length>0&&o(A=>{const I=new Set(A.map(g=>g.id));return[...g.filter(g=>!I.has(g.id)),...A].sort((g,A)=>g.id-A.id)})}catch(n){console.error("[nexGui4] Failed to hydrate to ID",n)}finally{m.current={...m.current,isLoading:!1},l(!1)}},[I])}},useScrollbackSearch=({scrollbackSession:g,open:A,showPrompts:I,showGagged:C=!1,onCursorChange:t})=>{const[n,a]=(0,e.useState)(""),[r,o]=(0,e.useState)(""),[i,l]=(0,e.useState)([]),[s,c]=(0,e.useState)(!1),[u,m]=(0,e.useState)(-1),d=(0,e.useCallback)(()=>{a(""),o(""),m(-1)},[]);(0,e.useEffect)(()=>{A||(d(),l([]),c(!1))},[A,d]),(0,e.useEffect)(()=>{if(!r)return l([]),void c(!1);let A=!0;return c(!0),(async()=>{try{if(g?.search){const I=await g.search(r,{includePrompts:!0});return void(A&&l(I))}A&&l([])}catch(I){console.error("[nexGui4] Failed searching scrollback session",I)}finally{A&&c(!1)}})(),()=>{A=!1}},[r,g]);const p=(0,e.useMemo)(()=>r?i.filter(g=>I||!g.isPrompt).filter(g=>C||!g.gagged):[],[r,i,C,I]),h=p.length;(0,e.useEffect)(()=>{if(!A||!r)return void m(-1);if(0===h)return void m(-1);const g=h-1;m(g),t?.(g)},[r,t,A,h]);const y=(0,e.useCallback)(g=>{a(g.target.value)},[]),b=(0,e.useCallback)(g=>{if("Enter"!==g.key)return;const A=g.target.value??"";if(A!==r)return void o(A);if(0===h)return;const I=u-1<0?h-1:u-1;m(I),t?.(I)},[r,t,u,h]),x=r.length>0,v=x&&n.length>0&&0===h;return{searchBarText:n,setSearchBarText:a,committedSearchTerm:r,searchResults:p,isSearching:s,isSearchActive:x,searchMatchCount:h,searchCursor:u,hasNoMatch:v,searchStatusText:s?"Searching...":v?"No match":h>0&&u>=0?`${u+1}/${h}`:"",resetSearch:d,handleSearchInput:y,handleSearchKeyDown:b}},lI=1500,useScrollbackSelection=({visibleItems:g,showTimestamps:A=!0})=>{const[I,C]=(0,e.useState)(null),[t,n]=(0,e.useState)(null),[a,r]=(0,e.useState)(!1),o=(0,e.useRef)({a:null,b:null});o.current={a:I,b:t};const i=(0,e.useCallback)(g=>{const{a:A,b:I}=o.current;A===g||I===g?(C(null),n(null)):null===A?C(g):null===I?n(g):(C(g),n(null))},[]),l=(0,e.useMemo)(()=>{if(null==I||null==t)return null;const A=Math.min(I,t),C=Math.max(I,t);return g.filter(g=>g.id>=A&&g.id<=C)},[I,t,g]);return{selectionA:I,selectionB:t,selectedRangeItems:l,copyConfirmed:a,handleLineSelect:i,handleCopyRange:(0,e.useCallback)(async()=>{if(!l?.length)return;const g=l.map(g=>{const I=stripHtml(g.html);if(A){const A=resolveTimestampLabel(g.timestamp);return A?`${A} ${I}`:I}return I}).join("\n");try{await navigator.clipboard.writeText(g),r(!0),window.setTimeout(()=>r(!1),lI)}catch{}},[l,A]),isLineSelected:(0,e.useCallback)(g=>{const A=g===I||g===t;return null==I||null==t?{isEndpoint:A,inRange:!1}:{isEndpoint:A,inRange:g>=Math.min(I,t)&&g<=Math.max(I,t)}},[I,t])}},sI="nexgui4-log.html",cI="text/html;charset=utf-8",toDate=g=>{if(g instanceof Date)return Number.isNaN(g.getTime())?null:g;if("number"==typeof g&&Number.isFinite(g)){const A=new Date(g);return Number.isNaN(A.getTime())?null:A}return null},formatTimestamp$1=g=>{const A="string"==typeof g&&g.trim().length>0?g:null;if(A)return A;const I=toDate(g)??new Date,pad=(g,A=2)=>String(g).padStart(A,"0");return[pad(I.getHours()),pad(I.getMinutes()),pad(I.getSeconds())].join(":")+`.${pad(I.getMilliseconds(),3)}`},formatLogDate=(g=new Date)=>`${g.getFullYear()}-${g.getMonth()+1}-${g.getDate()}`,resolveCssFontSize$1=g=>null==g?"14px":"number"==typeof g?`${g}px`:String(g),collectPaletteCss=()=>{if("undefined"==typeof document)return"";try{return Array.from(document.getElementById("ng-palette")?.sheet?.cssRules??[]).map(g=>g.cssText).join("\n")}catch{return""}},collectNexGuiStyles=()=>"undefined"==typeof document?"":document.getElementById("nexGuicss")?.outerHTML??"",normalizeLogLine=(g,A)=>({html:String(g?.html??""),id:Number.isFinite(Number(g?.id))&&null!==g?.id?Number(g.id):A,isMonospace:Boolean(g?.isMonospace),isPrompt:Boolean(g?.isPrompt),shouldLog:Boolean(g?.shouldLog),timestamp:formatTimestamp$1(g?.timestamp)}),normalizeLogLines=g=>g.map((g,A)=>normalizeLogLine(g,A)),serializeJsonForInlineScript=g=>JSON.stringify(g).replace(/</g,"\\u003c").replace(/>/g,"\\u003e").replace(/&/g,"\\u0026").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029"),buildLogTitle=g=>g&&String(g).trim().length>0?String(g):`nexGui4 Scrollback - ${formatLogDate()}`,buildBaseStyle=({fontFamily:g,fontSize:A})=>`\n html,\n body {\n background: black;\n color: #ccc;\n margin: 0;\n min-height: 100%;\n }\n\n body {\n box-sizing: border-box;\n font-family: ${g};\n font-size: ${A};\n padding: 12px;\n }\n\n .nexgui4-log-line {\n box-sizing: border-box;\n font-family: ${g};\n font-size: ${A};\n line-height: 1.2;\n overflow-wrap: anywhere;\n white-space: pre-wrap;\n }\n\n .nexgui4-log-line.mono,\n .nexgui4-log-line .mono {\n font-family: ${g};\n }\n\n .nexgui4-log-timestamp {\n color: #555;\n font-family: ${g};\n margin-right: 1ch;\n }\n\n .nexgui4-log-payload {\n min-width: 0;\n }\n`,buildHead=({title:g,fontFamily:A,fontSize:I})=>{const C=collectPaletteCss(),e=collectNexGuiStyles();return`<head>\n <meta charset="utf-8" />\n <title>${escapeHtml(g)}</title>\n <style>\n${buildBaseStyle({fontFamily:A,fontSize:I})}\n </style>\n <style id="ng-palette">${C}</style>\n ${e}\n </head>`},buildLogLineClassName=g=>["nexgui4-log-line",g.isPrompt?"prompt textline":"textline",g.isMonospace?"mono":null].filter(Boolean).join(" "),renderStaticLogRow=g=>`<div class="${buildLogLineClassName(g)}"><span class="nexgui4-log-timestamp timestamp mono no_out">${escapeHtml(g.timestamp)}&nbsp;</span><span class="nexgui4-log-payload">${g.html}</span></div>`,buildStandardHtmlLog=(g,{fontFamily:A=Xg,fontSize:I,title:C}={})=>{const e=resolveCssFontSize$1(I),t=buildLogTitle(C),n=normalizeLogLines(g).map(renderStaticLogRow).join("\n");return`<!doctype html>\n<html>\n ${buildHead({title:t,fontFamily:A,fontSize:e})}\n <body>\n${n}\n </body>\n</html>`},buildVirtualizedLogScript=(g,A)=>`\n (() => {\n const allLines = ${serializeJsonForInlineScript(g)};\n const viewport = document.getElementById("nexgui4-log-viewport");\n const spacer = document.getElementById("nexgui4-log-spacer");\n const rows = document.getElementById("nexgui4-log-rows");\n const searchInput = document.getElementById("nexgui4-log-search");\n const status = document.getElementById("nexgui4-log-search-status");\n const timestampToggle = document.getElementById("nexgui4-log-timestamps");\n const promptToggle = document.getElementById("nexgui4-log-prompts");\n\n let showTimestamps = true;\n let showPrompts = true;\n let displayLines = allLines;\n let heights = [];\n let offsets = [];\n let searchTerm = "";\n let searchMatches = [];\n let searchIndex = -1;\n let renderFrame = 0;\n let ignoreScrollAdjust = false;\n const overscan = 8;\n const lineTextCache = new WeakMap();\n const textProbe = document.createElement("div");\n\n const estimate = Math.max(18, ${Math.max(18,A)});\n const escapeText = (value) =>\n String(value ?? "")\n .replaceAll("&", "&amp;")\n .replaceAll("<", "&lt;")\n .replaceAll(">", "&gt;")\n .replaceAll('"', "&quot;")\n .replaceAll("'", "&#39;");\n\n const readLineText = (line) => {\n if (lineTextCache.has(line)) {\n return lineTextCache.get(line);\n }\n\n textProbe.innerHTML = line.html ?? "";\n const text = (textProbe.textContent || "").toLowerCase();\n lineTextCache.set(line, text);\n return text;\n };\n\n const rebuildMetrics = () => {\n offsets = new Array(displayLines.length + 1);\n offsets[0] = 0;\n for (let index = 0; index < displayLines.length; index += 1) {\n offsets[index + 1] = offsets[index] + (heights[index] || estimate);\n }\n spacer.style.height = (offsets[offsets.length - 1] || 0) + "px";\n };\n\n const findIndexAt = (offset) => {\n let low = 0;\n let high = displayLines.length;\n while (low < high) {\n const mid = Math.floor((low + high) / 2);\n if (offsets[mid + 1] < offset) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return low;\n };\n\n const updateStatus = () => {\n if (!searchTerm) {\n status.textContent = "";\n return;\n }\n\n status.textContent = searchMatches.length\n ? "(" + (searchIndex + 1) + " of " + searchMatches.length + ") Line: " + searchMatches[searchIndex]\n : "No entry found";\n };\n\n const classNameForLine = (line) =>\n "nexgui4-log-line " +\n (line.isPrompt ? "prompt textline" : "textline") +\n (line.isMonospace ? " mono" : "");\n\n const render = () => {\n renderFrame = 0;\n const top = viewport.scrollTop;\n const bottom = top + viewport.clientHeight;\n const start = Math.max(0, findIndexAt(top) - overscan);\n const end = Math.min(displayLines.length, findIndexAt(bottom) + overscan + 1);\n const activeDisplayIndex = searchMatches[searchIndex] ?? -1;\n let html = "";\n\n for (let index = start; index < end; index += 1) {\n const line = displayLines[index];\n const timestamp = showTimestamps\n ? '<span class="nexgui4-log-timestamp timestamp mono no_out">' +\n escapeText(line.timestamp) +\n "&nbsp;</span>"\n : "";\n const activeClass = activeDisplayIndex === index ? " nexgui4-log-line--active" : "";\n\n html +=\n '<div class="' +\n classNameForLine(line) +\n activeClass +\n '" data-index="' +\n index +\n '" style="transform:translateY(' +\n offsets[index] +\n 'px)">' +\n timestamp +\n '<span class="nexgui4-log-payload">' +\n line.html +\n "</span></div>";\n }\n\n rows.innerHTML = html;\n window.requestAnimationFrame(measureRenderedRows);\n };\n\n const requestRender = () => {\n if (renderFrame) {\n return;\n }\n\n renderFrame = window.requestAnimationFrame(render);\n };\n\n const measureRenderedRows = () => {\n let changed = false;\n let scrollAdjustment = 0;\n const currentScrollTop = viewport.scrollTop;\n\n rows.querySelectorAll("[data-index]").forEach((row) => {\n const index = Number(row.getAttribute("data-index"));\n const measured = Math.ceil(row.getBoundingClientRect().height);\n const oldHeight = heights[index] || estimate;\n\n if (Number.isFinite(index) && measured > 0 && Math.abs(oldHeight - measured) > 1) {\n if (offsets[index] < currentScrollTop) {\n scrollAdjustment += (measured - oldHeight);\n }\n heights[index] = measured;\n changed = true;\n }\n });\n\n if (changed) {\n rebuildMetrics();\n if (scrollAdjustment !== 0) {\n ignoreScrollAdjust = true;\n viewport.scrollTop = currentScrollTop + scrollAdjustment;\n }\n render();\n }\n };\n\n const rebuildDisplayLines = () => {\n displayLines = showPrompts ? allLines : allLines.filter((line) => !line.isPrompt);\n heights = new Array(displayLines.length);\n searchMatches = [];\n searchIndex = -1;\n\n if (searchTerm) {\n searchMatches = displayLines.reduce((matches, line, index) => {\n if (readLineText(line).includes(searchTerm)) {\n matches.push(index);\n }\n return matches;\n }, []);\n searchIndex = searchMatches.length > 0 ? 0 : -1;\n }\n\n rebuildMetrics();\n updateStatus();\n requestRender();\n };\n\n const scrollToActiveSearchMatch = () => {\n if (searchIndex < 0) {\n return;\n }\n\n viewport.scrollTop = Math.max(\n 0,\n offsets[searchMatches[searchIndex]] - viewport.clientHeight / 2,\n );\n requestRender();\n };\n\n const runSearch = () => {\n const nextTerm = searchInput.value.trim().toLowerCase();\n\n if (nextTerm !== searchTerm) {\n searchTerm = nextTerm;\n rebuildDisplayLines();\n } else if (searchMatches.length > 0) {\n searchIndex = (searchIndex + 1) % searchMatches.length;\n updateStatus();\n requestRender();\n }\n\n scrollToActiveSearchMatch();\n };\n\n viewport.addEventListener("scroll", () => {\n if (ignoreScrollAdjust) {\n ignoreScrollAdjust = false;\n return;\n }\n requestRender();\n }, { passive: true });\n window.addEventListener("resize", () => {\n heights = new Array(displayLines.length);\n rebuildMetrics();\n requestRender();\n });\n searchInput.addEventListener("keydown", (event) => {\n if (event.key === "Enter") {\n runSearch();\n }\n });\n timestampToggle.addEventListener("change", () => {\n showTimestamps = timestampToggle.checked;\n heights = new Array(displayLines.length);\n rebuildMetrics();\n requestRender();\n });\n promptToggle.addEventListener("change", () => {\n showPrompts = promptToggle.checked;\n rebuildDisplayLines();\n });\n\n rebuildDisplayLines();\n viewport.scrollTop = Math.max(0, spacer.offsetHeight - viewport.clientHeight);\n requestRender();\n })();\n`,buildVirtualizedHtmlLog=(g,{fontFamily:A=Xg,fontSize:I,title:C}={})=>{const e=resolveCssFontSize$1(I),t=Number.parseFloat(e)||14,n=buildLogTitle(C),a=normalizeLogLines(g);return`<!doctype html>\n<html>\n ${buildHead({title:n,fontFamily:A,fontSize:e})}\n <body class="nexgui4-log-body--virtual">\n <div class="nexgui4-log-toolbar">\n <input id="nexgui4-log-search" aria-label="Search log" placeholder="Search" />\n <span id="nexgui4-log-search-status" aria-live="polite"></span>\n <label><input id="nexgui4-log-timestamps" type="checkbox" checked /> Timestamps</label>\n <label><input id="nexgui4-log-prompts" type="checkbox" checked /> Prompts</label>\n </div>\n <div id="nexgui4-log-viewport" class="nexgui4-log-viewport">\n <div id="nexgui4-log-spacer" class="nexgui4-log-spacer">\n <div id="nexgui4-log-rows" class="nexgui4-log-rows"></div>\n </div>\n </div>\n <style>\n .nexgui4-log-body--virtual {\n height: 100vh;\n overflow: hidden;\n padding: 0;\n }\n\n .nexgui4-log-toolbar {\n align-items: center;\n background: #050505;\n border-bottom: 1px solid #333;\n box-sizing: border-box;\n display: flex;\n gap: 12px;\n height: 42px;\n padding: 6px 10px;\n }\n\n .nexgui4-log-toolbar input[type="text"],\n #nexgui4-log-search {\n background: #111;\n border: 1px solid #444;\n color: #eee;\n font: inherit;\n padding: 4px 6px;\n width: 24ch;\n }\n\n #nexgui4-log-search-status {\n color: #aaa;\n min-width: 18ch;\n }\n\n .nexgui4-log-toolbar label {\n align-items: center;\n display: inline-flex;\n gap: 4px;\n white-space: nowrap;\n }\n\n .nexgui4-log-viewport {\n height: calc(100vh - 42px);\n overflow-y: auto;\n position: relative;\n }\n\n .nexgui4-log-spacer {\n position: relative;\n width: 100%;\n }\n\n .nexgui4-log-rows {\n left: 0;\n position: absolute;\n top: 0;\n width: 100%;\n }\n\n .nexgui4-log-rows .nexgui4-log-line {\n left: 0;\n padding: 0 12px;\n position: absolute;\n top: 0;\n width: 100%;\n }\n\n .nexgui4-log-line--active {\n background: #e5e7eb;\n color: #111827;\n }\n </style>\n <script>\n${buildVirtualizedLogScript(a,Math.ceil(1.25*t))}\n <\/script>\n </body>\n</html>`},buildHtmlLog=(g,A,I={})=>A?buildVirtualizedHtmlLog(g,I):buildStandardHtmlLog(g,I),downloadBuffer=(g,A,{fontFamily:I=Xg,fontSize:C,title:e}={})=>{if("undefined"==typeof document||"undefined"==typeof Blob||"undefined"==typeof URL||"function"!=typeof URL.createObjectURL||0===g.length)return;const t=buildHtmlLog(g,A,{fontFamily:I,fontSize:C,title:e}),n=URL.createObjectURL(new Blob([t],{type:cI})),a=document.createElement("a");a.href=n,a.download=sI,a.style.display="none",document.body.append(a),a.click(),a.remove(),URL.revokeObjectURL(n)},useScrollbackDownload=({scrollbackSession:g,visibleItems:A,isSearchActive:I,useVirtualizedLogs:C,fontFamily:t,fontSize:n})=>({handleDownload:(0,e.useCallback)(async()=>{let e=A;if(!I&&g?.readAll)try{const A=await g.readAll();A&&A.length>0&&(e=A)}catch(a){console.error("[nexGui4] Failed to read all lines for download",a)}downloadBuffer(e,C,{fontFamily:t,fontSize:n})},[t,n,I,g,C,A])}),uI=12,mI=18,dI={height:"--nexgui4-scrollback-height",width:"--nexgui4-scrollback-width",x:"--nexgui4-scrollback-left",y:"--nexgui4-scrollback-top"},pI=[{direction:"n",sx:{cursor:"n-resize",height:uI,left:mI,right:mI,top:-6}},{direction:"s",sx:{bottom:-6,cursor:"s-resize",height:uI,left:mI,right:mI}},{direction:"e",sx:{bottom:mI,cursor:"e-resize",right:-6,top:mI,width:uI}},{direction:"w",sx:{bottom:mI,cursor:"w-resize",left:-6,top:mI,width:uI}},{direction:"ne",sx:{cursor:"ne-resize",height:mI,right:-6,top:-6,width:mI}},{direction:"nw",sx:{cursor:"nw-resize",height:mI,left:-6,top:-6,width:mI}},{direction:"se",sx:{bottom:-6,cursor:"se-resize",height:mI,right:-6,width:mI}},{direction:"sw",sx:{bottom:-6,cursor:"sw-resize",height:mI,left:-6,width:mI}}],areScrollbackGeometriesEqual=(g,A)=>g?.x===A?.x&&g?.y===A?.y&&g?.width===A?.width&&g?.height===A?.height,getScrollbackPaperGeometryStyle=g=>({[dI.height]:`${g.height}px`,[dI.width]:`${g.width}px`,[dI.x]:`${g.x}px`,[dI.y]:`${g.y}px`}),applyScrollbackPaperGeometry=(g,A)=>{g&&A&&Object.entries(getScrollbackPaperGeometryStyle(A)).forEach(([A,I])=>{g.style.setProperty(A,I)})},useScrollbackGeometry=({initialGeometry:g,persistGeometry:A,contentRef:I})=>{const C=(0,e.useRef)(null),t=(0,e.useRef)(g),n=(0,e.useRef)(g),[a,r]=(0,e.useState)(()=>getScrollbackPaperGeometryStyle(g)),o=(0,e.useCallback)(()=>C.current??I.current?.closest('[data-testid="scrollback-dialog-paper"]')??I.current?.closest(".MuiDialog-paper")??null,[I]),i=(0,e.useCallback)(g=>{const A=normalizeScrollbackGeometry("function"==typeof g?g(n.current):g);return n.current=A,applyScrollbackPaperGeometry(o(),A),A},[o]),l=(0,e.useCallback)(g=>{const A=i(g);return areScrollbackGeometriesEqual(t.current,A)||(t.current=A,r(getScrollbackPaperGeometryStyle(A))),A},[i]),s=(0,e.useCallback)((g,I)=>{const C=document.body.style.userSelect;document.body.style.userSelect="none";const handlePointerMove=g=>{I(g)},handlePointerUp=()=>{document.body.style.userSelect=C,document.removeEventListener("pointermove",handlePointerMove),document.removeEventListener("pointerup",handlePointerUp),A(l(n.current))};document.addEventListener("pointermove",handlePointerMove),document.addEventListener("pointerup",handlePointerUp),g.currentTarget.setPointerCapture?.(g.pointerId)},[l,A]);return{paperRef:C,paperGeometryStyle:a,handleDragPointerDown:(0,e.useCallback)(g=>{if(0!==g.button)return;g.preventDefault();const A=n.current,I=g.clientX-A.x,C=g.clientY-A.y;s(g,g=>{i({...A,x:g.clientX-I,y:g.clientY-C})})},[i,s]),handleResizePointerDown:(0,e.useCallback)(g=>A=>{if(0!==A.button)return;A.preventDefault(),A.stopPropagation();const I=n.current,C=A.clientX,e=A.clientY,t=I.x+I.width,a=I.y+I.height,r=getMinimumScrollbackGeometry();s(A,A=>{let n=I;if(g.includes("e")&&(n={...n,width:clampScrollbackGeometryValue(I.width+(A.clientX-C),r.width,getScrollbackViewportBounds().width-I.x)}),g.includes("s")&&(n={...n,height:clampScrollbackGeometryValue(I.height+(A.clientY-e),r.height,getScrollbackViewportBounds().height-I.y)}),g.includes("w")){const g=clampScrollbackGeometryValue(I.x+(A.clientX-C),0,t-r.width);n={...n,x:g,width:t-g}}if(g.includes("n")){const g=clampScrollbackGeometryValue(I.y+(A.clientY-e),0,a-r.height);n={...n,y:g,height:a-g}}i(n)})},[i,s]),reaffirmCommittedGeometry:(0,e.useCallback)(()=>{l(g=>g)},[l])}},hI={id:UA.default.number.isRequired,html:UA.default.string.isRequired,timestamp:UA.default.string.isRequired,isPrompt:UA.default.bool.isRequired,isMonospace:UA.default.bool.isRequired,shouldLog:UA.default.bool.isRequired,gagged:UA.default.bool},yI=UA.default.exact(hI),buildLineClassName=(g,A)=>["nexgui4-virtual-scroll-line",g.isPrompt?"prompt textline":"textline",g.isMonospace?"mono":null,g.shouldLog?"nexguilog":null,g.gagged?"nexgui4-virtual-scroll-line--gagged":null,A?"nexgui4-virtual-scroll-line--timestamped":null].filter(Boolean).join(" "),VirtualScrollLineComponent=({fontFamily:g,line:A,isActiveMatch:I=!1,isMatch:C=!1,timestampClassName:e,showTimestamp:t=!0})=>React.createElement("div",{className:buildLineClassName(A,t)},t?React.createElement($A,{fontFamily:g,timestamp:A.timestamp,highlight:I?"yellow":!!C&&"rgba(255, 255, 0, 0.35)",className:e}):null,React.createElement("span",{className:"nexgui4-virtual-scroll-line__payload",dangerouslySetInnerHTML:{__html:A.html}}));VirtualScrollLineComponent.displayName="VirtualScrollLine",VirtualScrollLineComponent.propTypes={fontFamily:UA.default.string,isActiveMatch:UA.default.bool,isMatch:UA.default.bool,line:yI.isRequired,showTimestamp:UA.default.bool,timestampClassName:UA.default.string};var areVirtualScrollLinePropsEqual=(g,A)=>g.line.id===A.line.id&&g.fontFamily===A.fontFamily&&g.showTimestamp===A.showTimestamp&&g.isActiveMatch===A.isActiveMatch&&g.isMatch===A.isMatch&&g.timestampClassName===A.timestampClassName,fI=(0,e.memo)(VirtualScrollLineComponent,areVirtualScrollLinePropsEqual);fI.displayName="VirtualScrollLine",fI.propTypes=VirtualScrollLineComponent.propTypes;var bI=UA.default.oneOfType([yI,UA.default.oneOf([null])]),PromptLineComponent=({fontFamily:g,promptLine:A=null,show:I=!1,showTimestamp:C=!0,timestampClassName:e})=>I&&A?React.createElement("div",{className:"nexgui4-prompt-line"},React.createElement(fI,{fontFamily:g,line:A,showTimestamp:C,timestampClassName:e})):null;PromptLineComponent.displayName="PromptLine",PromptLineComponent.propTypes={fontFamily:UA.default.string,promptLine:bI,show:UA.default.bool.isRequired,showTimestamp:UA.default.bool,timestampClassName:UA.default.string};var xI=(0,e.memo)(PromptLineComponent);xI.displayName="PromptLine",xI.propTypes=PromptLineComponent.propTypes;var noop$1=()=>{},vI=UA.default.oneOfType([yI,UA.default.oneOf([null])]),estimateLineSize=g=>Math.ceil(1.25*g),VirtualScrollBufferComponent=({items:g,promptLine:A=null,showPromptInline:I=!0,showTimestamp:C=!0,onSendCommand:t=noop$1,fontFamily:n=Xg,fontSize:a=14,itemKeyVersion:r=null,border:o=!0,onRequestScrollback:i=noop$1,onScrollLockChange:l=noop$1,activeMatchIndex:s=-1,timestampClassName:c,overscan:u=5,renderItem:m},d)=>{const p=parseFontSize(a,14),h=(0,e.useCallback)(()=>estimateLineSize(p),[p]),y=(0,e.useCallback)((g,A)=>g?.id??A,[]),b=o?null:`${g.length}:${g.at(-1)?.id??""}:${I?"":A?.id??""}`,x=(0,e.useCallback)((g,{isActiveMatch:A})=>React.createElement(fI,{fontFamily:n,line:g,isActiveMatch:A,showTimestamp:C,timestampClassName:c}),[n,C,c]);return React.createElement(_A,{ref:d,activeMatchIndex:s,border:o,displayPinKey:b,estimateSize:h,fontFamily:n,fontSize:a,footer:React.createElement(xI,{fontFamily:n,promptLine:A,show:Boolean(A)&&!I,showTimestamp:C,timestampClassName:c}),getItemKey:y,itemKeyVersion:r,items:g,mode:o?"panel":"display",onRequestHistory:i,onSendCommand:t,onScrollLockChange:l,overscan:u,renderItem:m??x,showScrollLockBadge:o})};VirtualScrollBufferComponent.displayName="VirtualScrollBuffer",VirtualScrollBufferComponent.propTypes={activeMatchIndex:UA.default.number,border:UA.default.bool,fontFamily:UA.default.string,fontSize:UA.default.oneOfType([UA.default.number,UA.default.string]),itemKeyVersion:UA.default.oneOfType([UA.default.number,UA.default.string]),items:UA.default.arrayOf(yI).isRequired,onRequestScrollback:UA.default.func,onScrollLockChange:UA.default.func,onSendCommand:UA.default.func,overscan:UA.default.number,promptLine:vI,renderItem:UA.default.func,showPromptInline:UA.default.bool,showTimestamp:UA.default.bool,timestampClassName:UA.default.string};var EI=(0,e.forwardRef)(VirtualScrollBufferComponent);EI.displayName="VirtualScrollBuffer",EI.propTypes=VirtualScrollBufferComponent.propTypes;var wI=UA.default.oneOfType([yI,UA.default.oneOf([null])]),noop=()=>{},RI=.8,SI=1,MI=2,TI=48,NI="nexgui4-scrollback-timestamp ng-timestamp timestamp mono no_out",resolveCssFontSize=g=>null==g?"14px":"number"==typeof g?`${g}px`:String(g),getScrollbackWheelDeltaPixels=(g,A)=>{const I=Number(g?.deltaY);if(!Number.isFinite(I)||0===I)return 0;if(g?.deltaMode===SI)return I*TI;if(g?.deltaMode===MI){const g=Number(A?.clientHeight);return I*Math.max(0,Number.isFinite(g)?g:0)*RI}return I},resolveDialogSurfaceBackground=g=>g.nexGui?.tokens?.background?.modal??g.palette.background.paper,resolveModalBackground=g=>g.palette.common.black,resolveHeaderBackground=g=>g.nexGui?.tokens?.background?.header??g.palette.background.default,GI=(0,e.memo)(({isEndpoint:g,inRange:A,onClick:I})=>React.createElement(n.Box,{"aria-label":"Select line for copy range",component:"button",onClick:I,sx:I=>({position:"absolute",left:0,top:"4px",bgcolor:g?I.palette.primary.main:"transparent",borderRadius:"50%",borderStyle:"solid",borderWidth:2,borderColor:g?I.palette.primary.main:I.palette.divider,boxSizing:"border-box",cursor:"pointer",display:"block",height:12,lineHeight:1,opacity:g?1:A?.6:.25,outline:"none",p:0,transition:"opacity 0.12s, background-color 0.12s, border-color 0.12s",userSelect:"none",width:12,"&:hover":{borderColor:I.palette.primary.main,opacity:1},"&:focus-visible":{outline:`2px solid ${I.palette.primary.main}`,outlineOffset:2}})}));GI.displayName="SelectionBubble",GI.propTypes={inRange:UA.default.bool.isRequired,isEndpoint:UA.default.bool.isRequired,onClick:UA.default.func.isRequired};var ScrollbackModalDialog=({open:g,onClose:A,items:I,filteredItems:C=I,itemKeyVersion:t=null,scrollbackSession:a=null,promptLine:r=null,onSendCommand:o=noop,fontFamily:i=Xg,fontSize:l=14,showTimestamp:s=!0})=>{const[c,u]=(0,e.useState)(!0),[m,d]=(0,e.useState)(s),[p,h]=(0,e.useState)(!1),[y,b]=(0,e.useState)(!1),{focusHostInput:x,initialGeometry:v,persistGeometry:E,useVirtualizedLogs:w}=useScrollbackLayout(),R=(0,e.useRef)(null),S=(0,e.useRef)(null),M=(0,e.useCallback)(()=>S.current?.querySelector('[data-testid="virtual-scroll-viewport"]')??null,[]),T=(0,e.useCallback)(g=>{g.dispatchEvent(new Event("scroll",{bubbles:!0}))},[]),N=(0,e.useCallback)(g=>{const A=M();if(!A)return!1;const I=Math.max(0,A.scrollHeight-A.clientHeight);return A.scrollTop=clampScrollbackGeometryValue(A.scrollTop+g,0,I),!0},[M]),G=(0,e.useCallback)(()=>{const g=M();g?(g.scrollTop=g.scrollHeight,T(g)):R.current?.scrollToBottom?.(),b(!1)},[T,M]),{hydratedItems:D,isLoadingMore:j,hydrateToId:P}=useScrollbackHydration({items:I,open:g,scrollbackSession:a,getViewportElement:M,dispatchViewportScroll:T,setScrollLock:b}),{paperRef:B,paperGeometryStyle:O,handleDragPointerDown:L,handleResizePointerDown:z,reaffirmCommittedGeometry:Z}=useScrollbackGeometry({initialGeometry:v,persistGeometry:E,contentRef:S}),{searchBarText:F,searchResults:K,isSearchActive:Y,searchCursor:V,searchStatusText:W,hasNoMatch:U,resetSearch:H,handleSearchInput:Q,handleSearchKeyDown:X}=useScrollbackSearch({scrollbackSession:a,open:g,showPrompts:c,showGagged:p}),J=(0,e.useMemo)(()=>D.filter(g=>(c||!g.isPrompt)&&(p||!g.gagged)),[D,p,c]),q=(0,e.useMemo)(()=>V>=0&&V<K.length?K[V]:null,[V,K]);(0,e.useEffect)(()=>{if(!g||!q)return;const A=q.id,I=J.findIndex(g=>g.id===A);I>=0?(R.current?.scrollToIndex?.(I,{align:"center"}),b(!0)):P(A)},[q,J,P,g]);const _=(0,e.useMemo)(()=>Y&&q?J.findIndex(g=>g.id===q.id):-1,[Y,q,J]),$=(0,e.useMemo)(()=>new Set(K.map(g=>g.id)),[K]),gg=resolveCssFontSize(l),{selectionA:Ag,selectionB:Ig,selectedRangeItems:Cg,copyConfirmed:eg,handleLineSelect:tg,handleCopyRange:ng,isLineSelected:ag}=useScrollbackSelection({visibleItems:J,showTimestamps:m}),{handleDownload:rg}=useScrollbackDownload({scrollbackSession:a,visibleItems:Y?K:J,isSearchActive:Y,useVirtualizedLogs:w,fontFamily:i,fontSize:l}),og=(0,e.useCallback)((g,{isActiveMatch:A})=>{const{isEndpoint:I,inRange:C}=ag(g.id),e=$.has(g.id);return React.createElement(n.Box,{sx:g=>({position:"relative",pl:"18px",bgcolor:C?I?g.palette.action.selected:g.palette.action.hover:void 0})},React.createElement(GI,{isEndpoint:I,inRange:C,onClick:()=>tg(g.id)}),React.createElement(fI,{fontFamily:i,isActiveMatch:A,isMatch:e,line:g,showTimestamp:m,timestampClassName:NI}))},[i,tg,ag,m,$]);(0,e.useEffect)(()=>{y||H()},[H,y]),(0,e.useEffect)(()=>{g?Z():b(!1)},[g,Z]),(0,e.useEffect)(()=>{if(!g)return;const A=M();if(!A)return;const handleWheel=g=>{if(g.ctrlKey)return;const I=getScrollbackWheelDeltaPixels(g,A);0!==I&&(g.preventDefault(),g.stopPropagation(),N(I))};return A.addEventListener("wheel",handleWheel,{passive:!1}),()=>{A.removeEventListener("wheel",handleWheel)}},[M,g,N]),(0,e.useEffect)(()=>{if(!g)return;const handleWindowKeyDown=g=>"PageUp"===g.key?(g.preventDefault(),g.stopPropagation(),void N(-(M()?.clientHeight??0)*RI)):"PageDown"===g.key?(g.preventDefault(),g.stopPropagation(),void N((M()?.clientHeight??0)*RI)):void("Escape"===g.key&&(g.preventDefault(),g.stopPropagation(),A(),window.setTimeout(()=>{x()},0)));return window.addEventListener("keydown",handleWindowKeyDown,!0),()=>{window.removeEventListener("keydown",handleWindowKeyDown,!0)}},[x,M,A,g,N]);const ig=(0,e.useCallback)((g,A)=>{u(A)},[]),lg=(0,e.useCallback)((g,A)=>{d(A)},[]),sg=(0,e.useCallback)((g,A)=>{h(A)},[]),cg=(0,e.useCallback)(()=>{G()},[G]),ug=(0,e.useCallback)((g,I)=>{"backdropClick"!==I&&(A(),window.setTimeout(()=>{x()},0))},[x,A]),mg=a?.getStats?.(),dg=Y?J.length:mg?.searchLineCount??J.length;return React.createElement(n.Dialog,{open:g,onClose:ug,hideBackdrop:!0,disableEnforceFocus:!0,disableAutoFocus:!0,maxWidth:!1,sx:g=>({pointerEvents:"auto",zIndex:g.zIndex.modal+10,"& .MuiDialog-container":{alignItems:"flex-start",justifyContent:"flex-start",pointerEvents:"none"},"& .MuiDialogTitle-root":{cursor:"grab",fontFamily:i,fontSize:gg,userSelect:"none"},"& .MuiDialogTitle-root:active":{cursor:"grabbing"},"& .MuiButton-root, & .MuiInputBase-root, & .MuiInputLabel-root":{fontFamily:i,fontSize:gg}}),slotProps:{backdrop:{invisible:!0},paper:{"data-testid":"scrollback-dialog-paper",ref:B,style:O,sx:g=>({backgroundImage:"none",backgroundColor:resolveDialogSurfaceBackground(g),border:1,borderColor:"divider",boxShadow:24,color:"text.primary",isolation:"isolate",position:"fixed",pointerEvents:"auto",left:`var(${dI.x})`,top:`var(${dI.y})`,width:`var(${dI.width})`,height:`var(${dI.height})`,m:0,maxWidth:"none",maxHeight:"none",display:"flex",flexDirection:"column",fontFamily:i,fontSize:gg,overflow:"hidden",zIndex:g.zIndex.modal+11})}}},React.createElement(n.DialogTitle,{onPointerDown:L,sx:g=>({backgroundColor:resolveHeaderBackground(g),borderBottom:1,borderColor:"divider",backgroundImage:"none",p:1,touchAction:"none"})},"Scrollback Buffer"),React.createElement(n.DialogContent,{ref:S,sx:g=>({backgroundColor:resolveModalBackground(g),backgroundImage:"none",color:"text.primary",display:"flex",flex:1,minHeight:0,overflow:"hidden",p:0,position:"relative"})},j?React.createElement(n.Box,{sx:{position:"absolute",top:8,left:"50%",transform:"translateX(-50%)",zIndex:10,backgroundColor:"rgba(0, 0, 0, 0.7)",borderRadius:"4px",padding:"4px 8px",display:"flex",alignItems:"center",gap:"8px",color:"primary.main",fontSize:"0.75rem",border:"1px solid",borderColor:"divider"}},React.createElement(n.CircularProgress,{size:12,thickness:5}),"Loading history..."):null,React.createElement(EI,{activeMatchIndex:_,border:!0,fontFamily:i,fontSize:l,itemKeyVersion:t,items:J,onSendCommand:o,onScrollLockChange:b,promptLine:r,ref:R,renderItem:og,showPromptInline:!0,showTimestamp:m,timestampClassName:NI})),React.createElement(n.DialogActions,null,React.createElement(n.TextField,{size:"small",label:"Search",value:F,onInput:Q,onKeyDown:X,error:U,slotProps:{htmlInput:{"aria-label":"Search scrollback"}},sx:{width:"20ch"}}),W?React.createElement(n.Box,{"aria-live":"polite",component:"div",role:"status",sx:g=>({color:U?g.palette.error.main:g.palette.text.secondary,fontSize:g.typography.pxToRem(12),lineHeight:1.2,whiteSpace:"nowrap"})},W):null,React.createElement(n.Box,{sx:{flex:1}}),React.createElement(n.FormControlLabel,{control:React.createElement(n.Switch,{checked:c,onChange:ig,size:"small"}),label:"Show Prompts",sx:{mr:1,userSelect:"none"}}),React.createElement(n.FormControlLabel,{control:React.createElement(n.Switch,{checked:m,onChange:lg,size:"small"}),label:"Show Timestamps",sx:{mr:1,userSelect:"none"}}),React.createElement(n.FormControlLabel,{control:React.createElement(n.Switch,{checked:p,onChange:sg,size:"small"}),label:"Show Gagged",sx:{mr:1,userSelect:"none"}}),null!=Cg?React.createElement(n.Button,{color:eg?"success":"primary",onClick:ng,size:"small",variant:"outlined"},eg?"Copied!":`Copy (${Cg.length})`):null,y?React.createElement(n.Button,{onClick:cg,size:"small",variant:"outlined"},"Bottom"):null,React.createElement(n.Button,{onClick:rg,size:"small",variant:"outlined"},"Download (#",dg,")"),React.createElement(n.Button,{onClick:ug,size:"small"},"Close")),pI.map(g=>React.createElement(n.Box,{component:"span","data-testid":`scrollback-resize-handle-${g.direction}`,key:g.direction,onPointerDown:z(g.direction),sx:{position:"absolute",touchAction:"none",zIndex:2,...g.sx}})))};ScrollbackModalDialog.displayName="ScrollbackModalDialog";var kI={fontFamily:UA.default.string,fontSize:UA.default.oneOfType([UA.default.number,UA.default.string]),filteredItems:UA.default.arrayOf(yI),itemKeyVersion:UA.default.oneOfType([UA.default.number,UA.default.string]),scrollbackSession:UA.default.object,items:UA.default.arrayOf(yI).isRequired,onClose:UA.default.func.isRequired,onSendCommand:UA.default.func,open:UA.default.bool.isRequired,promptLine:wI,showTimestamp:UA.default.bool};ScrollbackModalDialog.propTypes=kI;var ScrollbackModalComponent=g=>g.open?React.createElement(ScrollbackModalDialog,g):null;ScrollbackModalComponent.displayName="ScrollbackModal",ScrollbackModalComponent.propTypes=kI;var DI=(0,e.memo)(ScrollbackModalComponent);DI.displayName="ScrollbackModal",DI.propTypes=ScrollbackModalComponent.propTypes;var identity=g=>g,useHostDisplaySetting=(g=identity,A=Object.is)=>{const{hostDisplaySettingsModel:I}=useNexGui();if(!I||"function"!=typeof I.subscribe||"function"!=typeof I.getSnapshot)throw new Error("useHostDisplaySetting requires NexGuiContext hostDisplaySettingsModel with subscribe(listener) and getSnapshot().");const C=(0,e.useMemo)(()=>{let C=g(I.getSnapshot());const getSnapshot=()=>{const e=g(I.getSnapshot());return A(C,e)||(C=e),C},subscribe=e=>I.subscribe(()=>{const t=g(I.getSnapshot());A(C,t)||(C=t,e())});return Object.freeze({getSnapshot,subscribe})},[I,A,g]);return(0,e.useSyncExternalStore)(C.subscribe,C.getSnapshot,C.getSnapshot)},useHostDisplaySettings=()=>useHostDisplaySetting(),jI=Object.freeze({}),PI=Object.freeze({}),createHostBridge=g=>Object.freeze({getSettings:()=>g?.getHostSettings?.()??jI,setSetting:(A,I)=>{g?.setHostSetting?.(A,I)},getLayoutSnapshot:()=>g?.getHostLayoutSnapshot?.()??PI,updateLayoutAttributes:A=>{g?.updateHostLayoutAttributes?.(A)},focusInput:()=>{g?.focusInput?.()}}),useHostBridge=()=>{const{adapter:g}=useNexGui();return(0,e.useMemo)(()=>createHostBridge(g),[g])},useHostFocus=()=>{const g=useHostBridge();return(0,e.useCallback)(()=>{g.focusInput()},[g])},BI=new WeakMap,assertStreamModel=g=>{if(!g||"function"!=typeof g.subscribe||"function"!=typeof g.getSnapshot)throw new Error("useStream requires NexGuiContext streamModel with subscribe(listener) and getSnapshot().")},getStreamModelBindings=g=>{assertStreamModel(g);let A=BI.get(g);if(!A){const subscribe=A=>g.subscribe(A),getSnapshot=()=>g.getSnapshot();A=Object.freeze({subscribe,getSnapshot}),BI.set(g,A)}return A},useStreamSnapshot=()=>{const{streamModel:g}=useNexGui(),{subscribe:A,getSnapshot:I}=getStreamModelBindings(g);return(0,e.useSyncExternalStore)(A,I,I)},selectUiSlice=g=>({activeTab:g.activeTab,modalOpen:g.modalOpen,setActiveTab:g.setActiveTab,openModal:g.openModal,closeModal:g.closeModal,settings:g.settings,setSetting:g.setSetting}),useUi=()=>{const{stores:g}=useNexGui();return g.ui(useShallow(selectUiSlice))},OI="scrollback",getPromptShownTailStartIndex=(g,A,I)=>{const C=Math.max(0,g.length-I);let e=0;for(let t=g.length-1;t>=C;t--)if(!g[t]?.isPrompt&&(e++,e===A))return t;return C},selectMainDisplayLiveTailItems=({allItems:g,filteredItems:A,showPrompts:I,nonPromptLimit:C=100,totalItemLimit:e=100})=>{const t=I?g:A;if(t.length<=C)return t;if(!I)return t.slice(-C);const n=getPromptShownTailStartIndex(t,C,e);return 0===n?t:t.slice(n)},useMainDisplayViewModel=()=>{const{adapter:g,scrollbackSession:A}=useNexGui(),I=useHostFocus(),{showPrompts:C,showTimestamps:t}=useHostDisplaySettings(),{buffer:n,filteredBuffer:a,promptLine:r,version:o}=useStreamSnapshot(),{modalOpen:i,openModal:l,closeModal:s}=useUi(),c=(0,e.useMemo)(()=>selectMainDisplayLiveTailItems({allItems:n.some(g=>g.gagged)?n.filter(g=>!g.gagged):n,filteredItems:a.some(g=>g.gagged)?a.filter(g=>!g.gagged):a,showPrompts:C}),[n,a,C]),u=C?null:r,m=c.at(-1),d=`${C?"all":"filtered"}:${c.length}:${m?.id??"none"}`,p=(0,e.useCallback)(()=>{i!==OI&&l(OI)},[i,l]),h=(0,e.useCallback)(()=>{s()},[s]),y=(0,e.useCallback)(A=>{g?.send?.(A)},[g]);return{allItems:n,closeScrollback:h,displayItems:c,displayItemKeyVersion:d,displayPromptLine:u,filteredItems:a,focusHostInput:I,openScrollback:p,promptLine:r,scrollbackItemKeyVersion:o,scrollbackOpen:i===OI,scrollbackSession:A,sendCommand:y,showTimestamps:t}},selectThemeSlice=g=>({tokens:g.tokens,updateTokens:g.updateTokens,resetTokens:g.resetTokens}),useTheme$9=()=>{const{stores:g}=useNexGui(),A=g.theme(useShallow(selectThemeSlice)),I=(0,e.useMemo)(()=>createMuiTheme(A.tokens),[A.tokens]);return(0,e.useMemo)(()=>({...A,theme:I}),[A,I])},LI="nexgui4-main-display-timestamp ng-timestamp timestamp mono no_out",zI=10,MainDisplayInner=()=>{const g=(0,e.useRef)(null),{tokens:A}=useTheme$9(),{allItems:I,closeScrollback:C,displayItems:t,displayItemKeyVersion:a,displayPromptLine:r,filteredItems:o,focusHostInput:i,openScrollback:l,promptLine:s,scrollbackItemKeyVersion:c,scrollbackOpen:u,scrollbackSession:m,sendCommand:d,showTimestamps:p}=useMainDisplayViewModel(),h=A.theme.displayFontFamily,y=A.theme.displayFontSize,b=(0,e.useCallback)(()=>{l()},[l]),x=(0,e.useCallback)(()=>{C(),g.current?.scrollToBottom(),i()},[C,i]);return React.createElement(n.Box,{className:"main-display main-display__content",sx:{display:"flex",flex:1,minHeight:0,minWidth:0,overflow:"hidden",position:"relative",width:"100%"}},React.createElement(n.Box,{"data-testid":"main-display-buffer",sx:{display:"flex",flex:1,minHeight:0,position:"relative"}},React.createElement(EI,{ref:g,border:!1,fontFamily:h,fontSize:y,itemKeyVersion:a,items:t,onRequestScrollback:b,onSendCommand:d,overscan:zI,promptLine:r,showPromptInline:!1,showTimestamp:p,timestampClassName:LI})),React.createElement(DI,{fontFamily:h,fontSize:y,filteredItems:o,items:I,itemKeyVersion:c,scrollbackSession:m,onClose:x,onSendCommand:d,open:u,promptLine:s,showTimestamp:p}))};MainDisplayInner.displayName="MainDisplayInner";var MainDisplay=()=>React.createElement(QA,{panelName:"Main Display"},React.createElement(MainDisplayInner,null));MainDisplay.displayName="MainDisplay";var selectPlayStatsSlice=g=>({instance:g.instance,session:g.session,month:g.month,updateInstance:g.updateInstance,updateSession:g.updateSession,updateMonth:g.updateMonth,resetInstance:g.resetInstance}),usePlayStats=()=>{const{stores:g}=useNexGui();return g.playStats(useShallow(selectPlayStatsSlice))},ZI="metrics",FI=Object.freeze(["instance","session","month"]),KI=Object.freeze({instance:"Instance",session:"Session",month:"Month"}),YI=1e3,VI=35e4,WI=45e4,getFlipTransform$7=g=>{switch(g){case 1:return"scaleX(-1) scaleY(-1)";case 2:return"scaleY(-1)";case 3:return"scaleX(-1)";default:return"none"}},formatNumber$1=g=>g.toLocaleString("en-US"),formatPercent=g=>`${g.toFixed(2)}%`,formatElapsed=(g,A=Date.now())=>{const I=Math.max(0,A-g),C=Math.floor(I/1e3),e=Math.floor(C/3600),t=Math.floor(C%3600/60);return[e>0?`${e}h`:null,e>0||t>0?`${t}m`:null,C%60+"s"].filter(Boolean).join(" ")},formatPerHour=(g,A,I=Date.now())=>{const C=Math.max(0,I-A)/36e5,e=parseInt(g/C,10);return e>0?formatNumber$1(e):"0"},resolveActiveTabId$2=g=>"string"==typeof g&&FI.includes(g)?g:"number"==typeof g?FI[g]??"month":"month",UI={kills:UA.default.number.isRequired,goldGained:UA.default.number.isRequired,xpPercent:UA.default.number.isRequired,xpValue:UA.default.number.isRequired,deaths:UA.default.number.isRequired,startedAt:UA.default.number.isRequired},HI=UA.default.shape(UI),QI=UA.default.shape({...UI,goldCap:UA.default.number.isRequired,year:UA.default.number,month:UA.default.number}),StatTable=({rows:g})=>React.createElement(n.Box,{component:"table",sx:{borderCollapse:"collapse","& td":{pb:.5,pr:2,verticalAlign:"top"},"& td:last-of-type":{fontVariantNumeric:"tabular-nums"}}},React.createElement("tbody",null,g.map((g,A)=>React.createElement("tr",{key:`${g.label}-${A}`},React.createElement("td",null,g.label),React.createElement("td",null,g.value)))));StatTable.displayName="MetricsPanelStatTable",StatTable.propTypes={rows:UA.default.arrayOf(UA.default.shape({label:UA.default.string.isRequired,value:UA.default.node.isRequired})).isRequired};var LinearProgressWithLabel=({label:g,value:A})=>React.createElement(n.Box,{sx:{mt:2}},React.createElement(n.Box,{sx:{fontSize:"9px",mb:.25}},g),React.createElement(n.Box,{sx:{alignItems:"center",display:"flex"}},React.createElement(n.Box,{sx:{mr:1,width:"100%"}},React.createElement(n.LinearProgress,{"aria-label":g,sx:{borderRadius:5,height:5},value:A,variant:"determinate"})),React.createElement(n.Box,{sx:{minWidth:35}},React.createElement(n.Typography,{color:"text.secondary",variant:"body2"},`${A}%`))));LinearProgressWithLabel.displayName="MetricsPanelLinearProgressWithLabel",LinearProgressWithLabel.propTypes={label:UA.default.string.isRequired,value:UA.default.number.isRequired};var MonthGoldCap=({goldCap:g})=>React.createElement(n.Box,{sx:{mt:1}},React.createElement(LinearProgressWithLabel,{label:"Soft Gold Cap",value:g<=VI?parseInt(g/VI*100,10):100}),React.createElement(LinearProgressWithLabel,{label:"Hard Gold Cap",value:g<=WI?parseInt(g/WI*100,10):100}));MonthGoldCap.displayName="MetricsPanelMonthGoldCap",MonthGoldCap.propTypes={goldCap:UA.default.number.isRequired};var ScopeContent=({now:g,onReset:A,scope:I,scopeKey:C})=>{const t=(0,e.useMemo)(()=>{const A=[{label:"Total Kills:",value:formatNumber$1(I.kills)},{label:"Total Gold:",value:formatNumber$1(I.goldGained)},{label:"Total XP:",value:formatPercent(I.xpPercent)},{label:"Total XP:",value:formatNumber$1(I.xpValue)},{label:"Total Deaths:",value:formatNumber$1(I.deaths)}];return"month"!==C?[...A,{label:"Time:",value:formatElapsed(I.startedAt,g)},{label:"XP/Hr:",value:formatPerHour(I.xpValue,I.startedAt,g)},{label:"Gold/Hr:",value:formatPerHour(I.goldGained,I.startedAt,g)}]:[...A,{label:"Gold Cap:",value:formatNumber$1(I.goldCap)}]},[g,I,C]);return React.createElement(n.Box,null,React.createElement(StatTable,{rows:t}),"instance"===C?React.createElement(n.Button,{onClick:A,sx:{mt:1},variant:"outlined"},"Reset"):null,"month"===C?React.createElement(MonthGoldCap,{goldCap:I.goldCap}):null)};ScopeContent.displayName="MetricsPanelScopeContent",ScopeContent.propTypes={now:UA.default.number.isRequired,onReset:UA.default.func.isRequired,scope:UA.default.oneOfType([HI,QI]).isRequired,scopeKey:UA.default.oneOf(["instance","session","month"]).isRequired};var MetricsPanelInner=()=>{const g=(0,a.useTheme)(),{activeTab:A,setActiveTab:I}=useUi(),{instance:C,session:t,month:r,resetInstance:o}=usePlayStats(),[i]=(0,e.useState)(()=>Math.floor(4*Math.random())),[l,s]=(0,e.useState)(()=>Date.now()),c=g?.nexGui?.backgroundImage??"",u=g?.nexGui?.backgroundOpacity??.5,m=g?.nexGui?.backgroundFilter??"none",d=resolveActiveTabId$2(A[ZI]),p={instance:C,session:t,month:r};(0,e.useEffect)(()=>{if("month"===d)return void s(Date.now());s(Date.now());const g=window.setInterval(()=>{s(Date.now())},YI);return()=>{window.clearInterval(g)}},[d]);const handleTabChange=(g,A)=>{const C=FI.indexOf(A);C>=0&&I(ZI,C)};return React.createElement(n.Box,{className:"metrics-panel",sx:{color:"text.primary",height:"100%",overflow:"hidden",position:"relative",width:"100%"}},c?React.createElement(n.Box,{"aria-hidden":"true",className:"metrics-panel__background",sx:{backgroundImage:`url(${c})`,backgroundPosition:"center",backgroundSize:"cover",filter:m,inset:0,opacity:u,position:"absolute",transform:getFlipTransform$7(i),zIndex:0}}):null,React.createElement(n.Box,{className:"metrics-panel__content",sx:{display:"flex",flexDirection:"column",fontFamily:g.typography.fontFamily,fontSize:g.nexusFontSize??g.typography.fontSize,height:"100%",position:"relative",width:"100%",zIndex:1}},React.createElement(n.Box,{sx:{borderBottom:1,borderColor:"divider"}},React.createElement(n.Tabs,{"aria-label":"stats tabs",onChange:handleTabChange,value:d},FI.map(g=>React.createElement(n.Tab,{key:g,label:KI[g],value:g})))),React.createElement(n.Box,{sx:{flex:1,overflowY:"auto",p:2}},React.createElement(n.Typography,{component:"div",sx:{color:"text.primary",fontFamily:"inherit",fontSize:"inherit",position:"relative"}},React.createElement(ScopeContent,{now:l,onReset:o,scope:p[d],scopeKey:d})))))};MetricsPanelInner.displayName="MetricsPanelInner";var MetricsPanel=()=>React.createElement(QA,{panelName:"Metrics"},React.createElement(MetricsPanelInner,null));MetricsPanel.displayName="MetricsPanel";var XI={id:UA.default.oneOfType([UA.default.number,UA.default.string]).isRequired,name:UA.default.string.isRequired},JI=UA.default.shape(XI),RoomNpcRowComponent=({indent:g=0,interactive:A=!1,isTarget:I=!1,npc:C,onContextMenu:e,onSelect:t})=>{const a=g>0?g:0,r=g>0?g:2;return React.createElement(n.Box,{className:["room-npc-row",A?"room-npc-row--interactive":"",I?"room-npc-row--target":""].filter(Boolean).join(" "),onClick:A?()=>t?.(C):void 0,onContextMenu:A?g=>{e?.(g,C)}:void 0,sx:{cursor:A?"pointer":"inherit",display:"table-row",outline:I?"1px solid red":""}},React.createElement(n.Box,{component:"div",sx:{color:"cyan",display:"table-cell",padding:`0px 5px 0px ${r}px`,whiteSpace:"nowrap"}},React.createElement(n.Typography,{component:"span",sx:{color:"inherit",fontVariantNumeric:"tabular-nums"},variant:"body2"},C.id)),React.createElement(n.Box,{component:"div",sx:{display:"table-cell",padding:`0px 5px 0px ${a}px`,width:"100%"}},React.createElement(n.Typography,{component:"span",sx:{color:"text.primary"},variant:"body2"},C.name)))};RoomNpcRowComponent.displayName="RoomNpcRow",RoomNpcRowComponent.propTypes={npc:JI.isRequired,indent:UA.default.number,interactive:UA.default.bool,isTarget:UA.default.bool,onContextMenu:UA.default.func,onSelect:UA.default.func};var qI=(0,e.memo)(RoomNpcRowComponent);qI.displayName="RoomNpcRow",qI.propTypes=RoomNpcRowComponent.propTypes;var selectTargetSlice=g=>({id:g.id,name:g.name,isPlayer:g.isPlayer,hpPercent:g.hpPercent,hpText:g.hpText,hpDelta:g.hpDelta,gender:g.gender,currentAffs:g.currentAffs,limbs:g.limbs}),useTarget=()=>{const{stores:g}=useNexGui();return g.target(useShallow(selectTargetSlice))},_I=[/a dervish/,/a sharp-toothed gremlin/,/a chaos orb/,/a bloodleech/,/a minion of chaos/,/a worm/,/a green slime/,/a soulmaster/,/a humbug/,/a chimera/,/a bubonis/,/a chaos storm/,/a chaos hound/,/a withered crone/,/a pathfinder/,/a doppleganger/,/an ethereal firelord/,/a simpering sycophant/,/a water weird/,/an eldritch abomination/,/Khaseem/],$I=[/a shipmate/,/a spectral shipmate/],gC=[/a swarthy swashbuckler/],AC=new Set(["guard","person-military-pointing"]),IC=new Set(["face-angry-horns","fiend","monster"]),CC=new Set(["humanoid","person"]),getFlipTransform$6=g=>{switch(g){case 1:return"scaleX(-1) scaleY(-1)";case 2:return"scaleY(-1)";case 3:return"scaleX(-1)";default:return"none"}},partition=(g,A)=>g.reduce((g,I,C,e)=>(A(I,C,e)?g[0].push(I):g[1].push(I),g),[[],[]]),toNpcEntry=g=>g&&"object"==typeof g&&"string"==typeof g.name?{...g,id:g.id??g.name}:"string"==typeof g?{attrib:"m",id:g,name:g}:null,matchesPatternList=(g,A)=>"string"==typeof g&&A.some(A=>A.test(g)),isVisibleNpc=g=>"m"===g?.attrib||"mx"===g?.attrib,isGuardNpc=g=>AC.has(g?.icon??"")&&"mx"===g?.attrib,isEntityNpc=g=>IC.has(g?.icon??"")&&matchesPatternList(g?.name,_I),isShipmateNpc=g=>matchesPatternList(g?.name,$I),isSwashbucklerNpc=g=>CC.has(g?.icon??"")&&matchesPatternList(g?.name,gC),isTargetNpc=(g,A)=>!A.isPlayer&&null!=g?.id&&null!=A.id&&String(g.id)===String(A.id),NpcGroupHeader=({count:g,expanded:A,onToggle:I,title:C})=>g<1?null:React.createElement(n.Box,{className:"npcs-panel__group-header",onClick:I,sx:{cursor:"pointer",display:"table-row"}},React.createElement(n.Box,{component:"div",sx:{color:"cyan",display:"table-cell",fontFamily:"monospace",padding:"0px 5px 0px 0px",pl:"1rem",whiteSpace:"nowrap"}},React.createElement(n.Typography,{component:"span",sx:{color:"inherit",fontFamily:"inherit"},variant:"body2"},A?"-":"+ ")),React.createElement(n.Box,{component:"div",sx:{display:"table-cell"}},React.createElement(n.Typography,{component:"span",sx:{color:"text.primary"},variant:"body2"},"(",g,") ",C)));NpcGroupHeader.displayName="NpcGroupHeader",NpcGroupHeader.propTypes={count:UA.default.number.isRequired,expanded:UA.default.bool.isRequired,onToggle:UA.default.func.isRequired,title:UA.default.string.isRequired};var NpcsPanelInner=()=>{const g=(0,a.useTheme)(),{adapter:A}=useNexGui(),{npcs:I}=useRoom(),C=useTarget(),[t]=(0,e.useState)(()=>Math.floor(4*Math.random())),[r,o]=(0,e.useState)(!1),[i,l]=(0,e.useState)(!1),[s,c]=(0,e.useState)(!1),[u,m]=(0,e.useState)(!1),d=g?.nexGui?.backgroundImage??"",p=g?.nexGui?.backgroundOpacity??.5,h=g?.nexGui?.backgroundFilter??"none",y=(0,e.useMemo)(()=>(I??[]).map(g=>toNpcEntry(g)).filter(Boolean),[I]),b=(0,e.useMemo)(()=>{let g=[],A=[],I=[],C=[],e=y;return[g,e]=partition(e,isGuardNpc),[A,e]=partition(e,isEntityNpc),[I,e]=partition(e,isShipmateNpc),[C,e]=partition(e,isSwashbucklerNpc),{guards:g,entities:A,shipmates:I,swashbucklers:C,npcs:e.filter(isVisibleNpc)}},[y]),handleNpcSelect=g=>{null!=g?.id&&A.send(`settarget ${g.id}`)},handleNpcContextMenu=g=>{g.preventDefault(),A.notice?.("RIGHT CLICK RIGHT CLICK RIGHT CLICK")};return React.createElement(n.Box,{className:"npcs-panel",sx:{height:"100%",overflow:"hidden",position:"relative",width:"100%"}},d?React.createElement(n.Box,{"aria-hidden":"true",className:"npcs-panel__background",sx:{backgroundImage:`url(${d})`,backgroundPosition:"center",backgroundSize:"cover",filter:h,inset:0,opacity:p,position:"absolute",transform:getFlipTransform$6(t),zIndex:0}}):null,React.createElement(n.Box,{className:"npcs-panel__content",sx:{background:`linear-gradient(180deg, ${(0,a.alpha)("#050505",.18)} 0%, ${(0,a.alpha)("#050505",.36)} 100%)`,color:"text.primary",height:"100%",overflow:"auto",position:"relative",width:"100%",zIndex:1}},React.createElement(n.Box,{className:"npcs-panel__rows",sx:{cursor:"pointer",display:"table",fontSize:g.typography.fontSize,m:"10px",maxWidth:"100%",p:"1px",position:"relative",textAlign:"left"}},React.createElement(NpcGroupHeader,{count:b.guards.length,expanded:i,onToggle:()=>l(g=>!g),title:"City Guards"}),i?b.guards.map(g=>React.createElement(qI,{key:`guard-${g.id}`,indent:12,isTarget:isTargetNpc(g,C),npc:g})):null,React.createElement(NpcGroupHeader,{count:b.entities.length,expanded:r,onToggle:()=>o(g=>!g),title:"Entities"}),r?b.entities.map(g=>React.createElement(qI,{key:`entity-${g.id}`,indent:12,isTarget:isTargetNpc(g,C),npc:g})):null,React.createElement(NpcGroupHeader,{count:b.shipmates.length,expanded:s,onToggle:()=>c(g=>!g),title:"Shipmates"}),s?b.shipmates.map(g=>React.createElement(qI,{key:`shipmate-${g.id}`,indent:12,isTarget:isTargetNpc(g,C),npc:g})):null,React.createElement(NpcGroupHeader,{count:b.swashbucklers.length,expanded:u,onToggle:()=>m(g=>!g),title:"Swashbucklers"}),u?b.swashbucklers.map(g=>React.createElement(qI,{key:`swashbuckler-${g.id}`,indent:12,isTarget:isTargetNpc(g,C),npc:g})):null,b.npcs.map(g=>React.createElement(qI,{key:`npc-${g.id}`,interactive:!0,isTarget:isTargetNpc(g,C),npc:g,onContextMenu:handleNpcContextMenu,onSelect:handleNpcSelect})))))};NpcsPanelInner.displayName="NpcsPanelInner";var NpcsPanel=()=>React.createElement(QA,{panelName:"NPCs"},React.createElement(NpcsPanelInner,null));NpcsPanel.displayName="NpcsPanel";var eC=Object.freeze([]),tC=UA.default.shape({content:UA.default.node,id:UA.default.string.isRequired,label:UA.default.node.isRequired}),resolveActiveTabId$1=(g,A)=>g.some(g=>g.id===A)?A:g[0]?.id??!1,getFlipTransform$5=g=>{switch(g){case 1:return"scaleX(-1) scaleY(-1)";case 2:return"scaleY(-1)";case 3:return"scaleX(-1)";default:return"none"}},TabContainerComponent=({tabs:g=eC,activeTab:A=null,backgroundImage:I="",backgroundOpacity:C=.5,backgroundFilter:t="none",onTabChange:a})=>{const[r]=(0,e.useState)(()=>Math.floor(4*Math.random())),o=resolveActiveTabId$1(g,A),i=g.find(g=>g.id===o)??null;return 0===g.length?null:React.createElement(n.Box,{className:"nexgui4-tab-container",sx:{display:"flex",flex:1,flexDirection:"column",height:"100%",minHeight:0,minWidth:0,overflow:"hidden",position:"relative",width:"100%"}},I?React.createElement(n.Box,{"aria-hidden":"true",className:"nexgui4-tab-container__background",sx:{backgroundImage:`url(${I})`,backgroundPosition:"center",backgroundSize:"cover",filter:t,inset:0,opacity:C,position:"absolute",transform:getFlipTransform$5(r),zIndex:0}}):null,React.createElement(n.Box,{className:"nexgui4-tab-container__surface",sx:{display:"flex",flex:1,flexDirection:"column",minHeight:0,minWidth:0,position:"relative",zIndex:1}},React.createElement(n.Tabs,{allowScrollButtonsMobile:!0,"aria-label":"Panel tabs",className:"nexgui4-tab-container__tabs",onChange:(g,A)=>a(A),scrollButtons:"auto",sx:{borderBottom:1,borderColor:"divider",minHeight:40,"& .MuiTab-root":{minHeight:40,textTransform:"none"}},value:o,variant:"scrollable"},g.map(g=>React.createElement(n.Tab,{"aria-controls":`nexgui4-tab-panel-${g.id}`,id:`nexgui4-tab-${g.id}`,key:g.id,label:g.label,value:g.id}))),React.createElement(n.Box,{"aria-labelledby":i?`nexgui4-tab-${i.id}`:void 0,className:"nexgui4-tab-container__tabpanel",id:i?`nexgui4-tab-panel-${i.id}`:void 0,role:"tabpanel",sx:{display:"flex",flex:1,minHeight:0,minWidth:0,overflow:"auto",p:2,position:"relative",zIndex:1}},i?.content??null)))};TabContainerComponent.displayName="TabContainer",TabContainerComponent.propTypes={activeTab:UA.default.oneOfType([UA.default.string,UA.default.oneOf([null])]),backgroundFilter:UA.default.string,backgroundImage:UA.default.string,backgroundOpacity:UA.default.number,onTabChange:UA.default.func.isRequired,tabs:UA.default.arrayOf(tC)};var nC=(0,e.memo)(TabContainerComponent);nC.displayName="TabContainer",nC.propTypes=TabContainerComponent.propTypes;var aC="title",rC="popover",oC={cursor:"help",display:"inline-flex",maxWidth:"100%"},renderLabel=(g,A,I)=>{const C=React.createElement(n.Typography,{component:"span",variant:"body2"},g);return A?I===aC?React.createElement(n.Box,{component:"span",sx:oC,title:A},C):React.createElement(n.Tooltip,{describeChild:!0,placement:"top-start",title:A},React.createElement(n.Box,{component:"span",sx:oC},C)):C},ConfigToggleComponent=({label:g,value:A,onChange:I,tooltip:C="",tooltipMode:e=rC})=>React.createElement(n.FormControlLabel,{control:React.createElement(n.Switch,{checked:A,onChange:()=>I(!A)}),label:renderLabel(g,C,e),sx:{alignItems:"center",gap:1,justifyContent:"space-between",m:0,width:"100%","& .MuiFormControlLabel-label":{flex:1}}});ConfigToggleComponent.displayName="ConfigToggle",ConfigToggleComponent.propTypes={label:UA.default.string.isRequired,onChange:UA.default.func.isRequired,tooltip:UA.default.string,tooltipMode:UA.default.oneOf([rC,aC]),value:UA.default.bool.isRequired};var iC=(0,e.memo)(ConfigToggleComponent);iC.displayName="ConfigToggle",iC.propTypes=ConfigToggleComponent.propTypes;var NOOP=()=>{},resolveCommand=g=>"function"==typeof g?g:NOOP,createNativeDisplayCommands=g=>Object.freeze({mount:resolveCommand(g?.mountNativeDisplay),unmount:resolveCommand(g?.unmountNativeDisplay)}),useNativeDisplayCommands=()=>{const{platformTabs:g}=useNexGui();return(0,e.useMemo)(()=>createNativeDisplayCommands(g),[g])},lC="sfx/arcade sound",sC="nexGui4.netflixMode",cC="nexGui4.netflixMode",uC="https://images.ctfassets.net/y2ske730sjqp/821Wg4N9hJD8vs5FBcCGg/9eaf66123397cc61be14e40174123c40/Vector__3_.svg?w=460",mC="netflixModeEmoteColor",dC="netflixModeScenarios",pC="#afffff",hC=/^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/,resolveNetflixEmoteColor=g=>"string"==typeof g&&hC.test(g.trim())?g.trim():pC,resolveNetflixScenarioEnabled=(g,A)=>{const I=g?.[A];return"boolean"!=typeof I||I},renderNetflixNoticeHtml=g=>`<span style="height:15px;overflow:hidden"><img src="${uC}" style="height:16px"/> Mode ${g}.</span>`,resolveSelfName=g=>{const A=g?.getState?.()?.name;if(isNonEmptyString(A))return A.trim().toLowerCase();const I=globalThis.GMCP?.Char?.Status?.name;return isNonEmptyString(I)?I.trim().toLowerCase():null},yC=Object.freeze([{id:"nameMentioned",label:"Name Mentioned",predicate:(g,{selfName:A})=>!(!A||"string"!=typeof g?.text)&&g.text.toLowerCase().includes(A)},{id:"saysChannel",label:"Says",predicate:g=>"says"===g?.channel},{id:"tellsChannel",label:"Tells",predicate:g=>"tells"===g?.channel}]),fC=Object.freeze([{id:"emote",label:"Emote",regex:/^/,resolveFg:({emoteColor:g})=>g}]),bC=Object.freeze([{id:"affGot",label:"Aff Got",eventName:"nexsys4.aff.got"},{id:"defLost",label:"Def Lost",eventName:"nexsys4.def.lost"},{id:"damage",label:"Damage",eventName:"nexsys4.system.health.changed"},{id:"roomChanged",label:"Room Changed",eventName:"nexsys4.system.room.changed"}]),xC=Object.freeze([...yC.map(({id:g,label:A})=>({id:g,label:A,source:"commChannel"})),...bC.map(({id:g,label:A})=>({id:g,label:A,source:"event"})),...fC.map(({id:g,label:A})=>({id:g,label:A,source:"trigger"}))]),playNetflixSound=()=>{nexusclient.ui?.()?.sounds?.()?.play_sound?.(lC)},evaluateCommChannelPayload=(g,A,I)=>{for(const C of yC)if(resolveNetflixScenarioEnabled(I,C.id)&&C.predicate(g??{},A))return!0;return!1},attachCommChannelListener=(g,A)=>{const handler=I=>{const C=resolveSelfName(g),e=A();evaluateCommChannelPayload(I,{selfName:C},e)&&playNetflixSound()};return eventStream.registerEvent("Comm.Channel.Text",handler,{id:sC}),()=>{eventStream.removeListener("Comm.Channel.Text",sC)}},attachTriggerScenarios=(g,A)=>{for(const I of fC){if(!resolveNetflixScenarioEnabled(A,I.id))continue;const C=I.resolveFg?.({emoteColor:g})??I.fg;nexAction.triggers.add({id:`${cC}.${I.id}`,regex:I.regex,tags:[cC],fg:C,action:playNetflixSound})}return()=>{nexAction.triggers.remove([cC])}},areTriggerScenarioOverridesEqual=(g,A)=>{for(const I of fC)if(resolveNetflixScenarioEnabled(g,I.id)!==resolveNetflixScenarioEnabled(A,I.id))return!1;return!0},attachEventScenarios=g=>{const A=[];for(const I of bC){const C=`${sC}.eventScenario.${I.id}`,handler=A=>{resolveNetflixScenarioEnabled(g(),I.id)&&(I.predicate&&!I.predicate(A)||playNetflixSound())};eventStream.registerEvent(I.eventName,handler,{id:C}),A.push(()=>eventStream.removeListener(I.eventName,C))}return()=>{for(const g of A)g()}},readEmoteColorFromUiState=g=>resolveNetflixEmoteColor(g?.settings?.[mC]),readScenarioOverridesFromUiState=g=>g?.settings?.netflixModeScenarios??null,createNetflixModeController=({adapter:g,uiStore:A,characterStore:I})=>{if(!A||"function"!=typeof A.getState||"function"!=typeof A.subscribe)return()=>{};let C=null,e=null,t=null,n=!1,a=null,r=null;const getScenarioOverrides=()=>readScenarioOverridesFromUiState(A.getState()),enable=(A,o)=>{n||(C=attachCommChannelListener(I,getScenarioOverrides),e=attachTriggerScenarios(A,o),t=attachEventScenarios(getScenarioOverrides),a=A,r=o,n=!0,g?.notice?.(renderNetflixNoticeHtml("Enabled"),{html:!0}))},disable=()=>{n&&(C?.(),e?.(),t?.(),C=null,e=null,t=null,a=null,r=null,n=!1,g?.notice?.(renderNetflixNoticeHtml("Disabled"),{html:!0}))},reattachTriggers=(g,A)=>{e?.(),e=attachTriggerScenarios(g,A),a=g,r=A},sync=g=>{const A=readEmoteColorFromUiState(g),I=readScenarioOverridesFromUiState(g);if(g?.netflixMode){if(!n)return void enable(A,I);const g=A!==a,C=!areTriggerScenarioOverridesEqual(I,r);(g||C)&&reattachTriggers(A,I)}else disable()};sync(A.getState());const o=A.subscribe((g,A)=>{const I=Boolean(g?.netflixMode),C=Boolean(A?.netflixMode),e=readEmoteColorFromUiState(g),t=readEmoteColorFromUiState(A),n=readScenarioOverridesFromUiState(g),a=readScenarioOverridesFromUiState(A);I===C&&e===t&&n===a||sync(g)});return()=>{o(),n&&(C?.(),e?.(),t?.(),C=null,e=null,t=null,a=null,r=null,n=!1)}},useNetflixModeSettings=()=>{const{stores:g}=useNexGui(),A=g.ui(g=>g.netflixMode),I=g.ui(g=>g.setNetflixMode),C=g.ui(g=>g.settings?.[mC]),t=g.ui(g=>g.settings?.[dC]),n=g.ui(g=>g.setSetting),a=(0,e.useCallback)(g=>{n(mC,resolveNetflixEmoteColor(g))},[n]),r=(0,e.useCallback)((A,I)=>{n(dC,{...g.ui.getState().settings?.netflixModeScenarios??{},[A]:Boolean(I)})},[n,g]),o=(0,e.useMemo)(()=>xC.map(({id:g,label:A})=>({id:g,label:A,enabled:resolveNetflixScenarioEnabled(t,g),setEnabled:A=>r(g,A)})),[t,r]);return{enabled:Boolean(A),setEnabled:I,emoteColor:resolveNetflixEmoteColor(C),defaultEmoteColor:pC,setEmoteColor:a,logoUrl:uC,scenarios:o}},vC=[{key:"loginTracker",label:"Login Tracker",tooltip:"Show formatted login/logout notices by diffing the who list against Achaea's public character roster. Uses ally/enemy and target name formatting, and excludes your own character."},{key:"logoutDownload",label:"Auto-Download Log on Logout",tooltip:"Automatically download the scrollback buffer as an HTML log when you disconnect."},{key:"virtualizedLogs",label:"Virtualized HTML Logs",tooltip:"Download logs as an interactive virtualized HTML viewer for long sessions."}],NetflixModeSection=()=>{const{enabled:g,setEnabled:A,emoteColor:I,setEmoteColor:C,logoUrl:e,scenarios:t}=useNetflixModeSettings();return React.createElement(n.Box,{sx:{display:"flex",flexDirection:"column",gap:1}},React.createElement(n.Typography,{gutterBottom:!0,sx:{alignItems:"center",display:"flex",gap:.75},variant:"subtitle2"},React.createElement(n.Box,{alt:"Netflix",component:"img",src:e,sx:{display:"block",height:14,width:"auto"}}),"Mode"),React.createElement(iC,{label:"Enabled",onChange:A,tooltip:"Play an attention chime on enabled catches below. Resets to off each session.",tooltipMode:"title",value:g}),React.createElement(n.Box,{sx:{display:"flex",flexDirection:"column",gap:.25,pl:1}},React.createElement(n.Typography,{color:"text.secondary",sx:{mb:.25},variant:"caption"},"Catches"),t.map(g=>React.createElement(iC,{key:g.id,label:g.label,onChange:g.setEnabled,tooltipMode:"title",value:g.enabled}))),React.createElement(n.Box,{sx:{display:"flex",flexDirection:"column",gap:.5},title:"Color used by the emote attention trigger. Set this to your configured emote line color so the trigger matches emotes in your room."},React.createElement(n.Typography,{variant:"body2"},"Emote Color"),React.createElement(n.Box,{sx:{alignItems:"center",display:"flex",gap:1}},React.createElement(n.Box,{component:"input","aria-label":"Netflix Mode emote color",onChange:g=>C(g.target.value),sx:{background:"transparent",border:"1px solid rgba(255,255,255,0.2)",borderRadius:1,cursor:"pointer",height:28,padding:0,width:40},type:"color",value:I}),React.createElement(n.Typography,{sx:{fontFamily:"monospace"},variant:"caption"},I))))};NetflixModeSection.displayName="NetflixModeSection";var OptionsAdvancedInner=()=>{const{stores:g}=useNexGui(),A=useNativeDisplayCommands(),I=g.ui(g=>g.settings),C=g.ui(g=>g.setSetting),[t,a]=(0,e.useState)(!1),handleToggle=(g,A)=>{C(g,A)},handleNativeDisplay=g=>{handleToggle("nativeDisplay",g),g?A.mount():A.unmount()};return React.createElement(n.Box,{className:"options-advanced",sx:{display:"flex",flexDirection:"column",gap:1.5,p:1.5}},React.createElement(n.Typography,{gutterBottom:!0,variant:"subtitle2"},"Advanced Options"),React.createElement(n.Divider,{sx:{mb:1}}),React.createElement(n.Box,{sx:{columnGap:3,display:"grid",gridTemplateColumns:{xs:"minmax(0, 1fr)",md:"repeat(2, minmax(0, 1fr))"},rowGap:1.5}},React.createElement(n.Box,{sx:{display:"flex",flexDirection:"column",gap:.5,minWidth:0}},vC.map(({key:g,label:A,tooltip:C})=>React.createElement(iC,{key:g,label:A,onChange:A=>handleToggle(g,A),tooltip:C,tooltipMode:"title",value:Boolean(I[g])})),React.createElement(n.Divider,{sx:{my:1}}),React.createElement(n.Typography,{gutterBottom:!0,variant:"subtitle2"},"Experimental"),React.createElement(iC,{label:"Native Display Override",onChange:handleNativeDisplay,tooltip:"Mount the nexGui display in the Nexus output area instead of a panel tab. Applies immediately; the tab panel is hidden on the next reload.",tooltipMode:"title",value:Boolean(I.nativeDisplay)}),React.createElement(n.Divider,{sx:{my:1}}),React.createElement(n.Typography,{gutterBottom:!0,variant:"subtitle2"},"Debug"),React.createElement(iC,{label:"Event Bus Debug Mode",onChange:a,tooltip:"Log all internal events to the browser console. Session-only.",tooltipMode:"title",value:t})),React.createElement(n.Box,{sx:{display:"flex",flexDirection:"column",gap:.5,minWidth:0}},React.createElement(NetflixModeSection,null))))};OptionsAdvancedInner.displayName="OptionsAdvancedInner";var OptionsAdvanced=()=>React.createElement(QA,{panelName:"Options Advanced"},React.createElement(OptionsAdvancedInner,null));OptionsAdvanced.displayName="OptionsAdvanced";var resolveSliderValue$1=g=>Array.isArray(g)?g[0]??0:g,OptionsDisplayInner=()=>{const{tokens:g,updateTokens:A}=useTheme$9(),{settings:I,setSetting:C}=useUi(),t=(0,e.useMemo)(()=>{const A=g.theme.displayFontFamily;return Jg.some(({value:g})=>g===A)?Jg:[{label:A,value:A},...Jg]},[g.theme.displayFontFamily]),handleUiToggle=(g,A)=>{C(g,A)},handleDisplayFontFamily=g=>{A({theme:{displayFontFamily:g.target.value}})},handleDisplayFontSize=(g,I)=>{A({theme:{displayFontSize:resolveSliderValue$1(I)}})};return React.createElement(n.Box,{className:"options-display",sx:{display:"flex",flexDirection:"column",gap:1.5,p:1.5}},React.createElement(n.Typography,{gutterBottom:!0,variant:"subtitle2"},"Main Display / Scrollback Style"),React.createElement(n.Divider,null),React.createElement(n.FormControl,{fullWidth:!0,size:"small"},React.createElement(n.InputLabel,{id:"display-font-family-select-label"},"Font Family"),React.createElement(n.Select,{label:"Font Family",labelId:"display-font-family-select-label",onChange:handleDisplayFontFamily,value:g.theme.displayFontFamily},t.map(g=>React.createElement(n.MenuItem,{key:g.value,value:g.value},g.label)))),React.createElement(n.Box,{sx:{display:"flex",flexDirection:"column",gap:1}},React.createElement(n.Typography,{variant:"caption",color:"text.secondary"},"Display Font Size: ",g.theme.displayFontSize,"px"),React.createElement(n.Slider,{"aria-label":"Display font size",max:20,min:8,onChange:handleDisplayFontSize,step:1,value:g.theme.displayFontSize})),React.createElement(n.Divider,{sx:{mt:.5}}),React.createElement(n.Typography,{gutterBottom:!0,variant:"subtitle2"},"Formatting"),React.createElement(iC,{label:"Ally / Enemy Formatting",onChange:g=>handleUiToggle("allyEnemyFormatting",g),tooltip:"Apply ally and enemy markers to recognised player names in panels and game output.",tooltipMode:"title",value:!1!==I.allyEnemyFormatting}),React.createElement(iC,{label:"Target Formatting",onChange:g=>handleUiToggle("targetFormatting",g),tooltip:"Highlight your current target in game output.",tooltipMode:"title",value:!1!==I.targetFormatting}))};OptionsDisplayInner.displayName="OptionsDisplayInner";var OptionsDisplay=()=>React.createElement(QA,{panelName:"Options Display"},React.createElement(OptionsDisplayInner,null));OptionsDisplay.displayName="OptionsDisplay";var EC=Object.freeze([{key:"showCombatStream",label:"Combat Stream",tooltip:"Route combat messages to a separate stream panel."},{key:"showSystemStream",label:"System Stream",tooltip:"Route system messages to a separate stream panel."},{key:"damageNumbers",label:"Damage Numbers",tooltip:"Show damage number overlays on combat output."},{key:"msgReplace",label:"Message Replace",tooltip:"Apply structured replacement rows for skill actions (nexSkillMatch / nexSkillNpcMatch). Inline name highlighting is controlled separately by the Ally/Enemy Formatting toggle."}]),useGameOptionToggles=()=>{const{stores:g}=useNexGui(),A=g.ui(g=>g.settings),I=g.ui(g=>g.setSetting);return(0,e.useMemo)(()=>EC.map(g=>({key:g.key,label:g.label,tooltip:g.tooltip,value:Boolean(A[g.key]),onChange:A=>I(g.key,A)})),[I,A])},wC=Object.freeze([{key:"echo_input",label:"Echo Input",tooltip:"Mirror your typed commands into the game output stream.",setValue:(g,A)=>{g.setSetting("echo_input",A)}},{key:"echo_gmcp",label:"Display GMCP",tooltip:"Show inbound GMCP payloads in the output stream.",setValue:(g,A)=>{g.setSetting("echo_gmcp",A)}},{key:"single_prompt",label:"Single Prompt",tooltip:"Collapse the duplicate Nexus prompt line into a single prompt.",setValue:(g,A)=>{g.setSetting("show_prompts",!A)}},{key:"show_timestamps",label:"Display Timestamps",tooltip:"Show Nexus timestamps in the main output stream.",setValue:(g,A)=>{g.setSetting("show_timestamps",A)}},{key:"display_tabstrip",label:"Display Tabstrip",tooltip:"Show the FlexLayout tab strip for docked Nexus tabs.",setValue:(g,A)=>{g.updateLayoutAttributes({tabSetEnableTabStrip:A})}}]),useHostSettingsToggles=()=>{const{eventBus:g,hostSettingsModel:A,hostLayoutModel:I}=useNexGui(),C=useHostBridge(),t=(0,e.useSyncExternalStore)(A.subscribe,A.getSnapshot),n=(0,e.useSyncExternalStore)(I.subscribe,I.getSnapshot),a=(0,e.useCallback)(({key:A,setValue:I},e)=>{I(C,e),g.emit(w.HOST_SETTINGS_CHANGED,{key:A,value:e})},[g,C]);return(0,e.useMemo)(()=>wC.map(g=>({key:g.key,label:g.label,tooltip:g.tooltip,value:"display_tabstrip"===g.key?Boolean(n.display_tabstrip):Boolean(t[g.key]),onChange:A=>a(g,A)})),[t,n,a])},OptionsGameInner=()=>{const g=useHostSettingsToggles(),A=useGameOptionToggles();return React.createElement(n.Box,{className:"options-game",sx:{display:"flex",flexDirection:"column",gap:.5,p:1.5}},React.createElement(n.Typography,{gutterBottom:!0,variant:"subtitle2"},"Game Options"),React.createElement(n.Divider,{sx:{mb:1}}),React.createElement(n.Box,{sx:{columnGap:3,display:"grid",gridTemplateColumns:{xs:"minmax(0, 1fr)",md:"repeat(2, minmax(0, 1fr))"},rowGap:1.5}},React.createElement(n.Box,{sx:{display:"flex",flexDirection:"column",gap:.5,minWidth:0}},React.createElement(n.Typography,{gutterBottom:!0,variant:"subtitle2"},"Nexus Config"),g.map(({key:g,label:A,tooltip:I,value:C,onChange:e})=>React.createElement(iC,{key:g,label:A,onChange:e,tooltip:I,tooltipMode:"title",value:C}))),React.createElement(n.Box,{sx:{display:"flex",flexDirection:"column",gap:.5,minWidth:0}},React.createElement(n.Typography,{gutterBottom:!0,variant:"subtitle2"},"nexGui Config"),A.map(({key:g,label:A,tooltip:I,value:C,onChange:e})=>React.createElement(iC,{key:g,label:A,onChange:e,tooltip:I,tooltipMode:"title",value:C})))))};OptionsGameInner.displayName="OptionsGameInner";var OptionsGame=()=>React.createElement(QA,{panelName:"Options Game"},React.createElement(OptionsGameInner,null));OptionsGame.displayName="OptionsGame";var RC="__none__",SC="__custom__",resolveSliderValue=g=>Array.isArray(g)?g[0]??0:g,OptionsStyleInner=()=>{const{tokens:g,updateTokens:A}=useTheme$9(),I=canonicalizeBackgroundImageValue(g.theme.backgroundImage),C=TA.includes(I)?I:I?SC:RC,handleFontSize=(g,I)=>{A({theme:{fontSize:resolveSliderValue(I)}})},handleOpacity=(g,I)=>{A({theme:{backgroundOpacity:resolveSliderValue(I)}})},handleHue=(g,I)=>{A({theme:{hue:resolveSliderValue(I)}})},handleCustomBgImage=g=>{A({theme:{backgroundImage:g.target.value}})},handleBackgroundImageSelect=g=>{const{value:I}=g.target;I!==RC?I!==SC?A({theme:{backgroundImage:I}}):C!==SC&&A({theme:{backgroundImage:""}}):A({theme:{backgroundImage:""}})};return React.createElement(n.Box,{className:"options-style",sx:{display:"flex",flexDirection:"column",gap:1.5,p:1.5}},React.createElement(n.Typography,{gutterBottom:!0,variant:"subtitle2"},"Panel Display Style"),React.createElement(n.Divider,null),React.createElement(n.Box,{sx:{display:"flex",flexDirection:"column",gap:1}},React.createElement(n.Typography,{variant:"caption",color:"text.secondary"},"Panel Font Size: ",g.theme.fontSize,"px"),React.createElement(n.Slider,{"aria-label":"Panel font size",max:20,min:8,onChange:handleFontSize,step:1,value:g.theme.fontSize})),React.createElement(n.Box,{sx:{display:"flex",flexDirection:"column",gap:1}},React.createElement(n.Typography,{variant:"caption",color:"text.secondary"},"Background Opacity: ",Math.round(100*g.theme.backgroundOpacity),"%"),React.createElement(n.Slider,{"aria-label":"Background opacity",max:1,min:0,onChange:handleOpacity,step:.01,value:g.theme.backgroundOpacity})),React.createElement(n.Box,{sx:{display:"flex",flexDirection:"column",gap:1}},React.createElement(n.Typography,{variant:"caption",color:"text.secondary"},"Hue Shift: ",g.theme.hue,"°"),React.createElement(n.Slider,{"aria-label":"Hue shift",max:360,min:0,onChange:handleHue,step:1,value:g.theme.hue})),React.createElement(n.FormControl,{fullWidth:!0,size:"small"},React.createElement(n.InputLabel,{id:"background-image-select-label"},"Background Image"),React.createElement(n.Select,{label:"Background Image",labelId:"background-image-select-label",onChange:handleBackgroundImageSelect,value:C},React.createElement(n.MenuItem,{value:RC},"None"),TA.map(g=>React.createElement(n.MenuItem,{key:g,value:g},g)),React.createElement(n.MenuItem,{value:SC},"Custom URL"))),React.createElement(n.TextField,{InputLabelProps:{shrink:!0},fullWidth:!0,label:"Background Image URL",onChange:handleCustomBgImage,placeholder:"https://...",size:"small",value:g.theme.backgroundImage,variant:"outlined"}))};OptionsStyleInner.displayName="OptionsStyleInner";var OptionsStyle=()=>React.createElement(QA,{panelName:"Options Panels"},React.createElement(OptionsStyleInner,null));OptionsStyle.displayName="OptionsStyle";var MC="options",TC=Object.freeze([{content:React.createElement(OptionsGame,null),id:"game",label:"Game"},{content:React.createElement(OptionsStyle,null),id:"style",label:"Panels"},{content:React.createElement(OptionsDisplay,null),id:"display",label:"Display"},{content:React.createElement(OptionsAdvanced,null),id:"advanced",label:"Advanced"}]),resolveActiveTabId=g=>"string"==typeof g?g:"number"==typeof g?TC[g]?.id??TC[0].id:TC[0].id,OptionsPanelInner=()=>{const g=useTheme$9(),{activeTab:A,setActiveTab:I}=useUi(),C=g.theme?.nexGui?.backgroundImage??"",e=g.theme?.nexGui?.backgroundOpacity??.5,t=g.theme?.nexGui?.backgroundFilter??"none",handleTabChange=g=>{const A=TC.findIndex(A=>A.id===g);A>=0&&I(MC,A)};return React.createElement(nC,{activeTab:resolveActiveTabId(A[MC]),backgroundFilter:t,backgroundImage:C,backgroundOpacity:e,onTabChange:handleTabChange,tabs:TC})};OptionsPanelInner.displayName="OptionsPanelInner";var OptionsPanel=()=>React.createElement(QA,{panelName:"Options"},React.createElement(OptionsPanelInner,null));OptionsPanel.displayName="OptionsPanel";var PartyMemberRowComponent=({name:g,color:A="text.primary",disabled:I=!1,onClick:C=null})=>{const e="function"==typeof C&&!I;return React.createElement(n.Box,{className:"party-member-row",onClick:e?()=>C(g):void 0,role:e?"button":void 0,sx:{alignItems:"center",cursor:e?"pointer":"default",display:"flex",minHeight:24,px:.5},tabIndex:e?0:void 0},React.createElement(n.Typography,{component:"span",sx:{color:A,fontWeight:500,lineHeight:1.35},variant:"body2"},g))};PartyMemberRowComponent.displayName="PartyMemberRow",PartyMemberRowComponent.propTypes={color:UA.default.string,disabled:UA.default.bool,name:UA.default.string.isRequired,onClick:UA.default.func};var NC=(0,e.memo)(PartyMemberRowComponent);NC.displayName="PartyMemberRow",NC.propTypes=PartyMemberRowComponent.propTypes;var selectPartySlice=g=>({members:g.members,leader:g.leader,selfName:g.selfName,settings:g.settings,updateParty:g.updateParty,addMember:g.addMember,removeMember:g.removeMember,setLeader:g.setLeader,setSelf:g.setSelf,setSetting:g.setSetting}),useParty=()=>{const{stores:g}=useNexGui();return g.party(useShallow(selectPartySlice))},noopSubscribe=()=>()=>{},fallbackFalse=()=>!1,fallbackNull=()=>null,fallbackName=()=>"",fallbackColor=()=>"grey",getModelVersion=g=>"function"==typeof g?.getVersion?g.getVersion():0,createDirectoryBinding=(g,A)=>{const subscribe=I=>{const C=g?.subscribePlayerDirectory?.(I)??noopSubscribe(),e=A?.subscribePlayerRelationships?.(I)??noopSubscribe();return()=>{C?.(),e?.()}},getSnapshot=()=>`${getModelVersion(g)}:${getModelVersion(A)}`;return Object.freeze({getSnapshot,subscribe})},usePlayerDirectory=()=>{const{playerDirectory:g,playerRelationships:A}=useNexGui(),I=(0,e.useMemo)(()=>createDirectoryBinding(g,A),[g,A]),C=(0,e.useSyncExternalStore)(I.subscribe,I.getSnapshot,I.getSnapshot);return(0,e.useMemo)(()=>Object.freeze({version:C,getPlayerColor:g?.getPlayerColor?.bind(g)??fallbackColor,getPlayerProfile:g?.getPlayerProfile?.bind(g)??fallbackNull,isAllyPlayer:A?.isAllyPlayer?.bind(A)??fallbackFalse,isCityEnemyPlayer:A?.isCityEnemyPlayer?.bind(A)??fallbackFalse,isEnemyPlayer:A?.isEnemyPlayer?.bind(A)??fallbackFalse,resolvePlayerNameFromFullname:g?.resolvePlayerNameFromFullname?.bind(g)??fallbackName}),[g,A,C])},usePartyViewModel=()=>{const g=usePlayerDirectory(),{members:A,leader:I,selfName:C,settings:t,setLeader:n,addMember:a,removeMember:r,setSetting:o}=useParty();return(0,e.useMemo)(()=>{g.version;const e=A.map(A=>({color:g.getPlayerColor(A),disabled:A===C,name:A})),i=A.map(A=>({color:g.getPlayerColor(A),name:A})),l=M.map(({key:g,label:A,tooltip:I})=>({key:g,label:A,tooltip:I,value:Boolean(t?.[g]),onChange:A=>o(g,A)}));return{addMember:a,leader:I&&A.includes(I)?I:"",leaderColor:I?g.getPlayerColor(I):null,leaderOptions:i,memberRows:e,members:A,removeMember:r,selfName:C,setLeader:n,toggles:l}},[a,I,A,g,r,C,n,o,t])},getFlipTransform$4=g=>{switch(g){case 1:return"scaleX(-1) scaleY(-1)";case 2:return"scaleY(-1)";case 3:return"scaleX(-1)";default:return"none"}},PartyPanelInner=()=>{const g=(0,a.useTheme)(),[A]=(0,e.useState)(()=>Math.floor(4*Math.random())),[I,C]=(0,e.useState)(""),{addMember:t,leader:r,leaderColor:o,leaderOptions:i,memberRows:l,members:s,removeMember:c,setLeader:u,toggles:m}=usePartyViewModel(),d=g?.nexGui?.backgroundImage??"",p=g?.nexGui?.backgroundOpacity??.5,h=g?.nexGui?.backgroundFilter??"none",y=(0,e.useCallback)(g=>{"Enter"===g.key&&I.trim()&&(t(I.trim()),C(""))},[t,I]);return React.createElement(n.Box,{className:"party-panel",sx:{height:"100%",overflow:"hidden",position:"relative",width:"100%"}},d?React.createElement(n.Box,{"aria-hidden":"true",className:"party-panel__background",sx:{backgroundImage:`url(${d})`,backgroundPosition:"center",backgroundSize:"cover",filter:h,inset:0,opacity:p,position:"absolute",transform:getFlipTransform$4(A),zIndex:0}}):null,React.createElement(n.Box,{className:"party-panel__content",sx:{background:`linear-gradient(180deg, ${(0,a.alpha)("#050505",.28)} 0%, ${(0,a.alpha)("#050505",.56)} 100%)`,display:"grid",gridTemplateColumns:"1fr 1fr",gap:2,height:"100%",overflowY:"auto",p:1.25,position:"relative",width:"100%",zIndex:1}},React.createElement(n.Box,{sx:{display:"flex",flexDirection:"column",gap:.5,minWidth:0}},React.createElement(n.TextField,{label:"Add member",onChange:g=>C(g.target.value),onKeyDown:y,size:"small",sx:{mb:.5,width:"15ch"},value:I}),React.createElement(n.Typography,{component:"span",sx:{color:"text.secondary",fontSize:11,fontWeight:700,letterSpacing:.4,pb:.25,textTransform:"uppercase"}},"Party Members"),s.length>0?l.map(g=>React.createElement(NC,{color:g.color,disabled:g.disabled,key:g.name,name:g.name,onClick:c})):React.createElement(n.Typography,{color:"text.secondary",variant:"body2"},"No party members")),React.createElement(n.Box,{sx:{display:"flex",flexDirection:"column",gap:1}},React.createElement(n.FormControl,{fullWidth:!0,size:"small"},React.createElement(n.InputLabel,{id:"nexgui4-party-leader-label"},"Party Leader"),React.createElement(n.Select,{disabled:0===s.length,label:"Party Leader",labelId:"nexgui4-party-leader-label",onChange:g=>u(g.target.value),sx:{color:o??"text.primary",minWidth:"18ch"},value:r},i.map(g=>React.createElement(n.MenuItem,{key:g.name,sx:{color:g.color},value:g.name},g.name)))),React.createElement(n.Divider,{sx:{my:.5}}),React.createElement(n.Typography,{component:"span",sx:{color:"text.secondary",fontSize:11,fontWeight:700,letterSpacing:.4,textTransform:"uppercase"}},"Party Behaviour"),m.map(({key:g,label:A,tooltip:I,value:C,onChange:e})=>React.createElement(iC,{key:g,label:A,onChange:e,tooltip:I,value:C})))))};PartyPanelInner.displayName="PartyPanelInner";var PartyPanel=()=>React.createElement(QA,{panelName:"Party"},React.createElement(PartyPanelInner,null));PartyPanel.displayName="PartyPanel";var GC={color:UA.default.string.isRequired,isAlly:UA.default.bool,isEnemy:UA.default.bool,isTarget:UA.default.bool,name:UA.default.string.isRequired},kC=UA.default.exact(GC),RoomPlayerRowComponent=({onHover:g,onLeave:A,onSelect:I,player:C})=>{const e=C.isEnemy?"#ff0000":"#ffffff",t=C.isAlly||C.isEnemy;return React.createElement(n.Box,{className:"room-player-row",onClick:()=>I(C.name),onMouseEnter:g,onMouseLeave:A,sx:{alignItems:"center",cursor:"pointer",display:"inline-flex",gap:.125,margin:"2px 4px",minHeight:g=>`${Number(g.typography.fontSize)+8}px`,outline:C.isTarget?"1px solid red":"",px:.25,py:.125,position:"relative",zIndex:1}},t?React.createElement(n.Typography,{component:"span",sx:{color:e,fontWeight:700},variant:"body2"},"("):null,React.createElement(n.Typography,{component:"span",sx:{color:C.color,fontWeight:700},variant:"body2"},C.name),t?React.createElement(n.Typography,{component:"span",sx:{color:e,fontWeight:700},variant:"body2"},")"):null)};RoomPlayerRowComponent.displayName="RoomPlayerRow",RoomPlayerRowComponent.propTypes={onHover:UA.default.func.isRequired,onLeave:UA.default.func.isRequired,onSelect:UA.default.func.isRequired,player:kC.isRequired};var DC=(0,e.memo)(RoomPlayerRowComponent);DC.displayName="RoomPlayerRow",DC.propTypes=RoomPlayerRowComponent.propTypes;var jC=new Set(["regex","user","time","loaded"]),formatCellValue=g=>Array.isArray(g)?g.join(", "):null!==g&&"object"==typeof g?JSON.stringify(g):String(g),PC=UA.default.objectOf(UA.default.oneOfType([UA.default.string,UA.default.number,UA.default.bool,UA.default.array,UA.default.object])),PlayerPopoverComponent=({anchorEl:g=null,onClose:A,player:I})=>{const C=(0,e.useMemo)(()=>Object.entries(I??{}).flatMap(([g,A])=>jC.has(g)||null==A?[]:React.createElement("tr",{key:g},React.createElement("td",{style:{color:"cyan",padding:"0 5px 0 2px"}},g),React.createElement("td",{style:{padding:0}},formatCellValue(A)))),[I]);return I?React.createElement(n.Popover,{anchorEl:g,anchorOrigin:{horizontal:"left",vertical:"top"},disableRestoreFocus:!0,onClose:A,open:Boolean(g),sx:{pointerEvents:"none"},slotProps:{paper:{sx:{backgroundColor:"#000000",border:"1px solid #ffffff"}}},transformOrigin:{horizontal:"right",vertical:"bottom"}},React.createElement("table",{style:{background:"black",borderSpacing:"0px",fontSize:"13px",margin:"10px",maxWidth:"100%",padding:"1px",textAlign:"left"}},React.createElement("thead",null,React.createElement("tr",null,React.createElement("th",{style:{width:"auto"}}),React.createElement("th",{style:{width:"auto"}}))),React.createElement("tbody",null,C))):null};PlayerPopoverComponent.displayName="PlayerPopover",PlayerPopoverComponent.propTypes={anchorEl:UA.default.instanceOf(Element),onClose:UA.default.func.isRequired,player:PC},PlayerPopoverComponent.defaultProps={player:null};var BC=(0,e.memo)(PlayerPopoverComponent);BC.displayName="PlayerPopover",BC.propTypes=PlayerPopoverComponent.propTypes;var selectCharacterSlice=g=>({name:g.name,class:g.class,level:g.level,gender:g.gender,balance:g.balance,equilibrium:g.equilibrium,currentAffs:g.currentAffs,limbs:g.limbs,updateCharacter:g.updateCharacter,setClass:g.setClass}),useCharacter=()=>{const{stores:g}=useNexGui();return g.character(useShallow(selectCharacterSlice))},resolvePlayerProfile=(g,A,I)=>mergePlayerPresentationProfile(I.getPlayerProfile(A),buildFallbackPlayerProfile(g,A)),useRoomPlayersViewModel=()=>{const{adapter:g}=useNexGui(),{players:A}=useRoom(),{name:I}=useCharacter(),{isPlayer:C,name:t}=useTarget(),{members:n}=useParty(),a=usePlayerDirectory(),r=(0,e.useMemo)(()=>{a.version;const g=new Set((n??[]).filter(g=>"string"==typeof g&&g.length>0&&g!==I)),e=a.getPlayerProfile(I)?.city??"";return[...A??[]].map(A=>{const I=resolveRoomPlayerName(A,a);if(!I)return null;const n=resolvePlayerProfile(A,I,a),r=!0===n?.loaded,o=a.isEnemyPlayer(I),i=a.isAllyPlayer(I)||g.has(I);let l=5;return r&&(l=o?0:i?1:n.city===e?2:"garden"===n.city?3:4),{color:resolvePlayerPresentationColor({name:I,profile:n,playerDirectory:a}),isAlly:i,isEnemy:o,isTarget:C&&I===t,loaded:r,name:I,profile:n,priority:l}}).filter(Boolean).sort((g,A)=>g.priority!==A.priority?g.priority-A.priority:g.name.localeCompare(A.name))},[n,a,A,I,C,t]),o=(0,e.useCallback)(A=>{g?.send?.(`settarget ${A}`)},[g]);return(0,e.useMemo)(()=>({players:r,selectPlayer:o}),[r,o])},getFlipTransform$3=g=>{switch(g){case 1:return"scaleX(-1) scaleY(-1)";case 2:return"scaleY(-1)";case 3:return"scaleX(-1)";default:return"none"}},PlayersPanelInner=()=>{const g=(0,a.useTheme)(),{players:A,selectPlayer:I}=useRoomPlayersViewModel(),[C]=(0,e.useState)(()=>Math.floor(4*Math.random())),[t,r]=(0,e.useState)(null),[o,i]=(0,e.useState)(""),l=g?.nexGui?.backgroundImage??"",s=g?.nexGui?.backgroundOpacity??.5,c=g?.nexGui?.backgroundFilter??"none",u=o?A.find(g=>g.name===o)?.profile??null:null;(0,e.useEffect)(()=>{t&&(o&&A.some(g=>g.name===o)||(r(null),i("")))},[t,o,A]);const handleClosePopover=()=>{r(null),i("")};return 0===A.length?React.createElement(n.Box,{className:"players-panel players-panel--empty",sx:{alignItems:"center",color:"text.secondary",display:"flex",flex:1,justifyContent:"center",p:2}},React.createElement(n.Typography,{variant:"body2"},"No players in room")):React.createElement(n.Box,{className:"players-panel",sx:{height:"100%",overflow:"hidden",position:"relative",width:"100%"}},l?React.createElement(n.Box,{"aria-hidden":"true",className:"players-panel__background",sx:{backgroundImage:`url(${l})`,backgroundPosition:"center",backgroundSize:"cover",filter:c,inset:0,opacity:s,position:"absolute",transform:getFlipTransform$3(C),zIndex:0}}):null,React.createElement(n.Box,{className:"players-panel__content",sx:{alignContent:"flex-start",background:`linear-gradient(180deg, ${(0,a.alpha)("#050505",.28)} 0%, ${(0,a.alpha)("#050505",.56)} 100%)`,color:"text.primary",display:"flex",flexDirection:"row",flexWrap:"wrap",height:"100%",overflowY:"auto",position:"relative",width:"100%",zIndex:1}},A.map((g,A)=>React.createElement(DC,{key:`${g.name}-${A}`,onHover:A=>{g.loaded?(r(A.currentTarget),i(g.name)):handleClosePopover()},onLeave:handleClosePopover,onSelect:I,player:g}))),React.createElement(BC,{anchorEl:t,onClose:handleClosePopover,player:u?.loaded?u:null}))};PlayersPanelInner.displayName="PlayersPanelInner";var PlayersPanel=()=>React.createElement(QA,{panelName:"Players"},React.createElement(PlayersPanelInner,null));PlayersPanel.displayName="PlayersPanel";var OC="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAI0AAADUCAYAAACh36CaAAAACXBIWXMAAA7EAAAOxAGVKw4bAAA4HGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS41LWMwMjEgNzkuMTU0OTExLCAyMDEzLzEwLzI5LTExOjQ3OjE2ICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE1LTA0LTA2VDExOjM1OjI4LTA3OjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTUtMDQtMDZUMTM6NTY6MzktMDc6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8eG1wOk1ldGFkYXRhRGF0ZT4yMDE1LTA0LTA2VDEzOjU2OjM5LTA3OjAwPC94bXA6TWV0YWRhdGFEYXRlPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICAgICA8cGhvdG9zaG9wOkNvbG9yTW9kZT4zPC9waG90b3Nob3A6Q29sb3JNb2RlPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjkwNzk4Nzk4LTRlOWItMTM0YS04MzBjLTQ2MTJlNWVhZDJjYTwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+eG1wLmRpZDo5MDc5ODc5OC00ZTliLTEzNGEtODMwYy00NjEyZTVlYWQyY2E8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+eG1wLmRpZDo5MDc5ODc5OC00ZTliLTEzNGEtODMwYy00NjEyZTVlYWQyY2E8L3htcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5jcmVhdGVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6OTA3OTg3OTgtNGU5Yi0xMzRhLTgzMGMtNDYxMmU1ZWFkMmNhPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE1LTA0LTA2VDExOjM1OjI4LTA3OjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3htcE1NOkhpc3Rvcnk+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjk2MDAwMC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+OTYwMDAwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjY1NTM1PC9leGlmOkNvbG9yU3BhY2U+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj4xNDE8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+MjEyPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz6NaNPuAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAVqSURBVHja7Nt/TNRlHMDxz07vjjt+DqVAHJJmYaxWkQj+GP7MCbg0c5WuNdOtVVstbKw/ZLMWTnNaKrOmqBCRLuEYiCHoJbaFyB1igIaIDg7CBGbyQzAiP/3RMK1kXP35fX+3977/fJ9/nr32PHf3fE9UVYi8iUkg0BBoCDQEGgINEWgINAQaAg2BhsjIaO6+QkOCJXpqpDwcGS4h44Ls05+MmvP6K8tWfZi6bvXWtLdemB37xNPhoeOtPlaLjA8OlOAg/3vGg8ZgaEwmk/j52iRyYqjMmv548ttrV+7ZszXVVZS1uf1k3s6rZQe3N+/b/n556purdj86JSLZbB4rFosZNEZfacIeCH5k96aU+q7aYtXOStXOMzrYfFJ7Lx3Xm5eOq3ZUql47rR0/FGlG+ru1gf6+k0BjbDRRR7I//lV/b9AbPx7TVrdDPe58bXU7/sr15737Yqnq7Yuan5neIyKRoDEomnfWrizSW/XaVl2gHpfjXix/y+PK15/OFqj21+obry4vAI0x0YSfcmQM6s8V6nHljwjmbjh67bR++/WOWyISBhqDofHztcfXObO1//KJUYEZrv/yCa0p2682H0s8aAyGxm7zWXi2dL8OXHF6icaprpJMtVrM80BjPDQz/guagStOrfpmr1rMY2NAYzA0Ex4c/1itM1tver09OdVdknnbajFPBo2B0AT4+yY8t3hOZWXxnsGbTd6h6W0s0wvlX2pcTPRhi3nsctAYBI3JZIrNSE/p62s6rlfPFXqFpqv+qHbUFeuS+XGH7TZrEmiMsz35rFu1tGao9ZTXaHoay7Thu1x9KCIsVUQmgMY4aKI+3/xep3ad8QpMq9uhHXXF2t90Qte+lJw1bWpkAmiMg8a++vlnK9wlmdrdUDrqH/eGt6daZ7bGx0Sv97P7sNIY7RhhzYuJn3i72ui1Cn152cJPOUYwKJqQcUHzz5/M0d7GslGB6W44pk3fH9KJYSGzQWMwNEsXzZSkBXES+9S0iCPZW3SwpXxUaIY8p7Qkd1u3iASDxmBopkwKl8kRE8RqMY85+NnGy9pVpS1VI3+uaXHlq153afaODQ0iIjabVfx8baAx4ktYK5PnbdHuam2vKbzv6xEel0PbawpVb1TrisSEDSIiY0wmGWMygcaIaETEt9yR0aSD57Wt2vGPb1IeV762VReo/nZBS3K3NYqIlTf3QCM+VktMwb5NQ9pfq531R7X5TJ62uh3aXJWnXfVHVQfqNG/vR3cOKUEDmuHrmQ/Wv9atv7hV+86pXnfduW9MWdMjIrP+bRBojI1GRCQwcUH8oZxdaX05u9K6vti5oXfx3BlfiUjA/QaABjQSFOifmLxoVtaKpLmZSQtnHgjwsy8Z6XnQ8A9LAg2BhkBDoCHQEIGGQEOgIdAQaIhAQ6Ah0BBoCDREoCHQEGgINAQaAg2TQKAh0BBoCDQEGiLQEGgINAQaAg0RaAg0BBoCDYGGCDQEGgINgYZAQ6AhAg2BhkBDoCHQEIGGQEOgIdAQaIhAQ6Ah0BBoCDREoCHQEGgINAQaAg0RaAg0BBoCDYGGCDQEGgINgYZAQwQaAg2BhkBDoCECDYGGQEOgIdAQaIhAQ6Ah0BBoCDREoCHQEGgINAQaItAQaAg0BBoCDRGTQKAh0BBoCDQEGiLQEGgINAQaAg0RaAg0BBoCDYGGCDQEGgINgYZAQ6BhEgg0BBoCDYGGQEMEGgINgYZAQ6AhAg2BhkBDoCHQEIGGQEOgIdAQaAg0RKAh0BBoCDQEGiLQEGgINAQaAg0RaAg0BBoCDYGGCDQEGgINgYZAQ6AhAg2BhkBDoCHQEIGGQEOgIdAQaIhAQ/+zPwYASIhrmburemkAAAAASUVORK5CYII=",LC="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGUAAADUCAYAAACF6u0fAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAJZaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49J++7vycgaWQ9J1c1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCc/Pg0KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyI+PHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj48cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0idXVpZDpmYWY1YmRkNS1iYTNkLTExZGEtYWQzMS1kMzNkNzUxODJmMWIiIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj48ZXhpZjpEYXRlVGltZU9yaWdpbmFsPjIwMTUtMDQtMDZUMTI6MDg6Mjk8L2V4aWY6RGF0ZVRpbWVPcmlnaW5hbD48L3JkZjpEZXNjcmlwdGlvbj48cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0idXVpZDpmYWY1YmRkNS1iYTNkLTExZGEtYWQzMS1kMzNkNzUxODJmMWIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+PHhtcDpDcmVhdGVEYXRlPjIwMTUtMDQtMDZUMTI6MDg6Mjk8L3htcDpDcmVhdGVEYXRlPjwvcmRmOkRlc2NyaXB0aW9uPjwvcmRmOlJERj48L3g6eG1wbWV0YT4NCjw/eHBhY2tldCBlbmQ9J3cnPz64O2+6AAAAIXRFWHRDcmVhdGlvbiBUaW1lADIwMTU6MDQ6MDYgMTI6MDg6MjlUEFW4AAAGbUlEQVR4Xu3ZWWxUVRzH8d+dO9NOhxYoXSi0QFsKFLW4kdi0ISiCiSQiorKFCGj6SGJiIiGxgMiihgYNCipYaExcIEQQk2oat4CAWkFQKAqUqQW6AGUp0E47c48PVSJXKPAivxt+n8f5nzOZm29yz8wdyxgD4eJzvyC3nqIQUhRCikJIUQgpCiFFIaQohCyv/XisqqoaVxc+mgcA6X0zThQUFOzLyck56l7nZZ6J0tDQ0G/jxxWLk3BxWnLvUAIAxKJO567fwofSs4aunzNnzspgMNju3udFnoiyefPmiWfr96yd9eykFMRiQHtH1yDgB2wfdu/ai1ff/qTu+bnzpxcVFe1w7/ca+igVFRWzk9FYPmHyeDQfCqM90gGfr+sodIyBbVnIHNQfMAbTS0qji5avHp6Xl3fY/T5eQn3Q19bW5p6v31M+YeYkHDtwGJGOzstBAMBnWTAA6mrr0dZ6CR+uW+Zf9vLcyivexIOoo6x5d1VpyYzHcabmCIwBLMtyLwEA2LaN5lMtQDSKF0uezKusrBzvXuMltFEikUh8Ai48EUxLwfkLF3GNHpfZto0T9Y0Ylp+D6p3fzXbPvYQ2Sk1NzfCsvsm90NYO+1+3rO7EHAeIi0MPOzK2tbU1yT33ihu72lvgzJkzyYOzM+FE/v6mdQMsywI6OjGof2rvxsbGDPfcKyijGGOscDicHYtGY77r3Lb+w3EQH4w/V19fP6CtrS3BPfYCyigr31he9tXWDW/WHm+K4QZvXZcZg5ZzF6Lr3in7dNXKFa+5x15wk1f8/3Dga3nm6XFJj40pimtsOuUed6upuQVji+9JmTHx4Z6B+NBx99wLKKNMnjKtfEf1/lgwGAfbZ7vH3bIsILFHAr7ZsduZMnXaevfcCyijWJaF+GCc09YegXWTh4rP50N7ewcSQyEHwM1tJkEZ5WDNgbvT+/QO9EwMIWDbiMUc95KrMsbA57PgOAb9M1L9v+7be697jRdQRomLD7beVzAU4WONOFJ3HElJIVzvGZ0xQCDgx7nWNicUCmJIbhYSk3qec6/zAsooxcXF27/+uW5T2ZoNl2oOh2EcA9vu/qPatoVo1MHJlrP4YNMX2P5L/ZbCwkJPPjHu/kpvoRfmLXwq/64HVo8pHonWC5eu+dzrH5ZloT0SQf7gAb6m8/hs3sJlE91rvII2CgAMyb9zp+M4yMxIQzQac4+vEI3GkN6nFwJ+P9L6DfrBPfcS6iijRo36tmJjJQJZfbsOjW7EHAc9szOxtep7jH7woc/dcy+hjpKSknI6LiVv3o9fbsOAO/LgOM5VD/xoNIbswQPR8HsYP/3R8v6IESP2udd4Cf0/jwCwdMniRaNHpJUWjynEsYO1MMbAsiwYY2Acg4HDcvDnoTDe+mhbxetlK2a593uNJ6IAwNKlS14amdvjlUcmPwqcbEG0oxN+vw30TcWB7dUo31K9dnnZihL3Pi/yTBR0/V8/s+Hw7vnF9w/LtX0+GGNQvb+2+Wxnj/cWLFhY6l7vVZ6KAgDl5eXPnT99YpRxTHwgLtAGf2j/1GnTK1JTU2/uySUxz0W5HVB/+7pdKQohRSGkKIQUhZCiEFIUQopCSFEIKQohRSGkKIQUhZCiEFIUQopCSFEIKQohRSGkKIQUhZCiEFIUQopCSFEIKQohRSGkKIQUhZCiEFIUQopCSFEIKQohRSGkKIQUhZCiEFIUQopCSFEIKQohRSGkKIQUhZCiEFIUQopCSFEIKQohRSGkKIQUhZCiEFIUQopCSFEIKQohRSGkKIQUhZCiEFIUQopCSFEIKQohRSGkKIQUhZCiEFIUQopCSFEIKQohRSGkKIQUhZCiEFIUQopCSFEIKQohRSGkKIQUhZCiEFIUQopCSFEIKQohRSGkKIQUhZCiEFIUQopCSFEIKQohRSGkKIQUhZCiEFIUQopCSFEIKQohRSGkKIQUhZCiEFIUQopCSFEIKQohRSGkKIQUhZCiEFIUQopCSFEIKQohRSGkKIQUhZCiEFIUQopCSFEIKQohRSGkKIQUhZCiEFIUQopCSFEIKQohRSGkKIQUhZCiEFIUQopCSFEIKQohRSGkKIQUhZCiEFIUQopCSFEIKQohRSGkKIQUhZCiEFIUQopCSFEIKQohRSGkKIQUhZCiEFIUQopCSFEIKQohRSGkKIQUhZCiEFIUQopCSFEI/QVmyaz0HGFUpAAAAABJRU5ErkJggg==",zC="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAI0AAADUCAYAAACh36CaAAAACXBIWXMAAA7EAAAOxAGVKw4bAAA4HGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS41LWMwMjEgNzkuMTU0OTExLCAyMDEzLzEwLzI5LTExOjQ3OjE2ICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE1LTA0LTA2VDExOjI4OjM0LTA3OjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTUtMDQtMDZUMTM6NTY6MzctMDc6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8eG1wOk1ldGFkYXRhRGF0ZT4yMDE1LTA0LTA2VDEzOjU2OjM3LTA3OjAwPC94bXA6TWV0YWRhdGFEYXRlPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICAgICA8cGhvdG9zaG9wOkNvbG9yTW9kZT4zPC9waG90b3Nob3A6Q29sb3JNb2RlPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjM2YjMxYTk5LTUwNTYtZTY0OC04OTZkLWI5NTYxMzk2MjViMjwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+eG1wLmRpZDozNmIzMWE5OS01MDU2LWU2NDgtODk2ZC1iOTU2MTM5NjI1YjI8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+eG1wLmRpZDozNmIzMWE5OS01MDU2LWU2NDgtODk2ZC1iOTU2MTM5NjI1YjI8L3htcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5jcmVhdGVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6MzZiMzFhOTktNTA1Ni1lNjQ4LTg5NmQtYjk1NjEzOTYyNWIyPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE1LTA0LTA2VDExOjI4OjM0LTA3OjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3htcE1NOkhpc3Rvcnk+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjk2MDAwMC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+OTYwMDAwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjY1NTM1PC9leGlmOkNvbG9yU3BhY2U+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj4xNDE8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+MjEyPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg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",ZC="data:image/png;base64,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vmXxPHQEOiGK5+82m9WCprYgkqqu3uVyDWrX5YqiXMVzzz23Ue5v3LRu3XfQEwpnnA5OJFMoneDFdL8/mLFojCjKZZw4cWLO0sULW++cX7ruqae+hVBrB5LJFETx4oFIs8mA3r4BDEajeb0f87rZ/xfNzc3T1j215vOP3/mniltvvxkdDa2QpPSFp60/MhmNCPcPoqcnfOXvDrlGFOUStm7det+Pn3nUoHc70Xa2FRCEzEP1IxIpCb4iN5Lx4TF/fng0inIJgbbWGU6rGcGzrVf8SpB4PIGyUh+KPAWCLMuXn3iNKMolxIYi1TabBYeOfKEwxqDTnb+b2MjZRVEQRk42CgBjkFXFGI/Hr/bdIVmjKBptbW0V86dPuDktpbHn0yM6k9GAdFqGTqeDfuTb8RgwEoZBb9BDTUuefH6BNEXRsNvtw5KMuMNpQ3nphGgsnoSgE+XheDImKyq6+yJSe2dvymYxw2QwAIzBYjHHbTZbTLtXriiKhtfrDSuW0vWv/PvW9B1LF8pOuw1ed4EcHY6nFEVBSZFXL+p1amNbBwKdIZjtVljM1jF/WGI0inIJf/P00z87fKrtzNw5lW6mqqn3dh4cSiaT1orJpbBajaoegmA1GVHgdkJKSegKR8Z8Cng0inIZQ0NxFukbgN5g0JtNeuv8eTPMwWAIJ+vbBixWk2Iym1B/ugWrH/sRnlj71D9q14/FuP5DaVfS0NBQ9b21j7+Tjg/OuXv5IrQHe5CUJEQGoqieVoZAsAct3cP7X3rppSfnzp17TLt+LCjKFSiKoovH49a6urrZX3zxxcydO3feVVpaGjSZTGmj0Sht3Ljx+9o1+UBROESvKRyiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKByiKBz6X15rejmpXenZAAAAAElFTkSuQmCC",FC="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAI0AAADUCAYAAACh36CaAAAACXBIWXMAAA7EAAAOxAGVKw4bAAA4HGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS41LWMwMjEgNzkuMTU0OTExLCAyMDEzLzEwLzI5LTExOjQ3OjE2ICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE1LTA0LTA2VDExOjM0OjUwLTA3OjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTUtMDQtMDZUMTM6NTY6MzktMDc6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8eG1wOk1ldGFkYXRhRGF0ZT4yMDE1LTA0LTA2VDEzOjU2OjM5LTA3OjAwPC94bXA6TWV0YWRhdGFEYXRlPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICAgICA8cGhvdG9zaG9wOkNvbG9yTW9kZT4zPC9waG90b3Nob3A6Q29sb3JNb2RlPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjE0Y2RkMDRhLWU2OGMtYzM0My1iYjJmLWYxNDE5ZjAxMDRmYTwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+eG1wLmRpZDoxNGNkZDA0YS1lNjhjLWMzNDMtYmIyZi1mMTQxOWYwMTA0ZmE8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+eG1wLmRpZDoxNGNkZDA0YS1lNjhjLWMzNDMtYmIyZi1mMTQxOWYwMTA0ZmE8L3htcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5jcmVhdGVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6MTRjZGQwNGEtZTY4Yy1jMzQzLWJiMmYtZjE0MTlmMDEwNGZhPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE1LTA0LTA2VDExOjM0OjUwLTA3OjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3htcE1NOkhpc3Rvcnk+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjk2MDAwMC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+OTYwMDAwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjY1NTM1PC9leGlmOkNvbG9yU3BhY2U+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj4xNDE8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+MjEyPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg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",KC="data:image/png;base64,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",YC="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAI0AAADUCAYAAACh36CaAAAACXBIWXMAAA7EAAAOxAGVKw4bAAA4HGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS41LWMwMjEgNzkuMTU0OTExLCAyMDEzLzEwLzI5LTExOjQ3OjE2ICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE1LTA0LTA2VDExOjI5OjIyLTA3OjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTUtMDQtMDZUMTM6NTY6MzctMDc6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8eG1wOk1ldGFkYXRhRGF0ZT4yMDE1LTA0LTA2VDEzOjU2OjM3LTA3OjAwPC94bXA6TWV0YWRhdGFEYXRlPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICAgICA8cGhvdG9zaG9wOkNvbG9yTW9kZT4zPC9waG90b3Nob3A6Q29sb3JNb2RlPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjcxZWY1OGIzLTljYTItOTc0Zi05YmNjLTMxMTg4ZGY0NTk4ZDwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+eG1wLmRpZDo3MWVmNThiMy05Y2EyLTk3NGYtOWJjYy0zMTE4OGRmNDU5OGQ8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+eG1wLmRpZDo3MWVmNThiMy05Y2EyLTk3NGYtOWJjYy0zMTE4OGRmNDU5OGQ8L3htcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5jcmVhdGVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6NzFlZjU4YjMtOWNhMi05NzRmLTliY2MtMzExODhkZjQ1OThkPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE1LTA0LTA2VDExOjI5OjIyLTA3OjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3htcE1NOkhpc3Rvcnk+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjk2MDAwMC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+OTYwMDAwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjY1NTM1PC9leGlmOkNvbG9yU3BhY2U+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj4xNDE8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+MjEyPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg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",VC="data:image/png;base64,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",WC="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAI0AAADUCAYAAACh36CaAAAACXBIWXMAAA7EAAAOxAGVKw4bAAA4HGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS41LWMwMjEgNzkuMTU0OTExLCAyMDEzLzEwLzI5LTExOjQ3OjE2ICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE1LTA0LTA2VDExOjMwOjIwLTA3OjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTUtMDQtMDZUMTM6NTY6NDAtMDc6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8eG1wOk1ldGFkYXRhRGF0ZT4yMDE1LTA0LTA2VDEzOjU2OjQwLTA3OjAwPC94bXA6TWV0YWRhdGFEYXRlPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICAgICA8cGhvdG9zaG9wOkNvbG9yTW9kZT4zPC9waG90b3Nob3A6Q29sb3JNb2RlPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjk1NjQ4ZGJmLTljNTUtZTY0Zi1iNDAxLWNlOTdkZGIxYzQ5NjwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+eG1wLmRpZDo5NTY0OGRiZi05YzU1LWU2NGYtYjQwMS1jZTk3ZGRiMWM0OTY8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+eG1wLmRpZDo5NTY0OGRiZi05YzU1LWU2NGYtYjQwMS1jZTk3ZGRiMWM0OTY8L3htcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5jcmVhdGVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6OTU2NDhkYmYtOWM1NS1lNjRmLWI0MDEtY2U5N2RkYjFjNDk2PC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE1LTA0LTA2VDExOjMwOjIwLTA3OjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3htcE1NOkhpc3Rvcnk+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjk2MDAwMC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+OTYwMDAwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjY1NTM1PC9leGlmOkNvbG9yU3BhY2U+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj4xNDE8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+MjEyPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz5sHDDvAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAA5iSURBVHja7N15VNT1/sfxtyxuuKfmcjNLM9NrWt2k7JjeSq2sW2l60ptWLmkuSWWW/XDJtesuKtclLME1YUDQkU1UUGCYGRaRTUBg2AeQRVDceP3+YFFkWKt7Tnxfn3Oe/3nmeDiP853v5/v9fD4jAISxxsQ/AiMaRjSMaBjRMKJhjGgY0TCiYUTDiIYxomFEw4iGEQ0jGsaIhhENIxpGNIxoGNHwj8CIhhENIxpGNIxoGCMaRjSMaBjRMKJhjGgY0TCiYUTDiIYxomFEw4iGEQ0jGkY0jBENIxpGNIxoGNEwRjSMaBjRMKJhRMMY0TCiYUTDiIYRDWNEw4iGEQ0jGkY0jGgYIxpGNIxoGNEwomGMaBjRMKJhRMOIhjGiYUTDiIYRDSMaxoiGEQ0jGkY0jGgY0TBGNIxoGNEwomFE8z//jzRtdJ4xZfxEGAO7pulUYtC7SKpOJalaF0nVqgTZF2XrygUiImJhbiYtW1qIublZrR9GEMpAM2zRrElXYAzalqZTDSQaomnIWLB3wxIgR4NUnQqpOtXFVJ3L60RDNLUOczOzg8En9+JW8tlKNJVFGrQuryE7UDavmF+BxpxoiEakX9/eocbIk8i9fOphNEjVqQBjkN/mFfNHVP77Nq1bEo3C0fT94K1XgcyLSA91M4nGeMkDmeHuWGbz6VkR6SsiRKNwNKMXzpgIFOhh0LqYRJOkOY5r0aeB62EIUe/D0EH9bev6QIJo/mjmrV8658GbYJMZtC4waF2AHA2QGYj5n3yQICJDiEaZaFYdsV8JZAfViaayZM1xFMR6ATcjcXzfGlhaWiwhGuWh+cXz8GYg40KD0KTqVEgJcUFGmBtwOwqeR7ZARBYSjYLQmJubHw7y2G1qul3v11WqVgXcicaeDUsgIq8SjULQtGndylHv6YCbV880Ck0lnOwIdyBPiznT3rspIotFxIogmjmaVi0tnULU+1Ca5NdoNKk6FZJDnJEXrQbydbBbtQgisoAgmj+aA78HTfnNsTOQFYhErQpWbVp/SRDNH82u34vGoHUBCvRY9/3nEJEZBMErTb1lhp/AnZRzGPXSsJsiMoAgeE9Tb7eTz0J7+meYmZl5cfakDDSOvweNQesC5OuwwXYeRGQR0SgATetWLZ10p3/GzatNQ5MR5gakB+DNf1pDRAYSjQLQWFpaOGlO7W3ylaYkwRexAYfRsb1VIB/uKec1gp3P0W24l+bftK+mvBDs37IUIrKCaJSDZqPXkS0oSwto0pUGeSH4eOJYiMgIolEOGtszv23HvdTGX2nyY04jM/wEHuvVPYEvLJWF5iv1wU2NestddZXJCoTHgf9ARPYQjbLQfHb0vz82eD3Nw1Ptb7+YAhGZTDTKQjNp90+LAWNwo9BkR7ijJNEXw4c9c0NEHiUaZaEZt2HZPCCncWjuGM4jyGMPROQMV+4pD83LP3w5HcjVNO6r6ZoW63+YCxH5gWiUh2bQ/E8nAPk6GBr6FDjUDffS/DF21PBqU22iUQ6aPlM/GHMPORqk6V0bhKYwzguJgcfQtUvHNBFpRTTKQ9Ny9IjnDKVJfsiKcG/wVNtl31qIiDO3sCh0W+4TfXoFZ0W4Iy9K3eCnwMu/+qzqrTbRKBBNm9atPMK89+NGYv2Ly9ND3VCWHoC3XnsJIjKKaJR71Ijtsd2rAGP9D/jyotTICnfHU0/8LUdE2hKNctFM27xiQYOm3aVJfgg5tQ8tRNTcy61sNC98MumtevdzV94EH9v9I0RkLdEoG00P6+cH3Sq64oXsSx51oynQY/WS2RCR8USjbDTmXTp1uHrlwhEUxnnVCiZN7woYgzB90pslItKTaJSNRiwtLS6FqPfVOYPKjnBHcbwPnh8yQMvzaYhGRORKgOsu3Eqq/SCAG4m+iDxzAG1at9pBNETTvp1VG2PUWSdcv+Jd+/1MdiCc966GiPybaIjmseeHDLhXmuSHvCh1rceooVCPb+Z8VLVVhWiUjWbcgs8moDjeG7H+h5ER5mZy6+3tlHMYaT00qr4PIwhloJm/f8tSnFftRKSfIzLDT5i8n4k65wSrtm12Eg3RSMf2VgdVP6+F77FtJqfcBq0LkKuBw+bvISL/IhqiEevnBsW4OqxDgKs9rsf7mHg+owLytJj50TslItKDaIjm2Y/eex27f1pc65Um+5IHShJ88cKzTwc05AMJQgH7nrauXAjH7bbYufYrk5vmSpP8EOb9C1q2tFxNNEQjIuKt93RAoPtu7FhjUwNN5SLyPf/5FiLyCtEQzeCXXhgMlETg0M7l2LJiAZAeUPN+JicYE8ePjmnohxJE80az2W6NDQAD1iyZjb0bl+BOyrlqaK7H+yAx6Bg6d2y/kWiIpk2Xzh0yU0KcgewgLJo1CaccN6Co4jVCmr78ZHLk6+BQfpTIKKIhmg8/nfw2UKBH6VU/jHp5GP7702IgV4OCGE+k6V0rvpo0GP/GiEQRMSMaojl4fO8qIFcDZAfhw3f+iZHWzwLZgXD/9SeEeu8HcjXwOrwFImLXmA8miOaJxuqxXt2NGWFuyI85jaI4L1w6cwDjRg/HzI/Gw261DYyRJ4EcDaZ+MAYi8gXREM3rc6a9B1zTlv8IWPBvKE70ReEVb1x0s0fu5VMorngy/OTjvSAi04mGaD6xX/9N+f7timUQBq0LssLLN8ylh7qh6Io3os8fxDNPPQ4RmUo0RLPa77gd7hjO1XkK+a3ks5g59d0ahxYRjQLRdGxv9Wus/6E6V+ml6lRArgYLZ3wIEXmTaBSOZmD/x9Xle7dP1b3zIDsQc6e/DxEZSzQKRzPSemhkaZKfycVW1dEEYf5nEyAig4lG2WjajB01PAvpF+o8jyZN7wpkBWLW1Hdvi0gfolE2mg5vjPxHwb00/1p/vL0KTeZFTHx7VJGIdCEahaMZO2p4QX1XmszwE7h59QxeeXGIQUQsiUbhaEZaDy2o756mIMYTyRpn9O7Rzbexr84JovmhsRw0oK/BeMkDuZdrnz3dvFpxpEiLFr8QDdFI1y6dYuIvHkVRHZv9kR2Io/Y/QkRsiYZoREQuBJ/cU+dvPCFfh5XfzICITCAaohERcXZ1WFdjaefDz2gq3nAPIhqiERHZsX3VIiBfZxKNMfIkCmI9MeSZfqki0oJoiEZEZMG3X0wF8kJMTrtvJZ9FoPtuiIhLU7Y3EETzRPPuO2NeATIumHzAB2MwHO1sISILiYZoKsfQYYOfQmGcF4wmzthDgR6L506BiPyDaIim6v1T+3ZtjVHnnFCc4FPjxzKQHoC3X385uSn3M0TTvBeWh/sc3Yq7D+2ovBatRmbYCTzZp9eppp5bQhDNF80B+/Xf1Dhw+q7hPPxVOyEi64mGaB4eqxbPnQIU6GocLn1wx/JGrwsmGmWgmfTxxHFAVmDVDMqgVQEFOtjafAIRGUI0RPPwGDFutDXupJyretudHuoKGIPx8cRxDTq8iGiUh6b/Sy8MRkmiL7Irfhws+5IHihN8YP3cIIOItCQaonl4dBo6qH9ecbxPFZq8KDWyItzR97Ge+t9zijVBNOOjRgb2fzwhL0qNnMiTSNWpUBzvg6hzTujUoZ0P0RCNydGn96OxqToV8mNOI1Wnwu2Ucwhws4eI7CcaojE5Hu3WJSgh8FjVYiykB0B9cBNEZDPREI3pH0SwahsQ4XsAJYm+Fav1gnB875omrdYjGoWg6djeyj/SzxElCRVojEH4edN3EJHviIZoavnplbauEb4H7qPJ0WDNd7MhIjOJhmhMjh7dHzmaGPRb1YHTyA2BzezJEJG5REM0Jsffn34ioDDWs2pNDfJCsHDmhxCRpURDNKZGrzGvvnjjjuH+a4QHrjSbiIZoTI3XPv/4X0COpmqdMHKCscF2HkRkH9EQjamxaOvKL4Fr2pKqZRGZF8tUDmshInwiTDQmxyH1wY0oS7u/96k43gcx/ofQqUO7ZL6wJJoaR8I+0rlD2sNHqBXEeiIlxBk9H32kUES6Eg3RPDgmLLP5FMjRVPuR03up/jhfvtRTy68noqk2+vXtfaHwijcKYj3vHwlbMeXetHwBRGQF0RBNtTOE7VbbAEWhSAlxrr5/2xiEKe+/0ejDpommmaPp17f35WvRahTEelZbUJ4V7o6SBF+s/f5ziMjXREM0lWPOhmXzgKIwJD9wlUnVqZCud0VJgk/ZWecdsLAwVxMN0YiItHu6X5/kazGna1xlHpw9pYe6oXePrgYRaU00RGPntn89cE2LZM1xk2fS5F4+BWQFYujg/pxyE418vWjWZOB6WI2jRZKCj6MwzgtFcV5luBsNp53LISIn+PWkXDRtReSXOdPew23D+aqHd5VgkjXOKE3yg1a9r0zttPGeo90ymJubXxKRdkSjTDSdO3doF+t3fDtQerksL1qNpODqX0vGSx4oivPCmFdfhFXb1tfNzcxWN/bMYKJpXmjWrf+/uQDi7qbrXZHywJPf+yd4BuGI/UqISKSIWMkfNAjir4mm7+Cnn8gqjvepmhFlhLlVe2VQeYKnzazJTT7ximiaD5oBIrLWYfP3yIk8eSNN73o3I+wEYv0Pl2WEuVX9ilxGmBtQHIF3x74CEXmWaJSNZnbP7o9ccNxuC+8jW65Hnz901/Pw5uL4C0fvZoafQEqIc/nU+l4sfI5tg4gEyR88COIvhsbSwuLXwQP65h+xX5kTddbpzqpvZ6b4q3ZlFMR6Ij/mNFAUCmQFYuvKhbC0tCgWkb8TDa80M0TkwtKF07BqyaxC32Pb0vWeDlklV8/cKozzwq51X2PIwCchIioR6SZ/wiCIv+aNcCcRcenerTOmT3oTc6e/j39PGIu/9eyWISJbRGSg/ImDIP66U+62IrJIRA6ZmZmpW7RoseuPvuElmmaChhENIxrGiIYRDSMaRjSMaBjR8I/AiIb9yf3/ALzSXq7fY/CDAAAAAElFTkSuQmCC",UC="data:image/png;base64,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",HC="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAI0AAADUCAYAAACh36CaAAAACXBIWXMAAA7EAAAOxAGVKw4bAAA4HGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS41LWMwMjEgNzkuMTU0OTExLCAyMDEzLzEwLzI5LTExOjQ3OjE2ICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC94bXA6Q3JlYXRvclRvb2w+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE1LTA0LTA2VDExOjM1OjU2LTA3OjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTUtMDQtMDZUMTM6NTY6MzgtMDc6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8eG1wOk1ldGFkYXRhRGF0ZT4yMDE1LTA0LTA2VDEzOjU2OjM4LTA3OjAwPC94bXA6TWV0YWRhdGFEYXRlPgogICAgICAgICA8ZGM6Zm9ybWF0PmltYWdlL3BuZzwvZGM6Zm9ybWF0PgogICAgICAgICA8cGhvdG9zaG9wOkNvbG9yTW9kZT4zPC9waG90b3Nob3A6Q29sb3JNb2RlPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjFiYTIzODgyLWRmMjYtMGQ0OS04YzU4LTMzMzU4ZWMwZDE2YzwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+eG1wLmRpZDoxYmEyMzg4Mi1kZjI2LTBkNDktOGM1OC0zMzM1OGVjMGQxNmM8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+eG1wLmRpZDoxYmEyMzg4Mi1kZjI2LTBkNDktOGM1OC0zMzM1OGVjMGQxNmM8L3htcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5jcmVhdGVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6MWJhMjM4ODItZGYyNi0wZDQ5LThjNTgtMzMzNThlYzBkMTZjPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE1LTA0LTA2VDExOjM1OjU2LTA3OjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3htcE1NOkhpc3Rvcnk+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjk2MDAwMC8xMDAwMDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+OTYwMDAwLzEwMDAwPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjY1NTM1PC9leGlmOkNvbG9yU3BhY2U+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj4xNDE8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+MjEyPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg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",QC="data:image/png;base64,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",XC=Object.freeze([{key:"head",label:"H:"},{key:"torso",label:"T:"},{key:"leftarm",label:"LA:"},{key:"rightarm",label:"RA:"},{key:"leftleg",label:"LL:"},{key:"rightleg",label:"RL:"}]),normalizeValue=g=>{const A=Number(g);return Number.isFinite(A)?`${Math.round(A)}`:"0"},JC=UA.default.shape({head:UA.default.oneOfType([UA.default.number,UA.default.string]).isRequired,torso:UA.default.oneOfType([UA.default.number,UA.default.string]).isRequired,leftarm:UA.default.oneOfType([UA.default.number,UA.default.string]).isRequired,rightarm:UA.default.oneOfType([UA.default.number,UA.default.string]).isRequired,leftleg:UA.default.oneOfType([UA.default.number,UA.default.string]).isRequired,rightleg:UA.default.oneOfType([UA.default.number,UA.default.string]).isRequired}),LimbColumnComponent=({values:g})=>React.createElement(n.Box,{"aria-hidden":"true",className:"nexus-man__limb-column",sx:{color:"text.primary",display:"flex",flexDirection:"column",fontSize:13,lineHeight:1.5,minWidth:"8ch",width:"8ch"}},XC.map(({key:A,label:I})=>React.createElement(n.Box,{className:`nexus-man__limb-row nexus-man__limb-row--${A}`,key:A,sx:{display:"flex",justifyContent:"space-between",width:"8ch"}},React.createElement(n.Typography,{component:"span",sx:{color:"text.primary",fontFamily:"inherit",fontSize:"inherit",width:"3ch"}},I),React.createElement(n.Typography,{component:"span",sx:{color:"text.primary",fontFamily:"inherit",fontSize:"inherit",textAlign:"left",width:"5ch"}},normalizeValue(g[A])))));LimbColumnComponent.displayName="LimbColumn",LimbColumnComponent.propTypes={values:JC.isRequired};var qC=(0,e.memo)(LimbColumnComponent);qC.displayName="LimbColumn",qC.propTypes=LimbColumnComponent.propTypes;var _C=Object.freeze({male:Object.freeze({head:LC,torso:QC,leftarm:ZC,rightarm:VC,leftleg:KC,rightleg:UC}),female:Object.freeze({head:OC,torso:HC,leftarm:zC,rightarm:YC,leftleg:FC,rightleg:WC})}),$C=Object.freeze([{key:"leftleg",label:"left leg"},{key:"rightleg",label:"right leg"},{key:"torso",label:"torso"},{key:"head",label:"head"},{key:"leftarm",label:"left arm"},{key:"rightarm",label:"right arm"}]),ge=UA.default.shape({percent:UA.default.oneOfType([UA.default.number,UA.default.string]),value:UA.default.oneOfType([UA.default.number,UA.default.string]),damagePercent:UA.default.oneOfType([UA.default.number,UA.default.string])}),normalizeGender=g=>"string"==typeof g&&"female"===g.trim().toLowerCase()?"female":"male",normalizeAfflictions=g=>Array.isArray(g)?g.map(g=>"string"==typeof g?g.trim().toLowerCase():`${g??""}`.trim().toLowerCase()).filter(g=>g.length>0):[],toNumericValue=g=>{const A=Number(g);return Number.isFinite(A)?A:0},getLimbEntry=(g,A)=>{const I=[A];"leftarm"===A?I.push("leftArm"):"rightarm"===A?I.push("rightArm"):"leftleg"===A?I.push("leftLeg"):"rightleg"===A&&I.push("rightLeg");for(const C of I)if(g?.[C])return g[C];return{}},buildLimbValues=g=>({head:toNumericValue(getLimbEntry(g,"head").percent??getLimbEntry(g,"head").value),torso:toNumericValue(getLimbEntry(g,"torso").percent??getLimbEntry(g,"torso").value),leftarm:toNumericValue(getLimbEntry(g,"leftarm").percent??getLimbEntry(g,"leftarm").value),rightarm:toNumericValue(getLimbEntry(g,"rightarm").percent??getLimbEntry(g,"rightarm").value),leftleg:toNumericValue(getLimbEntry(g,"leftleg").percent??getLimbEntry(g,"leftleg").value),rightleg:toNumericValue(getLimbEntry(g,"rightleg").percent??getLimbEntry(g,"rightleg").value)}),getLimbState=(g,A)=>{if("torso"===A){if(g.includes("mildtrauma"))return"mild-trauma";if(g.includes("serioustrauma"))return"serious-trauma"}return g.includes(`broken${A}`)?"broken":g.includes(`damaged${A}`)?"damaged":g.includes(`mangled${A}`)?"mangled":"healthy"},getFilterReference=(g,A)=>"broken"===g?`url(#${A.yellow})`:"damaged"===g||"mild-trauma"===g?`url(#${A.orange})`:"mangled"===g||"serious-trauma"===g?`url(#${A.red})`:"",NexusManComponent=({currentAffs:g=[],gender:A="male",limbs:I={}})=>{const C=(0,e.useId)().replace(/[:]/g,""),t={yellow:`${C}-yellowShift`,orange:`${C}-orangeShift`,red:`${C}-redShift`},a=normalizeGender(A),r=_C[a],o=normalizeAfflictions(g),i=buildLimbValues(I);return React.createElement(n.Box,{"aria-label":"NexusMan body status display",className:"nexus-man","data-gender":a,role:"img",sx:{alignItems:"center",display:"flex",flexDirection:"row",gap:1,justifyContent:"center",width:"100%"}},React.createElement("svg",{"aria-hidden":"true",height:"0",width:"0"},React.createElement("defs",null,React.createElement("filter",{id:t.yellow},React.createElement("feColorMatrix",{type:"matrix",values:"1 0 0 0 0\r\n 0 1 0 0 0\r\n 0 0 0 0 0\r\n 0 0 0 1 0"})),React.createElement("filter",{id:t.orange},React.createElement("feColorMatrix",{type:"matrix",values:"1 1 0 0 0\r\n 0 0.45 0 0 0\r\n 0 0 0 0 0\r\n 0 0 0 1 0"})),React.createElement("filter",{id:t.red},React.createElement("feColorMatrix",{type:"matrix",values:"1 0 0 0 0\r\n 0 0 0 0 0\r\n 0 0 0 0 0\r\n 0 0 0 1 0"})))),React.createElement(n.Box,{className:"nexus-man__figure",sx:{flex:"1 1 auto",height:"100%",maxWidth:"202px",minHeight:"120px",overflow:"hidden",position:"relative",width:"100%"}},$C.map(({key:g,label:A})=>{const I=getLimbState(o,g),C=getFilterReference(I,t);return React.createElement(n.Box,{alt:"","aria-hidden":"true",className:`nexus-man__layer nexus-man__layer--${g}`,component:"img","data-damage-state":I,"data-limb":g,key:g,src:r[g],sx:{filter:C,height:"100%",left:0,objectFit:"contain",position:"absolute",top:0,width:"100%"},title:A})})),React.createElement(qC,{values:i}))};NexusManComponent.displayName="NexusMan",NexusManComponent.propTypes={currentAffs:UA.default.arrayOf(UA.default.string),gender:UA.default.oneOf(["male","female"]),limbs:UA.default.objectOf(ge)};var Ae=(0,e.memo)(NexusManComponent);Ae.displayName="NexusMan",Ae.propTypes=NexusManComponent.propTypes;var Ie=Object.freeze(["hp","mp","ep","wp","nl"]),clamp$1=(g,A,I)=>Math.min(I,Math.max(A,g)),normalizeNumber$2=g=>{const A=Number(g);return Number.isFinite(A)?A:0},formatNumber=g=>normalizeNumber$2(g).toLocaleString(),getBaseColor=(g,A)=>g?.palette?.[A]?.main??g?.nexGui?.tokens?.game?.[A]??GA.game[A],getPercentage=(g,A)=>{const I=normalizeNumber$2(g),C=normalizeNumber$2(A);return C<=0?0:clamp$1(I/C*100,0,100)},getHpColor=g=>g<=25?"#d9534f":g<=50?"#d9832e":g<=75?"#b7b33d":"#2fa35a",getGaugeColor=(g,A,I)=>"hp"===A?getHpColor(I):getBaseColor(g,A),StatBarComponent=({type:g,current:A,max:I,label:C=g.toUpperCase()})=>{const e=(0,a.useTheme)(),t=normalizeNumber$2(A),r=normalizeNumber$2(I),o=getPercentage(t,r),i=getGaugeColor(e,g,o),l=`${Math.round(o)}%`;return React.createElement(n.Box,{className:`stat-bar stat-bar--${g}`,sx:{minWidth:0,width:"100%"}},React.createElement(n.Box,{"aria-label":C,"aria-valuemax":100,"aria-valuemin":0,"aria-valuenow":Math.round(o),className:`stat-bar__progress stat-bar__progress--${g}`,role:"progressbar",sx:{backgroundColor:(0,a.alpha)(i,.14),border:`1px solid ${(0,a.alpha)(i,.48)}`,borderRadius:1,minHeight:22,overflow:"hidden",position:"relative",width:"100%"}},React.createElement(n.Box,{"aria-hidden":"true",sx:{backgroundColor:i,bottom:0,left:0,opacity:.68,position:"absolute",top:0,transition:"width 180ms ease",width:`${o}%`}}),React.createElement(n.Box,{sx:{alignItems:"center",color:"text.primary",display:"flex",gap:1,justifyContent:"space-between",minHeight:22,px:.75,position:"relative",zIndex:1}},React.createElement(n.Typography,{component:"span",sx:{color:"text.primary",fontSize:11,fontWeight:700,letterSpacing:.5,textTransform:"uppercase"}},C),React.createElement(n.Typography,{component:"span",sx:{color:"text.primary",fontSize:11,fontVariantNumeric:"tabular-nums",textShadow:"0 0 3px rgba(0, 0, 0, 0.85)"}},formatNumber(t)," / ",formatNumber(r)," (",l,")"))))};StatBarComponent.displayName="StatBar",StatBarComponent.propTypes={current:UA.default.number.isRequired,label:UA.default.string,max:UA.default.number.isRequired,type:UA.default.oneOf(Ie).isRequired};var Ce=(0,e.memo)(StatBarComponent);Ce.displayName="StatBar",Ce.propTypes=StatBarComponent.propTypes;var selectStatsSlice=g=>({hp:g.hp,mp:g.mp,ep:g.ep,wp:g.wp,nl:g.nl,gold:g.gold,bank:g.bank,xp:g.xp,xpToNext:g.xpToNext,updateStats:g.updateStats}),useStats=()=>{const{stores:g}=useNexGui();return g.stats(useShallow(selectStatsSlice))},ee=Object.freeze([{type:"hp",label:"HP"},{type:"mp",label:"MP"},{type:"ep",label:"EP"},{type:"wp",label:"WP"},{type:"nl",label:"NL"}]),getFlipTransform$2=g=>{switch(g){case 1:return"scaleX(-1) scaleY(-1)";case 2:return"scaleY(-1)";case 3:return"scaleX(-1)";default:return"none"}},Indicator=({className:g,label:A,ready:I})=>React.createElement(n.Box,{className:g,sx:{alignItems:"center",backgroundColor:I?"rgba(18, 42, 26, 0.82)":"rgba(24, 24, 24, 0.82)",border:"1px solid",borderColor:I?"rgba(102, 221, 144, 0.7)":"rgba(192, 176, 144, 0.22)",borderRadius:999,color:I?"#66dd90":"text.disabled",display:"inline-flex",gap:.5,px:1,py:.25}},React.createElement(n.Box,{"aria-hidden":"true",sx:{backgroundColor:I?"#66dd90":"rgba(192, 176, 144, 0.35)",borderRadius:"50%",boxShadow:I?"0 0 8px rgba(102, 221, 144, 0.5)":"none",flexShrink:0,height:6,width:6}}),React.createElement(n.Typography,{component:"span",sx:{color:"inherit",fontSize:11,fontWeight:700,letterSpacing:.5,textTransform:"uppercase"}},A)),StatsPanelInner=()=>{const g=(0,a.useTheme)(),[A]=(0,e.useState)(()=>Math.floor(4*Math.random())),{hp:I,mp:C,ep:t,wp:r,nl:o}=useStats(),{balance:i,currentAffs:l,equilibrium:s,gender:c,limbs:u}=useCharacter(),m=g?.nexGui?.backgroundImage??"",d=g?.nexGui?.backgroundOpacity??.5,p=g?.nexGui?.backgroundFilter??"none";return React.createElement(n.Box,{className:"stats-panel",sx:{height:"100%",overflow:"hidden",position:"relative",width:"100%"}},m?React.createElement(n.Box,{"aria-hidden":"true",className:"stats-panel__background",sx:{backgroundImage:`url(${m})`,backgroundPosition:"center",backgroundSize:"cover",filter:p,inset:0,opacity:d,position:"absolute",transform:getFlipTransform$2(A),zIndex:0}}):null,React.createElement(n.Box,{className:"stats-panel__content",sx:{background:`linear-gradient(180deg, ${(0,a.alpha)("#050505",.3)} 0%, ${(0,a.alpha)("#050505",.55)} 100%)`,display:"flex",flexDirection:"column",gap:1,height:"100%",p:1,position:"relative",width:"100%",zIndex:1}},React.createElement(n.Box,{className:"stats-panel__body",sx:{alignItems:"center",display:"flex",justifyContent:"center",minHeight:120}},React.createElement(Ae,{currentAffs:l,gender:c??"male",limbs:u})),React.createElement(n.Box,{className:"stats-panel__indicators",sx:{display:"flex",gap:1,justifyContent:"center"}},React.createElement(Indicator,{className:"stats-panel__balance stats-panel__balance--"+(i?"ready":"waiting"),label:"Balance",ready:i}),React.createElement(Indicator,{className:"stats-panel__equilibrium stats-panel__equilibrium--"+(s?"ready":"waiting"),label:"Equilibrium",ready:s})),React.createElement(n.Box,{className:"stats-panel__bars",sx:{display:"flex",flex:"1 1 auto",flexDirection:"column",gap:.75,justifyContent:"flex-end"}},ee.map(({type:g,label:A})=>{const e={hp:I,mp:C,ep:t,wp:r,nl:o}[g]??{current:0,max:0};return React.createElement(Ce,{current:e.current??0,key:g,label:A,max:e.max??0,type:g})}))))};Indicator.displayName="StatsPanelIndicator",Indicator.propTypes={className:UA.default.string.isRequired,label:UA.default.string.isRequired,ready:UA.default.bool.isRequired},StatsPanelInner.displayName="StatsPanelInner";var StatsPanel=()=>React.createElement(QA,{panelName:"Stats"},React.createElement(StatsPanelInner,null));StatsPanel.displayName="StatsPanel";var SystemStreamInner=()=>{const{adapter:g,stores:A}=useNexGui(),{items:I,version:C}=useTranscript(A.systemStream),t=(0,e.useCallback)(A=>g.send(A),[g]);return React.createElement(nI,{className:"nexgui4-system-stream",itemKeyVersion:C,items:I,onSendCommand:t})};SystemStreamInner.displayName="SystemStreamInner";var SystemStream=()=>React.createElement(QA,{panelName:"System Stream"},React.createElement(SystemStreamInner,null));SystemStream.displayName="SystemStream";var getFlipTransform$1=g=>{switch(g){case 1:return"scaleX(-1) scaleY(-1)";case 2:return"scaleY(-1)";case 3:return"scaleX(-1)";default:return"none"}},TargetPanelInner=()=>{const g=(0,a.useTheme)(),[A]=(0,e.useState)(()=>Math.floor(4*Math.random())),I=g?.nexGui?.backgroundImage??"",C=g?.nexGui?.backgroundOpacity??.5,t=g?.nexGui?.backgroundFilter??"none";return React.createElement(n.Box,{className:"target-panel",sx:{height:"100%",overflow:"hidden",position:"relative",width:"100%"}},I?React.createElement(n.Box,{"aria-hidden":"true",className:"target-panel__background",sx:{backgroundImage:`url(${I})`,backgroundPosition:"center",backgroundSize:"cover",filter:t,inset:0,opacity:C,position:"absolute",transform:getFlipTransform$1(A),zIndex:0}}):null,React.createElement(n.Box,{className:"target-panel__content",sx:{background:`linear-gradient(180deg, ${(0,a.alpha)("#050505",.18)} 0%, ${(0,a.alpha)("#050505",.36)} 100%)`,display:"flex",flexDirection:"column",height:"100%",minHeight:0,position:"relative",width:"100%",zIndex:1}},React.createElement(n.Box,{className:"target-panel__body",sx:{alignItems:"center",display:"flex",flex:1,justifyContent:"center",minHeight:0,p:1}},React.createElement(Ae,{currentAffs:[],gender:"male",limbs:{}}))))};TargetPanelInner.displayName="TargetPanelInner";var TargetPanel=()=>React.createElement(QA,{panelName:"Target"},React.createElement(TargetPanelInner,null));TargetPanel.displayName="TargetPanel";var clamp=(g,A,I)=>Math.min(I,Math.max(A,g)),normalizeNumber$1=g=>{const A=Number(g);return Number.isFinite(A)?A:0},normalizeDirection=(g,A)=>"countup"===g||!1===A?"countup":"countdown",getElapsedMs=(g,A)=>Math.max(0,normalizeNumber$1(A)-normalizeNumber$1(g)),getElapsedPercentage=(g,A)=>{const I=Math.max(0,Math.abs(normalizeNumber$1(A)));return I<=0?100:clamp(g/I*100,0,100)},formatTimerValue=g=>{const A=Math.max(0,normalizeNumber$1(g))/1e3;return A<10?`${A.toFixed(1)}s`:A<=60?`${A.toFixed(0)}s`:`${Math.floor(A/60)}m ${(A%60).toFixed(0)}s`},hslToHex=(g,A=100,I=50)=>{const C=I/100,k=A=>(A+g/30)%12,e=A/100*Math.min(C,1-C),f=g=>C-e*Math.max(-1,Math.min(k(g)-3,Math.min(9-k(g),1)));return"#"+[f(0),f(8),f(4)].map(g=>Math.round(255*g).toString(16).padStart(2,"0")).join("")},getGradientColor=g=>hslToHex(1.2*clamp(normalizeNumber$1(g),0,100),100,g<75?50:Math.abs(g-100)/2+25),getProgressValue=(g,A,I)=>{const C=getElapsedPercentage(g,A);return"countup"===I?C:clamp(100-C,0,100)},TimerBarComponent=({id:g,label:A,durationMs:I,startedAt:C,elapsedMs:e=0,now:t,tickIntervalMs:r,running:o=!0,direction:i="countdown",countDown:l})=>{const s=(0,a.useTheme)(),c=Math.max(0,Math.abs(normalizeNumber$1(I))),u=normalizeDirection(i,l),m=clamp(!1!==o&&null!=C?getElapsedMs(C,t):normalizeNumber$1(e),0,c),d=getProgressValue(m,c,u),p=formatTimerValue(c-m),h=A?.trim()||g,y=getGradientColor(d),b=Math.max(22,normalizeNumber$1(s?.typography?.fontSize)+10),x=`${h} (${p})`,v=Math.max(0,normalizeNumber$1(r)),E=0===d||100===d?"none":`transform ${v}ms linear, background-color ${v}ms linear`;return React.createElement(n.Box,{className:`timer-bar timer-bar--${u}`,"data-timer-id":g,sx:{border:"1.5px solid #aaa",borderRadius:"6px",fontSize:s.typography.fontSize,margin:"3px 0",overflow:"hidden",position:"relative",width:"100%"}},React.createElement(n.LinearProgress,{"aria-label":h,"aria-valuetext":x,className:`timer-bar__progress timer-bar__progress--${u}`,sx:{backgroundColor:"transparent",height:b,"& .MuiLinearProgress-bar":{backgroundColor:y,borderRadius:"4px",transition:E}},value:d,variant:"determinate"}),React.createElement(n.Box,{sx:{alignItems:"center",color:"#FFF5D6",display:"flex",inset:0,px:1.25,pointerEvents:"none",position:"absolute"}},React.createElement(n.Typography,{component:"span",sx:{color:"inherit",fontSize:"inherit",minWidth:0,overflow:"hidden",textOverflow:"ellipsis",textShadow:"-1px -1px 1px #000, 1px -1px 1px #000, -1px 1px 1px #000, 1px 1px 1px #000",whiteSpace:"nowrap"},variant:"body2"},x)))};TimerBarComponent.displayName="TimerBar",TimerBarComponent.propTypes={countDown:UA.default.bool,direction:UA.default.oneOf(["countup","countdown"]),durationMs:UA.default.number.isRequired,elapsedMs:UA.default.number,id:UA.default.string.isRequired,label:UA.default.string.isRequired,now:UA.default.number.isRequired,running:UA.default.bool,startedAt:UA.default.number,tickIntervalMs:UA.default.number.isRequired};var te=(0,e.memo)(TimerBarComponent);te.displayName="TimerBar",te.propTypes=TimerBarComponent.propTypes;var ne=[],normalizeNumber=g=>{const A=Number(g);return Number.isFinite(A)?A:0},isRunningTimer=g=>!1!==g?.running&&null!=g?.startedAt,getRemainingMs=(g,A)=>{const I=Math.max(0,Math.abs(normalizeNumber(g.durationMs))),C=Math.max(0,normalizeNumber(A)-normalizeNumber(g.startedAt));return Math.max(0,I-C)},getClockState=(g,A)=>{let I=1/0,C=!1;for(const e of g??[])isRunningTimer(e)&&(C=!0,I=Math.min(I,getRemainingMs(e,A)));return{isTicking:C,tickIntervalMs:C&&I<1e4?100:500}},useTimerClock=(g=ne)=>{const[A,I]=(0,e.useState)(()=>Date.now()),{isTicking:C,tickIntervalMs:t}=(0,e.useMemo)(()=>getClockState(g,A),[A,g]);return(0,e.useEffect)(()=>{if(!C)return;const tick=()=>I(Date.now());tick();const g=setInterval(tick,t);return()=>clearInterval(g)},[C,t]),(0,e.useMemo)(()=>({now:A,tickIntervalMs:t,isTicking:C}),[C,A,t])},selectTimerView=({id:g,durationMs:A,startedAt:I,label:C,direction:e,position:t,stayVisible:n,enabled:a,running:r,elapsedMs:o,remainingMs:i})=>({id:g,durationMs:A,startedAt:I,label:C,direction:e,position:t,stayVisible:n,enabled:a,running:r,elapsedMs:o,remainingMs:i}),selectTimersSlice=g=>({timerEntries:g.timers,addTimer:g.addTimer,removeTimer:g.removeTimer,clearAll:g.clearAll}),useTimers=()=>{const{stores:g}=useNexGui(),{timerEntries:A,addTimer:I,removeTimer:C,clearAll:t}=g.timers(useShallow(selectTimersSlice)),n=(0,e.useMemo)(()=>A.map(selectTimerView),[A]);return(0,e.useMemo)(()=>({timers:n,addTimer:I,removeTimer:C,clearAll:t}),[I,t,C,n])},getFlipTransform=g=>{switch(g){case 1:return"scaleX(-1) scaleY(-1)";case 2:return"scaleY(-1)";case 3:return"scaleX(-1)";default:return"none"}},normalizePosition=g=>"bottom"===g?"bottom":"top",partitionTimers=g=>g.reduce((g,A)=>(g[normalizePosition(A.position)].push(A),g),{top:[],bottom:[]}),TimersPanelInner=()=>{const g=(0,a.useTheme)(),{timers:A}=useTimers(),[I]=(0,e.useState)(()=>Math.floor(4*Math.random())),C=g?.nexGui?.backgroundImage??"",t=g?.nexGui?.backgroundOpacity??.5,r=g?.nexGui?.backgroundFilter??"none",{now:o,tickIntervalMs:i}=useTimerClock(A),{top:l,bottom:s}=(0,e.useMemo)(()=>partitionTimers(A),[A]);return React.createElement(n.Box,{className:"timers-panel",sx:{color:"text.primary",fontFamily:g.typography.fontFamily,fontSize:g.typography.fontSize,height:"100%",overflow:"hidden",position:"relative",width:"100%"}},C?React.createElement(n.Box,{"aria-hidden":"true",className:"timers-panel__background",sx:{backgroundImage:`url(${C})`,backgroundPosition:"center",backgroundSize:"cover",filter:r,inset:0,opacity:t,position:"absolute",transform:getFlipTransform(I),zIndex:0}}):null,React.createElement(n.Box,{className:"timers-panel__content","data-testid":"timers-panel",sx:{display:"flex",flexDirection:"column",height:"100%",justifyContent:"space-between",overflowY:"auto",p:1,position:"relative",width:"100%",zIndex:1}},React.createElement(n.Box,{className:"timers-panel__stack timers-panel__stack--top","data-testid":"timers-panel-top",sx:{display:"flex",flexDirection:"column"}},l.map(g=>React.createElement(te,{key:g.id,countDown:g.countDown,direction:g.direction,durationMs:g.durationMs,elapsedMs:g.elapsedMs,id:g.id,label:g.label,now:o,running:g.running,startedAt:g.startedAt,tickIntervalMs:i}))),React.createElement(n.Box,{className:"timers-panel__stack timers-panel__stack--bottom","data-testid":"timers-panel-bottom",sx:{display:"flex",flexDirection:"column"}},s.map(g=>React.createElement(te,{key:g.id,countDown:g.countDown,direction:g.direction,durationMs:g.durationMs,elapsedMs:g.elapsedMs,id:g.id,label:g.label,now:o,running:g.running,startedAt:g.startedAt,tickIntervalMs:i})))))};TimersPanelInner.displayName="TimersPanelInner";var TimersPanel=()=>React.createElement(QA,{panelName:"Timers"},React.createElement(TimersPanelInner,null));TimersPanel.displayName="TimersPanel";var ae=Object.freeze(["nexTimers","nexParty","nexPlayers","nexNpcs","nexItems","nexStats","nexSystem","nexCombat","nexDefences","nexFeed","nexTarget","nexOptions","nexMetrics"]),getTabComponents=()=>({nexTimers:TimersPanel,nexParty:PartyPanel,nexPlayers:PlayersPanel,nexNpcs:NpcsPanel,nexItems:ItemsPanel,nexStats:StatsPanel,nexSystem:SystemStream,nexCombat:CombatStream,nexDefences:DefencesPanel,nexFeed:GameFeed,nexTarget:TargetPanel,nexOptions:OptionsPanel,nexMetrics:MetricsPanel}),getLayout$1=()=>nexusclient.ui().layout(),getStoredLayout=g=>nexusclient._ui?._layout??g,createTabNode=g=>({type:"tab",id:g,name:g,component:g,icon:"feather-pointed",helpText:g}),resolveContextValue=g=>{const A=g??globalThis.nexGui?.__contextValue;if(!A)throw new Error("[nexGui4] initializeTabs requires a NexGuiContext value from the active runtime.");return A},selectThemeTokens=g=>g.tokens,NexusTabRoot=({Component:g,contextValue:A})=>{const I=A.stores.theme(selectThemeTokens),C=e.useMemo(()=>createMuiTheme(I),[I]);return e.createElement(KA.Provider,{value:A},e.createElement(a.StyledEngineProvider,{injectFirst:!0},e.createElement(a.ThemeProvider,{theme:C},e.createElement(n.Box,{className:"nexgui4-panel-root",sx:{display:"flex",flex:1,height:"100%",minHeight:0,minWidth:0,width:"100%"}},e.createElement(g)))))},registerTabFactory=(g,A,I,C)=>{g.nexoverrides[A]=g=>e.createElement(NexusTabRoot,{Component:I,contextValue:C})},generateTabs=({skipIds:g=[]}={})=>{const A=getLayout$1().flexModel,I=A.getNodeById("map");if(!I)return console.warn("[nexGui4] generateTabs(): map node not found in layout model."),[...ae];const C=I.getParent?.()?.getId?.()||"root";return ae.forEach(I=>{g.includes(I)||A.getNodeById(I)||A.doAction({type:"FlexLayout_AddNode",data:{json:createTabNode(I),toNode:C,location:"center"}})}),[...ae]},mountNativeDisplay=({contextValue:g}={})=>{const A=resolveContextValue(g),I=getLayout$1();void 0===I.nexoverrides&&(I.nexoverrides={}),I.nexoverrides.output_main=g=>e.createElement(NexusTabRoot,{Component:MainDisplay,contextValue:A});try{nexusclient.buffer().limit=100}catch{}},unmountNativeDisplay=()=>{const g=getLayout$1();delete g?.nexoverrides?.output_main;try{nexusclient.buffer().limit=0}catch{}},initializeTabs=({contextValue:g}={})=>{const A=resolveContextValue(g),I=getLayout$1(),C=getStoredLayout(I),e=I.flexModel;return void 0===I.get_tab_object_original&&(I.get_tab_object_original=I.get_tab_object),void 0===C.get_tab_object_original&&(C.get_tab_object_original=I.get_tab_object_original),void 0===I.nexoverrides&&(I.nexoverrides={}),Object.entries(getTabComponents()).forEach(([g,C])=>{registerTabFactory(I,g,C,A)}),I.get_tab_object=function(g,A){return this.nexoverrides[g]?this.nexoverrides[g](A):nexusclient._ui._layout.get_tab_object_original(g,A)},e.doAction({data:{tabNode:"map"},type:"FlexLayout_SelectTab"}),I.nexoverrides},re="nexGuiLayout",getLayout=()=>nexusclient.ui().layout(),setModelPreservingGlobal=({layout:g,borders:A})=>{const I=getLayout(),C=I.flexModel.toJson();I.set_model({global:C.global,borders:A,layout:g})},applyLayoutPreset=g=>{const A=getLayoutPreset(g);return!!A&&(setModelPreservingGlobal(A),!0)},saveCurrentLayout=()=>{const g=getLayout().model();return nexusclient.variables().vars[re]={layout:JSON.stringify(g.layout),borders:JSON.stringify(g.borders)},!0},readSavedLayout=()=>{const g=nexusclient.variables?.()?.vars?.[re];if(!g?.layout||!g?.borders)return null;try{return{layout:JSON.parse(g.layout),borders:JSON.parse(g.borders)}}catch{return null}},hasSavedLayout=()=>null!==readSavedLayout(),restoreSavedLayout=()=>{const g=readSavedLayout();return!!g&&(setModelPreservingGlobal(g),!0)},getRawText=g=>g?"function"==typeof g.parsed_line?.text?g.parsed_line.text():"string"==typeof g.line?g.line:"":"",getFormattedHtml=g=>g?"function"==typeof g.parsed_line?.formatted?g.parsed_line.formatted():getRawText(g):"",patchFormatted=(g,A)=>{g?.parsed_line&&"object"==typeof g.parsed_line&&(g.parsed_line.formatted=()=>A)},createIconRenderer=()=>{const g=createMessageReplacementContext();return A=>buildIconHtml(A.id,A.colors,A.size,g.icons.dualTone)},lineContains=(g,A)=>!!getRawText(g).includes(A)||!("string"!=typeof g?.line||!g.line.includes(A)),findBlockIndex=(g,A)=>g.findIndex(g=>lineContains(g,A)),applyRoomReplacements=g=>{if(!Array.isArray(g)||0===g.length)return;const A=findBlockIndex(g,"<RName");if(A<0)return;const I=g[A],C=g[A+1];if(!C)return;const e=getFormattedHtml(C),t=replaceRoomText(e,{iconRenderer:createIconRenderer()});if(t!==e&&patchFormatted(C,t),(getRawText(I)||getFormattedHtml(I)).includes("Flying above"))return;const n=globalThis.nexMap;if(!n?.status?.loaded)return;const a=findBlockIndex(g,"<RExits");if(a<0)return;const r=globalThis.GMCP?.Room?.Info?.num;if(!r)return;const o="function"==typeof n.warpTarget?n.warpTarget(r):null;if(!o)return;const i=createWormholeExitDescriptor({warp:o,currentArea:n.status?.currentArea});if(!i)return;const l=g[a];let s=getFormattedHtml(l);s=s.replace(" and",""),s=s.replace(".",renderWormholeExitHtml(i)),patchFormatted(l,s)},registerEvents=g=>{const A=[];return((g,I,C={})=>{const e=`nexGui4-${g.replace(/\W+/g,"-")}`;eventStream.registerEvent(g,I,{...C,id:e,tags:["nexGui4"]}),A.push({eventName:g,id:e})})("Room.Info",g=>{nexAction.triggers.enable("nexGui4.roomReplacements")}),()=>{A.forEach(({eventName:g,id:A})=>{eventStream.removeListener?.(g,A)})}},safeCall$2=(g,A,...I)=>"function"==typeof g?g.call(A,...I):void 0,getHostLineText=g=>g&&"object"==typeof g?g.parsed_line?safeCall$2(g.parsed_line.text,g.parsed_line)??"":"string"==typeof g.line?g.line:g.html_line&&"string"==typeof g.html_text?stripHtml(g.html_text):"":"",isLikelyPartyName=g=>/^[A-Za-z][A-Za-z'-]*$/.test(g),normalizePartyMembersLine=g=>g.replace(/\.$/,"").split(", ").map(g=>g.trim()).filter(Boolean),extractRealmPartyMembers=(g,A)=>g.map(g=>A?.resolvePlayerNameFromFullname?.(g)).filter(isLikelyPartyName),resolvePlayerRelationships=g=>g?.playerRelationships??getDefaultPlayerRelationshipsModel(),registerTriggers=g=>{const A=resolvePlayerRelationships(g);return nexAction.triggers.add({id:"nexGui4.party.chatGag",regex:/^\(Party\): \w+ says, ".+"$/,tags:["nexGui4"],action:()=>{(g?.stores?.party?.getState?.()??null)?.settings?.gagChat&&(nexusclient.current_line.gag=!0)}}),nexAction.triggers.add({id:"nexGui4.party.memberJoined",regex:/^\(Party\): (\w+) has joined your party\.$/,tags:["nexGui4"],action:A=>{(g?.stores?.party?.getState?.()??null)?.addMember?.(A[1])}}),nexAction.triggers.add({id:"nexGui4.party.memberLeft",regex:/^\(Party\): (\w+) has left your party\.$/,tags:["nexGui4"],action:A=>{(g?.stores?.party?.getState?.()??null)?.removeMember?.(A[1])}}),nexAction.triggers.add({id:"nexGui4.party.listHeader",regex:"Your party has the following members:",tags:["nexGui4"],action:()=>{const A=g?.stores?.party?.getState?.()??null,I=nexusclient.current_block??[],C=I.indexOf(nexusclient.current_line);if(C<0)return;const e=I[C+2],t=getHostLineText(e);A?.updateParty?.(normalizePartyMembersLine(t))}}),nexAction.triggers.add({id:"nexGui4.party.realmsHeader",regex:"The following members of your party are in the realms:",tags:["nexGui4"],action:()=>{const A=g?.stores?.party?.getState?.()??null,I=nexusclient.current_block??[],C=I.indexOf(nexusclient.current_line);if(C<0)return;const e=I.slice(C+1).map(getHostLineText);A?.updateParty?.(extractRealmPartyMembers(e,g?.playerDirectory))}}),nexAction.triggers.add({id:"nexGui4.party.noParty",regex:"You are not the member of any party",tags:["nexGui4"],action:()=>{(g?.stores?.party?.getState?.()??null)?.updateParty?.([])}}),nexAction.triggers.add({id:"nexGui4.party.leftParty",regex:"You have left your party",tags:["nexGui4"],action:()=>{(g?.stores?.party?.getState?.()??null)?.updateParty?.([])}}),nexAction.triggers.add({id:"nexGui4.party.joinedParty",regex:/^You have joined \w+'s party\.$/,tags:["nexGui4"],action:()=>{g?.adapter?.send?.("party members")}}),nexAction.triggers.add({id:"nexGui4.rel.cityEnemiesHeader",regex:/^Enemies of .+ of \w+:$/,tags:["nexGui4"],action:()=>{const g=nexusclient.current_block??[],I=g.indexOf(nexusclient.current_line);if(I<0)return;const C=g[I+1],e=getHostLineText(C).replaceAll(" ","").split(",").map(g=>g.trim()).filter(isLikelyPartyName);A.replaceCityEnemyPlayers(e)}}),nexAction.triggers.add({id:"nexGui4.rel.enemiesHeader",regex:"You have the following enemies:",tags:["nexGui4"],action:()=>{const g=nexusclient.current_block??[],I=g.indexOf(nexusclient.current_line);if(I<0)return;const C=g.slice(I).map(getHostLineText),e=[];for(let A=1;A<C.length-1;A+=1){const g=C[A];g&&!g.includes(" ")&&e.push(g)}A.replaceEnemyPlayers(e.filter(isLikelyPartyName))}}),nexAction.triggers.add({id:"nexGui4.rel.noEnemies",regex:"You have no enemies.",tags:["nexGui4"],action:()=>{A.replaceEnemyPlayers([])}}),nexAction.triggers.add({id:"nexGui4.rel.noEnemiesForgive",regex:"In a moment of forgiveness, you declare that you have no enemies.",tags:["nexGui4"],action:()=>{A.replaceEnemyPlayers([])}}),nexAction.triggers.add({id:"nexGui4.rel.enemyRemoved",regex:/^You declare that (\w+) will no longer be one of your enemies\.$/,tags:["nexGui4"],action:g=>{A.forgetEnemyPlayer(g[1])}}),nexAction.triggers.add({id:"nexGui4.rel.enemyAdded",regex:/^(\w+) is now one of your enemies\.$/,tags:["nexGui4"],action:g=>{A.rememberEnemyPlayer(g[1])}}),nexAction.triggers.add({id:"nexGui4.rel.alliesHeader",regex:"You have the following allies:",tags:["nexGui4"],action:()=>{const g=nexusclient.current_block??[],I=g.indexOf(nexusclient.current_line);if(I<0)return;const C=g.slice(I).map(getHostLineText),e=[];for(let A=1;A<C.length-1;A+=1){const g=C[A];if(!g)continue;if(g.includes("You have"))break;let I;I=g.includes("lust")?g.split(" ")[7]?.trim():g.split(" ")[0]?.trim(),isLikelyPartyName(I)&&e.push(I)}A.replaceAllyPlayers(e)}}),nexAction.triggers.add({id:"nexGui4.rel.allyRemoved",regex:/^You declare that (\w+) will no longer be one of your allies\.$/,tags:["nexGui4"],action:g=>{A.forgetAllyPlayer(g[1])}}),nexAction.triggers.add({id:"nexGui4.rel.allyAdded",regex:/^(\w+) is now one of your allies\.$/,tags:["nexGui4"],action:g=>{A.rememberAllyPlayer(g[1])}}),nexAction.triggers.add({id:"nexGui4.roomReplacements",regex:/^/,tags:["nexGui4"],action:()=>{applyRoomReplacements(nexusclient.current_block??[]),nexAction.triggers.disable("nexGui4.roomReplacements")},enabled:!1}),()=>{nexAction.triggers.remove(["nexGui4"])}},oe="scrollback",ie="__nexGuiInlineHighlightingContext",le="__nexGuiInitialHostBufferSynced",se=null,ce=null,getRuntime=()=>globalThis.nexGui??null,getContextValue=g=>g??getRuntime()?.__contextValue??null,getUiStoreState=g=>g?.stores?.ui?.getState?.()??null,getStreamModel=g=>g?.streamModel??g?.stores?.stream??null,getScrollbackSession=g=>g?.scrollbackSession??null,getUiSettings=g=>g?.persistenceStore?.getAll?.()?.ui??{},formatTimestamp=(g=!1,A=Date.now())=>{const I=new Date(A),C=String(I.getHours()).padStart(2,"0"),e=String(I.getMinutes()).padStart(2,"0"),t=String(I.getSeconds()).padStart(2,"0");return g?`${C}:${e}:${t}.${String(I.getMilliseconds()).padStart(3,"0")}`:`${C}:${e}:${t}`},safeCall$1=(g,A,...I)=>"function"==typeof g?g.call(A,...I):void 0,readRuntimeInlineHighlightingContext=g=>g?.[ie]??g?.__contextValue??null,writeRuntimeInlineHighlightingContext=(g,A)=>{if(!g||"object"!=typeof g)return;const I=readRuntimeInlineHighlightingContext(g);Object.is(I,A)||(I&&I!==A&&clearRelationshipNameFormatterCache(I),Object.prototype.hasOwnProperty.call(g,ie)?g[ie]=A:Object.defineProperty(g,ie,{value:A,writable:!0,enumerable:!1,configurable:!0}))},ensureRuntimeColors=g=>{const A=getRuntime();if(!A)return{inLineHighlighting:A=>applyContextInlineNameHighlighting(A,{contextValue:g})};if(writeRuntimeInlineHighlightingContext(A,g),A.colors&&"function"==typeof A.colors.inLineHighlighting)return A.colors;const I=Object.freeze({inLineHighlighting:g=>applyContextInlineNameHighlighting(g,{contextValue:readRuntimeInlineHighlightingContext(A)})});return Object.defineProperty(A,"colors",{value:I,enumerable:!1,configurable:!0}),I},toArray=g=>Array.isArray(g)?g:[],createExtraBreakLine=()=>({html:"<span> </span>",timestamp:Date.now(),isPrompt:!1,isMonospace:!1,shouldLog:!1,gagged:!1,buffer:"main"}),getCurrentPromptHtml=g=>{const A=getStreamModel(g)?.getSnapshot?.()?.promptLine;return"string"==typeof A?.html?A.html:null},convertHostLine=(g,A="main",I=null)=>{if(!g||"object"!=typeof g)return null;if(g.html_line&&"string"==typeof g.html_text&&g.html_text.length>0)return g.gag&&!g.log?null:{html:g.html_text,timestamp:g.timestamp_ms,isPrompt:!1,isMonospace:!1,shouldLog:Boolean(g.log),gagged:Boolean(g.gag),buffer:A};if(!g.parsed_line)return null;const C=safeCall$1(g.parsed_line.text,g.parsed_line)??"";return!C.length||g.gag&&!g.log?null:(I?.inLineHighlighting(g.parsed_line),{html:safeCall$1(g.parsed_line.formatted,g.parsed_line)??C,timestamp:g.timestamp_ms,isPrompt:Boolean(g.is_prompt),isMonospace:Boolean(g.monospace),shouldLog:Boolean(g.log),gagged:Boolean(g.gag),buffer:A})},convertHostLines=(g,A,I=null,C=null)=>{const e=toArray(g);if(0===e.length)return[];const t=e.map(g=>convertHostLine(g,"main",I)).filter(Boolean);if(0===t.length)return[];if(!t.some(g=>!g.isPrompt)){const g=t[t.length-1];return g&&g.html!==C?t:[]}return A&&t.some(g=>!g.isPrompt&&!g.gagged)?[createExtraBreakLine(),...t]:t},appendConvertedLines=(g,A)=>{Array.isArray(A)&&0!==A.length&&getStreamModel(g)?.addLines?.(A)},hasInitialHostBufferSync=g=>Boolean(g?.[le]),markInitialHostBufferSynced=g=>{g&&"object"==typeof g&&(Object.prototype.hasOwnProperty.call(g,le)?g[le]=!0:Object.defineProperty(g,le,{value:!0,writable:!0,enumerable:!1,configurable:!0}))},syncInitialHostBuffer=(g,A,I=null)=>{if(hasInitialHostBufferSync(g))return;markInitialHostBufferSynced(g);const C=toArray(A?.lines);0!==C.length&&appendConvertedLines(g,convertHostLines(C,Boolean(nexusclient.settings?.().extra_break),I,getCurrentPromptHtml(g)))},getNextStreamSessionId=g=>{const A=getStreamModel(g),I=A?.getStats?.(),C=Number(I?.nextId??I?.sessionTotalLines);if(Number.isFinite(C))return Math.max(0,Math.floor(C));const e=(A?.getSnapshot?.()?.buffer??[]).at(-1)?.id;return Number.isFinite(e)?Math.max(0,Math.floor(e+1)):0},downloadScrollbackSessionSlice=async(g,A)=>{if("undefined"==typeof document||"undefined"==typeof Blob||"undefined"==typeof URL||"function"!=typeof URL.createObjectURL)return;const I=getScrollbackSession(g);if(!I?.readRange)return;const C=getUiSettings(g),e=Boolean(C.virtualizedLogs);let t=[];try{t=await I.readRange(Math.max(0,Math.floor(Number(A)||0)),Number.MAX_SAFE_INTEGER)}catch(n){return void console.error("[nexGui4] Failed reading scrollback log export",n)}0!==t.length&&downloadBuffer(t,e)},undoFooterLayout=()=>{if("undefined"==typeof document)return;const g=document.getElementById("status_vars");g&&["status-target","status-bank","status-gold","status-level","status-ping"].forEach(A=>{const I=document.getElementById(A);I&&g.prepend(I)})},isScrollbackRendererEnabled=()=>!1!==globalThis.nexusclient?.variables?.()?.vars?.nexGuiSettings?.options?.nexGuiRenderer,isScrollbackOpen=g=>getUiStoreState(g)?.modalOpen===oe,openScrollback=g=>getUiStoreState(g)?.openModal?.(oe),closeScrollback=g=>getUiStoreState(g)?.closeModal?.(),saveOriginalMethod=(g,A,I,{nullish:C=!1}={})=>{const e=`${I}_original`,t=Object.prototype.hasOwnProperty.call(A,e);return C?A[e]??=A[I]:void 0===A[e]&&(A[e]=A[I]),g.push(()=>{void 0!==A[e]&&(A[I]=A[e]),t||delete A[e]}),A[e]},removePatches=()=>{se?.(),se=null,ce=null},applyPatches=({contextValue:g}={})=>{const A=ce;if(removePatches(),"undefined"==typeof nexusclient)throw new Error("[nexGui4] applyPatches requires the live nexusclient host.");const I=getContextValue(g);if(!I)throw new Error("[nexGui4] applyPatches requires a live NexGui context value.");A&&A!==I&&clearRelationshipNameFormatterCache(A),ce=I;const C=ensureRuntimeColors(I),e=[],t={logStartSessionId:null},n=nexusclient.ui().layout(),a=nexusclient._ui?._layout??n,r=nexusclient.datahandler(),o=nexusclient.platform(),i=nexusclient.serverapi(),l=nexusclient.log(),s=nexusclient.buffer();syncInitialHostBuffer(I,s,C);const c=Object.prototype.hasOwnProperty.call(r,"handle_GMCP_original"),u=Object.prototype.hasOwnProperty.call(n,"get_tab_object_original"),m=Object.prototype.hasOwnProperty.call(a,"get_tab_object_original"),d=Object.prototype.hasOwnProperty.call(n,"nexoverrides"),p=new Map(ae.filter(g=>Object.prototype.hasOwnProperty.call(n.nexoverrides??{},g)).map(g=>[g,n.nexoverrides[g]]));initializeTabs({contextValue:I}),e.push(()=>{const g=getRuntime();g&&"object"==typeof g&&delete g[ie],void 0!==n.get_tab_object_original&&(n.get_tab_object=n.get_tab_object_original),ae.forEach(g=>{n.nexoverrides&&(p.has(g)?n.nexoverrides[g]=p.get(g):delete n.nexoverrides[g])}),!d&&n.nexoverrides&&0===Object.keys(n.nexoverrides).length&&delete n.nexoverrides,u||delete n.get_tab_object_original,m||delete a.get_tab_object_original});const h=saveOriginalMethod(e,nexusclient,"process_lines");nexusclient.process_lines=function(g){const A=safeCall$1(h,this,g);return this.gagged||appendConvertedLines(I,convertHostLines(g,Boolean(nexusclient.settings?.().extra_break),C,getCurrentPromptHtml(I))),A};const y=saveOriginalMethod(e,nexusclient,"_add_line");nexusclient._add_line=function(g,A){const C=!this.current_block,e=safeCall$1(y,this,g,A);if(!C)return e;appendConvertedLines(I,[convertHostLine(g,A??"main")].filter(Boolean))},"undefined"==typeof nexSys&&(saveOriginalMethod(e,s,"add_block"),s.add_block=function(g){let A=0,I=0;for(let e=0;e<g.length;++e){const C=g[e];C.log&&I++,C.gag||!C.parsed_line&&!C.html_line||(!C.is_prompt||A?(!C.parsed_line||safeCall$1(C.parsed_line.text,C.parsed_line)||0!==A&&e!==g.length-1)&&(safeCall$1(this._fill_tab_completion,this,C),A++,this.lineid++,C.id=this.lineid,this.lines.push(C),this.unread=!0):C.gag=!0)}const C=safeCall$1(this.prune_lines,this);(A||I||C)&&safeCall$1(this.on_lines_changed,this)});const b=saveOriginalMethod(e,l,"enable");l.enable=function(){const g=safeCall$1(b,this),A=getNextStreamSessionId(I);return t.logStartSessionId=Math.max(0,A-100),g};const x=saveOriginalMethod(e,l,"disable");l.disable=function(){const g=safeCall$1(x,this),A=getUiSettings(I);if(null!=t.logStartSessionId||A.logoutDownload){const g=t.logStartSessionId??0;t.logStartSessionId=null,downloadScrollbackSessionSlice(I,g)}return g};const v=saveOriginalMethod(e,i,"on_disconnect");i.on_disconnect=function(){this.__anonymous=!1,this.__game=null,this.__name=null,undoFooterLayout();const g=getUiSettings(I);if(null!=t.logStartSessionId||g.logoutDownload){const g=t.logStartSessionId??0;t.logStartSessionId=null,downloadScrollbackSessionSlice(I,g)}return safeCall$1(v,this)},saveOriginalMethod(e,o,"on_key_down",{nullish:!0}),o.on_key_down=function(g,A,C,e){return C&&e&&76===g||33===g&&isScrollbackRendererEnabled()&&!isScrollbackOpen(I)?(openScrollback(I),!0):(27===g&&closeScrollback(I),safeCall$1(this.on_key_down_original,this,g,A,C,e))},void 0===r.handle_GMCP_original&&(r.handle_GMCP_original=r.handle_GMCP),e.push(()=>{void 0!==r.handle_GMCP_original&&(r.handle_GMCP=r.handle_GMCP_original,c||delete r.handle_GMCP_original)}),r.handle_GMCP=function(g,A){if("Comm.Channel.Text"===g){const g="string"==typeof A?(()=>{try{return JSON.parse(A)}catch{return null}})():A;if("says"===g?.channel&&"string"==typeof g.talker&&g.talker.indexOf(" ")>-1&&-1===g.talker.indexOf("Discord"))return;if(g?.talker===globalThis.GMCP?.Char?.Status?.name&&"string"==typeof g.text&&g.text.includes("Duanathar."))return}return safeCall$1(this.handle_GMCP_original,this,g,A)};const E=saveOriginalMethod(e,n,"write_channel");n.write_channel=function(g,A){if(!A||"function"!=typeof this.channel_id_from_cmd||"function"!=typeof this.channel_record)return safeCall$1(E,this,g,A);ensureRuntimeColors(I).inLineHighlighting(A);const C=Date.now(),e=[{parsed_line:A,timestamp_ms:formatTimestamp(!0,C),timestamp:formatTimestamp(!1,C)}],t=this.channel_id_from_cmd(g),n=this.channel_record(t);if(n)try{n.buffer.add_block(e)}catch{}try{this._nexus.comm_buffer().add_block(e)}catch{}};const w=registerTriggers(I),R=registerEvents(I);return e.push(w),e.push(R),se=()=>{for(;e.length>0;)e.pop()?.();ce=null,se=null},removePatches},installGlobalNexGui=g=>(globalThis.nexGui?.destroy?.(),globalThis.nexGui=g,g),ue="nexgui4-styles",me=new Map,getStyleElement=()=>{if("undefined"==typeof document||"function"!=typeof document.getElementById||!document.head)return null;const g=document.getElementById(ue);if(g)return g;const A=document.createElement("style");return A.id=ue,document.head.appendChild(A),A},registerNexguiStyles=(g,A)=>{if(!g||"string"!=typeof A)return;const I=getStyleElement();I&&(me.set(g,A.trim()),I.textContent=Array.from(me.values()).filter(Boolean).join("\n\n"))},de="replacement-base",pe=GA.replacement,toDamageSlug=g=>g.toLowerCase().replace(/\s+/g,"-"),buildCatalogRules=()=>[".ng-skill-default { color: orange; }",Object.entries(Mg).map(([g,A])=>`.ng-skill-${g} { color: ${A}; }`).join("\n"),".ng-action-default { color: grey; }",Object.entries(Tg).map(([g,A])=>`.ng-action-${g} { color: ${A.fg}; }`).join("\n"),".ng-dmg-unknown { color: grey; }",Object.entries(Rg).map(([g,A])=>`.ng-dmg-${toDamageSlug(g)} { color: ${A}; }`).join("\n"),".ng-muted { color: grey; }",".ng-npc-bracket { color: red; font-weight: bold; }",".ng-crit-separator { color: white; }",".ng-dmg-bracket { color: #808080; }",".ng-hp-loss { color: tomato; }",".ng-info-text { color: cadetblue; font-style: italic; }"].filter(Boolean).join("\n"),he=`\n/* nexGui4 replacement visual primitives — injected by replacementStyles.js */\n.ng-brkt { font-weight: bold; }\n.ng-brkt-ally { color: ${pe.bracketAllyColor}; }\n.ng-brkt-enemy { color: ${pe.bracketEnemyColor}; }\n.ng-italic { font-style: italic; }\n.ng-target-format {\n box-decoration-break: clone;\n -webkit-box-decoration-break: clone;\n box-shadow: inset 0 0 0 1px ${pe.targetBorderColor};\n padding: 0 2px;\n position: relative;\n z-index: 1;\n}\n.ng-icon-fill-1 { fill: var(--ng-fill-1); }\n.ng-icon-fill-2 { fill: var(--ng-fill-2); }\n\n/* Legacy message replacement row classes retained for compatibility. */\n.ng-seg { display: table-cell; color: #aaa; }\n.ng-msgline { display: inline-table; width: calc(100% - 15ch); }\n.ng-w-0 { width: 0; }\n.ng-w-5 { width: 5%; }\n.ng-w-30 { width: 30%; }\n.ng-w-35 { width: 35%; }\n\n/* Flex layout for structured skill replacement rows. Width is 100% of whatever\n space the host surface gives the row: the side-stream panels place it in a\n grid track that already excludes the timestamp, while the inline main-display\n / scrollback line reserves the timestamp's width on the row itself (see\n transcriptStyles.js). */\n.nexgui4-replacement-row {\n display: inline-flex;\n width: 100%;\n min-width: 0;\n overflow: hidden;\n vertical-align: top;\n}\n.nexgui4-replacement-row__buffer {\n flex: 0 0 5%;\n}\n.nexgui4-replacement-row__actor {\n flex: 0 0 30%;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.nexgui4-replacement-row__action {\n flex: 0 0 35%;\n}\n.nexgui4-replacement-row__target {\n flex: 1;\n min-width: 0;\n}\n\n/* Panel-specific stream overrides */\n.nexgui4-combat-stream .nexgui4-replacement-row__buffer {\n display: none;\n}\n\n${buildCatalogRules()}\n`.trim(),injectReplacementBaseStyles=()=>{registerNexguiStyles(de,he)},ye="transcript-viewport",fe="\n/* nexGui4 transcript viewport primitives. */\n.nexgui4-transcript-scroll-viewport {\n flex: 1;\n min-height: 0;\n overflow-anchor: none;\n overflow-y: auto;\n position: relative;\n margin: 5px;\n}\n\n.nexgui4-transcript-scroll-viewport--display {\n -ms-overflow-style: none;\n scrollbar-width: none;\n}\n\n.nexgui4-transcript-scroll-viewport--display::-webkit-scrollbar {\n display: none;\n}\n\n.nexgui4-transcript-spacer {\n width: 100%;\n}\n\n.nexgui4-transcript-spacer--display {\n box-sizing: border-box;\n}\n\n.nexgui4-transcript-spacer--panel {\n position: relative;\n}\n\n.nexgui4-transcript-row {\n width: 100%;\n}\n\n.nexgui4-transcript-row--panel {\n left: 0;\n position: absolute;\n top: 0;\n}\n\n.nexgui4-virtual-scroll-line {\n contain: layout style paint;\n display: block;\n font-family: inherit;\n min-width: 0;\n}\n\n.nexgui4-virtual-scroll-line.nexguilog {\n display: block !important;\n}\n\n/* Transcript lines flow inline (timestamp + payload) so wrapped text returns\n to the left margin — standard wrapping with inline timestamps. A structured\n replacement row is tabular and must not wrap, so (as in nexGui3) it reserves\n the inline timestamp's width and fills the rest of the line. The display font\n is monospace, so the ch reservation lines up with the timestamp; the slack\n over the 13ch timestamp (12ch label + 1ch ng-timestamp margin) keeps it off\n the next line. The reservation is scoped by the static --timestamped class\n (set when a timestamp is rendered) rather than :has(), so it never adds\n selector-matching cost to the streaming transcript; with timestamps hidden\n the class is absent and the base .nexgui4-replacement-row rule keeps the row\n at full width. */\n.nexgui4-virtual-scroll-line--timestamped .nexgui4-replacement-row {\n width: calc(100% - 15ch);\n}\n\n.nexgui4-main-display-timestamp.timestamp,\n.nexgui4-scrollback-timestamp.timestamp,\n.nexgui4-structured-stream-panel__timestamp.timestamp {\n display: inline !important;\n}\n\n.nexgui4-virtual-scroll-line__payload {\n overflow-wrap: anywhere;\n white-space: pre-wrap;\n}\n\n/* Gagged-but-logged lines never appear on the live display; in scrollback they\n are dimmed and italicised so reviewers can tell they were suppressed live. */\n.nexgui4-virtual-scroll-line--gagged {\n font-style: italic;\n opacity: 0.6;\n}\n\n.nexgui4-prompt-line {\n position: static;\n width: 100%;\n}\n".trim(),injectTranscriptStyles=()=>{registerNexguiStyles(ye,fe)},be={"shield-halved":[512,512,["shield-alt"],"f3ed",["M256 0c.2 0 .5 0 .7 0c4.6 0 9.2 1 13.4 2.9L458.4 82.8c22 9.3 38.4 31 38.3 57.2c-.5 99.2-41.3 280.7-213.6 363.2c-8.3 4-17.4 6-26.4 6V0H256z","M256.7 0c-.2 0-.5 0-.7 0c-4.6 0-9.2 1-13.4 2.9L54.3 82.8c-22 9.3-38.4 31-38.3 57.2c.5 99.2 41.3 280.7 213.6 363.2c8.3 4 17.4 6 26.4 6V0h.7z"]],"shield-cross":[512,512,[9960],"f712",["M224 10.8L54.3 82.8c-22 9.3-38.4 31-38.3 57.2c0 6.4 .2 13 .6 20H192c17.7 0 32-14.3 32-32V10.8zM24.7 224C43.7 319.9 97.4 437.2 224 500.4V256c0-17.7-14.3-32-32-32H24.7zM288 500.4C414.6 437.2 468.3 319.9 487.3 224H320c-17.7 0-32 14.3-32 32V500.4zM495.4 160c.4-7 .6-13.7 .6-20c.1-26.2-16.3-47.9-38.3-57.2L288 10.8V128c0 17.7 14.3 32 32 32H495.4z","M288 10.8L269.4 2.9C265.2 1 260.7 0 256 0s-9.2 1-13.4 2.9L224 10.8V128c0 17.7-14.3 32-32 32H16.6c1.1 19.4 3.6 41.1 8.1 64H192c17.7 0 32 14.3 32 32V500.4c1.9 .9 3.7 1.8 5.6 2.7c16.7 8 36.1 8 52.8 0c1.9-.9 3.8-1.8 5.6-2.7V256c0-17.7 14.3-32 32-32H487.3c4.5-22.9 7.1-44.6 8.1-64H320c-17.7 0-32-14.3-32-32V10.8z"]],tree:[448,512,[127794],"f1bb",["M210.6 5.9L62 169.4c-3.9 4.2-6 9.8-6 15.5C56 197.7 66.3 208 79.1 208H104L30.6 281.4c-4.2 4.2-6.6 10-6.6 16C24 309.9 34.1 320 46.6 320H80L5.4 409.5C1.9 413.7 0 419 0 424.5c0 13 10.5 23.5 23.5 23.5H192V224c0-17.7 14.3-32 32-32s32 14.3 32 32V448H424.5c13 0 23.5-10.5 23.5-23.5c0-5.5-1.9-10.8-5.4-15L368 320h33.4c12.5 0 22.6-10.1 22.6-22.6c0-6-2.4-11.8-6.6-16L344 208h24.9c12.7 0 23.1-10.3 23.1-23.1c0-5.7-2.1-11.3-6-15.5L237.4 5.9C234 2.1 229.1 0 224 0s-10 2.1-13.4 5.9z","M224 192c17.7 0 32 14.3 32 32V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V224c0-17.7 14.3-32 32-32z"]],droplet:[384,512,[128167,"tint"],"f043",["M192 512C86 512 0 426 0 320C0 228.8 130.2 57.7 166.6 11.7C172.6 4.2 181.5 0 191.1 0h1.8c9.6 0 18.5 4.2 24.5 11.7C253.8 57.7 384 228.8 384 320c0 106-86 192-192 192zM96 336c0-8.8-7.2-16-16-16s-16 7.2-16 16c0 61.9 50.1 112 112 112c8.8 0 16-7.2 16-16s-7.2-16-16-16c-44.2 0-80-35.8-80-80z","M80 320c8.8 0 16 7.2 16 16c0 44.2 35.8 80 80 80c8.8 0 16 7.2 16 16s-7.2 16-16 16c-61.9 0-112-50.1-112-112c0-8.8 7.2-16 16-16z"]],tombstone:[448,512,[],"f720",["M224 0C118 0 32 86 32 192V448H416V192C416 86 330 0 224 0zm24 152v40h48c13.3 0 24 10.7 24 24s-10.7 24-24 24H248V360c0 13.3-10.7 24-24 24s-24-10.7-24-24V240H152c-13.3 0-24-10.7-24-24s10.7-24 24-24h48V152c0-13.3 10.7-24 24-24s24 10.7 24 24z","M248 152c0-13.3-10.7-24-24-24s-24 10.7-24 24v40H152c-13.3 0-24 10.7-24 24s10.7 24 24 24h48V360c0 13.3 10.7 24 24 24s24-10.7 24-24V240h48c13.3 0 24-10.7 24-24s-10.7-24-24-24H248V152zM32 448c-17.7 0-32 14.3-32 32s14.3 32 32 32H416c17.7 0 32-14.3 32-32s-14.3-32-32-32H32z"]],feather:[512,512,[129718],"f52d",["M97.9 448h84c49.7 0 97.9-14.4 139-41c11.1-7.2 5.5-23-7.8-23c-5.1 0-9.2-4.1-9.2-9.2c0-4.1 2.7-7.6 6.5-8.8l81-24.3c2.5-.8 4.8-2.1 6.7-4l22.4-22.4c10.1-10.1 2.9-27.3-11.3-27.3l-32.2 0c-5.1 0-9.2-4.1-9.2-9.2c0-4.1 2.7-7.6 6.5-8.8l112-33.6c4-1.2 7.4-3.9 9.3-7.7C506.4 207.6 512 184.1 512 160c0-41-16.3-80.3-45.3-109.3l-5.5-5.5C432.3 16.3 393 0 352 0s-80.3 16.3-109.3 45.3L139 149C91 197 64 262.1 64 330v84L311 167c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9L97.9 448z","M24 512c-6.2 0-12.3-2.3-17-7c-9.4-9.4-9.4-24.6 0-33.9L311 167c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9L41 505c-4.7 4.7-10.8 7-17 7z"]],"fish-fins":[576,512,[],"e4f2",["M182 150.4C221.3 120.9 273.7 96 336 96s114.7 24.9 154 54.4c39.2 29.4 67.2 64.7 81.6 89.5c5.8 9.9 5.8 22.2 0 32.1c-14.4 24.8-42.5 60.1-81.6 89.5C450.7 391.1 398.3 416 336 416s-114.7-24.9-154-54.4c-15.3-11.5-29-23.9-40.7-36.3L48.1 379.6c-12.5 7.3-28.4 5.3-38.7-4.9S-3 348.7 4.2 336.1L50 256 4.2 175.9c-7.2-12.6-5-28.4 5.3-38.6s26.1-12.2 38.7-4.9l93.1 54.3c11.8-12.3 25.4-24.8 40.7-36.3zM448 256a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z","M238.9 36.9C227.7 44 222 57.3 224.6 70.3l9.7 48.6C264.1 105.1 298.2 96 336 96c5.7 0 11.3 .2 16.8 .6L275.2 38.4c-10.6-8-25-8.5-36.3-1.5zm-4.6 356.2l-9.7 48.6c-2.6 13 3.1 26.3 14.3 33.3s25.6 6.5 36.3-1.5l77.6-58.2c-5.5 .4-11.1 .6-16.8 .6c-37.8 0-71.9-9.1-101.7-22.9z"]]},xe="host-surface",ve="character_module_class",Ee="100%",we="15%",Re="\nhtml { -webkit-font-smoothing: subpixel-antialiased; }\n.flexlayout__splitter { background-color: grey; }\n.flexlayout__tab { background-color: #000 !important; }\n.output { padding: 5px; }\n.nexguilog { display: none; }\n\n.ng-timestamp { margin-right: 1ch; }\n\n.ng-virtual-list {\n background: black;\n width: 100%;\n overflow-y: auto;\n contain: strict;\n padding-bottom: 0;\n}\n\n.ng-virtual-list--border { border-bottom: 1px solid #ccc; }\n\n.ng-virtual-anchor {\n overflow-anchor: none;\n width: 100%;\n color: white;\n white-space: pre-wrap;\n word-wrap: break-word;\n}\n\n.ng-ListItem { contain: layout inline-size; }\n\n.nexgui4-tab-container {\n isolation: isolate;\n overflow: hidden;\n position: relative;\n}\n\n.nexgui4-tab-container__background {\n inset: 0;\n pointer-events: none;\n position: absolute;\n z-index: 0;\n}\n\n.nexgui4-tab-container__surface,\n.nexgui4-tab-container__tabs,\n.nexgui4-tab-container__tabpanel {\n position: relative;\n z-index: 1;\n}\n".trim(),injectHostStyles=()=>{registerNexguiStyles(xe,Re)},setClassBalanceIconReadyState=g=>{if("undefined"==typeof document)return;const A=document.getElementById(ve);A&&(A.style.opacity=!0===g?Ee:!1===g?we:"")},bindClassBalanceIcon=({characterStore:g}={})=>{if(!g||"function"!=typeof g.getState||"function"!=typeof g.subscribe)return()=>{};const sync=(A=g.getState())=>{setClassBalanceIconReadyState(A?.classBalanceReady??null)};return sync(),g.subscribe(g=>{sync(g)})},injectFontAwesomeIcons=()=>{"undefined"!=typeof window&&window.___FONT_AWESOME___?.styles?.fad&&Object.assign(window.___FONT_AWESOME___.styles.fad,be)},Se=300,Me=null,forceFooterHostElementsVisible=g=>{g?.setHostSetting?.("show_gauges",!0),g?.setHostSetting?.("show_balances",!0)},applyFooterLayout=()=>{if("undefined"==typeof document)return;const g=document.getElementsByClassName("bottom_view")[0];g&&(g.style.padding="0px",g.children[2]&&(g.children[2].style.margin="0px"));const A=document.getElementById("status_vars");if(A){for(let I=0;I<A.children.length;I++)Object.assign(A.children[I].style,{fontSize:"14.4px",marginTop:"auto",marginBottom:"auto",verticalAlign:"middle"});Object.assign(A.style,{justifyContent:"flex-start",alignItems:"center",marginTop:0,marginBottom:0});const g=document.getElementById("component_balances");g&&(A.prepend(g),g.style.minWidth="50px",g.style.marginTop="5px",g.style.gap="2px")}const I=document.getElementById("extra_icons");I&&(Object.assign(I.style,{display:"flex",justifyContent:"end",gap:"10px"}),["status-bank","status-gold","status-level","status-ping"].forEach(g=>{const A=document.getElementById(g);A&&I.prepend(A)}));const C=document.getElementById("status-ping");C&&(C.style.minWidth="57px");const e=document.getElementById("left_icons");if(e){Object.assign(e.style,{minWidth:"300px",maxWidth:"500px"}),e.children[0]&&(e.children[0].style.visibility="hidden",e.children[0].style.width="0px");const g=document.getElementById("status-target");g&&(e.prepend(g),g.style.fontSize="12px",g.style.fontWeight="bold")}const t=document.getElementById("footer");if(t&&I){const g=document.getElementById("gauges");if(g){t.insertBefore(g,I),Object.assign(g.style,{display:"flex",transform:"scaleY(0.85)",minWidth:0,flexGrow:100,alignItems:"center"});for(const A of g.children)A.children[1]&&(A.children[1].style.fontSize="12px"),A.style.flexGrow=1}}document.getElementById(ve)?.remove();const n=document.createElement("div");n.id=ve,n.className="balance class-balance",n.style.flexGrow="1",n.innerHTML=`<svg aria-hidden="true" focusable="false" data-prefix="fad" data-icon="hourglass" class="svg-inline--fa fa-star fa-w-18" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512" color="#33FFD4" style="font-size: 20px;"><g class="fa-group"><path class="fa-secondary" fill="currentColor" d="${window.___FONT_AWESOME___?.styles?.fa?.hourglass?.[4]??""}"></path><path class="fa-primary" fill="currentColor" d=""></path></g></svg>`,document.getElementById("component_balances")?.appendChild(n),document.getElementById("balance_balance")?.setAttribute("style","flex-grow: 1"),document.getElementById("balance_equilibrium")?.setAttribute("style","flex-grow: 1")},configureFlexLayout=()=>{if("undefined"==typeof nexusclient)return;const g=nexusclient.ui().layout(),A=g.model()?.global??{},I="boolean"!=typeof A.tabSetEnableTabStrip||A.tabSetEnableTabStrip;g.flexModel.doAction({type:"FlexLayout_UpdateModelAttributes",data:{json:{splitterSize:2,tabSetEnableTabStrip:I,tabEnableClose:!1,tabSetEnableMaximize:!1,borderEnableAutoHide:!0,borderEnableDrop:!0}}}),["right","left","top","bottom"].forEach(A=>{g.model().borders.find(g=>g.location===A)||g.model().borders.push({type:"border",location:A,children:[]})});const borderLeaveEvent=()=>{Me&&(document.getElementsByClassName("MuiPopover-root MuiMenu-root MuiModal-root").length||g.flexModel.doAction({type:"FlexLayout_SelectTab",data:{tabNode:Me}}))},C=document.getElementsByClassName("flexlayout__tab_border_right");for(let t=0;t<C.length;t++)C[t].addEventListener("mouseleave",borderLeaveEvent);const borderMouseOverEvent=A=>{const I=A.target.title;I&&(g.flexModel.getNodeById(I)?.isVisible()||(Me=I,g.flexModel.doAction({type:"FlexLayout_SelectTab",data:{tabNode:Me}})))},e=document.getElementsByClassName("flexlayout__border_button_right");for(let t=0;t<e.length;t++){const A=e[t];A.addEventListener("mouseenter",borderMouseOverEvent);const I=g.model().borders[0]?.children.find(g=>g.id===A.title);I&&I.borderWidth<Se&&(I.borderWidth=Se)}},Te="nexGui4",Ne="https://unpkg.com/nexgui4/dist/nexGui4.nxs",Ge="khaseem",ke=1e4,De=[{key:"classCustomizations",names:["nexGui.classCustomizations","classCustomizations"]},{key:"userSettings",names:["nexGui.userSettings","userSettings","userCustomizations"]}],je=new Set(De.flatMap(({names:g})=>g.map(g=>g.toLowerCase()))),toLowerName=g=>String(g??"").trim().toLowerCase(),clonePackageItem=g=>{if(!g||"object"!=typeof g)return null;if("function"==typeof structuredClone)try{return structuredClone(g)}catch{}try{return JSON.parse(JSON.stringify(g))}catch{return g}},safeCall=g=>{try{return g()}catch{return null}},getReflexes=g=>safeCall(()=>g?.reflexes?.())??null,getPackageRegistry=g=>{const A=safeCall(()=>g?.packages?.());if("function"==typeof A?.get)return A;const I=safeCall(()=>getReflexes(g)?.packages?.());return"function"==typeof I?.get?I:null},getNexGuiPackage=(g,A=Te)=>safeCall(()=>getPackageRegistry(g)?.get(A))??null,findPackageItemByNames=(g,A)=>{if(!Array.isArray(g))return null;const I=new Set(A.map(toLowerName));return g.find(g=>I.has(toLowerName(g?.name)))??null},captureCustomizationGroups=g=>De.map(({key:A,names:I})=>{const C=findPackageItemByNames(g?.items,I);return C?{key:A,names:I,data:clonePackageItem(C)}:null}).filter(Boolean),applyCustomizationGroup=(g,A,I)=>{const C=findPackageItemByNames(g?.items,A.names);return!(!C||!A.data||("function"==typeof C.apply?(C.apply(A.data,I),0):"object"!=typeof C||"object"!=typeof A.data||(Object.assign(C,clonePackageItem(A.data)),0)))},enableRuntimePackageGroups=g=>{Array.isArray(g?.items)&&g.items.filter(g=>"group"===g?.type&&!je.has(toLowerName(g.name))).forEach(g=>{g.enabled=!0})},reportUpdateError=({adapter:g,consoleObj:A,message:I,nexusClient:C})=>{A.error(I),"function"!=typeof g?.notice?"function"!=typeof C?.display?C?.display_notice?.(I,"red"):C.display(I):g.notice(I,"red")},createAbortSignal=({AbortControllerCtor:g,setTimeoutFn:A,timeoutMs:I})=>{if(!g||I<=0)return{signal:void 0,timeout:null};const C=new g,e=A(()=>C.abort(),I);return{signal:C.signal,timeout:e}},updateNxs=async({adapter:g=null,clearTimeoutFn:A=clearTimeout,consoleObj:I=console,fetchFn:C=globalThis.fetch,nexusClient:e=globalThis.nexusclient,packageName:t=Te,setTimeoutFn:n=setTimeout,skipCharacterName:a=Ge,timeoutMs:r=ke,url:o=Ne}={})=>{if(toLowerName(e?.charname)===toLowerName(a))return null;const i=getPackageRegistry(e);if(!i)return null;let l=null;try{if("function"!=typeof C)throw new Error("fetch is not available.");const g=i.get(t);if(!g||"function"!=typeof g.apply)throw new Error(`${t} package is not installed in Nexus.`);const A=captureCustomizationGroups(g),{signal:I,timeout:a}=createAbortSignal({AbortControllerCtor:globalThis.AbortController,setTimeoutFn:n,timeoutMs:r});l=a;const s=await C(o,{cache:"no-store",...I?{signal:I}:{}});if(!s?.ok)throw new Error(`${t} update failed: ${s?.status??"unknown"} ${s?.statusText??""}`.trim());const c=await s.json(),u=getReflexes(e),m=getNexGuiPackage(e,t);m.apply(c,u);const d=getNexGuiPackage(e,t)??m;return A.forEach(g=>{applyCustomizationGroup(d,g,u)}),enableRuntimePackageGroups(d),c}catch(s){return reportUpdateError({adapter:g,consoleObj:I,message:"AbortError"===s?.name?`${t} update timed out. Check your connection.`:`${t} update error: ${s?.message??String(s)}`,nexusClient:e}),null}finally{null!==l&&A(l)}},Pe="https://api.achaea.com/gamefeed.json",Be=5e3,normalizeFetchedEntries=g=>Array.isArray(g)?g.filter(Boolean):[],parseTimestamp=g=>{if("string"!=typeof g||0===g.trim().length)return;const A=g.trim(),I=A.match(/^(\d{4})-(\d{2})-(\d{2})[ T](\d{2}):(\d{2}):(\d{2})$/);if(I){const[,g,A,C,e,t,n]=I;return Date.UTC(Number(g),Number(A)-1,Number(C),Number(e),Number(t),Number(n),0)}const C=A.includes("T")?A:A.replace(" ","T"),e=/(?:Z|[+-]\d{2}:?\d{2})$/i.test(C),t=Date.parse(e?C:`${C}Z`);return Number.isFinite(t)?t:void 0},toStoreEntry=g=>({content:g.description??g.caption??null,id:g.id??void 0,timestamp:parseTimestamp(g.date)}),mapEntries=g=>g.map(g=>toStoreEntry(g)),applySnapshot=(g,A)=>{const I=g?.getState?.();if(!I)return;const C=mapEntries(A);if("function"!=typeof I.replaceEntries){I.clear();for(const g of C)I.addEntry(g)}else I.replaceEntries(C)},appendEntries=(g,A)=>{const I=g?.getState?.();if(!I)return;const C=mapEntries(A);if("function"!=typeof I.addEntries)for(const e of C)I.addEntry(e);else I.addEntries(C)},createGameFeedPoller=({feedStore:g,fetchFn:A=null,setIntervalFn:I=null,clearIntervalFn:C=null,intervalMs:e=Be,url:t=Pe})=>{let n=null,a=null,r=!1,o=null;const syncFromRemote=async()=>{if("function"!=typeof A)return[];try{const I=await A(t,{cache:"no-store"});if(!I?.ok)return[];const C=normalizeFetchedEntries(await I.json());if(!r||0===C.length)return C;const e=C.at(-1)?.id??null;if(null==e)return applySnapshot(g,C),C;if(null==o)return applySnapshot(g,C),o=e,C;if(e===o)return[];const n=C.findIndex(g=>g?.id===o);return n<0?applySnapshot(g,C):appendEntries(g,C.slice(n+1)),o=e,C}catch{return[]}},pollOnce=()=>a||(a=syncFromRemote().finally(()=>{a=null}),a);return{start:()=>{r||(r=!0,pollOnce(),"function"==typeof I&&(n=I(()=>{pollOnce()},e)))},stop:()=>{r=!1,null!==n&&"function"==typeof C&&(C(n),n=null)},pollOnce}},Oe="https://2a9fwzdazf.execute-api.us-east-2.amazonaws.com/nexGui/cdb",Le="zr1te94RPZ4yaMJCc6j134eAxDsCpkmm48py1GaD",resolveRemoteService=({remoteService:g,remotePlayerService:A,fetchFn:I}={})=>{if(g)return g;const C=A??{apiUrl:Oe,apiKey:Le};return createLambdaRemotePlayerService({...C,fetchFn:C.fetchFn??I})},bootstrapNexus=(g={})=>{const{adapter:A,autoStart:I,startupPhaseHandlers:C,remoteService:e,remotePlayerService:t,feedPollingEnabled:n=!0,runtimePorts:a,...r}=g,o=a??createBrowserRuntimePorts(),i=createNexusAdapter(),l=resolveRemoteService({remoteService:e,remotePlayerService:t,fetchFn:o.fetch});let s,c=!1,u=!1,m=!1,d=!1,p=!1,h=!1,y=!1,b=null,removeLivePatches=()=>{},removeClassBalanceBinding=()=>{},removeNetflixModeController=()=>{},removeNativeDisplayCommands=()=>{},removeLayoutCommands=()=>{};const ensureFeedPoller=()=>n?(b??=createGameFeedPoller({feedStore:s.stores.feed,fetchFn:o.fetch,setIntervalFn:o.setInterval,clearIntervalFn:o.clearInterval}),b):null;return s=createNexGui({adapter:i,autoStart:!1,remoteService:l,startupPhaseHandlers:{[eA.BOOTING]:async()=>{const g=updateNxs({adapter:i,fetchFn:o.fetch,setTimeoutFn:o.setTimeout,clearTimeoutFn:o.clearTimeout});injectHostStyles(),injectTranscriptStyles(),injectReplacementBaseStyles(),injectFontAwesomeIcons();const A=s.__contextValue,I=A?.persistenceStore?.get("ui")?.nativeDisplay??!1;if(c||(generateTabs(),c=!0),u||(forceFooterHostElementsVisible(i),configureFlexLayout(),applyFooterLayout(),u=!0),d||(removeClassBalanceBinding=bindClassBalanceIcon({characterStore:s.stores.character}),d=!0),p||(removeNetflixModeController=createNetflixModeController({adapter:i,uiStore:s.stores.ui,characterStore:s.stores.character}),p=!0),m||(removeLivePatches=applyPatches({contextValue:A}),m=!0,I&&A.platformTabs.mountNativeDisplay()),!h){const g=i.destroy.bind(i);i.destroy=()=>{b?.stop(),removeNativeDisplayCommands(),removeLayoutCommands(),removeClassBalanceBinding(),d=!1,removeNetflixModeController(),p=!1,m&&(removeLivePatches(),m=!1),g()},h=!0}y||(i.send("stat"),i.send("pwho"),i.send("enemies"),i.send("allies"),i.send("city enemies"),i.send("date"),i.send("ql"),y=!0),A.playerDirectoryLifecycle.warmDirectoryFromCache(),A.playerDirectoryLifecycle.refreshDirectoryFromRemote(l),ensureFeedPoller()?.start(),await g}},runtimePorts:o,...r}),removeNativeDisplayCommands=s.__contextValue.platformTabs.configureNativeDisplayCommands({mountNativeDisplay:()=>mountNativeDisplay({contextValue:s.__contextValue}),unmountNativeDisplay:()=>{unmountNativeDisplay()}}),removeLayoutCommands=s.__contextValue.platformTabs.configureLayoutCommands({applyLayoutPreset,saveLayout:saveCurrentLayout,restoreLayout:restoreSavedLayout,hasSavedLayout}),installGlobalNexGui(s),s.__start().catch(()=>{}).then(()=>{emitStartupReadySignal(i),runNexGuiClassReflexForCurrentHostClass()}),s},createMockAdapter=({playerRelationships:g}={})=>{const A=[],I=[],C=new Map,e=new Map,t={echo_input:!1,echo_gmcp:!1,show_prompts:!0,show_timestamps:!1},n={tabSetEnableTabStrip:!1};let a=0,r=0;const getListenerBucket=g=>(e.has(g)||e.set(g,new Map),e.get(g)),resolveListenerId=(g,A={})=>A.id??"listener-"+ ++r,removeListener=(g,A)=>{const I=e.get(g);if(!I)return!1;if("string"==typeof A)return I.delete(A);for(const[C,e]of I.entries())if(e.handler===A)return I.delete(C),!0;return!1},o=assertAdapterContract({send:I=>{g?.trackRelationshipCommand?.(I),A.push(I)},sendGmcp:(g,I)=>A.push({gmcp:g,data:I}),getVariable:g=>C.get(g),setVariable:(g,A)=>C.set(g,A),getTarget:()=>C.get("_target")??null,setTarget:g=>C.set("_target",g),notice:()=>{},displayHtmlLine:g=>{I.push(String(g))},getHostSettings:()=>t,setHostSetting:(g,A)=>{t[g]=A},getHostLayoutSnapshot:()=>n,updateHostLayoutAttributes:g=>{Object.assign(n,g)},focusInput:()=>{},getConfiguredDefences:()=>[],getActiveDefences:()=>[],gagCurrentBlock:()=>{a+=1},on:(g,A,I)=>{const C=resolveListenerId(A,I);return getListenerBucket(g).set(C,{handler:A,once:Boolean(I?.once)}),()=>removeListener(g,C)},off:(g,A)=>removeListener(g,A),destroy:()=>{e.clear()}});return o._test={getSentCommands:()=>[...A],clearCommands:()=>{A.length=0},getGaggedBlockCount:()=>a,getDisplayedLines:()=>[...I],triggerEvent:(g,A)=>{const I=e.get(g);if(I)for(const[C,e]of[...I.entries()])e.handler(A),e.once&&I.delete(C)},setVariable:(g,A)=>C.set(g,A)},o},bootstrapPlayground=(g={})=>{const{feedPollingEnabled:A=!0,startupPhaseHandlers:I={},runtimePorts:C,...e}=g,t=C??createBrowserRuntimePorts(),n=createMockAdapter();let a,r=null;const ensureFeedPoller=()=>A?(r??=createGameFeedPoller({feedStore:a.stores.feed,fetchFn:t.fetch,setIntervalFn:t.setInterval,clearIntervalFn:t.clearInterval}),r):null;a=createNexGui({adapter:n,runtimePorts:t,startupPhaseHandlers:{...I,[eA.BOOTING]:async g=>{await(I[eA.BOOTING]?.(g)),injectTranscriptStyles(),ensureFeedPoller()?.start()}},...e});const o=a.destroy.bind(a);return a.destroy=()=>{r?.stop(),o()},a},ze=Object.freeze({NexGuiContext:KA,applyInlineNameHighlighting,createMuiTheme,createReplacementDescriptor,generateReplacementHtml,injectReplacementBaseStyles,isRoomNpcItem,nexGuiIcons:be,panels:Object.freeze({CombatStream,DefencesPanel,GameFeed,ItemsPanel,MainDisplay,MetricsPanel,NpcsPanel,OptionsPanel,PartyPanel,PlayersPanel,StatsPanel,SystemStream,TargetPanel,TimersPanel})});g.TOPICS=w,g.bootstrapNexus=bootstrapNexus,g.bootstrapPlayground=bootstrapPlayground,g.composePublicApi=composePublicApi,g.createMockAdapter=createMockAdapter,g.createNexGui=createNexGui,g.createNexusAdapter=createNexusAdapter,g.defaultTokens=GA,g.playground=ze,g.updateNxs=updateNxs}(globalThis.nexGui=globalThis.nexGui||{},nexRuntime.immer,nexRuntime.zustand,nexRuntime.zod,React,ReactDOM,nexRuntime.mui,nexRuntime.muiStyles,nexRuntime.tanstackReactVirtual);