mons-rules 0.3.0 → 0.3.3
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.
- package/README.md +7 -1
- package/dist/mons-rules.js +1 -1
- package/package.json +2 -2
package/dist/mons-rules.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var Zl=Object.defineProperty;var Jl=e=>{throw TypeError(e)};var Pb=(e,n,o)=>n in e?Zl(e,n,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[n]=o;var p=(e,n)=>Zl(e,"name",{value:n,configurable:!0});var he=(e,n,o)=>Pb(e,typeof n!="symbol"?n+"":n,o),oc=(e,n,o)=>n.has(e)||Jl("Cannot "+o);var w=(e,n,o)=>(oc(e,n,"read from private field"),o?o.call(e):n.get(e)),X=(e,n,o)=>n.has(e)?Jl("Cannot add the same private member more than once"):n instanceof WeakSet?n.add(e):n.set(e,o),H=(e,n,o,t)=>(oc(e,n,"write to private field"),t?t.call(e,o):n.set(e,o),o),Y=(e,n,o)=>(oc(e,n,"access private method"),o);function wb(e){if(!Number.isSafeInteger(e.capacity)||e.capacity<1)throw new RangeError("automove cache capacity must be a positive integer");if(!Number.isSafeInteger(e.size)||e.size<0||e.size>e.capacity)throw new RangeError("automove cache size must be within its capacity")}p(wb,"assertBoundedCache");var Zt,Qa,tc=class tc{constructor(n){he(this,"lifetime",n);X(this,Zt,new Set);X(this,Qa,new Map)}get cacheCount(){return w(this,Zt).size}get entryCount(){let n=0;for(let o of w(this,Zt))n+=o.size;return n}own(n){return wb(n),w(this,Zt).add(n),n}getOrCreate(n,o){let t=w(this,Qa).get(n);if(t!==void 0)return t;let r=this.own(o());return w(this,Qa).set(n,r),r}clear(){for(let n of w(this,Zt))n.clear()}};Zt=new WeakMap,Qa=new WeakMap,p(tc,"AutomoveCacheScope");var Jt=tc;var ed=650;function Tb(){return globalThis.performance.now()}p(Tb,"systemMonotonicClock");function rc(e,n){if(!Number.isFinite(e)||e<0)throw new RangeError(`${n} must be a finite nonnegative number`);return e}p(rc,"validateDuration");var Za,Is,Rn,zr,Sn,nd,od,td,Os,rd,qr,ac=class ac{constructor(n={}){X(this,Sn);X(this,Za);X(this,Is,new Jt("session"));X(this,Rn);X(this,zr,!1);H(this,Za,n.clock??Tb)}get caches(){return w(this,Is)}withDeadlineIfAbsent(n,o){Y(this,Sn,nd).call(this,rc(n,"deadline budget"));try{return o()}finally{Y(this,Sn,od).call(this)}}withCooperativeSubdeadline(n,o){let t=rc(n,"subdeadline budget"),r=w(this,Rn);return r===void 0?Y(this,Sn,td).call(this,t,o):Y(this,Sn,rd).call(this,r,t,o)}checkpoint(){let n=w(this,Rn);return n===void 0?!1:n.timedOut?!0:Y(this,Sn,qr).call(this)>=n.endMs?(n.timedOut=!0,!0):!1}checkpointWithReserve(n){let o=rc(n,"checkpoint reserve"),t=w(this,Rn);return t===void 0?!1:t.timedOut?!0:Y(this,Sn,qr).call(this)+o>=t.endMs?(t.timedOut=!0,!0):!1}get cancelled(){return w(this,Rn)?.timedOut??!1}get cacheWriteAllowed(){return!this.checkpoint()}takePreviousTimeout(){if(w(this,Rn)!==void 0)return!1;let n=w(this,zr);return H(this,zr,!1),n}};Za=new WeakMap,Is=new WeakMap,Rn=new WeakMap,zr=new WeakMap,Sn=new WeakSet,nd=p(function(n){if(w(this,Rn)===void 0){H(this,Rn,{endMs:Y(this,Sn,qr).call(this)+n,timedOut:!1,nesting:1});return}w(this,Rn).nesting=Math.min(Number.MAX_SAFE_INTEGER,w(this,Rn).nesting+1)},"#enterDeadline"),od=p(function(){let n=w(this,Rn);n!==void 0&&(n.nesting<=1?(w(this,zr)||H(this,zr,n.timedOut),H(this,Rn,void 0)):n.nesting-=1)},"#exitDeadline"),td=p(function(n,o){let t;return this.withDeadlineIfAbsent(n,()=>{if(this.checkpoint())return;let r=o();this.checkpoint()||(t=r)}),t},"#runWithStandaloneSubdeadline"),Os=p(function(n){let o=Y(this,Sn,qr).call(this),t=w(this,Rn)===void 0||w(this,Rn).timedOut||o>=w(this,Rn).endMs;return o>=n.endMs&&(n.timedOut=!0),H(this,Rn,n),t},"#restoreOuterDeadline"),rd=p(function(n,o,t){if(this.checkpoint())return;let r={...n};if(n.endMs=Math.min(n.endMs,Y(this,Sn,qr).call(this)+o),this.checkpoint()){Y(this,Sn,Os).call(this,r);return}let a=!1;try{let i=t(),s=Y(this,Sn,Os).call(this,r);return a=!0,s?void 0:i}finally{a||Y(this,Sn,Os).call(this,r)}},"#runWithNestedSubdeadline"),qr=p(function(){let n=w(this,Za).call(this);if(!Number.isFinite(n))throw new RangeError("monotonic clock must return a finite number");return n},"#now"),p(ac,"SearchSession");var xs=ac;function ad(e,n,o){if(n.lifetime!=="engine")throw new TypeError("execution context requires an engine cache scope");return Object.freeze({session:e,caches:Object.freeze({session:e.caches,engine:n}),random:o})}p(ad,"createAutomoveExecutionContext");var gb=Object.freeze({nextUint32(){let e=new Uint32Array(1);return globalThis.crypto.getRandomValues(e),e[0]??0}}),$r,Ja,Xr,er,ic=class ic{constructor(n={}){X(this,$r);X(this,Ja);X(this,Xr,new Jt("engine"));X(this,er,!1);H(this,$r,n.clock),H(this,Ja,n.randomSource??gb)}run(n){w(this,er)&&(w(this,Xr).clear(),H(this,er,!1));let o=new xs(w(this,$r)===void 0?{}:{clock:w(this,$r)}),t=ad(o,w(this,Xr),w(this,Ja));try{return n(t)}finally{H(this,er,o.takePreviousTimeout()),t.caches.session.clear()}}clearCaches(){H(this,er,!1),w(this,Xr).clear()}};$r=new WeakMap,Ja=new WeakMap,Xr=new WeakMap,er=new WeakMap,p(ic,"AutomoveEngine");var Ns=ic;var id=Math.trunc(5.5),Yr=10;function nn(e,n){return{i:e,j:n}}p(nn,"location");function ge(e,n){return e.i===n.i&&e.j===n.j}p(ge,"locationEquals");function Oo(e){return Number.isInteger(e.i)&&Number.isInteger(e.j)&&e.i>=0&&e.i<11&&e.j>=0&&e.j<11}p(Oo,"isValidLocation");function nr(e){if(!Oo(e))throw new RangeError(`board location must use integer coordinates from 0 to ${Yr}`)}p(nr,"assertValidLocation");function Q(e){return nr(e),e.i*11+e.j}p(Q,"locationIndex");function Tt(e){if(!Number.isInteger(e)||e<0||e>=121)throw new RangeError("board location index must be an integer from 0 to 120");return nn(Math.trunc(e/11),e%11)}p(Tt,"fromLocationIndex");function or(e,n){return nn(Math.trunc((e.i+n.i)/2),Math.trunc((e.j+n.j)/2))}p(or,"locationBetween");function te(e,n){return Math.max(Math.abs(n.i-e.i),Math.abs(n.j-e.j))}p(te,"locationDistance");function sd(e,n){let o=[];for(let t=e.i-n;t<=e.i+n;t+=1)for(let r=e.j-n;r<=e.j+n;r+=1){let a=nn(t,r);Oo(a)&&!ge(a,e)&&o.push(a)}return o}p(sd,"nearbyLocationsFor");function ud(e,n){let o=[];for(let[t,r]of n){let a=nn(e.i+t,e.j+r);Oo(a)&&o.push(a)}return o}p(ud,"directionalReachabilityFor");function vb(e){let n=[];for(let o=-2;o<=2;o+=1)for(let t=-2;t<=2;t+=1){if(Math.max(Math.abs(o),Math.abs(t))!==2)continue;let r=nn(e.i+o,e.j+t);Oo(r)&&n.push(r)}return n}p(vb,"spiritReachabilityFor");function ei(e){return Object.freeze(Array.from({length:121},(n,o)=>Object.freeze(e(Tt(o)).map(t=>Object.freeze(t)))))}p(ei,"buildCache");var Ab=ei(e=>sd(e,1)),Eb=ei(e=>sd(e,3)),Ob=ei(e=>ud(e,[[-2,-2],[2,2],[-2,2],[2,-2]])),xb=ei(e=>ud(e,[[-2,0],[2,0],[0,2],[0,-2]])),Ib=ei(vb);function ni(e,n){return Oo(n)?e[Q(n)]??[]:[]}p(ni,"cachedLocations");function we(e){return ni(Ab,e)}p(we,"nearbyLocations");function Qr(e){return ni(Eb,e)}p(Qr,"bombReachableLocations");function at(e){return ni(Ob,e)}p(at,"mysticReachableLocations");function it(e){return ni(xb,e)}p(it,"demonReachableLocations");function st(e){return ni(Ib,e)}p(st,"spiritReachableLocations");var cd=Object.freeze(Array.from({length:121},(e,n)=>Object.freeze(Tt(n))));function Ds(e){if(!/^(?:0|[1-9]\d*)$/u.test(e))return;let n=Number(e);return Number.isSafeInteger(n)?n:void 0}p(Ds,"parseNonnegativeInteger");function tr(e){for(let n=0;n<e.length;n+=1)if(e.charCodeAt(n)>127)return!1;return!0}p(tr,"isAscii");function pd(e){if(!tr(e)||e.length===0||e.startsWith(" ")||e.endsWith(" ")||e.includes(" "))return;let n=e.split(" ");return n.some(o=>o.length===0)?void 0:n}p(pd,"splitGameFenFields");function Oe(e){return`${e.i},${e.j}`}p(Oe,"locationFen");function ld(e){let n=e.split(",");if(n.length!==2)return;let o=n[0],t=n[1];if(o===void 0||t===void 0)return;let r=Ds(o),a=Ds(t);if(r===void 0||a===void 0)return;let i={i:r,j:a};return Oo(i)?i:void 0}p(ld,"parseLocationFen");var T=Object.freeze({White:"white",Black:"black"}),ce=Object.freeze({Classic:"Classic",SwappedManaRows:"SwappedManaRows",OffsetArcManaRows:"OffsetArcManaRows",CenterSpokeManaRows:"CenterSpokeManaRows",AlternatingManaRows:"AlternatingManaRows",InnerWedgeManaRows:"InnerWedgeManaRows",OuterWedgeManaRows:"OuterWedgeManaRows",BentCenterManaRows:"BentCenterManaRows",OuterEdgeManaRows:"OuterEdgeManaRows",SplitFlankManaRows:"SplitFlankManaRows",ForwardBridgeManaRows:"ForwardBridgeManaRows",CornerChainManaRows:"CornerChainManaRows"}),A=Object.freeze({Demon:"demon",Drainer:"drainer",Angel:"angel",Spirit:"spirit",Mystic:"mystic"}),j=Object.freeze({Potion:"potion",Bomb:"bomb",BombOrPotion:"bomb-or-potion"}),on=Object.freeze({SelectPotion:"select-potion",SelectBomb:"select-bomb"}),sc=Object.freeze({Random:"random",Fast:"fast",Normal:"normal",Pro:"pro"});var Nb=Object.freeze({[T.White]:0,[T.Black]:1});function Vn(e){return Nb[e]}p(Vn,"colorId");var Dw=Object.freeze({[A.Demon]:0,[A.Drainer]:1,[A.Angel]:2,[A.Spirit]:3,[A.Mystic]:4}),Yn=Object.freeze({MonMove:"mon-move",ManaMove:"mana-move",Action:"action",Potion:"potion"}),pc=Object.freeze({[on.SelectPotion]:0,[on.SelectBomb]:1}),be=Object.freeze({MonMove:"mon-move",ManaMove:"mana-move",MysticAction:"mystic-action",DemonAction:"demon-action",DemonAdditionalStep:"demon-additional-step",SpiritTargetCapture:"spirit-target-capture",SpiritTargetMove:"spirit-target-move",SelectConsumable:"select-consumable",BombAttack:"bomb-attack"}),Ho=4,gt=Object.freeze({kind:"supermana"});function q(e){return e===T.Black?T.White:T.Black}p(q,"otherColor");function ar(e,n,o){if(!Number.isInteger(o)||o<0||o>2)throw new RangeError("mon cooldown must be an integer from 0 through 2");return Object.freeze({kind:e,color:n,cooldown:o})}p(ar,"createMon");function uc(e,n){return e.kind===n.kind&&e.color===n.color&&e.cooldown===n.cooldown}p(uc,"monEquals");function U(e){return e.cooldown>0}p(U,"isMonFainted");function md(e){return ar(e.kind,e.color,2)}p(md,"faintMon");function fd(e){return e.cooldown>0?ar(e.kind,e.color,e.cooldown-1):So(e)}p(fd,"decreaseMonCooldown");function ea(e){return Object.freeze({kind:"regular",color:e})}p(ea,"regularMana");function je(e,n){return e.kind==="supermana"?n.kind==="supermana":n.kind==="regular"&&e.color===n.color}p(je,"manaEquals");function xe(e,n){return e.kind==="supermana"?2:e.color===n?1:2}p(xe,"manaScore");function xn(e){return Object.freeze({kind:"mon",mon:So(e)})}p(xn,"monItem");function Uo(e){return Object.freeze({kind:"mana",mana:Zr(e)})}p(Uo,"manaItem");function xo(e,n){return Object.freeze({kind:"mon-with-mana",mon:So(e),mana:Zr(n)})}p(xo,"monWithManaItem");function oi(e,n){return Object.freeze({kind:"mon-with-consumable",mon:So(e),consumable:n})}p(oi,"monWithConsumableItem");function ti(e){return Object.freeze({kind:"consumable",consumable:e})}p(ti,"consumableItem");function So(e){return Object.isFrozen(e)?e:ar(e.kind,e.color,e.cooldown)}p(So,"immutableMon");function Zr(e){return e.kind==="supermana"?gt:Object.isFrozen(e)?e:ea(e.color)}p(Zr,"immutableMana");function rr(e){switch(e.kind){case"mon":return Object.isFrozen(e)&&Object.isFrozen(e.mon)?e:xn(e.mon);case"mana":return Object.isFrozen(e)&&Object.isFrozen(e.mana)?e:Uo(e.mana);case"mon-with-mana":return Object.isFrozen(e)&&Object.isFrozen(e.mon)&&Object.isFrozen(e.mana)?e:xo(e.mon,e.mana);case"mon-with-consumable":return Object.isFrozen(e)&&Object.isFrozen(e.mon)?e:oi(e.mon,e.consumable);case"consumable":return Object.isFrozen(e)?e:ti(e.consumable)}}p(rr,"immutableItem");function Ne(e){return{i:e.i,j:e.j}}p(Ne,"copyLocation");function Db(e){switch(e.kind){case"takeback":return{kind:"takeback"};case"location":return{kind:"location",location:Ne(e.location)};case"modifier":return{kind:"modifier",modifier:e.modifier}}}p(Db,"copyInput");function ri(e){let n=Db(e.input);return e.actorMonItem===void 0?{input:n,kind:e.kind}:{input:n,kind:e.kind,actorMonItem:rr(e.actorMonItem)}}p(ri,"copyNextInput");function na(e){switch(e.kind){case"mon-move":return{kind:"mon-move",item:rr(e.item),from:Ne(e.from),to:Ne(e.to)};case"mana-move":return{kind:"mana-move",mana:Zr(e.mana),from:Ne(e.from),to:Ne(e.to)};case"mana-scored":return{kind:"mana-scored",mana:Zr(e.mana),at:Ne(e.at)};case"mystic-action":return{kind:"mystic-action",mystic:So(e.mystic),from:Ne(e.from),to:Ne(e.to)};case"demon-action":return{kind:"demon-action",demon:So(e.demon),from:Ne(e.from),to:Ne(e.to)};case"demon-additional-step":return{kind:"demon-additional-step",demon:So(e.demon),from:Ne(e.from),to:Ne(e.to)};case"spirit-target-move":return{kind:"spirit-target-move",item:rr(e.item),from:Ne(e.from),to:Ne(e.to),by:Ne(e.by)};case"pickup-bomb":return{kind:"pickup-bomb",by:So(e.by),at:Ne(e.at)};case"pickup-potion":return{kind:"pickup-potion",by:rr(e.by),at:Ne(e.at)};case"use-potion":return{kind:"use-potion",from:Ne(e.from),to:Ne(e.to)};case"pickup-mana":return{kind:"pickup-mana",mana:Zr(e.mana),by:So(e.by),at:Ne(e.at)};case"mon-fainted":return{kind:"mon-fainted",mon:So(e.mon),from:Ne(e.from),to:Ne(e.to)};case"mana-dropped":return{kind:"mana-dropped",mana:Zr(e.mana),at:Ne(e.at)};case"supermana-back-to-base":return{kind:"supermana-back-to-base",from:Ne(e.from),to:Ne(e.to)};case"bomb-attack":return{kind:"bomb-attack",by:So(e.by),from:Ne(e.from),to:Ne(e.to)};case"mon-awake":return{kind:"mon-awake",mon:So(e.mon),at:Ne(e.at)};case"bomb-explosion":return{kind:"bomb-explosion",at:Ne(e.at)};case"next-turn":return{kind:"next-turn",color:e.color};case"game-over":return{kind:"game-over",winner:e.winner};case"takeback":return{kind:"takeback"}}}p(na,"copyEvent");function lc(e){switch(e.kind){case"invalid-input":return{kind:"invalid-input"};case"locations-to-start-from":return{kind:"locations-to-start-from",locations:e.locations.map(Ne)};case"next-input-options":return{kind:"next-input-options",nextInputs:e.nextInputs.map(ri)};case"events":return{kind:"events",events:e.events.map(na)}}}p(lc,"copyOutput");function K(e){switch(e.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return e.mon;case"mana":case"consumable":return}}p(K,"itemMon");function ut(e){let n=K(e);return n===void 0||!U(n)}p(ut,"isSpiritTargetAllowed");function Qn(e){switch(e.kind){case"mana":case"mon-with-mana":return e.mana;case"mon":case"mon-with-consumable":case"consumable":return}}p(Qn,"itemMana");function ir(e){switch(e.kind){case"mon-with-consumable":case"consumable":return e.consumable;case"mon":case"mana":case"mon-with-mana":return}}p(ir,"itemConsumable");function yd(e,n){switch(e.kind){case"mon":return n.kind==="mon"&&uc(e.mon,n.mon);case"mana":return n.kind==="mana"&&je(e.mana,n.mana);case"mon-with-mana":return n.kind==="mon-with-mana"&&uc(e.mon,n.mon)&&je(e.mana,n.mana);case"mon-with-consumable":return n.kind==="mon-with-consumable"&&uc(e.mon,n.mon)&&e.consumable===n.consumable;case"consumable":return n.kind==="consumable"&&e.consumable===n.consumable}}p(yd,"itemEquals");function cc(e){return`${e.kind}:${e.color}:${e.cooldown}`}p(cc,"monKey");function dd(e){return e.kind==="supermana"?"s":`r:${e.color}`}p(dd,"manaKey");function ai(e){switch(e.kind){case"mon":return`m:${cc(e.mon)}`;case"mana":return`a:${dd(e.mana)}`;case"mon-with-mana":return`mm:${cc(e.mon)}:${dd(e.mana)}`;case"mon-with-consumable":return`mc:${cc(e.mon)}:${e.consumable}`;case"consumable":return`c:${e.consumable}`}}p(ai,"itemKey");function Jr(e){switch(e.kind){case"takeback":return"t";case"location":return`l:${e.location.i}:${e.location.j}`;case"modifier":return`m:${e.modifier}`}}p(Jr,"inputKey");function hn(e){return e.map(Jr).join(";")}p(hn,"inputChainKey");function vt(e,n){return Jr(e)===Jr(n)}p(vt,"inputEquals");function pe(e,n){let o=e[0],t=n[0];return o!==void 0&&t!==void 0&&vt(o,t)}p(pe,"inputChainsShareFirstInput");function ue(e,n){return e.length===n.length&&e.every((o,t)=>{let r=n[t];return r!==void 0&&vt(o,r)})}p(ue,"inputChainsEqual");function ii(e){return e===T.White?"w":"b"}p(ii,"colorFen");function Cd(e){switch(e){case"w":return T.White;case"b":return T.Black;default:return}}p(Cd,"parseColorFen");function ho(e){if(!Number.isInteger(e.cooldown)||e.cooldown<0||e.cooldown>2)throw new RangeError("mon cooldown must be an integer from 0 through 2");let n=(()=>{switch(e.kind){case A.Demon:return"e";case A.Drainer:return"d";case A.Angel:return"a";case A.Spirit:return"s";case A.Mystic:return"y"}})();return`${e.color===T.White?n.toUpperCase():n}${e.cooldown}`}p(ho,"monFen");function Wb(e){if(!/^[A-Za-z][0-2]$/u.test(e))return;let n=e[0],o=e[1];if(n===void 0||o===void 0)return;let t=(()=>{switch(n.toLowerCase()){case"e":return A.Demon;case"d":return A.Drainer;case"a":return A.Angel;case"s":return A.Spirit;case"y":return A.Mystic;default:return}})();if(t!==void 0)return ar(t,n===n.toUpperCase()?T.White:T.Black,o.charCodeAt(0)-48)}p(Wb,"parseMonFen");function sr(e){return e.kind==="supermana"?"U":e.color===T.White?"M":"m"}p(sr,"manaFen");function Sd(e){switch(e){case"M":return ea(T.White);case"m":return ea(T.Black);case"U":return gt;default:return}}p(Sd,"parseManaFen");function hd(e){switch(e){case j.Potion:return"P";case j.Bomb:return"B";case j.BombOrPotion:return"Q"}}p(hd,"consumableFen");function bd(e){switch(e){case"P":return j.Potion;case"B":return j.Bomb;case"Q":return j.BombOrPotion;default:return}}p(bd,"parseConsumableFen");function oa(e){switch(e.kind){case"mon":return`${ho(e.mon)}x`;case"mana":return`xx${sr(e.mana)}`;case"mon-with-mana":return`${ho(e.mon)}${sr(e.mana)}`;case"mon-with-consumable":return`${ho(e.mon)}${hd(e.consumable)}`;case"consumable":return`xx${hd(e.consumable)}`}}p(oa,"itemFen");function Md(e){if(e.length!==3||!tr(e))return;let n=e.slice(0,2),o=e.slice(2);if(n==="xx"){let i=Sd(o);if(i!==void 0)return Uo(i);let s=bd(o);return s===void 0?void 0:ti(s)}let t=Wb(n);if(t===void 0)return;let r=Sd(o);if(r!==void 0)return xo(t,r);let a=bd(o);return a!==void 0?oi(t,a):o==="x"?xn(t):void 0}p(Md,"parseItemFen");var ct=ce.Classic,Ee=5,fe=5,ta=1,Hn=1,dc=Object.freeze([ce.Classic,ce.SwappedManaRows,ce.OffsetArcManaRows,ce.CenterSpokeManaRows,ce.AlternatingManaRows,ce.InnerWedgeManaRows,ce.OuterWedgeManaRows,ce.BentCenterManaRows,ce.OuterEdgeManaRows,ce.SplitFlankManaRows,ce.ForwardBridgeManaRows,ce.CornerChainManaRows]),Pd=Object.freeze({[ce.Classic]:0,[ce.SwappedManaRows]:1,[ce.OffsetArcManaRows]:2,[ce.CenterSpokeManaRows]:3,[ce.AlternatingManaRows]:4,[ce.InnerWedgeManaRows]:5,[ce.OuterWedgeManaRows]:6,[ce.BentCenterManaRows]:7,[ce.OuterEdgeManaRows]:8,[ce.SplitFlankManaRows]:9,[ce.ForwardBridgeManaRows]:10,[ce.CornerChainManaRows]:11}),Fb=new Map(dc.map(e=>[Pd[e],e]));function si(e){return Pd[e]}p(si,"gameVariantId");function ze(...e){return Object.freeze(e.map(([n,o])=>Object.freeze(nn(n,o))))}p(ze,"locations");function bo(e,n){return Object.freeze({[T.Black]:e,[T.White]:n})}p(bo,"manaLayout");var Bb=Object.freeze({[ce.Classic]:bo(ze([3,4],[3,6],[4,3],[4,5],[4,7]),ze([7,4],[7,6],[6,3],[6,5],[6,7])),[ce.SwappedManaRows]:bo(ze([3,3],[3,5],[3,7],[4,4],[4,6]),ze([7,3],[7,5],[7,7],[6,4],[6,6])),[ce.OffsetArcManaRows]:bo(ze([3,4],[3,6],[4,2],[4,5],[4,8]),ze([6,2],[6,5],[6,8],[7,4],[7,6])),[ce.CenterSpokeManaRows]:bo(ze([3,5],[4,2],[4,4],[4,6],[4,8]),ze([6,2],[6,4],[6,6],[6,8],[7,5])),[ce.AlternatingManaRows]:bo(ze([4,1],[4,3],[4,5],[4,7],[4,9]),ze([6,1],[6,3],[6,5],[6,7],[6,9])),[ce.InnerWedgeManaRows]:bo(ze([3,4],[3,6],[4,4],[4,5],[4,6]),ze([6,4],[6,5],[6,6],[7,4],[7,6])),[ce.OuterWedgeManaRows]:bo(ze([3,4],[3,5],[3,6],[4,3],[4,7]),ze([6,3],[6,7],[7,4],[7,5],[7,6])),[ce.BentCenterManaRows]:bo(ze([3,5],[4,4],[4,5],[4,6],[5,3]),ze([5,7],[6,4],[6,5],[6,6],[7,5])),[ce.OuterEdgeManaRows]:bo(ze([4,0],[4,1],[4,9],[4,10],[5,1]),ze([5,9],[6,0],[6,1],[6,9],[6,10])),[ce.SplitFlankManaRows]:bo(ze([3,4],[3,6],[4,2],[4,3],[5,2]),ze([5,8],[6,7],[6,8],[7,4],[7,6])),[ce.ForwardBridgeManaRows]:bo(ze([3,4],[3,6],[4,3],[4,5],[5,4]),ze([5,6],[6,5],[6,7],[7,4],[7,6])),[ce.CornerChainManaRows]:bo(ze([3,5],[3,6],[4,6],[4,7],[5,7]),ze([5,3],[6,3],[6,4],[7,4],[7,5]))}),wd=Object.freeze({kind:"regular"}),kd=Object.freeze({kind:"consumable-base"}),_b=Object.freeze({kind:"supermana-base"}),mc=Object.freeze(nn(5,5)),ui=ze([0,3],[0,4],[0,5],[0,6],[0,7],[10,3],[10,4],[10,5],[10,6],[10,7]);function Gb(e){return Number.isSafeInteger(e)?Fb.get(e):void 0}p(Gb,"gameVariantFromId");function Td(e){if(/^(?:0|[1-9]\d*)$/u.test(e))return Gb(Number(e))}p(Td,"parseGameVariant");function Rd(e,n){return Bb[e][n]}p(Rd,"manaBaseLocations");function Lb(e){let n=Array.from({length:121}).fill(wd),o=p((t,r)=>{n[Q(t)]=Object.freeze(r)},"put");o(nn(0,0),{kind:"mana-pool",color:T.Black}),o(nn(0,10),{kind:"mana-pool",color:T.Black}),o(nn(10,0),{kind:"mana-pool",color:T.White}),o(nn(10,10),{kind:"mana-pool",color:T.White}),o(nn(0,3),{kind:"mon-base",monKind:A.Mystic,color:T.Black}),o(nn(0,4),{kind:"mon-base",monKind:A.Spirit,color:T.Black}),o(nn(0,5),{kind:"mon-base",monKind:A.Drainer,color:T.Black}),o(nn(0,6),{kind:"mon-base",monKind:A.Angel,color:T.Black}),o(nn(0,7),{kind:"mon-base",monKind:A.Demon,color:T.Black}),o(nn(10,3),{kind:"mon-base",monKind:A.Demon,color:T.White}),o(nn(10,4),{kind:"mon-base",monKind:A.Angel,color:T.White}),o(nn(10,5),{kind:"mon-base",monKind:A.Drainer,color:T.White}),o(nn(10,6),{kind:"mon-base",monKind:A.Spirit,color:T.White}),o(nn(10,7),{kind:"mon-base",monKind:A.Mystic,color:T.White});for(let t of Rd(e,T.Black))o(t,{kind:"mana-base",color:T.Black});for(let t of Rd(e,T.White))o(t,{kind:"mana-base",color:T.White});return o(nn(5,0),kd),o(nn(5,10),kd),o(mc,_b),Object.freeze(n)}p(Lb,"buildSquares");var Vb=new Map(dc.map(e=>[e,Lb(e)]));function gd(e){let n=Vb.get(e);if(n===void 0)throw new TypeError(`unsupported game variant: ${e}`);return n}p(gd,"squaresForVariant");function fc(e,n){return nr(e),gd(n)[Q(e)]??wd}p(fc,"squareAtForVariant");function Hb(e){return fc(e,ct)}p(Hb,"squareAt");function Ub(e){switch(e.kind){case"mon-base":return xn(ar(e.monKind,e.color,0));case"mana-base":return Uo(ea(e.color));case"supermana-base":return Uo(gt);case"consumable-base":return ti(j.BombOrPotion);case"regular":case"mana-pool":return}}p(Ub,"initialItemForSquare");function jb(e){return Object.freeze(gd(e).map(Ub))}p(jb,"buildInitialItems");var Kb=new Map(dc.map(e=>[e,jb(e)]));function vd(e){let n=Kb.get(e);if(n===void 0)throw new TypeError(`unsupported game variant: ${e}`);return[...n]}p(vd,"initialItemsForVariant");function Ad(e,n){for(let o of ui){let t=Hb(o);if(t.kind==="mon-base"&&t.monKind===e&&t.color===n)return o}throw new Error("Expected at least one base for the given mon")}p(Ad,"monBase");var yc=class yc{constructor(n=ct,o,t,r=!1){he(this,"variant",n);he(this,"storage");if(t!==void 0){this.storage=t;return}let a=o??vd(n);if(a.length!==121)throw new RangeError(`board requires exactly ${121} item slots`);this.storage={itemSlots:o===void 0||r?[...a]:a.map(i=>i===void 0?void 0:rr(i)),occupiedEntries:void 0}}get items(){return[...this.storage.itemSlots]}static fromItems(n,o){return new ra(o,n)}fork(){let n=new ra(this.variant,this.storage.itemSlots,void 0,!0);return n.storage.occupiedEntries=this.getOccupiedEntries(),n}get(n){if(Oo(n))return this.storage.itemSlots[Q(n)]}squareAt(n){return nr(n),fc(n,this.variant)}allMonsBases(){return ui}supermanaBase(){return mc}allMonsLocations(n){let o=[];for(let t=0;t<121;t+=1){let r=this.storage.itemSlots[t];r!==void 0&&K(r)?.color===n&&o.push(Tt(t))}return o}allFreeRegularManaLocations(n){let o=[];for(let t=0;t<121;t+=1){let r=this.storage.itemSlots[t];r?.kind==="mana"&&r.mana.kind==="regular"&&r.mana.color===n&&o.push(Tt(t))}return o}base(n){return Ad(n.kind,n.color)}faintedMonsLocations(n){let o=[];for(let t=0;t<121;t+=1){let r=this.storage.itemSlots[t];r?.kind==="mon"&&r.mon.color===n&&U(r.mon)&&o.push(Tt(t))}return o}findMana(n){for(let o=0;o<121;o+=1){let t=this.storage.itemSlots[o];if(t?.kind==="mana"&&t.mana.kind==="regular"&&t.mana.color===n)return Tt(o)}}findAwakeAngel(n){for(let o=0;o<121;o+=1){let t=this.storage.itemSlots[o],r=t===void 0?void 0:K(t);if(r?.color===n&&r.kind===A.Angel&&!U(r))return Tt(o)}}itemsEqual(n){for(let o=0;o<121;o+=1){let t=this.storage.itemSlots[o],r=n.storage.itemSlots[o];if(t===void 0||r===void 0){if(t!==r)return!1}else if(!yd(t,r))return!1}return!0}getOccupiedEntries(){if(this.storage.occupiedEntries!==void 0)return this.storage.occupiedEntries;let n=[];for(let o=0;o<121;o+=1){let t=this.storage.itemSlots[o];if(t!==void 0){let r=cd[o];r!==void 0&&n.push([r,t])}}return this.storage.occupiedEntries=n,n}entries(){return this.getOccupiedEntries().values()}};p(yc,"Board");var At=yc,ci,Sc=class Sc extends At{constructor(){super(...arguments);X(this,ci)}delete(o){nr(o),this.storage.itemSlots[Q(o)]=void 0,this.storage.occupiedEntries=void 0}set(o,t){nr(o),this.storage.itemSlots[Q(o)]=rr(t),this.storage.occupiedEntries=void 0}readonlyView(){return w(this,ci)??H(this,ci,new At(this.variant,void 0,this.storage)),w(this,ci)}};ci=new WeakMap,p(Sc,"MutableBoard");var ra=Sc;function Ed(e,n){return e.variant!==n.variant?!1:e.itemsEqual(n)}p(Ed,"boardEquals");var Od=Ee+1;function Id(e){let n=[];for(let o=0;o<11;o+=1){let t="",r=0;for(let a=0;a<11;a+=1){let i=e.get({i:o,j:a});if(i===void 0){r+=1;continue}r>0&&(t+=xd(r),r=0),t+=oa(i)}r>0&&(t+=xd(r)),n.push(t)}return n.join("/")}p(Id,"boardFen");function Nd(e,n){if(!tr(e))return;let o=e.split("/");if(o.length!==11)return;let t=Array.from({length:121},()=>{});for(let[r,a]of o.entries()){let i=0,s=0,u=!1;for(;i<a.length;){if(a[i]==="n"){if(u)return;let m=a.slice(i+1,i+3);if(!/^\d{2}$/u.test(m))return;let d=Number(m);if(d<1||s+d>11)return;s+=d,i+=3,u=!0;continue}let c=a.slice(i,i+3);if(c.length!==3||s>=11)return;let l=Md(c);if(l===void 0)return;t[r*11+s]=l,s+=1,i+=3,u=!1}if(s!==11)return}return At.fromItems(t,n)}p(Nd,"parseBoardFen");function hc(e){let n=[e.whiteScore,e.blackScore,ii(e.activeColor),e.actionsUsedCount,e.manaMovesCount,e.monsMovesCount,e.whitePotionsCount,e.blackPotionsCount,e.turnNumber,Id(e.board)].map(String),o=e.board.variant;return o!==ct&&n.push(String(si(o))),n.join(" ")}p(hc,"gameFen");function bc(e){let n=pd(e);if(n===void 0||n.length!==10&&n.length!==11)return;let o=n.length===10?ct:Td(n[10]??"");if(o===void 0||n.length===11&&o===ct)return;let t=n[9],r=n[2];if(t===void 0||r===void 0)return;let a=Nd(t,o),i=Cd(r);if(a===void 0||i===void 0)return;let s=[n[0],n[1],n[3],n[4],n[5],n[6],n[7],n[8]].map(C=>Ds(C??""));if(s.some(C=>C===void 0))return;let[u,c,l,m,d,y,f,h]=s;if(!(u===void 0||c===void 0||l===void 0||m===void 0||d===void 0||y===void 0||f===void 0||h===void 0||u>Od||c>Od||l>Hn||m>ta||d>fe||h<1))return{board:a,whiteScore:u,blackScore:c,activeColor:i,actionsUsedCount:l,manaMovesCount:m,monsMovesCount:d,whitePotionsCount:y,blackPotionsCount:f,turnNumber:h}}p(bc,"parseGameFen");function xd(e){return`n${String(e).padStart(2,"0")}`}p(xd,"emptyRunFen");function Dd(e){switch(e){case on.SelectPotion:return"p";case on.SelectBomb:return"b"}}p(Dd,"modifierFen");function Wd(e){switch(e){case"p":return on.SelectPotion;case"b":return on.SelectBomb;default:return}}p(Wd,"parseModifierFen");function Fd(e){switch(e.kind){case"takeback":return"z";case"location":return`l${Oe(e.location)}`;case"modifier":return`m${Dd(e.modifier)}`}}p(Fd,"inputFen");function Bd(e){switch(e[0]){case"l":{let n=ld(e.slice(1));return n===void 0?void 0:{kind:"location",location:n}}case"m":{let n=Wd(e.slice(1));return n===void 0?void 0:{kind:"modifier",modifier:n}}case"z":return e==="z"?{kind:"takeback"}:void 0;default:return}}p(Bd,"parseInputFen");function Et(e){return e.map(Fd).join(";")}p(Et,"inputArrayFen");function Ot(e){if(!tr(e))return;if(e==="")return[];let n=[];for(let o of e.split(";")){if(n.length===Ho)return;let t=Bd(o);if(t===void 0)return;n.push(t)}return n}p(Ot,"parseInputArrayFen");function _d(e){switch(e.kind){case"mon-move":return`mm ${oa(e.item)} ${Oe(e.from)} ${Oe(e.to)}`;case"mana-move":return`mma ${sr(e.mana)} ${Oe(e.from)} ${Oe(e.to)}`;case"mana-scored":return`ms ${sr(e.mana)} ${Oe(e.at)}`;case"mystic-action":return`ma ${ho(e.mystic)} ${Oe(e.from)} ${Oe(e.to)}`;case"demon-action":return`da ${ho(e.demon)} ${Oe(e.from)} ${Oe(e.to)}`;case"demon-additional-step":return`das ${ho(e.demon)} ${Oe(e.from)} ${Oe(e.to)}`;case"spirit-target-move":return`stm ${oa(e.item)} ${Oe(e.from)} ${Oe(e.to)} ${Oe(e.by)}`;case"pickup-bomb":return`pb ${ho(e.by)} ${Oe(e.at)}`;case"pickup-potion":return`pp ${oa(e.by)} ${Oe(e.at)}`;case"use-potion":return`up ${Oe(e.from)} ${Oe(e.to)}`;case"pickup-mana":return`pm ${sr(e.mana)} ${ho(e.by)} ${Oe(e.at)}`;case"mon-fainted":return`mf ${ho(e.mon)} ${Oe(e.from)} ${Oe(e.to)}`;case"mana-dropped":return`md ${sr(e.mana)} ${Oe(e.at)}`;case"supermana-back-to-base":return`sb ${Oe(e.from)} ${Oe(e.to)}`;case"bomb-attack":return`ba ${ho(e.by)} ${Oe(e.from)} ${Oe(e.to)}`;case"mon-awake":return`maw ${ho(e.mon)} ${Oe(e.at)}`;case"bomb-explosion":return`be ${Oe(e.at)}`;case"next-turn":return`nt ${ii(e.color)}`;case"game-over":return`go ${ii(e.winner)}`;case"takeback":return"z"}}p(_d,"eventFen");function Cc(e){return e.map(_d).join(" ")}p(Cc,"eventArrayFen");function Fs(e){return e.whiteScore>=Ee?T.White:e.blackScore>=Ee?T.Black:void 0}p(Fs,"winnerForState");function Be(e,n){return n===T.White?e.whiteScore:e.blackScore}p(Be,"scoreForColor");function ur(e){return e.turnNumber===1}p(ur,"isFirstTurnState");function Mc(e){return e.activeColor===T.White?e.whitePotionsCount:e.blackPotionsCount}p(Mc,"currentPlayerPotions");function Ws(e){return e.monsMovesCount<fe}p(Ws,"canPlayerMoveMon");function kc(e){return!ur(e)&&e.manaMovesCount<ta}p(kc,"canPlayerMoveMana");function Gd(e){return!ur(e)&&(Mc(e)>0||e.actionsUsedCount<Hn)}p(Gd,"canPlayerUseAction");function Ld(e){return ur(e)&&!Ws(e)||!ur(e)&&!kc(e)||!ur(e)&&!Ws(e)&&e.board.findMana(e.activeColor)===void 0}p(Ld,"shouldAdvanceTurn");function aa(e,n=1){let o=e+n;return Number.isSafeInteger(o)?o:void 0}p(aa,"incrementSafe");function qb(e,n){if(e.actionsUsedCount<Hn)return e.actionsUsedCount+=1,!0;if(n===T.White){if(e.whitePotionsCount<=0)return!1;e.whitePotionsCount-=1}else{if(e.blackPotionsCount<=0)return!1;e.blackPotionsCount-=1}return!0}p(qb,"consumeActionForPreflight");function Pc(e,n){let o={actionsUsedCount:e.actionsUsedCount,manaMovesCount:e.manaMovesCount,monsMovesCount:e.monsMovesCount,whitePotionsCount:e.whitePotionsCount,blackPotionsCount:e.blackPotionsCount,whiteScore:e.whiteScore,blackScore:e.blackScore};for(let r of n)switch(r.kind){case"mon-move":{let a=aa(o.monsMovesCount);if(a===void 0)return!1;o.monsMovesCount=a;break}case"mana-move":{let a=aa(o.manaMovesCount);if(a===void 0)return!1;o.manaMovesCount=a;break}case"mana-scored":{let a=xe(r.mana,e.activeColor);if(e.activeColor===T.White){let i=aa(o.whiteScore,a);if(i===void 0)return!1;o.whiteScore=i}else{let i=aa(o.blackScore,a);if(i===void 0)return!1;o.blackScore=i}break}case"mystic-action":case"demon-action":case"spirit-target-move":if(!qb(o,e.activeColor))return!1;break;case"pickup-potion":{let a=K(r.by);if(a===void 0)break;if(a.color===T.White){let i=aa(o.whitePotionsCount);if(i===void 0)return!1;o.whitePotionsCount=i}else{let i=aa(o.blackPotionsCount);if(i===void 0)return!1;o.blackPotionsCount=i}break}case"demon-additional-step":case"pickup-bomb":case"use-potion":case"pickup-mana":case"mon-fainted":case"mana-dropped":case"supermana-back-to-base":case"bomb-attack":case"mon-awake":case"bomb-explosion":case"next-turn":case"game-over":case"takeback":break}if(e.turnNumber<Number.MAX_SAFE_INTEGER)return!0;let t={...e,board:e.board.fork(),turnNumber:Number.MAX_SAFE_INTEGER-1};return!wc(t,n).turnAdvanced}p(Pc,"canApplyRulesEvents");function Rc(e,n,o,t){if(e.actionsUsedCount<Hn){e.actionsUsedCount+=1;return}e.activeColor===T.White?e.whitePotionsCount-=1:e.blackPotionsCount-=1,t.push({kind:"use-potion",from:n,to:o})}p(Rc,"consumeAction");function zb(e,n,o,t){switch(n.kind){case"mon-move":e.monsMovesCount+=1,e.board.delete(n.from),e.board.set(n.to,n.item);break;case"mana-move":e.manaMovesCount+=1,e.board.delete(n.from),e.board.set(n.to,Uo(n.mana));break;case"mana-scored":{let r=xe(n.mana,e.activeColor);e.activeColor===T.White?e.whiteScore+=r:e.blackScore+=r;let a=e.board.get(n.at);if(a!==void 0){let i=K(a);i===void 0?e.board.delete(n.at):e.board.set(n.at,xn(i))}break}case"mystic-action":Rc(e,n.from,n.to,t),e.board.delete(n.to);break;case"demon-action":{e.board.delete(n.from);let r=o.find(i=>i.kind==="demon-additional-step")?.to;r===void 0?e.board.set(n.to,xn(n.demon)):e.board.delete(n.to);let a=r??n.to;Rc(e,a,a,t);break}case"demon-additional-step":e.board.set(n.to,xn(n.demon));break;case"spirit-target-move":Rc(e,n.by,n.to,t),e.board.delete(n.from),e.board.set(n.to,n.item);break;case"pickup-bomb":e.board.set(n.at,oi(n.by,j.Bomb));break;case"pickup-potion":{let r=K(n.by);if(r===void 0)break;r.color===T.White?e.whitePotionsCount+=1:e.blackPotionsCount+=1,e.board.set(n.at,n.by);break}case"pickup-mana":e.board.set(n.at,xo(n.by,n.mana));break;case"mon-fainted":e.board.set(n.to,xn(md(n.mon)));break;case"mana-dropped":e.board.set(n.at,Uo(n.mana));break;case"supermana-back-to-base":{let r=e.board.get(n.to);e.board.set(n.to,r?.kind==="mon"?xo(r.mon,gt):Uo(gt));break}case"bomb-attack":e.board.delete(n.to),e.board.set(n.from,xn(n.by));break;case"bomb-explosion":e.board.delete(n.at);break;case"mon-awake":case"game-over":case"next-turn":case"takeback":case"use-potion":break}}p(zb,"applyEvent");function $b(e,n){e.activeColor=q(e.activeColor),e.turnNumber+=1,e.actionsUsedCount=0,e.manaMovesCount=0,e.monsMovesCount=0,n.push({kind:"next-turn",color:e.activeColor});for(let o of e.board.faintedMonsLocations(e.activeColor)){let t=e.board.get(o),r=t===void 0?void 0:K(t);if(r===void 0)continue;let a=fd(r);U(a)||n.push({kind:"mon-awake",mon:a,at:o}),e.board.set(o,xn(a))}}p($b,"advanceTurn");function wc(e,n){let o=[];for(let a of n)zb(e,a,n,o);let t=Fs(e),r=!1;return t!==void 0?o.push({kind:"game-over",winner:t}):Ld(e)&&($b(e,o),r=!0),{events:[...n,...o],turnAdvanced:r,winner:t}}p(wc,"applyRulesEvents");var pi=Object.freeze({startSuggestions:8,completionViability:16384,secondInputOptions:4096,secondStage:8192,thirdStage:8192});function Bs(e){return e===void 0?void 0:[e[0].map(na),e[1].map(ri)]}p(Bs,"copyStageResult");function li(e,n,o,t){e.size>=t&&!e.has(n)&&e.clear(),e.set(n,o)}p(li,"setBounded");var ia,sa,ua,cr,pr,Tc=class Tc{constructor(){X(this,ia,new Map);X(this,sa,new Map);X(this,ua,new Map);X(this,cr,new Map);X(this,pr,new Map)}invalidate(){w(this,ia).clear(),w(this,sa).clear(),w(this,ua).clear(),w(this,cr).clear(),w(this,pr).clear()}getStartSuggestion(n){let o=w(this,ia).get(n);return o===void 0?void 0:lc(o)}setStartSuggestion(n,o){li(w(this,ia),n,lc(o),pi.startSuggestions)}getCompletionViability(n){return w(this,sa).get(n)}setCompletionViability(n,o){li(w(this,sa),n,o,pi.completionViability)}getSecondInputOptions(n){let o=w(this,ua).get(n);return o===void 0?void 0:o.map(ri)}setSecondInputOptions(n,o){li(w(this,ua),n,o.map(ri),pi.secondInputOptions)}hasSecondStage(n){return w(this,cr).has(n)}getSecondStage(n){return Bs(w(this,cr).get(n))}setSecondStage(n,o){li(w(this,cr),n,Bs(o),pi.secondStage)}hasThirdStage(n){return w(this,pr).has(n)}getThirdStage(n){return Bs(w(this,pr).get(n))}setThirdStage(n,o){li(w(this,pr),n,Bs(o),pi.thirdStage)}};ia=new WeakMap,sa=new WeakMap,ua=new WeakMap,cr=new WeakMap,pr=new WeakMap,p(Tc,"RulesQueryCache");var _s=Tc;function di(e){return e.map(n=>({fen:n.fen,color:n.color,events:n.events.map(na)}))}p(di,"copyTrackingEntries");var mn,vn,Io,jo,Ko,mi=class mi{constructor(n=!1){X(this,mn,[]);X(this,vn,[]);X(this,Io,!0);X(this,jo);X(this,Ko,!0);H(this,jo,n)}get takebackFens(){return[...w(this,mn)]}get trackingEntries(){return di(w(this,vn))}get movesVerified(){return w(this,Io)}get verboseTrackingEnabled(){return w(this,jo)}copy(){let n=new mi(w(this,jo));return H(n,mn,[...w(this,mn)]),H(n,vn,di(w(this,vn))),H(n,Io,w(this,Io)),H(n,Ko,w(this,Ko)),n}fork(){let n=new mi(!1);return H(n,Io,w(this,Io)),H(n,Ko,!1),n}resetForLoadedFen(){H(this,mn,[]),H(this,vn,[]),H(this,Io,!1)}resetForBoardReplacement(){H(this,mn,[]),H(this,vn,[]),H(this,Io,!1)}replace(n){n.takebackFens!==void 0&&H(this,mn,[...n.takebackFens]),n.trackingEntries!==void 0&&H(this,vn,di(n.trackingEntries)),n.movesVerified!==void 0&&H(this,Io,n.movesVerified),n.verboseTrackingEnabled!==void 0&&(H(this,jo,n.verboseTrackingEnabled),n.verboseTrackingEnabled||H(this,vn,[]))}setTakebackTracking(n){H(this,Ko,n),n||H(this,mn,[])}setVerboseTracking(n){H(this,jo,n),n||H(this,vn,[])}clearTracking(){H(this,mn,[]),H(this,vn,[])}canTakeback(n,o){return w(this,Ko)&&w(this,mn).length>1&&n===o}prepareTakeback(n,o){if(!this.canTakeback(n,o))return;let t=w(this,mn)[w(this,mn).length-2];if(t!==void 0)return{previousFen:t,takebackFens:w(this,mn).slice(0,-1),trackingEntries:di(w(this,vn).slice(0,-1))}}commitTakeback(n){H(this,mn,[...n.takebackFens]),H(this,vn,di(n.trackingEntries))}beginEventApplication(n,o){if(!w(this,Ko)||w(this,mn).length!==0)return;let t=n();w(this,mn).push(t),w(this,jo)&&w(this,vn).length===0&&w(this,vn).push({fen:t,color:o,events:[]})}completeEventApplication(n){let o,t=p(()=>o??(o=n.snapshotFen()),"snapshotFen");w(this,Ko)&&(n.winner!==void 0?H(this,mn,[]):n.turnAdvanced?H(this,mn,[t()]):w(this,mn).push(t())),w(this,jo)&&w(this,vn).push({fen:t(),color:n.color,events:n.events.map(na)})}};mn=new WeakMap,vn=new WeakMap,Io=new WeakMap,jo=new WeakMap,Ko=new WeakMap,p(mi,"GameHistory");var Gs=mi;var Xb=Object.freeze({includeManaStartsWithPotionAction:!1}),In=Object.freeze({includeManaStartsWithPotionAction:!0});function Zn(e,n,o){let t={input:e,kind:n};return o===void 0?t:{...t,actorMonItem:o}}p(Zn,"nextInput");function fi(e){switch(e.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":case"mon-base":return!1}}p(fi,"regularSquareForMovement");var _e,tn,An,le,ca,qo,yi,Vd,pa,Hd,Ls,Vs,Ud,jd,Kd,qd,zd,$d,Hs,gc,Co=class Co{constructor(n=!1,o=ct,t){X(this,le);X(this,_e);X(this,tn);X(this,An);let r=t===void 0?new ra(o):t.fork();H(this,_e,{board:r,whiteScore:0,blackScore:0,activeColor:T.White,actionsUsedCount:0,manaMovesCount:0,monsMovesCount:0,whitePotionsCount:0,blackPotionsCount:0,turnNumber:1}),H(this,tn,new Gs(n)),H(this,An,new _s)}get board(){return w(this,_e).board.readonlyView()}get whiteScore(){return w(this,_e).whiteScore}get blackScore(){return w(this,_e).blackScore}get activeColor(){return w(this,_e).activeColor}get actionsUsedCount(){return w(this,_e).actionsUsedCount}get manaMovesCount(){return w(this,_e).manaMovesCount}get monsMovesCount(){return w(this,_e).monsMovesCount}get whitePotionsCount(){return w(this,_e).whitePotionsCount}get blackPotionsCount(){return w(this,_e).blackPotionsCount}get turnNumber(){return w(this,_e).turnNumber}get takebackFens(){return w(this,tn).takebackFens}get isMovesVerified(){return w(this,tn).movesVerified}get withVerboseTracking(){return w(this,tn).verboseTrackingEnabled}get verboseTrackingEntities(){return w(this,tn).trackingEntries}replaceHistory(n){w(this,tn).replace(n)}static newSimulationState(n){var t,r;let o=Y(t=Co,qo,yi).call(t,!1,n.board);return Y(r=o,le,ca).call(r,n),w(o,tn).setTakebackTracking(!1),o}static fromFen(n,o=!1){var a,i;let t=bc(n);if(t===void 0)return;let r=Y(a=Co,qo,yi).call(a,o,t.board);return Y(i=r,le,ca).call(i,t),w(r,tn).resetForLoadedFen(),r}fen(){return hc(this)}copy(){var o,t;let n=Y(o=Co,qo,yi).call(o,this.withVerboseTracking,this.board);return Y(t=n,le,ca).call(t,this),H(n,tn,w(this,tn).copy()),n}fork(){var o,t;let n=Y(o=Co,qo,yi).call(o,!1,this.board);return Y(t=n,le,ca).call(t,this),H(n,tn,w(this,tn).fork()),n}variant(){return this.board.variant}replaceBoardItems(n){let o=Array.from({length:121},()=>{});for(let[r,a]of n)o[Q(r)]=a;let t=At.fromItems(o,this.variant());w(this,_e).board=t,w(this,tn).resetForBoardReplacement(),this.invalidateProcessInputCache()}setTakebackHistoryTracking(n){w(this,tn).setTakebackTracking(n),this.invalidateProcessInputCache()}invalidateProcessInputCache(){w(this,An).invalidate()}setVerboseTracking(n){w(this,tn).setVerboseTracking(n)}clearTracking(){w(this,tn).clearTracking(),this.invalidateProcessInputCache()}canTakeback(n){return w(this,tn).canTakeback(this.activeColor,n)}processInput(n,o,t){return this.processInputWithStartOptions(n,o,t,void 0)}processInputWithStartOptions(n,o,t,r){return Y(this,le,pa).call(this,n,o,t,r??Xb)}inspectInputGrammar(n,o){return Y(this,le,pa).call(this,n,!0,!1,o,!1)}applyAndAddResultingEvents(n){if(!Pc(w(this,_e),n))return;this.invalidateProcessInputCache();let o=p(()=>this.fen(),"snapshotFen");w(this,tn).beginEventApplication(o,this.activeColor);let t=wc(w(this,_e),n);return w(this,tn).completeEventApplication({snapshotFen:o,color:this.activeColor,events:t.events,turnAdvanced:t.turnAdvanced,winner:t.winner}),t.events}nextInputsFromLocations(n,o,t,r,a){if(r!==void 0)return n.some(i=>ge(i,r))&&a(r)?[Zn({kind:"location",location:r},o)]:[];if(t){let i=n.find(a);return i===void 0?[]:[Zn({kind:"location",location:i},o)]}return n.filter(a).map(i=>Zn({kind:"location",location:i},o))}availableMoveKinds(){let n=new Map;return n.set(Yn.MonMove,fe-this.monsMovesCount),n.set(Yn.Action,0),n.set(Yn.Potion,0),n.set(Yn.ManaMove,0),this.turnNumber===1||(n.set(Yn.Action,Hn-this.actionsUsedCount),n.set(Yn.Potion,this.playerPotionsCount()),n.set(Yn.ManaMove,ta-this.manaMovesCount)),n}winnerColor(){return Fs(this)}isLaterThan(n){return this.variant()!==n.variant()?!1:this.turnNumber>n.turnNumber?!0:this.turnNumber!==n.turnNumber?!1:this.playerPotionsCount()<n.playerPotionsCount()||this.actionsUsedCount>n.actionsUsedCount||this.manaMovesCount>n.manaMovesCount||this.monsMovesCount>n.monsMovesCount||this.board.faintedMonsLocations(q(this.activeColor)).length>n.board.faintedMonsLocations(q(n.activeColor)).length}isFirstTurn(){return ur(this)}playerPotionsCount(){return Mc(this)}playerCanMoveMon(){return Ws(this)}playerCanMoveMana(){return kc(this)}playerCanUseAction(){return Gd(this)}};_e=new WeakMap,tn=new WeakMap,An=new WeakMap,le=new WeakSet,ca=p(function(n){w(this,_e).whiteScore=n.whiteScore,w(this,_e).blackScore=n.blackScore,w(this,_e).activeColor=n.activeColor,w(this,_e).actionsUsedCount=n.actionsUsedCount,w(this,_e).manaMovesCount=n.manaMovesCount,w(this,_e).monsMovesCount=n.monsMovesCount,w(this,_e).whitePotionsCount=n.whitePotionsCount,w(this,_e).blackPotionsCount=n.blackPotionsCount,w(this,_e).turnNumber=n.turnNumber},"#copyFenFieldsFrom"),qo=new WeakSet,yi=p(function(n,o){return new Co(n,o.variant,o)},"#fromBoard"),Vd=p(function(n){let o=n.board.fork();w(this,_e).board=o,Y(this,le,ca).call(this,n),this.invalidateProcessInputCache()},"#updateWith"),pa=p(function(n,o,t,r,a=!0){if(n.length>Ho||this.winnerColor()!==void 0)return{kind:"invalid-input"};if(n.length===0){let N=`${a?1:0}:${r.includeManaStartsWithPotionAction?1:0}`,B=w(this,An).getStartSuggestion(N);if(B!==void 0)return B;let G=Y(this,le,Ud).call(this,r,a);return w(this,An).setStartSuggestion(N,G),G}let i=n[0];if(n.length===1&&i?.kind==="takeback"){let N=w(this,tn).prepareTakeback(this.activeColor,this.activeColor);if(N===void 0)return{kind:"invalid-input"};let B=Co.fromFen(N.previousFen,!1);return B===void 0?{kind:"invalid-input"}:o?{kind:"events",events:[{kind:"takeback"}]}:(Y(this,le,Vd).call(this,B),w(this,tn).commitTakeback(N),this.invalidateProcessInputCache(),{kind:"events",events:[{kind:"takeback"}]})}if(i?.kind!=="location")return{kind:"invalid-input"};let s=i.location,u=this.board.get(s);if(u===void 0)return{kind:"invalid-input"};let c=u,l=n[1],m=a&&Y(this,le,Hd).call(this),d=Y(this,le,jd).call(this,s,c,t&&!m,l);if(l===void 0){let N=Y(this,le,Ls).call(this,n,d,r,m,t);return N.length===0?{kind:"invalid-input"}:{kind:"next-input-options",nextInputs:N}}if(l.kind!=="location")return{kind:"invalid-input"};let y=l.location,f=d.find(N=>vt(N.input,l));if(f===void 0)return{kind:"invalid-input"};let h=n[2],C=Y(this,le,Kd).call(this,f.kind,c,s,y),b=C?.[0]??[],k=C?.[1]??[];if(h===void 0){if(k.length!==0){let N=Y(this,le,Ls).call(this,n,k,r,m,t);return N.length===0?{kind:"invalid-input"}:{kind:"next-input-options",nextInputs:N}}return b.length!==0?Y(this,le,Hs).call(this,b,o):{kind:"invalid-input"}}let M=k.find(N=>vt(N.input,h));if(M===void 0)return{kind:"invalid-input"};let R=n[3],P=Y(this,le,zd).call(this,M,c,s,y);b.push(...P?.[0]??[]);let g=P?.[1]??[];if(R===void 0){if(g.length!==0){let N=Y(this,le,Ls).call(this,n,g,r,m,t);return N.length===0?{kind:"invalid-input"}:{kind:"next-input-options",nextInputs:N}}return b.length!==0?Y(this,le,Hs).call(this,b,o):{kind:"invalid-input"}}if(R.kind!=="modifier"||M.input.kind!=="location")return{kind:"invalid-input"};let E=g.find(N=>vt(N.input,R))?.actorMonItem,D=E===void 0?void 0:K(E);if(E===void 0||D===void 0)return{kind:"invalid-input"};switch(R.modifier){case on.SelectBomb:b.push({kind:"pickup-bomb",by:D,at:M.input.location});break;case on.SelectPotion:b.push({kind:"pickup-potion",by:E,at:M.input.location});break}return Y(this,le,Hs).call(this,b,o)},"#processInputInternal"),Hd=p(function(){return this.turnNumber===Number.MAX_SAFE_INTEGER||this.whitePotionsCount===Number.MAX_SAFE_INTEGER||this.blackPotionsCount===Number.MAX_SAFE_INTEGER},"#requiresCounterCapacityFiltering"),Ls=p(function(n,o,t,r,a){if(!r)return o;let i=p(u=>Y(this,le,Vs).call(this,[...n,u.input],t),"applicable");if(!a)return o.filter(i);let s=o.find(i);return s===void 0?[]:[s]},"#applicableInputOptions"),Vs=p(function(n,o){let t=`${o.includeManaStartsWithPotionAction?1:0}|${hn(n)}`,r=w(this,An).getCompletionViability(t);if(r!==void 0)return r;let a=Y(this,le,pa).call(this,n,!0,!1,o,!1),i=(()=>{switch(a.kind){case"invalid-input":return!1;case"events":return Pc(w(this,_e),a.events);case"locations-to-start-from":return a.locations.some(s=>Y(this,le,Vs).call(this,[...n,{kind:"location",location:s}],o));case"next-input-options":return a.nextInputs.some(s=>Y(this,le,Vs).call(this,[...n,s.input],o))}})();return w(this,An).setCompletionViability(t,i),i},"#hasApplicableCompletion"),Ud=p(function(n,o){let t=[],r=Array.from({length:121},()=>!1);for(let i of this.board.allMonsLocations(this.activeColor)){let s=Y(this,le,pa).call(this,[{kind:"location",location:i}],!0,!0,n,o);if(s.kind==="next-input-options"&&s.nextInputs.length!==0){let u=Q(i);r[u]||(r[u]=!0,t.push(i))}}if(this.playerCanMoveMana()&&(!this.playerCanMoveMon()&&!this.playerCanUseAction()||t.length===0||n.includeManaStartsWithPotionAction&&!this.playerCanMoveMon()&&this.actionsUsedCount>=Hn&&this.playerPotionsCount()>0))for(let i of this.board.allFreeRegularManaLocations(this.activeColor)){let s=Y(this,le,pa).call(this,[{kind:"location",location:i}],!0,!0,n,o);if(s.kind==="next-input-options"&&s.nextInputs.length!==0){let u=Q(i);r[u]||(r[u]=!0,t.push(i))}}return t.length===0?{kind:"invalid-input"}:{kind:"locations-to-start-from",locations:t}},"#suggestedInputToStartWith"),jd=p(function(n,o,t,r){let a=`${Q(n)}|${ai(o)}|${t?1:0}|${r===void 0?"":Jr(r)}`,i=w(this,An).getSecondInputOptions(a);if(i!==void 0)return i;let s=r?.kind==="location"?r.location:void 0,u=this.board.findAwakeAngel(q(this.activeColor)),c=this.board.squareAt(n),l=[];switch(o.kind){case"mon":{let m=o.mon;if(m.color!==this.activeColor||U(m))break;if(this.playerCanMoveMon()&&l.push(...this.nextInputsFromLocations(we(n),be.MonMove,t,r===void 0?void 0:r.kind==="location"?r.location:n,d=>{let y=this.board.get(d),f=this.board.squareAt(d),h;switch(y?.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":h=!1;break;case"mana":h=m.kind===A.Drainer;break;case"consumable":case void 0:h=!0;break}if(!h)return!1;switch(f.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":return m.kind===A.Drainer&&(y===void 0||y.kind==="mana"&&y.mana.kind==="supermana");case"mon-base":return f.monKind===m.kind&&f.color===m.color}})),c.kind!=="mon-base"&&this.playerCanUseAction())switch(m.kind){case A.Angel:case A.Drainer:break;case A.Mystic:l.push(...this.nextInputsFromLocations(at(n),be.MysticAction,t,s,d=>{var h;let y=this.board.get(d);if(y===void 0||Y(h=Co,qo,gc).call(h,u,d))return!1;let f=K(y);return f!==void 0&&m.color!==f.color&&!U(f)}));break;case A.Demon:l.push(...this.nextInputsFromLocations(it(n),be.DemonAction,t,s,d=>{var b;let y=this.board.get(d),f=or(n,d),h=this.board.squareAt(f);if(y===void 0||Y(b=Co,qo,gc).call(b,u,d)||this.board.get(f)!==void 0||h.kind==="supermana-base"||h.kind==="mon-base")return!1;let C=K(y);return C!==void 0&&m.color!==C.color&&!U(C)}));break;case A.Spirit:l.push(...this.nextInputsFromLocations(st(n),be.SpiritTargetCapture,t,s,d=>{let y=this.board.get(d);return y===void 0?!1:ut(y)}));break}break}case"mana":o.mana.kind==="regular"&&o.mana.color===this.activeColor&&this.playerCanMoveMana()&&l.push(...this.nextInputsFromLocations(we(n),be.ManaMove,t,s,m=>{let d=this.board.get(m),y=this.board.squareAt(m);return d?.kind==="mon"?fi(y)&&d.mon.kind===A.Drainer:d!==void 0?!1:fi(y)}));break;case"mon-with-mana":o.mon.color===this.activeColor&&this.playerCanMoveMon()&&l.push(...this.nextInputsFromLocations(we(n),be.MonMove,t,s,m=>{let d=this.board.get(m),y=this.board.squareAt(m);switch(d?.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return!1;case"mana":case"consumable":return!0;case void 0:return fi(y)?!0:y.kind==="supermana-base"&&o.mana.kind==="supermana"}}));break;case"mon-with-consumable":{let m=o.mon;if(m.color!==this.activeColor)break;this.playerCanMoveMon()&&l.push(...this.nextInputsFromLocations(we(n),be.MonMove,t,s,d=>{let y=this.board.get(d),f=this.board.squareAt(d);switch(y?.kind){case"mon":case"mana":case"mon-with-mana":case"mon-with-consumable":return!1;case"consumable":return!0;case void 0:return fi(f)}})),o.consumable===j.Bomb&&l.push(...this.nextInputsFromLocations(Qr(n),be.BombAttack,t,s,d=>{let y=this.board.get(d),f=y===void 0?void 0:K(y);return f!==void 0&&m.color!==f.color&&!U(f)}));break}case"consumable":break}return w(this,An).setSecondInputOptions(a,l),l},"#secondInputOptions"),Kd=p(function(n,o,t,r){let a=`${n}|${ai(o)}|${Q(t)}|${Q(r)}`;if(w(this,An).hasSecondStage(a))return w(this,An).getSecondStage(a);let i=Y(this,le,qd).call(this,n,o,t,r);return w(this,An).setSecondStage(a,i),i},"#processSecondInput"),qd=p(function(n,o,t,r){let a=[],i=[],s=this.board.squareAt(r),u=this.board.get(r);switch(n){case be.MonMove:{let c=K(o);if(c===void 0)return;if(i.push({kind:"mon-move",item:o,from:t,to:r}),u!==void 0)switch(u.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return;case"mana":{let l=Qn(o);l!==void 0&&i.push({kind:"mana-dropped",mana:l,at:t}),i.push({kind:"pickup-mana",mana:u.mana,by:c,at:r});break}case"consumable":switch(u.consumable){case j.Bomb:case j.Potion:return;case j.BombOrPotion:ir(o)!==void 0||Qn(o)!==void 0?i.push({kind:"pickup-potion",by:o,at:r}):(a.push(Zn({kind:"modifier",modifier:on.SelectBomb},be.SelectConsumable,o)),a.push(Zn({kind:"modifier",modifier:on.SelectPotion},be.SelectConsumable,o)));break}break}if(s.kind==="mana-pool"){let l=Qn(o);l!==void 0&&i.push({kind:"mana-scored",mana:l,at:r})}break}case be.ManaMove:{if(o.kind!=="mana")return;let c=o.mana;if(i.push({kind:"mana-move",mana:c,from:t,to:r}),u!==void 0){if(u.kind!=="mon")return;i.push({kind:"pickup-mana",mana:c,by:u.mon,at:r})}switch(s.kind){case"regular":case"mana-base":case"consumable-base":break;case"mana-pool":i.push({kind:"mana-scored",mana:c,at:r});break;case"mon-base":case"supermana-base":return}break}case be.MysticAction:{if(o.kind!=="mon")return;if(i.push({kind:"mystic-action",mystic:o.mon,from:t,to:r}),u!==void 0){let c=K(u);if(c===void 0)return;if(i.push({kind:"mon-fainted",mon:c,from:r,to:this.board.base(c)}),u.kind==="mon-with-mana"&&(u.mana.kind==="regular"?i.push({kind:"mana-dropped",mana:u.mana,at:r}):i.push({kind:"supermana-back-to-base",from:r,to:this.board.supermanaBase()})),u.kind==="mon-with-consumable")switch(u.consumable){case j.Bomb:i.push({kind:"bomb-explosion",at:r});break;case j.Potion:case j.BombOrPotion:return}}break}case be.DemonAction:{if(o.kind!=="mon")return;let c=o.mon;i.push({kind:"demon-action",demon:c,from:t,to:r});let l=!1;if(u!==void 0){let m=K(u);if(m===void 0)return;if(i.push({kind:"mon-fainted",mon:m,from:r,to:this.board.base(m)}),u.kind==="mon-with-mana"&&(u.mana.kind==="regular"?(l=!0,i.push({kind:"mana-dropped",mana:u.mana,at:r})):i.push({kind:"supermana-back-to-base",from:r,to:this.board.supermanaBase()})),u.kind==="mon-with-consumable")switch(u.consumable){case j.Bomb:i.push({kind:"bomb-explosion",at:r}),i.push({kind:"mon-fainted",mon:c,from:r,to:this.board.base(c)});break;case j.Potion:case j.BombOrPotion:return}}if((s.kind==="supermana-base"||s.kind==="mon-base")&&(l=!0),l)for(let m of we(r)){let d=this.board.get(m),y=this.board.squareAt(m);d!==void 0&&d.kind!=="consumable"||(fi(y)?a.push(Zn({kind:"location",location:m},be.DemonAdditionalStep)):y.kind==="mon-base"&&y.monKind===c.kind&&y.color===c.color&&a.push(Zn({kind:"location",location:m},be.DemonAdditionalStep)))}break}case be.SpiritTargetCapture:{if(u===void 0)return;let c=K(u),l=Qn(u);a.push(...this.nextInputsFromLocations(we(r),be.SpiritTargetMove,!1,void 0,m=>{let d=this.board.get(m),y=this.board.squareAt(m),f;switch(d?.kind){case"mon":switch(u.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":f=!1;break;case"mana":f=d.mon.kind===A.Drainer&&!U(d.mon);break;case"consumable":f=u.consumable===j.BombOrPotion;break}break;case"mana":f=c?.kind===A.Drainer&&!U(c);break;case"mon-with-mana":case"mon-with-consumable":f=u.kind==="consumable"&&u.consumable===j.BombOrPotion;break;case"consumable":f=d.consumable===j.BombOrPotion&&(u.kind==="mon"||u.kind==="mon-with-mana"||u.kind==="mon-with-consumable");break;case void 0:f=!0;break}if(!f)return!1;switch(y.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":{let h=d?.kind==="mana"&&d.mana.kind==="supermana";return l?.kind==="supermana"||l===void 0&&c?.kind===A.Drainer&&(d===void 0||h)||c?.kind===A.Drainer&&h}case"mon-base":return c?.kind===y.monKind&&c.color===y.color&&l===void 0&&ir(u)===void 0}}));break}case be.BombAttack:{let c=K(o);if(c===void 0)return;if(i.push({kind:"bomb-attack",by:c,from:t,to:r}),u!==void 0){let l=K(u);if(l===void 0)return;if(i.push({kind:"mon-fainted",mon:l,from:r,to:this.board.base(l)}),u.kind==="mon-with-mana"&&(u.mana.kind==="regular"?i.push({kind:"mana-dropped",mana:u.mana,at:r}):i.push({kind:"supermana-back-to-base",from:r,to:this.board.supermanaBase()})),u.kind==="mon-with-consumable")switch(u.consumable){case j.Bomb:i.push({kind:"bomb-explosion",at:r});break;case j.Potion:case j.BombOrPotion:return}}break}case be.DemonAdditionalStep:case be.SpiritTargetMove:case be.SelectConsumable:break}return[i,a]},"#processSecondInputUncached"),zd=p(function(n,o,t,r){let a=`${Jr(n.input)}|${n.kind}|${n.actorMonItem===void 0?"":ai(n.actorMonItem)}|${ai(o)}|${Q(t)}|${Q(r)}`;if(w(this,An).hasThirdStage(a))return w(this,An).getThirdStage(a);let i=Y(this,le,$d).call(this,n,o,t,r);return w(this,An).setThirdStage(a,i),i},"#processThirdInput"),$d=p(function(n,o,t,r){let a=this.board.get(r),i=[],s=[];switch(n.kind){case be.SpiritTargetMove:{if(n.input.kind!=="location"||a===void 0)return;let u=n.input.location,c=this.board.get(u),l=this.board.squareAt(u);if(s.push({kind:"spirit-target-move",item:a,from:r,to:u,by:t}),c!==void 0)switch(a.kind){case"mon":switch(c.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return;case"mana":s.push({kind:"pickup-mana",mana:c.mana,by:a.mon,at:u});break;case"consumable":switch(c.consumable){case j.Potion:case j.Bomb:return;case j.BombOrPotion:i.push(Zn({kind:"modifier",modifier:on.SelectBomb},be.SelectConsumable,a)),i.push(Zn({kind:"modifier",modifier:on.SelectPotion},be.SelectConsumable,a));break}break}break;case"mana":if(c.kind!=="mon")return;s.push({kind:"pickup-mana",mana:a.mana,by:c.mon,at:u});break;case"mon-with-mana":switch(c.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return;case"mana":s.push({kind:"mana-dropped",mana:a.mana,at:r}),s.push({kind:"pickup-mana",mana:c.mana,by:a.mon,at:u});break;case"consumable":switch(c.consumable){case j.Potion:case j.Bomb:return;case j.BombOrPotion:s.push({kind:"pickup-potion",by:a,at:u});break}break}break;case"mon-with-consumable":if(c.kind!=="consumable"||c.consumable!==j.BombOrPotion)return;s.push({kind:"pickup-potion",by:a,at:u});break;case"consumable":switch(c.kind){case"mana":case"consumable":return;case"mon":i.push(Zn({kind:"modifier",modifier:on.SelectBomb},be.SelectConsumable,c)),i.push(Zn({kind:"modifier",modifier:on.SelectPotion},be.SelectConsumable,c));break;case"mon-with-mana":case"mon-with-consumable":switch(a.consumable){case j.Potion:case j.Bomb:return;case j.BombOrPotion:s.push({kind:"pickup-potion",by:c,at:u});break}break}break}if(l.kind==="mana-pool"){let m=Qn(a);m!==void 0&&s.push({kind:"mana-scored",mana:m,at:u})}break}case be.DemonAdditionalStep:{if(n.input.kind!=="location")return;let u=K(o);if(u===void 0)return;let c=n.input.location;s.push({kind:"demon-additional-step",demon:u,from:r,to:c});let l=this.board.get(c);if(l?.kind==="consumable")switch(l.consumable){case j.Potion:case j.Bomb:return;case j.BombOrPotion:i.push(Zn({kind:"modifier",modifier:on.SelectBomb},be.SelectConsumable,o)),i.push(Zn({kind:"modifier",modifier:on.SelectPotion},be.SelectConsumable,o));break}break}case be.SelectConsumable:{if(n.input.kind!=="modifier")return;let u=K(o);if(u===void 0)return;switch(n.input.modifier){case on.SelectBomb:s.push({kind:"pickup-bomb",by:u,at:r});break;case on.SelectPotion:s.push({kind:"pickup-potion",by:o,at:r});break}break}case be.MonMove:case be.ManaMove:case be.MysticAction:case be.DemonAction:case be.SpiritTargetCapture:case be.BombAttack:return}return[s,i]},"#processThirdInputUncached"),Hs=p(function(n,o){if(o)return{kind:"events",events:n};let t=this.applyAndAddResultingEvents(n);return t===void 0?{kind:"invalid-input"}:{kind:"events",events:t}},"#resolveEvents"),gc=p(function(n,o){return n!==void 0&&te(n,o)===1},"#isLocationGuardedByAngelLocation"),X(Co,qo),p(Co,"MonsGame");var Jn=Co;var vc=Math.trunc(6710886375e-2),Xd=-vc;function Ac(e){return Number.isNaN(e)?0:e<=-2147483648?-2147483648:e>=2147483647?2147483647:Math.trunc(e)}p(Ac,"clampScore");function Us(e){return Number.isNaN(e)?0:e<=Xd?Xd:e>=vc?vc:Math.trunc(e)}p(Us,"clampHeuristicScore");function v(e,n){return Ac(e+n)}p(v,"saturatingScoreAdd");function _(e,n){return Ac(e-n)}p(_,"saturatingScoreSubtract");function qe(e,n){return Ac(e*n)}p(qe,"saturatingScoreMultiply");var xt=1,It=2,lr=4,dr=8,$o=16,la=xt|It|lr|dr|$o;function Ke(){return{utility:0,sameTurnScore:!1,sameTurnScoreValue:0,sameTurnOpponentManaScore:!1,sameTurnOpponentManaScoreValue:0,supermanaProgress:!1,opponentManaProgress:!1,nextTurnSetupGain:0}}p(Ke,"defaultSpiritSummary");function No(){return{scorePathWindow:{bestSteps:void 0,multiPressure:0},immediateWindow:{bestScore:0,multiPressure:0},bestDrainerPickup:void 0,bestCarrierSteps:void 0,bestDrainerToManaSteps:void 0,spirit:Ke()}}p(No,"defaultColorSummary");function Nt(){return{canAttackOpponentDrainer:!1,safeSupermanaProgress:!1,safeSupermanaProgressSteps:void 0,safeOpponentManaProgress:!1,safeOpponentManaProgressSteps:void 0,spiritAssistedSupermanaProgress:!1,spiritAssistedOpponentManaProgress:!1,spiritAssistedScore:!1,spiritAssistedDenial:!1,sameTurnScoreWindowValue:0,scorePathBestSteps:void 0}}p(Nt,"defaultTurnSummary");function Xo(){return{safeSupermanaProgress:!1,safeSupermanaProgressSteps:void 0,safeOpponentManaProgress:!1,safeOpponentManaProgressSteps:void 0,spiritAssistedScore:!1,spiritAssistedScoreValue:0,spiritAssistedDenial:!1,spiritAssistedDenialValue:0,sameTurnScoreWindowValue:0}}p(Xo,"defaultTurnTacticalProjection");function pt(){return{budget:{remainingMonMoves:0,canUseAction:!1,canMoveMana:!1},turn:Xo(),delta:{sameTurnScoreWindowValue:0,spiritGain:0,opponentWindowDenyGain:0,drainerAttackAvailable:!1,drainerSafety:0,safeSupermanaProgressSteps:void 0,safeOpponentManaProgressSteps:void 0},opponentCanWinImmediately:!1}}p(pt,"defaultOpportunityContext");var Ec=class Ec{constructor(n=No(),o=No()){he(this,"white");he(this,"black");this.white=n,this.black=o}colorSummary(n){return n===T.White?this.white:this.black}};p(Ec,"ExactStrategicAnalysis");var zo=Ec;var Yd=Object.freeze({hi:0,lo:0});function Ge(e,n){return{hi:e>>>0,lo:n>>>0}}p(Ge,"hash64");function Mo(e){if(!Number.isInteger(e)||e<0||e>4294967295)throw new RangeError("hash low word must be an unsigned 32-bit integer");return Ge(0,e)}p(Mo,"hash64FromLowWord");function Un(e){if(!Number.isSafeInteger(e)||e<0)throw new RangeError("hash integer must be a nonnegative safe integer");return Ge(Math.floor(e/4294967296),e)}p(Un,"hash64FromNonnegativeInteger");function Nc(e,n){let o=e.lo+n.lo>>>0,t=o<e.lo>>>0?1:0;return Ge(e.hi+n.hi+t,o)}p(Nc,"hash64Add");function jn(e,n){let o=e.lo&65535,t=e.lo>>>16,r=n.lo&65535,a=n.lo>>>16,i=o*r,s=(i>>>16)+t*r+o*a,u=(i&65535|(s&65535)<<16)>>>0,c=t*a+Math.floor(s/65536)+(Math.imul(e.hi,n.lo)>>>0)+(Math.imul(e.lo,n.hi)>>>0);return Ge(c,u)}p(jn,"hash64Mul");function Cn(e,n){return Ge(e.hi^n.hi,e.lo^n.lo)}p(Cn,"hash64Xor");function js(e,n){let o=n>>>0&63;if(o===0)return Ge(e.hi,e.lo);if(o===32)return Ge(e.lo,e.hi);if(o<32)return Ge(e.hi<<o|e.lo>>>32-o,e.lo<<o|e.hi>>>32-o);let t=o-32;return Ge(e.lo<<t|e.hi>>>32-t,e.hi<<t|e.lo>>>32-t)}p(js,"hash64RotateLeft");function mr(e,n){let o=n>>>0&63;return o===0?Ge(e.hi,e.lo):o===32?Ge(0,e.hi):o<32?Ge(e.hi>>>o,e.lo>>>o|e.hi<<32-o):Ge(0,e.hi>>>o-32)}p(mr,"hash64ShiftRight");function Dc(e,n){return e.hi===n.hi&&e.lo===n.lo}p(Dc,"hash64Equals");function Qd(e){return e.hi===0&&e.lo===0}p(Qd,"hash64IsZero");function Zd(e,n){return e.hi!==n.hi?e.hi<n.hi?-1:1:e.lo!==n.lo?e.lo<n.lo?-1:1:0}p(Zd,"hash64CompareUnsigned");function Oc(e){let n=(e.hi^(e.lo<<16|e.lo>>>16))>>>0;return n=Math.imul(n^n>>>16,2146121005)>>>0,n=Math.imul(n^n>>>15,2221713035)>>>0,(n^n>>>16)>>>0}p(Oc,"hash64Bucket");function Yb(e,n,o,t,r){return{primaryHi:e.hi,primaryLo:e.lo,tag:o,hasSecondary:t!==void 0,secondaryHi:t?.hi??0,secondaryLo:t?.lo??0,qualifier:r,value:n}}p(Yb,"createEntry");function Qb(e,n){return e===n||e!==e&&n!==n}p(Qb,"sameValueZero");function xc(e,n,o,t,r){return e.primaryHi===n.hi&&e.primaryLo===n.lo&&(e.tag===o||e.tag!==e.tag&&o!==o)&&e.hasSecondary===(t!==void 0)&&(t===void 0||e.secondaryHi===t.hi&&e.secondaryLo===t.lo)&&Qb(e.qualifier,r)}p(xc,"entryMatches");function Zb(e){if(!Number.isSafeInteger(e)||e<1)throw new RangeError("Hash64 table capacity must be a positive safe integer");return e}p(Zb,"validateCapacity");var lt,da,Dt,Si,Ic,Wc=class Wc{constructor(n){X(this,Si);X(this,lt,new Map);X(this,da);X(this,Dt,0);H(this,da,Zb(n))}get capacity(){return w(this,da)}get size(){return w(this,Dt)}clear(){w(this,lt).clear(),H(this,Dt,0)}has(n,o=0,t,r){return Y(this,Si,Ic).call(this,n,o,t,r)!==void 0}get(n,o=0,t,r){return Y(this,Si,Ic).call(this,n,o,t,r)?.value}set(n,o,t=0,r,a){let i=Oc(n),s=w(this,lt).get(i),u=s?.find(c=>xc(c,n,t,r,a));return u!==void 0?(u.value=o,this):(w(this,Dt)>=w(this,da)&&(this.clear(),s=void 0),s===void 0&&(s=[],w(this,lt).set(i,s)),s.push(Yb(n,o,t,r,a)),H(this,Dt,w(this,Dt)+1),this)}delete(n,o=0,t,r){let a=Oc(n),i=w(this,lt).get(a);if(i===void 0)return!1;let s=i.findIndex(u=>xc(u,n,o,t,r));return s<0?!1:(i.splice(s,1),H(this,Dt,w(this,Dt)-1),i.length===0&&w(this,lt).delete(a),!0)}};lt=new WeakMap,da=new WeakMap,Dt=new WeakMap,Si=new WeakSet,Ic=p(function(n,o,t,r){return w(this,lt).get(Oc(n))?.find(a=>xc(a,n,o,t,r))},"#find"),p(Wc,"Hash64Table");var Te=Wc,Yo,Fc=class Fc{constructor(n){X(this,Yo);H(this,Yo,new Te(n))}get capacity(){return w(this,Yo).capacity}get size(){return w(this,Yo).size}clear(){w(this,Yo).clear()}has(n,o=0,t,r){return w(this,Yo).has(n,o,t,r)}add(n,o=0,t,r){return w(this,Yo).set(n,!0,o,t,r),this}delete(n,o=0,t,r){return w(this,Yo).delete(n,o,t,r)}};Yo=new WeakMap,p(Fc,"Hash64Set");var eo=Fc;var om=Ge(1779033703,4089235721),tm=Ge(2654435761,2246822535),rm=Ge(2496678331,321982955),Jb=Ge(2654435769,2135587861),am=Ge(3210233709,484763065),im=Ge(2496678331,321982955);function Ks(e){return e===T.White?1:2}p(Ks,"exactHashColorBits");function eC(e){switch(e){case A.Demon:return 1;case A.Drainer:return 2;case A.Angel:return 3;case A.Spirit:return 4;case A.Mystic:return 5}}p(eC,"exactHashMonKindBits");function hi(e){return e.kind==="supermana"?2:1|Ks(e.color)<<4}p(hi,"exactHashManaBits");function Jd(e){return e.kind==="supermana"?32:16|Ks(e.color)}p(Jd,"exactSearchHashManaBits");function em(e){switch(e){case j.Bomb:return 1;case j.Potion:return 2;case j.BombOrPotion:return 3}}p(em,"exactHashConsumableBits");function nm(e){switch(e){case j.Potion:return 1;case j.Bomb:return 2;case j.BombOrPotion:return 3}}p(nm,"exactSearchHashConsumableBits");function ma(e){return(eC(e.kind)|Ks(e.color)<<4|(e.cooldown&255)<<8)>>>0}p(ma,"exactHashMonBits");function nC(e){let n;switch(e.kind){case"mon":n=256|ma(e.mon);break;case"mana":n=512|hi(e.mana);break;case"mon-with-mana":n=768|ma(e.mon)|hi(e.mana)<<16;break;case"mon-with-consumable":n=1024|ma(e.mon)|em(e.consumable)<<16;break;case"consumable":n=1280|em(e.consumable);break}return Mo(n>>>0)}p(nC,"exactHashItem");function oC(e){let n;switch(e.kind){case"mon":n=256|ma(e.mon);break;case"mana":n=512|Jd(e.mana);break;case"mon-with-mana":n=768|ma(e.mon)|Jd(e.mana)<<16;break;case"mon-with-consumable":n=1024|ma(e.mon)|nm(e.consumable)<<16;break;case"consumable":n=1280|nm(e.consumable);break}return Mo(n>>>0)}p(oC,"exactSearchHashItem");function sm(e){let n=e;return n=Cn(n,mr(n,30)),n=jn(n,am),n=Cn(n,mr(n,27)),n=jn(n,im),Cn(n,mr(n,31))}p(sm,"mixBoardHash");function Bc(e){let n=Nc(e,Jb);return n=jn(Cn(n,mr(n,30)),am),n=jn(Cn(n,mr(n,27)),im),Cn(n,mr(n,31))}p(Bc,"mixSearchHash");function tC(e,n){return sm(Cn(jn(Mo(e+1),tm),jn(nC(n),rm)))}p(tC,"exactBoardEntryHash");function rC(e){return sm(Nc(Un(si(e)),Ge(608135816,2242054355)))}p(rC,"exactBoardVariantHash");function rn(e){let n=Cn(om,rC(e.variant));for(let[o,t]of e.entries())n=Cn(n,tC(Q(o),t));return n}p(rn,"exactBoardHash");function ie(e){let n=om;for(let[t,r]of e.board.entries()){let a=Cn(jn(Mo(Q(t)+1),tm),oC(r));n=Cn(n,Bc(a)),n=jn(js(n,17),rm)}let o=[[Un(e.whiteScore),17],[Un(e.blackScore),35],[Mo(Ks(e.activeColor)),53],[Un(e.actionsUsedCount),71],[Un(e.manaMovesCount),89],[Un(e.monsMovesCount),107],[Un(e.whitePotionsCount),125],[Un(e.blackPotionsCount),143],[Un(e.turnNumber),161],[Un(si(e.variant())),179]];for(let[t,r]of o)n=Cn(n,Bc(Cn(t,Mo(r))));return Bc(n)}p(ie,"exactSearchStateHash");var qs=512,um=8192,cm=8192,pm=8192,lm=8192,dm=8192,mm=8192,fa=4096,fm=4096,zs=2048,aC=Symbol("exact-session-caches"),Gc=class Gc{constructor(){he(this,"attackReach",new Te(um));he(this,"walkThreat",new Te(mm));he(this,"drainerSafety",new Te(pm));he(this,"carrierSteps",new Te(cm));he(this,"drainerToMana",new Te(lm));he(this,"pickupPath",new Te(dm));he(this,"strategicAnalysis",new Te(qs));he(this,"turnSummary",new Te(qs));he(this,"turnTacticalProjection",new Te(qs));he(this,"secureMana",new Te(fa));he(this,"spiritReach",new Te(fm));he(this,"spiritTacticalSummary",new Te(zs));he(this,"capacity",um+mm+pm+cm+lm+dm+qs*3+fa+fm+zs)}get size(){return this.attackReach.size+this.walkThreat.size+this.drainerSafety.size+this.carrierSteps.size+this.drainerToMana.size+this.pickupPath.size+this.strategicAnalysis.size+this.turnSummary.size+this.turnTacticalProjection.size+this.secureMana.size+this.spiritReach.size+this.spiritTacticalSummary.size}clear(){this.attackReach.clear(),this.walkThreat.clear(),this.drainerSafety.clear(),this.carrierSteps.clear(),this.drainerToMana.clear(),this.pickupPath.clear(),this.strategicAnalysis.clear(),this.turnSummary.clear(),this.turnTacticalProjection.clear(),this.secureMana.clear(),this.spiritReach.clear(),this.spiritTacticalSummary.clear()}};p(Gc,"ExactSessionCaches");var _c=Gc;function Ce(e){return e.caches.session.getOrCreate(aC,()=>new _c)}p(Ce,"exactCaches");function En(e){return e===T.White?0:1}p(En,"colorKey");function On(...e){if(e.length>6)return;let n=0,o=1;for(let t of e){if(!Number.isInteger(t))return;let r=t;if(r<-1||r>254)return;n+=(r+1)*o,o*=256}return Number.isSafeInteger(n)?n:void 0}p(On,"exactCacheTag");function bi(e){Ce(e).clear()}p(bi,"clearExactStateAnalysisCache");var ko=Object.freeze({kind:"none"}),ya=Object.freeze({kind:"bomb"});function iC(e){switch(e.kind){case"none":return 0;case"bomb":return 1;case"mana":return e.mana.kind==="supermana"?2:e.mana.color===T.White?3:4}}p(iC,"payloadSlot");function no(e,n){return Q(e)*5+iC(n)}p(no,"payloadSeenSlot");function sC(e,n,o){switch(e.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":return n===A.Drainer;case"mon-base":return e.monKind===n&&e.color===o}}p(sC,"squareAllowsEmptyMon");function uC(e,n){switch(e.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":return n.kind==="supermana";case"mon-base":return!1}}p(uC,"squareAllowsManaCarrier");function fr(e,n,o,t,r,a){let i=e.get(r);switch(t.kind){case"none":{if(i===void 0)return sC(e.squareAt(r),n,o)?ko:void 0;switch(i.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return;case"mana":return n===A.Drainer?{kind:"mana",mana:i.mana}:void 0;case"consumable":return i.consumable===j.BombOrPotion?a?ya:ko:void 0}}case"mana":{if(i===void 0)return uC(e.squareAt(r),t.mana)?t:void 0;switch(i.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return;case"mana":return{kind:"mana",mana:i.mana};case"consumable":return i.consumable===j.BombOrPotion?t:void 0}}case"bomb":{if(i===void 0)switch(e.squareAt(r).kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return ya;case"supermana-base":case"mon-base":return}return i.kind==="consumable"&&i.consumable===j.BombOrPotion?ya:void 0}}}p(fr,"actorPayloadAfterMoveCompute");function Lc(e,n,o,t,r,a,i,s,u){if(e.session.checkpoint())return;let c=[{location:o,payload:a,steps:0}],l=new Uint8Array(605);l[no(o,a)]=1;let m=0;for(;m<c.length;){let d=c[m];if(m+=1,d===void 0||e.session.checkpoint())return;if(u(d.location,d.payload))return d.steps;if(!(s!==void 0&&d.steps>=s))for(let y of we(d.location)){let f=fr(n,t,r,d.payload,y,i);if(f===void 0)continue;let h=no(y,f);l[h]===0&&(l[h]=1,c.push({location:y,payload:f,steps:d.steps+1}))}}}p(Lc,"shortestPayloadState");var Ft,Bt,Sa,Uc=class Uc{constructor(){X(this,Ft);X(this,Bt);X(this,Sa);H(this,Ft,new Uint8Array(121)),H(this,Bt,new Uint8Array(121)),H(this,Sa,new Uint8Array(121))}canAttackTarget(n){let o=Q(n);return(w(this,Bt)[o]??0)>0||(w(this,Sa)[o]??0)===0&&(w(this,Ft)[o]??0)>0}immediateThreats(n){let o=Q(n);return[w(this,Ft)[o]??0,w(this,Bt)[o]??0]}markGuarded(n,o){w(this,Sa)[Q(n)]=o?1:0}addActionThreat(n){let o=Q(n);w(this,Ft)[o]=Math.min(255,(w(this,Ft)[o]??0)+1)}addBombThreat(n){let o=Q(n);w(this,Bt)[o]=Math.min(255,(w(this,Bt)[o]??0)+1)}};Ft=new WeakMap,Bt=new WeakMap,Sa=new WeakMap,p(Uc,"AttackReachSummary");var Wt=Uc;function Ci(e,n,o){let t=e.findAwakeAngel(n);return t!==void 0&&te(t,o)===1}p(Ci,"exactIsLocationGuardedByAngel");function $s(e,n,o){let t=Math.abs(n.i-o.i),r=Math.abs(n.j-o.j),a=or(n,o),i=e.squareAt(a);return(t===2&&r===0||t===0&&r===2)&&e.get(a)===void 0&&i.kind!=="supermana-base"&&i.kind!=="mon-base"}p($s,"demonHasLineAttack");function ym(e,n,o,t,r,a){if(!(t.kind==="mana"||e.get(r)?.kind==="mana"))return fr(e,n,o,t,r,a)}p(ym,"exactAttackPayloadAfterMove");function cC(e,n,o){return e.squareAt(o).kind!=="mon-base"&&(ge(o,n)||e.get(o)===void 0)}p(cC,"exactAttackActionSourceAvailable");function Sm(e,n,o,t){let r;switch(n){case A.Mystic:r=at(t);break;case A.Demon:r=it(t);break;case A.Drainer:case A.Angel:case A.Spirit:return}let a;for(let i of r){if(!cC(e,o,i)||n===A.Demon&&e.get(or(i,t))!==void 0)continue;let s=te(o,i);a=a===void 0?s:Math.min(a,s)}return a}p(Sm,"exactAttackActionStepsLowerBound");function pC(e,n,o,t,r,a,i,s){if(a.kind==="bomb")return Math.max(te(r,n)-3,0);if(a.kind==="mana")return;let u=o?void 0:Sm(e,i,r,n);if(s)for(let c of t){let l=te(r,c)+Math.max(te(c,n)-3,0);u=u===void 0?l:Math.min(u,l)}return u}p(pC,"exactAttackRemainingStepsLowerBound");function hm(e){let n=[];for(let[o,t]of e.entries())t.kind==="consumable"&&t.consumable===j.BombOrPotion&&n.push(o);return n}p(hm,"bombPickupLocations");function bm(e,n,o,t,r,a,i,s,u){if(e.session.checkpoint())return!1;if(i.kind==="mon-with-consumable"&&i.consumable===j.Bomb&&te(a,o)<=t+3)return!0;if(!r){let c=Sm(n,s.kind,a,o);if(c!==void 0&&c<=t)return!0}if(i.kind==="mon-with-mana")return!1;for(let c of u){if(e.session.checkpoint())return!1;let l=te(a,c);if(!(l>t)&&te(c,o)<=t-l+3)return!0}return!1}p(bm,"exactAttackTargetPlausibleForAttacker");function lC(e,n,o,t,r,a,i){if(a<0||!i||n.get(r)===void 0||e.session.checkpoint())return!1;let s=Ci(n,t,r),u=hm(n);for(let[c,l]of n.entries()){if(e.session.checkpoint())return!1;let m=K(l);if(!(m?.color!==o||U(m))&&bm(e,n,r,a,s,c,l,m,u))return!0}return!1}p(lC,"exactAttackTargetPlausibleOnBoard");function Mi(e,n){let o=[];for(let[t,r]of e.entries())K(r)?.color===n&&o.push(t);return o}p(Mi,"attackReachSummaryTargetLocations");function ki(e,n,o,t,r,a){let i=new Wt;if(t<0||!r||a.length===0||e.session.checkpoint())return i;for(let s of a){if(e.session.checkpoint())return new Wt;let u=n.get(s),c=u===void 0?void 0:K(u);c!==void 0&&i.markGuarded(s,Ci(n,c.color,s))}for(let[s,u]of n.entries()){if(e.session.checkpoint())return new Wt;let c=K(u);if(c?.color!==o||U(c))continue;let l=u.kind!=="mon-with-mana",m=u.kind==="mon-with-consumable"&&u.consumable===j.Bomb?ya:ko,d=[{location:s,payload:m,steps:0}],y=new Uint8Array(605);y[no(s,m)]=1;let f=0;for(;f<d.length;){let h=d[f];if(f+=1,h===void 0)break;if(e.session.checkpoint())return new Wt;if(!(h.steps>t)){if(h.payload.kind==="bomb")for(let C of a)te(h.location,C)<=3&&i.addBombThreat(C);if(n.squareAt(h.location).kind!=="mon-base")for(let C of a)(c.kind===A.Mystic&&Math.abs(h.location.i-C.i)===2&&Math.abs(h.location.j-C.j)===2||c.kind===A.Demon&&$s(n,h.location,C))&&i.addActionThreat(C);if(h.steps!==t)for(let C of we(h.location)){let b=ym(n,c.kind,c.color,h.payload,C,l);if(b===void 0)continue;let k=no(C,b);y[k]===0&&(y[k]=1,d.push({location:C,payload:b,steps:h.steps+1}))}}}}return e.session.checkpoint()?new Wt:i}p(ki,"attackReachSummaryForTargets");function Vc(e,n,o,t,r,a){return ki(e,n,o,r,a,Mi(n,t))}p(Vc,"attackReachSummary");function dC(e,n,o,t,r,a){if(e.session.checkpoint())return!1;let i=Ci(n,t,r),s=hm(n);for(let[u,c]of n.entries()){if(e.session.checkpoint())return!1;let l=K(c);if(l?.color!==o||U(l)||!bm(e,n,r,a,i,u,c,l,s))continue;let m=c.kind!=="mon-with-mana",d=c.kind==="mon-with-consumable"&&c.consumable===j.Bomb?ya:ko,y=[{location:u,payload:d,steps:0}],f=new Uint8Array(605);f[no(u,d)]=1;let h=0;for(;h<y.length;){let C=y[h];if(h+=1,C===void 0||e.session.checkpoint())return!1;if(C.steps>a)continue;if(C.payload.kind==="bomb"&&n.get(r)!==void 0&&te(C.location,r)<=3||n.squareAt(C.location).kind!=="mon-base"&&!i&&(l.kind===A.Mystic&&Math.abs(C.location.i-r.i)===2&&Math.abs(C.location.j-r.j)===2||l.kind===A.Demon&&$s(n,C.location,r)))return!0;if(C.steps===a)continue;let b=pC(n,r,i,s,C.location,C.payload,l.kind,m);if(!(b!==void 0&&C.steps+b>a))for(let k of we(C.location)){let M=ym(n,l.kind,l.color,C.payload,k,m);if(M===void 0)continue;let R=no(k,M);f[R]===0&&(f[R]=1,y.push({location:k,payload:M,steps:C.steps+1}))}}}return!1}p(dC,"canAttackTargetOnBoardUncached");function _t(e,n,o,t,r,a,i,s){if(i<0||!s||n.get(a)===void 0||e.session.checkpoint())return!1;let u=On(En(t),En(r),Q(a),i,1),c=u===void 0?void 0:Ce(e).attackReach.get(o,u);if(c!==void 0)return c;if(!lC(e,n,t,r,a,i,s))return e.session.cacheWriteAllowed&&u!==void 0&&Ce(e).attackReach.set(o,!1,u),!1;let l=dC(e,n,t,r,a,i);return e.session.cacheWriteAllowed?(u!==void 0&&Ce(e).attackReach.set(o,l,u),l):!1}p(_t,"canAttackTargetOnBoardWithHash");function Ri(e,n,o,t){if(e.session.checkpoint())return[1,1];let r=0,a=0;for(let i of at(t)){if(e.session.checkpoint())return[1,1];let s=n.get(i),u=s===void 0?void 0:K(s);u?.kind===A.Mystic&&u.color!==o&&!U(u)&&n.squareAt(i).kind!=="mon-base"&&(r+=1)}for(let i of it(t)){if(e.session.checkpoint())return[1,1];let s=n.get(i),u=s===void 0?void 0:K(s);u?.kind===A.Demon&&u.color!==o&&!U(u)&&n.squareAt(i).kind!=="mon-base"&&$s(n,i,t)&&(r+=1)}for(let i of Qr(t)){if(e.session.checkpoint())return[1,1];let s=n.get(i);s?.kind==="mon-with-consumable"&&s.consumable===j.Bomb&&s.mon.color!==o&&!U(s.mon)&&n.squareAt(i).kind!=="mon-base"&&(a+=1)}return e.session.checkpoint()?[1,1]:[r,a]}p(Ri,"drainerImmediateThreats");function Hc(e,n,o,t,r){if(e.session.checkpoint())return!0;let[a,i]=Ri(e,n,o,t);return e.session.checkpoint()?!0:r?i>0:a+i>0}p(Hc,"isDrainerUnderImmediateThreat");function mC(e,n,o,t,r){if(e.session.checkpoint())return!1;if(r){for(let[a,i]of n.entries())if(i.kind==="mon-with-consumable"&&i.consumable===j.Bomb&&i.mon.color!==o&&!U(i.mon)&&n.squareAt(a).kind!=="mon-base"&&te(a,t)<=4)return!0;return!1}for(let[a,i]of n.entries()){if(e.session.checkpoint())return!1;let s=K(i);if(!(s===void 0||s.color===o||U(s)||n.squareAt(a).kind==="mon-base")){if(s.kind===A.Mystic||s.kind===A.Demon)for(let u=-1;u<=1;u+=1)for(let c=-1;c<=1;c+=1){if(u===0&&c===0)continue;let l={i:a.i+u,j:a.j+c};if(l.i<0||l.i>10||l.j<0||l.j>10||n.get(l)!==void 0)continue;let m=n.squareAt(l);if(!(m.kind==="mon-base"||m.kind==="supermana-base")&&(s.kind===A.Mystic&&Math.abs(l.i-t.i)===2&&Math.abs(l.j-t.j)===2||s.kind===A.Demon&&$s(n,l,t)))return!0}if(i.kind==="mon-with-consumable"&&i.consumable===j.Bomb&&te(a,t)<=4)return!0}}return!1}p(mC,"isDrainerUnderWalkThreatUncached");function yr(e,n,o,t,r,a){if(e.session.checkpoint())return!0;let i=On(En(t),Q(r),a?1:0),s=i===void 0?void 0:Ce(e).walkThreat.get(o,i);if(s!==void 0)return s||e.session.checkpoint();let u=mC(e,n,t,r,a);return e.session.cacheWriteAllowed?(i!==void 0&&Ce(e).walkThreat.set(o,u,i),u):!0}p(yr,"isDrainerUnderWalkThreatWithHash");function Pi(e,n,o,t,r){if(e.session.checkpoint())return!1;let a=Ci(n,t,r),i=_t(e,n,o,q(t),t,r,fe,!0);return e.session.checkpoint()?!1:!i&&!yr(e,n,o,t,r,a)&&!e.session.checkpoint()}p(Pi,"isDrainerExactlySafeNextTurnOnBoardWithHash");function Sr(e,n,o,t){return Pi(e,n,rn(n),o,t)}p(Sr,"isDrainerExactlySafeNextTurnOnBoard");function Gt(e,n){for(let[o,t]of e.entries()){let r=K(t);if(r?.color===n&&r.kind===A.Drainer&&!U(r))return o}}p(Gt,"findAwakeDrainer");function wi(e,n,o,t){if(e.session.checkpoint())return 0;let r=On(En(t)),a=r===void 0?void 0:Ce(e).drainerSafety.get(o,r);if(a!==void 0)return a;let i=Gt(n,t),s=0;if(i!==void 0){let u=Ci(n,t,i),[c,l]=Ri(e,n,t,i),m=u?l>0:c+l>0,d=yr(e,n,o,t,i,u);s=Pi(e,n,o,t,i)?m||d?1:2:m||d?-2:-1}return e.session.cacheWriteAllowed?(r!==void 0&&Ce(e).drainerSafety.set(o,s,r),s):0}p(wi,"exactOwnDrainerSafetyScoreWithHash");function hr(e,n,o,t,r,a){if(e.session.checkpoint()||a!==void 0&&a<0)return;let i=On(Q(o),hi(t));if(i!==void 0&&Ce(e).carrierSteps.has(r,i)){let u=Ce(e).carrierSteps.get(r,i);return a===void 0||u===void 0||u<=a?u:void 0}let s=Lc(e,n,o,A.Drainer,T.White,{kind:"mana",mana:t},!1,a,(u,c)=>c.kind==="mana"&&n.squareAt(u).kind==="mana-pool");if(e.session.cacheWriteAllowed)return i!==void 0&&(a===void 0||s!==void 0)&&Ce(e).carrierSteps.set(r,s,i),s}p(hr,"exactCarrierStepsToAnyPoolWithHash");function Cm(e,n,o,t){if(e.session.checkpoint())return;let r=rn(n),a=On(En(o),Q(t));if(a!==void 0&&Ce(e).drainerToMana.has(r,a))return Ce(e).drainerToMana.get(r,a);let i=Lc(e,n,t,A.Drainer,o,ko,!1,void 0,(s,u)=>u.kind==="mana");if(e.session.cacheWriteAllowed)return a!==void 0&&Ce(e).drainerToMana.set(r,i,a),i}p(Cm,"exactDrainerToAnyManaSteps");function fC(e,n){if(n===void 0)return!0;let o=e.pathSteps*3-e.manaValue,t=n.pathSteps*3-n.manaValue;return o<t||o===t&&e.manaValue>n.manaValue}p(fC,"pickupPathBeats");function Ys(e,n,o,t,r,a){if(e.session.checkpoint())return;let i=On(En(o),Q(t),r??-1);if(i!==void 0&&Ce(e).pickupPath.has(a,i))return Ce(e).pickupPath.get(a,i);let s=[{location:t,payload:ko,steps:0}],u=new Uint8Array(605);u[no(t,ko)]=1;let c,l=0;for(;l<s.length;){let m=s[l];if(l+=1,m===void 0||e.session.checkpoint())return;if(!(r!==void 0&&m.steps>r)){if(m.payload.kind==="mana"&&n.squareAt(m.location).kind==="mana-pool"){let d={pathSteps:Math.max(m.steps-1,0),totalMoves:m.steps,manaValue:xe(m.payload.mana,o),mana:m.payload.mana};fC(d,c)&&(c=d)}if(!(r!==void 0&&m.steps>=r))for(let d of we(m.location)){let y=fr(n,A.Drainer,o,m.payload,d,!1);if(y===void 0||y.kind==="bomb")continue;let f=no(d,y);u[f]===0&&(u[f]=1,s.push({location:d,payload:y,steps:m.steps+1}))}}}if(e.session.cacheWriteAllowed)return i!==void 0&&Ce(e).pickupPath.set(a,c,i),c}p(Ys,"exactBestDrainerPickupPathWithHash");function yC(e){let n=0,o=0;for(let[,t]of e.board.entries())t.kind!=="mana"||t.mana.kind!=="regular"||(t.mana.color===T.White?n+=1:o+=1);return{hash:ie(e),whiteRegularManaCount:n,blackRegularManaCount:o}}p(yC,"secureManaStateKey");function jc(e,n,o){let t;for(let[r,a]of e.entries()){if(a.kind!=="mana"||!je(a.mana,n))continue;let i=te(o,r);t=t===void 0?i:Math.min(t,i)}return t}p(jc,"exactDistanceToWantedManaStepsLowerBound");function Mm(e,n,o,t){if(e.session.checkpoint())return;let r=n.fork(),a=r.processInput([{kind:"location",location:o},{kind:"location",location:t}],!1,!1);if(a.kind!=="events")return;let i=a.events.find(s=>s.kind==="mana-scored");return{after:r,scoredMana:i?.kind==="mana-scored"?i.mana:void 0}}p(Mm,"applySecureDrainerWalk");function SC(e,n,o,t){let r=yC(e);return{hash:r.hash,tag:On(r.whiteRegularManaCount,r.blackRegularManaCount,En(n),hi(t),Q(o))}}p(SC,"secureSpecificManaQueryKey");function hC(e,n,o,t,r,a){if(e.session.checkpoint())return;let i=n.board.get(t),s=i?.kind==="mon-with-mana"&&je(i.mana,r);if(s&&Sr(e,n.board,o,t))return 0;if(n.activeColor!==o||!n.playerCanMoveMon())return;let u=Math.max(fe-n.monsMovesCount,0);if(!s){let l=jc(n.board,r,t);if(l===void 0||l>u)return}let c;for(let l of we(t)){if(e.session.checkpoint())return;if(!s){let y=n.board.get(l);if(!(y?.kind==="mana"&&je(y.mana,r))){let h=jc(n.board,r,l);if(h===void 0||h>u-1)continue}}let m=Mm(e,n,t,l);if(e.session.checkpoint())return;if(m===void 0)continue;let d;if(m.scoredMana!==void 0&&je(m.scoredMana,r))d=1;else{let y=Gt(m.after.board,o);if(y===void 0)continue;let f=Xs(e,m.after,o,y,r,a);if(e.session.checkpoint())return;f!==void 0&&(d=f+1)}if(d!==void 0&&(c===void 0||d<c)&&(c=d,d===1))break}return c}p(hC,"secureSpecificManaStepsInGameUncached");function Xs(e,n,o,t,r,a){if(e.session.checkpoint())return;let i=SC(n,o,t,r);if(i.tag!==void 0&&Ce(e).secureMana.has(i.hash,i.tag))return Ce(e).secureMana.get(i.hash,i.tag);if(i.tag!==void 0&&a.has(i.hash,i.tag))return;i.tag!==void 0&&a.add(i.hash,i.tag);let s;try{s=hC(e,n,o,t,r,a)}finally{i.tag!==void 0&&a.delete(i.hash,i.tag)}if(e.session.cacheWriteAllowed)return i.tag!==void 0&&Ce(e).secureMana.set(i.hash,s,i.tag),s}p(Xs,"secureSpecificManaStepsInGame");function ha(e,n,o,t,r){if(r<0||e.session.checkpoint())return;let a=Gt(n,o);if(a===void 0)return;let i=n.get(a);if(!(i?.kind==="mon-with-mana"&&je(i.mana,t))){let l=jc(n,t,a);if(l===void 0||l>r)return}let u=Math.max(0,Math.min(fe,fe-r)),c=Jn.newSimulationState({board:n.fork(),whiteScore:0,blackScore:0,activeColor:o,actionsUsedCount:Hn,manaMovesCount:0,monsMovesCount:u,whitePotionsCount:0,blackPotionsCount:0,turnNumber:2});return Xs(e,c,o,a,t,new eo(fa))}p(ha,"exactSecureSpecificManaStepsOnBoard");function Ti(e,n,o,t,r){if(e.session.checkpoint())return;let a=n.fork(),i=t,s=Xs(e,a,o,i,r,new eo(fa));if(s===void 0||e.session.checkpoint())return;let u=[];for(;s>0;){let c;for(let l of we(i)){if(e.session.checkpoint())return;let m=Mm(e,a,i,l);if(e.session.checkpoint())return;if(m===void 0)continue;if(s===1&&m.scoredMana!==void 0&&je(m.scoredMana,r)){c={next:l,after:m.after,steps:0};break}let d=Gt(m.after.board,o);if(d===void 0)continue;let y=Xs(e,m.after,o,d,r,new eo(fa));if(e.session.checkpoint())return;if(y===s-1){c={next:l,after:m.after,steps:y};break}}if(c===void 0)return;u.push(c.next),a=c.after,i=c.next,s=c.steps}return u}p(Ti,"exactSecureSpecificManaPathFrom");function gi(e,n,o){if(e.session.checkpoint())return;let t=rn(n),r;for(let[a,i]of n.entries()){if(e.session.checkpoint())return;let s=K(i);if(s?.color!==o||U(s))continue;let u;i.kind==="mon-with-mana"?u=hr(e,n,a,i.mana,t):(i.kind==="mon"||i.kind==="mon-with-consumable")&&s.kind===A.Drainer&&(u=Ys(e,n,o,a,void 0,t)?.totalMoves),u!==void 0&&(r=r===void 0?u:Math.min(r,u))}return e.session.checkpoint()?void 0:r}p(gi,"exactBestScoreStepsOnBoard");function Kc(e,n,o,t){if(t<0||e.session.checkpoint())return 0;let r=rn(n),a=0;for(let[i,s]of n.entries()){if(e.session.checkpoint())return 0;let u=K(s);if(!(u?.color!==o||U(u))){if(s.kind==="mon-with-mana")hr(e,n,i,s.mana,r,t)!==void 0&&(a=Math.max(a,xe(s.mana,o)));else if((s.kind==="mon"||s.kind==="mon-with-consumable")&&u.kind===A.Drainer){let c=Ys(e,n,o,i,t,r);c!==void 0&&(a=Math.max(a,c.manaValue))}if(a>=2)return a}}return a}p(Kc,"exactBestImmediateScoreOnBoard");var km=6;function wm(e,n,o,t,r){if(r<0||e.session.checkpoint())return[];let a=rn(n),i=On(Q(o),En(t),r),s=i===void 0?void 0:Ce(e).spiritReach.get(a,i);if(s!==void 0)return s;let u=[],c=[[o,0]],l=new Uint8Array(121);l[Q(o)]=1;let m=0;for(;m<c.length;){let y=c[m];if(m+=1,y===void 0||e.session.checkpoint())return[];let[f,h]=y;if(u.push([f,h]),!(h>=r))for(let C of we(f)){if(e.session.checkpoint())return[];let b=Q(C);if(l[b]!==0)continue;let k=n.get(C),M=n.squareAt(C),R=!1;k===void 0?R=M.kind==="regular"||M.kind==="consumable-base"||M.kind==="mana-base"||M.kind==="mana-pool"||M.kind==="mon-base"&&M.monKind===A.Spirit&&M.color===t:R=k.kind==="consumable"&&k.consumable===j.BombOrPotion,R&&(l[b]=1,c.push([C,h+1]))}}if(!e.session.cacheWriteAllowed)return[];let d=Object.freeze(u.map(([y,f])=>Object.freeze([y,f])));return i!==void 0&&Ce(e).spiritReach.set(a,d,i),d}p(wm,"reachableSpiritPositions");function Tm(e,n,o){let t=e.get(o),r=K(n),a=Qn(n),i;if(t===void 0)i=!0;else switch(t.kind){case"mon":n.kind==="mana"?i=t.mon.kind===A.Drainer&&!U(t.mon):n.kind==="consumable"?i=n.consumable===j.BombOrPotion:i=!1;break;case"mana":i=r?.kind===A.Drainer&&!U(r);break;case"mon-with-mana":case"mon-with-consumable":i=n.kind==="consumable"&&n.consumable===j.BombOrPotion;break;case"consumable":i=t.consumable===j.BombOrPotion&&(n.kind==="mon"||n.kind==="mon-with-mana"||n.kind==="mon-with-consumable");break}if(!i)return!1;let s=e.squareAt(o);switch(s.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":return a?.kind==="supermana"||a===void 0&&r?.kind===A.Drainer;case"mon-base":return r?.kind===s.monKind&&r.color===s.color&&a===void 0&&ir(n)===void 0}}p(Tm,"spiritDestinationAllowed");function gm(e,n,o,t,r){if(t<0||!r||e.session.checkpoint())return Ke();let a=Ke();for(let[i,s]of n.entries()){if(e.session.checkpoint())return Ke();let u=K(s);if(!(u?.color!==o||u.kind!==A.Spirit||U(u)))for(let[c]of wm(e,n,i,o,t)){if(e.session.checkpoint())return Ke();if(n.squareAt(c).kind==="mon-base")continue;let l=0,m=0,d=!1,y=!1;for(let h of st(c)){let C=n.get(h);if(!(C===void 0||!ut(C)||!we(h).some(b=>Tm(n,C,b))))if(l+=1,C.kind==="mana")C.mana.kind==="supermana"?(d=!0,m=Math.max(m,2)):C.mana.color===q(o)&&(y=!0,m=Math.max(m,2));else{let b=K(C);b?.color===o&&b.kind===A.Drainer&&!U(b)?m=Math.max(m,2):b!==void 0&&b.color!==o&&!U(b)&&(m=Math.max(m,1))}}let f=Math.max(Math.min(l,km),Math.min(1+m,km));a={...a,utility:Math.max(a.utility,f),nextTurnSetupGain:f>a.utility?m:f===a.utility?Math.max(a.nextTurnSetupGain,m):a.nextTurnSetupGain,supermanaProgress:a.supermanaProgress||d,opponentManaProgress:a.opponentManaProgress||y}}}return e.session.checkpoint()?Ke():a}p(gm,"exactPassiveSpiritSummary");function bC(e,n,o,t,r,a,i,s){if(!i&&!s||e.session.checkpoint())return{bestScore:0,bestOpponentManaScore:0};let u=i?xe({kind:"supermana"},o):0,c=s?xe({kind:"regular",color:q(o)},o):0,l=[{location:t,payload:ko,steps:0}],m=new Uint8Array(605);m[no(t,ko)]=1;let d=0,y=0,f=0;for(;f<l.length;){let h=l[f];if(f+=1,h===void 0||e.session.checkpoint())return{bestScore:0,bestOpponentManaScore:0};if(h.payload.kind==="mana"&&n.squareAt(h.location).kind==="mana-pool"){let C=xe(h.payload.mana,o);if(i&&C>=a&&(d=Math.max(d,C)),s&&h.payload.mana.kind==="regular"&&h.payload.mana.color===q(o)&&(y=Math.max(y,C)),(!i||d>=u)&&(!s||y>=c))return{bestScore:d,bestOpponentManaScore:y}}if(!(h.steps>=r))for(let C of we(h.location)){if(e.session.checkpoint())return{bestScore:0,bestOpponentManaScore:0};let b=fr(n,A.Drainer,o,h.payload,C,!1);if(b===void 0||b.kind==="bomb")continue;let k=no(C,b);m[k]===0&&(m[k]=1,l.push({location:C,payload:b,steps:h.steps+1}))}}return{bestScore:d,bestOpponentManaScore:y}}p(bC,"exactDrainerImmediateTacticalWindow");function Rm(e,n,o,t,r,a,i=1){if(t<0||!r&&!a||e.session.checkpoint())return{bestScore:0,bestOpponentManaScore:0};let s=r?Math.max(i,1):0,u={kind:"regular",color:q(o)},c=r?xe({kind:"supermana"},o):0,l=a?xe(u,o):0,m=rn(n),d=0,y=0;for(let[f,h]of n.entries()){if(e.session.checkpoint())return{bestScore:0,bestOpponentManaScore:0};let C=K(h);if(!(C?.color!==o||U(C))){if(h.kind==="mon-with-mana"){let b=xe(h.mana,o),k=r&&b>=s,M=a&&je(h.mana,u);if(!k&&!M)continue;let R=hr(e,n,f,h.mana,m,t);if(e.session.checkpoint())return{bestScore:0,bestOpponentManaScore:0};if(R===void 0)continue;k&&(d=Math.max(d,b)),M&&(y=Math.max(y,b))}else if(C.kind===A.Drainer&&(h.kind==="mon"||h.kind==="mon-with-consumable")){let b=bC(e,n,o,f,t,s,r,a);if(e.session.checkpoint())return{bestScore:0,bestOpponentManaScore:0};r&&(d=Math.max(d,b.bestScore)),a&&(y=Math.max(y,b.bestOpponentManaScore))}if((!r||d>=c)&&(!a||y>=l))return{bestScore:d,bestOpponentManaScore:y}}}return e.session.checkpoint()?{bestScore:0,bestOpponentManaScore:0}:{bestScore:d,bestOpponentManaScore:y}}p(Rm,"exactBestImmediateTacticalWindow");function CC(e,n,o,t,r){let a=e.get(n),i=e.get(t),s={from:n,fromItem:a,to:t,toItem:i},u=e.squareAt(t);e.delete(n);let c=o;o.kind==="mon"&&i?.kind==="mana"?c=xo(o.mon,i.mana):o.kind==="mana"&&i?.kind==="mon"?c=xo(i.mon,o.mana):o.kind==="mon-with-mana"&&i?.kind==="mana"?(e.set(n,{kind:"mana",mana:o.mana}),c=xo(o.mon,i.mana)):o.kind==="consumable"&&i?.kind==="mon"?c=xn(i.mon):o.kind==="mon"&&i?.kind==="consumable"?c=xn(o.mon):o.kind==="mon-with-mana"&&i?.kind==="consumable"?c=xo(o.mon,o.mana):o.kind==="mon-with-consumable"&&i?.kind==="consumable"&&(c={kind:"mon-with-consumable",mon:o.mon,consumable:j.Bomb});let l=0,m=0,d=Qn(c);if(u.kind==="mana-pool"&&d!==void 0){l=xe(d,r),d.kind==="regular"&&d.color===q(r)&&(m=l);let y=K(c);if(y===void 0)return e.delete(t),{undo:s,scoreDelta:l,opponentManaScoreDelta:m};c=xn(y)}return e.set(t,c),{undo:s,scoreDelta:l,opponentManaScoreDelta:m}}p(CC,"applySpiritMovePreviewInPlace");function MC(e,n){n.fromItem===void 0?e.delete(n.from):e.set(n.from,n.fromItem),n.toItem===void 0?e.delete(n.to):e.set(n.to,n.toItem)}p(MC,"undoSpiritMovePreview");var ba=1,Ca=2,vi=4,Pm=ba|Ca|vi;function kC(e,n){let o=(n&ba)!==0,t=(n&Ca)!==0,r=(n&vi)!==0;return{...Ke(),sameTurnScore:o&&e.sameTurnScore,sameTurnScoreValue:o?e.sameTurnScoreValue:0,sameTurnOpponentManaScore:t&&e.sameTurnOpponentManaScore,sameTurnOpponentManaScoreValue:t?e.sameTurnOpponentManaScoreValue:0,supermanaProgress:r&&e.supermanaProgress,opponentManaProgress:r&&e.opponentManaProgress}}p(kC,"tacticalSpiritSummaryForFields");function qc(e,n,o,t,r,a){if(a&=Pm,t<0||a===0||!r||e.session.checkpoint())return Ke();let i=rn(n),s=On(En(o),t,Number(r),a),u=s===void 0?void 0:Ce(e).spiritTacticalSummary.get(i,s);if(u!==void 0)return u;for(let l=1;l<=Pm;l+=1){if(l===a||(l&a)!==a)continue;let m=On(En(o),t,Number(r),l),d=m===void 0?void 0:Ce(e).spiritTacticalSummary.get(i,m);if(d===void 0)continue;let y=kC(d,a);return e.session.cacheWriteAllowed?(s!==void 0&&Ce(e).spiritTacticalSummary.set(i,y,s),y):Ke()}let c=RC(e,n,o,t,r,a);return e.session.cacheWriteAllowed?(s!==void 0&&Ce(e).spiritTacticalSummary.set(i,c,s),c):Ke()}p(qc,"exactTacticalSpiritSummary");function RC(e,n,o,t,r,a){if(!r||e.session.checkpoint())return Ke();let i=(a&ba)!==0,s=(a&Ca)!==0,u=(a&vi)!==0,c=Rm(e,n,o,t,i,s);if(e.session.checkpoint())return Ke();let l=i?xe({kind:"supermana"},o):0,m=s?xe({kind:"regular",color:q(o)},o):0,d=Ke(),y=new Te(zs);for(let[f,h]of n.entries()){if(e.session.checkpoint())return Ke();let C=K(h);if(!(C?.color!==o||C.kind!==A.Spirit||U(C)))for(let[b,k]of wm(e,n,f,o,t)){if(e.session.checkpoint())return Ke();if(n.squareAt(b).kind==="mon-base")continue;let M=n.fork();ge(b,f)||(M.delete(f),M.set(b,h));let R=t-k;for(let P of st(b)){if(e.session.checkpoint())return Ke();let g=M.get(P);if(!(g===void 0||!ut(g)))for(let W of we(P)){if(e.session.checkpoint())return Ke();if(!Tm(M,g,W))continue;let E=CC(M,P,g,W,o);try{if(e.session.checkpoint())return Ke();let D=Math.max(d.sameTurnScoreValue,c.bestScore,E.scoreDelta),N=Math.max(d.sameTurnOpponentManaScoreValue,c.bestOpponentManaScore,E.opponentManaScoreDelta),B=i&&D<l,G=s&&N<m,L={bestScore:0,bestOpponentManaScore:0};if(B||G){let se=B?D+1:1,Pe=rn(M),Ze=On(En(o),R,se,Number(B),Number(G)),Je=Ze===void 0?void 0:y.get(Pe,Ze);if(Je!==void 0)L=Je;else{if(L=Rm(e,M,o,R,B,G,se),e.session.checkpoint())return Ke();Ze!==void 0&&y.set(Pe,L,Ze)}}if(e.session.checkpoint())return Ke();let $=Math.max(E.scoreDelta,L.bestScore),V=Math.max(E.opponentManaScoreDelta,L.bestOpponentManaScore);if(i&&(E.scoreDelta>0||$>c.bestScore)&&(d={...d,sameTurnScore:!0,sameTurnScoreValue:Math.max(d.sameTurnScoreValue,$)}),s&&(E.opponentManaScoreDelta>0||V>c.bestOpponentManaScore)&&(d={...d,sameTurnOpponentManaScore:!0,sameTurnOpponentManaScoreValue:Math.max(d.sameTurnOpponentManaScoreValue,V)}),u&&!d.supermanaProgress){let Pe=g.kind==="mana"&&g.mana.kind==="supermana"&&E.scoreDelta>0;if(!Pe&&(Pe=ha(e,M,o,{kind:"supermana"},R)!==void 0,e.session.checkpoint()))return Ke();Pe&&(d={...d,supermanaProgress:!0})}if(u&&!d.opponentManaProgress){let se=E.opponentManaScoreDelta>0;if(!se&&(se=ha(e,M,o,{kind:"regular",color:q(o)},R)!==void 0,e.session.checkpoint()))return Ke();se&&(d={...d,opponentManaProgress:!0})}if(e.session.checkpoint())return Ke();if((!i||d.sameTurnScoreValue>=l)&&(!s||d.sameTurnOpponentManaScoreValue>=m)&&(!u||d.supermanaProgress&&d.opponentManaProgress))return d}finally{MC(M,E.undo)}}}}}return e.session.checkpoint()?Ke():d}p(RC,"exactTacticalSpiritSummaryUncached");function PC(e){let n=e[1],o=e[2];return(n===void 0?0:Math.trunc(70/Math.max(n,1)))+(o===void 0?0:Math.trunc(40/Math.max(o,1)))}p(PC,"multiPressureFromSteps");function wC(e){return(e[1]??0)*70+(e[2]??0)*35}p(wC,"multiPressureFromScores");function vm(e,n,o){if(e.session.checkpointWithReserve(20))return No();let t=n.activeColor===o?Math.max(fe-n.monsMovesCount,0):fe,r=n.activeColor===o?n.playerCanUseAction():!0,a=rn(n.board),i=[],s;for(let[f,h]of n.board.entries()){if(e.session.checkpoint())return No();if(h.kind!=="mon-with-mana"||h.mon.color!==o||U(h.mon))continue;let C=hr(e,n.board,f,h.mana,a);C!==void 0&&(s=s===void 0?C:Math.min(s,C),i.push(C))}let u=Gt(n.board,o),c=u===void 0?void 0:Ys(e,n.board,o,u,void 0,a);if(e.session.checkpointWithReserve(20))return No();let l=u===void 0?void 0:Cm(e,n.board,o,u);c!==void 0&&i.push(c.totalMoves),i.sort((f,h)=>f-h);let m=i.filter((f,h)=>h===0||i[h-1]!==f),d=[];for(let[f,h]of n.board.entries()){if(e.session.checkpoint())return No();if(h.kind!=="mon-with-mana"||h.mon.color!==o||U(h.mon))continue;let C=hr(e,n.board,f,h.mana,a,t);C!==void 0&&C<=t&&d.push(xe(h.mana,o))}c!==void 0&&c.totalMoves<=t&&d.push(c.manaValue);let y=gm(e,n.board,o,t,r);return e.session.checkpointWithReserve(20)?No():(d.sort((f,h)=>h-f),{scorePathWindow:{bestSteps:m[0],multiPressure:PC(m)},immediateWindow:{bestScore:d[0]??0,multiPressure:wC(d)},bestDrainerPickup:c,bestCarrierSteps:s,bestDrainerToManaSteps:l,spirit:y})}p(vm,"buildColorSummary");function TC(e,n){if(e.session.checkpointWithReserve(20))return new zo;let o=vm(e,n,T.White);if(e.session.checkpointWithReserve(20))return new zo;let t=vm(e,n,T.Black);return e.session.checkpointWithReserve(20)?new zo:new zo(o,t)}p(TC,"buildExactStrategicAnalysis");function br(e,n,o){if(e.session.checkpointWithReserve(20))return new zo;let t=Ce(e).strategicAnalysis.get(o);if(t!==void 0)return t;let r=TC(e,n);return e.session.cacheWriteAllowed?(Ce(e).strategicAnalysis.set(o,r),r):new zo}p(br,"exactStrategicAnalysisWithSearchHash");function Cr(e,n){return br(e,n,ie(n))}p(Cr,"exactStrategicAnalysis");function Qs(e,n,o,t){let r=n.activeColor===o?Math.max(fe-n.monsMovesCount,0):fe;return ha(e,n.board,o,t,r)}p(Qs,"exactSecureSpecificManaStepsThisTurn");function Am(e,n,o,t){let r=Gt(n.board,q(o));return r===void 0?!1:_t(e,n.board,t,o,q(o),r,n.activeColor===o?Math.max(fe-n.monsMovesCount,0):fe,n.activeColor===o?n.playerCanUseAction():!0)}p(Am,"canAttackOpponentDrainerExactWithHash");function gC(e,n){let o=(n&xt)!==0,t=(n&It)!==0,r=(n&lr)!==0,a=(n&dr)!==0,i=(n&$o)!==0,s=i&&(t||a),u=r||i,c=a||s,l=o?e.safeSupermanaProgressSteps:void 0,m=t?e.safeOpponentManaProgressSteps:void 0,d=c&&e.spiritAssistedDenial;return{safeSupermanaProgress:l!==void 0,safeSupermanaProgressSteps:l,safeOpponentManaProgress:m!==void 0||d,safeOpponentManaProgressSteps:m,spiritAssistedScore:u&&e.spiritAssistedScore,spiritAssistedScoreValue:u?e.spiritAssistedScoreValue:0,spiritAssistedDenial:d,spiritAssistedDenialValue:c?e.spiritAssistedDenialValue:0,sameTurnScoreWindowValue:i?e.sameTurnScoreWindowValue:0}}p(gC,"turnTacticalProjectionForFlags");function vC(e,n,o){if(e.session.checkpointWithReserve(20))return Xo();let t=n.activeColor,r=Math.max(fe-n.monsMovesCount,0),a=(o&xt)!==0,i=(o&It)!==0,s=(o&lr)!==0,u=(o&dr)!==0,c=(o&$o)!==0,l=c&&(i||u),m=0;(s||c)&&(m|=ba),(u||l)&&(m|=Ca);let d=m===0?Ke():qc(e,n.board,t,r,n.playerCanUseAction(),m);if(e.session.checkpointWithReserve(20))return Xo();let y=a?Qs(e,n,t,{kind:"supermana"}):void 0;if(e.session.checkpointWithReserve(20))return Xo();let f=i?Qs(e,n,t,{kind:"regular",color:q(t)}):void 0;if(e.session.checkpointWithReserve(20))return Xo();let h=c?Math.max(Kc(e,n.board,t,r),d.sameTurnScoreValue,l?d.sameTurnOpponentManaScoreValue:0):0;return e.session.checkpointWithReserve(20)?Xo():{safeSupermanaProgress:y!==void 0,safeSupermanaProgressSteps:y,safeOpponentManaProgress:f!==void 0||d.sameTurnOpponentManaScore,safeOpponentManaProgressSteps:f,spiritAssistedScore:d.sameTurnScore,spiritAssistedScoreValue:d.sameTurnScoreValue,spiritAssistedDenial:d.sameTurnOpponentManaScore,spiritAssistedDenialValue:d.sameTurnOpponentManaScoreValue,sameTurnScoreWindowValue:h}}p(vC,"buildExactTurnTacticalProjection");function Ro(e,n,o,t,r){if(r===0||n.activeColor!==o||e.session.checkpointWithReserve(20))return Xo();let a=Math.max(fe-n.monsMovesCount,0),i=On(En(o),a,n.playerCanUseAction()?1:0,r),s=i===void 0?void 0:Ce(e).turnTacticalProjection.get(t,i);if(s!==void 0)return s;for(let c=1;c<=la;c+=1){if(c===r||(c&r)!==r)continue;let l=On(En(o),a,n.playerCanUseAction()?1:0,c),m=l===void 0?void 0:Ce(e).turnTacticalProjection.get(t,l);if(m!==void 0){let d=gC(m,r);return e.session.cacheWriteAllowed?(i!==void 0&&Ce(e).turnTacticalProjection.set(t,d,i),d):Xo()}}let u=vC(e,n,r);return e.session.cacheWriteAllowed?(i!==void 0&&Ce(e).turnTacticalProjection.set(t,u,i),u):Xo()}p(Ro,"exactTurnTacticalProjectionWithSearchHash");function zc(e,n,o,t){return Ro(e,n,o,t,$o).sameTurnScoreWindowValue}p(zc,"exactSameTurnScoreWindowWithSearchHash");function AC(e,n){if(e.session.checkpointWithReserve(20))return Nt();let o=n.activeColor,t=Math.max(fe-n.monsMovesCount,0),r=qc(e,n.board,o,t,n.playerCanUseAction(),ba|Ca|vi);if(e.session.checkpointWithReserve(20))return Nt();let a=Qs(e,n,o,{kind:"supermana"});if(e.session.checkpointWithReserve(20))return Nt();let i=Qs(e,n,o,{kind:"regular",color:q(o)});if(e.session.checkpointWithReserve(20))return Nt();let s=Math.max(Kc(e,n.board,o,t),r.sameTurnScoreValue,r.sameTurnOpponentManaScoreValue),u=rn(n.board),c={canAttackOpponentDrainer:Am(e,n,o,u),safeSupermanaProgress:a!==void 0,safeSupermanaProgressSteps:a,safeOpponentManaProgress:i!==void 0||r.sameTurnOpponentManaScore,safeOpponentManaProgressSteps:i,spiritAssistedSupermanaProgress:r.supermanaProgress,spiritAssistedOpponentManaProgress:r.opponentManaProgress,spiritAssistedScore:r.sameTurnScore,spiritAssistedDenial:r.sameTurnOpponentManaScore,sameTurnScoreWindowValue:s,scorePathBestSteps:gi(e,n.board,o)};return e.session.checkpointWithReserve(20)?Nt():c}p(AC,"buildExactTurnSummary");function Em(e,n,o,t){if(n.activeColor!==o||e.session.checkpointWithReserve(20))return Nt();let r=Ce(e).turnSummary.get(t);if(r!==void 0)return r;let a=AC(e,n);return e.session.cacheWriteAllowed?(Ce(e).turnSummary.set(t,a),a):Nt()}p(Em,"exactTurnSummaryWithSearchHash");function Zs(e,n,o){return Em(e,n,o,ie(n))}p(Zs,"exactTurnSummary");function $c(e,n,o){return Zs(e,n,o).canAttackOpponentDrainer}p($c,"canAttackOpponentDrainerThisTurn");function Mr(e,n,o,t){if(n.activeColor!==o||e.session.checkpointWithReserve(20))return pt();let r={remainingMonMoves:Math.max(fe-n.monsMovesCount,0),canUseAction:n.playerCanUseAction(),canMoveMana:n.playerCanMoveMana()},a=rn(n.board),i=Ro(e,n,o,t,la);if(e.session.checkpointWithReserve(20))return pt();let s=wi(e,n.board,a,o);if(e.session.checkpointWithReserve(20))return pt();let u=q(o),c=u===T.White?n.whiteScore:n.blackScore,l=Math.max(Ee-c,0),m=br(e,n,t).colorSummary(u).immediateWindow.bestScore;if(e.session.checkpointWithReserve(20))return pt();let d=l>0&&m>=l,y=l>0&&i.sameTurnScoreWindowValue>0?Math.min(i.sameTurnScoreWindowValue,l):0,f={budget:r,turn:i,delta:{sameTurnScoreWindowValue:i.sameTurnScoreWindowValue,spiritGain:Math.max(i.spiritAssistedScoreValue,i.spiritAssistedDenialValue),opponentWindowDenyGain:y,drainerAttackAvailable:Am(e,n,o,a),drainerSafety:s,safeSupermanaProgressSteps:i.safeSupermanaProgressSteps,safeOpponentManaProgressSteps:i.safeOpponentManaProgressSteps},opponentCanWinImmediately:d};return e.session.checkpointWithReserve(20)?pt():f}p(Mr,"exactOpportunityContextWithSearchHash");function de(e,n,o){return Mr(e,n,o,ie(n))}p(de,"exactOpportunityContext");var EC=2500,OC=2500,xC=9200,IC=2,Xc=new Set(ui.map(Q));function NC(e,n){let o=e.kind!=="mon-with-mana"&&(n.kind===A.Mystic||n.kind===A.Demon||e.kind==="mon-with-consumable"),t=n.kind===A.Mystic||n.kind===A.Demon,r=e.kind==="mon-with-consumable"&&e.consumable===j.Bomb;return[o,t,r]}p(NC,"scoringDangerSourceFlags");function DC(e){let n={manaEntries:[],liveManaCarriers:[[],[]],liveMonLocations:[[],[]],liveDrainerLocations:[[],[]],liveAngelLocations:[[],[]],dangerSources:[[],[]],looseConsumableLocations:[],regularManaMoveScores:[0,0],regularManaScorePathSteps:[void 0,void 0]};for(let[o,t]of e.entries())switch(t.kind){case"mana":{let r=Wo(o,{kind:"any-closest-pool"})-1;if(n.manaEntries.push({location:o,mana:t.mana}),t.mana.kind==="regular"){let a=Dn(t.mana.color),i=r+1,s=n.regularManaScorePathSteps[a];n.regularManaScorePathSteps[a]=s===void 0?i:Math.min(s,i),r<=1&&(n.regularManaMoveScores[a]=xe(t.mana,t.mana.color))}break}case"mon":case"mon-with-mana":case"mon-with-consumable":{let r=t.mon;if(U(r))break;let a=Dn(r.color);t.kind==="mon-with-mana"&&n.liveManaCarriers[a].push({location:o,mana:t.mana}),n.liveMonLocations[a].push(o),r.kind===A.Drainer&&n.liveDrainerLocations[a].push(o),r.kind===A.Angel&&n.liveAngelLocations[a].push(o);let[i,s,u]=NC(t,r);(i||s||u)&&n.dangerSources[a].push({location:o,heuristicThreat:i,exactActionThreat:s,exactBombThreat:u});break}case"consumable":n.looseConsumableLocations.push(o);break}return n}p(DC,"scoringBoardSummary");function WC(e){return!e.exactDangerThreat&&!e.walkThreat}p(WC,"exactSafe");function Om(e){return e.angelNearby&&!e.exactDangerThreat}p(Om,"guardedAgainstExactAttack");var Do,Ma,Nn,ka,Ra,Pa,Ai,kr,Ei,Oi,xi,Ii,wa,Ta,Ni,Zo,Lm,Vm,eu,Jc=class Jc{constructor(n,o,t){X(this,Zo);X(this,Do);X(this,Ma);X(this,Nn);X(this,ka);X(this,Ra);X(this,Pa);X(this,Ai);X(this,kr);X(this,Ei);X(this,Oi);X(this,xi);X(this,Ii);X(this,wa);X(this,Ta);X(this,Ni,new Map);H(this,Do,n),H(this,Ma,o),H(this,Nn,o.board),H(this,ka,rn(w(this,Nn))),H(this,Ra,t.allowExactStrategic),H(this,Pa,t.useAttackReachSummary??!1),H(this,Ai,t.narrowAttackReachTargets??!1),H(this,kr,t.narrowAttackReachToDrainers??!1),H(this,Ta,Array.from({length:242},()=>{}))}get boardHash(){return w(this,ka)}get execution(){return w(this,Do)}get game(){return w(this,Ma)}get board(){return w(this,Nn)}get allowExactStrategic(){return w(this,Ra)}boardSummary(){return w(this,Ei)??H(this,Ei,DC(w(this,Nn))),w(this,Ei)}manaPathSnapshot(){return w(this,Oi)??H(this,Oi,LC(this.boardSummary())),w(this,Oi)}exactAnalysis(){if(w(this,Ra))return w(this,xi)??H(this,xi,Cr(w(this,Do),w(this,Ma))),w(this,xi)}drainerImmediateThreats(n,o){if(w(this,Pa))return Y(this,Zo,eu).call(this,q(n),n,0,!0,w(this,kr)).immediateThreats(o);let t=Q(o)+(n===T.Black?121:0),r=w(this,Ta)[t];if(r!==void 0)return r;let a=Ri(w(this,Do),w(this,Nn),n,o);return w(this,Ta)[t]=a,a}canAttackTargetOnBoard(n,o,t,r,a){if(w(this,Pa)){let i=w(this,Nn).get(t),s=i===void 0?void 0:K(i);if(w(this,kr)&&s?.color===o&&s.kind===A.Drainer)return Y(this,Zo,eu).call(this,n,o,r,a,!0).canAttackTarget(t);if(!w(this,kr))return Y(this,Zo,eu).call(this,n,o,r,a,!1).canAttackTarget(t)}return _t(w(this,Do),w(this,Nn),w(this,ka),n,o,t,r,a)}};Do=new WeakMap,Ma=new WeakMap,Nn=new WeakMap,ka=new WeakMap,Ra=new WeakMap,Pa=new WeakMap,Ai=new WeakMap,kr=new WeakMap,Ei=new WeakMap,Oi=new WeakMap,xi=new WeakMap,Ii=new WeakMap,wa=new WeakMap,Ta=new WeakMap,Ni=new WeakMap,Zo=new WeakSet,Lm=p(function(n){return w(this,Ii)??H(this,Ii,[Mi(w(this,Nn),T.White),Mi(w(this,Nn),T.Black)]),w(this,Ii)[Dn(n)]},"#targets"),Vm=p(function(n){if(w(this,wa)===void 0){let o=[],t=[];for(let[r,a]of w(this,Nn).entries()){let i=K(a);i?.kind===A.Drainer&&(i.color===T.White?o:t).push(r)}H(this,wa,[o,t])}return w(this,wa)[Dn(n)]},"#drainerTargets"),eu=p(function(n,o,t,r,a){let i=Number.isInteger(t)&&t>=0&&t<=65535?t*16+Vn(n)+Vn(o)*2+Number(r)*4+Number(a)*8:void 0;if(i!==void 0){let u=w(this,Ni).get(i);if(u!==void 0)return u}let s;return a?s=ki(w(this,Do),w(this,Nn),n,t,r,Y(this,Zo,Vm).call(this,o)):w(this,Ai)?s=ki(w(this,Do),w(this,Nn),n,t,r,Y(this,Zo,Lm).call(this,o)):s=Vc(w(this,Do),w(this,Nn),n,o,t,r),i!==void 0&&w(this,Ni).set(i,s),s},"#attackReachSummary"),p(Jc,"ScoringEvalContext");var Zc=Jc;function Vt(e,n,o,t,r){let a=new Zc(e,n,{allowExactStrategic:r});return FC(a,o,t)}p(Vt,"evaluatePreferabilityWithWeightsAndExactPolicy");function FC(e,n,o){let t=e.game,r=e.allowExactStrategic?o.formula.useHeuristicFormula:!0,a=o.formula.includeRegularManaMoveWindows&&!r,i=o.formula.includeMatchPointWindow&&!r,s=Math.min(2e4,Math.max(0,Math.trunc(o.formula.nextTurnWindowScaleBp))),u=t.board.supermanaBase(),c=Math.max(0,fe-t.monsMovesCount),l=r?void 0:e.exactAnalysis(),m=l?.colorSummary(n),d=l?.colorSummary(q(n)),y=n===T.White?t.whiteScore:t.blackScore,f=n===T.White?t.blackScore:t.whiteScore,h=n===T.White?t.whiteScore-t.blackScore:t.blackScore-t.whiteScore,C=n===T.White?t.whitePotionsCount-t.blackPotionsCount:t.blackPotionsCount-t.whitePotionsCount,b=h*o.material.confirmedScore+C*o.material.hasConsumable;return o.formula.doubleConfirmedScore&&(b=b*o.material.confirmedScore),b=BC(n,o,e,r,u,c,l,m,d,b),b=_C(n,o,e,r,a,m,d,b),Us(GC(n,o,e,r,a,i,s,c,m,d,y,f,b))}p(FC,"evaluatePreferabilityWithContext");function BC(e,n,o,t,r,a,i,s,u,c){let l=o.game,m=c,d=p(b=>{m=m+b},"addScore"),y=p((b,k)=>{d(b*k)},"addSigned"),f=p((b,k,M)=>{d(Math.trunc(b*k/M))},"addSignedRatio"),h=p((b,k,M,R)=>{let P=_m(b.color,k,t,n.threat.drainerWalkThreatBoolean!==0,o);if(f(M,n.position.drainerCloseToMana,P.minMana),f(M,n.position.drainerCloseToOwnPool,Wo(k,{kind:"closest-pool",color:b.color})),f(M,n.position.drainerCloseToSupermana,UC(k,r)),Om(P)?y(M,n.position.angelGuardingDrainer):f(M,n.position.drainerAtRisk,P.riskDanger),R||!t){let E=t?Hm(o.manaPathSnapshot(),b.color,k):i?.colorSummary(b.color).bestDrainerPickup;if(E!==void 0){let D="pathSteps"in E?E.pathSteps:E[0],N="totalMoves"in E?E.totalMoves:D+1,B="manaValue"in E?E.manaValue:E[1];f(M,n.threat.drainerBestManaPath*B,D+1),b.color===l.activeColor&&N<=a&&y(M,n.threat.drainerPickupScoreThisTurn*B)}}if(n.threat.drainerImmediateThreat!==0){let[E,D]=Gm(b.color,k,o),N=P.angelNearby?D:E+D;N>0&&y(M,n.threat.drainerImmediateThreat*N)}let W=(n.threat.drainerDangerBoolean!==0||n.threat.drainerWalkThreatBoolean!==0)&&P.exactDangerThreat;n.threat.drainerDangerBoolean!==0&&W&&(y(M,n.threat.drainerDangerBoolean),M===-1&&d(n.threat.opponentDrainerAttackBonus)),n.threat.drainerWalkThreatBoolean!==0&&!W&&P.walkThreat&&y(M,n.threat.drainerWalkThreatBoolean)},"evaluateDrainer"),C=p((b,k,M)=>{let R=HC(b.color,k,o);f(M,n.position.spiritCloseToEnemy,R),y(-M,Im(l.board,b,k,n.position.spiritOnOwnBasePenalty));let P=t?4:6,g,W;if(t)g=Bm(l.board,k),W=0;else{let E=xm(Qo(s),Qo(u),b.color,e).spirit;g=E.utility,W=Fm(E,n)}y(M,n.threat.spiritActionUtility*Math.min(g,P)),y(M,W)},"evaluateSpirit");for(let[b,k]of l.board.entries())switch(k.kind){case"mon":{let M=k.mon,R=M.color===e?1:-1;U(M)?(y(R,M.kind===A.Drainer?n.material.faintedDrainer:n.material.faintedMon),y(R,n.material.faintedCooldownStep*M.cooldown)):M.kind===A.Drainer?h(M,b,R,!0):M.kind===A.Spirit?C(M,b,R):M.kind===A.Angel?f(R,n.position.angelCloseToFriendlyDrainer,Lt(M.color,b,o)):f(R,n.position.monCloseToCenter,Wo(b,{kind:"center"})),n.threat.attackerCloseToOpponentDrainer!==0&&!U(M)&&(M.kind===A.Demon||M.kind===A.Mystic)&&f(R,n.threat.attackerCloseToOpponentDrainer,Lt(q(M.color),b,o)),Xc.has(Q(b))||y(R,n.material.activeMon);break}case"mon-with-consumable":{let M=k.mon,R=M.color===e?1:-1;y(R,n.material.hasConsumable),M.kind===A.Drainer?h(M,b,R,!1):M.kind===A.Spirit?C(M,b,R):M.kind===A.Angel?f(R,n.position.angelCloseToFriendlyDrainer,Lt(M.color,b,o)):f(R,n.position.monCloseToCenter,Wo(b,{kind:"center"})),n.threat.attackerCloseToOpponentDrainer!==0&&!U(M)&&(M.kind===A.Demon||M.kind===A.Mystic||k.consumable===j.Bomb)&&f(R,n.threat.attackerCloseToOpponentDrainer,Lt(q(M.color),b,o)),!t&&!Xc.has(Q(b))&&y(R,n.material.activeMon);break}case"mana":{d(Math.trunc(n.position.manaCloseToSamePool/Wo(b,{kind:"closest-pool",color:e})));let M;if(k.mana.kind==="regular"){let R=k.mana.color,P=R===e?1:-1,g=Wo(b,{kind:"closest-pool",color:R}),W=Lt(R,b,o),E=Lt(q(R),b,o),D=Math.min(4,Math.max(-4,E-W));M=P*(Math.trunc(n.mana.regularManaToOwnerPool/g)+n.mana.regularManaDrainerControl*D),!t&&R===q(e)&&(M=M+n.mana.opponentManaDenial*-D)}else{let R=Lt(e,b,o),P=Lt(q(e),b,o),g=Math.min(4,Math.max(-4,P-R));M=n.mana.supermanaDrainerControl*g+(t?0:n.mana.supermanaRaceControl*g)}d(M);break}case"mon-with-mana":{let{mon:M,mana:R}=k,P=M.color===e?1:-1,g=Wo(b,{kind:"any-closest-pool"}),W=R.kind==="supermana"?n.position.extraForSupermana:R.color===e?0:n.position.extraForOpponentsMana;if(y(P,n.position.drainerHoldingMana),f(P,n.position.monWithManaCloseToAnyPool+W,g),g<=2){let N=R.kind==="supermana"?n.mana.manaCarrierOneStepFromPool+n.mana.supermanaCarrierOneStepFromPoolExtra:n.mana.manaCarrierOneStepFromPool;y(P,N),(M.color===T.White?l.whiteScore:l.blackScore)+xe(R,M.color)>=Ee&&y(P,n.mana.immediateWinningCarrier)}let E=!t&&M.kind===A.Drainer&&(R.kind==="supermana"||R.color!==M.color),D=_m(M.color,b,t,n.threat.manaCarrierWalkThreatBoolean!==0||E,o);if(f(P,n.mana.manaCarrierAtRisk,D.riskDanger),Om(D)&&y(P,n.mana.manaCarrierGuarded),!t&&M.kind===A.Drainer&&E){let N;R.kind==="supermana"?N=qe(n.mana.supermanaRaceControl,EC):R.color!==M.color?N=qe(n.mana.opponentManaDenial,OC):N=0,N=Math.min(xC,Math.max(0,N));let B=M.color===T.White?l.blackScore:l.whiteScore,G=Math.max(0,Ee-IC);if(N>0&&WC(D)&&B<=G){let L=qe(n.material.confirmedScore,2);y(P,oo(L,N))}}if(M.color===l.activeColor&&g-1<=a&&y(P,n.threat.manaCarrierScoreThisTurn),M.kind===A.Drainer){f(P,n.position.drainerCloseToOwnPool,Wo(b,{kind:"closest-pool",color:M.color}));let[N,B]=Gm(M.color,b,o),G=D.angelNearby?B:N+B;G>0&&y(P,n.threat.drainerImmediateThreat*G);let $=(n.threat.manaCarrierDangerBoolean!==0||n.threat.manaCarrierWalkThreatBoolean!==0)&&D.exactDangerThreat;n.threat.manaCarrierDangerBoolean!==0&&$&&(y(P,n.threat.manaCarrierDangerBoolean),P===-1&&d(n.threat.opponentDrainerAttackBonus)),n.threat.manaCarrierWalkThreatBoolean!==0&&!$&&D.walkThreat&&y(P,n.threat.manaCarrierWalkThreatBoolean)}else if(M.kind===A.Spirit){y(-P,Im(l.board,M,b,n.position.spiritOnOwnBasePenalty));let N=t?4:6,B,G;if(t)B=Bm(l.board,b),G=0;else{let L=xm(Qo(s),Qo(u),M.color,e).spirit;B=L.utility,G=Fm(L,n)}y(P,n.threat.spiritActionUtility*Math.min(B,N)),y(P,G)}!t&&!Xc.has(Q(b))&&y(P,n.material.activeMon);break}case"consumable":break}return m}p(BC,"scorePreferabilityBoardItems");function _C(e,n,o,t,r,a,i,s){let u=s,c=t?Dm(o,e,!1,r):Nm(o,e,Qo(a),r),l=t?Dm(o,q(e),!1,r):Nm(o,q(e),Qo(i),r);return c.bestSteps!==void 0&&(u=u+oo(Math.trunc(n.race.scoreRacePathProgress/Math.max(1,c.bestSteps)),1e4),t||(u=u+oo(Math.trunc(n.race.scoreRaceMultiPath*c.multiPressure/100),1e4))),l.bestSteps!==void 0&&(u=u+-oo(Math.trunc(n.race.opponentScoreRacePathProgress/Math.max(1,l.bestSteps)),1e4),t||(u=u+-oo(Math.trunc(n.race.opponentScoreRaceMultiPath*l.multiPressure/100),1e4))),u}p(_C,"scorePreferabilityRaceWindows");function GC(e,n,o,t,r,a,i,s,u,c,l,m,d){let y=o.game,f=d;if(y.activeColor===e){let h=t?Wm(o,e,s,!1,r,r&&y.playerCanMoveMana()):Js(o,e,Qo(u),r&&y.playerCanMoveMana());if(f=f+oo(n.race.immediateScoreWindow*h.bestScore,1e4),!t){f=f+oo(Math.trunc(n.race.immediateScoreMultiWindow*h.multiPressure/100),1e4);let C=Js(o,q(e),Qo(c),r);f=f+-oo(Math.trunc(n.race.opponentImmediateScoreWindow*C.bestScore*i/1e4),1e4),f=f+-oo(Math.trunc(n.race.opponentImmediateScoreMultiWindow*C.multiPressure*i/1e6),1e4),a&&(l+h.bestScore>=Ee&&(f=f+n.mana.immediateWinningCarrier),m+C.bestScore>=Ee&&(f=f+-n.mana.immediateWinningCarrier))}}else{let h=t?Wm(o,q(e),s,!1,r,r&&y.playerCanMoveMana()):Js(o,q(e),Qo(c),r&&y.playerCanMoveMana());if(f=f+-oo(n.race.opponentImmediateScoreWindow*h.bestScore,1e4),!t){f=f+-oo(Math.trunc(n.race.opponentImmediateScoreMultiWindow*h.multiPressure/100),1e4);let C=Js(o,e,Qo(u),r);f=f+oo(Math.trunc(n.race.immediateScoreWindow*C.bestScore*i/1e4),1e4),f=f+oo(Math.trunc(n.race.immediateScoreMultiWindow*C.multiPressure*i/1e6),1e4),a&&(m+h.bestScore>=Ee&&(f=f+-n.mana.immediateWinningCarrier),l+C.bestScore>=Ee&&(f=f+n.mana.immediateWinningCarrier))}}return f}p(GC,"scorePreferabilityImmediateWindows");function Qo(e){if(e===void 0)throw new Error("exact strategic analysis should be available");return e}p(Qo,"requireExactSummary");function oo(e,n){return Math.trunc(Math.trunc(e)*Math.trunc(n)/1e4)}p(oo,"scaleByBp");function xm(e,n,o,t){return o===t?e:n}p(xm,"exactSummaryForScoring");function Im(e,n,o,t){return n.kind===A.Spirit&&!U(n)&&ge(o,e.base(n))?t:0}p(Im,"spiritOnOwnBasePenalty");function LC(e){return{candidates:e.manaEntries.map(n=>({location:n.location,scoreSteps:Wo(n.location,{kind:"any-closest-pool"})-1,mana:n.mana})),regularManaMoveScores:[e.regularManaMoveScores[0],e.regularManaMoveScores[1]]}}p(LC,"manaPathSnapshot");function Nm(e,n,o,t){if(!t)return o.scorePathWindow;let a=e.boardSummary().regularManaScorePathSteps[Dn(n)];return{bestSteps:a===void 0?o.scorePathWindow.bestSteps:o.scorePathWindow.bestSteps===void 0?a:Math.min(a,o.scorePathWindow.bestSteps),multiPressure:o.scorePathWindow.multiPressure}}p(Nm,"exactScorePathWindowForContext");function Dm(e,n,o,t){let r=e.boardSummary(),a=[2147483647,2147483647,2147483647];for(let u of r.liveManaCarriers[Dn(n)])Yc(a,Wo(u.location,{kind:"any-closest-pool"}));if(o){let u=e.manaPathSnapshot();for(let c of r.liveDrainerLocations[Dn(n)]){let l=Hm(u,n,c);l!==void 0&&Yc(a,l[0]+1)}}if(t){let u=r.regularManaScorePathSteps[Dn(n)];u!==void 0&&Yc(a,u)}let i=a[0]===2147483647?void 0:a[0],s=0;return a[1]!==2147483647&&(s=s+Math.trunc(70/Math.max(1,a[1]??1))),a[2]!==2147483647&&(s=s+Math.trunc(40/Math.max(1,a[2]??1))),{bestSteps:i,multiPressure:s}}p(Dm,"scorePathWindowToAnyPoolForContext");function Js(e,n,o,t){if(!t)return o.immediateWindow;let r=e.boardSummary().regularManaMoveScores[Dn(n)];return{bestScore:Math.max(o.immediateWindow.bestScore,r),multiPressure:o.immediateWindow.multiPressure}}p(Js,"exactImmediateScoreWindowForContext");function Wm(e,n,o,t,r,a){if(o<=0)return{bestScore:0,multiPressure:0};let i=e.boardSummary(),s=[0,0,0];for(let u of i.liveManaCarriers[Dn(n)])Wo(u.location,{kind:"any-closest-pool"})-1<=o&&Qc(s,xe(u.mana,n));if(t){let u=e.manaPathSnapshot();for(let c of i.liveDrainerLocations[Dn(n)]){let l=0;for(let m of u.candidates)te(c,m.location)+m.scoreSteps<=o&&(l=Math.max(l,xe(m.mana,n)));l>0&&Qc(s,l)}}if(r&&a){let u=i.regularManaMoveScores[Dn(n)];u>0&&Qc(s,u)}return{bestScore:s[0]??0,multiPressure:(s[1]??0)*70+(s[2]??0)*35}}p(Wm,"immediateScoreWindowSummaryForContext");function Fm(e,n){let o=Math.min(4,Math.max(0,e.nextTurnSetupGain)),t=0;return o>0&&(t=v(t,Math.trunc(qe(Math.max(0,n.race.scoreRacePathProgress),o)/4)),t=v(t,Math.trunc(qe(Math.max(0,n.race.opponentScoreRacePathProgress),o)/6)),t=v(t,Math.trunc(qe(Math.max(0,n.race.scoreRaceMultiPath),o)/8)),t=v(t,Math.trunc(qe(Math.max(0,n.race.opponentScoreRaceMultiPath),o)/10))),e.supermanaProgress&&!e.sameTurnScore&&(t=v(v(t,qe(Math.max(0,n.mana.supermanaRaceControl),3)),Math.trunc(Math.max(0,n.threat.drainerBestManaPath)/4))),e.opponentManaProgress&&!e.sameTurnOpponentManaScore&&(t=v(v(v(t,qe(Math.max(0,n.mana.opponentManaDenial),3)),Math.trunc(Math.max(0,n.threat.drainerBestManaPath)/4)),Math.trunc(Math.max(0,n.race.scoreRacePathProgress)/5))),t}p(Fm,"exactSpiritPressureBonus");function Bm(e,n){let o=0;for(let t of st(n)){let r=e.get(t);r!==void 0&&ut(r)&&(o+=1)}return o}p(Bm,"heuristicSpiritActionUtility");function Dn(e){return e===T.White?0:1}p(Dn,"colorSlot");function Yc(e,n){n>=(e[2]??2147483647)||(n<(e[0]??2147483647)?(e[2]=e[1]??2147483647,e[1]=e[0]??2147483647,e[0]=n):n<(e[1]??2147483647)?(e[2]=e[1]??2147483647,e[1]=n):e[2]=n)}p(Yc,"insertLowestStep");function Qc(e,n){n<=(e[2]??0)||(n>(e[0]??0)?(e[2]=e[1]??0,e[1]=e[0]??0,e[0]=n):n>(e[1]??0)?(e[2]=e[1]??0,e[1]=n):e[2]=n)}p(Qc,"insertTopScore");function Hm(e,n,o){let t;for(let r of e.candidates){let i=te(o,r.location)+r.scoreSteps,s=xe(r.mana,n);if(t===void 0){t=[i,s];continue}let u=i*3-s,c=t[0]*3-t[1];(u<c||u===c&&s>t[1])&&(t=[i,s])}return t}p(Hm,"bestDrainerPickupPathWithSnapshot");function VC(e,n,o,t){let r=t.boardSummary(),a=11,i=11;for(let u of r.manaEntries)a=Math.min(a,te(u.location,n));for(let u of r.dangerSources[Dn(q(e))]){if(o){u.heuristicThreat&&(i=Math.min(i,te(u.location,n)));continue}let c=2147483647;if(u.exactActionThreat&&(c=te(u.location,n)),u.exactBombThreat){let l=Math.max(1,te(u.location,n)-2);c=Math.min(c,l)}i=Math.min(i,c)}if(o)for(let u of r.looseConsumableLocations)i=Math.min(i,te(u,n));let s=r.liveAngelLocations[Dn(e)].some(u=>te(u,n)===1);return o?[i,a,s]:[Math.max(1,i),Math.max(1,a),s]}p(VC,"drainerDistancesWithContext");function _m(e,n,o,t,r){let a=r.board,[i,s,u]=VC(e,n,o,r),c=o?Hc(r.execution,a,e,n,u):r.canAttackTargetOnBoard(q(e),e,n,fe,!0),l=t&&!c&&yr(r.execution,a,r.boardHash,e,n,u);return{riskDanger:o?Math.max(1,i):c?1:Math.max(1,i),minMana:s,angelNearby:u,exactDangerThreat:c,walkThreat:l}}p(_m,"drainerSafetySnapshotWithContext");function Gm(e,n,o){return o.drainerImmediateThreats(e,n)}p(Gm,"drainerImmediateThreatsWithContext");function HC(e,n,o){let t=11;for(let r of o.boardSummary().liveMonLocations[Dn(q(e))])t=Math.min(t,te(r,n));return Math.max(1,t)}p(HC,"nearestEnemyMonDistanceWithContext");function Lt(e,n,o){let t=11;for(let r of o.boardSummary().liveDrainerLocations[Dn(e)])t=Math.min(t,te(r,n));return Math.max(1,t)}p(Lt,"nearestFriendlyDrainerDistanceWithContext");function UC(e,n){return te(e,n)+1}p(UC,"distanceToLocation");function Wo(e,n){let o;switch(n.kind){case"center":o=Math.max(1,Math.abs(id-e.i));break;case"any-closest-pool":o=Math.max(Math.min(e.i,Math.abs(Yr-e.i)),Math.min(e.j,Math.abs(Yr-e.j)));break;case"closest-pool":{let t=n.color===T.White?Yr:0;o=Math.max(Math.abs(t-e.i),Math.min(e.j,Math.abs(Yr-e.j)));break}}return o+1}p(Wo,"distance");var jC=/^[a-z0-9]+(?:[.-][a-z0-9]+)*$/,KC=["id","formula","material","position","mana","race","threat"],jm=["useHeuristicFormula","includeRegularManaMoveWindows","includeMatchPointWindow","nextTurnWindowScaleBp","doubleConfirmedScore"],Km=["confirmedScore","faintedMon","faintedDrainer","faintedCooldownStep","hasConsumable","activeMon"],qm=["drainerAtRisk","manaCloseToSamePool","monWithManaCloseToAnyPool","extraForSupermana","extraForOpponentsMana","drainerCloseToMana","drainerHoldingMana","drainerCloseToOwnPool","drainerCloseToSupermana","monCloseToCenter","spiritCloseToEnemy","spiritOnOwnBasePenalty","angelGuardingDrainer","angelCloseToFriendlyDrainer"],zm=["regularManaToOwnerPool","regularManaDrainerControl","supermanaDrainerControl","supermanaRaceControl","opponentManaDenial","manaCarrierAtRisk","manaCarrierGuarded","manaCarrierOneStepFromPool","supermanaCarrierOneStepFromPoolExtra","immediateWinningCarrier"],$m=["scoreRacePathProgress","opponentScoreRacePathProgress","scoreRaceMultiPath","opponentScoreRaceMultiPath","immediateScoreWindow","opponentImmediateScoreWindow","immediateScoreMultiWindow","opponentImmediateScoreMultiWindow"],Xm=["drainerBestManaPath","drainerPickupScoreThisTurn","manaCarrierScoreThisTurn","drainerImmediateThreat","spiritActionUtility","drainerDangerBoolean","manaCarrierDangerBoolean","drainerWalkThreatBoolean","manaCarrierWalkThreatBoolean","opponentDrainerAttackBonus","attackerCloseToOpponentDrainer"],Um=new Map,nu=new WeakSet;function ep(e,n,o){let t=Object.keys(n).sort(),r=[...o].sort();if(t.length!==r.length||t.some((a,i)=>a!==r[i]))throw new TypeError(`${e} must contain exactly: ${r.join(", ")}`)}p(ep,"validateExactKeys");function Ym(e){if(typeof e!="string"||e.length>96||!jC.test(e))throw new RangeError(`scoring profile id must be a lower-case dotted or dashed identifier: ${e}`)}p(Ym,"validateProfileId");function Di(e,n,o){ep(e,n,o);for(let[t,r]of Object.entries(n))if(!Number.isSafeInteger(r)||Math.abs(r)>1e4)throw new RangeError(`${e}.${t} must be a safe integer between -10000 and 10000`)}p(Di,"validateNumericSection");function qC(e){ep("formula",e,jm);for(let[n,o]of Object.entries(e))if(n==="nextTurnWindowScaleBp"){if(typeof o!="number"||!Number.isSafeInteger(o)||o<0||o>2e4)throw new RangeError("formula.nextTurnWindowScaleBp must be an integer between 0 and 20000")}else if(typeof o!="boolean")throw new TypeError(`formula.${n} must be a boolean`)}p(qC,"validateFormula");function zC(e){return JSON.stringify([jm.map(n=>e.formula[n]),Km.map(n=>e.material[n]),qm.map(n=>e.position[n]),zm.map(n=>e.mana[n]),$m.map(n=>e.race[n]),Xm.map(n=>e.threat[n])])}p(zC,"profileSignature");function $C(e){let n=zC(e),o=Um.get(e.id);if(o!==void 0&&o!==n)throw new RangeError(`scoring profile id ${e.id} is already registered with different weights`);Um.set(e.id,n)}p($C,"registerProfileIdentity");function Pn(e){return Object.freeze(e)}p(Pn,"freezeSection");function bn(e){Ym(e.id);let n=e.base;if(n===void 0)throw new TypeError("a scoring profile must extend a complete base profile; use the built-in default profile as the root");let o={id:e.id,formula:Pn({...n.formula,...e.formula}),material:Pn({...n.material,...e.material}),position:Pn({...n.position,...e.position}),mana:Pn({...n.mana,...e.mana}),race:Pn({...n.race,...e.race}),threat:Pn({...n.threat,...e.threat})};ga(o);let t=Object.freeze(o);return nu.add(t),t}p(bn,"defineScoringProfile");function ga(e){if(typeof e!="object"||e===null)throw new TypeError("scoring profile must be an object");let n=e;ep("scoring profile",n,KC),Ym(n.id),qC(n.formula),Di("material",n.material,Km),Di("position",n.position,qm),Di("mana",n.mana,zm),Di("race",n.race,$m),Di("threat",n.threat,Xm),$C(n)}p(ga,"validateScoringProfile");function va(e){return e.id}p(va,"scoringProfileId");function np(e){if(ga(e),nu.has(e))return e;let n=Object.freeze({id:e.id,formula:Pn({...e.formula}),material:Pn({...e.material}),position:Pn({...e.position}),mana:Pn({...e.mana}),race:Pn({...e.race}),threat:Pn({...e.threat})});return ga(n),nu.add(n),n}p(np,"normalizeScoringProfile");var XC=Pn({useHeuristicFormula:!0,includeRegularManaMoveWindows:!1,includeMatchPointWindow:!1,nextTurnWindowScaleBp:5e3,doubleConfirmedScore:!0}),YC=Pn({confirmedScore:1e3,faintedMon:-500,faintedDrainer:-800,faintedCooldownStep:0,hasConsumable:110,activeMon:50}),QC=Pn({drainerAtRisk:-350,manaCloseToSamePool:500,monWithManaCloseToAnyPool:800,extraForSupermana:120,extraForOpponentsMana:100,drainerCloseToMana:300,drainerHoldingMana:350,drainerCloseToOwnPool:180,drainerCloseToSupermana:120,monCloseToCenter:210,spiritCloseToEnemy:160,spiritOnOwnBasePenalty:180,angelGuardingDrainer:180,angelCloseToFriendlyDrainer:120}),ZC=Pn({regularManaToOwnerPool:0,regularManaDrainerControl:0,supermanaDrainerControl:0,supermanaRaceControl:0,opponentManaDenial:0,manaCarrierAtRisk:0,manaCarrierGuarded:0,manaCarrierOneStepFromPool:0,supermanaCarrierOneStepFromPoolExtra:0,immediateWinningCarrier:0}),JC=Pn({scoreRacePathProgress:0,opponentScoreRacePathProgress:0,scoreRaceMultiPath:0,opponentScoreRaceMultiPath:0,immediateScoreWindow:0,opponentImmediateScoreWindow:0,immediateScoreMultiWindow:0,opponentImmediateScoreMultiWindow:0}),eM=Pn({drainerBestManaPath:0,drainerPickupScoreThisTurn:0,manaCarrierScoreThisTurn:0,drainerImmediateThreat:0,spiritActionUtility:0,drainerDangerBoolean:0,manaCarrierDangerBoolean:0,drainerWalkThreatBoolean:0,manaCarrierWalkThreatBoolean:0,opponentDrainerAttackBonus:0,attackerCloseToOpponentDrainer:0}),Wi=Object.freeze({id:"default",formula:XC,material:YC,position:QC,mana:ZC,race:JC,threat:eM});nu.add(Wi);ga(Wi);var Rr=bn({id:"balanced-distance",base:Wi,material:{faintedMon:-520,faintedDrainer:-900,faintedCooldownStep:-80,hasConsumable:105,activeMon:45},position:{drainerAtRisk:-420,manaCloseToSamePool:520,monWithManaCloseToAnyPool:820,extraForSupermana:130,extraForOpponentsMana:120,drainerCloseToMana:330,drainerHoldingMana:370,drainerCloseToOwnPool:280,drainerCloseToSupermana:180,monCloseToCenter:180,spiritCloseToEnemy:220,angelGuardingDrainer:280,angelCloseToFriendlyDrainer:180},mana:{manaCarrierOneStepFromPool:160,supermanaCarrierOneStepFromPoolExtra:80}}),nM=bn({id:"mana-race-lite",base:Rr,material:{faintedCooldownStep:-70},position:{manaCloseToSamePool:420,drainerCloseToOwnPool:290,drainerCloseToSupermana:200,angelGuardingDrainer:290},mana:{regularManaToOwnerPool:150,regularManaDrainerControl:15,supermanaDrainerControl:26,manaCarrierAtRisk:-150,manaCarrierGuarded:70,manaCarrierOneStepFromPool:220,supermanaCarrierOneStepFromPoolExtra:120,immediateWinningCarrier:0}}),Qm=bn({id:"finisher-balanced",base:Rr,mana:{manaCarrierOneStepFromPool:220,supermanaCarrierOneStepFromPoolExtra:110,immediateWinningCarrier:360}}),Zm=bn({id:"finisher-aggressive",base:Rr,mana:{manaCarrierOneStepFromPool:250,supermanaCarrierOneStepFromPoolExtra:130,immediateWinningCarrier:540}}),op=bn({id:"mana-race-lite-d2",base:nM,position:{manaCloseToSamePool:380,drainerCloseToOwnPool:320},mana:{regularManaToOwnerPool:170,regularManaDrainerControl:18,manaCarrierAtRisk:-210,manaCarrierGuarded:95,manaCarrierOneStepFromPool:260,supermanaCarrierOneStepFromPoolExtra:150,immediateWinningCarrier:300}}),tp=bn({id:"tactical-balanced",base:Rr,material:{faintedCooldownStep:-120},position:{spiritCloseToEnemy:230,angelGuardingDrainer:300},mana:{manaCarrierAtRisk:-200,manaCarrierGuarded:110,manaCarrierOneStepFromPool:240,supermanaCarrierOneStepFromPoolExtra:150}}),Jm=bn({id:"tactical-aggressive",base:tp,material:{faintedCooldownStep:-160},position:{spiritCloseToEnemy:250,angelGuardingDrainer:320},mana:{manaCarrierAtRisk:-260,manaCarrierGuarded:140,manaCarrierOneStepFromPool:320,supermanaCarrierOneStepFromPoolExtra:220}}),ef=bn({id:"runtime-fast-context",base:op,formula:{useHeuristicFormula:!1},material:{confirmedScore:920},position:{drainerCloseToMana:360,drainerHoldingMana:430},mana:{manaCarrierAtRisk:-285,manaCarrierGuarded:145,manaCarrierOneStepFromPool:320,supermanaCarrierOneStepFromPoolExtra:210,immediateWinningCarrier:520},race:{scoreRacePathProgress:165,opponentScoreRacePathProgress:150,scoreRaceMultiPath:60,opponentScoreRaceMultiPath:90,immediateScoreWindow:240,opponentImmediateScoreWindow:220,immediateScoreMultiWindow:80,opponentImmediateScoreMultiWindow:120},threat:{drainerBestManaPath:250,drainerPickupScoreThisTurn:210,manaCarrierScoreThisTurn:290,drainerImmediateThreat:-220,spiritActionUtility:56}}),rp=bn({id:"runtime-fast-context-potion",base:ef,material:{hasConsumable:320},threat:{spiritActionUtility:72}}),ou=bn({id:"runtime-fast-boolean",base:ef,mana:{supermanaRaceControl:30},threat:{drainerDangerBoolean:-400,manaCarrierDangerBoolean:-300}}),nf=bn({id:"runtime-fast-boolean-potion",base:ou,material:{hasConsumable:320},threat:{spiritActionUtility:72}});var Le=Object.freeze({Baseline:"baseline",Production:"production"});function I(e){return e.planner.mode===Le.Production}p(I,"productionEnabled");function Fi(e,n){let o=e.board.get(e.board.base({kind:A.Spirit,color:n,cooldown:0})),t=o===void 0?void 0:K(o);return t?.kind===A.Spirit&&t.color===n&&!U(t)}p(Fi,"hasAwakeSpiritOnBase");function Aa(e,n){return!e.isFirstTurn()&&e.playerCanMoveMon()&&Fi(e,n)}p(Aa,"shouldPreferSpiritDevelopment");function Z(e){return e.winsImmediately||e.scoresSupermanaThisTurn||e.scoresOpponentManaThisTurn||e.safeSupermanaPickupNow||e.safeOpponentManaPickupNow}p(Z,"hasConcreteScoreSurface");function z(e){return e.safeSupermanaPickupNow||e.safeOpponentManaPickupNow||e.supermanaProgress||e.opponentManaProgress}p(z,"hasProgressSurface");function x(e){return e.manaHandoffToOpponent||e.ownDrainerVulnerable&&!e.classes.drainerSafetyRecover&&!e.attacksOpponentDrainer&&!Z(e)}p(x,"rootIsUnsafe");function F(e){return e.spiritDevelopment&&!e.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow}p(F,"isPlainSpiritDevelopmentRoot");var ip=1,sp=5,oM=32,Ui=18e4,tM=2,rM=480,aM=3,af=3800,iM=4,up=Math.trunc(af*369/100),sM=140,uM=3,cM=8,pM=600,lM=180,cp=6,pp=2200,dM=220,mM=140,fM=2500,yM=340,sf=260,SM=240,hM=420,bM=210,CM=360,MM=220,kM=140,Pr=Object.freeze({maxExtensionsPerPath:1,extensionNodeShareBp:1500,quiescenceNodes:120,quiescenceEnumerationLimit:12,futilityMargin:2300,transpositionCapacity:12e3,evaluationCacheCapacity:32768}),uf=Object.freeze({fast:Object.freeze({depth:tM,maxVisitedNodes:rM}),normal:Object.freeze({depth:aM,maxVisitedNodes:af}),pro:Object.freeze({depth:iM,maxVisitedNodes:up})}),Bi=Object.freeze({balanced:bn({id:"runtime-normal.base.balanced",base:Rr,formula:{useHeuristicFormula:!1},material:{confirmedScore:900},position:{spiritOnOwnBasePenalty:260,angelGuardingDrainer:120,drainerHoldingMana:470,drainerCloseToMana:360},mana:{supermanaRaceControl:30,opponentManaDenial:24},race:{scoreRacePathProgress:86,opponentScoreRacePathProgress:184,immediateScoreWindow:96,opponentImmediateScoreWindow:245},threat:{drainerImmediateThreat:-55,drainerBestManaPath:58,drainerPickupScoreThisTurn:90,manaCarrierScoreThisTurn:150,spiritActionUtility:86}}),tactical:bn({id:"runtime-normal.base.tactical",base:tp,formula:{useHeuristicFormula:!1},material:{confirmedScore:900},position:{spiritOnOwnBasePenalty:260,angelGuardingDrainer:180,drainerHoldingMana:500,drainerCloseToMana:390},mana:{supermanaRaceControl:34,opponentManaDenial:30},race:{scoreRacePathProgress:94,opponentScoreRacePathProgress:220,immediateScoreWindow:102,opponentImmediateScoreWindow:310},threat:{drainerImmediateThreat:-90,drainerBestManaPath:84,drainerPickupScoreThisTurn:110,manaCarrierScoreThisTurn:180,spiritActionUtility:90}}),tacticalAggressive:bn({id:"runtime-normal.base.tactical-aggressive",base:Jm,formula:{useHeuristicFormula:!1},material:{confirmedScore:890},position:{spiritOnOwnBasePenalty:260,angelGuardingDrainer:190,drainerHoldingMana:520,drainerCloseToMana:410},mana:{supermanaRaceControl:40,opponentManaDenial:34},race:{scoreRacePathProgress:104,opponentScoreRacePathProgress:255,immediateScoreWindow:114,opponentImmediateScoreWindow:360},threat:{drainerImmediateThreat:-120,drainerBestManaPath:96,drainerPickupScoreThisTurn:130,manaCarrierScoreThisTurn:220,spiritActionUtility:94}}),finisher:bn({id:"runtime-normal.base.finisher",base:Qm,formula:{useHeuristicFormula:!1},material:{confirmedScore:930},position:{spiritOnOwnBasePenalty:260,drainerHoldingMana:500,drainerCloseToMana:375,angelGuardingDrainer:170},mana:{supermanaRaceControl:32,opponentManaDenial:28},race:{scoreRacePathProgress:170,opponentScoreRacePathProgress:170,immediateScoreWindow:275,opponentImmediateScoreWindow:235},threat:{drainerBestManaPath:72,drainerPickupScoreThisTurn:120,manaCarrierScoreThisTurn:240,spiritActionUtility:88}}),finisherAggressive:bn({id:"runtime-normal.base.finisher-aggressive",base:Zm,formula:{useHeuristicFormula:!1},material:{confirmedScore:940},position:{spiritOnOwnBasePenalty:260,drainerHoldingMana:520,drainerCloseToMana:395,angelGuardingDrainer:180},mana:{supermanaRaceControl:36,opponentManaDenial:30},race:{scoreRacePathProgress:195,opponentScoreRacePathProgress:185,immediateScoreWindow:330,opponentImmediateScoreWindow:265},threat:{drainerBestManaPath:84,drainerPickupScoreThisTurn:140,manaCarrierScoreThisTurn:280,spiritActionUtility:90}})});function _i(e,n){return bn({id:e,base:n,threat:{drainerDangerBoolean:-1200,manaCarrierDangerBoolean:-800}})}p(_i,"withBooleanDrainer");var Jo=Object.freeze({balanced:_i("runtime-normal.boolean.balanced",Bi.balanced),tactical:_i("runtime-normal.boolean.tactical",Bi.tactical),tacticalAggressive:_i("runtime-normal.boolean.tactical-aggressive",Bi.tacticalAggressive),finisher:_i("runtime-normal.boolean.finisher",Bi.finisher),finisherAggressive:_i("runtime-normal.boolean.finisher-aggressive",Bi.finisherAggressive)});function Gi(e,n){return bn({id:e,base:n,threat:{drainerWalkThreatBoolean:-300,manaCarrierWalkThreatBoolean:-150}})}p(Gi,"withMediumWalkThreat");function Li(e,n){return bn({id:e,base:n,threat:{attackerCloseToOpponentDrainer:200}})}p(Li,"withAttackerProximity");function cf(e,n,o,t,r,a){let[i,s]=e.activeColor===T.White?[e.whiteScore,e.blackScore]:[e.blackScore,e.whiteScore],u=Ee-i,c=Ee-s,l=i-s;return u<=1?a:c<=1?t:u<=2?r:c<=2||l<=-1?o:n}p(cf,"phaseProfile");var Vi=Object.freeze({balanced:Object.freeze({weights:Gi("runtime-normal-walk-balanced",Jo.balanced)}),tactical:Object.freeze({weights:Gi("runtime-normal-walk-tactical",Jo.tactical)}),tacticalAggressive:Object.freeze({weights:Gi("runtime-normal-walk-tactical-aggressive",Jo.tacticalAggressive)}),finisher:Object.freeze({weights:Gi("runtime-normal-walk-finisher",Jo.finisher)}),finisherAggressive:Object.freeze({weights:Gi("runtime-normal-walk-finisher-aggressive",Jo.finisherAggressive)})}),Hi=Object.freeze({balanced:Object.freeze({weights:Li("runtime-normal-attacker-balanced",Jo.balanced)}),tactical:Object.freeze({weights:Li("runtime-normal-attacker-tactical",Jo.tactical)}),tacticalAggressive:Object.freeze({weights:Li("runtime-normal-attacker-tactical-aggressive",Jo.tacticalAggressive)}),finisher:Object.freeze({weights:Li("runtime-normal-attacker-finisher",Jo.finisher)}),finisherAggressive:Object.freeze({weights:Li("runtime-normal-attacker-finisher-aggressive",Jo.finisherAggressive)})});function RM(e,n){return n<3?Object.freeze({weights:ou}):cf(e,Vi.balanced,Vi.tactical,Vi.tacticalAggressive,Vi.finisher,Vi.finisherAggressive)}p(RM,"runtimePhaseAdaptiveWalkThreatMediumScoringProfile");function PM(e,n){return n<3?Object.freeze({weights:ou}):cf(e,Hi.balanced,Hi.tactical,Hi.tacticalAggressive,Hi.finisher,Hi.finisherAggressive)}p(PM,"runtimePhaseAdaptiveAttackerProximityScoringProfile");function Me(e,n,o){return Math.min(o,Math.max(n,Math.trunc(e)))}p(Me,"clamp");function ru(e,n){return Math.max(0,e-n)}p(ru,"subtractSaturating");function ji(e,n,o){return Math.trunc(e*n/o)}p(ji,"scaleFloor");var of=1e6,ap=1e4,wM=["budget","search","planner","evaluation","replyRisk","policy"],TM=["preference","depth","maxVisitedNodes","exactLiteRootCalls","exactLiteStaticCalls","extensionNodeShareBp","quiescenceNodes"],gM=["depth","maxVisitedNodes","exactLiteRootCalls","exactLiteStaticCalls","extensionNodeShareBp","quiescenceNodes"],vM=["rootEnumerationLimit","rootBranchLimit","nodeEnumerationLimit","nodeBranchLimit","twoPassRootAllocation","volatilityFocus","selectiveExtensions","maxExtensionsPerPath","quietReductions","quietReductionDepthThreshold","quiescence","quiescenceEnumerationLimit","futilityPruning","futilityMargin","transpositionTable","transpositionCapacity","exactLiteChecks","exactRootAnalysis"],AM=["twoPassRootAllocation","volatilityFocus","selectiveExtensions","quietReductions","quiescence","futilityPruning","transpositionTable","exactLiteChecks","exactRootAnalysis"],EM=["rootEnumerationLimit","rootBranchLimit","nodeEnumerationLimit","nodeBranchLimit","maxExtensionsPerPath","quietReductionDepthThreshold","quiescenceEnumerationLimit","futilityMargin","transpositionCapacity"],OM=["enabled","rerankHeads","lowBudgetGuard","midTurnTacticalGuard","secondaryAnalysis","selectedFollowupProjection","mode","ownSeedCap","ownBeam","perNodeFamilyCap","stepCap","opponentSeedCap","opponentBeam","replySeedCap","replyBeam","expansionCap","spiritFamily"],xM=["enabled","rerankHeads","lowBudgetGuard","midTurnTacticalGuard","secondaryAnalysis","selectedFollowupProjection","spiritFamily"],IM=["ownSeedCap","ownBeam","perNodeFamilyCap","stepCap","opponentSeedCap","opponentBeam","replySeedCap","replyBeam","expansionCap"],NM=["weights","cacheCapacity","rootManaHandoffPenalty","rootBacktrackPenalty","potionSpendPenalty","supermanaProgressBonus","supermanaScoreBonus","opponentManaProgressBonus","opponentManaScoreBonus","softManaHandoffPenalty","softRoundtripPenalty"],DM=["cacheCapacity","rootManaHandoffPenalty","rootBacktrackPenalty","potionSpendPenalty","supermanaProgressBonus","supermanaScoreBonus","opponentManaProgressBonus","opponentManaScoreBonus","softManaHandoffPenalty","softRoundtripPenalty"],WM=["enabled","scoreMargin","shortlistLimit","replyLimit","nodeShareBp","antiHelpScoreMargin","antiHelpReplyLimit","safetyRerank","deepSafetyFloor","deterministicTiebreak","preferCleanRoots","lateSafeManaRootPreference"],FM=["enabled","safetyRerank","deepSafetyFloor","deterministicTiebreak","preferCleanRoots","lateSafeManaRootPreference"],BM=["scoreMargin","shortlistLimit","replyLimit","nodeShareBp","antiHelpScoreMargin","antiHelpReplyLimit"],_M=["targetedDrainerAttackFallback","forcedTacticalPrepass","preferSpiritDevelopment","hardSpiritDeployment","supermanaPrepassException","drainerSafetyScoreMargin","efficiencyScoreMargin"],GM=["targetedDrainerAttackFallback","forcedTacticalPrepass","preferSpiritDevelopment","hardSpiritDeployment","supermanaPrepassException"],LM=["drainerSafetyScoreMargin","efficiencyScoreMargin"];function Po(e){return Object.freeze(e)}p(Po,"freezeSection");function tf(e,n){if(n===null||typeof n!="object"||Array.isArray(n))throw new TypeError(`${e} must be a plain object`)}p(tf,"requireRecord");function rf(e,n,o){let t=Object.keys(n).sort(),r=[...o].sort();if(t.length!==r.length||t.some((a,i)=>a!==r[i]))throw new TypeError(`${e} must contain exactly: ${r.join(", ")}`)}p(rf,"validateExactKeys");function Ea(e,n,o){for(let t of o){let r=n[t];if(typeof r!="number"||!Number.isSafeInteger(r)||r<0||r>of)throw new RangeError(`${e}.${t} must be an integer from 0 through ${of}`)}}p(Ea,"validateConfigNumbers");function tu(e,n,o){for(let t of o)if(typeof n[t]!="boolean")throw new TypeError(`${e}.${t} must be a boolean`)}p(tu,"validateConfigBooleans");function pf(e){tf("automove config",e),rf("automove config",e,wM);for(let[t,r]of[["budget",TM],["search",vM],["planner",OM],["evaluation",NM],["replyRisk",WM],["policy",_M]]){let a=e[t];tf(`${t} config`,a),rf(`${t} config`,a,r)}let n=e;if(ga(n.evaluation.weights),!Object.prototype.hasOwnProperty.call(uf,n.budget.preference))throw new RangeError(`unknown automove preference: ${n.budget.preference}`);let o=e.planner.mode;if(o!==Le.Baseline&&o!==Le.Production)throw new RangeError(`unknown planner mode: ${String(o)}`);if(Ea("budget",n.budget,gM),Ea("search",n.search,EM),Ea("planner",n.planner,IM),Ea("evaluation",n.evaluation,DM),Ea("replyRisk",n.replyRisk,BM),Ea("policy",n.policy,LM),tu("search",n.search,AM),tu("planner",n.planner,xM),tu("replyRisk",n.replyRisk,FM),tu("policy",n.policy,GM),n.budget.depth<ip||n.budget.depth>sp)throw new RangeError(`budget.depth must be from ${ip} through ${sp}`);if(n.budget.maxVisitedNodes<1||n.budget.maxVisitedNodes>Ui)throw new RangeError(`budget.maxVisitedNodes must be from 1 through ${Ui}`);if(n.search.transpositionCapacity<1)throw new RangeError("search.transpositionCapacity must be positive");if(n.budget.extensionNodeShareBp>ap||n.replyRisk.nodeShareBp>ap)throw new RangeError(`basis-point shares must not exceed ${ap}`)}p(pf,"validateAutomoveConfig");function VM(e){let n=np(e.evaluation.weights),o=Object.freeze({budget:Po({...e.budget}),search:Po({...e.search}),planner:Po({...e.planner}),evaluation:Po({...e.evaluation,weights:n}),replyRisk:Po({...e.replyRisk}),policy:Po({...e.policy})});return pf(o),o}p(VM,"defineAutomoveConfig");function ke(e,n){let o=(()=>{if(n.evaluation===void 0)return e.evaluation;let r=np(n.evaluation.weights??e.evaluation.weights);return Po({...e.evaluation,...n.evaluation,weights:r})})(),t=Object.freeze({budget:n.budget===void 0?e.budget:Po({...e.budget,...n.budget}),search:n.search===void 0?e.search:Po({...e.search,...n.search}),planner:n.planner===void 0?e.planner:Po({...e.planner,...n.planner}),evaluation:o,replyRisk:n.replyRisk===void 0?e.replyRisk:Po({...e.replyRisk,...n.replyRisk}),policy:n.policy===void 0?e.policy:Po({...e.policy,...n.policy})});return pf(t),t}p(ke,"patchAutomoveConfig");function HM(e,n,o){let t=Me(Math.trunc(n),ip,sp),r=Me(Math.trunc(o),oM,Ui),a=Me(Math.trunc(r/24),4,28),i=Me(Math.trunc(r/40),4,18),s=Me(a*5,a,180),u=Me(i*3,i,96);return VM({budget:{preference:e,depth:t,maxVisitedNodes:r,exactLiteRootCalls:0,exactLiteStaticCalls:0,extensionNodeShareBp:Pr.extensionNodeShareBp,quiescenceNodes:Pr.quiescenceNodes},search:{rootEnumerationLimit:s,rootBranchLimit:a,nodeEnumerationLimit:u,nodeBranchLimit:i,twoPassRootAllocation:!1,volatilityFocus:!1,selectiveExtensions:!1,maxExtensionsPerPath:Pr.maxExtensionsPerPath,quietReductions:!1,quietReductionDepthThreshold:3,quiescence:!1,quiescenceEnumerationLimit:Pr.quiescenceEnumerationLimit,futilityPruning:!1,futilityMargin:Pr.futilityMargin,transpositionTable:!0,transpositionCapacity:Pr.transpositionCapacity,exactLiteChecks:!1,exactRootAnalysis:!1},planner:{enabled:!1,rerankHeads:!1,lowBudgetGuard:!1,midTurnTacticalGuard:!1,secondaryAnalysis:!0,selectedFollowupProjection:!0,mode:Le.Baseline,ownSeedCap:0,ownBeam:0,perNodeFamilyCap:0,stepCap:0,opponentSeedCap:0,opponentBeam:0,replySeedCap:0,replyBeam:0,expansionCap:0,spiritFamily:!1},evaluation:{weights:Wi,cacheCapacity:Pr.evaluationCacheCapacity,rootManaHandoffPenalty:dM,rootBacktrackPenalty:mM,potionSpendPenalty:t>=3?sf:yM,supermanaProgressBonus:SM,supermanaScoreBonus:hM,opponentManaProgressBonus:bM,opponentManaScoreBonus:CM,softManaHandoffPenalty:MM,softRoundtripPenalty:kM},replyRisk:{enabled:!1,scoreMargin:sM,shortlistLimit:uM,replyLimit:cM,nodeShareBp:pM,antiHelpScoreMargin:lM,antiHelpReplyLimit:cp,safetyRerank:!1,deepSafetyFloor:!1,deterministicTiebreak:!1,preferCleanRoots:!1,lateSafeManaRootPreference:!1},policy:{targetedDrainerAttackFallback:!1,forcedTacticalPrepass:!0,preferSpiritDevelopment:!0,hardSpiritDeployment:!1,supermanaPrepassException:!1,drainerSafetyScoreMargin:pp,efficiencyScoreMargin:fM}})}p(HM,"automoveConfigFromBudget");function UM(e){if(e.budget.depth>=3){let n=Me(e.search.rootBranchLimit+10,6,36),o=Me(ru(e.search.nodeBranchLimit,11),6,18);return ke(e,{search:{rootBranchLimit:n,nodeBranchLimit:o,rootEnumerationLimit:Me(n*6,n,220),nodeEnumerationLimit:Me(o*4,o,108)},evaluation:{weights:Rr}})}return ke(e,{evaluation:{weights:op}})}p(UM,"withRuntimeSearchShape");function jM(e){let n=Me(e.search.rootBranchLimit+8,8,40),o=Me(ru(e.search.nodeBranchLimit,2),6,18);return ke(e,{search:{rootBranchLimit:n,nodeBranchLimit:o,rootEnumerationLimit:Me(n*6,n,240),nodeEnumerationLimit:Me(o*4,o,108)}})}p(jM,"withFastWideRootShape");function KM(e){let n=Me(e.search.rootBranchLimit,8,36),o=Me(e.search.nodeBranchLimit+3,9,18);return ke(e,{search:{rootBranchLimit:n,nodeBranchLimit:o,rootEnumerationLimit:Me(n*6,n,220),nodeEnumerationLimit:Me(o*6,o,132)}})}p(KM,"withNormalDeeperShape");function qM(e){let n=uf[e],o=UM(HM(e,n.depth,n.maxVisitedNodes));if(e==="fast")return ke(jM(o),{search:{twoPassRootAllocation:!1,selectiveExtensions:!1,quietReductions:!0,volatilityFocus:!1},evaluation:{weights:rp,rootManaHandoffPenalty:300,rootBacktrackPenalty:220,potionSpendPenalty:220,supermanaProgressBonus:320,supermanaScoreBonus:600,opponentManaProgressBonus:200,opponentManaScoreBonus:310,softManaHandoffPenalty:280,softRoundtripPenalty:220},replyRisk:{enabled:!0,scoreMargin:125,shortlistLimit:4,replyLimit:10,nodeShareBp:650,antiHelpScoreMargin:220,antiHelpReplyLimit:cp,safetyRerank:!1,deepSafetyFloor:!1,deterministicTiebreak:!1,preferCleanRoots:!1},policy:{forcedTacticalPrepass:!0,preferSpiritDevelopment:!0,hardSpiritDeployment:!1,supermanaPrepassException:!0,drainerSafetyScoreMargin:pp,efficiencyScoreMargin:1700}});let t=KM(o);if(e==="normal"){let i=Me(ji(t.budget.maxVisitedNodes,3,2),t.budget.maxVisitedNodes,Ui),s=Me(ji(i,112,100),i,Ui),u=Me(ru(t.search.rootBranchLimit,1),12,38),c=Me(t.search.nodeBranchLimit+2,8,18);return ke(t,{budget:{maxVisitedNodes:s},search:{rootBranchLimit:u,nodeBranchLimit:c,rootEnumerationLimit:Me(u*6,u,240),nodeEnumerationLimit:Me((c+2)*6,c,156),twoPassRootAllocation:!0,selectiveExtensions:!1,quietReductions:!1,volatilityFocus:!0},evaluation:{rootManaHandoffPenalty:340,rootBacktrackPenalty:240,potionSpendPenalty:130,supermanaProgressBonus:240,supermanaScoreBonus:300,opponentManaProgressBonus:220,opponentManaScoreBonus:280,softManaHandoffPenalty:340,softRoundtripPenalty:260},replyRisk:{enabled:!0,scoreMargin:145,shortlistLimit:7,replyLimit:16,nodeShareBp:1350,antiHelpScoreMargin:300,antiHelpReplyLimit:10,safetyRerank:!0,deepSafetyFloor:!0,deterministicTiebreak:!1,preferCleanRoots:!0},policy:{forcedTacticalPrepass:!0,preferSpiritDevelopment:!0,hardSpiritDeployment:!0,drainerSafetyScoreMargin:4200,efficiencyScoreMargin:1400}})}let r=Me(t.search.rootBranchLimit,14,34),a=Me(t.search.nodeBranchLimit,9,15);return ke(t,{budget:{maxVisitedNodes:up},search:{rootBranchLimit:r,nodeBranchLimit:a,rootEnumerationLimit:Me(r*6,r,204),nodeEnumerationLimit:Me((a+2)*6,a,132),twoPassRootAllocation:!0,selectiveExtensions:!0,quietReductions:!0,volatilityFocus:!0,futilityPruning:!0,quietReductionDepthThreshold:2},evaluation:{rootManaHandoffPenalty:340,rootBacktrackPenalty:240,potionSpendPenalty:130,supermanaProgressBonus:240,supermanaScoreBonus:300,opponentManaProgressBonus:280,opponentManaScoreBonus:340,softManaHandoffPenalty:340,softRoundtripPenalty:260},replyRisk:{enabled:!0,scoreMargin:165,shortlistLimit:9,replyLimit:24,nodeShareBp:2e3,antiHelpScoreMargin:300,antiHelpReplyLimit:10,safetyRerank:!0,deepSafetyFloor:!0,deterministicTiebreak:!1,preferCleanRoots:!0},policy:{forcedTacticalPrepass:!1,preferSpiritDevelopment:!0,hardSpiritDeployment:!0,drainerSafetyScoreMargin:4800,efficiencyScoreMargin:1400}})}p(qM,"automoveConfigFromPreference");function zM(e,n){let o=n.budget.depth<3?nf:RM(e,n.budget.depth).weights;return ke(n,{evaluation:{weights:o},budget:{maxVisitedNodes:n.budget.depth>=3?ji(n.budget.maxVisitedNodes,120,100):n.budget.maxVisitedNodes}})}p(zM,"withRuntimeScoringWeights");function $M(e){let n=Me(e.search.rootBranchLimit+5,12,40),o=Me(ru(e.search.nodeBranchLimit,2),8,18);return ke(e,{search:{rootBranchLimit:n,nodeBranchLimit:o,rootEnumerationLimit:Me(n*6,n,240),nodeEnumerationLimit:Me(o*4,o,108),twoPassRootAllocation:!1,selectiveExtensions:!1,quietReductions:!0,volatilityFocus:!1},evaluation:{weights:rp,rootManaHandoffPenalty:300,rootBacktrackPenalty:220,potionSpendPenalty:sf,supermanaProgressBonus:320,supermanaScoreBonus:600,opponentManaProgressBonus:200,opponentManaScoreBonus:310,softManaHandoffPenalty:280,softRoundtripPenalty:220},replyRisk:{scoreMargin:125,shortlistLimit:4,replyLimit:10,nodeShareBp:650,antiHelpScoreMargin:220,antiHelpReplyLimit:cp,safetyRerank:!1,deepSafetyFloor:!1,deterministicTiebreak:!1,preferCleanRoots:!1},policy:{hardSpiritDeployment:!1,supermanaPrepassException:!0,drainerSafetyScoreMargin:pp,efficiencyScoreMargin:1700}})}p($M,"applyRuntimeNormalFastPolicyBlock");function XM(e){let n=$M(e),o=Me(n.search.rootBranchLimit+2,12,40);return ke(n,{budget:{exactLiteRootCalls:1,exactLiteStaticCalls:1,maxVisitedNodes:ji(n.budget.maxVisitedNodes,130,100)},search:{exactLiteChecks:!0,rootBranchLimit:o,rootEnumerationLimit:Me(o*6,o,240)},replyRisk:{shortlistLimit:Math.max(n.replyRisk.shortlistLimit,5),replyLimit:Math.max(n.replyRisk.replyLimit,12),nodeShareBp:Math.max(n.replyRisk.nodeShareBp,900)}})}p(XM,"applyRuntimeNormalFastCoreBudgetSpendProfile");function YM(e,n){let o=Me(n.search.rootBranchLimit,14,34),t=Me(n.search.nodeBranchLimit,9,15);return ke(n,{budget:{maxVisitedNodes:ji(up,9,8)},search:{rootBranchLimit:Math.min(o+1,16),nodeBranchLimit:Math.min(t+1,12),rootEnumerationLimit:Me(o*6,o,204),nodeEnumerationLimit:Me((t+2)*6,t,132),futilityPruning:!0,quietReductions:!0,quietReductionDepthThreshold:2,selectiveExtensions:!0,quiescence:!0},planner:{rerankHeads:!0},evaluation:{weights:PM(e,n.budget.depth).weights,opponentManaProgressBonus:320,opponentManaScoreBonus:400},replyRisk:{enabled:!0,scoreMargin:165,shortlistLimit:9,replyLimit:24,nodeShareBp:2e3,safetyRerank:!0,deepSafetyFloor:!0,deterministicTiebreak:!0},policy:{forcedTacticalPrepass:!1,drainerSafetyScoreMargin:4800}})}p(YM,"applyProPrimaryProfile");function QM(e){return ke(e,{budget:{exactLiteRootCalls:0,exactLiteStaticCalls:0},search:{exactLiteChecks:!1}})}p(QM,"withPreExactRuntimePolicy");function Ht(e){return ke(e,{planner:{rerankHeads:!1,enabled:!0,mode:Le.Production,ownSeedCap:14,ownBeam:5,perNodeFamilyCap:4,stepCap:6,opponentSeedCap:6,opponentBeam:2,replySeedCap:3,replyBeam:1,expansionCap:176,spiritFamily:!0,lowBudgetGuard:!0,midTurnTacticalGuard:!0},replyRisk:{enabled:!1,lateSafeManaRootPreference:!0},policy:{targetedDrainerAttackFallback:!0}})}p(Ht,"withProductionPlanner");function Fo(e,n){let o=zM(e,qM(n));return n==="pro"&&(o=YM(e,o)),o=QM(o),n==="normal"&&(o=XM(o)),o}p(Fo,"automoveConfigForGame");var ZM=Object.freeze(["mana-scored","pickup-mana","mon-fainted","use-potion","pickup-bomb","pickup-potion","bomb-attack","bomb-explosion"]),JM=Object.freeze(["mana-scored","pickup-mana","mon-fainted","use-potion","bomb-attack","bomb-explosion","spirit-target-move","supermana-back-to-base"]);function Ki(e,n){return e<n?-1:e>n?1:0}p(Ki,"compareNumber");function au(e,n){let o=p(r=>{switch(r.kind){case"takeback":return 0;case"location":return 1;case"modifier":return 2}},"tag"),t=Ki(o(e),o(n));return t!==0?t:e.kind==="location"&&n.kind==="location"?Ki(e.location.i,n.location.i)||Ki(e.location.j,n.location.j):e.kind==="modifier"&&n.kind==="modifier"?Ki(pc[e.modifier],pc[n.modifier]):0}p(au,"compareInputs");function ro(e,n){let o=Math.min(e.length,n.length);for(let t=0;t<o;t+=1){let r=e[t],a=n[t];if(r===void 0||a===void 0)break;let i=au(r,a);if(i!==0)return i}return Ki(e.length,n.length)}p(ro,"compareInputChains");function lf(e,n,o,t){let r=e.fork(),a=r.applyAndAddResultingEvents(o);a!==void 0&&t.push({inputs:n.slice(),game:r,events:a})}p(lf,"appendAppliedTransition");function lp(e,n,o,t,r,a){if(e.checkpoint()){t.length=0;return}if(t.length>=r||o.length>Ho)return;let i=n.processInputWithStartOptions(o,!0,!1,a);switch(i.kind){case"invalid-input":return;case"events":{lf(n,o,i.events,t);return}case"locations-to-start-from":for(let s of i.locations){if(t.length>=r)break;o.push({kind:"location",location:{i:s.i,j:s.j}}),lp(e,n,o,t,r,a),o.pop()}return;case"next-input-options":for(let s of i.nextInputs){if(t.length>=r)break;o.push(s.input),lp(e,n,o,t,r,a),o.pop()}}}p(lp,"collectLegalTransitions");function to(e,n,o,t=In){if(e.session.checkpoint()||o<=0)return[];let r=[];return lp(e.session,n.fork(),[],r,o,t),e.session.cancelled?[]:(r.sort((a,i)=>ro(a.inputs,i.inputs)),r)}p(to,"enumerateLegalTransitions");function df(e){let n=new Uint8Array(121);for(let o of e)n[Q(o)]=1;return n}p(df,"locationMask");function ek(e,n){let o=e.inputs[0];return o?.kind==="location"&&n[Q(o.location)]===1}p(ek,"startsAtMaskedLocation");function dp(e,n,o,t,r){if(r.length===0)return to(e,n,o,t);let a=df(r),i=Math.max(Math.floor(o/2),Math.max(0,o-60)),s=Math.max(0,o-i),u=[],c=[];for(let l of to(e,n,o,t))if(ek(l,a)?u.length<i&&u.push(l):c.length<s&&c.push(l),u.length>=i&&(s===0||c.length>=s))break;return[...u,...c]}p(dp,"enumerateLegalTransitionsWithPriority");function mf(e,n,o,t,r,a,i){if(e.checkpoint()){t.length=0;return}if(t.length>=r||o.length>Ho)return;let s=n.processInputWithStartOptions(o,!0,!1,a);if(s.kind==="invalid-input")return;if(s.kind==="events"){if(i!==void 0&&o.length===0)return;lf(n,o,s.events,t);return}let u=s.kind==="locations-to-start-from"?s.locations.map(c=>({kind:"location",location:{i:c.i,j:c.j}})):s.nextInputs.map(c=>c.input);u.sort(au);for(let c of u){if(t.length>=r)break;o.length===0&&i!==void 0&&(c.kind!=="location"||i[Q(c.location)]!==1)||(o.push(c),mf(e,n,o,t,r,a,i),o.pop())}}p(mf,"collectLexicographicBounded");function iu(e,n,o,t=In,r){if(o<=0||e.session.checkpoint())return[];let a=r===void 0?void 0:df(r),i=[];return mf(e.session,n.fork(),[],i,o,t,a),e.session.checkpoint()?[]:i}p(iu,"enumerateLegalTransitionsLexicographicBounded");function wr(e,n){return an(e,n)?.game}p(wr,"applyInputsForSearch");function an(e,n){let o=e.fork(),t=o.processInput(n,!1,!1);return t.kind==="events"?{game:o,events:t.events}:void 0}p(an,"applyInputsForSearchWithEvents");function ff(e,n){return e.some(o=>n.includes(o.kind))}p(ff,"hasEventKind");function qi(e){return ff(e,ZM)}p(qi,"hasMaterialEvent");function yf(e){return ff(e,JM)}p(yf,"isQuiescenceTacticalTransition");var Tr=4096,Oa=256,$i=Number.MAX_SAFE_INTEGER,su=Ge(342167472,1939669891),Xi=Ge(256,435),bf=Ge(4294967295,4294967295),Cf=Ge(4294967295,4294967294),Ve=Object.freeze({Baseline:"baseline",Production:"production"}),mp=Object.freeze({[Ve.Baseline]:0,[Ve.Production]:1}),S=Object.freeze({ImmediateScore:"immediate-score",DenyOpponentWindow:"deny-opponent-window",DrainerKill:"drainer-kill",SafeSupermanaProgress:"safe-supermana-progress",SafeOpponentManaProgress:"safe-opponent-mana-progress",DrainerSafetyRecovery:"drainer-safety-recovery",SpiritImpact:"spirit-impact",ManaTempo:"mana-tempo"}),dt=Object.freeze([S.ImmediateScore,S.DenyOpponentWindow,S.DrainerKill,S.DrainerSafetyRecovery,S.SpiritImpact,S.SafeSupermanaProgress,S.SafeOpponentManaProgress,S.ManaTempo]),fp=Object.freeze({[S.ImmediateScore]:1,[S.DenyOpponentWindow]:2,[S.DrainerKill]:3,[S.SafeSupermanaProgress]:4,[S.SafeOpponentManaProgress]:5,[S.DrainerSafetyRecovery]:6,[S.SpiritImpact]:7,[S.ManaTempo]:8});function uu(e={}){return{winState:e.winState??0,avoidImmediateLoss:e.avoidImmediateLoss??0,scoreDelta:e.scoreDelta??0,denyGain:e.denyGain??0,drainerAttack:e.drainerAttack??0,drainerSafety:e.drainerSafety??0,evalScore:e.evalScore??0}}p(uu,"createTurnUtility");var wn=Object.freeze(uu());function Bo(e){return e.denyGain>=0}p(Bo,"utilityHasNonnegativeDenyGain");function Ut(e){return e.drainerSafety>0||e.avoidImmediateLoss>0}p(Ut,"utilitySupportsTemporaryRiskRecovery");function Fn(e,n){let o=e.winState>=n.winState&&e.avoidImmediateLoss>=n.avoidImmediateLoss&&e.scoreDelta>=n.scoreDelta&&e.denyGain>=n.denyGain&&e.drainerAttack>=n.drainerAttack&&e.drainerSafety>=n.drainerSafety,t=e.winState>n.winState||e.avoidImmediateLoss>n.avoidImmediateLoss||e.scoreDelta>n.scoreDelta||e.denyGain>n.denyGain||e.drainerAttack>n.drainerAttack||e.drainerSafety>n.drainerSafety;return o&&t}p(Fn,"utilityStrictlyDominatesOverrideAxes");function ao(e,n){if(!Fn(e,n))return!1;let o=e.winState>n.winState||e.avoidImmediateLoss>n.avoidImmediateLoss||e.denyGain>n.denyGain||e.drainerAttack>n.drainerAttack||e.drainerSafety>n.drainerSafety,t=e.scoreDelta>=n.scoreDelta+220;return e.evalScore+192>=n.evalScore||o||t}p(ao,"utilityPassesOverrideGuard");function io(e,n){return Bn(e,n)>=0&&e.evalScore+192>=n.evalScore}p(io,"utilitySupportsFamilyFallback");function mt(e,n){return e.winState>n.winState||e.avoidImmediateLoss>n.avoidImmediateLoss||e.denyGain>n.denyGain||e.drainerAttack>n.drainerAttack||e.drainerSafety>n.drainerSafety}p(mt,"utilityImprovesNonScoreOverrideAxes");function yp(e,n,o){return e.scoreDelta>=n.scoreDelta+o}p(yp,"utilityHasScoreDeltaForce");function wo(e,n,o){return J(e,n)>=0&&e.evalScore+o>=n.evalScore}p(wo,"utilitySupportsPrimaryAxesEvalTolerance");var un=Object.freeze({ImmediateScore:"immediate-score",TacticalDeny:"tactical-deny",DrainerKill:"drainer-kill",SafeSupermanaProgress:"safe-supermana-progress",SafeOpponentManaProgress:"safe-opponent-mana-progress",DrainerSafetyRecovery:"drainer-safety-recovery",SpiritImpact:"spirit-impact",ManaTempo:"mana-tempo"}),ee=Object.freeze({NoPlan:"no-plan",BudgetExceeded:"budget-exceeded"}),Yi=Object.freeze({scoreGain:0,denyGain:0,drainerSafetyDelta:0,spiritOnlySetup:!1,endsNonnegativeDrainerSafety:!1,opponentImmediateWindowAfter:0});function dn(e,n){return e<n?-1:e>n?1:0}p(dn,"compareNumber");function Qi(e,n){let o=Math.min(e.length,n.length);for(let t=0;t<o;t+=1){let r=dn(e[t]??0,n[t]??0);if(r!==0)return r}return dn(e.length,n.length)}p(Qi,"compareTuples");function Sp(e){return{actions:[...e.actions],compiledChunks:e.compiledChunks.map(n=>n.slice()),endGame:e.endGame.fork(),utility:e.utility,headUtility:e.headUtility,headFamily:e.headFamily,goalFamily:e.goalFamily,packageMeta:e.packageMeta}}p(Sp,"copyPlan");function Zi(e,n){let o=dn(e.length,n.length);if(o!==0)return o;for(let t=0;t<e.length;t+=1){let r=ro(e[t]??[],n[t]??[]);if(r!==0)return r}return 0}p(Zi,"compareChunks");function zi(e){switch(e.kind){case"walk":return[0,e.actor,e.to,void 0];case"attack":return[1,e.actor,e.target,void 0];case"spirit-shift":return[2,e.actor,e.target,e.destination];case"bomb":return[3,e.actor,e.target,void 0];case"move-mana":return[4,e.from,e.to,void 0];case"score-carry":return[5,e.actor,e.step,void 0];case"safety-retreat":return[6,e.actor,e.to,void 0]}}p(zi,"actionKeyTuple");function hp(e){let[n,o,t,r]=zi(e);return`${n}:${Q(o)}:${t===void 0?-1:Q(t)}:${r===void 0?-2:Q(r)}`}p(hp,"actionKey");function Mf(e,n){let o=dn(e.i,n.i);return o!==0?o:dn(e.j,n.j)}p(Mf,"compareLocations");function Sf(e,n){return e===void 0?n===void 0?0:-1:n===void 0?1:Mf(e,n)}p(Sf,"compareOptionalLocations");function xa(e,n){let o=zi(e),t=zi(n);return dn(o[0],t[0])||Mf(o[1],t[1])||Sf(o[2],t[2])||Sf(o[3],t[3])}p(xa,"compareActionKeys");function Bn(e,n){return Qi([e.winState,e.avoidImmediateLoss,e.scoreDelta,e.denyGain,e.drainerAttack,e.drainerSafety,e.evalScore],[n.winState,n.avoidImmediateLoss,n.scoreDelta,n.denyGain,n.drainerAttack,n.drainerSafety,n.evalScore])}p(Bn,"compareTurnUtilities");function J(e,n){return Qi([e.winState,e.avoidImmediateLoss,e.scoreDelta,e.denyGain,e.drainerAttack,e.drainerSafety],[n.winState,n.avoidImmediateLoss,n.scoreDelta,n.denyGain,n.drainerAttack,n.drainerSafety])}p(J,"compareUtilityPrimaryAxes");function Kn(e){return dt.indexOf(e)}p(Kn,"familyRank");function hf(e){return e.avoidImmediateLoss<0?0:e.drainerSafety<0||e.scoreDelta<0?1:2}p(hf,"headOpeningRiskClass");function nk(e,n,o){return(e===S.SafeSupermanaProgress||e===S.SafeOpponentManaProgress)&&hf(n)!==hf(o)}p(nk,"shouldCompareHeadOpeningUtility");function ok(e,n,o,t,r,a){let i=J(e,t);return i!==0||o===a&&nk(o,n,r)&&(i=J(n,r),i!==0||(i=dn(n.evalScore,r.evalScore),i!==0))?i:dn(e.evalScore,t.evalScore)}p(ok,"comparePlanRank");function tk(e,n){return Qi([+(e.scoreGain>0),e.scoreGain,+(e.denyGain>0),e.denyGain,+(e.drainerSafetyDelta>0),e.drainerSafetyDelta,Number(e.endsNonnegativeDrainerSafety),+!e.spiritOnlySetup,-e.opponentImmediateWindowAfter],[+(n.scoreGain>0),n.scoreGain,+(n.denyGain>0),n.denyGain,+(n.drainerSafetyDelta>0),n.drainerSafetyDelta,Number(n.endsNonnegativeDrainerSafety),+!n.spiritOnlySetup,-n.opponentImmediateWindowAfter])}p(tk,"comparePackageMeta");function so(e,n){let o=ok(e.utility,e.headUtility,e.headFamily,n.utility,n.headUtility,n.headFamily);return o!==0||(o=tk(e.packageMeta,n.packageMeta),o!==0)||(o=dn(Kn(n.goalFamily),Kn(e.goalFamily)),o!==0)||(o=dn(Kn(n.headFamily),Kn(e.headFamily)),o!==0)?o:(o=dn(n.actions.length,e.actions.length),o!==0?o:Zi(e.compiledChunks,n.compiledChunks))}p(so,"turnEngineComparePlans");function yt(e){return e.planner.mode===Le.Production?Ve.Production:Ve.Baseline}p(yt,"turnEngineModeFromAutomoveConfig");function ft(e){return Math.max(Math.trunc(e),1)}p(ft,"positiveCap");function qn(e){return{mode:yt(e),ownSeedCap:ft(e.planner.ownSeedCap),ownBeam:ft(e.planner.ownBeam),perNodeFamilyCap:ft(e.planner.perNodeFamilyCap),stepCap:ft(e.planner.stepCap),opponentSeedCap:ft(e.planner.opponentSeedCap),opponentBeam:ft(e.planner.opponentBeam),replySeedCap:ft(e.planner.replySeedCap),replyBeam:ft(e.planner.replyBeam),expansionCap:ft(e.planner.expansionCap),enableSpiritFamily:e.planner.spiritFamily,scoringWeights:e.evaluation.weights,enableLazyOracleScoreWindowProjection:!1}}p(qn,"turnEngineConfigFromAutomoveConfig");function Tn(e){return e.planner.enabled&&e.planner.mode===Le.Production&&e.planner.secondaryAnalysis}p(Tn,"productionSecondaryAnalysisLive");function zn(e){return e.activeColor===T.White&&e.turnNumber<=3&&!e.playerCanUseAction()&&!e.playerCanMoveMana()&&(e.monsMovesCount===0||e.monsMovesCount===3)}p(zn,"productionIsEarlyWhiteTurnStart");function cu(e){return{...e,ownSeedCap:Math.min(e.ownSeedCap,14),ownBeam:Math.min(e.ownBeam,5),perNodeFamilyCap:Math.min(e.perNodeFamilyCap,4),stepCap:Math.min(e.stepCap,6),opponentSeedCap:1,opponentBeam:1,replySeedCap:1,replyBeam:1,expansionCap:Math.min(e.expansionCap,48)}}p(cu,"applyEarlyWhiteTurnEngineLimits");function rk(e){let n=e.mode===Ve.Production;return{...e,ownSeedCap:Math.min(e.ownSeedCap,n?12:8),ownBeam:Math.min(e.ownBeam,n?5:4),perNodeFamilyCap:Math.min(e.perNodeFamilyCap,n?4:3),stepCap:Math.min(e.stepCap,5),opponentSeedCap:Math.min(e.opponentSeedCap,n?6:4),opponentBeam:Math.min(e.opponentBeam,n?3:2),replySeedCap:Math.min(e.replySeedCap,n?3:2),replyBeam:n?2:1,expansionCap:Math.min(e.expansionCap,n?144:96)}}p(rk,"applyTurnEngineRerankLimits");function _o(e){return rk(qn(e))}p(_o,"turnEngineRerankConfigFromAutomoveConfig");var ak=Symbol("turn-engine-caches"),kp=class kp{constructor(){he(this,"continuation",new Te(Tr));he(this,"oracle",new Te(Tr));he(this,"utility",new Te(Tr));he(this,"bestPlan",new Te(Tr));he(this,"noPlan",new eo(Tr));he(this,"capacity",Tr*5)}get size(){return this.continuation.size+this.oracle.size+this.utility.size+this.bestPlan.size+this.noPlan.size}clear(){this.continuation.clear(),this.oracle.clear(),this.utility.clear(),this.bestPlan.clear(),this.noPlan.clear()}};p(kp,"TurnEngineCaches");var bp=kp;function Wn(e){return e.caches.engine.getOrCreate(ak,()=>new bp)}p(Wn,"turnEngineCaches");function kf(e){let n=su,o=[e.ownSeedCap,e.ownBeam,e.perNodeFamilyCap,e.stepCap,e.opponentSeedCap,e.opponentBeam,e.replySeedCap,e.replyBeam,e.expansionCap,Number(e.enableSpiritFamily),mp[e.mode]+1,Number(e.enableLazyOracleScoreWindowProjection)];for(let t of o)n=jn(Cn(n,Un(t)),Xi);for(let t of va(e.scoringWeights))n=jn(Cn(n,Un(t.codePointAt(0)??0)),Xi);return n}p(kf,"configFingerprint");function pu(e,n,o){return{stateHash:ie(e),modeTag:mp[n],configFingerprint:kf(o)}}p(pu,"cacheKeyForMode");function lu(e,n){return pu(e,n.mode,n)}p(lu,"cacheKey");function Rf(e,n,o){return{configFingerprint:kf(o),startTag:e.hi*2+Vn(n),startLow:e.lo}}p(Rf,"createUtilityCacheIdentity");function Pf(e,n){return{stateHash:e,configFingerprint:n.configFingerprint,startTag:n.startTag,startLow:n.startLow}}p(Pf,"utilityCacheKey");function Cp(e,n){return e.get(n.stateHash,n.modeTag,n.configFingerprint)}p(Cp,"turnCacheGet");function wf(e,n){return e.has(n.stateHash,n.modeTag,n.configFingerprint)}p(wf,"turnCacheHas");function du(e,n,o){e.set(n.stateHash,o,n.modeTag,n.configFingerprint)}p(du,"turnCacheSet");function Tf(e,n){e.add(n.stateHash,n.modeTag,n.configFingerprint)}p(Tf,"turnCacheAdd");function Mp(e,n){e.delete(n.stateHash,n.modeTag,n.configFingerprint)}p(Mp,"turnCacheDelete");function Ji(e){Wn(e).clear()}p(Ji,"clearTurnEnginePlanCache");function es(e,n,o,t){return ns(e,n,ie(n),o,t)}p(es,"createTurnUtilityEvalContext");function ns(e,n,o,t,r){return{execution:e,start:n,startHash:o,perspective:t,config:r,cacheIdentity:Rf(o,t,r)}}p(ns,"createTurnUtilityEvalContextWithSearchHash");function Na(e,n,o,t,r){if(e.session.checkpoint())return wn;let a=ik(e,n,o,t,r);return e.session.checkpoint()?wn:a}p(Na,"turnEngineEvaluateStateUtility");function ik(e,n,o,t,r){if(e.session.checkpoint())return wn;let a=es(e,o,t,r);return Af(a,n,ie(n))}p(ik,"evaluateStateUtilityFromInputs");function Da(e,n,o,t){return e.session.checkpoint()?mu():sk(e,n,o,t)}p(Da,"turnOracleContextWithSearchHash");function sk(e,n,o,t){let r=Wn(e).oracle.get(t,Vn(o));if(r!==void 0)return e.session.checkpoint()?mu():r;let a=br(e,n,t);if(e.session.checkpoint())return mu();let i=Mr(e,n,o,t);if(e.session.checkpoint())return mu();let s={opportunity:i,strategic:a.colorSummary(o),opponentImmediateWindow:a.colorSummary(q(o)).immediateWindow.bestScore};return e.session.cacheWriteAllowed&&Wn(e).oracle.set(t,s,Vn(o)),s}p(sk,"turnOracleContextAfterCheckpoint");function mu(){return{opportunity:pt(),strategic:No(),opponentImmediateWindow:0}}p(mu,"emptyOracleContext");function Ia(e,n,o,t){if(e.session.checkpoint())return 0;let r=zc(e,n,o,t);return e.session.checkpoint()?0:r}p(Ia,"activeTurnScoreWindowWithSearchHash");function vf(e,n,o){return Ia(e,n,o,ie(n))}p(vf,"activeTurnScoreWindow");function uk(e,n){let o=e.winnerColor();return o===void 0?0:o===n?2:-2}p(uk,"winnerState");function go(e,n,o){return n.winnerColor()!==void 0||n.activeColor!==q(o)?!1:fu(e,n,o,ie(n))}p(go,"opponentCanWinImmediately");function fu(e,n,o,t){let r=q(o);if(n.winnerColor()!==void 0||n.activeColor!==r)return!1;let a=_(Ee,Be(n,r));return a<=0||Ia(e,n,r,t)>=a}p(fu,"opponentCanWinImmediatelyWithSearchHash");function Fe(e,n,o){return wi(e,n,rn(n),o)}p(Fe,"ownDrainerSafetyScore");function uo(e,n){for(let[o,t]of e.entries()){let r=K(t);if(r?.color===n&&r.kind===A.Drainer&&!U(r))return o}}p(uo,"findAwakeDrainerLocation");function gf(e,n,o,t){let r=uo(n,o);if(r===void 0)return!1;let a=n.get(r);return a?.kind==="mon-with-mana"&&je(a.mana,t)&&Sr(e,n,o,r)}p(gf,"ownDrainerCarriesSafeMana");function Mn(e,n,o){return e.execution.session.checkpoint()?wn:Af(e,n,o)}p(Mn,"evaluateStateUtilityWithSearchHash");function Af(e,n,o){let{execution:t,start:r,perspective:a,config:i}=e,s=Pf(o,e.cacheIdentity),u=Wn(t).utility.get(s.stateHash,s.startTag,s.configFingerprint,s.startLow);if(u!==void 0)return t.session.checkpoint()?wn:u;let c=Be(n,a),l=Be(r,a),m=_(c,l),d=Da(t,n,a,o);if(t.session.cancelled)return wn;let y=d.strategic.scorePathWindow.bestSteps,f=y===void 0?0:qe(Math.max(33-y,0),22),h=v(qe(d.strategic.immediateWindow.bestScore,110),qe(d.strategic.immediateWindow.multiPressure,18)),C={kind:"supermana"},b={kind:"regular",color:q(a)},k=gf(t,n.board,a,C)?380:0,M=gf(t,n.board,a,b)?300:0,R=q(a),P=Ia(t,r,R,e.startHash);if(t.session.cancelled)return wn;let W=n.activeColor===R?Ia(t,n,R,o):d.opponentImmediateWindow;if(t.session.cancelled)return wn;let D=_(P,W),N=Fe(t,n.board,a),B=N<0?qe(Math.min(Math.abs(N),2147483647),900):0,G=_(Ee,Be(r,R)),L=_(Ee,Be(n,R)),$=G>0&&P>=G&&(L<=0||W<L),V=Vt(t,n,a,i.scoringWeights,!1);if(t.session.checkpoint())return wn;let se=uu({winState:uk(n,a),avoidImmediateLoss:fu(t,n,a,o)?-1:1,scoreDelta:_(v(v(v(v(qe(m,2400),f),h),k),M),B),denyGain:v(qe(D,220),$?1500:0),drainerAttack:uo(n.board,q(a))===void 0?1:0,drainerSafety:N,evalScore:V});return t.session.cacheWriteAllowed&&Wn(t).utility.set(s.stateHash,se,s.startTag,s.configFingerprint,s.startLow),se}p(Af,"evaluateStateUtilityAfterCheckpoint");function Wa(e,n,o,t,r){return ck(Mn(e,n,o),t,r)}p(Wa,"quickOrderScoreWithSearchHash");function ck(e,n,o){let t=(()=>{switch(n){case S.ImmediateScore:return 1e3;case S.DenyOpponentWindow:return 960;case S.DrainerKill:return 920;case S.DrainerSafetyRecovery:return 860;case S.SpiritImpact:return 820;case S.SafeSupermanaProgress:return 760;case S.SafeOpponentManaProgress:return 720;case S.ManaTempo:return 560}})();return e.winState*1e7+e.avoidImmediateLoss*5e6+e.scoreDelta+e.denyGain+e.drainerAttack*3500+e.drainerSafety*2200+Math.trunc(e.evalScore/8)+t*2e3-o*350}p(ck,"quickOrderScoreForUtility");var gr,vp=class vp{constructor(n,o,t,r){X(this,gr);he(this,"transitions");he(this,"limit");he(this,"priorityLocations");if(H(this,gr,n),this.limit=pk(r),n.session.checkpoint()){this.transitions=[],this.priorityLocations=[];return}let a=new Set,i=[];for(let s of t)for(let u of dk(s.action)){let c=Q(u);a.has(c)||(a.add(c),i.push(u))}this.priorityLocations=i,this.transitions=dp(n,o,this.limit,In,i),n.session.checkpoint()&&(this.transitions=[])}expand(n){if(w(this,gr).session.checkpoint()||this.transitions.length<this.limit||this.limit>=Oa)return!1;let o=Math.min(this.limit*2,Oa);if(o<=this.limit)return!1;let t=dp(w(this,gr),n,o,In,this.priorityLocations);return w(this,gr).session.checkpoint()?!1:(this.transitions=t,this.limit=o,!0)}};gr=new WeakMap,p(vp,"TransitionCompilePool");var jt=vp;function pk(e){return Math.min(Math.max(Math.max(e.ownSeedCap,e.opponentSeedCap)*12,24),96)}p(pk,"compileLimitForConfig");function lk(e){switch(e.kind){case"walk":case"safety-retreat":return[{kind:"location",location:{...e.actor}},{kind:"location",location:{...e.to}}];case"attack":case"bomb":return[{kind:"location",location:{...e.actor}},{kind:"location",location:{...e.target}}];case"spirit-shift":return[{kind:"location",location:{...e.actor}},{kind:"location",location:{...e.target}},{kind:"location",location:{...e.destination}}];case"move-mana":return[{kind:"location",location:{...e.from}},{kind:"location",location:{...e.to}}];case"score-carry":return[{kind:"location",location:{...e.actor}},{kind:"location",location:{...e.step}}]}}p(lk,"directInputsForAction");function xf(e,n,o,t){if(e.session.checkpoint())return;let r=lk(t),a=an(n,r);if(!(a===void 0||e.session.checkpoint())&&Nf(e,n,a.game,a.events,o,t))return[a.game,r]}p(xf,"compileActionDirect");function Ef(e,n,o,t,r){if(e.session.checkpoint())return;let a;for(let i=0;i<r.length;i+=1){if(e.session.checkpoint())return;let s=r[i];if(s===void 0||!Nf(e,n,s.game,s.events,o,t))continue;let u=yk(e,n,s.game,s.events,o,t),c=a===void 0?void 0:r[a[1]];(a===void 0||u>a[0]||u===a[0]&&c!==void 0&&ro(s.inputs,c.inputs)<0)&&(a=[u,i])}return a}p(Ef,"bestTransitionForAction");function If(e,n,o,t,r){let a=Ef(e,n,o,t,r.transitions);if(a===void 0&&r.expand(n)&&(a=Ef(e,n,o,t,r.transitions)),a===void 0||e.session.checkpoint())return;let i=r.transitions[a[1]];return i===void 0?void 0:[i.game.fork(),i.inputs.slice()]}p(If,"compileActionFromPoolFallback");function os(e,n,o,t,r){let a=xf(e,n,o,t);return a!==void 0?a:e.session.cancelled?void 0:If(e,n,o,t,r)}p(os,"compileActionFromPool");function Pp(e,n,o,t,r){let a=xf(e,n,o,t);if(a!==void 0)return a;if(e.session.cancelled)return;let i=new jt(e,n,[{family:S.ManaTempo,action:t,priority:0}],r);return If(e,n,o,t,i)}p(Pp,"compileAction");function dk(e){switch(e.kind){case"walk":case"safety-retreat":return[e.actor,e.to];case"attack":case"bomb":return[e.actor,e.target];case"spirit-shift":return[e.actor,e.target,e.destination];case"move-mana":return[e.from,e.to];case"score-carry":return[e.actor,e.step]}}p(dk,"actionPriorityLocations");function Rp(e,n,o){return e.some(t=>(t.kind==="mon-move"||t.kind==="demon-additional-step")&&ge(t.from,n)&&ge(t.to,o))}p(Rp,"movedActorTo");function mk(e,n,o,t){return e.some(r=>r.kind==="mystic-action"||r.kind==="demon-action"?ge(r.from,n)&&ge(r.to,o):r.kind==="mon-fainted"&&r.mon.color===q(t)&&ge(r.to,o))}p(mk,"attackEventsMatch");function fk(e,n,o){for(let[,t]of e.board.entries())if(t.kind==="mon-with-mana"&&t.mon.color===n&&!U(t.mon)&&je(t.mana,o))return!0;return!1}p(fk,"actorOrSuccessorCarries");function Nf(e,n,o,t,r,a){switch(a.kind){case"walk":return Rp(t,a.actor,a.to)&&!Sk(t);case"attack":return mk(t,a.actor,a.target,r);case"spirit-shift":return t.some(i=>i.kind==="spirit-target-move"&&ge(i.by,a.actor)&&ge(i.from,a.target)&&ge(i.to,a.destination));case"bomb":return t.some(i=>i.kind==="bomb-attack"&&ge(i.from,a.actor)&&ge(i.to,a.target));case"move-mana":return t.some(i=>i.kind==="mana-move"&&ge(i.from,a.from)&&ge(i.to,a.to));case"score-carry":return Rp(t,a.actor,a.step)&&(t.some(i=>i.kind==="mana-scored"&&je(i.mana,a.wanted))||fk(o,r,a.wanted));case"safety-retreat":return Rp(t,a.actor,a.to)&&Fe(e,o.board,r)>Fe(e,n.board,r)}}p(Nf,"transitionMatchesAction");function yk(e,n,o,t,r,a){let i=qe(_(Be(o,r),Be(n,r)),500);switch(i=v(i,qe(Fe(e,o.board,r),180)),!go(e,n,r)&&go(e,o,r)&&(i=_(i,2200)),a.kind){case"walk":i=v(i,qe(te(a.actor,a.to),-20));break;case"attack":hk(t,r)&&(i=v(i,1600)),Of(t,r)&&(i=v(i,800));break;case"spirit-shift":t.some(s=>s.kind==="mana-scored")&&(i=v(i,1e3)),t.some(s=>s.kind==="spirit-target-move")&&(i=v(i,600));break;case"bomb":Of(t,r)&&(i=v(i,1e3));break;case"move-mana":i=v(i,qe(_(gn(a.from,r),gn(a.to,r)),160));break;case"score-carry":i=v(i,qe(xe(a.wanted,r),200));break;case"safety-retreat":i=v(i,qe(Fe(e,o.board,r),260));break}return i}p(yk,"transitionScore");function Sk(e){return e.some(n=>n.kind==="mystic-action"||n.kind==="demon-action"||n.kind==="bomb-attack"||n.kind==="spirit-target-move")}p(Sk,"eventsIncludeNonWalkAction");function Of(e,n){return e.some(o=>o.kind==="mon-fainted"&&o.mon.color===q(n))}p(Of,"eventsIncludeAnyFaint");function hk(e,n){return e.some(o=>o.kind==="mon-fainted"&&o.mon.color===q(n)&&o.mon.kind===A.Drainer)}p(hk,"eventsIncludeOpponentDrainerFaint");function Df(e){let n=K(e);return n!==void 0&&(n.kind===A.Mystic||n.kind===A.Demon)}p(Df,"actorCanAttackFromItem");function wp(e){let n=K(e);return n!==void 0&&!U(n)&&e.kind==="mon-with-consumable"&&e.consumable===j.Bomb}p(wp,"actorCanBombFromItem");function bk(e,n){return e!==void 0&&te(e,n)===1}p(bk,"locationGuardedByAngel");function Ck(e,n,o){let t=or(n,o),r=e.squareAt(t);return e.get(t)===void 0&&r.kind!=="supermana-base"&&r.kind!=="mon-base"}p(Ck,"demonAttackPathClear");function Tp(e,n,o,t,r){if(e.squareAt(n).kind==="mon-base")return!1;let a=e.get(o),i=a===void 0?void 0:K(a);if(i?.color!==q(r)||U(i)||bk(e.findAwakeAngel(q(r)),o))return!1;let s=K(t);return s?.kind===A.Mystic?at(n).some(u=>ge(u,o)):s?.kind===A.Demon&&it(n).some(u=>ge(u,o))&&Ck(e,n,o)}p(Tp,"actorCanAttackTargetNow");function gp(e,n,o,t,r){if(!Qr(n).some(s=>ge(s,o))||!wp(t)||K(t)?.color!==r)return!1;let a=e.get(o),i=a===void 0?void 0:K(a);return i?.color===q(r)&&!U(i)}p(gp,"actorCanBombTargetNow");function Wf(e,n,o){let t=e.get(o),r=e.squareAt(o),a=K(n),i=Qn(n),s;if(t===void 0?s=!0:t.kind==="mon"?K(n)!==void 0?s=!1:n.kind==="mana"?s=t.mon.kind===A.Drainer&&!U(t.mon):s=n.kind==="consumable"&&n.consumable===j.BombOrPotion:t.kind==="mana"?s=a?.kind===A.Drainer&&!U(a):t.kind==="mon-with-mana"||t.kind==="mon-with-consumable"?s=n.kind==="consumable"&&n.consumable===j.BombOrPotion:t.consumable===j.BombOrPotion?s=K(n)!==void 0:s=!1,!s)return!1;switch(r.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":return i?.kind==="supermana"||i===void 0&&a?.kind===A.Drainer;case"mon-base":return a?.kind===r.monKind&&a.color===r.color&&i===void 0&&ir(n)===void 0}}p(Wf,"spiritDestinationAllowed");function Ff(e,n){let o=e.get(n),t=e.squareAt(n),r=t.kind==="regular"||t.kind==="consumable-base"||t.kind==="mana-base"||t.kind==="mana-pool";return o===void 0?r:o.kind==="mon"&&r&&o.mon.kind===A.Drainer&&!U(o.mon)}p(Ff,"manaMoveDestinationAllowed");function Bf(e,n){for(let[o,t]of e.entries())if(t.kind==="mana"&&je(t.mana,n))return o}p(Bf,"nearestWantedManaLocation");function vr(e,n,o){let t=e.get(n),r=t===void 0?void 0:K(t);if(r===void 0)return!1;let a=e.get(o);if(a!==void 0&&K(a)!==void 0)return!1;let i=e.squareAt(o);switch(i.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":return r.kind===A.Drainer;case"mon-base":return r.kind===i.monKind&&r.color===i.color}}p(vr,"walkDestinationPlausible");function Fa(e,n){return e.activeColor===n?Math.max(fe-e.monsMovesCount,0):fe}p(Fa,"remainingMovesForColor");function gn(e,n){let o=n===T.Black?0:10;return Math.min(te(e,{i:o,j:0}),te(e,{i:o,j:10}))}p(gn,"distanceToNearestPool");function _f(e,n,o,t){let r=q(o);return Fe(e,n.board,o)<0||vf(e,n,r)>0||Be(n,r)>=Ee-2||n.board.get(t)?.kind==="mon-with-mana"||gn(t,r)<=3}p(_f,"opponentDrainerKillIsHighValue");function Kt(e){return e.kind!=="score-carry"?hp(e):`${hp(e)}:${e.wanted.kind}:${e.wanted.kind==="regular"?e.wanted.color:"s"}`}p(Kt,"actionIdentity");function Mk(e){switch(e){case S.ImmediateScore:return un.ImmediateScore;case S.DenyOpponentWindow:return un.TacticalDeny;case S.DrainerKill:return un.DrainerKill;case S.SafeSupermanaProgress:return un.SafeSupermanaProgress;case S.SafeOpponentManaProgress:return un.SafeOpponentManaProgress;case S.DrainerSafetyRecovery:return un.DrainerSafetyRecovery;case S.SpiritImpact:return un.SpiritImpact;case S.ManaTempo:return un.ManaTempo}}p(Mk,"opportunityKindForFamily");function kk(e){switch(e.kind){case"walk":case"safety-retreat":case"score-carry":return{monMovesNeeded:1,needsAction:!1,needsManaMove:!1};case"attack":case"bomb":case"spirit-shift":return{monMovesNeeded:0,needsAction:!0,needsManaMove:!1};case"move-mana":return{monMovesNeeded:0,needsAction:!1,needsManaMove:!0}}}p(kk,"opportunityBudgetForAction");function Rk(e,n){return n.monMovesNeeded<=e.remainingMonMoves&&(!n.needsAction||e.canUseAction)&&(!n.needsManaMove||e.canMoveMana)}p(Rk,"budgetAllowsOpportunity");function Pk(e,n){let o=33,t=e.family===S.SafeSupermanaProgress?Math.max(o-(n.delta.safeSupermanaProgressSteps??o),0):0,r=e.family===S.SafeOpponentManaProgress?Math.max(o-(n.delta.safeOpponentManaProgressSteps??o),0):0;return{sameTurnScoreWindowGain:n.delta.sameTurnScoreWindowValue,spiritGain:e.family===S.SpiritImpact?Math.max(n.delta.spiritGain,1):0,opponentWindowDenyGain:e.family===S.DenyOpponentWindow||e.family===S.DrainerKill?Math.max(n.delta.opponentWindowDenyGain,1):0,drainerAttack:(e.family===S.DrainerKill||e.family===S.DenyOpponentWindow)&&n.delta.drainerAttackAvailable,drainerSafetyDelta:e.family===S.DrainerSafetyRecovery?Math.max(-n.delta.drainerSafety,0):0,supermanaProgressGain:t,opponentManaProgressGain:r}}p(Pk,"opportunityDeltaForSeed");function wk(e,n){return{kind:Mk(e.family),family:e.family,action:e.action,priority:e.priority,budget:kk(e.action),delta:Pk(e,n)}}p(wk,"turnOpportunityFromSeed");function ts(e,n){let o=(()=>{switch(e.kind){case un.ImmediateScore:return 12e3;case un.TacticalDeny:return 11400;case un.DrainerKill:return 11200;case un.DrainerSafetyRecovery:return 10400;case un.SpiritImpact:return 9800;case un.SafeSupermanaProgress:return 9400;case un.SafeOpponentManaProgress:return 9200;case un.ManaTempo:return 8e3}})(),t=e.kind===un.ImmediateScore||e.kind===un.TacticalDeny||e.kind===un.DrainerKill||e.kind===un.DrainerSafetyRecovery;return e.priority+o+(n&&t?4e3:0)+e.delta.sameTurnScoreWindowGain*280+e.delta.spiritGain*220+e.delta.opponentWindowDenyGain*260+e.delta.drainerSafetyDelta*240+e.delta.supermanaProgressGain*40+e.delta.opponentManaProgressGain*36+(e.delta.drainerAttack?800:0)-Math.max(e.budget.monMovesNeeded,0)*120-(e.budget.needsAction?80:0)-(e.budget.needsManaMove?40:0)}p(ts,"opportunityScore");function fn(e,n){return e===void 0||e.includes(n)}p(fn,"familyAllowed");function yu(e,n,o,t,r,a){if(e.session.checkpoint()||n.activeColor!==o)return[];let i=Mr(e,n,o,ie(n));if(e.session.checkpoint())return[];let s=i.opponentCanWinImmediately||i.delta.drainerSafety<0,u=[];if(fn(a,S.ImmediateScore)&&u.push(...Hf(n,o)),e.session.checkpoint())return[];if(fn(a,S.DenyOpponentWindow)&&u.push(...Uf(e,n,o)),e.session.checkpoint())return[];if(fn(a,S.DrainerKill)&&u.push(...jf(e,n,o)),e.session.checkpoint())return[];if(fn(a,S.SafeSupermanaProgress)&&u.push(...qf(e,n,o)),e.session.checkpoint())return[];if(fn(a,S.SafeOpponentManaProgress)&&u.push(...zf(e,n,o)),e.session.checkpoint())return[];if(fn(a,S.DrainerSafetyRecovery)&&u.push(...Xf(e,n,o)),e.session.checkpoint())return[];if(fn(a,S.ManaTempo)&&u.push(...gk(e,n,o,t)),e.session.checkpoint())return[];if((fn(a,S.SafeSupermanaProgress)||fn(a,S.SafeOpponentManaProgress)||fn(a,S.DrainerSafetyRecovery)||fn(a,S.SpiritImpact))&&u.push(...Yf(e,n,o,i,a,t)),e.session.checkpoint())return[];if(fn(a,S.SpiritImpact)&&u.push(...Qf(e,n,o,t)),e.session.checkpoint())return[];if(fn(a,S.ManaTempo)&&u.push(...Zf(n,o)),e.session.checkpoint())return[];if((fn(a,S.ManaTempo)||fn(a,S.DrainerSafetyRecovery))&&u.push(...Su(e,n,o).filter(y=>fn(a,y.family))),e.session.checkpoint())return[];let c=new Map;for(let y of u){if(e.session.checkpoint())return[];let f=wk(y,i);if(!Rk(i.budget,f.budget)||s&&f.kind===un.ManaTempo&&!f.delta.drainerAttack&&f.delta.drainerSafetyDelta<=0)continue;let h=c.get(f.family)??[];h.push(f),c.set(f.family,h)}for(let y of c.values())y.sort((f,h)=>{let C=dn(ts(h,s),ts(f,s));return C!==0?C:xa(f.action,h.action)});let l=new Map,m=new Set,d=[];for(let y=0;y<Math.max(t.perNodeFamilyCap,1);y+=1){if(e.session.checkpoint())return[];let f=!1;for(let h of dt){let C=c.get(h);if(C===void 0)continue;let b=l.get(h)??0;for(;b<C.length;){let k=C[b];if(b+=1,k!==void 0&&!m.has(Kt(k.action))){m.add(Kt(k.action)),d.push(k),f=!0;break}}if(l.set(h,b),d.length>=Math.max(r,1))return d}if(!f)break}return d}p(yu,"discoverTurnOpportunities");function rs(e,n,o,t,r){if(e.session.checkpoint()||n.activeColor!==o)return[];if(t.mode===Ve.Production){let l=yu(e,n,o,t,r).map(({family:m,action:d,priority:y})=>({family:m,action:d,priority:y}));return e.session.checkpoint()?[]:l}let a=[];if(a.push(...Hf(n,o)),e.session.checkpoint())return[];if(a.push(...Uf(e,n,o)),e.session.checkpoint())return[];if(a.push(...jf(e,n,o)),e.session.checkpoint())return[];if(a.push(...qf(e,n,o)),e.session.checkpoint())return[];if(a.push(...zf(e,n,o)),e.session.checkpoint())return[];if(a.push(...Xf(e,n,o)),e.session.checkpoint())return[];if(a.push(...Yf(e,n,o,Mr(e,n,o,ie(n)),void 0,t)),e.session.checkpoint())return[];if(a.push(...Qf(e,n,o,t)),e.session.checkpoint())return[];if(a.push(...Zf(n,o)),e.session.checkpoint())return[];let i=new Map;for(let l of a){if(e.session.checkpoint())return[];let m=i.get(l.family)??[];m.push(l),i.set(l.family,m)}for(let l of i.values())l.sort((m,d)=>{let y=dn(d.priority,m.priority);return y!==0?y:xa(m.action,d.action)});let s=new Set,u=new Map,c=[];for(let l=0;l<Math.max(t.perNodeFamilyCap,1);l+=1){if(e.session.checkpoint())return[];let m=!1;for(let d of dt){let y=i.get(d);if(y===void 0)continue;let f=u.get(d)??0;for(;f<y.length;){let h=y[f];if(f+=1,h!==void 0&&!s.has(Kt(h.action))){s.add(Kt(h.action)),c.push(h),m=!0;break}}if(u.set(d,f),c.length>=Math.max(r,1))return c}if(!m)break}return c}p(rs,"generateActionSeeds");function Hf(e,n){let o=[];for(let[t,r]of e.board.entries()){if(r.kind!=="mon-with-mana"||r.mon.color!==n||U(r.mon))continue;let a=gn(t,n);for(let i of we(t)){let s=gn(i,n);s>a||o.push({family:S.ImmediateScore,action:{kind:"score-carry",actor:t,wanted:r.mana,step:i},priority:9800+Math.max(a-s,0)*180+xe(r.mana,n)*120})}}return o}p(Hf,"immediateScoreSeeds");function Uf(e,n,o){let t=q(o),r=Ia(e,n,t,ie(n));if(r<=0&&!go(e,n,o))return[];let a=Kf(n,o,S.DenyOpponentWindow,9400+r*240),i=uo(n.board,o);if(i===void 0)return a;let s=Fe(e,n.board,o),u=gn(i,o);for(let c of we(i))gn(c,o)>u+1&&s>=0||a.push({family:S.DenyOpponentWindow,action:{kind:"safety-retreat",actor:i,to:c},priority:9100+Math.abs(s)*220});return a}p(Uf,"denyWindowSeeds");function jf(e,n,o){let t=uo(n.board,q(o));return t===void 0||!_f(e,n,o,t)?[]:Kf(n,o,S.DrainerKill,9e3)}p(jf,"drainerKillSeeds");function Kf(e,n,o,t){let r=uo(e.board,q(n));if(r===void 0)return[];let a=[],i=e.playerCanUseAction(),s=Fa(e,n);for(let[u,c]of e.board.entries()){let l=K(c);if(l?.color!==n||U(l))continue;let m=i&&Df(c),d=i&&wp(c);if(m&&Tp(e.board,u,r,c,n)&&a.push({family:o,action:{kind:"attack",actor:u,target:r},priority:t}),d&&gp(e.board,u,r,c,n)&&a.push({family:o,action:{kind:"bomb",actor:u,target:r},priority:t-80}),!(s<=0||!m&&!d)){for(let y of we(u))if(!(te(y,r)>=te(u,r))){if(o===S.DrainerKill){let f=e.board.fork();if(f.delete(u),f.set(y,c),!(m&&Tp(f,y,r,c,n)||d&&gp(f,y,r,c,n)))continue}a.push({family:o,action:{kind:"walk",actor:u,to:y},priority:t-200+(te(u,r)-te(y,r))*80})}}}return a}p(Kf,"attackFamilySeeds");function qf(e,n,o){return $f(e,n,o,{kind:"supermana"},S.SafeSupermanaProgress,8900)}p(qf,"safeSupermanaProgressSeeds");function zf(e,n,o){return $f(e,n,o,{kind:"regular",color:q(o)},S.SafeOpponentManaProgress,8600)}p(zf,"safeOpponentManaProgressSeeds");function Gf(e,n,o,t,r){if(e.session.checkpoint())return{progressSteps:void 0,scorePathBestSteps:void 0,sameTurnScoreWindowValue:0};let a=q(o),i=t.kind==="supermana"?xt|$o:t.color===a?It:0,s=Ro(e,n,o,r,i);return e.session.checkpoint()?{progressSteps:void 0,scorePathBestSteps:void 0,sameTurnScoreWindowValue:0}:{progressSteps:t.kind==="supermana"?s.safeSupermanaProgressSteps:t.color===a?s.safeOpponentManaProgressSteps:void 0,scorePathBestSteps:gi(e,n.board,o),sameTurnScoreWindowValue:s.sameTurnScoreWindowValue}}p(Gf,"safeProgressExactSnapshot");function $f(e,n,o,t,r,a){if(e.session.checkpoint())return[];let i=uo(n.board,o);if(i===void 0)return[];let s=[],u=Gf(e,n,o,t,ie(n));if(e.session.cancelled)return[];let c=Fe(e,n.board,o),l=Ti(e,n,o,i,t),m=l?.[0];if(m!==void 0&&s.push({family:r,action:{kind:"score-carry",actor:i,wanted:t,step:m},priority:a+Math.max(22-(l?.length??0),0)*120}),e.session.checkpoint())return[];if(Fa(n,o)>0){let y=Bf(n.board,t);if(y!==void 0){let f=te(i,y),h=u.progressSteps??33,C=u.scorePathBestSteps??33;for(let b of we(i)){if(e.session.checkpoint())return[];if(!vr(n.board,i,b))continue;let k=an(n,[{kind:"location",location:i},{kind:"location",location:b}]);if(k===void 0||go(e,k.game,o))continue;let M=Gf(e,k.game,o,t,ie(k.game));if(e.session.cancelled)return[];let P=Fe(e,k.game.board,o),g=M.progressSteps??33,W=M.scorePathBestSteps??33,E=g<h||g<=h&&W<C;if(!E&&P<c)continue;let D=a-180+Math.max(f-te(b,y),0)*110+(P-c)*120;E&&(D+=(h-g)*220+(C-W)*180),t.kind==="supermana"&&M.sameTurnScoreWindowValue>0&&(D+=M.sameTurnScoreWindowValue*260),s.push({family:r,action:{kind:"walk",actor:i,to:b},priority:D})}}}let d=n.board.get(i);if(d?.kind==="mon-with-mana"&&je(d.mana,t)){let y=gn(i,o);for(let f of we(i)){let h=gn(f,o);h>y||s.push({family:r,action:{kind:"score-carry",actor:i,wanted:t,step:f},priority:a+Math.max(y-h,0)*150})}}return s}p($f,"safeProgressSeeds");function Xf(e,n,o){let t=uo(n.board,o);if(t===void 0)return[];let r=Fe(e,n.board,o),a=[];for(let i of we(t)){let s=an(n,[{kind:"location",location:t},{kind:"location",location:i}]);if(s===void 0)continue;let u=Fe(e,s.game.board,o);u<=r||a.push({family:S.DrainerSafetyRecovery,action:{kind:"safety-retreat",actor:t,to:i},priority:8300+Math.abs(r)*220+(u-r)*260})}return a}p(Xf,"safetyRecoverySeeds");function Su(e,n,o){if(Fa(n,o)<=0)return[];let t=[],r=Fe(e,n.board,o),a=uo(n.board,o);if(a!==void 0){let i=gn(a,o);for(let s of we(a)){if(!vr(n.board,a,s))continue;let u=an(n,[{kind:"location",location:a},{kind:"location",location:s}]);if(u===void 0||go(e,u.game,o))continue;let c=Fe(e,u.game.board,o);if(c<r)continue;let l=gn(s,o);t.push({family:c>r?S.DrainerSafetyRecovery:S.ManaTempo,action:{kind:"walk",actor:a,to:s},priority:7200+Math.max(i-l,0)*140+(c-r)*240})}}if(t.length!==0)return t;for(let[i,s]of n.board.entries()){let u=K(s);if(!(u?.color!==o||U(u)))for(let c of we(i)){if(!vr(n.board,i,c))continue;let l=an(n,[{kind:"location",location:i},{kind:"location",location:c}]);l===void 0||go(e,l.game,o)||t.push({family:S.ManaTempo,action:{kind:"walk",actor:i,to:c},priority:6800})}}return t}p(Su,"fallbackWalkSeeds");function Tk(e,n,o){let t=uo(n.board,o);if(t===void 0)return;let r=Fe(e,n.board,o),a;for(let i of we(t)){if(!vr(n.board,t,i))continue;let s=an(n,[{kind:"location",location:t},{kind:"location",location:i}]);if(s===void 0)continue;let u=Fe(e,s.game.board,o);if(u<=r)continue;let c=8300+Math.abs(r)*220+(u-r)*260;a=a===void 0?c:Math.max(a,c)}return a}p(Tk,"bestFollowUpSafetyRecoveryPriority");function gk(e,n,o,t){if(t.mode!==Ve.Production||Fa(n,o)<=0)return[];let r=uo(n.board,o);if(r===void 0)return[];let a=Fe(e,n.board,o),i=gn(r,o),s=[];for(let u of we(r)){if(!vr(n.board,r,u))continue;let c=an(n,[{kind:"location",location:r},{kind:"location",location:u}]);if(c===void 0||go(e,c.game,o))continue;let l=Fe(e,c.game.board,o),m=gn(u,o);if(l>=a||m>=i)continue;let d=Tk(e,c.game,o);d!==void 0&&s.push({family:S.ManaTempo,action:{kind:"walk",actor:r,to:u},priority:8e3+Math.max(i-m,0)*260+Math.trunc(d/20)-Math.max(a-l,0)*120})}return s}p(gk,"riskyRecoverySetupSeeds");function Ar(e,n,o,t,r){let a=0;return e&&(a|=xt),n&&(a|=It),o&&(a|=lr),t&&(a|=dr),r&&(a|=$o),a}p(Ar,"tacticalProjectionFlags");function vk(e){switch(e){case"safe-progress-only":return Ar(!0,!1,!1,!1,!1);case"opponent-progress-only":return Ar(!1,!0,!1,!1,!1);case"drainer-opportunity":return Ar(!1,!0,!1,!0,!1);case"spirit-score-only":return Ar(!1,!1,!0,!1,!1);case"spirit-opportunity":return Ar(!0,!1,!0,!1,!1)}}p(vk,"tacticalProjectionProfileFlags");function Ak(e,n,o,t,r){let a=n,i=o&&e!==A.Spirit,s=t,u=r&&e===A.Spirit,c=a&&u?"spirit-opportunity":a?"safe-progress-only":i&&r?"drainer-opportunity":i?"opponent-progress-only":u?"spirit-score-only":void 0;return{canEmitSupermana:a,canEmitOpponentMana:i,canEmitSafety:s,canEmitSpirit:u,tacticalFlags:Ar(a,i,u,r&&i,a||u),projectionProfile:c,needsScoreWindow:a||u}}p(Ak,"oracleWalkActorCapabilities");function Lf(e,n,o,t){let r=br(e,n,t).colorSummary(o).spirit;return[r.nextTurnSetupGain,r.utility]}p(Lf,"strategicSpiritSignalWithSearchHash");function Yf(e,n,o,t,r,a){if(e.session.checkpoint()||Fa(n,o)<=0)return[];let i=fn(r,S.SafeSupermanaProgress),s=fn(r,S.SafeOpponentManaProgress),u=fn(r,S.DrainerSafetyRecovery),c=fn(r,S.SpiritImpact);if(!i&&!s&&!u&&!c)return[];let l=t.turn,m=[0,0];if(c&&(m=Lf(e,n,o,ie(n))),e.session.checkpoint())return[];let d=i||u?Fe(e,n.board,o):0,y=l.safeSupermanaProgressSteps??33,f=l.safeOpponentManaProgressSteps??33,h=uo(n.board,o),C=[],b=a.enableLazyOracleScoreWindowProjection;for(let[k,M]of n.board.entries()){if(e.session.checkpoint())return[];let R=K(M);if(R?.color!==o||U(R)||h!==void 0&&ge(k,h))continue;let P=Ak(R.kind,i,s,u,c);if(!(!P.canEmitSupermana&&!P.canEmitOpponentMana&&!P.canEmitSafety&&!P.canEmitSpirit))for(let g of we(k)){if(e.session.checkpoint())return[];if(!vr(n.board,k,g))continue;let W=an(n,[{kind:"location",location:k},{kind:"location",location:g}]);if(W===void 0||go(e,W.game,o))continue;let E=P.canEmitSpirit,D=b?P.projectionProfile!==void 0:P.tacticalFlags!==0,N=b&&P.needsScoreWindow,B=D||N||E?ie(W.game):void 0,G;if(D){if(B===void 0)throw new Error("oracle walk projection requires a state hash");let De=P.tacticalFlags;if(b){if(P.projectionProfile===void 0)throw new Error("lazy oracle projection requires a profile");De=vk(P.projectionProfile)}G=Ro(e,W.game,o,B,De)}if(e.session.cancelled)return[];let L=[0,0];if(E){if(B===void 0)throw new Error("oracle Spirit analysis requires a state hash");L=Lf(e,W.game,o,B)}let $=P.canEmitSupermana||P.canEmitSafety?Fe(e,W.game.board,o):d,V=G===void 0?y:G.safeSupermanaProgressSteps??33,se=G===void 0?f:G.safeOpponentManaProgressSteps??33,Pe,Ze=p(()=>{if(Pe!==void 0)return Pe;if(b){if(B===void 0)throw new Error("oracle score-window projection requires a state hash");Pe=Ro(e,W.game,o,B,$o).sameTurnScoreWindowValue}else Pe=G?.sameTurnScoreWindowValue??0;return Pe},"loadAfterScoreWindow");P.canEmitSupermana&&V<y&&C.push({family:S.SafeSupermanaProgress,action:{kind:"walk",actor:k,to:g},priority:8250+(y-V)*240+($-d)*100+Ze()*160});let Je=P.canEmitOpponentMana&&se<f,en=c&&(P.canEmitSpirit||P.canEmitOpponentMana)&&(G?.spiritAssistedDenialValue??0)>l.spiritAssistedDenialValue;if(Je||en){let De=R.kind===A.Spirit?S.SpiritImpact:S.SafeOpponentManaProgress;fn(r,De)&&C.push({family:De,action:{kind:"walk",actor:k,to:g},priority:8e3+(Je?Math.max(f-se,0)*240:0)+(en?Math.max((G?.spiritAssistedDenialValue??0)-l.spiritAssistedDenialValue,0)*180:0)})}if(P.canEmitSpirit){let De=L[0]-m[0],kn=L[1]-m[1],Ie=De>0||kn>0,yo=(G?.spiritAssistedScoreValue??0)>l.spiritAssistedScoreValue,Eo=b?!yo&&!Ie&&Ze()>l.sameTurnScoreWindowValue:(G?.sameTurnScoreWindowValue??0)>l.sameTurnScoreWindowValue;if(yo||Eo||Ie){let We=(G?.spiritAssistedScoreValue??0)-l.spiritAssistedScoreValue,Qt=Ze()-l.sameTurnScoreWindowValue;C.push({family:S.SpiritImpact,action:{kind:"walk",actor:k,to:g},priority:8100+We*200+Qt*220+De*320+kn*180})}}P.canEmitSafety&&$>d&&C.push({family:S.DrainerSafetyRecovery,action:{kind:"walk",actor:k,to:g},priority:8050+($-d)*260})}}return C}p(Yf,"oracleWalkSeeds");function Vf(e,n){let o=e??33,t=n??33;return t>=o?0:(o-t)*220}p(Vf,"progressPriorityBonus");function Qf(e,n,o,t){if(e.session.checkpoint()||!t.enableSpiritFamily||!n.playerCanUseAction())return[];let r=Ar(!0,!0,!0,!0,!0),a=Ro(e,n,o,ie(n),r);if(e.session.checkpoint())return[];let i=Fe(e,n.board,o),s=[];for(let[u,c]of n.board.entries()){if(e.session.checkpoint())return[];let l=K(c);if(!(l?.color!==o||l.kind!==A.Spirit||U(l)||n.board.squareAt(u).kind==="mon-base"))for(let m of st(u)){if(e.session.checkpoint())return[];let d=n.board.get(m);if(!(d===void 0||!ut(d)))for(let y of we(m)){if(e.session.checkpoint())return[];if(!Wf(n.board,d,y))continue;let f=an(n,[{kind:"location",location:u},{kind:"location",location:m},{kind:"location",location:y}]);if(f===void 0)continue;let h=7600;K(d)?.color===q(o)&&(h+=400);let b=Qn(d);b?.kind==="supermana"&&(h+=600),b?.kind==="regular"&&b.color===q(o)&&(h+=460);let k=Ro(e,f.game,o,ie(f.game),r);if(e.session.checkpoint())return[];k.sameTurnScoreWindowValue>a.sameTurnScoreWindowValue&&(h+=(k.sameTurnScoreWindowValue-a.sameTurnScoreWindowValue)*280),k.spiritAssistedScore&&(h+=900+k.spiritAssistedScoreValue*120),k.safeSupermanaProgress&&(h+=700+Vf(a.safeSupermanaProgressSteps,k.safeSupermanaProgressSteps)),k.safeOpponentManaProgress&&(h+=760+Vf(a.safeOpponentManaProgressSteps,k.safeOpponentManaProgressSteps)),k.spiritAssistedDenial&&(h+=820+k.spiritAssistedDenialValue*140);let M=Fe(e,f.game.board,o);M>i&&(h+=(M-i)*160),h+=Math.max(11-te(y,m),0)*20,s.push({family:S.SpiritImpact,action:{kind:"spirit-shift",actor:u,target:m,destination:y},priority:h})}}}return s.sort((u,c)=>{let l=dn(c.priority,u.priority);return l!==0?l:xa(u.action,c.action)}),s.slice(0,12)}p(Qf,"spiritImpactSeeds");function Zf(e,n){if(!e.playerCanMoveMana()||uo(e.board,n)!==void 0)return[];let o=[];for(let[t,r]of e.board.entries())if(!(r.kind!=="mana"||r.mana.kind!=="regular"||r.mana.color!==n))for(let a of we(t)){if(!Ff(e.board,a))continue;let i=gn(t,n)-gn(a,n),s=q(n),u=gn(t,s)-gn(a,s);i<=0||u>0||o.push({family:S.ManaTempo,action:{kind:"move-mana",from:t,to:a},priority:6900+i*200-Math.max(u,0)*200})}return o}p(Zf,"manaTempoSeeds");function iy(e,n,o){if(e.session.checkpoint())return;let t=Cp(Wn(e).bestPlan,o);if(t===void 0)return;let r=t.compiledChunks[0],a=r!==void 0&&wr(n,r)!==void 0;if(!e.session.checkpoint()){if(!a){e.session.cacheWriteAllowed&&Mp(Wn(e).bestPlan,o);return}return Sp(t)}}p(iy,"cachedBestPlanIfLegal");function Ek(e,n,o){if(e.session.checkpoint())return;let t=lu(n,o),r=Cp(Wn(e).continuation,t);if(r===void 0)return;let a=wr(n,r)!==void 0;if(!e.session.checkpoint()){if(!a){e.session.cacheWriteAllowed&&Mp(Wn(e).continuation,t);return}return r.slice()}}p(Ek,"cachedStepIfLegal");function is(e,n,o){if(e.session.checkpoint())return;let t=Ek(e,n,o);return e.session.checkpoint()?void 0:t}p(is,"turnEngineCachedStep");function Ep(e,n,o,t,r){e.session.checkpoint()||!e.session.cacheWriteAllowed||du(Wn(e).continuation,pu(n,o,t),r.slice())}p(Ep,"turnEngineStoreCachedStep");function co(e,n,o,t){if(e.session.checkpoint()||n.activeColor!==o)return;let r=lu(n,t);if(wf(Wn(e).noPlan,r))return;let a=iy(e,n,r);if(a!==void 0)return e.session.checkpoint()?void 0:a;let i=cy(e,n,o,t);if(!e.session.checkpoint())switch(i.status){case ee.NoPlan:e.session.cacheWriteAllowed&&Tf(Wn(e).noPlan,r);return;case ee.BudgetExceeded:return;case"ok":return e.session.cacheWriteAllowed?(du(Wn(e).bestPlan,r,Sp(i.plan)),i.plan):void 0}}p(co,"turnEngineCandidatePlan");function Op(e,n,o,t){if(e.session.checkpoint()||n.activeColor!==o)return;let r=cy(e,n,o,t);return e.session.checkpoint()||r.status!=="ok"?void 0:r.plan}p(Op,"turnEngineCandidatePlanLive");function xp(e){let n=new Map;return e.forEach((o,t)=>{let r=hn(o);n.has(r)||n.set(r,t)}),n}p(xp,"allowedRankMap");function Ok(e,n,o,t,r,a){let i=o.compiledChunks[0],s=i===void 0?void 0:wr(n,i);return{rank:r,allowedLength:a,firstStepOpponentImmediateLoss:s!==void 0&&go(e,s,t),firstStepDrainerSafety:s===void 0?Math.trunc(-2147483648/4):Fe(e,s.board,t)}}p(Ok,"allowedHeadSelectionMeta");function Jf(e,n){return v(e.evalScore,qe(Math.min(Math.max(n.allowedLength-n.rank,0),96),12))}p(Jf,"allowedHeadRankAdjustedEval");function sy(e,n,o,t){let r=J(e.utility,o.utility);return r!==0||(r=Qi([+!n.firstStepOpponentImmediateLoss,n.firstStepDrainerSafety],[+!t.firstStepOpponentImmediateLoss,t.firstStepDrainerSafety]),r!==0)||(r=dn(Jf(e.utility,n),Jf(o.utility,t)),r!==0)?r:(r=so(e,o),r!==0?r:dn(t.rank,n.rank))}p(sy,"compareAllowedHeadPlans");function xk(e,n,o,t,r,a,i){let s=xp(i),u;for(let c of a){if(e.session.checkpoint())return;let l=c.compiledChunks[0];if(l===void 0)continue;let m=s.get(hn(l));if(m===void 0)continue;if(c.utility=us(e,c,o,t,r),e.session.cancelled)return;let d=Ok(e,n,c,o,m,i.length);(u===void 0||sy(c,d,u.plan,u.meta)>0)&&(u={plan:c,meta:d})}return u?.plan}p(xk,"bestPlanFromAllowedHeads");function Ik(e,n,o,t,r){if(e.session.checkpoint())return{status:ee.BudgetExceeded};let a=es(e,n,o,t),i=hu(e,n,o,t,a,Math.max(t.ownSeedCap,1),Math.max(t.ownBeam,1),Math.max(t.stepCap,1),Math.max(t.expansionCap,1));if(e.session.checkpoint())return{status:ee.BudgetExceeded};if(i.status===ee.BudgetExceeded)return i;if(i.status==="ok"){let u=xk(e,n,o,t,a,i.plans,r);if(e.session.checkpoint())return{status:ee.BudgetExceeded};if(u!==void 0)return{status:"ok",plan:u}}let s=Hk(e,n,o,t,a,r);return e.session.checkpoint()?{status:ee.BudgetExceeded}:s===void 0?{status:ee.NoPlan}:{status:"ok",plan:s}}p(Ik,"buildBestPlanFromAllowedHeads");function bu(e,n,o,t,r){if(e.session.checkpoint()||n.activeColor!==o||r.length===0)return;let a=xp(r),i=iy(e,n,lu(n,t)),s=i?.compiledChunks[0];if(s!==void 0&&a.has(hn(s)))return i;let u=Ik(e,n,o,t,r);return e.session.checkpoint()||u.status!=="ok"?void 0:u.plan}p(bu,"turnEngineCandidatePlanFromAllowedHeads");function Ip(e,n,o,t,r,a){if(e.session.checkpoint()||n.activeColor!==o||a.length===0)return;let i=new Set(a.map(hn)),s=is(e,n,r);if(s!==void 0&&i.has(hn(s)))return s;let u=bu(e,n,o,r,a);if(!(u===void 0||e.session.checkpoint())&&(uy(e,n,o,t,u,r),!e.session.cancelled))return u.compiledChunks[0]?.slice()}p(Ip,"turnEngineNextInputsFromAllowedHeads");function Np(e,n,o,t,r,a){e.session.checkpoint()||uy(e,n,o,t,r,a)}p(Np,"turnEngineCommitPlan");function uy(e,n,o,t,r,a){if(e.session.checkpoint()||r.compiledChunks.length===0)return;let i=n.fork(),s=n.activeColor;for(let u=0;u<r.compiledChunks.length;u+=1){if(e.session.checkpoint())return;let c=r.compiledChunks[u];if(c===void 0)continue;if(u>0&&t===Ve.Production){let m=co(e,i,o,a);if(m?.compiledChunks[0]===void 0||e.session.checkpoint()||ro(m.compiledChunks[0],c)!==0)break}if(!e.session.cacheWriteAllowed)return;du(Wn(e).continuation,pu(i,t,a),c.slice());let l=wr(i,c);if(l?.activeColor!==s)break;i=l}}p(uy,"registerPlanContinuations");function ss(e,n,o,t,r){if(e.session.checkpoint())return wn;let a=es(e,n,t,r),i=us(e,o,t,r,a);return e.session.checkpoint()?wn:i}p(ss,"turnEngineEvaluatePlanWithReplies");function cy(e,n,o,t){if(e.session.checkpoint())return{status:ee.BudgetExceeded};let r=es(e,n,o,t),a=hu(e,n,o,t,r,Math.max(t.ownSeedCap,1),Math.max(t.ownBeam,1),Math.max(t.stepCap,1),Math.max(t.expansionCap,1));if(e.session.checkpoint())return{status:ee.BudgetExceeded};if(a.status===ee.BudgetExceeded)return a;let i;if(a.status==="ok")i=a.plans;else{let u=Vk(e,n,o,t,r);return e.session.checkpoint()?{status:ee.BudgetExceeded}:u===void 0?{status:ee.NoPlan}:{status:"ok",plan:u}}if(t.mode===Ve.Production&&i.length>1){i.sort((d,y)=>-so(d,y));let u=Math.min(i.length,Math.min(Math.max(Math.max(t.ownBeam,1)*2,6),12)),c=t.ownBeam>=4?2:1,l=new Map,m=[];for(let d of i){let y=`${hn(d.compiledChunks[0]??[])}:${d.headFamily}:${d.goalFamily}`,f=l.get(y)??0;if(!(f>=c)&&(l.set(y,f+1),m.push(d),m.length>=u))break}i=m}let s;for(let u of i){if(e.session.checkpoint())return{status:ee.BudgetExceeded};if(u.utility=us(e,u,o,t,r),e.session.cancelled)return{status:ee.BudgetExceeded};(s===void 0||so(u,s)>0)&&(s=u)}return e.session.checkpoint()?{status:ee.BudgetExceeded}:s===void 0?{status:ee.NoPlan}:{status:"ok",plan:s}}p(cy,"buildBestPlan");function hu(e,n,o,t,r,a,i,s,u){if(e.session.checkpoint())return{status:ee.BudgetExceeded};let c=t.mode===Ve.Production?Gk(e,n,o,t,r,a,i,Math.min(s,ly(t)),u):Lk(e,n,o,t,r,a,i,s,u);return e.session.checkpoint()?{status:ee.BudgetExceeded}:c}p(hu,"generatePlansForMode");function py(e){return Math.min(Math.max(e.stepCap,1),6)}p(py,"bundleChunkCapForConfig");function ly(e){return Math.min(Math.max(e.stepCap,1),4)}p(ly,"bundlePlanCapForConfig");function dy(e,n){return Kn(n)<Kn(e)?n:e}p(dy,"mergePlanFamily");function Nk(e,n,o){if(o===n||o===e)return!0;switch(e){case S.ImmediateScore:return o===S.ImmediateScore||o===S.DrainerSafetyRecovery||o===S.SafeSupermanaProgress||o===S.SafeOpponentManaProgress;case S.DenyOpponentWindow:case S.DrainerKill:return o===S.ImmediateScore||o===S.DenyOpponentWindow||o===S.DrainerKill||o===S.DrainerSafetyRecovery||o===S.SafeSupermanaProgress||o===S.SafeOpponentManaProgress;case S.DrainerSafetyRecovery:return o===S.ImmediateScore||o===S.DrainerSafetyRecovery||o===S.SafeSupermanaProgress||o===S.SafeOpponentManaProgress||o===S.ManaTempo;case S.SpiritImpact:return o===S.ImmediateScore||o===S.DenyOpponentWindow||o===S.SpiritImpact||o===S.SafeSupermanaProgress||o===S.SafeOpponentManaProgress||o===S.DrainerSafetyRecovery;case S.SafeSupermanaProgress:case S.SafeOpponentManaProgress:return o===S.ImmediateScore||o===S.DrainerSafetyRecovery||o===S.SafeSupermanaProgress||o===S.SafeOpponentManaProgress||o===S.DenyOpponentWindow||o===S.SpiritImpact;case S.ManaTempo:return o===S.ImmediateScore||o===S.DrainerSafetyRecovery||o===S.SafeSupermanaProgress||o===S.SafeOpponentManaProgress||o===S.SpiritImpact||o===S.ManaTempo}}p(Nk,"macroFollowupFamilyAllowed");function Ap(e,n,o){let t=0;return o===n&&(t+=420),o===e&&(t+=220),o===S.ImmediateScore&&(t+=640),e===S.SpiritImpact&&(o===S.SpiritImpact||o===S.ImmediateScore||o===S.SafeSupermanaProgress||o===S.SafeOpponentManaProgress)&&(t+=180),(e===S.SafeSupermanaProgress||e===S.SafeOpponentManaProgress)&&(o===S.SafeSupermanaProgress||o===S.SafeOpponentManaProgress||o===S.ImmediateScore)&&(t+=180),e===S.DrainerSafetyRecovery&&(o===S.DrainerSafetyRecovery||o===S.SafeSupermanaProgress||o===S.SafeOpponentManaProgress||o===S.ImmediateScore)&&(t+=160),t}p(Ap,"macroFollowupFamilyBonus");function my(e,n){return dt.filter(o=>Nk(e,n,o))}p(my,"macroFollowupFamilies");function Dk(e,n,o,t,r,a,i,s){let u=Da(e,n,t,o),c=u.opportunity.opponentCanWinImmediately||u.opportunity.delta.drainerSafety<0,l=new Set(s.map(Kt)),m=yu(e,n,t,r,Math.max(Math.max(r.ownSeedCap,r.perNodeFamilyCap*3),8),my(a,i)).filter(d=>!l.has(Kt(d.action)));return m.sort((d,y)=>{let f=dn(ts(y,c)+Ap(a,i,y.family),ts(d,c)+Ap(a,i,d.family));return f!==0?f:xa(d.action,y.action)}),m.slice(0,Math.max(Math.max(r.perNodeFamilyCap,1)*2,4))}p(Dk,"macroFollowupSeedCandidates");function ey(e,n){let o=33;return Math.max((e??o)-(n??o),0)}p(ey,"progressStepGain");function ny(e,n,o,t,r,a){if(e.session.checkpoint())return oy();let i=Da(e,o,r,t);return e.session.cancelled?oy():{sameTurnScoreWindowGain:Math.max(i.strategic.immediateWindow.bestScore-a.strategic.immediateWindow.bestScore,0),spiritGain:Math.max(i.strategic.spirit.nextTurnSetupGain-a.strategic.spirit.nextTurnSetupGain,i.strategic.spirit.utility-a.strategic.spirit.utility,0),opponentWindowDenyGain:Math.max(a.opponentImmediateWindow-i.opponentImmediateWindow,0),drainerAttack:i.opportunity.delta.drainerAttackAvailable,drainerSafetyDelta:Fe(e,o.board,r)-Fe(e,n.board,r),supermanaProgressGain:ey(a.opportunity.delta.safeSupermanaProgressSteps,i.opportunity.delta.safeSupermanaProgressSteps),opponentManaProgressGain:ey(a.opportunity.delta.safeOpponentManaProgressSteps,i.opportunity.delta.safeOpponentManaProgressSteps)}}p(ny,"macroOpportunityDelta");function oy(){return{sameTurnScoreWindowGain:0,spiritGain:0,opponentWindowDenyGain:0,drainerAttack:!1,drainerSafetyDelta:0,supermanaProgressGain:0,opponentManaProgressGain:0}}p(oy,"emptyOpportunityDelta");function ty(e,n,o,t,r,a){return v(a,Math.max(-2147483648,Math.min(2147483647,Math.trunc(Wa(e,n,o,t,r)/1024))))}p(ty,"macroPriorityFromState");function Ba(e,n){return js(jn(Cn(e,n),Xi),11)}p(Ba,"macroSignatureMix");function Wk(e){let n=su;for(let o of e){let[t,r,a,i]=zi(o);n=Ba(n,Mo(t)),n=Ba(n,Mo(Q(r))),n=Ba(n,a===void 0?bf:Mo(Q(a))),n=Ba(n,i===void 0?Cf:Mo(Q(i)))}return n}p(Wk,"macroSignatureForActions");function Fk(e,n){return Ba(Ba(e,n.endSnapshot.stateHash),n.signature)}p(Fk,"macroPlanSignature");function Bk(e,n,o,t,r,a){if(e.session.checkpoint())return;let i=Da(e,n,o,r.startHash);if(e.session.cancelled)return;let s=Pp(e,n,o,a.action,t);if(s===void 0||e.session.checkpoint())return;let u=s[0],c=ie(u),l=Mn(r,u,c);if(e.session.cancelled)return;let d=[a.action],y=[s[1]],f=a.family,h=new eo($i);for(h.add(r.startHash),h.add(c);u.activeColor===o&&u.winnerColor()===void 0&&y.length<py(t);){if(e.session.checkpoint())return;let M=Da(e,u,o,c);if(e.session.cancelled)return;let P=Mn(r,u,c);if(e.session.cancelled)return;let W=M.opportunity.delta.drainerSafety<0||P.drainerSafety<0||Fe(e,u.board,o)<0,E;for(let D of Dk(e,u,c,o,t,a.family,f,d)){if(e.session.checkpoint())return;let N=Pp(e,u,o,D.action,t);if(N===void 0||e.session.checkpoint())continue;let[B,G]=N,L=ie(B);if(h.has(L))continue;let $=ny(e,u,B,L,o,M),V=dy(f,D.family),se=Mn(r,B,L);if(e.session.cancelled)return;let Ze=$.sameTurnScoreWindowGain+$.spiritGain+$.opponentWindowDenyGain+Math.max($.drainerSafetyDelta,0)+$.supermanaProgressGain+$.opponentManaProgressGain+($.drainerAttack?2:0),Je=W&&(D.family===S.DrainerSafetyRecovery||D.family===S.ImmediateScore||D.family===S.SafeSupermanaProgress||D.family===S.SafeOpponentManaProgress);if(Ze<=0&&Bn(se,P)<=0&&B.activeColor===o&&!Je)continue;let en=W?(()=>{switch(D.family){case S.DrainerSafetyRecovery:return 960;case S.ImmediateScore:return 820;case S.SafeSupermanaProgress:case S.SafeOpponentManaProgress:return 360;case S.DenyOpponentWindow:case S.DrainerKill:return 220;case S.SpiritImpact:case S.ManaTempo:return 0}})():0,De=ty(r,B,L,V,y.length+1,D.priority+Ap(a.family,f,D.family))+en+$.sameTurnScoreWindowGain*280+$.spiritGain*220+$.opponentWindowDenyGain*240+Math.max($.drainerSafetyDelta,0)*200+$.supermanaProgressGain*120+$.opponentManaProgressGain*112+($.drainerAttack?820:0);(E===void 0||De>E.score||De===E.score&&Kn(V)<Kn(E.goalFamily))&&(E={score:De,opportunity:D,after:B,afterHash:L,chunk:G,goalFamily:V})}if(E===void 0)break;d.push(E.opportunity.action),y.push(E.chunk),f=E.goalFamily,u=E.after,c=E.afterHash,h.add(c)}if(e.session.checkpoint())return;let C={stateHash:c},b=ny(e,n,u,c,o,i);if(!e.session.cancelled)return{headFamily:a.family,goalFamily:f,priority:ty(r,u,c,f,y.length,a.priority),delta:b,actions:d,compiledChunks:y,endGame:u.fork(),endSnapshot:C,headUtility:l,signature:Wk(d)}}p(Bk,"buildMacroFromHeadOpportunity");function ry(e,n,o,t,r,a,i){if(e.session.checkpoint())return[];let s=[],u=new eo($i),c=yu(e,n,o,t,Math.max(Math.max(a,t.perNodeFamilyCap*3),8),i);if(e.session.checkpoint())return[];for(let l of c){if(e.session.checkpoint())return[];let m=Bk(e,n,o,t,r,l);if(m===void 0){if(e.session.cancelled)return[];continue}if(!u.has(m.endSnapshot.stateHash,0,m.signature)&&(u.add(m.endSnapshot.stateHash,0,m.signature),s.push(m),s.length>=Math.max(a,1)))break}return s.sort((l,m)=>{let d=p(h=>h.priority+h.delta.sameTurnScoreWindowGain*280+h.delta.spiritGain*220+h.delta.opponentWindowDenyGain*240+h.delta.drainerSafetyDelta*220+h.delta.supermanaProgressGain*120+h.delta.opponentManaProgressGain*112+(h.delta.drainerAttack?820:0)+(py(t)-h.compiledChunks.length)*8,"score"),y=dn(d(m),d(l));if(y!==0)return y;let f=dn(Kn(l.goalFamily),Kn(m.goalFamily));return f!==0?f:Zi(l.compiledChunks,m.compiledChunks)}),e.session.checkpoint()?[]:s.slice(0,Math.max(a,1))}p(ry,"discoverMacroOpportunities");function _k(e,n){return{actions:n.actions,compiledChunks:n.compiledChunks,endGame:n.game.fork(),utility:Mn(e,n.game,n.stateHash),headUtility:n.headUtility,headFamily:n.headFamily,goalFamily:n.goalFamily,packageMeta:Yi}}p(_k,"macroNodeToPlan");function Gk(e,n,o,t,r,a,i,s,u){if(e.session.checkpoint())return{status:ee.BudgetExceeded};let c=0,l=!1,m=Math.min(Math.max(s,1),ly(t)),d=ry(e,n,o,t,r,a);if(e.session.checkpoint())return{status:ee.BudgetExceeded};if(d.length===0)return{status:ee.NoPlan};let y=new Te($i),f=[];for(let b of d){if(e.session.checkpoint())return{status:ee.BudgetExceeded};if(c+=1,c>u){l=!0;break}let k=Wa(r,b.endGame,b.endSnapshot.stateHash,b.goalFamily,b.compiledChunks.length);if(e.session.cancelled)return{status:ee.BudgetExceeded};let M=y.get(b.endSnapshot.stateHash,0,b.signature);M!==void 0&&k<=M||(y.set(b.endSnapshot.stateHash,k,0,b.signature),f.push({order:k,node:{game:b.endGame,stateHash:b.endSnapshot.stateHash,actions:b.actions,compiledChunks:b.compiledChunks,headUtility:b.headUtility,headFamily:b.headFamily,goalFamily:b.goalFamily,signature:b.signature}}))}if(f.length===0)return{status:l?ee.BudgetExceeded:ee.NoPlan};f.sort(as),f=f.slice(0,Math.max(i,1));let h=[];for(let b=1;b<m;b+=1){if(e.session.checkpoint())return{status:ee.BudgetExceeded};let k=[],M=!1,R=!1;for(let P of f){let g=P.node;if(e.session.checkpoint())return{status:ee.BudgetExceeded};if(g.game.winnerColor()!==void 0||g.game.activeColor!==o){h.push(g);continue}let W=ns(e,g.game,g.stateHash,o,t),E=ry(e,g.game,o,t,W,a,my(g.headFamily,g.goalFamily));if(e.session.checkpoint())return{status:ee.BudgetExceeded};if(E.length===0){h.push(g);continue}let D=!1;for(let N of E){if(e.session.checkpoint())return{status:ee.BudgetExceeded};if(c+=1,c>u){h.push(g),l=!0,R=!0;break}let B=[...g.actions,...N.actions],G=[...g.compiledChunks,...N.compiledChunks],L=dy(g.goalFamily,N.goalFamily),$=Fk(g.signature,N),V=Wa(r,N.endGame,N.endSnapshot.stateHash,L,G.length);if(e.session.cancelled)return{status:ee.BudgetExceeded};let se=y.get(N.endSnapshot.stateHash,0,$);se!==void 0&&V<=se||(y.set(N.endSnapshot.stateHash,V,0,$),k.push({order:V,node:{game:N.endGame,stateHash:N.endSnapshot.stateHash,actions:B,compiledChunks:G,headUtility:g.headUtility,headFamily:g.headFamily,goalFamily:L,signature:$}}),M=!0,D=!0)}if(R)break;D||h.push(g)}if(R){k.sort(as),f=k.slice(0,Math.max(i,1));break}if(!M||k.length===0){f=[];break}k.sort(as),f=k.slice(0,Math.max(i,1))}if(h.push(...f.map(({node:b})=>b)),e.session.checkpoint())return{status:ee.BudgetExceeded};if(h.length===0)return{status:l?ee.BudgetExceeded:ee.NoPlan};let C=h.map(b=>_k(r,b));return e.session.checkpoint()?{status:ee.BudgetExceeded}:(C.sort((b,k)=>-so(b,k)),{status:"ok",plans:C})}p(Gk,"generateMacroPlans");function Lk(e,n,o,t,r,a,i,s,u){if(e.session.checkpoint())return{status:ee.BudgetExceeded};let c=0,l=rs(e,n,o,t,a);if(e.session.checkpoint())return{status:ee.BudgetExceeded};if(l.length===0)return{status:ee.NoPlan};let m=new jt(e,n,l,t);if(e.session.checkpoint())return{status:ee.BudgetExceeded};let d=new Te($i),y=[];for(let C of l){if(e.session.checkpoint())return{status:ee.BudgetExceeded};let b=os(e,n,o,C.action,m);if(b===void 0)continue;if(e.session.checkpoint())return{status:ee.BudgetExceeded};if(c+=1,c>u)return{status:ee.BudgetExceeded};let[k,M]=b,R=ie(k),P=Wa(r,k,R,C.family,1),g=d.get(R);if(g!==void 0&&P<=g)continue;d.set(R,P);let W=Mn(r,k,R);if(e.session.cancelled)return{status:ee.BudgetExceeded};y.push({order:P,node:{game:k,stateHash:R,actions:[C.action],compiledChunks:[M],headUtility:W,headFamily:C.family,goalFamily:C.family}})}if(y.length===0)return{status:ee.NoPlan};y.sort(as),y=y.slice(0,Math.max(i,1));let f=[];for(let C=1;C<Math.max(s,1);C+=1){if(e.session.checkpoint())return{status:ee.BudgetExceeded};let b=[],k=!1;for(let M of y){let R=M.node;if(e.session.checkpoint())return{status:ee.BudgetExceeded};if(R.game.winnerColor()!==void 0||R.game.activeColor!==o){f.push(R);continue}let P=rs(e,R.game,o,t,a);if(e.session.checkpoint())return{status:ee.BudgetExceeded};if(P.length===0){f.push(R);continue}let g=new jt(e,R.game,P,t);if(e.session.checkpoint())return{status:ee.BudgetExceeded};let W=!1;for(let E of P){if(e.session.checkpoint())return{status:ee.BudgetExceeded};let D=os(e,R.game,o,E.action,g);if(D===void 0)continue;if(e.session.checkpoint())return{status:ee.BudgetExceeded};if(c+=1,c>u)return{status:ee.BudgetExceeded};let[N,B]=D,G=[...R.actions,E.action],L=[...R.compiledChunks,B],$=ie(N),V=Wa(r,N,$,R.goalFamily,G.length);if(e.session.cancelled)return{status:ee.BudgetExceeded};let se=d.get($);se!==void 0&&V<=se||(d.set($,V),b.push({order:V,node:{game:N,stateHash:$,actions:G,compiledChunks:L,headUtility:R.headUtility,headFamily:R.headFamily,goalFamily:R.goalFamily}}),k=!0,W=!0)}W||f.push(R)}if(!k||b.length===0){y=[];break}b.sort(as),y=b.slice(0,Math.max(i,1))}if(f.push(...y.map(({node:C})=>C)),e.session.checkpoint())return{status:ee.BudgetExceeded};if(f.length===0)return{status:ee.NoPlan};let h=f.map(C=>({actions:[...C.actions],compiledChunks:C.compiledChunks.map(b=>b.slice()),endGame:C.game.fork(),utility:Mn(r,C.game,C.stateHash),headUtility:C.headUtility,headFamily:C.headFamily,goalFamily:C.goalFamily,packageMeta:Yi}));return e.session.checkpoint()?{status:ee.BudgetExceeded}:(h.sort((C,b)=>-so(C,b)),{status:"ok",plans:h})}p(Lk,"generateTurnPlans");function as(e,n){let o=dn(n.order,e.order);return o!==0?o:Zi(e.node.compiledChunks,n.node.compiledChunks)}p(as,"compareOrderedNodes");function Vk(e,n,o,t,r){if(e.session.checkpoint())return;let a=rs(e,n,o,t,Math.min(Math.max(t.ownSeedCap,1)*2,Oa));if(e.session.checkpoint()||(a.length===0&&(a=Su(e,n,o)),a.length===0||e.session.checkpoint()))return;let i=new jt(e,n,a,t),s;for(let u of a){if(e.session.checkpoint())return;let c=os(e,n,o,u.action,i);if(c===void 0)continue;if(e.session.checkpoint())return;let[l,m]=c,d=ie(l),y=Mn(r,l,d),f={actions:[u.action],compiledChunks:[m.slice()],endGame:l.fork(),utility:y,headUtility:y,headFamily:u.family,goalFamily:u.family,packageMeta:Yi};if(e.session.cancelled||(f.utility=us(e,f,o,t,r),e.session.cancelled))return;(s===void 0||so(f,s)>0)&&(s=f)}return e.session.checkpoint()?void 0:s}p(Vk,"fallbackSingleActionPlan");function Hk(e,n,o,t,r,a){if(e.session.checkpoint())return;let i=rs(e,n,o,t,Math.min(Math.max(t.ownSeedCap,1)*2,Oa));if(e.session.checkpoint()||(i.length===0&&(i=Su(e,n,o)),e.session.checkpoint()||i.length===0))return;let s=xp(a),u=new jt(e,n,i,t);if(e.session.checkpoint())return;let c;for(let l of i){if(e.session.checkpoint())return;let m=os(e,n,o,l.action,u);if(m===void 0)continue;if(e.session.checkpoint())return;let[d,y]=m,f=s.get(hn(y));if(f===void 0)continue;let h=ie(d),C=Mn(r,d,h),b={actions:[l.action],compiledChunks:[y.slice()],endGame:d.fork(),utility:C,headUtility:C,headFamily:l.family,goalFamily:l.family,packageMeta:Yi};if(e.session.cancelled||(b.utility=us(e,b,o,t,r),e.session.cancelled))return;let M={rank:f,allowedLength:a.length,firstStepOpponentImmediateLoss:fu(e,d,o,h),firstStepDrainerSafety:Fe(e,d.board,o)};(c===void 0||sy(b,M,c.plan,c.meta)>0)&&(c={plan:b,meta:M})}return e.session.checkpoint()?void 0:c?.plan}p(Hk,"fallbackSingleActionPlanFromAllowedHeads");function ay(e,n){return Math.min(e,Math.min(Math.max(Math.max(n,0)*2,4),8))}p(ay,"replyShortlistLength");function us(e,n,o,t,r){if(e.session.checkpoint())return wn;let a=n.endGame,i=ie(a),s=q(o);if(a.winnerColor()!==void 0||a.activeColor!==s)return Mn(r,a,i);let u={...t,ownSeedCap:Math.max(t.opponentSeedCap,1),ownBeam:Math.max(t.opponentBeam,1),perNodeFamilyCap:Math.max(t.perNodeFamilyCap,1),stepCap:Math.min(Math.max(t.stepCap,1),4),opponentSeedCap:Math.max(t.replySeedCap,1),opponentBeam:Math.max(t.replyBeam,1),replySeedCap:0,replyBeam:0,expansionCap:Math.max(Math.trunc(t.expansionCap/2),24)},c=ns(e,a,i,s,u),l=hu(e,a,s,u,c,u.ownSeedCap,u.ownBeam,u.stepCap,u.expansionCap);if(e.session.checkpoint())return wn;if(l.status!=="ok")return Mn(r,a,i);let m=l.plans,d=ay(m.length,u.ownBeam),y=m[0];if(y===void 0)return Mn(r,a,i);let f=ie(y.endGame),h=Mn(c,y.endGame,f);for(let g of m.slice(1,d)){if(e.session.checkpoint())return wn;let W=ie(g.endGame),E=Mn(c,g.endGame,W),D=Bn(E,h);(D>0||D===0&&Zi(g.compiledChunks,y.compiledChunks)<0)&&(y=g,f=W,h=E)}let C=y.endGame;if(C.winnerColor()!==void 0||C.activeColor!==o||t.replySeedCap===0)return Mn(r,C,f);let b={...t,ownSeedCap:Math.max(t.replySeedCap,1),ownBeam:Math.max(t.replyBeam,1),perNodeFamilyCap:Math.max(t.perNodeFamilyCap,1),stepCap:Math.min(Math.max(t.stepCap,1),3),opponentSeedCap:0,opponentBeam:0,replySeedCap:0,replyBeam:0,expansionCap:Math.max(Math.trunc(t.expansionCap/3),16)},k=ns(e,C,f,o,b),M=hu(e,C,o,b,k,b.ownSeedCap,b.ownBeam,b.stepCap,b.expansionCap);if(e.session.checkpoint())return wn;if(M.status!=="ok")return Mn(r,C,f);let R=M.plans,P;for(let g of R.slice(0,ay(R.length,b.ownBeam))){let W=ie(g.endGame),E=Mn(r,g.endGame,W);(P===void 0||Bn(E,P)>0)&&(P=E)}return P??Mn(r,C,f)}p(us,"evaluatePlanWithReplies");function Er(e){return e===Ve.Production}p(Er,"turnEngineModeUsesMacroPlans");function cs(e){return e.planner.enabled&&e.planner.mode===Le.Production}p(cs,"productionTurnEngineLive");function Cu(e){return cs(e)&&e.planner.lowBudgetGuard}p(Cu,"productionLowBudgetGuardLive");function fy(e){return cs(e)&&e.planner.midTurnTacticalGuard}p(fy,"productionMidTurnTacticalGuardLive");function yy(e){return e.activeColor===T.White&&e.turnNumber===1&&e.isFirstTurn()&&e.monsMovesCount===1&&!e.playerCanUseAction()&&!e.playerCanMoveMana()}p(yy,"productionIsWhiteTurnOneManaOnlyFollowup");function Sy(e,n){return cs(n)&&e.activeColor===T.White&&e.turnNumber>=3&&e.monsMovesCount===0&&e.playerCanUseAction()&&e.playerCanMoveMana()}p(Sy,"productionUseFreshLiveHeadPlan");function _a(e,n){if(n.activeColor!==T.Black||n.turnNumber!==2||n.monsMovesCount!==0||!n.playerCanUseAction()||!n.playerCanMoveMana())return!1;let o=de(e,n,n.activeColor);return!o.opponentCanWinImmediately&&o.delta.sameTurnScoreWindowValue<=0&&o.delta.opponentWindowDenyGain<=0&&!o.delta.drainerAttackAvailable&&o.delta.drainerSafety>=2}p(_a,"productionIsSafeEarlyBlackOpeningState");function Dp(e,n){if(zn(n)||n.playerCanUseAction()||n.playerCanMoveMana())return!1;let o=de(e,n,n.activeColor);return!o.opponentCanWinImmediately&&o.delta.sameTurnScoreWindowValue<=0&&o.delta.opponentWindowDenyGain<=0&&!o.delta.drainerAttackAvailable&&o.delta.safeSupermanaProgressSteps===void 0&&o.delta.safeOpponentManaProgressSteps===void 0&&o.delta.drainerSafety>=0}p(Dp,"shouldSkipProductionLowBudgetState");function Wp(e,n){if(n.activeColor!==T.White||n.turnNumber!==3||n.monsMovesCount===0||n.monsMovesCount>2||!n.playerCanUseAction()||!n.playerCanMoveMana()||zn(n))return!1;let o=de(e,n,n.activeColor);return!o.opponentCanWinImmediately&&o.delta.drainerSafety<0&&o.delta.sameTurnScoreWindowValue<=0&&o.delta.safeSupermanaProgressSteps===void 0&&o.delta.safeOpponentManaProgressSteps===void 0}p(Wp,"shouldDisableProductionMidTurnTacticalEngine");function hy(e,n){return!Cu(n)||e.activeColor!==T.Black||e.turnNumber!==2||e.monsMovesCount>1||e.playerCanUseAction()&&e.playerCanMoveMana()?n:ke(n,{budget:{maxVisitedNodes:Math.min(n.budget.maxVisitedNodes,6e3)},search:{rootBranchLimit:Math.min(Math.max(n.search.rootBranchLimit,1),12)},replyRisk:{replyLimit:Math.min(Math.max(n.replyRisk.replyLimit,1),12),nodeShareBp:Math.min(n.replyRisk.nodeShareBp,1200)}})}p(hy,"applyProductionLowBudgetSearchClamp");function St(e,n){let o=qn(n);return!Er(o.mode)||!n.planner.lowBudgetGuard||!zn(e)?o:cu(o)}p(St,"turnEngineConfigForGame");var Mu=4096,Uk=Symbol("reply-risk-session-caches"),Lp=class Lp{constructor(){he(this,"snapshots",new Te(Mu));he(this,"spiritFollowupFloors",new Te(Mu));he(this,"selectedOverrideUtilities",new Te(Mu));he(this,"capacity",Mu*3)}get size(){return this.snapshots.size+this.spiritFollowupFloors.size+this.selectedOverrideUtilities.size}clear(){this.snapshots.clear(),this.spiritFollowupFloors.clear(),this.selectedOverrideUtilities.clear()}};p(Lp,"ReplyRiskSessionCaches");var Fp=Lp;function Or(e){return e.caches.session.getOrCreate(Uk,()=>new Fp)}p(Or,"replyRiskCaches");function Bp(e,n){return e.get(n.hash,n.tag,n.secondary,n.qualifier)}p(Bp,"cacheGet");function _p(e,n,o){e.set(n.hash,o,n.tag,n.secondary,n.qualifier)}p(_p,"cacheSet");function ps(e,n,o,t){let r=t.evaluation.weights;if(!Number.isInteger(o)||o<0||o>65535)return;let a=o+Vn(n)*65536;return{hash:ie(e),tag:a,qualifier:`string:${va(r)}`}}p(ps,"replyRiskCacheKey");function Gp(e,n,o){if([[e.ownSeedCap,15],[e.ownBeam,7],[e.perNodeFamilyCap,7],[e.stepCap,7],[e.opponentSeedCap,7],[e.opponentBeam,3],[e.replySeedCap,3],[e.replyBeam,3],[e.expansionCap,255]].some(([i,s])=>!Number.isInteger(i)||i<0||i>s))return;let r=e.ownSeedCap|e.ownBeam<<4|e.perNodeFamilyCap<<7|e.stepCap<<10|e.opponentSeedCap<<13|e.opponentBeam<<16|e.replySeedCap<<18|e.replyBeam<<20,a=e.expansionCap|Number(e.enableSpiritFamily)<<8|Number(n)<<9|+(e.mode===Ve.Production)<<10|Number(o)<<11|Number(e.enableLazyOracleScoreWindowProjection)<<12;return Ge(a,r)}p(Gp,"selectedOverrideConfigKey");function ku(e){Or(e).clear()}p(ku,"clearReplyRiskCache");function by(e,n){return Bp(Or(e).snapshots,n)}p(by,"cachedReplyRiskSnapshot");function Cy(e,n,o){_p(Or(e).snapshots,n,o)}p(Cy,"storeReplyRiskSnapshot");function My(e,n){return Bp(Or(e).spiritFollowupFloors,n)}p(My,"cachedSpiritFollowupFloor");function ky(e,n,o){_p(Or(e).spiritFollowupFloors,n,o)}p(ky,"storeSpiritFollowupFloor");function Ry(e,n){return Bp(Or(e).selectedOverrideUtilities,n)}p(Ry,"cachedSelectedOverrideUtility");function Py(e,n,o){_p(Or(e).selectedOverrideUtilities,n,o)}p(Py,"storeSelectedOverrideUtility");function O(e){return Z(e)?S.ImmediateScore:e.attacksOpponentDrainer?S.DrainerKill:e.classes.drainerSafetyRecover?S.DrainerSafetyRecovery:e.spiritSameTurnScoreSetupNow||e.spiritOwnManaSetupNow||e.spiritDevelopment?S.SpiritImpact:e.supermanaProgress?S.SafeSupermanaProgress:e.opponentManaProgress?S.SafeOpponentManaProgress:S.ManaTempo}p(O,"rootFamily");var Go=Object.freeze({scoutDepth:2,scoutMinNodes:96,focusCount:3,focusBudgetShareBp:7e3,focusScoreMargin:2e3,narrowSpreadFallback:700,volatilityMargin:600,volatilityKeep:2});function wy(e,n){let o=15;if(e>=o||n<=0)return 0;let t=Math.min(fe,Math.max(0,Math.trunc(e)));return(fe-t)*Math.trunc(n)}p(wy,"rootProgressStepSoftBonus");function jk(e){let n=0;return e.supermanaProgress&&!e.scoresSupermanaThisTurn&&!e.safeSupermanaPickupNow&&!e.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&(n=v(v(n,520),wy(e.safeSupermanaProgressSteps,48))),e.opponentManaProgress&&!e.scoresOpponentManaThisTurn&&!e.safeOpponentManaPickupNow&&!e.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&(n=v(v(n,480),wy(e.safeOpponentManaProgressSteps,40))),n}p(jk,"rootScoutProgressBonus");function vy(e){return v(v(Math.trunc(e.heuristic),Math.trunc(Math.trunc(e.efficiency)/2)),jk(e))}p(vy,"rootFocusScoutScore");function Kk(e){let n=0;return e.winsImmediately&&(n=n+5e3),(e.attacksOpponentDrainer||e.classes.drainerAttack)&&(n=n+2800),e.ownDrainerVulnerable&&(n=n+2200),e.classes.immediateScore&&(n=n+1700),e.classes.drainerSafetyRecover&&(n=n+1500),e.manaHandoffToOpponent&&(n=n+900),e.hasRoundtrip&&(n=n+700),e.classes.material&&(n=n+240),e.efficiency<0&&(n=n+Math.min(0-Math.trunc(e.efficiency),400)),n}p(Kk,"rootVolatilityScore");function $e(e,n){let o=15,t=e<o,r=n<o;return t?!r||e<n:!1}p($e,"rootProgressStepsBetter");function Ir(e,n){let o=33,t=e<o,r=n<o;return t?!r||e<n:!1}p(Ir,"rootScorePathStepsBetter");function Ty(e,n,o){return e.winsImmediately!==n.winsImmediately?e.winsImmediately:e.attacksOpponentDrainer!==n.attacksOpponentDrainer?e.attacksOpponentDrainer:e.ownDrainerVulnerable!==n.ownDrainerVulnerable?!e.ownDrainerVulnerable:e.classes.immediateScore!==n.classes.immediateScore?e.classes.immediateScore:e.scoresSupermanaThisTurn!==n.scoresSupermanaThisTurn?e.scoresSupermanaThisTurn:e.scoresOpponentManaThisTurn!==n.scoresOpponentManaThisTurn?e.scoresOpponentManaThisTurn:e.safeSupermanaPickupNow!==n.safeSupermanaPickupNow?e.safeSupermanaPickupNow:e.safeOpponentManaPickupNow!==n.safeOpponentManaPickupNow?e.safeOpponentManaPickupNow:e.sameTurnScoreWindowValue!==n.sameTurnScoreWindowValue?e.sameTurnScoreWindowValue>n.sameTurnScoreWindowValue:e.spiritSameTurnScoreSetupNow!==n.spiritSameTurnScoreSetupNow?e.spiritSameTurnScoreSetupNow:e.spiritOwnManaSetupNow!==n.spiritOwnManaSetupNow?e.spiritOwnManaSetupNow:e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.supermanaProgress&&n.supermanaProgress&&e.safeSupermanaProgressSteps!==n.safeSupermanaProgressSteps?$e(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps):e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.opponentManaProgress&&n.opponentManaProgress&&e.safeOpponentManaProgressSteps!==n.safeOpponentManaProgressSteps?$e(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps):o&&e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.scorePathBestSteps!==n.scorePathBestSteps?Ir(e.scorePathBestSteps,n.scorePathBestSteps):e.supermanaProgress!==n.supermanaProgress?e.supermanaProgress:e.supermanaProgress&&n.supermanaProgress&&e.safeSupermanaProgressSteps!==n.safeSupermanaProgressSteps?$e(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps):e.opponentManaProgress!==n.opponentManaProgress?e.opponentManaProgress:e.opponentManaProgress&&n.opponentManaProgress&&e.safeOpponentManaProgressSteps!==n.safeOpponentManaProgressSteps?$e(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps):e.manaHandoffToOpponent!==n.manaHandoffToOpponent?!e.manaHandoffToOpponent:e.hasRoundtrip!==n.hasRoundtrip?!e.hasRoundtrip:e.spiritDevelopment!==n.spiritDevelopment?e.spiritDevelopment:e.efficiency!==n.efficiency?e.efficiency>n.efficiency:e.heuristic!==n.heuristic?e.heuristic>n.heuristic:!1}p(Ty,"isBetterTacticalRootCandidate");function Ay(e,n,o){return Ty(e,n,o)?-1:Ty(n,e,o)?1:0}p(Ay,"compareTacticalRootCandidateOrder");function Up(e,n){return Ay(e,n,!0)}p(Up,"compareTacticalRootCandidates");function Ey(e,n){return Ay(e,n,!1)}p(Ey,"compareTacticalRootCandidatesIgnoringScorePath");function Hp(e,n){return e===n?0:e>n?-1:1}p(Hp,"compareScoresDescending");function xr(e,n){let o=e[n];if(o===void 0)throw new RangeError(`root focus index ${n} is out of bounds`);return o}p(xr,"valueAt");function Pu(e,n,o){return Hp(n[1],o[1])||Up(xr(e,n[0]),xr(e,o[0]))||n[0]-o[0]}p(Pu,"compareRankedRootIndices");function Oy(e,n,o){let t=[];if(o!==void 0&&t.push(o),n!==void 0)for(let i of n)t.some(s=>ue(s,i))||t.push(i);let r=[...e],a=0;for(let i of t){let s=r.findIndex(c=>ue(c.inputs,i));if(s<0)continue;if(s===a){a+=1;continue}let[u]=r.splice(s,1);u!==void 0&&(r.splice(a,0,u),a+=1)}return r}p(Oy,"prioritizeRootInputs");function qk(e,n){return Number.isFinite(e)?Math.max(0,Math.trunc(e)):n}p(qk,"nonnegativeInteger");function Vp(e,n,o){if(n>o)throw new RangeError("root scout budget has invalid clamp bounds");return Math.min(o,Math.max(n,Math.trunc(e)))}p(Vp,"clampInteger");function gy(e){return e.planner.mode===Le.Production&&e.planner.enabled}p(gy,"isProductionMode");function Ru(e,n,o){return{candidates:Oy(e,n,o),scoutVisitedNodes:0}}p(Ru,"prioritizedRootResult");function zk(e,n){let o=e.search.volatilityFocus||e.budget.depth<=3?1:Vp(e.budget.depth,1,Go.scoutDepth),t=Vp(1e4-Go.focusBudgetShareBp,500,4e3),r=n;if(o>1){let a=Math.max(0,e.budget.maxVisitedNodes-1);if(a<Go.scoutMinNodes)return;r=Vp(Math.trunc(e.budget.maxVisitedNodes*t/1e4),Go.scoutMinNodes,a)}if(!(r<n))return ke(e,{budget:{depth:o,maxVisitedNodes:r},search:{selectiveExtensions:!1,quietReductions:!1}})}p(zk,"createRootScoutConfig");function $k(e,n,o){let t=0,r=-2147483648,a=Array.from({length:n.length},()=>{});for(let[i,s]of n.entries()){if(e.checkpoint?.()===!0)return{status:"cancelled",visitedNodes:t};if(o.budget.depth>1&&t>=o.budget.maxVisitedNodes)break;let u;if(o.budget.depth>1){t+=1;let c=e.evaluateDeeperScout({candidate:s,candidateIndex:i,perspective:e.perspective,depth:o.budget.depth-1,alpha:r,visitedNodes:t,config:o,useTranspositionTable:e.useTranspositionTable});u=Math.trunc(c.score),t=Math.min(o.budget.maxVisitedNodes,Math.max(t,qk(c.visitedNodes,t)))}else u=vy(s);if(e.cancelled?.()===!0)return{status:"cancelled",visitedNodes:t};a[i]=u,r=Math.max(r,u)}return{status:"finished",scores:a,visitedNodes:t}}p($k,"runRootScout");function jp(e,n){return n??vy(e)}p(jp,"effectiveScoutScore");function Xk(e,n){let o=e.map((t,r)=>[r,jp(t,n[r])]);return o.sort((t,r)=>Pu(e,t,r)),o}p(Xk,"rankedRootIndices");function Yk(e,n){if(e.length<n)return!1;let o=e[0]?.[1]??-2147483648,t=e[n-1]?.[1]??-2147483648;return _(o,t)<=Go.narrowSpreadFallback}p(Yk,"hasNarrowScoutSpread");function Qk(e,n,o,t,r,a){let{config:i,forcedInputs:s,perspective:u,priorityInputs:c}=e,l=Array.from({length:n.length}).fill(!1);for(let[m]of o.slice(0,a))l[m]=!0;if(gy(i)&&a<=3&&!o.slice(0,a).some(([d])=>{let y=xr(n,d);return y.spiritDevelopment&&!y.spiritSameTurnScoreSetupNow&&!y.spiritOwnManaSetupNow})){let d=o.slice(0,a+3).map(([y])=>y).filter(y=>{let f=xr(n,y);return f.spiritDevelopment&&!f.spiritSameTurnScoreSetupNow&&!f.spiritOwnManaSetupNow&&!f.ownDrainerVulnerable&&!f.manaHandoffToOpponent&&!f.hasRoundtrip&&f.game.activeColor===u&&e.qualifiesPlainSpiritPlan?.(f)===!0});if(d.length>=2)for(let y of d)l[y]=!0}for(let[m,d]of o)d+Go.focusScoreMargin<r||(l[m]=!0);for(let[m,d]of n.entries())d.attacksOpponentDrainer&&(l[m]=!0),(d.scoresSupermanaThisTurn||d.scoresOpponentManaThisTurn||d.safeSupermanaPickupNow||d.safeOpponentManaPickupNow||d.spiritSameTurnScoreSetupNow||d.sameTurnScoreWindowValue>0||d.spiritOwnManaSetupNow)&&(l[m]=!0),gy(i)&&d.ownDrainerVulnerable&&!d.ownDrainerWalkVulnerable&&!d.manaHandoffToOpponent&&!d.hasRoundtrip&&d.game.activeColor===u&&e.qualifiesDrainerSafetyRecoveryPlan?.(d)===!0&&(l[m]=!0);if(c!==void 0)for(let m of c){let d=n.findIndex(y=>ue(y.inputs,m));d>=0&&(l[d]=!0)}if(s!==void 0){let m=n.findIndex(d=>ue(d.inputs,s));m>=0&&(l[m]=!0)}if(i.search.volatilityFocus){let m=n.map((y,f)=>{let h=t[f];return{index:f,volatility:Kk(y),scoutScore:jp(y,h)}}).filter(({volatility:y})=>y>0).sort((y,f)=>Hp(y.volatility,f.volatility)||Hp(y.scoutScore,f.scoutScore)||y.index-f.index);for(let{index:y}of m.slice(0,Math.max(Go.volatilityKeep,1)))l[y]=!0;let d=m[0]?.volatility;if(d!==void 0)for(let{index:y,volatility:f,scoutScore:h}of m){if(f+Go.volatilityMargin<d)break;h+Go.focusScoreMargin<r||(l[y]=!0)}}return l}p(Qk,"selectFocusedRootIndices");function xy(e){let{config:n,priorityInputs:o,forcedInputs:t}=e,r=[...e.rootMoves];if(e.checkpoint?.()===!0)return{candidates:[],scoutVisitedNodes:0};if(!n.search.twoPassRootAllocation||r.length<=Go.focusCount||n.budget.depth<=1)return Ru(r,o,t);let a=zk(n,r.length);if(a===void 0)return Ru(r,o,t);let i=$k(e,r,a);if(i.status==="cancelled")return{candidates:[],scoutVisitedNodes:i.visitedNodes};let s=Math.min(Go.focusCount,r.length),u=Xk(r,i.scores);if(Yk(u,s)){let d=u.map(([y])=>xr(r,y));return Ru(d,o,t)}let c=Qk(e,r,u,i.scores,u[0]?.[1]??-2147483648,s);if(!c.some(Boolean))return Ru(r,o,t);let l=c.flatMap((d,y)=>{if(!d)return[];let f=xr(r,y);return[[y,jp(f,i.scores[y])]]});l.sort((d,y)=>Pu(r,d,y));let m=l.map(([d])=>xr(r,d));return{candidates:Oy(m,o,t),scoutVisitedNodes:Math.min(i.visitedNodes,n.budget.maxVisitedNodes)}}p(xy,"focusedRootCandidates");var Iy=700,Zk=180,Ny=80,Jk=40;var _n=Object.freeze({SafeProgress:"safe-progress",FollowupProgress:"followup-progress",RiskyScore:"risky-score",NegativeDeny:"negative-deny",Score:"score",Projection:"projection",RiskyRecovery:"risky-recovery"}),eR=Object.freeze([_n.SafeProgress,_n.FollowupProgress,_n.RiskyScore,_n.NegativeDeny,_n.Score,_n.Projection,_n.RiskyRecovery]),et=Object.freeze({SpiritSetup:"spirit-setup",ProjectionChallenge:"projection-challenge",Projection:"projection",FollowupFloor:"followup-floor"});function oe(e,n){let o=e[n];if(o===void 0)throw new RangeError(`root selector index ${n} is out of bounds`);return o}p(oe,"valueAt");function wu(e,n,o){if(!Number.isInteger(n)||n<0||n>=e.length)throw new RangeError(`${o} selected an invalid root`)}p(wu,"assertRootIndex");function ht(e,n){let o=n;for(let t of e)o=Math.max(o,t);return o}p(ht,"maxValue");function nR(e){let n;for(let o of e)n=n===void 0?o:Math.min(n,o);return n}p(nR,"minValue");function zp(e,n){return n===T.White?e.whitePotionsCount:e.blackPotionsCount}p(zp,"potionsForColor");function oR(e,n){return e.activeColor===n&&!e.isFirstTurn()&&!e.playerCanMoveMon()&&e.actionsUsedCount>=Hn&&e.playerCanMoveMana()&&zp(e,n)>0}p(oR,"shouldPreferPotionTakebackLines");function Dy(e,n,o){return zp(n.game,o)<zp(e,o)}p(Dy,"rootSpendsPotion");function tR(e,n,o){return n.winsImmediately||n.attacksOpponentDrainer||Be(n.game,o)>=v(Be(e,o),2)||n.scoresSupermanaThisTurn||n.scoresOpponentManaThisTurn||!n.ownDrainerVulnerable&&(n.supermanaProgress||n.opponentManaProgress)}p(tR,"rootPotionSpendCompensated");function Wy(e,n,o,t,r){let a=Math.max(t.replyRisk.antiHelpReplyLimit,1);return r.rootReplyRiskSnapshot?.(e.game,o,t,a,n).allowsImmediateOpponentWin??!1}p(Wy,"immediateOpponentWin");function vo(e){return e.planner.mode===Le.Production}p(vo,"isProductionMode");function Ga(e,n,o,t,r){return{game:e,roots:n,candidateIndices:o,perspective:t,config:r}}p(Ga,"selectionContext");function rR(e,n,o){let t=!1;for(let r of e?.competitionRules??[])r.kind===n&&r.evaluate(o).kind==="select"&&(t=!0);return t}p(rR,"evaluateProductionCompetitionRules");function Kp(e,n,o,t,r,a,i){let s=!1,u=Ga(e,n,o,t,r);for(let c of eR)vo(r)&&rR(a.productionPolicy,c,u)&&(c!=="negative-deny"||i?.()!==!0)&&(s=!0);return s}p(Kp,"anyProductionCompetition");function aR(e,n,o){let t=e.candidateIndices.filter(r=>!oe(e.roots,r).spiritDevelopment);return n.some(r=>t.every(a=>{let i=ls(et.SpiritSetup,{...e,candidateIndex:r,incumbentIndex:a},o);return i!==void 0&&i>0}))}p(aR,"spiritSetupOverridesNegativeDeny");function qp(e,n,o,t){let r=nR(n.map(a=>o(oe(e,a))).filter(a=>a<t));return r===void 0?[...n]:n.filter(a=>o(oe(e,a))===r)}p(qp,"retainBestKnownSteps");function ds(e,n,o,t,r={}){if(n.length===0)return[];let a=n.map((s,u)=>u),i=!1;if(a.some(s=>oe(n,s).winsImmediately))return a.filter(s=>oe(n,s).winsImmediately);if(a.some(s=>oe(n,s).attacksOpponentDrainer)&&(a=a.filter(s=>oe(n,s).attacksOpponentDrainer),i=!0),!i&&!a.some(s=>oe(n,s).classes.immediateScore)){let s=ht(a.flatMap(u=>{let c=oe(n,u);return!c.ownDrainerVulnerable&&!c.manaHandoffToOpponent?[c.sameTurnScoreWindowValue]:[]}),0);if(s>0){let u=a.filter(c=>{let l=oe(n,c);return l.sameTurnScoreWindowValue===s&&!l.ownDrainerVulnerable&&!l.manaHandoffToOpponent});u.length>0&&(a=u)}}if(!i&&a.some(s=>oe(n,s).safeSupermanaPickupNow)?a=a.filter(s=>{let u=oe(n,s);return u.scoresSupermanaThisTurn||u.safeSupermanaPickupNow}):!i&&a.some(s=>oe(n,s).safeOpponentManaPickupNow)&&(a=a.filter(s=>{let u=oe(n,s);return u.scoresOpponentManaThisTurn||u.safeOpponentManaPickupNow})),!i&&!a.some(s=>oe(n,s).classes.immediateScore)){let s=ht(a.flatMap(c=>{let l=oe(n,c);return l.spiritSameTurnScoreSetupNow&&!l.ownDrainerVulnerable&&!l.manaHandoffToOpponent?[l.sameTurnScoreWindowValue]:[]}),0),u=ht(a.flatMap(c=>{let l=oe(n,c);return!l.spiritSameTurnScoreSetupNow&&!l.ownDrainerVulnerable&&!l.manaHandoffToOpponent?[l.sameTurnScoreWindowValue]:[]}),0);s>u&&(a=a.filter(c=>{let l=oe(n,c);return l.spiritSameTurnScoreSetupNow&&l.sameTurnScoreWindowValue===s&&!l.ownDrainerVulnerable&&!l.manaHandoffToOpponent}))}if(!i&&!a.some(s=>oe(n,s).classes.immediateScore)&&a.some(s=>{let u=oe(n,s);return u.sameTurnScoreWindowValue>0&&!u.ownDrainerVulnerable&&!u.manaHandoffToOpponent})){let s=ht(a.map(u=>oe(n,u).sameTurnScoreWindowValue),0);if(s>0){let u=a.filter(c=>{let l=oe(n,c);return l.sameTurnScoreWindowValue===s&&!l.ownDrainerVulnerable&&!l.manaHandoffToOpponent});u.length>0&&(a=u)}}if(!i){let s=a.filter(u=>{let c=oe(n,u);return c.spiritOwnManaSetupNow&&!c.ownDrainerVulnerable&&!c.manaHandoffToOpponent});if(s.length>0&&!Kp(e,n,a,o,t,r,()=>aR(Ga(e,n,a,o,t),s,r.productionPolicy))){let u=s.filter(c=>oe(n,c).supermanaProgress);if(u.length>0)a=qp(n,u,c=>c.safeSupermanaProgressSteps,15);else{let c=s.filter(l=>oe(n,l).opponentManaProgress);a=c.length>0?qp(n,c,l=>l.safeOpponentManaProgressSteps,15):qp(n,s,l=>l.scorePathBestSteps,33)}}}if(t.policy.hardSpiritDeployment&&!i&&Aa(e,o)&&!a.some(u=>{let c=oe(n,u);return c.scoresSupermanaThisTurn||c.scoresOpponentManaThisTurn||c.safeSupermanaPickupNow||c.safeOpponentManaPickupNow})&&!Kp(e,n,a,o,t,r)){let u=a.filter(c=>{let l=oe(n,c);return l.spiritOwnManaSetupNow&&!l.ownDrainerVulnerable&&!l.manaHandoffToOpponent});if(u.length>0)a=u;else{let c=Be(e,o),l=a.filter(m=>!oe(n,m).keepsAwakeSpiritOnBase);if(l.length>0){let m=l.filter(h=>{let C=oe(n,h);return!C.ownDrainerVulnerable&&!C.manaHandoffToOpponent}),d=m.length>0?m:l,y=a.some(h=>{let C=oe(n,h);return C.keepsAwakeSpiritOnBase&&Be(C.game,o)>c}),f=d.some(h=>Be(oe(n,h).game,o)>c);(!y||f)&&(a=d)}}}if(!i){let s=[...a],u=ht(a.map(m=>oe(n,m).score),-2147483648),c=Math.max(t.policy.drainerSafetyScoreMargin,0),l=a.filter(m=>{let d=oe(n,m);return!d.ownDrainerVulnerable&&d.score+c>=u});if(l.length>0&&(a=l,vo(t))){let m=Ga(e,n,s,o,t);for(let d of r.productionPolicy?.safetyReentryRules??[]){let y=d.select({...m,selectedIndices:a});if(y.kind!=="continue")for(let f of y.indices){if(wu(n,f,`Production rule ${d.id}`),!s.includes(f))throw new RangeError(`Production rule ${d.id} selected a root outside the prefilter`);a.includes(f)||a.push(f)}}}}if(t.policy.preferSpiritDevelopment&&Aa(e,o)&&a.some(s=>oe(n,s).spiritDevelopment)&&!a.some(u=>{let c=oe(n,u);return c.scoresSupermanaThisTurn||c.scoresOpponentManaThisTurn||c.safeSupermanaPickupNow||c.safeOpponentManaPickupNow})&&!Kp(e,n,a,o,t,r)){let u=ht(a.map(l=>oe(n,l).score),-2147483648),c=a.filter(l=>{let m=oe(n,l);return m.spiritOwnManaSetupNow&&m.score+Iy>=u});if(c.length>0)a=c;else{let l=a.filter(m=>{let d=oe(n,m);return d.spiritDevelopment&&d.score+Iy>=u});l.length>0&&(a=l)}}if(!i&&a.length>1&&oR(e,o)){let s=ht(a.map(c=>oe(n,c).score),-2147483648),u=a.filter(c=>oe(n,c).score+Zk>=s);if(u.length>1){let c=new Map,l=p(d=>{let y=c.get(d);if(y!==void 0)return y;let f=Wy(oe(n,d),d,o,t,r);return c.set(d,f),f},"allowsLoss");if(u.some(d=>{let y=oe(n,d);return!Dy(e,y,o)&&!l(d)})){let d=new Set(u),y=a.filter(f=>{let h=oe(n,f);return h.winsImmediately||!d.has(f)||!Dy(e,h,o)||tR(e,h,o)});y.length>0&&(a=y)}}}if(a.length>1){let s=ht(a.map(l=>oe(n,l).score),-2147483648),u=Math.max(t.replyRisk.antiHelpScoreMargin,0),c=a.filter(l=>oe(n,l).score+u>=s);if(c.length>1){let l=new Map,m=p(y=>{let f=l.get(y);if(f!==void 0)return f;let h=Wy(oe(n,y),y,o,t,r);return l.set(y,h),h},"allowsLoss");if(c.some(y=>{let f=oe(n,y);return!f.manaHandoffToOpponent&&!f.hasRoundtrip&&!m(y)})){let y=new Set(c),f=a.filter(h=>{let C=oe(n,h);return C.winsImmediately||!y.has(h)||!C.manaHandoffToOpponent&&!C.hasRoundtrip});f.length>0&&(a=f)}}}if(vo(t)){let s=Ga(e,n,[...a],o,t),u=!1;for(let c of r.productionPolicy?.finalReentryRules??[]){let l=c.select({...s,selectedIndices:a});if(l.kind!=="continue")for(let m of l.indices)wu(n,m,`Production rule ${c.id}`),a.includes(m)||(a.push(m),u=!0)}u&&a.sort((c,l)=>ne(n,c,l))}return a}p(ds,"filteredRootCandidateIndices");function La(e,n){let o=p((r,a,i)=>{if(r!==a)return r===i?-1:1},"preferBoolean"),t=o(e.winsImmediately,n.winsImmediately,!0);return t??(t=o(e.attacksOpponentDrainer,n.attacksOpponentDrainer,!0)),t??(t=o(e.ownDrainerVulnerable,n.ownDrainerVulnerable,!1)),t??(t=o(e.classes.immediateScore,n.classes.immediateScore,!0)),t??(t=o(e.scoresSupermanaThisTurn,n.scoresSupermanaThisTurn,!0)),t??(t=o(e.scoresOpponentManaThisTurn,n.scoresOpponentManaThisTurn,!0)),t??(t=o(e.safeSupermanaPickupNow,n.safeSupermanaPickupNow,!0)),t??(t=o(e.safeOpponentManaPickupNow,n.safeOpponentManaPickupNow,!0)),t!==void 0?t:e.sameTurnScoreWindowValue!==n.sameTurnScoreWindowValue?e.sameTurnScoreWindowValue>n.sameTurnScoreWindowValue?-1:1:(t=o(e.spiritSameTurnScoreSetupNow,n.spiritSameTurnScoreSetupNow,!0),t??(t=o(e.spiritOwnManaSetupNow,n.spiritOwnManaSetupNow,!0)),t!==void 0?t:e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.supermanaProgress&&n.supermanaProgress&&e.safeSupermanaProgressSteps!==n.safeSupermanaProgressSteps?$e(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps)?-1:1:e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.opponentManaProgress&&n.opponentManaProgress&&e.safeOpponentManaProgressSteps!==n.safeOpponentManaProgressSteps?$e(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps)?-1:1:e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.scorePathBestSteps!==n.scorePathBestSteps?Ir(e.scorePathBestSteps,n.scorePathBestSteps)?-1:1:(t=o(e.supermanaProgress,n.supermanaProgress,!0),t!==void 0?t:e.supermanaProgress&&n.supermanaProgress&&e.safeSupermanaProgressSteps!==n.safeSupermanaProgressSteps?$e(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps)?-1:1:(t=o(e.opponentManaProgress,n.opponentManaProgress,!0),t!==void 0?t:e.opponentManaProgress&&n.opponentManaProgress&&e.safeOpponentManaProgressSteps!==n.safeOpponentManaProgressSteps?$e(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps)?-1:1:(t=o(e.manaHandoffToOpponent,n.manaHandoffToOpponent,!1),t??(t=o(e.hasRoundtrip,n.hasRoundtrip,!1)),t??(t=o(e.spiritDevelopment,n.spiritDevelopment,!0)),t!==void 0?t:e.policyPriority!==n.policyPriority?e.policyPriority>n.policyPriority?-1:1:e.efficiency!==n.efficiency?e.efficiency>n.efficiency?-1:1:0))))}p(La,"compareTacticalEvaluatedRoots");function ne(e,n,o){let t=oe(e,n),r=oe(e,o);return t.score!==r.score?t.score>r.score?-1:1:La(t,r)||n-o}p(ne,"compareRankedEvaluatedRootIndices");function iR(e,n){let o=n[0]??0;for(let t of n)ne(e,t,o)<0&&(o=t);return o}p(iR,"bestScoredRootIndex");function Va(e,n){let o=F(e),t=F(n);if(o===t)return;let r=o?n:e,a=o?e:n,i=!o;if(!(x(r)||r.hasRoundtrip||r.score<v(a.score,Jk)||r.sameTurnScoreWindowValue<a.sameTurnScoreWindowValue))return i?1:-1}p(Va,"spiritScoreChallengeOrder");function ls(e,n,o){for(let t of o?.comparisonRules??[]){if(t.phase!==e)continue;let r=t.compare(n);if(r.kind==="compare")return r.order===0?0:r.order>0?1:-1}}p(ls,"compareProductionRules");function Ha(e,n,o,t,r,a={}){if(a.checkpoint?.()===!0||n.length===0||o.length===0)return;let i=Ga(e,n,o,t,r);if(r.replyRisk.enabled){let f=a.pickReplyRiskGuardedIndex?.(i);if(f!==void 0){if(wu(n,f,"reply-risk guard"),!o.includes(f))throw new RangeError("reply-risk guard selected a root outside its shortlist");return a.cancelled?.()===!0?void 0:f}if(a.cancelled?.()===!0)return}let s=ht(o.map(f=>oe(n,f).score),-2147483648),u=Math.max(r.policy.efficiencyScoreMargin,0),c=iR(n,o),l=-2147483648,m=-2147483648,d=r.policy.preferSpiritDevelopment&&Aa(e,t),y=vo(r)&&o.filter(f=>F(oe(n,f))).length>=2;for(let f of o){if(a.checkpoint?.()===!0)return;let h=oe(n,f),C=oe(n,c),b=vo(r)&&e.turnNumber<=3&&F(h)&&F(C)&&_(s,h.score)<=16,k=vo(r)?ls(et.SpiritSetup,{...i,candidateIndex:f,incumbentIndex:c},a.productionPolicy):void 0,M=!vo(r)||k===void 0||k>=0;if(h.score+u<s&&!b)continue;let R=d&&h.spiritDevelopment!==C.spiritDevelopment?Va(h,C):void 0;R===void 0&&vo(r)&&d&&h.spiritDevelopment!==C.spiritDevelopment&&Math.abs(h.score-C.score)<=320&&(R=ls(et.ProjectionChallenge,{...i,candidateIndex:f,incumbentIndex:c},a.productionPolicy));let P=R===void 0&&d&&h.spiritDevelopment&&!C.spiritDevelopment&&M,g=!d||h.spiritDevelopment===C.spiritDevelopment||R!==void 0||vo(r)&&M&&(h.spiritOwnManaSetupNow||h.spiritSameTurnScoreSetupNow),W=h.spiritSameTurnScoreSetupNow&&!C.spiritSameTurnScoreSetupNow&&M,E=h.spiritSameTurnScoreSetupNow===C.spiritSameTurnScoreSetupNow,D=h.spiritOwnManaSetupNow&&!C.spiritOwnManaSetupNow&&M,N=h.spiritOwnManaSetupNow===C.spiritOwnManaSetupNow,B=d&&h.spiritDevelopment&&C.spiritDevelopment&&h.spiritSetupGain>C.spiritSetupGain,G=!d||!h.spiritDevelopment||!C.spiritDevelopment||h.spiritSetupGain===C.spiritSetupGain,L=y&&F(h)&&F(C),$=vo(r)&&(d||L)&&h.spiritDevelopment&&C.spiritDevelopment?ls(et.Projection,{...i,candidateIndex:f,incumbentIndex:c},a.productionPolicy):void 0,V=vo(r)?ls(et.FollowupFloor,{...i,candidateIndex:f,incumbentIndex:c},a.productionPolicy):void 0,se=h.spiritOwnManaSetupNow&&C.spiritOwnManaSetupNow&&h.supermanaProgress&&C.supermanaProgress&&$e(h.safeSupermanaProgressSteps,C.safeSupermanaProgressSteps),Pe=!h.spiritOwnManaSetupNow||!C.spiritOwnManaSetupNow||!h.supermanaProgress||!C.supermanaProgress||h.safeSupermanaProgressSteps===C.safeSupermanaProgressSteps,Ze=h.spiritOwnManaSetupNow&&C.spiritOwnManaSetupNow&&h.opponentManaProgress&&C.opponentManaProgress&&$e(h.safeOpponentManaProgressSteps,C.safeOpponentManaProgressSteps),Je=!h.spiritOwnManaSetupNow||!C.spiritOwnManaSetupNow||!h.opponentManaProgress||!C.opponentManaProgress||h.safeOpponentManaProgressSteps===C.safeOpponentManaProgressSteps,en=h.spiritOwnManaSetupNow&&C.spiritOwnManaSetupNow&&Ir(h.scorePathBestSteps,C.scorePathBestSteps),De=!h.spiritOwnManaSetupNow||!C.spiritOwnManaSetupNow||h.scorePathBestSteps===C.scorePathBestSteps,kn=$e(h.safeSupermanaProgressSteps,C.safeSupermanaProgressSteps),Ie=h.safeSupermanaProgressSteps===C.safeSupermanaProgressSteps,yo=$e(h.safeOpponentManaProgressSteps,C.safeOpponentManaProgressSteps),Eo=h.safeOpponentManaProgressSteps===C.safeOpponentManaProgressSteps,We=h.sameTurnScoreWindowValue>C.sameTurnScoreWindowValue,Qt=h.sameTurnScoreWindowValue===C.sameTurnScoreWindowValue,ec=!h.manaHandoffToOpponent&&C.manaHandoffToOpponent,nc=h.manaHandoffToOpponent===C.manaHandoffToOpponent,bb=!h.hasRoundtrip&&C.hasRoundtrip,Cb=h.hasRoundtrip===C.hasRoundtrip,Mb=h.policyPriority>v(C.policyPriority,Ny),kb=v(h.policyPriority,Ny)>=C.policyPriority,Rb=h.efficiency>l||h.efficiency===l&&h.score>m,Ae;(R??0)>0?Ae=!0:(R??0)<0?Ae=!1:Mb?Ae=!0:kb?We?Ae=!0:Qt?W?Ae=!0:E?D?Ae=!0:N?B?Ae=!0:G?(V??0)>0?Ae=!0:(V??0)<0?Ae=!1:($??0)>0?Ae=!0:($??0)<0?Ae=!1:se?Ae=!0:Pe?Ze?Ae=!0:Je?en?Ae=!0:De?kn?Ae=!0:Ie?yo?Ae=!0:Eo?ec?Ae=!0:nc?bb?Ae=!0:Cb?Ae=Rb:Ae=!1:Ae=!1:Ae=!1:Ae=!1:Ae=!1:Ae=!1:Ae=!1:Ae=!1:Ae=!1:Ae=!1:Ae=!1:Ae=!1,(P||g&&Ae)&&(c=f,l=h.efficiency,m=h.score)}return c}p(Ha,"pickBaselineRootIndexFromCandidateIndices");function sR(e,n,o,t,r={}){if(r.checkpoint?.()===!0||n.length===0)return;if(vo(t)){let i=n.map((u,c)=>c),s=r.productionPolicy?.rootPicker;if(s!==void 0){let u=s.select(Ga(e,n,i,o,t));if(u.kind==="select")return wu(n,u.index,`Production rule ${s.id}`),r.cancelled?.()===!0?void 0:u.index}}let a=ds(e,n,o,t,r);return a.length===0&&(a=n.map((i,s)=>s)),Ha(e,n,a,o,t,r)}p(sR,"pickBaselineRootIndex");function Fy(e,n,o,t,r={}){let a=sR(e,n,o,t,r);return a===void 0?[]:[...oe(n,a).inputs]}p(Fy,"pickBaselineRootInputs");var yn=268435455,By=700;function _y(e,n){let o=qn(n);o.mode===Ve.Production&&n.planner.lowBudgetGuard&&zn(e)&&(o=cu(o));let t=o.mode===Ve.Production;return{...o,ownSeedCap:Math.min(o.ownSeedCap,t?8:6),ownBeam:Math.min(o.ownBeam,t?3:2),perNodeFamilyCap:Math.min(o.perNodeFamilyCap,t?3:2),stepCap:Math.min(o.stepCap,4),opponentSeedCap:Math.min(o.opponentSeedCap,t?2:1),opponentBeam:1,replySeedCap:1,replyBeam:1,expansionCap:Math.min(o.expansionCap,t?64:48)}}p(_y,"projectionTurnEngineConfig");function Nr(e,n,o){let t=e[n],r=e[o];return t===void 0||r===void 0?n-o:r.score-t.score||La(t,r)||n-o}p(Nr,"compareRankedReplyRiskEvaluations");function cn(e,n){return $e(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps)||$e(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps)||e.spiritSetupGain>n.spiritSetupGain}p(cn,"rootProgressOrSetupBetter");function Xp(e){return e.classes.immediateScore||e.classes.drainerAttack||e.classes.drainerSafetyRecover}p(Xp,"isTacticalPriorityRoot");function po(e,n,o){let t=e[n],r=e[o];if(t===void 0||r===void 0)return o-n;if(t.score!==r.score)return t.score>r.score?1:-1;let a=La(t,r);return a!==0?a<0?1:-1:n===o?0:n<o?1:-1}p(po,"rankedRootOrder");function $n(e,n){return e.safeSupermanaProgressSteps===n.safeSupermanaProgressSteps&&e.safeOpponentManaProgressSteps===n.safeOpponentManaProgressSteps&&(e.safeSupermanaProgressSteps<15||e.safeOpponentManaProgressSteps<15)&&e.safeSupermanaPickupNow===n.safeSupermanaPickupNow&&e.safeOpponentManaPickupNow===n.safeOpponentManaPickupNow&&e.supermanaProgress===n.supermanaProgress&&e.opponentManaProgress===n.opponentManaProgress&&!e.classes.immediateScore&&!e.classes.drainerAttack&&!e.classes.drainerSafetyRecover&&!n.classes.immediateScore&&!n.classes.drainerAttack&&!n.classes.drainerSafetyRecover&&!e.spiritDevelopment&&!n.spiritDevelopment&&!e.spiritSameTurnScoreSetupNow&&!n.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&!n.spiritOwnManaSetupNow&&e.sameTurnScoreWindowValue===0&&n.sameTurnScoreWindowValue===0&&!e.manaHandoffToOpponent&&!n.manaHandoffToOpponent&&!e.hasRoundtrip&&!n.hasRoundtrip}p($n,"sameNonTacticalProgressLane");function Dr(e,n,o,t){if(o.length===0||e.session.checkpoint())return[];let r=-2147483648,a=2147483647,i=!1;for(let d of o){let y=n[d];y!==void 0&&(r=Math.max(r,y.score),a=Math.min(a,y.score),i||(i=y.winsImmediately))}if(i&&_(r,a)>By)return[];let s=Math.max(0,t.replyRisk.scoreMargin),u=o.filter(d=>{let y=n[d];return y!==void 0&&v(y.score,s)>=r});if(u.sort((d,y)=>Nr(n,d,y)),u.length===0)return u;let c=Math.max(1,t.replyRisk.shortlistLimit);if(u.length>c)if(I(t)){let d=u.slice(0,c),y=d.some(b=>{let k=n[b];return k!==void 0&&(k.spiritDevelopment||k.spiritSameTurnScoreSetupNow||k.spiritOwnManaSetupNow)}),f=n[u[0]??-1]?.score??r,h=[];if(!y){let b=u.slice(c).find(k=>{let M=n[k];return M!==void 0&&_(f,M.score)<=64&&(M.spiritDevelopment||M.spiritSameTurnScoreSetupNow||M.spiritOwnManaSetupNow)});b!==void 0&&h.push(b)}if([...d,...h].some(b=>{let k=n[b];return k!==void 0&&F(k)})){let b=0;for(let k of u.slice(c)){let M=n[k];if(M!==void 0&&F(M)&&_(f,M.score)<=64&&!h.includes(k)&&(h.push(k),b+=1,b>=2))break}}u=[...d,...h]}else u=u.slice(0,c);let l=u[0],m=l===void 0?void 0:n[l];if(I(t)&&m!==void 0&&x(m)&&z(m)){let d=o.filter(y=>!u.includes(y)).filter(y=>{let f=n[y];return f!==void 0&&!x(f)&&$n(f,m)&&_(m.score,f.score)<=320}).sort((y,f)=>Nr(n,y,f))[0];d!==void 0&&u.push(d)}return u.sort((d,y)=>Nr(n,d,y)),u}p(Dr,"replyRiskGuardShortlistIndices");function Yp(e,n,o){return I(o)&&F(e)&&F(n)&&!x(e)&&!x(n)&&!e.manaHandoffToOpponent&&!n.manaHandoffToOpponent&&!e.hasRoundtrip&&!n.hasRoundtrip&&!e.winsImmediately&&!n.winsImmediately&&!e.attacksOpponentDrainer&&!n.attacksOpponentDrainer&&!e.scoresSupermanaThisTurn&&!n.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!n.scoresOpponentManaThisTurn&&!e.safeSupermanaPickupNow&&!n.safeSupermanaPickupNow&&!e.safeOpponentManaPickupNow&&!n.safeOpponentManaPickupNow&&!e.supermanaProgress&&!n.supermanaProgress&&!e.opponentManaProgress&&!n.opponentManaProgress&&e.sameTurnScoreWindowValue===0&&n.sameTurnScoreWindowValue===0}p(Yp,"isSafePlainSpiritPair");function ms(e,n,o){if(!I(o)||n.length<2)return!1;for(let t=0;t<n.length;t+=1){let r=e[n[t]??-1];if(r!==void 0)for(let a=t+1;a<n.length;a+=1){let i=e[n[a]??-1];if(i!==void 0&&Yp(r,i,o))return!0}}return!1}p(ms,"safePlainSpiritCompetition");function Gy(e,n,o,t,r){if(!I(r)||!$n(e,o)||n.allowsImmediateOpponentWin||t.allowsImmediateOpponentWin||n.opponentReachesMatchPoint||t.opponentReachesMatchPoint)return;let a=!x(e),i=!x(o);if(a===i)return;let s=v(n.worstReplyScore,240)>=t.worstReplyScore,u=v(t.worstReplyScore,240)>=n.worstReplyScore;if(a&&s)return 1;if(i&&u)return-1}p(Gy,"safeProgressSiblingOrder");function Ly(e,n,o,t,r,a,i){if(!I(i)||!$n(e,o))return;let s=x(e),u=x(o);if(s===u||r===void 0||a===void 0)return;let c=s?e:o,l=s?n:t,m=s?r:a,d=s?o:e,y=s?t:n,f=s?a:r;if(!(l.allowsImmediateOpponentWin||l.opponentReachesMatchPoint||y.allowsImmediateOpponentWin||y.opponentReachesMatchPoint||m.plan.goalFamily!==S.ImmediateScore||J(m.plan.utility,f.plan.utility)<0||v(l.worstReplyScore,160)<y.worstReplyScore||v(c.score,32)<d.score))return s?1:-1}p(Ly,"riskyRecoveryProgressSiblingOrder");function qt(e,n){return pe(e.inputs,n.inputs)}p(qt,"sameFirstInput");function Wr(e,n,o){return I(o)&&qt(e,n)&&e.efficiency===n.efficiency&&Math.abs(e.score-n.score)<=128&&!x(e)&&!x(n)&&!e.manaHandoffToOpponent&&!n.manaHandoffToOpponent&&!e.hasRoundtrip&&!n.hasRoundtrip&&!e.winsImmediately&&!n.winsImmediately&&!e.attacksOpponentDrainer&&!n.attacksOpponentDrainer&&!e.scoresSupermanaThisTurn&&!n.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!n.scoresOpponentManaThisTurn&&e.sameTurnScoreWindowValue===0&&n.sameTurnScoreWindowValue===0&&!e.supermanaProgress&&!n.supermanaProgress&&!e.opponentManaProgress&&!n.opponentManaProgress}p(Wr,"sameOpeningSafeSetupPair");function Vy(e,n,o,t,r){return I(r)&&e.spiritOwnManaSetupNow&&!o.spiritDevelopment&&!o.spiritSameTurnScoreSetupNow&&!o.spiritOwnManaSetupNow&&Wr(e,o,r)&&e.rootRank+3<=o.rootRank&&v(e.score,128)>=o.score&&v(n.worstReplyScore,160)>=t.worstReplyScore}p(Vy,"omittedSameOpeningSetupCompetes");function Hy(e,n,o,t,r){if(!I(r))return;let a=e.safeSupermanaPickupNow||e.safeOpponentManaPickupNow,i=o.safeSupermanaPickupNow||o.safeOpponentManaPickupNow;if(a===i)return;let s=a?e:o,u=a?n:t,c=a?o:e,l=a?t:n,m=c.supermanaProgress||c.opponentManaProgress||c.spiritOwnManaSetupNow||c.spiritSameTurnScoreSetupNow||c.spiritDevelopment;if(!(x(s)||u.allowsImmediateOpponentWin||u.opponentReachesMatchPoint||l.allowsImmediateOpponentWin||l.opponentReachesMatchPoint||s.manaHandoffToOpponent||s.hasRoundtrip||c.winsImmediately||c.attacksOpponentDrainer||!m||v(s.score,144)<c.score||v(u.worstReplyScore,192)<l.worstReplyScore))return a?1:-1}p(Hy,"safePickupOrder");function Uy(e,n,o,t,r){return Yp(e,o,r)&&!n.allowsImmediateOpponentWin&&!t.allowsImmediateOpponentWin&&!n.opponentReachesMatchPoint&&!t.opponentReachesMatchPoint}p(Uy,"safePlainSpiritReplyRiskPair");function Qp(e,n,o){if(!I(o)||n.length<2)return!1;for(let t=0;t<n.length;t+=1){let r=e[n[t]??-1];if(r!==void 0)for(let a=t+1;a<n.length;a+=1){let i=e[n[a]??-1];if(i!==void 0&&$n(r,i)&&x(r)!==x(i))return!0}}return!1}p(Qp,"safeProgressCompetition");function Zp(e,n,o,t){if(!I(t)||e.activeColor!==T.White||e.turnNumber>3||e.monsMovesCount<1||!e.playerCanUseAction()||!e.playerCanMoveMana())return!1;let r=n.spiritOwnManaSetupNow&&n.opponentManaProgress&&!F(n),a=o.spiritOwnManaSetupNow&&o.opponentManaProgress&&!F(o);if(r===a)return!1;let i=r?[n,o]:[o,n],[s,u]=i;return F(u)?qt(s,u)&&s.efficiency===u.efficiency&&s.ownDrainerVulnerable===u.ownDrainerVulnerable&&s.ownDrainerWalkVulnerable===u.ownDrainerWalkVulnerable&&!s.manaHandoffToOpponent&&!u.manaHandoffToOpponent&&!s.hasRoundtrip&&!u.hasRoundtrip&&!s.winsImmediately&&!u.winsImmediately&&!s.attacksOpponentDrainer&&!u.attacksOpponentDrainer&&!s.scoresSupermanaThisTurn&&!u.scoresSupermanaThisTurn&&!s.scoresOpponentManaThisTurn&&!u.scoresOpponentManaThisTurn&&!s.safeSupermanaPickupNow&&!u.safeSupermanaPickupNow&&!s.safeOpponentManaPickupNow&&!u.safeOpponentManaPickupNow&&s.sameTurnScoreWindowValue===0&&u.sameTurnScoreWindowValue===0&&s.supermanaProgress===u.supermanaProgress&&s.safeSupermanaProgressSteps===u.safeSupermanaProgressSteps&&s.opponentManaProgress===u.opponentManaProgress&&s.safeOpponentManaProgressSteps===u.safeOpponentManaProgressSteps:!1}p(Zp,"isProductionModeWhiteSpiritFollowupSetupPair");function ys(e,n,o,t){for(let r=0;r<o.length;r+=1){let a=n[o[r]??-1];if(a!==void 0)for(let i=r+1;i<o.length;i+=1){let s=n[o[i]??-1];if(s!==void 0&&Zp(e,a,s,t))return!0}}return!1}p(ys,"whiteSpiritFollowupSetupCompetition");function fs(e){return O(e)===S.ManaTempo&&e.sameTurnScoreWindowValue>0&&!e.winsImmediately&&!e.attacksOpponentDrainer&&!e.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!e.safeSupermanaPickupNow&&!e.safeOpponentManaPickupNow&&!e.manaHandoffToOpponent&&!e.hasRoundtrip}p(fs,"nonConcreteManaWindowRoot");function Jp(e,n,o,t){if(!I(t)||o.length<2||e.activeColor!==T.Black||e.turnNumber>4)return!1;for(let r=0;r<o.length;r+=1){let a=n[o[r]??-1];if(a!==void 0)for(let i=r+1;i<o.length;i+=1){let s=n[o[i]??-1];if(s===void 0)continue;let u=fs(a),c=fs(s);if(u===c)continue;let l=u?a:s,m=u?s:a;if(l.sameTurnScoreWindowValue<=1&&m.sameTurnScoreWindowValue===0&&O(m)===S.ManaTempo&&m.ownDrainerVulnerable===l.ownDrainerVulnerable&&m.ownDrainerWalkVulnerable===l.ownDrainerWalkVulnerable&&!m.manaHandoffToOpponent&&!m.hasRoundtrip&&cn(m,l)&&v(m.score,192)>=l.score)return!0}}return!1}p(Jp,"blackManaWindowProgressCompetition");function el(e,n,o){if(!I(o)||n.length<2)return!1;let t=n.map(r=>e[r]?.score).filter(r=>r!==void 0&&r>=0).sort((r,a)=>a-r);return t.length>=2&&_(t[0]??0,t[1]??0)<=64}p(el,"closePositiveScoreCompetition");function nl(){return{allowsImmediateOpponentWin:!0,opponentReachesMatchPoint:!0,worstReplyScore:-Math.trunc(yn/2)}}p(nl,"conservativeSnapshot");function Lo(e,n,o,t){return Vt(e,n,o,t.evaluation.weights,!1)}p(Lo,"evaluateReplyRiskGame");function pn(e,n,o,t,r){if(e.session.checkpoint())return nl();let a=Math.max(1,Math.trunc(r)),i=ps(n,o,a,t);if(i!==void 0){let c=by(e,i);if(c!==void 0)return c}let s=n.winnerColor(),u;if(s!==void 0){let c=s===o;u={allowsImmediateOpponentWin:!c,opponentReachesMatchPoint:!c,worstReplyScore:c?Math.trunc(yn/2):-Math.trunc(yn/2)}}else if(n.activeColor===o)u={allowsImmediateOpponentWin:!1,opponentReachesMatchPoint:!1,worstReplyScore:Lo(e,n,o,t)};else{let c=to(e,n,a);if(e.session.checkpoint())return nl();if(c.length===0)u={allowsImmediateOpponentWin:!1,opponentReachesMatchPoint:!1,worstReplyScore:Math.trunc(yn/4)};else{let l=!1,m=!1,d=2147483647,y=!1;for(let f of c){if(e.session.checkpoint())return nl();let h=f.game;y=!0;let C=o===T.White?h.blackScore:h.whiteScore;Ee-C<=1&&(m=!0);let b=h.winnerColor(),k;if(b===o?k=Math.trunc(yn/2):b!==void 0?(l=!0,m=!0,k=-Math.trunc(yn/2)):k=Lo(e,h,o,t),d=Math.min(d,k),l)break}(!y||d===2147483647)&&(d=Lo(e,n,o,t)),u={allowsImmediateOpponentWin:l,opponentReachesMatchPoint:m,worstReplyScore:d}}}return e.session.cacheWriteAllowed&&i!==void 0&&Cy(e,i,u),u}p(pn,"rootReplyRiskSnapshot");var ol=Object.freeze({});function nt(e,n){return e.game.activeColor===n&&e.game.winnerColor()===void 0}p(nt,"canTurnEngineProjectReplyRiskRoot");function Tu(e){return e===S.ImmediateScore||e===S.DenyOpponentWindow||e===S.DrainerKill}p(Tu,"isTacticalTurnEngineFamily");function Ky(e){return Tu(e)||e===S.SpiritImpact||e===S.DrainerSafetyRecovery}p(Ky,"isInformativeReplyRiskProjectionFamily");function qy(e,n,o,t){return!t.planner.enabled||!I(t)||!nt(e,o)||F(e)||n.plan.headFamily===S.SpiritImpact&&!e.spiritDevelopment&&e.ownDrainerVulnerable?!1:Ky(n.plan.headFamily)?!0:(n.plan.headFamily===S.SafeSupermanaProgress||n.plan.headFamily===S.SafeOpponentManaProgress)&&z(e)}p(qy,"shouldUseReplyRiskProjectionForRoot");function gu(e,n,o,t,r,a){let i=o!==void 0&&qy(n,o,t,r)?o.plan.endGame:n.game;return pn(e,i,t,r,a)}p(gu,"rootReplyRiskSnapshotWithProjection");function jy(e,n){return Bn(e,n)>=0?e:n}p(jy,"maxTurnUtility");function zy(e,n,o,t,r,a){let i=Na(e,o.game,n,t,r),s={actions:[],compiledChunks:[o.inputs],endGame:o.game.fork(),utility:i,headUtility:i,headFamily:a,goalFamily:a,packageMeta:{scoreGain:0,denyGain:0,drainerSafetyDelta:0,spiritOnlySetup:!1,endsNonnegativeDrainerSafety:!0,opponentImmediateWindowAfter:0}};return ss(e,n,s,t,r)}p(zy,"turnEngineRootPlanUtilityWithConfig");function Vo(e,n,o,t,r,a,i=ol){return i.evaluateTurnEngineRootUtility?.(n,o,t,a)??zy(e,n,o,t,qn(r),a)}p(Vo,"turnEngineRootPlanUtility");function hs(e,n,o,t,r,a,i=ol){let s=i.evaluateTurnEngineRootUtility?.(n,o,t,a);if(s!==void 0)return s;let u=_y(o.game,r),c=ps(o.game,t,fp[a],r),l=Gp(u,r.planner.selectedFollowupProjection,r.planner.secondaryAnalysis),m=c===void 0||l===void 0?void 0:{...c,secondary:l};if(m!==void 0){let f=Ry(e,m);if(f!==void 0)return f}let d=Na(e,o.game,n,t,u),y;if(!Tn(r))y=d;else{let f=zy(e,n,o,t,u,a);if(!r.planner.selectedFollowupProjection||!nt(o,t))y=jy(f,d);else{let h=o.ownDrainerVulnerable||o.spiritDevelopment||o.spiritSameTurnScoreSetupNow||o.spiritOwnManaSetupNow||z(o),C=o.game.activeColor===T.Black&&(a===S.ManaTempo||a===S.DrainerSafetyRecovery)&&!h&&!x(o)&&!o.manaHandoffToOpponent&&!o.hasRoundtrip&&!o.winsImmediately&&!o.attacksOpponentDrainer;if(!h&&!C)y=f;else{let b=co(e,o.game,t,u);y=b===void 0?f:jy(b.utility,f)}}}return e.session.cacheWriteAllowed&&m!==void 0&&Py(e,m,y),y}p(hs,"turnEngineSelectedOverrideUtility");function tl(e,n,o,t,r){if(!Tn(r)||o.length<2)return new Map;let a=ms(n,o,r),i=n[o[0]??-1],s=i!==void 0&&(i.winsImmediately||i.attacksOpponentDrainer||i.scoresSupermanaThisTurn||i.scoresOpponentManaThisTurn),u=o.some(y=>{let f=n[y];return f!==void 0&&F(f)&&nt(f,t)});if(!s&&!u)return new Map;let c;u?c=a?r.planner.lowBudgetGuard?Math.min(o.length,4):o.length:Math.min(o.length,r.planner.lowBudgetGuard?4:8):c=Math.min(o.length,r.planner.lowBudgetGuard?3:6);let l=_o(r),m=qn(r),d=new Map;for(let y of o.slice(0,c)){if(e.session.checkpoint())return new Map;let f=n[y];if(f===void 0||!nt(f,t))continue;let C=I(r)&&f.ownDrainerVulnerable&&!f.manaHandoffToOpponent&&!f.hasRoundtrip?m:l,b=co(e,f.game,t,C);b!==void 0&&d.set(y,{plan:b})}return u&&!s&&!a&&![...d.values()].some(({plan:y})=>Ky(y.headFamily))?new Map:d}p(tl,"turnEngineReplyRiskProjections");function Ss(e,n){return nt(e,n)&&!F(e)&&!e.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&!x(e)&&!e.hasRoundtrip}p(Ss,"canChallengeSpiritPreferenceRoot");function zt(e,n){return nt(e,n)&&!F(e)&&!e.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&!e.manaHandoffToOpponent&&!e.hasRoundtrip}p(zt,"canChallengeSpiritPreferenceRootWithRecovery");function rl(e,n,o,t,r){if(!Tn(r))return new Map;let a=r.planner.lowBudgetGuard?4:6,i=o.filter(y=>{let f=n[y];return f!==void 0&&F(f)&&nt(f,t)}).sort((y,f)=>Nr(n,y,f)).slice(0,a),s=r.planner.lowBudgetGuard?2:4,u=o.filter(y=>{let f=n[y];return f!==void 0&&(Ss(f,t)||zt(f,t))}).sort((y,f)=>Nr(n,y,f)).slice(0,s),c=[...i];for(let y of u)c.includes(y)||c.push(y);if(c.length<2)return new Map;let l=_o(r),m=qn(r),d=new Map;for(let y of c){let f=n[y];if(f===void 0)continue;let C=zt(f,t)&&!Ss(f,t)?m:l,b=co(e,f.game,t,C);b!==void 0&&d.set(y,{plan:b})}return d}p(rl,"buildSpiritRootProjections");function He(e,n,o,t){if(e.session.checkpoint())return 0;let r=n.winnerColor();if(r!==void 0)return r===o?Math.trunc(yn/2):-Math.trunc(yn/2);let a=ps(n,o,1,t);if(a!==void 0){let s=My(e,a);if(s!==void 0)return s}let i=Lo(e,n,o,t);return e.session.cacheWriteAllowed&&a!==void 0&&ky(e,a,i),i}p(He,"spiritFollowupFloorScore");function bt(e,n,o,t,r,a,i,s){let u=o[t],c=o[r];if(!Tn(i)||n.turnNumber>3||u===void 0||c===void 0||!F(u)||!F(c)||x(u)||x(c)||u.manaHandoffToOpponent||c.manaHandoffToOpponent||u.hasRoundtrip||c.hasRoundtrip||u.supermanaProgress||u.opponentManaProgress||c.supermanaProgress||c.opponentManaProgress||u.sameTurnScoreWindowValue>0||c.sameTurnScoreWindowValue>0||u.spiritSameTurnScoreSetupNow||c.spiritSameTurnScoreSetupNow||u.spiritOwnManaSetupNow||c.spiritOwnManaSetupNow||Math.abs(u.score-c.score)>224)return;let l=s.get(t)??He(e,u.game,a,i);s.set(t,l);let m=s.get(r)??He(e,c.game,a,i);return s.set(r,m),l>=v(m,32)?1:m>=v(l,32)?-1:0}p(bt,"spiritFollowupFloorOrder");function Fr(e,n,o,t){return I(t)&&e.activeColor===T.Black&&e.turnNumber<=4&&F(n)&&o.spiritOwnManaSetupNow&&!o.spiritSameTurnScoreSetupNow&&qt(n,o)&&n.ownDrainerVulnerable===o.ownDrainerVulnerable&&n.ownDrainerWalkVulnerable===o.ownDrainerWalkVulnerable&&!n.manaHandoffToOpponent&&!o.manaHandoffToOpponent&&!n.hasRoundtrip&&!o.hasRoundtrip&&!n.winsImmediately&&!o.winsImmediately&&!n.attacksOpponentDrainer&&!o.attacksOpponentDrainer&&!n.scoresSupermanaThisTurn&&!o.scoresSupermanaThisTurn&&!n.scoresOpponentManaThisTurn&&!o.scoresOpponentManaThisTurn&&!n.safeSupermanaPickupNow&&!o.safeSupermanaPickupNow&&!n.safeOpponentManaPickupNow&&!o.safeOpponentManaPickupNow&&n.sameTurnScoreWindowValue===0&&o.sameTurnScoreWindowValue===0&&!n.supermanaProgress&&!o.supermanaProgress&&!n.opponentManaProgress&&!o.opponentManaProgress}p(Fr,"isProductionModeBlackPlainSpiritFollowupSetupPair");function bs(e,n,o,t,r,a,i,s,u,c){let l=o[t],m=o[a];if(l===void 0||m===void 0)return;let d,y,f,h,C,b,k;if(Fr(n,l,m,u))d=l,y=r,f=m,h=i,C=t,b=a,k=!0;else if(Fr(n,m,l,u))d=m,y=i,f=l,h=r,C=a,b=t,k=!1;else return;if(y.allowsImmediateOpponentWin||h.allowsImmediateOpponentWin||y.opponentReachesMatchPoint||h.opponentReachesMatchPoint)return;let M=c.get(C)??He(e,d.game,s,u);c.set(C,M);let R=c.get(b)??He(e,f.game,s,u);if(c.set(b,R),f.rootRank<=d.rootRank&&v(f.score,64)>=d.score&&f.spiritSetupGain>=v(d.spiritSetupGain,32)&&v(h.worstReplyScore,192)>=y.worstReplyScore&&v(R,32)>=M)return k?-1:1;if(!(v(y.worstReplyScore,192)<h.worstReplyScore||M<v(R,32)&&d.score<f.score))return k?1:-1}p(bs,"blackPlainSpiritFollowupReplyOrder");function Cs(e,n,o,t,r,a,i,s,u,c){let l=o[t],m=o[a];if(!I(u)||n.activeColor!==T.Black||n.turnNumber>2||l===void 0||m===void 0||!F(l)||!F(m)||!qt(l,m)||l.ownDrainerVulnerable!==m.ownDrainerVulnerable||l.manaHandoffToOpponent!==m.manaHandoffToOpponent||l.hasRoundtrip!==m.hasRoundtrip||l.spiritSameTurnScoreSetupNow||m.spiritSameTurnScoreSetupNow||l.spiritOwnManaSetupNow||m.spiritOwnManaSetupNow||l.winsImmediately||m.winsImmediately||l.attacksOpponentDrainer||m.attacksOpponentDrainer||r.allowsImmediateOpponentWin||i.allowsImmediateOpponentWin||r.opponentReachesMatchPoint||i.opponentReachesMatchPoint)return;let d=c.get(t)??He(e,l.game,s,u);c.set(t,d);let y=c.get(a)??He(e,m.game,s,u);c.set(a,y);let f=r.worstReplyScore>=v(i.worstReplyScore,96)&&v(d,32)>=y&&v(l.score,48)>=m.score,h=i.worstReplyScore>=v(r.worstReplyScore,96)&&v(y,32)>=d&&v(m.score,48)>=l.score;if(f===h){let C=r.worstReplyScore<v(i.worstReplyScore,96)&&d<v(y,96),b=i.worstReplyScore<v(r.worstReplyScore,96)&&y<v(d,96);return C&&b&&l.score!==m.score?l.score>m.score?1:-1:void 0}return f?1:-1}p(Cs,"earlyBlackPlainSpiritSiblingOrder");function al(e,n,o,t,r,a){if(!I(a)||e.activeColor!==T.Black||e.turnNumber>4||o.allowsImmediateOpponentWin||r.allowsImmediateOpponentWin||o.opponentReachesMatchPoint||r.opponentReachesMatchPoint)return;let i=O(n),s=O(t),u=p(b=>b===S.ManaTempo||b===S.SafeSupermanaProgress||b===S.SafeOpponentManaProgress,"allowed");if(!u(i)||!u(s)||Math.abs(n.rootRank-t.rootRank)>8)return;let c=z(n),l=z(t),m=cn(n,t)||c&&!l,d=cn(t,n)||l&&!c;if(m===d)return;let y=fs(n),f=fs(t);if(y!==f){let b=y?n:t,k=y?o:r,M=y?t:n,R=y?r:o;if(b.sameTurnScoreWindowValue<=1&&M.sameTurnScoreWindowValue===0&&O(M)===S.ManaTempo&&M.ownDrainerVulnerable===b.ownDrainerVulnerable&&M.ownDrainerWalkVulnerable===b.ownDrainerWalkVulnerable&&!M.manaHandoffToOpponent&&!M.hasRoundtrip&&cn(M,b)&&v(R.worstReplyScore,96)>=k.worstReplyScore&&v(M.score,192)>=b.score)return y?-1:1}let h=v(o.worstReplyScore,240)>=r.worstReplyScore,C=v(r.worstReplyScore,240)>=o.worstReplyScore;if(m&&n.score>t.score&&h)return 1;if(d&&t.score>n.score&&C)return-1}p(al,"earlyBlackManaProgressReplyOrder");function il(e,n,o,t,r,a,i,s,u,c){let l=o[t],m=o[a];if(!I(u)||n.activeColor!==T.Black||n.turnNumber>4||l===void 0||m===void 0)return;let d=F(l),y=F(m),f=O(l)===S.ManaTempo,h=O(m)===S.ManaTempo;if(d===y||f===h)return;let C=d?l:m,b=d?r:i,k=d?t:a,M=d?m:l,R=d?i:r,P=d?a:t;if(!qt(C,M)||C.ownDrainerVulnerable!==M.ownDrainerVulnerable||C.ownDrainerWalkVulnerable!==M.ownDrainerWalkVulnerable||b.allowsImmediateOpponentWin||R.allowsImmediateOpponentWin||b.opponentReachesMatchPoint||R.opponentReachesMatchPoint||C.manaHandoffToOpponent||M.manaHandoffToOpponent||C.hasRoundtrip||M.hasRoundtrip||C.winsImmediately||M.winsImmediately||C.attacksOpponentDrainer||M.attacksOpponentDrainer||C.sameTurnScoreWindowValue>0||M.sameTurnScoreWindowValue>0||C.scoresSupermanaThisTurn||M.scoresSupermanaThisTurn||C.scoresOpponentManaThisTurn||M.scoresOpponentManaThisTurn||C.safeSupermanaPickupNow||M.safeSupermanaPickupNow||C.safeOpponentManaPickupNow||M.safeOpponentManaPickupNow||C.spiritSameTurnScoreSetupNow||C.spiritOwnManaSetupNow||M.spiritSameTurnScoreSetupNow||M.spiritOwnManaSetupNow||M.supermanaProgress||M.opponentManaProgress||v(C.score,24)<M.score||v(b.worstReplyScore,192)<R.worstReplyScore)return;let g=c.get(k)??He(e,C.game,s,u);c.set(k,g);let W=c.get(P)??He(e,M.game,s,u);if(c.set(P,W),!(v(g,32)<W))return d?1:-1}p(il,"earlyBlackPlainSpiritManaReplyOrder");function sl(e,n,o,t,r,a,i,s,u,c){if(!Tn(u))return;let l=o[t],m=o[a];if(l===void 0||m===void 0)return;let d=F(l),y=F(m);if(d===y)return;let f=d?m:l,h=d?i:r,C=d?a:t,b=d?l:m,k=d?r:i,M=d?t:a;if(x(f)||x(b)||h.allowsImmediateOpponentWin||k.allowsImmediateOpponentWin||h.opponentReachesMatchPoint||k.opponentReachesMatchPoint||f.manaHandoffToOpponent||b.manaHandoffToOpponent||f.hasRoundtrip||b.hasRoundtrip||f.ownDrainerVulnerable||b.ownDrainerVulnerable||f.ownDrainerWalkVulnerable||b.ownDrainerWalkVulnerable||f.spiritSameTurnScoreSetupNow||f.spiritOwnManaSetupNow||b.spiritSameTurnScoreSetupNow||b.spiritOwnManaSetupNow||f.winsImmediately||b.winsImmediately||f.attacksOpponentDrainer||b.attacksOpponentDrainer||f.sameTurnScoreWindowValue>0||b.sameTurnScoreWindowValue>0)return;let R=c.get(C)??He(e,f.game,s,u);c.set(C,R);let P=c.get(M)??He(e,b.game,s,u);c.set(M,P);let g=v(h.worstReplyScore,192)>=k.worstReplyScore,W=n.turnNumber<=2&&!f.supermanaProgress&&!f.opponentManaProgress&&f.score>=v(b.score,48)&&h.worstReplyScore>=96&&R>=P;if(!(v(f.score,32)<b.score||!g&&!W)&&(R>=v(P,48)||W))return d?-1:1}p(sl,"safeNonSpiritFollowupOrder");function ul(e,n,o,t,r,a){if(!Zp(e,n,t,a))return;let i=n.spiritOwnManaSetupNow&&n.opponentManaProgress&&!F(n),s=i?n:t,u=i?o:r,c=i?t:n,l=i?r:o;if(!qt(s,c)||s.efficiency!==c.efficiency||s.ownDrainerVulnerable!==c.ownDrainerVulnerable||s.ownDrainerWalkVulnerable!==c.ownDrainerWalkVulnerable||s.manaHandoffToOpponent||c.manaHandoffToOpponent||s.hasRoundtrip||c.hasRoundtrip||s.winsImmediately||c.winsImmediately||s.attacksOpponentDrainer||c.attacksOpponentDrainer||s.scoresSupermanaThisTurn||c.scoresSupermanaThisTurn||s.scoresOpponentManaThisTurn||c.scoresOpponentManaThisTurn||s.safeSupermanaPickupNow||c.safeSupermanaPickupNow||s.safeOpponentManaPickupNow||c.safeOpponentManaPickupNow||s.sameTurnScoreWindowValue>0||c.sameTurnScoreWindowValue>0||s.supermanaProgress||c.supermanaProgress||u.allowsImmediateOpponentWin||l.allowsImmediateOpponentWin||u.opponentReachesMatchPoint||l.opponentReachesMatchPoint)return;let m=e.turnNumber===3&&e.monsMovesCount===1?192:96;if(!(v(s.score,96)<c.score||v(u.worstReplyScore,m)<l.worstReplyScore||s.rootRank>c.rootRank+8))return i?1:-1}p(ul,"whiteSpiritFollowupSetupReplyOrder");var uR=16384,Ct=15,cR=120,pR=40,$y=90,Xy=22,lR=Symbol("move-efficiency-cache");function Zy(e){return e.caches.session.getOrCreate(lR,()=>new Te(uR))}p(Zy,"moveEfficiencyCache");function dR(e,n,o){return Vn(e)|Number(n)<<1|Number(o)<<2}p(dR,"snapshotCacheTag");function Yy(e){return{safeSupermanaProgress:!1,safeSupermanaProgressSteps:void 0,safeOpponentManaProgress:!1,safeOpponentManaProgressSteps:void 0,spiritAssistedScore:!1,spiritAssistedScoreValue:0,spiritAssistedDenial:!1,spiritAssistedDenialValue:0,sameTurnScoreWindowValue:e}}p(Yy,"defaultTacticalProjection");function Au(e){let n=10;return Math.max(Math.min(e.i,n-e.i),Math.min(e.j,n-e.j))+1}p(Au,"distanceToAnyPoolStepsForEfficiency");function Mt(e,n){let o=10,t=n===T.White?o:0;return Math.max(Math.abs(t-e.i),Math.min(e.j,o-e.j))+1}p(Mt,"distanceToColorPoolStepsForEfficiency");function Qy(e,n){let o;for(let[t,r]of e.board.entries()){let a=K(r);if(!(a?.color!==n||a.kind!==A.Drainer||U(a)))for(let[i,s]of e.board.entries()){if(s.kind!=="mana")continue;let u=te(t,i)-1;o=o===void 0?u:Math.min(o,u)}}return o}p(Qy,"approximateBestDrainerToManaSteps");function vu(e,n){if(e.activeColor!==n)return 0;let o=Math.max(0,fe-e.monsMovesCount),t=0;for(let[r,a]of e.board.entries()){if(a.kind!=="mon-with-mana"||a.mon.color!==n||U(a.mon))continue;Au(r)-1<=o&&(t=Math.max(t,xe(a.mana,n)))}return t}p(vu,"approximateSameTurnScoreWindowValue");function mR(e,n,o,t,r,a,i){let s=a?Cr(e,n):void 0,u=s?.colorSummary(o),c=s?.colorSummary(t),l=la,m=r&&n.activeColor===o?Ro(e,n,o,i,l):Yy(u?.immediateWindow.bestScore??vu(n,o)),d=r&&n.activeColor===t?Ro(e,n,t,i,l):Yy(c?.immediateWindow.bestScore??vu(n,t)),y=u?.bestDrainerToManaSteps??Qy(n,o)??Ct,f=c?.bestDrainerToManaSteps??Qy(n,t)??Ct;return{myBestCarrierSteps:u?.bestCarrierSteps??Ct,opponentBestCarrierSteps:c?.bestCarrierSteps??Ct,myBestDrainerToManaSteps:y,opponentBestDrainerToManaSteps:f,myCarrierCount:0,opponentCarrierCount:0,mySpiritOnBase:!1,opponentSpiritOnBase:!1,mySpiritActionTargets:u?.spirit.utility??0,opponentSpiritActionTargets:c?.spirit.utility??0,mySameTurnScoreValue:n.activeColor===o?r?m.spiritAssistedScoreValue:m.sameTurnScoreWindowValue:0,opponentSameTurnScoreValue:n.activeColor===t?r?d.spiritAssistedScoreValue:d.sameTurnScoreWindowValue:0,mySameTurnOpponentManaScoreValue:n.activeColor===o&&r?m.spiritAssistedDenialValue:0,opponentSameTurnOpponentManaScoreValue:n.activeColor===t&&r?d.spiritAssistedDenialValue:0,mySafeSupermanaProgress:r&&m.safeSupermanaProgress,opponentSafeSupermanaProgress:r&&d.safeSupermanaProgress,mySafeOpponentManaProgress:r&&m.safeOpponentManaProgress,opponentSafeOpponentManaProgress:r&&d.safeOpponentManaProgress,mySafeSupermanaProgressSteps:m.safeSupermanaProgressSteps??Ct,opponentSafeSupermanaProgressSteps:d.safeSupermanaProgressSteps??Ct,mySafeOpponentManaProgressSteps:m.safeOpponentManaProgressSteps??Ct,opponentSafeOpponentManaProgressSteps:d.safeOpponentManaProgressSteps??Ct}}p(mR,"initializeMoveEfficiencySnapshot");function fR(e,n,o,t){let r=e.board.base({kind:A.Spirit,color:n,cooldown:0}),a=e.board.base({kind:A.Spirit,color:o,cooldown:0});for(let[i,s]of e.board.entries()){if(s.kind==="mon-with-mana"){if(U(s.mon))continue;let u=Au(i)-1;s.mon.color===n?(t.myCarrierCount=t.myCarrierCount+1,t.myBestCarrierSteps=Math.min(t.myBestCarrierSteps,u)):(t.opponentCarrierCount=t.opponentCarrierCount+1,t.opponentBestCarrierSteps=Math.min(t.opponentBestCarrierSteps,u));continue}s.kind!=="mon"&&s.kind!=="mon-with-consumable"||U(s.mon)||s.mon.kind!==A.Spirit||(s.mon.color===n?t.mySpiritOnBase=ge(i,r):t.opponentSpiritOnBase=ge(i,a))}}p(fR,"observeMoveEfficiencyBoard");function Jy(e,n,o,t,r,a){let i=q(o),s=mR(e,n,o,i,t,r,a);return fR(n,o,i,s),s}p(Jy,"buildMoveEfficiencySnapshot");function Eu(e,n,o,t,r,a){let i=Zy(e),s=dR(o,t,r),u=i.get(a,s);if(u!==void 0)return u;let c=Jy(e,n,o,t,r,a);return e.session.cacheWriteAllowed&&i.set(a,c,s),c}p(Eu,"moveEfficiencySnapshotWithHash");function yR(e,n,o,t,r,a){return Jy(e,n,o,t,r,a)}p(yR,"moveEfficiencySnapshotUncachedWithHash");function eS(e){Zy(e).clear()}p(eS,"clearMoveEfficiencyCache");function $t(e,n,o,t,r=Ct){let a=e<r,i=n<r;if(a&&i){let s=e-n;return s>0?s*o:s<0?s*t:0}return!a&&i?o:a&&!i?0-t:0}p($t,"stepProgressDelta");function Br(e){let n=[];for(let o of e){if(o.kind!=="mon-move")continue;let t=K(o.item);if(t!==void 0){if(n.some(r=>ge(r.from,o.to)&&ge(r.to,o.from)&&r.color===t.color&&r.kind===t.kind))return!0;n.push({from:o.from,to:o.to,color:t.color,kind:t.kind})}}return!1}p(Br,"hasRoundtripMonMove");function SR(e,n,o){return Ed(e.board,n.board)&&e.whiteScore===n.whiteScore&&e.blackScore===n.blackScore&&e.whitePotionsCount===n.whitePotionsCount&&e.blackPotionsCount===n.blackPotionsCount&&!qi(o)}p(SR,"isNoEffectTurnTransition");function hR(e,n){let o=q(n);return e.some(t=>t.kind==="mon-fainted"&&t.mon.kind===A.Drainer&&t.mon.color===o)}p(hR,"eventsIncludeOpponentDrainerFainted");function _r(e,n,o){if(o<=0)return 0;let t=0,r=q(n);for(let a of e){if(a.kind!=="mana-move")continue;let i=Mt(a.from,n),s=Mt(a.to,n),u=Mt(a.from,r),c=Mt(a.to,r),l=Math.max(u-c,0),m=Math.max(i-s,0);if(l>m){let d=l-m;t=t+d*xe(a.mana,r)*o}}return t}p(_r,"manaHandoffPenalty");function bR(e,n,o){let t=o;return t=t+$t(e.myBestCarrierSteps,n.myBestCarrierSteps,90,130),t=t-$t(e.opponentBestCarrierSteps,n.opponentBestCarrierSteps,80,120),t=t+$t(e.myBestDrainerToManaSteps,n.myBestDrainerToManaSteps,34,50),t=t-$t(e.opponentBestDrainerToManaSteps,n.opponentBestDrainerToManaSteps,30,44),t=t+(n.myCarrierCount-e.myCarrierCount)*55,t=t-(n.opponentCarrierCount-e.opponentCarrierCount)*48,t}p(bR,"applyCarrierAndDrainerEfficiencyDelta");function CR(e,n,o){let t=o;return e.mySpiritOnBase&&!n.mySpiritOnBase&&(t=t+$y),!e.opponentSpiritOnBase&&n.opponentSpiritOnBase&&(t=t+Math.trunc($y/3)),t=t+(n.mySpiritActionTargets-e.mySpiritActionTargets)*Xy,t=t-(n.opponentSpiritActionTargets-e.opponentSpiritActionTargets)*Math.trunc(Xy/2),t}p(CR,"applySpiritEfficiencyDelta");function MR(e,n,o){let t=o;return t=t+(n.mySameTurnScoreValue-e.mySameTurnScoreValue)*55,t=t-(n.opponentSameTurnScoreValue-e.opponentSameTurnScoreValue)*45,t=t+(n.mySameTurnOpponentManaScoreValue-e.mySameTurnOpponentManaScoreValue)*90,t=t-(n.opponentSameTurnOpponentManaScoreValue-e.opponentSameTurnOpponentManaScoreValue)*75,t}p(MR,"applyScoreWindowEfficiencyDelta");function kR(e,n,o){let t=o;return!e.mySafeSupermanaProgress&&n.mySafeSupermanaProgress&&(t=t+140),!e.opponentSafeSupermanaProgress&&n.opponentSafeSupermanaProgress&&(t=t-120),!e.mySafeOpponentManaProgress&&n.mySafeOpponentManaProgress&&(t=t+120),!e.opponentSafeOpponentManaProgress&&n.opponentSafeOpponentManaProgress&&(t=t-110),t=t+$t(e.mySafeSupermanaProgressSteps,n.mySafeSupermanaProgressSteps,26,40),t=t-$t(e.opponentSafeSupermanaProgressSteps,n.opponentSafeSupermanaProgressSteps,22,36),t=t+$t(e.mySafeOpponentManaProgressSteps,n.mySafeOpponentManaProgressSteps,22,34),t=t-$t(e.opponentSafeOpponentManaProgressSteps,n.opponentSafeOpponentManaProgressSteps,18,30),t}p(kR,"applySafeProgressEfficiencyDelta");function RR(e,n,o,t,r,a){let i=a,s=t.some(u=>u.kind==="mana-scored")||hR(t,o);return r.applyRootManaHandoffGuard&&!s&&(i=i-_r(t,o,r.rootManaHandoffPenalty)),SR(e,n,t)?i=i-cR:!qi(t)&&i<=0&&(i=i-pR),r.applyBacktrackPenalty&&r.rootBacktrackPenalty>0&&Br(t)&&(i=i-r.rootBacktrackPenalty),i}p(RR,"applyRootEfficiencyPenalties");function PR(e,n,o,t,r,a,i){let s=0;return s=bR(r,a,s),s=CR(r,a,s),s=MR(r,a,s),s=kR(r,a,s),i.isRoot&&(s=RR(e,n,o,t,i,s)),s}p(PR,"moveEfficiencyDeltaFromBeforeSnapshotWithAfterSnapshot");function Ou(e,n,o,t,r,a,i,s){let u=yR(e,o,t,s.includeTacticalExact&&o.activeColor===t,s.includeStrategicExact,i);return PR(n,o,t,r,a,u,s)}p(Ou,"moveEfficiencyDeltaFromBeforeSnapshot");var kt=15,cl=33,wR=4,TR=6,gR=600,vR=1800,AR=220,ER=280;function dS(e,n){for(let[o,t]of e.board.entries()){let r=K(t);if(r?.color===n&&r.kind===A.Drainer)return{location:o,mon:r}}}p(dS,"findDrainer");function Gn(e,n,o){let t=dS(n,o);if(t===void 0)return!1;if(U(t.mon))return!0;if(n.isFirstTurn())return!1;let r=rn(n.board);return _t(e,n.board,r,q(o),o,t.location,fe,!0)}p(Gn,"isOwnDrainerVulnerable");function OR(e,n){let o=q(n);for(let[t,r]of e.board.entries()){let a=K(r);if(a?.color===o&&a.kind===A.Drainer&&!U(a))return t}}p(OR,"opponentAwakeDrainerLocation");function xR(e,n,o){let t=o===A.Mystic?at(n):it(n),r=2147483647;for(let a of t)r=Math.min(r,te(e,a));return r}p(xR,"minimumStepsToAttackSource");function ll(e,n){let o=[],t=OR(e,n);if(t===void 0)return o;let r=Math.max(0,fe-e.monsMovesCount);if(r<=0)return o;let a=q(n),i=e.board.findAwakeAngel(a),s=i!==void 0&&te(i,t)===1,u=[];for(let[c,l]of e.board.entries())l.kind==="consumable"&&l.consumable===j.BombOrPotion&&u.push(c);for(let[c,l]of e.board.entries()){let m=K(l);if(m?.color!==n||U(m))continue;if(l.kind==="mon-with-consumable"&&l.consumable===j.Bomb&&te(c,t)<=r+3){o.push(c);continue}if(!s&&(m.kind===A.Mystic||m.kind===A.Demon)&&xR(c,t,m.kind)<=r){o.push(c);continue}for(let y of u){let f=te(c,y);if(f>r)continue;let h=r-f;if(te(y,t)<=h+3){o.push(c);break}}}return o}p(ll,"potentialDrainerAttackerLocations");function IR(e,n){return ll(e,n).length>0}p(IR,"hasPotentialDrainerAttacker");function NR(e,n){return e.activeColor===n&&e.playerCanUseAction()&&IR(e,n)}p(NR,"approximateCanAttackOpponentDrainerThisTurn");function mS(e,n,o){let t=dS(n,o);if(t===void 0||U(t.mon)||Gn(e,n,o))return!1;let r=rn(n.board),a=n.board.findAwakeAngel(o),i=a!==void 0&&te(a,t.location)===1;return yr(e,n.board,r,o,t.location,i)}p(mS,"isOwnDrainerWalkVulnerable");function nS(e,n){let o=0,t=kt;for(let[r,a]of e.board.entries()){if(a.kind!=="mon-with-mana"||a.mon.color!==n||U(a.mon))continue;o+=1;let i=Math.max(Math.min(r.i,10-r.i),Math.min(r.j,10-r.j));t=Math.min(t,i)}return[o,t]}p(nS,"carrierSnapshot");function DR(e,n,o){let[t,r]=nS(e,o),[a,i]=nS(n,o);return a>t||i<r&&i<kt}p(DR,"hasCarrierProgress");function WR(e,n){return e.board.base({kind:A.Spirit,color:n,cooldown:0})}p(WR,"spiritBase");function FR(e,n){let o=WR(e,n);for(let[t,r]of e.board.entries()){let a=K(r);if(!ge(t,o)&&a?.kind===A.Spirit&&a.color===n&&!U(a))return!0}return!1}p(FR,"hasAwakeSpiritOffBase");function fS(e,n,o,t){return t.some(r=>r.kind==="spirit-target-move")||Fi(e,o)&&FR(n,o)}p(fS,"hasSpiritDevelopment");function BR(e,n,o,t){return t.some(r=>r.kind==="mana-scored")||Be(n,o)>Be(e,o)}p(BR,"isImmediateScore");function yS(e,n){return e.some(o=>o.kind==="mon-fainted"&&o.mon.kind===A.Drainer&&o.mon.color===q(n))}p(yS,"attacksDrainer");function dl(e,n,o,t,r=Gn(e,n,t),a=Gn(e,o.game,t)){let i=BR(n,o.game,t,o.events),s=yS(o.events,t),u=r&&!a,c=DR(n,o.game,t),l=qi(o.events),m=fS(n,o.game,t,o.events);return{immediateScore:i,drainerAttack:s,drainerSafetyRecover:u,carrierProgress:c,material:l,quiet:!i&&!s&&!u&&!c&&!l&&!m}}p(dl,"classifyTransition");function ml(e,n,o){let t=0;for(let r of o)switch(r.kind){case"mana-scored":t+=e===n?780:-780;break;case"pickup-mana":t+=e===n?230:-230;break;case"mon-fainted":t+=r.mon.color===n?-360:360;break;case"use-potion":t+=e===n?-80:80;break;case"pickup-bomb":case"pickup-potion":t+=e===n?45:-45;break;default:break}return t}p(ml,"orderingEventBonus");function oS(e,n){return e.some(o=>o.kind==="mana-scored"&&n(o.mana))}p(oS,"scoresMana");function tS(e,n){return e.some(o=>o.kind==="pickup-mana"&&n(o.mana))}p(tS,"picksUpMana");function rS(e,n,o){return e.some(t=>t.kind==="mana-move"&&o(t.mana)&&Mt(t.to,n)<Mt(t.from,n))}p(rS,"manaMovedToward");function fl(e,n,o){return e.some(t=>t.kind==="spirit-target-move"&&t.item.kind==="mana"&&o(t.item.mana)&&Mt(t.to,n)<Mt(t.from,n))}p(fl,"spiritMovesManaToward");function Ms(e,n,o,t){let r=rn(n.board);for(let[a,i]of n.board.entries())if(i.kind==="mon-with-mana"&&i.mon.kind===A.Drainer&&i.mon.color===o&&!U(i.mon)&&je(i.mana,t))return Pi(e,n.board,r,o,a);return!1}p(Ms,"safeCarrierForMana");function Nu(e,n,o,t,r){return fl(o,t,a=>je(a,r))||o.some(a=>a.kind==="spirit-target-move"&&a.item.kind==="mana"&&je(a.item.mana,r))&&Ms(e,n,t,r)}p(Nu,"spiritManaSetup");function aS(e,n,o){let t;for(let[r,a]of e.board.entries()){if(a.kind==="mon-with-mana"&&a.mon.color===n&&a.mon.kind===A.Drainer&&!U(a.mon)&&je(a.mana,o)){t=0;continue}if(!(a.kind!=="mon"&&a.kind!=="mon-with-consumable")&&!(a.mon.color!==n||a.mon.kind!==A.Drainer||U(a.mon)))for(let[i,s]of e.board.entries()){if(s.kind!=="mana"||!je(s.mana,o))continue;let u=te(r,i);t=t===void 0?u:Math.min(t,u)}}return t}p(aS,"approximateSpecificManaProgressSteps");function _R(e,n){let o;for(let[t,r]of e.board.entries()){if(r.kind!=="mon-with-mana"||r.mon.color!==n||U(r.mon))continue;let a=Math.max(0,Au(t)-1);o=o===void 0?a:Math.min(o,a)}return o}p(_R,"approximateBestCarrierSteps");function yl(e,n,o,t=!1){let r=t?Cr(e,n).colorSummary(o):void 0,a=Math.max(0,fe-n.monsMovesCount),i=aS(n,o,{kind:"supermana"}),s=aS(n,o,{kind:"regular",color:q(o)});return{canAttackOpponentDrainer:!1,safeSupermanaProgress:i!==void 0&&i<=a,safeSupermanaProgressSteps:i,safeOpponentManaProgress:s!==void 0&&s<=a,safeOpponentManaProgressSteps:s,spiritAssistedSupermanaProgress:!1,spiritAssistedOpponentManaProgress:!1,spiritAssistedScore:!1,spiritAssistedDenial:!1,sameTurnScoreWindowValue:r?.immediateWindow.bestScore??vu(n,o),scorePathBestSteps:r?.scorePathWindow.bestSteps??_R(n,o)}}p(yl,"approximateActiveTurnSummary");function SS(e,n){let o=n.activeColor,t=yl(e,n,o);return t.sameTurnScoreWindowValue>0||NR(n,o)||t.safeSupermanaProgress||t.safeOpponentManaProgress}p(SS,"hasProTacticalPotential");function GR(e,n,o,t,r){if(n.activeColor===o)return t?Zs(e,n,o):yl(e,n,o,r)}p(GR,"rootTurnSummary");function hS(e,n,o,t){let r=0;return o&&(r+=80),t&&(r+=48),n&&(r+=24),e?.spiritAssistedScore&&(r+=72),e?.spiritAssistedDenial&&(r+=40),e?.spiritAssistedSupermanaProgress&&(r+=36),e?.spiritAssistedOpponentManaProgress&&(r+=36),r+=Math.max(0,e?.sameTurnScoreWindowValue??0)*20,e?.safeSupermanaProgressSteps!==void 0&&(r+=Math.max(0,12-Math.min(12,e.safeSupermanaProgressSteps))*4),e?.safeOpponentManaProgressSteps!==void 0&&(r+=Math.max(0,12-Math.min(12,e.safeOpponentManaProgressSteps))*4),e?.scorePathBestSteps!==void 0&&(r+=Math.max(0,8-Math.min(8,e.scorePathBestSteps))*3),r}p(hS,"liveSpiritSetupGain");function iS(e,n){if(e>=kt||n<=0)return 0;let o=Math.max(0,Math.min(fe,e));return(fe-o)*n}p(iS,"rootProgressBonus");function LR(e,n){let o=0;return n.scoresSupermanaThisTurn?o=v(o,Math.max(0,e.evaluation.supermanaScoreBonus)):n.supermanaProgress&&!n.ownDrainerVulnerable&&(o=v(o,Math.max(0,e.evaluation.supermanaProgressBonus)),o=v(o,iS(n.safeSupermanaProgressSteps,8))),n.scoresOpponentManaThisTurn?o=v(o,Math.max(0,e.evaluation.opponentManaScoreBonus)):n.opponentManaProgress&&!n.ownDrainerVulnerable&&(o=v(o,Math.max(0,e.evaluation.opponentManaProgressBonus)),o=v(o,iS(n.safeOpponentManaProgressSteps,6))),n.manaHandoffToOpponent&&(o=_(o,Math.max(0,e.evaluation.softManaHandoffPenalty))),n.hasRoundtrip&&(o=_(o,Math.max(0,e.evaluation.softRoundtripPenalty))),o}p(LR,"rootSoftPriority");function VR(e){return e.some(n=>["mana-move","mana-scored","pickup-mana","mana-dropped","supermana-back-to-base"].includes(n.kind))}p(VR,"rootTransitionRequiresExactLiteProgress");function HR(e){return e.some(n=>n.kind==="spirit-target-move"||n.kind==="mon-move"&&K(n.item)?.kind===A.Spirit)}p(HR,"rootTransitionRequiresExactLiteSpiritWindow");function sS(e){return VR(e)||HR(e)}p(sS,"transitionRequiresExactLite");function uS(e,n,o,t){let r=e.budget.exactLiteRootCalls,a=e.budget.exactLiteStaticCalls;return e.search.exactLiteChecks&&r>0&&sS(o.events)&&(t.rootCalls>0?t.rootCalls-=1:r=0),e.search.exactLiteChecks&&a>0&&o.game.activeColor===n&&(t.staticCalls>0?t.staticCalls-=1:a=0),r=Math.min(r,t.rootCalls),a=Math.min(a,t.staticCalls),ke(e,{budget:{exactLiteRootCalls:r,exactLiteStaticCalls:a},search:{exactRootAnalysis:e.search.exactLiteChecks?r>0&&sS(o.events):e.search.exactRootAnalysis}})}p(uS,"withExactLiteBudgetedTransitionConfig");function bS(e,n,o){let t=ie(n);return Eu(e,n,o,!1,!1,t)}p(bS,"rootCandidateSourceSnapshot");function pl(e,n,o,t,r,a,i){if(e.session.checkpoint())return;let s=o.game,u=ie(s),c=Ou(e,n,s,t,o.events,i(),u,{isRoot:!0,applyBacktrackPenalty:!0,applyRootManaHandoffGuard:!0,includeTacticalExact:!1,includeStrategicExact:!1,rootBacktrackPenalty:r.evaluation.rootBacktrackPenalty,rootManaHandoffPenalty:r.evaluation.rootManaHandoffPenalty});if(e.session.checkpoint())return;let l=Gn(e,s,t),m=!1,d=dl(e,n,o,t,a,l),y=oS(o.events,We=>We.kind==="supermana"),f=oS(o.events,We=>We.kind==="regular"&&We.color!==t),h=tS(o.events,We=>We.kind==="supermana"),C=tS(o.events,We=>We.kind==="regular"&&We.color!==t),b=GR(e,s,t,r.search.exactRootAnalysis,r.search.exactLiteChecks&&r.budget.exactLiteStaticCalls>0),k=h&&Ms(e,s,t,{kind:"supermana"}),M=C&&Ms(e,s,t,{kind:"regular",color:q(t)}),R=Nu(e,s,o.events,t,{kind:"supermana"}),P=Nu(e,s,o.events,t,{kind:"regular",color:q(t)}),g=y||h||rS(o.events,t,We=>We.kind==="supermana")||R||(b?.safeSupermanaProgress??!1)||(b?.spiritAssistedSupermanaProgress??!1),W=f||C||rS(o.events,t,We=>We.kind==="regular"&&We.color!==t)||P||(b?.safeOpponentManaProgress??!1)||(b?.spiritAssistedOpponentManaProgress??!1)||(b?.spiritAssistedDenial??!1),E=b?.safeSupermanaProgressSteps??kt,D=b?.safeOpponentManaProgressSteps??kt,N=b?.scorePathBestSteps??cl,B=b?.sameTurnScoreWindowValue??0,G=fS(n,s,t,o.events),L=o.events.some(We=>We.kind==="spirit-target-move")&&s.activeColor===t&&B>0,$=fl(o.events,t,We=>We.kind==="regular"&&We.color===t)||R||P,V=hS(b,G,L,$),se=s.winnerColor()===t,Pe=d.drainerAttack,Je=!(se||Pe||y||f||b?.spiritAssistedScore===!0)&&_r(o.events,t,Math.max(0,r.evaluation.rootManaHandoffPenalty))>0,en=Br(o.events),De=LR(r,{supermanaProgress:g,opponentManaProgress:W,safeSupermanaProgressSteps:E,safeOpponentManaProgressSteps:D,scoresSupermanaThisTurn:y,scoresOpponentManaThisTurn:f,ownDrainerVulnerable:l,manaHandoffToOpponent:Je,hasRoundtrip:en}),kn=ks(s,t,Math.max(0,r.budget.depth-1),r.budget.depth),Ie=kn??Vt(e,s,t,r.evaluation.weights,!1);Ie=v(Ie,ml(n.activeColor,t,o.events)),Ie=v(Ie,De);let yo=o.events.some(We=>We.kind==="use-potion"),Eo=se||Pe||Be(s,t)>=Be(n,t)+2||y||f||b?.spiritAssistedScore===!0||!l&&(g||W);return yo&&!Eo&&(Ie=_(Ie,Math.max(0,r.evaluation.potionSpendPenalty))),kn===void 0&&(Ie=Us(Ie)),{inputs:o.inputs,game:s,events:o.events,stateHash:u,heuristic:Ie,efficiency:c,winsImmediately:se,attacksOpponentDrainer:Pe,ownDrainerVulnerable:l,ownDrainerWalkVulnerable:m,spiritDevelopment:G,keepsAwakeSpiritOnBase:Fi(n,t)&&Fi(s,t),manaHandoffToOpponent:Je,hasRoundtrip:en,scoresSupermanaThisTurn:y,scoresOpponentManaThisTurn:f,safeSupermanaPickupNow:k,safeOpponentManaPickupNow:M,safeSupermanaProgressSteps:E,safeOpponentManaProgressSteps:D,scorePathBestSteps:N,sameTurnScoreWindowValue:B,spiritSetupGain:V,spiritSameTurnScoreSetupNow:L,spiritOwnManaSetupNow:$,supermanaProgress:g,opponentManaProgress:W,policyPriority:De,classes:d}}p(pl,"buildRootCandidate");function CS(e,n,o,t,r){let a=[...r],i=an(n,a);if(i===void 0)return;let s=pl(e,n,{inputs:a,game:i.game,events:i.events},o,t,Gn(e,n,o),()=>bS(e,n,o));return s===void 0?void 0:{...s,rootRank:0}}p(CS,"buildRootCandidateForInputs");function Ao(e,n){return e===n?0:e?-1:1}p(Ao,"compareBooleanPreferred");function xu(e,n){let o=e<kt,t=n<kt;return o!==t?o?-1:1:o?e-n:0}p(xu,"progressStepsOrder");function UR(e,n){let o=e<cl,t=n<cl;return o!==t?o?-1:1:o?e-n:0}p(UR,"scorePathStepsOrder");function MS(e,n){let o=Ao(e.winsImmediately,n.winsImmediately);if(o!==0||(o=Ao(e.attacksOpponentDrainer,n.attacksOpponentDrainer),o!==0)||(o=Ao(!e.ownDrainerVulnerable,!n.ownDrainerVulnerable),o!==0)||(o=Ao(e.classes.immediateScore,n.classes.immediateScore),o!==0))return o;for(let t of[[e.scoresSupermanaThisTurn,n.scoresSupermanaThisTurn],[e.scoresOpponentManaThisTurn,n.scoresOpponentManaThisTurn],[e.safeSupermanaPickupNow,n.safeSupermanaPickupNow],[e.safeOpponentManaPickupNow,n.safeOpponentManaPickupNow]])if(o=Ao(t[0],t[1]),o!==0)return o;return e.sameTurnScoreWindowValue!==n.sameTurnScoreWindowValue?n.sameTurnScoreWindowValue-e.sameTurnScoreWindowValue:(o=Ao(e.spiritSameTurnScoreSetupNow,n.spiritSameTurnScoreSetupNow),o!==0||(o=Ao(e.spiritOwnManaSetupNow,n.spiritOwnManaSetupNow),o!==0)||e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.supermanaProgress&&n.supermanaProgress&&(o=xu(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps),o!==0)||e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.opponentManaProgress&&n.opponentManaProgress&&(o=xu(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps),o!==0)||e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&(o=UR(e.scorePathBestSteps,n.scorePathBestSteps),o!==0)||(o=Ao(e.supermanaProgress,n.supermanaProgress),o!==0)||e.supermanaProgress&&n.supermanaProgress&&(o=xu(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps),o!==0)||(o=Ao(e.opponentManaProgress,n.opponentManaProgress),o!==0)||e.opponentManaProgress&&n.opponentManaProgress&&(o=xu(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps),o!==0)||(o=Ao(!e.manaHandoffToOpponent,!n.manaHandoffToOpponent),o!==0)||(o=Ao(!e.hasRoundtrip,!n.hasRoundtrip),o!==0)||(o=Ao(e.spiritDevelopment,n.spiritDevelopment),o!==0)?o:e.efficiency!==n.efficiency?n.efficiency-e.efficiency:n.heuristic-e.heuristic)}p(MS,"tacticalRootOrder");function Du(e,n){if(e.heuristic!==n.heuristic)return n.heuristic-e.heuristic;let o=MS(e,n);return o!==0?o:ro(e.inputs,n.inputs)}p(Du,"compareRootCandidates");function jR(e,n){switch(n){case 0:return e.classes.immediateScore;case 1:return e.classes.drainerAttack;default:return e.classes.drainerSafetyRecover}}p(jR,"hasPriorityClass");function KR(e,n){if(e.length<=n)return[...e];if(n<=0)return[];let o=new Set,t=[],r=p(c=>{o.add(c),t.includes(c)||t.push(c)},"markPriority");for(let c=0;c<3;c+=1){let l=e.findIndex(m=>jR(m,c));l>=0&&r(l)}let a=-1;for(let c=0;c<e.length;c+=1){let l=e[c];if(l===void 0||l.sameTurnScoreWindowValue<=0)continue;let m=e[a];(m===void 0||MS(l,m)<0)&&(a=c)}a>=0&&r(a);for(let c=0;c<e.length;c+=1){let l=e[c];if(l===void 0)continue;let m=l.scoresSupermanaThisTurn||l.scoresOpponentManaThisTurn||l.safeSupermanaPickupNow||l.safeOpponentManaPickupNow||l.spiritSameTurnScoreSetupNow||l.sameTurnScoreWindowValue>0||l.spiritOwnManaSetupNow,d=l.supermanaProgress&&l.safeSupermanaProgressSteps<kt||l.opponentManaProgress&&l.safeOpponentManaProgressSteps<kt;(m||d)&&o.add(c)}let i=[],s=new Set,u=p(c=>{if(i.length>=n||s.has(c))return;let l=e[c];l!==void 0&&(i.push(l),s.add(c))},"append");for(let c of t)u(c);for(let c=0;c<e.length;c+=1)o.has(c)&&u(c);for(let c=0;c<e.length;c+=1)u(c);return i}p(KR,"truncateWithClassCoverage");function Iu(e,n){let o=new Set(e.map(t=>hn(t.inputs)));for(let t of n)o.has(hn(t.inputs))||(o.add(hn(t.inputs)),e.push(t))}p(Iu,"appendUniqueTransitions");function qR(e){return e.budget.depth>=3?TR:wR}p(qR,"forcedAttackCandidatesLimit");function zR(e){return e.budget.depth>=3?vR:gR}p(zR,"forcedAttackNodeBudget");function $R(e){return e.budget.depth>=3?ER:AR}p($R,"forcedAttackEnumLimit");function XR(e){return e.budget.depth>=3?8:4}p(XR,"spiritSetupFallbackCandidatesLimit");function YR(e){return e.budget.depth>=3?256:128}p(YR,"spiritSetupFallbackEnumLimit");function cS(e){return e.budget.depth>=3?8:4}p(cS,"safeDrainerPickupFallbackCandidatesLimit");function QR(e){return e.budget.depth>=3?8:4}p(QR,"drainerSafetyFallbackCandidatesLimit");function ZR(e){return e.budget.depth>=3?192:96}p(ZR,"drainerSafetyFallbackEnumLimit");function JR(e){return e.budget.depth>=3?24:12}p(JR,"genericRootFallbackEnumLimit");function Sl(e,n,o){let t=[];for(let[r,a]of e.board.entries()){let i=K(a);i?.color===n&&!U(i)&&(o===void 0||i.kind===o)&&t.push(r)}return t}p(Sl,"awakeMonLocations");function kS(e,n,o,t){return fl(o,t,r=>r.kind==="regular"&&r.color===t)||Nu(e,n,o,t,{kind:"supermana"})||Nu(e,n,o,t,{kind:"regular",color:q(t)})}p(kS,"hasSpiritScoringManaSetup");function eP(e,n,o,t,r){if(e.session.checkpoint()||!n.playerCanUseAction())return[];let a=Sl(n,o,A.Spirit);if(a.length===0)return[];let i=Math.max(1,r),s=[];for(let u of a){if(e.session.checkpoint())return[];if(s.length>=i)break;let c=iu(e,n,YR(t),In,[u]);if(e.session.cancelled)return[];for(let l of c){if(e.session.checkpoint())return[];if(s.length>=i)break;kS(e,l.game,l.events,o)&&s.push(l)}}return s}p(eP,"collectTargetedSpiritSetupInputs");function nP(e,n,o,t,r){if(e.session.checkpoint())return[];let a=Sl(n,o);if(a.length===0)return[];let i=Math.max(1,r),s=[],u=new Set;for(let c of a){if(e.session.checkpoint())return[];if(s.length>=i)break;let l=iu(e,n,ZR(t),In,[c]);if(e.session.cancelled)return[];for(let m of l){if(e.session.checkpoint())return[];if(s.length>=i)break;if(Gn(e,m.game,o))continue;let d=hn(m.inputs);u.has(d)||(u.add(d),s.push(m))}}return s.sort((c,l)=>ro(c.inputs,l.inputs)),s}p(nP,"collectTargetedDrainerSafetyInputs");function RS(e,n){return e.some(o=>o.kind==="pickup-mana"&&je(o.mana,n))}p(RS,"eventsPickupWantedMana");function oP(e,n){return e.some(o=>o.kind==="mana-scored"&&je(o.mana,n))}p(oP,"eventsScoreWantedMana");function pS(e,n,o,t){return RS(n.events,t)&&Ms(e,n.game,o,t)}p(pS,"transitionHasSafeDrainerPickup");function lS(e,n,o,t,r){if(e.session.checkpoint()||!n.playerCanMoveMon())return[];let a=Sl(n,o,A.Drainer);if(a.length===0)return[];let i=Math.max(1,t),s=[],u=new Set;for(let c of a){if(e.session.checkpoint())return[];if(s.length>=i)break;let l=Ti(e,n,o,c,r);if(e.session.cancelled)return[];if(l===void 0||l.length===0)continue;let m=[{kind:"location",location:{i:c.i,j:c.j}},...l.map(y=>({kind:"location",location:{i:y.i,j:y.j}}))],d=an(n,m);if(d!==void 0&&RS(d.events,r)&&(Ms(e,d.game,o,r)||oP(d.events,r))){let y=hn(m);u.has(y)||(u.add(y),s.push({inputs:m,game:d.game,events:d.events}))}}return s.sort((c,l)=>ro(c.inputs,l.inputs)),s}p(lS,"collectTargetedSafeDrainerPickupInputs");function tP(e,n){return e.playerCanMoveMon()&&ll(e,n).length>0}p(tP,"canAttemptForcedDrainerAttackFallback");function rP(e,n,o,t,r){if(e.session.checkpoint()||n.activeColor!==o||t.remaining===0)return!1;let a=ie(n);if(r.has(a))return!0;t.remaining=Math.max(0,t.remaining-1);let i=$c(e,n,o);return i&&e.session.cacheWriteAllowed&&r.add(a),i}p(rP,"canAttackOpponentDrainerBeforeTurnEnds");function aP(e,n,o,t,r,a){if(e.session.checkpoint())return[];let i=a?ll(n,o):void 0;if(a&&i?.length===0)return[];let s=a?2:1,u=$R(t)*s,c={remaining:zR(t)*s},l=new eo(Math.max(1,c.remaining)),m=iu(e,n,u,In,i);if(e.session.checkpoint())return[];let d=Math.max(1,r),y=[];for(let f of m){if(e.session.checkpoint())return[];if(y.length>=d)break;if(yS(f.events,o)){y.push(f);continue}f.game.activeColor===o&&rP(e,f.game,o,c,l)&&y.push(f)}return y}p(aP,"collectDrainerAttackInputs");function Xn(e,n,o,t){if(e.session.checkpoint())return[];let r=n.fen(),a=Gn(e,n,o),i=to(e,n,t.search.rootEnumerationLimit,In);if(a&&!i.some(M=>!Gn(e,M.game,o))&&Iu(i,nP(e,n,o,t,QR(t))),e.session.checkpoint())return[];let s=yl(e,n,o,!1),u=hS(s,!1,!1,!1);if(e.session.checkpoint())return[];let c={kind:"supermana"};if(s.safeSupermanaProgress&&!i.some(M=>pS(e,M,o,c))&&Iu(i,lS(e,n,o,cS(t),c)),e.session.checkpoint())return[];let l={kind:"regular",color:q(o)};if(s.safeOpponentManaProgress&&!i.some(M=>pS(e,M,o,l))&&Iu(i,lS(e,n,o,cS(t),l)),e.session.checkpoint())return[];if((t.policy.hardSpiritDeployment||t.policy.preferSpiritDevelopment)&&(Aa(n,o)||u>0||s.spiritAssistedSupermanaProgress||s.spiritAssistedOpponentManaProgress)&&!i.some(M=>kS(e,M.game,M.events,o))&&Iu(i,eP(e,n,o,t,XR(t))),e.session.cancelled)return[];let m={rootCalls:t.budget.exactLiteRootCalls,staticCalls:t.budget.exactLiteStaticCalls},d,y=p(()=>(d??(d=bS(e,n,o)),d),"getSourceSnapshot"),f=[],h=p(M=>{for(let R of M){if(e.session.checkpoint())return!1;let P=uS(t,o,R,m),g=pl(e,n,R,o,P,a,y);if(e.session.checkpoint())return!1;g!==void 0&&f.push(g)}return!0},"appendCandidates");if(!h(i))return[];if(f.length===0){let M=to(e,n,JR(t),In);if(e.session.checkpoint()||!h(M))return[]}let C=f.map((M,R)=>({...M,rootRank:R}));C.sort(Du);let b=C.some(M=>M.winsImmediately),k;if(!b&&!C.some(M=>M.attacksOpponentDrainer)&&tP(n,o)){let M=aP(e,n,o,t,qR(t),t.policy.targetedDrainerAttackFallback);if(e.session.checkpoint())return[];if(M.length>0){k=new Set(M.map(P=>hn(P.inputs)));let R=new Set(C.map(P=>hn(P.inputs)));for(let P of M){if(e.session.checkpoint())return[];let g=hn(P.inputs);if(R.has(g))continue;R.add(g);let W=uS(t,o,P,m),E=pl(e,n,P,o,W,a,y);if(e.session.checkpoint())return[];E!==void 0&&C.push({...E,rootRank:0})}C.sort(Du),b=C.some(P=>P.winsImmediately)}}if(!b&&C.some(M=>M.attacksOpponentDrainer)?C=C.filter(M=>M.attacksOpponentDrainer):k!==void 0&&(C=C.filter(M=>k.has(hn(M.inputs)))),C=KR(C,t.search.rootBranchLimit),C=C.map((M,R)=>({...M,rootRank:R})),n.fen()!==r)throw new Error("root candidate enumeration mutated its source game");return e.session.checkpoint()?[]:C}p(Xn,"rankRootCandidates");function ks(e,n,o,t){let r=e.winnerColor();if(r===void 0)return;let a=Math.max(0,t-o);return r===n?268435455-a:-268435455+a}p(ks,"terminalSearchScore");var iP=2400,PS=110,sP=32768,uP=Symbol("preferability-cache");function TS(e){return e.caches.session.getOrCreate(uP,()=>new Te(sP))}p(TS,"preferabilityCache");function bl(e,n,o,t,r,a=ie(n)){let i=TS(e),s=Vn(o),u=va(t.evaluation.weights),c=i.get(a,s,void 0,u);if(c!==void 0)return r.cacheHits+=1,c;let l=Vt(e,n,o,t.evaluation.weights,!1);return e.session.cacheWriteAllowed&&(i.size>=t.evaluation.cacheCapacity&&!i.has(a,s,void 0,u)&&i.clear(),i.set(a,l,s,void 0,u)),l}p(bl,"cachedPreferability");function wS(e){let n=0;return e.immediateScore&&(n+=1e3),e.drainerAttack&&(n+=700),e.drainerSafetyRecover&&(n+=500),e.carrierProgress&&(n+=220),e.material&&(n+=80),n}p(wS,"classPriority");function cP(e,n){return-Zd(e,n)}p(cP,"compareHashesDescending");function pP(e,n,o){if(e.heuristic!==n.heuristic)return o?n.heuristic-e.heuristic:e.heuristic-n.heuristic;if(e.orderingEfficiency!==n.orderingEfficiency)return n.orderingEfficiency-e.orderingEfficiency;let t=wS(n.classes)-wS(e.classes);return t!==0?t:cP(e.hash,n.hash)}p(pP,"compareRankedChildren");function gS(e,n,o){return o?v(e,PS)>=n:e<=v(n,PS)}p(gS,"childWithinCoverageMargin");function hl(e){return e.classes.immediateScore||e.classes.drainerAttack||e.classes.drainerSafetyRecover||e.classes.carrierProgress||e.orderingEfficiency>0&&!e.classes.material}p(hl,"isPriorityChild");function lP(e,n,o,t=!0){if(e.length<=n||n===0)return[...e];let r=e[n-1]?.heuristic??0,a=e.findIndex((u,c)=>c>=n&&hl(u)&&(t||gS(u.heuristic,r,o)));if(a<0)return e.slice(0,n);let i=new Array(e.length).fill(!1);i[a]=!0;let s=1;for(let u=0;u<i.length&&!(s>=n);u+=1)i[u]!==!0&&(i[u]=!0,s+=1);return e.filter((u,c)=>i[c]===!0)}p(lP,"truncateChildrenWithCoverage");function dP(e,n,o=!0){if(e.length<3||e.slice(0,2).some(hl))return;let t=e[1]?.heuristic??0,r=e.findIndex((a,i)=>i<2||!hl(a)?!1:o||gS(a.heuristic,t,n));if(r>=2){let a=e[1],i=e[r];a!==void 0&&i!==void 0&&(e[1]=i,e[r]=a)}}p(dP,"enforceTacticalChildTop2");function mP(e,n,o){return!o.material&&e<=0&&!n&&!o.immediateScore&&!o.drainerAttack&&!o.drainerSafetyRecover&&!o.carrierProgress}p(mP,"isQuietReductionCandidate");function fP(e,n,o){return e||n>0&&!o.quiet&&!o.material}p(fP,"isSelectiveExtensionCandidate");function yP(e,n,o,t){if(n.execution.session.checkpoint())return[];let r=e.activeColor===n.perspective,a=e.activeColor,i=Eu(n.execution,e,n.perspective,!1,!1,o),s=Gn(n.execution,e,a),u=[];for(let c of to(n.execution,e,n.config.search.nodeEnumerationLimit)){if(n.execution.session.checkpoint())return[];let l=ie(c.game),m=Gn(n.execution,c.game,a),d=dl(n.execution,e,c,a,s,m),y=Ou(n.execution,e,c.game,a,c.events,i,l,{isRoot:!1,applyBacktrackPenalty:!1,applyRootManaHandoffGuard:!1,includeTacticalExact:!1,includeStrategicExact:!1,rootBacktrackPenalty:n.config.evaluation.rootBacktrackPenalty,rootManaHandoffPenalty:n.config.evaluation.rootManaHandoffPenalty}),f=ks(c.game,n.perspective,0,n.config.budget.depth)??bl(n.execution,c.game,n.perspective,n.config,n.stats,l);f=v(f,ml(a,n.perspective,c.events)),t!==void 0&&Dc(l,t)&&(f=v(f,iP));let h=s!==m||c.events.some(C=>C.kind==="mana-scored"||C.kind==="mon-fainted"&&C.mon.kind===A.Drainer);u.push({game:c.game,hash:l,heuristic:f,orderingEfficiency:y,tacticalExtensionTrigger:h,quietReductionCandidate:mP(y,h,d),classes:d})}return u.sort((c,l)=>pP(c,l,r)),dP(u,r,!0),lP(u,n.config.search.nodeBranchLimit,r,!0)}p(yP,"rankedChildren");function Ua(e,n,o){return ks(e,o.perspective,0,o.config.budget.depth)??bl(o.execution,e,o.perspective,o.config,o.stats,n)}p(Ua,"staticScore");function SP(e,n,o,t,r){let a=Ua(e,n,r),i=e.activeColor===r.perspective;if(i&&a>=t||!i&&a<=o)return a;r.stats.quiescenceNodes+=1;let s=a,u=i?Math.max(o,s):Math.min(t,s);for(let c of to(r.execution,e,Math.min(r.config.search.quiescenceEnumerationLimit,r.config.search.nodeEnumerationLimit))){if(r.stats.visitedNodes>=r.config.budget.maxVisitedNodes||r.execution.session.checkpoint())break;if(!yf(c.events))continue;r.stats.visitedNodes+=1;let l=ie(c.game),m=bl(r.execution,c.game,r.perspective,r.config,r.stats,l);if(s=i?Math.max(s,m):Math.min(s,m),u=i?Math.max(u,s):Math.min(u,s),i&&u>=t||!i&&u<=o)break}return s}p(SP,"quiescenceScore");function Wu(e,n,o,t,r,a,i){let s=ks(e,i.perspective,o,i.config.budget.depth);if(s!==void 0)return s;if(i.execution.session.checkpoint())return 0;if(i.stats.visitedNodes>=i.config.budget.maxVisitedNodes)return Ua(e,n,i);if(o<=0)return i.config.search.quiescence&&i.stats.quiescenceNodes<i.config.budget.quiescenceNodes?SP(e,n,t,r,i):Ua(e,n,i);let u=t,c=r,l=u,m=c,d,y=i.config.search.transpositionTable?i.transposition.get(n):void 0;if(y!==void 0&&(i.stats.cacheHits+=1,Qd(y.bestChildHash)||(d=y.bestChildHash),y.depth>=o&&(y.bound==="exact"||(y.bound==="lower"?u=Math.max(u,y.score):c=Math.min(c,y.score),u>=c))))return y.score;let f=e.activeColor===i.perspective;if(i.config.search.futilityPruning&&o===1&&!SS(i.execution,e)){let M=Ua(e,n,i);if(f&&v(M,i.config.search.futilityMargin)<u||!f&&_(M,i.config.search.futilityMargin)>c)return M}let h=yP(e,i,n,d);if(h.length===0)return Ua(e,n,i);let C=f?-2147483648:2147483647,b=Yd,k=!1;for(let M of h){if(i.stats.visitedNodes>=i.config.budget.maxVisitedNodes){k=!0;break}let R=Math.max(0,o-1),P=a;i.config.search.selectiveExtensions&&fP(M.tacticalExtensionTrigger,M.orderingEfficiency,M.classes)&&P>0&&(i.extensionNodeBudget===0||i.stats.extensionNodes<i.extensionNodeBudget)?(R=o,P-=1,i.extensionNodeBudget>0&&(i.stats.extensionNodes+=1)):i.config.search.quietReductions&&M.quietReductionCandidate&&o>=i.config.search.quietReductionDepthThreshold&&(R=Math.max(0,o-2)),i.stats.visitedNodes+=1;let g=Wu(M.game,M.hash,R,u,c,P,i);if((f&&g>C||!f&&g<C)&&(C=g,b=M.hash),f?u=Math.max(u,C):c=Math.min(c,C),u>=c||i.execution.session.checkpoint())break}if((C===-2147483648||C===2147483647)&&(C=Ua(e,n,i)),i.config.search.transpositionTable&&!k&&i.execution.session.cacheWriteAllowed){let M=C<=l?"upper":C>=m?"lower":"exact";i.transposition.size>=i.config.search.transpositionCapacity&&!i.transposition.has(n)&&i.transposition.clear(),i.transposition.set(n,{depth:o,score:C,bound:M,bestChildHash:b})}return C}p(Wu,"boundedSearch");function Cl(e,n,o){return{execution:e,perspective:n,config:o,transposition:new Te(o.search.transpositionCapacity),extensionNodeBudget:o.search.selectiveExtensions?Math.max(1,Math.floor(o.budget.maxVisitedNodes*o.budget.extensionNodeShareBp/1e4)):0,stats:{visitedNodes:0,cacheHits:0,quiescenceNodes:0,extensionNodes:0}}}p(Cl,"createSearchContext");function hP(e){let n=ie(e.game);return Dc(n,e.stateHash)?e:{...e,stateHash:n}}p(hP,"candidateWithCurrentStateHash");function bP(e,n){return e.score>n.score||e.score===n.score&&Du(e,n)<0}p(bP,"betterEvaluation");function CP(e,n){let o=[],t,r=-2147483648;for(let a of e){if(n.stats.visitedNodes>=n.config.budget.maxVisitedNodes||n.execution.session.checkpoint())break;n.stats.visitedNodes+=1;let i=n.config.budget.depth<=1?a.heuristic:Wu(a.game,a.stateHash,n.config.budget.depth-1,r,2147483647,n.config.search.maxExtensionsPerPath,n),s={...a,score:i,nodesAfter:n.stats.visitedNodes};o.push(s),(t===void 0||bP(s,t))&&(t=s),r=Math.max(r,i)}return{evaluations:o,best:t}}p(CP,"evaluateFocusedRoots");function vS(e,n,o,t,r){let a=Cl(e,o,r),i=ie(n);return Wu(n,i,Math.max(0,t),-2147483648,2147483647,r.search.maxExtensionsPerPath,a)}p(vS,"evaluateSearchScore");function Ml(e,n,o,t,r,a={},i=t.search.transpositionTable){let s=n.fen(),u=r?r.map(hP):Xn(e,n,o,t),c,l=xy({rootMoves:u,perspective:o,config:t,useTranspositionTable:i,...a.priorityInputs===void 0?{}:{priorityInputs:a.priorityInputs},...a.forcedInputs===void 0?{}:{forcedInputs:a.forcedInputs},...a.qualifiesPlainSpiritPlan===void 0?{}:{qualifiesPlainSpiritPlan:a.qualifiesPlainSpiritPlan},...a.qualifiesDrainerSafetyRecoveryPlan===void 0?{}:{qualifiesDrainerSafetyRecoveryPlan:a.qualifiesDrainerSafetyRecoveryPlan},evaluateDeeperScout:p(m=>(c??(c=Cl(e,o,ke(m.config,{search:{transpositionTable:m.useTranspositionTable}}))),c.stats.visitedNodes=Math.max(c.stats.visitedNodes,m.visitedNodes),{score:Wu(m.candidate.game,m.candidate.stateHash,m.depth,m.alpha,2147483647,0,c),visitedNodes:c.stats.visitedNodes}),"evaluateDeeperScout"),checkpoint:p(()=>e.session.checkpoint(),"checkpoint"),cancelled:p(()=>e.session.cancelled,"cancelled")});if(n.fen()!==s)throw new Error("root focus mutated its source game");return{candidates:l.candidates,scoutVisitedNodes:l.scoutVisitedNodes}}p(Ml,"focusRootCandidatesForSearch");function kl(e,n,o,t,r,a={}){let i=n.fen(),s=Ml(e,n,o,t,r,a),u=s.candidates,c=Cl(e,o,t);c.stats.visitedNodes=s.scoutVisitedNodes;let{evaluations:l,best:m}=CP(u,c);if(n.fen()!==i)throw new Error("bounded search mutated its source game");return{best:m,evaluations:l,visitedNodes:c.stats.visitedNodes,cacheHits:c.stats.cacheHits,timedOut:c.execution.session.cancelled}}p(kl,"searchRootCandidates");function Rl(e){TS(e).clear(),eS(e),bi(e)}p(Rl,"clearSearchCaches");function AS(e){return!e.winsImmediately&&!e.attacksOpponentDrainer&&!Xp(e)&&!e.spiritDevelopment&&!e.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&!e.supermanaProgress&&!e.opponentManaProgress&&!e.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!e.safeSupermanaPickupNow&&!e.safeOpponentManaPickupNow&&e.sameTurnScoreWindowValue<=0&&!e.manaHandoffToOpponent&&!e.hasRoundtrip}p(AS,"isFlatLateManaOnlyReplyRoot");function IS(e,n,o,t,r,a){if(!I(a)||!a.replyRisk.lateSafeManaRootPreference||e.activeColor!==T.White||e.turnNumber<6||e.monsMovesCount!==0||e.playerCanUseAction()||!e.playerCanMoveMana()||o.allowsImmediateOpponentWin||r.allowsImmediateOpponentWin||o.opponentReachesMatchPoint||r.opponentReachesMatchPoint||!AS(n)||!AS(t))return;let i,s,u;if(!n.ownDrainerVulnerable&&t.ownDrainerVulnerable)i=n,s=t,u=!0;else if(n.ownDrainerVulnerable&&!t.ownDrainerVulnerable)i=t,s=n,u=!1;else return;if(!(s.score<=i.score||_(s.score,i.score)>16||Math.abs(s.rootRank-i.rootRank)>4||s.efficiency<=i.efficiency))return u?1:-1}p(IS,"lateSafeManaRootOrder");function ES(e,n,o,t,r,a){let i=Math.max(0,Be(n,o)-t),s=n.winnerColor();if(s!==void 0){let h=s===o;return{allowsImmediateOpponentWin:!h,opponentReachesMatchPoint:!h,opponentMaxScoreGain:h?0:Ee,myScoreGain:i,worstReplyScore:h?Math.trunc(yn/2):-Math.trunc(yn/2)}}if(n.activeColor===o)return{allowsImmediateOpponentWin:!1,opponentReachesMatchPoint:!1,opponentMaxScoreGain:0,myScoreGain:i,worstReplyScore:Lo(e,n,o,r)};let u=o===T.White?T.Black:T.White,c=Be(n,u),l=to(e,n,Math.max(1,Math.trunc(a)));if(l.length===0)return{allowsImmediateOpponentWin:!1,opponentReachesMatchPoint:!1,opponentMaxScoreGain:0,myScoreGain:i,worstReplyScore:Math.trunc(yn/4)};let m=!1,d=!1,y=0,f=2147483647;for(let h of l){let C=h.game,b=Be(C,u);y=Math.max(y,Math.max(0,b-c)),Ee-b<=1&&(d=!0);let k=C.winnerColor(),M;if(k===o?M=Math.trunc(yn/2):k!==void 0?(m=!0,d=!0,M=-Math.trunc(yn/2)):M=Lo(e,C,o,r),f=Math.min(f,M),m)break}return f===2147483647&&(f=Lo(e,n,o,r)),{allowsImmediateOpponentWin:m,opponentReachesMatchPoint:d,opponentMaxScoreGain:y,myScoreGain:i,worstReplyScore:f}}p(ES,"normalRootSafetySnapshot");function OS(e,n,o,t){return e.allowsImmediateOpponentWin!==o.allowsImmediateOpponentWin?!e.allowsImmediateOpponentWin:e.opponentReachesMatchPoint!==o.opponentReachesMatchPoint?!e.opponentReachesMatchPoint:e.opponentMaxScoreGain!==o.opponentMaxScoreGain?e.opponentMaxScoreGain<o.opponentMaxScoreGain:e.myScoreGain!==o.myScoreGain?e.myScoreGain>o.myScoreGain:e.worstReplyScore!==o.worstReplyScore?e.worstReplyScore>o.worstReplyScore:n>t}p(OS,"betterNormalRootSafetyCandidate");function xS(e){return!e.winsImmediately&&!e.attacksOpponentDrainer&&!Xp(e)&&!e.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!e.safeSupermanaPickupNow&&!e.safeOpponentManaPickupNow&&e.sameTurnScoreWindowValue===0}p(xS,"quietNonTacticalReplyRiskRoot");function MP(e,n,o,t,r){if(e.session.checkpoint())return 0;let a=n.winnerColor();if(a!==void 0)return a===o?Math.trunc(yn/2):-Math.trunc(yn/2);if(n.activeColor===o)return Lo(e,n,o,t);let i=p((d,y,f)=>Math.min(f,Math.max(y,Math.trunc(d))),"clamp"),s=i(t.search.nodeBranchLimit,5,12),u=i(Math.max(0,t.search.nodeBranchLimit-4),4,10),c=ke(t,{budget:{depth:1,maxVisitedNodes:i(t.budget.maxVisitedNodes/18,110,360)},search:{rootBranchLimit:s,nodeBranchLimit:u,rootEnumerationLimit:i(s*3,s,48),nodeEnumerationLimit:i(u*3,u,36)}}),l=to(e,n,Math.max(1,Math.trunc(r)));if(e.session.cancelled)return 0;if(l.length===0)return Math.trunc(yn/4);let m=2147483647;for(let d of l){if(e.session.checkpoint())return 0;let y=d.game.winnerColor(),f=y===o?Math.trunc(yn/2):y!==void 0?-Math.trunc(yn/2):vS(e,d.game,o,1,c);if(e.session.checkpoint())return 0;m=Math.min(m,f)}return m===2147483647?Lo(e,n,o,t):m}p(MP,"normalRootSafetyDeepFloorScore");function NS(e,n,o,t,r,a,i,s){if(!I(s)||!s.replyRisk.safetyRerank||!xS(o)||!xS(r)||Math.abs(o.rootRank-r.rootRank)>8||Math.abs(o.score-r.score)>160||Math.abs(t.worstReplyScore-a.worstReplyScore)>320||!(z(o)||z(r)||o.spiritOwnManaSetupNow||r.spiritOwnManaSetupNow||o.spiritSameTurnScoreSetupNow||r.spiritSameTurnScoreSetupNow||$n(o,r)||Wr(o,r,s)))return;let c=Math.min(36,Math.max(12,Math.trunc(s.search.nodeEnumerationLimit))),l=Be(n,i),m=ES(e,o.game,i,l,s,c),d=ES(e,r.game,i,l,s,c);if(m.allowsImmediateOpponentWin!==d.allowsImmediateOpponentWin||m.opponentReachesMatchPoint!==d.opponentReachesMatchPoint||m.opponentMaxScoreGain!==d.opponentMaxScoreGain||m.myScoreGain!==d.myScoreGain||m.worstReplyScore!==d.worstReplyScore){if(OS(m,o.score,d,r.score))return 1;if(OS(d,r.score,m,o.score))return-1}let f=Ee-Be(n,i),h=Ee-Be(n,i===T.White?T.Black:T.White);if(s.replyRisk.deepSafetyFloor&&(f<=3||h<=3)){let C=p(M=>MP(e,M,i,s,c),"floor"),b=C(o.game),k=C(r.game);if(b!==k)return b>k?1:-1}}p(NS,"normalSafetyReplyOrder");function Xt(e){return dt.length-Kn(e)-1}p(Xt,"closeSpiritGoalFamilyPriority");function kP(e,n){return e.plan.headFamily!==S.SpiritImpact||n.plan.headFamily!==S.SpiritImpact?0:Xt(e.plan.goalFamily)-Xt(n.plan.goalFamily)}p(kP,"compareCloseSpiritGoalFamily");function Yt(e,n,o){if(o){let t=J(e.plan.headUtility,n.plan.headUtility);if(t!==0||(t=J(e.plan.utility,n.plan.utility),t!==0))return t;let r=e.plan.headFamily===S.SpiritImpact,a=n.plan.headFamily===S.SpiritImpact;if(r!==a)return r?1:-1;if(t=kP(e,n),t!==0)return t}return so(e.plan,n.plan)}p(Yt,"compareSpiritProjectionPlans");function Rs(e,n,o,t,r){if(!I(r))return;let a=n.plan.headFamily===S.SpiritImpact,i=t.plan.headFamily===S.SpiritImpact;if(a===i)return;let s=a?o:e,u=a?t:n,c=a?e:o,l=a?n:t,m=Xt(l.plan.goalFamily),d=Xt(u.plan.goalFamily);if(!(m>Xt(S.SpiritImpact)||d<m||s.worstReplyScore<v(c.worstReplyScore,128)||J(u.plan.utility,l.plan.utility)<0&&!io(u.plan.utility,l.plan.utility)))return a?-1:1}p(Rs,"mixedPlainSpiritReplyFloorOrder");function Pl(e,n,o,t,r,a,i,s,u,c){if(!Tn(u))return;let l=r.plan.headFamily===S.SpiritImpact,m=i.plan.headFamily===S.SpiritImpact;if(l===m)return;let d=o[t],y=o[a];if(d===void 0||y===void 0)return;let f=l?y:d,h=l?i:r,C=l?d:y,b=l?r:i,k=!l,M=bt(e,n,o,t,a,s,u,c),R=k?t:a,P=k?a:t,g=Xt(h.plan.goalFamily),W=Xt(b.plan.goalFamily);return g>=W&&W<=Xt(S.SpiritImpact)&&f.score>=C.score&&po(o,R,P)>0&&J(h.plan.utility,b.plan.utility)>=0?k?1:-1:W>g&&J(b.plan.utility,h.plan.utility)>=0&&J(b.plan.headUtility,h.plan.headUtility)>=0?k?-1:1:(h.plan.headFamily===S.SafeSupermanaProgress||h.plan.headFamily===S.SafeOpponentManaProgress||h.plan.headFamily===S.DrainerSafetyRecovery)&&(M===0||io(h.plan.utility,b.plan.utility))&&f.score>=C.score&&so(h.plan,b.plan)>0?k?1:-1:l?1:-1}p(Pl,"mixedPlainSpiritProjectionOrder");function DS(e,n,o,t,r,a,i,s,u){if(!I(s)||t.length<2)return;let c=t.filter(m=>{let d=o[m];return d!==void 0&&F(d)});if(c.length<2||c.some(m=>!a.has(m)))return;let l=c[0];if(l!==void 0){for(let m of c.slice(1)){let d=o[m],y=o[l],f=a.get(m),h=a.get(l),C=r.get(m),b=r.get(l);if(d===void 0||y===void 0||f===void 0||h===void 0||C===void 0||b===void 0)continue;let k=Cs(e,n,o,m,C,l,b,i,s,u);k??(k=Rs(C,f,b,h,s)),k??(k=Pl(e,n,o,m,f,l,h,i,s,u)),k===void 0&&(f.plan.headFamily===S.SpiritImpact&&h.plan.headFamily===S.SpiritImpact?k=Yt(f,h,Math.abs(d.score-y.score)<=192):(k=bt(e,n,o,m,l,i,s,u),k??(k=po(o,m,l)))),k>0&&(l=m)}return l}}p(DS,"plainSpiritReplyRiskPick");function Gr(e,n,o,t){let r=F(e),a=F(o);if(r===a||n===void 0||t===void 0)return;let i=r?o:e,s=r?t:n,u=r?e:o,c=r?n:t,l=x(i),m=x(u),d=l&&!m&&(Ut(s.plan.utility)&&J(s.plan.utility,c.plan.utility)>=0&&io(s.plan.utility,c.plan.utility)||s.plan.goalFamily===S.ImmediateScore&&J(s.plan.utility,c.plan.utility)>=0);if(!(l&&!m&&!d)){if(d)return r?-1:1;if(!(s.plan.headFamily===S.SpiritImpact||!ao(s.plan.utility,c.plan.utility)||J(s.plan.headUtility,c.plan.headUtility)<0||J(s.plan.utility,c.plan.utility)<=0))return r?-1:1}}p(Gr,"spiritProjectionChallengeOrder");function wl(e,n,o,t,r,a,i={}){if(n.winsImmediately!==t.winsImmediately)return n.winsImmediately;if(n.attacksOpponentDrainer!==t.attacksOpponentDrainer)return n.attacksOpponentDrainer;if(o.allowsImmediateOpponentWin!==r.allowsImmediateOpponentWin)return!o.allowsImmediateOpponentWin;if(o.opponentReachesMatchPoint!==r.opponentReachesMatchPoint)return!o.opponentReachesMatchPoint;let s=i.game!==void 0&&i.evaluations!==void 0&&i.candidateIndex!==void 0&&i.incumbentIndex!==void 0&&i.perspective!==void 0,u=i.spiritFollowupScores??new Map;if(i.game!==void 0){let f=IS(i.game,n,o,t,r,a);if(f!==void 0)return f>0}let c=Ly(n,o,t,r,i.candidateProjection,i.incumbentProjection,a);if(c!==void 0)return c>0;let l=Gy(n,o,t,r,a);if(l!==void 0)return l>0;if(i.game!==void 0){let f=al(i.game,n,o,t,r,a);if(f!==void 0)return f>0}if(s){let f=i.game,h=i.evaluations,C=i.candidateIndex,b=i.incumbentIndex,k=i.perspective,M=il(e,f,h,C,o,b,r,k,a,u);if(M!==void 0)return M>0;let R=sl(e,f,h,C,o,b,r,k,a,u);if(R!==void 0)return R>0;let P=bs(e,f,h,C,o,b,r,k,a,u);if(P!==void 0)return P>0;let g=Cs(e,f,h,C,o,b,r,k,a,u);if(g!==void 0)return g>0;let W=ul(f,n,o,t,r,a);if(W!==void 0)return W>0}let m=Hy(n,o,t,r,a);if(m!==void 0)return m>0;if(i.game!==void 0&&i.perspective!==void 0){let f=NS(e,i.game,n,o,t,r,i.perspective,a);if(f!==void 0)return f>0}let d=n.classes.carrierProgress&&!t.classes.carrierProgress,y=t.classes.carrierProgress&&!n.classes.carrierProgress;if((d||y)&&!n.classes.immediateScore&&!n.classes.drainerAttack&&!n.classes.drainerSafetyRecover&&!t.classes.immediateScore&&!t.classes.drainerAttack&&!t.classes.drainerSafetyRecover&&Math.abs(o.worstReplyScore-r.worstReplyScore)<=80)return d;if(a.replyRisk.preferCleanRoots){if(n.manaHandoffToOpponent!==t.manaHandoffToOpponent)return!n.manaHandoffToOpponent;if(n.hasRoundtrip!==t.hasRoundtrip)return!n.hasRoundtrip}if(Uy(n,o,t,r,a)){if(i.candidateProjection!==void 0&&i.incumbentProjection!==void 0&&Math.abs(n.score-t.score)<=16&&n.efficiency===t.efficiency){let h=Rs(o,i.candidateProjection,r,i.incumbentProjection,a);if(h!==void 0)return h>0;if(s){let b=Pl(e,i.game,i.evaluations,i.candidateIndex,i.candidateProjection,i.incumbentIndex,i.incumbentProjection,i.perspective,a,u);if(b!==void 0)return b>0}if(i.candidateProjection.plan.headFamily===S.SpiritImpact||i.incumbentProjection.plan.headFamily===S.SpiritImpact){let b=Yt(i.candidateProjection,i.incumbentProjection,Math.abs(n.score-t.score)<=192);if(b!==0)return b>0}}if(s){let h=bt(e,i.game,i.evaluations,i.candidateIndex,i.incumbentIndex,i.perspective,a,u);return h!==void 0&&h!==0?h>0:po(i.evaluations,i.candidateIndex,i.incumbentIndex)>0}if(n.score!==t.score)return n.score>t.score;let f=La(n,t);return f<0||f===0&&n.rootRank<t.rootRank}if(s){let f=bt(e,i.game,i.evaluations,i.candidateIndex,i.incumbentIndex,i.perspective,a,u);if(f!==void 0&&f!==0)return f>0}if(I(a)&&Math.abs(o.worstReplyScore-r.worstReplyScore)>240)return o.worstReplyScore>r.worstReplyScore;if(I(a)&&n.policyPriority!==t.policyPriority&&n.efficiency>=t.efficiency)return n.policyPriority>t.policyPriority;if(a.replyRisk.deterministicTiebreak&&n.spiritOwnManaSetupNow!==t.spiritOwnManaSetupNow){let f=Wr(n,t,a);if(!I(a)||f||Math.abs(o.worstReplyScore-r.worstReplyScore)<=120)return n.spiritOwnManaSetupNow}if(a.replyRisk.deterministicTiebreak&&n.spiritOwnManaSetupNow&&t.spiritOwnManaSetupNow&&n.supermanaProgress&&t.supermanaProgress&&n.safeSupermanaProgressSteps!==t.safeSupermanaProgressSteps)return $e(n.safeSupermanaProgressSteps,t.safeSupermanaProgressSteps);if(a.replyRisk.deterministicTiebreak&&n.spiritOwnManaSetupNow&&t.spiritOwnManaSetupNow&&n.opponentManaProgress&&t.opponentManaProgress&&n.safeOpponentManaProgressSteps!==t.safeOpponentManaProgressSteps)return $e(n.safeOpponentManaProgressSteps,t.safeOpponentManaProgressSteps);if(a.replyRisk.deterministicTiebreak&&n.spiritOwnManaSetupNow&&t.spiritOwnManaSetupNow&&n.scorePathBestSteps!==t.scorePathBestSteps)return Ir(n.scorePathBestSteps,t.scorePathBestSteps);if(a.replyRisk.deterministicTiebreak&&n.spiritDevelopment!==t.spiritDevelopment){let f=Gr(n,i.candidateProjection,t,i.incumbentProjection);if(f!==void 0)return f>0;let h=Va(n,t);if(h!==void 0&&(!I(a)||Math.abs(o.worstReplyScore-r.worstReplyScore)<=120))return h>0;if(!I(a)||Math.abs(o.worstReplyScore-r.worstReplyScore)<=120)return n.spiritDevelopment}if(i.candidateProjection!==void 0&&i.incumbentProjection!==void 0){let f=Math.abs(o.worstReplyScore-r.worstReplyScore)<=100,h=!o.allowsImmediateOpponentWin&&!r.allowsImmediateOpponentWin&&!o.opponentReachesMatchPoint&&!r.opponentReachesMatchPoint,C=Tu(i.candidateProjection.plan.headFamily)||Tu(i.incumbentProjection.plan.headFamily),b=n.spiritOwnManaSetupNow||t.spiritOwnManaSetupNow||n.spiritSameTurnScoreSetupNow||t.spiritSameTurnScoreSetupNow||n.spiritDevelopment||t.spiritDevelopment;if(I(a)&&F(n)&&F(t)&&f&&Bo(i.candidateProjection.plan.utility)&&Bo(i.incumbentProjection.plan.utility)&&h){let R=Yt(i.candidateProjection,i.incumbentProjection,Math.abs(n.score-t.score)<=192);if(R!==0)return R>0}if(I(a)&&n.spiritDevelopment&&t.spiritDevelopment&&!n.spiritSameTurnScoreSetupNow&&!t.spiritSameTurnScoreSetupNow&&!n.spiritOwnManaSetupNow&&!t.spiritOwnManaSetupNow&&f&&h){let R=Yt(i.candidateProjection,i.incumbentProjection,Math.abs(n.score-t.score)<=192);if(R!==0)return R>0}if(C&&h&&f&&!b){let R=so(i.candidateProjection.plan,i.incumbentProjection.plan);if(R!==0)return R>0}}return n.policyPriority!==t.policyPriority?n.policyPriority>t.policyPriority:o.worstReplyScore!==r.worstReplyScore?o.worstReplyScore>r.worstReplyScore:n.score!==t.score?n.score>t.score:n.efficiency!==t.efficiency?n.efficiency>t.efficiency:!1}p(wl,"isBetterReplyRiskCandidate");function ja(e,n,o){return I(o)&&O(e)===S.ManaTempo&&O(n)===S.ManaTempo&&e.efficiency===n.efficiency&&!e.ownDrainerVulnerable&&!n.ownDrainerVulnerable&&!e.ownDrainerWalkVulnerable&&!n.ownDrainerWalkVulnerable&&!x(e)&&!x(n)&&$n(e,n)}p(ja,"isProductionModeWhiteManaSiblingPair");function Ps(e,n,o,t,r,a){if(!I(a)||n.activeColor!==T.White||n.turnNumber!==3||n.monsMovesCount<4)return;let i=[...t].filter(d=>{let y=o[d];return y!==void 0&&O(y)===S.ManaTempo&&!y.ownDrainerVulnerable&&!y.ownDrainerWalkVulnerable&&!x(y)&&!y.manaHandoffToOpponent&&!y.hasRoundtrip&&!y.winsImmediately&&!y.attacksOpponentDrainer&&y.sameTurnScoreWindowValue===0&&!y.scoresSupermanaThisTurn&&!y.scoresOpponentManaThisTurn&&!y.safeSupermanaPickupNow&&!y.safeOpponentManaPickupNow}).sort((d,y)=>-po(o,d,y))[0];if(i===void 0)return;let s=o[i];if(s===void 0)return;let u=Vo(e,n,s,r,a,S.ManaTempo),c,l,m=!1;return o.forEach((d,y)=>{let f=ja(d,s,a)&&_(s.score,d.score)<=24&&Math.abs(s.rootRank-d.rootRank)<=4&&d.rootRank<s.rootRank;if(t.includes(y)||O(d)!==S.ManaTempo||d.ownDrainerVulnerable||d.ownDrainerWalkVulnerable||x(d)||d.manaHandoffToOpponent||d.hasRoundtrip||d.winsImmediately||d.attacksOpponentDrainer||d.sameTurnScoreWindowValue>0||d.scoresSupermanaThisTurn||d.scoresOpponentManaThisTurn||d.safeSupermanaPickupNow||d.safeOpponentManaPickupNow||!f&&d.score<_(s.score,96)||d.rootRank>=s.rootRank&&!f)return;let h=Vo(e,n,d,r,a,S.ManaTempo),b=J(h,u)>0||Fn(h,u);if(!b&&!f)return;let k=c,M=l,R=k===void 0||M===void 0;if(k!==void 0&&M!==void 0){let P=o[k];if(P===void 0)R=!0;else{let g=ja(P,s,a)&&_(s.score,P.score)<=24&&Math.abs(s.rootRank-P.rootRank)<=4&&P.rootRank<s.rootRank;if(b!==m)R=b;else if(b){let W=J(h,M);R=W>0||W===0&&po(o,y,k)>0}else f&&g?R=d.rootRank<P.rootRank||d.rootRank===P.rootRank&&po(o,y,k)>0:R=f}}R&&(c=y,l=h,m=b)}),c}p(Ps,"productionWhiteTurnFourManaSiblingReentry");function Lr(e,n,o,t,r,a,i=t){if(!a.replyRisk.enabled||e.session.checkpoint())return;let s=Dr(e,o,t,a);if(s.length===0)return;let u=Ps(e,n,o,s,r,a);u!==void 0&&!s.includes(u)&&(s=[...s,u].sort((b,k)=>-po(o,b,k)));let c=Math.max(s.length,1,Math.trunc(a.budget.maxVisitedNodes*Math.max(0,a.replyRisk.nodeShareBp)/1e4)),l=Math.min(Math.max(1,a.replyRisk.replyLimit),Math.max(1,Math.trunc(c/s.length))),m=tl(e,o,s,r,a),d=new Map;for(let b of s){if(e.session.checkpoint())return;let k=o[b];if(k===void 0)continue;let M=m.get(b);if(M!==void 0){d.set(b,gu(e,k,M,r,a,l));continue}let P=a.planner.enabled&&I(a)&&nt(k,r)&&!F(k)?k.game:void 0;d.set(b,pn(e,P??k.game,r,a,l))}let y=new Map,f=DS(e,n,o,s,d,m,r,a,y);if(s.every(b=>{let k=o[b];return k!==void 0&&F(k)}))return f;if(I(a)&&s.every(b=>{let k=d.get(b);return k!==void 0&&!k.allowsImmediateOpponentWin&&!k.opponentReachesMatchPoint})&&!ms(o,s,a)&&!ys(n,o,s,a)&&!Qp(o,s,a)&&!Jp(n,o,s,a)&&!el(o,s,a)){let b=[...s].sort((R,P)=>{let g=d.get(R)?.worstReplyScore??-2147483648;return(d.get(P)?.worstReplyScore??-2147483648)-g||-po(o,R,P)}),k=b[0],M=b[1];if(k!==void 0&&(M===void 0||(d.get(k)?.worstReplyScore??-2147483648)>(d.get(M)?.worstReplyScore??-2147483648)))return k}let h=f??s.find(b=>d.has(b));if(h===void 0)return;for(let b of s){if(b===h)continue;let k=o[b],M=o[h],R=d.get(b),P=d.get(h);k!==void 0&&M!==void 0&&R!==void 0&&P!==void 0&&wl(e,k,R,M,P,a,{candidateProjection:m.get(b),incumbentProjection:m.get(h),game:n,evaluations:o,candidateIndex:b,incumbentIndex:h,perspective:r,spiritFollowupScores:y})&&(h=b)}if(I(a)&&f!==void 0&&f!==h){let b=d.get(f),k=d.get(h),M=m.get(f),R=m.get(h);b!==void 0&&k!==void 0&&M!==void 0&&R!==void 0&&(Rs(b,M,k,R,a)??-1)>0&&(h=f)}let C=o[h];if(I(a)&&C!==void 0&&!C.spiritDevelopment&&!C.spiritSameTurnScoreSetupNow&&!C.spiritOwnManaSetupNow&&h>=4){let b=i.filter(k=>!s.includes(k)).filter(k=>{let M=o[k];return M!==void 0&&M.spiritOwnManaSetupNow&&M.rootRank+3<=C.rootRank&&Wr(M,C,a)}).sort((k,M)=>-po(o,k,M))[0];if(b!==void 0){let k=o[b],M=d.get(h);if(k!==void 0&&M!==void 0){let R=gu(e,k,void 0,r,a,l);(Vy(k,R,C,M,a)||wl(e,k,R,C,M,a,{incumbentProjection:m.get(h),game:n,evaluations:o,candidateIndex:b,incumbentIndex:h,perspective:r,spiritFollowupScores:y}))&&(h=b)}}}return e.session.checkpoint()?void 0:h}p(Lr,"pickRootWithReplyRiskGuard");function Rt(e,n){let o=e[n];if(o===void 0)throw new RangeError(`production selector index ${n} is out of bounds`);return o}p(Rt,"valueAt");function ws(e,n){return e.safeSupermanaPickupNow&&!n.safeSupermanaPickupNow||e.safeOpponentManaPickupNow&&!n.safeOpponentManaPickupNow}p(ws,"hasPickupUpgrade");function Ts(e){return z(e)||e.scoresSupermanaThisTurn||e.scoresOpponentManaThisTurn}p(Ts,"rootHasProgressSurface");function Ka(e){return O(e)===S.ManaTempo&&e.sameTurnScoreWindowValue>0&&e.sameTurnScoreWindowValue<=1&&!Z(e)&&!e.attacksOpponentDrainer&&!e.manaHandoffToOpponent&&!e.hasRoundtrip}p(Ka,"isProductionModeNonConcreteManaWindowRoot");function Fu(e,n,o){for(let[t,r]of n.board.entries()){let a=K(r);if(!(a?.kind!==A.Drainer||a.color!==o))return U(a)?!0:n.isFirstTurn()?!1:!Sr(e,n.board,o,t)}return!1}p(Fu,"ownDrainerVulnerableNextTurn");function WS(e,n){let{game:o,config:t,plan:r,candidateIndex:a,candidate:i,selected:s,candidateUnsafe:u,selectedUnsafe:c,candidateProgress:l,selectedProgress:m,scoreGap:d,sameTurnWindowBetter:y,drainerAttackBetter:f,scoresNowBetter:h,safetyRecoverBetter:C,spiritWindowBetter:b,spiritDevelopmentBetter:k,progressBetter:M,selectedSpiritPhase:R,selectedFamily:P,blackSpiritPair:g,blackTurnSixRouteChangePlainSpirit:W}=e,{selectedUtility:E,pickupUpgrade:D,strategicAxesBetter:N,projectedDeferredRecoveryWithoutConcreteGain:B,safeRootBlocksPlainSpirit:G,safeRootBlocksPlainSpiritProgress:L,plainSpiritSiblingRegresses:$,allowNonConcreteWhiteProgress:V,whiteSetupRecoveryBlocksUtilityOverride:se}=n;switch(yt(t)){case Ve.Baseline:switch(r.headFamily){case S.ImmediateScore:return(i.winsImmediately||h||y)&&d<=280;case S.DenyOpponentWindow:return y||C||f;case S.DrainerKill:return f&&d<=180;case S.DrainerSafetyRecovery:return C&&Bn(r.utility,E)>=0&&d<=140;case S.SpiritImpact:return a<=(r.compiledChunks.length>1?12:6)&&d<=120&&(b||k||R&&Bn(r.utility,E)>=0);case S.SafeSupermanaProgress:case S.SafeOpponentManaProgress:return!R&&a<=(r.compiledChunks.length>1?3:1)&&d<=80&&(M||Bn(r.utility,E)>=0||i.safeSupermanaProgressSteps===s.safeSupermanaProgressSteps&&i.safeOpponentManaProgressSteps===s.safeOpponentManaProgressSteps&&i.ownDrainerVulnerable===s.ownDrainerVulnerable&&i.efficiency===s.efficiency&&i.supermanaProgress===s.supermanaProgress&&i.opponentManaProgress===s.opponentManaProgress&&d<=32);case S.ManaTempo:return!1;default:return!1}case Ve.Production:switch(r.headFamily){case S.ImmediateScore:return(i.winsImmediately||h||y||a<=16&&ao(r.utility,E)&&(!u||c))&&d<=360;case S.DenyOpponentWindow:return y||C||f||a<=16&&d<=220&&!u&&ao(r.utility,E);case S.DrainerKill:return i.attacksOpponentDrainer&&a<=16&&d<=260&&(f||Bn(r.utility,E)>=0);case S.DrainerSafetyRecovery:return i.classes.drainerSafetyRecover&&a<=16&&d<=240&&(C||s.ownDrainerVulnerable&&!i.ownDrainerVulnerable||Tn(t)&&io(r.utility,E)&&(c||!u)&&!se);case S.SpiritImpact:{let Pe=io(r.utility,E),Ze=ao(r.utility,E);if(G||L||$||(s.spiritSameTurnScoreSetupNow||s.spiritOwnManaSetupNow||s.sameTurnScoreWindowValue>0)&&!g&&!c&&!u&&!i.spiritSameTurnScoreSetupNow&&!i.spiritOwnManaSetupNow&&i.sameTurnScoreWindowValue<=s.sameTurnScoreWindowValue&&i.spiritSetupGain<=s.spiritSetupGain&&!h&&!f)return!1;let en=W||d<=220&&(b||k||i.spiritOwnManaSetupNow&&!s.spiritOwnManaSetupNow&&Pe||Ze||R&&Pe);return a<=(r.compiledChunks.length>1?16:10)&&en}case S.SafeSupermanaProgress:case S.SafeOpponentManaProgress:{let Pe=J(r.utility,E),Ze=(l||c)&&io(r.utility,E),Je=!c&&!R&&!m,en=!c&&m,De=P===S.SafeSupermanaProgress||P===S.SafeOpponentManaProgress,kn=N||yp(r.utility,E,220);if(c&&u&&!R&&!m&&l&&d>0&&!D&&!C&&!h&&!f&&!y&&!kn||B)return!1;let Ie=V||zn(o)&&F(s)&&!c&&!u&&l&&a<=2&&d<=96&&(Pe>0||Pe>=0&&wo(r.utility,E,64)),yo=!R||c||Ie,Eo=d>48&&!c&&!u,We=!en&&!Je||!Eo||N||D,Qt=!u&&Ze&&(c||!R&&!m)&&(!Je||d<=32||N||D),ec=Ze&&Fn(r.utility,E)&&(!Je||N),nc=i.safeSupermanaProgressSteps===s.safeSupermanaProgressSteps&&i.safeOpponentManaProgressSteps===s.safeOpponentManaProgressSteps&&i.ownDrainerVulnerable===s.ownDrainerVulnerable&&i.efficiency===s.efficiency&&i.supermanaProgress===s.supermanaProgress&&i.opponentManaProgress===s.opponentManaProgress;return a<=(r.compiledChunks.length>1?12:6)&&d<=220&&(yo&&M&&We||Ie||D||ec&&(!Eo||N||ws(i,s))&&(!en||N||ws(i,s)||M&&!R)||Qt||yo&&nc&&d<=(De?32:64)&&We)}case S.ManaTempo:return!1}}}p(WS,"acceptTurnEngineHeadByModeAndFamily");function FS(e){let{game:n,plan:o,candidate:t,selected:r,macroMode:a,candidateUnsafe:i,selectedUnsafe:s,candidateProgress:u,selectedProgress:c,scoreGap:l,sameTurnWindowBetter:m,drainerAttackBetter:d,scoresNowBetter:y,candidateSpiritTactical:f,selectedSpiritPhase:h,candidateFamily:C,selectedFamily:b,selectedUtilityValue:k}=e,M=a&&o.headFamily===S.ImmediateScore&&n.activeColor===T.Black&&n.turnNumber<=4&&n.monsMovesCount===0&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&i&&!s&&!t.winsImmediately&&!y&&!d&&t.sameTurnScoreWindowValue<=r.sameTurnScoreWindowValue,R=a&&n.activeColor===T.White&&n.turnNumber===3&&n.monsMovesCount<=2&&n.playerCanUseAction()&&n.playerCanMoveMana()&&o.headFamily===S.SpiritImpact&&b===S.ManaTempo&&!s&&!i&&!r.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&t.spiritDevelopment&&t.spiritOwnManaSetupNow&&!t.spiritSameTurnScoreSetupNow&&!t.winsImmediately&&!t.attacksOpponentDrainer&&!Z(t)&&t.sameTurnScoreWindowValue===0,P=a&&n.activeColor===T.Black&&n.turnNumber>=5&&n.monsMovesCount===0&&n.playerCanUseAction()&&n.playerCanMoveMana()&&o.headFamily===S.SpiritImpact&&b===S.ManaTempo&&!h&&F(t)&&!u&&!f&&pe(t.inputs,r.inputs)&&i===s&&t.safeSupermanaProgressSteps>=r.safeSupermanaProgressSteps&&t.safeOpponentManaProgressSteps>=r.safeOpponentManaProgressSteps&&t.ownDrainerVulnerable===r.ownDrainerVulnerable&&t.ownDrainerWalkVulnerable===r.ownDrainerWalkVulnerable&&t.manaHandoffToOpponent===r.manaHandoffToOpponent&&t.hasRoundtrip===r.hasRoundtrip&&!y&&!d&&!m&&l>96,g=a&&n.activeColor===T.White&&n.turnNumber>=5&&n.monsMovesCount===0&&n.playerCanUseAction()&&n.playerCanMoveMana()&&o.headFamily===S.SpiritImpact&&b===S.ManaTempo&&!s&&!i&&!h&&F(t)&&u&&!f&&pe(t.inputs,r.inputs)&&t.safeSupermanaProgressSteps>=r.safeSupermanaProgressSteps&&t.safeOpponentManaProgressSteps>=r.safeOpponentManaProgressSteps&&t.ownDrainerVulnerable===r.ownDrainerVulnerable&&t.ownDrainerWalkVulnerable===r.ownDrainerWalkVulnerable&&t.manaHandoffToOpponent===r.manaHandoffToOpponent&&t.hasRoundtrip===r.hasRoundtrip&&t.score<=r.score&&!y&&!d&&!m,W=a&&n.activeColor===T.White&&n.turnNumber>=5&&n.monsMovesCount>=1&&o.headFamily===S.SpiritImpact&&b===S.ManaTempo&&!h&&F(t)&&!u&&!f&&t.sameTurnScoreWindowValue===0&&t.ownDrainerVulnerable===r.ownDrainerVulnerable&&t.ownDrainerWalkVulnerable===r.ownDrainerWalkVulnerable&&t.manaHandoffToOpponent===r.manaHandoffToOpponent&&t.hasRoundtrip===r.hasRoundtrip&&t.score<=r.score&&!y&&!d&&!m,E=a&&n.activeColor===T.Black&&n.turnNumber>=6&&n.monsMovesCount===0&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&(C===S.SafeSupermanaProgress||C===S.SafeOpponentManaProgress)&&b===S.ManaTempo&&!h&&!t.spiritDevelopment&&!t.spiritSameTurnScoreSetupNow&&!t.spiritOwnManaSetupNow&&t.sameTurnScoreWindowValue===0&&r.sameTurnScoreWindowValue===0&&!Z(t)&&!Z(r)&&t.ownDrainerVulnerable&&!r.ownDrainerVulnerable&&t.ownDrainerWalkVulnerable===r.ownDrainerWalkVulnerable&&t.manaHandoffToOpponent===r.manaHandoffToOpponent&&t.hasRoundtrip===r.hasRoundtrip&&!y&&!d&&!m,D=a&&n.activeColor===T.Black&&n.turnNumber<=4&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&C===S.ManaTempo&&b===S.ManaTempo&&t.sameTurnScoreWindowValue>0&&t.sameTurnScoreWindowValue===r.sameTurnScoreWindowValue&&t.safeSupermanaProgressSteps===r.safeSupermanaProgressSteps&&t.safeOpponentManaProgressSteps===r.safeOpponentManaProgressSteps&&t.ownDrainerVulnerable===r.ownDrainerVulnerable&&t.ownDrainerWalkVulnerable===r.ownDrainerWalkVulnerable&&t.manaHandoffToOpponent===r.manaHandoffToOpponent&&t.hasRoundtrip===r.hasRoundtrip&&!Z(t)&&!Z(r)&&!y&&!d,N=a&&n.activeColor===T.Black&&n.turnNumber>=6&&n.monsMovesCount===0&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&C===S.ManaTempo&&b===S.ManaTempo&&t.sameTurnScoreWindowValue>0&&t.sameTurnScoreWindowValue===r.sameTurnScoreWindowValue&&t.safeSupermanaProgressSteps===r.safeSupermanaProgressSteps&&t.safeOpponentManaProgressSteps===r.safeOpponentManaProgressSteps&&t.ownDrainerVulnerable&&!r.ownDrainerVulnerable&&t.manaHandoffToOpponent===r.manaHandoffToOpponent&&t.hasRoundtrip===r.hasRoundtrip&&!Z(t)&&!Z(r)&&!y&&!d,B=a&&n.activeColor===T.Black&&n.turnNumber>=8&&n.monsMovesCount>=1&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&C===S.ManaTempo&&b===S.ManaTempo&&pe(t.inputs,r.inputs)&&t.sameTurnScoreWindowValue>0&&r.sameTurnScoreWindowValue===0&&t.ownDrainerVulnerable&&!r.ownDrainerVulnerable&&!Z(t)&&!Z(r)&&_(t.score,r.score)<=32&&!y&&!d;if(R)return{kind:"reject"};if(P)return{kind:"reject"};if(g)return{kind:"reject"};if(W)return{kind:"reject"};if(E)return{kind:"reject"};if(D)return{kind:"reject"};if(N)return{kind:"reject"};if(B)return{kind:"reject"};let G=ws(t,r),L=a&&n.activeColor===T.Black&&n.turnNumber<=4&&C===S.ManaTempo&&(b===S.ManaTempo||b===S.SafeSupermanaProgress||b===S.SafeOpponentManaProgress)&&!t.winsImmediately&&!t.attacksOpponentDrainer&&!t.spiritDevelopment&&!t.spiritSameTurnScoreSetupNow&&!t.spiritOwnManaSetupNow&&!G&&l>0&&(cn(r,t)||c&&!u),$=a&&n.activeColor===T.Black&&n.turnNumber<=4&&(o.headFamily===S.SafeSupermanaProgress||o.headFamily===S.SafeOpponentManaProgress)&&C===S.ManaTempo&&b===S.ManaTempo&&t.sameTurnScoreWindowValue>0&&r.sameTurnScoreWindowValue===0&&!t.winsImmediately&&!y&&!d&&!G&&r.ownDrainerVulnerable===t.ownDrainerVulnerable&&r.ownDrainerWalkVulnerable===t.ownDrainerWalkVulnerable&&r.manaHandoffToOpponent===t.manaHandoffToOpponent&&r.hasRoundtrip===t.hasRoundtrip&&cn(r,t)&&l>=-192&&!mt(o.utility,k());return L?{kind:"reject"}:$?{kind:"reject"}:{kind:"continue",facts:{narrowUnsafeBlackManaScore:M,pickupUpgrade:G}}}p(FS,"evaluateInitialHeadGuards");function BS(e,n){let{game:o,plan:t,candidate:r,selected:a,macroMode:i,candidateUnsafe:s,selectedUnsafe:u,candidateProgress:c,selectedProgress:l,exactContext:m,sameTurnWindowBetter:d,drainerAttackBetter:y,scoresNowBetter:f,selectedSpiritPhase:h,candidateFamily:C,selectedFamily:b}=e,{pickupUpgrade:k,selectedUtility:M}=n,R=i&&o.activeColor===T.Black&&o.turnNumber<=4&&o.monsMovesCount>=1&&o.playerCanUseAction()&&o.playerCanMoveMana()&&t.headFamily===S.ManaTempo&&t.goalFamily===S.SpiritImpact&&C===S.ManaTempo&&b===S.ManaTempo&&!s&&!u&&!r.spiritDevelopment&&!a.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!a.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&!a.spiritOwnManaSetupNow&&!Z(r)&&!Z(a)&&r.sameTurnScoreWindowValue===a.sameTurnScoreWindowValue&&!c&&!l&&r.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&r.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&r.ownDrainerVulnerable===a.ownDrainerVulnerable&&r.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&r.manaHandoffToOpponent===a.manaHandoffToOpponent&&r.hasRoundtrip===a.hasRoundtrip&&a.score>v(r.score,128)&&!f&&!y&&!d&&!k,P=i&&o.activeColor===T.Black&&o.turnNumber<=6&&o.monsMovesCount>=1&&o.playerCanMoveMana()&&(t.headFamily===S.ManaTempo||t.headFamily===S.SafeSupermanaProgress||t.headFamily===S.SafeOpponentManaProgress)&&C===S.ManaTempo&&b===S.ManaTempo&&s===u&&!r.spiritDevelopment&&!a.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!a.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&!a.spiritOwnManaSetupNow&&!Z(r)&&!Z(a)&&r.sameTurnScoreWindowValue===0&&a.sameTurnScoreWindowValue===0&&r.ownDrainerVulnerable===a.ownDrainerVulnerable&&r.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&r.manaHandoffToOpponent===a.manaHandoffToOpponent&&r.hasRoundtrip===a.hasRoundtrip&&a.score>v(r.score,48)&&a.safeSupermanaProgressSteps<=r.safeSupermanaProgressSteps+1&&a.safeOpponentManaProgressSteps<=r.safeOpponentManaProgressSteps+1&&!f&&!y&&!d&&!k,g=i&&o.activeColor===T.White&&o.turnNumber===5&&o.monsMovesCount===0&&o.playerCanMoveMana()&&(t.headFamily===S.SafeSupermanaProgress||t.headFamily===S.SafeOpponentManaProgress)&&t.goalFamily===S.ImmediateScore&&C===S.ManaTempo&&b===S.ManaTempo&&s===u&&!r.spiritDevelopment&&!a.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!a.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&!a.spiritOwnManaSetupNow&&!Z(r)&&!Z(a)&&r.sameTurnScoreWindowValue>0&&r.sameTurnScoreWindowValue===a.sameTurnScoreWindowValue&&!c&&!l&&r.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&r.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&pe(r.inputs,a.inputs)&&r.ownDrainerVulnerable===a.ownDrainerVulnerable&&r.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&r.manaHandoffToOpponent===a.manaHandoffToOpponent&&r.hasRoundtrip===a.hasRoundtrip&&a.score>r.score&&!f&&!y&&!d&&!k,W=i&&o.activeColor===T.White&&o.turnNumber===5&&o.monsMovesCount>=1&&o.playerCanMoveMana()&&(t.headFamily===S.ImmediateScore||t.headFamily===S.SafeSupermanaProgress||t.headFamily===S.SafeOpponentManaProgress)&&t.goalFamily===S.ImmediateScore&&C===S.ManaTempo&&b===S.ManaTempo&&s===u&&!r.spiritDevelopment&&!a.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!a.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&!a.spiritOwnManaSetupNow&&!Z(r)&&!Z(a)&&r.sameTurnScoreWindowValue>0&&r.sameTurnScoreWindowValue===a.sameTurnScoreWindowValue&&!c&&!l&&r.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&r.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&a.scorePathBestSteps>=r.scorePathBestSteps&&r.ownDrainerVulnerable===a.ownDrainerVulnerable&&r.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&r.manaHandoffToOpponent===a.manaHandoffToOpponent&&r.hasRoundtrip===a.hasRoundtrip&&a.score>r.score&&!f&&!y&&!d&&!k,E=i&&o.activeColor===T.White&&o.turnNumber===5&&o.monsMovesCount>=1&&o.playerCanUseAction()&&o.playerCanMoveMana()&&(t.headFamily===S.SafeSupermanaProgress||t.headFamily===S.SafeOpponentManaProgress)&&t.goalFamily===S.ImmediateScore&&C===S.ManaTempo&&b===S.SpiritImpact&&s===u&&!r.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&a.spiritDevelopment&&a.spiritSameTurnScoreSetupNow&&a.spiritOwnManaSetupNow&&a.spiritSetupGain>=v(r.spiritSetupGain,64)&&!Z(r)&&!Z(a)&&r.sameTurnScoreWindowValue>0&&r.sameTurnScoreWindowValue===a.sameTurnScoreWindowValue&&!c&&!l&&r.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&r.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&a.scorePathBestSteps>r.scorePathBestSteps&&r.ownDrainerVulnerable===a.ownDrainerVulnerable&&r.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&r.manaHandoffToOpponent===a.manaHandoffToOpponent&&r.hasRoundtrip===a.hasRoundtrip&&r.score<=v(a.score,64)&&!f&&!y&&!d&&!k,D=i&&o.activeColor===T.White&&o.turnNumber===5&&o.monsMovesCount===0&&o.playerCanUseAction()&&o.playerCanMoveMana()&&m.delta.sameTurnScoreWindowValue<=1&&m.delta.opponentWindowDenyGain<=1&&!m.delta.drainerAttackAvailable&&(m.delta.sameTurnScoreWindowValue>0||m.delta.opponentWindowDenyGain>0)&&(t.headFamily===S.SafeSupermanaProgress||t.headFamily===S.SafeOpponentManaProgress)&&t.goalFamily===S.ImmediateScore&&Ka(r)&&b===S.SpiritImpact&&s&&!u&&!r.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&a.spiritDevelopment&&a.spiritSameTurnScoreSetupNow&&!a.spiritOwnManaSetupNow&&a.spiritSetupGain>=v(r.spiritSetupGain,96)&&!Z(r)&&!Z(a)&&r.sameTurnScoreWindowValue===a.sameTurnScoreWindowValue&&!c&&!l&&r.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&r.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&a.scorePathBestSteps>r.scorePathBestSteps&&r.ownDrainerVulnerable&&!a.ownDrainerVulnerable&&r.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&r.manaHandoffToOpponent===a.manaHandoffToOpponent&&r.hasRoundtrip===a.hasRoundtrip&&!f&&!y&&!d&&!k,N=i&&o.activeColor===T.White&&o.turnNumber===5&&o.monsMovesCount>=1&&!o.playerCanUseAction()&&o.playerCanMoveMana()&&(t.headFamily===S.SafeSupermanaProgress||t.headFamily===S.SafeOpponentManaProgress)&&t.goalFamily===S.DrainerSafetyRecovery&&C===S.ManaTempo&&b===S.ManaTempo&&!s&&!u&&!c&&!l&&!r.spiritDevelopment&&!a.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!a.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&!a.spiritOwnManaSetupNow&&!Z(r)&&!Z(a)&&r.sameTurnScoreWindowValue===0&&a.sameTurnScoreWindowValue===0&&r.safeSupermanaProgressSteps<=a.safeSupermanaProgressSteps&&r.safeOpponentManaProgressSteps<=a.safeOpponentManaProgressSteps&&r.scorePathBestSteps===a.scorePathBestSteps&&r.spiritSetupGain<=v(a.spiritSetupGain,16)&&!r.ownDrainerVulnerable&&!a.ownDrainerVulnerable&&!r.ownDrainerWalkVulnerable&&!a.ownDrainerWalkVulnerable&&!r.manaHandoffToOpponent&&!a.manaHandoffToOpponent&&!r.hasRoundtrip&&!a.hasRoundtrip&&r.rootRank>=a.rootRank+8&&_(r.score,a.score)<=128&&!f&&!y&&!d&&!k&&!wo(t.headUtility,M,192),B=i&&o.activeColor===T.Black&&o.turnNumber===6&&o.monsMovesCount===0&&!o.playerCanUseAction()&&o.playerCanMoveMana()&&m.delta.sameTurnScoreWindowValue<=1&&m.delta.opponentWindowDenyGain<=1&&!m.delta.drainerAttackAvailable&&(m.delta.sameTurnScoreWindowValue>0||m.delta.opponentWindowDenyGain>0)&&t.headFamily===S.ManaTempo&&t.goalFamily===S.ImmediateScore&&C===S.ManaTempo&&(b===S.SafeSupermanaProgress||b===S.SafeOpponentManaProgress)&&!s&&!r.spiritDevelopment&&!a.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!a.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&!a.spiritOwnManaSetupNow&&!Z(r)&&!Z(a)&&r.sameTurnScoreWindowValue===0&&a.sameTurnScoreWindowValue===0&&!c&&l&&a.safeSupermanaProgressSteps<r.safeSupermanaProgressSteps&&a.safeOpponentManaProgressSteps<r.safeOpponentManaProgressSteps&&a.scorePathBestSteps===r.scorePathBestSteps&&a.ownDrainerVulnerable&&!r.ownDrainerVulnerable&&a.ownDrainerWalkVulnerable===r.ownDrainerWalkVulnerable&&a.manaHandoffToOpponent===r.manaHandoffToOpponent&&a.hasRoundtrip===r.hasRoundtrip&&!f&&!y&&!d&&!k,G=i&&o.activeColor===T.Black&&o.turnNumber===4&&o.monsMovesCount>=1&&!o.playerCanUseAction()&&o.playerCanMoveMana()&&m.delta.sameTurnScoreWindowValue<=1&&m.delta.opponentWindowDenyGain<=1&&!m.delta.drainerAttackAvailable&&m.delta.drainerSafety<0&&(m.delta.sameTurnScoreWindowValue>0||m.delta.opponentWindowDenyGain>0)&&t.headFamily===S.ImmediateScore&&t.goalFamily===S.ImmediateScore&&Ka(r)&&b===S.DrainerSafetyRecovery&&a.classes.drainerSafetyRecover&&!u&&!a.ownDrainerVulnerable&&!a.ownDrainerWalkVulnerable&&!Z(a)&&!a.attacksOpponentDrainer&&!h&&a.sameTurnScoreWindowValue===0&&!a.manaHandoffToOpponent&&!a.hasRoundtrip&&pe(r.inputs,a.inputs)&&r.ownDrainerVulnerable&&!r.classes.drainerSafetyRecover&&a.safeSupermanaProgressSteps<=r.safeSupermanaProgressSteps&&a.safeOpponentManaProgressSteps<=r.safeOpponentManaProgressSteps&&a.scorePathBestSteps>r.scorePathBestSteps&&!f&&!y&&!k,L=i&&o.activeColor===T.White&&o.turnNumber===3&&o.monsMovesCount===0&&!o.playerCanUseAction()&&o.playerCanMoveMana()&&(t.headFamily===S.SafeSupermanaProgress||t.headFamily===S.SafeOpponentManaProgress)&&t.goalFamily===S.ImmediateScore&&Ka(r)&&b===S.DrainerSafetyRecovery&&a.classes.drainerSafetyRecover&&!u&&!a.ownDrainerVulnerable&&!a.ownDrainerWalkVulnerable&&!Z(a)&&!a.attacksOpponentDrainer&&!h&&a.sameTurnScoreWindowValue===0&&!a.manaHandoffToOpponent&&!a.hasRoundtrip&&pe(r.inputs,a.inputs)&&r.ownDrainerVulnerable&&!r.classes.drainerSafetyRecover&&a.safeSupermanaProgressSteps<=r.safeSupermanaProgressSteps&&a.safeOpponentManaProgressSteps<=r.safeOpponentManaProgressSteps&&a.scorePathBestSteps>r.scorePathBestSteps&&!f&&!y&&!k,$=i&&o.activeColor===T.White&&o.turnNumber===3&&o.monsMovesCount>=1&&o.playerCanMoveMana()&&(t.headFamily===S.ManaTempo||t.headFamily===S.SafeSupermanaProgress||t.headFamily===S.SafeOpponentManaProgress)&&t.goalFamily===S.DrainerSafetyRecovery&&C===S.ManaTempo&&b===S.ManaTempo&&s&&!u&&!r.spiritDevelopment&&!a.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!a.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&!a.spiritOwnManaSetupNow&&!Z(r)&&!Z(a)&&r.sameTurnScoreWindowValue===0&&a.sameTurnScoreWindowValue===0&&r.manaHandoffToOpponent===a.manaHandoffToOpponent&&r.hasRoundtrip===a.hasRoundtrip&&!f&&!y&&!d&&!k;return!!(R||P||g||W||E||D||N||$||B||G||L)}p(BS,"manaAndRecoveryHeadGuardsReject");function ln(e,...n){return n.includes(e)}p(ln,"isTurnPlanFamilyOneOf");function qa(e,n,o){let t=e[o],r=n[o];return t!==void 0&&r!==void 0&&vt(t,r)}p(qa,"sameInputAt");function sn(e){return!x(e)&&!e.hasRoundtrip}p(sn,"advisorRootIsSafe");function Xe(e,n,o,t,r){return hs(e,n,o,t,r,O(o))}p(Xe,"rootUtility");function Pt(e,n,o,t,r){return Vo(e,n,o,t,r,O(o))}p(Pt,"rootMoveUtility");function lo(e,n){return J(e,n)>=0||io(e,n)}p(lo,"utilityCompetes");function _S(e,n){return e.winState===n.winState&&e.avoidImmediateLoss===n.avoidImmediateLoss&&e.scoreDelta===n.scoreDelta&&e.denyGain===n.denyGain&&e.drainerAttack===n.drainerAttack&&e.drainerSafety===n.drainerSafety&&e.evalScore===n.evalScore}p(_S,"utilitiesEqual");function ot(e,n){return{inputs:[...e.inputs],family:O(e),rootRank:e.rootRank,reason:n}}p(ot,"entry");function mo(e,n){e.some(o=>ue(o.inputs,n.inputs))||e.push(n)}p(mo,"pushUnique");function Tl(e,n,o){return Pu(e,[n,0],[o,0])}p(Tl,"compareRankedRootMoveIndices");function GS(e,n){return e.heuristic!==n.heuristic?e.heuristic>n.heuristic?-1:1:Up(e,n)||ro(e.inputs,n.inputs)}p(GS,"compareRootMoveSearchPriority");function gl(e,n){return ke(e,{planner:{mode:n}})}p(gl,"withPlannerMode");function vl(e,n){return ke(gl(e,n),{replyRisk:{enabled:!1}})}p(vl,"withoutReplyRiskGuard");function ye(e,n,o,t){return n.filter(r=>{let a=e[r];return a!==void 0&&o(a,r)}).sort(t)[0]}p(ye,"bestOverrideIndex");function Ye(e,n,o){let t=e[n],r=e[o];return t===void 0||r===void 0?n-o:t.rootRank!==r.rootRank?t.rootRank<r.rootRank?-1:1:ne(e,n,o)}p(Ye,"compareRootRankThenRanked");function Al(e,n,o){let t=e[n],r=e[o];return t===void 0||r===void 0?n-o:t.rootRank!==r.rootRank?t.rootRank<r.rootRank?-1:1:t.score!==r.score?t.score>r.score?-1:1:ne(e,n,o)}p(Al,"compareRootRankThenScoreThenRanked");function Ln(e,n){let o=de(e,n,n.activeColor);return o.delta.sameTurnScoreWindowValue===0&&o.delta.opponentWindowDenyGain===0&&!o.delta.drainerAttackAvailable}p(Ln,"exactContextIsQuiet");var Ue=Object.freeze({RankedRoot:"ranked-root",ReplyRiskShortlist:"reply-risk-shortlist",PreserveSpiritRepresentative:"preserve-spirit-representative",PreserveSafeProgressRepresentative:"preserve-safe-progress-representative",PreserveManaTempoRepresentative:"preserve-mana-tempo-representative",OmittedRootReentry:"omitted-root-reentry",AdmitInjectedMacroRoot:"admit-injected-macro-root",RejectInjectedMacroRoot:"reject-injected-macro-root",ApprovedReplyRiskGuard:"approved-reply-risk-guard",ApprovedBaselineSelector:"approved-baseline-selector",ApprovedFamilyCompetition:"approved-family-competition"});function RP(e,n,o,t,r,a,i,s){let u=o[r];if(u===void 0||!F(u))return!1;let c=p(m=>{let d=s.get(m);if(d!==void 0)return d;let y=o[m],f=y===void 0?-2147483648:He(e,y.game,a,i);return s.set(m,f),f},"followup"),l=!1;for(let m of t){let d=o[m];if(d===void 0||n.activeColor!==T.Black||n.turnNumber>4||!d.spiritOwnManaSetupNow||d.spiritSameTurnScoreSetupNow||!pe(u.inputs,d.inputs)||u.ownDrainerVulnerable!==d.ownDrainerVulnerable||u.ownDrainerWalkVulnerable!==d.ownDrainerWalkVulnerable||!sn(u)||!sn(d)||Z(u)||Z(d)||u.attacksOpponentDrainer||d.attacksOpponentDrainer||u.sameTurnScoreWindowValue!==0||d.sameTurnScoreWindowValue!==0||u.supermanaProgress||d.supermanaProgress||u.opponentManaProgress||d.opponentManaProgress)continue;if(d.rootRank<=u.rootRank&&v(d.score,64)>=u.score&&d.spiritSetupGain>=v(u.spiritSetupGain,32))return!1;let f=c(r),h=c(m);l||(l=f>=v(h,32)||u.score>=d.score&&f>=h)}return l}p(RP,"blackPlainSpiritRepresentativeCompetes");function LS(e,n,o,t,r,a,i,s,u){let c=o[r];return c===void 0?!1:a!==Ue.PreserveSpiritRepresentative?!0:c.spiritSameTurnScoreSetupNow||c.spiritOwnManaSetupNow||RP(e,n,o,t,r,i,s,u)}p(LS,"representativeCompetesInApproval");function VS(e,n,o,t,r,a,i){let s=t[0];if(s===void 0||t.some(l=>{let m=o[l];return m!==void 0&&i(m)&&sn(m)}))return;let u=o[s];if(u===void 0)return;let c=Xe(e,n,u,r,a);return o.map((l,m)=>m).filter(l=>{let m=o[l];return m!==void 0&&i(m)&&sn(m)&&lo(Xe(e,n,m,r,a),c)}).sort((l,m)=>ne(o,l,m))[0]}p(VS,"findScoredRepresentative");function HS(e,n,o,t){if(o.length!==0)return n.map((r,a)=>a).filter(r=>{let a=n[r];return a!==void 0&&!o.includes(r)&&a.spiritOwnManaSetupNow&&a.opponentManaProgress&&!F(a)&&sn(a)&&o.some(i=>ys(e,n,[r,i],t))}).sort((r,a)=>ne(n,r,a))[0]}p(HS,"whiteFollowupRepresentative");function El(e,n,o,t,r){if(!I(r)||!r.planner.enabled||!r.planner.secondaryAnalysis||o.length<2||!o.every(y=>{let f=n[y];return f!==void 0&&F(f)&&sn(f)}))return;let a=o.map(y=>n[y]).filter(y=>y!==void 0),i=Math.max(...a.map(y=>y.score)),s=Math.min(...a.map(y=>y.rootRank)),u=new Map,c=p(y=>{let f=u.get(y);if(f!==void 0)return f;let h=n[y],C=h===void 0?-2147483648:He(e,h.game,t,r);return u.set(y,C),C},"followup"),l=Math.max(...o.map(c)),m=n.map((y,f)=>f).filter(y=>!o.includes(y)),d=m.filter(y=>{let f=n[y];return f!==void 0&&sn(f)&&!f.ownDrainerVulnerable&&!f.ownDrainerWalkVulnerable&&!f.spiritDevelopment&&!f.spiritSameTurnScoreSetupNow&&!f.spiritOwnManaSetupNow&&v(f.score,32)>=i&&c(y)>=v(l,32)}).sort((y,f)=>c(f)-c(y)||ne(n,y,f))[0];return d!==void 0?d:m.filter(y=>{let f=n[y];return f!==void 0&&sn(f)&&!f.ownDrainerVulnerable&&!f.ownDrainerWalkVulnerable&&!f.spiritDevelopment&&!f.spiritSameTurnScoreSetupNow&&!f.spiritOwnManaSetupNow&&z(f)&&f.policyPriority>0&&f.score>=i&&f.rootRank+2<=s}).sort((y,f)=>ne(n,y,f))[0]}p(El,"plainSpiritClusterProgressReentry");function Ol(e,n,o,t,r,a){if(!I(a)||!a.planner.enabled)return;let i=t.find(l=>{let m=o[l];return m!==void 0&&sn(m)&&z(m)&&m.policyPriority>0}),s=i===void 0?void 0:o[i];if(s===void 0)return;let u,c;return o.forEach((l,m)=>{if(t.includes(m)||!x(l)||l.ownDrainerWalkVulnerable||l.manaHandoffToOpponent||l.hasRoundtrip||!$n(l,s)||l.score+32<s.score||l.game.activeColor!==r||l.game.winnerColor()!==void 0)return;let d=Xe(e,n,l,r,a);Ut(d)&&(c===void 0||J(d,c)>0||_S(d,c)&&u!==void 0&&ne(o,m,u)<0)&&(u=m,c=d)}),u}p(Ol,"riskyRecoveryReentry");function PP(e,n,o,t){if(!I(t)||e.activeColor!==T.Black||e.turnNumber!==6||!e.playerCanMoveMana()||o.length===0||!o.every(i=>{let s=n[i];return s!==void 0&&O(s)===S.ManaTempo&&x(s)&&!s.winsImmediately&&!s.attacksOpponentDrainer&&!Z(s)&&s.sameTurnScoreWindowValue===0&&!s.manaHandoffToOpponent&&!s.hasRoundtrip}))return;let r=Math.min(...o.map(i=>n[i]?.rootRank??Number.MAX_SAFE_INTEGER)),a=Math.max(...o.map(i=>n[i]?.score??-2147483648));return n.map((i,s)=>s).filter(i=>{let s=n[i];return s!==void 0&&!o.includes(i)&&O(s)===S.SpiritImpact&&F(s)&&!Z(s)&&!s.attacksOpponentDrainer&&s.sameTurnScoreWindowValue===0&&!s.manaHandoffToOpponent&&!s.hasRoundtrip&&s.rootRank+4<=r&&_(a,s.score)<=1024}).sort((i,s)=>ne(n,i,s))[0]}p(PP,"blackTurnSixSpiritReentry");function wP(e,n,o,t){if(!I(t))return;let r=o[0],a=r===void 0?void 0:e[r];if(!(a===void 0||!x(a)||!z(a)))return n.filter(i=>{let s=e[i];return s!==void 0&&!o.includes(i)&&sn(s)&&$n(s,a)&&_(a.score,s.score)<=320}).sort((i,s)=>ne(e,i,s))[0]}p(wP,"safeProgressSiblingReentry");function TP(e,n,o,t,r){if(!I(r)||n.activeColor!==T.Black||n.turnNumber<6||n.monsMovesCount!==0||n.playerCanUseAction()||!n.playerCanMoveMana()||t.length===0)return;let a=de(e,n,n.activeColor).delta;if(!(a.sameTurnScoreWindowValue>1||a.opponentWindowDenyGain>1||a.sameTurnScoreWindowValue===0&&a.opponentWindowDenyGain===0||t.some(i=>{let s=o[i];return s!==void 0&&(O(s)===S.SafeSupermanaProgress||O(s)===S.SafeOpponentManaProgress)&&sn(s)})))return o.map((i,s)=>s).filter(i=>{let s=o[i],u=s===void 0?void 0:O(s);return s!==void 0&&!t.includes(i)&&(u===S.SafeSupermanaProgress||u===S.SafeOpponentManaProgress)&&!s.manaHandoffToOpponent&&!s.hasRoundtrip&&!s.winsImmediately&&!s.attacksOpponentDrainer&&!Z(s)&&s.sameTurnScoreWindowValue===0&&s.score>=0}).sort((i,s)=>{let u=o[i],c=o[s];return u?.score!==c?.score?(c?.score??-2147483648)-(u?.score??-2147483648):ne(o,i,s)})[0]}p(TP,"blackNoActionSafeProgressReentry");function gP(e,n,o,t){if(!I(t)||e.activeColor!==T.Black||e.turnNumber<6||e.monsMovesCount!==0||e.playerCanUseAction()||!e.playerCanMoveMana())return;let r=[...o].filter(s=>{let u=n[s];return u!==void 0&&O(u)===S.ManaTempo&&sn(u)&&!u.winsImmediately&&!u.attacksOpponentDrainer&&!Z(u)}).sort((s,u)=>ne(n,s,u))[0],a=r===void 0?void 0:n[r];if(a===void 0)return;let i=a.sameTurnScoreWindowValue>0&&!a.ownDrainerVulnerable&&!a.ownDrainerWalkVulnerable;if(!(a.rootRank<6&&!i))return n.map((s,u)=>u).filter(s=>{let u=n[s];return u===void 0||o.includes(s)||O(u)!==S.ManaTempo||u.manaHandoffToOpponent||u.hasRoundtrip||u.winsImmediately||u.attacksOpponentDrainer||Z(u)||!(u.rootRank+4<=a.rootRank||i&&u.rootRank<a.rootRank)||u.sameTurnScoreWindowValue>a.sameTurnScoreWindowValue?!1:a.score>=0?u.score>=0:i&&u.sameTurnScoreWindowValue===a.sameTurnScoreWindowValue&&u.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&u.ownDrainerVulnerable===a.ownDrainerVulnerable&&u.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable?!0:_(a.score,u.score)<=192}).sort((s,u)=>ne(n,s,u))[0]}p(gP,"blackNoActionManaSiblingReentry");function US(e,n,o,t,r,a,i){let s=[],u=p(c=>{c!==void 0&&!s.includes(c)&&s.push(c)},"add");return u(El(e,o,t,a,i)),u(Ol(e,n,o,t,a,i)),u(PP(n,o,r,i)),u(wP(o,t,r,i)),u(TP(e,n,o,r,i)),u(gP(n,o,r,i)),u(Ps(e,n,o,r,a,i)),s}p(US,"collectAdvisorReentries");function xl(e,n,o,t,r,a){return t.spiritDevelopment||!(o.spiritOwnManaSetupNow||o.spiritSameTurnScoreSetupNow)||o.sameTurnScoreWindowValue>t.sameTurnScoreWindowValue||o.score>=t.score||n.activeColor===T.Black&&n.turnNumber<=2&&o.spiritOwnManaSetupNow&&!o.spiritSameTurnScoreSetupNow&&O(t)===S.ManaTempo&&!Z(o)&&!Z(t)&&!o.attacksOpponentDrainer&&!t.attacksOpponentDrainer&&sn(o)&&sn(t)&&v(o.score,64)>=t.score&&o.spiritSetupGain>=v(t.spiritSetupGain,48)&&o.rootRank<=t.rootRank?!0:J(Xe(e,n,o,r,a),Xe(e,n,t,r,a))>=0}p(xl,"spiritSetupCompetes");function jS(e,n,o,t){let r=n.roots[o],a=n.roots[t];return r!==void 0&&a!==void 0&&xl(e,n.game,r,a,n.perspective,n.config)}p(jS,"spiritSetupCompetesWithRoot");function KS(e){let n=e.candidateIndices.map(t=>e.roots[t]).filter(t=>t!==void 0&&(t.spiritDevelopment||t.spiritSameTurnScoreSetupNow||t.spiritOwnManaSetupNow)).map(t=>t.score);if(n.length===0)return!1;let o=Math.max(...n);return e.candidateIndices.some(t=>{let r=e.roots[t];return r!==void 0&&!r.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&r.ownDrainerVulnerable&&!r.ownDrainerWalkVulnerable&&!r.manaHandoffToOpponent&&!r.hasRoundtrip&&(Z(r)||r.attacksOpponentDrainer||r.sameTurnScoreWindowValue>0)&&r.score>=o})}p(KS,"riskyScoreCompetition");function Il(e,n,o,t,r){if(!r.planner.enabled||!I(r)||!o.ownDrainerVulnerable||!zt(o,t))return;let a=Xe(e,n,o,t,r);return Ut(a)?a:void 0}p(Il,"projectedRiskyRecoveryUtility");function Nl(e,n){return Ut(e)&&J(e,n)>=0&&io(e,n)}p(Nl,"projectedRecoveryUtilityCompetes");function qS(e){if(!I(e.config))return!1;let n=e.candidateIndices.map(t=>e.roots[t]).filter(t=>t!==void 0&&t.spiritDevelopment&&!t.manaHandoffToOpponent).map(t=>t.efficiency);if(n.length===0)return!1;let o=Math.max(...n);return e.candidateIndices.some(t=>{let r=e.roots[t];return r!==void 0&&!r.ownDrainerVulnerable&&!r.manaHandoffToOpponent&&!r.hasRoundtrip&&(r.supermanaProgress||r.opponentManaProgress)&&r.policyPriority>0&&r.efficiency>=o})}p(qS,"safeProgressCompetition");function zS(e,n){if(!Tn(n.config)||n.candidateIndices.length<2)return!1;let o=n.candidateIndices.filter(u=>{let c=n.roots[u];return c!==void 0&&F(c)&&!x(c)&&!c.manaHandoffToOpponent&&!c.hasRoundtrip}).sort((u,c)=>ne(n.roots,u,c)).slice(0,3);if(o.length===0)return!1;let t=Math.min(...o.map(u=>n.roots[u]?.rootRank??Number.MAX_SAFE_INTEGER)),r=Math.max(...o.map(u=>n.roots[u]?.score??-2147483648)),a=new Map,i=p(u=>{let c=a.get(u);if(c!==void 0)return c;let l=n.roots[u],m=l===void 0?-2147483648:He(e,l.game,n.perspective,n.config);return a.set(u,m),m},"followup"),s=Math.max(...o.map(i));return n.candidateIndices.some(u=>{if(o.includes(u))return!1;let c=n.roots[u];return c!==void 0&&!x(c)&&!c.spiritDevelopment&&!c.spiritSameTurnScoreSetupNow&&!c.spiritOwnManaSetupNow&&!c.ownDrainerVulnerable&&!c.manaHandoffToOpponent&&!c.hasRoundtrip&&c.rootRank<=t+2&&v(c.score,32)>=r&&c.policyPriority>0&&i(u)>=v(s,32)})}p(zS,"followupProgressCompetition");function vP(e){return e.winsImmediately||e.attacksOpponentDrainer||e.scoresSupermanaThisTurn||e.scoresOpponentManaThisTurn||e.safeSupermanaPickupNow||e.safeOpponentManaPickupNow||e.sameTurnScoreWindowValue>0}p(vP,"hasNonSpiritScoreCompetitionSurface");function $S(e){if(!I(e.config))return!1;let n=e.candidateIndices.filter(o=>{let t=e.roots[o];return t!==void 0&&F(t)}).sort((o,t)=>ne(e.roots,o,t)).slice(0,3);return n.length===0?!1:e.candidateIndices.some(o=>{if(n.includes(o))return!1;let t=e.roots[o];return t!==void 0&&vP(t)&&n.every(r=>{let a=e.roots[r];return a!==void 0&&(Va(t,a)??0)>0})})}p($S,"scoreCompetition");function XS(e,n){return e.candidateIndices.filter(o=>{let t=e.roots[o];return t!==void 0&&F(t)&&n.has(o)}).sort((o,t)=>ne(e.roots,o,t))}p(XS,"projectedSpiritIndices");function YS(e,n){if(!e.config.planner.enabled||!I(e.config)||n.size<2)return!1;let o=XS(e,n)[0],t=o===void 0?void 0:e.roots[o],r=o===void 0?void 0:n.get(o);return o===void 0||t===void 0||r===void 0?!1:e.candidateIndices.some(a=>{if(a===o)return!1;let i=e.roots[a],s=n.get(a);if(i===void 0||s===void 0)return!1;let u=Ss(i,e.perspective),c=zt(i,e.perspective)&&s.plan.headFamily===S.DrainerSafetyRecovery;return(u||c)&&Math.abs(i.score-t.score)<=320&&(Gr(i,s,t,r)??0)>0})}p(YS,"projectionCompetition");function QS(e,n){if(!e.config.planner.enabled||!I(e.config))return!1;let o=XS(e,n).slice(0,3);if(o.length===0||o.some(r=>{let a=n.get(r);return a!==void 0&&Bo(a.plan.utility)}))return!1;let t=Math.max(...o.map(r=>e.roots[r]?.score??-2147483648));return e.candidateIndices.some(r=>{if(o.includes(r))return!1;let a=e.roots[r];return a!==void 0&&!a.spiritDevelopment&&!a.spiritSameTurnScoreSetupNow&&!a.spiritOwnManaSetupNow&&!a.ownDrainerVulnerable&&!a.manaHandoffToOpponent&&!a.hasRoundtrip&&a.score>=t})}p(QS,"negativeDenyCompetition");function ZS(e,n){if(!n.config.planner.enabled||!I(n.config))return!1;let o=n.candidateIndices.filter(a=>{let i=n.roots[a];return i!==void 0&&(i.spiritDevelopment||i.spiritSameTurnScoreSetupNow||i.spiritOwnManaSetupNow)}).sort((a,i)=>ne(n.roots,a,i)).slice(0,3);if(o.length===0)return!1;let t=Math.max(...o.map(a=>n.roots[a]?.score??-2147483648)),r=o.map(a=>n.roots[a]).filter(a=>a!==void 0).map(a=>Xe(e,n.game,a,n.perspective,n.config));return r.length===0?!1:n.candidateIndices.some(a=>{let i=n.roots[a];if(i===void 0||i.spiritDevelopment||i.spiritSameTurnScoreSetupNow||i.spiritOwnManaSetupNow||!i.ownDrainerVulnerable||i.manaHandoffToOpponent||i.hasRoundtrip||i.score<t)return!1;let s=Il(e,n.game,i,n.perspective,n.config);return s!==void 0&&r.every(u=>Nl(s,u))})}p(ZS,"riskyRecoveryCompetition");function JS(e,n,o){if(!Tn(n.config)||o.length===0||!o.every(u=>{let c=n.roots[u];return c!==void 0&&F(c)&&!x(c)&&!c.manaHandoffToOpponent&&!c.hasRoundtrip}))return;let t=Math.min(...o.map(u=>n.roots[u]?.rootRank??Number.MAX_SAFE_INTEGER)),r=Math.max(...o.map(u=>n.roots[u]?.score??-2147483648)),a=new Map,i=p(u=>{let c=a.get(u);if(c!==void 0)return c;let l=n.roots[u],m=l===void 0?-2147483648:He(e,l.game,n.perspective,n.config);return a.set(u,m),m},"followup"),s=Math.max(...o.map(i));return n.candidateIndices.filter(u=>!o.includes(u)).filter(u=>{let c=n.roots[u];return c!==void 0&&!x(c)&&!c.ownDrainerVulnerable&&!c.ownDrainerWalkVulnerable&&!c.manaHandoffToOpponent&&!c.hasRoundtrip&&!c.spiritDevelopment&&!c.spiritSameTurnScoreSetupNow&&!c.spiritOwnManaSetupNow&&c.policyPriority>0&&c.rootRank<=t+2&&v(c.score,32)>=r&&i(u)>=v(s,32)}).sort((u,c)=>{let l=i(u),m=i(c);return l!==m?l>m?-1:1:ne(n.roots,u,c)})[0]}p(JS,"safeProgressReentryAfterSafetyPrefilter");var gs=Object.freeze({kind:"continue"}),AP=Object.freeze({kind:"select"});function Vr(e){return e?AP:gs}p(Vr,"competitionResult");function za(e){return e===void 0?gs:{kind:"compare",order:e}}p(za,"comparisonResult");function Dl(e){return e.length===0?gs:{kind:"select",indices:e}}p(Dl,"indexSelectionResult");function Bu(e){return Object.freeze(e.map(n=>Object.freeze(n)))}p(Bu,"freezeRules");function _u(e){let n=new Map,o=new Map,t=p(c=>{let l=`${c.perspective}:${c.candidateIndices.join(",")}`,m=n.get(l);if(m!==void 0)return m;let d=rl(e,c.roots,c.candidateIndices,c.perspective,c.config);return n.set(l,d),d},"projections"),r=p(c=>{let l=Math.max(...c.candidateIndices.map(b=>c.roots[b]?.score??-2147483648)),m=Math.max(c.config.policy.drainerSafetyScoreMargin,0),d=c.config.planner.enabled&&I(c.config)?c.candidateIndices.filter(b=>{let k=c.roots[b];return k!==void 0&&k.ownDrainerVulnerable&&!k.manaHandoffToOpponent&&!k.hasRoundtrip&&k.score+m>=l&&zt(k,c.perspective)}):[],y=I(c.config)&&c.selectedIndices.length>0&&d.length>0?c.selectedIndices.map(b=>c.roots[b]).filter(b=>b!==void 0).map(b=>Xe(e,c.game,b,c.perspective,c.config)).sort((b,k)=>Bn(k,b))[0]:void 0,f=Math.max(...c.selectedIndices.map(b=>c.roots[b]?.score??-2147483648)),h=[...c.selectedIndices];for(let b of d){let k=c.roots[b];if(k===void 0)continue;let M=k.attacksOpponentDrainer||k.classes.drainerSafetyRecover||k.sameTurnScoreWindowValue>0||k.spiritSameTurnScoreSetupNow||k.spiritOwnManaSetupNow||z(k);if(_(f,k.score)>(M?48:24))continue;let P=Il(e,c.game,k,c.perspective,c.config);P===void 0||y!==void 0&&!Nl(P,y)||h.includes(b)||h.push(b)}let C=JS(e,c,h);return C!==void 0&&!h.includes(C)&&(h.push(C),h.sort((b,k)=>ne(c.roots,b,k))),h.filter(b=>!c.selectedIndices.includes(b))},"safetyReentries"),a=Bu([{id:"competition.safe-progress",kind:_n.SafeProgress,evaluate:p(c=>Vr(qS(c)),"evaluate")},{id:"competition.followup-progress",kind:_n.FollowupProgress,evaluate:p(c=>Vr(zS(e,c)),"evaluate")},{id:"competition.risky-score",kind:_n.RiskyScore,evaluate:p(c=>Vr(KS(c)),"evaluate")},{id:"competition.negative-deny",kind:_n.NegativeDeny,evaluate:p(c=>Vr(QS(c,t(c))),"evaluate")},{id:"competition.score",kind:_n.Score,evaluate:p(c=>Vr($S(c)),"evaluate")},{id:"competition.projection",kind:_n.Projection,evaluate:p(c=>Vr(YS(c,t(c))),"evaluate")},{id:"competition.risky-recovery",kind:_n.RiskyRecovery,evaluate:p(c=>Vr(ZS(e,c)),"evaluate")}]),i=Bu([{id:"safety-reentry.recovery-and-progress",select:p(c=>Dl(r(c)),"select")}]),s=Bu([{id:"final-reentry.plain-spirit-progress",select(c){let l=El(e,c.roots,c.candidateIndices,c.perspective,c.config);return Dl(l===void 0?[]:[l])}},{id:"final-reentry.risky-recovery",select(c){let l=Ol(e,c.game,c.roots,c.candidateIndices,c.perspective,c.config);return Dl(l===void 0?[]:[l])}}]),u=Bu([{id:"comparison.spirit-setup",phase:et.SpiritSetup,compare(c){return za(jS(e,c,c.candidateIndex,c.incumbentIndex)?1:-1)}},{id:"comparison.projection-challenge",phase:et.ProjectionChallenge,compare(c){let l=c.roots[c.candidateIndex],m=c.roots[c.incumbentIndex];if(l===void 0||m===void 0)return gs;let d=t(c);return za(Gr(l,d.get(c.candidateIndex),m,d.get(c.incumbentIndex)))}},{id:"comparison.projection",phase:et.Projection,compare(c){let l=t(c),m=l.get(c.candidateIndex),d=l.get(c.incumbentIndex);if(m===void 0&&d===void 0)return gs;if(m===void 0)return za(-1);if(d===void 0)return za(1);let y=c.roots[c.candidateIndex],f=c.roots[c.incumbentIndex];return za(Yt(m,d,y!==void 0&&f!==void 0&&Math.abs(y.score-f.score)<=192))}},{id:"comparison.followup-floor",phase:et.FollowupFloor,compare(c){return za(bt(e,c.game,c.roots,c.candidateIndex,c.incumbentIndex,c.perspective,c.config,o))}}]);return Object.freeze({competitionRules:a,safetyReentryRules:i,finalReentryRules:s,comparisonRules:u})}p(_u,"buildRootPolicy");function re(e){return!e.winsImmediately&&!e.attacksOpponentDrainer&&!e.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!e.safeSupermanaPickupNow&&!e.safeOpponentManaPickupNow&&!e.manaHandoffToOpponent&&!e.hasRoundtrip}p(re,"rootIsNonTactical");function eh(e,n,o,t,r,a){if(!I(a)||n.activeColor!==T.Black||n.turnNumber!==4||n.monsMovesCount!==0||n.playerCanUseAction()||!n.playerCanMoveMana())return;let i=de(e,n,n.activeColor);if(i.delta.sameTurnScoreWindowValue>1||i.delta.opponentWindowDenyGain>1||i.delta.sameTurnScoreWindowValue===0&&i.delta.opponentWindowDenyGain===0)return;let s=o[r];if(!(s===void 0||O(s)!==S.ManaTempo||s.rootRank!==0||!s.ownDrainerVulnerable||!re(s)))return ye(o,t,(u,c)=>c!==r&&O(u)===S.ManaTempo&&u.rootRank>s.rootRank&&u.rootRank<=s.rootRank+2&&u.sameTurnScoreWindowValue===s.sameTurnScoreWindowValue&&u.ownDrainerVulnerable===s.ownDrainerVulnerable&&u.ownDrainerWalkVulnerable===s.ownDrainerWalkVulnerable&&re(u)&&u.score>=_(s.score,96)&&u.scorePathBestSteps>s.scorePathBestSteps,(u,c)=>Ye(o,u,c))}p(eh,"blackTurnFourWindowManaSiblingOverride");function nh(e,n,o,t,r,a,i){if(!I(i)||n.activeColor!==T.Black||r===a||!t.includes(a))return;let s=o[r],u=o[a];if(s===void 0||u===void 0)return;let c=O(s),l=O(u),m=de(e,n,n.activeColor),d=re(s),y=re(u);return n.turnNumber>=6&&n.monsMovesCount>=2&&n.playerCanUseAction()&&n.playerCanMoveMana()&&m.delta.sameTurnScoreWindowValue===0&&m.delta.opponentWindowDenyGain===0&&!m.delta.drainerAttackAvailable&&c===S.SpiritImpact&&l===S.ManaTempo&&F(s)&&!z(s)&&d&&y&&s.ownDrainerVulnerable&&u.ownDrainerVulnerable&&u.score>=s.score||n.turnNumber===2&&n.monsMovesCount>=2&&n.playerCanUseAction()&&n.playerCanMoveMana()&&m.delta.sameTurnScoreWindowValue===0&&m.delta.opponentWindowDenyGain===0&&!m.delta.drainerAttackAvailable&&c===S.SpiritImpact&&l===S.SpiritImpact&&d&&y&&s.spiritOwnManaSetupNow&&u.spiritOwnManaSetupNow&&!s.spiritSameTurnScoreSetupNow&&!u.spiritSameTurnScoreSetupNow&&!x(s)&&!x(u)&&pe(s.inputs,u.inputs)&&s.spiritSetupGain===u.spiritSetupGain&&s.safeSupermanaProgressSteps===u.safeSupermanaProgressSteps&&s.safeOpponentManaProgressSteps===u.safeOpponentManaProgressSteps&&s.score===u.score&&u.rootRank<s.rootRank&&Math.abs(s.rootRank-u.rootRank)<=2||n.turnNumber>=4&&n.monsMovesCount===0&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&m.delta.sameTurnScoreWindowValue<=1&&m.delta.opponentWindowDenyGain<=1&&(m.delta.sameTurnScoreWindowValue>0||m.delta.opponentWindowDenyGain>0)&&c===S.ManaTempo&&l===S.ManaTempo&&d&&y&&s.sameTurnScoreWindowValue===u.sameTurnScoreWindowValue&&s.ownDrainerVulnerable===u.ownDrainerVulnerable&&s.rootRank<u.rootRank&&s.score>=u.score&&u.scorePathBestSteps>s.scorePathBestSteps?a:void 0}p(nh,"blackBaselineAlignmentOverride");function oh(e,n,o,t,r,a){if(!I(a)||n.activeColor!==T.Black||n.turnNumber!==6||n.monsMovesCount!==0||!n.playerCanUseAction()||!n.playerCanMoveMana()||t.length===0)return;let i=o[r];if(i===void 0)return;let s=de(e,n,n.activeColor);if(s.delta.sameTurnScoreWindowValue!==0||s.delta.opponentWindowDenyGain!==0||s.delta.drainerAttackAvailable||O(i)!==S.SpiritImpact||!F(i)||z(i)||!re(i)||!i.ownDrainerVulnerable)return;let u=gl(a,Le.Baseline),c;if(u.replyRisk.enabled&&(c=Lr(e,n,o,t,n.activeColor,u)),c??(c=Ha(n,o,t,n.activeColor,u)),c===void 0||c===r||!t.includes(c))return;let l=o[c];if(l===void 0||O(l)!==S.ManaTempo||!re(l)||!l.ownDrainerVulnerable||i.ownDrainerWalkVulnerable!==l.ownDrainerWalkVulnerable||i.safeSupermanaProgressSteps!==l.safeSupermanaProgressSteps||i.safeOpponentManaProgressSteps!==l.safeOpponentManaProgressSteps||i.scorePathBestSteps!==l.scorePathBestSteps||l.score<v(i.score,256))return;let m=Math.min(Math.max(a.replyRisk.replyLimit,1),24),d=pn(e,i.game,n.activeColor,a,m),y=pn(e,l.game,n.activeColor,a,m);if(!(d.allowsImmediateOpponentWin||y.allowsImmediateOpponentWin||d.opponentReachesMatchPoint||y.opponentReachesMatchPoint||y.worstReplyScore<v(d.worstReplyScore,32)))return c}p(oh,"blackTurnStartGuardedBaselineManaOverride");function th(e,n,o,t,r,a,i){if(!I(i)||n.activeColor!==T.White||n.turnNumber!==3||r===a)return;let s=o[r],u=o[a];if(s===void 0||u===void 0)return;let c=de(e,n,n.activeColor);return n.monsMovesCount>=3&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&t.includes(a)&&c.delta.sameTurnScoreWindowValue===0&&c.delta.opponentWindowDenyGain===0&&!c.delta.drainerAttackAvailable&&O(s)===S.ManaTempo&&O(u)===S.ManaTempo&&re(s)&&re(u)&&!s.spiritDevelopment&&!u.spiritDevelopment&&!s.spiritSameTurnScoreSetupNow&&!u.spiritSameTurnScoreSetupNow&&!s.spiritOwnManaSetupNow&&!u.spiritOwnManaSetupNow&&!s.ownDrainerVulnerable&&!u.ownDrainerVulnerable&&!s.ownDrainerWalkVulnerable&&!u.ownDrainerWalkVulnerable&&s.safeSupermanaProgressSteps===u.safeSupermanaProgressSteps&&s.safeOpponentManaProgressSteps===u.safeOpponentManaProgressSteps&&s.scorePathBestSteps===u.scorePathBestSteps&&s.spiritSetupGain===u.spiritSetupGain&&u.score>=v(s.score,16)&&u.rootRank>=s.rootRank+2&&u.rootRank<=s.rootRank+4?a:void 0}p(th,"whiteTurnThreeBaselineAlignmentOverride");function rh(e,n,o,t,r,a){if(!I(a)||n.activeColor!==T.White||n.turnNumber!==3||t.length!==1||t[0]!==r||o.length===0)return;let i=o[r];if(i===void 0)return;let s=de(e,n,n.activeColor);if(!s.delta.drainerAttackAvailable||s.delta.sameTurnScoreWindowValue!==0||s.delta.opponentWindowDenyGain!==0||n.monsMovesCount<2||!n.playerCanUseAction()||!n.playerCanMoveMana()||O(i)!==S.SpiritImpact||!i.spiritDevelopment||i.spiritSameTurnScoreSetupNow||!i.spiritOwnManaSetupNow||!re(i)||x(i)||i.ownDrainerVulnerable||i.ownDrainerWalkVulnerable)return;let u=o.map((c,l)=>l);return ye(o,u,(c,l)=>l!==r&&!t.includes(l)&&O(c)===S.ManaTempo&&!c.spiritDevelopment&&!c.spiritSameTurnScoreSetupNow&&!c.spiritOwnManaSetupNow&&re(c)&&!x(c)&&!c.ownDrainerVulnerable&&!c.ownDrainerWalkVulnerable&&c.safeSupermanaProgressSteps===i.safeSupermanaProgressSteps&&c.safeOpponentManaProgressSteps===i.safeOpponentManaProgressSteps&&c.scorePathBestSteps===i.scorePathBestSteps&&c.inputs.length>=3&&c.rootRank<=i.rootRank+2,(c,l)=>Ye(o,c,l))}p(rh,"whiteTurnThreeAttackBridgeEscape");function Wl(e,n,o,t,r,a){let i=n.activeColor===T.Black&&n.turnNumber===2||n.activeColor===T.White&&n.turnNumber===3;if(!I(a)||!n.playerCanMoveMana()||o.length===0||!i||!Ln(e,n))return;let s=o[r];if(s===void 0)return;let u=O(s);if(!(!ln(u,S.ManaTempo,S.SpiritImpact)||s.winsImmediately||s.attacksOpponentDrainer||s.sameTurnScoreWindowValue>0||s.scoresSupermanaThisTurn||s.scoresOpponentManaThisTurn||s.safeSupermanaPickupNow||s.safeOpponentManaPickupNow||s.manaHandoffToOpponent||s.hasRoundtrip||x(s)))return ye(o,t,(c,l)=>l!==r&&O(c)===u&&pe(c.inputs,s.inputs)&&!c.winsImmediately&&!c.attacksOpponentDrainer&&c.sameTurnScoreWindowValue===0&&!c.scoresSupermanaThisTurn&&!c.scoresOpponentManaThisTurn&&!c.safeSupermanaPickupNow&&!c.safeOpponentManaPickupNow&&!c.manaHandoffToOpponent&&!c.hasRoundtrip&&!x(c)&&c.spiritDevelopment===s.spiritDevelopment&&c.spiritSameTurnScoreSetupNow===s.spiritSameTurnScoreSetupNow&&c.spiritOwnManaSetupNow===s.spiritOwnManaSetupNow&&c.supermanaProgress===s.supermanaProgress&&c.opponentManaProgress===s.opponentManaProgress&&c.safeSupermanaProgressSteps===s.safeSupermanaProgressSteps&&c.safeOpponentManaProgressSteps===s.safeOpponentManaProgressSteps&&c.scorePathBestSteps===s.scorePathBestSteps&&c.spiritSetupGain===s.spiritSetupGain&&c.ownDrainerVulnerable===s.ownDrainerVulnerable&&c.ownDrainerWalkVulnerable===s.ownDrainerWalkVulnerable&&c.score>=v(s.score,8)&&c.rootRank<=s.rootRank+8,(c,l)=>{let m=o[c],d=o[l];return m===void 0||d===void 0?c-l:m.score!==d.score?m.score>d.score?-1:1:m.rootRank!==d.rootRank?m.rootRank>d.rootRank?-1:1:-ne(o,c,l)})}p(Wl,"earlySameLaneHigherScoreOverride");function ah(e,n,o,t,r,a){if(!I(a)||n.activeColor!==T.White||n.turnNumber!==5||n.monsMovesCount!==0||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0)return;let i=de(e,n,n.activeColor);if(!(i.delta.sameTurnScoreWindowValue<=1&&i.delta.opponentWindowDenyGain<=1&&!i.delta.drainerAttackAvailable&&(i.delta.sameTurnScoreWindowValue>0||i.delta.opponentWindowDenyGain>0)))return;let u=o[r];if(!(u===void 0||!ln(O(u),S.SafeSupermanaProgress,S.SafeOpponentManaProgress)||x(u)||u.winsImmediately||u.attacksOpponentDrainer||u.spiritDevelopment||u.spiritSameTurnScoreSetupNow||u.spiritOwnManaSetupNow||u.sameTurnScoreWindowValue>0||u.scoresSupermanaThisTurn||u.scoresOpponentManaThisTurn||u.safeSupermanaPickupNow||u.safeOpponentManaPickupNow||u.manaHandoffToOpponent||u.hasRoundtrip))return ye(o,t,(c,l)=>l!==r&&O(c)===S.SpiritImpact&&c.spiritOwnManaSetupNow&&!c.spiritSameTurnScoreSetupNow&&z(c)&&!x(c)&&!c.winsImmediately&&!c.attacksOpponentDrainer&&c.sameTurnScoreWindowValue===0&&!c.scoresSupermanaThisTurn&&!c.scoresOpponentManaThisTurn&&!c.safeSupermanaPickupNow&&!c.safeOpponentManaPickupNow&&c.manaHandoffToOpponent===u.manaHandoffToOpponent&&c.hasRoundtrip===u.hasRoundtrip&&c.ownDrainerVulnerable===u.ownDrainerVulnerable&&c.ownDrainerWalkVulnerable===u.ownDrainerWalkVulnerable&&_(u.score,c.score)<=96&&c.spiritSetupGain>=v(u.spiritSetupGain,48)&&c.safeSupermanaProgressSteps<=u.safeSupermanaProgressSteps+1&&c.safeOpponentManaProgressSteps<=u.safeOpponentManaProgressSteps+1&&c.rootRank<=u.rootRank+4,(c,l)=>Ye(o,c,l))}p(ah,"whiteTurnFiveWeakWindowSetupOverride");function Hr(e,n){let o=Math.max(e,1),t=Math.max(Math.trunc(n.budget.maxVisitedNodes*Math.max(n.replyRisk.nodeShareBp,0)/1e4),o,1);return Math.min(Math.max(Math.trunc(t/o),1),Math.max(n.replyRisk.replyLimit,1))}p(Hr,"replyLimitForRoots");function ih(e,n,o,t,r,a,i){if(!I(i)||n.activeColor!==T.Black||n.turnNumber<6||n.monsMovesCount!==0||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0)return;let s=o[r];if(s===void 0||O(s)!==S.SpiritImpact||!F(s)||!z(s)||s.winsImmediately||s.attacksOpponentDrainer||s.sameTurnScoreWindowValue>0||s.scoresSupermanaThisTurn||s.scoresOpponentManaThisTurn||s.safeSupermanaPickupNow||s.safeOpponentManaPickupNow||s.manaHandoffToOpponent||s.hasRoundtrip||x(s))return;let u=Hr(t.length,i),c=pn(e,s.game,a,i,u);if(c.allowsImmediateOpponentWin||c.opponentReachesMatchPoint)return;let l=new Map,m=new Map([[r,c]]),d=new Map,y=p(P=>{let g=l.get(P);if(g!==void 0)return g;let W=o[P],E=W===void 0?Xe(e,n,s,a,i):Xe(e,n,W,a,i);return l.set(P,E),E},"utility"),f=p(P=>{let g=m.get(P);if(g!==void 0)return g;let W=o[P],E=pn(e,W?.game??s.game,a,i,u);return m.set(P,E),E},"snapshot"),h=p(P=>{let g=d.get(P);if(g!==void 0)return g;let W=o[P],E=He(e,W?.game??s.game,a,i);return d.set(P,E),E},"followup"),C=y(r),b=h(r),k=de(e,n,n.activeColor),M=k.delta.sameTurnScoreWindowValue<=1&&k.delta.opponentWindowDenyGain<=1,R;for(let P of t){if(P===r)continue;let g=o[P];if(g===void 0||O(g)!==S.SpiritImpact||!g.spiritOwnManaSetupNow||g.spiritSameTurnScoreSetupNow||!z(g)||g.winsImmediately||g.attacksOpponentDrainer||g.sameTurnScoreWindowValue>0||g.scoresSupermanaThisTurn||g.scoresOpponentManaThisTurn||g.safeSupermanaPickupNow||g.safeOpponentManaPickupNow||g.manaHandoffToOpponent||g.hasRoundtrip||x(g)||!pe(g.inputs,s.inputs)||g.supermanaProgress!==s.supermanaProgress||g.opponentManaProgress!==s.opponentManaProgress||g.ownDrainerVulnerable!==s.ownDrainerVulnerable||g.ownDrainerWalkVulnerable!==s.ownDrainerWalkVulnerable)continue;let W=y(P),E=f(P),D=h(P),N=lo(W,C)||cn(g,s),B=M&&g.spiritSetupGain>s.spiritSetupGain&&g.score>=_(s.score,512);if(!B&&!N||E.allowsImmediateOpponentWin||E.opponentReachesMatchPoint||!B&&v(E.worstReplyScore,320)<c.worstReplyScore||!B&&v(D,32)<b)continue;if(R===void 0){R=P;continue}let G=o[R];if(G===void 0){R=P;continue}let L;if(M)L=g.score>G.score||g.score===G.score&&(g.spiritSetupGain>G.spiritSetupGain||g.spiritSetupGain===G.spiritSetupGain&&ne(o,P,R)<0);else{let $=J(W,y(R)),V=f(R),se=h(R);$>0?L=!0:$!==0?L=!1:E.worstReplyScore!==V.worstReplyScore?L=E.worstReplyScore>V.worstReplyScore:D!==se?L=D>se:g.spiritSetupGain!==G.spiritSetupGain?L=g.spiritSetupGain>G.spiritSetupGain:g.score!==G.score?L=g.score>G.score:L=ne(o,P,R)<0}L&&(R=P)}return R}p(ih,"blackSetupProgressCompetitionOverride");function sh(e,n,o,t,r,a,i){if(!I(i)||n.activeColor!==T.White||n.turnNumber!==3||n.monsMovesCount<3||o.length===0)return;let s=o[r];if(s===void 0||O(s)!==S.ManaTempo||s.ownDrainerVulnerable||s.ownDrainerWalkVulnerable||s.manaHandoffToOpponent||s.hasRoundtrip||s.winsImmediately||s.attacksOpponentDrainer||s.sameTurnScoreWindowValue>0||s.scoresSupermanaThisTurn||s.scoresOpponentManaThisTurn||s.safeSupermanaPickupNow||s.safeOpponentManaPickupNow||x(s))return;let u=Vo(e,n,s,a,i,S.ManaTempo),c=new Map,l,m=u,d=!1;for(let y of t){if(y===r)continue;let f=o[y];if(f===void 0)continue;let h=ja(f,s,i)&&_(s.score,f.score)<=24&&Math.abs(s.rootRank-f.rootRank)<=4&&f.rootRank<s.rootRank;if(O(f)!==S.ManaTempo||f.ownDrainerVulnerable||f.ownDrainerWalkVulnerable||f.manaHandoffToOpponent||f.hasRoundtrip||f.winsImmediately||f.attacksOpponentDrainer||f.sameTurnScoreWindowValue>0||f.scoresSupermanaThisTurn||f.scoresOpponentManaThisTurn||f.safeSupermanaPickupNow||f.safeOpponentManaPickupNow||!h&&f.score<_(s.score,96)||x(f)||f.rootRank>=s.rootRank&&!h)continue;let C=c.get(y);C===void 0&&(C=Vo(e,n,f,a,i,S.ManaTempo),c.set(y,C));let k=J(C,u)>0||Fn(C,u);if(!k&&!h)continue;let M=l===void 0;if(l!==void 0){let R=o[l];if(R===void 0)M=!0;else{let P=ja(R,s,i)&&_(s.score,R.score)<=24&&Math.abs(s.rootRank-R.rootRank)<=4&&R.rootRank<s.rootRank;if(k!==d)M=k;else if(k){let g=J(C,m);M=g>0||g===0&&ne(o,y,l)<0}else h&&P?M=f.rootRank<R.rootRank||f.rootRank===R.rootRank&&ne(o,y,l)<0:M=h}}M&&(l=y,m=C,d=k)}return l}p(sh,"whiteManaCompetitionOverride");function uh(e,n,o,t,r,a){if(!I(a)||n.activeColor!==T.White||n.turnNumber<5||n.monsMovesCount!==0||n.playerCanUseAction()||!n.playerCanMoveMana()||!Ln(e,n))return;let i=o[r];if(!(i===void 0||!ln(O(i),S.SafeSupermanaProgress,S.SafeOpponentManaProgress)||!i.ownDrainerVulnerable||!re(i)||i.sameTurnScoreWindowValue>0))return ye(o,t,(s,u)=>u!==r&&O(s)===S.ManaTempo&&!x(s)&&!s.ownDrainerVulnerable&&!s.ownDrainerWalkVulnerable&&re(s)&&s.sameTurnScoreWindowValue===0&&s.safeSupermanaProgressSteps<=i.safeSupermanaProgressSteps+1&&s.safeOpponentManaProgressSteps<=i.safeOpponentManaProgressSteps+1&&v(s.score,448)>=i.score,(s,u)=>Ye(o,s,u))}p(uh,"whiteNoActionSafeProgressManaOverride");function tt(e){return O(e)===S.ManaTempo&&e.sameTurnScoreWindowValue>0&&e.sameTurnScoreWindowValue<=1&&!e.winsImmediately&&!e.attacksOpponentDrainer&&!e.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!e.safeSupermanaPickupNow&&!e.safeOpponentManaPickupNow&&!e.manaHandoffToOpponent&&!e.hasRoundtrip}p(tt,"isNonConcreteManaWindowRoot");function EP(e,n,o,t){return I(t)&&e.activeColor===T.White&&e.turnNumber>=5&&e.monsMovesCount===0&&e.playerCanUseAction()&&e.playerCanMoveMana()&&O(n)===S.SpiritImpact&&!n.spiritSameTurnScoreSetupNow&&!n.spiritOwnManaSetupNow&&z(n)&&re(n)&&n.sameTurnScoreWindowValue===0&&tt(o)&&n.ownDrainerVulnerable===o.ownDrainerVulnerable&&n.ownDrainerWalkVulnerable===o.ownDrainerWalkVulnerable}p(EP,"isWhiteSpiritProgressWindowPair");function ch(e,n,o,t,r,a,i){if(!I(i)||n.activeColor!==T.White||n.turnNumber<5||n.monsMovesCount!==0||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0)return;let s=o[r];if(s===void 0||!tt(s))return;let u=de(e,n,n.activeColor),c=u.delta.sameTurnScoreWindowValue<=1&&u.delta.opponentWindowDenyGain<=1,l=Hr(t.length,i),m=pn(e,s.game,a,i,l);if(m.allowsImmediateOpponentWin||m.opponentReachesMatchPoint)return;let d=Xe(e,n,s,a,i),y=He(e,s.game,a,i),f=new Map([[r,m]]),h=new Map([[r,y]]),C=p(M=>{let R=f.get(M),P=o[M];return R===void 0&&P!==void 0&&(R=pn(e,P.game,a,i,l),f.set(M,R)),R},"snapshot"),b=p(M=>{let R=h.get(M),P=o[M];return R===void 0&&P!==void 0&&(R=He(e,P.game,a,i),h.set(M,R)),R},"followup"),k;for(let M of t){if(M===r)continue;let R=o[M];if(R===void 0||!EP(n,R,s,i)||R.rootRank>s.rootRank+8)continue;let P=C(M),g=b(M);if(P===void 0||g===void 0)continue;let W=cn(R,s),E=c&&W&&R.score>=_(s.score,32),D=lo(Xe(e,n,R,a,i),d)||W;if(!(P.allowsImmediateOpponentWin||P.opponentReachesMatchPoint||!E&&!D||!E&&v(P.worstReplyScore,192)<m.worstReplyScore||!E&&v(g,32)<y))if(k===void 0)k=M;else{let N=C(k),B=b(k);(N===void 0||B===void 0||g>B||g===B&&P.worstReplyScore>N.worstReplyScore||g===B&&P.worstReplyScore===N.worstReplyScore&&ne(o,M,k)<0)&&(k=M)}}return k}p(ch,"whiteWindowProgressCompetitionOverride");function ph(e,n,o,t,r){if(!I(r)||e.activeColor!==T.White||e.turnNumber<5||e.monsMovesCount!==0||!e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(!(a===void 0||O(a)!==S.SpiritImpact||!F(a)||!z(a)||!re(a)||a.sameTurnScoreWindowValue>0||x(a)))return ye(n,o,(i,s)=>s!==t&&O(i)===S.ManaTempo&&!i.spiritDevelopment&&!i.spiritSameTurnScoreSetupNow&&!i.spiritOwnManaSetupNow&&re(i)&&i.sameTurnScoreWindowValue===0&&!x(i)&&pe(i.inputs,a.inputs)&&i.ownDrainerVulnerable===a.ownDrainerVulnerable&&i.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&i.safeSupermanaProgressSteps<=a.safeSupermanaProgressSteps&&i.safeOpponentManaProgressSteps<=a.safeOpponentManaProgressSteps&&i.score>=a.score,(i,s)=>{let u=n[i],c=n[s];return u===void 0||c===void 0?i-s:u.score!==c.score?u.score>c.score?-1:1:ne(n,i,s)})}p(ph,"whiteActionManaClusterOverride");function lh(e,n,o,t,r,a,i){if(!I(i)||n.activeColor!==T.White||n.turnNumber!==3||n.monsMovesCount<2||!n.playerCanUseAction()||!n.playerCanMoveMana()||t.length!==1||o.length===0)return;let s=o[r];if(s===void 0||O(s)!==S.SpiritImpact||!s.spiritOwnManaSetupNow||s.spiritSameTurnScoreSetupNow||!re(s)||s.sameTurnScoreWindowValue>0||x(s))return;let u=Xe(e,n,s,a,i);return ye(o,o.map((c,l)=>l),(c,l)=>l===r||O(c)!==S.ManaTempo||c.spiritDevelopment||c.spiritSameTurnScoreSetupNow||c.spiritOwnManaSetupNow||c.ownDrainerVulnerable||c.ownDrainerWalkVulnerable||!re(c)||c.sameTurnScoreWindowValue!==0||x(c)||c.rootRank>s.rootRank+2||c.safeSupermanaProgressSteps>s.safeSupermanaProgressSteps||c.safeOpponentManaProgressSteps>s.safeOpponentManaProgressSteps||c.scorePathBestSteps>s.scorePathBestSteps?!1:J(Xe(e,n,c,a,i),u)>0||c.score>=v(s.score,512),(c,l)=>ne(o,c,l))}p(lh,"whiteFollowupManaOverride");function Gu(e){return e.activeColor===T.Black&&e.turnNumber>=8&&e.monsMovesCount===0&&e.playerCanUseAction()&&e.playerCanMoveMana()}p(Gu,"isLateBlackActionManaTurnStart");function OP(e,n,o,t){return I(t)&&Gu(e)&&O(n)===S.SpiritImpact&&n.spiritDevelopment&&!n.spiritSameTurnScoreSetupNow&&!n.spiritOwnManaSetupNow&&n.sameTurnScoreWindowValue===0&&re(n)&&!x(n)&&O(o)===S.ManaTempo&&o.sameTurnScoreWindowValue===0&&re(o)&&!x(o)&&pe(n.inputs,o.inputs)}p(OP,"isLateBlackSpiritFollowupManaPair");function dh(e,n,o,t,r){if(!I(r)||!Gu(e)||n.length===0)return;let a=n[t];if(!(a===void 0||O(a)!==S.ManaTempo))return ye(n,o,(i,s)=>s!==t&&OP(e,i,a,r)&&_(a.score,i.score)<=512&&i.rootRank<a.rootRank&&Math.abs(a.rootRank-i.rootRank)<=16,(i,s)=>Ye(n,i,s))}p(dh,"blackLateFollowupCompetitionOverride");function mh(e,n,o,t,r,a){if(!I(a)||!Gu(n)||t.length===0||o.length===0||!Ln(e,n))return;let i=o[r];if(!(i===void 0||O(i)!==S.ManaTempo||i.spiritDevelopment||i.spiritSameTurnScoreSetupNow||i.spiritOwnManaSetupNow||z(i)||!re(i)||i.sameTurnScoreWindowValue>0||x(i)||i.ownDrainerVulnerable||i.ownDrainerWalkVulnerable))return ye(o,t,(s,u)=>u!==r&&O(s)===S.SpiritImpact&&s.spiritOwnManaSetupNow&&!s.spiritSameTurnScoreSetupNow&&!z(s)&&re(s)&&s.sameTurnScoreWindowValue===0&&!x(s)&&!s.ownDrainerVulnerable&&!s.ownDrainerWalkVulnerable&&s.spiritSetupGain>=v(i.spiritSetupGain,64)&&_(i.score,s.score)<=2048&&s.safeSupermanaProgressSteps===i.safeSupermanaProgressSteps&&s.safeOpponentManaProgressSteps===i.safeOpponentManaProgressSteps&&s.scorePathBestSteps===i.scorePathBestSteps&&s.rootRank<i.rootRank&&Math.abs(i.rootRank-s.rootRank)<=4,(s,u)=>{let c=o[s],l=o[u];return c===void 0||l===void 0?s-u:c.rootRank!==l.rootRank?c.rootRank<l.rootRank?-1:1:c.spiritSetupGain!==l.spiritSetupGain?c.spiritSetupGain>l.spiritSetupGain?-1:1:ne(o,s,u)})}p(mh,"blackLateReplyRiskSetupOverride");function fh(e,n,o,t,r,a,i){if(!I(i)||!Gu(n)||t.length===0||o.length===0)return;let s=de(e,n,n.activeColor);if(!(s.delta.sameTurnScoreWindowValue<=1&&s.delta.opponentWindowDenyGain<=1&&!s.delta.drainerAttackAvailable&&(s.delta.sameTurnScoreWindowValue>0||s.delta.opponentWindowDenyGain>0)))return;let c=o[r];if(c===void 0)return;let l=O(c);if(!ln(l,S.SafeSupermanaProgress,S.SafeOpponentManaProgress)||!z(c)||c.spiritDevelopment||c.spiritSameTurnScoreSetupNow||c.spiritOwnManaSetupNow||!re(c)||c.sameTurnScoreWindowValue>0||x(c)||c.ownDrainerVulnerable||c.ownDrainerWalkVulnerable)return;let m=Xe(e,n,c,a,i);return ye(o,t,(d,y)=>y!==r&&O(d)===S.SpiritImpact&&d.spiritOwnManaSetupNow&&!d.spiritSameTurnScoreSetupNow&&z(d)&&re(d)&&d.sameTurnScoreWindowValue===0&&d.manaHandoffToOpponent===c.manaHandoffToOpponent&&d.hasRoundtrip===c.hasRoundtrip&&!x(d)&&d.ownDrainerVulnerable===c.ownDrainerVulnerable&&d.ownDrainerWalkVulnerable===c.ownDrainerWalkVulnerable&&d.supermanaProgress===c.supermanaProgress&&d.opponentManaProgress===c.opponentManaProgress&&lo(Xe(e,n,d,a,i),m)&&_(c.score,d.score)<=32&&d.spiritSetupGain>=v(c.spiritSetupGain,64)&&d.rootRank<=c.rootRank+4,(d,y)=>{let f=o[d],h=o[y];return f===void 0||h===void 0?d-y:f.score!==h.score?f.score>h.score?-1:1:f.spiritSetupGain!==h.spiritSetupGain?f.spiritSetupGain>h.spiritSetupGain?-1:1:f.rootRank!==h.rootRank?f.rootRank<h.rootRank?-1:1:ne(o,d,y)})}p(fh,"blackLateWeakWindowSafeProgressSetupOverride");function xP(e,n,o,t){return I(t)&&e.activeColor===T.Black&&e.turnNumber<=4&&O(n)===S.SpiritImpact&&!n.spiritSameTurnScoreSetupNow&&!n.spiritOwnManaSetupNow&&z(n)&&!n.winsImmediately&&!n.attacksOpponentDrainer&&!n.scoresSupermanaThisTurn&&!n.scoresOpponentManaThisTurn&&!n.safeSupermanaPickupNow&&!n.safeOpponentManaPickupNow&&!n.manaHandoffToOpponent&&!n.hasRoundtrip&&tt(o)&&n.ownDrainerVulnerable===o.ownDrainerVulnerable&&n.ownDrainerWalkVulnerable===o.ownDrainerWalkVulnerable}p(xP,"isBlackSpiritProgressWindowPair");function yh(e,n,o,t,r,a,i,s){if(!I(s)||n.activeColor!==T.Black||o.length===0)return;let u=o[a];if(u===void 0||O(u)!==S.ManaTempo||a>1&&!(n.turnNumber<=2&&n.playerCanUseAction()&&n.playerCanMoveMana()))return;let c=tt(u);if(u.winsImmediately||u.attacksOpponentDrainer||u.sameTurnScoreWindowValue>0&&!c||u.scoresSupermanaThisTurn||u.scoresOpponentManaThisTurn||u.safeSupermanaPickupNow||u.safeOpponentManaPickupNow)return;let l=Vo(e,n,u,i,s,S.ManaTempo),m=x(u),d=z(u),y=Hr(t.length,s),f=new Map,h=new Map,C=p(R=>{let P=f.get(R),g=o[R];return P===void 0&&g!==void 0&&(P=pn(e,g.game,i,s,y),f.set(R,P)),P},"snapshot"),b=p(R=>{let P=h.get(R),g=o[R];return P===void 0&&g!==void 0&&(P=He(e,g.game,i,s),h.set(R,P)),P},"followup"),k=[];for(let R of r){if(R===a)continue;let P=o[R];if(P===void 0)continue;let g=O(P),W=P.spiritOwnManaSetupNow||P.spiritSameTurnScoreSetupNow,E=g===S.SpiritImpact&&!W&&z(P),N=ln(g,S.SafeSupermanaProgress,S.SafeOpponentManaProgress)&&!c,B=W&&!c&&n.turnNumber<=4;if(!B&&!N&&!E)continue;let G=Xe(e,n,P,i,s),L=z(P),$=cn(P,u)||L&&!d;if(g===S.SpiritImpact&&!m&&!x(P)&&O(u)===S.ManaTempo&&!d&&!u.spiritDevelopment&&!u.spiritSameTurnScoreSetupNow&&!u.spiritOwnManaSetupNow&&P.spiritDevelopment&&!P.spiritSameTurnScoreSetupNow&&!P.spiritOwnManaSetupNow&&L&&!P.winsImmediately&&!P.attacksOpponentDrainer&&!P.scoresSupermanaThisTurn&&!P.scoresOpponentManaThisTurn&&!P.safeSupermanaPickupNow&&!P.safeOpponentManaPickupNow&&!P.manaHandoffToOpponent&&!P.hasRoundtrip&&P.sameTurnScoreWindowValue===0&&P.score<=u.score)continue;let se=N&&n.turnNumber<=6&&u.score<0&&P.score>=0&&$,Pe=!1;if(E&&c&&xP(n,P,u,s)&&P.rootRank<=u.rootRank+8){let en=C(R),De=C(a),kn=b(R),Ie=b(a);Pe=en!==void 0&&De!==void 0&&kn!==void 0&&Ie!==void 0&&!en.allowsImmediateOpponentWin&&!De.allowsImmediateOpponentWin&&!en.opponentReachesMatchPoint&&!De.opponentReachesMatchPoint&&cn(P,u)&&v(en.worstReplyScore,192)>=De.worstReplyScore&&v(kn,32)>=Ie}if(!lo(G,l)&&!se&&!Pe||x(P)&&!m&&!B&&!se&&!Pe)continue;let Je=B&&xl(e,n,P,u,i,s);($||Je||Pe)&&k.push(R)}return k.map(R=>{let P=o[R];if(P===void 0||!P.spiritOwnManaSetupNow||P.spiritSameTurnScoreSetupNow)return R;let g=C(R);return g===void 0?R:t.filter(E=>{let D=o[E];if(E===R||D===void 0||!Fr(n,D,P,s))return!1;let N=C(E);return N!==void 0&&(bs(e,n,o,E,N,R,g,i,s,h)??0)>0}).sort((E,D)=>{let N=o[E],B=o[D],G=C(E),L=C(D);if(N===void 0||B===void 0||G===void 0||L===void 0)return E-D;if(G.worstReplyScore!==L.worstReplyScore)return G.worstReplyScore>L.worstReplyScore?-1:1;let $=b(E)??-2147483648,V=b(D)??-2147483648;return $!==V?$>V?-1:1:N.score!==B.score?N.score>B.score?-1:1:ne(o,E,D)})[0]??R}).sort((R,P)=>ne(o,R,P))[0]}p(yh,"blackFamilyCompetitionOverride");function Sh(e,n,o,t,r){if(!I(r)||e.activeColor!==T.Black||e.turnNumber<8||e.monsMovesCount===0||e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(a===void 0||O(a)!==S.ManaTempo||!tt(a)||!a.ownDrainerVulnerable||a.ownDrainerWalkVulnerable)return;let i=z(a);return ye(n,o,(s,u)=>{let c=z(s),l=cn(s,a)||c&&!i;return u!==t&&O(s)===S.ManaTempo&&pe(s.inputs,a.inputs)&&s.sameTurnScoreWindowValue===0&&!s.ownDrainerVulnerable&&!s.ownDrainerWalkVulnerable&&re(s)&&!x(s)&&(a.rootRank>0||l)&&_(a.score,s.score)<=32&&s.rootRank<=a.rootRank+2},(s,u)=>Ye(n,s,u))}p(Sh,"blackLateWindowManaSafetyOverride");function hh(e,n,o,t,r){if(!I(r)||n.activeColor!==T.Black||n.turnNumber<8||n.monsMovesCount<3||n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0)return;let a=de(e,n,n.activeColor);if(a.delta.sameTurnScoreWindowValue===0&&a.delta.opponentWindowDenyGain===0)return;let i=o[t];if(!(i===void 0||O(i)!==S.ManaTempo||i.sameTurnScoreWindowValue!==0||!re(i)||x(i)))return ye(o,o.map((s,u)=>u),(s,u)=>u!==t&&O(s)===S.ManaTempo&&tt(s)&&s.rootRank===0&&s.ownDrainerVulnerable&&!s.ownDrainerWalkVulnerable&&_(i.score,s.score)<=256,(s,u)=>ne(o,s,u))}p(hh,"blackLateWindowCompetitionOverride");function bh(e,n,o,t,r){if(!I(r)||e.activeColor!==T.Black||e.turnNumber<12||e.monsMovesCount!==0||e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(!(a===void 0||O(a)!==S.DrainerSafetyRecovery||!a.spiritDevelopment||!z(a)||a.spiritSameTurnScoreSetupNow||a.spiritOwnManaSetupNow||a.sameTurnScoreWindowValue>0||!re(a)||x(a)||a.inputs.length<3))return ye(n,o,(i,s)=>s!==t&&O(i)===S.SpiritImpact&&i.spiritDevelopment&&!i.spiritSameTurnScoreSetupNow&&!i.spiritOwnManaSetupNow&&z(i)&&re(i)&&i.sameTurnScoreWindowValue===0&&i.inputs.length>=3&&qa(i.inputs,a.inputs,0)&&qa(i.inputs,a.inputs,1)&&_(a.score,i.score)<=1024&&i.rootRank<=a.rootRank+2&&cn(i,a),(i,s)=>ne(n,i,s))}p(bh,"blackLateRecoveryProgressCompetitionOverride");function Ch(e,n,o,t,r){if(!I(r)||e.activeColor!==T.Black||e.turnNumber>2||!e.playerCanUseAction()||!e.playerCanMoveMana())return;let a=n[t];if(!(a===void 0||O(a)!==S.SpiritImpact||!a.spiritOwnManaSetupNow||a.spiritSameTurnScoreSetupNow||a.winsImmediately||a.attacksOpponentDrainer||a.scoresSupermanaThisTurn||a.scoresOpponentManaThisTurn||a.safeSupermanaPickupNow||a.safeOpponentManaPickupNow||a.sameTurnScoreWindowValue>0||a.manaHandoffToOpponent||a.hasRoundtrip||x(a)||a.inputs.length<2))return ye(n,o,(i,s)=>s!==t&&O(i)===S.SpiritImpact&&i.spiritOwnManaSetupNow&&!i.spiritSameTurnScoreSetupNow&&!i.winsImmediately&&!i.attacksOpponentDrainer&&!i.scoresSupermanaThisTurn&&!i.scoresOpponentManaThisTurn&&!i.safeSupermanaPickupNow&&!i.safeOpponentManaPickupNow&&i.sameTurnScoreWindowValue===0&&!i.manaHandoffToOpponent&&!i.hasRoundtrip&&!x(i)&&i.inputs.length>=2&&qa(i.inputs,a.inputs,0)&&qa(i.inputs,a.inputs,1)&&i.spiritSetupGain===a.spiritSetupGain&&i.ownDrainerVulnerable===a.ownDrainerVulnerable&&i.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&i.rootRank<a.rootRank,(i,s)=>Ye(n,i,s))}p(Ch,"blackOpeningSetupSiblingOverride");function Mh(e,n,o,t,r,a){if(!I(a)||n.activeColor!==T.Black||n.turnNumber!==2||n.monsMovesCount<2||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0||!Ln(e,n))return;let i=o[r];if(!(i===void 0||O(i)!==S.SpiritImpact||!F(i)||z(i)||i.spiritSameTurnScoreSetupNow||i.spiritOwnManaSetupNow||i.winsImmediately||i.attacksOpponentDrainer||i.sameTurnScoreWindowValue>0||i.scoresSupermanaThisTurn||i.scoresOpponentManaThisTurn||i.safeSupermanaPickupNow||i.safeOpponentManaPickupNow||i.manaHandoffToOpponent||i.hasRoundtrip||x(i)))return ye(o,t,(s,u)=>u!==r&&O(s)===S.ManaTempo&&!s.spiritDevelopment&&!s.spiritSameTurnScoreSetupNow&&!s.spiritOwnManaSetupNow&&!z(s)&&!s.winsImmediately&&!s.attacksOpponentDrainer&&s.sameTurnScoreWindowValue===0&&!s.scoresSupermanaThisTurn&&!s.scoresOpponentManaThisTurn&&!s.safeSupermanaPickupNow&&!s.safeOpponentManaPickupNow&&!s.manaHandoffToOpponent&&!s.hasRoundtrip&&!x(s)&&s.rootRank<i.rootRank&&s.score>=v(i.score,48)&&s.safeSupermanaProgressSteps<=i.safeSupermanaProgressSteps&&s.safeOpponentManaProgressSteps<=i.safeOpponentManaProgressSteps&&s.scorePathBestSteps<=i.scorePathBestSteps&&s.ownDrainerVulnerable===i.ownDrainerVulnerable&&s.ownDrainerWalkVulnerable===i.ownDrainerWalkVulnerable,(s,u)=>Al(o,s,u))}p(Mh,"blackEarlySafeManaFollowupOverride");function kh(e,n,o,t,r,a){if(!I(a)||n.activeColor!==T.Black||n.turnNumber!==2||n.monsMovesCount>1||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0||!Ln(e,n))return;let i=o[r];if(!(i===void 0||O(i)!==S.ManaTempo||z(i)||i.spiritDevelopment||i.spiritSameTurnScoreSetupNow||i.spiritOwnManaSetupNow||i.winsImmediately||i.attacksOpponentDrainer||i.sameTurnScoreWindowValue>0||i.scoresSupermanaThisTurn||i.scoresOpponentManaThisTurn||i.safeSupermanaPickupNow||i.safeOpponentManaPickupNow||i.manaHandoffToOpponent||i.hasRoundtrip||x(i)))return ye(o,t,(s,u)=>u!==r&&O(s)===S.SpiritImpact&&F(s)&&!z(s)&&!s.spiritSameTurnScoreSetupNow&&!s.spiritOwnManaSetupNow&&!s.winsImmediately&&!s.attacksOpponentDrainer&&s.sameTurnScoreWindowValue===0&&!s.scoresSupermanaThisTurn&&!s.scoresOpponentManaThisTurn&&!s.safeSupermanaPickupNow&&!s.safeOpponentManaPickupNow&&!s.manaHandoffToOpponent&&!s.hasRoundtrip&&!x(s)&&s.rootRank>i.rootRank&&s.rootRank<=i.rootRank+4&&s.score>=_(i.score,32)&&s.spiritSetupGain>=v(i.spiritSetupGain,16)&&s.scorePathBestSteps>=i.scorePathBestSteps&&s.ownDrainerVulnerable===i.ownDrainerVulnerable&&s.ownDrainerWalkVulnerable===i.ownDrainerWalkVulnerable,(s,u)=>{let c=o[s],l=o[u];return c===void 0||l===void 0?s-u:c.score!==l.score?c.score>l.score?-1:1:c.spiritSetupGain!==l.spiritSetupGain?c.spiritSetupGain>l.spiritSetupGain?-1:1:c.rootRank!==l.rootRank?c.rootRank<l.rootRank?-1:1:ne(o,s,u)})}p(kh,"blackEarlyPlainSpiritFollowupOverride");function Rh(e,n,o,t,r,a){if(!I(a)||n.activeColor!==T.Black||n.turnNumber!==4||n.monsMovesCount===0||n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0||!Ln(e,n))return;let i=o[r];if(!(i===void 0||!ln(O(i),S.ManaTempo,S.SafeSupermanaProgress,S.SafeOpponentManaProgress)||!i.ownDrainerVulnerable||i.winsImmediately||i.attacksOpponentDrainer||i.sameTurnScoreWindowValue>0||i.scoresSupermanaThisTurn||i.scoresOpponentManaThisTurn||i.safeSupermanaPickupNow||i.safeOpponentManaPickupNow||i.manaHandoffToOpponent||i.hasRoundtrip))return ye(o,t,(s,u)=>u!==r&&O(s)===S.ManaTempo&&!s.ownDrainerVulnerable&&!s.ownDrainerWalkVulnerable&&!s.winsImmediately&&!s.attacksOpponentDrainer&&!s.spiritDevelopment&&!s.spiritSameTurnScoreSetupNow&&!s.spiritOwnManaSetupNow&&s.sameTurnScoreWindowValue===0&&!s.scoresSupermanaThisTurn&&!s.scoresOpponentManaThisTurn&&!s.safeSupermanaPickupNow&&!s.safeOpponentManaPickupNow&&!s.manaHandoffToOpponent&&!s.hasRoundtrip,(s,u)=>Al(o,s,u))}p(Rh,"blackTurnFourVulnerableProgressManaOverride");function Ph(e,n,o,t,r,a){if(!I(a)||n.activeColor!==T.Black||n.turnNumber!==6||n.monsMovesCount!==0||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0)return;let i=de(e,n,n.activeColor);if(i.delta.sameTurnScoreWindowValue>1||i.delta.opponentWindowDenyGain>1||!i.delta.drainerAttackAvailable)return;let s=o[r];if(!(s===void 0||!ln(O(s),S.SafeSupermanaProgress,S.SafeOpponentManaProgress)||!s.ownDrainerVulnerable||s.ownDrainerWalkVulnerable||s.spiritDevelopment||s.spiritSameTurnScoreSetupNow||s.spiritOwnManaSetupNow||s.sameTurnScoreWindowValue>0||s.winsImmediately||s.attacksOpponentDrainer||s.scoresSupermanaThisTurn||s.scoresOpponentManaThisTurn||s.safeSupermanaPickupNow||s.safeOpponentManaPickupNow||s.manaHandoffToOpponent||s.hasRoundtrip))return ye(o,t,(u,c)=>c!==r&&O(u)===S.ManaTempo&&!u.ownDrainerVulnerable&&!u.ownDrainerWalkVulnerable&&!u.winsImmediately&&!u.attacksOpponentDrainer&&!u.spiritDevelopment&&!u.spiritSameTurnScoreSetupNow&&!u.spiritOwnManaSetupNow&&u.sameTurnScoreWindowValue===0&&!u.scoresSupermanaThisTurn&&!u.scoresOpponentManaThisTurn&&!u.safeSupermanaPickupNow&&!u.safeOpponentManaPickupNow&&!u.manaHandoffToOpponent&&!u.hasRoundtrip&&u.safeSupermanaProgressSteps===s.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps===s.safeOpponentManaProgressSteps+1&&u.scorePathBestSteps===s.scorePathBestSteps&&_(s.score,u.score)<=160&&u.rootRank<=s.rootRank+4,(u,c)=>Ye(o,u,c))}p(Ph,"blackTurnSixAttackVulnerableProgressManaOverride");function wh(e,n,o,t,r,a){if(!I(a)||n.activeColor!==T.Black||n.turnNumber!==4||n.monsMovesCount===0||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0||!Ln(e,n))return;let i=o[r];if(!(i===void 0||O(i)!==S.SpiritImpact||!F(i)||i.spiritOwnManaSetupNow||i.spiritSameTurnScoreSetupNow||i.winsImmediately||i.attacksOpponentDrainer||i.sameTurnScoreWindowValue>0||i.scoresSupermanaThisTurn||i.scoresOpponentManaThisTurn||i.safeSupermanaPickupNow||i.safeOpponentManaPickupNow||i.manaHandoffToOpponent||i.hasRoundtrip))return ye(o,t,(s,u)=>u!==r&&O(s)===S.SpiritImpact&&s.spiritOwnManaSetupNow&&!s.spiritSameTurnScoreSetupNow&&!s.winsImmediately&&!s.attacksOpponentDrainer&&s.sameTurnScoreWindowValue===0&&!s.scoresSupermanaThisTurn&&!s.scoresOpponentManaThisTurn&&!s.safeSupermanaPickupNow&&!s.safeOpponentManaPickupNow&&!s.manaHandoffToOpponent&&!s.hasRoundtrip&&pe(s.inputs,i.inputs)&&s.ownDrainerVulnerable===i.ownDrainerVulnerable&&s.ownDrainerWalkVulnerable===i.ownDrainerWalkVulnerable&&s.spiritSetupGain>=v(i.spiritSetupGain,32)&&s.rootRank<i.rootRank,(s,u)=>Ye(o,s,u))}p(wh,"blackTurnFourSetupClusterOverride");function Th(e,n,o,t,r,a){if(!I(a)||n.activeColor!==T.Black||n.turnNumber<6||n.monsMovesCount!==0||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0||!Ln(e,n))return;let i=o[r];if(!(i===void 0||O(i)!==S.SpiritImpact||!F(i)||z(i)||i.spiritOwnManaSetupNow||i.spiritSameTurnScoreSetupNow||i.winsImmediately||i.attacksOpponentDrainer||i.sameTurnScoreWindowValue>0||i.scoresSupermanaThisTurn||i.scoresOpponentManaThisTurn||i.safeSupermanaPickupNow||i.safeOpponentManaPickupNow||i.manaHandoffToOpponent||i.hasRoundtrip))return ye(o,t,(s,u)=>u!==r&&O(s)===S.SpiritImpact&&s.spiritOwnManaSetupNow&&!s.spiritSameTurnScoreSetupNow&&!z(s)&&!s.winsImmediately&&!s.attacksOpponentDrainer&&s.sameTurnScoreWindowValue===0&&!s.scoresSupermanaThisTurn&&!s.scoresOpponentManaThisTurn&&!s.safeSupermanaPickupNow&&!s.safeOpponentManaPickupNow&&s.manaHandoffToOpponent===i.manaHandoffToOpponent&&s.hasRoundtrip===i.hasRoundtrip&&s.ownDrainerVulnerable===i.ownDrainerVulnerable&&s.ownDrainerWalkVulnerable===i.ownDrainerWalkVulnerable&&pe(s.inputs,i.inputs)&&s.spiritSetupGain>=v(i.spiritSetupGain,32)&&s.score>=_(i.score,96)&&s.rootRank<=i.rootRank+4,(s,u)=>{let c=o[s],l=o[u];return c===void 0||l===void 0?s-u:c.score!==l.score?c.score>l.score?-1:1:c.spiritSetupGain!==l.spiritSetupGain?c.spiritSetupGain>l.spiritSetupGain?-1:1:c.rootRank!==l.rootRank?c.rootRank<l.rootRank?-1:1:ne(o,s,u)})}p(Th,"blackPlainSpiritSetupCompetitionOverride");function gh(e,n,o,t,r,a){if(!I(a)||n.activeColor!==T.Black||n.turnNumber<6||n.monsMovesCount!==0||n.playerCanUseAction()||!n.playerCanMoveMana())return;let i=de(e,n,n.activeColor);if(i.delta.sameTurnScoreWindowValue>1||i.delta.opponentWindowDenyGain>1||i.delta.sameTurnScoreWindowValue===0&&i.delta.opponentWindowDenyGain===0)return;let s=o[r];if(!(s===void 0||O(s)!==S.ManaTempo||s.winsImmediately||s.attacksOpponentDrainer||s.scoresSupermanaThisTurn||s.scoresOpponentManaThisTurn||s.safeSupermanaPickupNow||s.safeOpponentManaPickupNow||s.sameTurnScoreWindowValue>0||s.manaHandoffToOpponent||s.hasRoundtrip||s.score<0))return ye(o,t,(u,c)=>c!==r&&ln(O(u),S.SafeSupermanaProgress,S.SafeOpponentManaProgress)&&u.score>=0&&u.rootRank<s.rootRank&&!u.winsImmediately&&!u.attacksOpponentDrainer&&!u.scoresSupermanaThisTurn&&!u.scoresOpponentManaThisTurn&&!u.safeSupermanaPickupNow&&!u.safeOpponentManaPickupNow&&u.sameTurnScoreWindowValue===0&&!u.manaHandoffToOpponent&&!u.hasRoundtrip,(u,c)=>{let l=o[u],m=o[c];return l===void 0||m===void 0?u-c:l.score!==m.score?l.score>m.score?-1:1:l.rootRank!==m.rootRank?l.rootRank<m.rootRank?-1:1:ne(o,u,c)})}p(gh,"blackNoActionProgressOverride");function vh(e,n,o,t,r){if(!I(r)||e.activeColor!==T.Black||e.turnNumber<6||e.monsMovesCount!==0||e.playerCanUseAction()||!e.playerCanMoveMana())return;let a=n[t];if(a===void 0)return;let i=a.sameTurnScoreWindowValue>0&&!a.ownDrainerVulnerable&&!a.ownDrainerWalkVulnerable;if(!(O(a)!==S.ManaTempo||a.winsImmediately||a.attacksOpponentDrainer||a.scoresSupermanaThisTurn||a.scoresOpponentManaThisTurn||a.safeSupermanaPickupNow||a.safeOpponentManaPickupNow||a.manaHandoffToOpponent||a.hasRoundtrip||a.sameTurnScoreWindowValue>0&&!i||a.rootRank<3&&!i))return ye(n,o,(s,u)=>u===t||O(s)!==S.ManaTempo||s.rootRank>=a.rootRank||s.sameTurnScoreWindowValue>a.sameTurnScoreWindowValue||s.winsImmediately||s.attacksOpponentDrainer||s.scoresSupermanaThisTurn||s.scoresOpponentManaThisTurn||s.safeSupermanaPickupNow||s.safeOpponentManaPickupNow||s.manaHandoffToOpponent||s.hasRoundtrip?!1:a.score>=0?s.score>=0:i&&s.sameTurnScoreWindowValue===a.sameTurnScoreWindowValue&&s.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&s.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&s.ownDrainerVulnerable===a.ownDrainerVulnerable&&s.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&s.manaHandoffToOpponent===a.manaHandoffToOpponent&&s.hasRoundtrip===a.hasRoundtrip?!0:_(a.score,s.score)<=192,(s,u)=>Ye(n,s,u))}p(vh,"blackNoActionManaSiblingOverride");function Ah(e,n,o,t,r,a){if(!I(a)||n.activeColor!==r.color||n.turnNumber!==r.turnNumber||(r.monsMoves.kind==="exact"?n.monsMovesCount!==r.monsMoves.count:n.monsMovesCount<r.monsMoves.count)||n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0)return;let i=de(e,n,n.activeColor);if(i.delta.sameTurnScoreWindowValue>1||i.delta.opponentWindowDenyGain>1||i.delta.sameTurnScoreWindowValue===0&&i.delta.opponentWindowDenyGain===0||r.rejectDrainerAttack&&i.delta.drainerAttackAvailable||i.delta.drainerSafety>=0)return;let s=o[t];if(!(s===void 0||!tt(s)||!s.ownDrainerVulnerable||s.ownDrainerWalkVulnerable||s.spiritDevelopment||s.spiritSameTurnScoreSetupNow||s.spiritOwnManaSetupNow))return ye(o,o.map((u,c)=>c),(u,c)=>c!==t&&O(u)===S.DrainerSafetyRecovery&&u.classes.drainerSafetyRecover&&!x(u)&&!u.ownDrainerVulnerable&&!u.ownDrainerWalkVulnerable&&!u.spiritDevelopment&&!u.spiritSameTurnScoreSetupNow&&!u.spiritOwnManaSetupNow&&re(u)&&u.sameTurnScoreWindowValue===0&&pe(u.inputs,s.inputs)&&(!r.requireSameProgressSteps||u.safeSupermanaProgressSteps===s.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps===s.safeOpponentManaProgressSteps)&&u.rootRank<=s.rootRank&&u.scorePathBestSteps>s.scorePathBestSteps,(u,c)=>Ye(o,u,c))}p(Ah,"noActionRecoveryOverride");function Eh(e,n,o,t,r){return Ah(e,n,o,t,{color:T.White,turnNumber:3,monsMoves:{kind:"exact",count:0},rejectDrainerAttack:!1,requireSameProgressSteps:!1},r)}p(Eh,"whiteTurnThreeNoActionRecoveryOverride");function Oh(e,n,o,t,r){return Ah(e,n,o,t,{color:T.Black,turnNumber:4,monsMoves:{kind:"minimum",count:1},rejectDrainerAttack:!0,requireSameProgressSteps:!0},r)}p(Oh,"blackTurnFourWeakWindowRecoveryOverride");function xh(e,n,o,t,r){if(!I(r)||e.activeColor!==T.White||e.turnNumber!==3||e.monsMovesCount!==1||!e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(!(a===void 0||!ln(O(a),S.SafeSupermanaProgress,S.SafeOpponentManaProgress)||x(a)||!re(a)||a.spiritDevelopment||a.spiritSameTurnScoreSetupNow||a.spiritOwnManaSetupNow||a.sameTurnScoreWindowValue>0))return ye(n,o,(i,s)=>{let u=_(a.score,i.score)<=160&&i.spiritSetupGain>=v(a.spiritSetupGain,64)&&i.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&i.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&i.rootRank+6<=a.rootRank;return s!==t&&O(i)===S.SpiritImpact&&i.spiritOwnManaSetupNow&&!i.spiritSameTurnScoreSetupNow&&z(i)&&!x(i)&&re(i)&&i.sameTurnScoreWindowValue===0&&i.manaHandoffToOpponent===a.manaHandoffToOpponent&&i.hasRoundtrip===a.hasRoundtrip&&i.ownDrainerVulnerable===a.ownDrainerVulnerable&&i.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&(_(a.score,i.score)<=32||u)&&i.spiritSetupGain>=v(a.spiritSetupGain,64)&&i.safeSupermanaProgressSteps<=a.safeSupermanaProgressSteps&&i.safeOpponentManaProgressSteps<=a.safeOpponentManaProgressSteps&&i.rootRank<=a.rootRank+4},(i,s)=>{let u=n[i],c=n[s];return u===void 0||c===void 0?i-s:u.score!==c.score?u.score>c.score?-1:1:u.spiritSetupGain!==c.spiritSetupGain?u.spiritSetupGain<c.spiritSetupGain?-1:1:u.rootRank!==c.rootRank?u.rootRank<c.rootRank?-1:1:ne(n,i,s)})}p(xh,"whiteEarlySafeProgressSetupCompetitionOverride");function Ih(e,n,o,t,r,a){if(!I(a)||n.activeColor!==T.White||n.turnNumber!==3||n.monsMovesCount!==1||!n.playerCanUseAction()||!n.playerCanMoveMana()||t.length!==1||o.length===0)return;let i=o[r];if(!(i===void 0||O(i)!==S.SpiritImpact||!i.spiritOwnManaSetupNow||i.spiritSameTurnScoreSetupNow||!re(i)||i.sameTurnScoreWindowValue>0||x(i)||de(e,n,n.activeColor).delta.sameTurnScoreWindowValue===0))return ye(o,o.map((u,c)=>c),(u,c)=>c!==r&&O(u)===S.ManaTempo&&!u.ownDrainerVulnerable&&!u.ownDrainerWalkVulnerable&&!u.spiritDevelopment&&!u.spiritSameTurnScoreSetupNow&&!u.spiritOwnManaSetupNow&&u.sameTurnScoreWindowValue===0&&re(u)&&!x(u),(u,c)=>ne(o,u,c))}p(Ih,"whiteEarlySetupCompetitionOverride");function IP(e,n,o,t){return I(t)&&e.activeColor===T.White&&e.turnNumber>=8&&e.monsMovesCount===0&&e.playerCanUseAction()&&e.playerCanMoveMana()&&O(n)===S.SpiritImpact&&n.spiritDevelopment&&!n.spiritSameTurnScoreSetupNow&&n.sameTurnScoreWindowValue===0&&re(n)&&!x(n)&&ln(O(o),S.SafeSupermanaProgress,S.ManaTempo)&&!o.spiritDevelopment&&o.sameTurnScoreWindowValue===0&&re(o)&&!x(o)&&pe(n.inputs,o.inputs)}p(IP,"isLateWhiteSpiritFollowupSafeProgressPair");function Nh(e,n,o,t){if(!I(t)||e.activeColor!==T.White||e.turnNumber<8||e.monsMovesCount!==0||!e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let r=n[o];if(r===void 0||!ln(O(r),S.SafeSupermanaProgress,S.ManaTempo))return;let a=n.map((s,u)=>u).filter(s=>{let u=n[s];return s!==o&&u!==void 0&&IP(e,u,r,t)&&_(r.score,u.score)<=512&&Math.abs(r.rootRank-u.rootRank)<=10}),i=a.some(s=>n[s]?.spiritOwnManaSetupNow===!0);return a.sort((s,u)=>{let c=n[s],l=n[u];return c===void 0||l===void 0?s-u:i&&c.spiritOwnManaSetupNow!==l.spiritOwnManaSetupNow?c.spiritOwnManaSetupNow?-1:1:i&&c.spiritSetupGain!==l.spiritSetupGain?c.spiritSetupGain>l.spiritSetupGain?-1:1:Ye(n,s,u)})[0]}p(Nh,"whiteLateFollowupCompetitionOverride");function Dh(e,n,o,t,r,a,i){if(!I(i)||n.activeColor!==T.White||n.turnNumber<5||n.monsMovesCount!==0||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0)return;let s=o[r];if(s===void 0||O(s)!==S.SpiritImpact||!F(s)||!z(s)||!re(s)||s.sameTurnScoreWindowValue>0||x(s))return;let u=Hr(t.length,i),c=pn(e,s.game,a,i,u);if(c.allowsImmediateOpponentWin||c.opponentReachesMatchPoint)return;let l=new Map,m=new Map([[r,c]]),d=new Map,y=p(M=>{let R=l.get(M),P=o[M];return R===void 0&&P!==void 0&&(R=Xe(e,n,P,a,i),l.set(M,R)),R},"utility"),f=p(M=>{let R=m.get(M),P=o[M];return R===void 0&&P!==void 0&&(R=pn(e,P.game,a,i,u),m.set(M,R)),R},"snapshot"),h=p(M=>{let R=d.get(M),P=o[M];return R===void 0&&P!==void 0&&(R=He(e,P.game,a,i),d.set(M,R)),R},"followup"),C=y(r),b=h(r);if(C===void 0||b===void 0)return;let k;for(let M of t){if(M===r)continue;let R=o[M];if(R===void 0||O(R)!==S.SpiritImpact||!R.spiritOwnManaSetupNow||R.spiritSameTurnScoreSetupNow||!z(R)||!sn(R)||!re(R)||R.sameTurnScoreWindowValue>0||!pe(R.inputs,s.inputs)||R.ownDrainerVulnerable!==s.ownDrainerVulnerable||R.ownDrainerWalkVulnerable!==s.ownDrainerWalkVulnerable)continue;let P=R.safeSupermanaProgressSteps===s.safeSupermanaProgressSteps&&R.safeOpponentManaProgressSteps===s.safeOpponentManaProgressSteps&&R.manaHandoffToOpponent===s.manaHandoffToOpponent&&R.hasRoundtrip===s.hasRoundtrip&&_(s.score,R.score)<=64&&R.spiritSetupGain>=v(s.spiritSetupGain,32)&&R.rootRank<=s.rootRank+2,g=y(M),W=f(M),E=h(M);if(g===void 0||W===void 0||E===void 0)continue;let D=!W.allowsImmediateOpponentWin&&!W.opponentReachesMatchPoint&&_(s.score,R.score)<=128&&v(W.worstReplyScore,320)>=c.worstReplyScore&&v(E,32)>=b&&R.rootRank<=s.rootRank+4&&(lo(g,C)||cn(R,s));if(!P&&!D)continue;if(k===void 0){k=M;continue}let N=o[k],B=y(k),G=f(k),L=h(k);if(N===void 0||B===void 0||G===void 0||L===void 0){k=M;continue}let $=J(g,B);($>0||$>=0&&E>L||$>=0&&E===L&&W.worstReplyScore>G.worstReplyScore||E===L&&W.worstReplyScore===G.worstReplyScore&&R.spiritSetupGain>N.spiritSetupGain||E===L&&W.worstReplyScore===G.worstReplyScore&&R.spiritSetupGain===N.spiritSetupGain&&ne(o,M,k)<0)&&(k=M)}return k}p(Dh,"whiteSetupProgressCompetitionOverride");function Wh(e,n,o,t,r){if(!I(r)||e.activeColor!==T.White||e.turnNumber!==3||e.monsMovesCount!==1||!e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(!(a===void 0||O(a)!==S.SpiritImpact||!F(a)||!z(a)||!re(a)||a.sameTurnScoreWindowValue>0||x(a)))return ye(n,o,(i,s)=>s!==t&&O(i)===S.SpiritImpact&&i.spiritOwnManaSetupNow&&!i.spiritSameTurnScoreSetupNow&&z(i)&&re(i)&&i.sameTurnScoreWindowValue===0&&!x(i)&&pe(i.inputs,a.inputs)&&i.supermanaProgress===a.supermanaProgress&&i.opponentManaProgress===a.opponentManaProgress&&i.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&i.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&i.ownDrainerVulnerable===a.ownDrainerVulnerable&&i.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&_(a.score,i.score)<=64&&i.spiritSetupGain>=v(a.spiritSetupGain,32)&&i.rootRank<=a.rootRank+4,(i,s)=>{let u=n[i],c=n[s];return u===void 0||c===void 0?i-s:u.score!==c.score?u.score>c.score?-1:1:u.rootRank!==c.rootRank?u.rootRank<c.rootRank?-1:1:ne(n,i,s)})}p(Wh,"whiteEarlyFollowupSetupCompetitionOverride");function Fh(e,n,o,t,r){if(!I(r)||n.activeColor!==T.White||n.turnNumber!==3||n.monsMovesCount!==1||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0||!Ln(e,n))return;let a=o[t];if(!(a===void 0||O(a)!==S.SpiritImpact||!a.spiritOwnManaSetupNow||a.spiritSameTurnScoreSetupNow||!z(a)||!re(a)||a.sameTurnScoreWindowValue>0||x(a)))return ye(o,o.map((i,s)=>s),(i,s)=>{let u=i.safeSupermanaProgressSteps<a.safeSupermanaProgressSteps||i.safeOpponentManaProgressSteps<a.safeOpponentManaProgressSteps||i.spiritSetupGain>a.spiritSetupGain;return s!==t&&O(i)===S.SpiritImpact&&i.spiritOwnManaSetupNow&&!i.spiritSameTurnScoreSetupNow&&z(i)&&re(i)&&i.sameTurnScoreWindowValue===0&&!x(i)&&pe(i.inputs,a.inputs)&&i.supermanaProgress===a.supermanaProgress&&i.opponentManaProgress===a.opponentManaProgress&&i.safeSupermanaProgressSteps<=a.safeSupermanaProgressSteps&&i.safeOpponentManaProgressSteps<=a.safeOpponentManaProgressSteps&&i.scorePathBestSteps<=a.scorePathBestSteps&&i.ownDrainerVulnerable===a.ownDrainerVulnerable&&i.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&i.score>=_(a.score,64)&&i.rootRank<=a.rootRank+8&&u},(i,s)=>{let u=o[i],c=o[s];if(u===void 0||c===void 0)return i-s;let l=a.safeSupermanaProgressSteps-u.safeSupermanaProgressSteps,m=a.safeSupermanaProgressSteps-c.safeSupermanaProgressSteps;if(l!==m)return l>m?-1:1;let d=_(a.spiritSetupGain,u.spiritSetupGain),y=_(a.spiritSetupGain,c.spiritSetupGain);return d!==y?d>y?-1:1:u.score!==c.score?u.score>c.score?-1:1:u.rootRank!==c.rootRank?u.rootRank<c.rootRank?-1:1:ne(o,i,s)})}p(Fh,"whiteEarlySetupSiblingProgressOverride");function Bh(e,n,o,t,r){if(!I(r)||e.activeColor!==T.White||e.turnNumber!==3||e.monsMovesCount!==1||e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(!(a===void 0||!ln(O(a),S.SafeSupermanaProgress,S.SafeOpponentManaProgress)||!a.ownDrainerVulnerable||a.ownDrainerWalkVulnerable||!re(a)||a.spiritDevelopment||a.spiritSameTurnScoreSetupNow||a.spiritOwnManaSetupNow||a.sameTurnScoreWindowValue>0))return ye(n,o,(i,s)=>s!==t&&ln(O(i),S.SafeSupermanaProgress,S.SafeOpponentManaProgress)&&!i.ownDrainerVulnerable&&!i.ownDrainerWalkVulnerable&&re(i)&&!i.spiritDevelopment&&!i.spiritSameTurnScoreSetupNow&&!i.spiritOwnManaSetupNow&&i.sameTurnScoreWindowValue===0&&i.supermanaProgress===a.supermanaProgress&&i.opponentManaProgress===a.opponentManaProgress&&i.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&i.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&i.score>=_(a.score,32),(i,s)=>Ye(n,i,s))}p(Bh,"whiteEarlyNoActionProgressCompetitionOverride");function _h(e,n,o,t,r){if(!I(r)||e.activeColor!==T.White||e.turnNumber<5||e.monsMovesCount!==0||e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(!(a===void 0||!ln(O(a),S.SafeSupermanaProgress,S.SafeOpponentManaProgress)||!a.ownDrainerVulnerable||a.ownDrainerWalkVulnerable||!re(a)||a.spiritDevelopment||a.spiritSameTurnScoreSetupNow||a.spiritOwnManaSetupNow||a.sameTurnScoreWindowValue>0))return ye(n,o,(i,s)=>s!==t&&O(i)===S.ManaTempo&&!i.ownDrainerVulnerable&&!i.ownDrainerWalkVulnerable&&!i.spiritDevelopment&&!i.spiritSameTurnScoreSetupNow&&!i.spiritOwnManaSetupNow&&i.sameTurnScoreWindowValue===0&&re(i)&&!x(i)&&_(a.score,i.score)<=64&&Math.abs(a.rootRank-i.rootRank)<=6,(i,s)=>Ye(n,i,s))}p(_h,"whiteManaOnlyCompetitionOverride");function Gh(e,n,o,t,r){if(!I(r)||e.activeColor!==T.White||e.turnNumber!==3||e.monsMovesCount!==0||e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(!(a===void 0||!ln(O(a),S.SafeSupermanaProgress,S.SafeOpponentManaProgress)||x(a)||!re(a)||a.spiritDevelopment||a.spiritSameTurnScoreSetupNow||a.spiritOwnManaSetupNow||a.sameTurnScoreWindowValue>0))return ye(n,o,(i,s)=>s!==t&&ln(O(i),S.SafeSupermanaProgress,S.SafeOpponentManaProgress)&&!x(i)&&re(i)&&!i.spiritDevelopment&&!i.spiritSameTurnScoreSetupNow&&!i.spiritOwnManaSetupNow&&i.sameTurnScoreWindowValue===0&&i.ownDrainerVulnerable===a.ownDrainerVulnerable&&i.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&i.manaHandoffToOpponent===a.manaHandoffToOpponent&&i.hasRoundtrip===a.hasRoundtrip&&i.rootRank<a.rootRank&&i.score>=_(a.score,32)&&cn(i,a),(i,s)=>Ye(n,i,s))}p(Gh,"whiteTurnThreeSafeProgressSurfaceOverride");var NP=Object.freeze({kind:"continue"});function Lh(e,n,o){return Object.freeze({id:e,evaluate(t){let r=o(t);return r===void 0?NP:{kind:"select",index:r,reason:n}}})}p(Lh,"selectionRule");function Re(e,n){return Lh(e,Ue.ApprovedFamilyCompetition,n)}p(Re,"familyRule");function Fl(e,n){return Lh(e,Ue.ApprovedBaselineSelector,n)}p(Fl,"baselineRule");var DP=Object.freeze([Re("black-family-competition",e=>yh(e.execution,e.game,e.roots,e.replyRiskShortlist,e.selectionIndices,e.chosenIndex,e.perspective,e.config)),Re("black-opening-setup-sibling",e=>Ch(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Re("black-early-safe-mana-followup",e=>Mh(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Re("black-early-plain-spirit-followup",e=>kh(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Re("black-turn-four-vulnerable-progress-mana",e=>Rh(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Re("black-turn-six-attack-vulnerable-progress-mana",e=>Ph(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Re("black-turn-four-setup-cluster",e=>wh(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Re("black-opening-early-same-lane-higher-score",e=>Wl(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Re("black-setup-progress-competition",e=>ih(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.perspective,e.config)),Re("black-plain-spirit-setup-competition",e=>Th(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Re("black-no-action-progress",e=>gh(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Re("black-no-action-mana-sibling",e=>vh(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Re("black-turn-four-window-mana-sibling",e=>eh(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Re("black-turn-four-weak-window-recovery",e=>Oh(e.execution,e.game,e.roots,e.chosenIndex,e.config)),Fl("black-baseline-alignment",e=>e.baselineIndex===void 0?void 0:nh(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.baselineIndex,e.config)),Fl("black-turn-start-guarded-baseline-mana",e=>oh(e.execution,e.game,e.roots,e.candidateIndices,e.chosenIndex,e.config)),Re("black-late-window-mana-safety",e=>Sh(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Re("black-late-window-competition",e=>hh(e.execution,e.game,e.roots,e.chosenIndex,e.config)),Re("black-late-recovery-progress-competition",e=>bh(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Re("white-followup-mana",e=>lh(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.perspective,e.config)),Re("white-mana-competition",e=>sh(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.perspective,e.config)),Re("white-no-action-safe-progress-mana",e=>uh(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Re("white-window-progress-competition",e=>ch(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.perspective,e.config)),Re("white-action-mana-cluster",e=>ph(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Re("white-setup-progress-competition",e=>Dh(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.perspective,e.config)),Re("white-early-followup-setup-competition",e=>Wh(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Re("white-opening-early-same-lane-higher-score",e=>Wl(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Re("white-early-setup-sibling-progress",e=>Fh(e.execution,e.game,e.roots,e.chosenIndex,e.config)),Re("white-early-safe-progress-setup-competition",e=>xh(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Re("white-early-no-action-progress-competition",e=>Bh(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Re("white-turn-three-safe-progress-surface",e=>Gh(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Fl("white-turn-three-baseline-alignment",e=>e.baselineIndex===void 0?void 0:th(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.baselineIndex,e.config)),Re("white-turn-three-attack-bridge-escape",e=>rh(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Re("white-turn-three-no-action-recovery",e=>Eh(e.execution,e.game,e.roots,e.chosenIndex,e.config)),Re("white-mana-only-competition",e=>_h(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Re("white-turn-five-weak-window-setup",e=>ah(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Re("white-early-setup-competition",e=>Ih(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Re("white-late-followup-competition",e=>Nh(e.game,e.roots,e.chosenIndex,e.config)),Re("black-late-followup-competition",e=>dh(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),Re("black-late-reply-risk-setup",e=>mh(e.execution,e.game,e.roots,e.replyRiskShortlist,e.chosenIndex,e.config)),Re("black-late-weak-window-safe-progress-setup",e=>fh(e.execution,e.game,e.roots,e.replyRiskShortlist,e.chosenIndex,e.perspective,e.config))]);function Vh(e,n,o=DP){let t=n;for(let r of o){let a=r.evaluate({...e,chosenIndex:t.index});a.kind==="select"&&(t={index:a.index,reason:a.reason})}return t}p(Vh,"applyAdvisorSelectionRules");function Hh(e,n,o,t,r,a,i,s=Ue.OmittedRootReentry){let u=e[i];if(u===void 0)return;let c=ot(u,s);mo(o,c),t.includes(i)||t.push(i),r.includes(i)||r.push(i),a.includes(i)||a.push(i),mo(n,c)}p(Hh,"addAdvisorReentry");function Uh(e,n,o,t,r){if(!I(r)||o.length===0||e.session.checkpoint())return;let a=_u(e),i=ds(n,o,t,r,{rootReplyRiskSnapshot:p((D,N,B,G)=>pn(e,D,N,r,G),"rootReplyRiskSnapshot"),productionPolicy:a});i.length===0&&(i=o.map((D,N)=>N));let s=r.replyRisk.enabled?Dr(e,o,i,r):[...i];s.length===0&&(s=[...i]);let u=[...s],c=[...s],l=[...i],m=[],d=[];for(let D of s){let N=o[D];N!==void 0&&mo(m,ot(N,Ue.ReplyRiskShortlist))}let y=new Map,f=[[Ue.PreserveSpiritRepresentative,D=>D.spiritSameTurnScoreSetupNow||D.spiritOwnManaSetupNow],[Ue.PreserveSpiritRepresentative,F],[Ue.PreserveSafeProgressRepresentative,D=>O(D)===S.SafeSupermanaProgress],[Ue.PreserveSafeProgressRepresentative,D=>O(D)===S.SafeOpponentManaProgress],[Ue.PreserveManaTempoRepresentative,D=>O(D)===S.ManaTempo]];for(let[D,N]of f){if(e.session.checkpoint())return;let B=VS(e,n,o,s,t,r,N),G=B===void 0?void 0:o[B];if(B===void 0||G===void 0)continue;let L=ot(G,D);mo(d,L),s.includes(B)||s.push(B),l.includes(B)||l.push(B),mo(m,L),LS(e,n,o,s,B,D,t,r,y)&&!c.includes(B)&&c.push(B)}let h=HS(n,o,s,r);h!==void 0&&Hh(o,m,d,s,l,c,h,Ue.PreserveSpiritRepresentative);for(let D of US(e,n,o,i,s,t,r))Hh(o,m,d,s,l,c,D);l.sort((D,N)=>ne(o,D,N));let C=vl(r,Le.Baseline),b=Ha(n,o,i,t,C),k=vl(r,r.planner.mode),M,R;r.replyRisk.enabled&&(M=Lr(e,n,o,c,t,r,l)),M!==void 0?R=Ue.ApprovedReplyRiskGuard:(M=Ha(n,o,l,t,k,{productionPolicy:a}),R=Ue.ApprovedBaselineSelector);let P=Vh({execution:e,game:n,roots:o,replyRiskShortlist:u,selectionIndices:l,candidateIndices:i,perspective:t,config:r,baselineIndex:b},{index:M??s[0]??i[0]??0,reason:R}),g=P.index;R=P.reason;let W=o[g];if(W===void 0||e.session.checkpoint())return;let E=ot(W,R);return{index:g,decision:{orderedShortlist:m,preservedFamilyRepresentatives:d,approvedRoot:E,injectedRoot:void 0}}}p(Uh,"productionRootAdvisorPostsearch");function WP(e,n,o,t,r,a){let i=o[0];if(i===void 0||a(i)&&sn(i))return;let s=Pt(e,n,i,t,r);return o.map((u,c)=>c).filter(u=>{let c=o[u];return c!==void 0&&a(c)&&sn(c)&&lo(Pt(e,n,c,t,r),s)}).sort((u,c)=>Tl(o,u,c))[0]}p(WP,"findRootMoveRepresentative");function FP(e,n){let o=e[0];if(!(o===void 0||!I(n)||!F(o)||!sn(o)))return e.map((t,r)=>r).filter(t=>{let r=e[t];return r!==void 0&&O(r)===S.SpiritImpact&&!F(r)&&pe(r.inputs,o.inputs)&&r.efficiency===o.efficiency&&sn(r)&&!r.winsImmediately&&!r.attacksOpponentDrainer&&!r.scoresSupermanaThisTurn&&!r.scoresOpponentManaThisTurn&&!r.safeSupermanaPickupNow&&!r.safeOpponentManaPickupNow&&r.sameTurnScoreWindowValue===0}).sort((t,r)=>Tl(e,t,r))[0]}p(FP,"sameOpeningSetupRepresentative");function jh(e,n,o,t){return I(t)&&e.activeColor===T.Black&&e.turnNumber===6&&e.monsMovesCount===0&&e.playerCanUseAction()&&e.playerCanMoveMana()&&O(n)===S.SpiritImpact&&O(o)===S.SpiritImpact&&F(n)&&o.spiritOwnManaSetupNow&&!o.spiritSameTurnScoreSetupNow&&pe(n.inputs,o.inputs)&&n.ownDrainerVulnerable===o.ownDrainerVulnerable&&n.ownDrainerWalkVulnerable===o.ownDrainerWalkVulnerable&&!n.manaHandoffToOpponent&&!o.manaHandoffToOpponent&&!n.hasRoundtrip&&!o.hasRoundtrip&&!Z(n)&&!Z(o)&&!n.attacksOpponentDrainer&&!o.attacksOpponentDrainer&&n.sameTurnScoreWindowValue===0&&o.sameTurnScoreWindowValue===0&&!n.supermanaProgress&&!o.supermanaProgress&&!n.opponentManaProgress&&!o.opponentManaProgress}p(jh,"isBlackTurnSixPlainSpiritSetupPair");function BP(e,n){let o=e.fork(),t=[];for(let r of n.compiledChunks){let a=an(o,r);if(a===void 0)return;o=a.game,t.push(...a.events)}return{game:o,events:t}}p(BP,"projectedPlanState");function _P(e,n,o,t,r,a,i,s){let u=o[0];if(u===void 0||u.winsImmediately&&!t.winsImmediately)return!1;let c=x(u),l=x(t),m=Pt(e,n,u,a,i),d=BP(n,s),y=d!==void 0&&(d.game.winnerColor()!==void 0||d.game.activeColor!==a||!d.game.playerCanMoveMon()&&!d.game.playerCanUseAction()&&!d.game.playerCanMoveMana()),f=d!==void 0&&(y||s.compiledChunks.length>=4||!d.game.playerCanMoveMon()||!d.game.playerCanUseAction()&&!d.game.playerCanMoveMana()),h=d!==void 0&&_r(d.events,a,Math.max(i.evaluation.rootManaHandoffPenalty,1))>0,C=d!==void 0&&Br(d.events),b=d!==void 0&&d.game.winnerColor()!==a&&Gn(e,d.game,a),k=f&&!h&&!C&&!b&&s.compiledChunks.length>1&&s.goalFamily!==S.ManaTempo&&(J(s.utility,m)>=0||ao(s.utility,m)||wo(s.utility,m,160)||s.goalFamily===S.ImmediateScore&&mt(s.utility,m)),M=s.headFamily===S.SafeSupermanaProgress||s.headFamily===S.SafeOpponentManaProgress,R=M&&s.goalFamily===S.ImmediateScore&&s.compiledChunks.length>1,P=!r&&R&&!l&&o.slice(0,3).some(V=>{let se=V.spiritDevelopment||V.spiritSameTurnScoreSetupNow||V.spiritOwnManaSetupNow||V.safeSupermanaPickupNow||V.safeOpponentManaPickupNow||V.winsImmediately||V.scoresSupermanaThisTurn||V.scoresOpponentManaThisTurn;return!x(V)&&se&&J(s.headUtility,Pt(e,n,V,a,i))<0}),g=!r&&R&&o.slice(0,3).some(V=>V.spiritSameTurnScoreSetupNow||V.spiritOwnManaSetupNow||V.sameTurnScoreWindowValue>0),W=!r&&R&&o.slice(0,3).some(V=>!x(V)&&z(V)),E=!r&&R&&!c&&!Z(u)&&!u.attacksOpponentDrainer&&!u.spiritDevelopment&&!u.spiritSameTurnScoreSetupNow&&!u.spiritOwnManaSetupNow&&!z(u),D=!r&&R&&!t.winsImmediately&&!t.attacksOpponentDrainer&&!t.safeSupermanaPickupNow&&!t.safeOpponentManaPickupNow&&!t.spiritDevelopment&&!t.spiritSameTurnScoreSetupNow&&!t.spiritOwnManaSetupNow&&t.sameTurnScoreWindowValue>0&&!t.supermanaProgress&&!t.opponentManaProgress&&o.slice(0,6).filter(V=>z(V)&&V.sameTurnScoreWindowValue===0&&!V.spiritSameTurnScoreSetupNow&&!V.spiritOwnManaSetupNow).length>=3,N=r&&s.headFamily===S.SpiritImpact&&s.goalFamily===S.ImmediateScore&&F(t)&&!t.attacksOpponentDrainer&&!Z(t)&&o.slice(0,3).some(V=>ue(V.inputs,t.inputs)||!F(V)||V.attacksOpponentDrainer||Z(V)?!1:V.spiritSetupGain>=t.spiritSetupGain&&V.safeSupermanaProgressSteps<=t.safeSupermanaProgressSteps&&V.safeOpponentManaProgressSteps<=t.safeOpponentManaProgressSteps&&J(Pt(e,n,V,a,i),s.headUtility)>=0);k=k&&!P&&!g&&!W&&!E;let B=o.slice(0,3).every(V=>{let se=Pt(e,n,V,a,i);return ao(s.utility,se)&&(!l||x(V))})||k,G=t.spiritSameTurnScoreSetupNow||t.sameTurnScoreWindowValue>0||t.attacksOpponentDrainer||Z(t),L=s.headFamily===S.SpiritImpact&&o.slice(0,4).filter(V=>jh(n,t,V,i)).length>=2;if(D||N||s.headFamily===S.DrainerKill&&!t.attacksOpponentDrainer||M&&!z(t)&&!k||!B&&s.headFamily===S.SpiritImpact&&!G&&!t.spiritOwnManaSetupNow&&!L)return!1;let $=o.slice(0,3).some(V=>V.spiritDevelopment||V.spiritSameTurnScoreSetupNow||V.spiritOwnManaSetupNow);return s.headFamily===S.SpiritImpact&&!$&&!G&&!t.spiritOwnManaSetupNow&&!B&&!L?!1:!l||c||B}p(_P,"injectedCandidatePassesRootGate");function GP(e,n,o,t,r,a,i){let s=a.compiledChunks[0];if(s===void 0)return;let u=[...s],c=r.find(b=>ue(b.inputs,u)),l=c??i.buildInjectedRootCandidate?.(n,o,t,u,a),m=p(()=>({inputs:u,family:a.headFamily,admitted:!1,reason:Ue.RejectInjectedMacroRoot}),"rejected");if(l===void 0||!_P(e,n,r,l,c!==void 0,o,t,a))return m();let d=c===void 0?[...r,l]:[...r];c===void 0&&d.sort(GS);let y=r[0],f=d.findIndex(b=>ue(b.inputs,u)),h=d[f];if(y===void 0||h===void 0)return m();let C=ue(h.inputs,y.inputs);if(!C){let b=Pt(e,n,y,o,t),k=Pt(e,n,h,o,t),M=J(a.utility,b)>0||J(a.headUtility,b)>0||J(k,b)>0||Fn(a.utility,b)||Fn(k,b),R=h.winsImmediately&&!y.winsImmediately||h.attacksOpponentDrainer&&!y.attacksOpponentDrainer||(h.scoresSupermanaThisTurn||h.scoresOpponentManaThisTurn)&&!(y.scoresSupermanaThisTurn||y.scoresOpponentManaThisTurn)||h.sameTurnScoreWindowValue>y.sameTurnScoreWindowValue&&h.sameTurnScoreWindowValue>0||!x(h)&&x(y)||h.classes.drainerSafetyRecover&&y.ownDrainerVulnerable&&!y.classes.drainerSafetyRecover||z(h)&&!z(y)&&!x(h),P=a.headFamily===S.SpiritImpact&&a.goalFamily===S.SpiritImpact&&r.slice(0,4).filter(g=>jh(n,h,g,t)).length>=2&&J(k,b)>=0&&_(y.heuristic,h.heuristic)<=8;C=M||R||P}return C&&c===void 0&&r.splice(0,r.length,...d),{inputs:u,family:O(h),admitted:C,reason:C?Ue.AdmitInjectedMacroRoot:Ue.RejectInjectedMacroRoot}}p(GP,"evaluateInjectedRoot");function Bl(e,n,o,t,r,a,i={}){if(!I(t)||r.length===0||e.session.checkpoint()||n.activeColor===T.Black&&n.turnNumber===2&&n.monsMovesCount<=1&&n.playerCanUseAction()&&n.playerCanMoveMana())return;let s=[],u=[],c=r[0];if(c===void 0)return;mo(s,ot(c,Ue.RankedRoot));let l=[[Ue.PreserveSpiritRepresentative,f=>f.spiritSameTurnScoreSetupNow||f.spiritOwnManaSetupNow],[Ue.PreserveSpiritRepresentative,f=>F(f)],[Ue.PreserveSafeProgressRepresentative,f=>O(f)===S.SafeSupermanaProgress],[Ue.PreserveSafeProgressRepresentative,f=>O(f)===S.SafeOpponentManaProgress],[Ue.PreserveManaTempoRepresentative,f=>O(f)===S.ManaTempo]];for(let[f,h]of l){if(e.session.checkpoint())return;let C=WP(e,n,r,o,t,h),b=C===void 0?void 0:r[C];if(b===void 0)continue;let k=ot(b,f);mo(u,k),mo(s,k)}let m=FP(r,t),d=m===void 0?void 0:r[m];if(d!==void 0){let f=ot(d,Ue.PreserveSpiritRepresentative);mo(u,f),mo(s,f)}let y=a===void 0?void 0:GP(e,n,o,t,r,a,i);if(y?.admitted){let f=r.find(h=>ue(h.inputs,y.inputs));f!==void 0&&mo(s,ot(f,Ue.AdmitInjectedMacroRoot))}return e.session.checkpoint()?void 0:{orderedShortlist:s,preservedFamilyRepresentatives:u,approvedRoot:void 0,injectedRoot:y}}p(Bl,"productionRootAdvisorPresearch");function Ur(e){let n=[];e.injectedRoot?.admitted&&n.push([...e.injectedRoot.inputs]);for(let o of e.preservedFamilyRepresentatives)n.some(t=>ue(t,o.inputs))||n.push([...o.inputs]);return n}p(Ur,"productionRootAdvisorPriorityInputs");function Kh(e,n){let o=Object.freeze({id:"root-picker.advisor-postsearch",select(t){let r=Uh(e,t.game,t.roots,t.perspective,n)?.index;return r===void 0?{kind:"continue"}:{kind:"select",index:r}}});return Object.freeze({..._u(e),rootPicker:o})}p(Kh,"productionRootPolicy");function LP(e,n){let o;return e.forEach((t,r)=>{n(t)&&(o===void 0||Ey(t,Rt(e,o))<0)&&(o=r)}),o}p(LP,"bestTacticalRootIndex");function _l(e,n,o,t,r){if(!r.policy.forcedTacticalPrepass||t.length===0)return;let a=p(d=>{let y=LP(t,d);return y===void 0?void 0:[...Rt(t,y).inputs]},"choose"),i=a(d=>d.winsImmediately);if(i!==void 0)return i;let s=r.policy.supermanaPrepassException&&t.some(d=>d.scoresSupermanaThisTurn),u=p(d=>d.safeSupermanaPickupNow&&!d.ownDrainerVulnerable&&!d.manaHandoffToOpponent&&!d.winsImmediately&&!d.attacksOpponentDrainer,"safeSupermanaPickup"),c=r.policy.supermanaPrepassException&&t.some(u),l=s||c;if(r.policy.supermanaPrepassException&&(i=a(d=>d.scoresSupermanaThisTurn),i!==void 0||(i=a(u),i!==void 0))||!l&&(i=a(d=>d.attacksOpponentDrainer),i!==void 0)||!l&&Fu(e,n,o)&&(i=a(d=>!d.ownDrainerVulnerable),i!==void 0))return i;let m=o===T.White?n.blackScore:n.whiteScore;if(Ee-m<=1)return a(d=>d.classes.immediateScore)}p(_l,"forcedTacticalPrepassChoice");function Gl(e,n,o){let t=e.findIndex(c=>ue(c.inputs,n));if(t<0)return!1;if(t===0)return!0;let r=e[0];if(r===void 0||r.winsImmediately)return!1;let a=Rt(e,t),i=_(r.heuristic,a.heuristic);if(o===Ve.Baseline)return t<=2&&i<=96&&!x(a);let s=a.winsImmediately||a.attacksOpponentDrainer||a.classes.drainerSafetyRecover||a.spiritSameTurnScoreSetupNow||a.spiritOwnManaSetupNow||a.spiritDevelopment||a.scoresSupermanaThisTurn||a.scoresOpponentManaThisTurn||a.safeSupermanaPickupNow||a.safeOpponentManaPickupNow||$e(a.safeSupermanaProgressSteps,r.safeSupermanaProgressSteps)||$e(a.safeOpponentManaProgressSteps,r.safeOpponentManaProgressSteps),u=x(a);return!u&&t<=4&&i<=128||!u&&s&&t<=8&&i<=224||!u&&x(r)&&t<=10&&i<=256}p(Gl,"acceptTurnEngineCachedStep");function Lu(e,n,o){return Er(o)&&Gl(e,n,o)&&ue(e[0]?.inputs??[],n)}p(Lu,"shouldResumeTurnEngineCachedStep");function qh(e,n,o){return o.planner.mode!==Le.Production||!o.planner.lowBudgetGuard||n.length===0||zn(e)?!1:!e.playerCanUseAction()&&!e.playerCanMoveMana()&&e.monsMovesCount>=4?!0:e.activeColor===T.Black&&e.turnNumber===2&&e.monsMovesCount<=1}p(qh,"shouldSkipProductionHeadPlanForRootContext");function zh(e,n,o,t,r){if(r.planner.mode!==Le.Production||!r.planner.lowBudgetGuard||o.length===0||!(zn(n)||_a(e,n)))return;let i=t.compiledChunks[0];if(i===void 0)return;let s=o.findIndex(f=>ue(f.inputs,i));if(s<0)return;let u=Rt(o,s);if(x(u))return;let c=o[0];if(c===void 0||c.winsImmediately||c.attacksOpponentDrainer||c.classes.drainerSafetyRecover)return;let l=_(c.heuristic,u.heuristic),m=t.headFamily===S.SafeSupermanaProgress||t.headFamily===S.SafeOpponentManaProgress||t.headFamily===S.DrainerSafetyRecovery,d=F(c),y=Ts(u);if(s===0&&m)return[...u.inputs];if(zn(n)&&d&&!x(c)&&y&&s<=2&&l<=96)return[...u.inputs];if(_a(e,n)&&s<=1&&l<=96&&(y||u.spiritDevelopment))return[...u.inputs]}p(zh,"forcedLowBudgetTurnEnginePrepassChoice");function Vu(e){let n=p(o=>o.winsImmediately||o.attacksOpponentDrainer||o.sameTurnScoreWindowValue>=2||o.scoresSupermanaThisTurn||o.scoresOpponentManaThisTurn||o.safeSupermanaPickupNow||o.safeOpponentManaPickupNow||o.supermanaProgress||o.opponentManaProgress||o.spiritSameTurnScoreSetupNow||o.spiritDevelopment||o.classes.drainerSafetyRecover,"tactical");return e[0]!==void 0&&(n(e[0])||e.slice(0,3).some(n))}p(Vu,"shouldInvokeTurnHeadRerank");function Hu(e,n){let o=e.findIndex(h=>ue(h.inputs,n)),t=e[0];if(o<0||t===void 0)return!1;let r=x(t);if(o===0)return(t.winsImmediately||t.attacksOpponentDrainer||t.scoresSupermanaThisTurn||t.scoresOpponentManaThisTurn||t.safeSupermanaPickupNow||t.safeOpponentManaPickupNow||t.supermanaProgress||t.opponentManaProgress||t.sameTurnScoreWindowValue>0||t.spiritSameTurnScoreSetupNow||t.spiritDevelopment||t.classes.drainerSafetyRecover)&&!r;let a=Rt(e,o);if(a.winsImmediately)return!0;if(t.winsImmediately||x(a))return!1;let i=a.attacksOpponentDrainer||a.scoresSupermanaThisTurn||a.scoresOpponentManaThisTurn||a.safeSupermanaPickupNow||a.safeOpponentManaPickupNow,s=a.sameTurnScoreWindowValue>0||a.spiritSameTurnScoreSetupNow,u=_(t.heuristic,a.heuristic),c=a.attacksOpponentDrainer&&!t.attacksOpponentDrainer||(a.scoresSupermanaThisTurn||a.scoresOpponentManaThisTurn)&&!(t.scoresSupermanaThisTurn||t.scoresOpponentManaThisTurn)||(a.safeSupermanaPickupNow||a.safeOpponentManaPickupNow)&&!(t.safeSupermanaPickupNow||t.safeOpponentManaPickupNow)||a.classes.drainerSafetyRecover&&!t.classes.drainerSafetyRecover&&t.ownDrainerVulnerable&&!a.ownDrainerVulnerable||a.sameTurnScoreWindowValue>v(t.sameTurnScoreWindowValue,1),l=a.safeSupermanaProgressSteps<t.safeSupermanaProgressSteps||a.safeOpponentManaProgressSteps<t.safeOpponentManaProgressSteps,m=!a.ownDrainerVulnerable&&t.ownDrainerVulnerable||!a.manaHandoffToOpponent&&t.manaHandoffToOpponent,d=a.supermanaProgress||a.opponentManaProgress||l;if(d&&!i&&!s&&!a.classes.drainerSafetyRecover&&!a.spiritSameTurnScoreSetupNow)return(m||r)&&o<=4&&u<=180;let f=m&&l&&o<=5&&u<=220;return i||s||a.classes.drainerSafetyRecover||d?a.ownDrainerVulnerable&&!a.classes.drainerSafetyRecover?!1:(c||l&&(m||r)||a.classes.drainerSafetyRecover&&t.ownDrainerVulnerable&&!a.ownDrainerVulnerable||a.spiritSameTurnScoreSetupNow&&a.sameTurnScoreWindowValue>t.sameTurnScoreWindowValue)&&o<=6&&u<=520||c&&o<=8&&u<=640:f}p(Hu,"classifyTurnEngineRerankOverride");function Uu(e,n){let o=e.find(t=>ue(t.inputs,n));return o!==void 0&&(o.winsImmediately||o.attacksOpponentDrainer||o.scoresSupermanaThisTurn||o.scoresOpponentManaThisTurn||o.safeSupermanaPickupNow||o.safeOpponentManaPickupNow||o.classes.drainerSafetyRecover||o.sameTurnScoreWindowValue>0||o.spiritSameTurnScoreSetupNow)}p(Uu,"allowedRerankOverrideCandidate");function jr(e,n,o,t,r,a){return Bl(e,n,o,t,r,a,{buildInjectedRootCandidate:p((i,s,u,c)=>CS(e,i,s,t,c),"buildInjectedRootCandidate")})}p(jr,"productionRootAdvisorPresearch");function ju(e,n,o,t,r,a,i){let u=jr(e,n,o,t,[...r],a)?.approvedRoot?.inputs;return u!==void 0&&!ue(u,i)}p(ju,"advisorConflictsWithChoice");function VP(e,n,o,t,r,a){if(!Er(r)||a.compiledChunks.length<2)return;let i=a.compiledChunks[0],s=a.compiledChunks[1];if(i===void 0||s===void 0)return;let u=wr(n,i);if(u?.activeColor!==o)return;let c=St(u,t),l=Xn(e,u,o,t);Lu(l,s,r)&&Ep(e,u,r,c,s)}p(VP,"seedTurnEngineFollowupCacheIfSafe");function $a(e,n,o,t,r,a,i){Np(e,n,o,r,a,i),VP(e,n,o,t,r,a)}p($a,"commitPlanAndSeedFollowup");function Ll(e,n,o,t,r,a){return hs(e,n,o,t,r,O(o),a)}p(Ll,"turnEngineSelectedUtility");function $h(e,n,o,t,r){let a=n.fork(),i=[];for(let m of r.compiledChunks){let d=an(a,m);if(d===void 0)return!1;i.push(...d.events),a=d.game}let u=a.winnerColor()!==void 0||a.activeColor!==o||!a.playerCanMoveMon()&&!a.playerCanUseAction()&&!a.playerCanMoveMana()||r.compiledChunks.length>=4||!a.playerCanMoveMon()||!a.playerCanUseAction()&&!a.playerCanMoveMana(),c=_r(i,o,Math.max(t.evaluation.rootManaHandoffPenalty,1))>0,l=a.winnerColor()!==o&&Fu(e,a,o);return u&&!c&&!Br(i)&&!l}p($h,"projectedPlanIsSafelyCompleted");function Xh(e,n,o){let{game:t,perspective:r,config:a,plan:i,candidateIndex:s,candidate:u,selected:c,macroMode:l,candidateUnsafe:m,selectedUnsafe:d,candidateProgress:y,selectedProgress:f,scoreGap:h,sameTurnWindowBetter:C,drainerAttackBetter:b,scoresNowBetter:k,candidateSpiritTactical:M,progressBetter:R,selectedSpiritPhase:P,selectedFamily:g,whiteSpiritSetupGain:W}=n,{narrowUnsafeBlackManaScore:E,pickupUpgrade:D,nearTieProgress:N,primaryAxesOrder:B,strategicAxesBetter:G,selectedUtility:L}=o,$=l&&$h(e,t,r,a,i),V=J(i.utility,L)>=0,se=J(i.headUtility,L)>=0,Pe=l&&(i.headFamily===S.SafeSupermanaProgress||i.headFamily===S.SafeOpponentManaProgress)&&t.activeColor===T.White&&t.turnNumber>=5&&t.monsMovesCount<=1&&!t.playerCanUseAction()&&t.playerCanMoveMana()&&!m&&!d&&y&&f&&!P&&N&&h>48&&B===0&&!D&&!G,Ze=!d&&(c.safeSupermanaPickupNow||c.safeOpponentManaPickupNow)&&(i.headFamily===S.SafeSupermanaProgress||i.headFamily===S.SafeOpponentManaProgress)&&!D&&!se,Je=d&&m&&!P&&!f&&y&&(i.headFamily===S.SafeSupermanaProgress||i.headFamily===S.SafeOpponentManaProgress)&&i.goalFamily===S.DrainerSafetyRecovery&&!u.classes.drainerSafetyRecover&&u.ownDrainerVulnerable&&!D&&!k&&!b&&!C&&h>48,en=t.activeColor===T.Black&&i.headFamily===S.SpiritImpact&&!d&&!m&&!f&&!P&&!y&&!M&&!u.spiritOwnManaSetupNow&&h>96&&!G,De=t.activeColor===T.Black&&i.headFamily===S.SpiritImpact&&!d&&!m&&!f&&!P&&F(u)&&y&&!M&&!R&&u.safeSupermanaProgressSteps>=c.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps>=c.safeOpponentManaProgressSteps&&u.ownDrainerVulnerable===c.ownDrainerVulnerable&&u.manaHandoffToOpponent===c.manaHandoffToOpponent&&u.hasRoundtrip===c.hasRoundtrip&&!k&&!b&&h>64&&!G,kn=i.headFamily===S.SpiritImpact&&!d&&!m&&F(c)&&F(u)&&h>=0&&!R&&u.spiritSetupGain<=c.spiritSetupGain&&u.safeSupermanaProgressSteps>=c.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps>=c.safeOpponentManaProgressSteps&&u.ownDrainerVulnerable===c.ownDrainerVulnerable&&u.manaHandoffToOpponent===c.manaHandoffToOpponent&&u.hasRoundtrip===c.hasRoundtrip&&!k&&!b&&!M,Ie=$&&!c.winsImmediately&&i.goalFamily!==S.ManaTempo&&s<=(i.compiledChunks.length>1?16:10)&&V&&(ao(i.utility,L)||wo(i.utility,L,96))&&(m||i.compiledChunks.length>1||mt(i.utility,L))&&!en&&!De&&!kn&&!Ze&&!Je&&!E&&!Pe;if(m&&!d&&!Ie)return{kind:"reject"};if(l&&J(L,i.utility)>0&&!W)return{kind:"reject"};let yo=l&&(i.headFamily===S.SafeSupermanaProgress||i.headFamily===S.SafeOpponentManaProgress)&&!y&&zn(t)&&F(c)&&!d&&(!m||Ie)&&s<=3&&u.score>=c.score&&wo(i.utility,L,64);if(W)return{kind:"accept"};if(l&&(i.headFamily===S.SafeSupermanaProgress||i.headFamily===S.SafeOpponentManaProgress)&&!y&&!Ie&&!yo)return{kind:"reject"};if(l&&i.headFamily===S.DrainerKill&&!u.attacksOpponentDrainer)return{kind:"reject"};let Eo=l&&t.activeColor===T.White&&i.headFamily===S.DrainerSafetyRecovery&&c.spiritOwnManaSetupNow&&!u.spiritOwnManaSetupNow&&!d&&!m&&c.sameTurnScoreWindowValue===0&&u.sameTurnScoreWindowValue===0&&c.spiritSetupGain>=v(u.spiritSetupGain,48)&&!k&&!b&&!C;if(l&&t.activeColor===T.White&&(i.headFamily===S.SafeSupermanaProgress||i.headFamily===S.SafeOpponentManaProgress)&&i.goalFamily===S.ImmediateScore&&g===S.ManaTempo&&!f&&y&&c.ownDrainerVulnerable&&u.ownDrainerVulnerable&&c.ownDrainerWalkVulnerable===u.ownDrainerWalkVulnerable&&c.manaHandoffToOpponent===u.manaHandoffToOpponent&&c.hasRoundtrip===u.hasRoundtrip&&!c.spiritDevelopment&&!u.spiritDevelopment&&!c.spiritSameTurnScoreSetupNow&&!u.spiritSameTurnScoreSetupNow&&!c.spiritOwnManaSetupNow&&!u.spiritOwnManaSetupNow&&!k&&!b&&!C&&!D&&!u.classes.drainerSafetyRecover&&u.safeSupermanaProgressSteps+1>=c.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps+1>=c.safeOpponentManaProgressSteps&&u.score<=v(c.score,16)&&!G)return{kind:"reject"};let Qt=i.headFamily===S.ImmediateScore||i.headFamily===S.DenyOpponentWindow||i.headFamily===S.DrainerKill||i.headFamily===S.DrainerSafetyRecovery&&Tn(a);return l&&!c.winsImmediately&&Qt&&ao(i.utility,L)&&!Eo&&(!m||d)?{kind:"accept"}:i.headFamily===S.SpiritImpact&&!M&&!u.spiritDevelopment&&!u.spiritOwnManaSetupNow&&!Ie?{kind:"reject"}:Ie?{kind:"accept"}:{kind:"delegate",policy:{selectedUtility:L,pickupUpgrade:D,strategicAxesBetter:G,projectedDeferredRecoveryWithoutConcreteGain:Je,safeRootBlocksPlainSpirit:en,safeRootBlocksPlainSpiritProgress:De,plainSpiritSiblingRegresses:kn,allowNonConcreteWhiteProgress:yo,whiteSetupRecoveryBlocksUtilityOverride:Eo}}}p(Xh,"evaluateProjectedHeadGuards");function HP(e,n){let{candidate:o,selected:t,plan:r,selectedUtilityValue:a}=e,i=o.safeSupermanaProgressSteps===t.safeSupermanaProgressSteps&&o.safeOpponentManaProgressSteps===t.safeOpponentManaProgressSteps&&o.ownDrainerVulnerable===t.ownDrainerVulnerable&&o.efficiency===t.efficiency&&o.supermanaProgress===t.supermanaProgress&&o.opponentManaProgress===t.opponentManaProgress,s=J(r.utility,a()),u=mt(r.utility,a()),c=a();return{...n,nearTieProgress:i,primaryAxesOrder:s,strategicAxesBetter:u,selectedUtility:c}}p(HP,"deriveOrderedHeadFacts");function Yh(e,n){let o=FS(n);if(o.kind==="reject")return!1;let t=HP(n,o.facts);if(BS(n,t))return!1;let r=Xh(e,n,t);return r.kind==="accept"?!0:r.kind==="reject"?!1:WS(n,r.policy)}p(Yh,"acceptTurnEngineHeadAfterOrderedGuards");function UP(e){let{game:n,plan:o,candidate:t,macroMode:r,selectedProgress:a,candidateFamily:i,selectedFamily:s,selectedUtilityValue:u,candidateUtilityValue:c,blackTurnSixRouteChangePlainSpirit:l,whiteSpiritSetupGain:m}=e;if(!r)return!0;let d=u(),y=c();if(n.activeColor===T.Black&&n.turnNumber<=6&&(o.headFamily===S.SafeSupermanaProgress||o.headFamily===S.SafeOpponentManaProgress)&&o.goalFamily===S.ImmediateScore&&i===S.ManaTempo&&s===S.SpiritImpact&&Ka(t)&&a&&J(o.headUtility,d)<0)return!1;let h=J(o.utility,d)>0&&(Fn(o.utility,d)||Fn(o.headUtility,d)),C=J(y,d)>0&&Fn(y,d);return l||m||h||C}p(UP,"passesTurnEngineMacroDominanceGuard");function Qh(e,n,o,t,r,a,i,s){let u=i.compiledChunks[0];if(u===void 0)return!1;let c=r.findIndex(Ie=>ue(Ie.inputs,u)),l=r.findIndex(Ie=>ue(Ie.inputs,a));if(c<0||l<0)return!1;if(c===l)return!0;let m=Rt(r,c),d=Rt(r,l);if(d.winsImmediately&&!m.winsImmediately)return!1;let y=Er(yt(t)),f=x(m),h=x(d),C=Ts(m),b=Ts(d),k=de(e,n,n.activeColor),M=_(d.score,m.score),R=m.sameTurnScoreWindowValue>d.sameTurnScoreWindowValue,P=m.attacksOpponentDrainer&&!d.attacksOpponentDrainer,g=(m.scoresSupermanaThisTurn||m.scoresOpponentManaThisTurn)&&!(d.scoresSupermanaThisTurn||d.scoresOpponentManaThisTurn),W=m.classes.drainerSafetyRecover&&!d.classes.drainerSafetyRecover&&d.ownDrainerVulnerable&&!m.ownDrainerVulnerable,E=m.spiritSameTurnScoreSetupNow&&!d.spiritSameTurnScoreSetupNow&&m.sameTurnScoreWindowValue>=d.sameTurnScoreWindowValue,D=m.spiritDevelopment&&!d.spiritDevelopment,N=m.spiritSameTurnScoreSetupNow||m.sameTurnScoreWindowValue>0||m.attacksOpponentDrainer||m.scoresSupermanaThisTurn||m.scoresOpponentManaThisTurn||m.safeSupermanaPickupNow||m.safeOpponentManaPickupNow,B=($e(m.safeSupermanaProgressSteps,d.safeSupermanaProgressSteps)||$e(m.safeOpponentManaProgressSteps,d.safeOpponentManaProgressSteps))&&!d.winsImmediately&&!d.attacksOpponentDrainer&&!d.spiritSameTurnScoreSetupNow,G=d.spiritDevelopment||d.spiritSameTurnScoreSetupNow||d.spiritOwnManaSetupNow,L=O(m),$=O(d),V=null,se=p(()=>(V??(V=Ll(e,n,d,o,t,s)),V),"selectedUtilityValue"),Pe=null,Ze=p(()=>(Pe??(Pe=Ll(e,n,m,o,t,s)),Pe),"candidateUtilityValue"),Je=y&&i.headFamily===S.SpiritImpact&&Fr(n,m,d,t)&&m.score>d.score,en=y&&n.activeColor===T.White&&i.headFamily===S.SpiritImpact&&!h&&!f&&m.spiritOwnManaSetupNow&&!m.spiritSameTurnScoreSetupNow&&!d.spiritOwnManaSetupNow&&!d.spiritSameTurnScoreSetupNow&&d.spiritDevelopment&&m.spiritDevelopment&&m.spiritSetupGain>=v(d.spiritSetupGain,32)&&m.safeSupermanaProgressSteps<=d.safeSupermanaProgressSteps&&m.safeOpponentManaProgressSteps<=d.safeOpponentManaProgressSteps&&m.ownDrainerVulnerable===d.ownDrainerVulnerable&&m.manaHandoffToOpponent===d.manaHandoffToOpponent&&m.hasRoundtrip===d.hasRoundtrip&&!g&&!P&&M<=96,De=y&&n.activeColor===T.Black&&n.turnNumber===6&&n.monsMovesCount===0&&n.playerCanUseAction()&&n.playerCanMoveMana()&&i.headFamily===S.SpiritImpact&&i.goalFamily===S.SpiritImpact&&c<=1&&f===h&&F(m)&&!C&&!N&&$===S.ManaTempo&&h&&!d.spiritDevelopment&&!d.spiritSameTurnScoreSetupNow&&!d.spiritOwnManaSetupNow&&!b&&!Z(d)&&d.sameTurnScoreWindowValue===0&&!pe(m.inputs,d.inputs)&&m.ownDrainerVulnerable===d.ownDrainerVulnerable&&m.ownDrainerWalkVulnerable===d.ownDrainerWalkVulnerable&&m.manaHandoffToOpponent===d.manaHandoffToOpponent&&m.hasRoundtrip===d.hasRoundtrip&&M<=1024&&wo(Ze(),se(),64),kn={game:n,perspective:o,config:t,plan:i,candidateIndex:c,candidate:m,selected:d,macroMode:y,candidateUnsafe:f,selectedUnsafe:h,candidateProgress:C,selectedProgress:b,exactContext:k,scoreGap:M,sameTurnWindowBetter:R,drainerAttackBetter:P,scoresNowBetter:g,safetyRecoverBetter:W,spiritWindowBetter:E,spiritDevelopmentBetter:D,candidateSpiritTactical:N,progressBetter:B,selectedSpiritPhase:G,candidateFamily:L,selectedFamily:$,selectedUtilityValue:se,candidateUtilityValue:Ze,blackSpiritPair:Je,whiteSpiritSetupGain:en,blackTurnSixRouteChangePlainSpirit:De};return UP(kn)?Yh(e,kn):!1}p(Qh,"acceptTurnEngineHeadAfterSearch");function Vl(e,n,o,t){let r=t.length===0?{}:{priorityInputs:t};if(!cs(o))return r;let a=_o(o),i=qn(o);return{...r,qualifiesPlainSpiritPlan:p(s=>{let u=co(e,s.game,n,a);return u?.headFamily===S.SpiritImpact&&Bo(u.utility)},"qualifiesPlainSpiritPlan"),qualifiesDrainerSafetyRecoveryPlan:p(s=>co(e,s.game,n,i)?.headFamily===S.DrainerSafetyRecovery,"qualifiesDrainerSafetyRecoveryPlan")}}p(Vl,"searchRootOptions");function Hl(e,n,o,t=!0){let r=n.fen(),a=ke(o,{search:{transpositionTable:t}}),i=n.activeColor,s=Xn(e,n,i,a);if(e.session.cancelled||s.length===0)return[];let u=a.planner.enabled?co(e,n,i,St(n,a)):void 0,c=jr(e,n,i,a,s,u),l=c===void 0?[]:Ur(c),m=kl(e,n,i,a,s,Vl(e,i,a,l));if(n.fen()!==r)throw new Error("runtime root focus mutated its source game");return[...m.evaluations]}p(Hl,"focusedScoredRootsForRuntime");function Ul(e,n,o,t){let r=n.fen(),a=n.activeColor,i=Xn(e,n,a,o),s=o.planner.enabled?co(e,n,a,St(n,o)):void 0,u=jr(e,n,a,o,i,s),c=u===void 0?[]:Ur(u),l=Ml(e,n,a,o,i,Vl(e,a,o,c),!0);if(n.fen()!==r)throw new Error("runtime root-rank focus mutated its source game");let m=l.candidates.findIndex(d=>ue(d.inputs,t));return m<0?void 0:m}p(Ul,"focusedCandidateRankForRuntimeInputs");function Ku(e,n){return{checkpoint:p(()=>e.session.checkpoint(),"checkpoint"),cancelled:p(()=>e.session.cancelled,"cancelled"),rootReplyRiskSnapshot:p((o,t,r,a)=>pn(e,o,t,n,a),"rootReplyRiskSnapshot"),pickReplyRiskGuardedIndex:p(o=>Lr(e,o.game,o.roots,o.candidateIndices,o.perspective,n),"pickReplyRiskGuardedIndex"),productionPolicy:Kh(e,n)}}p(Ku,"rootSelectorOptions");function jl(e,n,o,t,r,a){let i=kl(e,n,o,t,r,Vl(e,o,t,a));if(e.session.cancelled)return{inputs:[],evaluations:[]};let s=[...i.evaluations];return s.length===0?{inputs:[],evaluations:s}:{inputs:Fy(n,s,o,t,Ku(e,t)),evaluations:s}}p(jl,"searchAndSelectRoot");function Zh(e,n,o,t,r,a){if(r.length<=1||!t.planner.rerankHeads||!Vu(r))return;let i=r.map(u=>u.inputs),s=a?.compiledChunks[0];return a!==void 0&&s!==void 0&&i.some(u=>ue(u,s))?a:bu(e,n,o,_o(t),i)}p(Zh,"tryTurnHeadRerank");function Jh(e,n,o,t,r,a,i){let s=a?.compiledChunks[0];if(!(s===void 0||!Hu(r,s)||!Uu(r,s)||ju(e,n,o,t,r,i,s)))return[...s]}p(Jh,"acceptedRerankInputs");function eb(e,n,o,t){if(e.session.checkpoint())return[];Rl(e),ku(e);let r=ke(o,{search:{transpositionTable:t}}),a=n.activeColor,i=St(n,r),s;if(Cu(r)&&(s=is(e,n,i),s===void 0&&Dp(e,n)&&(r=ke(r,{planner:{enabled:!1}}))),fy(r)&&Wp(e,n)&&(s=void 0,r=ke(r,{planner:{enabled:!1}})),Cu(r)&&_a(e,n)&&(r=ke(r,{planner:{secondaryAnalysis:!1,selectedFollowupProjection:!1}})),r=hy(n,r),!r.planner.enabled&&r.planner.mode===Le.Production&&yy(n))return eb(e,n,ke(r,{planner:{mode:Le.Baseline}}),t);let u=Xn(e,n,a,r);if(e.session.cancelled||u.length===0)return[];if(r.planner.enabled){let d=yt(r),y=s??is(e,n,i),f=y!==void 0&&Gl(u,y,d)?y:void 0,h=St(n,r),b=qh(n,u,r)?void 0:Sy(n,r)?Op(e,n,a,h):co(e,n,a,h);if(e.session.checkpoint())return[];if(d===Ve.Production&&f!==void 0){if(Lu(u,f,d))return[...f];if(b?.compiledChunks[0]!==void 0&&ue(b.compiledChunks[0],f))return $a(e,n,a,r,d,b,h),[...f]}let k=Zh(e,n,a,r,u,b),M=Jh(e,n,a,r,u,k,b);if(M!==void 0&&k!==void 0)return $a(e,n,a,r,d,k,h),M;let R=_l(e,n,a,u,r);if(R!==void 0)return b?.compiledChunks[0]!==void 0&&ue(b.compiledChunks[0],R)&&$a(e,n,a,r,d,b,h),R;if(b!==void 0){let D=zh(e,n,u,b,r);if(D!==void 0)return $a(e,n,a,r,d,b,h),D}let P=jr(e,n,a,r,u,b),g=P===void 0?[]:Ur(P),W=jl(e,n,a,r,u,g);if(W.inputs.length===0)return[];let E=W.inputs;return b!==void 0&&Qh(e,n,a,r,W.evaluations,E,b)&&(E=[...b.compiledChunks[0]??E]),f!==void 0&&ue(f,E)?[...E]:(b?.compiledChunks[0]!==void 0&&ue(b.compiledChunks[0],E)&&$a(e,n,a,r,d,b,h),[...E])}if(u.length>1&&r.planner.rerankHeads&&Vu(u)){let d=u.map(f=>f.inputs),y=Ip(e,n,a,yt(r),_o(r),d);if(y!==void 0&&Hu(u,y)&&Uu(u,y)&&!ju(e,n,a,r,u,void 0,y))return[...y]}let c=_l(e,n,a,u,r);if(c!==void 0)return c;let l=jr(e,n,a,r,u,void 0),m=l===void 0?[]:Ur(l);return jl(e,n,a,r,u,m).inputs}p(eb,"smartSearchBestInputsInternal");function Kl(e){bi(e),Rl(e),ku(e),Ji(e)}p(Kl,"clearProductionSelectorCaches");function vs(e,n,o,t=!0){let r=n.fen(),a=eb(e,n,o,t);if(n.fen()!==r)throw new Error("smart search mutated its source game");return[...a]}p(vs,"smartSearchBestInputs");function jP(e,n){if(!Number.isSafeInteger(n)||n<=0||n>4294967296)throw new RangeError("random index requires a non-empty uint32-sized collection");let o=4294967296,t=o-o%n;for(;;){let r=e.random.nextUint32();if(!Number.isInteger(r)||r<0||r>=o)throw new RangeError("automove random source must return a uint32");if(r<t)return r%n}}p(jP,"randomIndex");function nb(e){switch(e.kind){case"invalid-input":case"events":return;case"locations-to-start-from":return e.locations.map(n=>({kind:"location",location:{i:n.i,j:n.j}}));case"next-input-options":return e.nextInputs.map(n=>n.input)}}p(nb,"nextInputsForPrompt");function qu(e,n){let o=[];for(;;){let t=n.processInputWithStartOptions(o,!1,!1,In);if(t.kind==="invalid-input")return{output:t,inputFen:""};if(t.kind==="events")return{output:t,inputFen:Et(o)};let r=nb(t);if(r===void 0||r.length===0)return{output:{kind:"invalid-input"},inputFen:""};if(o.length===Ho)return{output:{kind:"invalid-input"},inputFen:""};let a=r[jP(e,r.length)];if(a===void 0)return{output:{kind:"invalid-input"},inputFen:""};o.push(a)}}p(qu,"randomAutomove");function Xa(e){let n=e.fork(),o=[],t=p(()=>{let r=o.length===0?n.processInputWithStartOptions(o,!0,!1,In):n.inspectInputGrammar(o,In);if(r.kind==="invalid-input")return!1;if(r.kind==="events")return o.length!==0&&an(n,o)!==void 0;if(o.length===Ho)return!1;let a=nb(r);if(a===void 0||a.length===0)return!1;a.sort(au);for(let i of a){if(o.push(i),t())return!0;o.pop()}return!1},"findFirstApplicableCompletion");return t()?o:[]}p(Xa,"deterministicLegalFallbackInputs");function ob(e){Kl(e)}p(ob,"clearTimedOutSelectionCaches");function fo(e,n,o){if(e.session.checkpoint())return[];let t=[...vs(e,n,o,!0)];if(t.length>0)return t;if(e.session.checkpoint())return[];let r=qu(e,n.fork());return r.output.kind==="events"?Ot(r.inputFen)??[]:[]}p(fo,"selectSearchInputs");function ql(e,n,o){return e.session.checkpoint()?[]:(o.planner.enabled&&Ji(e),fo(e,n,o))}p(ql,"selectSearchInputsWithFreshPlanCache");var tb=Object.freeze({kind:"continue"});function rb(e){return{kind:"select",inputs:e}}p(rb,"selectProductionGuard");function KP(e,n){return Gn(e,n,n.activeColor)||mS(e,n,n.activeColor)}p(KP,"ownDrainerUnsafe");function ab(e,n,o,t){let r=qn(t),a=Na(e,o.game,n,n.activeColor,r),i=O(o),s={actions:[],compiledChunks:[o.inputs],endGame:o.game.fork(),utility:a,headUtility:a,headFamily:i,goalFamily:i,packageMeta:{scoreGain:0,denyGain:0,drainerSafetyDelta:0,spiritOnlySetup:!1,endsNonnegativeDrainerSafety:!0,opponentImmediateWindowAfter:0}};return ss(e,n,s,n.activeColor,r)}p(ab,"evaluateSelectedUtility");function qP(e,n){if(n.activeColor===T.White&&n.turnNumber<=3&&!n.playerCanUseAction()&&!n.playerCanMoveMana()&&(n.monsMovesCount===0||n.monsMovesCount===3)||n.activeColor===T.White&&n.turnNumber===1&&n.monsMovesCount===2&&!n.playerCanUseAction()&&!n.playerCanMoveMana()||n.activeColor===T.White&&n.turnNumber===3&&n.monsMovesCount===0&&n.playerCanUseAction()&&n.playerCanMoveMana()||n.activeColor===T.White&&n.turnNumber===3&&n.monsMovesCount>=3&&n.playerCanUseAction()&&n.playerCanMoveMana())return fo(e,n,Fo(n,"pro"));let t=n.activeColor===T.White&&n.turnNumber===3&&n.monsMovesCount===1&&!n.playerCanUseAction()&&n.playerCanMoveMana();if(!(!(n.activeColor===T.White&&n.turnNumber===3&&n.monsMovesCount>0&&!t&&(n.playerCanUseAction()||n.playerCanMoveMana()))||!KP(e,n)))return fo(e,n,Fo(n,"fast"))}p(qP,"selectEarlyWhiteFallbackInputs");function zP(e,n,o){if(!(!(n.activeColor===T.White&&n.turnNumber===3&&(n.monsMovesCount===1||n.monsMovesCount===2)&&n.playerCanUseAction()&&n.playerCanMoveMana())||de(e,n,n.activeColor).delta.sameTurnScoreWindowValue<=0))return ql(e,n,Ht(o))}p(zP,"selectScoreWindowTacticalFallbackInputs");function zu(e,n){return e.find(o=>ue(o.inputs,n))}p(zu,"findRoot");function zl(e){return!e.opponentCanWinImmediately&&e.delta.sameTurnScoreWindowValue===1&&e.delta.opponentWindowDenyGain===1&&!e.delta.drainerAttackAvailable&&e.delta.drainerSafety<0}p(zl,"whiteDenyFallbackContextEligible");function $P(e,n,o,t){if(!(n.activeColor===T.White&&n.turnNumber===5&&n.monsMovesCount===0&&n.playerCanUseAction()&&n.playerCanMoveMana()&&t.length>0))return;let a=de(e,n,n.activeColor);if(!zl(a))return;let i=Ht(o),s=zu(Xn(e,n,n.activeColor,i),t);if(s===void 0||s.winsImmediately||s.attacksOpponentDrainer||s.spiritDevelopment||s.spiritSameTurnScoreSetupNow||s.spiritOwnManaSetupNow||s.scoresSupermanaThisTurn||s.scoresOpponentManaThisTurn||s.safeSupermanaPickupNow||s.safeOpponentManaPickupNow||s.supermanaProgress||s.opponentManaProgress||!s.ownDrainerVulnerable||s.ownDrainerWalkVulnerable||s.manaHandoffToOpponent||s.hasRoundtrip||s.sameTurnScoreWindowValue!==1)return;let u=Fo(n,"pro"),c=fo(e,n,u);if(c.length===0||ue(c,t))return;let l=zu(Xn(e,n,n.activeColor,u),c);if(!(l===void 0||!l.spiritDevelopment||l.spiritSameTurnScoreSetupNow||!z(l)||l.winsImmediately||l.attacksOpponentDrainer||l.scoresSupermanaThisTurn||l.scoresOpponentManaThisTurn||l.safeSupermanaPickupNow||l.safeOpponentManaPickupNow||l.manaHandoffToOpponent||l.hasRoundtrip||!l.ownDrainerVulnerable||l.ownDrainerWalkVulnerable||l.sameTurnScoreWindowValue!==0))return c}p($P,"selectWhiteEarlyBaselineFallbackInputs");function XP(e,n,o,t){if(!(n.activeColor===T.White&&n.turnNumber===3&&n.monsMovesCount===1&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&t.length>0))return;let a=de(e,n,n.activeColor);if(!zl(a))return;let i=Ht(o),s=zu(Xn(e,n,n.activeColor,i),t);if(s===void 0||!Bo(ab(e,n,s,i)))return;let u=ke(i,{planner:{enabled:!1,rerankHeads:!0,mode:Le.Baseline}}),c=fo(e,n,u);return c.length===0||ue(c,t)?void 0:c}p(XP,"selectWhiteNonnegativeDenyFallbackInputs");function YP(e,n,o,t){if(!(n.activeColor===T.White&&n.turnNumber===3&&n.monsMovesCount===1&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&t.length>0))return;let a=de(e,n,n.activeColor);if(!zl(a))return;let i=Ht(o),s=zu(Xn(e,n,n.activeColor,i),t);if(s===void 0||Bo(ab(e,n,s,i)))return;let u=Fo(n,"pro"),c=ke(i,{planner:{enabled:!1,rerankHeads:!0,ownSeedCap:u.planner.ownSeedCap,ownBeam:u.planner.ownBeam,perNodeFamilyCap:u.planner.perNodeFamilyCap,stepCap:u.planner.stepCap}}),l=fo(e,n,c);if(!(l.length===0||ue(l,t)))return Ul(e,n,c,l)===0?l:void 0}p(YP,"selectWhiteNegativeDenyFallbackInputs");function $u(e){return!e.winsImmediately&&!e.attacksOpponentDrainer&&!e.ownDrainerVulnerable&&!e.ownDrainerWalkVulnerable&&!e.spiritDevelopment&&!e.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&!e.manaHandoffToOpponent&&!e.hasRoundtrip&&!e.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!e.safeSupermanaPickupNow&&!e.safeOpponentManaPickupNow&&e.sameTurnScoreWindowValue===0&&!e.supermanaProgress&&!e.opponentManaProgress&&!e.classes.immediateScore&&!e.classes.drainerAttack&&!e.classes.drainerSafetyRecover&&!e.classes.carrierProgress&&!e.classes.material&&e.classes.quiet&&O(e)===S.ManaTempo}p($u,"safeQuietManaTempoRoot");function ib(e){return!e.opponentCanWinImmediately&&e.delta.sameTurnScoreWindowValue===0&&e.delta.spiritGain===0&&e.delta.opponentWindowDenyGain===0&&!e.delta.drainerAttackAvailable&&e.delta.safeSupermanaProgressSteps===void 0&&e.delta.safeOpponentManaProgressSteps===void 0&&e.delta.drainerSafety>=0}p(ib,"confirmBaselineContextEligible");function sb(e,n,o,t){let r=Ht(o),a=Hl(e,n,r,!0),i=a.findIndex(c=>ue(c.inputs,t));if(i<0)return;let s=ds(n,a,n.activeColor,r,Ku(e,r));if(!s.includes(i))return;let u=Dr(e,a,s,r);if(u.includes(i))return{config:r,roots:a,productionIndex:i,candidateIndices:s,shortlist:u}}p(sb,"productionRuntimeCompetition");function ub(e){return ke(e,{planner:{enabled:!1,rerankHeads:!0,mode:Le.Baseline}})}p(ub,"searchOnlyBaselineConfig");function QP(e,n,o,t){if(!(n.activeColor===T.White&&n.turnNumber===3&&n.monsMovesCount===2&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&t.length>0)||!ib(de(e,n,n.activeColor)))return;let a=sb(e,n,o,t);if(a?.candidateIndices.length!==2||a.shortlist.length!==a.candidateIndices.length)return;let i=fo(e,n,ub(a.config));if(i.length===0||ue(i,t))return;let s=a.roots.findIndex(l=>ue(l.inputs,i));if(!a.candidateIndices.includes(s)||!a.shortlist.includes(s))return;let u=a.roots[a.productionIndex],c=a.roots[s];if(!(u===void 0||c===void 0))return u.score===c.score&&u.spiritSetupGain===c.spiritSetupGain&&u.safeSupermanaProgressSteps===c.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps===c.safeOpponentManaProgressSteps&&u.scorePathBestSteps===c.scorePathBestSteps&&$u(u)&&$u(c)?i:void 0}p(QP,"selectWhiteConfirmBaselineTiebreakInputs");function ZP(e,n,o,t){if(!(n.activeColor===T.White&&n.turnNumber===3&&n.monsMovesCount>=3&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&t.length>0)||!ib(de(e,n,n.activeColor)))return;let a=sb(e,n,o,t);if(a===void 0)return;let i=fo(e,n,ub(a.config));if(i.length===0||ue(i,t))return;let s=a.roots.findIndex(l=>ue(l.inputs,i));if(!a.candidateIndices.includes(s)||!a.shortlist.includes(s))return;let u=a.roots[a.productionIndex],c=a.roots[s];if(!(u===void 0||c===void 0))return c.score>=u.score&&c.rootRank<u.rootRank&&u.spiritSetupGain===c.spiritSetupGain&&u.safeSupermanaProgressSteps===c.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps===c.safeOpponentManaProgressSteps&&u.scorePathBestSteps===c.scorePathBestSteps&&$u(u)&&$u(c)?i:void 0}p(ZP,"selectWhiteConfirmBaselineBetterInputs");function JP(e,n){return n.activeColor===T.Black&&n.turnNumber===2&&n.monsMovesCount===0&&n.playerCanUseAction()&&n.playerCanMoveMana()||n.activeColor===T.Black&&n.turnNumber===2&&n.monsMovesCount>0&&!n.playerCanUseAction()&&n.playerCanMoveMana()||n.activeColor===T.Black&&n.turnNumber===4&&n.monsMovesCount===0&&n.playerCanUseAction()&&n.playerCanMoveMana()?fo(e,n,Fo(n,"pro")):void 0}p(JP,"selectUnconditionalBlackFallbackInputs");function ew(e,n,o){if(o.length===0)return;let t=n.activeColor===T.Black&&n.turnNumber===4&&n.monsMovesCount===2&&n.playerCanUseAction()&&n.playerCanMoveMana(),r=n.activeColor===T.Black&&n.turnNumber>=4&&n.monsMovesCount>=3&&n.playerCanUseAction()&&n.playerCanMoveMana();if(!t&&!r)return;let a=fo(e,n,Fo(n,"pro"));if(!(a.length===0||ue(a,o)))return t&&a.length===3&&a[2]?.kind==="modifier"&&a[2].modifier===on.SelectBomb||r?a:void 0}p(ew,"selectLateBlackFallbackInputs");function wt(e){return e===void 0?tb:rb(e)}p(wt,"guardResult");var nw=Object.freeze([Object.freeze({id:"early-white-fallback",evaluate:p((e,n)=>wt(qP(e,n)),"evaluate")}),Object.freeze({id:"score-window-tactical-fallback",evaluate:p((e,n,o)=>wt(zP(e,n,o)),"evaluate")}),Object.freeze({id:"unconditional-black-fallback",evaluate:p((e,n)=>wt(JP(e,n)),"evaluate")})]),ow=Object.freeze([Object.freeze({id:"white-early-baseline-fallback",evaluate:p((e,n,o,t)=>wt($P(e,n,o,t)),"evaluate")}),Object.freeze({id:"white-nonnegative-deny-fallback",evaluate:p((e,n,o,t)=>wt(XP(e,n,o,t)),"evaluate")}),Object.freeze({id:"white-negative-deny-fallback",evaluate:p((e,n,o,t)=>wt(YP(e,n,o,t)),"evaluate")}),Object.freeze({id:"white-confirm-baseline-tiebreak",evaluate:p((e,n,o,t)=>wt(QP(e,n,o,t)),"evaluate")}),Object.freeze({id:"white-confirm-baseline-better",evaluate:p((e,n,o,t)=>wt(ZP(e,n,o,t)),"evaluate")}),Object.freeze({id:"late-black-fallback",evaluate:p((e,n,o,t)=>wt(ew(e,n,t)),"evaluate")})]);function cb(e,n,o,t){for(let a of nw){if(e.session.checkpoint())return[];let i=a.evaluate(e,n,o);if(i.kind==="select")return[...i.inputs]}let r=ql(e,n,t);if(e.session.checkpoint())return[];for(let a of ow){if(e.session.checkpoint())return[];let i=a.evaluate(e,n,o,r);if(i.kind==="select")return[...i.inputs]}return r}p(cb,"selectProductionPolicyInputs");var tw=200,rw=100,aw=550;function pb(e,n,o){return e.session.withDeadlineIfAbsent(ed,()=>{let t=Xa(n);if(e.session.checkpoint())return t;let r=fo(e,n,o);return r.length===0||e.session.checkpoint()?t:r})}p(pb,"selectStrategicSearchInputsWithDeadline");function iw(e,n){let o=Fo(n,"fast"),t=e.session.withCooperativeSubdeadline(tw,()=>[...vs(e,n,o,!0)]);return t===void 0&&ob(e),t}p(iw,"selectProductionFastBankInputs");function lb(e,n,o){let t=Ht(o);return e.session.withDeadlineIfAbsent(aw,()=>{let r=Xa(n);if(e.session.checkpoint())return r;let a=iw(e,n)??[],i=a.length>0&&!e.session.checkpoint()?a:r;if(e.session.checkpointWithReserve(rw))return i;let s=cb(e,n,o,t);return s.length===0||e.session.checkpoint()?i:s})}p(lb,"selectProductionInputsWithDeadline");function sw(e,n,o){let t=n.fen(),r=Fo(n,o),a=o==="pro"?lb(e,n,r):pb(e,n,r),i=a.length===0?Xa(n):a,s=an(n,i),u=i;if(s===void 0&&(u=Xa(n),s=an(n,u)),n.fen()!==t)throw new Error("automove suggestion mutated its source game");return s===void 0?{output:{kind:"invalid-input"},inputFen:""}:{output:{kind:"events",events:s.events},inputFen:Et(u)}}p(sw,"suggestStrategicMove");function db(e,n,o){return o==="random"?qu(e,n.fork()):sw(e,n,o)}p(db,"suggestMove");function Xu(e){let n={i:e.row,j:e.column};if(!Number.isInteger(e.row)||!Number.isInteger(e.column)||!Oo(n))throw new RangeError(`position must contain integer row and column values from 0 through ${10}`);return n}p(Xu,"toEnginePosition");function Qe(e){return{row:e.i,column:e.j}}p(Qe,"fromEnginePosition");function rt(e){return{kind:e.kind,color:e.color,cooldown:e.cooldown}}p(rt,"fromEngineMon");function As(e){return e.kind==="supermana"?{kind:"supermana"}:{kind:"regular",color:e.color}}p(As,"fromEngineMana");function Ya(e){switch(e.kind){case"mon":return{kind:"mon",mon:rt(e.mon)};case"mana":return{kind:"mana",mana:As(e.mana)};case"mon-with-mana":return{kind:"mon",mon:rt(e.mon),carrying:{kind:"mana",mana:As(e.mana)}};case"mon-with-consumable":return{kind:"mon",mon:rt(e.mon),carrying:{kind:"consumable",consumable:e.consumable}};case"consumable":return{kind:"consumable",consumable:e.consumable}}}p(Ya,"fromEngineItem");function mb(e){switch(e.kind){case"regular":case"consumable-base":case"supermana-base":return{kind:e.kind};case"mana-base":case"mana-pool":return{kind:e.kind,color:e.color};case"mon-base":return{kind:e.kind,color:e.color,monKind:e.monKind}}}p(mb,"fromEngineSquare");function $l(e){switch(e.kind){case"takeback":return{kind:"takeback"};case"position":return{kind:"location",location:Xu(e.position)};case"modifier":return{kind:"modifier",modifier:e.modifier}}}p($l,"toEngineInput");function Yu(e){switch(e.kind){case"takeback":return{kind:"takeback"};case"location":return{kind:"position",position:Qe(e.location)};case"modifier":return{kind:"modifier",modifier:e.modifier}}}p(Yu,"fromEngineInput");function uw(e){let n=Yu(e.input),o=e.actorMonItem===void 0?{}:{actor:Ya(e.actorMonItem)};if(e.kind==="select-consumable"){if(n.kind!=="modifier")throw new Error("consumable selection requires a modifier input");return{action:e.kind,input:n,...o}}if(n.kind!=="position")throw new Error(`${e.kind} requires a position input`);switch(e.kind){case"mon-move":case"mana-move":case"mystic-action":case"demon-action":case"demon-additional-step":case"spirit-target-capture":case"spirit-target-move":case"bomb-attack":return{action:e.kind,input:n,...o}}}p(uw,"fromEngineInputOption");function Qu(e){switch(e.kind){case"mon-move":return{kind:e.kind,item:Ya(e.item),from:Qe(e.from),to:Qe(e.to)};case"mana-move":return{kind:e.kind,mana:As(e.mana),from:Qe(e.from),to:Qe(e.to)};case"mana-scored":case"mana-dropped":return{kind:e.kind,mana:As(e.mana),at:Qe(e.at)};case"mystic-action":return{kind:e.kind,mystic:rt(e.mystic),from:Qe(e.from),to:Qe(e.to)};case"demon-action":case"demon-additional-step":return{kind:e.kind,demon:rt(e.demon),from:Qe(e.from),to:Qe(e.to)};case"spirit-target-move":return{kind:e.kind,item:Ya(e.item),from:Qe(e.from),to:Qe(e.to),by:Qe(e.by)};case"pickup-bomb":return{kind:e.kind,by:rt(e.by),at:Qe(e.at)};case"pickup-potion":return{kind:e.kind,by:Ya(e.by),at:Qe(e.at)};case"use-potion":case"supermana-back-to-base":return{kind:e.kind,from:Qe(e.from),to:Qe(e.to)};case"pickup-mana":return{kind:e.kind,mana:As(e.mana),by:rt(e.by),at:Qe(e.at)};case"mon-fainted":return{kind:e.kind,mon:rt(e.mon),from:Qe(e.from),to:Qe(e.to)};case"bomb-attack":return{kind:e.kind,by:rt(e.by),from:Qe(e.from),to:Qe(e.to)};case"mon-awake":return{kind:e.kind,mon:rt(e.mon),at:Qe(e.at)};case"bomb-explosion":return{kind:e.kind,at:Qe(e.at)};case"next-turn":return{kind:e.kind,color:e.color};case"game-over":return{kind:e.kind,winner:e.winner};case"takeback":return{kind:e.kind}}}p(Qu,"fromEngineEvent");function Xl(e,n){switch(e.kind){case"invalid-input":return{kind:"invalid",inputFen:n};case"locations-to-start-from":return{kind:"awaiting-start",inputFen:n,positions:e.locations.map(Qe)};case"next-input-options":return{kind:"awaiting-input",inputFen:n,options:e.nextInputs.map(uw)};case"events":return{kind:"complete",inputFen:n,events:e.events.map(Qu)}}}p(Xl,"fromEngineOutput");function fb(e){return{monMoves:e.get(Yn.MonMove)??0,manaMoves:e.get(Yn.ManaMove)??0,actions:e.get(Yn.Action)??0,potions:e.get(Yn.Potion)??0}}p(fb,"availableMoveCountsFromEngine");function cw(e){if(e!=="")return Ot(e)}p(cw,"parseReplayMove");function Zu(e,n,o,t){let r=0,a=0;for(;r<n.length||a<o.length;){let i=e.activeColor===T.White,c=(i?n:o)[i?r:a];if(c===void 0)return{status:"missing-move",whiteMovesProcessed:r,blackMovesProcessed:a};let l=cw(c);if(l===void 0)return{status:"invalid-move",whiteMovesProcessed:r,blackMovesProcessed:a};let m=e.processInput(l,!1,!1);if(m.kind!=="events"||m.events.length===0)return{status:"invalid-move",whiteMovesProcessed:r,blackMovesProcessed:a};i?r+=1:a+=1;let d={whiteMovesProcessed:r,blackMovesProcessed:a};if(t?.(e,d)===!1)return{status:"stopped",...d}}return{status:"complete",whiteMovesProcessed:r,blackMovesProcessed:a}}p(Zu,"replayInterleavedMoves");var Se,Ju,Es,Ql,Kr=class Kr{constructor(n={}){X(this,Se);X(this,Ju,new Ns);let{variant:o=ce.Classic}=n;if(!lw(o))throw new TypeError(`unsupported game variant: ${String(o)}`);H(this,Se,new Jn(!0,o))}static fromFen(n){var t;let o=Jn.fromFen(n,!0);if(o?.fen()===n)return Y(t=Kr,Es,Ql).call(t,o)}get variant(){return w(this,Se).variant()}get activeColor(){return w(this,Se).activeColor}get turnNumber(){return w(this,Se).turnNumber}get scores(){return{[T.White]:w(this,Se).whiteScore,[T.Black]:w(this,Se).blackScore}}get potions(){return{[T.White]:w(this,Se).whitePotionsCount,[T.Black]:w(this,Se).blackPotionsCount}}get moveUsage(){return{monMoves:w(this,Se).monsMovesCount,manaMoves:w(this,Se).manaMovesCount,actions:w(this,Se).actionsUsedCount}}get winner(){return w(this,Se).winnerColor()}get historyVerified(){return w(this,Se).isMovesVerified}get takebackFens(){return[...w(this,Se).takebackFens]}get trackingEntries(){return w(this,Se).verboseTrackingEntities.map(n=>({fen:n.fen,color:n.color,events:n.events.map(Qu),eventsFen:Cc(n.events)}))}toFen(){return w(this,Se).fen()}preview(n){let o=n.map($l),t=Et(o),r=o.length===1&&o[0]?.kind==="takeback"?w(this,Se).copy():w(this,Se).fork();return Xl(r.processInput(o,!1,!1),t)}previewFen(n){let o=yb(n);return o===void 0?{kind:"invalid",inputFen:n}:this.preview(o)}play(n){let o=n.map($l),t=Et(o),r=Xl(w(this,Se).processInput(o,!1,!1),t);return r.kind==="complete"?r:{kind:"invalid",inputFen:t}}playFen(n){let o=yb(n);return o===void 0?{kind:"invalid",inputFen:n}:this.play(o)}itemAt(n){let o=w(this,Se).board.get(Xu(n));return o===void 0?void 0:Ya(o)}squareAt(n){return mb(w(this,Se).board.squareAt(Xu(n)))}contentPositions(){let n=new Map;for(let[o]of w(this,Se).board.entries())n.set(Sb(o.i,o.j),{row:o.i,column:o.j});for(let o of w(this,Se).board.allMonsBases())n.set(Sb(o.i,o.j),{row:o.i,column:o.j});return[...n.values()].sort((o,t)=>o.row-t.row||o.column-t.column)}canTakeback(n){if(!pw(n))throw new TypeError(`unsupported color: ${String(n)}`);return w(this,Se).canTakeback(n)}takeback(){return this.play([{kind:"takeback"}])}previousTurn(n){var u;let o=w(this,Se).verboseTrackingEntities;if(o.length<=1)return;let t=o.slice(0,-1),r=t[t.length-1],a=Jn.fromFen(r?.fen??w(this,Se).fen(),!0);if(a===void 0)return;let i=n.lastIndexOf(a.fen());if(n.length>0&&i<0)return;let s=i<0?[]:n.slice(0,i+1);if(!s.some(c=>{let l=Jn.fromFen(c,!1);return l?.fen()!==c||l.variant()!==a.variant()}))return a.replaceHistory({takebackFens:s,trackingEntries:t,verboseTrackingEnabled:!0,movesVerified:w(this,Se).isMovesVerified}),Y(u=Kr,Es,Ql).call(u,a)}verifyHistory(n){let o=new Jn(!0,w(this,Se).variant());return Zu(o,n.white,n.black).status!=="complete"||o.fen()!==w(this,Se).fen()?!1:(w(this,Se).replaceHistory({takebackFens:o.takebackFens,trackingEntries:o.verboseTrackingEntities,movesVerified:!0}),!0)}isLaterThan(n){return w(this,Se).isLaterThan(w(n,Se))}availableMoveCounts(){return fb(w(this,Se).availableMoveKinds())}suggestMove(n){if(!dw(n))throw new TypeError(`unsupported automove preference: ${String(n)}`);let o=w(this,Ju).run(r=>db(r,w(this,Se),n));if(o.output.kind!=="events")return;let t=Ot(o.inputFen);if(t!==void 0)return{inputs:t.map(Yu),inputFen:o.inputFen,events:o.output.events.map(Qu)}}clearTracking(){w(this,Se).clearTracking()}};Se=new WeakMap,Ju=new WeakMap,Es=new WeakSet,Ql=p(function(n){let o=new Kr({variant:n.variant()});return H(o,Se,n),o},"#fromEngine"),X(Kr,Es),p(Kr,"Game");var Yl=Kr;function yb(e){return Ot(e)?.map(Yu)}p(yb,"parseStrictInputArrayFen");function pw(e){return e===T.White||e===T.Black}p(pw,"isColor");function lw(e){return Object.values(ce).includes(e)}p(lw,"isGameVariant");function dw(e){return Object.values(sc).includes(e)}p(dw,"isAutomovePreference");function Sb(e,n){return`${e},${n}`}p(Sb,"positionKey");function mw(e){let n=hb(e.white.fen),o=hb(e.black.fen);if(n===void 0||o===void 0)return n===void 0&&o===void 0?{kind:"invalid"}:{kind:"winner",winner:n===void 0?T.Black:T.White};if(n.variant()!==o.variant())return{kind:"invalid"};let t=n.fen(),r=o.fen();if(n.winnerColor()===void 0&&o.winnerColor()===void 0)return{kind:"ongoing"};let a=new Jn(!1,n.variant()),i;return Zu(a,e.white.moves,e.black.moves,(s,{whiteMovesProcessed:u,blackMovesProcessed:c})=>{let l=s.winnerColor();if(l===void 0)return!0;let m=l===T.White?u===e.white.moves.length:c===e.black.moves.length,d=l===T.White?t:r;return i=m&&d===s.fen()?{kind:"winner",winner:l}:{kind:"invalid"},!1}),i??{kind:"invalid"}}p(mw,"resolveMatch");function hb(e){let n=Jn.fromFen(e,!1);return n?.fen()===e?n:void 0}p(hb,"submittedGame");export{sc as AutomovePreference,T as Color,j as Consumable,Yl as Game,ce as GameVariant,on as Modifier,A as MonKind,mw as resolveMatch};
|
|
1
|
+
var $f=Object.defineProperty;var Xf=e=>{throw TypeError(e)};var iR=(e,n,o)=>n in e?$f(e,n,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[n]=o;var l=(e,n)=>$f(e,"name",{value:n,configurable:!0});var ee=(e,n,o)=>iR(e,typeof n!="symbol"?n+"":n,o),Mp=(e,n,o)=>n.has(e)||Xf("Cannot "+o);var R=(e,n,o)=>(Mp(e,n,"read from private field"),o?o.call(e):n.get(e)),H=(e,n,o)=>n.has(e)?Xf("Cannot add the same private member more than once"):n instanceof WeakSet?n.add(e):n.set(e,o),F=(e,n,o,t)=>(Mp(e,n,"write to private field"),t?t.call(e,o):n.set(e,o),o),K=(e,n,o)=>(Mp(e,n,"access private method"),o);function sR(e){if(!Number.isSafeInteger(e.capacity)||e.capacity<1)throw new RangeError("automove cache capacity must be a positive integer");if(!Number.isSafeInteger(e.size)||e.size<0||e.size>e.capacity)throw new RangeError("automove cache size must be within its capacity")}l(sR,"assertBoundedCache");var Zr,ws,kp=class kp{constructor(n){ee(this,"lifetime",n);H(this,Zr,new Set);H(this,ws,new Map)}get cacheCount(){return R(this,Zr).size}get entryCount(){let n=0;for(let o of R(this,Zr))n+=o.size;return n}own(n){return sR(n),R(this,Zr).add(n),n}getOrCreate(n,o){let t=R(this,ws).get(n);if(t!==void 0)return t;let r=this.own(o());return R(this,ws).set(n,r),r}clear(){for(let n of R(this,Zr))n.clear()}};Zr=new WeakMap,ws=new WeakMap,l(kp,"AutomoveCacheScope");var Jr=kp;var Yf=650;function uR(){return globalThis.performance.now()}l(uR,"systemMonotonicClock");function Rp(e,n){if(!Number.isFinite(e)||e<0)throw new RangeError(`${n} must be a finite nonnegative number`);return e}l(Rp,"validateDuration");var vs,wc,Hn,ti,Un,Pp,Qf,Zf,Jf,Pc,ey,Tp=class Tp{constructor(n={}){H(this,Un);H(this,vs);H(this,wc,new Jr("session"));H(this,Hn);H(this,ti,!1);F(this,vs,n.clock??uR)}get caches(){return R(this,wc)}now(){let n=R(this,vs).call(this);if(!Number.isFinite(n))throw new RangeError("monotonic clock must return a finite number");return n}withDeadlineIfAbsent(n,o){return K(this,Un,Pp).call(this,n,!0,o)}withUnrecordedDeadlineIfAbsent(n,o){return K(this,Un,Pp).call(this,n,!1,o)}withCooperativeSubdeadline(n,o){let t=Rp(n,"subdeadline budget"),r=R(this,Hn);return r===void 0?K(this,Un,Jf).call(this,t,o):K(this,Un,ey).call(this,r,t,o)}checkpoint(){let n=R(this,Hn);return n===void 0?!1:n.timedOut?!0:this.now()>=n.endMs?(n.timedOut=!0,!0):!1}checkpointWithReserve(n){let o=Rp(n,"checkpoint reserve"),t=R(this,Hn);return t===void 0?!1:t.timedOut?!0:this.now()+o>=t.endMs?(t.timedOut=!0,!0):!1}get cancelled(){return R(this,Hn)?.timedOut??!1}get cacheWriteAllowed(){return!this.checkpoint()}takePreviousTimeout(){if(R(this,Hn)!==void 0)return!1;let n=R(this,ti);return F(this,ti,!1),n}};vs=new WeakMap,wc=new WeakMap,Hn=new WeakMap,ti=new WeakMap,Un=new WeakSet,Pp=l(function(n,o,t){K(this,Un,Qf).call(this,Rp(n,"deadline budget"),o);try{return t()}finally{K(this,Un,Zf).call(this)}},"#runWithDeadlineIfAbsent"),Qf=l(function(n,o){var t;if(R(this,Hn)===void 0){F(this,Hn,{endMs:this.now()+n,timedOut:!1,nesting:1,recordTimeout:o});return}(t=R(this,Hn)).recordTimeout||(t.recordTimeout=o),R(this,Hn).nesting=Math.min(Number.MAX_SAFE_INTEGER,R(this,Hn).nesting+1)},"#enterDeadline"),Zf=l(function(){let n=R(this,Hn);n!==void 0&&(n.nesting<=1?(R(this,ti)||F(this,ti,n.timedOut&&n.recordTimeout),F(this,Hn,void 0)):n.nesting-=1)},"#exitDeadline"),Jf=l(function(n,o){let t;return this.withDeadlineIfAbsent(n,()=>{if(this.checkpoint())return;let r=o();this.checkpoint()||(t=r)}),t},"#runWithStandaloneSubdeadline"),Pc=l(function(n){let o=this.now(),t=R(this,Hn),r=t===void 0||t.timedOut||o>=t.endMs;return n.recordTimeout||(n.recordTimeout=t?.recordTimeout??!1),o>=n.endMs&&(n.timedOut=!0),F(this,Hn,n),r},"#restoreOuterDeadline"),ey=l(function(n,o,t){if(this.checkpoint())return;let r={...n};if(n.endMs=Math.min(n.endMs,this.now()+o),this.checkpoint()){K(this,Un,Pc).call(this,r);return}let a=!1;try{let i=t(),s=K(this,Un,Pc).call(this,r);return a=!0,s?void 0:i}finally{a||K(this,Un,Pc).call(this,r)}},"#runWithNestedSubdeadline"),l(Tp,"SearchSession");var Tc=Tp;function ny(e,n,o){if(n.lifetime!=="engine")throw new TypeError("execution context requires an engine cache scope");return Object.freeze({session:e,caches:Object.freeze({session:e.caches,engine:n}),random:o})}l(ny,"createAutomoveExecutionContext");var cR=Object.freeze({nextUint32(){let e=new Uint32Array(1);return globalThis.crypto.getRandomValues(e),e[0]??0}}),ri,gs,ai,ea,wp=class wp{constructor(n={}){H(this,ri);H(this,gs);H(this,ai,new Jr("engine"));H(this,ea,!1);F(this,ri,n.clock),F(this,gs,n.randomSource??cR)}run(n){R(this,ea)&&(R(this,ai).clear(),F(this,ea,!1));let o=new Tc(R(this,ri)===void 0?{}:{clock:R(this,ri)}),t=ny(o,R(this,ai),R(this,gs));try{return n(t)}finally{F(this,ea,o.takePreviousTimeout()),t.caches.session.clear()}}clearCaches(){F(this,ea,!1),R(this,ai).clear()}};ri=new WeakMap,gs=new WeakMap,ai=new WeakMap,ea=new WeakMap,l(wp,"AutomoveEngine");var vc=wp;var gc=Math.trunc(5.5),ii=10;function mn(e,n){return{i:e,j:n}}l(mn,"location");function Ie(e,n){return e.i===n.i&&e.j===n.j}l(Ie,"locationEquals");function ut(e){return Number.isInteger(e.i)&&Number.isInteger(e.j)&&e.i>=0&&e.i<11&&e.j>=0&&e.j<11}l(ut,"isValidLocation");function na(e){if(!ut(e))throw new RangeError(`board location must use integer coordinates from 0 to ${ii}`)}l(na,"assertValidLocation");function ne(e){return na(e),e.i*11+e.j}l(ne,"locationIndex");function Uo(e){if(!Number.isInteger(e)||e<0||e>=121)throw new RangeError("board location index must be an integer from 0 to 120");return mn(Math.trunc(e/11),e%11)}l(Uo,"fromLocationIndex");function oa(e,n){return mn(Math.trunc((e.i+n.i)/2),Math.trunc((e.j+n.j)/2))}l(oa,"locationBetween");function se(e,n){return Math.max(Math.abs(n.i-e.i),Math.abs(n.j-e.j))}l(se,"locationDistance");function oy(e,n){let o=[];for(let t=e.i-n;t<=e.i+n;t+=1)for(let r=e.j-n;r<=e.j+n;r+=1){let a=mn(t,r);ut(a)&&!Ie(a,e)&&o.push(a)}return o}l(oy,"nearbyLocationsFor");function ty(e,n){let o=[];for(let[t,r]of n){let a=mn(e.i+t,e.j+r);ut(a)&&o.push(a)}return o}l(ty,"directionalReachabilityFor");function lR(e){let n=[];for(let o=-2;o<=2;o+=1)for(let t=-2;t<=2;t+=1){if(Math.max(Math.abs(o),Math.abs(t))!==2)continue;let r=mn(e.i+o,e.j+t);ut(r)&&n.push(r)}return n}l(lR,"spiritReachabilityFor");function As(e){return Object.freeze(Array.from({length:121},(n,o)=>Object.freeze(e(Uo(o)).map(t=>Object.freeze(t)))))}l(As,"buildCache");var pR=As(e=>oy(e,1)),dR=As(e=>oy(e,3)),mR=As(e=>ty(e,[[-2,-2],[2,2],[-2,2],[2,-2]])),fR=As(e=>ty(e,[[-2,0],[2,0],[0,2],[0,-2]])),yR=As(lR);function Es(e,n){return ut(n)?e[ne(n)]??[]:[]}l(Es,"cachedLocations");function ge(e){return Es(pR,e)}l(ge,"nearbyLocations");function hr(e){return Es(dR,e)}l(hr,"bombReachableLocations");function ct(e){return Es(mR,e)}l(ct,"mysticReachableLocations");function lt(e){return Es(fR,e)}l(lt,"demonReachableLocations");function pt(e){return Es(yR,e)}l(pt,"spiritReachableLocations");var ry=Object.freeze(Array.from({length:121},(e,n)=>Object.freeze(Uo(n))));function Ac(e){if(!/^(?:0|[1-9]\d*)$/u.test(e))return;let n=Number(e);return Number.isSafeInteger(n)?n:void 0}l(Ac,"parseNonnegativeInteger");function ta(e){for(let n=0;n<e.length;n+=1)if(e.charCodeAt(n)>127)return!1;return!0}l(ta,"isAscii");function ay(e){if(!ta(e)||e.length===0||e.startsWith(" ")||e.endsWith(" ")||e.includes(" "))return;let n=e.split(" ");return n.some(o=>o.length===0)?void 0:n}l(ay,"splitGameFenFields");function De(e){return`${e.i},${e.j}`}l(De,"locationFen");function iy(e){let n=e.split(",");if(n.length!==2)return;let o=n[0],t=n[1];if(o===void 0||t===void 0)return;let r=Ac(o),a=Ac(t);if(r===void 0||a===void 0)return;let i={i:r,j:a};return ut(i)?i:void 0}l(iy,"parseLocationFen");var w=Object.freeze({White:"white",Black:"black"}),fe=Object.freeze({Classic:"Classic",SwappedManaRows:"SwappedManaRows",OffsetArcManaRows:"OffsetArcManaRows",CenterSpokeManaRows:"CenterSpokeManaRows",AlternatingManaRows:"AlternatingManaRows",InnerWedgeManaRows:"InnerWedgeManaRows",OuterWedgeManaRows:"OuterWedgeManaRows",BentCenterManaRows:"BentCenterManaRows",OuterEdgeManaRows:"OuterEdgeManaRows",SplitFlankManaRows:"SplitFlankManaRows",ForwardBridgeManaRows:"ForwardBridgeManaRows",CornerChainManaRows:"CornerChainManaRows"}),A=Object.freeze({Demon:"demon",Drainer:"drainer",Angel:"angel",Spirit:"spirit",Mystic:"mystic"}),q=Object.freeze({Potion:"potion",Bomb:"bomb",BombOrPotion:"bomb-or-potion"}),Ze=Object.freeze({SelectPotion:"select-potion",SelectBomb:"select-bomb"}),vp=Object.freeze({Random:"random",Fast:"fast",Normal:"normal",Pro:"pro"});var Ep=Object.freeze({[w.White]:0,[w.Black]:1});function on(e){return Ep[e]}l(on,"colorId");var dt=Object.freeze({[A.Demon]:0,[A.Drainer]:1,[A.Angel]:2,[A.Spirit]:3,[A.Mystic]:4}),Ro=Object.freeze({MonMove:"mon-move",ManaMove:"mana-move",Action:"action",Potion:"potion"}),Op=Object.freeze({[Ze.SelectPotion]:0,[Ze.SelectBomb]:1}),Re=Object.freeze({MonMove:"mon-move",ManaMove:"mana-move",MysticAction:"mystic-action",DemonAction:"demon-action",DemonAdditionalStep:"demon-additional-step",SpiritTargetCapture:"spirit-target-capture",SpiritTargetMove:"spirit-target-move",SelectConsumable:"select-consumable",BombAttack:"bomb-attack"}),Tt=4,br=Object.freeze({kind:"supermana"});function X(e){return e===w.Black?w.White:w.Black}l(X,"otherColor");function aa(e,n,o){if(!Number.isInteger(o)||o<0||o>2)throw new RangeError("mon cooldown must be an integer from 0 through 2");return Object.freeze({kind:e,color:n,cooldown:o})}l(aa,"createMon");function gp(e,n){return e.kind===n.kind&&e.color===n.color&&e.cooldown===n.cooldown}l(gp,"monEquals");function $(e){return e.cooldown>0}l($,"isMonFainted");function uy(e){return aa(e.kind,e.color,2)}l(uy,"faintMon");function cy(e){return e.cooldown>0?aa(e.kind,e.color,e.cooldown-1):jo(e)}l(cy,"decreaseMonCooldown");function ci(e){return Object.freeze({kind:"regular",color:e})}l(ci,"regularMana");function Je(e,n){return e.kind==="supermana"?n.kind==="supermana":n.kind==="regular"&&e.color===n.color}l(Je,"manaEquals");function Ip(e,n){return e||!n?2:1}l(Ip,"manaScoreForOwnership");function _e(e,n){return Ip(e.kind==="supermana",e.kind==="regular"&&e.color===n)}l(_e,"manaScore");function Xn(e){return Object.freeze({kind:"mon",mon:jo(e)})}l(Xn,"monItem");function wt(e){return Object.freeze({kind:"mana",mana:si(e)})}l(wt,"manaItem");function mt(e,n){return Object.freeze({kind:"mon-with-mana",mon:jo(e),mana:si(n)})}l(mt,"monWithManaItem");function Os(e,n){return Object.freeze({kind:"mon-with-consumable",mon:jo(e),consumable:n})}l(Os,"monWithConsumableItem");function Is(e){return Object.freeze({kind:"consumable",consumable:e})}l(Is,"consumableItem");function jo(e){return Object.isFrozen(e)?e:aa(e.kind,e.color,e.cooldown)}l(jo,"immutableMon");function si(e){return e.kind==="supermana"?br:Object.isFrozen(e)?e:ci(e.color)}l(si,"immutableMana");function ra(e){switch(e.kind){case"mon":return Object.isFrozen(e)&&Object.isFrozen(e.mon)?e:Xn(e.mon);case"mana":return Object.isFrozen(e)&&Object.isFrozen(e.mana)?e:wt(e.mana);case"mon-with-mana":return Object.isFrozen(e)&&Object.isFrozen(e.mon)&&Object.isFrozen(e.mana)?e:mt(e.mon,e.mana);case"mon-with-consumable":return Object.isFrozen(e)&&Object.isFrozen(e.mon)?e:Os(e.mon,e.consumable);case"consumable":return Object.isFrozen(e)?e:Is(e.consumable)}}l(ra,"immutableItem");function We(e){return{i:e.i,j:e.j}}l(We,"copyLocation");function SR(e){switch(e.kind){case"takeback":return{kind:"takeback"};case"location":return{kind:"location",location:We(e.location)};case"modifier":return{kind:"modifier",modifier:e.modifier}}}l(SR,"copyInput");function xs(e){let n=SR(e.input);return e.actorMonItem===void 0?{input:n,kind:e.kind}:{input:n,kind:e.kind,actorMonItem:ra(e.actorMonItem)}}l(xs,"copyNextInput");function li(e){switch(e.kind){case"mon-move":return{kind:"mon-move",item:ra(e.item),from:We(e.from),to:We(e.to)};case"mana-move":return{kind:"mana-move",mana:si(e.mana),from:We(e.from),to:We(e.to)};case"mana-scored":return{kind:"mana-scored",mana:si(e.mana),at:We(e.at)};case"mystic-action":return{kind:"mystic-action",mystic:jo(e.mystic),from:We(e.from),to:We(e.to)};case"demon-action":return{kind:"demon-action",demon:jo(e.demon),from:We(e.from),to:We(e.to)};case"demon-additional-step":return{kind:"demon-additional-step",demon:jo(e.demon),from:We(e.from),to:We(e.to)};case"spirit-target-move":return{kind:"spirit-target-move",item:ra(e.item),from:We(e.from),to:We(e.to),by:We(e.by)};case"pickup-bomb":return{kind:"pickup-bomb",by:jo(e.by),at:We(e.at)};case"pickup-potion":return{kind:"pickup-potion",by:ra(e.by),at:We(e.at)};case"use-potion":return{kind:"use-potion",from:We(e.from),to:We(e.to)};case"pickup-mana":return{kind:"pickup-mana",mana:si(e.mana),by:jo(e.by),at:We(e.at)};case"mon-fainted":return{kind:"mon-fainted",mon:jo(e.mon),from:We(e.from),to:We(e.to)};case"mana-dropped":return{kind:"mana-dropped",mana:si(e.mana),at:We(e.at)};case"supermana-back-to-base":return{kind:"supermana-back-to-base",from:We(e.from),to:We(e.to)};case"bomb-attack":return{kind:"bomb-attack",by:jo(e.by),from:We(e.from),to:We(e.to)};case"mon-awake":return{kind:"mon-awake",mon:jo(e.mon),at:We(e.at)};case"bomb-explosion":return{kind:"bomb-explosion",at:We(e.at)};case"next-turn":return{kind:"next-turn",color:e.color};case"game-over":return{kind:"game-over",winner:e.winner};case"takeback":return{kind:"takeback"}}}l(li,"copyEvent");function xp(e){switch(e.kind){case"invalid-input":return{kind:"invalid-input"};case"locations-to-start-from":return{kind:"locations-to-start-from",locations:e.locations.map(We)};case"next-input-options":return{kind:"next-input-options",nextInputs:e.nextInputs.map(xs)};case"events":return{kind:"events",events:e.events.map(li)}}}l(xp,"copyOutput");function z(e){switch(e.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return e.mon;case"mana":case"consumable":return}}l(z,"itemMon");function zt(e){let n=z(e);return n===void 0||!$(n)}l(zt,"isSpiritTargetAllowed");function no(e){switch(e.kind){case"mana":case"mon-with-mana":return e.mana;case"mon":case"mon-with-consumable":case"consumable":return}}l(no,"itemMana");function ia(e){switch(e.kind){case"mon-with-consumable":case"consumable":return e.consumable;case"mon":case"mana":case"mon-with-mana":return}}l(ia,"itemConsumable");function ly(e,n){switch(e.kind){case"mon":return n.kind==="mon"&&gp(e.mon,n.mon);case"mana":return n.kind==="mana"&&Je(e.mana,n.mana);case"mon-with-mana":return n.kind==="mon-with-mana"&&gp(e.mon,n.mon)&&Je(e.mana,n.mana);case"mon-with-consumable":return n.kind==="mon-with-consumable"&&gp(e.mon,n.mon)&&e.consumable===n.consumable;case"consumable":return n.kind==="consumable"&&e.consumable===n.consumable}}l(ly,"itemEquals");function Ap(e){return`${e.kind}:${e.color}:${e.cooldown}`}l(Ap,"monKey");function sy(e){return e.kind==="supermana"?"s":`r:${e.color}`}l(sy,"manaKey");function Ns(e){switch(e.kind){case"mon":return`m:${Ap(e.mon)}`;case"mana":return`a:${sy(e.mana)}`;case"mon-with-mana":return`mm:${Ap(e.mon)}:${sy(e.mana)}`;case"mon-with-consumable":return`mc:${Ap(e.mon)}:${e.consumable}`;case"consumable":return`c:${e.consumable}`}}l(Ns,"itemKey");function ui(e){switch(e.kind){case"takeback":return"t";case"location":return`l:${e.location.i}:${e.location.j}`;case"modifier":return`m:${e.modifier}`}}l(ui,"inputKey");function An(e){return e.map(ui).join(";")}l(An,"inputChainKey");function Cr(e,n){return ui(e)===ui(n)}l(Cr,"inputEquals");function ye(e,n){let o=e[0],t=n[0];return o!==void 0&&t!==void 0&&Cr(o,t)}l(ye,"inputChainsShareFirstInput");function me(e,n){return e.length===n.length&&e.every((o,t)=>{let r=n[t];return r!==void 0&&Cr(o,r)})}l(me,"inputChainsEqual");function Ds(e){return e===w.White?"w":"b"}l(Ds,"colorFen");function fy(e){switch(e){case"w":return w.White;case"b":return w.Black;default:return}}l(fy,"parseColorFen");function Ko(e){if(!Number.isInteger(e.cooldown)||e.cooldown<0||e.cooldown>2)throw new RangeError("mon cooldown must be an integer from 0 through 2");let n=(()=>{switch(e.kind){case A.Demon:return"e";case A.Drainer:return"d";case A.Angel:return"a";case A.Spirit:return"s";case A.Mystic:return"y"}})();return`${e.color===w.White?n.toUpperCase():n}${e.cooldown}`}l(Ko,"monFen");function hR(e){if(!/^[A-Za-z][0-2]$/u.test(e))return;let n=e[0],o=e[1];if(n===void 0||o===void 0)return;let t=(()=>{switch(n.toLowerCase()){case"e":return A.Demon;case"d":return A.Drainer;case"a":return A.Angel;case"s":return A.Spirit;case"y":return A.Mystic;default:return}})();if(t!==void 0)return aa(t,n===n.toUpperCase()?w.White:w.Black,o.charCodeAt(0)-48)}l(hR,"parseMonFen");function sa(e){return e.kind==="supermana"?"U":e.color===w.White?"M":"m"}l(sa,"manaFen");function py(e){switch(e){case"M":return ci(w.White);case"m":return ci(w.Black);case"U":return br;default:return}}l(py,"parseManaFen");function dy(e){switch(e){case q.Potion:return"P";case q.Bomb:return"B";case q.BombOrPotion:return"Q"}}l(dy,"consumableFen");function my(e){switch(e){case"P":return q.Potion;case"B":return q.Bomb;case"Q":return q.BombOrPotion;default:return}}l(my,"parseConsumableFen");function pi(e){switch(e.kind){case"mon":return`${Ko(e.mon)}x`;case"mana":return`xx${sa(e.mana)}`;case"mon-with-mana":return`${Ko(e.mon)}${sa(e.mana)}`;case"mon-with-consumable":return`${Ko(e.mon)}${dy(e.consumable)}`;case"consumable":return`xx${dy(e.consumable)}`}}l(pi,"itemFen");function yy(e){if(e.length!==3||!ta(e))return;let n=e.slice(0,2),o=e.slice(2);if(n==="xx"){let i=py(o);if(i!==void 0)return wt(i);let s=my(o);return s===void 0?void 0:Is(s)}let t=hR(n);if(t===void 0)return;let r=py(o);if(r!==void 0)return mt(t,r);let a=my(o);return a!==void 0?Os(t,a):o==="x"?Xn(t):void 0}l(yy,"parseItemFen");var $t=fe.Classic,xe=5,le=5,Mr=1,Fn=1,ua=Object.freeze([fe.Classic,fe.SwappedManaRows,fe.OffsetArcManaRows,fe.CenterSpokeManaRows,fe.AlternatingManaRows,fe.InnerWedgeManaRows,fe.OuterWedgeManaRows,fe.BentCenterManaRows,fe.OuterEdgeManaRows,fe.SplitFlankManaRows,fe.ForwardBridgeManaRows,fe.CornerChainManaRows]),by=Object.freeze({[fe.Classic]:0,[fe.SwappedManaRows]:1,[fe.OffsetArcManaRows]:2,[fe.CenterSpokeManaRows]:3,[fe.AlternatingManaRows]:4,[fe.InnerWedgeManaRows]:5,[fe.OuterWedgeManaRows]:6,[fe.BentCenterManaRows]:7,[fe.OuterEdgeManaRows]:8,[fe.SplitFlankManaRows]:9,[fe.ForwardBridgeManaRows]:10,[fe.CornerChainManaRows]:11}),bR=new Map(ua.map(e=>[by[e],e]));function _s(e){return by[e]}l(_s,"gameVariantId");function tn(...e){return Object.freeze(e.map(([n,o])=>Object.freeze(mn(n,o))))}l(tn,"locations");function qo(e,n){return Object.freeze({[w.Black]:e,[w.White]:n})}l(qo,"manaLayout");var CR=Object.freeze({[fe.Classic]:qo(tn([3,4],[3,6],[4,3],[4,5],[4,7]),tn([7,4],[7,6],[6,3],[6,5],[6,7])),[fe.SwappedManaRows]:qo(tn([3,3],[3,5],[3,7],[4,4],[4,6]),tn([7,3],[7,5],[7,7],[6,4],[6,6])),[fe.OffsetArcManaRows]:qo(tn([3,4],[3,6],[4,2],[4,5],[4,8]),tn([6,2],[6,5],[6,8],[7,4],[7,6])),[fe.CenterSpokeManaRows]:qo(tn([3,5],[4,2],[4,4],[4,6],[4,8]),tn([6,2],[6,4],[6,6],[6,8],[7,5])),[fe.AlternatingManaRows]:qo(tn([4,1],[4,3],[4,5],[4,7],[4,9]),tn([6,1],[6,3],[6,5],[6,7],[6,9])),[fe.InnerWedgeManaRows]:qo(tn([3,4],[3,6],[4,4],[4,5],[4,6]),tn([6,4],[6,5],[6,6],[7,4],[7,6])),[fe.OuterWedgeManaRows]:qo(tn([3,4],[3,5],[3,6],[4,3],[4,7]),tn([6,3],[6,7],[7,4],[7,5],[7,6])),[fe.BentCenterManaRows]:qo(tn([3,5],[4,4],[4,5],[4,6],[5,3]),tn([5,7],[6,4],[6,5],[6,6],[7,5])),[fe.OuterEdgeManaRows]:qo(tn([4,0],[4,1],[4,9],[4,10],[5,1]),tn([5,9],[6,0],[6,1],[6,9],[6,10])),[fe.SplitFlankManaRows]:qo(tn([3,4],[3,6],[4,2],[4,3],[5,2]),tn([5,8],[6,7],[6,8],[7,4],[7,6])),[fe.ForwardBridgeManaRows]:qo(tn([3,4],[3,6],[4,3],[4,5],[5,4]),tn([5,6],[6,5],[6,7],[7,4],[7,6])),[fe.CornerChainManaRows]:qo(tn([3,5],[3,6],[4,6],[4,7],[5,7]),tn([5,3],[6,3],[6,4],[7,4],[7,5]))}),Cy=Object.freeze({kind:"regular"}),Sy=Object.freeze({kind:"consumable-base"}),MR=Object.freeze({kind:"supermana-base"}),Fs=Object.freeze(mn(5,5)),ca=tn([0,3],[0,4],[0,5],[0,6],[0,7],[10,3],[10,4],[10,5],[10,6],[10,7]);function kR(e){return Number.isSafeInteger(e)?bR.get(e):void 0}l(kR,"gameVariantFromId");function My(e){if(/^(?:0|[1-9]\d*)$/u.test(e))return kR(Number(e))}l(My,"parseGameVariant");function hy(e,n){return CR[e][n]}l(hy,"manaBaseLocations");function RR(e){let n=Array.from({length:121}).fill(Cy),o=l((t,r)=>{n[ne(t)]=Object.freeze(r)},"put");o(mn(0,0),{kind:"mana-pool",color:w.Black}),o(mn(0,10),{kind:"mana-pool",color:w.Black}),o(mn(10,0),{kind:"mana-pool",color:w.White}),o(mn(10,10),{kind:"mana-pool",color:w.White}),o(mn(0,3),{kind:"mon-base",monKind:A.Mystic,color:w.Black}),o(mn(0,4),{kind:"mon-base",monKind:A.Spirit,color:w.Black}),o(mn(0,5),{kind:"mon-base",monKind:A.Drainer,color:w.Black}),o(mn(0,6),{kind:"mon-base",monKind:A.Angel,color:w.Black}),o(mn(0,7),{kind:"mon-base",monKind:A.Demon,color:w.Black}),o(mn(10,3),{kind:"mon-base",monKind:A.Demon,color:w.White}),o(mn(10,4),{kind:"mon-base",monKind:A.Angel,color:w.White}),o(mn(10,5),{kind:"mon-base",monKind:A.Drainer,color:w.White}),o(mn(10,6),{kind:"mon-base",monKind:A.Spirit,color:w.White}),o(mn(10,7),{kind:"mon-base",monKind:A.Mystic,color:w.White});for(let t of hy(e,w.Black))o(t,{kind:"mana-base",color:w.Black});for(let t of hy(e,w.White))o(t,{kind:"mana-base",color:w.White});return o(mn(5,0),Sy),o(mn(5,10),Sy),o(Fs,MR),Object.freeze(n)}l(RR,"buildSquares");var PR=new Map(ua.map(e=>[e,RR(e)]));function Ec(e){let n=PR.get(e);if(n===void 0)throw new TypeError(`unsupported game variant: ${e}`);return n}l(Ec,"squaresForVariant");function Np(e,n){return na(e),Ec(n)[ne(e)]??Cy}l(Np,"squareAtForVariant");function TR(e){return Np(e,$t)}l(TR,"squareAt");function wR(e){switch(e.kind){case"mon-base":return Xn(aa(e.monKind,e.color,0));case"mana-base":return wt(ci(e.color));case"supermana-base":return wt(br);case"consumable-base":return Is(q.BombOrPotion);case"regular":case"mana-pool":return}}l(wR,"initialItemForSquare");function vR(e){return Object.freeze(Ec(e).map(wR))}l(vR,"buildInitialItems");var gR=new Map(ua.map(e=>[e,vR(e)]));function ky(e){let n=gR.get(e);if(n===void 0)throw new TypeError(`unsupported game variant: ${e}`);return[...n]}l(ky,"initialItemsForVariant");function Ry(e,n){for(let o of ca){let t=TR(o);if(t.kind==="mon-base"&&t.monKind===e&&t.color===n)return o}throw new Error("Expected at least one base for the given mon")}l(Ry,"monBase");var Dp=class Dp{constructor(n=$t,o,t,r=!1){ee(this,"variant",n);ee(this,"storage");if(t!==void 0){this.storage=t;return}let a=o??ky(n);if(a.length!==121)throw new RangeError(`board requires exactly ${121} item slots`);this.storage={itemSlots:o===void 0||r?[...a]:a.map(i=>i===void 0?void 0:ra(i)),occupiedEntries:void 0}}get items(){return[...this.storage.itemSlots]}static fromItems(n,o){return new di(o,n)}fork(){let n=new di(this.variant,this.storage.itemSlots,void 0,!0);return n.storage.occupiedEntries=this.getOccupiedEntries(),n}get(n){if(ut(n))return this.storage.itemSlots[ne(n)]}squareAt(n){return na(n),Np(n,this.variant)}allMonsBases(){return ca}supermanaBase(){return Fs}allMonsLocations(n){let o=[];for(let t=0;t<121;t+=1){let r=this.storage.itemSlots[t];r!==void 0&&z(r)?.color===n&&o.push(Uo(t))}return o}allFreeRegularManaLocations(n){let o=[];for(let t=0;t<121;t+=1){let r=this.storage.itemSlots[t];r?.kind==="mana"&&r.mana.kind==="regular"&&r.mana.color===n&&o.push(Uo(t))}return o}base(n){return Ry(n.kind,n.color)}faintedMonsLocations(n){let o=[];for(let t=0;t<121;t+=1){let r=this.storage.itemSlots[t];r?.kind==="mon"&&r.mon.color===n&&$(r.mon)&&o.push(Uo(t))}return o}findMana(n){for(let o=0;o<121;o+=1){let t=this.storage.itemSlots[o];if(t?.kind==="mana"&&t.mana.kind==="regular"&&t.mana.color===n)return Uo(o)}}findAwakeAngel(n){for(let o=0;o<121;o+=1){let t=this.storage.itemSlots[o],r=t===void 0?void 0:z(t);if(r?.color===n&&r.kind===A.Angel&&!$(r))return Uo(o)}}itemsEqual(n){for(let o=0;o<121;o+=1){let t=this.storage.itemSlots[o],r=n.storage.itemSlots[o];if(t===void 0||r===void 0){if(t!==r)return!1}else if(!ly(t,r))return!1}return!0}getOccupiedEntries(){if(this.storage.occupiedEntries!==void 0)return this.storage.occupiedEntries;let n=[];for(let o=0;o<121;o+=1){let t=this.storage.itemSlots[o];if(t!==void 0){let r=ry[o];r!==void 0&&n.push([r,t])}}return this.storage.occupiedEntries=n,n}entries(){return this.getOccupiedEntries().values()}};l(Dp,"Board");var kr=Dp,Ws,_p=class _p extends kr{constructor(){super(...arguments);H(this,Ws)}delete(o){na(o),this.storage.itemSlots[ne(o)]=void 0,this.storage.occupiedEntries=void 0}set(o,t){na(o),this.storage.itemSlots[ne(o)]=ra(t),this.storage.occupiedEntries=void 0}readonlyView(){return R(this,Ws)??F(this,Ws,new kr(this.variant,void 0,this.storage)),R(this,Ws)}};Ws=new WeakMap,l(_p,"MutableBoard");var di=_p;function Py(e,n){return e.variant!==n.variant?!1:e.itemsEqual(n)}l(Py,"boardEquals");var Ty=xe+1;function vy(e){let n=[];for(let o=0;o<11;o+=1){let t="",r=0;for(let a=0;a<11;a+=1){let i=e.get({i:o,j:a});if(i===void 0){r+=1;continue}r>0&&(t+=wy(r),r=0),t+=pi(i)}r>0&&(t+=wy(r)),n.push(t)}return n.join("/")}l(vy,"boardFen");function gy(e,n){if(!ta(e))return;let o=e.split("/");if(o.length!==11)return;let t=Array.from({length:121},()=>{});for(let[r,a]of o.entries()){let i=0,s=0,u=!1;for(;i<a.length;){if(a[i]==="n"){if(u)return;let m=a.slice(i+1,i+3);if(!/^\d{2}$/u.test(m))return;let d=Number(m);if(d<1||s+d>11)return;s+=d,i+=3,u=!0;continue}let c=a.slice(i,i+3);if(c.length!==3||s>=11)return;let p=yy(c);if(p===void 0)return;t[r*11+s]=p,s+=1,i+=3,u=!1}if(s!==11)return}return kr.fromItems(t,n)}l(gy,"parseBoardFen");function Fp(e){let n=[e.whiteScore,e.blackScore,Ds(e.activeColor),e.actionsUsedCount,e.manaMovesCount,e.monsMovesCount,e.whitePotionsCount,e.blackPotionsCount,e.turnNumber,vy(e.board)].map(String),o=e.board.variant;return o!==$t&&n.push(String(_s(o))),n.join(" ")}l(Fp,"gameFen");function Wp(e){let n=ay(e);if(n===void 0||n.length!==10&&n.length!==11)return;let o=n.length===10?$t:My(n[10]??"");if(o===void 0||n.length===11&&o===$t)return;let t=n[9],r=n[2];if(t===void 0||r===void 0)return;let a=gy(t,o),i=fy(r);if(a===void 0||i===void 0)return;let s=[n[0],n[1],n[3],n[4],n[5],n[6],n[7],n[8]].map(C=>Ac(C??""));if(s.some(C=>C===void 0))return;let[u,c,p,m,d,f,y,S]=s;if(!(u===void 0||c===void 0||p===void 0||m===void 0||d===void 0||f===void 0||y===void 0||S===void 0||u>Ty||c>Ty||p>Fn||m>Mr||d>le||S<1))return{board:a,whiteScore:u,blackScore:c,activeColor:i,actionsUsedCount:p,manaMovesCount:m,monsMovesCount:d,whitePotionsCount:f,blackPotionsCount:y,turnNumber:S}}l(Wp,"parseGameFen");function wy(e){return`n${String(e).padStart(2,"0")}`}l(wy,"emptyRunFen");function Ay(e){switch(e){case Ze.SelectPotion:return"p";case Ze.SelectBomb:return"b"}}l(Ay,"modifierFen");function Ey(e){switch(e){case"p":return Ze.SelectPotion;case"b":return Ze.SelectBomb;default:return}}l(Ey,"parseModifierFen");function Oy(e){switch(e.kind){case"takeback":return"z";case"location":return`l${De(e.location)}`;case"modifier":return`m${Ay(e.modifier)}`}}l(Oy,"inputFen");function Iy(e){switch(e[0]){case"l":{let n=iy(e.slice(1));return n===void 0?void 0:{kind:"location",location:n}}case"m":{let n=Ey(e.slice(1));return n===void 0?void 0:{kind:"modifier",modifier:n}}case"z":return e==="z"?{kind:"takeback"}:void 0;default:return}}l(Iy,"parseInputFen");function Rr(e){return e.map(Oy).join(";")}l(Rr,"inputArrayFen");function Pr(e){if(!ta(e))return;if(e==="")return[];let n=[];for(let o of e.split(";")){if(n.length===Tt)return;let t=Iy(o);if(t===void 0)return;n.push(t)}return n}l(Pr,"parseInputArrayFen");function xy(e){switch(e.kind){case"mon-move":return`mm ${pi(e.item)} ${De(e.from)} ${De(e.to)}`;case"mana-move":return`mma ${sa(e.mana)} ${De(e.from)} ${De(e.to)}`;case"mana-scored":return`ms ${sa(e.mana)} ${De(e.at)}`;case"mystic-action":return`ma ${Ko(e.mystic)} ${De(e.from)} ${De(e.to)}`;case"demon-action":return`da ${Ko(e.demon)} ${De(e.from)} ${De(e.to)}`;case"demon-additional-step":return`das ${Ko(e.demon)} ${De(e.from)} ${De(e.to)}`;case"spirit-target-move":return`stm ${pi(e.item)} ${De(e.from)} ${De(e.to)} ${De(e.by)}`;case"pickup-bomb":return`pb ${Ko(e.by)} ${De(e.at)}`;case"pickup-potion":return`pp ${pi(e.by)} ${De(e.at)}`;case"use-potion":return`up ${De(e.from)} ${De(e.to)}`;case"pickup-mana":return`pm ${sa(e.mana)} ${Ko(e.by)} ${De(e.at)}`;case"mon-fainted":return`mf ${Ko(e.mon)} ${De(e.from)} ${De(e.to)}`;case"mana-dropped":return`md ${sa(e.mana)} ${De(e.at)}`;case"supermana-back-to-base":return`sb ${De(e.from)} ${De(e.to)}`;case"bomb-attack":return`ba ${Ko(e.by)} ${De(e.from)} ${De(e.to)}`;case"mon-awake":return`maw ${Ko(e.mon)} ${De(e.at)}`;case"bomb-explosion":return`be ${De(e.at)}`;case"next-turn":return`nt ${Ds(e.color)}`;case"game-over":return`go ${Ds(e.winner)}`;case"takeback":return"z"}}l(xy,"eventFen");function Bp(e){return e.map(xy).join(" ")}l(Bp,"eventArrayFen");function Lp(e,n){return e>=xe?w.White:n>=xe?w.Black:void 0}l(Lp,"winnerForScores");function Oc(e){return Lp(e.whiteScore,e.blackScore)}l(Oc,"winnerForState");function Ke(e,n){return n===w.White?e.whiteScore:e.blackScore}l(Ke,"scoreForColor");function mi(e){return e.turnNumber===1}l(mi,"isFirstTurnState");function Ic(e){return e.activeColor===w.White?e.whitePotionsCount:e.blackPotionsCount}l(Ic,"currentPlayerPotions");function la(e){return e<le}l(la,"canMoveMonForCounts");function Ny(e){return la(e.monsMovesCount)}l(Ny,"canPlayerMoveMon");function xc(e,n){return!e&&n<Mr}l(xc,"canMoveManaForCounts");function Dy(e){return xc(mi(e),e.manaMovesCount)}l(Dy,"canPlayerMoveMana");function Nc(e,n,o){return!e&&(o>0||n<Fn)}l(Nc,"canUseActionForCounts");function _y(e){return Nc(mi(e),e.actionsUsedCount,Ic(e))}l(_y,"canPlayerUseAction");function Gp(e,n,o,t,r,a,i){if(!xc(e,o))return!1;let s=la(n);return!s&&!Nc(e,t,r)||!a||i&&!s&&t>=Fn&&r>0}l(Gp,"shouldSuggestRegularManaStartsFromScalars");function Fy(e,n,o){return Gp(mi(e),e.monsMovesCount,e.manaMovesCount,e.actionsUsedCount,Ic(e),n,o)}l(Fy,"shouldSuggestRegularManaStarts");function Vp(e,n,o,t){return e?!la(n):xc(e,o)?!la(n)&&!t:!0}l(Vp,"shouldAdvanceTurnForCounts");function Wy(e){let n=mi(e),t=!(!n&&xc(n,e.manaMovesCount)&&!la(e.monsMovesCount))||e.board.findMana(e.activeColor)!==void 0;return Vp(n,e.monsMovesCount,e.manaMovesCount,t)}l(Wy,"shouldAdvanceTurn");function fi(e,n=1){let o=e+n;return Number.isSafeInteger(o)?o:void 0}l(fi,"incrementSafe");function AR(e,n){if(e.actionsUsedCount<Fn)return e.actionsUsedCount+=1,!0;if(n===w.White){if(e.whitePotionsCount<=0)return!1;e.whitePotionsCount-=1}else{if(e.blackPotionsCount<=0)return!1;e.blackPotionsCount-=1}return!0}l(AR,"consumeActionForPreflight");function Up(e,n){let o={actionsUsedCount:e.actionsUsedCount,manaMovesCount:e.manaMovesCount,monsMovesCount:e.monsMovesCount,whitePotionsCount:e.whitePotionsCount,blackPotionsCount:e.blackPotionsCount,whiteScore:e.whiteScore,blackScore:e.blackScore};for(let r of n)switch(r.kind){case"mon-move":{let a=fi(o.monsMovesCount);if(a===void 0)return!1;o.monsMovesCount=a;break}case"mana-move":{let a=fi(o.manaMovesCount);if(a===void 0)return!1;o.manaMovesCount=a;break}case"mana-scored":{let a=_e(r.mana,e.activeColor);if(e.activeColor===w.White){let i=fi(o.whiteScore,a);if(i===void 0)return!1;o.whiteScore=i}else{let i=fi(o.blackScore,a);if(i===void 0)return!1;o.blackScore=i}break}case"mystic-action":case"demon-action":case"spirit-target-move":if(!AR(o,e.activeColor))return!1;break;case"pickup-potion":{let a=z(r.by);if(a===void 0)break;if(a.color===w.White){let i=fi(o.whitePotionsCount);if(i===void 0)return!1;o.whitePotionsCount=i}else{let i=fi(o.blackPotionsCount);if(i===void 0)return!1;o.blackPotionsCount=i}break}case"demon-additional-step":case"pickup-bomb":case"use-potion":case"pickup-mana":case"mon-fainted":case"mana-dropped":case"supermana-back-to-base":case"bomb-attack":case"mon-awake":case"bomb-explosion":case"next-turn":case"game-over":case"takeback":break}if(e.turnNumber<Number.MAX_SAFE_INTEGER)return!0;let t={...e,board:e.board.fork(),turnNumber:Number.MAX_SAFE_INTEGER-1};return!jp(t,n).turnAdvanced}l(Up,"canApplyRulesEvents");function Hp(e,n,o,t){if(e.actionsUsedCount<Fn){e.actionsUsedCount+=1;return}e.activeColor===w.White?e.whitePotionsCount-=1:e.blackPotionsCount-=1,t.push({kind:"use-potion",from:n,to:o})}l(Hp,"consumeAction");function ER(e,n,o,t){switch(n.kind){case"mon-move":e.monsMovesCount+=1,e.board.delete(n.from),e.board.set(n.to,n.item);break;case"mana-move":e.manaMovesCount+=1,e.board.delete(n.from),e.board.set(n.to,wt(n.mana));break;case"mana-scored":{let r=_e(n.mana,e.activeColor);e.activeColor===w.White?e.whiteScore+=r:e.blackScore+=r;let a=e.board.get(n.at);if(a!==void 0){let i=z(a);i===void 0?e.board.delete(n.at):e.board.set(n.at,Xn(i))}break}case"mystic-action":Hp(e,n.from,n.to,t),e.board.delete(n.to);break;case"demon-action":{e.board.delete(n.from);let r=o.find(i=>i.kind==="demon-additional-step")?.to;r===void 0?e.board.set(n.to,Xn(n.demon)):e.board.delete(n.to);let a=r??n.to;Hp(e,a,a,t);break}case"demon-additional-step":e.board.set(n.to,Xn(n.demon));break;case"spirit-target-move":Hp(e,n.by,n.to,t),e.board.delete(n.from),e.board.set(n.to,n.item);break;case"pickup-bomb":e.board.set(n.at,Os(n.by,q.Bomb));break;case"pickup-potion":{let r=z(n.by);if(r===void 0)break;r.color===w.White?e.whitePotionsCount+=1:e.blackPotionsCount+=1,e.board.set(n.at,n.by);break}case"pickup-mana":e.board.set(n.at,mt(n.by,n.mana));break;case"mon-fainted":e.board.set(n.to,Xn(uy(n.mon)));break;case"mana-dropped":e.board.set(n.at,wt(n.mana));break;case"supermana-back-to-base":{let r=e.board.get(n.to);e.board.set(n.to,r?.kind==="mon"?mt(r.mon,br):wt(br));break}case"bomb-attack":e.board.delete(n.to),e.board.set(n.from,Xn(n.by));break;case"bomb-explosion":e.board.delete(n.at);break;case"mon-awake":case"game-over":case"next-turn":case"takeback":case"use-potion":break}}l(ER,"applyEvent");function OR(e,n){e.activeColor=X(e.activeColor),e.turnNumber+=1,e.actionsUsedCount=0,e.manaMovesCount=0,e.monsMovesCount=0,n.push({kind:"next-turn",color:e.activeColor});for(let o of e.board.faintedMonsLocations(e.activeColor)){let t=e.board.get(o),r=t===void 0?void 0:z(t);if(r===void 0)continue;let a=cy(r);$(a)||n.push({kind:"mon-awake",mon:a,at:o}),e.board.set(o,Xn(a))}}l(OR,"advanceTurn");function jp(e,n){let o=[];for(let a of n)ER(e,a,n,o);let t=Oc(e),r=!1;return t!==void 0?o.push({kind:"game-over",winner:t}):Wy(e)&&(OR(e,o),r=!0),{events:[...n,...o],turnAdvanced:r,winner:t}}l(jp,"applyRulesEvents");var Bs=Object.freeze({startSuggestions:8,completionViability:16384,secondInputOptions:4096,secondStage:8192,thirdStage:8192});function Dc(e){return e===void 0?void 0:[e[0].map(li),e[1].map(xs)]}l(Dc,"copyStageResult");function Ls(e,n,o,t){e.size>=t&&!e.has(n)&&e.clear(),e.set(n,o)}l(Ls,"setBounded");var yi,Si,hi,pa,da,Kp=class Kp{constructor(){H(this,yi,new Map);H(this,Si,new Map);H(this,hi,new Map);H(this,pa,new Map);H(this,da,new Map)}invalidate(){R(this,yi).clear(),R(this,Si).clear(),R(this,hi).clear(),R(this,pa).clear(),R(this,da).clear()}getStartSuggestion(n){let o=R(this,yi).get(n);return o===void 0?void 0:xp(o)}setStartSuggestion(n,o){Ls(R(this,yi),n,xp(o),Bs.startSuggestions)}getCompletionViability(n){return R(this,Si).get(n)}setCompletionViability(n,o){Ls(R(this,Si),n,o,Bs.completionViability)}getSecondInputOptions(n){let o=R(this,hi).get(n);return o===void 0?void 0:o.map(xs)}setSecondInputOptions(n,o){Ls(R(this,hi),n,o.map(xs),Bs.secondInputOptions)}hasSecondStage(n){return R(this,pa).has(n)}getSecondStage(n){return Dc(R(this,pa).get(n))}setSecondStage(n,o){Ls(R(this,pa),n,Dc(o),Bs.secondStage)}hasThirdStage(n){return R(this,da).has(n)}getThirdStage(n){return Dc(R(this,da).get(n))}setThirdStage(n,o){Ls(R(this,da),n,Dc(o),Bs.thirdStage)}};yi=new WeakMap,Si=new WeakMap,hi=new WeakMap,pa=new WeakMap,da=new WeakMap,l(Kp,"RulesQueryCache");var _c=Kp;function Gs(e){return e.map(n=>({fen:n.fen,color:n.color,events:n.events.map(li)}))}l(Gs,"copyTrackingEntries");var Tn,jn,ft,vt,gt,Vs=class Vs{constructor(n=!1){H(this,Tn,[]);H(this,jn,[]);H(this,ft,!0);H(this,vt);H(this,gt,!0);F(this,vt,n)}get takebackFens(){return[...R(this,Tn)]}get trackingEntries(){return Gs(R(this,jn))}get movesVerified(){return R(this,ft)}get verboseTrackingEnabled(){return R(this,vt)}copy(){let n=new Vs(R(this,vt));return F(n,Tn,[...R(this,Tn)]),F(n,jn,Gs(R(this,jn))),F(n,ft,R(this,ft)),F(n,gt,R(this,gt)),n}fork(){let n=new Vs(!1);return F(n,ft,R(this,ft)),F(n,gt,!1),n}resetForLoadedFen(){F(this,Tn,[]),F(this,jn,[]),F(this,ft,!1)}resetForBoardReplacement(){F(this,Tn,[]),F(this,jn,[]),F(this,ft,!1)}replace(n){n.takebackFens!==void 0&&F(this,Tn,[...n.takebackFens]),n.trackingEntries!==void 0&&F(this,jn,Gs(n.trackingEntries)),n.movesVerified!==void 0&&F(this,ft,n.movesVerified),n.verboseTrackingEnabled!==void 0&&(F(this,vt,n.verboseTrackingEnabled),n.verboseTrackingEnabled||F(this,jn,[]))}setTakebackTracking(n){F(this,gt,n),n||F(this,Tn,[])}setVerboseTracking(n){F(this,vt,n),n||F(this,jn,[])}clearTracking(){F(this,Tn,[]),F(this,jn,[])}canTakeback(n,o){return R(this,gt)&&R(this,Tn).length>1&&n===o}prepareTakeback(n,o){if(!this.canTakeback(n,o))return;let t=R(this,Tn)[R(this,Tn).length-2];if(t!==void 0)return{previousFen:t,takebackFens:R(this,Tn).slice(0,-1),trackingEntries:Gs(R(this,jn).slice(0,-1))}}commitTakeback(n){F(this,Tn,[...n.takebackFens]),F(this,jn,Gs(n.trackingEntries))}beginEventApplication(n,o){if(!R(this,gt)||R(this,Tn).length!==0)return;let t=n();R(this,Tn).push(t),R(this,vt)&&R(this,jn).length===0&&R(this,jn).push({fen:t,color:o,events:[]})}completeEventApplication(n){let o,t=l(()=>o??(o=n.snapshotFen()),"snapshotFen");R(this,gt)&&(n.winner!==void 0?F(this,Tn,[]):n.turnAdvanced?F(this,Tn,[t()]):R(this,Tn).push(t())),R(this,vt)&&R(this,jn).push({fen:t(),color:n.color,events:n.events.map(li)})}};Tn=new WeakMap,jn=new WeakMap,ft=new WeakMap,vt=new WeakMap,gt=new WeakMap,l(Vs,"GameHistory");var Fc=Vs;var IR=Object.freeze({includeManaStartsWithPotionAction:!1}),Yn=Object.freeze({includeManaStartsWithPotionAction:!0});function Po(e,n,o){let t={input:e,kind:n};return o===void 0?t:{...t,actorMonItem:o}}l(Po,"nextInput");function Hs(e){switch(e.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":case"mon-base":return!1}}l(Hs,"regularSquareForMovement");var qe,fn,Kn,Se,bi,At,Us,By,Ci,Ly,Wc,Bc,Gy,Vy,Hy,Uy,jy,Ky,Lc,qp,zo=class zo{constructor(n=!1,o=$t,t){H(this,Se);H(this,qe);H(this,fn);H(this,Kn);let r=t===void 0?new di(o):t.fork();F(this,qe,{board:r,whiteScore:0,blackScore:0,activeColor:w.White,actionsUsedCount:0,manaMovesCount:0,monsMovesCount:0,whitePotionsCount:0,blackPotionsCount:0,turnNumber:1}),F(this,fn,new Fc(n)),F(this,Kn,new _c)}get board(){return R(this,qe).board.readonlyView()}get whiteScore(){return R(this,qe).whiteScore}get blackScore(){return R(this,qe).blackScore}get activeColor(){return R(this,qe).activeColor}get actionsUsedCount(){return R(this,qe).actionsUsedCount}get manaMovesCount(){return R(this,qe).manaMovesCount}get monsMovesCount(){return R(this,qe).monsMovesCount}get whitePotionsCount(){return R(this,qe).whitePotionsCount}get blackPotionsCount(){return R(this,qe).blackPotionsCount}get turnNumber(){return R(this,qe).turnNumber}get takebackFens(){return R(this,fn).takebackFens}get isMovesVerified(){return R(this,fn).movesVerified}get withVerboseTracking(){return R(this,fn).verboseTrackingEnabled}get verboseTrackingEntities(){return R(this,fn).trackingEntries}replaceHistory(n){R(this,fn).replace(n)}static newSimulationState(n){var t,r;let o=K(t=zo,At,Us).call(t,!1,n.board);return K(r=o,Se,bi).call(r,n),R(o,fn).setTakebackTracking(!1),o}static fromFen(n,o=!1){var a,i;let t=Wp(n);if(t===void 0)return;let r=K(a=zo,At,Us).call(a,o,t.board);return K(i=r,Se,bi).call(i,t),R(r,fn).resetForLoadedFen(),r}fen(){return Fp(this)}copy(){var o,t;let n=K(o=zo,At,Us).call(o,this.withVerboseTracking,this.board);return K(t=n,Se,bi).call(t,this),F(n,fn,R(this,fn).copy()),n}fork(){var o,t;let n=K(o=zo,At,Us).call(o,!1,this.board);return K(t=n,Se,bi).call(t,this),F(n,fn,R(this,fn).fork()),n}variant(){return this.board.variant}replaceBoardItems(n){let o=Array.from({length:121},()=>{});for(let[r,a]of n)o[ne(r)]=a;let t=kr.fromItems(o,this.variant());R(this,qe).board=t,R(this,fn).resetForBoardReplacement(),this.invalidateProcessInputCache()}setTakebackHistoryTracking(n){R(this,fn).setTakebackTracking(n),this.invalidateProcessInputCache()}invalidateProcessInputCache(){R(this,Kn).invalidate()}setVerboseTracking(n){R(this,fn).setVerboseTracking(n)}clearTracking(){R(this,fn).clearTracking(),this.invalidateProcessInputCache()}canTakeback(n){return R(this,fn).canTakeback(this.activeColor,n)}processInput(n,o,t){return this.processInputWithStartOptions(n,o,t,void 0)}processInputWithStartOptions(n,o,t,r){return K(this,Se,Ci).call(this,n,o,t,r??IR)}inspectInputGrammar(n,o){return K(this,Se,Ci).call(this,n,!0,!1,o,!1)}applyAndAddResultingEvents(n){if(!Up(R(this,qe),n))return;this.invalidateProcessInputCache();let o=l(()=>this.fen(),"snapshotFen");R(this,fn).beginEventApplication(o,this.activeColor);let t=jp(R(this,qe),n);return R(this,fn).completeEventApplication({snapshotFen:o,color:this.activeColor,events:t.events,turnAdvanced:t.turnAdvanced,winner:t.winner}),t.events}nextInputsFromLocations(n,o,t,r,a){if(r!==void 0)return n.some(i=>Ie(i,r))&&a(r)?[Po({kind:"location",location:r},o)]:[];if(t){let i=n.find(a);return i===void 0?[]:[Po({kind:"location",location:i},o)]}return n.filter(a).map(i=>Po({kind:"location",location:i},o))}availableMoveKinds(){let n=new Map;return n.set(Ro.MonMove,le-this.monsMovesCount),n.set(Ro.Action,0),n.set(Ro.Potion,0),n.set(Ro.ManaMove,0),this.turnNumber===1||(n.set(Ro.Action,Fn-this.actionsUsedCount),n.set(Ro.Potion,this.playerPotionsCount()),n.set(Ro.ManaMove,Mr-this.manaMovesCount)),n}winnerColor(){return Oc(this)}isLaterThan(n){return this.variant()!==n.variant()?!1:this.turnNumber>n.turnNumber?!0:this.turnNumber!==n.turnNumber?!1:this.playerPotionsCount()<n.playerPotionsCount()||this.actionsUsedCount>n.actionsUsedCount||this.manaMovesCount>n.manaMovesCount||this.monsMovesCount>n.monsMovesCount||this.board.faintedMonsLocations(X(this.activeColor)).length>n.board.faintedMonsLocations(X(n.activeColor)).length}isFirstTurn(){return mi(this)}playerPotionsCount(){return Ic(this)}playerCanMoveMon(){return Ny(this)}playerCanMoveMana(){return Dy(this)}playerCanUseAction(){return _y(this)}};qe=new WeakMap,fn=new WeakMap,Kn=new WeakMap,Se=new WeakSet,bi=l(function(n){R(this,qe).whiteScore=n.whiteScore,R(this,qe).blackScore=n.blackScore,R(this,qe).activeColor=n.activeColor,R(this,qe).actionsUsedCount=n.actionsUsedCount,R(this,qe).manaMovesCount=n.manaMovesCount,R(this,qe).monsMovesCount=n.monsMovesCount,R(this,qe).whitePotionsCount=n.whitePotionsCount,R(this,qe).blackPotionsCount=n.blackPotionsCount,R(this,qe).turnNumber=n.turnNumber},"#copyFenFieldsFrom"),At=new WeakSet,Us=l(function(n,o){return new zo(n,o.variant,o)},"#fromBoard"),By=l(function(n){let o=n.board.fork();R(this,qe).board=o,K(this,Se,bi).call(this,n),this.invalidateProcessInputCache()},"#updateWith"),Ci=l(function(n,o,t,r,a=!0){if(n.length>Tt||this.winnerColor()!==void 0)return{kind:"invalid-input"};if(n.length===0){let N=`${a?1:0}:${r.includeManaStartsWithPotionAction?1:0}`,B=R(this,Kn).getStartSuggestion(N);if(B!==void 0)return B;let W=K(this,Se,Gy).call(this,r,a);return R(this,Kn).setStartSuggestion(N,W),W}let i=n[0];if(n.length===1&&i?.kind==="takeback"){let N=R(this,fn).prepareTakeback(this.activeColor,this.activeColor);if(N===void 0)return{kind:"invalid-input"};let B=zo.fromFen(N.previousFen,!1);return B===void 0?{kind:"invalid-input"}:o?{kind:"events",events:[{kind:"takeback"}]}:(K(this,Se,By).call(this,B),R(this,fn).commitTakeback(N),this.invalidateProcessInputCache(),{kind:"events",events:[{kind:"takeback"}]})}if(i?.kind!=="location")return{kind:"invalid-input"};let s=i.location,u=this.board.get(s);if(u===void 0)return{kind:"invalid-input"};let c=u,p=n[1],m=a&&K(this,Se,Ly).call(this),d=K(this,Se,Vy).call(this,s,c,t&&!m,p);if(p===void 0){let N=K(this,Se,Wc).call(this,n,d,r,m,t);return N.length===0?{kind:"invalid-input"}:{kind:"next-input-options",nextInputs:N}}if(p.kind!=="location")return{kind:"invalid-input"};let f=p.location,y=d.find(N=>Cr(N.input,p));if(y===void 0)return{kind:"invalid-input"};let S=n[2],C=K(this,Se,Hy).call(this,y.kind,c,s,f),b=C?.[0]??[],k=C?.[1]??[];if(S===void 0){if(k.length!==0){let N=K(this,Se,Wc).call(this,n,k,r,m,t);return N.length===0?{kind:"invalid-input"}:{kind:"next-input-options",nextInputs:N}}return b.length!==0?K(this,Se,Lc).call(this,b,o):{kind:"invalid-input"}}let M=k.find(N=>Cr(N.input,S));if(M===void 0)return{kind:"invalid-input"};let P=n[3],T=K(this,Se,jy).call(this,M,c,s,f);b.push(...T?.[0]??[]);let v=T?.[1]??[];if(P===void 0){if(v.length!==0){let N=K(this,Se,Wc).call(this,n,v,r,m,t);return N.length===0?{kind:"invalid-input"}:{kind:"next-input-options",nextInputs:N}}return b.length!==0?K(this,Se,Lc).call(this,b,o):{kind:"invalid-input"}}if(P.kind!=="modifier"||M.input.kind!=="location")return{kind:"invalid-input"};let E=v.find(N=>Cr(N.input,P))?.actorMonItem,x=E===void 0?void 0:z(E);if(E===void 0||x===void 0)return{kind:"invalid-input"};switch(P.modifier){case Ze.SelectBomb:b.push({kind:"pickup-bomb",by:x,at:M.input.location});break;case Ze.SelectPotion:b.push({kind:"pickup-potion",by:E,at:M.input.location});break}return K(this,Se,Lc).call(this,b,o)},"#processInputInternal"),Ly=l(function(){return this.turnNumber===Number.MAX_SAFE_INTEGER||this.whitePotionsCount===Number.MAX_SAFE_INTEGER||this.blackPotionsCount===Number.MAX_SAFE_INTEGER},"#requiresCounterCapacityFiltering"),Wc=l(function(n,o,t,r,a){if(!r)return o;let i=l(u=>K(this,Se,Bc).call(this,[...n,u.input],t),"applicable");if(!a)return o.filter(i);let s=o.find(i);return s===void 0?[]:[s]},"#applicableInputOptions"),Bc=l(function(n,o){let t=`${o.includeManaStartsWithPotionAction?1:0}|${An(n)}`,r=R(this,Kn).getCompletionViability(t);if(r!==void 0)return r;let a=K(this,Se,Ci).call(this,n,!0,!1,o,!1),i=(()=>{switch(a.kind){case"invalid-input":return!1;case"events":return Up(R(this,qe),a.events);case"locations-to-start-from":return a.locations.some(s=>K(this,Se,Bc).call(this,[...n,{kind:"location",location:s}],o));case"next-input-options":return a.nextInputs.some(s=>K(this,Se,Bc).call(this,[...n,s.input],o))}})();return R(this,Kn).setCompletionViability(t,i),i},"#hasApplicableCompletion"),Gy=l(function(n,o){let t=[],r=Array.from({length:121},()=>!1);for(let i of this.board.allMonsLocations(this.activeColor)){let s=K(this,Se,Ci).call(this,[{kind:"location",location:i}],!0,!0,n,o);if(s.kind==="next-input-options"&&s.nextInputs.length!==0){let u=ne(i);r[u]||(r[u]=!0,t.push(i))}}if(Fy(this,t.length!==0,n.includeManaStartsWithPotionAction))for(let i of this.board.allFreeRegularManaLocations(this.activeColor)){let s=K(this,Se,Ci).call(this,[{kind:"location",location:i}],!0,!0,n,o);if(s.kind==="next-input-options"&&s.nextInputs.length!==0){let u=ne(i);r[u]||(r[u]=!0,t.push(i))}}return t.length===0?{kind:"invalid-input"}:{kind:"locations-to-start-from",locations:t}},"#suggestedInputToStartWith"),Vy=l(function(n,o,t,r){let a=`${ne(n)}|${Ns(o)}|${t?1:0}|${r===void 0?"":ui(r)}`,i=R(this,Kn).getSecondInputOptions(a);if(i!==void 0)return i;let s=r?.kind==="location"?r.location:void 0,u=this.board.findAwakeAngel(X(this.activeColor)),c=this.board.squareAt(n),p=[];switch(o.kind){case"mon":{let m=o.mon;if(m.color!==this.activeColor||$(m))break;if(this.playerCanMoveMon()&&p.push(...this.nextInputsFromLocations(ge(n),Re.MonMove,t,r===void 0?void 0:r.kind==="location"?r.location:n,d=>{let f=this.board.get(d),y=this.board.squareAt(d),S;switch(f?.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":S=!1;break;case"mana":S=m.kind===A.Drainer;break;case"consumable":case void 0:S=!0;break}if(!S)return!1;switch(y.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":return m.kind===A.Drainer&&(f===void 0||f.kind==="mana"&&f.mana.kind==="supermana");case"mon-base":return y.monKind===m.kind&&y.color===m.color}})),c.kind!=="mon-base"&&this.playerCanUseAction())switch(m.kind){case A.Angel:case A.Drainer:break;case A.Mystic:p.push(...this.nextInputsFromLocations(ct(n),Re.MysticAction,t,s,d=>{var S;let f=this.board.get(d);if(f===void 0||K(S=zo,At,qp).call(S,u,d))return!1;let y=z(f);return y!==void 0&&m.color!==y.color&&!$(y)}));break;case A.Demon:p.push(...this.nextInputsFromLocations(lt(n),Re.DemonAction,t,s,d=>{var b;let f=this.board.get(d),y=oa(n,d),S=this.board.squareAt(y);if(f===void 0||K(b=zo,At,qp).call(b,u,d)||this.board.get(y)!==void 0||S.kind==="supermana-base"||S.kind==="mon-base")return!1;let C=z(f);return C!==void 0&&m.color!==C.color&&!$(C)}));break;case A.Spirit:p.push(...this.nextInputsFromLocations(pt(n),Re.SpiritTargetCapture,t,s,d=>{let f=this.board.get(d);return f===void 0?!1:zt(f)}));break}break}case"mana":o.mana.kind==="regular"&&o.mana.color===this.activeColor&&this.playerCanMoveMana()&&p.push(...this.nextInputsFromLocations(ge(n),Re.ManaMove,t,s,m=>{let d=this.board.get(m),f=this.board.squareAt(m);return d?.kind==="mon"?Hs(f)&&d.mon.kind===A.Drainer:d!==void 0?!1:Hs(f)}));break;case"mon-with-mana":o.mon.color===this.activeColor&&this.playerCanMoveMon()&&p.push(...this.nextInputsFromLocations(ge(n),Re.MonMove,t,s,m=>{let d=this.board.get(m),f=this.board.squareAt(m);switch(d?.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return!1;case"mana":case"consumable":return!0;case void 0:return Hs(f)?!0:f.kind==="supermana-base"&&o.mana.kind==="supermana"}}));break;case"mon-with-consumable":{let m=o.mon;if(m.color!==this.activeColor)break;this.playerCanMoveMon()&&p.push(...this.nextInputsFromLocations(ge(n),Re.MonMove,t,s,d=>{let f=this.board.get(d),y=this.board.squareAt(d);switch(f?.kind){case"mon":case"mana":case"mon-with-mana":case"mon-with-consumable":return!1;case"consumable":return!0;case void 0:return Hs(y)}})),o.consumable===q.Bomb&&p.push(...this.nextInputsFromLocations(hr(n),Re.BombAttack,t,s,d=>{let f=this.board.get(d),y=f===void 0?void 0:z(f);return y!==void 0&&m.color!==y.color&&!$(y)}));break}case"consumable":break}return R(this,Kn).setSecondInputOptions(a,p),p},"#secondInputOptions"),Hy=l(function(n,o,t,r){let a=`${n}|${Ns(o)}|${ne(t)}|${ne(r)}`;if(R(this,Kn).hasSecondStage(a))return R(this,Kn).getSecondStage(a);let i=K(this,Se,Uy).call(this,n,o,t,r);return R(this,Kn).setSecondStage(a,i),i},"#processSecondInput"),Uy=l(function(n,o,t,r){let a=[],i=[],s=this.board.squareAt(r),u=this.board.get(r);switch(n){case Re.MonMove:{let c=z(o);if(c===void 0)return;if(i.push({kind:"mon-move",item:o,from:t,to:r}),u!==void 0)switch(u.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return;case"mana":{let p=no(o);p!==void 0&&i.push({kind:"mana-dropped",mana:p,at:t}),i.push({kind:"pickup-mana",mana:u.mana,by:c,at:r});break}case"consumable":switch(u.consumable){case q.Bomb:case q.Potion:return;case q.BombOrPotion:ia(o)!==void 0||no(o)!==void 0?i.push({kind:"pickup-potion",by:o,at:r}):(a.push(Po({kind:"modifier",modifier:Ze.SelectBomb},Re.SelectConsumable,o)),a.push(Po({kind:"modifier",modifier:Ze.SelectPotion},Re.SelectConsumable,o)));break}break}if(s.kind==="mana-pool"){let p=no(o);p!==void 0&&i.push({kind:"mana-scored",mana:p,at:r})}break}case Re.ManaMove:{if(o.kind!=="mana")return;let c=o.mana;if(i.push({kind:"mana-move",mana:c,from:t,to:r}),u!==void 0){if(u.kind!=="mon")return;i.push({kind:"pickup-mana",mana:c,by:u.mon,at:r})}switch(s.kind){case"regular":case"mana-base":case"consumable-base":break;case"mana-pool":i.push({kind:"mana-scored",mana:c,at:r});break;case"mon-base":case"supermana-base":return}break}case Re.MysticAction:{if(o.kind!=="mon")return;if(i.push({kind:"mystic-action",mystic:o.mon,from:t,to:r}),u!==void 0){let c=z(u);if(c===void 0)return;if(i.push({kind:"mon-fainted",mon:c,from:r,to:this.board.base(c)}),u.kind==="mon-with-mana"&&(u.mana.kind==="regular"?i.push({kind:"mana-dropped",mana:u.mana,at:r}):i.push({kind:"supermana-back-to-base",from:r,to:this.board.supermanaBase()})),u.kind==="mon-with-consumable")switch(u.consumable){case q.Bomb:i.push({kind:"bomb-explosion",at:r});break;case q.Potion:case q.BombOrPotion:return}}break}case Re.DemonAction:{if(o.kind!=="mon")return;let c=o.mon;i.push({kind:"demon-action",demon:c,from:t,to:r});let p=!1;if(u!==void 0){let m=z(u);if(m===void 0)return;if(i.push({kind:"mon-fainted",mon:m,from:r,to:this.board.base(m)}),u.kind==="mon-with-mana"&&(u.mana.kind==="regular"?(p=!0,i.push({kind:"mana-dropped",mana:u.mana,at:r})):i.push({kind:"supermana-back-to-base",from:r,to:this.board.supermanaBase()})),u.kind==="mon-with-consumable")switch(u.consumable){case q.Bomb:i.push({kind:"bomb-explosion",at:r}),i.push({kind:"mon-fainted",mon:c,from:r,to:this.board.base(c)});break;case q.Potion:case q.BombOrPotion:return}}if((s.kind==="supermana-base"||s.kind==="mon-base")&&(p=!0),p)for(let m of ge(r)){let d=this.board.get(m),f=this.board.squareAt(m);d!==void 0&&d.kind!=="consumable"||(Hs(f)?a.push(Po({kind:"location",location:m},Re.DemonAdditionalStep)):f.kind==="mon-base"&&f.monKind===c.kind&&f.color===c.color&&a.push(Po({kind:"location",location:m},Re.DemonAdditionalStep)))}break}case Re.SpiritTargetCapture:{if(u===void 0)return;let c=z(u),p=no(u);a.push(...this.nextInputsFromLocations(ge(r),Re.SpiritTargetMove,!1,void 0,m=>{let d=this.board.get(m),f=this.board.squareAt(m),y;switch(d?.kind){case"mon":switch(u.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":y=!1;break;case"mana":y=d.mon.kind===A.Drainer&&!$(d.mon);break;case"consumable":y=u.consumable===q.BombOrPotion;break}break;case"mana":y=c?.kind===A.Drainer&&!$(c);break;case"mon-with-mana":case"mon-with-consumable":y=u.kind==="consumable"&&u.consumable===q.BombOrPotion;break;case"consumable":y=d.consumable===q.BombOrPotion&&(u.kind==="mon"||u.kind==="mon-with-mana"||u.kind==="mon-with-consumable");break;case void 0:y=!0;break}if(!y)return!1;switch(f.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":{let S=d?.kind==="mana"&&d.mana.kind==="supermana";return p?.kind==="supermana"||p===void 0&&c?.kind===A.Drainer&&(d===void 0||S)||c?.kind===A.Drainer&&S}case"mon-base":return c?.kind===f.monKind&&c.color===f.color&&p===void 0&&ia(u)===void 0}}));break}case Re.BombAttack:{let c=z(o);if(c===void 0)return;if(i.push({kind:"bomb-attack",by:c,from:t,to:r}),u!==void 0){let p=z(u);if(p===void 0)return;if(i.push({kind:"mon-fainted",mon:p,from:r,to:this.board.base(p)}),u.kind==="mon-with-mana"&&(u.mana.kind==="regular"?i.push({kind:"mana-dropped",mana:u.mana,at:r}):i.push({kind:"supermana-back-to-base",from:r,to:this.board.supermanaBase()})),u.kind==="mon-with-consumable")switch(u.consumable){case q.Bomb:i.push({kind:"bomb-explosion",at:r});break;case q.Potion:case q.BombOrPotion:return}}break}case Re.DemonAdditionalStep:case Re.SpiritTargetMove:case Re.SelectConsumable:break}return[i,a]},"#processSecondInputUncached"),jy=l(function(n,o,t,r){let a=`${ui(n.input)}|${n.kind}|${n.actorMonItem===void 0?"":Ns(n.actorMonItem)}|${Ns(o)}|${ne(t)}|${ne(r)}`;if(R(this,Kn).hasThirdStage(a))return R(this,Kn).getThirdStage(a);let i=K(this,Se,Ky).call(this,n,o,t,r);return R(this,Kn).setThirdStage(a,i),i},"#processThirdInput"),Ky=l(function(n,o,t,r){let a=this.board.get(r),i=[],s=[];switch(n.kind){case Re.SpiritTargetMove:{if(n.input.kind!=="location"||a===void 0)return;let u=n.input.location,c=this.board.get(u),p=this.board.squareAt(u);if(s.push({kind:"spirit-target-move",item:a,from:r,to:u,by:t}),c!==void 0)switch(a.kind){case"mon":switch(c.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return;case"mana":s.push({kind:"pickup-mana",mana:c.mana,by:a.mon,at:u});break;case"consumable":switch(c.consumable){case q.Potion:case q.Bomb:return;case q.BombOrPotion:i.push(Po({kind:"modifier",modifier:Ze.SelectBomb},Re.SelectConsumable,a)),i.push(Po({kind:"modifier",modifier:Ze.SelectPotion},Re.SelectConsumable,a));break}break}break;case"mana":if(c.kind!=="mon")return;s.push({kind:"pickup-mana",mana:a.mana,by:c.mon,at:u});break;case"mon-with-mana":switch(c.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return;case"mana":s.push({kind:"mana-dropped",mana:a.mana,at:r}),s.push({kind:"pickup-mana",mana:c.mana,by:a.mon,at:u});break;case"consumable":switch(c.consumable){case q.Potion:case q.Bomb:return;case q.BombOrPotion:s.push({kind:"pickup-potion",by:a,at:u});break}break}break;case"mon-with-consumable":if(c.kind!=="consumable"||c.consumable!==q.BombOrPotion)return;s.push({kind:"pickup-potion",by:a,at:u});break;case"consumable":switch(c.kind){case"mana":case"consumable":return;case"mon":i.push(Po({kind:"modifier",modifier:Ze.SelectBomb},Re.SelectConsumable,c)),i.push(Po({kind:"modifier",modifier:Ze.SelectPotion},Re.SelectConsumable,c));break;case"mon-with-mana":case"mon-with-consumable":switch(a.consumable){case q.Potion:case q.Bomb:return;case q.BombOrPotion:s.push({kind:"pickup-potion",by:c,at:u});break}break}break}if(p.kind==="mana-pool"){let m=no(a);m!==void 0&&s.push({kind:"mana-scored",mana:m,at:u})}break}case Re.DemonAdditionalStep:{if(n.input.kind!=="location")return;let u=z(o);if(u===void 0)return;let c=n.input.location;s.push({kind:"demon-additional-step",demon:u,from:r,to:c});let p=this.board.get(c);if(p?.kind==="consumable")switch(p.consumable){case q.Potion:case q.Bomb:return;case q.BombOrPotion:i.push(Po({kind:"modifier",modifier:Ze.SelectBomb},Re.SelectConsumable,o)),i.push(Po({kind:"modifier",modifier:Ze.SelectPotion},Re.SelectConsumable,o));break}break}case Re.SelectConsumable:{if(n.input.kind!=="modifier")return;let u=z(o);if(u===void 0)return;switch(n.input.modifier){case Ze.SelectBomb:s.push({kind:"pickup-bomb",by:u,at:r});break;case Ze.SelectPotion:s.push({kind:"pickup-potion",by:o,at:r});break}break}case Re.MonMove:case Re.ManaMove:case Re.MysticAction:case Re.DemonAction:case Re.SpiritTargetCapture:case Re.BombAttack:return}return[s,i]},"#processThirdInputUncached"),Lc=l(function(n,o){if(o)return{kind:"events",events:n};let t=this.applyAndAddResultingEvents(n);return t===void 0?{kind:"invalid-input"}:{kind:"events",events:t}},"#resolveEvents"),qp=l(function(n,o){return n!==void 0&&se(n,o)===1},"#isLocationGuardedByAngelLocation"),H(zo,At),l(zo,"MonsGame");var To=zo;var zp=Math.trunc(6710886375e-2),qy=-zp;function $p(e){return Number.isNaN(e)?0:e<=-2147483648?-2147483648:e>=2147483647?2147483647:Math.trunc(e)}l($p,"clampScore");function Gc(e){return Number.isNaN(e)?0:e<=qy?qy:e>=zp?zp:Math.trunc(e)}l(Gc,"clampHeuristicScore");function g(e,n){return $p(e+n)}l(g,"saturatingScoreAdd");function j(e,n){return $p(e-n)}l(j,"saturatingScoreSubtract");function nn(e,n){return $p(e*n)}l(nn,"saturatingScoreMultiply");var Tr=1,wr=2,ma=4,fa=8,Ot=16,Mi=Tr|wr|ma|fa|Ot;function en(){return{utility:0,sameTurnScore:!1,sameTurnScoreValue:0,sameTurnOpponentManaScore:!1,sameTurnOpponentManaScoreValue:0,supermanaProgress:!1,opponentManaProgress:!1,nextTurnSetupGain:0}}l(en,"defaultSpiritSummary");function yt(){return{scorePathWindow:{bestSteps:void 0,multiPressure:0},immediateWindow:{bestScore:0,multiPressure:0},bestDrainerPickup:void 0,bestCarrierSteps:void 0,bestDrainerToManaSteps:void 0,spirit:en()}}l(yt,"defaultColorSummary");function vr(){return{canAttackOpponentDrainer:!1,safeSupermanaProgress:!1,safeSupermanaProgressSteps:void 0,safeOpponentManaProgress:!1,safeOpponentManaProgressSteps:void 0,spiritAssistedSupermanaProgress:!1,spiritAssistedOpponentManaProgress:!1,spiritAssistedScore:!1,spiritAssistedDenial:!1,sameTurnScoreWindowValue:0,scorePathBestSteps:void 0}}l(vr,"defaultTurnSummary");function It(){return{safeSupermanaProgress:!1,safeSupermanaProgressSteps:void 0,safeOpponentManaProgress:!1,safeOpponentManaProgressSteps:void 0,spiritAssistedScore:!1,spiritAssistedScoreValue:0,spiritAssistedDenial:!1,spiritAssistedDenialValue:0,sameTurnScoreWindowValue:0}}l(It,"defaultTurnTacticalProjection");function Xt(){return{budget:{remainingMonMoves:0,canUseAction:!1,canMoveMana:!1},turn:It(),delta:{sameTurnScoreWindowValue:0,spiritGain:0,opponentWindowDenyGain:0,drainerAttackAvailable:!1,drainerSafety:0,safeSupermanaProgressSteps:void 0,safeOpponentManaProgressSteps:void 0},opponentCanWinImmediately:!1}}l(Xt,"defaultOpportunityContext");var Xp=class Xp{constructor(n=yt(),o=yt()){ee(this,"white");ee(this,"black");this.white=n,this.black=o}colorSummary(n){return n===w.White?this.white:this.black}};l(Xp,"ExactStrategicAnalysis");var Et=Xp;var zy=Object.freeze({hi:0,lo:0});function ze(e,n){return{hi:e>>>0,lo:n>>>0}}l(ze,"hash64");function $o(e){if(!Number.isInteger(e)||e<0||e>4294967295)throw new RangeError("hash low word must be an unsigned 32-bit integer");return ze(0,e)}l($o,"hash64FromLowWord");function mo(e){if(!Number.isSafeInteger(e)||e<0)throw new RangeError("hash integer must be a nonnegative safe integer");return ze(Math.floor(e/4294967296),e)}l(mo,"hash64FromNonnegativeInteger");function Jp(e,n){let o=e.lo+n.lo>>>0,t=o<e.lo>>>0?1:0;return ze(e.hi+n.hi+t,o)}l(Jp,"hash64Add");function fo(e,n){let o=e.lo&65535,t=e.lo>>>16,r=n.lo&65535,a=n.lo>>>16,i=o*r,s=(i>>>16)+t*r+o*a,u=(i&65535|(s&65535)<<16)>>>0,c=t*a+Math.floor(s/65536)+(Math.imul(e.hi,n.lo)>>>0)+(Math.imul(e.lo,n.hi)>>>0);return ze(c,u)}l(fo,"hash64Mul");function In(e,n){return ze(e.hi^n.hi,e.lo^n.lo)}l(In,"hash64Xor");function Vc(e,n){let o=n>>>0&63;if(o===0)return ze(e.hi,e.lo);if(o===32)return ze(e.lo,e.hi);if(o<32)return ze(e.hi<<o|e.lo>>>32-o,e.lo<<o|e.hi>>>32-o);let t=o-32;return ze(e.lo<<t|e.hi>>>32-t,e.hi<<t|e.lo>>>32-t)}l(Vc,"hash64RotateLeft");function ya(e,n){let o=n>>>0&63;return o===0?ze(e.hi,e.lo):o===32?ze(0,e.hi):o<32?ze(e.hi>>>o,e.lo>>>o|e.hi<<32-o):ze(0,e.hi>>>o-32)}l(ya,"hash64ShiftRight");function ed(e,n){return e.hi===n.hi&&e.lo===n.lo}l(ed,"hash64Equals");function $y(e){return e.hi===0&&e.lo===0}l($y,"hash64IsZero");function Xy(e,n){return e.hi!==n.hi?e.hi<n.hi?-1:1:e.lo!==n.lo?e.lo<n.lo?-1:1:0}l(Xy,"hash64CompareUnsigned");function Yp(e){let n=(e.hi^(e.lo<<16|e.lo>>>16))>>>0;return n=Math.imul(n^n>>>16,2146121005)>>>0,n=Math.imul(n^n>>>15,2221713035)>>>0,(n^n>>>16)>>>0}l(Yp,"hash64Bucket");function xR(e,n,o,t,r){return{primaryHi:e.hi,primaryLo:e.lo,tag:o,hasSecondary:t!==void 0,secondaryHi:t?.hi??0,secondaryLo:t?.lo??0,qualifier:r,value:n}}l(xR,"createEntry");function NR(e,n){return e===n||e!==e&&n!==n}l(NR,"sameValueZero");function Qp(e,n,o,t,r){return e.primaryHi===n.hi&&e.primaryLo===n.lo&&(e.tag===o||e.tag!==e.tag&&o!==o)&&e.hasSecondary===(t!==void 0)&&(t===void 0||e.secondaryHi===t.hi&&e.secondaryLo===t.lo)&&NR(e.qualifier,r)}l(Qp,"entryMatches");function DR(e){if(!Number.isSafeInteger(e)||e<1)throw new RangeError("Hash64 table capacity must be a positive safe integer");return e}l(DR,"validateCapacity");var Yt,ki,gr,js,Zp,nd=class nd{constructor(n){H(this,js);H(this,Yt,new Map);H(this,ki);H(this,gr,0);F(this,ki,DR(n))}get capacity(){return R(this,ki)}get size(){return R(this,gr)}clear(){R(this,Yt).clear(),F(this,gr,0)}has(n,o=0,t,r){return K(this,js,Zp).call(this,n,o,t,r)!==void 0}get(n,o=0,t,r){return K(this,js,Zp).call(this,n,o,t,r)?.value}set(n,o,t=0,r,a){let i=Yp(n),s=R(this,Yt).get(i),u=s?.find(c=>Qp(c,n,t,r,a));return u!==void 0?(u.value=o,this):(R(this,gr)>=R(this,ki)&&(this.clear(),s=void 0),s===void 0&&(s=[],R(this,Yt).set(i,s)),s.push(xR(n,o,t,r,a)),F(this,gr,R(this,gr)+1),this)}delete(n,o=0,t,r){let a=Yp(n),i=R(this,Yt).get(a);if(i===void 0)return!1;let s=i.findIndex(u=>Qp(u,n,o,t,r));return s<0?!1:(i.splice(s,1),F(this,gr,R(this,gr)-1),i.length===0&&R(this,Yt).delete(a),!0)}};Yt=new WeakMap,ki=new WeakMap,gr=new WeakMap,js=new WeakSet,Zp=l(function(n,o,t,r){return R(this,Yt).get(Yp(n))?.find(a=>Qp(a,n,o,t,r))},"#find"),l(nd,"Hash64Table");var Ee=nd,xt,od=class od{constructor(n){H(this,xt);F(this,xt,new Ee(n))}get capacity(){return R(this,xt).capacity}get size(){return R(this,xt).size}clear(){R(this,xt).clear()}has(n,o=0,t,r){return R(this,xt).has(n,o,t,r)}add(n,o=0,t,r){return R(this,xt).set(n,!0,o,t,r),this}delete(n,o=0,t,r){return R(this,xt).delete(n,o,t,r)}};xt=new WeakMap,l(od,"Hash64Set");var wo=od;var Jy=ze(1779033703,4089235721),eS=ze(2654435761,2246822535),nS=ze(2496678331,321982955),_R=ze(2654435769,2135587861),oS=ze(3210233709,484763065),tS=ze(2496678331,321982955);function Hc(e){return e===w.White?1:2}l(Hc,"exactHashColorBits");function FR(e){switch(e){case A.Demon:return 1;case A.Drainer:return 2;case A.Angel:return 3;case A.Spirit:return 4;case A.Mystic:return 5}}l(FR,"exactHashMonKindBits");function Ks(e){return e.kind==="supermana"?2:1|Hc(e.color)<<4}l(Ks,"exactHashManaBits");function Yy(e){return e.kind==="supermana"?32:16|Hc(e.color)}l(Yy,"exactSearchHashManaBits");function Qy(e){switch(e){case q.Bomb:return 1;case q.Potion:return 2;case q.BombOrPotion:return 3}}l(Qy,"exactHashConsumableBits");function Zy(e){switch(e){case q.Potion:return 1;case q.Bomb:return 2;case q.BombOrPotion:return 3}}l(Zy,"exactSearchHashConsumableBits");function Ri(e){return(FR(e.kind)|Hc(e.color)<<4|(e.cooldown&255)<<8)>>>0}l(Ri,"exactHashMonBits");function WR(e){let n;switch(e.kind){case"mon":n=256|Ri(e.mon);break;case"mana":n=512|Ks(e.mana);break;case"mon-with-mana":n=768|Ri(e.mon)|Ks(e.mana)<<16;break;case"mon-with-consumable":n=1024|Ri(e.mon)|Qy(e.consumable)<<16;break;case"consumable":n=1280|Qy(e.consumable);break}return $o(n>>>0)}l(WR,"exactHashItem");function BR(e){let n;switch(e.kind){case"mon":n=256|Ri(e.mon);break;case"mana":n=512|Yy(e.mana);break;case"mon-with-mana":n=768|Ri(e.mon)|Yy(e.mana)<<16;break;case"mon-with-consumable":n=1024|Ri(e.mon)|Zy(e.consumable)<<16;break;case"consumable":n=1280|Zy(e.consumable);break}return $o(n>>>0)}l(BR,"exactSearchHashItem");function rS(e){let n=e;return n=In(n,ya(n,30)),n=fo(n,oS),n=In(n,ya(n,27)),n=fo(n,tS),In(n,ya(n,31))}l(rS,"mixBoardHash");function td(e){let n=Jp(e,_R);return n=fo(In(n,ya(n,30)),oS),n=fo(In(n,ya(n,27)),tS),In(n,ya(n,31))}l(td,"mixSearchHash");function LR(e,n){return rS(In(fo($o(e+1),eS),fo(WR(n),nS)))}l(LR,"exactBoardEntryHash");function GR(e){return rS(Jp(mo(_s(e)),ze(608135816,2242054355)))}l(GR,"exactBoardVariantHash");function yn(e){let n=In(Jy,GR(e.variant));for(let[o,t]of e.entries())n=In(n,LR(ne(o),t));return n}l(yn,"exactBoardHash");function pe(e){let n=Jy;for(let[t,r]of e.board.entries()){let a=In(fo($o(ne(t)+1),eS),BR(r));n=In(n,td(a)),n=fo(Vc(n,17),nS)}let o=[[mo(e.whiteScore),17],[mo(e.blackScore),35],[$o(Hc(e.activeColor)),53],[mo(e.actionsUsedCount),71],[mo(e.manaMovesCount),89],[mo(e.monsMovesCount),107],[mo(e.whitePotionsCount),125],[mo(e.blackPotionsCount),143],[mo(e.turnNumber),161],[mo(_s(e.variant())),179]];for(let[t,r]of o)n=In(n,td(In(t,$o(r))));return td(n)}l(pe,"exactSearchStateHash");var Uc=512,aS=8192,iS=8192,sS=8192,uS=8192,cS=8192,lS=8192,Pi=4096,pS=4096,jc=2048,VR=Symbol("exact-session-caches"),ad=class ad{constructor(){ee(this,"attackReach",new Ee(aS));ee(this,"walkThreat",new Ee(lS));ee(this,"drainerSafety",new Ee(sS));ee(this,"carrierSteps",new Ee(iS));ee(this,"drainerToMana",new Ee(uS));ee(this,"pickupPath",new Ee(cS));ee(this,"strategicAnalysis",new Ee(Uc));ee(this,"turnSummary",new Ee(Uc));ee(this,"turnTacticalProjection",new Ee(Uc));ee(this,"secureMana",new Ee(Pi));ee(this,"spiritReach",new Ee(pS));ee(this,"spiritTacticalSummary",new Ee(jc));ee(this,"capacity",aS+lS+sS+iS+uS+cS+Uc*3+Pi+pS+jc)}get size(){return this.attackReach.size+this.walkThreat.size+this.drainerSafety.size+this.carrierSteps.size+this.drainerToMana.size+this.pickupPath.size+this.strategicAnalysis.size+this.turnSummary.size+this.turnTacticalProjection.size+this.secureMana.size+this.spiritReach.size+this.spiritTacticalSummary.size}clear(){this.attackReach.clear(),this.walkThreat.clear(),this.drainerSafety.clear(),this.carrierSteps.clear(),this.drainerToMana.clear(),this.pickupPath.clear(),this.strategicAnalysis.clear(),this.turnSummary.clear(),this.turnTacticalProjection.clear(),this.secureMana.clear(),this.spiritReach.clear(),this.spiritTacticalSummary.clear()}};l(ad,"ExactSessionCaches");var rd=ad;function Pe(e){return e.caches.session.getOrCreate(VR,()=>new rd)}l(Pe,"exactCaches");function qn(e){return e===w.White?0:1}l(qn,"colorKey");function zn(...e){if(e.length>6)return;let n=0,o=1;for(let t of e){if(!Number.isInteger(t))return;let r=t;if(r<-1||r>254)return;n+=(r+1)*o,o*=256}return Number.isSafeInteger(n)?n:void 0}l(zn,"exactCacheTag");function qs(e){Pe(e).clear()}l(qs,"clearExactStateAnalysisCache");var Xo=Object.freeze({kind:"none"}),Ti=Object.freeze({kind:"bomb"});function HR(e){switch(e.kind){case"none":return 0;case"bomb":return 1;case"mana":return e.mana.kind==="supermana"?2:e.mana.color===w.White?3:4}}l(HR,"payloadSlot");function vo(e,n){return ne(e)*5+HR(n)}l(vo,"payloadSeenSlot");function UR(e,n,o){switch(e.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":return n===A.Drainer;case"mon-base":return e.monKind===n&&e.color===o}}l(UR,"squareAllowsEmptyMon");function jR(e,n){switch(e.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":return n.kind==="supermana";case"mon-base":return!1}}l(jR,"squareAllowsManaCarrier");function Sa(e,n,o,t,r,a){let i=e.get(r);switch(t.kind){case"none":{if(i===void 0)return UR(e.squareAt(r),n,o)?Xo:void 0;switch(i.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return;case"mana":return n===A.Drainer?{kind:"mana",mana:i.mana}:void 0;case"consumable":return i.consumable===q.BombOrPotion?a?Ti:Xo:void 0}}case"mana":{if(i===void 0)return jR(e.squareAt(r),t.mana)?t:void 0;switch(i.kind){case"mon":case"mon-with-mana":case"mon-with-consumable":return;case"mana":return{kind:"mana",mana:i.mana};case"consumable":return i.consumable===q.BombOrPotion?t:void 0}}case"bomb":{if(i===void 0)switch(e.squareAt(r).kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return Ti;case"supermana-base":case"mon-base":return}return i.kind==="consumable"&&i.consumable===q.BombOrPotion?Ti:void 0}}}l(Sa,"actorPayloadAfterMoveCompute");function id(e,n,o,t,r,a,i,s,u){if(e.session.checkpoint())return;let c=[{location:o,payload:a,steps:0}],p=new Uint8Array(605);p[vo(o,a)]=1;let m=0;for(;m<c.length;){let d=c[m];if(m+=1,d===void 0||e.session.checkpoint())return;if(u(d.location,d.payload))return d.steps;if(!(s!==void 0&&d.steps>=s))for(let f of ge(d.location)){let y=Sa(n,t,r,d.payload,f,i);if(y===void 0)continue;let S=vo(f,y);p[S]===0&&(p[S]=1,c.push({location:f,payload:y,steps:d.steps+1}))}}}l(id,"shortestPayloadState");var Er,Or,wi,cd=class cd{constructor(){H(this,Er);H(this,Or);H(this,wi);F(this,Er,new Uint8Array(121)),F(this,Or,new Uint8Array(121)),F(this,wi,new Uint8Array(121))}canAttackTarget(n){let o=ne(n);return(R(this,Or)[o]??0)>0||(R(this,wi)[o]??0)===0&&(R(this,Er)[o]??0)>0}immediateThreats(n){let o=ne(n);return[R(this,Er)[o]??0,R(this,Or)[o]??0]}markGuarded(n,o){R(this,wi)[ne(n)]=o?1:0}addActionThreat(n){let o=ne(n);R(this,Er)[o]=Math.min(255,(R(this,Er)[o]??0)+1)}addBombThreat(n){let o=ne(n);R(this,Or)[o]=Math.min(255,(R(this,Or)[o]??0)+1)}};Er=new WeakMap,Or=new WeakMap,wi=new WeakMap,l(cd,"AttackReachSummary");var Ar=cd;function zs(e,n,o){let t=e.findAwakeAngel(n);return t!==void 0&&se(t,o)===1}l(zs,"exactIsLocationGuardedByAngel");function Kc(e,n,o){let t=Math.abs(n.i-o.i),r=Math.abs(n.j-o.j),a=oa(n,o),i=e.squareAt(a);return(t===2&&r===0||t===0&&r===2)&&e.get(a)===void 0&&i.kind!=="supermana-base"&&i.kind!=="mon-base"}l(Kc,"demonHasLineAttack");function dS(e,n,o,t,r,a){if(!(t.kind==="mana"||e.get(r)?.kind==="mana"))return Sa(e,n,o,t,r,a)}l(dS,"exactAttackPayloadAfterMove");function KR(e,n,o){return e.squareAt(o).kind!=="mon-base"&&(Ie(o,n)||e.get(o)===void 0)}l(KR,"exactAttackActionSourceAvailable");function mS(e,n,o,t){let r;switch(n){case A.Mystic:r=ct(t);break;case A.Demon:r=lt(t);break;case A.Drainer:case A.Angel:case A.Spirit:return}let a;for(let i of r){if(!KR(e,o,i)||n===A.Demon&&e.get(oa(i,t))!==void 0)continue;let s=se(o,i);a=a===void 0?s:Math.min(a,s)}return a}l(mS,"exactAttackActionStepsLowerBound");function qR(e,n,o,t,r,a,i,s){if(a.kind==="bomb")return Math.max(se(r,n)-3,0);if(a.kind==="mana")return;let u=o?void 0:mS(e,i,r,n);if(s)for(let c of t){let p=se(r,c)+Math.max(se(c,n)-3,0);u=u===void 0?p:Math.min(u,p)}return u}l(qR,"exactAttackRemainingStepsLowerBound");function fS(e){let n=[];for(let[o,t]of e.entries())t.kind==="consumable"&&t.consumable===q.BombOrPotion&&n.push(o);return n}l(fS,"bombPickupLocations");function yS(e,n,o,t,r,a,i,s,u){if(e.session.checkpoint())return!1;if(i.kind==="mon-with-consumable"&&i.consumable===q.Bomb&&se(a,o)<=t+3)return!0;if(!r){let c=mS(n,s.kind,a,o);if(c!==void 0&&c<=t)return!0}if(i.kind==="mon-with-mana")return!1;for(let c of u){if(e.session.checkpoint())return!1;let p=se(a,c);if(!(p>t)&&se(c,o)<=t-p+3)return!0}return!1}l(yS,"exactAttackTargetPlausibleForAttacker");function zR(e,n,o,t,r,a,i){if(a<0||!i||n.get(r)===void 0||e.session.checkpoint())return!1;let s=zs(n,t,r),u=fS(n);for(let[c,p]of n.entries()){if(e.session.checkpoint())return!1;let m=z(p);if(!(m?.color!==o||$(m))&&yS(e,n,r,a,s,c,p,m,u))return!0}return!1}l(zR,"exactAttackTargetPlausibleOnBoard");function $s(e,n){let o=[];for(let[t,r]of e.entries())z(r)?.color===n&&o.push(t);return o}l($s,"attackReachSummaryTargetLocations");function Xs(e,n,o,t,r,a){let i=new Ar;if(t<0||!r||a.length===0||e.session.checkpoint())return i;for(let s of a){if(e.session.checkpoint())return new Ar;let u=n.get(s),c=u===void 0?void 0:z(u);c!==void 0&&i.markGuarded(s,zs(n,c.color,s))}for(let[s,u]of n.entries()){if(e.session.checkpoint())return new Ar;let c=z(u);if(c?.color!==o||$(c))continue;let p=u.kind!=="mon-with-mana",m=u.kind==="mon-with-consumable"&&u.consumable===q.Bomb?Ti:Xo,d=[{location:s,payload:m,steps:0}],f=new Uint8Array(605);f[vo(s,m)]=1;let y=0;for(;y<d.length;){let S=d[y];if(y+=1,S===void 0)break;if(e.session.checkpoint())return new Ar;if(!(S.steps>t)){if(S.payload.kind==="bomb")for(let C of a)se(S.location,C)<=3&&i.addBombThreat(C);if(n.squareAt(S.location).kind!=="mon-base")for(let C of a)(c.kind===A.Mystic&&Math.abs(S.location.i-C.i)===2&&Math.abs(S.location.j-C.j)===2||c.kind===A.Demon&&Kc(n,S.location,C))&&i.addActionThreat(C);if(S.steps!==t)for(let C of ge(S.location)){let b=dS(n,c.kind,c.color,S.payload,C,p);if(b===void 0)continue;let k=vo(C,b);f[k]===0&&(f[k]=1,d.push({location:C,payload:b,steps:S.steps+1}))}}}}return e.session.checkpoint()?new Ar:i}l(Xs,"attackReachSummaryForTargets");function sd(e,n,o,t,r,a){return Xs(e,n,o,r,a,$s(n,t))}l(sd,"attackReachSummary");function $R(e,n,o,t,r,a){if(e.session.checkpoint())return!1;let i=zs(n,t,r),s=fS(n);for(let[u,c]of n.entries()){if(e.session.checkpoint())return!1;let p=z(c);if(p?.color!==o||$(p)||!yS(e,n,r,a,i,u,c,p,s))continue;let m=c.kind!=="mon-with-mana",d=c.kind==="mon-with-consumable"&&c.consumable===q.Bomb?Ti:Xo,f=[{location:u,payload:d,steps:0}],y=new Uint8Array(605);y[vo(u,d)]=1;let S=0;for(;S<f.length;){let C=f[S];if(S+=1,C===void 0||e.session.checkpoint())return!1;if(C.steps>a)continue;if(C.payload.kind==="bomb"&&n.get(r)!==void 0&&se(C.location,r)<=3||n.squareAt(C.location).kind!=="mon-base"&&!i&&(p.kind===A.Mystic&&Math.abs(C.location.i-r.i)===2&&Math.abs(C.location.j-r.j)===2||p.kind===A.Demon&&Kc(n,C.location,r)))return!0;if(C.steps===a)continue;let b=qR(n,r,i,s,C.location,C.payload,p.kind,m);if(!(b!==void 0&&C.steps+b>a))for(let k of ge(C.location)){let M=dS(n,p.kind,p.color,C.payload,k,m);if(M===void 0)continue;let P=vo(k,M);y[P]===0&&(y[P]=1,f.push({location:k,payload:M,steps:C.steps+1}))}}}return!1}l($R,"canAttackTargetOnBoardUncached");function Ir(e,n,o,t,r,a,i,s){if(i<0||!s||n.get(a)===void 0||e.session.checkpoint())return!1;let u=zn(qn(t),qn(r),ne(a),i,1),c=u===void 0?void 0:Pe(e).attackReach.get(o,u);if(c!==void 0)return c;if(!zR(e,n,t,r,a,i,s))return e.session.cacheWriteAllowed&&u!==void 0&&Pe(e).attackReach.set(o,!1,u),!1;let p=$R(e,n,t,r,a,i);return e.session.cacheWriteAllowed?(u!==void 0&&Pe(e).attackReach.set(o,p,u),p):!1}l(Ir,"canAttackTargetOnBoardWithHash");function Ys(e,n,o,t){if(e.session.checkpoint())return[1,1];let r=0,a=0;for(let i of ct(t)){if(e.session.checkpoint())return[1,1];let s=n.get(i),u=s===void 0?void 0:z(s);u?.kind===A.Mystic&&u.color!==o&&!$(u)&&n.squareAt(i).kind!=="mon-base"&&(r+=1)}for(let i of lt(t)){if(e.session.checkpoint())return[1,1];let s=n.get(i),u=s===void 0?void 0:z(s);u?.kind===A.Demon&&u.color!==o&&!$(u)&&n.squareAt(i).kind!=="mon-base"&&Kc(n,i,t)&&(r+=1)}for(let i of hr(t)){if(e.session.checkpoint())return[1,1];let s=n.get(i);s?.kind==="mon-with-consumable"&&s.consumable===q.Bomb&&s.mon.color!==o&&!$(s.mon)&&n.squareAt(i).kind!=="mon-base"&&(a+=1)}return e.session.checkpoint()?[1,1]:[r,a]}l(Ys,"drainerImmediateThreats");function ud(e,n,o,t,r){if(e.session.checkpoint())return!0;let[a,i]=Ys(e,n,o,t);return e.session.checkpoint()?!0:r?i>0:a+i>0}l(ud,"isDrainerUnderImmediateThreat");function XR(e,n,o,t,r){if(e.session.checkpoint())return!1;if(r){for(let[a,i]of n.entries())if(i.kind==="mon-with-consumable"&&i.consumable===q.Bomb&&i.mon.color!==o&&!$(i.mon)&&n.squareAt(a).kind!=="mon-base"&&se(a,t)<=4)return!0;return!1}for(let[a,i]of n.entries()){if(e.session.checkpoint())return!1;let s=z(i);if(!(s===void 0||s.color===o||$(s)||n.squareAt(a).kind==="mon-base")){if(s.kind===A.Mystic||s.kind===A.Demon)for(let u=-1;u<=1;u+=1)for(let c=-1;c<=1;c+=1){if(u===0&&c===0)continue;let p={i:a.i+u,j:a.j+c};if(p.i<0||p.i>10||p.j<0||p.j>10||n.get(p)!==void 0)continue;let m=n.squareAt(p);if(!(m.kind==="mon-base"||m.kind==="supermana-base")&&(s.kind===A.Mystic&&Math.abs(p.i-t.i)===2&&Math.abs(p.j-t.j)===2||s.kind===A.Demon&&Kc(n,p,t)))return!0}if(i.kind==="mon-with-consumable"&&i.consumable===q.Bomb&&se(a,t)<=4)return!0}}return!1}l(XR,"isDrainerUnderWalkThreatUncached");function ha(e,n,o,t,r,a){if(e.session.checkpoint())return!0;let i=zn(qn(t),ne(r),a?1:0),s=i===void 0?void 0:Pe(e).walkThreat.get(o,i);if(s!==void 0)return s||e.session.checkpoint();let u=XR(e,n,t,r,a);return e.session.cacheWriteAllowed?(i!==void 0&&Pe(e).walkThreat.set(o,u,i),u):!0}l(ha,"isDrainerUnderWalkThreatWithHash");function Qs(e,n,o,t,r){if(e.session.checkpoint())return!1;let a=zs(n,t,r),i=Ir(e,n,o,X(t),t,r,le,!0);return e.session.checkpoint()?!1:!i&&!ha(e,n,o,t,r,a)&&!e.session.checkpoint()}l(Qs,"isDrainerExactlySafeNextTurnOnBoardWithHash");function ba(e,n,o,t){return Qs(e,n,yn(n),o,t)}l(ba,"isDrainerExactlySafeNextTurnOnBoard");function xr(e,n){for(let[o,t]of e.entries()){let r=z(t);if(r?.color===n&&r.kind===A.Drainer&&!$(r))return o}}l(xr,"findAwakeDrainer");function Zs(e,n,o,t){if(e.session.checkpoint())return 0;let r=zn(qn(t)),a=r===void 0?void 0:Pe(e).drainerSafety.get(o,r);if(a!==void 0)return a;let i=xr(n,t),s=0;if(i!==void 0){let u=zs(n,t,i),[c,p]=Ys(e,n,t,i),m=u?p>0:c+p>0,d=ha(e,n,o,t,i,u);s=Qs(e,n,o,t,i)?m||d?1:2:m||d?-2:-1}return e.session.cacheWriteAllowed?(r!==void 0&&Pe(e).drainerSafety.set(o,s,r),s):0}l(Zs,"exactOwnDrainerSafetyScoreWithHash");function Ca(e,n,o,t,r,a){if(e.session.checkpoint()||a!==void 0&&a<0)return;let i=zn(ne(o),Ks(t));if(i!==void 0&&Pe(e).carrierSteps.has(r,i)){let u=Pe(e).carrierSteps.get(r,i);return a===void 0||u===void 0||u<=a?u:void 0}let s=id(e,n,o,A.Drainer,w.White,{kind:"mana",mana:t},!1,a,(u,c)=>c.kind==="mana"&&n.squareAt(u).kind==="mana-pool");if(e.session.cacheWriteAllowed)return i!==void 0&&(a===void 0||s!==void 0)&&Pe(e).carrierSteps.set(r,s,i),s}l(Ca,"exactCarrierStepsToAnyPoolWithHash");function SS(e,n,o,t){if(e.session.checkpoint())return;let r=yn(n),a=zn(qn(o),ne(t));if(a!==void 0&&Pe(e).drainerToMana.has(r,a))return Pe(e).drainerToMana.get(r,a);let i=id(e,n,t,A.Drainer,o,Xo,!1,void 0,(s,u)=>u.kind==="mana");if(e.session.cacheWriteAllowed)return a!==void 0&&Pe(e).drainerToMana.set(r,i,a),i}l(SS,"exactDrainerToAnyManaSteps");function YR(e,n){if(n===void 0)return!0;let o=e.pathSteps*3-e.manaValue,t=n.pathSteps*3-n.manaValue;return o<t||o===t&&e.manaValue>n.manaValue}l(YR,"pickupPathBeats");function zc(e,n,o,t,r,a){if(e.session.checkpoint())return;let i=zn(qn(o),ne(t),r??-1);if(i!==void 0&&Pe(e).pickupPath.has(a,i))return Pe(e).pickupPath.get(a,i);let s=[{location:t,payload:Xo,steps:0}],u=new Uint8Array(605);u[vo(t,Xo)]=1;let c,p=0;for(;p<s.length;){let m=s[p];if(p+=1,m===void 0||e.session.checkpoint())return;if(!(r!==void 0&&m.steps>r)){if(m.payload.kind==="mana"&&n.squareAt(m.location).kind==="mana-pool"){let d={pathSteps:Math.max(m.steps-1,0),totalMoves:m.steps,manaValue:_e(m.payload.mana,o),mana:m.payload.mana};YR(d,c)&&(c=d)}if(!(r!==void 0&&m.steps>=r))for(let d of ge(m.location)){let f=Sa(n,A.Drainer,o,m.payload,d,!1);if(f===void 0||f.kind==="bomb")continue;let y=vo(d,f);u[y]===0&&(u[y]=1,s.push({location:d,payload:f,steps:m.steps+1}))}}}if(e.session.cacheWriteAllowed)return i!==void 0&&Pe(e).pickupPath.set(a,c,i),c}l(zc,"exactBestDrainerPickupPathWithHash");function QR(e){let n=0,o=0;for(let[,t]of e.board.entries())t.kind!=="mana"||t.mana.kind!=="regular"||(t.mana.color===w.White?n+=1:o+=1);return{hash:pe(e),whiteRegularManaCount:n,blackRegularManaCount:o}}l(QR,"secureManaStateKey");function ld(e,n,o){let t;for(let[r,a]of e.entries()){if(a.kind!=="mana"||!Je(a.mana,n))continue;let i=se(o,r);t=t===void 0?i:Math.min(t,i)}return t}l(ld,"exactDistanceToWantedManaStepsLowerBound");function hS(e,n,o,t){if(e.session.checkpoint())return;let r=n.fork(),a=r.processInput([{kind:"location",location:o},{kind:"location",location:t}],!1,!1);if(a.kind!=="events")return;let i=a.events.find(s=>s.kind==="mana-scored");return{after:r,scoredMana:i?.kind==="mana-scored"?i.mana:void 0}}l(hS,"applySecureDrainerWalk");function ZR(e,n,o,t){let r=QR(e);return{hash:r.hash,tag:zn(r.whiteRegularManaCount,r.blackRegularManaCount,qn(n),Ks(t),ne(o))}}l(ZR,"secureSpecificManaQueryKey");function JR(e,n,o,t,r,a){if(e.session.checkpoint())return;let i=n.board.get(t),s=i?.kind==="mon-with-mana"&&Je(i.mana,r);if(s&&ba(e,n.board,o,t))return 0;if(n.activeColor!==o||!n.playerCanMoveMon())return;let u=Math.max(le-n.monsMovesCount,0);if(!s){let p=ld(n.board,r,t);if(p===void 0||p>u)return}let c;for(let p of ge(t)){if(e.session.checkpoint())return;if(!s){let f=n.board.get(p);if(!(f?.kind==="mana"&&Je(f.mana,r))){let S=ld(n.board,r,p);if(S===void 0||S>u-1)continue}}let m=hS(e,n,t,p);if(e.session.checkpoint())return;if(m===void 0)continue;let d;if(m.scoredMana!==void 0&&Je(m.scoredMana,r))d=1;else{let f=xr(m.after.board,o);if(f===void 0)continue;let y=qc(e,m.after,o,f,r,a);if(e.session.checkpoint())return;y!==void 0&&(d=y+1)}if(d!==void 0&&(c===void 0||d<c)&&(c=d,d===1))break}return c}l(JR,"secureSpecificManaStepsInGameUncached");function qc(e,n,o,t,r,a){if(e.session.checkpoint())return;let i=ZR(n,o,t,r);if(i.tag!==void 0&&Pe(e).secureMana.has(i.hash,i.tag))return Pe(e).secureMana.get(i.hash,i.tag);if(i.tag!==void 0&&a.has(i.hash,i.tag))return;i.tag!==void 0&&a.add(i.hash,i.tag);let s;try{s=JR(e,n,o,t,r,a)}finally{i.tag!==void 0&&a.delete(i.hash,i.tag)}if(e.session.cacheWriteAllowed)return i.tag!==void 0&&Pe(e).secureMana.set(i.hash,s,i.tag),s}l(qc,"secureSpecificManaStepsInGame");function vi(e,n,o,t,r){if(r<0||e.session.checkpoint())return;let a=xr(n,o);if(a===void 0)return;let i=n.get(a);if(!(i?.kind==="mon-with-mana"&&Je(i.mana,t))){let p=ld(n,t,a);if(p===void 0||p>r)return}let u=Math.max(0,Math.min(le,le-r)),c=To.newSimulationState({board:n.fork(),whiteScore:0,blackScore:0,activeColor:o,actionsUsedCount:Fn,manaMovesCount:0,monsMovesCount:u,whitePotionsCount:0,blackPotionsCount:0,turnNumber:2});return qc(e,c,o,a,t,new wo(Pi))}l(vi,"exactSecureSpecificManaStepsOnBoard");function Js(e,n,o,t,r){if(e.session.checkpoint())return;let a=n.fork(),i=t,s=qc(e,a,o,i,r,new wo(Pi));if(s===void 0||e.session.checkpoint())return;let u=[];for(;s>0;){let c;for(let p of ge(i)){if(e.session.checkpoint())return;let m=hS(e,a,i,p);if(e.session.checkpoint())return;if(m===void 0)continue;if(s===1&&m.scoredMana!==void 0&&Je(m.scoredMana,r)){c={next:p,after:m.after,steps:0};break}let d=xr(m.after.board,o);if(d===void 0)continue;let f=qc(e,m.after,o,d,r,new wo(Pi));if(e.session.checkpoint())return;if(f===s-1){c={next:p,after:m.after,steps:f};break}}if(c===void 0)return;u.push(c.next),a=c.after,i=c.next,s=c.steps}return u}l(Js,"exactSecureSpecificManaPathFrom");function eu(e,n,o){if(e.session.checkpoint())return;let t=yn(n),r;for(let[a,i]of n.entries()){if(e.session.checkpoint())return;let s=z(i);if(s?.color!==o||$(s))continue;let u;i.kind==="mon-with-mana"?u=Ca(e,n,a,i.mana,t):(i.kind==="mon"||i.kind==="mon-with-consumable")&&s.kind===A.Drainer&&(u=zc(e,n,o,a,void 0,t)?.totalMoves),u!==void 0&&(r=r===void 0?u:Math.min(r,u))}return e.session.checkpoint()?void 0:r}l(eu,"exactBestScoreStepsOnBoard");function pd(e,n,o,t){if(t<0||e.session.checkpoint())return 0;let r=yn(n),a=0;for(let[i,s]of n.entries()){if(e.session.checkpoint())return 0;let u=z(s);if(!(u?.color!==o||$(u))){if(s.kind==="mon-with-mana")Ca(e,n,i,s.mana,r,t)!==void 0&&(a=Math.max(a,_e(s.mana,o)));else if((s.kind==="mon"||s.kind==="mon-with-consumable")&&u.kind===A.Drainer){let c=zc(e,n,o,i,t,r);c!==void 0&&(a=Math.max(a,c.manaValue))}if(a>=2)return a}}return a}l(pd,"exactBestImmediateScoreOnBoard");var bS=6;function kS(e,n,o,t,r){if(r<0||e.session.checkpoint())return[];let a=yn(n),i=zn(ne(o),qn(t),r),s=i===void 0?void 0:Pe(e).spiritReach.get(a,i);if(s!==void 0)return s;let u=[],c=[[o,0]],p=new Uint8Array(121);p[ne(o)]=1;let m=0;for(;m<c.length;){let f=c[m];if(m+=1,f===void 0||e.session.checkpoint())return[];let[y,S]=f;if(u.push([y,S]),!(S>=r))for(let C of ge(y)){if(e.session.checkpoint())return[];let b=ne(C);if(p[b]!==0)continue;let k=n.get(C),M=n.squareAt(C),P=!1;k===void 0?P=M.kind==="regular"||M.kind==="consumable-base"||M.kind==="mana-base"||M.kind==="mana-pool"||M.kind==="mon-base"&&M.monKind===A.Spirit&&M.color===t:P=k.kind==="consumable"&&k.consumable===q.BombOrPotion,P&&(p[b]=1,c.push([C,S+1]))}}if(!e.session.cacheWriteAllowed)return[];let d=Object.freeze(u.map(([f,y])=>Object.freeze([f,y])));return i!==void 0&&Pe(e).spiritReach.set(a,d,i),d}l(kS,"reachableSpiritPositions");function RS(e,n,o){let t=e.get(o),r=z(n),a=no(n),i;if(t===void 0)i=!0;else switch(t.kind){case"mon":n.kind==="mana"?i=t.mon.kind===A.Drainer&&!$(t.mon):n.kind==="consumable"?i=n.consumable===q.BombOrPotion:i=!1;break;case"mana":i=r?.kind===A.Drainer&&!$(r);break;case"mon-with-mana":case"mon-with-consumable":i=n.kind==="consumable"&&n.consumable===q.BombOrPotion;break;case"consumable":i=t.consumable===q.BombOrPotion&&(n.kind==="mon"||n.kind==="mon-with-mana"||n.kind==="mon-with-consumable");break}if(!i)return!1;let s=e.squareAt(o);switch(s.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":return a?.kind==="supermana"||a===void 0&&r?.kind===A.Drainer;case"mon-base":return r?.kind===s.monKind&&r.color===s.color&&a===void 0&&ia(n)===void 0}}l(RS,"spiritDestinationAllowed");function PS(e,n,o,t,r){if(t<0||!r||e.session.checkpoint())return en();let a=en();for(let[i,s]of n.entries()){if(e.session.checkpoint())return en();let u=z(s);if(!(u?.color!==o||u.kind!==A.Spirit||$(u)))for(let[c]of kS(e,n,i,o,t)){if(e.session.checkpoint())return en();if(n.squareAt(c).kind==="mon-base")continue;let p=0,m=0,d=!1,f=!1;for(let S of pt(c)){let C=n.get(S);if(!(C===void 0||!zt(C)||!ge(S).some(b=>RS(n,C,b))))if(p+=1,C.kind==="mana")C.mana.kind==="supermana"?(d=!0,m=Math.max(m,2)):C.mana.color===X(o)&&(f=!0,m=Math.max(m,2));else{let b=z(C);b?.color===o&&b.kind===A.Drainer&&!$(b)?m=Math.max(m,2):b!==void 0&&b.color!==o&&!$(b)&&(m=Math.max(m,1))}}let y=Math.max(Math.min(p,bS),Math.min(1+m,bS));a={...a,utility:Math.max(a.utility,y),nextTurnSetupGain:y>a.utility?m:y===a.utility?Math.max(a.nextTurnSetupGain,m):a.nextTurnSetupGain,supermanaProgress:a.supermanaProgress||d,opponentManaProgress:a.opponentManaProgress||f}}}return e.session.checkpoint()?en():a}l(PS,"exactPassiveSpiritSummary");function eP(e,n,o,t,r,a,i,s){if(!i&&!s||e.session.checkpoint())return{bestScore:0,bestOpponentManaScore:0};let u=i?_e({kind:"supermana"},o):0,c=s?_e({kind:"regular",color:X(o)},o):0,p=[{location:t,payload:Xo,steps:0}],m=new Uint8Array(605);m[vo(t,Xo)]=1;let d=0,f=0,y=0;for(;y<p.length;){let S=p[y];if(y+=1,S===void 0||e.session.checkpoint())return{bestScore:0,bestOpponentManaScore:0};if(S.payload.kind==="mana"&&n.squareAt(S.location).kind==="mana-pool"){let C=_e(S.payload.mana,o);if(i&&C>=a&&(d=Math.max(d,C)),s&&S.payload.mana.kind==="regular"&&S.payload.mana.color===X(o)&&(f=Math.max(f,C)),(!i||d>=u)&&(!s||f>=c))return{bestScore:d,bestOpponentManaScore:f}}if(!(S.steps>=r))for(let C of ge(S.location)){if(e.session.checkpoint())return{bestScore:0,bestOpponentManaScore:0};let b=Sa(n,A.Drainer,o,S.payload,C,!1);if(b===void 0||b.kind==="bomb")continue;let k=vo(C,b);m[k]===0&&(m[k]=1,p.push({location:C,payload:b,steps:S.steps+1}))}}return{bestScore:d,bestOpponentManaScore:f}}l(eP,"exactDrainerImmediateTacticalWindow");function CS(e,n,o,t,r,a,i=1){if(t<0||!r&&!a||e.session.checkpoint())return{bestScore:0,bestOpponentManaScore:0};let s=r?Math.max(i,1):0,u={kind:"regular",color:X(o)},c=r?_e({kind:"supermana"},o):0,p=a?_e(u,o):0,m=yn(n),d=0,f=0;for(let[y,S]of n.entries()){if(e.session.checkpoint())return{bestScore:0,bestOpponentManaScore:0};let C=z(S);if(!(C?.color!==o||$(C))){if(S.kind==="mon-with-mana"){let b=_e(S.mana,o),k=r&&b>=s,M=a&&Je(S.mana,u);if(!k&&!M)continue;let P=Ca(e,n,y,S.mana,m,t);if(e.session.checkpoint())return{bestScore:0,bestOpponentManaScore:0};if(P===void 0)continue;k&&(d=Math.max(d,b)),M&&(f=Math.max(f,b))}else if(C.kind===A.Drainer&&(S.kind==="mon"||S.kind==="mon-with-consumable")){let b=eP(e,n,o,y,t,s,r,a);if(e.session.checkpoint())return{bestScore:0,bestOpponentManaScore:0};r&&(d=Math.max(d,b.bestScore)),a&&(f=Math.max(f,b.bestOpponentManaScore))}if((!r||d>=c)&&(!a||f>=p))return{bestScore:d,bestOpponentManaScore:f}}}return e.session.checkpoint()?{bestScore:0,bestOpponentManaScore:0}:{bestScore:d,bestOpponentManaScore:f}}l(CS,"exactBestImmediateTacticalWindow");function nP(e,n,o,t,r){let a=e.get(n),i=e.get(t),s={from:n,fromItem:a,to:t,toItem:i},u=e.squareAt(t);e.delete(n);let c=o;o.kind==="mon"&&i?.kind==="mana"?c=mt(o.mon,i.mana):o.kind==="mana"&&i?.kind==="mon"?c=mt(i.mon,o.mana):o.kind==="mon-with-mana"&&i?.kind==="mana"?(e.set(n,{kind:"mana",mana:o.mana}),c=mt(o.mon,i.mana)):o.kind==="consumable"&&i?.kind==="mon"?c=Xn(i.mon):o.kind==="mon"&&i?.kind==="consumable"?c=Xn(o.mon):o.kind==="mon-with-mana"&&i?.kind==="consumable"?c=mt(o.mon,o.mana):o.kind==="mon-with-consumable"&&i?.kind==="consumable"&&(c={kind:"mon-with-consumable",mon:o.mon,consumable:q.Bomb});let p=0,m=0,d=no(c);if(u.kind==="mana-pool"&&d!==void 0){p=_e(d,r),d.kind==="regular"&&d.color===X(r)&&(m=p);let f=z(c);if(f===void 0)return e.delete(t),{undo:s,scoreDelta:p,opponentManaScoreDelta:m};c=Xn(f)}return e.set(t,c),{undo:s,scoreDelta:p,opponentManaScoreDelta:m}}l(nP,"applySpiritMovePreviewInPlace");function oP(e,n){n.fromItem===void 0?e.delete(n.from):e.set(n.from,n.fromItem),n.toItem===void 0?e.delete(n.to):e.set(n.to,n.toItem)}l(oP,"undoSpiritMovePreview");var gi=1,Ai=2,nu=4,MS=gi|Ai|nu;function tP(e,n){let o=(n&gi)!==0,t=(n&Ai)!==0,r=(n&nu)!==0;return{...en(),sameTurnScore:o&&e.sameTurnScore,sameTurnScoreValue:o?e.sameTurnScoreValue:0,sameTurnOpponentManaScore:t&&e.sameTurnOpponentManaScore,sameTurnOpponentManaScoreValue:t?e.sameTurnOpponentManaScoreValue:0,supermanaProgress:r&&e.supermanaProgress,opponentManaProgress:r&&e.opponentManaProgress}}l(tP,"tacticalSpiritSummaryForFields");function dd(e,n,o,t,r,a){if(a&=MS,t<0||a===0||!r||e.session.checkpoint())return en();let i=yn(n),s=zn(qn(o),t,Number(r),a),u=s===void 0?void 0:Pe(e).spiritTacticalSummary.get(i,s);if(u!==void 0)return u;for(let p=1;p<=MS;p+=1){if(p===a||(p&a)!==a)continue;let m=zn(qn(o),t,Number(r),p),d=m===void 0?void 0:Pe(e).spiritTacticalSummary.get(i,m);if(d===void 0)continue;let f=tP(d,a);return e.session.cacheWriteAllowed?(s!==void 0&&Pe(e).spiritTacticalSummary.set(i,f,s),f):en()}let c=rP(e,n,o,t,r,a);return e.session.cacheWriteAllowed?(s!==void 0&&Pe(e).spiritTacticalSummary.set(i,c,s),c):en()}l(dd,"exactTacticalSpiritSummary");function rP(e,n,o,t,r,a){if(!r||e.session.checkpoint())return en();let i=(a&gi)!==0,s=(a&Ai)!==0,u=(a&nu)!==0,c=CS(e,n,o,t,i,s);if(e.session.checkpoint())return en();let p=i?_e({kind:"supermana"},o):0,m=s?_e({kind:"regular",color:X(o)},o):0,d=en(),f=new Ee(jc);for(let[y,S]of n.entries()){if(e.session.checkpoint())return en();let C=z(S);if(!(C?.color!==o||C.kind!==A.Spirit||$(C)))for(let[b,k]of kS(e,n,y,o,t)){if(e.session.checkpoint())return en();if(n.squareAt(b).kind==="mon-base")continue;let M=n.fork();Ie(b,y)||(M.delete(y),M.set(b,S));let P=t-k;for(let T of pt(b)){if(e.session.checkpoint())return en();let v=M.get(T);if(!(v===void 0||!zt(v)))for(let I of ge(T)){if(e.session.checkpoint())return en();if(!RS(M,v,I))continue;let E=nP(M,T,v,I,o);try{if(e.session.checkpoint())return en();let x=Math.max(d.sameTurnScoreValue,c.bestScore,E.scoreDelta),N=Math.max(d.sameTurnOpponentManaScoreValue,c.bestOpponentManaScore,E.opponentManaScoreDelta),B=i&&x<p,W=s&&N<m,V={bestScore:0,bestOpponentManaScore:0};if(B||W){let ce=B?x+1:1,Ae=yn(M),ln=zn(qn(o),P,ce,Number(B),Number(W)),pn=ln===void 0?void 0:f.get(Ae,ln);if(pn!==void 0)V=pn;else{if(V=CS(e,M,o,P,B,W,ce),e.session.checkpoint())return en();ln!==void 0&&f.set(Ae,V,ln)}}if(e.session.checkpoint())return en();let Q=Math.max(E.scoreDelta,V.bestScore),U=Math.max(E.opponentManaScoreDelta,V.bestOpponentManaScore);if(i&&(E.scoreDelta>0||Q>c.bestScore)&&(d={...d,sameTurnScore:!0,sameTurnScoreValue:Math.max(d.sameTurnScoreValue,Q)}),s&&(E.opponentManaScoreDelta>0||U>c.bestOpponentManaScore)&&(d={...d,sameTurnOpponentManaScore:!0,sameTurnOpponentManaScoreValue:Math.max(d.sameTurnOpponentManaScoreValue,U)}),u&&!d.supermanaProgress){let Ae=v.kind==="mana"&&v.mana.kind==="supermana"&&E.scoreDelta>0;if(!Ae&&(Ae=vi(e,M,o,{kind:"supermana"},P)!==void 0,e.session.checkpoint()))return en();Ae&&(d={...d,supermanaProgress:!0})}if(u&&!d.opponentManaProgress){let ce=E.opponentManaScoreDelta>0;if(!ce&&(ce=vi(e,M,o,{kind:"regular",color:X(o)},P)!==void 0,e.session.checkpoint()))return en();ce&&(d={...d,opponentManaProgress:!0})}if(e.session.checkpoint())return en();if((!i||d.sameTurnScoreValue>=p)&&(!s||d.sameTurnOpponentManaScoreValue>=m)&&(!u||d.supermanaProgress&&d.opponentManaProgress))return d}finally{oP(M,E.undo)}}}}}return e.session.checkpoint()?en():d}l(rP,"exactTacticalSpiritSummaryUncached");function aP(e){let n=e[1],o=e[2];return(n===void 0?0:Math.trunc(70/Math.max(n,1)))+(o===void 0?0:Math.trunc(40/Math.max(o,1)))}l(aP,"multiPressureFromSteps");function iP(e){return(e[1]??0)*70+(e[2]??0)*35}l(iP,"multiPressureFromScores");function TS(e,n,o){if(e.session.checkpointWithReserve(20))return yt();let t=n.activeColor===o?Math.max(le-n.monsMovesCount,0):le,r=n.activeColor===o?n.playerCanUseAction():!0,a=yn(n.board),i=[],s;for(let[y,S]of n.board.entries()){if(e.session.checkpoint())return yt();if(S.kind!=="mon-with-mana"||S.mon.color!==o||$(S.mon))continue;let C=Ca(e,n.board,y,S.mana,a);C!==void 0&&(s=s===void 0?C:Math.min(s,C),i.push(C))}let u=xr(n.board,o),c=u===void 0?void 0:zc(e,n.board,o,u,void 0,a);if(e.session.checkpointWithReserve(20))return yt();let p=u===void 0?void 0:SS(e,n.board,o,u);c!==void 0&&i.push(c.totalMoves),i.sort((y,S)=>y-S);let m=i.filter((y,S)=>S===0||i[S-1]!==y),d=[];for(let[y,S]of n.board.entries()){if(e.session.checkpoint())return yt();if(S.kind!=="mon-with-mana"||S.mon.color!==o||$(S.mon))continue;let C=Ca(e,n.board,y,S.mana,a,t);C!==void 0&&C<=t&&d.push(_e(S.mana,o))}c!==void 0&&c.totalMoves<=t&&d.push(c.manaValue);let f=PS(e,n.board,o,t,r);return e.session.checkpointWithReserve(20)?yt():(d.sort((y,S)=>S-y),{scorePathWindow:{bestSteps:m[0],multiPressure:aP(m)},immediateWindow:{bestScore:d[0]??0,multiPressure:iP(d)},bestDrainerPickup:c,bestCarrierSteps:s,bestDrainerToManaSteps:p,spirit:f})}l(TS,"buildColorSummary");function sP(e,n){if(e.session.checkpointWithReserve(20))return new Et;let o=TS(e,n,w.White);if(e.session.checkpointWithReserve(20))return new Et;let t=TS(e,n,w.Black);return e.session.checkpointWithReserve(20)?new Et:new Et(o,t)}l(sP,"buildExactStrategicAnalysis");function Ma(e,n,o){if(e.session.checkpointWithReserve(20))return new Et;let t=Pe(e).strategicAnalysis.get(o);if(t!==void 0)return t;let r=sP(e,n);return e.session.cacheWriteAllowed?(Pe(e).strategicAnalysis.set(o,r),r):new Et}l(Ma,"exactStrategicAnalysisWithSearchHash");function ka(e,n){return Ma(e,n,pe(n))}l(ka,"exactStrategicAnalysis");function $c(e,n,o,t){let r=n.activeColor===o?Math.max(le-n.monsMovesCount,0):le;return vi(e,n.board,o,t,r)}l($c,"exactSecureSpecificManaStepsThisTurn");function wS(e,n,o,t){let r=xr(n.board,X(o));return r===void 0?!1:Ir(e,n.board,t,o,X(o),r,n.activeColor===o?Math.max(le-n.monsMovesCount,0):le,n.activeColor===o?n.playerCanUseAction():!0)}l(wS,"canAttackOpponentDrainerExactWithHash");function uP(e,n){let o=(n&Tr)!==0,t=(n&wr)!==0,r=(n&ma)!==0,a=(n&fa)!==0,i=(n&Ot)!==0,s=i&&(t||a),u=r||i,c=a||s,p=o?e.safeSupermanaProgressSteps:void 0,m=t?e.safeOpponentManaProgressSteps:void 0,d=c&&e.spiritAssistedDenial;return{safeSupermanaProgress:p!==void 0,safeSupermanaProgressSteps:p,safeOpponentManaProgress:m!==void 0||d,safeOpponentManaProgressSteps:m,spiritAssistedScore:u&&e.spiritAssistedScore,spiritAssistedScoreValue:u?e.spiritAssistedScoreValue:0,spiritAssistedDenial:d,spiritAssistedDenialValue:c?e.spiritAssistedDenialValue:0,sameTurnScoreWindowValue:i?e.sameTurnScoreWindowValue:0}}l(uP,"turnTacticalProjectionForFlags");function cP(e,n,o){if(e.session.checkpointWithReserve(20))return It();let t=n.activeColor,r=Math.max(le-n.monsMovesCount,0),a=(o&Tr)!==0,i=(o&wr)!==0,s=(o&ma)!==0,u=(o&fa)!==0,c=(o&Ot)!==0,p=c&&(i||u),m=0;(s||c)&&(m|=gi),(u||p)&&(m|=Ai);let d=m===0?en():dd(e,n.board,t,r,n.playerCanUseAction(),m);if(e.session.checkpointWithReserve(20))return It();let f=a?$c(e,n,t,{kind:"supermana"}):void 0;if(e.session.checkpointWithReserve(20))return It();let y=i?$c(e,n,t,{kind:"regular",color:X(t)}):void 0;if(e.session.checkpointWithReserve(20))return It();let S=c?Math.max(pd(e,n.board,t,r),d.sameTurnScoreValue,p?d.sameTurnOpponentManaScoreValue:0):0;return e.session.checkpointWithReserve(20)?It():{safeSupermanaProgress:f!==void 0,safeSupermanaProgressSteps:f,safeOpponentManaProgress:y!==void 0||d.sameTurnOpponentManaScore,safeOpponentManaProgressSteps:y,spiritAssistedScore:d.sameTurnScore,spiritAssistedScoreValue:d.sameTurnScoreValue,spiritAssistedDenial:d.sameTurnOpponentManaScore,spiritAssistedDenialValue:d.sameTurnOpponentManaScoreValue,sameTurnScoreWindowValue:S}}l(cP,"buildExactTurnTacticalProjection");function Yo(e,n,o,t,r){if(r===0||n.activeColor!==o||e.session.checkpointWithReserve(20))return It();let a=Math.max(le-n.monsMovesCount,0),i=zn(qn(o),a,n.playerCanUseAction()?1:0,r),s=i===void 0?void 0:Pe(e).turnTacticalProjection.get(t,i);if(s!==void 0)return s;for(let c=1;c<=Mi;c+=1){if(c===r||(c&r)!==r)continue;let p=zn(qn(o),a,n.playerCanUseAction()?1:0,c),m=p===void 0?void 0:Pe(e).turnTacticalProjection.get(t,p);if(m!==void 0){let d=uP(m,r);return e.session.cacheWriteAllowed?(i!==void 0&&Pe(e).turnTacticalProjection.set(t,d,i),d):It()}}let u=cP(e,n,r);return e.session.cacheWriteAllowed?(i!==void 0&&Pe(e).turnTacticalProjection.set(t,u,i),u):It()}l(Yo,"exactTurnTacticalProjectionWithSearchHash");function md(e,n,o,t){return Yo(e,n,o,t,Ot).sameTurnScoreWindowValue}l(md,"exactSameTurnScoreWindowWithSearchHash");function lP(e,n){if(e.session.checkpointWithReserve(20))return vr();let o=n.activeColor,t=Math.max(le-n.monsMovesCount,0),r=dd(e,n.board,o,t,n.playerCanUseAction(),gi|Ai|nu);if(e.session.checkpointWithReserve(20))return vr();let a=$c(e,n,o,{kind:"supermana"});if(e.session.checkpointWithReserve(20))return vr();let i=$c(e,n,o,{kind:"regular",color:X(o)});if(e.session.checkpointWithReserve(20))return vr();let s=Math.max(pd(e,n.board,o,t),r.sameTurnScoreValue,r.sameTurnOpponentManaScoreValue),u=yn(n.board),c={canAttackOpponentDrainer:wS(e,n,o,u),safeSupermanaProgress:a!==void 0,safeSupermanaProgressSteps:a,safeOpponentManaProgress:i!==void 0||r.sameTurnOpponentManaScore,safeOpponentManaProgressSteps:i,spiritAssistedSupermanaProgress:r.supermanaProgress,spiritAssistedOpponentManaProgress:r.opponentManaProgress,spiritAssistedScore:r.sameTurnScore,spiritAssistedDenial:r.sameTurnOpponentManaScore,sameTurnScoreWindowValue:s,scorePathBestSteps:eu(e,n.board,o)};return e.session.checkpointWithReserve(20)?vr():c}l(lP,"buildExactTurnSummary");function vS(e,n,o,t){if(n.activeColor!==o||e.session.checkpointWithReserve(20))return vr();let r=Pe(e).turnSummary.get(t);if(r!==void 0)return r;let a=lP(e,n);return e.session.cacheWriteAllowed?(Pe(e).turnSummary.set(t,a),a):vr()}l(vS,"exactTurnSummaryWithSearchHash");function Xc(e,n,o){return vS(e,n,o,pe(n))}l(Xc,"exactTurnSummary");function fd(e,n,o){return Xc(e,n,o).canAttackOpponentDrainer}l(fd,"canAttackOpponentDrainerThisTurn");function Ra(e,n,o,t){if(n.activeColor!==o||e.session.checkpointWithReserve(20))return Xt();let r={remainingMonMoves:Math.max(le-n.monsMovesCount,0),canUseAction:n.playerCanUseAction(),canMoveMana:n.playerCanMoveMana()},a=yn(n.board),i=Yo(e,n,o,t,Mi);if(e.session.checkpointWithReserve(20))return Xt();let s=Zs(e,n.board,a,o);if(e.session.checkpointWithReserve(20))return Xt();let u=X(o),c=u===w.White?n.whiteScore:n.blackScore,p=Math.max(xe-c,0),m=Ma(e,n,t).colorSummary(u).immediateWindow.bestScore;if(e.session.checkpointWithReserve(20))return Xt();let d=p>0&&m>=p,f=p>0&&i.sameTurnScoreWindowValue>0?Math.min(i.sameTurnScoreWindowValue,p):0,y={budget:r,turn:i,delta:{sameTurnScoreWindowValue:i.sameTurnScoreWindowValue,spiritGain:Math.max(i.spiritAssistedScoreValue,i.spiritAssistedDenialValue),opponentWindowDenyGain:f,drainerAttackAvailable:wS(e,n,o,a),drainerSafety:s,safeSupermanaProgressSteps:i.safeSupermanaProgressSteps,safeOpponentManaProgressSteps:i.safeOpponentManaProgressSteps},opponentCanWinImmediately:d};return e.session.checkpointWithReserve(20)?Xt():y}l(Ra,"exactOpportunityContextWithSearchHash");function he(e,n,o){return Ra(e,n,o,pe(n))}l(he,"exactOpportunityContext");var pP=2500,dP=2500,mP=9200,fP=2,yd=new Set(ca.map(ne));function yP(e,n){let o=e.kind!=="mon-with-mana"&&(n.kind===A.Mystic||n.kind===A.Demon||e.kind==="mon-with-consumable"),t=n.kind===A.Mystic||n.kind===A.Demon,r=e.kind==="mon-with-consumable"&&e.consumable===q.Bomb;return[o,t,r]}l(yP,"scoringDangerSourceFlags");function SP(e){let n={manaEntries:[],liveManaCarriers:[[],[]],liveMonLocations:[[],[]],liveDrainerLocations:[[],[]],liveAngelLocations:[[],[]],dangerSources:[[],[]],looseConsumableLocations:[],regularManaMoveScores:[0,0],regularManaScorePathSteps:[void 0,void 0]};for(let[o,t]of e.entries())switch(t.kind){case"mana":{let r=ht(o,{kind:"any-closest-pool"})-1;if(n.manaEntries.push({location:o,mana:t.mana}),t.mana.kind==="regular"){let a=Zn(t.mana.color),i=r+1,s=n.regularManaScorePathSteps[a];n.regularManaScorePathSteps[a]=s===void 0?i:Math.min(s,i),r<=1&&(n.regularManaMoveScores[a]=_e(t.mana,t.mana.color))}break}case"mon":case"mon-with-mana":case"mon-with-consumable":{let r=t.mon;if($(r))break;let a=Zn(r.color);t.kind==="mon-with-mana"&&n.liveManaCarriers[a].push({location:o,mana:t.mana}),n.liveMonLocations[a].push(o),r.kind===A.Drainer&&n.liveDrainerLocations[a].push(o),r.kind===A.Angel&&n.liveAngelLocations[a].push(o);let[i,s,u]=yP(t,r);(i||s||u)&&n.dangerSources[a].push({location:o,heuristicThreat:i,exactActionThreat:s,exactBombThreat:u});break}case"consumable":n.looseConsumableLocations.push(o);break}return n}l(SP,"scoringBoardSummary");function hP(e){return!e.exactDangerThreat&&!e.walkThreat}l(hP,"exactSafe");function gS(e){return e.angelNearby&&!e.exactDangerThreat}l(gS,"guardedAgainstExactAttack");var St,Ei,Qn,Oi,Ii,xi,ou,Pa,tu,ru,au,iu,Ni,Di,su,Dt,WS,BS,Qc,Cd=class Cd{constructor(n,o,t){H(this,Dt);H(this,St);H(this,Ei);H(this,Qn);H(this,Oi);H(this,Ii);H(this,xi);H(this,ou);H(this,Pa);H(this,tu);H(this,ru);H(this,au);H(this,iu);H(this,Ni);H(this,Di);H(this,su,new Map);F(this,St,n),F(this,Ei,o),F(this,Qn,o.board),F(this,Oi,yn(R(this,Qn))),F(this,Ii,t.allowExactStrategic),F(this,xi,t.useAttackReachSummary??!1),F(this,ou,t.narrowAttackReachTargets??!1),F(this,Pa,t.narrowAttackReachToDrainers??!1),F(this,Di,Array.from({length:242},()=>{}))}get boardHash(){return R(this,Oi)}get execution(){return R(this,St)}get game(){return R(this,Ei)}get board(){return R(this,Qn)}get allowExactStrategic(){return R(this,Ii)}boardSummary(){return R(this,tu)??F(this,tu,SP(R(this,Qn))),R(this,tu)}manaPathSnapshot(){return R(this,ru)??F(this,ru,RP(this.boardSummary())),R(this,ru)}exactAnalysis(){if(R(this,Ii))return R(this,au)??F(this,au,ka(R(this,St),R(this,Ei))),R(this,au)}drainerImmediateThreats(n,o){if(R(this,xi))return K(this,Dt,Qc).call(this,X(n),n,0,!0,R(this,Pa)).immediateThreats(o);let t=ne(o)+(n===w.Black?121:0),r=R(this,Di)[t];if(r!==void 0)return r;let a=Ys(R(this,St),R(this,Qn),n,o);return R(this,Di)[t]=a,a}canAttackTargetOnBoard(n,o,t,r,a){if(R(this,xi)){let i=R(this,Qn).get(t),s=i===void 0?void 0:z(i);if(R(this,Pa)&&s?.color===o&&s.kind===A.Drainer)return K(this,Dt,Qc).call(this,n,o,r,a,!0).canAttackTarget(t);if(!R(this,Pa))return K(this,Dt,Qc).call(this,n,o,r,a,!1).canAttackTarget(t)}return Ir(R(this,St),R(this,Qn),R(this,Oi),n,o,t,r,a)}};St=new WeakMap,Ei=new WeakMap,Qn=new WeakMap,Oi=new WeakMap,Ii=new WeakMap,xi=new WeakMap,ou=new WeakMap,Pa=new WeakMap,tu=new WeakMap,ru=new WeakMap,au=new WeakMap,iu=new WeakMap,Ni=new WeakMap,Di=new WeakMap,su=new WeakMap,Dt=new WeakSet,WS=l(function(n){return R(this,iu)??F(this,iu,[$s(R(this,Qn),w.White),$s(R(this,Qn),w.Black)]),R(this,iu)[Zn(n)]},"#targets"),BS=l(function(n){if(R(this,Ni)===void 0){let o=[],t=[];for(let[r,a]of R(this,Qn).entries()){let i=z(a);i?.kind===A.Drainer&&(i.color===w.White?o:t).push(r)}F(this,Ni,[o,t])}return R(this,Ni)[Zn(n)]},"#drainerTargets"),Qc=l(function(n,o,t,r,a){let i=Number.isInteger(t)&&t>=0&&t<=65535?t*16+on(n)+on(o)*2+Number(r)*4+Number(a)*8:void 0;if(i!==void 0){let u=R(this,su).get(i);if(u!==void 0)return u}let s;return a?s=Xs(R(this,St),R(this,Qn),n,t,r,K(this,Dt,BS).call(this,o)):R(this,ou)?s=Xs(R(this,St),R(this,Qn),n,t,r,K(this,Dt,WS).call(this,o)):s=sd(R(this,St),R(this,Qn),n,o,t,r),i!==void 0&&R(this,su).set(i,s),s},"#attackReachSummary"),l(Cd,"ScoringEvalContext");var bd=Cd;function Dr(e,n,o,t,r){let a=new bd(e,n,{allowExactStrategic:r});return bP(a,o,t)}l(Dr,"evaluatePreferabilityWithWeightsAndExactPolicy");function bP(e,n,o){let t=e.game,r=e.allowExactStrategic?o.formula.useHeuristicFormula:!0,a=o.formula.includeRegularManaMoveWindows&&!r,i=o.formula.includeMatchPointWindow&&!r,s=Math.min(2e4,Math.max(0,Math.trunc(o.formula.nextTurnWindowScaleBp))),u=t.board.supermanaBase(),c=Math.max(0,le-t.monsMovesCount),p=r?void 0:e.exactAnalysis(),m=p?.colorSummary(n),d=p?.colorSummary(X(n)),f=n===w.White?t.whiteScore:t.blackScore,y=n===w.White?t.blackScore:t.whiteScore,S=n===w.White?t.whiteScore-t.blackScore:t.blackScore-t.whiteScore,C=n===w.White?t.whitePotionsCount-t.blackPotionsCount:t.blackPotionsCount-t.whitePotionsCount,b=S*o.material.confirmedScore+C*o.material.hasConsumable;return o.formula.doubleConfirmedScore&&(b=b*o.material.confirmedScore),b=CP(n,o,e,r,u,c,p,m,d,b),b=MP(n,o,e,r,a,m,d,b),Gc(kP(n,o,e,r,a,i,s,c,m,d,f,y,b))}l(bP,"evaluatePreferabilityWithContext");function CP(e,n,o,t,r,a,i,s,u,c){let p=o.game,m=c,d=l(b=>{m=m+b},"addScore"),f=l((b,k)=>{d(b*k)},"addSigned"),y=l((b,k,M)=>{d(Math.trunc(b*k/M))},"addSignedRatio"),S=l((b,k,M,P)=>{let T=_S(b.color,k,t,n.threat.drainerWalkThreatBoolean!==0,o);if(y(M,n.position.drainerCloseToMana,T.minMana),y(M,n.position.drainerCloseToOwnPool,ht(k,{kind:"closest-pool",color:b.color})),y(M,n.position.drainerCloseToSupermana,wP(k,r)),gS(T)?f(M,n.position.angelGuardingDrainer):y(M,n.position.drainerAtRisk,T.riskDanger),P||!t){let E=t?LS(o.manaPathSnapshot(),b.color,k):i?.colorSummary(b.color).bestDrainerPickup;if(E!==void 0){let x="pathSteps"in E?E.pathSteps:E[0],N="totalMoves"in E?E.totalMoves:x+1,B="manaValue"in E?E.manaValue:E[1];y(M,n.threat.drainerBestManaPath*B,x+1),b.color===p.activeColor&&N<=a&&f(M,n.threat.drainerPickupScoreThisTurn*B)}}if(n.threat.drainerImmediateThreat!==0){let[E,x]=FS(b.color,k,o),N=T.angelNearby?x:E+x;N>0&&f(M,n.threat.drainerImmediateThreat*N)}let I=(n.threat.drainerDangerBoolean!==0||n.threat.drainerWalkThreatBoolean!==0)&&T.exactDangerThreat;n.threat.drainerDangerBoolean!==0&&I&&(f(M,n.threat.drainerDangerBoolean),M===-1&&d(n.threat.opponentDrainerAttackBonus)),n.threat.drainerWalkThreatBoolean!==0&&!I&&T.walkThreat&&f(M,n.threat.drainerWalkThreatBoolean)},"evaluateDrainer"),C=l((b,k,M)=>{let P=TP(b.color,k,o);y(M,n.position.spiritCloseToEnemy,P),f(-M,ES(p.board,b,k,n.position.spiritOnOwnBasePenalty));let T=t?4:6,v,I;if(t)v=DS(p.board,k),I=0;else{let E=AS(Nt(s),Nt(u),b.color,e).spirit;v=E.utility,I=NS(E,n)}f(M,n.threat.spiritActionUtility*Math.min(v,T)),f(M,I)},"evaluateSpirit");for(let[b,k]of p.board.entries())switch(k.kind){case"mon":{let M=k.mon,P=M.color===e?1:-1;$(M)?(f(P,M.kind===A.Drainer?n.material.faintedDrainer:n.material.faintedMon),f(P,n.material.faintedCooldownStep*M.cooldown)):M.kind===A.Drainer?S(M,b,P,!0):M.kind===A.Spirit?C(M,b,P):M.kind===A.Angel?y(P,n.position.angelCloseToFriendlyDrainer,Nr(M.color,b,o)):y(P,n.position.monCloseToCenter,ht(b,{kind:"center"})),n.threat.attackerCloseToOpponentDrainer!==0&&!$(M)&&(M.kind===A.Demon||M.kind===A.Mystic)&&y(P,n.threat.attackerCloseToOpponentDrainer,Nr(X(M.color),b,o)),yd.has(ne(b))||f(P,n.material.activeMon);break}case"mon-with-consumable":{let M=k.mon,P=M.color===e?1:-1;f(P,n.material.hasConsumable),M.kind===A.Drainer?S(M,b,P,!1):M.kind===A.Spirit?C(M,b,P):M.kind===A.Angel?y(P,n.position.angelCloseToFriendlyDrainer,Nr(M.color,b,o)):y(P,n.position.monCloseToCenter,ht(b,{kind:"center"})),n.threat.attackerCloseToOpponentDrainer!==0&&!$(M)&&(M.kind===A.Demon||M.kind===A.Mystic||k.consumable===q.Bomb)&&y(P,n.threat.attackerCloseToOpponentDrainer,Nr(X(M.color),b,o)),!t&&!yd.has(ne(b))&&f(P,n.material.activeMon);break}case"mana":{d(Math.trunc(n.position.manaCloseToSamePool/ht(b,{kind:"closest-pool",color:e})));let M;if(k.mana.kind==="regular"){let P=k.mana.color,T=P===e?1:-1,v=ht(b,{kind:"closest-pool",color:P}),I=Nr(P,b,o),E=Nr(X(P),b,o),x=Math.min(4,Math.max(-4,E-I));M=T*(Math.trunc(n.mana.regularManaToOwnerPool/v)+n.mana.regularManaDrainerControl*x),!t&&P===X(e)&&(M=M+n.mana.opponentManaDenial*-x)}else{let P=Nr(e,b,o),T=Nr(X(e),b,o),v=Math.min(4,Math.max(-4,T-P));M=n.mana.supermanaDrainerControl*v+(t?0:n.mana.supermanaRaceControl*v)}d(M);break}case"mon-with-mana":{let{mon:M,mana:P}=k,T=M.color===e?1:-1,v=ht(b,{kind:"any-closest-pool"}),I=P.kind==="supermana"?n.position.extraForSupermana:P.color===e?0:n.position.extraForOpponentsMana;if(f(T,n.position.drainerHoldingMana),y(T,n.position.monWithManaCloseToAnyPool+I,v),v<=2){let N=P.kind==="supermana"?n.mana.manaCarrierOneStepFromPool+n.mana.supermanaCarrierOneStepFromPoolExtra:n.mana.manaCarrierOneStepFromPool;f(T,N),(M.color===w.White?p.whiteScore:p.blackScore)+_e(P,M.color)>=xe&&f(T,n.mana.immediateWinningCarrier)}let E=!t&&M.kind===A.Drainer&&(P.kind==="supermana"||P.color!==M.color),x=_S(M.color,b,t,n.threat.manaCarrierWalkThreatBoolean!==0||E,o);if(y(T,n.mana.manaCarrierAtRisk,x.riskDanger),gS(x)&&f(T,n.mana.manaCarrierGuarded),!t&&M.kind===A.Drainer&&E){let N;P.kind==="supermana"?N=nn(n.mana.supermanaRaceControl,pP):P.color!==M.color?N=nn(n.mana.opponentManaDenial,dP):N=0,N=Math.min(mP,Math.max(0,N));let B=M.color===w.White?p.blackScore:p.whiteScore,W=Math.max(0,xe-fP);if(N>0&&hP(x)&&B<=W){let V=nn(n.material.confirmedScore,2);f(T,go(V,N))}}if(M.color===p.activeColor&&v-1<=a&&f(T,n.threat.manaCarrierScoreThisTurn),M.kind===A.Drainer){y(T,n.position.drainerCloseToOwnPool,ht(b,{kind:"closest-pool",color:M.color}));let[N,B]=FS(M.color,b,o),W=x.angelNearby?B:N+B;W>0&&f(T,n.threat.drainerImmediateThreat*W);let Q=(n.threat.manaCarrierDangerBoolean!==0||n.threat.manaCarrierWalkThreatBoolean!==0)&&x.exactDangerThreat;n.threat.manaCarrierDangerBoolean!==0&&Q&&(f(T,n.threat.manaCarrierDangerBoolean),T===-1&&d(n.threat.opponentDrainerAttackBonus)),n.threat.manaCarrierWalkThreatBoolean!==0&&!Q&&x.walkThreat&&f(T,n.threat.manaCarrierWalkThreatBoolean)}else if(M.kind===A.Spirit){f(-T,ES(p.board,M,b,n.position.spiritOnOwnBasePenalty));let N=t?4:6,B,W;if(t)B=DS(p.board,b),W=0;else{let V=AS(Nt(s),Nt(u),M.color,e).spirit;B=V.utility,W=NS(V,n)}f(T,n.threat.spiritActionUtility*Math.min(B,N)),f(T,W)}!t&&!yd.has(ne(b))&&f(T,n.material.activeMon);break}case"consumable":break}return m}l(CP,"scorePreferabilityBoardItems");function MP(e,n,o,t,r,a,i,s){let u=s,c=t?IS(o,e,!1,r):OS(o,e,Nt(a),r),p=t?IS(o,X(e),!1,r):OS(o,X(e),Nt(i),r);return c.bestSteps!==void 0&&(u=u+go(Math.trunc(n.race.scoreRacePathProgress/Math.max(1,c.bestSteps)),1e4),t||(u=u+go(Math.trunc(n.race.scoreRaceMultiPath*c.multiPressure/100),1e4))),p.bestSteps!==void 0&&(u=u+-go(Math.trunc(n.race.opponentScoreRacePathProgress/Math.max(1,p.bestSteps)),1e4),t||(u=u+-go(Math.trunc(n.race.opponentScoreRaceMultiPath*p.multiPressure/100),1e4))),u}l(MP,"scorePreferabilityRaceWindows");function kP(e,n,o,t,r,a,i,s,u,c,p,m,d){let f=o.game,y=d;if(f.activeColor===e){let S=t?xS(o,e,s,!1,r,r&&f.playerCanMoveMana()):Yc(o,e,Nt(u),r&&f.playerCanMoveMana());if(y=y+go(n.race.immediateScoreWindow*S.bestScore,1e4),!t){y=y+go(Math.trunc(n.race.immediateScoreMultiWindow*S.multiPressure/100),1e4);let C=Yc(o,X(e),Nt(c),r);y=y+-go(Math.trunc(n.race.opponentImmediateScoreWindow*C.bestScore*i/1e4),1e4),y=y+-go(Math.trunc(n.race.opponentImmediateScoreMultiWindow*C.multiPressure*i/1e6),1e4),a&&(p+S.bestScore>=xe&&(y=y+n.mana.immediateWinningCarrier),m+C.bestScore>=xe&&(y=y+-n.mana.immediateWinningCarrier))}}else{let S=t?xS(o,X(e),s,!1,r,r&&f.playerCanMoveMana()):Yc(o,X(e),Nt(c),r&&f.playerCanMoveMana());if(y=y+-go(n.race.opponentImmediateScoreWindow*S.bestScore,1e4),!t){y=y+-go(Math.trunc(n.race.opponentImmediateScoreMultiWindow*S.multiPressure/100),1e4);let C=Yc(o,e,Nt(u),r);y=y+go(Math.trunc(n.race.immediateScoreWindow*C.bestScore*i/1e4),1e4),y=y+go(Math.trunc(n.race.immediateScoreMultiWindow*C.multiPressure*i/1e6),1e4),a&&(m+S.bestScore>=xe&&(y=y+-n.mana.immediateWinningCarrier),p+C.bestScore>=xe&&(y=y+n.mana.immediateWinningCarrier))}}return y}l(kP,"scorePreferabilityImmediateWindows");function Nt(e){if(e===void 0)throw new Error("exact strategic analysis should be available");return e}l(Nt,"requireExactSummary");function go(e,n){return Math.trunc(Math.trunc(e)*Math.trunc(n)/1e4)}l(go,"scaleByBp");function AS(e,n,o,t){return o===t?e:n}l(AS,"exactSummaryForScoring");function ES(e,n,o,t){return n.kind===A.Spirit&&!$(n)&&Ie(o,e.base(n))?t:0}l(ES,"spiritOnOwnBasePenalty");function RP(e){return{candidates:e.manaEntries.map(n=>({location:n.location,scoreSteps:ht(n.location,{kind:"any-closest-pool"})-1,mana:n.mana})),regularManaMoveScores:[e.regularManaMoveScores[0],e.regularManaMoveScores[1]]}}l(RP,"manaPathSnapshot");function OS(e,n,o,t){if(!t)return o.scorePathWindow;let a=e.boardSummary().regularManaScorePathSteps[Zn(n)];return{bestSteps:a===void 0?o.scorePathWindow.bestSteps:o.scorePathWindow.bestSteps===void 0?a:Math.min(a,o.scorePathWindow.bestSteps),multiPressure:o.scorePathWindow.multiPressure}}l(OS,"exactScorePathWindowForContext");function IS(e,n,o,t){let r=e.boardSummary(),a=[2147483647,2147483647,2147483647];for(let u of r.liveManaCarriers[Zn(n)])Sd(a,ht(u.location,{kind:"any-closest-pool"}));if(o){let u=e.manaPathSnapshot();for(let c of r.liveDrainerLocations[Zn(n)]){let p=LS(u,n,c);p!==void 0&&Sd(a,p[0]+1)}}if(t){let u=r.regularManaScorePathSteps[Zn(n)];u!==void 0&&Sd(a,u)}let i=a[0]===2147483647?void 0:a[0],s=0;return a[1]!==2147483647&&(s=s+Math.trunc(70/Math.max(1,a[1]??1))),a[2]!==2147483647&&(s=s+Math.trunc(40/Math.max(1,a[2]??1))),{bestSteps:i,multiPressure:s}}l(IS,"scorePathWindowToAnyPoolForContext");function Yc(e,n,o,t){if(!t)return o.immediateWindow;let r=e.boardSummary().regularManaMoveScores[Zn(n)];return{bestScore:Math.max(o.immediateWindow.bestScore,r),multiPressure:o.immediateWindow.multiPressure}}l(Yc,"exactImmediateScoreWindowForContext");function xS(e,n,o,t,r,a){if(o<=0)return{bestScore:0,multiPressure:0};let i=e.boardSummary(),s=[0,0,0];for(let u of i.liveManaCarriers[Zn(n)])ht(u.location,{kind:"any-closest-pool"})-1<=o&&hd(s,_e(u.mana,n));if(t){let u=e.manaPathSnapshot();for(let c of i.liveDrainerLocations[Zn(n)]){let p=0;for(let m of u.candidates)se(c,m.location)+m.scoreSteps<=o&&(p=Math.max(p,_e(m.mana,n)));p>0&&hd(s,p)}}if(r&&a){let u=i.regularManaMoveScores[Zn(n)];u>0&&hd(s,u)}return{bestScore:s[0]??0,multiPressure:(s[1]??0)*70+(s[2]??0)*35}}l(xS,"immediateScoreWindowSummaryForContext");function NS(e,n){let o=Math.min(4,Math.max(0,e.nextTurnSetupGain)),t=0;return o>0&&(t=g(t,Math.trunc(nn(Math.max(0,n.race.scoreRacePathProgress),o)/4)),t=g(t,Math.trunc(nn(Math.max(0,n.race.opponentScoreRacePathProgress),o)/6)),t=g(t,Math.trunc(nn(Math.max(0,n.race.scoreRaceMultiPath),o)/8)),t=g(t,Math.trunc(nn(Math.max(0,n.race.opponentScoreRaceMultiPath),o)/10))),e.supermanaProgress&&!e.sameTurnScore&&(t=g(g(t,nn(Math.max(0,n.mana.supermanaRaceControl),3)),Math.trunc(Math.max(0,n.threat.drainerBestManaPath)/4))),e.opponentManaProgress&&!e.sameTurnOpponentManaScore&&(t=g(g(g(t,nn(Math.max(0,n.mana.opponentManaDenial),3)),Math.trunc(Math.max(0,n.threat.drainerBestManaPath)/4)),Math.trunc(Math.max(0,n.race.scoreRacePathProgress)/5))),t}l(NS,"exactSpiritPressureBonus");function DS(e,n){let o=0;for(let t of pt(n)){let r=e.get(t);r!==void 0&&zt(r)&&(o+=1)}return o}l(DS,"heuristicSpiritActionUtility");function Zn(e){return e===w.White?0:1}l(Zn,"colorSlot");function Sd(e,n){n>=(e[2]??2147483647)||(n<(e[0]??2147483647)?(e[2]=e[1]??2147483647,e[1]=e[0]??2147483647,e[0]=n):n<(e[1]??2147483647)?(e[2]=e[1]??2147483647,e[1]=n):e[2]=n)}l(Sd,"insertLowestStep");function hd(e,n){n<=(e[2]??0)||(n>(e[0]??0)?(e[2]=e[1]??0,e[1]=e[0]??0,e[0]=n):n>(e[1]??0)?(e[2]=e[1]??0,e[1]=n):e[2]=n)}l(hd,"insertTopScore");function LS(e,n,o){let t;for(let r of e.candidates){let i=se(o,r.location)+r.scoreSteps,s=_e(r.mana,n);if(t===void 0){t=[i,s];continue}let u=i*3-s,c=t[0]*3-t[1];(u<c||u===c&&s>t[1])&&(t=[i,s])}return t}l(LS,"bestDrainerPickupPathWithSnapshot");function PP(e,n,o,t){let r=t.boardSummary(),a=11,i=11;for(let u of r.manaEntries)a=Math.min(a,se(u.location,n));for(let u of r.dangerSources[Zn(X(e))]){if(o){u.heuristicThreat&&(i=Math.min(i,se(u.location,n)));continue}let c=2147483647;if(u.exactActionThreat&&(c=se(u.location,n)),u.exactBombThreat){let p=Math.max(1,se(u.location,n)-2);c=Math.min(c,p)}i=Math.min(i,c)}if(o)for(let u of r.looseConsumableLocations)i=Math.min(i,se(u,n));let s=r.liveAngelLocations[Zn(e)].some(u=>se(u,n)===1);return o?[i,a,s]:[Math.max(1,i),Math.max(1,a),s]}l(PP,"drainerDistancesWithContext");function _S(e,n,o,t,r){let a=r.board,[i,s,u]=PP(e,n,o,r),c=o?ud(r.execution,a,e,n,u):r.canAttackTargetOnBoard(X(e),e,n,le,!0),p=t&&!c&&ha(r.execution,a,r.boardHash,e,n,u);return{riskDanger:o?Math.max(1,i):c?1:Math.max(1,i),minMana:s,angelNearby:u,exactDangerThreat:c,walkThreat:p}}l(_S,"drainerSafetySnapshotWithContext");function FS(e,n,o){return o.drainerImmediateThreats(e,n)}l(FS,"drainerImmediateThreatsWithContext");function TP(e,n,o){let t=11;for(let r of o.boardSummary().liveMonLocations[Zn(X(e))])t=Math.min(t,se(r,n));return Math.max(1,t)}l(TP,"nearestEnemyMonDistanceWithContext");function Nr(e,n,o){let t=11;for(let r of o.boardSummary().liveDrainerLocations[Zn(e)])t=Math.min(t,se(r,n));return Math.max(1,t)}l(Nr,"nearestFriendlyDrainerDistanceWithContext");function wP(e,n){return se(e,n)+1}l(wP,"distanceToLocation");function ht(e,n){let o;switch(n.kind){case"center":o=Math.max(1,Math.abs(gc-e.i));break;case"any-closest-pool":o=Math.max(Math.min(e.i,Math.abs(ii-e.i)),Math.min(e.j,Math.abs(ii-e.j)));break;case"closest-pool":{let t=n.color===w.White?ii:0;o=Math.max(Math.abs(t-e.i),Math.min(e.j,Math.abs(ii-e.j)));break}}return o+1}l(ht,"distance");var vP=/^[a-z0-9]+(?:[.-][a-z0-9]+)*$/,gP=["id","formula","material","position","mana","race","threat"],VS=["useHeuristicFormula","includeRegularManaMoveWindows","includeMatchPointWindow","nextTurnWindowScaleBp","doubleConfirmedScore"],HS=["confirmedScore","faintedMon","faintedDrainer","faintedCooldownStep","hasConsumable","activeMon"],US=["drainerAtRisk","manaCloseToSamePool","monWithManaCloseToAnyPool","extraForSupermana","extraForOpponentsMana","drainerCloseToMana","drainerHoldingMana","drainerCloseToOwnPool","drainerCloseToSupermana","monCloseToCenter","spiritCloseToEnemy","spiritOnOwnBasePenalty","angelGuardingDrainer","angelCloseToFriendlyDrainer"],jS=["regularManaToOwnerPool","regularManaDrainerControl","supermanaDrainerControl","supermanaRaceControl","opponentManaDenial","manaCarrierAtRisk","manaCarrierGuarded","manaCarrierOneStepFromPool","supermanaCarrierOneStepFromPoolExtra","immediateWinningCarrier"],KS=["scoreRacePathProgress","opponentScoreRacePathProgress","scoreRaceMultiPath","opponentScoreRaceMultiPath","immediateScoreWindow","opponentImmediateScoreWindow","immediateScoreMultiWindow","opponentImmediateScoreMultiWindow"],qS=["drainerBestManaPath","drainerPickupScoreThisTurn","manaCarrierScoreThisTurn","drainerImmediateThreat","spiritActionUtility","drainerDangerBoolean","manaCarrierDangerBoolean","drainerWalkThreatBoolean","manaCarrierWalkThreatBoolean","opponentDrainerAttackBonus","attackerCloseToOpponentDrainer"],GS=new Map,Zc=new WeakSet;function Md(e,n,o){let t=Object.keys(n).sort(),r=[...o].sort();if(t.length!==r.length||t.some((a,i)=>a!==r[i]))throw new TypeError(`${e} must contain exactly: ${r.join(", ")}`)}l(Md,"validateExactKeys");function zS(e){if(typeof e!="string"||e.length>96||!vP.test(e))throw new RangeError(`scoring profile id must be a lower-case dotted or dashed identifier: ${e}`)}l(zS,"validateProfileId");function uu(e,n,o){Md(e,n,o);for(let[t,r]of Object.entries(n))if(!Number.isSafeInteger(r)||Math.abs(r)>1e4)throw new RangeError(`${e}.${t} must be a safe integer between -10000 and 10000`)}l(uu,"validateNumericSection");function AP(e){Md("formula",e,VS);for(let[n,o]of Object.entries(e))if(n==="nextTurnWindowScaleBp"){if(typeof o!="number"||!Number.isSafeInteger(o)||o<0||o>2e4)throw new RangeError("formula.nextTurnWindowScaleBp must be an integer between 0 and 20000")}else if(typeof o!="boolean")throw new TypeError(`formula.${n} must be a boolean`)}l(AP,"validateFormula");function EP(e){return JSON.stringify([VS.map(n=>e.formula[n]),HS.map(n=>e.material[n]),US.map(n=>e.position[n]),jS.map(n=>e.mana[n]),KS.map(n=>e.race[n]),qS.map(n=>e.threat[n])])}l(EP,"profileSignature");function OP(e){let n=EP(e),o=GS.get(e.id);if(o!==void 0&&o!==n)throw new RangeError(`scoring profile id ${e.id} is already registered with different weights`);GS.set(e.id,n)}l(OP,"registerProfileIdentity");function Wn(e){return Object.freeze(e)}l(Wn,"freezeSection");function En(e){zS(e.id);let n=e.base;if(n===void 0)throw new TypeError("a scoring profile must extend a complete base profile; use the built-in default profile as the root");let o={id:e.id,formula:Wn({...n.formula,...e.formula}),material:Wn({...n.material,...e.material}),position:Wn({...n.position,...e.position}),mana:Wn({...n.mana,...e.mana}),race:Wn({...n.race,...e.race}),threat:Wn({...n.threat,...e.threat})};_i(o);let t=Object.freeze(o);return Zc.add(t),t}l(En,"defineScoringProfile");function _i(e){if(typeof e!="object"||e===null)throw new TypeError("scoring profile must be an object");let n=e;Md("scoring profile",n,gP),zS(n.id),AP(n.formula),uu("material",n.material,HS),uu("position",n.position,US),uu("mana",n.mana,jS),uu("race",n.race,KS),uu("threat",n.threat,qS),OP(n)}l(_i,"validateScoringProfile");function Fi(e){return e.id}l(Fi,"scoringProfileId");function kd(e){if(_i(e),Zc.has(e))return e;let n=Object.freeze({id:e.id,formula:Wn({...e.formula}),material:Wn({...e.material}),position:Wn({...e.position}),mana:Wn({...e.mana}),race:Wn({...e.race}),threat:Wn({...e.threat})});return _i(n),Zc.add(n),n}l(kd,"normalizeScoringProfile");var IP=Wn({useHeuristicFormula:!0,includeRegularManaMoveWindows:!1,includeMatchPointWindow:!1,nextTurnWindowScaleBp:5e3,doubleConfirmedScore:!0}),xP=Wn({confirmedScore:1e3,faintedMon:-500,faintedDrainer:-800,faintedCooldownStep:0,hasConsumable:110,activeMon:50}),NP=Wn({drainerAtRisk:-350,manaCloseToSamePool:500,monWithManaCloseToAnyPool:800,extraForSupermana:120,extraForOpponentsMana:100,drainerCloseToMana:300,drainerHoldingMana:350,drainerCloseToOwnPool:180,drainerCloseToSupermana:120,monCloseToCenter:210,spiritCloseToEnemy:160,spiritOnOwnBasePenalty:180,angelGuardingDrainer:180,angelCloseToFriendlyDrainer:120}),DP=Wn({regularManaToOwnerPool:0,regularManaDrainerControl:0,supermanaDrainerControl:0,supermanaRaceControl:0,opponentManaDenial:0,manaCarrierAtRisk:0,manaCarrierGuarded:0,manaCarrierOneStepFromPool:0,supermanaCarrierOneStepFromPoolExtra:0,immediateWinningCarrier:0}),_P=Wn({scoreRacePathProgress:0,opponentScoreRacePathProgress:0,scoreRaceMultiPath:0,opponentScoreRaceMultiPath:0,immediateScoreWindow:0,opponentImmediateScoreWindow:0,immediateScoreMultiWindow:0,opponentImmediateScoreMultiWindow:0}),FP=Wn({drainerBestManaPath:0,drainerPickupScoreThisTurn:0,manaCarrierScoreThisTurn:0,drainerImmediateThreat:0,spiritActionUtility:0,drainerDangerBoolean:0,manaCarrierDangerBoolean:0,drainerWalkThreatBoolean:0,manaCarrierWalkThreatBoolean:0,opponentDrainerAttackBonus:0,attackerCloseToOpponentDrainer:0}),cu=Object.freeze({id:"default",formula:IP,material:xP,position:NP,mana:DP,race:_P,threat:FP});Zc.add(cu);_i(cu);var Ta=En({id:"balanced-distance",base:cu,material:{faintedMon:-520,faintedDrainer:-900,faintedCooldownStep:-80,hasConsumable:105,activeMon:45},position:{drainerAtRisk:-420,manaCloseToSamePool:520,monWithManaCloseToAnyPool:820,extraForSupermana:130,extraForOpponentsMana:120,drainerCloseToMana:330,drainerHoldingMana:370,drainerCloseToOwnPool:280,drainerCloseToSupermana:180,monCloseToCenter:180,spiritCloseToEnemy:220,angelGuardingDrainer:280,angelCloseToFriendlyDrainer:180},mana:{manaCarrierOneStepFromPool:160,supermanaCarrierOneStepFromPoolExtra:80}}),WP=En({id:"mana-race-lite",base:Ta,material:{faintedCooldownStep:-70},position:{manaCloseToSamePool:420,drainerCloseToOwnPool:290,drainerCloseToSupermana:200,angelGuardingDrainer:290},mana:{regularManaToOwnerPool:150,regularManaDrainerControl:15,supermanaDrainerControl:26,manaCarrierAtRisk:-150,manaCarrierGuarded:70,manaCarrierOneStepFromPool:220,supermanaCarrierOneStepFromPoolExtra:120,immediateWinningCarrier:0}}),$S=En({id:"finisher-balanced",base:Ta,mana:{manaCarrierOneStepFromPool:220,supermanaCarrierOneStepFromPoolExtra:110,immediateWinningCarrier:360}}),XS=En({id:"finisher-aggressive",base:Ta,mana:{manaCarrierOneStepFromPool:250,supermanaCarrierOneStepFromPoolExtra:130,immediateWinningCarrier:540}}),Rd=En({id:"mana-race-lite-d2",base:WP,position:{manaCloseToSamePool:380,drainerCloseToOwnPool:320},mana:{regularManaToOwnerPool:170,regularManaDrainerControl:18,manaCarrierAtRisk:-210,manaCarrierGuarded:95,manaCarrierOneStepFromPool:260,supermanaCarrierOneStepFromPoolExtra:150,immediateWinningCarrier:300}}),Pd=En({id:"tactical-balanced",base:Ta,material:{faintedCooldownStep:-120},position:{spiritCloseToEnemy:230,angelGuardingDrainer:300},mana:{manaCarrierAtRisk:-200,manaCarrierGuarded:110,manaCarrierOneStepFromPool:240,supermanaCarrierOneStepFromPoolExtra:150}}),YS=En({id:"tactical-aggressive",base:Pd,material:{faintedCooldownStep:-160},position:{spiritCloseToEnemy:250,angelGuardingDrainer:320},mana:{manaCarrierAtRisk:-260,manaCarrierGuarded:140,manaCarrierOneStepFromPool:320,supermanaCarrierOneStepFromPoolExtra:220}}),QS=En({id:"runtime-fast-context",base:Rd,formula:{useHeuristicFormula:!1},material:{confirmedScore:920},position:{drainerCloseToMana:360,drainerHoldingMana:430},mana:{manaCarrierAtRisk:-285,manaCarrierGuarded:145,manaCarrierOneStepFromPool:320,supermanaCarrierOneStepFromPoolExtra:210,immediateWinningCarrier:520},race:{scoreRacePathProgress:165,opponentScoreRacePathProgress:150,scoreRaceMultiPath:60,opponentScoreRaceMultiPath:90,immediateScoreWindow:240,opponentImmediateScoreWindow:220,immediateScoreMultiWindow:80,opponentImmediateScoreMultiWindow:120},threat:{drainerBestManaPath:250,drainerPickupScoreThisTurn:210,manaCarrierScoreThisTurn:290,drainerImmediateThreat:-220,spiritActionUtility:56}}),Td=En({id:"runtime-fast-context-potion",base:QS,material:{hasConsumable:320},threat:{spiritActionUtility:72}}),Jc=En({id:"runtime-fast-boolean",base:QS,mana:{supermanaRaceControl:30},threat:{drainerDangerBoolean:-400,manaCarrierDangerBoolean:-300}}),ZS=En({id:"runtime-fast-boolean-potion",base:Jc,material:{hasConsumable:320},threat:{spiritActionUtility:72}});var $e=Object.freeze({Baseline:"baseline",Production:"production"});function _(e){return e.planner.mode===$e.Production}l(_,"productionEnabled");function lu(e,n){let o=e.board.get(e.board.base({kind:A.Spirit,color:n,cooldown:0})),t=o===void 0?void 0:z(o);return t?.kind===A.Spirit&&t.color===n&&!$(t)}l(lu,"hasAwakeSpiritOnBase");function Wi(e,n){return!e.isFirstTurn()&&e.playerCanMoveMon()&&lu(e,n)}l(Wi,"shouldPreferSpiritDevelopment");function oe(e){return e.winsImmediately||e.scoresSupermanaThisTurn||e.scoresOpponentManaThisTurn||e.safeSupermanaPickupNow||e.safeOpponentManaPickupNow}l(oe,"hasConcreteScoreSurface");function Z(e){return e.safeSupermanaPickupNow||e.safeOpponentManaPickupNow||e.supermanaProgress||e.opponentManaProgress}l(Z,"hasProgressSurface");function D(e){return e.manaHandoffToOpponent||e.ownDrainerVulnerable&&!e.classes.drainerSafetyRecover&&!e.attacksOpponentDrainer&&!oe(e)}l(D,"rootIsUnsafe");function L(e){return e.spiritDevelopment&&!e.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow}l(L,"isPlainSpiritDevelopmentRoot");var vd=1,gd=5,BP=32,hu=18e4,LP=2,GP=480,VP=3,oh=3800,HP=4,Ad=Math.trunc(oh*369/100),UP=140,jP=3,KP=8,qP=600,zP=180,Ed=6,Od=2200,$P=220,XP=140,YP=2500,QP=340,th=260,ZP=240,JP=420,eT=210,nT=360,oT=220,tT=140,wa=Object.freeze({maxExtensionsPerPath:1,extensionNodeShareBp:1500,quiescenceNodes:120,quiescenceEnumerationLimit:12,futilityMargin:2300,transpositionCapacity:12e3,evaluationCacheCapacity:32768}),rh=Object.freeze({fast:Object.freeze({depth:LP,maxVisitedNodes:GP}),normal:Object.freeze({depth:VP,maxVisitedNodes:oh}),pro:Object.freeze({depth:HP,maxVisitedNodes:Ad})}),pu=Object.freeze({balanced:En({id:"runtime-normal.base.balanced",base:Ta,formula:{useHeuristicFormula:!1},material:{confirmedScore:900},position:{spiritOnOwnBasePenalty:260,angelGuardingDrainer:120,drainerHoldingMana:470,drainerCloseToMana:360},mana:{supermanaRaceControl:30,opponentManaDenial:24},race:{scoreRacePathProgress:86,opponentScoreRacePathProgress:184,immediateScoreWindow:96,opponentImmediateScoreWindow:245},threat:{drainerImmediateThreat:-55,drainerBestManaPath:58,drainerPickupScoreThisTurn:90,manaCarrierScoreThisTurn:150,spiritActionUtility:86}}),tactical:En({id:"runtime-normal.base.tactical",base:Pd,formula:{useHeuristicFormula:!1},material:{confirmedScore:900},position:{spiritOnOwnBasePenalty:260,angelGuardingDrainer:180,drainerHoldingMana:500,drainerCloseToMana:390},mana:{supermanaRaceControl:34,opponentManaDenial:30},race:{scoreRacePathProgress:94,opponentScoreRacePathProgress:220,immediateScoreWindow:102,opponentImmediateScoreWindow:310},threat:{drainerImmediateThreat:-90,drainerBestManaPath:84,drainerPickupScoreThisTurn:110,manaCarrierScoreThisTurn:180,spiritActionUtility:90}}),tacticalAggressive:En({id:"runtime-normal.base.tactical-aggressive",base:YS,formula:{useHeuristicFormula:!1},material:{confirmedScore:890},position:{spiritOnOwnBasePenalty:260,angelGuardingDrainer:190,drainerHoldingMana:520,drainerCloseToMana:410},mana:{supermanaRaceControl:40,opponentManaDenial:34},race:{scoreRacePathProgress:104,opponentScoreRacePathProgress:255,immediateScoreWindow:114,opponentImmediateScoreWindow:360},threat:{drainerImmediateThreat:-120,drainerBestManaPath:96,drainerPickupScoreThisTurn:130,manaCarrierScoreThisTurn:220,spiritActionUtility:94}}),finisher:En({id:"runtime-normal.base.finisher",base:$S,formula:{useHeuristicFormula:!1},material:{confirmedScore:930},position:{spiritOnOwnBasePenalty:260,drainerHoldingMana:500,drainerCloseToMana:375,angelGuardingDrainer:170},mana:{supermanaRaceControl:32,opponentManaDenial:28},race:{scoreRacePathProgress:170,opponentScoreRacePathProgress:170,immediateScoreWindow:275,opponentImmediateScoreWindow:235},threat:{drainerBestManaPath:72,drainerPickupScoreThisTurn:120,manaCarrierScoreThisTurn:240,spiritActionUtility:88}}),finisherAggressive:En({id:"runtime-normal.base.finisher-aggressive",base:XS,formula:{useHeuristicFormula:!1},material:{confirmedScore:940},position:{spiritOnOwnBasePenalty:260,drainerHoldingMana:520,drainerCloseToMana:395,angelGuardingDrainer:180},mana:{supermanaRaceControl:36,opponentManaDenial:30},race:{scoreRacePathProgress:195,opponentScoreRacePathProgress:185,immediateScoreWindow:330,opponentImmediateScoreWindow:265},threat:{drainerBestManaPath:84,drainerPickupScoreThisTurn:140,manaCarrierScoreThisTurn:280,spiritActionUtility:90}})});function du(e,n){return En({id:e,base:n,threat:{drainerDangerBoolean:-1200,manaCarrierDangerBoolean:-800}})}l(du,"withBooleanDrainer");var _t=Object.freeze({balanced:du("runtime-normal.boolean.balanced",pu.balanced),tactical:du("runtime-normal.boolean.tactical",pu.tactical),tacticalAggressive:du("runtime-normal.boolean.tactical-aggressive",pu.tacticalAggressive),finisher:du("runtime-normal.boolean.finisher",pu.finisher),finisherAggressive:du("runtime-normal.boolean.finisher-aggressive",pu.finisherAggressive)});function mu(e,n){return En({id:e,base:n,threat:{drainerWalkThreatBoolean:-300,manaCarrierWalkThreatBoolean:-150}})}l(mu,"withMediumWalkThreat");function fu(e,n){return En({id:e,base:n,threat:{attackerCloseToOpponentDrainer:200}})}l(fu,"withAttackerProximity");function ah(e,n,o,t,r,a){let[i,s]=e.activeColor===w.White?[e.whiteScore,e.blackScore]:[e.blackScore,e.whiteScore],u=xe-i,c=xe-s,p=i-s;return u<=1?a:c<=1?t:u<=2?r:c<=2||p<=-1?o:n}l(ah,"phaseProfile");var yu=Object.freeze({balanced:Object.freeze({weights:mu("runtime-normal-walk-balanced",_t.balanced)}),tactical:Object.freeze({weights:mu("runtime-normal-walk-tactical",_t.tactical)}),tacticalAggressive:Object.freeze({weights:mu("runtime-normal-walk-tactical-aggressive",_t.tacticalAggressive)}),finisher:Object.freeze({weights:mu("runtime-normal-walk-finisher",_t.finisher)}),finisherAggressive:Object.freeze({weights:mu("runtime-normal-walk-finisher-aggressive",_t.finisherAggressive)})}),Su=Object.freeze({balanced:Object.freeze({weights:fu("runtime-normal-attacker-balanced",_t.balanced)}),tactical:Object.freeze({weights:fu("runtime-normal-attacker-tactical",_t.tactical)}),tacticalAggressive:Object.freeze({weights:fu("runtime-normal-attacker-tactical-aggressive",_t.tacticalAggressive)}),finisher:Object.freeze({weights:fu("runtime-normal-attacker-finisher",_t.finisher)}),finisherAggressive:Object.freeze({weights:fu("runtime-normal-attacker-finisher-aggressive",_t.finisherAggressive)})});function rT(e,n){return n<3?Object.freeze({weights:Jc}):ah(e,yu.balanced,yu.tactical,yu.tacticalAggressive,yu.finisher,yu.finisherAggressive)}l(rT,"runtimePhaseAdaptiveWalkThreatMediumScoringProfile");function aT(e,n){return n<3?Object.freeze({weights:Jc}):ah(e,Su.balanced,Su.tactical,Su.tacticalAggressive,Su.finisher,Su.finisherAggressive)}l(aT,"runtimePhaseAdaptiveAttackerProximityScoringProfile");function Te(e,n,o){return Math.min(o,Math.max(n,Math.trunc(e)))}l(Te,"clamp");function nl(e,n){return Math.max(0,e-n)}l(nl,"subtractSaturating");function bu(e,n,o){return Math.trunc(e*n/o)}l(bu,"scaleFloor");var JS=1e6,wd=1e4,iT=["budget","search","planner","evaluation","replyRisk","policy"],sT=["preference","depth","maxVisitedNodes","exactLiteRootCalls","exactLiteStaticCalls","extensionNodeShareBp","quiescenceNodes"],uT=["depth","maxVisitedNodes","exactLiteRootCalls","exactLiteStaticCalls","extensionNodeShareBp","quiescenceNodes"],cT=["rootEnumerationLimit","rootBranchLimit","nodeEnumerationLimit","nodeBranchLimit","twoPassRootAllocation","volatilityFocus","selectiveExtensions","maxExtensionsPerPath","quietReductions","quietReductionDepthThreshold","quiescence","quiescenceEnumerationLimit","futilityPruning","futilityMargin","transpositionTable","transpositionCapacity","exactLiteChecks","exactRootAnalysis"],lT=["twoPassRootAllocation","volatilityFocus","selectiveExtensions","quietReductions","quiescence","futilityPruning","transpositionTable","exactLiteChecks","exactRootAnalysis"],pT=["rootEnumerationLimit","rootBranchLimit","nodeEnumerationLimit","nodeBranchLimit","maxExtensionsPerPath","quietReductionDepthThreshold","quiescenceEnumerationLimit","futilityMargin","transpositionCapacity"],dT=["enabled","rerankHeads","lowBudgetGuard","midTurnTacticalGuard","secondaryAnalysis","selectedFollowupProjection","mode","ownSeedCap","ownBeam","perNodeFamilyCap","stepCap","opponentSeedCap","opponentBeam","replySeedCap","replyBeam","expansionCap","spiritFamily"],mT=["enabled","rerankHeads","lowBudgetGuard","midTurnTacticalGuard","secondaryAnalysis","selectedFollowupProjection","spiritFamily"],fT=["ownSeedCap","ownBeam","perNodeFamilyCap","stepCap","opponentSeedCap","opponentBeam","replySeedCap","replyBeam","expansionCap"],yT=["weights","cacheCapacity","rootManaHandoffPenalty","rootBacktrackPenalty","potionSpendPenalty","supermanaProgressBonus","supermanaScoreBonus","opponentManaProgressBonus","opponentManaScoreBonus","softManaHandoffPenalty","softRoundtripPenalty"],ST=["cacheCapacity","rootManaHandoffPenalty","rootBacktrackPenalty","potionSpendPenalty","supermanaProgressBonus","supermanaScoreBonus","opponentManaProgressBonus","opponentManaScoreBonus","softManaHandoffPenalty","softRoundtripPenalty"],hT=["enabled","scoreMargin","shortlistLimit","replyLimit","nodeShareBp","antiHelpScoreMargin","antiHelpReplyLimit","safetyRerank","deepSafetyFloor","deterministicTiebreak","preferCleanRoots","lateSafeManaRootPreference"],bT=["enabled","safetyRerank","deepSafetyFloor","deterministicTiebreak","preferCleanRoots","lateSafeManaRootPreference"],CT=["scoreMargin","shortlistLimit","replyLimit","nodeShareBp","antiHelpScoreMargin","antiHelpReplyLimit"],MT=["targetedDrainerAttackFallback","forcedTacticalPrepass","preferSpiritDevelopment","hardSpiritDeployment","supermanaPrepassException","drainerSafetyScoreMargin","efficiencyScoreMargin"],kT=["targetedDrainerAttackFallback","forcedTacticalPrepass","preferSpiritDevelopment","hardSpiritDeployment","supermanaPrepassException"],RT=["drainerSafetyScoreMargin","efficiencyScoreMargin"];function Qo(e){return Object.freeze(e)}l(Qo,"freezeSection");function eh(e,n){if(n===null||typeof n!="object"||Array.isArray(n))throw new TypeError(`${e} must be a plain object`)}l(eh,"requireRecord");function nh(e,n,o){let t=Object.keys(n).sort(),r=[...o].sort();if(t.length!==r.length||t.some((a,i)=>a!==r[i]))throw new TypeError(`${e} must contain exactly: ${r.join(", ")}`)}l(nh,"validateExactKeys");function Bi(e,n,o){for(let t of o){let r=n[t];if(typeof r!="number"||!Number.isSafeInteger(r)||r<0||r>JS)throw new RangeError(`${e}.${t} must be an integer from 0 through ${JS}`)}}l(Bi,"validateConfigNumbers");function el(e,n,o){for(let t of o)if(typeof n[t]!="boolean")throw new TypeError(`${e}.${t} must be a boolean`)}l(el,"validateConfigBooleans");function ih(e){eh("automove config",e),nh("automove config",e,iT);for(let[t,r]of[["budget",sT],["search",cT],["planner",dT],["evaluation",yT],["replyRisk",hT],["policy",MT]]){let a=e[t];eh(`${t} config`,a),nh(`${t} config`,a,r)}let n=e;if(_i(n.evaluation.weights),!Object.prototype.hasOwnProperty.call(rh,n.budget.preference))throw new RangeError(`unknown automove preference: ${n.budget.preference}`);let o=e.planner.mode;if(o!==$e.Baseline&&o!==$e.Production)throw new RangeError(`unknown planner mode: ${String(o)}`);if(Bi("budget",n.budget,uT),Bi("search",n.search,pT),Bi("planner",n.planner,fT),Bi("evaluation",n.evaluation,ST),Bi("replyRisk",n.replyRisk,CT),Bi("policy",n.policy,RT),el("search",n.search,lT),el("planner",n.planner,mT),el("replyRisk",n.replyRisk,bT),el("policy",n.policy,kT),n.budget.depth<vd||n.budget.depth>gd)throw new RangeError(`budget.depth must be from ${vd} through ${gd}`);if(n.budget.maxVisitedNodes<1||n.budget.maxVisitedNodes>hu)throw new RangeError(`budget.maxVisitedNodes must be from 1 through ${hu}`);if(n.search.transpositionCapacity<1)throw new RangeError("search.transpositionCapacity must be positive");if(n.budget.extensionNodeShareBp>wd||n.replyRisk.nodeShareBp>wd)throw new RangeError(`basis-point shares must not exceed ${wd}`)}l(ih,"validateAutomoveConfig");function PT(e){let n=kd(e.evaluation.weights),o=Object.freeze({budget:Qo({...e.budget}),search:Qo({...e.search}),planner:Qo({...e.planner}),evaluation:Qo({...e.evaluation,weights:n}),replyRisk:Qo({...e.replyRisk}),policy:Qo({...e.policy})});return ih(o),o}l(PT,"defineAutomoveConfig");function we(e,n){let o=(()=>{if(n.evaluation===void 0)return e.evaluation;let r=kd(n.evaluation.weights??e.evaluation.weights);return Qo({...e.evaluation,...n.evaluation,weights:r})})(),t=Object.freeze({budget:n.budget===void 0?e.budget:Qo({...e.budget,...n.budget}),search:n.search===void 0?e.search:Qo({...e.search,...n.search}),planner:n.planner===void 0?e.planner:Qo({...e.planner,...n.planner}),evaluation:o,replyRisk:n.replyRisk===void 0?e.replyRisk:Qo({...e.replyRisk,...n.replyRisk}),policy:n.policy===void 0?e.policy:Qo({...e.policy,...n.policy})});return ih(t),t}l(we,"patchAutomoveConfig");function TT(e,n,o){let t=Te(Math.trunc(n),vd,gd),r=Te(Math.trunc(o),BP,hu),a=Te(Math.trunc(r/24),4,28),i=Te(Math.trunc(r/40),4,18),s=Te(a*5,a,180),u=Te(i*3,i,96);return PT({budget:{preference:e,depth:t,maxVisitedNodes:r,exactLiteRootCalls:0,exactLiteStaticCalls:0,extensionNodeShareBp:wa.extensionNodeShareBp,quiescenceNodes:wa.quiescenceNodes},search:{rootEnumerationLimit:s,rootBranchLimit:a,nodeEnumerationLimit:u,nodeBranchLimit:i,twoPassRootAllocation:!1,volatilityFocus:!1,selectiveExtensions:!1,maxExtensionsPerPath:wa.maxExtensionsPerPath,quietReductions:!1,quietReductionDepthThreshold:3,quiescence:!1,quiescenceEnumerationLimit:wa.quiescenceEnumerationLimit,futilityPruning:!1,futilityMargin:wa.futilityMargin,transpositionTable:!0,transpositionCapacity:wa.transpositionCapacity,exactLiteChecks:!1,exactRootAnalysis:!1},planner:{enabled:!1,rerankHeads:!1,lowBudgetGuard:!1,midTurnTacticalGuard:!1,secondaryAnalysis:!0,selectedFollowupProjection:!0,mode:$e.Baseline,ownSeedCap:0,ownBeam:0,perNodeFamilyCap:0,stepCap:0,opponentSeedCap:0,opponentBeam:0,replySeedCap:0,replyBeam:0,expansionCap:0,spiritFamily:!1},evaluation:{weights:cu,cacheCapacity:wa.evaluationCacheCapacity,rootManaHandoffPenalty:$P,rootBacktrackPenalty:XP,potionSpendPenalty:t>=3?th:QP,supermanaProgressBonus:ZP,supermanaScoreBonus:JP,opponentManaProgressBonus:eT,opponentManaScoreBonus:nT,softManaHandoffPenalty:oT,softRoundtripPenalty:tT},replyRisk:{enabled:!1,scoreMargin:UP,shortlistLimit:jP,replyLimit:KP,nodeShareBp:qP,antiHelpScoreMargin:zP,antiHelpReplyLimit:Ed,safetyRerank:!1,deepSafetyFloor:!1,deterministicTiebreak:!1,preferCleanRoots:!1,lateSafeManaRootPreference:!1},policy:{targetedDrainerAttackFallback:!1,forcedTacticalPrepass:!0,preferSpiritDevelopment:!0,hardSpiritDeployment:!1,supermanaPrepassException:!1,drainerSafetyScoreMargin:Od,efficiencyScoreMargin:YP}})}l(TT,"automoveConfigFromBudget");function wT(e){if(e.budget.depth>=3){let n=Te(e.search.rootBranchLimit+10,6,36),o=Te(nl(e.search.nodeBranchLimit,11),6,18);return we(e,{search:{rootBranchLimit:n,nodeBranchLimit:o,rootEnumerationLimit:Te(n*6,n,220),nodeEnumerationLimit:Te(o*4,o,108)},evaluation:{weights:Ta}})}return we(e,{evaluation:{weights:Rd}})}l(wT,"withRuntimeSearchShape");function vT(e){let n=Te(e.search.rootBranchLimit+8,8,40),o=Te(nl(e.search.nodeBranchLimit,2),6,18);return we(e,{search:{rootBranchLimit:n,nodeBranchLimit:o,rootEnumerationLimit:Te(n*6,n,240),nodeEnumerationLimit:Te(o*4,o,108)}})}l(vT,"withFastWideRootShape");function gT(e){let n=Te(e.search.rootBranchLimit,8,36),o=Te(e.search.nodeBranchLimit+3,9,18);return we(e,{search:{rootBranchLimit:n,nodeBranchLimit:o,rootEnumerationLimit:Te(n*6,n,220),nodeEnumerationLimit:Te(o*6,o,132)}})}l(gT,"withNormalDeeperShape");function AT(e){let n=rh[e],o=wT(TT(e,n.depth,n.maxVisitedNodes));if(e==="fast")return we(vT(o),{search:{twoPassRootAllocation:!1,selectiveExtensions:!1,quietReductions:!0,volatilityFocus:!1},evaluation:{weights:Td,rootManaHandoffPenalty:300,rootBacktrackPenalty:220,potionSpendPenalty:220,supermanaProgressBonus:320,supermanaScoreBonus:600,opponentManaProgressBonus:200,opponentManaScoreBonus:310,softManaHandoffPenalty:280,softRoundtripPenalty:220},replyRisk:{enabled:!0,scoreMargin:125,shortlistLimit:4,replyLimit:10,nodeShareBp:650,antiHelpScoreMargin:220,antiHelpReplyLimit:Ed,safetyRerank:!1,deepSafetyFloor:!1,deterministicTiebreak:!1,preferCleanRoots:!1},policy:{forcedTacticalPrepass:!0,preferSpiritDevelopment:!0,hardSpiritDeployment:!1,supermanaPrepassException:!0,drainerSafetyScoreMargin:Od,efficiencyScoreMargin:1700}});let t=gT(o);if(e==="normal"){let i=Te(bu(t.budget.maxVisitedNodes,3,2),t.budget.maxVisitedNodes,hu),s=Te(bu(i,112,100),i,hu),u=Te(nl(t.search.rootBranchLimit,1),12,38),c=Te(t.search.nodeBranchLimit+2,8,18);return we(t,{budget:{maxVisitedNodes:s},search:{rootBranchLimit:u,nodeBranchLimit:c,rootEnumerationLimit:Te(u*6,u,240),nodeEnumerationLimit:Te((c+2)*6,c,156),twoPassRootAllocation:!0,selectiveExtensions:!1,quietReductions:!1,volatilityFocus:!0},evaluation:{rootManaHandoffPenalty:340,rootBacktrackPenalty:240,potionSpendPenalty:130,supermanaProgressBonus:240,supermanaScoreBonus:300,opponentManaProgressBonus:220,opponentManaScoreBonus:280,softManaHandoffPenalty:340,softRoundtripPenalty:260},replyRisk:{enabled:!0,scoreMargin:145,shortlistLimit:7,replyLimit:16,nodeShareBp:1350,antiHelpScoreMargin:300,antiHelpReplyLimit:10,safetyRerank:!0,deepSafetyFloor:!0,deterministicTiebreak:!1,preferCleanRoots:!0},policy:{forcedTacticalPrepass:!0,preferSpiritDevelopment:!0,hardSpiritDeployment:!0,drainerSafetyScoreMargin:4200,efficiencyScoreMargin:1400}})}let r=Te(t.search.rootBranchLimit,14,34),a=Te(t.search.nodeBranchLimit,9,15);return we(t,{budget:{maxVisitedNodes:Ad},search:{rootBranchLimit:r,nodeBranchLimit:a,rootEnumerationLimit:Te(r*6,r,204),nodeEnumerationLimit:Te((a+2)*6,a,132),twoPassRootAllocation:!0,selectiveExtensions:!0,quietReductions:!0,volatilityFocus:!0,futilityPruning:!0,quietReductionDepthThreshold:2},evaluation:{rootManaHandoffPenalty:340,rootBacktrackPenalty:240,potionSpendPenalty:130,supermanaProgressBonus:240,supermanaScoreBonus:300,opponentManaProgressBonus:280,opponentManaScoreBonus:340,softManaHandoffPenalty:340,softRoundtripPenalty:260},replyRisk:{enabled:!0,scoreMargin:165,shortlistLimit:9,replyLimit:24,nodeShareBp:2e3,antiHelpScoreMargin:300,antiHelpReplyLimit:10,safetyRerank:!0,deepSafetyFloor:!0,deterministicTiebreak:!1,preferCleanRoots:!0},policy:{forcedTacticalPrepass:!1,preferSpiritDevelopment:!0,hardSpiritDeployment:!0,drainerSafetyScoreMargin:4800,efficiencyScoreMargin:1400}})}l(AT,"automoveConfigFromPreference");function ET(e,n){let o=n.budget.depth<3?ZS:rT(e,n.budget.depth).weights;return we(n,{evaluation:{weights:o},budget:{maxVisitedNodes:n.budget.depth>=3?bu(n.budget.maxVisitedNodes,120,100):n.budget.maxVisitedNodes}})}l(ET,"withRuntimeScoringWeights");function OT(e){let n=Te(e.search.rootBranchLimit+5,12,40),o=Te(nl(e.search.nodeBranchLimit,2),8,18);return we(e,{search:{rootBranchLimit:n,nodeBranchLimit:o,rootEnumerationLimit:Te(n*6,n,240),nodeEnumerationLimit:Te(o*4,o,108),twoPassRootAllocation:!1,selectiveExtensions:!1,quietReductions:!0,volatilityFocus:!1},evaluation:{weights:Td,rootManaHandoffPenalty:300,rootBacktrackPenalty:220,potionSpendPenalty:th,supermanaProgressBonus:320,supermanaScoreBonus:600,opponentManaProgressBonus:200,opponentManaScoreBonus:310,softManaHandoffPenalty:280,softRoundtripPenalty:220},replyRisk:{scoreMargin:125,shortlistLimit:4,replyLimit:10,nodeShareBp:650,antiHelpScoreMargin:220,antiHelpReplyLimit:Ed,safetyRerank:!1,deepSafetyFloor:!1,deterministicTiebreak:!1,preferCleanRoots:!1},policy:{hardSpiritDeployment:!1,supermanaPrepassException:!0,drainerSafetyScoreMargin:Od,efficiencyScoreMargin:1700}})}l(OT,"applyRuntimeNormalFastPolicyBlock");function IT(e){let n=OT(e),o=Te(n.search.rootBranchLimit+2,12,40);return we(n,{budget:{exactLiteRootCalls:1,exactLiteStaticCalls:1,maxVisitedNodes:bu(n.budget.maxVisitedNodes,130,100)},search:{exactLiteChecks:!0,rootBranchLimit:o,rootEnumerationLimit:Te(o*6,o,240)},replyRisk:{shortlistLimit:Math.max(n.replyRisk.shortlistLimit,5),replyLimit:Math.max(n.replyRisk.replyLimit,12),nodeShareBp:Math.max(n.replyRisk.nodeShareBp,900)}})}l(IT,"applyRuntimeNormalFastCoreBudgetSpendProfile");function xT(e,n){let o=Te(n.search.rootBranchLimit,14,34),t=Te(n.search.nodeBranchLimit,9,15);return we(n,{budget:{maxVisitedNodes:bu(Ad,9,8)},search:{rootBranchLimit:Math.min(o+1,16),nodeBranchLimit:Math.min(t+1,12),rootEnumerationLimit:Te(o*6,o,204),nodeEnumerationLimit:Te((t+2)*6,t,132),futilityPruning:!0,quietReductions:!0,quietReductionDepthThreshold:2,selectiveExtensions:!0,quiescence:!0},planner:{rerankHeads:!0},evaluation:{weights:aT(e,n.budget.depth).weights,opponentManaProgressBonus:320,opponentManaScoreBonus:400},replyRisk:{enabled:!0,scoreMargin:165,shortlistLimit:9,replyLimit:24,nodeShareBp:2e3,safetyRerank:!0,deepSafetyFloor:!0,deterministicTiebreak:!0},policy:{forcedTacticalPrepass:!1,drainerSafetyScoreMargin:4800}})}l(xT,"applyProPrimaryProfile");function NT(e){return we(e,{budget:{exactLiteRootCalls:0,exactLiteStaticCalls:0},search:{exactLiteChecks:!1}})}l(NT,"withPreExactRuntimePolicy");function _r(e){return we(e,{planner:{rerankHeads:!1,enabled:!0,mode:$e.Production,ownSeedCap:14,ownBeam:5,perNodeFamilyCap:4,stepCap:6,opponentSeedCap:6,opponentBeam:2,replySeedCap:3,replyBeam:1,expansionCap:176,spiritFamily:!0,lowBudgetGuard:!0,midTurnTacticalGuard:!0},replyRisk:{enabled:!1,lateSafeManaRootPreference:!0},policy:{targetedDrainerAttackFallback:!0}})}l(_r,"withProductionPlanner");function Zo(e,n){let o=ET(e,AT(n));return n==="pro"&&(o=xT(e,o)),o=NT(o),n==="normal"&&(o=IT(o)),o}l(Zo,"automoveConfigForGame");var DT=Object.freeze(["mana-scored","pickup-mana","mon-fainted","use-potion","pickup-bomb","pickup-potion","bomb-attack","bomb-explosion"]),_T=Object.freeze(["mana-scored","pickup-mana","mon-fainted","use-potion","bomb-attack","bomb-explosion","spirit-target-move","supermana-back-to-base"]);function Cu(e,n){return e<n?-1:e>n?1:0}l(Cu,"compareNumber");function ol(e,n){let o=l(r=>{switch(r.kind){case"takeback":return 0;case"location":return 1;case"modifier":return 2}},"tag"),t=Cu(o(e),o(n));return t!==0?t:e.kind==="location"&&n.kind==="location"?Cu(e.location.i,n.location.i)||Cu(e.location.j,n.location.j):e.kind==="modifier"&&n.kind==="modifier"?Cu(Op[e.modifier],Op[n.modifier]):0}l(ol,"compareInputs");function Eo(e,n){let o=Math.min(e.length,n.length);for(let t=0;t<o;t+=1){let r=e[t],a=n[t];if(r===void 0||a===void 0)break;let i=ol(r,a);if(i!==0)return i}return Cu(e.length,n.length)}l(Eo,"compareInputChains");function sh(e,n,o,t){let r=e.fork(),a=r.applyAndAddResultingEvents(o);a!==void 0&&t.push({inputs:n.slice(),game:r,events:a})}l(sh,"appendAppliedTransition");function Id(e,n,o,t,r,a){if(e.checkpoint()){t.length=0;return}if(t.length>=r||o.length>Tt)return;let i=n.processInputWithStartOptions(o,!0,!1,a);switch(i.kind){case"invalid-input":return;case"events":{sh(n,o,i.events,t);return}case"locations-to-start-from":for(let s of i.locations){if(t.length>=r)break;o.push({kind:"location",location:{i:s.i,j:s.j}}),Id(e,n,o,t,r,a),o.pop()}return;case"next-input-options":for(let s of i.nextInputs){if(t.length>=r)break;o.push(s.input),Id(e,n,o,t,r,a),o.pop()}}}l(Id,"collectLegalTransitions");function Ao(e,n,o,t=Yn){if(e.session.checkpoint()||o<=0)return[];let r=[];return Id(e.session,n.fork(),[],r,o,t),e.session.cancelled?[]:(r.sort((a,i)=>Eo(a.inputs,i.inputs)),r)}l(Ao,"enumerateLegalTransitions");function uh(e){let n=new Uint8Array(121);for(let o of e)n[ne(o)]=1;return n}l(uh,"locationMask");function FT(e,n){let o=e.inputs[0];return o?.kind==="location"&&n[ne(o.location)]===1}l(FT,"startsAtMaskedLocation");function xd(e,n,o,t,r){if(r.length===0)return Ao(e,n,o,t);let a=uh(r),i=Math.max(Math.floor(o/2),Math.max(0,o-60)),s=Math.max(0,o-i),u=[],c=[];for(let p of Ao(e,n,o,t))if(FT(p,a)?u.length<i&&u.push(p):c.length<s&&c.push(p),u.length>=i&&(s===0||c.length>=s))break;return[...u,...c]}l(xd,"enumerateLegalTransitionsWithPriority");function ch(e,n,o,t,r,a,i){if(e.checkpoint()){t.length=0;return}if(t.length>=r||o.length>Tt)return;let s=n.processInputWithStartOptions(o,!0,!1,a);if(s.kind==="invalid-input")return;if(s.kind==="events"){if(i!==void 0&&o.length===0)return;sh(n,o,s.events,t);return}let u=s.kind==="locations-to-start-from"?s.locations.map(c=>({kind:"location",location:{i:c.i,j:c.j}})):s.nextInputs.map(c=>c.input);u.sort(ol);for(let c of u){if(t.length>=r)break;o.length===0&&i!==void 0&&(c.kind!=="location"||i[ne(c.location)]!==1)||(o.push(c),ch(e,n,o,t,r,a,i),o.pop())}}l(ch,"collectLexicographicBounded");function tl(e,n,o,t=Yn,r){if(o<=0||e.session.checkpoint())return[];let a=r===void 0?void 0:uh(r),i=[];return ch(e.session,n.fork(),[],i,o,t,a),e.session.checkpoint()?[]:i}l(tl,"enumerateLegalTransitionsLexicographicBounded");function va(e,n){return Sn(e,n)?.game}l(va,"applyInputsForSearch");function Sn(e,n){let o=e.fork(),t=o.processInput(n,!1,!1);return t.kind==="events"?{game:o,events:t.events}:void 0}l(Sn,"applyInputsForSearchWithEvents");function lh(e,n){return e.some(o=>n.includes(o.kind))}l(lh,"hasEventKind");function Mu(e){return lh(e,DT)}l(Mu,"hasMaterialEvent");function ph(e){return lh(e,_T)}l(ph,"isQuiescenceTacticalTransition");var ku=new RangeError("fast workspace allocation failed");function Ru(e){return e===ku}l(Ru,"isFastWorkspaceAllocationFailure");function Li(e){throw e instanceof RangeError?ku:e}l(Li,"rethrowFastWorkspaceAllocation");var oo=Object.keys(Ep).length,Qt=Object.keys(dt).length,rl=oo*Qt,bn=1,Nn=2,rn=3,mh=1,fh=2,to=3,yo=1,yh=2,ro=3,Gi=dt[A.Demon],ao=dt[A.Drainer],Pu=dt[A.Angel],al=dt[A.Spirit],il=dt[A.Mystic],WT=0,BT=1,Ft=2,LT=3,Sh=5,xn=7,Vi=ne(Fs);function He(e){return e&3}l(He,"cellOccupancy");function wn(e){return e>>2&7}l(wn,"cellMonKind");function $n(e){return e>>5&1}l($n,"cellMonColor");function Bn(e){return e>>6&3}l(Bn,"cellCooldown");function Oe(e){return e>>8&3}l(Oe,"cellMana");function Be(e){return e>>10&3}l(Be,"cellConsumable");function Hi(e){let n=Be(e);return n===0||n===yo}l(Hi,"damagingAttackCanComplete");function Ui(e,n,o,t,r){return rn|e<<2|n<<5|o<<6|t<<8|r<<10}l(Ui,"makeMonCell");function Fr(e){return bn|e<<8}l(Fr,"makeManaCell");function hh(e){return Nn|e<<10}l(hh,"makeConsumableCell");function Wt(e,n){return Ip(e===to,e-1===n)}l(Wt,"manaScoreValue");function On(e,n){return e*oo+n}l(On,"monId");function ji(e){return e!==Ft&&e<xn}l(ji,"squareIsRegularForMovement");function Zt(e){return e>=Sh&&e<xn}l(Zt,"squareIsPool");function sl(e){return Math.trunc((e-xn)/oo)}l(sl,"squareMonBaseKind");function ul(e){return(e-xn)%oo}l(ul,"squareMonBaseColor");function Ue(e,n){return e[n]??0}l(Ue,"u8");function de(e,n){return e[n]??0}l(de,"u16");function G(e,n){return e[n]??0}l(G,"i32");function So(e,n){let o=e[n];if(o===void 0)throw new RangeError("automove search slot index out of range");return o}l(So,"at");function cl(e,n,o){return Ui(dt[e.kind],on(e.color),e.cooldown,n,o)}l(cl,"fastMonCellFromMon");function GT(e){let n=new Uint8Array(121),o=Ec(e);for(let t=0;t<121;t+=1){let r=o[t];if(r!==void 0)switch(r.kind){case"regular":n[t]=WT;break;case"consumable-base":n[t]=BT;break;case"supermana-base":n[t]=Ft;break;case"mana-base":n[t]=LT+on(r.color);break;case"mana-pool":n[t]=Sh+on(r.color);break;case"mon-base":n[t]=xn+On(dt[r.monKind],on(r.color));break}}return n}l(GT,"buildSquares");var VT=new Map(ua.map(e=>[e,GT(e)]));function ll(e){let n=VT.get(e);if(n===void 0)throw new TypeError(`unsupported game variant: ${e}`);try{return n.slice()}catch(o){Li(o)}}l(ll,"fastSquaresForVariant");var Nd=(()=>{let e=new Int32Array(rl).fill(-1),n=ll(So(ua,0));for(let o of ca){let t=ne(o),r=Ue(n,t);r>=xn&&(e[r-xn]=t)}return e})();function Tu(e){let n=[],o=new Int32Array(121),t=new Int32Array(121);for(let r=0;r<121;r+=1){t[r]=n.length;let a=e(Uo(r)).map(ne).sort((i,s)=>i-s);n.push(...a),o[r]=a.length}return{list:new Int32Array(n),starts:t,counts:o}}l(Tu,"buildOffsetTable");var Oo=Tu(ge),Ki=Tu(ct),qi=Tu(lt),pl=Tu(pt),dl=Tu(hr),HT=(()=>{let e=new Uint8Array(14641);for(let n=0;n<121;n+=1){let o=Math.trunc(n/11),t=n%11;for(let r=0;r<121;r+=1){let a=Math.trunc(r/11),i=r%11;e[n*121+r]=Math.max(Math.abs(o-a),Math.abs(t-i))}}return e})();function Jo(e,n){return Ue(HT,e*121+n)}l(Jo,"chebyshev");function ml(e,n){let o=Math.trunc(e/11),t=e%11,r=Math.trunc(n/11),a=n%11;return Math.trunc((o+r)/2)*11+Math.trunc((t+a)/2)}l(ml,"midpoint");var dh=(()=>{let e=[],n=ll(So(ua,0));for(let o=0;o<121;o+=1)Zt(Ue(n,o))&&e.push(o);return new Int32Array(e)})(),bh=(()=>{let e=new Uint8Array(121*oo);for(let n=0;n<121;n+=1){let o=Math.trunc(n/11),t=n%11,r=Math.min(t,10-t);for(let a=0;a<oo;a+=1){let i=a===0?10:0,s=Math.abs(i-o);e[a*121+n]=s>r?s:r}}return e})(),Ch=(()=>{let e=new Uint8Array(121);for(let n=0;n<121;n+=1)e[n]=Math.abs(gc-Math.trunc(n/11));return e})(),zi=(()=>{let e=new Uint8Array(121);for(let n=0;n<121;n+=1){let o=99;for(let t=0;t<dh.length;t+=1){let r=Jo(n,G(dh,t));r<o&&(o=r)}e[n]=o}return e})();function UT(e){let n=e>>>0;return()=>(n^=n<<13,n>>>=0,n^=n>>>17,n^=n<<5,n>>>=0,n|0)}l(UT,"xorshift");function Wr(e,n){let o=new Int32Array(n);for(let t=0;t<n;t+=1)o[t]=e();return o}l(Wr,"randomTable");var Br=UT(49734321),Mh=3,fl=1+rl*Mh,jT=Wr(Br,121*fl),KT=Wr(Br,121*fl),qT=Wr(Br,484),zT=Wr(Br,484),$T=Wr(Br,484),XT=Wr(Br,484),kh=2048,yl=Wr(Br,kh),Dd=Wr(Br,kh);function Rh(e){return He(e)!==rn?0:1+On(wn(e),$n(e))*Mh+Bn(e)}l(Rh,"monSlot");function Sl(e,n){return n===0?0:G(jT,e*fl+Rh(n))^G(qT,e*4+Oe(n))^G($T,e*4+Be(n))}l(Sl,"cellHashLo");function hl(e,n){return n===0?0:G(KT,e*fl+Rh(n))^G(zT,e*4+Oe(n))^G(XT,e*4+Be(n))}l(hl,"cellHashHi");var Jt=0,wu=1,vu=2,Io=3,Bt=4,gu=5,io=127,er=0,nr=1,Aa=2,Bd=3,Ld=-2,YT=16;function Jn(e,n,o,t,r){return e|n<<3|o<<10|t<<17|r<<24}l(Jn,"encodeMove");function Au(e){return e&7}l(Au,"moveType");function Lt(e){return e>>3&127}l(Lt,"moveFrom");function et(e){return e>>10&127}l(et,"moveTo");function Lr(e){return e>>17&127}l(Lr,"moveAux");function Eu(e){return e>>24&3}l(Eu,"moveModifier");function _d(e,n,o){if(e.length!==n)throw new RangeError(`fast position ${o} length must be ${n}`)}l(_d,"validateArrayLength");var jd=class jd{constructor(){ee(this,"cells",new Uint16Array(121));ee(this,"squares",new Uint8Array(121));ee(this,"monLocations",new Int32Array(rl).fill(-1));ee(this,"freeMana",new Int32Array(oo));ee(this,"manaIndices",new Int32Array(YT));ee(this,"manaCount",0);ee(this,"whiteScore",0);ee(this,"blackScore",0);ee(this,"active",0);ee(this,"monsMoves",0);ee(this,"manaMoves",0);ee(this,"actionsUsed",0);ee(this,"potions",new Int32Array(oo));ee(this,"firstTurn",!1);ee(this,"hashLo",0);ee(this,"hashHi",0)}copyFrom(n){let o=n;this.cells.set(o.cells),this.squares=o.squares,this.monLocations.set(o.monLocations),this.freeMana.set(o.freeMana),this.manaIndices.set(o.manaIndices),this.manaCount=o.manaCount,this.whiteScore=o.whiteScore,this.blackScore=o.blackScore,this.active=o.active,this.monsMoves=o.monsMoves,this.manaMoves=o.manaMoves,this.actionsUsed=o.actionsUsed,this.potions.set(o.potions),this.firstTurn=o.firstTurn,this.hashLo=o.hashLo,this.hashHi=o.hashHi}reset(n){_d(n.cells,121,"cells"),_d(n.squares,121,"squares"),_d(n.potions,oo,"potions");let o;try{o=new Uint8Array(n.squares)}catch(m){Li(m)}let t=0;for(let m=0;m<121;m+=1){let d=de(n.cells,m);if(!(d===0||He(d)!==bn)&&(t+=1,t>this.manaIndices.length))throw new RangeError("fast mana index capacity exceeded")}let r=n.whiteScore,a=n.blackScore,i=n.active,s=n.monsMoves,u=n.manaMoves,c=n.actionsUsed,p=n.firstTurn;this.cells.set(n.cells),this.squares=o,this.whiteScore=r,this.blackScore=a,this.active=i,this.monsMoves=s,this.manaMoves=u,this.actionsUsed=c,this.potions.set(n.potions),this.firstTurn=p,this.rebuildDerived()}rebuildDerived(){this.monLocations.fill(-1),this.freeMana[0]=0,this.freeMana[1]=0,this.manaIndices.fill(0),this.manaCount=0;let n=0,o=0;for(let t=0;t<121;t+=1){let r=de(this.cells,t);if(r===0)continue;n^=Sl(t,r),o^=hl(t,r);let a=He(r);if(a===rn)this.monLocations[On(wn(r),$n(r))]=t;else if(a===bn){let i=Oe(r);(i===1||i===2)&&(this.freeMana[i-1]=G(this.freeMana,i-1)+1),this.manaIndices[this.manaCount]=t,this.manaCount+=1}}this.hashLo=n,this.hashHi=o}};l(jd,"MutableFastPosition");var Fd=jd,Cl=Fd;function Ou(e,n,o){let t=G(e.monLocations,On(Pu,n));if(t<0)return!1;let r=de(e.cells,t);return He(r)===rn&&wn(r)===Pu&&$n(r)===n&&Bn(r)===0&&Jo(t,o)===1}l(Ou,"awakeAngelGuards");function QT(e,n){let o=e.manaCount;for(let t=0;t<o;t+=1)if(G(e.manaIndices,t)===n){for(let r=t+1;r<o;r+=1)e.manaIndices[r-1]=G(e.manaIndices,r);e.manaIndices[o-1]=0,e.manaCount=o-1;return}throw new RangeError(`missing fast mana index: ${n}`)}l(QT,"removeManaIndex");function ZT(e,n){let o=e.manaCount;if(o>=e.manaIndices.length)throw new RangeError("fast mana index capacity exceeded");let t=o;for(;t>0&&G(e.manaIndices,t-1)>n;)e.manaIndices[t]=G(e.manaIndices,t-1),t-=1;e.manaIndices[t]=n,e.manaCount=o+1}l(ZT,"insertManaIndex");function Le(e,n,o){let t=de(e.cells,n);if(t!==o){if(t!==0){e.hashLo^=Sl(n,t),e.hashHi^=hl(n,t);let r=He(t);if(r===rn){let a=On(wn(t),$n(t));G(e.monLocations,a)===n&&(e.monLocations[a]=-1)}else if(r===bn){let a=Oe(t);(a===1||a===2)&&(e.freeMana[a-1]=G(e.freeMana,a-1)-1),QT(e,n)}}if(e.cells[n]=o,o!==0){e.hashLo^=Sl(n,o),e.hashHi^=hl(n,o);let r=He(o);if(r===rn)e.monLocations[On(wn(o),$n(o))]=n;else if(r===bn){let a=Oe(o);(a===1||a===2)&&(e.freeMana[a-1]=G(e.freeMana,a-1)+1),ZT(e,n)}}}}l(Le,"setCell");function bl(e){return Ui(wn(e),$n(e),Bn(e),0,0)}l(bl,"plainMonCell");function ga(e,n,o){return Ui(wn(e),$n(e),Bn(e),n,o)}l(ga,"carryingMonCell");function Ph(e,n){e.potions[n]=G(e.potions,n)+1}l(Ph,"addPotion");function Wd(e,n,o,t){if(Oe(n)===0&&Be(n)===0&&t===nr){Le(e,o,ga(n,0,yo));return}Le(e,o,n),Ph(e,$n(n))}l(Wd,"collectConsumableAt");function JT(e,n){e.active===0?e.whiteScore+=n:e.blackScore+=n}l(JT,"addScore");function Gd(e){if(e.actionsUsed<Fn){e.actionsUsed+=1;return}e.potions[e.active]=G(e.potions,e.active)-1}l(Gd,"consumeAction");function Th(e,n){let o=wn(n),t=$n(n),r=G(Nd,On(o,t));Le(e,r,Ui(o,t,2,0,0))}l(Th,"faintMonAt");function ew(e){let n=de(e.cells,Vi);He(n)===rn&&Oe(n)===0&&Be(n)===0?Le(e,Vi,ga(n,to,0)):Le(e,Vi,Fr(to))}l(ew,"supermanaBackToBase");function nw(e,n,o){let t=Oe(n);t===to?ew(e):t!==0&&Le(e,o,Fr(t)),Be(n)===yo&&Le(e,o,0)}l(nw,"releaseFaintedCarry");function Vd(e,n,o){Th(e,n),nw(e,n,o)}l(Vd,"faintTargetAndReleaseCarry");function Hd(e,n,o){JT(e,Wt(o,e.active));let t=de(e.cells,n);He(t)===rn?Le(e,n,bl(t)):Le(e,n,0)}l(Hd,"scoreCarriedManaAt");function ow(e,n){let o=Lt(n),t=et(n),r=de(e.cells,o),a=de(e.cells,t),i=Oe(r);if(e.monsMoves+=1,Le(e,o,0),Le(e,t,r),a!==0){let s=He(a);s===bn?(i!==0&&Le(e,o,Fr(i)),Le(e,t,ga(r,Oe(a),0))):s===Nn&&Be(a)===ro&&Wd(e,r,t,Eu(n))}i!==0&&Zt(Ue(e.squares,t))&&Hd(e,t,i)}l(ow,"applyMonMove");function tw(e,n){let o=Lt(n),t=et(n),r=Oe(de(e.cells,o)),a=de(e.cells,t);e.manaMoves+=1,Le(e,o,0),Le(e,t,Fr(r)),a!==0&&Le(e,t,ga(a,r,0)),Zt(Ue(e.squares,t))&&Hd(e,t,r)}l(tw,"applyManaMove");function rw(e,n){let o=et(n),t=de(e.cells,o);Gd(e),Le(e,o,0),Vd(e,t,o)}l(rw,"applyMysticAction");function aw(e,n){let o=Lt(n),t=et(n),r=Eu(n),a=r===Bd?io:Lr(n),i=de(e.cells,o),s=de(e.cells,t),u=G(Nd,On(wn(i),$n(i))),c=Be(s)!==yo||a===io||a===u;return Le(e,o,0),a===io?Le(e,t,bl(i)):Le(e,t,0),Gd(e),s!==0&&(Vd(e,s,t),Be(s)===yo&&Th(e,i)),a!==io&&(r===nr?Le(e,a,ga(i,0,yo)):(Le(e,a,bl(i)),r===Aa&&Ph(e,$n(i)))),c}l(aw,"applyDemonAction");function iw(e,n){let o=Lt(n),t=et(n),r=de(e.cells,o),a=de(e.cells,t);Le(e,t,0),Le(e,o,bl(r)),Vd(e,a,t)}l(iw,"applyBombAttack");function sw(e,n){let o=et(n),t=Lr(n),r=Eu(n),a=de(e.cells,o),i=de(e.cells,t),s=Oe(a);if(Gd(e),Le(e,o,0),Le(e,t,a),i!==0){let u=He(a);if(u===rn){let c=He(i);c===bn?(s!==0&&Le(e,o,Fr(s)),Le(e,t,ga(a,Oe(i),0))):c===Nn&&Wd(e,a,t,r)}else u===bn?Le(e,t,ga(i,s,0)):u===Nn&&Wd(e,i,t,r)}s!==0&&Zt(Ue(e.squares,t))&&Hd(e,t,s)}l(sw,"applySpiritAction");function Ud(e){let n=Lp(e.whiteScore,e.blackScore);return n===void 0?-1:on(n)}l(Ud,"positionWinner");function wh(e){return Nc(e.firstTurn,e.actionsUsed,G(e.potions,e.active))}l(wh,"canUseAction");function vh(e,n){return G(e.freeMana,e.active)===0?!1:Gp(e.firstTurn,e.monsMoves,e.manaMoves,e.actionsUsed,G(e.potions,e.active),n!==0,!0)}l(vh,"manaStartsAllowed");function uw(e){return Vp(e.firstTurn,e.monsMoves,e.manaMoves,G(e.freeMana,e.active)!==0)}l(uw,"shouldAdvanceTurn");function cw(e){e.active^=1,e.firstTurn=!1,e.actionsUsed=0,e.manaMoves=0,e.monsMoves=0;let n=e.active;for(let o=0;o<Qt;o+=1){let t=G(e.monLocations,On(o,n));if(t<0)continue;let r=de(e.cells,t),a=Bn(r);a===0||Oe(r)!==0||Be(r)!==0||Le(e,t,Ui(wn(r),$n(r),a-1,Oe(r),Be(r)))}}l(cw,"advanceTurn");function gh(e,n){let o=e,t=Au(n),r=!0;switch(t){case Jt:ow(o,n);break;case wu:tw(o,n);break;case vu:rw(o,n);break;case Io:r=aw(o,n);break;case Bt:sw(o,n);break;case gu:iw(o,n);break;default:throw new RangeError(`unsupported fast move type: ${t}`)}let a=Ud(o);return a===-1&&uw(o)&&cw(o),r?a:Ld}l(gh,"applyFastMove");function Ah(e){switch(e){case q.Bomb:return yo;case q.Potion:return yh;case q.BombOrPotion:return ro}}l(Ah,"consumableCode");function Eh(e){return e.kind==="supermana"?to:on(e.color)===0?mh:fh}l(Eh,"manaCode");var Oh=2147483647;function Ih(e,n,o){if(!Number.isSafeInteger(o)||o<0||n.whitePotionsCount>Oh-o||n.blackPotionsCount>Oh-o||n.turnNumber>Number.MAX_SAFE_INTEGER-o)return!1;let t;try{t=new Uint8Array(e.monLocations.length)}catch(a){if(a instanceof RangeError)return!1;throw a}let r=0;for(let a of n.board.items){if(a===void 0)continue;if(no(a)!==void 0&&(r+=1,r>e.manaIndices.length))return!1;let i=z(a);if(i===void 0)continue;let s=On(dt[i.kind],on(i.color));if(t[s]!==0)return!1;t[s]=1}try{lw(e,n)}catch(a){if(Ru(a))return!1;throw a}return!0}l(Ih,"tryLoadPosition");function lw(e,n){let o;try{o=new Uint16Array(121)}catch(r){Li(r)}let t=n.board.items;for(let r=0;r<121;r+=1){let a=t[r];if(a!==void 0)switch(a.kind){case"mon":o[r]=cl(a.mon,0,0);break;case"mana":o[r]=Fr(Eh(a.mana));break;case"mon-with-mana":o[r]=cl(a.mon,Eh(a.mana),0);break;case"mon-with-consumable":o[r]=cl(a.mon,0,Ah(a.consumable));break;case"consumable":o[r]=hh(Ah(a.consumable));break}}e.reset({cells:o,squares:ll(n.variant()),whiteScore:n.whiteScore,blackScore:n.blackScore,active:on(n.activeColor),monsMoves:n.monsMovesCount,manaMoves:n.manaMovesCount,actionsUsed:n.actionsUsedCount,potions:[n.whitePotionsCount,n.blackPotionsCount],firstTurn:n.isFirstTurn()})}l(lw,"loadPosition");function Ml(e){return{kind:"location",location:Uo(e)}}l(Ml,"locationInput");function pw(e){return{kind:"modifier",modifier:e===nr?Ze.SelectBomb:Ze.SelectPotion}}l(pw,"modifierInput");function Kd(e){let n=Au(e),o=[Ml(Lt(e)),Ml(et(e))];n===Bt?o.push(Ml(Lr(e))):n===Io&&Lr(e)!==io&&o.push(Ml(Lr(e)));let t=Eu(e);return(t===nr||t===Aa)&&(n===Jt||n===Io||n===Bt)&&o.push(pw(t)),o}l(Kd,"moveToInputs");var Gr=1e6,kl=1e6,dw=["scoreUnit","potion","bomb","activeMon","faintMon","faintDrainer","faintCooldownStep","drainerCloseToMana","drainerCloseToOwnPool","drainerCloseToSupermana","carrierCloseToPool","carrierPointBonus","carrierScoresThisTurn","carrierScoresNextTurn","winningCarrier","drainerPickupScoresThisTurn","manaToOwnerPool","manaPointsAttraction","manaDrainerControl","supermanaDrainerControl","monCloseToCenter","spiritCloseToEnemy","spiritOnOwnBase","angelCloseToDrainer","angelGuardingDrainer","attackerCloseToEnemyDrainer","drainerThreatImmediate","drainerThreatWalk","carrierThreatFactor"];function Rl(e){if(typeof e!="object"||e===null||Array.isArray(e))throw new TypeError("fast evaluation weights must be an object");let n=e,o={};for(let t of dw){let r=n[t];if(typeof r!="number")throw new TypeError(`weights.${t} must be a number`);if(!Number.isSafeInteger(r)||r<-kl||r>kl)throw new RangeError(`weights.${t} must be a safe integer from -${kl} through ${kl}`);o[t]=r}return Object.freeze(o)}l(Rl,"normalizeEvalWeights");var $i=Object.freeze({scoreUnit:12e3,potion:240,bomb:220,activeMon:45,faintMon:520,faintDrainer:900,faintCooldownStep:80,drainerCloseToMana:330,drainerCloseToOwnPool:280,drainerCloseToSupermana:180,carrierCloseToPool:820,carrierPointBonus:420,carrierScoresThisTurn:900,carrierScoresNextTurn:700,winningCarrier:4e3,drainerPickupScoresThisTurn:420,manaToOwnerPool:170,manaPointsAttraction:350,manaDrainerControl:26,supermanaDrainerControl:40,monCloseToCenter:210,spiritCloseToEnemy:200,spiritOnOwnBase:180,angelCloseToDrainer:150,angelGuardingDrainer:260,attackerCloseToEnemyDrainer:150,drainerThreatImmediate:700,drainerThreatWalk:240,carrierThreatFactor:2});function xh(e,n){return Ue(bh,n*121+e)}l(xh,"ownPoolDistance");function mw(e){return Ue(Ch,e)}l(mw,"centerDistance");function fw(e,n,o,t){if(!Hi(de(e.cells,n)))return 99;let r=o^1,a=99;for(let i=0;i<Qt;i+=1){let s=G(e.monLocations,On(i,r));if(s<0)continue;let u=de(e.cells,s);if(He(u)!==rn)continue;if(Be(u)===yo){let d=Jo(s,n)-3,f=d<0?0:d;if(f===0)return 0;f<a&&(a=f);continue}if(Bn(u)!==0||Be(u)!==0||t||Oe(u)!==0)continue;let c=i===il?Ki:i===Gi?qi:void 0;if(c===void 0)continue;let p=G(c.starts,n),m=G(c.counts,n);for(let d=0;d<m;d+=1){let f=G(c.list,p+d);if(Ue(e.squares,f)>=xn)continue;if(i===Gi){let S=ml(n,f);if(S!==s&&de(e.cells,S)!==0)continue;let C=Ue(e.squares,S);if(C===Ft||C>=xn)continue}let y=Jo(s,f);if(y===0)return 0;y<a&&(a=y)}}return a}l(fw,"estimatedAttackSteps");function Nh(e,n){let o=(e.whiteScore-e.blackScore)*n.scoreUnit+(G(e.potions,0)-G(e.potions,1))*n.potion,t=G(e.monLocations,On(ao,0)),r=G(e.monLocations,On(ao,1)),a=t>=0&&Bn(de(e.cells,t))===0,i=r>=0&&Bn(de(e.cells,r))===0,s=99,u=99,c=99,p=99,m=le-e.monsMoves;for(let d=0;d<e.manaCount;d+=1){let f=G(e.manaIndices,d),y=de(e.cells,f);if(He(y)!==bn)continue;let S=Oe(y),C=a?Jo(t,f):99,b=i?Jo(r,f):99;C<s&&(s=C),b<u&&(u=b);let k=Ue(zi,f);if(a){let P=C+k;P<c&&(c=P)}if(i){let P=b+k;P<p&&(p=P)}let M=b-C;if(M>4&&(M=4),M<-4&&(M=-4),n.manaPointsAttraction!==0&&(a&&(o+=Math.trunc(Wt(S,0)*n.manaPointsAttraction/(C+1))),i&&(o-=Math.trunc(Wt(S,1)*n.manaPointsAttraction/(b+1)))),S===to)o+=n.supermanaDrainerControl*M;else{let P=S-1;o+=(P===0?1:-1)*Math.trunc(n.manaToOwnerPool/(xh(f,P)+1)),o+=n.manaDrainerControl*M}}for(let d=0;d<oo;d+=1){let f=d===0?1:-1,y=d^1;for(let S=0;S<Qt;S+=1){let C=G(e.monLocations,On(S,d));if(C<0)continue;let b=de(e.cells,C);if(He(b)!==rn)continue;let k=Bn(b);k!==0&&(o-=f*((S===ao?n.faintDrainer:n.faintMon)+n.faintCooldownStep*k));let M=Ue(e.squares,C);k===0&&M<xn&&(o+=f*n.activeMon);let P=Oe(b);if(P!==0){let T=Wt(P,d),v=Ue(zi,C);o+=f*(Math.trunc(n.carrierCloseToPool/(v+1))+T*n.carrierPointBonus),d===e.active&&v<=m?o+=f*n.carrierScoresThisTurn*T:d!==e.active&&v<=le&&(o+=f*n.carrierScoresNextTurn*T);let I=d===0?e.whiteScore:e.blackScore;T>=xe-I&&(o+=f*n.winningCarrier)}else Be(b)===yo&&(o+=f*n.bomb);if(k===0)if(S===ao){let T=d===0?s:u,v=d===0?c:p;o+=f*Math.trunc(n.drainerCloseToMana/(T+1)),o+=f*Math.trunc(n.drainerCloseToOwnPool/(xh(C,d)+1)),o+=f*Math.trunc(n.drainerCloseToSupermana/(Jo(C,Vi)+1)),P===0&&Be(b)===0&&d===e.active&&v<=m&&(o+=f*n.drainerPickupScoresThisTurn);let I=Ou(e,d,C),E=fw(e,C,d,I),x=P===0?1:n.carrierThreatFactor;E===0?o-=f*n.drainerThreatImmediate*x:E<=le&&(o-=f*Math.trunc(n.drainerThreatWalk*x*(le+1-E)/le)),I&&(o+=f*n.angelGuardingDrainer)}else if(S===Pu){let T=d===0?t:r;T>=0&&(o+=f*Math.trunc(n.angelCloseToDrainer/(Jo(C,T)+1)))}else if(S===al){let T=99;for(let v=0;v<Qt;v+=1){let I=G(e.monLocations,On(v,y));if(I<0)continue;let E=de(e.cells,I);if(Bn(E)!==0)continue;let x=Jo(C,I);x<T&&(T=x)}o+=f*Math.trunc(n.spiritCloseToEnemy/(T+1)),M>=xn&&(o-=f*n.spiritOnOwnBase)}else{o+=f*Math.trunc(n.monCloseToCenter/(mw(C)+1));let T=y===0?t:r,v=y===0?a:i;T>=0&&v&&(o+=f*Math.trunc(n.attackerCloseToEnemyDrainer/(Jo(C,T)+1)))}}}return o}l(Nh,"evaluatePosition");var Ea=704,Pl=1073741824;function Nu(e,n){return n?e+Pl:e}l(Nu,"encodeGeneratedMoves");function Iu(e){return e>=Pl?e-Pl:e}l(Iu,"generatedMoveCount");function xu(e){return e>=Pl}l(xu,"generatedMovesHadRawStartOption");function qd(e,n){return He(e)===rn&&$n(e)!==n&&Bn(e)===0}l(qd,"isEnemyAwakeMon");function yw(e,n,o){let t=de(e.cells,o),r=Ue(e.squares,o),a=He(n),i=a===rn,s=Oe(n),u=Be(n),c=t===0?-1:He(t),p=c===rn&&(Oe(t)!==0||Be(t)!==0);if(c===rn)if(p){if(a!==Nn||u!==ro)return 0}else{if(i)return 0;if(a===bn){if(wn(t)!==ao||Bn(t)!==0)return 0}else if(u!==ro)return 0}else if(c===bn){if(!i||wn(n)!==ao||Bn(n)!==0)return 0}else if(c===Nn&&(Be(t)!==ro||!i))return 0;if(r>=xn){if(!i||sl(r)!==wn(n)||ul(r)!==$n(n)||s!==0||u!==0)return 0}else if(r===Ft){let m=c===bn&&Oe(t)===to,d=i&&wn(n)===ao;if(!(s===to||s===0&&d&&(t===0||m)||d&&m))return 0}return t===0?1:i?s===0&&u===0?c===Nn?Be(t)===ro?2:0:1:s!==0?c===Nn?Be(t)===ro?1:0:1:c!==Nn||Be(t)!==ro?0:1:a===bn?c!==rn||p?0:1:c!==rn?0:p?u===ro?1:0:2}l(yw,"spiritDestinationOptionCount");function Sw(e,n,o,t,r){let a=r,i=!1,s=wn(o),u=$n(o),c=Oe(o),p=Be(o),m=G(Oo.starts,n),d=G(Oo.counts,n);for(let f=0;f<d;f+=1){let y=G(Oo.list,m+f),S=de(e.cells,y),C=Ue(e.squares,y),b=S===0?-1:He(S),k;if(c!==0)b===rn?k=!1:b===bn||b===Nn?k=!0:k=ji(C)||C===Ft&&c===to;else if(p!==0)b===Nn?k=!0:b===-1?k=ji(C):k=!1;else{let M;b===rn?M=!1:b===bn?M=s===ao:M=!0,M?C>=xn?k=sl(C)===s&&ul(C)===u:C===Ft?k=s===ao&&(S===0||b===bn&&Oe(S)===to):k=!0:k=!1}k&&(i=!0,!(b===Nn&&Be(S)!==ro)&&(b===Nn&&Be(S)===ro&&c===0&&p===0?(t[a]=Jn(Jt,n,y,io,nr),a+=1,t[a]=Jn(Jt,n,y,io,Aa),a+=1):(t[a]=Jn(Jt,n,y,io,er),a+=1)))}return Nu(a,i)}l(Sw,"generateMonMoves");function hw(e,n,o,t){let r=e.active,a=t,i=!1,s=G(Ki.starts,n),u=G(Ki.counts,n);for(let c=0;c<u;c+=1){let p=G(Ki.list,s+c),m=de(e.cells,p);qd(m,r)&&(Ou(e,r^1,p)||(i=!0,Hi(m)&&(o[a]=Jn(vu,n,p,io,er),a+=1)))}return Nu(a,i)}l(hw,"generateMysticMoves");function bw(e,n,o,t){let r=e.active,a=t,i=!1,s=Gi,u=r,c=G(qi.starts,n),p=G(qi.counts,n);for(let m=0;m<p;m+=1){let d=G(qi.list,c+m),f=de(e.cells,d);if(!qd(f,r)||Ou(e,r^1,d))continue;let y=ml(n,d);if(de(e.cells,y)!==0)continue;let S=Ue(e.squares,y);if(S===Ft||S>=xn||(i=!0,!Hi(f)))continue;let C=Ue(e.squares,d),b=Oe(f);if(!(b!==0&&b!==to||C===Ft||C>=xn)){o[a]=Jn(Io,n,d,io,er),a+=1;continue}let M=a,P=G(Oo.starts,d),T=G(Oo.counts,d);for(let v=0;v<T;v+=1){let I=G(Oo.list,P+v),E=de(e.cells,I),x=E===0?-1:He(E);if(x!==-1&&x!==Nn)continue;let N=Ue(e.squares,I);(ji(N)||N>=xn&&sl(N)===s&&ul(N)===u)&&(x===Nn?Be(E)===ro?(o[a]=Jn(Io,n,d,I,nr),a+=1,o[a]=Jn(Io,n,d,I,Aa),a+=1):(o[a]=Jn(Io,n,d,I,Bd),a+=1):(o[a]=Jn(Io,n,d,I,er),a+=1))}a===M&&(o[a]=Jn(Io,n,d,io,er),a+=1)}return Nu(a,i)}l(bw,"generateDemonMoves");function Cw(e,n,o,t){let r=t,a=!1,i=G(pl.starts,n),s=G(pl.counts,n);for(let u=0;u<s;u+=1){let c=G(pl.list,i+u),p=de(e.cells,c);if(p===0||He(p)===rn&&Bn(p)!==0)continue;a=!0;let m=G(Oo.starts,c),d=G(Oo.counts,c);for(let f=0;f<d;f+=1){let y=G(Oo.list,m+f),S=yw(e,p,y);S!==0&&(S===2?(o[r]=Jn(Bt,n,c,y,nr),r+=1,o[r]=Jn(Bt,n,c,y,Aa),r+=1):(o[r]=Jn(Bt,n,c,y,er),r+=1))}}return Nu(r,a)}l(Cw,"generateSpiritMoves");function Mw(e,n,o,t){let r=e.active,a=t,i=!1,s=G(dl.starts,n),u=G(dl.counts,n);for(let c=0;c<u;c+=1){let p=G(dl.list,s+c),m=de(e.cells,p);qd(m,r)&&(i=!0,Hi(m)&&(o[a]=Jn(gu,n,p,io,er),a+=1))}return Nu(a,i)}l(Mw,"generateBombMoves");function kw(e,n,o,t){let r=t,a=G(Oo.starts,n),i=G(Oo.counts,n);for(let s=0;s<i;s+=1){let u=G(Oo.list,a+s),c=de(e.cells,u),p=Ue(e.squares,u),m;c===0?m=ji(p):He(c)===rn&&Oe(c)===0&&Be(c)===0?m=ji(p)&&wn(c)===ao:m=!1,m&&(o[r]=Jn(wu,n,u,io,er),r+=1)}return r}l(kw,"generateManaMoves");function zd(e,n){let o=e.active,t=la(e.monsMoves),r=wh(e),a=0,i=0;for(let s=0;s<Qt;s+=1){let u=G(e.monLocations,On(s,o));if(u<0)continue;let c=de(e.cells,u);if(He(c)!==rn)continue;let p=!1,m=Oe(c),d=Be(c),f=m!==0||d!==0;if(!(!f&&Bn(c)!==0)){if(t){let y=Sw(e,u,c,n,a);a=Iu(y),p||(p=xu(y))}if(f){if(d===yo){let y=Mw(e,u,n,a);a=Iu(y),p||(p=xu(y))}}else if(Ue(e.squares,u)<xn&&r){if(s===il){let S=hw(e,u,n,a);a=Iu(S),p||(p=xu(S))}else if(s===Gi){let S=bw(e,u,n,a);a=Iu(S),p||(p=xu(S))}else if(s===al){let S=Cw(e,u,n,a);a=Iu(S),p||(p=xu(S))}}p&&(i+=1)}}if(vh(e,i)){let s=o+1;for(let u=0;u<e.manaCount;u+=1){let c=G(e.manaIndices,u),p=de(e.cells,c);He(p)===bn&&Oe(p)===s&&(a=kw(e,c,n,a))}}if(a>n.length)throw new RangeError(`fast move buffer capacity exceeded: generated ${a} moves for ${n.length} slots`);return a}l(zd,"generateMoves");var Vr=48,Hh=1<<20,Dh=Hh,_h=0,Fh=1,Wh=2,Rw=3,Bh=1<<30,Lh=4194303,Pw=511,Tw=32768,ww=1<<28,vw=1<<24,gw=1<<23,Du=Gr*2,Wu=Gr-Vr-1,Gh=l(()=>!1,"NO_TIMEOUT"),$d=Vr-2,Uh=oo,jh=le+1,Kh=Mr+1,qh=Fn+1,zh=2,Xd=4,Aw=Uh*jh*Kh*qh*zh*Xd*Xd,_u=new Int32Array(0);if(yl.length!==Dd.length||yl.length<Aw)throw new RangeError("fast scalar hash table is too small for the configured state space");var Yd=Object.freeze({lateMoveReduction:!0,lateMoveIndex:3,lateMoveDeepIndex:8,moveCountPruning:!0,moveCountDepth:3,moveCountBase:4,moveCountFactor:5,futilityMargin:900});function om(e){if(typeof e!="object"||e===null||Array.isArray(e))throw new TypeError("fast search limits must be an object");let n=e,o=n.maxDepth;if(!Number.isSafeInteger(o)||o<0||o>$d)throw new RangeError(`maxDepth must be a safe integer from 0 through ${$d}`);let t=n.maxNodes;if(!Number.isSafeInteger(t)||t<0)throw new RangeError("maxNodes must be a nonnegative safe integer");let r=n.tuning;return Object.freeze({maxDepth:o,maxNodes:t,tuning:r===void 0?Yd:Ew(r)})}l(om,"normalizeSearchLimits");function Ew(e){if(typeof e!="object"||e===null||Array.isArray(e))throw new TypeError("fast search tuning must be an object");let n=e;return Object.freeze({lateMoveReduction:Vh(n,"lateMoveReduction"),lateMoveIndex:Xi(n,"lateMoveIndex",Ea),lateMoveDeepIndex:Xi(n,"lateMoveDeepIndex",Ea),moveCountPruning:Vh(n,"moveCountPruning"),moveCountDepth:Xi(n,"moveCountDepth",$d),moveCountBase:Xi(n,"moveCountBase",Ea),moveCountFactor:Xi(n,"moveCountFactor",Ea),futilityMargin:Xi(n,"futilityMargin",Wu)})}l(Ew,"normalizeSearchTuning");function Vh(e,n){let o=e[n];if(typeof o!="boolean")throw new TypeError(`tuning.${n} must be a boolean`);return o}l(Vh,"normalizedTuningBoolean");function Xi(e,n,o){let t=e[n];if(typeof t!="number")throw new TypeError(`tuning.${n} must be a number`);if(!Number.isSafeInteger(t)||t<0||t>o)throw new RangeError(`tuning.${n} must be a safe integer from 0 through ${o}`);return t}l(Xi,"normalizedTuningInteger");function Ow(e){if(e===void 0)return Hh;if(!Number.isSafeInteger(e)||e<1||e>Dh||(e&e-1)!==0)throw new RangeError(`transpositionCapacity must be a power of two from 1 through ${Dh}`);return e}l(Ow,"normalizeTranspositionCapacity");function Iw(e,n){return new Int32Array(n)}l(Iw,"defaultTranspositionAllocator");function Fu(e,n,o){try{let t=e(n,o);return ArrayBuffer.isView(t)&&Object.prototype.toString.call(t)==="[object Int32Array]"&&t.length===o?t:void 0}catch(t){if(t instanceof RangeError)return;throw t}}l(Fu,"tryAllocateTranspositionPart");function xw(e){for(let n=0;n<e.length;n+=1){let o=So(e,n),t=o.byteOffset+o.byteLength;for(let r=n+1;r<e.length;r+=1){let a=So(e,r);if(o.buffer!==a.buffer)continue;let i=a.byteOffset+a.byteLength;if(o.byteOffset<i&&a.byteOffset<t)return!0}}return!1}l(xw,"transpositionPartsOverlap");var or,bt,tm=class tm{constructor(n,o){ee(this,"keyLo",_u);ee(this,"keyHi",_u);ee(this,"score",_u);ee(this,"info",_u);ee(this,"move",_u);ee(this,"entries",0);ee(this,"generation",1);ee(this,"mask",0);H(this,or);H(this,bt);F(this,or,n),F(this,bt,o)}deactivate(){this.mask=0}prepare(n){if(this.keyLo.length!==0)return this.mask=R(this,bt)-1,!0;if(n())return!1;let o=Fu(R(this,or),"keyLo",R(this,bt));if(o===void 0||n())return!1;let t=Fu(R(this,or),"keyHi",R(this,bt));if(t===void 0||n())return!1;let r=Fu(R(this,or),"score",R(this,bt));if(r===void 0||n())return!1;let a=Fu(R(this,or),"info",R(this,bt));if(a===void 0||n())return!1;let i=Fu(R(this,or),"move",R(this,bt));return i===void 0||n()||xw([o,t,r,a,i])?!1:(this.keyLo=o,this.keyHi=t,this.score=r,this.info=a,this.move=i,this.entries=0,this.generation=1,this.mask=R(this,bt)-1,!0)}clear(){this.keyLo.fill(0),this.keyHi.fill(0),this.score.fill(0),this.info.fill(0),this.move.fill(0),this.entries=0,this.generation=1}};or=new WeakMap,bt=new WeakMap,l(tm,"TranspositionTable");var Qd=tm,Hr,Qi,xa,nt,Gt,Na,Zi,Ji,tr,es,Vt,ns,xo,Da,Ce,$h,Xh,Oa,Zd,Ia,Jd,Yi,Yh,em,nm,rm=class rm{constructor(n={}){H(this,Ce);H(this,Hr,[]);H(this,Qi,[]);H(this,xa,[]);H(this,nt);H(this,Gt,new Int32Array(Vr*2));H(this,Na,new Int32Array(oo*121*121));H(this,Zi,$i);H(this,Ji,Yd);H(this,tr,0);H(this,es,0);H(this,Vt,!1);H(this,ns,!1);H(this,xo,0);H(this,Da,Gh);F(this,nt,new Qd(n.allocateTranspositionPart??Iw,Ow(n.transpositionCapacity)));for(let o=0;o<=Vr;o+=1)R(this,Hr).push(new Cl),R(this,Qi).push(new Int32Array(Ea)),R(this,xa).push(new Int32Array(Ea))}get root(){return So(R(this,Hr),0)}get size(){return R(this,nt).entries}search(n,o,t=$i){let r=om(n),a=Rl(t);if(F(this,ns,!1),F(this,xo,0),Ud(this.root)!==-1)return{move:0,score:0,depth:0,nodes:0,supported:!0};F(this,Zi,a),F(this,Ji,r.tuning),F(this,tr,0),F(this,es,r.maxNodes),F(this,Vt,!1),F(this,Da,o),R(this,nt).deactivate();try{R(this,Gt).fill(0),R(this,Na).fill(0);let i=0,s=0,u=0;for(let c=1;c<=r.maxDepth;c+=1){if(c===2){if(R(this,tr)>=R(this,es)||!R(this,nt).prepare(R(this,Da))){F(this,Vt,!0);break}K(this,Ce,$h).call(this)}let p=K(this,Ce,Xh).call(this,c,i);if(p.move===0)break;if(K(this,Ce,Ia).call(this)){u===0&&(i=p.move,s=p.score);break}if(i=p.move,s=p.score,u=c,!p.selective&&s>=Gr-Vr)break}return{move:i,score:s,depth:u,nodes:R(this,tr),supported:!R(this,ns)}}finally{R(this,nt).deactivate(),F(this,Zi,$i),F(this,Ji,Yd),F(this,Da,Gh)}}};Hr=new WeakMap,Qi=new WeakMap,xa=new WeakMap,nt=new WeakMap,Gt=new WeakMap,Na=new WeakMap,Zi=new WeakMap,Ji=new WeakMap,tr=new WeakMap,es=new WeakMap,Vt=new WeakMap,ns=new WeakMap,xo=new WeakMap,Da=new WeakMap,Ce=new WeakSet,$h=l(function(){R(this,nt).generation+=1,R(this,nt).generation>Lh&&R(this,nt).clear()},"#advanceTableGeneration"),Xh=l(function(n,o){let t=So(R(this,Hr),0),r=So(R(this,Qi),0),a=zd(t,r);if(a===0)return{move:0,score:0,selective:!1};K(this,Ce,em).call(this,t,r,a,0,o);let i=So(R(this,xa),0),s=-Du,u=0,c=-Du,p=!1;for(let m=0;m<a;m+=1){K(this,Ce,nm).call(this,r,i,m,a);let d=G(r,m),f,y=R(this,xo),S;if(m===0?(f=K(this,Ce,Oa).call(this,t,d,0,n-1,s,Du),S=R(this,xo)!==y):(f=K(this,Ce,Oa).call(this,t,d,0,n-1,s,s+1),S=R(this,xo)!==y,f>s&&!K(this,Ce,Ia).call(this)&&(y=R(this,xo),f=K(this,Ce,Oa).call(this,t,d,0,n-1,s,Du),S=R(this,xo)!==y)),K(this,Ce,Ia).call(this))break;f>c&&(c=f,u=d,p=S,f>s&&(s=f))}return u===0&&(u=G(r,0),c=0,p=!0),{move:u,score:c,selective:p}},"#searchRoot"),Oa=l(function(n,o,t,r,a,i){let s=So(R(this,Hr),t+1);s.copyFrom(n);let u=gh(s,o);return u===Ld?(F(this,ns,!0),F(this,Vt,!0),0):u!==-1?u===n.active?Gr-t:-(Gr-t):s.active===n.active?K(this,Ce,Zd).call(this,r,t+1,a,i):-K(this,Ce,Zd).call(this,r,t+1,-i,-a)},"#child"),Zd=l(function(n,o,t,r){if(!K(this,Ce,Jd).call(this))return 0;let a=So(R(this,Hr),o);if(o>=Vr-2)return K(this,Ce,Yi).call(this,a);if(n<=0)return K(this,Ce,Yi).call(this,a);let i=t,s=Dw(a),u=_w(a,s),c=Fw(a,s),p=R(this,nt),m=(u^c*3)&p.mask,d=0,f=G(p.info,m),y=G(p.keyLo,m)===u&&G(p.keyHi,m)===c&&(f>>>8&Lh)===p.generation;if(y&&(d=G(p.move,m),(f>>2&63)>=n)){let V=G(p.score,m),Q=f&3;if(Q===_h||Q===Fh&&V>=r||Q===Wh&&V<=i)return(f&Bh)!==0&&F(this,xo,R(this,xo)+1),V}let S=So(R(this,Qi),o),C=zd(a,S);if(C===0)return K(this,Ce,Yi).call(this,a);K(this,Ce,em).call(this,a,S,C,o,d);let b=So(R(this,xa),o),k=R(this,Ji),M=C;if(k.moveCountPruning&&n<=k.moveCountDepth){let W=k.moveCountBase+k.moveCountFactor*n;W<M&&(M=W)}let P=n<=2&&K(this,Ce,Yi).call(this,a)+k.futilityMargin*n<=i;if(K(this,Ce,Ia).call(this))return 0;let T=-Du,v=0,I=!1,E=R(this,xo);for(let W=0;W<C;W+=1){K(this,Ce,nm).call(this,S,b,W,C);let V=G(S,W),Q=G(b,W)>=Tw;if(!Q&&v!==0&&(W>=M||P)){I=!0,F(this,xo,R(this,xo)+1);break}let U;if(W===0)U=K(this,Ce,Oa).call(this,a,V,o,n-1,i,r);else{let ce=0;k.lateMoveReduction&&!Q&&n>=3&&W>=k.lateMoveIndex&&(ce=W>=k.lateMoveDeepIndex?2:1,ce>=n&&(ce=n-1)),U=K(this,Ce,Oa).call(this,a,V,o,n-1-ce,i,i+1),!K(this,Ce,Ia).call(this)&&U>i&&(ce>0||U<r)&&(U=K(this,Ce,Oa).call(this,a,V,o,n-1,i,r))}if(K(this,Ce,Ia).call(this))return 0;if(U>T&&(T=U,v=V),U>i&&(i=U),i>=r){K(this,Ce,Yh).call(this,a,V,o,n,Q);break}}if(v===0)return K(this,Ce,Yi).call(this,a);let x=R(this,xo)!==E,N=I?Rw:T>=r?Fh:T<=t?Wh:_h,B=I?0:n;if(T<Gr-Vr&&T>-Gr+Vr){let W=f>>2&63;(!y||B>=W)&&(f===0&&G(p.info,m)===0&&(p.entries+=1),p.keyLo[m]=u,p.keyHi[m]=c,p.score[m]=T,p.info[m]=p.generation<<8|B<<2|N|(x?Bh:0),p.move[m]=v)}return T},"#negamax"),Ia=l(function(){return R(this,Vt)},"#isStopped"),Jd=l(function(){return R(this,Vt)?!1:R(this,tr)>=R(this,es)?(F(this,Vt,!0),!1):(F(this,tr,R(this,tr)+1),(R(this,tr)&Pw)===0&&R(this,Da).call(this)?(F(this,Vt,!0),!1):!0)},"#beginWorkUnit"),Yi=l(function(n){if(!K(this,Ce,Jd).call(this))return 0;let o=Nh(n,R(this,Zi)),t=n.active===0?o:-o;return t>Wu?Wu:t<-Wu?-Wu:t},"#staticScore"),Yh=l(function(n,o,t,r,a){if(a)return;let i=t*2;G(R(this,Gt),i)!==o&&(R(this,Gt)[i+1]=G(R(this,Gt),i),R(this,Gt)[i]=o);let s=n.active*121*121+Lt(o)*121+et(o),u=G(R(this,Na),s)+r*r;R(this,Na)[s]=u>1<<20?1<<20:u},"#recordCutoff"),em=l(function(n,o,t,r,a){let i=So(R(this,xa),r),s=G(R(this,Gt),r*2),u=G(R(this,Gt),r*2+1),c=n.active*121*121;for(let p=0;p<t;p+=1){let m=G(o,p),d=Nw(n,m);if(m===a)d+=ww;else if(m===s)d+=vw;else if(m===u)d+=gw;else{let f=G(R(this,Na),c+Lt(m)*121+et(m));d+=f>8191?8191:f}i[p]=d}},"#orderMoves"),nm=l(function(n,o,t,r){let a=t,i=G(o,t);for(let u=t+1;u<r;u+=1){let c=G(o,u);c>i&&(i=c,a=u)}if(a===t)return;let s=G(n,t);n[t]=G(n,a),n[a]=s,o[a]=G(o,t),o[t]=i},"#selectBest"),l(rm,"FastSearcher");var Tl=rm;function Nw(e,n){let o=Au(n),t=Lt(n),r=et(n);switch(o){case Jt:{let a=de(e.cells,t),i=Oe(a),s=0;i!==0&&Zt(Ue(e.squares,r))&&(s+=(1<<21)+Wt(i,e.active)*(1<<18));let u=de(e.cells,r);if(u!==0){let c=He(u);c===bn?s+=65536+Wt(Oe(u),e.active)*512:c===Nn&&(s+=16384)}if(i!==0){let c=Ue(zi,t),p=Ue(zi,r);s+=(c-p)*2048+4096}else wn(a)===ao&&(s+=1024);return s}case wu:return Zt(Ue(e.squares,r))?(1<<21)+(1<<18):16;case vu:case Io:case gu:{let a=de(e.cells,r),i=1<<17;return Oe(a)!==0&&(i+=1<<20),wn(a)===ao&&(i+=1<<19),i}case Bt:{let a=de(e.cells,r),i=Lr(n),s=8192,u=Oe(a);return u!==0&&Zt(Ue(e.squares,i))?s+=(1<<21)+Wt(u,e.active)*(1<<18):He(a)===bn&&(s+=32768),s}default:throw new RangeError(`unsupported fast move type: ${o}`)}}l(Nw,"moveHeuristic");function Dw(e){let n=G(e.potions,0),o=G(e.potions,1),t=n>2?3:n,a=o>2?3:o;return a=t+Xd*a,a=(e.firstTurn?1:0)+zh*a,a=e.actionsUsed+qh*a,a=e.manaMoves+Kh*a,a=e.monsMoves+jh*a,e.active+Uh*a}l(Dw,"scalarIndex");function _w(e,n){return e.hashLo^G(yl,n)^e.whiteScore*2654435761^e.blackScore*2135587861^G(e.potions,0)}l(_w,"stateKeyLo");function Fw(e,n){return e.hashHi^G(Dd,n)^e.whiteScore*2246822507^e.blackScore*3266489909^G(e.potions,1)}l(Fw,"stateKeyHi");function Ww(){try{return new Cl}catch(e){if(e instanceof RangeError)return ku;throw e}}l(Ww,"tryCreateDefaultFastPosition");function Bw(e){return(typeof e=="object"&&e!==null||typeof e=="function")&&"then"in e&&typeof e.then=="function"}l(Bw,"isPromiseLike");function Lw(e){let n=globalThis.WeakRef;return n===void 0?void 0:new n(e)}l(Lw,"systemWeakFastSearcher");var os,Bu,_a,ts,Lu,im,sm=class sm{constructor(n={}){H(this,Lu);H(this,os);H(this,Bu);H(this,_a);H(this,ts);let o=n.createSearcher;if(o!==void 0&&typeof o!="function")throw new TypeError("createSearcher must be a function");F(this,Bu,o===void 0),F(this,os,o??(()=>new Tl)),F(this,_a,n.weakRefFactory)}runSynchronous(n){let o=R(this,ts)?.deref();if(o===void 0)if(!R(this,Bu))o=R(this,os).call(this);else try{o=R(this,os).call(this)}catch(r){if(r instanceof RangeError)return ku;throw r}F(this,ts,void 0);let t;try{t=n(o)}catch(r){throw K(this,Lu,im).call(this,o),r}if(Bw(t))throw Promise.resolve(t).catch(()=>{}),new TypeError("FastSearcherPool operations must be synchronous");return K(this,Lu,im).call(this,o),t}};os=new WeakMap,Bu=new WeakMap,_a=new WeakMap,ts=new WeakMap,Lu=new WeakSet,im=l(function(n){R(this,_a)!==!1&&(R(this,ts)??F(this,ts,R(this,_a)===void 0?Lw(n):R(this,_a).call(this,n)))},"#release"),l(sm,"FastSearcherPool");var am=sm,Qh=new am;function Gw(e,n,o,t=Qh){let r=om(o),a=Rl(o.weights),i=o.budgetMs;return e.session.withUnrecordedDeadlineIfAbsent(i,()=>{if(e.session.checkpoint())return{kind:"supported",inputs:[]};if(n.winnerColor()!==void 0)return{kind:"supported",inputs:[]};let s=e.session.now()+i,u=Ww();if(Ru(u))return{kind:"unsupported",fallbackInputs:[]};if(!Ih(u,n,r.maxDepth))return{kind:"unsupported",fallbackInputs:[]};if(e.session.checkpoint())return{kind:"supported",inputs:[]};let c=t.runSynchronous(p=>{if(p.root.copyFrom(u),!e.session.checkpoint())return p.search(r,()=>e.session.checkpoint()||e.session.now()>=s,a)});return Ru(c)?{kind:"unsupported",fallbackInputs:[]}:c===void 0?{kind:"supported",inputs:[]}:(e.session.checkpoint(),c.supported?{kind:"supported",inputs:c.move===0?[]:Kd(c.move)}:{kind:"unsupported",fallbackInputs:c.depth>0&&c.move!==0?Kd(c.move):[]})})}l(Gw,"selectFastSelection");var Vw=Object.freeze({budgetMs:460,maxDepth:40,maxNodes:2e6,weights:$i});function Zh(e,n,o=Qh){return Gw(e,n,Vw,o)}l(Zh,"selectProFastSelection");var Fa=4096,rs=256,Vu=Number.MAX_SAFE_INTEGER,wl=ze(342167472,1939669891),Hu=ze(256,435),nb=ze(4294967295,4294967295),ob=ze(4294967295,4294967294),Xe=Object.freeze({Baseline:"baseline",Production:"production"}),um=Object.freeze({[Xe.Baseline]:0,[Xe.Production]:1}),h=Object.freeze({ImmediateScore:"immediate-score",DenyOpponentWindow:"deny-opponent-window",DrainerKill:"drainer-kill",SafeSupermanaProgress:"safe-supermana-progress",SafeOpponentManaProgress:"safe-opponent-mana-progress",DrainerSafetyRecovery:"drainer-safety-recovery",SpiritImpact:"spirit-impact",ManaTempo:"mana-tempo"}),rr=Object.freeze([h.ImmediateScore,h.DenyOpponentWindow,h.DrainerKill,h.DrainerSafetyRecovery,h.SpiritImpact,h.SafeSupermanaProgress,h.SafeOpponentManaProgress,h.ManaTempo]),cm=Object.freeze({[h.ImmediateScore]:1,[h.DenyOpponentWindow]:2,[h.DrainerKill]:3,[h.SafeSupermanaProgress]:4,[h.SafeOpponentManaProgress]:5,[h.DrainerSafetyRecovery]:6,[h.SpiritImpact]:7,[h.ManaTempo]:8});function vl(e={}){return{winState:e.winState??0,avoidImmediateLoss:e.avoidImmediateLoss??0,scoreDelta:e.scoreDelta??0,denyGain:e.denyGain??0,drainerAttack:e.drainerAttack??0,drainerSafety:e.drainerSafety??0,evalScore:e.evalScore??0}}l(vl,"createTurnUtility");var Ln=Object.freeze(vl());function Ct(e){return e.denyGain>=0}l(Ct,"utilityHasNonnegativeDenyGain");function Ur(e){return e.drainerSafety>0||e.avoidImmediateLoss>0}l(Ur,"utilitySupportsTemporaryRiskRecovery");function so(e,n){let o=e.winState>=n.winState&&e.avoidImmediateLoss>=n.avoidImmediateLoss&&e.scoreDelta>=n.scoreDelta&&e.denyGain>=n.denyGain&&e.drainerAttack>=n.drainerAttack&&e.drainerSafety>=n.drainerSafety,t=e.winState>n.winState||e.avoidImmediateLoss>n.avoidImmediateLoss||e.scoreDelta>n.scoreDelta||e.denyGain>n.denyGain||e.drainerAttack>n.drainerAttack||e.drainerSafety>n.drainerSafety;return o&&t}l(so,"utilityStrictlyDominatesOverrideAxes");function No(e,n){if(!so(e,n))return!1;let o=e.winState>n.winState||e.avoidImmediateLoss>n.avoidImmediateLoss||e.denyGain>n.denyGain||e.drainerAttack>n.drainerAttack||e.drainerSafety>n.drainerSafety,t=e.scoreDelta>=n.scoreDelta+220;return e.evalScore+192>=n.evalScore||o||t}l(No,"utilityPassesOverrideGuard");function Do(e,n){return uo(e,n)>=0&&e.evalScore+192>=n.evalScore}l(Do,"utilitySupportsFamilyFallback");function ar(e,n){return e.winState>n.winState||e.avoidImmediateLoss>n.avoidImmediateLoss||e.denyGain>n.denyGain||e.drainerAttack>n.drainerAttack||e.drainerSafety>n.drainerSafety}l(ar,"utilityImprovesNonScoreOverrideAxes");function lm(e,n,o){return e.scoreDelta>=n.scoreDelta+o}l(lm,"utilityHasScoreDeltaForce");function ot(e,n,o){return te(e,n)>=0&&e.evalScore+o>=n.evalScore}l(ot,"utilitySupportsPrimaryAxesEvalTolerance");var Cn=Object.freeze({ImmediateScore:"immediate-score",TacticalDeny:"tactical-deny",DrainerKill:"drainer-kill",SafeSupermanaProgress:"safe-supermana-progress",SafeOpponentManaProgress:"safe-opponent-mana-progress",DrainerSafetyRecovery:"drainer-safety-recovery",SpiritImpact:"spirit-impact",ManaTempo:"mana-tempo"}),re=Object.freeze({NoPlan:"no-plan",BudgetExceeded:"budget-exceeded"}),Uu=Object.freeze({scoreGain:0,denyGain:0,drainerSafetyDelta:0,spiritOnlySetup:!1,endsNonnegativeDrainerSafety:!1,opponentImmediateWindowAfter:0});function Pn(e,n){return e<n?-1:e>n?1:0}l(Pn,"compareNumber");function ju(e,n){let o=Math.min(e.length,n.length);for(let t=0;t<o;t+=1){let r=Pn(e[t]??0,n[t]??0);if(r!==0)return r}return Pn(e.length,n.length)}l(ju,"compareTuples");function pm(e){return{actions:[...e.actions],compiledChunks:e.compiledChunks.map(n=>n.slice()),endGame:e.endGame.fork(),utility:e.utility,headUtility:e.headUtility,headFamily:e.headFamily,goalFamily:e.goalFamily,packageMeta:e.packageMeta}}l(pm,"copyPlan");function Ku(e,n){let o=Pn(e.length,n.length);if(o!==0)return o;for(let t=0;t<e.length;t+=1){let r=Eo(e[t]??[],n[t]??[]);if(r!==0)return r}return 0}l(Ku,"compareChunks");function Gu(e){switch(e.kind){case"walk":return[0,e.actor,e.to,void 0];case"attack":return[1,e.actor,e.target,void 0];case"spirit-shift":return[2,e.actor,e.target,e.destination];case"bomb":return[3,e.actor,e.target,void 0];case"move-mana":return[4,e.from,e.to,void 0];case"score-carry":return[5,e.actor,e.step,void 0];case"safety-retreat":return[6,e.actor,e.to,void 0]}}l(Gu,"actionKeyTuple");function dm(e){let[n,o,t,r]=Gu(e);return`${n}:${ne(o)}:${t===void 0?-1:ne(t)}:${r===void 0?-2:ne(r)}`}l(dm,"actionKey");function tb(e,n){let o=Pn(e.i,n.i);return o!==0?o:Pn(e.j,n.j)}l(tb,"compareLocations");function Jh(e,n){return e===void 0?n===void 0?0:-1:n===void 0?1:tb(e,n)}l(Jh,"compareOptionalLocations");function as(e,n){let o=Gu(e),t=Gu(n);return Pn(o[0],t[0])||tb(o[1],t[1])||Jh(o[2],t[2])||Jh(o[3],t[3])}l(as,"compareActionKeys");function uo(e,n){return ju([e.winState,e.avoidImmediateLoss,e.scoreDelta,e.denyGain,e.drainerAttack,e.drainerSafety,e.evalScore],[n.winState,n.avoidImmediateLoss,n.scoreDelta,n.denyGain,n.drainerAttack,n.drainerSafety,n.evalScore])}l(uo,"compareTurnUtilities");function te(e,n){return ju([e.winState,e.avoidImmediateLoss,e.scoreDelta,e.denyGain,e.drainerAttack,e.drainerSafety],[n.winState,n.avoidImmediateLoss,n.scoreDelta,n.denyGain,n.drainerAttack,n.drainerSafety])}l(te,"compareUtilityPrimaryAxes");function ho(e){return rr.indexOf(e)}l(ho,"familyRank");function eb(e){return e.avoidImmediateLoss<0?0:e.drainerSafety<0||e.scoreDelta<0?1:2}l(eb,"headOpeningRiskClass");function Hw(e,n,o){return(e===h.SafeSupermanaProgress||e===h.SafeOpponentManaProgress)&&eb(n)!==eb(o)}l(Hw,"shouldCompareHeadOpeningUtility");function Uw(e,n,o,t,r,a){let i=te(e,t);return i!==0||o===a&&Hw(o,n,r)&&(i=te(n,r),i!==0||(i=Pn(n.evalScore,r.evalScore),i!==0))?i:Pn(e.evalScore,t.evalScore)}l(Uw,"comparePlanRank");function jw(e,n){return ju([+(e.scoreGain>0),e.scoreGain,+(e.denyGain>0),e.denyGain,+(e.drainerSafetyDelta>0),e.drainerSafetyDelta,Number(e.endsNonnegativeDrainerSafety),+!e.spiritOnlySetup,-e.opponentImmediateWindowAfter],[+(n.scoreGain>0),n.scoreGain,+(n.denyGain>0),n.denyGain,+(n.drainerSafetyDelta>0),n.drainerSafetyDelta,Number(n.endsNonnegativeDrainerSafety),+!n.spiritOnlySetup,-n.opponentImmediateWindowAfter])}l(jw,"comparePackageMeta");function _o(e,n){let o=Uw(e.utility,e.headUtility,e.headFamily,n.utility,n.headUtility,n.headFamily);return o!==0||(o=jw(e.packageMeta,n.packageMeta),o!==0)||(o=Pn(ho(n.goalFamily),ho(e.goalFamily)),o!==0)||(o=Pn(ho(n.headFamily),ho(e.headFamily)),o!==0)?o:(o=Pn(n.actions.length,e.actions.length),o!==0?o:Ku(e.compiledChunks,n.compiledChunks))}l(_o,"turnEngineComparePlans");function sr(e){return e.planner.mode===$e.Production?Xe.Production:Xe.Baseline}l(sr,"turnEngineModeFromAutomoveConfig");function ir(e){return Math.max(Math.trunc(e),1)}l(ir,"positiveCap");function bo(e){return{mode:sr(e),ownSeedCap:ir(e.planner.ownSeedCap),ownBeam:ir(e.planner.ownBeam),perNodeFamilyCap:ir(e.planner.perNodeFamilyCap),stepCap:ir(e.planner.stepCap),opponentSeedCap:ir(e.planner.opponentSeedCap),opponentBeam:ir(e.planner.opponentBeam),replySeedCap:ir(e.planner.replySeedCap),replyBeam:ir(e.planner.replyBeam),expansionCap:ir(e.planner.expansionCap),enableSpiritFamily:e.planner.spiritFamily,scoringWeights:e.evaluation.weights,enableLazyOracleScoreWindowProjection:!1}}l(bo,"turnEngineConfigFromAutomoveConfig");function Gn(e){return e.planner.enabled&&e.planner.mode===$e.Production&&e.planner.secondaryAnalysis}l(Gn,"productionSecondaryAnalysisLive");function Co(e){return e.activeColor===w.White&&e.turnNumber<=3&&!e.playerCanUseAction()&&!e.playerCanMoveMana()&&(e.monsMovesCount===0||e.monsMovesCount===3)}l(Co,"productionIsEarlyWhiteTurnStart");function gl(e){return{...e,ownSeedCap:Math.min(e.ownSeedCap,14),ownBeam:Math.min(e.ownBeam,5),perNodeFamilyCap:Math.min(e.perNodeFamilyCap,4),stepCap:Math.min(e.stepCap,6),opponentSeedCap:1,opponentBeam:1,replySeedCap:1,replyBeam:1,expansionCap:Math.min(e.expansionCap,48)}}l(gl,"applyEarlyWhiteTurnEngineLimits");function Kw(e){let n=e.mode===Xe.Production;return{...e,ownSeedCap:Math.min(e.ownSeedCap,n?12:8),ownBeam:Math.min(e.ownBeam,n?5:4),perNodeFamilyCap:Math.min(e.perNodeFamilyCap,n?4:3),stepCap:Math.min(e.stepCap,5),opponentSeedCap:Math.min(e.opponentSeedCap,n?6:4),opponentBeam:Math.min(e.opponentBeam,n?3:2),replySeedCap:Math.min(e.replySeedCap,n?3:2),replyBeam:n?2:1,expansionCap:Math.min(e.expansionCap,n?144:96)}}l(Kw,"applyTurnEngineRerankLimits");function Mt(e){return Kw(bo(e))}l(Mt,"turnEngineRerankConfigFromAutomoveConfig");var qw=Symbol("turn-engine-caches"),Sm=class Sm{constructor(){ee(this,"continuation",new Ee(Fa));ee(this,"oracle",new Ee(Fa));ee(this,"utility",new Ee(Fa));ee(this,"bestPlan",new Ee(Fa));ee(this,"noPlan",new wo(Fa));ee(this,"capacity",Fa*5)}get size(){return this.continuation.size+this.oracle.size+this.utility.size+this.bestPlan.size+this.noPlan.size}clear(){this.continuation.clear(),this.oracle.clear(),this.utility.clear(),this.bestPlan.clear(),this.noPlan.clear()}};l(Sm,"TurnEngineCaches");var mm=Sm;function eo(e){return e.caches.engine.getOrCreate(qw,()=>new mm)}l(eo,"turnEngineCaches");function rb(e){let n=wl,o=[e.ownSeedCap,e.ownBeam,e.perNodeFamilyCap,e.stepCap,e.opponentSeedCap,e.opponentBeam,e.replySeedCap,e.replyBeam,e.expansionCap,Number(e.enableSpiritFamily),um[e.mode]+1,Number(e.enableLazyOracleScoreWindowProjection)];for(let t of o)n=fo(In(n,mo(t)),Hu);for(let t of Fi(e.scoringWeights))n=fo(In(n,mo(t.codePointAt(0)??0)),Hu);return n}l(rb,"configFingerprint");function Al(e,n,o){return{stateHash:pe(e),modeTag:um[n],configFingerprint:rb(o)}}l(Al,"cacheKeyForMode");function El(e,n){return Al(e,n.mode,n)}l(El,"cacheKey");function ab(e,n,o){return{configFingerprint:rb(o),startTag:e.hi*2+on(n),startLow:e.lo}}l(ab,"createUtilityCacheIdentity");function ib(e,n){return{stateHash:e,configFingerprint:n.configFingerprint,startTag:n.startTag,startLow:n.startLow}}l(ib,"utilityCacheKey");function fm(e,n){return e.get(n.stateHash,n.modeTag,n.configFingerprint)}l(fm,"turnCacheGet");function sb(e,n){return e.has(n.stateHash,n.modeTag,n.configFingerprint)}l(sb,"turnCacheHas");function Ol(e,n,o){e.set(n.stateHash,o,n.modeTag,n.configFingerprint)}l(Ol,"turnCacheSet");function ub(e,n){e.add(n.stateHash,n.modeTag,n.configFingerprint)}l(ub,"turnCacheAdd");function ym(e,n){e.delete(n.stateHash,n.modeTag,n.configFingerprint)}l(ym,"turnCacheDelete");function qu(e){eo(e).clear()}l(qu,"clearTurnEnginePlanCache");function zu(e,n,o,t){return $u(e,n,pe(n),o,t)}l(zu,"createTurnUtilityEvalContext");function $u(e,n,o,t,r){return{execution:e,start:n,startHash:o,perspective:t,config:r,cacheIdentity:ab(o,t,r)}}l($u,"createTurnUtilityEvalContextWithSearchHash");function ss(e,n,o,t,r){if(e.session.checkpoint())return Ln;let a=zw(e,n,o,t,r);return e.session.checkpoint()?Ln:a}l(ss,"turnEngineEvaluateStateUtility");function zw(e,n,o,t,r){if(e.session.checkpoint())return Ln;let a=zu(e,o,t,r);return pb(a,n,pe(n))}l(zw,"evaluateStateUtilityFromInputs");function us(e,n,o,t){return e.session.checkpoint()?Il():$w(e,n,o,t)}l(us,"turnOracleContextWithSearchHash");function $w(e,n,o,t){let r=eo(e).oracle.get(t,on(o));if(r!==void 0)return e.session.checkpoint()?Il():r;let a=Ma(e,n,t);if(e.session.checkpoint())return Il();let i=Ra(e,n,o,t);if(e.session.checkpoint())return Il();let s={opportunity:i,strategic:a.colorSummary(o),opponentImmediateWindow:a.colorSummary(X(o)).immediateWindow.bestScore};return e.session.cacheWriteAllowed&&eo(e).oracle.set(t,s,on(o)),s}l($w,"turnOracleContextAfterCheckpoint");function Il(){return{opportunity:Xt(),strategic:yt(),opponentImmediateWindow:0}}l(Il,"emptyOracleContext");function is(e,n,o,t){if(e.session.checkpoint())return 0;let r=md(e,n,o,t);return e.session.checkpoint()?0:r}l(is,"activeTurnScoreWindowWithSearchHash");function lb(e,n,o){return is(e,n,o,pe(n))}l(lb,"activeTurnScoreWindow");function Xw(e,n){let o=e.winnerColor();return o===void 0?0:o===n?2:-2}l(Xw,"winnerState");function rt(e,n,o){return n.winnerColor()!==void 0||n.activeColor!==X(o)?!1:xl(e,n,o,pe(n))}l(rt,"opponentCanWinImmediately");function xl(e,n,o,t){let r=X(o);if(n.winnerColor()!==void 0||n.activeColor!==r)return!1;let a=j(xe,Ke(n,r));return a<=0||is(e,n,r,t)>=a}l(xl,"opponentCanWinImmediatelyWithSearchHash");function je(e,n,o){return Zs(e,n,yn(n),o)}l(je,"ownDrainerSafetyScore");function Fo(e,n){for(let[o,t]of e.entries()){let r=z(t);if(r?.color===n&&r.kind===A.Drainer&&!$(r))return o}}l(Fo,"findAwakeDrainerLocation");function cb(e,n,o,t){let r=Fo(n,o);if(r===void 0)return!1;let a=n.get(r);return a?.kind==="mon-with-mana"&&Je(a.mana,t)&&ba(e,n,o,r)}l(cb,"ownDrainerCarriesSafeMana");function Dn(e,n,o){return e.execution.session.checkpoint()?Ln:pb(e,n,o)}l(Dn,"evaluateStateUtilityWithSearchHash");function pb(e,n,o){let{execution:t,start:r,perspective:a,config:i}=e,s=ib(o,e.cacheIdentity),u=eo(t).utility.get(s.stateHash,s.startTag,s.configFingerprint,s.startLow);if(u!==void 0)return t.session.checkpoint()?Ln:u;let c=Ke(n,a),p=Ke(r,a),m=j(c,p),d=us(t,n,a,o);if(t.session.cancelled)return Ln;let f=d.strategic.scorePathWindow.bestSteps,y=f===void 0?0:nn(Math.max(33-f,0),22),S=g(nn(d.strategic.immediateWindow.bestScore,110),nn(d.strategic.immediateWindow.multiPressure,18)),C={kind:"supermana"},b={kind:"regular",color:X(a)},k=cb(t,n.board,a,C)?380:0,M=cb(t,n.board,a,b)?300:0,P=X(a),T=is(t,r,P,e.startHash);if(t.session.cancelled)return Ln;let I=n.activeColor===P?is(t,n,P,o):d.opponentImmediateWindow;if(t.session.cancelled)return Ln;let x=j(T,I),N=je(t,n.board,a),B=N<0?nn(Math.min(Math.abs(N),2147483647),900):0,W=j(xe,Ke(r,P)),V=j(xe,Ke(n,P)),Q=W>0&&T>=W&&(V<=0||I<V),U=Dr(t,n,a,i.scoringWeights,!1);if(t.session.checkpoint())return Ln;let ce=vl({winState:Xw(n,a),avoidImmediateLoss:xl(t,n,a,o)?-1:1,scoreDelta:j(g(g(g(g(nn(m,2400),y),S),k),M),B),denyGain:g(nn(x,220),Q?1500:0),drainerAttack:Fo(n.board,X(a))===void 0?1:0,drainerSafety:N,evalScore:U});return t.session.cacheWriteAllowed&&eo(t).utility.set(s.stateHash,ce,s.startTag,s.configFingerprint,s.startLow),ce}l(pb,"evaluateStateUtilityAfterCheckpoint");function cs(e,n,o,t,r){return Yw(Dn(e,n,o),t,r)}l(cs,"quickOrderScoreWithSearchHash");function Yw(e,n,o){let t=(()=>{switch(n){case h.ImmediateScore:return 1e3;case h.DenyOpponentWindow:return 960;case h.DrainerKill:return 920;case h.DrainerSafetyRecovery:return 860;case h.SpiritImpact:return 820;case h.SafeSupermanaProgress:return 760;case h.SafeOpponentManaProgress:return 720;case h.ManaTempo:return 560}})();return e.winState*1e7+e.avoidImmediateLoss*5e6+e.scoreDelta+e.denyGain+e.drainerAttack*3500+e.drainerSafety*2200+Math.trunc(e.evalScore/8)+t*2e3-o*350}l(Yw,"quickOrderScoreForUtility");var Wa,Rm=class Rm{constructor(n,o,t,r){H(this,Wa);ee(this,"transitions");ee(this,"limit");ee(this,"priorityLocations");if(F(this,Wa,n),this.limit=Qw(r),n.session.checkpoint()){this.transitions=[],this.priorityLocations=[];return}let a=new Set,i=[];for(let s of t)for(let u of Jw(s.action)){let c=ne(u);a.has(c)||(a.add(c),i.push(u))}this.priorityLocations=i,this.transitions=xd(n,o,this.limit,Yn,i),n.session.checkpoint()&&(this.transitions=[])}expand(n){if(R(this,Wa).session.checkpoint()||this.transitions.length<this.limit||this.limit>=rs)return!1;let o=Math.min(this.limit*2,rs);if(o<=this.limit)return!1;let t=xd(R(this,Wa),n,o,Yn,this.priorityLocations);return R(this,Wa).session.checkpoint()?!1:(this.transitions=t,this.limit=o,!0)}};Wa=new WeakMap,l(Rm,"TransitionCompilePool");var jr=Rm;function Qw(e){return Math.min(Math.max(Math.max(e.ownSeedCap,e.opponentSeedCap)*12,24),96)}l(Qw,"compileLimitForConfig");function Zw(e){switch(e.kind){case"walk":case"safety-retreat":return[{kind:"location",location:{...e.actor}},{kind:"location",location:{...e.to}}];case"attack":case"bomb":return[{kind:"location",location:{...e.actor}},{kind:"location",location:{...e.target}}];case"spirit-shift":return[{kind:"location",location:{...e.actor}},{kind:"location",location:{...e.target}},{kind:"location",location:{...e.destination}}];case"move-mana":return[{kind:"location",location:{...e.from}},{kind:"location",location:{...e.to}}];case"score-carry":return[{kind:"location",location:{...e.actor}},{kind:"location",location:{...e.step}}]}}l(Zw,"directInputsForAction");function fb(e,n,o,t){if(e.session.checkpoint())return;let r=Zw(t),a=Sn(n,r);if(!(a===void 0||e.session.checkpoint())&&Sb(e,n,a.game,a.events,o,t))return[a.game,r]}l(fb,"compileActionDirect");function db(e,n,o,t,r){if(e.session.checkpoint())return;let a;for(let i=0;i<r.length;i+=1){if(e.session.checkpoint())return;let s=r[i];if(s===void 0||!Sb(e,n,s.game,s.events,o,t))continue;let u=ov(e,n,s.game,s.events,o,t),c=a===void 0?void 0:r[a[1]];(a===void 0||u>a[0]||u===a[0]&&c!==void 0&&Eo(s.inputs,c.inputs)<0)&&(a=[u,i])}return a}l(db,"bestTransitionForAction");function yb(e,n,o,t,r){let a=db(e,n,o,t,r.transitions);if(a===void 0&&r.expand(n)&&(a=db(e,n,o,t,r.transitions)),a===void 0||e.session.checkpoint())return;let i=r.transitions[a[1]];return i===void 0?void 0:[i.game.fork(),i.inputs.slice()]}l(yb,"compileActionFromPoolFallback");function Xu(e,n,o,t,r){let a=fb(e,n,o,t);return a!==void 0?a:e.session.cancelled?void 0:yb(e,n,o,t,r)}l(Xu,"compileActionFromPool");function bm(e,n,o,t,r){let a=fb(e,n,o,t);if(a!==void 0)return a;if(e.session.cancelled)return;let i=new jr(e,n,[{family:h.ManaTempo,action:t,priority:0}],r);return yb(e,n,o,t,i)}l(bm,"compileAction");function Jw(e){switch(e.kind){case"walk":case"safety-retreat":return[e.actor,e.to];case"attack":case"bomb":return[e.actor,e.target];case"spirit-shift":return[e.actor,e.target,e.destination];case"move-mana":return[e.from,e.to];case"score-carry":return[e.actor,e.step]}}l(Jw,"actionPriorityLocations");function hm(e,n,o){return e.some(t=>(t.kind==="mon-move"||t.kind==="demon-additional-step")&&Ie(t.from,n)&&Ie(t.to,o))}l(hm,"movedActorTo");function ev(e,n,o,t){return e.some(r=>r.kind==="mystic-action"||r.kind==="demon-action"?Ie(r.from,n)&&Ie(r.to,o):r.kind==="mon-fainted"&&r.mon.color===X(t)&&Ie(r.to,o))}l(ev,"attackEventsMatch");function nv(e,n,o){for(let[,t]of e.board.entries())if(t.kind==="mon-with-mana"&&t.mon.color===n&&!$(t.mon)&&Je(t.mana,o))return!0;return!1}l(nv,"actorOrSuccessorCarries");function Sb(e,n,o,t,r,a){switch(a.kind){case"walk":return hm(t,a.actor,a.to)&&!tv(t);case"attack":return ev(t,a.actor,a.target,r);case"spirit-shift":return t.some(i=>i.kind==="spirit-target-move"&&Ie(i.by,a.actor)&&Ie(i.from,a.target)&&Ie(i.to,a.destination));case"bomb":return t.some(i=>i.kind==="bomb-attack"&&Ie(i.from,a.actor)&&Ie(i.to,a.target));case"move-mana":return t.some(i=>i.kind==="mana-move"&&Ie(i.from,a.from)&&Ie(i.to,a.to));case"score-carry":return hm(t,a.actor,a.step)&&(t.some(i=>i.kind==="mana-scored"&&Je(i.mana,a.wanted))||nv(o,r,a.wanted));case"safety-retreat":return hm(t,a.actor,a.to)&&je(e,o.board,r)>je(e,n.board,r)}}l(Sb,"transitionMatchesAction");function ov(e,n,o,t,r,a){let i=nn(j(Ke(o,r),Ke(n,r)),500);switch(i=g(i,nn(je(e,o.board,r),180)),!rt(e,n,r)&&rt(e,o,r)&&(i=j(i,2200)),a.kind){case"walk":i=g(i,nn(se(a.actor,a.to),-20));break;case"attack":rv(t,r)&&(i=g(i,1600)),mb(t,r)&&(i=g(i,800));break;case"spirit-shift":t.some(s=>s.kind==="mana-scored")&&(i=g(i,1e3)),t.some(s=>s.kind==="spirit-target-move")&&(i=g(i,600));break;case"bomb":mb(t,r)&&(i=g(i,1e3));break;case"move-mana":i=g(i,nn(j(Vn(a.from,r),Vn(a.to,r)),160));break;case"score-carry":i=g(i,nn(_e(a.wanted,r),200));break;case"safety-retreat":i=g(i,nn(je(e,o.board,r),260));break}return i}l(ov,"transitionScore");function tv(e){return e.some(n=>n.kind==="mystic-action"||n.kind==="demon-action"||n.kind==="bomb-attack"||n.kind==="spirit-target-move")}l(tv,"eventsIncludeNonWalkAction");function mb(e,n){return e.some(o=>o.kind==="mon-fainted"&&o.mon.color===X(n))}l(mb,"eventsIncludeAnyFaint");function rv(e,n){return e.some(o=>o.kind==="mon-fainted"&&o.mon.color===X(n)&&o.mon.kind===A.Drainer)}l(rv,"eventsIncludeOpponentDrainerFaint");function hb(e){let n=z(e);return n!==void 0&&(n.kind===A.Mystic||n.kind===A.Demon)}l(hb,"actorCanAttackFromItem");function Cm(e){let n=z(e);return n!==void 0&&!$(n)&&e.kind==="mon-with-consumable"&&e.consumable===q.Bomb}l(Cm,"actorCanBombFromItem");function av(e,n){return e!==void 0&&se(e,n)===1}l(av,"locationGuardedByAngel");function iv(e,n,o){let t=oa(n,o),r=e.squareAt(t);return e.get(t)===void 0&&r.kind!=="supermana-base"&&r.kind!=="mon-base"}l(iv,"demonAttackPathClear");function Mm(e,n,o,t,r){if(e.squareAt(n).kind==="mon-base")return!1;let a=e.get(o),i=a===void 0?void 0:z(a);if(i?.color!==X(r)||$(i)||av(e.findAwakeAngel(X(r)),o))return!1;let s=z(t);return s?.kind===A.Mystic?ct(n).some(u=>Ie(u,o)):s?.kind===A.Demon&<(n).some(u=>Ie(u,o))&&iv(e,n,o)}l(Mm,"actorCanAttackTargetNow");function km(e,n,o,t,r){if(!hr(n).some(s=>Ie(s,o))||!Cm(t)||z(t)?.color!==r)return!1;let a=e.get(o),i=a===void 0?void 0:z(a);return i?.color===X(r)&&!$(i)}l(km,"actorCanBombTargetNow");function bb(e,n,o){let t=e.get(o),r=e.squareAt(o),a=z(n),i=no(n),s;if(t===void 0?s=!0:t.kind==="mon"?z(n)!==void 0?s=!1:n.kind==="mana"?s=t.mon.kind===A.Drainer&&!$(t.mon):s=n.kind==="consumable"&&n.consumable===q.BombOrPotion:t.kind==="mana"?s=a?.kind===A.Drainer&&!$(a):t.kind==="mon-with-mana"||t.kind==="mon-with-consumable"?s=n.kind==="consumable"&&n.consumable===q.BombOrPotion:t.consumable===q.BombOrPotion?s=z(n)!==void 0:s=!1,!s)return!1;switch(r.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":return i?.kind==="supermana"||i===void 0&&a?.kind===A.Drainer;case"mon-base":return a?.kind===r.monKind&&a.color===r.color&&i===void 0&&ia(n)===void 0}}l(bb,"spiritDestinationAllowed");function Cb(e,n){let o=e.get(n),t=e.squareAt(n),r=t.kind==="regular"||t.kind==="consumable-base"||t.kind==="mana-base"||t.kind==="mana-pool";return o===void 0?r:o.kind==="mon"&&r&&o.mon.kind===A.Drainer&&!$(o.mon)}l(Cb,"manaMoveDestinationAllowed");function Mb(e,n){for(let[o,t]of e.entries())if(t.kind==="mana"&&Je(t.mana,n))return o}l(Mb,"nearestWantedManaLocation");function Ba(e,n,o){let t=e.get(n),r=t===void 0?void 0:z(t);if(r===void 0)return!1;let a=e.get(o);if(a!==void 0&&z(a)!==void 0)return!1;let i=e.squareAt(o);switch(i.kind){case"regular":case"consumable-base":case"mana-base":case"mana-pool":return!0;case"supermana-base":return r.kind===A.Drainer;case"mon-base":return r.kind===i.monKind&&r.color===i.color}}l(Ba,"walkDestinationPlausible");function ls(e,n){return e.activeColor===n?Math.max(le-e.monsMovesCount,0):le}l(ls,"remainingMovesForColor");function Vn(e,n){let o=n===w.Black?0:10;return Math.min(se(e,{i:o,j:0}),se(e,{i:o,j:10}))}l(Vn,"distanceToNearestPool");function kb(e,n,o,t){let r=X(o);return je(e,n.board,o)<0||lb(e,n,r)>0||Ke(n,r)>=xe-2||n.board.get(t)?.kind==="mon-with-mana"||Vn(t,r)<=3}l(kb,"opponentDrainerKillIsHighValue");function Kr(e){return e.kind!=="score-carry"?dm(e):`${dm(e)}:${e.wanted.kind}:${e.wanted.kind==="regular"?e.wanted.color:"s"}`}l(Kr,"actionIdentity");function sv(e){switch(e){case h.ImmediateScore:return Cn.ImmediateScore;case h.DenyOpponentWindow:return Cn.TacticalDeny;case h.DrainerKill:return Cn.DrainerKill;case h.SafeSupermanaProgress:return Cn.SafeSupermanaProgress;case h.SafeOpponentManaProgress:return Cn.SafeOpponentManaProgress;case h.DrainerSafetyRecovery:return Cn.DrainerSafetyRecovery;case h.SpiritImpact:return Cn.SpiritImpact;case h.ManaTempo:return Cn.ManaTempo}}l(sv,"opportunityKindForFamily");function uv(e){switch(e.kind){case"walk":case"safety-retreat":case"score-carry":return{monMovesNeeded:1,needsAction:!1,needsManaMove:!1};case"attack":case"bomb":case"spirit-shift":return{monMovesNeeded:0,needsAction:!0,needsManaMove:!1};case"move-mana":return{monMovesNeeded:0,needsAction:!1,needsManaMove:!0}}}l(uv,"opportunityBudgetForAction");function cv(e,n){return n.monMovesNeeded<=e.remainingMonMoves&&(!n.needsAction||e.canUseAction)&&(!n.needsManaMove||e.canMoveMana)}l(cv,"budgetAllowsOpportunity");function lv(e,n){let o=33,t=e.family===h.SafeSupermanaProgress?Math.max(o-(n.delta.safeSupermanaProgressSteps??o),0):0,r=e.family===h.SafeOpponentManaProgress?Math.max(o-(n.delta.safeOpponentManaProgressSteps??o),0):0;return{sameTurnScoreWindowGain:n.delta.sameTurnScoreWindowValue,spiritGain:e.family===h.SpiritImpact?Math.max(n.delta.spiritGain,1):0,opponentWindowDenyGain:e.family===h.DenyOpponentWindow||e.family===h.DrainerKill?Math.max(n.delta.opponentWindowDenyGain,1):0,drainerAttack:(e.family===h.DrainerKill||e.family===h.DenyOpponentWindow)&&n.delta.drainerAttackAvailable,drainerSafetyDelta:e.family===h.DrainerSafetyRecovery?Math.max(-n.delta.drainerSafety,0):0,supermanaProgressGain:t,opponentManaProgressGain:r}}l(lv,"opportunityDeltaForSeed");function pv(e,n){return{kind:sv(e.family),family:e.family,action:e.action,priority:e.priority,budget:uv(e.action),delta:lv(e,n)}}l(pv,"turnOpportunityFromSeed");function Yu(e,n){let o=(()=>{switch(e.kind){case Cn.ImmediateScore:return 12e3;case Cn.TacticalDeny:return 11400;case Cn.DrainerKill:return 11200;case Cn.DrainerSafetyRecovery:return 10400;case Cn.SpiritImpact:return 9800;case Cn.SafeSupermanaProgress:return 9400;case Cn.SafeOpponentManaProgress:return 9200;case Cn.ManaTempo:return 8e3}})(),t=e.kind===Cn.ImmediateScore||e.kind===Cn.TacticalDeny||e.kind===Cn.DrainerKill||e.kind===Cn.DrainerSafetyRecovery;return e.priority+o+(n&&t?4e3:0)+e.delta.sameTurnScoreWindowGain*280+e.delta.spiritGain*220+e.delta.opponentWindowDenyGain*260+e.delta.drainerSafetyDelta*240+e.delta.supermanaProgressGain*40+e.delta.opponentManaProgressGain*36+(e.delta.drainerAttack?800:0)-Math.max(e.budget.monMovesNeeded,0)*120-(e.budget.needsAction?80:0)-(e.budget.needsManaMove?40:0)}l(Yu,"opportunityScore");function vn(e,n){return e===void 0||e.includes(n)}l(vn,"familyAllowed");function Nl(e,n,o,t,r,a){if(e.session.checkpoint()||n.activeColor!==o)return[];let i=Ra(e,n,o,pe(n));if(e.session.checkpoint())return[];let s=i.opponentCanWinImmediately||i.delta.drainerSafety<0,u=[];if(vn(a,h.ImmediateScore)&&u.push(...wb(n,o)),e.session.checkpoint())return[];if(vn(a,h.DenyOpponentWindow)&&u.push(...vb(e,n,o)),e.session.checkpoint())return[];if(vn(a,h.DrainerKill)&&u.push(...gb(e,n,o)),e.session.checkpoint())return[];if(vn(a,h.SafeSupermanaProgress)&&u.push(...Eb(e,n,o)),e.session.checkpoint())return[];if(vn(a,h.SafeOpponentManaProgress)&&u.push(...Ob(e,n,o)),e.session.checkpoint())return[];if(vn(a,h.DrainerSafetyRecovery)&&u.push(...xb(e,n,o)),e.session.checkpoint())return[];if(vn(a,h.ManaTempo)&&u.push(...mv(e,n,o,t)),e.session.checkpoint())return[];if((vn(a,h.SafeSupermanaProgress)||vn(a,h.SafeOpponentManaProgress)||vn(a,h.DrainerSafetyRecovery)||vn(a,h.SpiritImpact))&&u.push(...Nb(e,n,o,i,a,t)),e.session.checkpoint())return[];if(vn(a,h.SpiritImpact)&&u.push(...Db(e,n,o,t)),e.session.checkpoint())return[];if(vn(a,h.ManaTempo)&&u.push(..._b(n,o)),e.session.checkpoint())return[];if((vn(a,h.ManaTempo)||vn(a,h.DrainerSafetyRecovery))&&u.push(...Dl(e,n,o).filter(f=>vn(a,f.family))),e.session.checkpoint())return[];let c=new Map;for(let f of u){if(e.session.checkpoint())return[];let y=pv(f,i);if(!cv(i.budget,y.budget)||s&&y.kind===Cn.ManaTempo&&!y.delta.drainerAttack&&y.delta.drainerSafetyDelta<=0)continue;let S=c.get(y.family)??[];S.push(y),c.set(y.family,S)}for(let f of c.values())f.sort((y,S)=>{let C=Pn(Yu(S,s),Yu(y,s));return C!==0?C:as(y.action,S.action)});let p=new Map,m=new Set,d=[];for(let f=0;f<Math.max(t.perNodeFamilyCap,1);f+=1){if(e.session.checkpoint())return[];let y=!1;for(let S of rr){let C=c.get(S);if(C===void 0)continue;let b=p.get(S)??0;for(;b<C.length;){let k=C[b];if(b+=1,k!==void 0&&!m.has(Kr(k.action))){m.add(Kr(k.action)),d.push(k),y=!0;break}}if(p.set(S,b),d.length>=Math.max(r,1))return d}if(!y)break}return d}l(Nl,"discoverTurnOpportunities");function Qu(e,n,o,t,r){if(e.session.checkpoint()||n.activeColor!==o)return[];if(t.mode===Xe.Production){let p=Nl(e,n,o,t,r).map(({family:m,action:d,priority:f})=>({family:m,action:d,priority:f}));return e.session.checkpoint()?[]:p}let a=[];if(a.push(...wb(n,o)),e.session.checkpoint())return[];if(a.push(...vb(e,n,o)),e.session.checkpoint())return[];if(a.push(...gb(e,n,o)),e.session.checkpoint())return[];if(a.push(...Eb(e,n,o)),e.session.checkpoint())return[];if(a.push(...Ob(e,n,o)),e.session.checkpoint())return[];if(a.push(...xb(e,n,o)),e.session.checkpoint())return[];if(a.push(...Nb(e,n,o,Ra(e,n,o,pe(n)),void 0,t)),e.session.checkpoint())return[];if(a.push(...Db(e,n,o,t)),e.session.checkpoint())return[];if(a.push(..._b(n,o)),e.session.checkpoint())return[];let i=new Map;for(let p of a){if(e.session.checkpoint())return[];let m=i.get(p.family)??[];m.push(p),i.set(p.family,m)}for(let p of i.values())p.sort((m,d)=>{let f=Pn(d.priority,m.priority);return f!==0?f:as(m.action,d.action)});let s=new Set,u=new Map,c=[];for(let p=0;p<Math.max(t.perNodeFamilyCap,1);p+=1){if(e.session.checkpoint())return[];let m=!1;for(let d of rr){let f=i.get(d);if(f===void 0)continue;let y=u.get(d)??0;for(;y<f.length;){let S=f[y];if(y+=1,S!==void 0&&!s.has(Kr(S.action))){s.add(Kr(S.action)),c.push(S),m=!0;break}}if(u.set(d,y),c.length>=Math.max(r,1))return c}if(!m)break}return c}l(Qu,"generateActionSeeds");function wb(e,n){let o=[];for(let[t,r]of e.board.entries()){if(r.kind!=="mon-with-mana"||r.mon.color!==n||$(r.mon))continue;let a=Vn(t,n);for(let i of ge(t)){let s=Vn(i,n);s>a||o.push({family:h.ImmediateScore,action:{kind:"score-carry",actor:t,wanted:r.mana,step:i},priority:9800+Math.max(a-s,0)*180+_e(r.mana,n)*120})}}return o}l(wb,"immediateScoreSeeds");function vb(e,n,o){let t=X(o),r=is(e,n,t,pe(n));if(r<=0&&!rt(e,n,o))return[];let a=Ab(n,o,h.DenyOpponentWindow,9400+r*240),i=Fo(n.board,o);if(i===void 0)return a;let s=je(e,n.board,o),u=Vn(i,o);for(let c of ge(i))Vn(c,o)>u+1&&s>=0||a.push({family:h.DenyOpponentWindow,action:{kind:"safety-retreat",actor:i,to:c},priority:9100+Math.abs(s)*220});return a}l(vb,"denyWindowSeeds");function gb(e,n,o){let t=Fo(n.board,X(o));return t===void 0||!kb(e,n,o,t)?[]:Ab(n,o,h.DrainerKill,9e3)}l(gb,"drainerKillSeeds");function Ab(e,n,o,t){let r=Fo(e.board,X(n));if(r===void 0)return[];let a=[],i=e.playerCanUseAction(),s=ls(e,n);for(let[u,c]of e.board.entries()){let p=z(c);if(p?.color!==n||$(p))continue;let m=i&&hb(c),d=i&&Cm(c);if(m&&Mm(e.board,u,r,c,n)&&a.push({family:o,action:{kind:"attack",actor:u,target:r},priority:t}),d&&km(e.board,u,r,c,n)&&a.push({family:o,action:{kind:"bomb",actor:u,target:r},priority:t-80}),!(s<=0||!m&&!d)){for(let f of ge(u))if(!(se(f,r)>=se(u,r))){if(o===h.DrainerKill){let y=e.board.fork();if(y.delete(u),y.set(f,c),!(m&&Mm(y,f,r,c,n)||d&&km(y,f,r,c,n)))continue}a.push({family:o,action:{kind:"walk",actor:u,to:f},priority:t-200+(se(u,r)-se(f,r))*80})}}}return a}l(Ab,"attackFamilySeeds");function Eb(e,n,o){return Ib(e,n,o,{kind:"supermana"},h.SafeSupermanaProgress,8900)}l(Eb,"safeSupermanaProgressSeeds");function Ob(e,n,o){return Ib(e,n,o,{kind:"regular",color:X(o)},h.SafeOpponentManaProgress,8600)}l(Ob,"safeOpponentManaProgressSeeds");function Rb(e,n,o,t,r){if(e.session.checkpoint())return{progressSteps:void 0,scorePathBestSteps:void 0,sameTurnScoreWindowValue:0};let a=X(o),i=t.kind==="supermana"?Tr|Ot:t.color===a?wr:0,s=Yo(e,n,o,r,i);return e.session.checkpoint()?{progressSteps:void 0,scorePathBestSteps:void 0,sameTurnScoreWindowValue:0}:{progressSteps:t.kind==="supermana"?s.safeSupermanaProgressSteps:t.color===a?s.safeOpponentManaProgressSteps:void 0,scorePathBestSteps:eu(e,n.board,o),sameTurnScoreWindowValue:s.sameTurnScoreWindowValue}}l(Rb,"safeProgressExactSnapshot");function Ib(e,n,o,t,r,a){if(e.session.checkpoint())return[];let i=Fo(n.board,o);if(i===void 0)return[];let s=[],u=Rb(e,n,o,t,pe(n));if(e.session.cancelled)return[];let c=je(e,n.board,o),p=Js(e,n,o,i,t),m=p?.[0];if(m!==void 0&&s.push({family:r,action:{kind:"score-carry",actor:i,wanted:t,step:m},priority:a+Math.max(22-(p?.length??0),0)*120}),e.session.checkpoint())return[];if(ls(n,o)>0){let f=Mb(n.board,t);if(f!==void 0){let y=se(i,f),S=u.progressSteps??33,C=u.scorePathBestSteps??33;for(let b of ge(i)){if(e.session.checkpoint())return[];if(!Ba(n.board,i,b))continue;let k=Sn(n,[{kind:"location",location:i},{kind:"location",location:b}]);if(k===void 0||rt(e,k.game,o))continue;let M=Rb(e,k.game,o,t,pe(k.game));if(e.session.cancelled)return[];let T=je(e,k.game.board,o),v=M.progressSteps??33,I=M.scorePathBestSteps??33,E=v<S||v<=S&&I<C;if(!E&&T<c)continue;let x=a-180+Math.max(y-se(b,f),0)*110+(T-c)*120;E&&(x+=(S-v)*220+(C-I)*180),t.kind==="supermana"&&M.sameTurnScoreWindowValue>0&&(x+=M.sameTurnScoreWindowValue*260),s.push({family:r,action:{kind:"walk",actor:i,to:b},priority:x})}}}let d=n.board.get(i);if(d?.kind==="mon-with-mana"&&Je(d.mana,t)){let f=Vn(i,o);for(let y of ge(i)){let S=Vn(y,o);S>f||s.push({family:r,action:{kind:"score-carry",actor:i,wanted:t,step:y},priority:a+Math.max(f-S,0)*150})}}return s}l(Ib,"safeProgressSeeds");function xb(e,n,o){let t=Fo(n.board,o);if(t===void 0)return[];let r=je(e,n.board,o),a=[];for(let i of ge(t)){let s=Sn(n,[{kind:"location",location:t},{kind:"location",location:i}]);if(s===void 0)continue;let u=je(e,s.game.board,o);u<=r||a.push({family:h.DrainerSafetyRecovery,action:{kind:"safety-retreat",actor:t,to:i},priority:8300+Math.abs(r)*220+(u-r)*260})}return a}l(xb,"safetyRecoverySeeds");function Dl(e,n,o){if(ls(n,o)<=0)return[];let t=[],r=je(e,n.board,o),a=Fo(n.board,o);if(a!==void 0){let i=Vn(a,o);for(let s of ge(a)){if(!Ba(n.board,a,s))continue;let u=Sn(n,[{kind:"location",location:a},{kind:"location",location:s}]);if(u===void 0||rt(e,u.game,o))continue;let c=je(e,u.game.board,o);if(c<r)continue;let p=Vn(s,o);t.push({family:c>r?h.DrainerSafetyRecovery:h.ManaTempo,action:{kind:"walk",actor:a,to:s},priority:7200+Math.max(i-p,0)*140+(c-r)*240})}}if(t.length!==0)return t;for(let[i,s]of n.board.entries()){let u=z(s);if(!(u?.color!==o||$(u)))for(let c of ge(i)){if(!Ba(n.board,i,c))continue;let p=Sn(n,[{kind:"location",location:i},{kind:"location",location:c}]);p===void 0||rt(e,p.game,o)||t.push({family:h.ManaTempo,action:{kind:"walk",actor:i,to:c},priority:6800})}}return t}l(Dl,"fallbackWalkSeeds");function dv(e,n,o){let t=Fo(n.board,o);if(t===void 0)return;let r=je(e,n.board,o),a;for(let i of ge(t)){if(!Ba(n.board,t,i))continue;let s=Sn(n,[{kind:"location",location:t},{kind:"location",location:i}]);if(s===void 0)continue;let u=je(e,s.game.board,o);if(u<=r)continue;let c=8300+Math.abs(r)*220+(u-r)*260;a=a===void 0?c:Math.max(a,c)}return a}l(dv,"bestFollowUpSafetyRecoveryPriority");function mv(e,n,o,t){if(t.mode!==Xe.Production||ls(n,o)<=0)return[];let r=Fo(n.board,o);if(r===void 0)return[];let a=je(e,n.board,o),i=Vn(r,o),s=[];for(let u of ge(r)){if(!Ba(n.board,r,u))continue;let c=Sn(n,[{kind:"location",location:r},{kind:"location",location:u}]);if(c===void 0||rt(e,c.game,o))continue;let p=je(e,c.game.board,o),m=Vn(u,o);if(p>=a||m>=i)continue;let d=dv(e,c.game,o);d!==void 0&&s.push({family:h.ManaTempo,action:{kind:"walk",actor:r,to:u},priority:8e3+Math.max(i-m,0)*260+Math.trunc(d/20)-Math.max(a-p,0)*120})}return s}l(mv,"riskyRecoverySetupSeeds");function La(e,n,o,t,r){let a=0;return e&&(a|=Tr),n&&(a|=wr),o&&(a|=ma),t&&(a|=fa),r&&(a|=Ot),a}l(La,"tacticalProjectionFlags");function fv(e){switch(e){case"safe-progress-only":return La(!0,!1,!1,!1,!1);case"opponent-progress-only":return La(!1,!0,!1,!1,!1);case"drainer-opportunity":return La(!1,!0,!1,!0,!1);case"spirit-score-only":return La(!1,!1,!0,!1,!1);case"spirit-opportunity":return La(!0,!1,!0,!1,!1)}}l(fv,"tacticalProjectionProfileFlags");function yv(e,n,o,t,r){let a=n,i=o&&e!==A.Spirit,s=t,u=r&&e===A.Spirit,c=a&&u?"spirit-opportunity":a?"safe-progress-only":i&&r?"drainer-opportunity":i?"opponent-progress-only":u?"spirit-score-only":void 0;return{canEmitSupermana:a,canEmitOpponentMana:i,canEmitSafety:s,canEmitSpirit:u,tacticalFlags:La(a,i,u,r&&i,a||u),projectionProfile:c,needsScoreWindow:a||u}}l(yv,"oracleWalkActorCapabilities");function Pb(e,n,o,t){let r=Ma(e,n,t).colorSummary(o).spirit;return[r.nextTurnSetupGain,r.utility]}l(Pb,"strategicSpiritSignalWithSearchHash");function Nb(e,n,o,t,r,a){if(e.session.checkpoint()||ls(n,o)<=0)return[];let i=vn(r,h.SafeSupermanaProgress),s=vn(r,h.SafeOpponentManaProgress),u=vn(r,h.DrainerSafetyRecovery),c=vn(r,h.SpiritImpact);if(!i&&!s&&!u&&!c)return[];let p=t.turn,m=[0,0];if(c&&(m=Pb(e,n,o,pe(n))),e.session.checkpoint())return[];let d=i||u?je(e,n.board,o):0,f=p.safeSupermanaProgressSteps??33,y=p.safeOpponentManaProgressSteps??33,S=Fo(n.board,o),C=[],b=a.enableLazyOracleScoreWindowProjection;for(let[k,M]of n.board.entries()){if(e.session.checkpoint())return[];let P=z(M);if(P?.color!==o||$(P)||S!==void 0&&Ie(k,S))continue;let T=yv(P.kind,i,s,u,c);if(!(!T.canEmitSupermana&&!T.canEmitOpponentMana&&!T.canEmitSafety&&!T.canEmitSpirit))for(let v of ge(k)){if(e.session.checkpoint())return[];if(!Ba(n.board,k,v))continue;let I=Sn(n,[{kind:"location",location:k},{kind:"location",location:v}]);if(I===void 0||rt(e,I.game,o))continue;let E=T.canEmitSpirit,x=b?T.projectionProfile!==void 0:T.tacticalFlags!==0,N=b&&T.needsScoreWindow,B=x||N||E?pe(I.game):void 0,W;if(x){if(B===void 0)throw new Error("oracle walk projection requires a state hash");let Ge=T.tacticalFlags;if(b){if(T.projectionProfile===void 0)throw new Error("lazy oracle projection requires a profile");Ge=fv(T.projectionProfile)}W=Yo(e,I.game,o,B,Ge)}if(e.session.cancelled)return[];let V=[0,0];if(E){if(B===void 0)throw new Error("oracle Spirit analysis requires a state hash");V=Pb(e,I.game,o,B)}let Q=T.canEmitSupermana||T.canEmitSafety?je(e,I.game.board,o):d,U=W===void 0?f:W.safeSupermanaProgressSteps??33,ce=W===void 0?y:W.safeOpponentManaProgressSteps??33,Ae,ln=l(()=>{if(Ae!==void 0)return Ae;if(b){if(B===void 0)throw new Error("oracle score-window projection requires a state hash");Ae=Yo(e,I.game,o,B,Ot).sameTurnScoreWindowValue}else Ae=W?.sameTurnScoreWindowValue??0;return Ae},"loadAfterScoreWindow");T.canEmitSupermana&&U<f&&C.push({family:h.SafeSupermanaProgress,action:{kind:"walk",actor:k,to:v},priority:8250+(f-U)*240+(Q-d)*100+ln()*160});let pn=T.canEmitOpponentMana&&ce<y,dn=c&&(T.canEmitSpirit||T.canEmitOpponentMana)&&(W?.spiritAssistedDenialValue??0)>p.spiritAssistedDenialValue;if(pn||dn){let Ge=P.kind===A.Spirit?h.SpiritImpact:h.SafeOpponentManaProgress;vn(r,Ge)&&C.push({family:Ge,action:{kind:"walk",actor:k,to:v},priority:8e3+(pn?Math.max(y-ce,0)*240:0)+(dn?Math.max((W?.spiritAssistedDenialValue??0)-p.spiritAssistedDenialValue,0)*180:0)})}if(T.canEmitSpirit){let Ge=V[0]-m[0],_n=V[1]-m[1],Fe=Ge>0||_n>0,Ho=(W?.spiritAssistedScoreValue??0)>p.spiritAssistedScoreValue,st=b?!Ho&&!Fe&&ln()>p.sameTurnScoreWindowValue:(W?.sameTurnScoreWindowValue??0)>p.sameTurnScoreWindowValue;if(Ho||st||Fe){let Ve=(W?.spiritAssistedScoreValue??0)-p.spiritAssistedScoreValue,Qr=ln()-p.sameTurnScoreWindowValue;C.push({family:h.SpiritImpact,action:{kind:"walk",actor:k,to:v},priority:8100+Ve*200+Qr*220+Ge*320+_n*180})}}T.canEmitSafety&&Q>d&&C.push({family:h.DrainerSafetyRecovery,action:{kind:"walk",actor:k,to:v},priority:8050+(Q-d)*260})}}return C}l(Nb,"oracleWalkSeeds");function Tb(e,n){let o=e??33,t=n??33;return t>=o?0:(o-t)*220}l(Tb,"progressPriorityBonus");function Db(e,n,o,t){if(e.session.checkpoint()||!t.enableSpiritFamily||!n.playerCanUseAction())return[];let r=La(!0,!0,!0,!0,!0),a=Yo(e,n,o,pe(n),r);if(e.session.checkpoint())return[];let i=je(e,n.board,o),s=[];for(let[u,c]of n.board.entries()){if(e.session.checkpoint())return[];let p=z(c);if(!(p?.color!==o||p.kind!==A.Spirit||$(p)||n.board.squareAt(u).kind==="mon-base"))for(let m of pt(u)){if(e.session.checkpoint())return[];let d=n.board.get(m);if(!(d===void 0||!zt(d)))for(let f of ge(m)){if(e.session.checkpoint())return[];if(!bb(n.board,d,f))continue;let y=Sn(n,[{kind:"location",location:u},{kind:"location",location:m},{kind:"location",location:f}]);if(y===void 0)continue;let S=7600;z(d)?.color===X(o)&&(S+=400);let b=no(d);b?.kind==="supermana"&&(S+=600),b?.kind==="regular"&&b.color===X(o)&&(S+=460);let k=Yo(e,y.game,o,pe(y.game),r);if(e.session.checkpoint())return[];k.sameTurnScoreWindowValue>a.sameTurnScoreWindowValue&&(S+=(k.sameTurnScoreWindowValue-a.sameTurnScoreWindowValue)*280),k.spiritAssistedScore&&(S+=900+k.spiritAssistedScoreValue*120),k.safeSupermanaProgress&&(S+=700+Tb(a.safeSupermanaProgressSteps,k.safeSupermanaProgressSteps)),k.safeOpponentManaProgress&&(S+=760+Tb(a.safeOpponentManaProgressSteps,k.safeOpponentManaProgressSteps)),k.spiritAssistedDenial&&(S+=820+k.spiritAssistedDenialValue*140);let M=je(e,y.game.board,o);M>i&&(S+=(M-i)*160),S+=Math.max(11-se(f,m),0)*20,s.push({family:h.SpiritImpact,action:{kind:"spirit-shift",actor:u,target:m,destination:f},priority:S})}}}return s.sort((u,c)=>{let p=Pn(c.priority,u.priority);return p!==0?p:as(u.action,c.action)}),s.slice(0,12)}l(Db,"spiritImpactSeeds");function _b(e,n){if(!e.playerCanMoveMana()||Fo(e.board,n)!==void 0)return[];let o=[];for(let[t,r]of e.board.entries())if(!(r.kind!=="mana"||r.mana.kind!=="regular"||r.mana.color!==n))for(let a of ge(t)){if(!Cb(e.board,a))continue;let i=Vn(t,n)-Vn(a,n),s=X(n),u=Vn(t,s)-Vn(a,s);i<=0||u>0||o.push({family:h.ManaTempo,action:{kind:"move-mana",from:t,to:a},priority:6900+i*200-Math.max(u,0)*200})}return o}l(_b,"manaTempoSeeds");function Ub(e,n,o){if(e.session.checkpoint())return;let t=fm(eo(e).bestPlan,o);if(t===void 0)return;let r=t.compiledChunks[0],a=r!==void 0&&va(n,r)!==void 0;if(!e.session.checkpoint()){if(!a){e.session.cacheWriteAllowed&&ym(eo(e).bestPlan,o);return}return pm(t)}}l(Ub,"cachedBestPlanIfLegal");function Sv(e,n,o){if(e.session.checkpoint())return;let t=El(n,o),r=fm(eo(e).continuation,t);if(r===void 0)return;let a=va(n,r)!==void 0;if(!e.session.checkpoint()){if(!a){e.session.cacheWriteAllowed&&ym(eo(e).continuation,t);return}return r.slice()}}l(Sv,"cachedStepIfLegal");function Ju(e,n,o){if(e.session.checkpoint())return;let t=Sv(e,n,o);return e.session.checkpoint()?void 0:t}l(Ju,"turnEngineCachedStep");function Tm(e,n,o,t,r){e.session.checkpoint()||!e.session.cacheWriteAllowed||Ol(eo(e).continuation,Al(n,o,t),r.slice())}l(Tm,"turnEngineStoreCachedStep");function Wo(e,n,o,t){if(e.session.checkpoint()||n.activeColor!==o)return;let r=El(n,t);if(sb(eo(e).noPlan,r))return;let a=Ub(e,n,r);if(a!==void 0)return e.session.checkpoint()?void 0:a;let i=qb(e,n,o,t);if(!e.session.checkpoint())switch(i.status){case re.NoPlan:e.session.cacheWriteAllowed&&ub(eo(e).noPlan,r);return;case re.BudgetExceeded:return;case"ok":return e.session.cacheWriteAllowed?(Ol(eo(e).bestPlan,r,pm(i.plan)),i.plan):void 0}}l(Wo,"turnEngineCandidatePlan");function wm(e,n,o,t){if(e.session.checkpoint()||n.activeColor!==o)return;let r=qb(e,n,o,t);return e.session.checkpoint()||r.status!=="ok"?void 0:r.plan}l(wm,"turnEngineCandidatePlanLive");function vm(e){let n=new Map;return e.forEach((o,t)=>{let r=An(o);n.has(r)||n.set(r,t)}),n}l(vm,"allowedRankMap");function hv(e,n,o,t,r,a){let i=o.compiledChunks[0],s=i===void 0?void 0:va(n,i);return{rank:r,allowedLength:a,firstStepOpponentImmediateLoss:s!==void 0&&rt(e,s,t),firstStepDrainerSafety:s===void 0?Math.trunc(-2147483648/4):je(e,s.board,t)}}l(hv,"allowedHeadSelectionMeta");function Fb(e,n){return g(e.evalScore,nn(Math.min(Math.max(n.allowedLength-n.rank,0),96),12))}l(Fb,"allowedHeadRankAdjustedEval");function jb(e,n,o,t){let r=te(e.utility,o.utility);return r!==0||(r=ju([+!n.firstStepOpponentImmediateLoss,n.firstStepDrainerSafety],[+!t.firstStepOpponentImmediateLoss,t.firstStepDrainerSafety]),r!==0)||(r=Pn(Fb(e.utility,n),Fb(o.utility,t)),r!==0)?r:(r=_o(e,o),r!==0?r:Pn(t.rank,n.rank))}l(jb,"compareAllowedHeadPlans");function bv(e,n,o,t,r,a,i){let s=vm(i),u;for(let c of a){if(e.session.checkpoint())return;let p=c.compiledChunks[0];if(p===void 0)continue;let m=s.get(An(p));if(m===void 0)continue;if(c.utility=nc(e,c,o,t,r),e.session.cancelled)return;let d=hv(e,n,c,o,m,i.length);(u===void 0||jb(c,d,u.plan,u.meta)>0)&&(u={plan:c,meta:d})}return u?.plan}l(bv,"bestPlanFromAllowedHeads");function Cv(e,n,o,t,r){if(e.session.checkpoint())return{status:re.BudgetExceeded};let a=zu(e,n,o,t),i=_l(e,n,o,t,a,Math.max(t.ownSeedCap,1),Math.max(t.ownBeam,1),Math.max(t.stepCap,1),Math.max(t.expansionCap,1));if(e.session.checkpoint())return{status:re.BudgetExceeded};if(i.status===re.BudgetExceeded)return i;if(i.status==="ok"){let u=bv(e,n,o,t,a,i.plans,r);if(e.session.checkpoint())return{status:re.BudgetExceeded};if(u!==void 0)return{status:"ok",plan:u}}let s=Ev(e,n,o,t,a,r);return e.session.checkpoint()?{status:re.BudgetExceeded}:s===void 0?{status:re.NoPlan}:{status:"ok",plan:s}}l(Cv,"buildBestPlanFromAllowedHeads");function Fl(e,n,o,t,r){if(e.session.checkpoint()||n.activeColor!==o||r.length===0)return;let a=vm(r),i=Ub(e,n,El(n,t)),s=i?.compiledChunks[0];if(s!==void 0&&a.has(An(s)))return i;let u=Cv(e,n,o,t,r);return e.session.checkpoint()||u.status!=="ok"?void 0:u.plan}l(Fl,"turnEngineCandidatePlanFromAllowedHeads");function gm(e,n,o,t,r,a){if(e.session.checkpoint()||n.activeColor!==o||a.length===0)return;let i=new Set(a.map(An)),s=Ju(e,n,r);if(s!==void 0&&i.has(An(s)))return s;let u=Fl(e,n,o,r,a);if(!(u===void 0||e.session.checkpoint())&&(Kb(e,n,o,t,u,r),!e.session.cancelled))return u.compiledChunks[0]?.slice()}l(gm,"turnEngineNextInputsFromAllowedHeads");function Am(e,n,o,t,r,a){e.session.checkpoint()||Kb(e,n,o,t,r,a)}l(Am,"turnEngineCommitPlan");function Kb(e,n,o,t,r,a){if(e.session.checkpoint()||r.compiledChunks.length===0)return;let i=n.fork(),s=n.activeColor;for(let u=0;u<r.compiledChunks.length;u+=1){if(e.session.checkpoint())return;let c=r.compiledChunks[u];if(c===void 0)continue;if(u>0&&t===Xe.Production){let m=Wo(e,i,o,a);if(m?.compiledChunks[0]===void 0||e.session.checkpoint()||Eo(m.compiledChunks[0],c)!==0)break}if(!e.session.cacheWriteAllowed)return;Ol(eo(e).continuation,Al(i,t,a),c.slice());let p=va(i,c);if(p?.activeColor!==s)break;i=p}}l(Kb,"registerPlanContinuations");function ec(e,n,o,t,r){if(e.session.checkpoint())return Ln;let a=zu(e,n,t,r),i=nc(e,o,t,r,a);return e.session.checkpoint()?Ln:i}l(ec,"turnEngineEvaluatePlanWithReplies");function qb(e,n,o,t){if(e.session.checkpoint())return{status:re.BudgetExceeded};let r=zu(e,n,o,t),a=_l(e,n,o,t,r,Math.max(t.ownSeedCap,1),Math.max(t.ownBeam,1),Math.max(t.stepCap,1),Math.max(t.expansionCap,1));if(e.session.checkpoint())return{status:re.BudgetExceeded};if(a.status===re.BudgetExceeded)return a;let i;if(a.status==="ok")i=a.plans;else{let u=Av(e,n,o,t,r);return e.session.checkpoint()?{status:re.BudgetExceeded}:u===void 0?{status:re.NoPlan}:{status:"ok",plan:u}}if(t.mode===Xe.Production&&i.length>1){i.sort((d,f)=>-_o(d,f));let u=Math.min(i.length,Math.min(Math.max(Math.max(t.ownBeam,1)*2,6),12)),c=t.ownBeam>=4?2:1,p=new Map,m=[];for(let d of i){let f=`${An(d.compiledChunks[0]??[])}:${d.headFamily}:${d.goalFamily}`,y=p.get(f)??0;if(!(y>=c)&&(p.set(f,y+1),m.push(d),m.length>=u))break}i=m}let s;for(let u of i){if(e.session.checkpoint())return{status:re.BudgetExceeded};if(u.utility=nc(e,u,o,t,r),e.session.cancelled)return{status:re.BudgetExceeded};(s===void 0||_o(u,s)>0)&&(s=u)}return e.session.checkpoint()?{status:re.BudgetExceeded}:s===void 0?{status:re.NoPlan}:{status:"ok",plan:s}}l(qb,"buildBestPlan");function _l(e,n,o,t,r,a,i,s,u){if(e.session.checkpoint())return{status:re.BudgetExceeded};let c=t.mode===Xe.Production?vv(e,n,o,t,r,a,i,Math.min(s,$b(t)),u):gv(e,n,o,t,r,a,i,s,u);return e.session.checkpoint()?{status:re.BudgetExceeded}:c}l(_l,"generatePlansForMode");function zb(e){return Math.min(Math.max(e.stepCap,1),6)}l(zb,"bundleChunkCapForConfig");function $b(e){return Math.min(Math.max(e.stepCap,1),4)}l($b,"bundlePlanCapForConfig");function Xb(e,n){return ho(n)<ho(e)?n:e}l(Xb,"mergePlanFamily");function Mv(e,n,o){if(o===n||o===e)return!0;switch(e){case h.ImmediateScore:return o===h.ImmediateScore||o===h.DrainerSafetyRecovery||o===h.SafeSupermanaProgress||o===h.SafeOpponentManaProgress;case h.DenyOpponentWindow:case h.DrainerKill:return o===h.ImmediateScore||o===h.DenyOpponentWindow||o===h.DrainerKill||o===h.DrainerSafetyRecovery||o===h.SafeSupermanaProgress||o===h.SafeOpponentManaProgress;case h.DrainerSafetyRecovery:return o===h.ImmediateScore||o===h.DrainerSafetyRecovery||o===h.SafeSupermanaProgress||o===h.SafeOpponentManaProgress||o===h.ManaTempo;case h.SpiritImpact:return o===h.ImmediateScore||o===h.DenyOpponentWindow||o===h.SpiritImpact||o===h.SafeSupermanaProgress||o===h.SafeOpponentManaProgress||o===h.DrainerSafetyRecovery;case h.SafeSupermanaProgress:case h.SafeOpponentManaProgress:return o===h.ImmediateScore||o===h.DrainerSafetyRecovery||o===h.SafeSupermanaProgress||o===h.SafeOpponentManaProgress||o===h.DenyOpponentWindow||o===h.SpiritImpact;case h.ManaTempo:return o===h.ImmediateScore||o===h.DrainerSafetyRecovery||o===h.SafeSupermanaProgress||o===h.SafeOpponentManaProgress||o===h.SpiritImpact||o===h.ManaTempo}}l(Mv,"macroFollowupFamilyAllowed");function Pm(e,n,o){let t=0;return o===n&&(t+=420),o===e&&(t+=220),o===h.ImmediateScore&&(t+=640),e===h.SpiritImpact&&(o===h.SpiritImpact||o===h.ImmediateScore||o===h.SafeSupermanaProgress||o===h.SafeOpponentManaProgress)&&(t+=180),(e===h.SafeSupermanaProgress||e===h.SafeOpponentManaProgress)&&(o===h.SafeSupermanaProgress||o===h.SafeOpponentManaProgress||o===h.ImmediateScore)&&(t+=180),e===h.DrainerSafetyRecovery&&(o===h.DrainerSafetyRecovery||o===h.SafeSupermanaProgress||o===h.SafeOpponentManaProgress||o===h.ImmediateScore)&&(t+=160),t}l(Pm,"macroFollowupFamilyBonus");function Yb(e,n){return rr.filter(o=>Mv(e,n,o))}l(Yb,"macroFollowupFamilies");function kv(e,n,o,t,r,a,i,s){let u=us(e,n,t,o),c=u.opportunity.opponentCanWinImmediately||u.opportunity.delta.drainerSafety<0,p=new Set(s.map(Kr)),m=Nl(e,n,t,r,Math.max(Math.max(r.ownSeedCap,r.perNodeFamilyCap*3),8),Yb(a,i)).filter(d=>!p.has(Kr(d.action)));return m.sort((d,f)=>{let y=Pn(Yu(f,c)+Pm(a,i,f.family),Yu(d,c)+Pm(a,i,d.family));return y!==0?y:as(d.action,f.action)}),m.slice(0,Math.max(Math.max(r.perNodeFamilyCap,1)*2,4))}l(kv,"macroFollowupSeedCandidates");function Wb(e,n){let o=33;return Math.max((e??o)-(n??o),0)}l(Wb,"progressStepGain");function Bb(e,n,o,t,r,a){if(e.session.checkpoint())return Lb();let i=us(e,o,r,t);return e.session.cancelled?Lb():{sameTurnScoreWindowGain:Math.max(i.strategic.immediateWindow.bestScore-a.strategic.immediateWindow.bestScore,0),spiritGain:Math.max(i.strategic.spirit.nextTurnSetupGain-a.strategic.spirit.nextTurnSetupGain,i.strategic.spirit.utility-a.strategic.spirit.utility,0),opponentWindowDenyGain:Math.max(a.opponentImmediateWindow-i.opponentImmediateWindow,0),drainerAttack:i.opportunity.delta.drainerAttackAvailable,drainerSafetyDelta:je(e,o.board,r)-je(e,n.board,r),supermanaProgressGain:Wb(a.opportunity.delta.safeSupermanaProgressSteps,i.opportunity.delta.safeSupermanaProgressSteps),opponentManaProgressGain:Wb(a.opportunity.delta.safeOpponentManaProgressSteps,i.opportunity.delta.safeOpponentManaProgressSteps)}}l(Bb,"macroOpportunityDelta");function Lb(){return{sameTurnScoreWindowGain:0,spiritGain:0,opponentWindowDenyGain:0,drainerAttack:!1,drainerSafetyDelta:0,supermanaProgressGain:0,opponentManaProgressGain:0}}l(Lb,"emptyOpportunityDelta");function Gb(e,n,o,t,r,a){return g(a,Math.max(-2147483648,Math.min(2147483647,Math.trunc(cs(e,n,o,t,r)/1024))))}l(Gb,"macroPriorityFromState");function ps(e,n){return Vc(fo(In(e,n),Hu),11)}l(ps,"macroSignatureMix");function Rv(e){let n=wl;for(let o of e){let[t,r,a,i]=Gu(o);n=ps(n,$o(t)),n=ps(n,$o(ne(r))),n=ps(n,a===void 0?nb:$o(ne(a))),n=ps(n,i===void 0?ob:$o(ne(i)))}return n}l(Rv,"macroSignatureForActions");function Pv(e,n){return ps(ps(e,n.endSnapshot.stateHash),n.signature)}l(Pv,"macroPlanSignature");function Tv(e,n,o,t,r,a){if(e.session.checkpoint())return;let i=us(e,n,o,r.startHash);if(e.session.cancelled)return;let s=bm(e,n,o,a.action,t);if(s===void 0||e.session.checkpoint())return;let u=s[0],c=pe(u),p=Dn(r,u,c);if(e.session.cancelled)return;let d=[a.action],f=[s[1]],y=a.family,S=new wo(Vu);for(S.add(r.startHash),S.add(c);u.activeColor===o&&u.winnerColor()===void 0&&f.length<zb(t);){if(e.session.checkpoint())return;let M=us(e,u,o,c);if(e.session.cancelled)return;let T=Dn(r,u,c);if(e.session.cancelled)return;let I=M.opportunity.delta.drainerSafety<0||T.drainerSafety<0||je(e,u.board,o)<0,E;for(let x of kv(e,u,c,o,t,a.family,y,d)){if(e.session.checkpoint())return;let N=bm(e,u,o,x.action,t);if(N===void 0||e.session.checkpoint())continue;let[B,W]=N,V=pe(B);if(S.has(V))continue;let Q=Bb(e,u,B,V,o,M),U=Xb(y,x.family),ce=Dn(r,B,V);if(e.session.cancelled)return;let ln=Q.sameTurnScoreWindowGain+Q.spiritGain+Q.opponentWindowDenyGain+Math.max(Q.drainerSafetyDelta,0)+Q.supermanaProgressGain+Q.opponentManaProgressGain+(Q.drainerAttack?2:0),pn=I&&(x.family===h.DrainerSafetyRecovery||x.family===h.ImmediateScore||x.family===h.SafeSupermanaProgress||x.family===h.SafeOpponentManaProgress);if(ln<=0&&uo(ce,T)<=0&&B.activeColor===o&&!pn)continue;let dn=I?(()=>{switch(x.family){case h.DrainerSafetyRecovery:return 960;case h.ImmediateScore:return 820;case h.SafeSupermanaProgress:case h.SafeOpponentManaProgress:return 360;case h.DenyOpponentWindow:case h.DrainerKill:return 220;case h.SpiritImpact:case h.ManaTempo:return 0}})():0,Ge=Gb(r,B,V,U,f.length+1,x.priority+Pm(a.family,y,x.family))+dn+Q.sameTurnScoreWindowGain*280+Q.spiritGain*220+Q.opponentWindowDenyGain*240+Math.max(Q.drainerSafetyDelta,0)*200+Q.supermanaProgressGain*120+Q.opponentManaProgressGain*112+(Q.drainerAttack?820:0);(E===void 0||Ge>E.score||Ge===E.score&&ho(U)<ho(E.goalFamily))&&(E={score:Ge,opportunity:x,after:B,afterHash:V,chunk:W,goalFamily:U})}if(E===void 0)break;d.push(E.opportunity.action),f.push(E.chunk),y=E.goalFamily,u=E.after,c=E.afterHash,S.add(c)}if(e.session.checkpoint())return;let C={stateHash:c},b=Bb(e,n,u,c,o,i);if(!e.session.cancelled)return{headFamily:a.family,goalFamily:y,priority:Gb(r,u,c,y,f.length,a.priority),delta:b,actions:d,compiledChunks:f,endGame:u.fork(),endSnapshot:C,headUtility:p,signature:Rv(d)}}l(Tv,"buildMacroFromHeadOpportunity");function Vb(e,n,o,t,r,a,i){if(e.session.checkpoint())return[];let s=[],u=new wo(Vu),c=Nl(e,n,o,t,Math.max(Math.max(a,t.perNodeFamilyCap*3),8),i);if(e.session.checkpoint())return[];for(let p of c){if(e.session.checkpoint())return[];let m=Tv(e,n,o,t,r,p);if(m===void 0){if(e.session.cancelled)return[];continue}if(!u.has(m.endSnapshot.stateHash,0,m.signature)&&(u.add(m.endSnapshot.stateHash,0,m.signature),s.push(m),s.length>=Math.max(a,1)))break}return s.sort((p,m)=>{let d=l(S=>S.priority+S.delta.sameTurnScoreWindowGain*280+S.delta.spiritGain*220+S.delta.opponentWindowDenyGain*240+S.delta.drainerSafetyDelta*220+S.delta.supermanaProgressGain*120+S.delta.opponentManaProgressGain*112+(S.delta.drainerAttack?820:0)+(zb(t)-S.compiledChunks.length)*8,"score"),f=Pn(d(m),d(p));if(f!==0)return f;let y=Pn(ho(p.goalFamily),ho(m.goalFamily));return y!==0?y:Ku(p.compiledChunks,m.compiledChunks)}),e.session.checkpoint()?[]:s.slice(0,Math.max(a,1))}l(Vb,"discoverMacroOpportunities");function wv(e,n){return{actions:n.actions,compiledChunks:n.compiledChunks,endGame:n.game.fork(),utility:Dn(e,n.game,n.stateHash),headUtility:n.headUtility,headFamily:n.headFamily,goalFamily:n.goalFamily,packageMeta:Uu}}l(wv,"macroNodeToPlan");function vv(e,n,o,t,r,a,i,s,u){if(e.session.checkpoint())return{status:re.BudgetExceeded};let c=0,p=!1,m=Math.min(Math.max(s,1),$b(t)),d=Vb(e,n,o,t,r,a);if(e.session.checkpoint())return{status:re.BudgetExceeded};if(d.length===0)return{status:re.NoPlan};let f=new Ee(Vu),y=[];for(let b of d){if(e.session.checkpoint())return{status:re.BudgetExceeded};if(c+=1,c>u){p=!0;break}let k=cs(r,b.endGame,b.endSnapshot.stateHash,b.goalFamily,b.compiledChunks.length);if(e.session.cancelled)return{status:re.BudgetExceeded};let M=f.get(b.endSnapshot.stateHash,0,b.signature);M!==void 0&&k<=M||(f.set(b.endSnapshot.stateHash,k,0,b.signature),y.push({order:k,node:{game:b.endGame,stateHash:b.endSnapshot.stateHash,actions:b.actions,compiledChunks:b.compiledChunks,headUtility:b.headUtility,headFamily:b.headFamily,goalFamily:b.goalFamily,signature:b.signature}}))}if(y.length===0)return{status:p?re.BudgetExceeded:re.NoPlan};y.sort(Zu),y=y.slice(0,Math.max(i,1));let S=[];for(let b=1;b<m;b+=1){if(e.session.checkpoint())return{status:re.BudgetExceeded};let k=[],M=!1,P=!1;for(let T of y){let v=T.node;if(e.session.checkpoint())return{status:re.BudgetExceeded};if(v.game.winnerColor()!==void 0||v.game.activeColor!==o){S.push(v);continue}let I=$u(e,v.game,v.stateHash,o,t),E=Vb(e,v.game,o,t,I,a,Yb(v.headFamily,v.goalFamily));if(e.session.checkpoint())return{status:re.BudgetExceeded};if(E.length===0){S.push(v);continue}let x=!1;for(let N of E){if(e.session.checkpoint())return{status:re.BudgetExceeded};if(c+=1,c>u){S.push(v),p=!0,P=!0;break}let B=[...v.actions,...N.actions],W=[...v.compiledChunks,...N.compiledChunks],V=Xb(v.goalFamily,N.goalFamily),Q=Pv(v.signature,N),U=cs(r,N.endGame,N.endSnapshot.stateHash,V,W.length);if(e.session.cancelled)return{status:re.BudgetExceeded};let ce=f.get(N.endSnapshot.stateHash,0,Q);ce!==void 0&&U<=ce||(f.set(N.endSnapshot.stateHash,U,0,Q),k.push({order:U,node:{game:N.endGame,stateHash:N.endSnapshot.stateHash,actions:B,compiledChunks:W,headUtility:v.headUtility,headFamily:v.headFamily,goalFamily:V,signature:Q}}),M=!0,x=!0)}if(P)break;x||S.push(v)}if(P){k.sort(Zu),y=k.slice(0,Math.max(i,1));break}if(!M||k.length===0){y=[];break}k.sort(Zu),y=k.slice(0,Math.max(i,1))}if(S.push(...y.map(({node:b})=>b)),e.session.checkpoint())return{status:re.BudgetExceeded};if(S.length===0)return{status:p?re.BudgetExceeded:re.NoPlan};let C=S.map(b=>wv(r,b));return e.session.checkpoint()?{status:re.BudgetExceeded}:(C.sort((b,k)=>-_o(b,k)),{status:"ok",plans:C})}l(vv,"generateMacroPlans");function gv(e,n,o,t,r,a,i,s,u){if(e.session.checkpoint())return{status:re.BudgetExceeded};let c=0,p=Qu(e,n,o,t,a);if(e.session.checkpoint())return{status:re.BudgetExceeded};if(p.length===0)return{status:re.NoPlan};let m=new jr(e,n,p,t);if(e.session.checkpoint())return{status:re.BudgetExceeded};let d=new Ee(Vu),f=[];for(let C of p){if(e.session.checkpoint())return{status:re.BudgetExceeded};let b=Xu(e,n,o,C.action,m);if(b===void 0)continue;if(e.session.checkpoint())return{status:re.BudgetExceeded};if(c+=1,c>u)return{status:re.BudgetExceeded};let[k,M]=b,P=pe(k),T=cs(r,k,P,C.family,1),v=d.get(P);if(v!==void 0&&T<=v)continue;d.set(P,T);let I=Dn(r,k,P);if(e.session.cancelled)return{status:re.BudgetExceeded};f.push({order:T,node:{game:k,stateHash:P,actions:[C.action],compiledChunks:[M],headUtility:I,headFamily:C.family,goalFamily:C.family}})}if(f.length===0)return{status:re.NoPlan};f.sort(Zu),f=f.slice(0,Math.max(i,1));let y=[];for(let C=1;C<Math.max(s,1);C+=1){if(e.session.checkpoint())return{status:re.BudgetExceeded};let b=[],k=!1;for(let M of f){let P=M.node;if(e.session.checkpoint())return{status:re.BudgetExceeded};if(P.game.winnerColor()!==void 0||P.game.activeColor!==o){y.push(P);continue}let T=Qu(e,P.game,o,t,a);if(e.session.checkpoint())return{status:re.BudgetExceeded};if(T.length===0){y.push(P);continue}let v=new jr(e,P.game,T,t);if(e.session.checkpoint())return{status:re.BudgetExceeded};let I=!1;for(let E of T){if(e.session.checkpoint())return{status:re.BudgetExceeded};let x=Xu(e,P.game,o,E.action,v);if(x===void 0)continue;if(e.session.checkpoint())return{status:re.BudgetExceeded};if(c+=1,c>u)return{status:re.BudgetExceeded};let[N,B]=x,W=[...P.actions,E.action],V=[...P.compiledChunks,B],Q=pe(N),U=cs(r,N,Q,P.goalFamily,W.length);if(e.session.cancelled)return{status:re.BudgetExceeded};let ce=d.get(Q);ce!==void 0&&U<=ce||(d.set(Q,U),b.push({order:U,node:{game:N,stateHash:Q,actions:W,compiledChunks:V,headUtility:P.headUtility,headFamily:P.headFamily,goalFamily:P.goalFamily}}),k=!0,I=!0)}I||y.push(P)}if(!k||b.length===0){f=[];break}b.sort(Zu),f=b.slice(0,Math.max(i,1))}if(y.push(...f.map(({node:C})=>C)),e.session.checkpoint())return{status:re.BudgetExceeded};if(y.length===0)return{status:re.NoPlan};let S=y.map(C=>({actions:[...C.actions],compiledChunks:C.compiledChunks.map(b=>b.slice()),endGame:C.game.fork(),utility:Dn(r,C.game,C.stateHash),headUtility:C.headUtility,headFamily:C.headFamily,goalFamily:C.goalFamily,packageMeta:Uu}));return e.session.checkpoint()?{status:re.BudgetExceeded}:(S.sort((C,b)=>-_o(C,b)),{status:"ok",plans:S})}l(gv,"generateTurnPlans");function Zu(e,n){let o=Pn(n.order,e.order);return o!==0?o:Ku(e.node.compiledChunks,n.node.compiledChunks)}l(Zu,"compareOrderedNodes");function Av(e,n,o,t,r){if(e.session.checkpoint())return;let a=Qu(e,n,o,t,Math.min(Math.max(t.ownSeedCap,1)*2,rs));if(e.session.checkpoint()||(a.length===0&&(a=Dl(e,n,o)),a.length===0||e.session.checkpoint()))return;let i=new jr(e,n,a,t),s;for(let u of a){if(e.session.checkpoint())return;let c=Xu(e,n,o,u.action,i);if(c===void 0)continue;if(e.session.checkpoint())return;let[p,m]=c,d=pe(p),f=Dn(r,p,d),y={actions:[u.action],compiledChunks:[m.slice()],endGame:p.fork(),utility:f,headUtility:f,headFamily:u.family,goalFamily:u.family,packageMeta:Uu};if(e.session.cancelled||(y.utility=nc(e,y,o,t,r),e.session.cancelled))return;(s===void 0||_o(y,s)>0)&&(s=y)}return e.session.checkpoint()?void 0:s}l(Av,"fallbackSingleActionPlan");function Ev(e,n,o,t,r,a){if(e.session.checkpoint())return;let i=Qu(e,n,o,t,Math.min(Math.max(t.ownSeedCap,1)*2,rs));if(e.session.checkpoint()||(i.length===0&&(i=Dl(e,n,o)),e.session.checkpoint()||i.length===0))return;let s=vm(a),u=new jr(e,n,i,t);if(e.session.checkpoint())return;let c;for(let p of i){if(e.session.checkpoint())return;let m=Xu(e,n,o,p.action,u);if(m===void 0)continue;if(e.session.checkpoint())return;let[d,f]=m,y=s.get(An(f));if(y===void 0)continue;let S=pe(d),C=Dn(r,d,S),b={actions:[p.action],compiledChunks:[f.slice()],endGame:d.fork(),utility:C,headUtility:C,headFamily:p.family,goalFamily:p.family,packageMeta:Uu};if(e.session.cancelled||(b.utility=nc(e,b,o,t,r),e.session.cancelled))return;let M={rank:y,allowedLength:a.length,firstStepOpponentImmediateLoss:xl(e,d,o,S),firstStepDrainerSafety:je(e,d.board,o)};(c===void 0||jb(b,M,c.plan,c.meta)>0)&&(c={plan:b,meta:M})}return e.session.checkpoint()?void 0:c?.plan}l(Ev,"fallbackSingleActionPlanFromAllowedHeads");function Hb(e,n){return Math.min(e,Math.min(Math.max(Math.max(n,0)*2,4),8))}l(Hb,"replyShortlistLength");function nc(e,n,o,t,r){if(e.session.checkpoint())return Ln;let a=n.endGame,i=pe(a),s=X(o);if(a.winnerColor()!==void 0||a.activeColor!==s)return Dn(r,a,i);let u={...t,ownSeedCap:Math.max(t.opponentSeedCap,1),ownBeam:Math.max(t.opponentBeam,1),perNodeFamilyCap:Math.max(t.perNodeFamilyCap,1),stepCap:Math.min(Math.max(t.stepCap,1),4),opponentSeedCap:Math.max(t.replySeedCap,1),opponentBeam:Math.max(t.replyBeam,1),replySeedCap:0,replyBeam:0,expansionCap:Math.max(Math.trunc(t.expansionCap/2),24)},c=$u(e,a,i,s,u),p=_l(e,a,s,u,c,u.ownSeedCap,u.ownBeam,u.stepCap,u.expansionCap);if(e.session.checkpoint())return Ln;if(p.status!=="ok")return Dn(r,a,i);let m=p.plans,d=Hb(m.length,u.ownBeam),f=m[0];if(f===void 0)return Dn(r,a,i);let y=pe(f.endGame),S=Dn(c,f.endGame,y);for(let v of m.slice(1,d)){if(e.session.checkpoint())return Ln;let I=pe(v.endGame),E=Dn(c,v.endGame,I),x=uo(E,S);(x>0||x===0&&Ku(v.compiledChunks,f.compiledChunks)<0)&&(f=v,y=I,S=E)}let C=f.endGame;if(C.winnerColor()!==void 0||C.activeColor!==o||t.replySeedCap===0)return Dn(r,C,y);let b={...t,ownSeedCap:Math.max(t.replySeedCap,1),ownBeam:Math.max(t.replyBeam,1),perNodeFamilyCap:Math.max(t.perNodeFamilyCap,1),stepCap:Math.min(Math.max(t.stepCap,1),3),opponentSeedCap:0,opponentBeam:0,replySeedCap:0,replyBeam:0,expansionCap:Math.max(Math.trunc(t.expansionCap/3),16)},k=$u(e,C,y,o,b),M=_l(e,C,o,b,k,b.ownSeedCap,b.ownBeam,b.stepCap,b.expansionCap);if(e.session.checkpoint())return Ln;if(M.status!=="ok")return Dn(r,C,y);let P=M.plans,T;for(let v of P.slice(0,Hb(P.length,b.ownBeam))){let I=pe(v.endGame),E=Dn(r,v.endGame,I);(T===void 0||uo(E,T)>0)&&(T=E)}return T??Dn(r,C,y)}l(nc,"evaluatePlanWithReplies");function Ga(e){return e===Xe.Production}l(Ga,"turnEngineModeUsesMacroPlans");function oc(e){return e.planner.enabled&&e.planner.mode===$e.Production}l(oc,"productionTurnEngineLive");function Wl(e){return oc(e)&&e.planner.lowBudgetGuard}l(Wl,"productionLowBudgetGuardLive");function Qb(e){return oc(e)&&e.planner.midTurnTacticalGuard}l(Qb,"productionMidTurnTacticalGuardLive");function Zb(e){return e.activeColor===w.White&&e.turnNumber===1&&e.isFirstTurn()&&e.monsMovesCount===1&&!e.playerCanUseAction()&&!e.playerCanMoveMana()}l(Zb,"productionIsWhiteTurnOneManaOnlyFollowup");function Jb(e,n){return oc(n)&&e.activeColor===w.White&&e.turnNumber>=3&&e.monsMovesCount===0&&e.playerCanUseAction()&&e.playerCanMoveMana()}l(Jb,"productionUseFreshLiveHeadPlan");function ds(e,n){if(n.activeColor!==w.Black||n.turnNumber!==2||n.monsMovesCount!==0||!n.playerCanUseAction()||!n.playerCanMoveMana())return!1;let o=he(e,n,n.activeColor);return!o.opponentCanWinImmediately&&o.delta.sameTurnScoreWindowValue<=0&&o.delta.opponentWindowDenyGain<=0&&!o.delta.drainerAttackAvailable&&o.delta.drainerSafety>=2}l(ds,"productionIsSafeEarlyBlackOpeningState");function Em(e,n){if(Co(n)||n.playerCanUseAction()||n.playerCanMoveMana())return!1;let o=he(e,n,n.activeColor);return!o.opponentCanWinImmediately&&o.delta.sameTurnScoreWindowValue<=0&&o.delta.opponentWindowDenyGain<=0&&!o.delta.drainerAttackAvailable&&o.delta.safeSupermanaProgressSteps===void 0&&o.delta.safeOpponentManaProgressSteps===void 0&&o.delta.drainerSafety>=0}l(Em,"shouldSkipProductionLowBudgetState");function Om(e,n){if(n.activeColor!==w.White||n.turnNumber!==3||n.monsMovesCount===0||n.monsMovesCount>2||!n.playerCanUseAction()||!n.playerCanMoveMana()||Co(n))return!1;let o=he(e,n,n.activeColor);return!o.opponentCanWinImmediately&&o.delta.drainerSafety<0&&o.delta.sameTurnScoreWindowValue<=0&&o.delta.safeSupermanaProgressSteps===void 0&&o.delta.safeOpponentManaProgressSteps===void 0}l(Om,"shouldDisableProductionMidTurnTacticalEngine");function eC(e,n){return!Wl(n)||e.activeColor!==w.Black||e.turnNumber!==2||e.monsMovesCount>1||e.playerCanUseAction()&&e.playerCanMoveMana()?n:we(n,{budget:{maxVisitedNodes:Math.min(n.budget.maxVisitedNodes,6e3)},search:{rootBranchLimit:Math.min(Math.max(n.search.rootBranchLimit,1),12)},replyRisk:{replyLimit:Math.min(Math.max(n.replyRisk.replyLimit,1),12),nodeShareBp:Math.min(n.replyRisk.nodeShareBp,1200)}})}l(eC,"applyProductionLowBudgetSearchClamp");function ur(e,n){let o=bo(n);return!Ga(o.mode)||!n.planner.lowBudgetGuard||!Co(e)?o:gl(o)}l(ur,"turnEngineConfigForGame");var Bl=4096,Ov=Symbol("reply-risk-session-caches"),_m=class _m{constructor(){ee(this,"snapshots",new Ee(Bl));ee(this,"spiritFollowupFloors",new Ee(Bl));ee(this,"selectedOverrideUtilities",new Ee(Bl));ee(this,"capacity",Bl*3)}get size(){return this.snapshots.size+this.spiritFollowupFloors.size+this.selectedOverrideUtilities.size}clear(){this.snapshots.clear(),this.spiritFollowupFloors.clear(),this.selectedOverrideUtilities.clear()}};l(_m,"ReplyRiskSessionCaches");var Im=_m;function Va(e){return e.caches.session.getOrCreate(Ov,()=>new Im)}l(Va,"replyRiskCaches");function xm(e,n){return e.get(n.hash,n.tag,n.secondary,n.qualifier)}l(xm,"cacheGet");function Nm(e,n,o){e.set(n.hash,o,n.tag,n.secondary,n.qualifier)}l(Nm,"cacheSet");function tc(e,n,o,t){let r=t.evaluation.weights;if(!Number.isInteger(o)||o<0||o>65535)return;let a=o+on(n)*65536;return{hash:pe(e),tag:a,qualifier:`string:${Fi(r)}`}}l(tc,"replyRiskCacheKey");function Dm(e,n,o){if([[e.ownSeedCap,15],[e.ownBeam,7],[e.perNodeFamilyCap,7],[e.stepCap,7],[e.opponentSeedCap,7],[e.opponentBeam,3],[e.replySeedCap,3],[e.replyBeam,3],[e.expansionCap,255]].some(([i,s])=>!Number.isInteger(i)||i<0||i>s))return;let r=e.ownSeedCap|e.ownBeam<<4|e.perNodeFamilyCap<<7|e.stepCap<<10|e.opponentSeedCap<<13|e.opponentBeam<<16|e.replySeedCap<<18|e.replyBeam<<20,a=e.expansionCap|Number(e.enableSpiritFamily)<<8|Number(n)<<9|+(e.mode===Xe.Production)<<10|Number(o)<<11|Number(e.enableLazyOracleScoreWindowProjection)<<12;return ze(a,r)}l(Dm,"selectedOverrideConfigKey");function Ll(e){Va(e).clear()}l(Ll,"clearReplyRiskCache");function nC(e,n){return xm(Va(e).snapshots,n)}l(nC,"cachedReplyRiskSnapshot");function oC(e,n,o){Nm(Va(e).snapshots,n,o)}l(oC,"storeReplyRiskSnapshot");function tC(e,n){return xm(Va(e).spiritFollowupFloors,n)}l(tC,"cachedSpiritFollowupFloor");function rC(e,n,o){Nm(Va(e).spiritFollowupFloors,n,o)}l(rC,"storeSpiritFollowupFloor");function aC(e,n){return xm(Va(e).selectedOverrideUtilities,n)}l(aC,"cachedSelectedOverrideUtility");function iC(e,n,o){Nm(Va(e).selectedOverrideUtilities,n,o)}l(iC,"storeSelectedOverrideUtility");function O(e){return oe(e)?h.ImmediateScore:e.attacksOpponentDrainer?h.DrainerKill:e.classes.drainerSafetyRecover?h.DrainerSafetyRecovery:e.spiritSameTurnScoreSetupNow||e.spiritOwnManaSetupNow||e.spiritDevelopment?h.SpiritImpact:e.supermanaProgress?h.SafeSupermanaProgress:e.opponentManaProgress?h.SafeOpponentManaProgress:h.ManaTempo}l(O,"rootFamily");var kt=Object.freeze({scoutDepth:2,scoutMinNodes:96,focusCount:3,focusBudgetShareBp:7e3,focusScoreMargin:2e3,narrowSpreadFallback:700,volatilityMargin:600,volatilityKeep:2});function sC(e,n){let o=15;if(e>=o||n<=0)return 0;let t=Math.min(le,Math.max(0,Math.trunc(e)));return(le-t)*Math.trunc(n)}l(sC,"rootProgressStepSoftBonus");function Iv(e){let n=0;return e.supermanaProgress&&!e.scoresSupermanaThisTurn&&!e.safeSupermanaPickupNow&&!e.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&(n=g(g(n,520),sC(e.safeSupermanaProgressSteps,48))),e.opponentManaProgress&&!e.scoresOpponentManaThisTurn&&!e.safeOpponentManaPickupNow&&!e.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&(n=g(g(n,480),sC(e.safeOpponentManaProgressSteps,40))),n}l(Iv,"rootScoutProgressBonus");function lC(e){return g(g(Math.trunc(e.heuristic),Math.trunc(Math.trunc(e.efficiency)/2)),Iv(e))}l(lC,"rootFocusScoutScore");function xv(e){let n=0;return e.winsImmediately&&(n=n+5e3),(e.attacksOpponentDrainer||e.classes.drainerAttack)&&(n=n+2800),e.ownDrainerVulnerable&&(n=n+2200),e.classes.immediateScore&&(n=n+1700),e.classes.drainerSafetyRecover&&(n=n+1500),e.manaHandoffToOpponent&&(n=n+900),e.hasRoundtrip&&(n=n+700),e.classes.material&&(n=n+240),e.efficiency<0&&(n=n+Math.min(0-Math.trunc(e.efficiency),400)),n}l(xv,"rootVolatilityScore");function an(e,n){let o=15,t=e<o,r=n<o;return t?!r||e<n:!1}l(an,"rootProgressStepsBetter");function Ua(e,n){let o=33,t=e<o,r=n<o;return t?!r||e<n:!1}l(Ua,"rootScorePathStepsBetter");function uC(e,n,o){return e.winsImmediately!==n.winsImmediately?e.winsImmediately:e.attacksOpponentDrainer!==n.attacksOpponentDrainer?e.attacksOpponentDrainer:e.ownDrainerVulnerable!==n.ownDrainerVulnerable?!e.ownDrainerVulnerable:e.classes.immediateScore!==n.classes.immediateScore?e.classes.immediateScore:e.scoresSupermanaThisTurn!==n.scoresSupermanaThisTurn?e.scoresSupermanaThisTurn:e.scoresOpponentManaThisTurn!==n.scoresOpponentManaThisTurn?e.scoresOpponentManaThisTurn:e.safeSupermanaPickupNow!==n.safeSupermanaPickupNow?e.safeSupermanaPickupNow:e.safeOpponentManaPickupNow!==n.safeOpponentManaPickupNow?e.safeOpponentManaPickupNow:e.sameTurnScoreWindowValue!==n.sameTurnScoreWindowValue?e.sameTurnScoreWindowValue>n.sameTurnScoreWindowValue:e.spiritSameTurnScoreSetupNow!==n.spiritSameTurnScoreSetupNow?e.spiritSameTurnScoreSetupNow:e.spiritOwnManaSetupNow!==n.spiritOwnManaSetupNow?e.spiritOwnManaSetupNow:e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.supermanaProgress&&n.supermanaProgress&&e.safeSupermanaProgressSteps!==n.safeSupermanaProgressSteps?an(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps):e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.opponentManaProgress&&n.opponentManaProgress&&e.safeOpponentManaProgressSteps!==n.safeOpponentManaProgressSteps?an(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps):o&&e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.scorePathBestSteps!==n.scorePathBestSteps?Ua(e.scorePathBestSteps,n.scorePathBestSteps):e.supermanaProgress!==n.supermanaProgress?e.supermanaProgress:e.supermanaProgress&&n.supermanaProgress&&e.safeSupermanaProgressSteps!==n.safeSupermanaProgressSteps?an(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps):e.opponentManaProgress!==n.opponentManaProgress?e.opponentManaProgress:e.opponentManaProgress&&n.opponentManaProgress&&e.safeOpponentManaProgressSteps!==n.safeOpponentManaProgressSteps?an(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps):e.manaHandoffToOpponent!==n.manaHandoffToOpponent?!e.manaHandoffToOpponent:e.hasRoundtrip!==n.hasRoundtrip?!e.hasRoundtrip:e.spiritDevelopment!==n.spiritDevelopment?e.spiritDevelopment:e.efficiency!==n.efficiency?e.efficiency>n.efficiency:e.heuristic!==n.heuristic?e.heuristic>n.heuristic:!1}l(uC,"isBetterTacticalRootCandidate");function pC(e,n,o){return uC(e,n,o)?-1:uC(n,e,o)?1:0}l(pC,"compareTacticalRootCandidateOrder");function Bm(e,n){return pC(e,n,!0)}l(Bm,"compareTacticalRootCandidates");function dC(e,n){return pC(e,n,!1)}l(dC,"compareTacticalRootCandidatesIgnoringScorePath");function Wm(e,n){return e===n?0:e>n?-1:1}l(Wm,"compareScoresDescending");function Ha(e,n){let o=e[n];if(o===void 0)throw new RangeError(`root focus index ${n} is out of bounds`);return o}l(Ha,"valueAt");function Vl(e,n,o){return Wm(n[1],o[1])||Bm(Ha(e,n[0]),Ha(e,o[0]))||n[0]-o[0]}l(Vl,"compareRankedRootIndices");function mC(e,n,o){let t=[];if(o!==void 0&&t.push(o),n!==void 0)for(let i of n)t.some(s=>me(s,i))||t.push(i);let r=[...e],a=0;for(let i of t){let s=r.findIndex(c=>me(c.inputs,i));if(s<0)continue;if(s===a){a+=1;continue}let[u]=r.splice(s,1);u!==void 0&&(r.splice(a,0,u),a+=1)}return r}l(mC,"prioritizeRootInputs");function Nv(e,n){return Number.isFinite(e)?Math.max(0,Math.trunc(e)):n}l(Nv,"nonnegativeInteger");function Fm(e,n,o){if(n>o)throw new RangeError("root scout budget has invalid clamp bounds");return Math.min(o,Math.max(n,Math.trunc(e)))}l(Fm,"clampInteger");function cC(e){return e.planner.mode===$e.Production&&e.planner.enabled}l(cC,"isProductionMode");function Gl(e,n,o){return{candidates:mC(e,n,o),scoutVisitedNodes:0}}l(Gl,"prioritizedRootResult");function Dv(e,n){let o=e.search.volatilityFocus||e.budget.depth<=3?1:Fm(e.budget.depth,1,kt.scoutDepth),t=Fm(1e4-kt.focusBudgetShareBp,500,4e3),r=n;if(o>1){let a=Math.max(0,e.budget.maxVisitedNodes-1);if(a<kt.scoutMinNodes)return;r=Fm(Math.trunc(e.budget.maxVisitedNodes*t/1e4),kt.scoutMinNodes,a)}if(!(r<n))return we(e,{budget:{depth:o,maxVisitedNodes:r},search:{selectiveExtensions:!1,quietReductions:!1}})}l(Dv,"createRootScoutConfig");function _v(e,n,o){let t=0,r=-2147483648,a=Array.from({length:n.length},()=>{});for(let[i,s]of n.entries()){if(e.checkpoint?.()===!0)return{status:"cancelled",visitedNodes:t};if(o.budget.depth>1&&t>=o.budget.maxVisitedNodes)break;let u;if(o.budget.depth>1){t+=1;let c=e.evaluateDeeperScout({candidate:s,candidateIndex:i,perspective:e.perspective,depth:o.budget.depth-1,alpha:r,visitedNodes:t,config:o,useTranspositionTable:e.useTranspositionTable});u=Math.trunc(c.score),t=Math.min(o.budget.maxVisitedNodes,Math.max(t,Nv(c.visitedNodes,t)))}else u=lC(s);if(e.cancelled?.()===!0)return{status:"cancelled",visitedNodes:t};a[i]=u,r=Math.max(r,u)}return{status:"finished",scores:a,visitedNodes:t}}l(_v,"runRootScout");function Lm(e,n){return n??lC(e)}l(Lm,"effectiveScoutScore");function Fv(e,n){let o=e.map((t,r)=>[r,Lm(t,n[r])]);return o.sort((t,r)=>Vl(e,t,r)),o}l(Fv,"rankedRootIndices");function Wv(e,n){if(e.length<n)return!1;let o=e[0]?.[1]??-2147483648,t=e[n-1]?.[1]??-2147483648;return j(o,t)<=kt.narrowSpreadFallback}l(Wv,"hasNarrowScoutSpread");function Bv(e,n,o,t,r,a){let{config:i,forcedInputs:s,perspective:u,priorityInputs:c}=e,p=Array.from({length:n.length}).fill(!1);for(let[m]of o.slice(0,a))p[m]=!0;if(cC(i)&&a<=3&&!o.slice(0,a).some(([d])=>{let f=Ha(n,d);return f.spiritDevelopment&&!f.spiritSameTurnScoreSetupNow&&!f.spiritOwnManaSetupNow})){let d=o.slice(0,a+3).map(([f])=>f).filter(f=>{let y=Ha(n,f);return y.spiritDevelopment&&!y.spiritSameTurnScoreSetupNow&&!y.spiritOwnManaSetupNow&&!y.ownDrainerVulnerable&&!y.manaHandoffToOpponent&&!y.hasRoundtrip&&y.game.activeColor===u&&e.qualifiesPlainSpiritPlan?.(y)===!0});if(d.length>=2)for(let f of d)p[f]=!0}for(let[m,d]of o)d+kt.focusScoreMargin<r||(p[m]=!0);for(let[m,d]of n.entries())d.attacksOpponentDrainer&&(p[m]=!0),(d.scoresSupermanaThisTurn||d.scoresOpponentManaThisTurn||d.safeSupermanaPickupNow||d.safeOpponentManaPickupNow||d.spiritSameTurnScoreSetupNow||d.sameTurnScoreWindowValue>0||d.spiritOwnManaSetupNow)&&(p[m]=!0),cC(i)&&d.ownDrainerVulnerable&&!d.ownDrainerWalkVulnerable&&!d.manaHandoffToOpponent&&!d.hasRoundtrip&&d.game.activeColor===u&&e.qualifiesDrainerSafetyRecoveryPlan?.(d)===!0&&(p[m]=!0);if(c!==void 0)for(let m of c){let d=n.findIndex(f=>me(f.inputs,m));d>=0&&(p[d]=!0)}if(s!==void 0){let m=n.findIndex(d=>me(d.inputs,s));m>=0&&(p[m]=!0)}if(i.search.volatilityFocus){let m=n.map((f,y)=>{let S=t[y];return{index:y,volatility:xv(f),scoutScore:Lm(f,S)}}).filter(({volatility:f})=>f>0).sort((f,y)=>Wm(f.volatility,y.volatility)||Wm(f.scoutScore,y.scoutScore)||f.index-y.index);for(let{index:f}of m.slice(0,Math.max(kt.volatilityKeep,1)))p[f]=!0;let d=m[0]?.volatility;if(d!==void 0)for(let{index:f,volatility:y,scoutScore:S}of m){if(y+kt.volatilityMargin<d)break;S+kt.focusScoreMargin<r||(p[f]=!0)}}return p}l(Bv,"selectFocusedRootIndices");function fC(e){let{config:n,priorityInputs:o,forcedInputs:t}=e,r=[...e.rootMoves];if(e.checkpoint?.()===!0)return{candidates:[],scoutVisitedNodes:0};if(!n.search.twoPassRootAllocation||r.length<=kt.focusCount||n.budget.depth<=1)return Gl(r,o,t);let a=Dv(n,r.length);if(a===void 0)return Gl(r,o,t);let i=_v(e,r,a);if(i.status==="cancelled")return{candidates:[],scoutVisitedNodes:i.visitedNodes};let s=Math.min(kt.focusCount,r.length),u=Fv(r,i.scores);if(Wv(u,s)){let d=u.map(([f])=>Ha(r,f));return Gl(d,o,t)}let c=Bv(e,r,u,i.scores,u[0]?.[1]??-2147483648,s);if(!c.some(Boolean))return Gl(r,o,t);let p=c.flatMap((d,f)=>{if(!d)return[];let y=Ha(r,f);return[[f,Lm(y,i.scores[f])]]});p.sort((d,f)=>Vl(r,d,f));let m=p.map(([d])=>Ha(r,d));return{candidates:mC(m,o,t),scoutVisitedNodes:Math.min(i.visitedNodes,n.budget.maxVisitedNodes)}}l(fC,"focusedRootCandidates");var yC=700,Lv=180,SC=80,Gv=40;var co=Object.freeze({SafeProgress:"safe-progress",FollowupProgress:"followup-progress",RiskyScore:"risky-score",NegativeDeny:"negative-deny",Score:"score",Projection:"projection",RiskyRecovery:"risky-recovery"}),Vv=Object.freeze([co.SafeProgress,co.FollowupProgress,co.RiskyScore,co.NegativeDeny,co.Score,co.Projection,co.RiskyRecovery]),Ht=Object.freeze({SpiritSetup:"spirit-setup",ProjectionChallenge:"projection-challenge",Projection:"projection",FollowupFloor:"followup-floor"});function ie(e,n){let o=e[n];if(o===void 0)throw new RangeError(`root selector index ${n} is out of bounds`);return o}l(ie,"valueAt");function Hl(e,n,o){if(!Number.isInteger(n)||n<0||n>=e.length)throw new RangeError(`${o} selected an invalid root`)}l(Hl,"assertRootIndex");function cr(e,n){let o=n;for(let t of e)o=Math.max(o,t);return o}l(cr,"maxValue");function Hv(e){let n;for(let o of e)n=n===void 0?o:Math.min(n,o);return n}l(Hv,"minValue");function Hm(e,n){return n===w.White?e.whitePotionsCount:e.blackPotionsCount}l(Hm,"potionsForColor");function Uv(e,n){return e.activeColor===n&&!e.isFirstTurn()&&!e.playerCanMoveMon()&&e.actionsUsedCount>=Fn&&e.playerCanMoveMana()&&Hm(e,n)>0}l(Uv,"shouldPreferPotionTakebackLines");function hC(e,n,o){return Hm(n.game,o)<Hm(e,o)}l(hC,"rootSpendsPotion");function jv(e,n,o){return n.winsImmediately||n.attacksOpponentDrainer||Ke(n.game,o)>=g(Ke(e,o),2)||n.scoresSupermanaThisTurn||n.scoresOpponentManaThisTurn||!n.ownDrainerVulnerable&&(n.supermanaProgress||n.opponentManaProgress)}l(jv,"rootPotionSpendCompensated");function bC(e,n,o,t,r){let a=Math.max(t.replyRisk.antiHelpReplyLimit,1);return r.rootReplyRiskSnapshot?.(e.game,o,t,a,n).allowsImmediateOpponentWin??!1}l(bC,"immediateOpponentWin");function at(e){return e.planner.mode===$e.Production}l(at,"isProductionMode");function ms(e,n,o,t,r){return{game:e,roots:n,candidateIndices:o,perspective:t,config:r}}l(ms,"selectionContext");function Kv(e,n,o){let t=!1;for(let r of e?.competitionRules??[])r.kind===n&&r.evaluate(o).kind==="select"&&(t=!0);return t}l(Kv,"evaluateProductionCompetitionRules");function Gm(e,n,o,t,r,a,i){let s=!1,u=ms(e,n,o,t,r);for(let c of Vv)at(r)&&Kv(a.productionPolicy,c,u)&&(c!=="negative-deny"||i?.()!==!0)&&(s=!0);return s}l(Gm,"anyProductionCompetition");function qv(e,n,o){let t=e.candidateIndices.filter(r=>!ie(e.roots,r).spiritDevelopment);return n.some(r=>t.every(a=>{let i=rc(Ht.SpiritSetup,{...e,candidateIndex:r,incumbentIndex:a},o);return i!==void 0&&i>0}))}l(qv,"spiritSetupOverridesNegativeDeny");function Vm(e,n,o,t){let r=Hv(n.map(a=>o(ie(e,a))).filter(a=>a<t));return r===void 0?[...n]:n.filter(a=>o(ie(e,a))===r)}l(Vm,"retainBestKnownSteps");function ac(e,n,o,t,r={}){if(n.length===0)return[];let a=n.map((s,u)=>u),i=!1;if(a.some(s=>ie(n,s).winsImmediately))return a.filter(s=>ie(n,s).winsImmediately);if(a.some(s=>ie(n,s).attacksOpponentDrainer)&&(a=a.filter(s=>ie(n,s).attacksOpponentDrainer),i=!0),!i&&!a.some(s=>ie(n,s).classes.immediateScore)){let s=cr(a.flatMap(u=>{let c=ie(n,u);return!c.ownDrainerVulnerable&&!c.manaHandoffToOpponent?[c.sameTurnScoreWindowValue]:[]}),0);if(s>0){let u=a.filter(c=>{let p=ie(n,c);return p.sameTurnScoreWindowValue===s&&!p.ownDrainerVulnerable&&!p.manaHandoffToOpponent});u.length>0&&(a=u)}}if(!i&&a.some(s=>ie(n,s).safeSupermanaPickupNow)?a=a.filter(s=>{let u=ie(n,s);return u.scoresSupermanaThisTurn||u.safeSupermanaPickupNow}):!i&&a.some(s=>ie(n,s).safeOpponentManaPickupNow)&&(a=a.filter(s=>{let u=ie(n,s);return u.scoresOpponentManaThisTurn||u.safeOpponentManaPickupNow})),!i&&!a.some(s=>ie(n,s).classes.immediateScore)){let s=cr(a.flatMap(c=>{let p=ie(n,c);return p.spiritSameTurnScoreSetupNow&&!p.ownDrainerVulnerable&&!p.manaHandoffToOpponent?[p.sameTurnScoreWindowValue]:[]}),0),u=cr(a.flatMap(c=>{let p=ie(n,c);return!p.spiritSameTurnScoreSetupNow&&!p.ownDrainerVulnerable&&!p.manaHandoffToOpponent?[p.sameTurnScoreWindowValue]:[]}),0);s>u&&(a=a.filter(c=>{let p=ie(n,c);return p.spiritSameTurnScoreSetupNow&&p.sameTurnScoreWindowValue===s&&!p.ownDrainerVulnerable&&!p.manaHandoffToOpponent}))}if(!i&&!a.some(s=>ie(n,s).classes.immediateScore)&&a.some(s=>{let u=ie(n,s);return u.sameTurnScoreWindowValue>0&&!u.ownDrainerVulnerable&&!u.manaHandoffToOpponent})){let s=cr(a.map(u=>ie(n,u).sameTurnScoreWindowValue),0);if(s>0){let u=a.filter(c=>{let p=ie(n,c);return p.sameTurnScoreWindowValue===s&&!p.ownDrainerVulnerable&&!p.manaHandoffToOpponent});u.length>0&&(a=u)}}if(!i){let s=a.filter(u=>{let c=ie(n,u);return c.spiritOwnManaSetupNow&&!c.ownDrainerVulnerable&&!c.manaHandoffToOpponent});if(s.length>0&&!Gm(e,n,a,o,t,r,()=>qv(ms(e,n,a,o,t),s,r.productionPolicy))){let u=s.filter(c=>ie(n,c).supermanaProgress);if(u.length>0)a=Vm(n,u,c=>c.safeSupermanaProgressSteps,15);else{let c=s.filter(p=>ie(n,p).opponentManaProgress);a=c.length>0?Vm(n,c,p=>p.safeOpponentManaProgressSteps,15):Vm(n,s,p=>p.scorePathBestSteps,33)}}}if(t.policy.hardSpiritDeployment&&!i&&Wi(e,o)&&!a.some(u=>{let c=ie(n,u);return c.scoresSupermanaThisTurn||c.scoresOpponentManaThisTurn||c.safeSupermanaPickupNow||c.safeOpponentManaPickupNow})&&!Gm(e,n,a,o,t,r)){let u=a.filter(c=>{let p=ie(n,c);return p.spiritOwnManaSetupNow&&!p.ownDrainerVulnerable&&!p.manaHandoffToOpponent});if(u.length>0)a=u;else{let c=Ke(e,o),p=a.filter(m=>!ie(n,m).keepsAwakeSpiritOnBase);if(p.length>0){let m=p.filter(S=>{let C=ie(n,S);return!C.ownDrainerVulnerable&&!C.manaHandoffToOpponent}),d=m.length>0?m:p,f=a.some(S=>{let C=ie(n,S);return C.keepsAwakeSpiritOnBase&&Ke(C.game,o)>c}),y=d.some(S=>Ke(ie(n,S).game,o)>c);(!f||y)&&(a=d)}}}if(!i){let s=[...a],u=cr(a.map(m=>ie(n,m).score),-2147483648),c=Math.max(t.policy.drainerSafetyScoreMargin,0),p=a.filter(m=>{let d=ie(n,m);return!d.ownDrainerVulnerable&&d.score+c>=u});if(p.length>0&&(a=p,at(t))){let m=ms(e,n,s,o,t);for(let d of r.productionPolicy?.safetyReentryRules??[]){let f=d.select({...m,selectedIndices:a});if(f.kind!=="continue")for(let y of f.indices){if(Hl(n,y,`Production rule ${d.id}`),!s.includes(y))throw new RangeError(`Production rule ${d.id} selected a root outside the prefilter`);a.includes(y)||a.push(y)}}}}if(t.policy.preferSpiritDevelopment&&Wi(e,o)&&a.some(s=>ie(n,s).spiritDevelopment)&&!a.some(u=>{let c=ie(n,u);return c.scoresSupermanaThisTurn||c.scoresOpponentManaThisTurn||c.safeSupermanaPickupNow||c.safeOpponentManaPickupNow})&&!Gm(e,n,a,o,t,r)){let u=cr(a.map(p=>ie(n,p).score),-2147483648),c=a.filter(p=>{let m=ie(n,p);return m.spiritOwnManaSetupNow&&m.score+yC>=u});if(c.length>0)a=c;else{let p=a.filter(m=>{let d=ie(n,m);return d.spiritDevelopment&&d.score+yC>=u});p.length>0&&(a=p)}}if(!i&&a.length>1&&Uv(e,o)){let s=cr(a.map(c=>ie(n,c).score),-2147483648),u=a.filter(c=>ie(n,c).score+Lv>=s);if(u.length>1){let c=new Map,p=l(d=>{let f=c.get(d);if(f!==void 0)return f;let y=bC(ie(n,d),d,o,t,r);return c.set(d,y),y},"allowsLoss");if(u.some(d=>{let f=ie(n,d);return!hC(e,f,o)&&!p(d)})){let d=new Set(u),f=a.filter(y=>{let S=ie(n,y);return S.winsImmediately||!d.has(y)||!hC(e,S,o)||jv(e,S,o)});f.length>0&&(a=f)}}}if(a.length>1){let s=cr(a.map(p=>ie(n,p).score),-2147483648),u=Math.max(t.replyRisk.antiHelpScoreMargin,0),c=a.filter(p=>ie(n,p).score+u>=s);if(c.length>1){let p=new Map,m=l(f=>{let y=p.get(f);if(y!==void 0)return y;let S=bC(ie(n,f),f,o,t,r);return p.set(f,S),S},"allowsLoss");if(c.some(f=>{let y=ie(n,f);return!y.manaHandoffToOpponent&&!y.hasRoundtrip&&!m(f)})){let f=new Set(c),y=a.filter(S=>{let C=ie(n,S);return C.winsImmediately||!f.has(S)||!C.manaHandoffToOpponent&&!C.hasRoundtrip});y.length>0&&(a=y)}}}if(at(t)){let s=ms(e,n,[...a],o,t),u=!1;for(let c of r.productionPolicy?.finalReentryRules??[]){let p=c.select({...s,selectedIndices:a});if(p.kind!=="continue")for(let m of p.indices)Hl(n,m,`Production rule ${c.id}`),a.includes(m)||(a.push(m),u=!0)}u&&a.sort((c,p)=>ae(n,c,p))}return a}l(ac,"filteredRootCandidateIndices");function fs(e,n){let o=l((r,a,i)=>{if(r!==a)return r===i?-1:1},"preferBoolean"),t=o(e.winsImmediately,n.winsImmediately,!0);return t??(t=o(e.attacksOpponentDrainer,n.attacksOpponentDrainer,!0)),t??(t=o(e.ownDrainerVulnerable,n.ownDrainerVulnerable,!1)),t??(t=o(e.classes.immediateScore,n.classes.immediateScore,!0)),t??(t=o(e.scoresSupermanaThisTurn,n.scoresSupermanaThisTurn,!0)),t??(t=o(e.scoresOpponentManaThisTurn,n.scoresOpponentManaThisTurn,!0)),t??(t=o(e.safeSupermanaPickupNow,n.safeSupermanaPickupNow,!0)),t??(t=o(e.safeOpponentManaPickupNow,n.safeOpponentManaPickupNow,!0)),t!==void 0?t:e.sameTurnScoreWindowValue!==n.sameTurnScoreWindowValue?e.sameTurnScoreWindowValue>n.sameTurnScoreWindowValue?-1:1:(t=o(e.spiritSameTurnScoreSetupNow,n.spiritSameTurnScoreSetupNow,!0),t??(t=o(e.spiritOwnManaSetupNow,n.spiritOwnManaSetupNow,!0)),t!==void 0?t:e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.supermanaProgress&&n.supermanaProgress&&e.safeSupermanaProgressSteps!==n.safeSupermanaProgressSteps?an(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps)?-1:1:e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.opponentManaProgress&&n.opponentManaProgress&&e.safeOpponentManaProgressSteps!==n.safeOpponentManaProgressSteps?an(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps)?-1:1:e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.scorePathBestSteps!==n.scorePathBestSteps?Ua(e.scorePathBestSteps,n.scorePathBestSteps)?-1:1:(t=o(e.supermanaProgress,n.supermanaProgress,!0),t!==void 0?t:e.supermanaProgress&&n.supermanaProgress&&e.safeSupermanaProgressSteps!==n.safeSupermanaProgressSteps?an(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps)?-1:1:(t=o(e.opponentManaProgress,n.opponentManaProgress,!0),t!==void 0?t:e.opponentManaProgress&&n.opponentManaProgress&&e.safeOpponentManaProgressSteps!==n.safeOpponentManaProgressSteps?an(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps)?-1:1:(t=o(e.manaHandoffToOpponent,n.manaHandoffToOpponent,!1),t??(t=o(e.hasRoundtrip,n.hasRoundtrip,!1)),t??(t=o(e.spiritDevelopment,n.spiritDevelopment,!0)),t!==void 0?t:e.policyPriority!==n.policyPriority?e.policyPriority>n.policyPriority?-1:1:e.efficiency!==n.efficiency?e.efficiency>n.efficiency?-1:1:0))))}l(fs,"compareTacticalEvaluatedRoots");function ae(e,n,o){let t=ie(e,n),r=ie(e,o);return t.score!==r.score?t.score>r.score?-1:1:fs(t,r)||n-o}l(ae,"compareRankedEvaluatedRootIndices");function zv(e,n){let o=n[0]??0;for(let t of n)ae(e,t,o)<0&&(o=t);return o}l(zv,"bestScoredRootIndex");function ys(e,n){let o=L(e),t=L(n);if(o===t)return;let r=o?n:e,a=o?e:n,i=!o;if(!(D(r)||r.hasRoundtrip||r.score<g(a.score,Gv)||r.sameTurnScoreWindowValue<a.sameTurnScoreWindowValue))return i?1:-1}l(ys,"spiritScoreChallengeOrder");function rc(e,n,o){for(let t of o?.comparisonRules??[]){if(t.phase!==e)continue;let r=t.compare(n);if(r.kind==="compare")return r.order===0?0:r.order>0?1:-1}}l(rc,"compareProductionRules");function Ss(e,n,o,t,r,a={}){if(a.checkpoint?.()===!0||n.length===0||o.length===0)return;let i=ms(e,n,o,t,r);if(r.replyRisk.enabled){let y=a.pickReplyRiskGuardedIndex?.(i);if(y!==void 0){if(Hl(n,y,"reply-risk guard"),!o.includes(y))throw new RangeError("reply-risk guard selected a root outside its shortlist");return a.cancelled?.()===!0?void 0:y}if(a.cancelled?.()===!0)return}let s=cr(o.map(y=>ie(n,y).score),-2147483648),u=Math.max(r.policy.efficiencyScoreMargin,0),c=zv(n,o),p=-2147483648,m=-2147483648,d=r.policy.preferSpiritDevelopment&&Wi(e,t),f=at(r)&&o.filter(y=>L(ie(n,y))).length>=2;for(let y of o){if(a.checkpoint?.()===!0)return;let S=ie(n,y),C=ie(n,c),b=at(r)&&e.turnNumber<=3&&L(S)&&L(C)&&j(s,S.score)<=16,k=at(r)?rc(Ht.SpiritSetup,{...i,candidateIndex:y,incumbentIndex:c},a.productionPolicy):void 0,M=!at(r)||k===void 0||k>=0;if(S.score+u<s&&!b)continue;let P=d&&S.spiritDevelopment!==C.spiritDevelopment?ys(S,C):void 0;P===void 0&&at(r)&&d&&S.spiritDevelopment!==C.spiritDevelopment&&Math.abs(S.score-C.score)<=320&&(P=rc(Ht.ProjectionChallenge,{...i,candidateIndex:y,incumbentIndex:c},a.productionPolicy));let T=P===void 0&&d&&S.spiritDevelopment&&!C.spiritDevelopment&&M,v=!d||S.spiritDevelopment===C.spiritDevelopment||P!==void 0||at(r)&&M&&(S.spiritOwnManaSetupNow||S.spiritSameTurnScoreSetupNow),I=S.spiritSameTurnScoreSetupNow&&!C.spiritSameTurnScoreSetupNow&&M,E=S.spiritSameTurnScoreSetupNow===C.spiritSameTurnScoreSetupNow,x=S.spiritOwnManaSetupNow&&!C.spiritOwnManaSetupNow&&M,N=S.spiritOwnManaSetupNow===C.spiritOwnManaSetupNow,B=d&&S.spiritDevelopment&&C.spiritDevelopment&&S.spiritSetupGain>C.spiritSetupGain,W=!d||!S.spiritDevelopment||!C.spiritDevelopment||S.spiritSetupGain===C.spiritSetupGain,V=f&&L(S)&&L(C),Q=at(r)&&(d||V)&&S.spiritDevelopment&&C.spiritDevelopment?rc(Ht.Projection,{...i,candidateIndex:y,incumbentIndex:c},a.productionPolicy):void 0,U=at(r)?rc(Ht.FollowupFloor,{...i,candidateIndex:y,incumbentIndex:c},a.productionPolicy):void 0,ce=S.spiritOwnManaSetupNow&&C.spiritOwnManaSetupNow&&S.supermanaProgress&&C.supermanaProgress&&an(S.safeSupermanaProgressSteps,C.safeSupermanaProgressSteps),Ae=!S.spiritOwnManaSetupNow||!C.spiritOwnManaSetupNow||!S.supermanaProgress||!C.supermanaProgress||S.safeSupermanaProgressSteps===C.safeSupermanaProgressSteps,ln=S.spiritOwnManaSetupNow&&C.spiritOwnManaSetupNow&&S.opponentManaProgress&&C.opponentManaProgress&&an(S.safeOpponentManaProgressSteps,C.safeOpponentManaProgressSteps),pn=!S.spiritOwnManaSetupNow||!C.spiritOwnManaSetupNow||!S.opponentManaProgress||!C.opponentManaProgress||S.safeOpponentManaProgressSteps===C.safeOpponentManaProgressSteps,dn=S.spiritOwnManaSetupNow&&C.spiritOwnManaSetupNow&&Ua(S.scorePathBestSteps,C.scorePathBestSteps),Ge=!S.spiritOwnManaSetupNow||!C.spiritOwnManaSetupNow||S.scorePathBestSteps===C.scorePathBestSteps,_n=an(S.safeSupermanaProgressSteps,C.safeSupermanaProgressSteps),Fe=S.safeSupermanaProgressSteps===C.safeSupermanaProgressSteps,Ho=an(S.safeOpponentManaProgressSteps,C.safeOpponentManaProgressSteps),st=S.safeOpponentManaProgressSteps===C.safeOpponentManaProgressSteps,Ve=S.sameTurnScoreWindowValue>C.sameTurnScoreWindowValue,Qr=S.sameTurnScoreWindowValue===C.sameTurnScoreWindowValue,bp=!S.manaHandoffToOpponent&&C.manaHandoffToOpponent,Cp=S.manaHandoffToOpponent===C.manaHandoffToOpponent,nR=!S.hasRoundtrip&&C.hasRoundtrip,oR=S.hasRoundtrip===C.hasRoundtrip,tR=S.policyPriority>g(C.policyPriority,SC),rR=g(S.policyPriority,SC)>=C.policyPriority,aR=S.efficiency>p||S.efficiency===p&&S.score>m,Ne;(P??0)>0?Ne=!0:(P??0)<0?Ne=!1:tR?Ne=!0:rR?Ve?Ne=!0:Qr?I?Ne=!0:E?x?Ne=!0:N?B?Ne=!0:W?(U??0)>0?Ne=!0:(U??0)<0?Ne=!1:(Q??0)>0?Ne=!0:(Q??0)<0?Ne=!1:ce?Ne=!0:Ae?ln?Ne=!0:pn?dn?Ne=!0:Ge?_n?Ne=!0:Fe?Ho?Ne=!0:st?bp?Ne=!0:Cp?nR?Ne=!0:oR?Ne=aR:Ne=!1:Ne=!1:Ne=!1:Ne=!1:Ne=!1:Ne=!1:Ne=!1:Ne=!1:Ne=!1:Ne=!1:Ne=!1:Ne=!1,(T||v&&Ne)&&(c=y,p=S.efficiency,m=S.score)}return c}l(Ss,"pickBaselineRootIndexFromCandidateIndices");function $v(e,n,o,t,r={}){if(r.checkpoint?.()===!0||n.length===0)return;if(at(t)){let i=n.map((u,c)=>c),s=r.productionPolicy?.rootPicker;if(s!==void 0){let u=s.select(ms(e,n,i,o,t));if(u.kind==="select")return Hl(n,u.index,`Production rule ${s.id}`),r.cancelled?.()===!0?void 0:u.index}}let a=ac(e,n,o,t,r);return a.length===0&&(a=n.map((i,s)=>s)),Ss(e,n,a,o,t,r)}l($v,"pickBaselineRootIndex");function CC(e,n,o,t,r={}){let a=$v(e,n,o,t,r);return a===void 0?[]:[...ie(n,a).inputs]}l(CC,"pickBaselineRootInputs");var gn=268435455,MC=700;function kC(e,n){let o=bo(n);o.mode===Xe.Production&&n.planner.lowBudgetGuard&&Co(e)&&(o=gl(o));let t=o.mode===Xe.Production;return{...o,ownSeedCap:Math.min(o.ownSeedCap,t?8:6),ownBeam:Math.min(o.ownBeam,t?3:2),perNodeFamilyCap:Math.min(o.perNodeFamilyCap,t?3:2),stepCap:Math.min(o.stepCap,4),opponentSeedCap:Math.min(o.opponentSeedCap,t?2:1),opponentBeam:1,replySeedCap:1,replyBeam:1,expansionCap:Math.min(o.expansionCap,t?64:48)}}l(kC,"projectionTurnEngineConfig");function ja(e,n,o){let t=e[n],r=e[o];return t===void 0||r===void 0?n-o:r.score-t.score||fs(t,r)||n-o}l(ja,"compareRankedReplyRiskEvaluations");function Mn(e,n){return an(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps)||an(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps)||e.spiritSetupGain>n.spiritSetupGain}l(Mn,"rootProgressOrSetupBetter");function jm(e){return e.classes.immediateScore||e.classes.drainerAttack||e.classes.drainerSafetyRecover}l(jm,"isTacticalPriorityRoot");function Bo(e,n,o){let t=e[n],r=e[o];if(t===void 0||r===void 0)return o-n;if(t.score!==r.score)return t.score>r.score?1:-1;let a=fs(t,r);return a!==0?a<0?1:-1:n===o?0:n<o?1:-1}l(Bo,"rankedRootOrder");function Mo(e,n){return e.safeSupermanaProgressSteps===n.safeSupermanaProgressSteps&&e.safeOpponentManaProgressSteps===n.safeOpponentManaProgressSteps&&(e.safeSupermanaProgressSteps<15||e.safeOpponentManaProgressSteps<15)&&e.safeSupermanaPickupNow===n.safeSupermanaPickupNow&&e.safeOpponentManaPickupNow===n.safeOpponentManaPickupNow&&e.supermanaProgress===n.supermanaProgress&&e.opponentManaProgress===n.opponentManaProgress&&!e.classes.immediateScore&&!e.classes.drainerAttack&&!e.classes.drainerSafetyRecover&&!n.classes.immediateScore&&!n.classes.drainerAttack&&!n.classes.drainerSafetyRecover&&!e.spiritDevelopment&&!n.spiritDevelopment&&!e.spiritSameTurnScoreSetupNow&&!n.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&!n.spiritOwnManaSetupNow&&e.sameTurnScoreWindowValue===0&&n.sameTurnScoreWindowValue===0&&!e.manaHandoffToOpponent&&!n.manaHandoffToOpponent&&!e.hasRoundtrip&&!n.hasRoundtrip}l(Mo,"sameNonTacticalProgressLane");function Ka(e,n,o,t){if(o.length===0||e.session.checkpoint())return[];let r=-2147483648,a=2147483647,i=!1;for(let d of o){let f=n[d];f!==void 0&&(r=Math.max(r,f.score),a=Math.min(a,f.score),i||(i=f.winsImmediately))}if(i&&j(r,a)>MC)return[];let s=Math.max(0,t.replyRisk.scoreMargin),u=o.filter(d=>{let f=n[d];return f!==void 0&&g(f.score,s)>=r});if(u.sort((d,f)=>ja(n,d,f)),u.length===0)return u;let c=Math.max(1,t.replyRisk.shortlistLimit);if(u.length>c)if(_(t)){let d=u.slice(0,c),f=d.some(b=>{let k=n[b];return k!==void 0&&(k.spiritDevelopment||k.spiritSameTurnScoreSetupNow||k.spiritOwnManaSetupNow)}),y=n[u[0]??-1]?.score??r,S=[];if(!f){let b=u.slice(c).find(k=>{let M=n[k];return M!==void 0&&j(y,M.score)<=64&&(M.spiritDevelopment||M.spiritSameTurnScoreSetupNow||M.spiritOwnManaSetupNow)});b!==void 0&&S.push(b)}if([...d,...S].some(b=>{let k=n[b];return k!==void 0&&L(k)})){let b=0;for(let k of u.slice(c)){let M=n[k];if(M!==void 0&&L(M)&&j(y,M.score)<=64&&!S.includes(k)&&(S.push(k),b+=1,b>=2))break}}u=[...d,...S]}else u=u.slice(0,c);let p=u[0],m=p===void 0?void 0:n[p];if(_(t)&&m!==void 0&&D(m)&&Z(m)){let d=o.filter(f=>!u.includes(f)).filter(f=>{let y=n[f];return y!==void 0&&!D(y)&&Mo(y,m)&&j(m.score,y.score)<=320}).sort((f,y)=>ja(n,f,y))[0];d!==void 0&&u.push(d)}return u.sort((d,f)=>ja(n,d,f)),u}l(Ka,"replyRiskGuardShortlistIndices");function Km(e,n,o){return _(o)&&L(e)&&L(n)&&!D(e)&&!D(n)&&!e.manaHandoffToOpponent&&!n.manaHandoffToOpponent&&!e.hasRoundtrip&&!n.hasRoundtrip&&!e.winsImmediately&&!n.winsImmediately&&!e.attacksOpponentDrainer&&!n.attacksOpponentDrainer&&!e.scoresSupermanaThisTurn&&!n.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!n.scoresOpponentManaThisTurn&&!e.safeSupermanaPickupNow&&!n.safeSupermanaPickupNow&&!e.safeOpponentManaPickupNow&&!n.safeOpponentManaPickupNow&&!e.supermanaProgress&&!n.supermanaProgress&&!e.opponentManaProgress&&!n.opponentManaProgress&&e.sameTurnScoreWindowValue===0&&n.sameTurnScoreWindowValue===0}l(Km,"isSafePlainSpiritPair");function ic(e,n,o){if(!_(o)||n.length<2)return!1;for(let t=0;t<n.length;t+=1){let r=e[n[t]??-1];if(r!==void 0)for(let a=t+1;a<n.length;a+=1){let i=e[n[a]??-1];if(i!==void 0&&Km(r,i,o))return!0}}return!1}l(ic,"safePlainSpiritCompetition");function RC(e,n,o,t,r){if(!_(r)||!Mo(e,o)||n.allowsImmediateOpponentWin||t.allowsImmediateOpponentWin||n.opponentReachesMatchPoint||t.opponentReachesMatchPoint)return;let a=!D(e),i=!D(o);if(a===i)return;let s=g(n.worstReplyScore,240)>=t.worstReplyScore,u=g(t.worstReplyScore,240)>=n.worstReplyScore;if(a&&s)return 1;if(i&&u)return-1}l(RC,"safeProgressSiblingOrder");function PC(e,n,o,t,r,a,i){if(!_(i)||!Mo(e,o))return;let s=D(e),u=D(o);if(s===u||r===void 0||a===void 0)return;let c=s?e:o,p=s?n:t,m=s?r:a,d=s?o:e,f=s?t:n,y=s?a:r;if(!(p.allowsImmediateOpponentWin||p.opponentReachesMatchPoint||f.allowsImmediateOpponentWin||f.opponentReachesMatchPoint||m.plan.goalFamily!==h.ImmediateScore||te(m.plan.utility,y.plan.utility)<0||g(p.worstReplyScore,160)<f.worstReplyScore||g(c.score,32)<d.score))return s?1:-1}l(PC,"riskyRecoveryProgressSiblingOrder");function qr(e,n){return ye(e.inputs,n.inputs)}l(qr,"sameFirstInput");function qa(e,n,o){return _(o)&&qr(e,n)&&e.efficiency===n.efficiency&&Math.abs(e.score-n.score)<=128&&!D(e)&&!D(n)&&!e.manaHandoffToOpponent&&!n.manaHandoffToOpponent&&!e.hasRoundtrip&&!n.hasRoundtrip&&!e.winsImmediately&&!n.winsImmediately&&!e.attacksOpponentDrainer&&!n.attacksOpponentDrainer&&!e.scoresSupermanaThisTurn&&!n.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!n.scoresOpponentManaThisTurn&&e.sameTurnScoreWindowValue===0&&n.sameTurnScoreWindowValue===0&&!e.supermanaProgress&&!n.supermanaProgress&&!e.opponentManaProgress&&!n.opponentManaProgress}l(qa,"sameOpeningSafeSetupPair");function TC(e,n,o,t,r){return _(r)&&e.spiritOwnManaSetupNow&&!o.spiritDevelopment&&!o.spiritSameTurnScoreSetupNow&&!o.spiritOwnManaSetupNow&&qa(e,o,r)&&e.rootRank+3<=o.rootRank&&g(e.score,128)>=o.score&&g(n.worstReplyScore,160)>=t.worstReplyScore}l(TC,"omittedSameOpeningSetupCompetes");function wC(e,n,o,t,r){if(!_(r))return;let a=e.safeSupermanaPickupNow||e.safeOpponentManaPickupNow,i=o.safeSupermanaPickupNow||o.safeOpponentManaPickupNow;if(a===i)return;let s=a?e:o,u=a?n:t,c=a?o:e,p=a?t:n,m=c.supermanaProgress||c.opponentManaProgress||c.spiritOwnManaSetupNow||c.spiritSameTurnScoreSetupNow||c.spiritDevelopment;if(!(D(s)||u.allowsImmediateOpponentWin||u.opponentReachesMatchPoint||p.allowsImmediateOpponentWin||p.opponentReachesMatchPoint||s.manaHandoffToOpponent||s.hasRoundtrip||c.winsImmediately||c.attacksOpponentDrainer||!m||g(s.score,144)<c.score||g(u.worstReplyScore,192)<p.worstReplyScore))return a?1:-1}l(wC,"safePickupOrder");function vC(e,n,o,t,r){return Km(e,o,r)&&!n.allowsImmediateOpponentWin&&!t.allowsImmediateOpponentWin&&!n.opponentReachesMatchPoint&&!t.opponentReachesMatchPoint}l(vC,"safePlainSpiritReplyRiskPair");function qm(e,n,o){if(!_(o)||n.length<2)return!1;for(let t=0;t<n.length;t+=1){let r=e[n[t]??-1];if(r!==void 0)for(let a=t+1;a<n.length;a+=1){let i=e[n[a]??-1];if(i!==void 0&&Mo(r,i)&&D(r)!==D(i))return!0}}return!1}l(qm,"safeProgressCompetition");function zm(e,n,o,t){if(!_(t)||e.activeColor!==w.White||e.turnNumber>3||e.monsMovesCount<1||!e.playerCanUseAction()||!e.playerCanMoveMana())return!1;let r=n.spiritOwnManaSetupNow&&n.opponentManaProgress&&!L(n),a=o.spiritOwnManaSetupNow&&o.opponentManaProgress&&!L(o);if(r===a)return!1;let i=r?[n,o]:[o,n],[s,u]=i;return L(u)?qr(s,u)&&s.efficiency===u.efficiency&&s.ownDrainerVulnerable===u.ownDrainerVulnerable&&s.ownDrainerWalkVulnerable===u.ownDrainerWalkVulnerable&&!s.manaHandoffToOpponent&&!u.manaHandoffToOpponent&&!s.hasRoundtrip&&!u.hasRoundtrip&&!s.winsImmediately&&!u.winsImmediately&&!s.attacksOpponentDrainer&&!u.attacksOpponentDrainer&&!s.scoresSupermanaThisTurn&&!u.scoresSupermanaThisTurn&&!s.scoresOpponentManaThisTurn&&!u.scoresOpponentManaThisTurn&&!s.safeSupermanaPickupNow&&!u.safeSupermanaPickupNow&&!s.safeOpponentManaPickupNow&&!u.safeOpponentManaPickupNow&&s.sameTurnScoreWindowValue===0&&u.sameTurnScoreWindowValue===0&&s.supermanaProgress===u.supermanaProgress&&s.safeSupermanaProgressSteps===u.safeSupermanaProgressSteps&&s.opponentManaProgress===u.opponentManaProgress&&s.safeOpponentManaProgressSteps===u.safeOpponentManaProgressSteps:!1}l(zm,"isProductionModeWhiteSpiritFollowupSetupPair");function uc(e,n,o,t){for(let r=0;r<o.length;r+=1){let a=n[o[r]??-1];if(a!==void 0)for(let i=r+1;i<o.length;i+=1){let s=n[o[i]??-1];if(s!==void 0&&zm(e,a,s,t))return!0}}return!1}l(uc,"whiteSpiritFollowupSetupCompetition");function sc(e){return O(e)===h.ManaTempo&&e.sameTurnScoreWindowValue>0&&!e.winsImmediately&&!e.attacksOpponentDrainer&&!e.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!e.safeSupermanaPickupNow&&!e.safeOpponentManaPickupNow&&!e.manaHandoffToOpponent&&!e.hasRoundtrip}l(sc,"nonConcreteManaWindowRoot");function $m(e,n,o,t){if(!_(t)||o.length<2||e.activeColor!==w.Black||e.turnNumber>4)return!1;for(let r=0;r<o.length;r+=1){let a=n[o[r]??-1];if(a!==void 0)for(let i=r+1;i<o.length;i+=1){let s=n[o[i]??-1];if(s===void 0)continue;let u=sc(a),c=sc(s);if(u===c)continue;let p=u?a:s,m=u?s:a;if(p.sameTurnScoreWindowValue<=1&&m.sameTurnScoreWindowValue===0&&O(m)===h.ManaTempo&&m.ownDrainerVulnerable===p.ownDrainerVulnerable&&m.ownDrainerWalkVulnerable===p.ownDrainerWalkVulnerable&&!m.manaHandoffToOpponent&&!m.hasRoundtrip&&Mn(m,p)&&g(m.score,192)>=p.score)return!0}}return!1}l($m,"blackManaWindowProgressCompetition");function Xm(e,n,o){if(!_(o)||n.length<2)return!1;let t=n.map(r=>e[r]?.score).filter(r=>r!==void 0&&r>=0).sort((r,a)=>a-r);return t.length>=2&&j(t[0]??0,t[1]??0)<=64}l(Xm,"closePositiveScoreCompetition");function Ym(){return{allowsImmediateOpponentWin:!0,opponentReachesMatchPoint:!0,worstReplyScore:-Math.trunc(gn/2)}}l(Ym,"conservativeSnapshot");function Rt(e,n,o,t){return Dr(e,n,o,t.evaluation.weights,!1)}l(Rt,"evaluateReplyRiskGame");function kn(e,n,o,t,r){if(e.session.checkpoint())return Ym();let a=Math.max(1,Math.trunc(r)),i=tc(n,o,a,t);if(i!==void 0){let c=nC(e,i);if(c!==void 0)return c}let s=n.winnerColor(),u;if(s!==void 0){let c=s===o;u={allowsImmediateOpponentWin:!c,opponentReachesMatchPoint:!c,worstReplyScore:c?Math.trunc(gn/2):-Math.trunc(gn/2)}}else if(n.activeColor===o)u={allowsImmediateOpponentWin:!1,opponentReachesMatchPoint:!1,worstReplyScore:Rt(e,n,o,t)};else{let c=Ao(e,n,a);if(e.session.checkpoint())return Ym();if(c.length===0)u={allowsImmediateOpponentWin:!1,opponentReachesMatchPoint:!1,worstReplyScore:Math.trunc(gn/4)};else{let p=!1,m=!1,d=2147483647,f=!1;for(let y of c){if(e.session.checkpoint())return Ym();let S=y.game;f=!0;let C=o===w.White?S.blackScore:S.whiteScore;xe-C<=1&&(m=!0);let b=S.winnerColor(),k;if(b===o?k=Math.trunc(gn/2):b!==void 0?(p=!0,m=!0,k=-Math.trunc(gn/2)):k=Rt(e,S,o,t),d=Math.min(d,k),p)break}(!f||d===2147483647)&&(d=Rt(e,n,o,t)),u={allowsImmediateOpponentWin:p,opponentReachesMatchPoint:m,worstReplyScore:d}}}return e.session.cacheWriteAllowed&&i!==void 0&&oC(e,i,u),u}l(kn,"rootReplyRiskSnapshot");var Qm=Object.freeze({});function Ut(e,n){return e.game.activeColor===n&&e.game.winnerColor()===void 0}l(Ut,"canTurnEngineProjectReplyRiskRoot");function Ul(e){return e===h.ImmediateScore||e===h.DenyOpponentWindow||e===h.DrainerKill}l(Ul,"isTacticalTurnEngineFamily");function AC(e){return Ul(e)||e===h.SpiritImpact||e===h.DrainerSafetyRecovery}l(AC,"isInformativeReplyRiskProjectionFamily");function EC(e,n,o,t){return!t.planner.enabled||!_(t)||!Ut(e,o)||L(e)||n.plan.headFamily===h.SpiritImpact&&!e.spiritDevelopment&&e.ownDrainerVulnerable?!1:AC(n.plan.headFamily)?!0:(n.plan.headFamily===h.SafeSupermanaProgress||n.plan.headFamily===h.SafeOpponentManaProgress)&&Z(e)}l(EC,"shouldUseReplyRiskProjectionForRoot");function jl(e,n,o,t,r,a){let i=o!==void 0&&EC(n,o,t,r)?o.plan.endGame:n.game;return kn(e,i,t,r,a)}l(jl,"rootReplyRiskSnapshotWithProjection");function gC(e,n){return uo(e,n)>=0?e:n}l(gC,"maxTurnUtility");function OC(e,n,o,t,r,a){let i=ss(e,o.game,n,t,r),s={actions:[],compiledChunks:[o.inputs],endGame:o.game.fork(),utility:i,headUtility:i,headFamily:a,goalFamily:a,packageMeta:{scoreGain:0,denyGain:0,drainerSafetyDelta:0,spiritOnlySetup:!1,endsNonnegativeDrainerSafety:!0,opponentImmediateWindowAfter:0}};return ec(e,n,s,t,r)}l(OC,"turnEngineRootPlanUtilityWithConfig");function Pt(e,n,o,t,r,a,i=Qm){return i.evaluateTurnEngineRootUtility?.(n,o,t,a)??OC(e,n,o,t,bo(r),a)}l(Pt,"turnEngineRootPlanUtility");function lc(e,n,o,t,r,a,i=Qm){let s=i.evaluateTurnEngineRootUtility?.(n,o,t,a);if(s!==void 0)return s;let u=kC(o.game,r),c=tc(o.game,t,cm[a],r),p=Dm(u,r.planner.selectedFollowupProjection,r.planner.secondaryAnalysis),m=c===void 0||p===void 0?void 0:{...c,secondary:p};if(m!==void 0){let y=aC(e,m);if(y!==void 0)return y}let d=ss(e,o.game,n,t,u),f;if(!Gn(r))f=d;else{let y=OC(e,n,o,t,u,a);if(!r.planner.selectedFollowupProjection||!Ut(o,t))f=gC(y,d);else{let S=o.ownDrainerVulnerable||o.spiritDevelopment||o.spiritSameTurnScoreSetupNow||o.spiritOwnManaSetupNow||Z(o),C=o.game.activeColor===w.Black&&(a===h.ManaTempo||a===h.DrainerSafetyRecovery)&&!S&&!D(o)&&!o.manaHandoffToOpponent&&!o.hasRoundtrip&&!o.winsImmediately&&!o.attacksOpponentDrainer;if(!S&&!C)f=y;else{let b=Wo(e,o.game,t,u);f=b===void 0?y:gC(b.utility,y)}}}return e.session.cacheWriteAllowed&&m!==void 0&&iC(e,m,f),f}l(lc,"turnEngineSelectedOverrideUtility");function Zm(e,n,o,t,r){if(!Gn(r)||o.length<2)return new Map;let a=ic(n,o,r),i=n[o[0]??-1],s=i!==void 0&&(i.winsImmediately||i.attacksOpponentDrainer||i.scoresSupermanaThisTurn||i.scoresOpponentManaThisTurn),u=o.some(f=>{let y=n[f];return y!==void 0&&L(y)&&Ut(y,t)});if(!s&&!u)return new Map;let c;u?c=a?r.planner.lowBudgetGuard?Math.min(o.length,4):o.length:Math.min(o.length,r.planner.lowBudgetGuard?4:8):c=Math.min(o.length,r.planner.lowBudgetGuard?3:6);let p=Mt(r),m=bo(r),d=new Map;for(let f of o.slice(0,c)){if(e.session.checkpoint())return new Map;let y=n[f];if(y===void 0||!Ut(y,t))continue;let C=_(r)&&y.ownDrainerVulnerable&&!y.manaHandoffToOpponent&&!y.hasRoundtrip?m:p,b=Wo(e,y.game,t,C);b!==void 0&&d.set(f,{plan:b})}return u&&!s&&!a&&![...d.values()].some(({plan:f})=>AC(f.headFamily))?new Map:d}l(Zm,"turnEngineReplyRiskProjections");function cc(e,n){return Ut(e,n)&&!L(e)&&!e.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&!D(e)&&!e.hasRoundtrip}l(cc,"canChallengeSpiritPreferenceRoot");function zr(e,n){return Ut(e,n)&&!L(e)&&!e.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&!e.manaHandoffToOpponent&&!e.hasRoundtrip}l(zr,"canChallengeSpiritPreferenceRootWithRecovery");function Jm(e,n,o,t,r){if(!Gn(r))return new Map;let a=r.planner.lowBudgetGuard?4:6,i=o.filter(f=>{let y=n[f];return y!==void 0&&L(y)&&Ut(y,t)}).sort((f,y)=>ja(n,f,y)).slice(0,a),s=r.planner.lowBudgetGuard?2:4,u=o.filter(f=>{let y=n[f];return y!==void 0&&(cc(y,t)||zr(y,t))}).sort((f,y)=>ja(n,f,y)).slice(0,s),c=[...i];for(let f of u)c.includes(f)||c.push(f);if(c.length<2)return new Map;let p=Mt(r),m=bo(r),d=new Map;for(let f of c){let y=n[f];if(y===void 0)continue;let C=zr(y,t)&&!cc(y,t)?m:p,b=Wo(e,y.game,t,C);b!==void 0&&d.set(f,{plan:b})}return d}l(Jm,"buildSpiritRootProjections");function Ye(e,n,o,t){if(e.session.checkpoint())return 0;let r=n.winnerColor();if(r!==void 0)return r===o?Math.trunc(gn/2):-Math.trunc(gn/2);let a=tc(n,o,1,t);if(a!==void 0){let s=tC(e,a);if(s!==void 0)return s}let i=Rt(e,n,o,t);return e.session.cacheWriteAllowed&&a!==void 0&&rC(e,a,i),i}l(Ye,"spiritFollowupFloorScore");function lr(e,n,o,t,r,a,i,s){let u=o[t],c=o[r];if(!Gn(i)||n.turnNumber>3||u===void 0||c===void 0||!L(u)||!L(c)||D(u)||D(c)||u.manaHandoffToOpponent||c.manaHandoffToOpponent||u.hasRoundtrip||c.hasRoundtrip||u.supermanaProgress||u.opponentManaProgress||c.supermanaProgress||c.opponentManaProgress||u.sameTurnScoreWindowValue>0||c.sameTurnScoreWindowValue>0||u.spiritSameTurnScoreSetupNow||c.spiritSameTurnScoreSetupNow||u.spiritOwnManaSetupNow||c.spiritOwnManaSetupNow||Math.abs(u.score-c.score)>224)return;let p=s.get(t)??Ye(e,u.game,a,i);s.set(t,p);let m=s.get(r)??Ye(e,c.game,a,i);return s.set(r,m),p>=g(m,32)?1:m>=g(p,32)?-1:0}l(lr,"spiritFollowupFloorOrder");function za(e,n,o,t){return _(t)&&e.activeColor===w.Black&&e.turnNumber<=4&&L(n)&&o.spiritOwnManaSetupNow&&!o.spiritSameTurnScoreSetupNow&&qr(n,o)&&n.ownDrainerVulnerable===o.ownDrainerVulnerable&&n.ownDrainerWalkVulnerable===o.ownDrainerWalkVulnerable&&!n.manaHandoffToOpponent&&!o.manaHandoffToOpponent&&!n.hasRoundtrip&&!o.hasRoundtrip&&!n.winsImmediately&&!o.winsImmediately&&!n.attacksOpponentDrainer&&!o.attacksOpponentDrainer&&!n.scoresSupermanaThisTurn&&!o.scoresSupermanaThisTurn&&!n.scoresOpponentManaThisTurn&&!o.scoresOpponentManaThisTurn&&!n.safeSupermanaPickupNow&&!o.safeSupermanaPickupNow&&!n.safeOpponentManaPickupNow&&!o.safeOpponentManaPickupNow&&n.sameTurnScoreWindowValue===0&&o.sameTurnScoreWindowValue===0&&!n.supermanaProgress&&!o.supermanaProgress&&!n.opponentManaProgress&&!o.opponentManaProgress}l(za,"isProductionModeBlackPlainSpiritFollowupSetupPair");function pc(e,n,o,t,r,a,i,s,u,c){let p=o[t],m=o[a];if(p===void 0||m===void 0)return;let d,f,y,S,C,b,k;if(za(n,p,m,u))d=p,f=r,y=m,S=i,C=t,b=a,k=!0;else if(za(n,m,p,u))d=m,f=i,y=p,S=r,C=a,b=t,k=!1;else return;if(f.allowsImmediateOpponentWin||S.allowsImmediateOpponentWin||f.opponentReachesMatchPoint||S.opponentReachesMatchPoint)return;let M=c.get(C)??Ye(e,d.game,s,u);c.set(C,M);let P=c.get(b)??Ye(e,y.game,s,u);if(c.set(b,P),y.rootRank<=d.rootRank&&g(y.score,64)>=d.score&&y.spiritSetupGain>=g(d.spiritSetupGain,32)&&g(S.worstReplyScore,192)>=f.worstReplyScore&&g(P,32)>=M)return k?-1:1;if(!(g(f.worstReplyScore,192)<S.worstReplyScore||M<g(P,32)&&d.score<y.score))return k?1:-1}l(pc,"blackPlainSpiritFollowupReplyOrder");function dc(e,n,o,t,r,a,i,s,u,c){let p=o[t],m=o[a];if(!_(u)||n.activeColor!==w.Black||n.turnNumber>2||p===void 0||m===void 0||!L(p)||!L(m)||!qr(p,m)||p.ownDrainerVulnerable!==m.ownDrainerVulnerable||p.manaHandoffToOpponent!==m.manaHandoffToOpponent||p.hasRoundtrip!==m.hasRoundtrip||p.spiritSameTurnScoreSetupNow||m.spiritSameTurnScoreSetupNow||p.spiritOwnManaSetupNow||m.spiritOwnManaSetupNow||p.winsImmediately||m.winsImmediately||p.attacksOpponentDrainer||m.attacksOpponentDrainer||r.allowsImmediateOpponentWin||i.allowsImmediateOpponentWin||r.opponentReachesMatchPoint||i.opponentReachesMatchPoint)return;let d=c.get(t)??Ye(e,p.game,s,u);c.set(t,d);let f=c.get(a)??Ye(e,m.game,s,u);c.set(a,f);let y=r.worstReplyScore>=g(i.worstReplyScore,96)&&g(d,32)>=f&&g(p.score,48)>=m.score,S=i.worstReplyScore>=g(r.worstReplyScore,96)&&g(f,32)>=d&&g(m.score,48)>=p.score;if(y===S){let C=r.worstReplyScore<g(i.worstReplyScore,96)&&d<g(f,96),b=i.worstReplyScore<g(r.worstReplyScore,96)&&f<g(d,96);return C&&b&&p.score!==m.score?p.score>m.score?1:-1:void 0}return y?1:-1}l(dc,"earlyBlackPlainSpiritSiblingOrder");function ef(e,n,o,t,r,a){if(!_(a)||e.activeColor!==w.Black||e.turnNumber>4||o.allowsImmediateOpponentWin||r.allowsImmediateOpponentWin||o.opponentReachesMatchPoint||r.opponentReachesMatchPoint)return;let i=O(n),s=O(t),u=l(b=>b===h.ManaTempo||b===h.SafeSupermanaProgress||b===h.SafeOpponentManaProgress,"allowed");if(!u(i)||!u(s)||Math.abs(n.rootRank-t.rootRank)>8)return;let c=Z(n),p=Z(t),m=Mn(n,t)||c&&!p,d=Mn(t,n)||p&&!c;if(m===d)return;let f=sc(n),y=sc(t);if(f!==y){let b=f?n:t,k=f?o:r,M=f?t:n,P=f?r:o;if(b.sameTurnScoreWindowValue<=1&&M.sameTurnScoreWindowValue===0&&O(M)===h.ManaTempo&&M.ownDrainerVulnerable===b.ownDrainerVulnerable&&M.ownDrainerWalkVulnerable===b.ownDrainerWalkVulnerable&&!M.manaHandoffToOpponent&&!M.hasRoundtrip&&Mn(M,b)&&g(P.worstReplyScore,96)>=k.worstReplyScore&&g(M.score,192)>=b.score)return f?-1:1}let S=g(o.worstReplyScore,240)>=r.worstReplyScore,C=g(r.worstReplyScore,240)>=o.worstReplyScore;if(m&&n.score>t.score&&S)return 1;if(d&&t.score>n.score&&C)return-1}l(ef,"earlyBlackManaProgressReplyOrder");function nf(e,n,o,t,r,a,i,s,u,c){let p=o[t],m=o[a];if(!_(u)||n.activeColor!==w.Black||n.turnNumber>4||p===void 0||m===void 0)return;let d=L(p),f=L(m),y=O(p)===h.ManaTempo,S=O(m)===h.ManaTempo;if(d===f||y===S)return;let C=d?p:m,b=d?r:i,k=d?t:a,M=d?m:p,P=d?i:r,T=d?a:t;if(!qr(C,M)||C.ownDrainerVulnerable!==M.ownDrainerVulnerable||C.ownDrainerWalkVulnerable!==M.ownDrainerWalkVulnerable||b.allowsImmediateOpponentWin||P.allowsImmediateOpponentWin||b.opponentReachesMatchPoint||P.opponentReachesMatchPoint||C.manaHandoffToOpponent||M.manaHandoffToOpponent||C.hasRoundtrip||M.hasRoundtrip||C.winsImmediately||M.winsImmediately||C.attacksOpponentDrainer||M.attacksOpponentDrainer||C.sameTurnScoreWindowValue>0||M.sameTurnScoreWindowValue>0||C.scoresSupermanaThisTurn||M.scoresSupermanaThisTurn||C.scoresOpponentManaThisTurn||M.scoresOpponentManaThisTurn||C.safeSupermanaPickupNow||M.safeSupermanaPickupNow||C.safeOpponentManaPickupNow||M.safeOpponentManaPickupNow||C.spiritSameTurnScoreSetupNow||C.spiritOwnManaSetupNow||M.spiritSameTurnScoreSetupNow||M.spiritOwnManaSetupNow||M.supermanaProgress||M.opponentManaProgress||g(C.score,24)<M.score||g(b.worstReplyScore,192)<P.worstReplyScore)return;let v=c.get(k)??Ye(e,C.game,s,u);c.set(k,v);let I=c.get(T)??Ye(e,M.game,s,u);if(c.set(T,I),!(g(v,32)<I))return d?1:-1}l(nf,"earlyBlackPlainSpiritManaReplyOrder");function of(e,n,o,t,r,a,i,s,u,c){if(!Gn(u))return;let p=o[t],m=o[a];if(p===void 0||m===void 0)return;let d=L(p),f=L(m);if(d===f)return;let y=d?m:p,S=d?i:r,C=d?a:t,b=d?p:m,k=d?r:i,M=d?t:a;if(D(y)||D(b)||S.allowsImmediateOpponentWin||k.allowsImmediateOpponentWin||S.opponentReachesMatchPoint||k.opponentReachesMatchPoint||y.manaHandoffToOpponent||b.manaHandoffToOpponent||y.hasRoundtrip||b.hasRoundtrip||y.ownDrainerVulnerable||b.ownDrainerVulnerable||y.ownDrainerWalkVulnerable||b.ownDrainerWalkVulnerable||y.spiritSameTurnScoreSetupNow||y.spiritOwnManaSetupNow||b.spiritSameTurnScoreSetupNow||b.spiritOwnManaSetupNow||y.winsImmediately||b.winsImmediately||y.attacksOpponentDrainer||b.attacksOpponentDrainer||y.sameTurnScoreWindowValue>0||b.sameTurnScoreWindowValue>0)return;let P=c.get(C)??Ye(e,y.game,s,u);c.set(C,P);let T=c.get(M)??Ye(e,b.game,s,u);c.set(M,T);let v=g(S.worstReplyScore,192)>=k.worstReplyScore,I=n.turnNumber<=2&&!y.supermanaProgress&&!y.opponentManaProgress&&y.score>=g(b.score,48)&&S.worstReplyScore>=96&&P>=T;if(!(g(y.score,32)<b.score||!v&&!I)&&(P>=g(T,48)||I))return d?-1:1}l(of,"safeNonSpiritFollowupOrder");function tf(e,n,o,t,r,a){if(!zm(e,n,t,a))return;let i=n.spiritOwnManaSetupNow&&n.opponentManaProgress&&!L(n),s=i?n:t,u=i?o:r,c=i?t:n,p=i?r:o;if(!qr(s,c)||s.efficiency!==c.efficiency||s.ownDrainerVulnerable!==c.ownDrainerVulnerable||s.ownDrainerWalkVulnerable!==c.ownDrainerWalkVulnerable||s.manaHandoffToOpponent||c.manaHandoffToOpponent||s.hasRoundtrip||c.hasRoundtrip||s.winsImmediately||c.winsImmediately||s.attacksOpponentDrainer||c.attacksOpponentDrainer||s.scoresSupermanaThisTurn||c.scoresSupermanaThisTurn||s.scoresOpponentManaThisTurn||c.scoresOpponentManaThisTurn||s.safeSupermanaPickupNow||c.safeSupermanaPickupNow||s.safeOpponentManaPickupNow||c.safeOpponentManaPickupNow||s.sameTurnScoreWindowValue>0||c.sameTurnScoreWindowValue>0||s.supermanaProgress||c.supermanaProgress||u.allowsImmediateOpponentWin||p.allowsImmediateOpponentWin||u.opponentReachesMatchPoint||p.opponentReachesMatchPoint)return;let m=e.turnNumber===3&&e.monsMovesCount===1?192:96;if(!(g(s.score,96)<c.score||g(u.worstReplyScore,m)<p.worstReplyScore||s.rootRank>c.rootRank+8))return i?1:-1}l(tf,"whiteSpiritFollowupSetupReplyOrder");var Xv=16384,pr=15,Yv=120,Qv=40,IC=90,xC=22,Zv=Symbol("move-efficiency-cache");function _C(e){return e.caches.session.getOrCreate(Zv,()=>new Ee(Xv))}l(_C,"moveEfficiencyCache");function Jv(e,n,o){return on(e)|Number(n)<<1|Number(o)<<2}l(Jv,"snapshotCacheTag");function NC(e){return{safeSupermanaProgress:!1,safeSupermanaProgressSteps:void 0,safeOpponentManaProgress:!1,safeOpponentManaProgressSteps:void 0,spiritAssistedScore:!1,spiritAssistedScoreValue:0,spiritAssistedDenial:!1,spiritAssistedDenialValue:0,sameTurnScoreWindowValue:e}}l(NC,"defaultTacticalProjection");function ql(e){let n=10;return Math.max(Math.min(e.i,n-e.i),Math.min(e.j,n-e.j))+1}l(ql,"distanceToAnyPoolStepsForEfficiency");function dr(e,n){let o=10,t=n===w.White?o:0;return Math.max(Math.abs(t-e.i),Math.min(e.j,o-e.j))+1}l(dr,"distanceToColorPoolStepsForEfficiency");function DC(e,n){let o;for(let[t,r]of e.board.entries()){let a=z(r);if(!(a?.color!==n||a.kind!==A.Drainer||$(a)))for(let[i,s]of e.board.entries()){if(s.kind!=="mana")continue;let u=se(t,i)-1;o=o===void 0?u:Math.min(o,u)}}return o}l(DC,"approximateBestDrainerToManaSteps");function Kl(e,n){if(e.activeColor!==n)return 0;let o=Math.max(0,le-e.monsMovesCount),t=0;for(let[r,a]of e.board.entries()){if(a.kind!=="mon-with-mana"||a.mon.color!==n||$(a.mon))continue;ql(r)-1<=o&&(t=Math.max(t,_e(a.mana,n)))}return t}l(Kl,"approximateSameTurnScoreWindowValue");function eg(e,n,o,t,r,a,i){let s=a?ka(e,n):void 0,u=s?.colorSummary(o),c=s?.colorSummary(t),p=Mi,m=r&&n.activeColor===o?Yo(e,n,o,i,p):NC(u?.immediateWindow.bestScore??Kl(n,o)),d=r&&n.activeColor===t?Yo(e,n,t,i,p):NC(c?.immediateWindow.bestScore??Kl(n,t)),f=u?.bestDrainerToManaSteps??DC(n,o)??pr,y=c?.bestDrainerToManaSteps??DC(n,t)??pr;return{myBestCarrierSteps:u?.bestCarrierSteps??pr,opponentBestCarrierSteps:c?.bestCarrierSteps??pr,myBestDrainerToManaSteps:f,opponentBestDrainerToManaSteps:y,myCarrierCount:0,opponentCarrierCount:0,mySpiritOnBase:!1,opponentSpiritOnBase:!1,mySpiritActionTargets:u?.spirit.utility??0,opponentSpiritActionTargets:c?.spirit.utility??0,mySameTurnScoreValue:n.activeColor===o?r?m.spiritAssistedScoreValue:m.sameTurnScoreWindowValue:0,opponentSameTurnScoreValue:n.activeColor===t?r?d.spiritAssistedScoreValue:d.sameTurnScoreWindowValue:0,mySameTurnOpponentManaScoreValue:n.activeColor===o&&r?m.spiritAssistedDenialValue:0,opponentSameTurnOpponentManaScoreValue:n.activeColor===t&&r?d.spiritAssistedDenialValue:0,mySafeSupermanaProgress:r&&m.safeSupermanaProgress,opponentSafeSupermanaProgress:r&&d.safeSupermanaProgress,mySafeOpponentManaProgress:r&&m.safeOpponentManaProgress,opponentSafeOpponentManaProgress:r&&d.safeOpponentManaProgress,mySafeSupermanaProgressSteps:m.safeSupermanaProgressSteps??pr,opponentSafeSupermanaProgressSteps:d.safeSupermanaProgressSteps??pr,mySafeOpponentManaProgressSteps:m.safeOpponentManaProgressSteps??pr,opponentSafeOpponentManaProgressSteps:d.safeOpponentManaProgressSteps??pr}}l(eg,"initializeMoveEfficiencySnapshot");function ng(e,n,o,t){let r=e.board.base({kind:A.Spirit,color:n,cooldown:0}),a=e.board.base({kind:A.Spirit,color:o,cooldown:0});for(let[i,s]of e.board.entries()){if(s.kind==="mon-with-mana"){if($(s.mon))continue;let u=ql(i)-1;s.mon.color===n?(t.myCarrierCount=t.myCarrierCount+1,t.myBestCarrierSteps=Math.min(t.myBestCarrierSteps,u)):(t.opponentCarrierCount=t.opponentCarrierCount+1,t.opponentBestCarrierSteps=Math.min(t.opponentBestCarrierSteps,u));continue}s.kind!=="mon"&&s.kind!=="mon-with-consumable"||$(s.mon)||s.mon.kind!==A.Spirit||(s.mon.color===n?t.mySpiritOnBase=Ie(i,r):t.opponentSpiritOnBase=Ie(i,a))}}l(ng,"observeMoveEfficiencyBoard");function FC(e,n,o,t,r,a){let i=X(o),s=eg(e,n,o,i,t,r,a);return ng(n,o,i,s),s}l(FC,"buildMoveEfficiencySnapshot");function zl(e,n,o,t,r,a){let i=_C(e),s=Jv(o,t,r),u=i.get(a,s);if(u!==void 0)return u;let c=FC(e,n,o,t,r,a);return e.session.cacheWriteAllowed&&i.set(a,c,s),c}l(zl,"moveEfficiencySnapshotWithHash");function og(e,n,o,t,r,a){return FC(e,n,o,t,r,a)}l(og,"moveEfficiencySnapshotUncachedWithHash");function WC(e){_C(e).clear()}l(WC,"clearMoveEfficiencyCache");function $r(e,n,o,t,r=pr){let a=e<r,i=n<r;if(a&&i){let s=e-n;return s>0?s*o:s<0?s*t:0}return!a&&i?o:a&&!i?0-t:0}l($r,"stepProgressDelta");function $a(e){let n=[];for(let o of e){if(o.kind!=="mon-move")continue;let t=z(o.item);if(t!==void 0){if(n.some(r=>Ie(r.from,o.to)&&Ie(r.to,o.from)&&r.color===t.color&&r.kind===t.kind))return!0;n.push({from:o.from,to:o.to,color:t.color,kind:t.kind})}}return!1}l($a,"hasRoundtripMonMove");function tg(e,n,o){return Py(e.board,n.board)&&e.whiteScore===n.whiteScore&&e.blackScore===n.blackScore&&e.whitePotionsCount===n.whitePotionsCount&&e.blackPotionsCount===n.blackPotionsCount&&!Mu(o)}l(tg,"isNoEffectTurnTransition");function rg(e,n){let o=X(n);return e.some(t=>t.kind==="mon-fainted"&&t.mon.kind===A.Drainer&&t.mon.color===o)}l(rg,"eventsIncludeOpponentDrainerFainted");function Xa(e,n,o){if(o<=0)return 0;let t=0,r=X(n);for(let a of e){if(a.kind!=="mana-move")continue;let i=dr(a.from,n),s=dr(a.to,n),u=dr(a.from,r),c=dr(a.to,r),p=Math.max(u-c,0),m=Math.max(i-s,0);if(p>m){let d=p-m;t=t+d*_e(a.mana,r)*o}}return t}l(Xa,"manaHandoffPenalty");function ag(e,n,o){let t=o;return t=t+$r(e.myBestCarrierSteps,n.myBestCarrierSteps,90,130),t=t-$r(e.opponentBestCarrierSteps,n.opponentBestCarrierSteps,80,120),t=t+$r(e.myBestDrainerToManaSteps,n.myBestDrainerToManaSteps,34,50),t=t-$r(e.opponentBestDrainerToManaSteps,n.opponentBestDrainerToManaSteps,30,44),t=t+(n.myCarrierCount-e.myCarrierCount)*55,t=t-(n.opponentCarrierCount-e.opponentCarrierCount)*48,t}l(ag,"applyCarrierAndDrainerEfficiencyDelta");function ig(e,n,o){let t=o;return e.mySpiritOnBase&&!n.mySpiritOnBase&&(t=t+IC),!e.opponentSpiritOnBase&&n.opponentSpiritOnBase&&(t=t+Math.trunc(IC/3)),t=t+(n.mySpiritActionTargets-e.mySpiritActionTargets)*xC,t=t-(n.opponentSpiritActionTargets-e.opponentSpiritActionTargets)*Math.trunc(xC/2),t}l(ig,"applySpiritEfficiencyDelta");function sg(e,n,o){let t=o;return t=t+(n.mySameTurnScoreValue-e.mySameTurnScoreValue)*55,t=t-(n.opponentSameTurnScoreValue-e.opponentSameTurnScoreValue)*45,t=t+(n.mySameTurnOpponentManaScoreValue-e.mySameTurnOpponentManaScoreValue)*90,t=t-(n.opponentSameTurnOpponentManaScoreValue-e.opponentSameTurnOpponentManaScoreValue)*75,t}l(sg,"applyScoreWindowEfficiencyDelta");function ug(e,n,o){let t=o;return!e.mySafeSupermanaProgress&&n.mySafeSupermanaProgress&&(t=t+140),!e.opponentSafeSupermanaProgress&&n.opponentSafeSupermanaProgress&&(t=t-120),!e.mySafeOpponentManaProgress&&n.mySafeOpponentManaProgress&&(t=t+120),!e.opponentSafeOpponentManaProgress&&n.opponentSafeOpponentManaProgress&&(t=t-110),t=t+$r(e.mySafeSupermanaProgressSteps,n.mySafeSupermanaProgressSteps,26,40),t=t-$r(e.opponentSafeSupermanaProgressSteps,n.opponentSafeSupermanaProgressSteps,22,36),t=t+$r(e.mySafeOpponentManaProgressSteps,n.mySafeOpponentManaProgressSteps,22,34),t=t-$r(e.opponentSafeOpponentManaProgressSteps,n.opponentSafeOpponentManaProgressSteps,18,30),t}l(ug,"applySafeProgressEfficiencyDelta");function cg(e,n,o,t,r,a){let i=a,s=t.some(u=>u.kind==="mana-scored")||rg(t,o);return r.applyRootManaHandoffGuard&&!s&&(i=i-Xa(t,o,r.rootManaHandoffPenalty)),tg(e,n,t)?i=i-Yv:!Mu(t)&&i<=0&&(i=i-Qv),r.applyBacktrackPenalty&&r.rootBacktrackPenalty>0&&$a(t)&&(i=i-r.rootBacktrackPenalty),i}l(cg,"applyRootEfficiencyPenalties");function lg(e,n,o,t,r,a,i){let s=0;return s=ag(r,a,s),s=ig(r,a,s),s=sg(r,a,s),s=ug(r,a,s),i.isRoot&&(s=cg(e,n,o,t,i,s)),s}l(lg,"moveEfficiencyDeltaFromBeforeSnapshotWithAfterSnapshot");function $l(e,n,o,t,r,a,i,s){let u=og(e,o,t,s.includeTacticalExact&&o.activeColor===t,s.includeStrategicExact,i);return lg(n,o,t,r,a,u,s)}l($l,"moveEfficiencyDeltaFromBeforeSnapshot");var mr=15,rf=33,pg=4,dg=6,mg=600,fg=1800,yg=220,Sg=280;function XC(e,n){for(let[o,t]of e.board.entries()){let r=z(t);if(r?.color===n&&r.kind===A.Drainer)return{location:o,mon:r}}}l(XC,"findDrainer");function lo(e,n,o){let t=XC(n,o);if(t===void 0)return!1;if($(t.mon))return!0;if(n.isFirstTurn())return!1;let r=yn(n.board);return Ir(e,n.board,r,X(o),o,t.location,le,!0)}l(lo,"isOwnDrainerVulnerable");function hg(e,n){let o=X(n);for(let[t,r]of e.board.entries()){let a=z(r);if(a?.color===o&&a.kind===A.Drainer&&!$(a))return t}}l(hg,"opponentAwakeDrainerLocation");function bg(e,n,o){let t=o===A.Mystic?ct(n):lt(n),r=2147483647;for(let a of t)r=Math.min(r,se(e,a));return r}l(bg,"minimumStepsToAttackSource");function sf(e,n){let o=[],t=hg(e,n);if(t===void 0)return o;let r=Math.max(0,le-e.monsMovesCount);if(r<=0)return o;let a=X(n),i=e.board.findAwakeAngel(a),s=i!==void 0&&se(i,t)===1,u=[];for(let[c,p]of e.board.entries())p.kind==="consumable"&&p.consumable===q.BombOrPotion&&u.push(c);for(let[c,p]of e.board.entries()){let m=z(p);if(m?.color!==n||$(m))continue;if(p.kind==="mon-with-consumable"&&p.consumable===q.Bomb&&se(c,t)<=r+3){o.push(c);continue}if(!s&&(m.kind===A.Mystic||m.kind===A.Demon)&&bg(c,t,m.kind)<=r){o.push(c);continue}for(let f of u){let y=se(c,f);if(y>r)continue;let S=r-y;if(se(f,t)<=S+3){o.push(c);break}}}return o}l(sf,"potentialDrainerAttackerLocations");function Cg(e,n){return sf(e,n).length>0}l(Cg,"hasPotentialDrainerAttacker");function Mg(e,n){return e.activeColor===n&&e.playerCanUseAction()&&Cg(e,n)}l(Mg,"approximateCanAttackOpponentDrainerThisTurn");function YC(e,n,o){let t=XC(n,o);if(t===void 0||$(t.mon)||lo(e,n,o))return!1;let r=yn(n.board),a=n.board.findAwakeAngel(o),i=a!==void 0&&se(a,t.location)===1;return ha(e,n.board,r,o,t.location,i)}l(YC,"isOwnDrainerWalkVulnerable");function BC(e,n){let o=0,t=mr;for(let[r,a]of e.board.entries()){if(a.kind!=="mon-with-mana"||a.mon.color!==n||$(a.mon))continue;o+=1;let i=Math.max(Math.min(r.i,10-r.i),Math.min(r.j,10-r.j));t=Math.min(t,i)}return[o,t]}l(BC,"carrierSnapshot");function kg(e,n,o){let[t,r]=BC(e,o),[a,i]=BC(n,o);return a>t||i<r&&i<mr}l(kg,"hasCarrierProgress");function Rg(e,n){return e.board.base({kind:A.Spirit,color:n,cooldown:0})}l(Rg,"spiritBase");function Pg(e,n){let o=Rg(e,n);for(let[t,r]of e.board.entries()){let a=z(r);if(!Ie(t,o)&&a?.kind===A.Spirit&&a.color===n&&!$(a))return!0}return!1}l(Pg,"hasAwakeSpiritOffBase");function QC(e,n,o,t){return t.some(r=>r.kind==="spirit-target-move")||lu(e,o)&&Pg(n,o)}l(QC,"hasSpiritDevelopment");function Tg(e,n,o,t){return t.some(r=>r.kind==="mana-scored")||Ke(n,o)>Ke(e,o)}l(Tg,"isImmediateScore");function ZC(e,n){return e.some(o=>o.kind==="mon-fainted"&&o.mon.kind===A.Drainer&&o.mon.color===X(n))}l(ZC,"attacksDrainer");function uf(e,n,o,t,r=lo(e,n,t),a=lo(e,o.game,t)){let i=Tg(n,o.game,t,o.events),s=ZC(o.events,t),u=r&&!a,c=kg(n,o.game,t),p=Mu(o.events),m=QC(n,o.game,t,o.events);return{immediateScore:i,drainerAttack:s,drainerSafetyRecover:u,carrierProgress:c,material:p,quiet:!i&&!s&&!u&&!c&&!p&&!m}}l(uf,"classifyTransition");function cf(e,n,o){let t=0;for(let r of o)switch(r.kind){case"mana-scored":t+=e===n?780:-780;break;case"pickup-mana":t+=e===n?230:-230;break;case"mon-fainted":t+=r.mon.color===n?-360:360;break;case"use-potion":t+=e===n?-80:80;break;case"pickup-bomb":case"pickup-potion":t+=e===n?45:-45;break;default:break}return t}l(cf,"orderingEventBonus");function LC(e,n){return e.some(o=>o.kind==="mana-scored"&&n(o.mana))}l(LC,"scoresMana");function GC(e,n){return e.some(o=>o.kind==="pickup-mana"&&n(o.mana))}l(GC,"picksUpMana");function VC(e,n,o){return e.some(t=>t.kind==="mana-move"&&o(t.mana)&&dr(t.to,n)<dr(t.from,n))}l(VC,"manaMovedToward");function lf(e,n,o){return e.some(t=>t.kind==="spirit-target-move"&&t.item.kind==="mana"&&o(t.item.mana)&&dr(t.to,n)<dr(t.from,n))}l(lf,"spiritMovesManaToward");function mc(e,n,o,t){let r=yn(n.board);for(let[a,i]of n.board.entries())if(i.kind==="mon-with-mana"&&i.mon.kind===A.Drainer&&i.mon.color===o&&!$(i.mon)&&Je(i.mana,t))return Qs(e,n.board,r,o,a);return!1}l(mc,"safeCarrierForMana");function Ql(e,n,o,t,r){return lf(o,t,a=>Je(a,r))||o.some(a=>a.kind==="spirit-target-move"&&a.item.kind==="mana"&&Je(a.item.mana,r))&&mc(e,n,t,r)}l(Ql,"spiritManaSetup");function HC(e,n,o){let t;for(let[r,a]of e.board.entries()){if(a.kind==="mon-with-mana"&&a.mon.color===n&&a.mon.kind===A.Drainer&&!$(a.mon)&&Je(a.mana,o)){t=0;continue}if(!(a.kind!=="mon"&&a.kind!=="mon-with-consumable")&&!(a.mon.color!==n||a.mon.kind!==A.Drainer||$(a.mon)))for(let[i,s]of e.board.entries()){if(s.kind!=="mana"||!Je(s.mana,o))continue;let u=se(r,i);t=t===void 0?u:Math.min(t,u)}}return t}l(HC,"approximateSpecificManaProgressSteps");function wg(e,n){let o;for(let[t,r]of e.board.entries()){if(r.kind!=="mon-with-mana"||r.mon.color!==n||$(r.mon))continue;let a=Math.max(0,ql(t)-1);o=o===void 0?a:Math.min(o,a)}return o}l(wg,"approximateBestCarrierSteps");function pf(e,n,o,t=!1){let r=t?ka(e,n).colorSummary(o):void 0,a=Math.max(0,le-n.monsMovesCount),i=HC(n,o,{kind:"supermana"}),s=HC(n,o,{kind:"regular",color:X(o)});return{canAttackOpponentDrainer:!1,safeSupermanaProgress:i!==void 0&&i<=a,safeSupermanaProgressSteps:i,safeOpponentManaProgress:s!==void 0&&s<=a,safeOpponentManaProgressSteps:s,spiritAssistedSupermanaProgress:!1,spiritAssistedOpponentManaProgress:!1,spiritAssistedScore:!1,spiritAssistedDenial:!1,sameTurnScoreWindowValue:r?.immediateWindow.bestScore??Kl(n,o),scorePathBestSteps:r?.scorePathWindow.bestSteps??wg(n,o)}}l(pf,"approximateActiveTurnSummary");function JC(e,n){let o=n.activeColor,t=pf(e,n,o);return t.sameTurnScoreWindowValue>0||Mg(n,o)||t.safeSupermanaProgress||t.safeOpponentManaProgress}l(JC,"hasProTacticalPotential");function vg(e,n,o,t,r){if(n.activeColor===o)return t?Xc(e,n,o):pf(e,n,o,r)}l(vg,"rootTurnSummary");function eM(e,n,o,t){let r=0;return o&&(r+=80),t&&(r+=48),n&&(r+=24),e?.spiritAssistedScore&&(r+=72),e?.spiritAssistedDenial&&(r+=40),e?.spiritAssistedSupermanaProgress&&(r+=36),e?.spiritAssistedOpponentManaProgress&&(r+=36),r+=Math.max(0,e?.sameTurnScoreWindowValue??0)*20,e?.safeSupermanaProgressSteps!==void 0&&(r+=Math.max(0,12-Math.min(12,e.safeSupermanaProgressSteps))*4),e?.safeOpponentManaProgressSteps!==void 0&&(r+=Math.max(0,12-Math.min(12,e.safeOpponentManaProgressSteps))*4),e?.scorePathBestSteps!==void 0&&(r+=Math.max(0,8-Math.min(8,e.scorePathBestSteps))*3),r}l(eM,"liveSpiritSetupGain");function UC(e,n){if(e>=mr||n<=0)return 0;let o=Math.max(0,Math.min(le,e));return(le-o)*n}l(UC,"rootProgressBonus");function gg(e,n){let o=0;return n.scoresSupermanaThisTurn?o=g(o,Math.max(0,e.evaluation.supermanaScoreBonus)):n.supermanaProgress&&!n.ownDrainerVulnerable&&(o=g(o,Math.max(0,e.evaluation.supermanaProgressBonus)),o=g(o,UC(n.safeSupermanaProgressSteps,8))),n.scoresOpponentManaThisTurn?o=g(o,Math.max(0,e.evaluation.opponentManaScoreBonus)):n.opponentManaProgress&&!n.ownDrainerVulnerable&&(o=g(o,Math.max(0,e.evaluation.opponentManaProgressBonus)),o=g(o,UC(n.safeOpponentManaProgressSteps,6))),n.manaHandoffToOpponent&&(o=j(o,Math.max(0,e.evaluation.softManaHandoffPenalty))),n.hasRoundtrip&&(o=j(o,Math.max(0,e.evaluation.softRoundtripPenalty))),o}l(gg,"rootSoftPriority");function Ag(e){return e.some(n=>["mana-move","mana-scored","pickup-mana","mana-dropped","supermana-back-to-base"].includes(n.kind))}l(Ag,"rootTransitionRequiresExactLiteProgress");function Eg(e){return e.some(n=>n.kind==="spirit-target-move"||n.kind==="mon-move"&&z(n.item)?.kind===A.Spirit)}l(Eg,"rootTransitionRequiresExactLiteSpiritWindow");function jC(e){return Ag(e)||Eg(e)}l(jC,"transitionRequiresExactLite");function KC(e,n,o,t){let r=e.budget.exactLiteRootCalls,a=e.budget.exactLiteStaticCalls;return e.search.exactLiteChecks&&r>0&&jC(o.events)&&(t.rootCalls>0?t.rootCalls-=1:r=0),e.search.exactLiteChecks&&a>0&&o.game.activeColor===n&&(t.staticCalls>0?t.staticCalls-=1:a=0),r=Math.min(r,t.rootCalls),a=Math.min(a,t.staticCalls),we(e,{budget:{exactLiteRootCalls:r,exactLiteStaticCalls:a},search:{exactRootAnalysis:e.search.exactLiteChecks?r>0&&jC(o.events):e.search.exactRootAnalysis}})}l(KC,"withExactLiteBudgetedTransitionConfig");function nM(e,n,o){let t=pe(n);return zl(e,n,o,!1,!1,t)}l(nM,"rootCandidateSourceSnapshot");function af(e,n,o,t,r,a,i){if(e.session.checkpoint())return;let s=o.game,u=pe(s),c=$l(e,n,s,t,o.events,i(),u,{isRoot:!0,applyBacktrackPenalty:!0,applyRootManaHandoffGuard:!0,includeTacticalExact:!1,includeStrategicExact:!1,rootBacktrackPenalty:r.evaluation.rootBacktrackPenalty,rootManaHandoffPenalty:r.evaluation.rootManaHandoffPenalty});if(e.session.checkpoint())return;let p=lo(e,s,t),m=!1,d=uf(e,n,o,t,a,p),f=LC(o.events,Ve=>Ve.kind==="supermana"),y=LC(o.events,Ve=>Ve.kind==="regular"&&Ve.color!==t),S=GC(o.events,Ve=>Ve.kind==="supermana"),C=GC(o.events,Ve=>Ve.kind==="regular"&&Ve.color!==t),b=vg(e,s,t,r.search.exactRootAnalysis,r.search.exactLiteChecks&&r.budget.exactLiteStaticCalls>0),k=S&&mc(e,s,t,{kind:"supermana"}),M=C&&mc(e,s,t,{kind:"regular",color:X(t)}),P=Ql(e,s,o.events,t,{kind:"supermana"}),T=Ql(e,s,o.events,t,{kind:"regular",color:X(t)}),v=f||S||VC(o.events,t,Ve=>Ve.kind==="supermana")||P||(b?.safeSupermanaProgress??!1)||(b?.spiritAssistedSupermanaProgress??!1),I=y||C||VC(o.events,t,Ve=>Ve.kind==="regular"&&Ve.color!==t)||T||(b?.safeOpponentManaProgress??!1)||(b?.spiritAssistedOpponentManaProgress??!1)||(b?.spiritAssistedDenial??!1),E=b?.safeSupermanaProgressSteps??mr,x=b?.safeOpponentManaProgressSteps??mr,N=b?.scorePathBestSteps??rf,B=b?.sameTurnScoreWindowValue??0,W=QC(n,s,t,o.events),V=o.events.some(Ve=>Ve.kind==="spirit-target-move")&&s.activeColor===t&&B>0,Q=lf(o.events,t,Ve=>Ve.kind==="regular"&&Ve.color===t)||P||T,U=eM(b,W,V,Q),ce=s.winnerColor()===t,Ae=d.drainerAttack,pn=!(ce||Ae||f||y||b?.spiritAssistedScore===!0)&&Xa(o.events,t,Math.max(0,r.evaluation.rootManaHandoffPenalty))>0,dn=$a(o.events),Ge=gg(r,{supermanaProgress:v,opponentManaProgress:I,safeSupermanaProgressSteps:E,safeOpponentManaProgressSteps:x,scoresSupermanaThisTurn:f,scoresOpponentManaThisTurn:y,ownDrainerVulnerable:p,manaHandoffToOpponent:pn,hasRoundtrip:dn}),_n=fc(s,t,Math.max(0,r.budget.depth-1),r.budget.depth),Fe=_n??Dr(e,s,t,r.evaluation.weights,!1);Fe=g(Fe,cf(n.activeColor,t,o.events)),Fe=g(Fe,Ge);let Ho=o.events.some(Ve=>Ve.kind==="use-potion"),st=ce||Ae||Ke(s,t)>=Ke(n,t)+2||f||y||b?.spiritAssistedScore===!0||!p&&(v||I);return Ho&&!st&&(Fe=j(Fe,Math.max(0,r.evaluation.potionSpendPenalty))),_n===void 0&&(Fe=Gc(Fe)),{inputs:o.inputs,game:s,events:o.events,stateHash:u,heuristic:Fe,efficiency:c,winsImmediately:ce,attacksOpponentDrainer:Ae,ownDrainerVulnerable:p,ownDrainerWalkVulnerable:m,spiritDevelopment:W,keepsAwakeSpiritOnBase:lu(n,t)&&lu(s,t),manaHandoffToOpponent:pn,hasRoundtrip:dn,scoresSupermanaThisTurn:f,scoresOpponentManaThisTurn:y,safeSupermanaPickupNow:k,safeOpponentManaPickupNow:M,safeSupermanaProgressSteps:E,safeOpponentManaProgressSteps:x,scorePathBestSteps:N,sameTurnScoreWindowValue:B,spiritSetupGain:U,spiritSameTurnScoreSetupNow:V,spiritOwnManaSetupNow:Q,supermanaProgress:v,opponentManaProgress:I,policyPriority:Ge,classes:d}}l(af,"buildRootCandidate");function oM(e,n,o,t,r){let a=[...r],i=Sn(n,a);if(i===void 0)return;let s=af(e,n,{inputs:a,game:i.game,events:i.events},o,t,lo(e,n,o),()=>nM(e,n,o));return s===void 0?void 0:{...s,rootRank:0}}l(oM,"buildRootCandidateForInputs");function it(e,n){return e===n?0:e?-1:1}l(it,"compareBooleanPreferred");function Xl(e,n){let o=e<mr,t=n<mr;return o!==t?o?-1:1:o?e-n:0}l(Xl,"progressStepsOrder");function Og(e,n){let o=e<rf,t=n<rf;return o!==t?o?-1:1:o?e-n:0}l(Og,"scorePathStepsOrder");function tM(e,n){let o=it(e.winsImmediately,n.winsImmediately);if(o!==0||(o=it(e.attacksOpponentDrainer,n.attacksOpponentDrainer),o!==0)||(o=it(!e.ownDrainerVulnerable,!n.ownDrainerVulnerable),o!==0)||(o=it(e.classes.immediateScore,n.classes.immediateScore),o!==0))return o;for(let t of[[e.scoresSupermanaThisTurn,n.scoresSupermanaThisTurn],[e.scoresOpponentManaThisTurn,n.scoresOpponentManaThisTurn],[e.safeSupermanaPickupNow,n.safeSupermanaPickupNow],[e.safeOpponentManaPickupNow,n.safeOpponentManaPickupNow]])if(o=it(t[0],t[1]),o!==0)return o;return e.sameTurnScoreWindowValue!==n.sameTurnScoreWindowValue?n.sameTurnScoreWindowValue-e.sameTurnScoreWindowValue:(o=it(e.spiritSameTurnScoreSetupNow,n.spiritSameTurnScoreSetupNow),o!==0||(o=it(e.spiritOwnManaSetupNow,n.spiritOwnManaSetupNow),o!==0)||e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.supermanaProgress&&n.supermanaProgress&&(o=Xl(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps),o!==0)||e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&e.opponentManaProgress&&n.opponentManaProgress&&(o=Xl(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps),o!==0)||e.spiritOwnManaSetupNow&&n.spiritOwnManaSetupNow&&(o=Og(e.scorePathBestSteps,n.scorePathBestSteps),o!==0)||(o=it(e.supermanaProgress,n.supermanaProgress),o!==0)||e.supermanaProgress&&n.supermanaProgress&&(o=Xl(e.safeSupermanaProgressSteps,n.safeSupermanaProgressSteps),o!==0)||(o=it(e.opponentManaProgress,n.opponentManaProgress),o!==0)||e.opponentManaProgress&&n.opponentManaProgress&&(o=Xl(e.safeOpponentManaProgressSteps,n.safeOpponentManaProgressSteps),o!==0)||(o=it(!e.manaHandoffToOpponent,!n.manaHandoffToOpponent),o!==0)||(o=it(!e.hasRoundtrip,!n.hasRoundtrip),o!==0)||(o=it(e.spiritDevelopment,n.spiritDevelopment),o!==0)?o:e.efficiency!==n.efficiency?n.efficiency-e.efficiency:n.heuristic-e.heuristic)}l(tM,"tacticalRootOrder");function Zl(e,n){if(e.heuristic!==n.heuristic)return n.heuristic-e.heuristic;let o=tM(e,n);return o!==0?o:Eo(e.inputs,n.inputs)}l(Zl,"compareRootCandidates");function Ig(e,n){switch(n){case 0:return e.classes.immediateScore;case 1:return e.classes.drainerAttack;default:return e.classes.drainerSafetyRecover}}l(Ig,"hasPriorityClass");function xg(e,n){if(e.length<=n)return[...e];if(n<=0)return[];let o=new Set,t=[],r=l(c=>{o.add(c),t.includes(c)||t.push(c)},"markPriority");for(let c=0;c<3;c+=1){let p=e.findIndex(m=>Ig(m,c));p>=0&&r(p)}let a=-1;for(let c=0;c<e.length;c+=1){let p=e[c];if(p===void 0||p.sameTurnScoreWindowValue<=0)continue;let m=e[a];(m===void 0||tM(p,m)<0)&&(a=c)}a>=0&&r(a);for(let c=0;c<e.length;c+=1){let p=e[c];if(p===void 0)continue;let m=p.scoresSupermanaThisTurn||p.scoresOpponentManaThisTurn||p.safeSupermanaPickupNow||p.safeOpponentManaPickupNow||p.spiritSameTurnScoreSetupNow||p.sameTurnScoreWindowValue>0||p.spiritOwnManaSetupNow,d=p.supermanaProgress&&p.safeSupermanaProgressSteps<mr||p.opponentManaProgress&&p.safeOpponentManaProgressSteps<mr;(m||d)&&o.add(c)}let i=[],s=new Set,u=l(c=>{if(i.length>=n||s.has(c))return;let p=e[c];p!==void 0&&(i.push(p),s.add(c))},"append");for(let c of t)u(c);for(let c=0;c<e.length;c+=1)o.has(c)&&u(c);for(let c=0;c<e.length;c+=1)u(c);return i}l(xg,"truncateWithClassCoverage");function Yl(e,n){let o=new Set(e.map(t=>An(t.inputs)));for(let t of n)o.has(An(t.inputs))||(o.add(An(t.inputs)),e.push(t))}l(Yl,"appendUniqueTransitions");function Ng(e){return e.budget.depth>=3?dg:pg}l(Ng,"forcedAttackCandidatesLimit");function Dg(e){return e.budget.depth>=3?fg:mg}l(Dg,"forcedAttackNodeBudget");function _g(e){return e.budget.depth>=3?Sg:yg}l(_g,"forcedAttackEnumLimit");function Fg(e){return e.budget.depth>=3?8:4}l(Fg,"spiritSetupFallbackCandidatesLimit");function Wg(e){return e.budget.depth>=3?256:128}l(Wg,"spiritSetupFallbackEnumLimit");function qC(e){return e.budget.depth>=3?8:4}l(qC,"safeDrainerPickupFallbackCandidatesLimit");function Bg(e){return e.budget.depth>=3?8:4}l(Bg,"drainerSafetyFallbackCandidatesLimit");function Lg(e){return e.budget.depth>=3?192:96}l(Lg,"drainerSafetyFallbackEnumLimit");function Gg(e){return e.budget.depth>=3?24:12}l(Gg,"genericRootFallbackEnumLimit");function df(e,n,o){let t=[];for(let[r,a]of e.board.entries()){let i=z(a);i?.color===n&&!$(i)&&(o===void 0||i.kind===o)&&t.push(r)}return t}l(df,"awakeMonLocations");function rM(e,n,o,t){return lf(o,t,r=>r.kind==="regular"&&r.color===t)||Ql(e,n,o,t,{kind:"supermana"})||Ql(e,n,o,t,{kind:"regular",color:X(t)})}l(rM,"hasSpiritScoringManaSetup");function Vg(e,n,o,t,r){if(e.session.checkpoint()||!n.playerCanUseAction())return[];let a=df(n,o,A.Spirit);if(a.length===0)return[];let i=Math.max(1,r),s=[];for(let u of a){if(e.session.checkpoint())return[];if(s.length>=i)break;let c=tl(e,n,Wg(t),Yn,[u]);if(e.session.cancelled)return[];for(let p of c){if(e.session.checkpoint())return[];if(s.length>=i)break;rM(e,p.game,p.events,o)&&s.push(p)}}return s}l(Vg,"collectTargetedSpiritSetupInputs");function Hg(e,n,o,t,r){if(e.session.checkpoint())return[];let a=df(n,o);if(a.length===0)return[];let i=Math.max(1,r),s=[],u=new Set;for(let c of a){if(e.session.checkpoint())return[];if(s.length>=i)break;let p=tl(e,n,Lg(t),Yn,[c]);if(e.session.cancelled)return[];for(let m of p){if(e.session.checkpoint())return[];if(s.length>=i)break;if(lo(e,m.game,o))continue;let d=An(m.inputs);u.has(d)||(u.add(d),s.push(m))}}return s.sort((c,p)=>Eo(c.inputs,p.inputs)),s}l(Hg,"collectTargetedDrainerSafetyInputs");function aM(e,n){return e.some(o=>o.kind==="pickup-mana"&&Je(o.mana,n))}l(aM,"eventsPickupWantedMana");function Ug(e,n){return e.some(o=>o.kind==="mana-scored"&&Je(o.mana,n))}l(Ug,"eventsScoreWantedMana");function zC(e,n,o,t){return aM(n.events,t)&&mc(e,n.game,o,t)}l(zC,"transitionHasSafeDrainerPickup");function $C(e,n,o,t,r){if(e.session.checkpoint()||!n.playerCanMoveMon())return[];let a=df(n,o,A.Drainer);if(a.length===0)return[];let i=Math.max(1,t),s=[],u=new Set;for(let c of a){if(e.session.checkpoint())return[];if(s.length>=i)break;let p=Js(e,n,o,c,r);if(e.session.cancelled)return[];if(p===void 0||p.length===0)continue;let m=[{kind:"location",location:{i:c.i,j:c.j}},...p.map(f=>({kind:"location",location:{i:f.i,j:f.j}}))],d=Sn(n,m);if(d!==void 0&&aM(d.events,r)&&(mc(e,d.game,o,r)||Ug(d.events,r))){let f=An(m);u.has(f)||(u.add(f),s.push({inputs:m,game:d.game,events:d.events}))}}return s.sort((c,p)=>Eo(c.inputs,p.inputs)),s}l($C,"collectTargetedSafeDrainerPickupInputs");function jg(e,n){return e.playerCanMoveMon()&&sf(e,n).length>0}l(jg,"canAttemptForcedDrainerAttackFallback");function Kg(e,n,o,t,r){if(e.session.checkpoint()||n.activeColor!==o||t.remaining===0)return!1;let a=pe(n);if(r.has(a))return!0;t.remaining=Math.max(0,t.remaining-1);let i=fd(e,n,o);return i&&e.session.cacheWriteAllowed&&r.add(a),i}l(Kg,"canAttackOpponentDrainerBeforeTurnEnds");function qg(e,n,o,t,r,a){if(e.session.checkpoint())return[];let i=a?sf(n,o):void 0;if(a&&i?.length===0)return[];let s=a?2:1,u=_g(t)*s,c={remaining:Dg(t)*s},p=new wo(Math.max(1,c.remaining)),m=tl(e,n,u,Yn,i);if(e.session.checkpoint())return[];let d=Math.max(1,r),f=[];for(let y of m){if(e.session.checkpoint())return[];if(f.length>=d)break;if(ZC(y.events,o)){f.push(y);continue}y.game.activeColor===o&&Kg(e,y.game,o,c,p)&&f.push(y)}return f}l(qg,"collectDrainerAttackInputs");function ko(e,n,o,t){if(e.session.checkpoint())return[];let r=n.fen(),a=lo(e,n,o),i=Ao(e,n,t.search.rootEnumerationLimit,Yn);if(a&&!i.some(M=>!lo(e,M.game,o))&&Yl(i,Hg(e,n,o,t,Bg(t))),e.session.checkpoint())return[];let s=pf(e,n,o,!1),u=eM(s,!1,!1,!1);if(e.session.checkpoint())return[];let c={kind:"supermana"};if(s.safeSupermanaProgress&&!i.some(M=>zC(e,M,o,c))&&Yl(i,$C(e,n,o,qC(t),c)),e.session.checkpoint())return[];let p={kind:"regular",color:X(o)};if(s.safeOpponentManaProgress&&!i.some(M=>zC(e,M,o,p))&&Yl(i,$C(e,n,o,qC(t),p)),e.session.checkpoint())return[];if((t.policy.hardSpiritDeployment||t.policy.preferSpiritDevelopment)&&(Wi(n,o)||u>0||s.spiritAssistedSupermanaProgress||s.spiritAssistedOpponentManaProgress)&&!i.some(M=>rM(e,M.game,M.events,o))&&Yl(i,Vg(e,n,o,t,Fg(t))),e.session.cancelled)return[];let m={rootCalls:t.budget.exactLiteRootCalls,staticCalls:t.budget.exactLiteStaticCalls},d,f=l(()=>(d??(d=nM(e,n,o)),d),"getSourceSnapshot"),y=[],S=l(M=>{for(let P of M){if(e.session.checkpoint())return!1;let T=KC(t,o,P,m),v=af(e,n,P,o,T,a,f);if(e.session.checkpoint())return!1;v!==void 0&&y.push(v)}return!0},"appendCandidates");if(!S(i))return[];if(y.length===0){let M=Ao(e,n,Gg(t),Yn);if(e.session.checkpoint()||!S(M))return[]}let C=y.map((M,P)=>({...M,rootRank:P}));C.sort(Zl);let b=C.some(M=>M.winsImmediately),k;if(!b&&!C.some(M=>M.attacksOpponentDrainer)&&jg(n,o)){let M=qg(e,n,o,t,Ng(t),t.policy.targetedDrainerAttackFallback);if(e.session.checkpoint())return[];if(M.length>0){k=new Set(M.map(T=>An(T.inputs)));let P=new Set(C.map(T=>An(T.inputs)));for(let T of M){if(e.session.checkpoint())return[];let v=An(T.inputs);if(P.has(v))continue;P.add(v);let I=KC(t,o,T,m),E=af(e,n,T,o,I,a,f);if(e.session.checkpoint())return[];E!==void 0&&C.push({...E,rootRank:0})}C.sort(Zl),b=C.some(T=>T.winsImmediately)}}if(!b&&C.some(M=>M.attacksOpponentDrainer)?C=C.filter(M=>M.attacksOpponentDrainer):k!==void 0&&(C=C.filter(M=>k.has(An(M.inputs)))),C=xg(C,t.search.rootBranchLimit),C=C.map((M,P)=>({...M,rootRank:P})),n.fen()!==r)throw new Error("root candidate enumeration mutated its source game");return e.session.checkpoint()?[]:C}l(ko,"rankRootCandidates");function fc(e,n,o,t){let r=e.winnerColor();if(r===void 0)return;let a=Math.max(0,t-o);return r===n?268435455-a:-268435455+a}l(fc,"terminalSearchScore");var zg=2400,iM=110,$g=32768,Xg=Symbol("preferability-cache");function uM(e){return e.caches.session.getOrCreate(Xg,()=>new Ee($g))}l(uM,"preferabilityCache");function ff(e,n,o,t,r,a=pe(n)){let i=uM(e),s=on(o),u=Fi(t.evaluation.weights),c=i.get(a,s,void 0,u);if(c!==void 0)return r.cacheHits+=1,c;let p=Dr(e,n,o,t.evaluation.weights,!1);return e.session.cacheWriteAllowed&&(i.size>=t.evaluation.cacheCapacity&&!i.has(a,s,void 0,u)&&i.clear(),i.set(a,p,s,void 0,u)),p}l(ff,"cachedPreferability");function sM(e){let n=0;return e.immediateScore&&(n+=1e3),e.drainerAttack&&(n+=700),e.drainerSafetyRecover&&(n+=500),e.carrierProgress&&(n+=220),e.material&&(n+=80),n}l(sM,"classPriority");function Yg(e,n){return-Xy(e,n)}l(Yg,"compareHashesDescending");function Qg(e,n,o){if(e.heuristic!==n.heuristic)return o?n.heuristic-e.heuristic:e.heuristic-n.heuristic;if(e.orderingEfficiency!==n.orderingEfficiency)return n.orderingEfficiency-e.orderingEfficiency;let t=sM(n.classes)-sM(e.classes);return t!==0?t:Yg(e.hash,n.hash)}l(Qg,"compareRankedChildren");function cM(e,n,o){return o?g(e,iM)>=n:e<=g(n,iM)}l(cM,"childWithinCoverageMargin");function mf(e){return e.classes.immediateScore||e.classes.drainerAttack||e.classes.drainerSafetyRecover||e.classes.carrierProgress||e.orderingEfficiency>0&&!e.classes.material}l(mf,"isPriorityChild");function Zg(e,n,o,t=!0){if(e.length<=n||n===0)return[...e];let r=e[n-1]?.heuristic??0,a=e.findIndex((u,c)=>c>=n&&mf(u)&&(t||cM(u.heuristic,r,o)));if(a<0)return e.slice(0,n);let i=new Array(e.length).fill(!1);i[a]=!0;let s=1;for(let u=0;u<i.length&&!(s>=n);u+=1)i[u]!==!0&&(i[u]=!0,s+=1);return e.filter((u,c)=>i[c]===!0)}l(Zg,"truncateChildrenWithCoverage");function Jg(e,n,o=!0){if(e.length<3||e.slice(0,2).some(mf))return;let t=e[1]?.heuristic??0,r=e.findIndex((a,i)=>i<2||!mf(a)?!1:o||cM(a.heuristic,t,n));if(r>=2){let a=e[1],i=e[r];a!==void 0&&i!==void 0&&(e[1]=i,e[r]=a)}}l(Jg,"enforceTacticalChildTop2");function eA(e,n,o){return!o.material&&e<=0&&!n&&!o.immediateScore&&!o.drainerAttack&&!o.drainerSafetyRecover&&!o.carrierProgress}l(eA,"isQuietReductionCandidate");function nA(e,n,o){return e||n>0&&!o.quiet&&!o.material}l(nA,"isSelectiveExtensionCandidate");function oA(e,n,o,t){if(n.execution.session.checkpoint())return[];let r=e.activeColor===n.perspective,a=e.activeColor,i=zl(n.execution,e,n.perspective,!1,!1,o),s=lo(n.execution,e,a),u=[];for(let c of Ao(n.execution,e,n.config.search.nodeEnumerationLimit)){if(n.execution.session.checkpoint())return[];let p=pe(c.game),m=lo(n.execution,c.game,a),d=uf(n.execution,e,c,a,s,m),f=$l(n.execution,e,c.game,a,c.events,i,p,{isRoot:!1,applyBacktrackPenalty:!1,applyRootManaHandoffGuard:!1,includeTacticalExact:!1,includeStrategicExact:!1,rootBacktrackPenalty:n.config.evaluation.rootBacktrackPenalty,rootManaHandoffPenalty:n.config.evaluation.rootManaHandoffPenalty}),y=fc(c.game,n.perspective,0,n.config.budget.depth)??ff(n.execution,c.game,n.perspective,n.config,n.stats,p);y=g(y,cf(a,n.perspective,c.events)),t!==void 0&&ed(p,t)&&(y=g(y,zg));let S=s!==m||c.events.some(C=>C.kind==="mana-scored"||C.kind==="mon-fainted"&&C.mon.kind===A.Drainer);u.push({game:c.game,hash:p,heuristic:y,orderingEfficiency:f,tacticalExtensionTrigger:S,quietReductionCandidate:eA(f,S,d),classes:d})}return u.sort((c,p)=>Qg(c,p,r)),Jg(u,r,!0),Zg(u,n.config.search.nodeBranchLimit,r,!0)}l(oA,"rankedChildren");function hs(e,n,o){return fc(e,o.perspective,0,o.config.budget.depth)??ff(o.execution,e,o.perspective,o.config,o.stats,n)}l(hs,"staticScore");function tA(e,n,o,t,r){let a=hs(e,n,r),i=e.activeColor===r.perspective;if(i&&a>=t||!i&&a<=o)return a;r.stats.quiescenceNodes+=1;let s=a,u=i?Math.max(o,s):Math.min(t,s);for(let c of Ao(r.execution,e,Math.min(r.config.search.quiescenceEnumerationLimit,r.config.search.nodeEnumerationLimit))){if(r.stats.visitedNodes>=r.config.budget.maxVisitedNodes||r.execution.session.checkpoint())break;if(!ph(c.events))continue;r.stats.visitedNodes+=1;let p=pe(c.game),m=ff(r.execution,c.game,r.perspective,r.config,r.stats,p);if(s=i?Math.max(s,m):Math.min(s,m),u=i?Math.max(u,s):Math.min(u,s),i&&u>=t||!i&&u<=o)break}return s}l(tA,"quiescenceScore");function Jl(e,n,o,t,r,a,i){let s=fc(e,i.perspective,o,i.config.budget.depth);if(s!==void 0)return s;if(i.execution.session.checkpoint())return 0;if(i.stats.visitedNodes>=i.config.budget.maxVisitedNodes)return hs(e,n,i);if(o<=0)return i.config.search.quiescence&&i.stats.quiescenceNodes<i.config.budget.quiescenceNodes?tA(e,n,t,r,i):hs(e,n,i);let u=t,c=r,p=u,m=c,d,f=i.config.search.transpositionTable?i.transposition.get(n):void 0;if(f!==void 0&&(i.stats.cacheHits+=1,$y(f.bestChildHash)||(d=f.bestChildHash),f.depth>=o&&(f.bound==="exact"||(f.bound==="lower"?u=Math.max(u,f.score):c=Math.min(c,f.score),u>=c))))return f.score;let y=e.activeColor===i.perspective;if(i.config.search.futilityPruning&&o===1&&!JC(i.execution,e)){let M=hs(e,n,i);if(y&&g(M,i.config.search.futilityMargin)<u||!y&&j(M,i.config.search.futilityMargin)>c)return M}let S=oA(e,i,n,d);if(S.length===0)return hs(e,n,i);let C=y?-2147483648:2147483647,b=zy,k=!1;for(let M of S){if(i.stats.visitedNodes>=i.config.budget.maxVisitedNodes){k=!0;break}let P=Math.max(0,o-1),T=a;i.config.search.selectiveExtensions&&nA(M.tacticalExtensionTrigger,M.orderingEfficiency,M.classes)&&T>0&&(i.extensionNodeBudget===0||i.stats.extensionNodes<i.extensionNodeBudget)?(P=o,T-=1,i.extensionNodeBudget>0&&(i.stats.extensionNodes+=1)):i.config.search.quietReductions&&M.quietReductionCandidate&&o>=i.config.search.quietReductionDepthThreshold&&(P=Math.max(0,o-2)),i.stats.visitedNodes+=1;let v=Jl(M.game,M.hash,P,u,c,T,i);if((y&&v>C||!y&&v<C)&&(C=v,b=M.hash),y?u=Math.max(u,C):c=Math.min(c,C),u>=c||i.execution.session.checkpoint())break}if((C===-2147483648||C===2147483647)&&(C=hs(e,n,i)),i.config.search.transpositionTable&&!k&&i.execution.session.cacheWriteAllowed){let M=C<=p?"upper":C>=m?"lower":"exact";i.transposition.size>=i.config.search.transpositionCapacity&&!i.transposition.has(n)&&i.transposition.clear(),i.transposition.set(n,{depth:o,score:C,bound:M,bestChildHash:b})}return C}l(Jl,"boundedSearch");function yf(e,n,o){return{execution:e,perspective:n,config:o,transposition:new Ee(o.search.transpositionCapacity),extensionNodeBudget:o.search.selectiveExtensions?Math.max(1,Math.floor(o.budget.maxVisitedNodes*o.budget.extensionNodeShareBp/1e4)):0,stats:{visitedNodes:0,cacheHits:0,quiescenceNodes:0,extensionNodes:0}}}l(yf,"createSearchContext");function rA(e){let n=pe(e.game);return ed(n,e.stateHash)?e:{...e,stateHash:n}}l(rA,"candidateWithCurrentStateHash");function aA(e,n){return e.score>n.score||e.score===n.score&&Zl(e,n)<0}l(aA,"betterEvaluation");function iA(e,n){let o=[],t,r=-2147483648;for(let a of e){if(n.stats.visitedNodes>=n.config.budget.maxVisitedNodes||n.execution.session.checkpoint())break;n.stats.visitedNodes+=1;let i=n.config.budget.depth<=1?a.heuristic:Jl(a.game,a.stateHash,n.config.budget.depth-1,r,2147483647,n.config.search.maxExtensionsPerPath,n),s={...a,score:i,nodesAfter:n.stats.visitedNodes};o.push(s),(t===void 0||aA(s,t))&&(t=s),r=Math.max(r,i)}return{evaluations:o,best:t}}l(iA,"evaluateFocusedRoots");function lM(e,n,o,t,r){let a=yf(e,o,r),i=pe(n);return Jl(n,i,Math.max(0,t),-2147483648,2147483647,r.search.maxExtensionsPerPath,a)}l(lM,"evaluateSearchScore");function Sf(e,n,o,t,r,a={},i=t.search.transpositionTable){let s=n.fen(),u=r?r.map(rA):ko(e,n,o,t),c,p=fC({rootMoves:u,perspective:o,config:t,useTranspositionTable:i,...a.priorityInputs===void 0?{}:{priorityInputs:a.priorityInputs},...a.forcedInputs===void 0?{}:{forcedInputs:a.forcedInputs},...a.qualifiesPlainSpiritPlan===void 0?{}:{qualifiesPlainSpiritPlan:a.qualifiesPlainSpiritPlan},...a.qualifiesDrainerSafetyRecoveryPlan===void 0?{}:{qualifiesDrainerSafetyRecoveryPlan:a.qualifiesDrainerSafetyRecoveryPlan},evaluateDeeperScout:l(m=>(c??(c=yf(e,o,we(m.config,{search:{transpositionTable:m.useTranspositionTable}}))),c.stats.visitedNodes=Math.max(c.stats.visitedNodes,m.visitedNodes),{score:Jl(m.candidate.game,m.candidate.stateHash,m.depth,m.alpha,2147483647,0,c),visitedNodes:c.stats.visitedNodes}),"evaluateDeeperScout"),checkpoint:l(()=>e.session.checkpoint(),"checkpoint"),cancelled:l(()=>e.session.cancelled,"cancelled")});if(n.fen()!==s)throw new Error("root focus mutated its source game");return{candidates:p.candidates,scoutVisitedNodes:p.scoutVisitedNodes}}l(Sf,"focusRootCandidatesForSearch");function hf(e,n,o,t,r,a={}){let i=n.fen(),s=Sf(e,n,o,t,r,a),u=s.candidates,c=yf(e,o,t);c.stats.visitedNodes=s.scoutVisitedNodes;let{evaluations:p,best:m}=iA(u,c);if(n.fen()!==i)throw new Error("bounded search mutated its source game");return{best:m,evaluations:p,visitedNodes:c.stats.visitedNodes,cacheHits:c.stats.cacheHits,timedOut:c.execution.session.cancelled}}l(hf,"searchRootCandidates");function bf(e){uM(e).clear(),WC(e),qs(e)}l(bf,"clearSearchCaches");function pM(e){return!e.winsImmediately&&!e.attacksOpponentDrainer&&!jm(e)&&!e.spiritDevelopment&&!e.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&!e.supermanaProgress&&!e.opponentManaProgress&&!e.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!e.safeSupermanaPickupNow&&!e.safeOpponentManaPickupNow&&e.sameTurnScoreWindowValue<=0&&!e.manaHandoffToOpponent&&!e.hasRoundtrip}l(pM,"isFlatLateManaOnlyReplyRoot");function yM(e,n,o,t,r,a){if(!_(a)||!a.replyRisk.lateSafeManaRootPreference||e.activeColor!==w.White||e.turnNumber<6||e.monsMovesCount!==0||e.playerCanUseAction()||!e.playerCanMoveMana()||o.allowsImmediateOpponentWin||r.allowsImmediateOpponentWin||o.opponentReachesMatchPoint||r.opponentReachesMatchPoint||!pM(n)||!pM(t))return;let i,s,u;if(!n.ownDrainerVulnerable&&t.ownDrainerVulnerable)i=n,s=t,u=!0;else if(n.ownDrainerVulnerable&&!t.ownDrainerVulnerable)i=t,s=n,u=!1;else return;if(!(s.score<=i.score||j(s.score,i.score)>16||Math.abs(s.rootRank-i.rootRank)>4||s.efficiency<=i.efficiency))return u?1:-1}l(yM,"lateSafeManaRootOrder");function dM(e,n,o,t,r,a){let i=Math.max(0,Ke(n,o)-t),s=n.winnerColor();if(s!==void 0){let S=s===o;return{allowsImmediateOpponentWin:!S,opponentReachesMatchPoint:!S,opponentMaxScoreGain:S?0:xe,myScoreGain:i,worstReplyScore:S?Math.trunc(gn/2):-Math.trunc(gn/2)}}if(n.activeColor===o)return{allowsImmediateOpponentWin:!1,opponentReachesMatchPoint:!1,opponentMaxScoreGain:0,myScoreGain:i,worstReplyScore:Rt(e,n,o,r)};let u=o===w.White?w.Black:w.White,c=Ke(n,u),p=Ao(e,n,Math.max(1,Math.trunc(a)));if(p.length===0)return{allowsImmediateOpponentWin:!1,opponentReachesMatchPoint:!1,opponentMaxScoreGain:0,myScoreGain:i,worstReplyScore:Math.trunc(gn/4)};let m=!1,d=!1,f=0,y=2147483647;for(let S of p){let C=S.game,b=Ke(C,u);f=Math.max(f,Math.max(0,b-c)),xe-b<=1&&(d=!0);let k=C.winnerColor(),M;if(k===o?M=Math.trunc(gn/2):k!==void 0?(m=!0,d=!0,M=-Math.trunc(gn/2)):M=Rt(e,C,o,r),y=Math.min(y,M),m)break}return y===2147483647&&(y=Rt(e,n,o,r)),{allowsImmediateOpponentWin:m,opponentReachesMatchPoint:d,opponentMaxScoreGain:f,myScoreGain:i,worstReplyScore:y}}l(dM,"normalRootSafetySnapshot");function mM(e,n,o,t){return e.allowsImmediateOpponentWin!==o.allowsImmediateOpponentWin?!e.allowsImmediateOpponentWin:e.opponentReachesMatchPoint!==o.opponentReachesMatchPoint?!e.opponentReachesMatchPoint:e.opponentMaxScoreGain!==o.opponentMaxScoreGain?e.opponentMaxScoreGain<o.opponentMaxScoreGain:e.myScoreGain!==o.myScoreGain?e.myScoreGain>o.myScoreGain:e.worstReplyScore!==o.worstReplyScore?e.worstReplyScore>o.worstReplyScore:n>t}l(mM,"betterNormalRootSafetyCandidate");function fM(e){return!e.winsImmediately&&!e.attacksOpponentDrainer&&!jm(e)&&!e.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!e.safeSupermanaPickupNow&&!e.safeOpponentManaPickupNow&&e.sameTurnScoreWindowValue===0}l(fM,"quietNonTacticalReplyRiskRoot");function sA(e,n,o,t,r){if(e.session.checkpoint())return 0;let a=n.winnerColor();if(a!==void 0)return a===o?Math.trunc(gn/2):-Math.trunc(gn/2);if(n.activeColor===o)return Rt(e,n,o,t);let i=l((d,f,y)=>Math.min(y,Math.max(f,Math.trunc(d))),"clamp"),s=i(t.search.nodeBranchLimit,5,12),u=i(Math.max(0,t.search.nodeBranchLimit-4),4,10),c=we(t,{budget:{depth:1,maxVisitedNodes:i(t.budget.maxVisitedNodes/18,110,360)},search:{rootBranchLimit:s,nodeBranchLimit:u,rootEnumerationLimit:i(s*3,s,48),nodeEnumerationLimit:i(u*3,u,36)}}),p=Ao(e,n,Math.max(1,Math.trunc(r)));if(e.session.cancelled)return 0;if(p.length===0)return Math.trunc(gn/4);let m=2147483647;for(let d of p){if(e.session.checkpoint())return 0;let f=d.game.winnerColor(),y=f===o?Math.trunc(gn/2):f!==void 0?-Math.trunc(gn/2):lM(e,d.game,o,1,c);if(e.session.checkpoint())return 0;m=Math.min(m,y)}return m===2147483647?Rt(e,n,o,t):m}l(sA,"normalRootSafetyDeepFloorScore");function SM(e,n,o,t,r,a,i,s){if(!_(s)||!s.replyRisk.safetyRerank||!fM(o)||!fM(r)||Math.abs(o.rootRank-r.rootRank)>8||Math.abs(o.score-r.score)>160||Math.abs(t.worstReplyScore-a.worstReplyScore)>320||!(Z(o)||Z(r)||o.spiritOwnManaSetupNow||r.spiritOwnManaSetupNow||o.spiritSameTurnScoreSetupNow||r.spiritSameTurnScoreSetupNow||Mo(o,r)||qa(o,r,s)))return;let c=Math.min(36,Math.max(12,Math.trunc(s.search.nodeEnumerationLimit))),p=Ke(n,i),m=dM(e,o.game,i,p,s,c),d=dM(e,r.game,i,p,s,c);if(m.allowsImmediateOpponentWin!==d.allowsImmediateOpponentWin||m.opponentReachesMatchPoint!==d.opponentReachesMatchPoint||m.opponentMaxScoreGain!==d.opponentMaxScoreGain||m.myScoreGain!==d.myScoreGain||m.worstReplyScore!==d.worstReplyScore){if(mM(m,o.score,d,r.score))return 1;if(mM(d,r.score,m,o.score))return-1}let y=xe-Ke(n,i),S=xe-Ke(n,i===w.White?w.Black:w.White);if(s.replyRisk.deepSafetyFloor&&(y<=3||S<=3)){let C=l(M=>sA(e,M,i,s,c),"floor"),b=C(o.game),k=C(r.game);if(b!==k)return b>k?1:-1}}l(SM,"normalSafetyReplyOrder");function Xr(e){return rr.length-ho(e)-1}l(Xr,"closeSpiritGoalFamilyPriority");function uA(e,n){return e.plan.headFamily!==h.SpiritImpact||n.plan.headFamily!==h.SpiritImpact?0:Xr(e.plan.goalFamily)-Xr(n.plan.goalFamily)}l(uA,"compareCloseSpiritGoalFamily");function Yr(e,n,o){if(o){let t=te(e.plan.headUtility,n.plan.headUtility);if(t!==0||(t=te(e.plan.utility,n.plan.utility),t!==0))return t;let r=e.plan.headFamily===h.SpiritImpact,a=n.plan.headFamily===h.SpiritImpact;if(r!==a)return r?1:-1;if(t=uA(e,n),t!==0)return t}return _o(e.plan,n.plan)}l(Yr,"compareSpiritProjectionPlans");function yc(e,n,o,t,r){if(!_(r))return;let a=n.plan.headFamily===h.SpiritImpact,i=t.plan.headFamily===h.SpiritImpact;if(a===i)return;let s=a?o:e,u=a?t:n,c=a?e:o,p=a?n:t,m=Xr(p.plan.goalFamily),d=Xr(u.plan.goalFamily);if(!(m>Xr(h.SpiritImpact)||d<m||s.worstReplyScore<g(c.worstReplyScore,128)||te(u.plan.utility,p.plan.utility)<0&&!Do(u.plan.utility,p.plan.utility)))return a?-1:1}l(yc,"mixedPlainSpiritReplyFloorOrder");function Cf(e,n,o,t,r,a,i,s,u,c){if(!Gn(u))return;let p=r.plan.headFamily===h.SpiritImpact,m=i.plan.headFamily===h.SpiritImpact;if(p===m)return;let d=o[t],f=o[a];if(d===void 0||f===void 0)return;let y=p?f:d,S=p?i:r,C=p?d:f,b=p?r:i,k=!p,M=lr(e,n,o,t,a,s,u,c),P=k?t:a,T=k?a:t,v=Xr(S.plan.goalFamily),I=Xr(b.plan.goalFamily);return v>=I&&I<=Xr(h.SpiritImpact)&&y.score>=C.score&&Bo(o,P,T)>0&&te(S.plan.utility,b.plan.utility)>=0?k?1:-1:I>v&&te(b.plan.utility,S.plan.utility)>=0&&te(b.plan.headUtility,S.plan.headUtility)>=0?k?-1:1:(S.plan.headFamily===h.SafeSupermanaProgress||S.plan.headFamily===h.SafeOpponentManaProgress||S.plan.headFamily===h.DrainerSafetyRecovery)&&(M===0||Do(S.plan.utility,b.plan.utility))&&y.score>=C.score&&_o(S.plan,b.plan)>0?k?1:-1:p?1:-1}l(Cf,"mixedPlainSpiritProjectionOrder");function hM(e,n,o,t,r,a,i,s,u){if(!_(s)||t.length<2)return;let c=t.filter(m=>{let d=o[m];return d!==void 0&&L(d)});if(c.length<2||c.some(m=>!a.has(m)))return;let p=c[0];if(p!==void 0){for(let m of c.slice(1)){let d=o[m],f=o[p],y=a.get(m),S=a.get(p),C=r.get(m),b=r.get(p);if(d===void 0||f===void 0||y===void 0||S===void 0||C===void 0||b===void 0)continue;let k=dc(e,n,o,m,C,p,b,i,s,u);k??(k=yc(C,y,b,S,s)),k??(k=Cf(e,n,o,m,y,p,S,i,s,u)),k===void 0&&(y.plan.headFamily===h.SpiritImpact&&S.plan.headFamily===h.SpiritImpact?k=Yr(y,S,Math.abs(d.score-f.score)<=192):(k=lr(e,n,o,m,p,i,s,u),k??(k=Bo(o,m,p)))),k>0&&(p=m)}return p}}l(hM,"plainSpiritReplyRiskPick");function Ya(e,n,o,t){let r=L(e),a=L(o);if(r===a||n===void 0||t===void 0)return;let i=r?o:e,s=r?t:n,u=r?e:o,c=r?n:t,p=D(i),m=D(u),d=p&&!m&&(Ur(s.plan.utility)&&te(s.plan.utility,c.plan.utility)>=0&&Do(s.plan.utility,c.plan.utility)||s.plan.goalFamily===h.ImmediateScore&&te(s.plan.utility,c.plan.utility)>=0);if(!(p&&!m&&!d)){if(d)return r?-1:1;if(!(s.plan.headFamily===h.SpiritImpact||!No(s.plan.utility,c.plan.utility)||te(s.plan.headUtility,c.plan.headUtility)<0||te(s.plan.utility,c.plan.utility)<=0))return r?-1:1}}l(Ya,"spiritProjectionChallengeOrder");function Mf(e,n,o,t,r,a,i={}){if(n.winsImmediately!==t.winsImmediately)return n.winsImmediately;if(n.attacksOpponentDrainer!==t.attacksOpponentDrainer)return n.attacksOpponentDrainer;if(o.allowsImmediateOpponentWin!==r.allowsImmediateOpponentWin)return!o.allowsImmediateOpponentWin;if(o.opponentReachesMatchPoint!==r.opponentReachesMatchPoint)return!o.opponentReachesMatchPoint;let s=i.game!==void 0&&i.evaluations!==void 0&&i.candidateIndex!==void 0&&i.incumbentIndex!==void 0&&i.perspective!==void 0,u=i.spiritFollowupScores??new Map;if(i.game!==void 0){let y=yM(i.game,n,o,t,r,a);if(y!==void 0)return y>0}let c=PC(n,o,t,r,i.candidateProjection,i.incumbentProjection,a);if(c!==void 0)return c>0;let p=RC(n,o,t,r,a);if(p!==void 0)return p>0;if(i.game!==void 0){let y=ef(i.game,n,o,t,r,a);if(y!==void 0)return y>0}if(s){let y=i.game,S=i.evaluations,C=i.candidateIndex,b=i.incumbentIndex,k=i.perspective,M=nf(e,y,S,C,o,b,r,k,a,u);if(M!==void 0)return M>0;let P=of(e,y,S,C,o,b,r,k,a,u);if(P!==void 0)return P>0;let T=pc(e,y,S,C,o,b,r,k,a,u);if(T!==void 0)return T>0;let v=dc(e,y,S,C,o,b,r,k,a,u);if(v!==void 0)return v>0;let I=tf(y,n,o,t,r,a);if(I!==void 0)return I>0}let m=wC(n,o,t,r,a);if(m!==void 0)return m>0;if(i.game!==void 0&&i.perspective!==void 0){let y=SM(e,i.game,n,o,t,r,i.perspective,a);if(y!==void 0)return y>0}let d=n.classes.carrierProgress&&!t.classes.carrierProgress,f=t.classes.carrierProgress&&!n.classes.carrierProgress;if((d||f)&&!n.classes.immediateScore&&!n.classes.drainerAttack&&!n.classes.drainerSafetyRecover&&!t.classes.immediateScore&&!t.classes.drainerAttack&&!t.classes.drainerSafetyRecover&&Math.abs(o.worstReplyScore-r.worstReplyScore)<=80)return d;if(a.replyRisk.preferCleanRoots){if(n.manaHandoffToOpponent!==t.manaHandoffToOpponent)return!n.manaHandoffToOpponent;if(n.hasRoundtrip!==t.hasRoundtrip)return!n.hasRoundtrip}if(vC(n,o,t,r,a)){if(i.candidateProjection!==void 0&&i.incumbentProjection!==void 0&&Math.abs(n.score-t.score)<=16&&n.efficiency===t.efficiency){let S=yc(o,i.candidateProjection,r,i.incumbentProjection,a);if(S!==void 0)return S>0;if(s){let b=Cf(e,i.game,i.evaluations,i.candidateIndex,i.candidateProjection,i.incumbentIndex,i.incumbentProjection,i.perspective,a,u);if(b!==void 0)return b>0}if(i.candidateProjection.plan.headFamily===h.SpiritImpact||i.incumbentProjection.plan.headFamily===h.SpiritImpact){let b=Yr(i.candidateProjection,i.incumbentProjection,Math.abs(n.score-t.score)<=192);if(b!==0)return b>0}}if(s){let S=lr(e,i.game,i.evaluations,i.candidateIndex,i.incumbentIndex,i.perspective,a,u);return S!==void 0&&S!==0?S>0:Bo(i.evaluations,i.candidateIndex,i.incumbentIndex)>0}if(n.score!==t.score)return n.score>t.score;let y=fs(n,t);return y<0||y===0&&n.rootRank<t.rootRank}if(s){let y=lr(e,i.game,i.evaluations,i.candidateIndex,i.incumbentIndex,i.perspective,a,u);if(y!==void 0&&y!==0)return y>0}if(_(a)&&Math.abs(o.worstReplyScore-r.worstReplyScore)>240)return o.worstReplyScore>r.worstReplyScore;if(_(a)&&n.policyPriority!==t.policyPriority&&n.efficiency>=t.efficiency)return n.policyPriority>t.policyPriority;if(a.replyRisk.deterministicTiebreak&&n.spiritOwnManaSetupNow!==t.spiritOwnManaSetupNow){let y=qa(n,t,a);if(!_(a)||y||Math.abs(o.worstReplyScore-r.worstReplyScore)<=120)return n.spiritOwnManaSetupNow}if(a.replyRisk.deterministicTiebreak&&n.spiritOwnManaSetupNow&&t.spiritOwnManaSetupNow&&n.supermanaProgress&&t.supermanaProgress&&n.safeSupermanaProgressSteps!==t.safeSupermanaProgressSteps)return an(n.safeSupermanaProgressSteps,t.safeSupermanaProgressSteps);if(a.replyRisk.deterministicTiebreak&&n.spiritOwnManaSetupNow&&t.spiritOwnManaSetupNow&&n.opponentManaProgress&&t.opponentManaProgress&&n.safeOpponentManaProgressSteps!==t.safeOpponentManaProgressSteps)return an(n.safeOpponentManaProgressSteps,t.safeOpponentManaProgressSteps);if(a.replyRisk.deterministicTiebreak&&n.spiritOwnManaSetupNow&&t.spiritOwnManaSetupNow&&n.scorePathBestSteps!==t.scorePathBestSteps)return Ua(n.scorePathBestSteps,t.scorePathBestSteps);if(a.replyRisk.deterministicTiebreak&&n.spiritDevelopment!==t.spiritDevelopment){let y=Ya(n,i.candidateProjection,t,i.incumbentProjection);if(y!==void 0)return y>0;let S=ys(n,t);if(S!==void 0&&(!_(a)||Math.abs(o.worstReplyScore-r.worstReplyScore)<=120))return S>0;if(!_(a)||Math.abs(o.worstReplyScore-r.worstReplyScore)<=120)return n.spiritDevelopment}if(i.candidateProjection!==void 0&&i.incumbentProjection!==void 0){let y=Math.abs(o.worstReplyScore-r.worstReplyScore)<=100,S=!o.allowsImmediateOpponentWin&&!r.allowsImmediateOpponentWin&&!o.opponentReachesMatchPoint&&!r.opponentReachesMatchPoint,C=Ul(i.candidateProjection.plan.headFamily)||Ul(i.incumbentProjection.plan.headFamily),b=n.spiritOwnManaSetupNow||t.spiritOwnManaSetupNow||n.spiritSameTurnScoreSetupNow||t.spiritSameTurnScoreSetupNow||n.spiritDevelopment||t.spiritDevelopment;if(_(a)&&L(n)&&L(t)&&y&&Ct(i.candidateProjection.plan.utility)&&Ct(i.incumbentProjection.plan.utility)&&S){let P=Yr(i.candidateProjection,i.incumbentProjection,Math.abs(n.score-t.score)<=192);if(P!==0)return P>0}if(_(a)&&n.spiritDevelopment&&t.spiritDevelopment&&!n.spiritSameTurnScoreSetupNow&&!t.spiritSameTurnScoreSetupNow&&!n.spiritOwnManaSetupNow&&!t.spiritOwnManaSetupNow&&y&&S){let P=Yr(i.candidateProjection,i.incumbentProjection,Math.abs(n.score-t.score)<=192);if(P!==0)return P>0}if(C&&S&&y&&!b){let P=_o(i.candidateProjection.plan,i.incumbentProjection.plan);if(P!==0)return P>0}}return n.policyPriority!==t.policyPriority?n.policyPriority>t.policyPriority:o.worstReplyScore!==r.worstReplyScore?o.worstReplyScore>r.worstReplyScore:n.score!==t.score?n.score>t.score:n.efficiency!==t.efficiency?n.efficiency>t.efficiency:!1}l(Mf,"isBetterReplyRiskCandidate");function bs(e,n,o){return _(o)&&O(e)===h.ManaTempo&&O(n)===h.ManaTempo&&e.efficiency===n.efficiency&&!e.ownDrainerVulnerable&&!n.ownDrainerVulnerable&&!e.ownDrainerWalkVulnerable&&!n.ownDrainerWalkVulnerable&&!D(e)&&!D(n)&&Mo(e,n)}l(bs,"isProductionModeWhiteManaSiblingPair");function Sc(e,n,o,t,r,a){if(!_(a)||n.activeColor!==w.White||n.turnNumber!==3||n.monsMovesCount<4)return;let i=[...t].filter(d=>{let f=o[d];return f!==void 0&&O(f)===h.ManaTempo&&!f.ownDrainerVulnerable&&!f.ownDrainerWalkVulnerable&&!D(f)&&!f.manaHandoffToOpponent&&!f.hasRoundtrip&&!f.winsImmediately&&!f.attacksOpponentDrainer&&f.sameTurnScoreWindowValue===0&&!f.scoresSupermanaThisTurn&&!f.scoresOpponentManaThisTurn&&!f.safeSupermanaPickupNow&&!f.safeOpponentManaPickupNow}).sort((d,f)=>-Bo(o,d,f))[0];if(i===void 0)return;let s=o[i];if(s===void 0)return;let u=Pt(e,n,s,r,a,h.ManaTempo),c,p,m=!1;return o.forEach((d,f)=>{let y=bs(d,s,a)&&j(s.score,d.score)<=24&&Math.abs(s.rootRank-d.rootRank)<=4&&d.rootRank<s.rootRank;if(t.includes(f)||O(d)!==h.ManaTempo||d.ownDrainerVulnerable||d.ownDrainerWalkVulnerable||D(d)||d.manaHandoffToOpponent||d.hasRoundtrip||d.winsImmediately||d.attacksOpponentDrainer||d.sameTurnScoreWindowValue>0||d.scoresSupermanaThisTurn||d.scoresOpponentManaThisTurn||d.safeSupermanaPickupNow||d.safeOpponentManaPickupNow||!y&&d.score<j(s.score,96)||d.rootRank>=s.rootRank&&!y)return;let S=Pt(e,n,d,r,a,h.ManaTempo),b=te(S,u)>0||so(S,u);if(!b&&!y)return;let k=c,M=p,P=k===void 0||M===void 0;if(k!==void 0&&M!==void 0){let T=o[k];if(T===void 0)P=!0;else{let v=bs(T,s,a)&&j(s.score,T.score)<=24&&Math.abs(s.rootRank-T.rootRank)<=4&&T.rootRank<s.rootRank;if(b!==m)P=b;else if(b){let I=te(S,M);P=I>0||I===0&&Bo(o,f,k)>0}else y&&v?P=d.rootRank<T.rootRank||d.rootRank===T.rootRank&&Bo(o,f,k)>0:P=y}}P&&(c=f,p=S,m=b)}),c}l(Sc,"productionWhiteTurnFourManaSiblingReentry");function Qa(e,n,o,t,r,a,i=t){if(!a.replyRisk.enabled||e.session.checkpoint())return;let s=Ka(e,o,t,a);if(s.length===0)return;let u=Sc(e,n,o,s,r,a);u!==void 0&&!s.includes(u)&&(s=[...s,u].sort((b,k)=>-Bo(o,b,k)));let c=Math.max(s.length,1,Math.trunc(a.budget.maxVisitedNodes*Math.max(0,a.replyRisk.nodeShareBp)/1e4)),p=Math.min(Math.max(1,a.replyRisk.replyLimit),Math.max(1,Math.trunc(c/s.length))),m=Zm(e,o,s,r,a),d=new Map;for(let b of s){if(e.session.checkpoint())return;let k=o[b];if(k===void 0)continue;let M=m.get(b);if(M!==void 0){d.set(b,jl(e,k,M,r,a,p));continue}let T=a.planner.enabled&&_(a)&&Ut(k,r)&&!L(k)?k.game:void 0;d.set(b,kn(e,T??k.game,r,a,p))}let f=new Map,y=hM(e,n,o,s,d,m,r,a,f);if(s.every(b=>{let k=o[b];return k!==void 0&&L(k)}))return y;if(_(a)&&s.every(b=>{let k=d.get(b);return k!==void 0&&!k.allowsImmediateOpponentWin&&!k.opponentReachesMatchPoint})&&!ic(o,s,a)&&!uc(n,o,s,a)&&!qm(o,s,a)&&!$m(n,o,s,a)&&!Xm(o,s,a)){let b=[...s].sort((P,T)=>{let v=d.get(P)?.worstReplyScore??-2147483648;return(d.get(T)?.worstReplyScore??-2147483648)-v||-Bo(o,P,T)}),k=b[0],M=b[1];if(k!==void 0&&(M===void 0||(d.get(k)?.worstReplyScore??-2147483648)>(d.get(M)?.worstReplyScore??-2147483648)))return k}let S=y??s.find(b=>d.has(b));if(S===void 0)return;for(let b of s){if(b===S)continue;let k=o[b],M=o[S],P=d.get(b),T=d.get(S);k!==void 0&&M!==void 0&&P!==void 0&&T!==void 0&&Mf(e,k,P,M,T,a,{candidateProjection:m.get(b),incumbentProjection:m.get(S),game:n,evaluations:o,candidateIndex:b,incumbentIndex:S,perspective:r,spiritFollowupScores:f})&&(S=b)}if(_(a)&&y!==void 0&&y!==S){let b=d.get(y),k=d.get(S),M=m.get(y),P=m.get(S);b!==void 0&&k!==void 0&&M!==void 0&&P!==void 0&&(yc(b,M,k,P,a)??-1)>0&&(S=y)}let C=o[S];if(_(a)&&C!==void 0&&!C.spiritDevelopment&&!C.spiritSameTurnScoreSetupNow&&!C.spiritOwnManaSetupNow&&S>=4){let b=i.filter(k=>!s.includes(k)).filter(k=>{let M=o[k];return M!==void 0&&M.spiritOwnManaSetupNow&&M.rootRank+3<=C.rootRank&&qa(M,C,a)}).sort((k,M)=>-Bo(o,k,M))[0];if(b!==void 0){let k=o[b],M=d.get(S);if(k!==void 0&&M!==void 0){let P=jl(e,k,void 0,r,a,p);(TC(k,P,C,M,a)||Mf(e,k,P,C,M,a,{incumbentProjection:m.get(S),game:n,evaluations:o,candidateIndex:b,incumbentIndex:S,perspective:r,spiritFollowupScores:f}))&&(S=b)}}}return e.session.checkpoint()?void 0:S}l(Qa,"pickRootWithReplyRiskGuard");function fr(e,n){let o=e[n];if(o===void 0)throw new RangeError(`production selector index ${n} is out of bounds`);return o}l(fr,"valueAt");function hc(e,n){return e.safeSupermanaPickupNow&&!n.safeSupermanaPickupNow||e.safeOpponentManaPickupNow&&!n.safeOpponentManaPickupNow}l(hc,"hasPickupUpgrade");function bc(e){return Z(e)||e.scoresSupermanaThisTurn||e.scoresOpponentManaThisTurn}l(bc,"rootHasProgressSurface");function Cs(e){return O(e)===h.ManaTempo&&e.sameTurnScoreWindowValue>0&&e.sameTurnScoreWindowValue<=1&&!oe(e)&&!e.attacksOpponentDrainer&&!e.manaHandoffToOpponent&&!e.hasRoundtrip}l(Cs,"isProductionModeNonConcreteManaWindowRoot");function ep(e,n,o){for(let[t,r]of n.board.entries()){let a=z(r);if(!(a?.kind!==A.Drainer||a.color!==o))return $(a)?!0:n.isFirstTurn()?!1:!ba(e,n.board,o,t)}return!1}l(ep,"ownDrainerVulnerableNextTurn");function bM(e,n){let{game:o,config:t,plan:r,candidateIndex:a,candidate:i,selected:s,candidateUnsafe:u,selectedUnsafe:c,candidateProgress:p,selectedProgress:m,scoreGap:d,sameTurnWindowBetter:f,drainerAttackBetter:y,scoresNowBetter:S,safetyRecoverBetter:C,spiritWindowBetter:b,spiritDevelopmentBetter:k,progressBetter:M,selectedSpiritPhase:P,selectedFamily:T,blackSpiritPair:v,blackTurnSixRouteChangePlainSpirit:I}=e,{selectedUtility:E,pickupUpgrade:x,strategicAxesBetter:N,projectedDeferredRecoveryWithoutConcreteGain:B,safeRootBlocksPlainSpirit:W,safeRootBlocksPlainSpiritProgress:V,plainSpiritSiblingRegresses:Q,allowNonConcreteWhiteProgress:U,whiteSetupRecoveryBlocksUtilityOverride:ce}=n;switch(sr(t)){case Xe.Baseline:switch(r.headFamily){case h.ImmediateScore:return(i.winsImmediately||S||f)&&d<=280;case h.DenyOpponentWindow:return f||C||y;case h.DrainerKill:return y&&d<=180;case h.DrainerSafetyRecovery:return C&&uo(r.utility,E)>=0&&d<=140;case h.SpiritImpact:return a<=(r.compiledChunks.length>1?12:6)&&d<=120&&(b||k||P&&uo(r.utility,E)>=0);case h.SafeSupermanaProgress:case h.SafeOpponentManaProgress:return!P&&a<=(r.compiledChunks.length>1?3:1)&&d<=80&&(M||uo(r.utility,E)>=0||i.safeSupermanaProgressSteps===s.safeSupermanaProgressSteps&&i.safeOpponentManaProgressSteps===s.safeOpponentManaProgressSteps&&i.ownDrainerVulnerable===s.ownDrainerVulnerable&&i.efficiency===s.efficiency&&i.supermanaProgress===s.supermanaProgress&&i.opponentManaProgress===s.opponentManaProgress&&d<=32);case h.ManaTempo:return!1;default:return!1}case Xe.Production:switch(r.headFamily){case h.ImmediateScore:return(i.winsImmediately||S||f||a<=16&&No(r.utility,E)&&(!u||c))&&d<=360;case h.DenyOpponentWindow:return f||C||y||a<=16&&d<=220&&!u&&No(r.utility,E);case h.DrainerKill:return i.attacksOpponentDrainer&&a<=16&&d<=260&&(y||uo(r.utility,E)>=0);case h.DrainerSafetyRecovery:return i.classes.drainerSafetyRecover&&a<=16&&d<=240&&(C||s.ownDrainerVulnerable&&!i.ownDrainerVulnerable||Gn(t)&&Do(r.utility,E)&&(c||!u)&&!ce);case h.SpiritImpact:{let Ae=Do(r.utility,E),ln=No(r.utility,E);if(W||V||Q||(s.spiritSameTurnScoreSetupNow||s.spiritOwnManaSetupNow||s.sameTurnScoreWindowValue>0)&&!v&&!c&&!u&&!i.spiritSameTurnScoreSetupNow&&!i.spiritOwnManaSetupNow&&i.sameTurnScoreWindowValue<=s.sameTurnScoreWindowValue&&i.spiritSetupGain<=s.spiritSetupGain&&!S&&!y)return!1;let dn=I||d<=220&&(b||k||i.spiritOwnManaSetupNow&&!s.spiritOwnManaSetupNow&&Ae||ln||P&&Ae);return a<=(r.compiledChunks.length>1?16:10)&&dn}case h.SafeSupermanaProgress:case h.SafeOpponentManaProgress:{let Ae=te(r.utility,E),ln=(p||c)&&Do(r.utility,E),pn=!c&&!P&&!m,dn=!c&&m,Ge=T===h.SafeSupermanaProgress||T===h.SafeOpponentManaProgress,_n=N||lm(r.utility,E,220);if(c&&u&&!P&&!m&&p&&d>0&&!x&&!C&&!S&&!y&&!f&&!_n||B)return!1;let Fe=U||Co(o)&&L(s)&&!c&&!u&&p&&a<=2&&d<=96&&(Ae>0||Ae>=0&&ot(r.utility,E,64)),Ho=!P||c||Fe,st=d>48&&!c&&!u,Ve=!dn&&!pn||!st||N||x,Qr=!u&&ln&&(c||!P&&!m)&&(!pn||d<=32||N||x),bp=ln&&so(r.utility,E)&&(!pn||N),Cp=i.safeSupermanaProgressSteps===s.safeSupermanaProgressSteps&&i.safeOpponentManaProgressSteps===s.safeOpponentManaProgressSteps&&i.ownDrainerVulnerable===s.ownDrainerVulnerable&&i.efficiency===s.efficiency&&i.supermanaProgress===s.supermanaProgress&&i.opponentManaProgress===s.opponentManaProgress;return a<=(r.compiledChunks.length>1?12:6)&&d<=220&&(Ho&&M&&Ve||Fe||x||bp&&(!st||N||hc(i,s))&&(!dn||N||hc(i,s)||M&&!P)||Qr||Ho&&Cp&&d<=(Ge?32:64)&&Ve)}case h.ManaTempo:return!1}}}l(bM,"acceptTurnEngineHeadByModeAndFamily");function CM(e){let{game:n,plan:o,candidate:t,selected:r,macroMode:a,candidateUnsafe:i,selectedUnsafe:s,candidateProgress:u,selectedProgress:c,scoreGap:p,sameTurnWindowBetter:m,drainerAttackBetter:d,scoresNowBetter:f,candidateSpiritTactical:y,selectedSpiritPhase:S,candidateFamily:C,selectedFamily:b,selectedUtilityValue:k}=e,M=a&&o.headFamily===h.ImmediateScore&&n.activeColor===w.Black&&n.turnNumber<=4&&n.monsMovesCount===0&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&i&&!s&&!t.winsImmediately&&!f&&!d&&t.sameTurnScoreWindowValue<=r.sameTurnScoreWindowValue,P=a&&n.activeColor===w.White&&n.turnNumber===3&&n.monsMovesCount<=2&&n.playerCanUseAction()&&n.playerCanMoveMana()&&o.headFamily===h.SpiritImpact&&b===h.ManaTempo&&!s&&!i&&!r.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&t.spiritDevelopment&&t.spiritOwnManaSetupNow&&!t.spiritSameTurnScoreSetupNow&&!t.winsImmediately&&!t.attacksOpponentDrainer&&!oe(t)&&t.sameTurnScoreWindowValue===0,T=a&&n.activeColor===w.Black&&n.turnNumber>=5&&n.monsMovesCount===0&&n.playerCanUseAction()&&n.playerCanMoveMana()&&o.headFamily===h.SpiritImpact&&b===h.ManaTempo&&!S&&L(t)&&!u&&!y&&ye(t.inputs,r.inputs)&&i===s&&t.safeSupermanaProgressSteps>=r.safeSupermanaProgressSteps&&t.safeOpponentManaProgressSteps>=r.safeOpponentManaProgressSteps&&t.ownDrainerVulnerable===r.ownDrainerVulnerable&&t.ownDrainerWalkVulnerable===r.ownDrainerWalkVulnerable&&t.manaHandoffToOpponent===r.manaHandoffToOpponent&&t.hasRoundtrip===r.hasRoundtrip&&!f&&!d&&!m&&p>96,v=a&&n.activeColor===w.White&&n.turnNumber>=5&&n.monsMovesCount===0&&n.playerCanUseAction()&&n.playerCanMoveMana()&&o.headFamily===h.SpiritImpact&&b===h.ManaTempo&&!s&&!i&&!S&&L(t)&&u&&!y&&ye(t.inputs,r.inputs)&&t.safeSupermanaProgressSteps>=r.safeSupermanaProgressSteps&&t.safeOpponentManaProgressSteps>=r.safeOpponentManaProgressSteps&&t.ownDrainerVulnerable===r.ownDrainerVulnerable&&t.ownDrainerWalkVulnerable===r.ownDrainerWalkVulnerable&&t.manaHandoffToOpponent===r.manaHandoffToOpponent&&t.hasRoundtrip===r.hasRoundtrip&&t.score<=r.score&&!f&&!d&&!m,I=a&&n.activeColor===w.White&&n.turnNumber>=5&&n.monsMovesCount>=1&&o.headFamily===h.SpiritImpact&&b===h.ManaTempo&&!S&&L(t)&&!u&&!y&&t.sameTurnScoreWindowValue===0&&t.ownDrainerVulnerable===r.ownDrainerVulnerable&&t.ownDrainerWalkVulnerable===r.ownDrainerWalkVulnerable&&t.manaHandoffToOpponent===r.manaHandoffToOpponent&&t.hasRoundtrip===r.hasRoundtrip&&t.score<=r.score&&!f&&!d&&!m,E=a&&n.activeColor===w.Black&&n.turnNumber>=6&&n.monsMovesCount===0&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&(C===h.SafeSupermanaProgress||C===h.SafeOpponentManaProgress)&&b===h.ManaTempo&&!S&&!t.spiritDevelopment&&!t.spiritSameTurnScoreSetupNow&&!t.spiritOwnManaSetupNow&&t.sameTurnScoreWindowValue===0&&r.sameTurnScoreWindowValue===0&&!oe(t)&&!oe(r)&&t.ownDrainerVulnerable&&!r.ownDrainerVulnerable&&t.ownDrainerWalkVulnerable===r.ownDrainerWalkVulnerable&&t.manaHandoffToOpponent===r.manaHandoffToOpponent&&t.hasRoundtrip===r.hasRoundtrip&&!f&&!d&&!m,x=a&&n.activeColor===w.Black&&n.turnNumber<=4&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&C===h.ManaTempo&&b===h.ManaTempo&&t.sameTurnScoreWindowValue>0&&t.sameTurnScoreWindowValue===r.sameTurnScoreWindowValue&&t.safeSupermanaProgressSteps===r.safeSupermanaProgressSteps&&t.safeOpponentManaProgressSteps===r.safeOpponentManaProgressSteps&&t.ownDrainerVulnerable===r.ownDrainerVulnerable&&t.ownDrainerWalkVulnerable===r.ownDrainerWalkVulnerable&&t.manaHandoffToOpponent===r.manaHandoffToOpponent&&t.hasRoundtrip===r.hasRoundtrip&&!oe(t)&&!oe(r)&&!f&&!d,N=a&&n.activeColor===w.Black&&n.turnNumber>=6&&n.monsMovesCount===0&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&C===h.ManaTempo&&b===h.ManaTempo&&t.sameTurnScoreWindowValue>0&&t.sameTurnScoreWindowValue===r.sameTurnScoreWindowValue&&t.safeSupermanaProgressSteps===r.safeSupermanaProgressSteps&&t.safeOpponentManaProgressSteps===r.safeOpponentManaProgressSteps&&t.ownDrainerVulnerable&&!r.ownDrainerVulnerable&&t.manaHandoffToOpponent===r.manaHandoffToOpponent&&t.hasRoundtrip===r.hasRoundtrip&&!oe(t)&&!oe(r)&&!f&&!d,B=a&&n.activeColor===w.Black&&n.turnNumber>=8&&n.monsMovesCount>=1&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&C===h.ManaTempo&&b===h.ManaTempo&&ye(t.inputs,r.inputs)&&t.sameTurnScoreWindowValue>0&&r.sameTurnScoreWindowValue===0&&t.ownDrainerVulnerable&&!r.ownDrainerVulnerable&&!oe(t)&&!oe(r)&&j(t.score,r.score)<=32&&!f&&!d;if(P)return{kind:"reject"};if(T)return{kind:"reject"};if(v)return{kind:"reject"};if(I)return{kind:"reject"};if(E)return{kind:"reject"};if(x)return{kind:"reject"};if(N)return{kind:"reject"};if(B)return{kind:"reject"};let W=hc(t,r),V=a&&n.activeColor===w.Black&&n.turnNumber<=4&&C===h.ManaTempo&&(b===h.ManaTempo||b===h.SafeSupermanaProgress||b===h.SafeOpponentManaProgress)&&!t.winsImmediately&&!t.attacksOpponentDrainer&&!t.spiritDevelopment&&!t.spiritSameTurnScoreSetupNow&&!t.spiritOwnManaSetupNow&&!W&&p>0&&(Mn(r,t)||c&&!u),Q=a&&n.activeColor===w.Black&&n.turnNumber<=4&&(o.headFamily===h.SafeSupermanaProgress||o.headFamily===h.SafeOpponentManaProgress)&&C===h.ManaTempo&&b===h.ManaTempo&&t.sameTurnScoreWindowValue>0&&r.sameTurnScoreWindowValue===0&&!t.winsImmediately&&!f&&!d&&!W&&r.ownDrainerVulnerable===t.ownDrainerVulnerable&&r.ownDrainerWalkVulnerable===t.ownDrainerWalkVulnerable&&r.manaHandoffToOpponent===t.manaHandoffToOpponent&&r.hasRoundtrip===t.hasRoundtrip&&Mn(r,t)&&p>=-192&&!ar(o.utility,k());return V?{kind:"reject"}:Q?{kind:"reject"}:{kind:"continue",facts:{narrowUnsafeBlackManaScore:M,pickupUpgrade:W}}}l(CM,"evaluateInitialHeadGuards");function MM(e,n){let{game:o,plan:t,candidate:r,selected:a,macroMode:i,candidateUnsafe:s,selectedUnsafe:u,candidateProgress:c,selectedProgress:p,exactContext:m,sameTurnWindowBetter:d,drainerAttackBetter:f,scoresNowBetter:y,selectedSpiritPhase:S,candidateFamily:C,selectedFamily:b}=e,{pickupUpgrade:k,selectedUtility:M}=n,P=i&&o.activeColor===w.Black&&o.turnNumber<=4&&o.monsMovesCount>=1&&o.playerCanUseAction()&&o.playerCanMoveMana()&&t.headFamily===h.ManaTempo&&t.goalFamily===h.SpiritImpact&&C===h.ManaTempo&&b===h.ManaTempo&&!s&&!u&&!r.spiritDevelopment&&!a.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!a.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&!a.spiritOwnManaSetupNow&&!oe(r)&&!oe(a)&&r.sameTurnScoreWindowValue===a.sameTurnScoreWindowValue&&!c&&!p&&r.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&r.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&r.ownDrainerVulnerable===a.ownDrainerVulnerable&&r.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&r.manaHandoffToOpponent===a.manaHandoffToOpponent&&r.hasRoundtrip===a.hasRoundtrip&&a.score>g(r.score,128)&&!y&&!f&&!d&&!k,T=i&&o.activeColor===w.Black&&o.turnNumber<=6&&o.monsMovesCount>=1&&o.playerCanMoveMana()&&(t.headFamily===h.ManaTempo||t.headFamily===h.SafeSupermanaProgress||t.headFamily===h.SafeOpponentManaProgress)&&C===h.ManaTempo&&b===h.ManaTempo&&s===u&&!r.spiritDevelopment&&!a.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!a.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&!a.spiritOwnManaSetupNow&&!oe(r)&&!oe(a)&&r.sameTurnScoreWindowValue===0&&a.sameTurnScoreWindowValue===0&&r.ownDrainerVulnerable===a.ownDrainerVulnerable&&r.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&r.manaHandoffToOpponent===a.manaHandoffToOpponent&&r.hasRoundtrip===a.hasRoundtrip&&a.score>g(r.score,48)&&a.safeSupermanaProgressSteps<=r.safeSupermanaProgressSteps+1&&a.safeOpponentManaProgressSteps<=r.safeOpponentManaProgressSteps+1&&!y&&!f&&!d&&!k,v=i&&o.activeColor===w.White&&o.turnNumber===5&&o.monsMovesCount===0&&o.playerCanMoveMana()&&(t.headFamily===h.SafeSupermanaProgress||t.headFamily===h.SafeOpponentManaProgress)&&t.goalFamily===h.ImmediateScore&&C===h.ManaTempo&&b===h.ManaTempo&&s===u&&!r.spiritDevelopment&&!a.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!a.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&!a.spiritOwnManaSetupNow&&!oe(r)&&!oe(a)&&r.sameTurnScoreWindowValue>0&&r.sameTurnScoreWindowValue===a.sameTurnScoreWindowValue&&!c&&!p&&r.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&r.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&ye(r.inputs,a.inputs)&&r.ownDrainerVulnerable===a.ownDrainerVulnerable&&r.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&r.manaHandoffToOpponent===a.manaHandoffToOpponent&&r.hasRoundtrip===a.hasRoundtrip&&a.score>r.score&&!y&&!f&&!d&&!k,I=i&&o.activeColor===w.White&&o.turnNumber===5&&o.monsMovesCount>=1&&o.playerCanMoveMana()&&(t.headFamily===h.ImmediateScore||t.headFamily===h.SafeSupermanaProgress||t.headFamily===h.SafeOpponentManaProgress)&&t.goalFamily===h.ImmediateScore&&C===h.ManaTempo&&b===h.ManaTempo&&s===u&&!r.spiritDevelopment&&!a.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!a.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&!a.spiritOwnManaSetupNow&&!oe(r)&&!oe(a)&&r.sameTurnScoreWindowValue>0&&r.sameTurnScoreWindowValue===a.sameTurnScoreWindowValue&&!c&&!p&&r.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&r.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&a.scorePathBestSteps>=r.scorePathBestSteps&&r.ownDrainerVulnerable===a.ownDrainerVulnerable&&r.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&r.manaHandoffToOpponent===a.manaHandoffToOpponent&&r.hasRoundtrip===a.hasRoundtrip&&a.score>r.score&&!y&&!f&&!d&&!k,E=i&&o.activeColor===w.White&&o.turnNumber===5&&o.monsMovesCount>=1&&o.playerCanUseAction()&&o.playerCanMoveMana()&&(t.headFamily===h.SafeSupermanaProgress||t.headFamily===h.SafeOpponentManaProgress)&&t.goalFamily===h.ImmediateScore&&C===h.ManaTempo&&b===h.SpiritImpact&&s===u&&!r.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&a.spiritDevelopment&&a.spiritSameTurnScoreSetupNow&&a.spiritOwnManaSetupNow&&a.spiritSetupGain>=g(r.spiritSetupGain,64)&&!oe(r)&&!oe(a)&&r.sameTurnScoreWindowValue>0&&r.sameTurnScoreWindowValue===a.sameTurnScoreWindowValue&&!c&&!p&&r.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&r.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&a.scorePathBestSteps>r.scorePathBestSteps&&r.ownDrainerVulnerable===a.ownDrainerVulnerable&&r.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&r.manaHandoffToOpponent===a.manaHandoffToOpponent&&r.hasRoundtrip===a.hasRoundtrip&&r.score<=g(a.score,64)&&!y&&!f&&!d&&!k,x=i&&o.activeColor===w.White&&o.turnNumber===5&&o.monsMovesCount===0&&o.playerCanUseAction()&&o.playerCanMoveMana()&&m.delta.sameTurnScoreWindowValue<=1&&m.delta.opponentWindowDenyGain<=1&&!m.delta.drainerAttackAvailable&&(m.delta.sameTurnScoreWindowValue>0||m.delta.opponentWindowDenyGain>0)&&(t.headFamily===h.SafeSupermanaProgress||t.headFamily===h.SafeOpponentManaProgress)&&t.goalFamily===h.ImmediateScore&&Cs(r)&&b===h.SpiritImpact&&s&&!u&&!r.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&a.spiritDevelopment&&a.spiritSameTurnScoreSetupNow&&!a.spiritOwnManaSetupNow&&a.spiritSetupGain>=g(r.spiritSetupGain,96)&&!oe(r)&&!oe(a)&&r.sameTurnScoreWindowValue===a.sameTurnScoreWindowValue&&!c&&!p&&r.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&r.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&a.scorePathBestSteps>r.scorePathBestSteps&&r.ownDrainerVulnerable&&!a.ownDrainerVulnerable&&r.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&r.manaHandoffToOpponent===a.manaHandoffToOpponent&&r.hasRoundtrip===a.hasRoundtrip&&!y&&!f&&!d&&!k,N=i&&o.activeColor===w.White&&o.turnNumber===5&&o.monsMovesCount>=1&&!o.playerCanUseAction()&&o.playerCanMoveMana()&&(t.headFamily===h.SafeSupermanaProgress||t.headFamily===h.SafeOpponentManaProgress)&&t.goalFamily===h.DrainerSafetyRecovery&&C===h.ManaTempo&&b===h.ManaTempo&&!s&&!u&&!c&&!p&&!r.spiritDevelopment&&!a.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!a.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&!a.spiritOwnManaSetupNow&&!oe(r)&&!oe(a)&&r.sameTurnScoreWindowValue===0&&a.sameTurnScoreWindowValue===0&&r.safeSupermanaProgressSteps<=a.safeSupermanaProgressSteps&&r.safeOpponentManaProgressSteps<=a.safeOpponentManaProgressSteps&&r.scorePathBestSteps===a.scorePathBestSteps&&r.spiritSetupGain<=g(a.spiritSetupGain,16)&&!r.ownDrainerVulnerable&&!a.ownDrainerVulnerable&&!r.ownDrainerWalkVulnerable&&!a.ownDrainerWalkVulnerable&&!r.manaHandoffToOpponent&&!a.manaHandoffToOpponent&&!r.hasRoundtrip&&!a.hasRoundtrip&&r.rootRank>=a.rootRank+8&&j(r.score,a.score)<=128&&!y&&!f&&!d&&!k&&!ot(t.headUtility,M,192),B=i&&o.activeColor===w.Black&&o.turnNumber===6&&o.monsMovesCount===0&&!o.playerCanUseAction()&&o.playerCanMoveMana()&&m.delta.sameTurnScoreWindowValue<=1&&m.delta.opponentWindowDenyGain<=1&&!m.delta.drainerAttackAvailable&&(m.delta.sameTurnScoreWindowValue>0||m.delta.opponentWindowDenyGain>0)&&t.headFamily===h.ManaTempo&&t.goalFamily===h.ImmediateScore&&C===h.ManaTempo&&(b===h.SafeSupermanaProgress||b===h.SafeOpponentManaProgress)&&!s&&!r.spiritDevelopment&&!a.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!a.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&!a.spiritOwnManaSetupNow&&!oe(r)&&!oe(a)&&r.sameTurnScoreWindowValue===0&&a.sameTurnScoreWindowValue===0&&!c&&p&&a.safeSupermanaProgressSteps<r.safeSupermanaProgressSteps&&a.safeOpponentManaProgressSteps<r.safeOpponentManaProgressSteps&&a.scorePathBestSteps===r.scorePathBestSteps&&a.ownDrainerVulnerable&&!r.ownDrainerVulnerable&&a.ownDrainerWalkVulnerable===r.ownDrainerWalkVulnerable&&a.manaHandoffToOpponent===r.manaHandoffToOpponent&&a.hasRoundtrip===r.hasRoundtrip&&!y&&!f&&!d&&!k,W=i&&o.activeColor===w.Black&&o.turnNumber===4&&o.monsMovesCount>=1&&!o.playerCanUseAction()&&o.playerCanMoveMana()&&m.delta.sameTurnScoreWindowValue<=1&&m.delta.opponentWindowDenyGain<=1&&!m.delta.drainerAttackAvailable&&m.delta.drainerSafety<0&&(m.delta.sameTurnScoreWindowValue>0||m.delta.opponentWindowDenyGain>0)&&t.headFamily===h.ImmediateScore&&t.goalFamily===h.ImmediateScore&&Cs(r)&&b===h.DrainerSafetyRecovery&&a.classes.drainerSafetyRecover&&!u&&!a.ownDrainerVulnerable&&!a.ownDrainerWalkVulnerable&&!oe(a)&&!a.attacksOpponentDrainer&&!S&&a.sameTurnScoreWindowValue===0&&!a.manaHandoffToOpponent&&!a.hasRoundtrip&&ye(r.inputs,a.inputs)&&r.ownDrainerVulnerable&&!r.classes.drainerSafetyRecover&&a.safeSupermanaProgressSteps<=r.safeSupermanaProgressSteps&&a.safeOpponentManaProgressSteps<=r.safeOpponentManaProgressSteps&&a.scorePathBestSteps>r.scorePathBestSteps&&!y&&!f&&!k,V=i&&o.activeColor===w.White&&o.turnNumber===3&&o.monsMovesCount===0&&!o.playerCanUseAction()&&o.playerCanMoveMana()&&(t.headFamily===h.SafeSupermanaProgress||t.headFamily===h.SafeOpponentManaProgress)&&t.goalFamily===h.ImmediateScore&&Cs(r)&&b===h.DrainerSafetyRecovery&&a.classes.drainerSafetyRecover&&!u&&!a.ownDrainerVulnerable&&!a.ownDrainerWalkVulnerable&&!oe(a)&&!a.attacksOpponentDrainer&&!S&&a.sameTurnScoreWindowValue===0&&!a.manaHandoffToOpponent&&!a.hasRoundtrip&&ye(r.inputs,a.inputs)&&r.ownDrainerVulnerable&&!r.classes.drainerSafetyRecover&&a.safeSupermanaProgressSteps<=r.safeSupermanaProgressSteps&&a.safeOpponentManaProgressSteps<=r.safeOpponentManaProgressSteps&&a.scorePathBestSteps>r.scorePathBestSteps&&!y&&!f&&!k,Q=i&&o.activeColor===w.White&&o.turnNumber===3&&o.monsMovesCount>=1&&o.playerCanMoveMana()&&(t.headFamily===h.ManaTempo||t.headFamily===h.SafeSupermanaProgress||t.headFamily===h.SafeOpponentManaProgress)&&t.goalFamily===h.DrainerSafetyRecovery&&C===h.ManaTempo&&b===h.ManaTempo&&s&&!u&&!r.spiritDevelopment&&!a.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!a.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&!a.spiritOwnManaSetupNow&&!oe(r)&&!oe(a)&&r.sameTurnScoreWindowValue===0&&a.sameTurnScoreWindowValue===0&&r.manaHandoffToOpponent===a.manaHandoffToOpponent&&r.hasRoundtrip===a.hasRoundtrip&&!y&&!f&&!d&&!k;return!!(P||T||v||I||E||x||N||Q||B||W||V)}l(MM,"manaAndRecoveryHeadGuardsReject");function Rn(e,...n){return n.includes(e)}l(Rn,"isTurnPlanFamilyOneOf");function Ms(e,n,o){let t=e[o],r=n[o];return t!==void 0&&r!==void 0&&Cr(t,r)}l(Ms,"sameInputAt");function hn(e){return!D(e)&&!e.hasRoundtrip}l(hn,"advisorRootIsSafe");function sn(e,n,o,t,r){return lc(e,n,o,t,r,O(o))}l(sn,"rootUtility");function yr(e,n,o,t,r){return Pt(e,n,o,t,r,O(o))}l(yr,"rootMoveUtility");function Lo(e,n){return te(e,n)>=0||Do(e,n)}l(Lo,"utilityCompetes");function kM(e,n){return e.winState===n.winState&&e.avoidImmediateLoss===n.avoidImmediateLoss&&e.scoreDelta===n.scoreDelta&&e.denyGain===n.denyGain&&e.drainerAttack===n.drainerAttack&&e.drainerSafety===n.drainerSafety&&e.evalScore===n.evalScore}l(kM,"utilitiesEqual");function jt(e,n){return{inputs:[...e.inputs],family:O(e),rootRank:e.rootRank,reason:n}}l(jt,"entry");function Go(e,n){e.some(o=>me(o.inputs,n.inputs))||e.push(n)}l(Go,"pushUnique");function kf(e,n,o){return Vl(e,[n,0],[o,0])}l(kf,"compareRankedRootMoveIndices");function RM(e,n){return e.heuristic!==n.heuristic?e.heuristic>n.heuristic?-1:1:Bm(e,n)||Eo(e.inputs,n.inputs)}l(RM,"compareRootMoveSearchPriority");function Rf(e,n){return we(e,{planner:{mode:n}})}l(Rf,"withPlannerMode");function Pf(e,n){return we(Rf(e,n),{replyRisk:{enabled:!1}})}l(Pf,"withoutReplyRiskGuard");function Me(e,n,o,t){return n.filter(r=>{let a=e[r];return a!==void 0&&o(a,r)}).sort(t)[0]}l(Me,"bestOverrideIndex");function un(e,n,o){let t=e[n],r=e[o];return t===void 0||r===void 0?n-o:t.rootRank!==r.rootRank?t.rootRank<r.rootRank?-1:1:ae(e,n,o)}l(un,"compareRootRankThenRanked");function Tf(e,n,o){let t=e[n],r=e[o];return t===void 0||r===void 0?n-o:t.rootRank!==r.rootRank?t.rootRank<r.rootRank?-1:1:t.score!==r.score?t.score>r.score?-1:1:ae(e,n,o)}l(Tf,"compareRootRankThenScoreThenRanked");function po(e,n){let o=he(e,n,n.activeColor);return o.delta.sameTurnScoreWindowValue===0&&o.delta.opponentWindowDenyGain===0&&!o.delta.drainerAttackAvailable}l(po,"exactContextIsQuiet");var Qe=Object.freeze({RankedRoot:"ranked-root",ReplyRiskShortlist:"reply-risk-shortlist",PreserveSpiritRepresentative:"preserve-spirit-representative",PreserveSafeProgressRepresentative:"preserve-safe-progress-representative",PreserveManaTempoRepresentative:"preserve-mana-tempo-representative",OmittedRootReentry:"omitted-root-reentry",AdmitInjectedMacroRoot:"admit-injected-macro-root",RejectInjectedMacroRoot:"reject-injected-macro-root",ApprovedReplyRiskGuard:"approved-reply-risk-guard",ApprovedBaselineSelector:"approved-baseline-selector",ApprovedFamilyCompetition:"approved-family-competition"});function cA(e,n,o,t,r,a,i,s){let u=o[r];if(u===void 0||!L(u))return!1;let c=l(m=>{let d=s.get(m);if(d!==void 0)return d;let f=o[m],y=f===void 0?-2147483648:Ye(e,f.game,a,i);return s.set(m,y),y},"followup"),p=!1;for(let m of t){let d=o[m];if(d===void 0||n.activeColor!==w.Black||n.turnNumber>4||!d.spiritOwnManaSetupNow||d.spiritSameTurnScoreSetupNow||!ye(u.inputs,d.inputs)||u.ownDrainerVulnerable!==d.ownDrainerVulnerable||u.ownDrainerWalkVulnerable!==d.ownDrainerWalkVulnerable||!hn(u)||!hn(d)||oe(u)||oe(d)||u.attacksOpponentDrainer||d.attacksOpponentDrainer||u.sameTurnScoreWindowValue!==0||d.sameTurnScoreWindowValue!==0||u.supermanaProgress||d.supermanaProgress||u.opponentManaProgress||d.opponentManaProgress)continue;if(d.rootRank<=u.rootRank&&g(d.score,64)>=u.score&&d.spiritSetupGain>=g(u.spiritSetupGain,32))return!1;let y=c(r),S=c(m);p||(p=y>=g(S,32)||u.score>=d.score&&y>=S)}return p}l(cA,"blackPlainSpiritRepresentativeCompetes");function PM(e,n,o,t,r,a,i,s,u){let c=o[r];return c===void 0?!1:a!==Qe.PreserveSpiritRepresentative?!0:c.spiritSameTurnScoreSetupNow||c.spiritOwnManaSetupNow||cA(e,n,o,t,r,i,s,u)}l(PM,"representativeCompetesInApproval");function TM(e,n,o,t,r,a,i){let s=t[0];if(s===void 0||t.some(p=>{let m=o[p];return m!==void 0&&i(m)&&hn(m)}))return;let u=o[s];if(u===void 0)return;let c=sn(e,n,u,r,a);return o.map((p,m)=>m).filter(p=>{let m=o[p];return m!==void 0&&i(m)&&hn(m)&&Lo(sn(e,n,m,r,a),c)}).sort((p,m)=>ae(o,p,m))[0]}l(TM,"findScoredRepresentative");function wM(e,n,o,t){if(o.length!==0)return n.map((r,a)=>a).filter(r=>{let a=n[r];return a!==void 0&&!o.includes(r)&&a.spiritOwnManaSetupNow&&a.opponentManaProgress&&!L(a)&&hn(a)&&o.some(i=>uc(e,n,[r,i],t))}).sort((r,a)=>ae(n,r,a))[0]}l(wM,"whiteFollowupRepresentative");function wf(e,n,o,t,r){if(!_(r)||!r.planner.enabled||!r.planner.secondaryAnalysis||o.length<2||!o.every(f=>{let y=n[f];return y!==void 0&&L(y)&&hn(y)}))return;let a=o.map(f=>n[f]).filter(f=>f!==void 0),i=Math.max(...a.map(f=>f.score)),s=Math.min(...a.map(f=>f.rootRank)),u=new Map,c=l(f=>{let y=u.get(f);if(y!==void 0)return y;let S=n[f],C=S===void 0?-2147483648:Ye(e,S.game,t,r);return u.set(f,C),C},"followup"),p=Math.max(...o.map(c)),m=n.map((f,y)=>y).filter(f=>!o.includes(f)),d=m.filter(f=>{let y=n[f];return y!==void 0&&hn(y)&&!y.ownDrainerVulnerable&&!y.ownDrainerWalkVulnerable&&!y.spiritDevelopment&&!y.spiritSameTurnScoreSetupNow&&!y.spiritOwnManaSetupNow&&g(y.score,32)>=i&&c(f)>=g(p,32)}).sort((f,y)=>c(y)-c(f)||ae(n,f,y))[0];return d!==void 0?d:m.filter(f=>{let y=n[f];return y!==void 0&&hn(y)&&!y.ownDrainerVulnerable&&!y.ownDrainerWalkVulnerable&&!y.spiritDevelopment&&!y.spiritSameTurnScoreSetupNow&&!y.spiritOwnManaSetupNow&&Z(y)&&y.policyPriority>0&&y.score>=i&&y.rootRank+2<=s}).sort((f,y)=>ae(n,f,y))[0]}l(wf,"plainSpiritClusterProgressReentry");function vf(e,n,o,t,r,a){if(!_(a)||!a.planner.enabled)return;let i=t.find(p=>{let m=o[p];return m!==void 0&&hn(m)&&Z(m)&&m.policyPriority>0}),s=i===void 0?void 0:o[i];if(s===void 0)return;let u,c;return o.forEach((p,m)=>{if(t.includes(m)||!D(p)||p.ownDrainerWalkVulnerable||p.manaHandoffToOpponent||p.hasRoundtrip||!Mo(p,s)||p.score+32<s.score||p.game.activeColor!==r||p.game.winnerColor()!==void 0)return;let d=sn(e,n,p,r,a);Ur(d)&&(c===void 0||te(d,c)>0||kM(d,c)&&u!==void 0&&ae(o,m,u)<0)&&(u=m,c=d)}),u}l(vf,"riskyRecoveryReentry");function lA(e,n,o,t){if(!_(t)||e.activeColor!==w.Black||e.turnNumber!==6||!e.playerCanMoveMana()||o.length===0||!o.every(i=>{let s=n[i];return s!==void 0&&O(s)===h.ManaTempo&&D(s)&&!s.winsImmediately&&!s.attacksOpponentDrainer&&!oe(s)&&s.sameTurnScoreWindowValue===0&&!s.manaHandoffToOpponent&&!s.hasRoundtrip}))return;let r=Math.min(...o.map(i=>n[i]?.rootRank??Number.MAX_SAFE_INTEGER)),a=Math.max(...o.map(i=>n[i]?.score??-2147483648));return n.map((i,s)=>s).filter(i=>{let s=n[i];return s!==void 0&&!o.includes(i)&&O(s)===h.SpiritImpact&&L(s)&&!oe(s)&&!s.attacksOpponentDrainer&&s.sameTurnScoreWindowValue===0&&!s.manaHandoffToOpponent&&!s.hasRoundtrip&&s.rootRank+4<=r&&j(a,s.score)<=1024}).sort((i,s)=>ae(n,i,s))[0]}l(lA,"blackTurnSixSpiritReentry");function pA(e,n,o,t){if(!_(t))return;let r=o[0],a=r===void 0?void 0:e[r];if(!(a===void 0||!D(a)||!Z(a)))return n.filter(i=>{let s=e[i];return s!==void 0&&!o.includes(i)&&hn(s)&&Mo(s,a)&&j(a.score,s.score)<=320}).sort((i,s)=>ae(e,i,s))[0]}l(pA,"safeProgressSiblingReentry");function dA(e,n,o,t,r){if(!_(r)||n.activeColor!==w.Black||n.turnNumber<6||n.monsMovesCount!==0||n.playerCanUseAction()||!n.playerCanMoveMana()||t.length===0)return;let a=he(e,n,n.activeColor).delta;if(!(a.sameTurnScoreWindowValue>1||a.opponentWindowDenyGain>1||a.sameTurnScoreWindowValue===0&&a.opponentWindowDenyGain===0||t.some(i=>{let s=o[i];return s!==void 0&&(O(s)===h.SafeSupermanaProgress||O(s)===h.SafeOpponentManaProgress)&&hn(s)})))return o.map((i,s)=>s).filter(i=>{let s=o[i],u=s===void 0?void 0:O(s);return s!==void 0&&!t.includes(i)&&(u===h.SafeSupermanaProgress||u===h.SafeOpponentManaProgress)&&!s.manaHandoffToOpponent&&!s.hasRoundtrip&&!s.winsImmediately&&!s.attacksOpponentDrainer&&!oe(s)&&s.sameTurnScoreWindowValue===0&&s.score>=0}).sort((i,s)=>{let u=o[i],c=o[s];return u?.score!==c?.score?(c?.score??-2147483648)-(u?.score??-2147483648):ae(o,i,s)})[0]}l(dA,"blackNoActionSafeProgressReentry");function mA(e,n,o,t){if(!_(t)||e.activeColor!==w.Black||e.turnNumber<6||e.monsMovesCount!==0||e.playerCanUseAction()||!e.playerCanMoveMana())return;let r=[...o].filter(s=>{let u=n[s];return u!==void 0&&O(u)===h.ManaTempo&&hn(u)&&!u.winsImmediately&&!u.attacksOpponentDrainer&&!oe(u)}).sort((s,u)=>ae(n,s,u))[0],a=r===void 0?void 0:n[r];if(a===void 0)return;let i=a.sameTurnScoreWindowValue>0&&!a.ownDrainerVulnerable&&!a.ownDrainerWalkVulnerable;if(!(a.rootRank<6&&!i))return n.map((s,u)=>u).filter(s=>{let u=n[s];return u===void 0||o.includes(s)||O(u)!==h.ManaTempo||u.manaHandoffToOpponent||u.hasRoundtrip||u.winsImmediately||u.attacksOpponentDrainer||oe(u)||!(u.rootRank+4<=a.rootRank||i&&u.rootRank<a.rootRank)||u.sameTurnScoreWindowValue>a.sameTurnScoreWindowValue?!1:a.score>=0?u.score>=0:i&&u.sameTurnScoreWindowValue===a.sameTurnScoreWindowValue&&u.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&u.ownDrainerVulnerable===a.ownDrainerVulnerable&&u.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable?!0:j(a.score,u.score)<=192}).sort((s,u)=>ae(n,s,u))[0]}l(mA,"blackNoActionManaSiblingReentry");function vM(e,n,o,t,r,a,i){let s=[],u=l(c=>{c!==void 0&&!s.includes(c)&&s.push(c)},"add");return u(wf(e,o,t,a,i)),u(vf(e,n,o,t,a,i)),u(lA(n,o,r,i)),u(pA(o,t,r,i)),u(dA(e,n,o,r,i)),u(mA(n,o,r,i)),u(Sc(e,n,o,r,a,i)),s}l(vM,"collectAdvisorReentries");function gf(e,n,o,t,r,a){return t.spiritDevelopment||!(o.spiritOwnManaSetupNow||o.spiritSameTurnScoreSetupNow)||o.sameTurnScoreWindowValue>t.sameTurnScoreWindowValue||o.score>=t.score||n.activeColor===w.Black&&n.turnNumber<=2&&o.spiritOwnManaSetupNow&&!o.spiritSameTurnScoreSetupNow&&O(t)===h.ManaTempo&&!oe(o)&&!oe(t)&&!o.attacksOpponentDrainer&&!t.attacksOpponentDrainer&&hn(o)&&hn(t)&&g(o.score,64)>=t.score&&o.spiritSetupGain>=g(t.spiritSetupGain,48)&&o.rootRank<=t.rootRank?!0:te(sn(e,n,o,r,a),sn(e,n,t,r,a))>=0}l(gf,"spiritSetupCompetes");function gM(e,n,o,t){let r=n.roots[o],a=n.roots[t];return r!==void 0&&a!==void 0&&gf(e,n.game,r,a,n.perspective,n.config)}l(gM,"spiritSetupCompetesWithRoot");function AM(e){let n=e.candidateIndices.map(t=>e.roots[t]).filter(t=>t!==void 0&&(t.spiritDevelopment||t.spiritSameTurnScoreSetupNow||t.spiritOwnManaSetupNow)).map(t=>t.score);if(n.length===0)return!1;let o=Math.max(...n);return e.candidateIndices.some(t=>{let r=e.roots[t];return r!==void 0&&!r.spiritDevelopment&&!r.spiritSameTurnScoreSetupNow&&!r.spiritOwnManaSetupNow&&r.ownDrainerVulnerable&&!r.ownDrainerWalkVulnerable&&!r.manaHandoffToOpponent&&!r.hasRoundtrip&&(oe(r)||r.attacksOpponentDrainer||r.sameTurnScoreWindowValue>0)&&r.score>=o})}l(AM,"riskyScoreCompetition");function Af(e,n,o,t,r){if(!r.planner.enabled||!_(r)||!o.ownDrainerVulnerable||!zr(o,t))return;let a=sn(e,n,o,t,r);return Ur(a)?a:void 0}l(Af,"projectedRiskyRecoveryUtility");function Ef(e,n){return Ur(e)&&te(e,n)>=0&&Do(e,n)}l(Ef,"projectedRecoveryUtilityCompetes");function EM(e){if(!_(e.config))return!1;let n=e.candidateIndices.map(t=>e.roots[t]).filter(t=>t!==void 0&&t.spiritDevelopment&&!t.manaHandoffToOpponent).map(t=>t.efficiency);if(n.length===0)return!1;let o=Math.max(...n);return e.candidateIndices.some(t=>{let r=e.roots[t];return r!==void 0&&!r.ownDrainerVulnerable&&!r.manaHandoffToOpponent&&!r.hasRoundtrip&&(r.supermanaProgress||r.opponentManaProgress)&&r.policyPriority>0&&r.efficiency>=o})}l(EM,"safeProgressCompetition");function OM(e,n){if(!Gn(n.config)||n.candidateIndices.length<2)return!1;let o=n.candidateIndices.filter(u=>{let c=n.roots[u];return c!==void 0&&L(c)&&!D(c)&&!c.manaHandoffToOpponent&&!c.hasRoundtrip}).sort((u,c)=>ae(n.roots,u,c)).slice(0,3);if(o.length===0)return!1;let t=Math.min(...o.map(u=>n.roots[u]?.rootRank??Number.MAX_SAFE_INTEGER)),r=Math.max(...o.map(u=>n.roots[u]?.score??-2147483648)),a=new Map,i=l(u=>{let c=a.get(u);if(c!==void 0)return c;let p=n.roots[u],m=p===void 0?-2147483648:Ye(e,p.game,n.perspective,n.config);return a.set(u,m),m},"followup"),s=Math.max(...o.map(i));return n.candidateIndices.some(u=>{if(o.includes(u))return!1;let c=n.roots[u];return c!==void 0&&!D(c)&&!c.spiritDevelopment&&!c.spiritSameTurnScoreSetupNow&&!c.spiritOwnManaSetupNow&&!c.ownDrainerVulnerable&&!c.manaHandoffToOpponent&&!c.hasRoundtrip&&c.rootRank<=t+2&&g(c.score,32)>=r&&c.policyPriority>0&&i(u)>=g(s,32)})}l(OM,"followupProgressCompetition");function fA(e){return e.winsImmediately||e.attacksOpponentDrainer||e.scoresSupermanaThisTurn||e.scoresOpponentManaThisTurn||e.safeSupermanaPickupNow||e.safeOpponentManaPickupNow||e.sameTurnScoreWindowValue>0}l(fA,"hasNonSpiritScoreCompetitionSurface");function IM(e){if(!_(e.config))return!1;let n=e.candidateIndices.filter(o=>{let t=e.roots[o];return t!==void 0&&L(t)}).sort((o,t)=>ae(e.roots,o,t)).slice(0,3);return n.length===0?!1:e.candidateIndices.some(o=>{if(n.includes(o))return!1;let t=e.roots[o];return t!==void 0&&fA(t)&&n.every(r=>{let a=e.roots[r];return a!==void 0&&(ys(t,a)??0)>0})})}l(IM,"scoreCompetition");function xM(e,n){return e.candidateIndices.filter(o=>{let t=e.roots[o];return t!==void 0&&L(t)&&n.has(o)}).sort((o,t)=>ae(e.roots,o,t))}l(xM,"projectedSpiritIndices");function NM(e,n){if(!e.config.planner.enabled||!_(e.config)||n.size<2)return!1;let o=xM(e,n)[0],t=o===void 0?void 0:e.roots[o],r=o===void 0?void 0:n.get(o);return o===void 0||t===void 0||r===void 0?!1:e.candidateIndices.some(a=>{if(a===o)return!1;let i=e.roots[a],s=n.get(a);if(i===void 0||s===void 0)return!1;let u=cc(i,e.perspective),c=zr(i,e.perspective)&&s.plan.headFamily===h.DrainerSafetyRecovery;return(u||c)&&Math.abs(i.score-t.score)<=320&&(Ya(i,s,t,r)??0)>0})}l(NM,"projectionCompetition");function DM(e,n){if(!e.config.planner.enabled||!_(e.config))return!1;let o=xM(e,n).slice(0,3);if(o.length===0||o.some(r=>{let a=n.get(r);return a!==void 0&&Ct(a.plan.utility)}))return!1;let t=Math.max(...o.map(r=>e.roots[r]?.score??-2147483648));return e.candidateIndices.some(r=>{if(o.includes(r))return!1;let a=e.roots[r];return a!==void 0&&!a.spiritDevelopment&&!a.spiritSameTurnScoreSetupNow&&!a.spiritOwnManaSetupNow&&!a.ownDrainerVulnerable&&!a.manaHandoffToOpponent&&!a.hasRoundtrip&&a.score>=t})}l(DM,"negativeDenyCompetition");function _M(e,n){if(!n.config.planner.enabled||!_(n.config))return!1;let o=n.candidateIndices.filter(a=>{let i=n.roots[a];return i!==void 0&&(i.spiritDevelopment||i.spiritSameTurnScoreSetupNow||i.spiritOwnManaSetupNow)}).sort((a,i)=>ae(n.roots,a,i)).slice(0,3);if(o.length===0)return!1;let t=Math.max(...o.map(a=>n.roots[a]?.score??-2147483648)),r=o.map(a=>n.roots[a]).filter(a=>a!==void 0).map(a=>sn(e,n.game,a,n.perspective,n.config));return r.length===0?!1:n.candidateIndices.some(a=>{let i=n.roots[a];if(i===void 0||i.spiritDevelopment||i.spiritSameTurnScoreSetupNow||i.spiritOwnManaSetupNow||!i.ownDrainerVulnerable||i.manaHandoffToOpponent||i.hasRoundtrip||i.score<t)return!1;let s=Af(e,n.game,i,n.perspective,n.config);return s!==void 0&&r.every(u=>Ef(s,u))})}l(_M,"riskyRecoveryCompetition");function FM(e,n,o){if(!Gn(n.config)||o.length===0||!o.every(u=>{let c=n.roots[u];return c!==void 0&&L(c)&&!D(c)&&!c.manaHandoffToOpponent&&!c.hasRoundtrip}))return;let t=Math.min(...o.map(u=>n.roots[u]?.rootRank??Number.MAX_SAFE_INTEGER)),r=Math.max(...o.map(u=>n.roots[u]?.score??-2147483648)),a=new Map,i=l(u=>{let c=a.get(u);if(c!==void 0)return c;let p=n.roots[u],m=p===void 0?-2147483648:Ye(e,p.game,n.perspective,n.config);return a.set(u,m),m},"followup"),s=Math.max(...o.map(i));return n.candidateIndices.filter(u=>!o.includes(u)).filter(u=>{let c=n.roots[u];return c!==void 0&&!D(c)&&!c.ownDrainerVulnerable&&!c.ownDrainerWalkVulnerable&&!c.manaHandoffToOpponent&&!c.hasRoundtrip&&!c.spiritDevelopment&&!c.spiritSameTurnScoreSetupNow&&!c.spiritOwnManaSetupNow&&c.policyPriority>0&&c.rootRank<=t+2&&g(c.score,32)>=r&&i(u)>=g(s,32)}).sort((u,c)=>{let p=i(u),m=i(c);return p!==m?p>m?-1:1:ae(n.roots,u,c)})[0]}l(FM,"safeProgressReentryAfterSafetyPrefilter");var Cc=Object.freeze({kind:"continue"}),yA=Object.freeze({kind:"select"});function Za(e){return e?yA:Cc}l(Za,"competitionResult");function ks(e){return e===void 0?Cc:{kind:"compare",order:e}}l(ks,"comparisonResult");function Of(e){return e.length===0?Cc:{kind:"select",indices:e}}l(Of,"indexSelectionResult");function np(e){return Object.freeze(e.map(n=>Object.freeze(n)))}l(np,"freezeRules");function op(e){let n=new Map,o=new Map,t=l(c=>{let p=`${c.perspective}:${c.candidateIndices.join(",")}`,m=n.get(p);if(m!==void 0)return m;let d=Jm(e,c.roots,c.candidateIndices,c.perspective,c.config);return n.set(p,d),d},"projections"),r=l(c=>{let p=Math.max(...c.candidateIndices.map(b=>c.roots[b]?.score??-2147483648)),m=Math.max(c.config.policy.drainerSafetyScoreMargin,0),d=c.config.planner.enabled&&_(c.config)?c.candidateIndices.filter(b=>{let k=c.roots[b];return k!==void 0&&k.ownDrainerVulnerable&&!k.manaHandoffToOpponent&&!k.hasRoundtrip&&k.score+m>=p&&zr(k,c.perspective)}):[],f=_(c.config)&&c.selectedIndices.length>0&&d.length>0?c.selectedIndices.map(b=>c.roots[b]).filter(b=>b!==void 0).map(b=>sn(e,c.game,b,c.perspective,c.config)).sort((b,k)=>uo(k,b))[0]:void 0,y=Math.max(...c.selectedIndices.map(b=>c.roots[b]?.score??-2147483648)),S=[...c.selectedIndices];for(let b of d){let k=c.roots[b];if(k===void 0)continue;let M=k.attacksOpponentDrainer||k.classes.drainerSafetyRecover||k.sameTurnScoreWindowValue>0||k.spiritSameTurnScoreSetupNow||k.spiritOwnManaSetupNow||Z(k);if(j(y,k.score)>(M?48:24))continue;let T=Af(e,c.game,k,c.perspective,c.config);T===void 0||f!==void 0&&!Ef(T,f)||S.includes(b)||S.push(b)}let C=FM(e,c,S);return C!==void 0&&!S.includes(C)&&(S.push(C),S.sort((b,k)=>ae(c.roots,b,k))),S.filter(b=>!c.selectedIndices.includes(b))},"safetyReentries"),a=np([{id:"competition.safe-progress",kind:co.SafeProgress,evaluate:l(c=>Za(EM(c)),"evaluate")},{id:"competition.followup-progress",kind:co.FollowupProgress,evaluate:l(c=>Za(OM(e,c)),"evaluate")},{id:"competition.risky-score",kind:co.RiskyScore,evaluate:l(c=>Za(AM(c)),"evaluate")},{id:"competition.negative-deny",kind:co.NegativeDeny,evaluate:l(c=>Za(DM(c,t(c))),"evaluate")},{id:"competition.score",kind:co.Score,evaluate:l(c=>Za(IM(c)),"evaluate")},{id:"competition.projection",kind:co.Projection,evaluate:l(c=>Za(NM(c,t(c))),"evaluate")},{id:"competition.risky-recovery",kind:co.RiskyRecovery,evaluate:l(c=>Za(_M(e,c)),"evaluate")}]),i=np([{id:"safety-reentry.recovery-and-progress",select:l(c=>Of(r(c)),"select")}]),s=np([{id:"final-reentry.plain-spirit-progress",select(c){let p=wf(e,c.roots,c.candidateIndices,c.perspective,c.config);return Of(p===void 0?[]:[p])}},{id:"final-reentry.risky-recovery",select(c){let p=vf(e,c.game,c.roots,c.candidateIndices,c.perspective,c.config);return Of(p===void 0?[]:[p])}}]),u=np([{id:"comparison.spirit-setup",phase:Ht.SpiritSetup,compare(c){return ks(gM(e,c,c.candidateIndex,c.incumbentIndex)?1:-1)}},{id:"comparison.projection-challenge",phase:Ht.ProjectionChallenge,compare(c){let p=c.roots[c.candidateIndex],m=c.roots[c.incumbentIndex];if(p===void 0||m===void 0)return Cc;let d=t(c);return ks(Ya(p,d.get(c.candidateIndex),m,d.get(c.incumbentIndex)))}},{id:"comparison.projection",phase:Ht.Projection,compare(c){let p=t(c),m=p.get(c.candidateIndex),d=p.get(c.incumbentIndex);if(m===void 0&&d===void 0)return Cc;if(m===void 0)return ks(-1);if(d===void 0)return ks(1);let f=c.roots[c.candidateIndex],y=c.roots[c.incumbentIndex];return ks(Yr(m,d,f!==void 0&&y!==void 0&&Math.abs(f.score-y.score)<=192))}},{id:"comparison.followup-floor",phase:Ht.FollowupFloor,compare(c){return ks(lr(e,c.game,c.roots,c.candidateIndex,c.incumbentIndex,c.perspective,c.config,o))}}]);return Object.freeze({competitionRules:a,safetyReentryRules:i,finalReentryRules:s,comparisonRules:u})}l(op,"buildRootPolicy");function ue(e){return!e.winsImmediately&&!e.attacksOpponentDrainer&&!e.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!e.safeSupermanaPickupNow&&!e.safeOpponentManaPickupNow&&!e.manaHandoffToOpponent&&!e.hasRoundtrip}l(ue,"rootIsNonTactical");function WM(e,n,o,t,r,a){if(!_(a)||n.activeColor!==w.Black||n.turnNumber!==4||n.monsMovesCount!==0||n.playerCanUseAction()||!n.playerCanMoveMana())return;let i=he(e,n,n.activeColor);if(i.delta.sameTurnScoreWindowValue>1||i.delta.opponentWindowDenyGain>1||i.delta.sameTurnScoreWindowValue===0&&i.delta.opponentWindowDenyGain===0)return;let s=o[r];if(!(s===void 0||O(s)!==h.ManaTempo||s.rootRank!==0||!s.ownDrainerVulnerable||!ue(s)))return Me(o,t,(u,c)=>c!==r&&O(u)===h.ManaTempo&&u.rootRank>s.rootRank&&u.rootRank<=s.rootRank+2&&u.sameTurnScoreWindowValue===s.sameTurnScoreWindowValue&&u.ownDrainerVulnerable===s.ownDrainerVulnerable&&u.ownDrainerWalkVulnerable===s.ownDrainerWalkVulnerable&&ue(u)&&u.score>=j(s.score,96)&&u.scorePathBestSteps>s.scorePathBestSteps,(u,c)=>un(o,u,c))}l(WM,"blackTurnFourWindowManaSiblingOverride");function BM(e,n,o,t,r,a,i){if(!_(i)||n.activeColor!==w.Black||r===a||!t.includes(a))return;let s=o[r],u=o[a];if(s===void 0||u===void 0)return;let c=O(s),p=O(u),m=he(e,n,n.activeColor),d=ue(s),f=ue(u);return n.turnNumber>=6&&n.monsMovesCount>=2&&n.playerCanUseAction()&&n.playerCanMoveMana()&&m.delta.sameTurnScoreWindowValue===0&&m.delta.opponentWindowDenyGain===0&&!m.delta.drainerAttackAvailable&&c===h.SpiritImpact&&p===h.ManaTempo&&L(s)&&!Z(s)&&d&&f&&s.ownDrainerVulnerable&&u.ownDrainerVulnerable&&u.score>=s.score||n.turnNumber===2&&n.monsMovesCount>=2&&n.playerCanUseAction()&&n.playerCanMoveMana()&&m.delta.sameTurnScoreWindowValue===0&&m.delta.opponentWindowDenyGain===0&&!m.delta.drainerAttackAvailable&&c===h.SpiritImpact&&p===h.SpiritImpact&&d&&f&&s.spiritOwnManaSetupNow&&u.spiritOwnManaSetupNow&&!s.spiritSameTurnScoreSetupNow&&!u.spiritSameTurnScoreSetupNow&&!D(s)&&!D(u)&&ye(s.inputs,u.inputs)&&s.spiritSetupGain===u.spiritSetupGain&&s.safeSupermanaProgressSteps===u.safeSupermanaProgressSteps&&s.safeOpponentManaProgressSteps===u.safeOpponentManaProgressSteps&&s.score===u.score&&u.rootRank<s.rootRank&&Math.abs(s.rootRank-u.rootRank)<=2||n.turnNumber>=4&&n.monsMovesCount===0&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&m.delta.sameTurnScoreWindowValue<=1&&m.delta.opponentWindowDenyGain<=1&&(m.delta.sameTurnScoreWindowValue>0||m.delta.opponentWindowDenyGain>0)&&c===h.ManaTempo&&p===h.ManaTempo&&d&&f&&s.sameTurnScoreWindowValue===u.sameTurnScoreWindowValue&&s.ownDrainerVulnerable===u.ownDrainerVulnerable&&s.rootRank<u.rootRank&&s.score>=u.score&&u.scorePathBestSteps>s.scorePathBestSteps?a:void 0}l(BM,"blackBaselineAlignmentOverride");function LM(e,n,o,t,r,a){if(!_(a)||n.activeColor!==w.Black||n.turnNumber!==6||n.monsMovesCount!==0||!n.playerCanUseAction()||!n.playerCanMoveMana()||t.length===0)return;let i=o[r];if(i===void 0)return;let s=he(e,n,n.activeColor);if(s.delta.sameTurnScoreWindowValue!==0||s.delta.opponentWindowDenyGain!==0||s.delta.drainerAttackAvailable||O(i)!==h.SpiritImpact||!L(i)||Z(i)||!ue(i)||!i.ownDrainerVulnerable)return;let u=Rf(a,$e.Baseline),c;if(u.replyRisk.enabled&&(c=Qa(e,n,o,t,n.activeColor,u)),c??(c=Ss(n,o,t,n.activeColor,u)),c===void 0||c===r||!t.includes(c))return;let p=o[c];if(p===void 0||O(p)!==h.ManaTempo||!ue(p)||!p.ownDrainerVulnerable||i.ownDrainerWalkVulnerable!==p.ownDrainerWalkVulnerable||i.safeSupermanaProgressSteps!==p.safeSupermanaProgressSteps||i.safeOpponentManaProgressSteps!==p.safeOpponentManaProgressSteps||i.scorePathBestSteps!==p.scorePathBestSteps||p.score<g(i.score,256))return;let m=Math.min(Math.max(a.replyRisk.replyLimit,1),24),d=kn(e,i.game,n.activeColor,a,m),f=kn(e,p.game,n.activeColor,a,m);if(!(d.allowsImmediateOpponentWin||f.allowsImmediateOpponentWin||d.opponentReachesMatchPoint||f.opponentReachesMatchPoint||f.worstReplyScore<g(d.worstReplyScore,32)))return c}l(LM,"blackTurnStartGuardedBaselineManaOverride");function GM(e,n,o,t,r,a,i){if(!_(i)||n.activeColor!==w.White||n.turnNumber!==3||r===a)return;let s=o[r],u=o[a];if(s===void 0||u===void 0)return;let c=he(e,n,n.activeColor);return n.monsMovesCount>=3&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&t.includes(a)&&c.delta.sameTurnScoreWindowValue===0&&c.delta.opponentWindowDenyGain===0&&!c.delta.drainerAttackAvailable&&O(s)===h.ManaTempo&&O(u)===h.ManaTempo&&ue(s)&&ue(u)&&!s.spiritDevelopment&&!u.spiritDevelopment&&!s.spiritSameTurnScoreSetupNow&&!u.spiritSameTurnScoreSetupNow&&!s.spiritOwnManaSetupNow&&!u.spiritOwnManaSetupNow&&!s.ownDrainerVulnerable&&!u.ownDrainerVulnerable&&!s.ownDrainerWalkVulnerable&&!u.ownDrainerWalkVulnerable&&s.safeSupermanaProgressSteps===u.safeSupermanaProgressSteps&&s.safeOpponentManaProgressSteps===u.safeOpponentManaProgressSteps&&s.scorePathBestSteps===u.scorePathBestSteps&&s.spiritSetupGain===u.spiritSetupGain&&u.score>=g(s.score,16)&&u.rootRank>=s.rootRank+2&&u.rootRank<=s.rootRank+4?a:void 0}l(GM,"whiteTurnThreeBaselineAlignmentOverride");function VM(e,n,o,t,r,a){if(!_(a)||n.activeColor!==w.White||n.turnNumber!==3||t.length!==1||t[0]!==r||o.length===0)return;let i=o[r];if(i===void 0)return;let s=he(e,n,n.activeColor);if(!s.delta.drainerAttackAvailable||s.delta.sameTurnScoreWindowValue!==0||s.delta.opponentWindowDenyGain!==0||n.monsMovesCount<2||!n.playerCanUseAction()||!n.playerCanMoveMana()||O(i)!==h.SpiritImpact||!i.spiritDevelopment||i.spiritSameTurnScoreSetupNow||!i.spiritOwnManaSetupNow||!ue(i)||D(i)||i.ownDrainerVulnerable||i.ownDrainerWalkVulnerable)return;let u=o.map((c,p)=>p);return Me(o,u,(c,p)=>p!==r&&!t.includes(p)&&O(c)===h.ManaTempo&&!c.spiritDevelopment&&!c.spiritSameTurnScoreSetupNow&&!c.spiritOwnManaSetupNow&&ue(c)&&!D(c)&&!c.ownDrainerVulnerable&&!c.ownDrainerWalkVulnerable&&c.safeSupermanaProgressSteps===i.safeSupermanaProgressSteps&&c.safeOpponentManaProgressSteps===i.safeOpponentManaProgressSteps&&c.scorePathBestSteps===i.scorePathBestSteps&&c.inputs.length>=3&&c.rootRank<=i.rootRank+2,(c,p)=>un(o,c,p))}l(VM,"whiteTurnThreeAttackBridgeEscape");function If(e,n,o,t,r,a){let i=n.activeColor===w.Black&&n.turnNumber===2||n.activeColor===w.White&&n.turnNumber===3;if(!_(a)||!n.playerCanMoveMana()||o.length===0||!i||!po(e,n))return;let s=o[r];if(s===void 0)return;let u=O(s);if(!(!Rn(u,h.ManaTempo,h.SpiritImpact)||s.winsImmediately||s.attacksOpponentDrainer||s.sameTurnScoreWindowValue>0||s.scoresSupermanaThisTurn||s.scoresOpponentManaThisTurn||s.safeSupermanaPickupNow||s.safeOpponentManaPickupNow||s.manaHandoffToOpponent||s.hasRoundtrip||D(s)))return Me(o,t,(c,p)=>p!==r&&O(c)===u&&ye(c.inputs,s.inputs)&&!c.winsImmediately&&!c.attacksOpponentDrainer&&c.sameTurnScoreWindowValue===0&&!c.scoresSupermanaThisTurn&&!c.scoresOpponentManaThisTurn&&!c.safeSupermanaPickupNow&&!c.safeOpponentManaPickupNow&&!c.manaHandoffToOpponent&&!c.hasRoundtrip&&!D(c)&&c.spiritDevelopment===s.spiritDevelopment&&c.spiritSameTurnScoreSetupNow===s.spiritSameTurnScoreSetupNow&&c.spiritOwnManaSetupNow===s.spiritOwnManaSetupNow&&c.supermanaProgress===s.supermanaProgress&&c.opponentManaProgress===s.opponentManaProgress&&c.safeSupermanaProgressSteps===s.safeSupermanaProgressSteps&&c.safeOpponentManaProgressSteps===s.safeOpponentManaProgressSteps&&c.scorePathBestSteps===s.scorePathBestSteps&&c.spiritSetupGain===s.spiritSetupGain&&c.ownDrainerVulnerable===s.ownDrainerVulnerable&&c.ownDrainerWalkVulnerable===s.ownDrainerWalkVulnerable&&c.score>=g(s.score,8)&&c.rootRank<=s.rootRank+8,(c,p)=>{let m=o[c],d=o[p];return m===void 0||d===void 0?c-p:m.score!==d.score?m.score>d.score?-1:1:m.rootRank!==d.rootRank?m.rootRank>d.rootRank?-1:1:-ae(o,c,p)})}l(If,"earlySameLaneHigherScoreOverride");function HM(e,n,o,t,r,a){if(!_(a)||n.activeColor!==w.White||n.turnNumber!==5||n.monsMovesCount!==0||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0)return;let i=he(e,n,n.activeColor);if(!(i.delta.sameTurnScoreWindowValue<=1&&i.delta.opponentWindowDenyGain<=1&&!i.delta.drainerAttackAvailable&&(i.delta.sameTurnScoreWindowValue>0||i.delta.opponentWindowDenyGain>0)))return;let u=o[r];if(!(u===void 0||!Rn(O(u),h.SafeSupermanaProgress,h.SafeOpponentManaProgress)||D(u)||u.winsImmediately||u.attacksOpponentDrainer||u.spiritDevelopment||u.spiritSameTurnScoreSetupNow||u.spiritOwnManaSetupNow||u.sameTurnScoreWindowValue>0||u.scoresSupermanaThisTurn||u.scoresOpponentManaThisTurn||u.safeSupermanaPickupNow||u.safeOpponentManaPickupNow||u.manaHandoffToOpponent||u.hasRoundtrip))return Me(o,t,(c,p)=>p!==r&&O(c)===h.SpiritImpact&&c.spiritOwnManaSetupNow&&!c.spiritSameTurnScoreSetupNow&&Z(c)&&!D(c)&&!c.winsImmediately&&!c.attacksOpponentDrainer&&c.sameTurnScoreWindowValue===0&&!c.scoresSupermanaThisTurn&&!c.scoresOpponentManaThisTurn&&!c.safeSupermanaPickupNow&&!c.safeOpponentManaPickupNow&&c.manaHandoffToOpponent===u.manaHandoffToOpponent&&c.hasRoundtrip===u.hasRoundtrip&&c.ownDrainerVulnerable===u.ownDrainerVulnerable&&c.ownDrainerWalkVulnerable===u.ownDrainerWalkVulnerable&&j(u.score,c.score)<=96&&c.spiritSetupGain>=g(u.spiritSetupGain,48)&&c.safeSupermanaProgressSteps<=u.safeSupermanaProgressSteps+1&&c.safeOpponentManaProgressSteps<=u.safeOpponentManaProgressSteps+1&&c.rootRank<=u.rootRank+4,(c,p)=>un(o,c,p))}l(HM,"whiteTurnFiveWeakWindowSetupOverride");function Ja(e,n){let o=Math.max(e,1),t=Math.max(Math.trunc(n.budget.maxVisitedNodes*Math.max(n.replyRisk.nodeShareBp,0)/1e4),o,1);return Math.min(Math.max(Math.trunc(t/o),1),Math.max(n.replyRisk.replyLimit,1))}l(Ja,"replyLimitForRoots");function UM(e,n,o,t,r,a,i){if(!_(i)||n.activeColor!==w.Black||n.turnNumber<6||n.monsMovesCount!==0||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0)return;let s=o[r];if(s===void 0||O(s)!==h.SpiritImpact||!L(s)||!Z(s)||s.winsImmediately||s.attacksOpponentDrainer||s.sameTurnScoreWindowValue>0||s.scoresSupermanaThisTurn||s.scoresOpponentManaThisTurn||s.safeSupermanaPickupNow||s.safeOpponentManaPickupNow||s.manaHandoffToOpponent||s.hasRoundtrip||D(s))return;let u=Ja(t.length,i),c=kn(e,s.game,a,i,u);if(c.allowsImmediateOpponentWin||c.opponentReachesMatchPoint)return;let p=new Map,m=new Map([[r,c]]),d=new Map,f=l(T=>{let v=p.get(T);if(v!==void 0)return v;let I=o[T],E=I===void 0?sn(e,n,s,a,i):sn(e,n,I,a,i);return p.set(T,E),E},"utility"),y=l(T=>{let v=m.get(T);if(v!==void 0)return v;let I=o[T],E=kn(e,I?.game??s.game,a,i,u);return m.set(T,E),E},"snapshot"),S=l(T=>{let v=d.get(T);if(v!==void 0)return v;let I=o[T],E=Ye(e,I?.game??s.game,a,i);return d.set(T,E),E},"followup"),C=f(r),b=S(r),k=he(e,n,n.activeColor),M=k.delta.sameTurnScoreWindowValue<=1&&k.delta.opponentWindowDenyGain<=1,P;for(let T of t){if(T===r)continue;let v=o[T];if(v===void 0||O(v)!==h.SpiritImpact||!v.spiritOwnManaSetupNow||v.spiritSameTurnScoreSetupNow||!Z(v)||v.winsImmediately||v.attacksOpponentDrainer||v.sameTurnScoreWindowValue>0||v.scoresSupermanaThisTurn||v.scoresOpponentManaThisTurn||v.safeSupermanaPickupNow||v.safeOpponentManaPickupNow||v.manaHandoffToOpponent||v.hasRoundtrip||D(v)||!ye(v.inputs,s.inputs)||v.supermanaProgress!==s.supermanaProgress||v.opponentManaProgress!==s.opponentManaProgress||v.ownDrainerVulnerable!==s.ownDrainerVulnerable||v.ownDrainerWalkVulnerable!==s.ownDrainerWalkVulnerable)continue;let I=f(T),E=y(T),x=S(T),N=Lo(I,C)||Mn(v,s),B=M&&v.spiritSetupGain>s.spiritSetupGain&&v.score>=j(s.score,512);if(!B&&!N||E.allowsImmediateOpponentWin||E.opponentReachesMatchPoint||!B&&g(E.worstReplyScore,320)<c.worstReplyScore||!B&&g(x,32)<b)continue;if(P===void 0){P=T;continue}let W=o[P];if(W===void 0){P=T;continue}let V;if(M)V=v.score>W.score||v.score===W.score&&(v.spiritSetupGain>W.spiritSetupGain||v.spiritSetupGain===W.spiritSetupGain&&ae(o,T,P)<0);else{let Q=te(I,f(P)),U=y(P),ce=S(P);Q>0?V=!0:Q!==0?V=!1:E.worstReplyScore!==U.worstReplyScore?V=E.worstReplyScore>U.worstReplyScore:x!==ce?V=x>ce:v.spiritSetupGain!==W.spiritSetupGain?V=v.spiritSetupGain>W.spiritSetupGain:v.score!==W.score?V=v.score>W.score:V=ae(o,T,P)<0}V&&(P=T)}return P}l(UM,"blackSetupProgressCompetitionOverride");function jM(e,n,o,t,r,a,i){if(!_(i)||n.activeColor!==w.White||n.turnNumber!==3||n.monsMovesCount<3||o.length===0)return;let s=o[r];if(s===void 0||O(s)!==h.ManaTempo||s.ownDrainerVulnerable||s.ownDrainerWalkVulnerable||s.manaHandoffToOpponent||s.hasRoundtrip||s.winsImmediately||s.attacksOpponentDrainer||s.sameTurnScoreWindowValue>0||s.scoresSupermanaThisTurn||s.scoresOpponentManaThisTurn||s.safeSupermanaPickupNow||s.safeOpponentManaPickupNow||D(s))return;let u=Pt(e,n,s,a,i,h.ManaTempo),c=new Map,p,m=u,d=!1;for(let f of t){if(f===r)continue;let y=o[f];if(y===void 0)continue;let S=bs(y,s,i)&&j(s.score,y.score)<=24&&Math.abs(s.rootRank-y.rootRank)<=4&&y.rootRank<s.rootRank;if(O(y)!==h.ManaTempo||y.ownDrainerVulnerable||y.ownDrainerWalkVulnerable||y.manaHandoffToOpponent||y.hasRoundtrip||y.winsImmediately||y.attacksOpponentDrainer||y.sameTurnScoreWindowValue>0||y.scoresSupermanaThisTurn||y.scoresOpponentManaThisTurn||y.safeSupermanaPickupNow||y.safeOpponentManaPickupNow||!S&&y.score<j(s.score,96)||D(y)||y.rootRank>=s.rootRank&&!S)continue;let C=c.get(f);C===void 0&&(C=Pt(e,n,y,a,i,h.ManaTempo),c.set(f,C));let k=te(C,u)>0||so(C,u);if(!k&&!S)continue;let M=p===void 0;if(p!==void 0){let P=o[p];if(P===void 0)M=!0;else{let T=bs(P,s,i)&&j(s.score,P.score)<=24&&Math.abs(s.rootRank-P.rootRank)<=4&&P.rootRank<s.rootRank;if(k!==d)M=k;else if(k){let v=te(C,m);M=v>0||v===0&&ae(o,f,p)<0}else S&&T?M=y.rootRank<P.rootRank||y.rootRank===P.rootRank&&ae(o,f,p)<0:M=S}}M&&(p=f,m=C,d=k)}return p}l(jM,"whiteManaCompetitionOverride");function KM(e,n,o,t,r,a){if(!_(a)||n.activeColor!==w.White||n.turnNumber<5||n.monsMovesCount!==0||n.playerCanUseAction()||!n.playerCanMoveMana()||!po(e,n))return;let i=o[r];if(!(i===void 0||!Rn(O(i),h.SafeSupermanaProgress,h.SafeOpponentManaProgress)||!i.ownDrainerVulnerable||!ue(i)||i.sameTurnScoreWindowValue>0))return Me(o,t,(s,u)=>u!==r&&O(s)===h.ManaTempo&&!D(s)&&!s.ownDrainerVulnerable&&!s.ownDrainerWalkVulnerable&&ue(s)&&s.sameTurnScoreWindowValue===0&&s.safeSupermanaProgressSteps<=i.safeSupermanaProgressSteps+1&&s.safeOpponentManaProgressSteps<=i.safeOpponentManaProgressSteps+1&&g(s.score,448)>=i.score,(s,u)=>un(o,s,u))}l(KM,"whiteNoActionSafeProgressManaOverride");function Kt(e){return O(e)===h.ManaTempo&&e.sameTurnScoreWindowValue>0&&e.sameTurnScoreWindowValue<=1&&!e.winsImmediately&&!e.attacksOpponentDrainer&&!e.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!e.safeSupermanaPickupNow&&!e.safeOpponentManaPickupNow&&!e.manaHandoffToOpponent&&!e.hasRoundtrip}l(Kt,"isNonConcreteManaWindowRoot");function SA(e,n,o,t){return _(t)&&e.activeColor===w.White&&e.turnNumber>=5&&e.monsMovesCount===0&&e.playerCanUseAction()&&e.playerCanMoveMana()&&O(n)===h.SpiritImpact&&!n.spiritSameTurnScoreSetupNow&&!n.spiritOwnManaSetupNow&&Z(n)&&ue(n)&&n.sameTurnScoreWindowValue===0&&Kt(o)&&n.ownDrainerVulnerable===o.ownDrainerVulnerable&&n.ownDrainerWalkVulnerable===o.ownDrainerWalkVulnerable}l(SA,"isWhiteSpiritProgressWindowPair");function qM(e,n,o,t,r,a,i){if(!_(i)||n.activeColor!==w.White||n.turnNumber<5||n.monsMovesCount!==0||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0)return;let s=o[r];if(s===void 0||!Kt(s))return;let u=he(e,n,n.activeColor),c=u.delta.sameTurnScoreWindowValue<=1&&u.delta.opponentWindowDenyGain<=1,p=Ja(t.length,i),m=kn(e,s.game,a,i,p);if(m.allowsImmediateOpponentWin||m.opponentReachesMatchPoint)return;let d=sn(e,n,s,a,i),f=Ye(e,s.game,a,i),y=new Map([[r,m]]),S=new Map([[r,f]]),C=l(M=>{let P=y.get(M),T=o[M];return P===void 0&&T!==void 0&&(P=kn(e,T.game,a,i,p),y.set(M,P)),P},"snapshot"),b=l(M=>{let P=S.get(M),T=o[M];return P===void 0&&T!==void 0&&(P=Ye(e,T.game,a,i),S.set(M,P)),P},"followup"),k;for(let M of t){if(M===r)continue;let P=o[M];if(P===void 0||!SA(n,P,s,i)||P.rootRank>s.rootRank+8)continue;let T=C(M),v=b(M);if(T===void 0||v===void 0)continue;let I=Mn(P,s),E=c&&I&&P.score>=j(s.score,32),x=Lo(sn(e,n,P,a,i),d)||I;if(!(T.allowsImmediateOpponentWin||T.opponentReachesMatchPoint||!E&&!x||!E&&g(T.worstReplyScore,192)<m.worstReplyScore||!E&&g(v,32)<f))if(k===void 0)k=M;else{let N=C(k),B=b(k);(N===void 0||B===void 0||v>B||v===B&&T.worstReplyScore>N.worstReplyScore||v===B&&T.worstReplyScore===N.worstReplyScore&&ae(o,M,k)<0)&&(k=M)}}return k}l(qM,"whiteWindowProgressCompetitionOverride");function zM(e,n,o,t,r){if(!_(r)||e.activeColor!==w.White||e.turnNumber<5||e.monsMovesCount!==0||!e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(!(a===void 0||O(a)!==h.SpiritImpact||!L(a)||!Z(a)||!ue(a)||a.sameTurnScoreWindowValue>0||D(a)))return Me(n,o,(i,s)=>s!==t&&O(i)===h.ManaTempo&&!i.spiritDevelopment&&!i.spiritSameTurnScoreSetupNow&&!i.spiritOwnManaSetupNow&&ue(i)&&i.sameTurnScoreWindowValue===0&&!D(i)&&ye(i.inputs,a.inputs)&&i.ownDrainerVulnerable===a.ownDrainerVulnerable&&i.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&i.safeSupermanaProgressSteps<=a.safeSupermanaProgressSteps&&i.safeOpponentManaProgressSteps<=a.safeOpponentManaProgressSteps&&i.score>=a.score,(i,s)=>{let u=n[i],c=n[s];return u===void 0||c===void 0?i-s:u.score!==c.score?u.score>c.score?-1:1:ae(n,i,s)})}l(zM,"whiteActionManaClusterOverride");function $M(e,n,o,t,r,a,i){if(!_(i)||n.activeColor!==w.White||n.turnNumber!==3||n.monsMovesCount<2||!n.playerCanUseAction()||!n.playerCanMoveMana()||t.length!==1||o.length===0)return;let s=o[r];if(s===void 0||O(s)!==h.SpiritImpact||!s.spiritOwnManaSetupNow||s.spiritSameTurnScoreSetupNow||!ue(s)||s.sameTurnScoreWindowValue>0||D(s))return;let u=sn(e,n,s,a,i);return Me(o,o.map((c,p)=>p),(c,p)=>p===r||O(c)!==h.ManaTempo||c.spiritDevelopment||c.spiritSameTurnScoreSetupNow||c.spiritOwnManaSetupNow||c.ownDrainerVulnerable||c.ownDrainerWalkVulnerable||!ue(c)||c.sameTurnScoreWindowValue!==0||D(c)||c.rootRank>s.rootRank+2||c.safeSupermanaProgressSteps>s.safeSupermanaProgressSteps||c.safeOpponentManaProgressSteps>s.safeOpponentManaProgressSteps||c.scorePathBestSteps>s.scorePathBestSteps?!1:te(sn(e,n,c,a,i),u)>0||c.score>=g(s.score,512),(c,p)=>ae(o,c,p))}l($M,"whiteFollowupManaOverride");function tp(e){return e.activeColor===w.Black&&e.turnNumber>=8&&e.monsMovesCount===0&&e.playerCanUseAction()&&e.playerCanMoveMana()}l(tp,"isLateBlackActionManaTurnStart");function hA(e,n,o,t){return _(t)&&tp(e)&&O(n)===h.SpiritImpact&&n.spiritDevelopment&&!n.spiritSameTurnScoreSetupNow&&!n.spiritOwnManaSetupNow&&n.sameTurnScoreWindowValue===0&&ue(n)&&!D(n)&&O(o)===h.ManaTempo&&o.sameTurnScoreWindowValue===0&&ue(o)&&!D(o)&&ye(n.inputs,o.inputs)}l(hA,"isLateBlackSpiritFollowupManaPair");function XM(e,n,o,t,r){if(!_(r)||!tp(e)||n.length===0)return;let a=n[t];if(!(a===void 0||O(a)!==h.ManaTempo))return Me(n,o,(i,s)=>s!==t&&hA(e,i,a,r)&&j(a.score,i.score)<=512&&i.rootRank<a.rootRank&&Math.abs(a.rootRank-i.rootRank)<=16,(i,s)=>un(n,i,s))}l(XM,"blackLateFollowupCompetitionOverride");function YM(e,n,o,t,r,a){if(!_(a)||!tp(n)||t.length===0||o.length===0||!po(e,n))return;let i=o[r];if(!(i===void 0||O(i)!==h.ManaTempo||i.spiritDevelopment||i.spiritSameTurnScoreSetupNow||i.spiritOwnManaSetupNow||Z(i)||!ue(i)||i.sameTurnScoreWindowValue>0||D(i)||i.ownDrainerVulnerable||i.ownDrainerWalkVulnerable))return Me(o,t,(s,u)=>u!==r&&O(s)===h.SpiritImpact&&s.spiritOwnManaSetupNow&&!s.spiritSameTurnScoreSetupNow&&!Z(s)&&ue(s)&&s.sameTurnScoreWindowValue===0&&!D(s)&&!s.ownDrainerVulnerable&&!s.ownDrainerWalkVulnerable&&s.spiritSetupGain>=g(i.spiritSetupGain,64)&&j(i.score,s.score)<=2048&&s.safeSupermanaProgressSteps===i.safeSupermanaProgressSteps&&s.safeOpponentManaProgressSteps===i.safeOpponentManaProgressSteps&&s.scorePathBestSteps===i.scorePathBestSteps&&s.rootRank<i.rootRank&&Math.abs(i.rootRank-s.rootRank)<=4,(s,u)=>{let c=o[s],p=o[u];return c===void 0||p===void 0?s-u:c.rootRank!==p.rootRank?c.rootRank<p.rootRank?-1:1:c.spiritSetupGain!==p.spiritSetupGain?c.spiritSetupGain>p.spiritSetupGain?-1:1:ae(o,s,u)})}l(YM,"blackLateReplyRiskSetupOverride");function QM(e,n,o,t,r,a,i){if(!_(i)||!tp(n)||t.length===0||o.length===0)return;let s=he(e,n,n.activeColor);if(!(s.delta.sameTurnScoreWindowValue<=1&&s.delta.opponentWindowDenyGain<=1&&!s.delta.drainerAttackAvailable&&(s.delta.sameTurnScoreWindowValue>0||s.delta.opponentWindowDenyGain>0)))return;let c=o[r];if(c===void 0)return;let p=O(c);if(!Rn(p,h.SafeSupermanaProgress,h.SafeOpponentManaProgress)||!Z(c)||c.spiritDevelopment||c.spiritSameTurnScoreSetupNow||c.spiritOwnManaSetupNow||!ue(c)||c.sameTurnScoreWindowValue>0||D(c)||c.ownDrainerVulnerable||c.ownDrainerWalkVulnerable)return;let m=sn(e,n,c,a,i);return Me(o,t,(d,f)=>f!==r&&O(d)===h.SpiritImpact&&d.spiritOwnManaSetupNow&&!d.spiritSameTurnScoreSetupNow&&Z(d)&&ue(d)&&d.sameTurnScoreWindowValue===0&&d.manaHandoffToOpponent===c.manaHandoffToOpponent&&d.hasRoundtrip===c.hasRoundtrip&&!D(d)&&d.ownDrainerVulnerable===c.ownDrainerVulnerable&&d.ownDrainerWalkVulnerable===c.ownDrainerWalkVulnerable&&d.supermanaProgress===c.supermanaProgress&&d.opponentManaProgress===c.opponentManaProgress&&Lo(sn(e,n,d,a,i),m)&&j(c.score,d.score)<=32&&d.spiritSetupGain>=g(c.spiritSetupGain,64)&&d.rootRank<=c.rootRank+4,(d,f)=>{let y=o[d],S=o[f];return y===void 0||S===void 0?d-f:y.score!==S.score?y.score>S.score?-1:1:y.spiritSetupGain!==S.spiritSetupGain?y.spiritSetupGain>S.spiritSetupGain?-1:1:y.rootRank!==S.rootRank?y.rootRank<S.rootRank?-1:1:ae(o,d,f)})}l(QM,"blackLateWeakWindowSafeProgressSetupOverride");function bA(e,n,o,t){return _(t)&&e.activeColor===w.Black&&e.turnNumber<=4&&O(n)===h.SpiritImpact&&!n.spiritSameTurnScoreSetupNow&&!n.spiritOwnManaSetupNow&&Z(n)&&!n.winsImmediately&&!n.attacksOpponentDrainer&&!n.scoresSupermanaThisTurn&&!n.scoresOpponentManaThisTurn&&!n.safeSupermanaPickupNow&&!n.safeOpponentManaPickupNow&&!n.manaHandoffToOpponent&&!n.hasRoundtrip&&Kt(o)&&n.ownDrainerVulnerable===o.ownDrainerVulnerable&&n.ownDrainerWalkVulnerable===o.ownDrainerWalkVulnerable}l(bA,"isBlackSpiritProgressWindowPair");function ZM(e,n,o,t,r,a,i,s){if(!_(s)||n.activeColor!==w.Black||o.length===0)return;let u=o[a];if(u===void 0||O(u)!==h.ManaTempo||a>1&&!(n.turnNumber<=2&&n.playerCanUseAction()&&n.playerCanMoveMana()))return;let c=Kt(u);if(u.winsImmediately||u.attacksOpponentDrainer||u.sameTurnScoreWindowValue>0&&!c||u.scoresSupermanaThisTurn||u.scoresOpponentManaThisTurn||u.safeSupermanaPickupNow||u.safeOpponentManaPickupNow)return;let p=Pt(e,n,u,i,s,h.ManaTempo),m=D(u),d=Z(u),f=Ja(t.length,s),y=new Map,S=new Map,C=l(P=>{let T=y.get(P),v=o[P];return T===void 0&&v!==void 0&&(T=kn(e,v.game,i,s,f),y.set(P,T)),T},"snapshot"),b=l(P=>{let T=S.get(P),v=o[P];return T===void 0&&v!==void 0&&(T=Ye(e,v.game,i,s),S.set(P,T)),T},"followup"),k=[];for(let P of r){if(P===a)continue;let T=o[P];if(T===void 0)continue;let v=O(T),I=T.spiritOwnManaSetupNow||T.spiritSameTurnScoreSetupNow,E=v===h.SpiritImpact&&!I&&Z(T),N=Rn(v,h.SafeSupermanaProgress,h.SafeOpponentManaProgress)&&!c,B=I&&!c&&n.turnNumber<=4;if(!B&&!N&&!E)continue;let W=sn(e,n,T,i,s),V=Z(T),Q=Mn(T,u)||V&&!d;if(v===h.SpiritImpact&&!m&&!D(T)&&O(u)===h.ManaTempo&&!d&&!u.spiritDevelopment&&!u.spiritSameTurnScoreSetupNow&&!u.spiritOwnManaSetupNow&&T.spiritDevelopment&&!T.spiritSameTurnScoreSetupNow&&!T.spiritOwnManaSetupNow&&V&&!T.winsImmediately&&!T.attacksOpponentDrainer&&!T.scoresSupermanaThisTurn&&!T.scoresOpponentManaThisTurn&&!T.safeSupermanaPickupNow&&!T.safeOpponentManaPickupNow&&!T.manaHandoffToOpponent&&!T.hasRoundtrip&&T.sameTurnScoreWindowValue===0&&T.score<=u.score)continue;let ce=N&&n.turnNumber<=6&&u.score<0&&T.score>=0&&Q,Ae=!1;if(E&&c&&bA(n,T,u,s)&&T.rootRank<=u.rootRank+8){let dn=C(P),Ge=C(a),_n=b(P),Fe=b(a);Ae=dn!==void 0&&Ge!==void 0&&_n!==void 0&&Fe!==void 0&&!dn.allowsImmediateOpponentWin&&!Ge.allowsImmediateOpponentWin&&!dn.opponentReachesMatchPoint&&!Ge.opponentReachesMatchPoint&&Mn(T,u)&&g(dn.worstReplyScore,192)>=Ge.worstReplyScore&&g(_n,32)>=Fe}if(!Lo(W,p)&&!ce&&!Ae||D(T)&&!m&&!B&&!ce&&!Ae)continue;let pn=B&&gf(e,n,T,u,i,s);(Q||pn||Ae)&&k.push(P)}return k.map(P=>{let T=o[P];if(T===void 0||!T.spiritOwnManaSetupNow||T.spiritSameTurnScoreSetupNow)return P;let v=C(P);return v===void 0?P:t.filter(E=>{let x=o[E];if(E===P||x===void 0||!za(n,x,T,s))return!1;let N=C(E);return N!==void 0&&(pc(e,n,o,E,N,P,v,i,s,S)??0)>0}).sort((E,x)=>{let N=o[E],B=o[x],W=C(E),V=C(x);if(N===void 0||B===void 0||W===void 0||V===void 0)return E-x;if(W.worstReplyScore!==V.worstReplyScore)return W.worstReplyScore>V.worstReplyScore?-1:1;let Q=b(E)??-2147483648,U=b(x)??-2147483648;return Q!==U?Q>U?-1:1:N.score!==B.score?N.score>B.score?-1:1:ae(o,E,x)})[0]??P}).sort((P,T)=>ae(o,P,T))[0]}l(ZM,"blackFamilyCompetitionOverride");function JM(e,n,o,t,r){if(!_(r)||e.activeColor!==w.Black||e.turnNumber<8||e.monsMovesCount===0||e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(a===void 0||O(a)!==h.ManaTempo||!Kt(a)||!a.ownDrainerVulnerable||a.ownDrainerWalkVulnerable)return;let i=Z(a);return Me(n,o,(s,u)=>{let c=Z(s),p=Mn(s,a)||c&&!i;return u!==t&&O(s)===h.ManaTempo&&ye(s.inputs,a.inputs)&&s.sameTurnScoreWindowValue===0&&!s.ownDrainerVulnerable&&!s.ownDrainerWalkVulnerable&&ue(s)&&!D(s)&&(a.rootRank>0||p)&&j(a.score,s.score)<=32&&s.rootRank<=a.rootRank+2},(s,u)=>un(n,s,u))}l(JM,"blackLateWindowManaSafetyOverride");function ek(e,n,o,t,r){if(!_(r)||n.activeColor!==w.Black||n.turnNumber<8||n.monsMovesCount<3||n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0)return;let a=he(e,n,n.activeColor);if(a.delta.sameTurnScoreWindowValue===0&&a.delta.opponentWindowDenyGain===0)return;let i=o[t];if(!(i===void 0||O(i)!==h.ManaTempo||i.sameTurnScoreWindowValue!==0||!ue(i)||D(i)))return Me(o,o.map((s,u)=>u),(s,u)=>u!==t&&O(s)===h.ManaTempo&&Kt(s)&&s.rootRank===0&&s.ownDrainerVulnerable&&!s.ownDrainerWalkVulnerable&&j(i.score,s.score)<=256,(s,u)=>ae(o,s,u))}l(ek,"blackLateWindowCompetitionOverride");function nk(e,n,o,t,r){if(!_(r)||e.activeColor!==w.Black||e.turnNumber<12||e.monsMovesCount!==0||e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(!(a===void 0||O(a)!==h.DrainerSafetyRecovery||!a.spiritDevelopment||!Z(a)||a.spiritSameTurnScoreSetupNow||a.spiritOwnManaSetupNow||a.sameTurnScoreWindowValue>0||!ue(a)||D(a)||a.inputs.length<3))return Me(n,o,(i,s)=>s!==t&&O(i)===h.SpiritImpact&&i.spiritDevelopment&&!i.spiritSameTurnScoreSetupNow&&!i.spiritOwnManaSetupNow&&Z(i)&&ue(i)&&i.sameTurnScoreWindowValue===0&&i.inputs.length>=3&&Ms(i.inputs,a.inputs,0)&&Ms(i.inputs,a.inputs,1)&&j(a.score,i.score)<=1024&&i.rootRank<=a.rootRank+2&&Mn(i,a),(i,s)=>ae(n,i,s))}l(nk,"blackLateRecoveryProgressCompetitionOverride");function ok(e,n,o,t,r){if(!_(r)||e.activeColor!==w.Black||e.turnNumber>2||!e.playerCanUseAction()||!e.playerCanMoveMana())return;let a=n[t];if(!(a===void 0||O(a)!==h.SpiritImpact||!a.spiritOwnManaSetupNow||a.spiritSameTurnScoreSetupNow||a.winsImmediately||a.attacksOpponentDrainer||a.scoresSupermanaThisTurn||a.scoresOpponentManaThisTurn||a.safeSupermanaPickupNow||a.safeOpponentManaPickupNow||a.sameTurnScoreWindowValue>0||a.manaHandoffToOpponent||a.hasRoundtrip||D(a)||a.inputs.length<2))return Me(n,o,(i,s)=>s!==t&&O(i)===h.SpiritImpact&&i.spiritOwnManaSetupNow&&!i.spiritSameTurnScoreSetupNow&&!i.winsImmediately&&!i.attacksOpponentDrainer&&!i.scoresSupermanaThisTurn&&!i.scoresOpponentManaThisTurn&&!i.safeSupermanaPickupNow&&!i.safeOpponentManaPickupNow&&i.sameTurnScoreWindowValue===0&&!i.manaHandoffToOpponent&&!i.hasRoundtrip&&!D(i)&&i.inputs.length>=2&&Ms(i.inputs,a.inputs,0)&&Ms(i.inputs,a.inputs,1)&&i.spiritSetupGain===a.spiritSetupGain&&i.ownDrainerVulnerable===a.ownDrainerVulnerable&&i.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&i.rootRank<a.rootRank,(i,s)=>un(n,i,s))}l(ok,"blackOpeningSetupSiblingOverride");function tk(e,n,o,t,r,a){if(!_(a)||n.activeColor!==w.Black||n.turnNumber!==2||n.monsMovesCount<2||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0||!po(e,n))return;let i=o[r];if(!(i===void 0||O(i)!==h.SpiritImpact||!L(i)||Z(i)||i.spiritSameTurnScoreSetupNow||i.spiritOwnManaSetupNow||i.winsImmediately||i.attacksOpponentDrainer||i.sameTurnScoreWindowValue>0||i.scoresSupermanaThisTurn||i.scoresOpponentManaThisTurn||i.safeSupermanaPickupNow||i.safeOpponentManaPickupNow||i.manaHandoffToOpponent||i.hasRoundtrip||D(i)))return Me(o,t,(s,u)=>u!==r&&O(s)===h.ManaTempo&&!s.spiritDevelopment&&!s.spiritSameTurnScoreSetupNow&&!s.spiritOwnManaSetupNow&&!Z(s)&&!s.winsImmediately&&!s.attacksOpponentDrainer&&s.sameTurnScoreWindowValue===0&&!s.scoresSupermanaThisTurn&&!s.scoresOpponentManaThisTurn&&!s.safeSupermanaPickupNow&&!s.safeOpponentManaPickupNow&&!s.manaHandoffToOpponent&&!s.hasRoundtrip&&!D(s)&&s.rootRank<i.rootRank&&s.score>=g(i.score,48)&&s.safeSupermanaProgressSteps<=i.safeSupermanaProgressSteps&&s.safeOpponentManaProgressSteps<=i.safeOpponentManaProgressSteps&&s.scorePathBestSteps<=i.scorePathBestSteps&&s.ownDrainerVulnerable===i.ownDrainerVulnerable&&s.ownDrainerWalkVulnerable===i.ownDrainerWalkVulnerable,(s,u)=>Tf(o,s,u))}l(tk,"blackEarlySafeManaFollowupOverride");function rk(e,n,o,t,r,a){if(!_(a)||n.activeColor!==w.Black||n.turnNumber!==2||n.monsMovesCount>1||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0||!po(e,n))return;let i=o[r];if(!(i===void 0||O(i)!==h.ManaTempo||Z(i)||i.spiritDevelopment||i.spiritSameTurnScoreSetupNow||i.spiritOwnManaSetupNow||i.winsImmediately||i.attacksOpponentDrainer||i.sameTurnScoreWindowValue>0||i.scoresSupermanaThisTurn||i.scoresOpponentManaThisTurn||i.safeSupermanaPickupNow||i.safeOpponentManaPickupNow||i.manaHandoffToOpponent||i.hasRoundtrip||D(i)))return Me(o,t,(s,u)=>u!==r&&O(s)===h.SpiritImpact&&L(s)&&!Z(s)&&!s.spiritSameTurnScoreSetupNow&&!s.spiritOwnManaSetupNow&&!s.winsImmediately&&!s.attacksOpponentDrainer&&s.sameTurnScoreWindowValue===0&&!s.scoresSupermanaThisTurn&&!s.scoresOpponentManaThisTurn&&!s.safeSupermanaPickupNow&&!s.safeOpponentManaPickupNow&&!s.manaHandoffToOpponent&&!s.hasRoundtrip&&!D(s)&&s.rootRank>i.rootRank&&s.rootRank<=i.rootRank+4&&s.score>=j(i.score,32)&&s.spiritSetupGain>=g(i.spiritSetupGain,16)&&s.scorePathBestSteps>=i.scorePathBestSteps&&s.ownDrainerVulnerable===i.ownDrainerVulnerable&&s.ownDrainerWalkVulnerable===i.ownDrainerWalkVulnerable,(s,u)=>{let c=o[s],p=o[u];return c===void 0||p===void 0?s-u:c.score!==p.score?c.score>p.score?-1:1:c.spiritSetupGain!==p.spiritSetupGain?c.spiritSetupGain>p.spiritSetupGain?-1:1:c.rootRank!==p.rootRank?c.rootRank<p.rootRank?-1:1:ae(o,s,u)})}l(rk,"blackEarlyPlainSpiritFollowupOverride");function ak(e,n,o,t,r,a){if(!_(a)||n.activeColor!==w.Black||n.turnNumber!==4||n.monsMovesCount===0||n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0||!po(e,n))return;let i=o[r];if(!(i===void 0||!Rn(O(i),h.ManaTempo,h.SafeSupermanaProgress,h.SafeOpponentManaProgress)||!i.ownDrainerVulnerable||i.winsImmediately||i.attacksOpponentDrainer||i.sameTurnScoreWindowValue>0||i.scoresSupermanaThisTurn||i.scoresOpponentManaThisTurn||i.safeSupermanaPickupNow||i.safeOpponentManaPickupNow||i.manaHandoffToOpponent||i.hasRoundtrip))return Me(o,t,(s,u)=>u!==r&&O(s)===h.ManaTempo&&!s.ownDrainerVulnerable&&!s.ownDrainerWalkVulnerable&&!s.winsImmediately&&!s.attacksOpponentDrainer&&!s.spiritDevelopment&&!s.spiritSameTurnScoreSetupNow&&!s.spiritOwnManaSetupNow&&s.sameTurnScoreWindowValue===0&&!s.scoresSupermanaThisTurn&&!s.scoresOpponentManaThisTurn&&!s.safeSupermanaPickupNow&&!s.safeOpponentManaPickupNow&&!s.manaHandoffToOpponent&&!s.hasRoundtrip,(s,u)=>Tf(o,s,u))}l(ak,"blackTurnFourVulnerableProgressManaOverride");function ik(e,n,o,t,r,a){if(!_(a)||n.activeColor!==w.Black||n.turnNumber!==6||n.monsMovesCount!==0||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0)return;let i=he(e,n,n.activeColor);if(i.delta.sameTurnScoreWindowValue>1||i.delta.opponentWindowDenyGain>1||!i.delta.drainerAttackAvailable)return;let s=o[r];if(!(s===void 0||!Rn(O(s),h.SafeSupermanaProgress,h.SafeOpponentManaProgress)||!s.ownDrainerVulnerable||s.ownDrainerWalkVulnerable||s.spiritDevelopment||s.spiritSameTurnScoreSetupNow||s.spiritOwnManaSetupNow||s.sameTurnScoreWindowValue>0||s.winsImmediately||s.attacksOpponentDrainer||s.scoresSupermanaThisTurn||s.scoresOpponentManaThisTurn||s.safeSupermanaPickupNow||s.safeOpponentManaPickupNow||s.manaHandoffToOpponent||s.hasRoundtrip))return Me(o,t,(u,c)=>c!==r&&O(u)===h.ManaTempo&&!u.ownDrainerVulnerable&&!u.ownDrainerWalkVulnerable&&!u.winsImmediately&&!u.attacksOpponentDrainer&&!u.spiritDevelopment&&!u.spiritSameTurnScoreSetupNow&&!u.spiritOwnManaSetupNow&&u.sameTurnScoreWindowValue===0&&!u.scoresSupermanaThisTurn&&!u.scoresOpponentManaThisTurn&&!u.safeSupermanaPickupNow&&!u.safeOpponentManaPickupNow&&!u.manaHandoffToOpponent&&!u.hasRoundtrip&&u.safeSupermanaProgressSteps===s.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps===s.safeOpponentManaProgressSteps+1&&u.scorePathBestSteps===s.scorePathBestSteps&&j(s.score,u.score)<=160&&u.rootRank<=s.rootRank+4,(u,c)=>un(o,u,c))}l(ik,"blackTurnSixAttackVulnerableProgressManaOverride");function sk(e,n,o,t,r,a){if(!_(a)||n.activeColor!==w.Black||n.turnNumber!==4||n.monsMovesCount===0||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0||!po(e,n))return;let i=o[r];if(!(i===void 0||O(i)!==h.SpiritImpact||!L(i)||i.spiritOwnManaSetupNow||i.spiritSameTurnScoreSetupNow||i.winsImmediately||i.attacksOpponentDrainer||i.sameTurnScoreWindowValue>0||i.scoresSupermanaThisTurn||i.scoresOpponentManaThisTurn||i.safeSupermanaPickupNow||i.safeOpponentManaPickupNow||i.manaHandoffToOpponent||i.hasRoundtrip))return Me(o,t,(s,u)=>u!==r&&O(s)===h.SpiritImpact&&s.spiritOwnManaSetupNow&&!s.spiritSameTurnScoreSetupNow&&!s.winsImmediately&&!s.attacksOpponentDrainer&&s.sameTurnScoreWindowValue===0&&!s.scoresSupermanaThisTurn&&!s.scoresOpponentManaThisTurn&&!s.safeSupermanaPickupNow&&!s.safeOpponentManaPickupNow&&!s.manaHandoffToOpponent&&!s.hasRoundtrip&&ye(s.inputs,i.inputs)&&s.ownDrainerVulnerable===i.ownDrainerVulnerable&&s.ownDrainerWalkVulnerable===i.ownDrainerWalkVulnerable&&s.spiritSetupGain>=g(i.spiritSetupGain,32)&&s.rootRank<i.rootRank,(s,u)=>un(o,s,u))}l(sk,"blackTurnFourSetupClusterOverride");function uk(e,n,o,t,r,a){if(!_(a)||n.activeColor!==w.Black||n.turnNumber<6||n.monsMovesCount!==0||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0||!po(e,n))return;let i=o[r];if(!(i===void 0||O(i)!==h.SpiritImpact||!L(i)||Z(i)||i.spiritOwnManaSetupNow||i.spiritSameTurnScoreSetupNow||i.winsImmediately||i.attacksOpponentDrainer||i.sameTurnScoreWindowValue>0||i.scoresSupermanaThisTurn||i.scoresOpponentManaThisTurn||i.safeSupermanaPickupNow||i.safeOpponentManaPickupNow||i.manaHandoffToOpponent||i.hasRoundtrip))return Me(o,t,(s,u)=>u!==r&&O(s)===h.SpiritImpact&&s.spiritOwnManaSetupNow&&!s.spiritSameTurnScoreSetupNow&&!Z(s)&&!s.winsImmediately&&!s.attacksOpponentDrainer&&s.sameTurnScoreWindowValue===0&&!s.scoresSupermanaThisTurn&&!s.scoresOpponentManaThisTurn&&!s.safeSupermanaPickupNow&&!s.safeOpponentManaPickupNow&&s.manaHandoffToOpponent===i.manaHandoffToOpponent&&s.hasRoundtrip===i.hasRoundtrip&&s.ownDrainerVulnerable===i.ownDrainerVulnerable&&s.ownDrainerWalkVulnerable===i.ownDrainerWalkVulnerable&&ye(s.inputs,i.inputs)&&s.spiritSetupGain>=g(i.spiritSetupGain,32)&&s.score>=j(i.score,96)&&s.rootRank<=i.rootRank+4,(s,u)=>{let c=o[s],p=o[u];return c===void 0||p===void 0?s-u:c.score!==p.score?c.score>p.score?-1:1:c.spiritSetupGain!==p.spiritSetupGain?c.spiritSetupGain>p.spiritSetupGain?-1:1:c.rootRank!==p.rootRank?c.rootRank<p.rootRank?-1:1:ae(o,s,u)})}l(uk,"blackPlainSpiritSetupCompetitionOverride");function ck(e,n,o,t,r,a){if(!_(a)||n.activeColor!==w.Black||n.turnNumber<6||n.monsMovesCount!==0||n.playerCanUseAction()||!n.playerCanMoveMana())return;let i=he(e,n,n.activeColor);if(i.delta.sameTurnScoreWindowValue>1||i.delta.opponentWindowDenyGain>1||i.delta.sameTurnScoreWindowValue===0&&i.delta.opponentWindowDenyGain===0)return;let s=o[r];if(!(s===void 0||O(s)!==h.ManaTempo||s.winsImmediately||s.attacksOpponentDrainer||s.scoresSupermanaThisTurn||s.scoresOpponentManaThisTurn||s.safeSupermanaPickupNow||s.safeOpponentManaPickupNow||s.sameTurnScoreWindowValue>0||s.manaHandoffToOpponent||s.hasRoundtrip||s.score<0))return Me(o,t,(u,c)=>c!==r&&Rn(O(u),h.SafeSupermanaProgress,h.SafeOpponentManaProgress)&&u.score>=0&&u.rootRank<s.rootRank&&!u.winsImmediately&&!u.attacksOpponentDrainer&&!u.scoresSupermanaThisTurn&&!u.scoresOpponentManaThisTurn&&!u.safeSupermanaPickupNow&&!u.safeOpponentManaPickupNow&&u.sameTurnScoreWindowValue===0&&!u.manaHandoffToOpponent&&!u.hasRoundtrip,(u,c)=>{let p=o[u],m=o[c];return p===void 0||m===void 0?u-c:p.score!==m.score?p.score>m.score?-1:1:p.rootRank!==m.rootRank?p.rootRank<m.rootRank?-1:1:ae(o,u,c)})}l(ck,"blackNoActionProgressOverride");function lk(e,n,o,t,r){if(!_(r)||e.activeColor!==w.Black||e.turnNumber<6||e.monsMovesCount!==0||e.playerCanUseAction()||!e.playerCanMoveMana())return;let a=n[t];if(a===void 0)return;let i=a.sameTurnScoreWindowValue>0&&!a.ownDrainerVulnerable&&!a.ownDrainerWalkVulnerable;if(!(O(a)!==h.ManaTempo||a.winsImmediately||a.attacksOpponentDrainer||a.scoresSupermanaThisTurn||a.scoresOpponentManaThisTurn||a.safeSupermanaPickupNow||a.safeOpponentManaPickupNow||a.manaHandoffToOpponent||a.hasRoundtrip||a.sameTurnScoreWindowValue>0&&!i||a.rootRank<3&&!i))return Me(n,o,(s,u)=>u===t||O(s)!==h.ManaTempo||s.rootRank>=a.rootRank||s.sameTurnScoreWindowValue>a.sameTurnScoreWindowValue||s.winsImmediately||s.attacksOpponentDrainer||s.scoresSupermanaThisTurn||s.scoresOpponentManaThisTurn||s.safeSupermanaPickupNow||s.safeOpponentManaPickupNow||s.manaHandoffToOpponent||s.hasRoundtrip?!1:a.score>=0?s.score>=0:i&&s.sameTurnScoreWindowValue===a.sameTurnScoreWindowValue&&s.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&s.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&s.ownDrainerVulnerable===a.ownDrainerVulnerable&&s.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&s.manaHandoffToOpponent===a.manaHandoffToOpponent&&s.hasRoundtrip===a.hasRoundtrip?!0:j(a.score,s.score)<=192,(s,u)=>un(n,s,u))}l(lk,"blackNoActionManaSiblingOverride");function pk(e,n,o,t,r,a){if(!_(a)||n.activeColor!==r.color||n.turnNumber!==r.turnNumber||(r.monsMoves.kind==="exact"?n.monsMovesCount!==r.monsMoves.count:n.monsMovesCount<r.monsMoves.count)||n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0)return;let i=he(e,n,n.activeColor);if(i.delta.sameTurnScoreWindowValue>1||i.delta.opponentWindowDenyGain>1||i.delta.sameTurnScoreWindowValue===0&&i.delta.opponentWindowDenyGain===0||r.rejectDrainerAttack&&i.delta.drainerAttackAvailable||i.delta.drainerSafety>=0)return;let s=o[t];if(!(s===void 0||!Kt(s)||!s.ownDrainerVulnerable||s.ownDrainerWalkVulnerable||s.spiritDevelopment||s.spiritSameTurnScoreSetupNow||s.spiritOwnManaSetupNow))return Me(o,o.map((u,c)=>c),(u,c)=>c!==t&&O(u)===h.DrainerSafetyRecovery&&u.classes.drainerSafetyRecover&&!D(u)&&!u.ownDrainerVulnerable&&!u.ownDrainerWalkVulnerable&&!u.spiritDevelopment&&!u.spiritSameTurnScoreSetupNow&&!u.spiritOwnManaSetupNow&&ue(u)&&u.sameTurnScoreWindowValue===0&&ye(u.inputs,s.inputs)&&(!r.requireSameProgressSteps||u.safeSupermanaProgressSteps===s.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps===s.safeOpponentManaProgressSteps)&&u.rootRank<=s.rootRank&&u.scorePathBestSteps>s.scorePathBestSteps,(u,c)=>un(o,u,c))}l(pk,"noActionRecoveryOverride");function dk(e,n,o,t,r){return pk(e,n,o,t,{color:w.White,turnNumber:3,monsMoves:{kind:"exact",count:0},rejectDrainerAttack:!1,requireSameProgressSteps:!1},r)}l(dk,"whiteTurnThreeNoActionRecoveryOverride");function mk(e,n,o,t,r){return pk(e,n,o,t,{color:w.Black,turnNumber:4,monsMoves:{kind:"minimum",count:1},rejectDrainerAttack:!0,requireSameProgressSteps:!0},r)}l(mk,"blackTurnFourWeakWindowRecoveryOverride");function fk(e,n,o,t,r){if(!_(r)||e.activeColor!==w.White||e.turnNumber!==3||e.monsMovesCount!==1||!e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(!(a===void 0||!Rn(O(a),h.SafeSupermanaProgress,h.SafeOpponentManaProgress)||D(a)||!ue(a)||a.spiritDevelopment||a.spiritSameTurnScoreSetupNow||a.spiritOwnManaSetupNow||a.sameTurnScoreWindowValue>0))return Me(n,o,(i,s)=>{let u=j(a.score,i.score)<=160&&i.spiritSetupGain>=g(a.spiritSetupGain,64)&&i.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&i.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&i.rootRank+6<=a.rootRank;return s!==t&&O(i)===h.SpiritImpact&&i.spiritOwnManaSetupNow&&!i.spiritSameTurnScoreSetupNow&&Z(i)&&!D(i)&&ue(i)&&i.sameTurnScoreWindowValue===0&&i.manaHandoffToOpponent===a.manaHandoffToOpponent&&i.hasRoundtrip===a.hasRoundtrip&&i.ownDrainerVulnerable===a.ownDrainerVulnerable&&i.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&(j(a.score,i.score)<=32||u)&&i.spiritSetupGain>=g(a.spiritSetupGain,64)&&i.safeSupermanaProgressSteps<=a.safeSupermanaProgressSteps&&i.safeOpponentManaProgressSteps<=a.safeOpponentManaProgressSteps&&i.rootRank<=a.rootRank+4},(i,s)=>{let u=n[i],c=n[s];return u===void 0||c===void 0?i-s:u.score!==c.score?u.score>c.score?-1:1:u.spiritSetupGain!==c.spiritSetupGain?u.spiritSetupGain<c.spiritSetupGain?-1:1:u.rootRank!==c.rootRank?u.rootRank<c.rootRank?-1:1:ae(n,i,s)})}l(fk,"whiteEarlySafeProgressSetupCompetitionOverride");function yk(e,n,o,t,r,a){if(!_(a)||n.activeColor!==w.White||n.turnNumber!==3||n.monsMovesCount!==1||!n.playerCanUseAction()||!n.playerCanMoveMana()||t.length!==1||o.length===0)return;let i=o[r];if(!(i===void 0||O(i)!==h.SpiritImpact||!i.spiritOwnManaSetupNow||i.spiritSameTurnScoreSetupNow||!ue(i)||i.sameTurnScoreWindowValue>0||D(i)||he(e,n,n.activeColor).delta.sameTurnScoreWindowValue===0))return Me(o,o.map((u,c)=>c),(u,c)=>c!==r&&O(u)===h.ManaTempo&&!u.ownDrainerVulnerable&&!u.ownDrainerWalkVulnerable&&!u.spiritDevelopment&&!u.spiritSameTurnScoreSetupNow&&!u.spiritOwnManaSetupNow&&u.sameTurnScoreWindowValue===0&&ue(u)&&!D(u),(u,c)=>ae(o,u,c))}l(yk,"whiteEarlySetupCompetitionOverride");function CA(e,n,o,t){return _(t)&&e.activeColor===w.White&&e.turnNumber>=8&&e.monsMovesCount===0&&e.playerCanUseAction()&&e.playerCanMoveMana()&&O(n)===h.SpiritImpact&&n.spiritDevelopment&&!n.spiritSameTurnScoreSetupNow&&n.sameTurnScoreWindowValue===0&&ue(n)&&!D(n)&&Rn(O(o),h.SafeSupermanaProgress,h.ManaTempo)&&!o.spiritDevelopment&&o.sameTurnScoreWindowValue===0&&ue(o)&&!D(o)&&ye(n.inputs,o.inputs)}l(CA,"isLateWhiteSpiritFollowupSafeProgressPair");function Sk(e,n,o,t){if(!_(t)||e.activeColor!==w.White||e.turnNumber<8||e.monsMovesCount!==0||!e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let r=n[o];if(r===void 0||!Rn(O(r),h.SafeSupermanaProgress,h.ManaTempo))return;let a=n.map((s,u)=>u).filter(s=>{let u=n[s];return s!==o&&u!==void 0&&CA(e,u,r,t)&&j(r.score,u.score)<=512&&Math.abs(r.rootRank-u.rootRank)<=10}),i=a.some(s=>n[s]?.spiritOwnManaSetupNow===!0);return a.sort((s,u)=>{let c=n[s],p=n[u];return c===void 0||p===void 0?s-u:i&&c.spiritOwnManaSetupNow!==p.spiritOwnManaSetupNow?c.spiritOwnManaSetupNow?-1:1:i&&c.spiritSetupGain!==p.spiritSetupGain?c.spiritSetupGain>p.spiritSetupGain?-1:1:un(n,s,u)})[0]}l(Sk,"whiteLateFollowupCompetitionOverride");function hk(e,n,o,t,r,a,i){if(!_(i)||n.activeColor!==w.White||n.turnNumber<5||n.monsMovesCount!==0||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0)return;let s=o[r];if(s===void 0||O(s)!==h.SpiritImpact||!L(s)||!Z(s)||!ue(s)||s.sameTurnScoreWindowValue>0||D(s))return;let u=Ja(t.length,i),c=kn(e,s.game,a,i,u);if(c.allowsImmediateOpponentWin||c.opponentReachesMatchPoint)return;let p=new Map,m=new Map([[r,c]]),d=new Map,f=l(M=>{let P=p.get(M),T=o[M];return P===void 0&&T!==void 0&&(P=sn(e,n,T,a,i),p.set(M,P)),P},"utility"),y=l(M=>{let P=m.get(M),T=o[M];return P===void 0&&T!==void 0&&(P=kn(e,T.game,a,i,u),m.set(M,P)),P},"snapshot"),S=l(M=>{let P=d.get(M),T=o[M];return P===void 0&&T!==void 0&&(P=Ye(e,T.game,a,i),d.set(M,P)),P},"followup"),C=f(r),b=S(r);if(C===void 0||b===void 0)return;let k;for(let M of t){if(M===r)continue;let P=o[M];if(P===void 0||O(P)!==h.SpiritImpact||!P.spiritOwnManaSetupNow||P.spiritSameTurnScoreSetupNow||!Z(P)||!hn(P)||!ue(P)||P.sameTurnScoreWindowValue>0||!ye(P.inputs,s.inputs)||P.ownDrainerVulnerable!==s.ownDrainerVulnerable||P.ownDrainerWalkVulnerable!==s.ownDrainerWalkVulnerable)continue;let T=P.safeSupermanaProgressSteps===s.safeSupermanaProgressSteps&&P.safeOpponentManaProgressSteps===s.safeOpponentManaProgressSteps&&P.manaHandoffToOpponent===s.manaHandoffToOpponent&&P.hasRoundtrip===s.hasRoundtrip&&j(s.score,P.score)<=64&&P.spiritSetupGain>=g(s.spiritSetupGain,32)&&P.rootRank<=s.rootRank+2,v=f(M),I=y(M),E=S(M);if(v===void 0||I===void 0||E===void 0)continue;let x=!I.allowsImmediateOpponentWin&&!I.opponentReachesMatchPoint&&j(s.score,P.score)<=128&&g(I.worstReplyScore,320)>=c.worstReplyScore&&g(E,32)>=b&&P.rootRank<=s.rootRank+4&&(Lo(v,C)||Mn(P,s));if(!T&&!x)continue;if(k===void 0){k=M;continue}let N=o[k],B=f(k),W=y(k),V=S(k);if(N===void 0||B===void 0||W===void 0||V===void 0){k=M;continue}let Q=te(v,B);(Q>0||Q>=0&&E>V||Q>=0&&E===V&&I.worstReplyScore>W.worstReplyScore||E===V&&I.worstReplyScore===W.worstReplyScore&&P.spiritSetupGain>N.spiritSetupGain||E===V&&I.worstReplyScore===W.worstReplyScore&&P.spiritSetupGain===N.spiritSetupGain&&ae(o,M,k)<0)&&(k=M)}return k}l(hk,"whiteSetupProgressCompetitionOverride");function bk(e,n,o,t,r){if(!_(r)||e.activeColor!==w.White||e.turnNumber!==3||e.monsMovesCount!==1||!e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(!(a===void 0||O(a)!==h.SpiritImpact||!L(a)||!Z(a)||!ue(a)||a.sameTurnScoreWindowValue>0||D(a)))return Me(n,o,(i,s)=>s!==t&&O(i)===h.SpiritImpact&&i.spiritOwnManaSetupNow&&!i.spiritSameTurnScoreSetupNow&&Z(i)&&ue(i)&&i.sameTurnScoreWindowValue===0&&!D(i)&&ye(i.inputs,a.inputs)&&i.supermanaProgress===a.supermanaProgress&&i.opponentManaProgress===a.opponentManaProgress&&i.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&i.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&i.ownDrainerVulnerable===a.ownDrainerVulnerable&&i.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&j(a.score,i.score)<=64&&i.spiritSetupGain>=g(a.spiritSetupGain,32)&&i.rootRank<=a.rootRank+4,(i,s)=>{let u=n[i],c=n[s];return u===void 0||c===void 0?i-s:u.score!==c.score?u.score>c.score?-1:1:u.rootRank!==c.rootRank?u.rootRank<c.rootRank?-1:1:ae(n,i,s)})}l(bk,"whiteEarlyFollowupSetupCompetitionOverride");function Ck(e,n,o,t,r){if(!_(r)||n.activeColor!==w.White||n.turnNumber!==3||n.monsMovesCount!==1||!n.playerCanUseAction()||!n.playerCanMoveMana()||o.length===0||!po(e,n))return;let a=o[t];if(!(a===void 0||O(a)!==h.SpiritImpact||!a.spiritOwnManaSetupNow||a.spiritSameTurnScoreSetupNow||!Z(a)||!ue(a)||a.sameTurnScoreWindowValue>0||D(a)))return Me(o,o.map((i,s)=>s),(i,s)=>{let u=i.safeSupermanaProgressSteps<a.safeSupermanaProgressSteps||i.safeOpponentManaProgressSteps<a.safeOpponentManaProgressSteps||i.spiritSetupGain>a.spiritSetupGain;return s!==t&&O(i)===h.SpiritImpact&&i.spiritOwnManaSetupNow&&!i.spiritSameTurnScoreSetupNow&&Z(i)&&ue(i)&&i.sameTurnScoreWindowValue===0&&!D(i)&&ye(i.inputs,a.inputs)&&i.supermanaProgress===a.supermanaProgress&&i.opponentManaProgress===a.opponentManaProgress&&i.safeSupermanaProgressSteps<=a.safeSupermanaProgressSteps&&i.safeOpponentManaProgressSteps<=a.safeOpponentManaProgressSteps&&i.scorePathBestSteps<=a.scorePathBestSteps&&i.ownDrainerVulnerable===a.ownDrainerVulnerable&&i.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&i.score>=j(a.score,64)&&i.rootRank<=a.rootRank+8&&u},(i,s)=>{let u=o[i],c=o[s];if(u===void 0||c===void 0)return i-s;let p=a.safeSupermanaProgressSteps-u.safeSupermanaProgressSteps,m=a.safeSupermanaProgressSteps-c.safeSupermanaProgressSteps;if(p!==m)return p>m?-1:1;let d=j(a.spiritSetupGain,u.spiritSetupGain),f=j(a.spiritSetupGain,c.spiritSetupGain);return d!==f?d>f?-1:1:u.score!==c.score?u.score>c.score?-1:1:u.rootRank!==c.rootRank?u.rootRank<c.rootRank?-1:1:ae(o,i,s)})}l(Ck,"whiteEarlySetupSiblingProgressOverride");function Mk(e,n,o,t,r){if(!_(r)||e.activeColor!==w.White||e.turnNumber!==3||e.monsMovesCount!==1||e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(!(a===void 0||!Rn(O(a),h.SafeSupermanaProgress,h.SafeOpponentManaProgress)||!a.ownDrainerVulnerable||a.ownDrainerWalkVulnerable||!ue(a)||a.spiritDevelopment||a.spiritSameTurnScoreSetupNow||a.spiritOwnManaSetupNow||a.sameTurnScoreWindowValue>0))return Me(n,o,(i,s)=>s!==t&&Rn(O(i),h.SafeSupermanaProgress,h.SafeOpponentManaProgress)&&!i.ownDrainerVulnerable&&!i.ownDrainerWalkVulnerable&&ue(i)&&!i.spiritDevelopment&&!i.spiritSameTurnScoreSetupNow&&!i.spiritOwnManaSetupNow&&i.sameTurnScoreWindowValue===0&&i.supermanaProgress===a.supermanaProgress&&i.opponentManaProgress===a.opponentManaProgress&&i.safeSupermanaProgressSteps===a.safeSupermanaProgressSteps&&i.safeOpponentManaProgressSteps===a.safeOpponentManaProgressSteps&&i.score>=j(a.score,32),(i,s)=>un(n,i,s))}l(Mk,"whiteEarlyNoActionProgressCompetitionOverride");function kk(e,n,o,t,r){if(!_(r)||e.activeColor!==w.White||e.turnNumber<5||e.monsMovesCount!==0||e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(!(a===void 0||!Rn(O(a),h.SafeSupermanaProgress,h.SafeOpponentManaProgress)||!a.ownDrainerVulnerable||a.ownDrainerWalkVulnerable||!ue(a)||a.spiritDevelopment||a.spiritSameTurnScoreSetupNow||a.spiritOwnManaSetupNow||a.sameTurnScoreWindowValue>0))return Me(n,o,(i,s)=>s!==t&&O(i)===h.ManaTempo&&!i.ownDrainerVulnerable&&!i.ownDrainerWalkVulnerable&&!i.spiritDevelopment&&!i.spiritSameTurnScoreSetupNow&&!i.spiritOwnManaSetupNow&&i.sameTurnScoreWindowValue===0&&ue(i)&&!D(i)&&j(a.score,i.score)<=64&&Math.abs(a.rootRank-i.rootRank)<=6,(i,s)=>un(n,i,s))}l(kk,"whiteManaOnlyCompetitionOverride");function Rk(e,n,o,t,r){if(!_(r)||e.activeColor!==w.White||e.turnNumber!==3||e.monsMovesCount!==0||e.playerCanUseAction()||!e.playerCanMoveMana()||n.length===0)return;let a=n[t];if(!(a===void 0||!Rn(O(a),h.SafeSupermanaProgress,h.SafeOpponentManaProgress)||D(a)||!ue(a)||a.spiritDevelopment||a.spiritSameTurnScoreSetupNow||a.spiritOwnManaSetupNow||a.sameTurnScoreWindowValue>0))return Me(n,o,(i,s)=>s!==t&&Rn(O(i),h.SafeSupermanaProgress,h.SafeOpponentManaProgress)&&!D(i)&&ue(i)&&!i.spiritDevelopment&&!i.spiritSameTurnScoreSetupNow&&!i.spiritOwnManaSetupNow&&i.sameTurnScoreWindowValue===0&&i.ownDrainerVulnerable===a.ownDrainerVulnerable&&i.ownDrainerWalkVulnerable===a.ownDrainerWalkVulnerable&&i.manaHandoffToOpponent===a.manaHandoffToOpponent&&i.hasRoundtrip===a.hasRoundtrip&&i.rootRank<a.rootRank&&i.score>=j(a.score,32)&&Mn(i,a),(i,s)=>un(n,i,s))}l(Rk,"whiteTurnThreeSafeProgressSurfaceOverride");var MA=Object.freeze({kind:"continue"});function Pk(e,n,o){return Object.freeze({id:e,evaluate(t){let r=o(t);return r===void 0?MA:{kind:"select",index:r,reason:n}}})}l(Pk,"selectionRule");function ve(e,n){return Pk(e,Qe.ApprovedFamilyCompetition,n)}l(ve,"familyRule");function xf(e,n){return Pk(e,Qe.ApprovedBaselineSelector,n)}l(xf,"baselineRule");var kA=Object.freeze([ve("black-family-competition",e=>ZM(e.execution,e.game,e.roots,e.replyRiskShortlist,e.selectionIndices,e.chosenIndex,e.perspective,e.config)),ve("black-opening-setup-sibling",e=>ok(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-early-safe-mana-followup",e=>tk(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-early-plain-spirit-followup",e=>rk(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-turn-four-vulnerable-progress-mana",e=>ak(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-turn-six-attack-vulnerable-progress-mana",e=>ik(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-turn-four-setup-cluster",e=>sk(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-opening-early-same-lane-higher-score",e=>If(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-setup-progress-competition",e=>UM(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.perspective,e.config)),ve("black-plain-spirit-setup-competition",e=>uk(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-no-action-progress",e=>ck(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-no-action-mana-sibling",e=>lk(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-turn-four-window-mana-sibling",e=>WM(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-turn-four-weak-window-recovery",e=>mk(e.execution,e.game,e.roots,e.chosenIndex,e.config)),xf("black-baseline-alignment",e=>e.baselineIndex===void 0?void 0:BM(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.baselineIndex,e.config)),xf("black-turn-start-guarded-baseline-mana",e=>LM(e.execution,e.game,e.roots,e.candidateIndices,e.chosenIndex,e.config)),ve("black-late-window-mana-safety",e=>JM(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-late-window-competition",e=>ek(e.execution,e.game,e.roots,e.chosenIndex,e.config)),ve("black-late-recovery-progress-competition",e=>nk(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("white-followup-mana",e=>$M(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.perspective,e.config)),ve("white-mana-competition",e=>jM(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.perspective,e.config)),ve("white-no-action-safe-progress-mana",e=>KM(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("white-window-progress-competition",e=>qM(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.perspective,e.config)),ve("white-action-mana-cluster",e=>zM(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("white-setup-progress-competition",e=>hk(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.perspective,e.config)),ve("white-early-followup-setup-competition",e=>bk(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("white-opening-early-same-lane-higher-score",e=>If(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("white-early-setup-sibling-progress",e=>Ck(e.execution,e.game,e.roots,e.chosenIndex,e.config)),ve("white-early-safe-progress-setup-competition",e=>fk(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("white-early-no-action-progress-competition",e=>Mk(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("white-turn-three-safe-progress-surface",e=>Rk(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),xf("white-turn-three-baseline-alignment",e=>e.baselineIndex===void 0?void 0:GM(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.baselineIndex,e.config)),ve("white-turn-three-attack-bridge-escape",e=>VM(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("white-turn-three-no-action-recovery",e=>dk(e.execution,e.game,e.roots,e.chosenIndex,e.config)),ve("white-mana-only-competition",e=>kk(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("white-turn-five-weak-window-setup",e=>HM(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("white-early-setup-competition",e=>yk(e.execution,e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("white-late-followup-competition",e=>Sk(e.game,e.roots,e.chosenIndex,e.config)),ve("black-late-followup-competition",e=>XM(e.game,e.roots,e.selectionIndices,e.chosenIndex,e.config)),ve("black-late-reply-risk-setup",e=>YM(e.execution,e.game,e.roots,e.replyRiskShortlist,e.chosenIndex,e.config)),ve("black-late-weak-window-safe-progress-setup",e=>QM(e.execution,e.game,e.roots,e.replyRiskShortlist,e.chosenIndex,e.perspective,e.config))]);function Tk(e,n,o=kA){let t=n;for(let r of o){let a=r.evaluate({...e,chosenIndex:t.index});a.kind==="select"&&(t={index:a.index,reason:a.reason})}return t}l(Tk,"applyAdvisorSelectionRules");function wk(e,n,o,t,r,a,i,s=Qe.OmittedRootReentry){let u=e[i];if(u===void 0)return;let c=jt(u,s);Go(o,c),t.includes(i)||t.push(i),r.includes(i)||r.push(i),a.includes(i)||a.push(i),Go(n,c)}l(wk,"addAdvisorReentry");function vk(e,n,o,t,r){if(!_(r)||o.length===0||e.session.checkpoint())return;let a=op(e),i=ac(n,o,t,r,{rootReplyRiskSnapshot:l((x,N,B,W)=>kn(e,x,N,r,W),"rootReplyRiskSnapshot"),productionPolicy:a});i.length===0&&(i=o.map((x,N)=>N));let s=r.replyRisk.enabled?Ka(e,o,i,r):[...i];s.length===0&&(s=[...i]);let u=[...s],c=[...s],p=[...i],m=[],d=[];for(let x of s){let N=o[x];N!==void 0&&Go(m,jt(N,Qe.ReplyRiskShortlist))}let f=new Map,y=[[Qe.PreserveSpiritRepresentative,x=>x.spiritSameTurnScoreSetupNow||x.spiritOwnManaSetupNow],[Qe.PreserveSpiritRepresentative,L],[Qe.PreserveSafeProgressRepresentative,x=>O(x)===h.SafeSupermanaProgress],[Qe.PreserveSafeProgressRepresentative,x=>O(x)===h.SafeOpponentManaProgress],[Qe.PreserveManaTempoRepresentative,x=>O(x)===h.ManaTempo]];for(let[x,N]of y){if(e.session.checkpoint())return;let B=TM(e,n,o,s,t,r,N),W=B===void 0?void 0:o[B];if(B===void 0||W===void 0)continue;let V=jt(W,x);Go(d,V),s.includes(B)||s.push(B),p.includes(B)||p.push(B),Go(m,V),PM(e,n,o,s,B,x,t,r,f)&&!c.includes(B)&&c.push(B)}let S=wM(n,o,s,r);S!==void 0&&wk(o,m,d,s,p,c,S,Qe.PreserveSpiritRepresentative);for(let x of vM(e,n,o,i,s,t,r))wk(o,m,d,s,p,c,x);p.sort((x,N)=>ae(o,x,N));let C=Pf(r,$e.Baseline),b=Ss(n,o,i,t,C),k=Pf(r,r.planner.mode),M,P;r.replyRisk.enabled&&(M=Qa(e,n,o,c,t,r,p)),M!==void 0?P=Qe.ApprovedReplyRiskGuard:(M=Ss(n,o,p,t,k,{productionPolicy:a}),P=Qe.ApprovedBaselineSelector);let T=Tk({execution:e,game:n,roots:o,replyRiskShortlist:u,selectionIndices:p,candidateIndices:i,perspective:t,config:r,baselineIndex:b},{index:M??s[0]??i[0]??0,reason:P}),v=T.index;P=T.reason;let I=o[v];if(I===void 0||e.session.checkpoint())return;let E=jt(I,P);return{index:v,decision:{orderedShortlist:m,preservedFamilyRepresentatives:d,approvedRoot:E,injectedRoot:void 0}}}l(vk,"productionRootAdvisorPostsearch");function RA(e,n,o,t,r,a){let i=o[0];if(i===void 0||a(i)&&hn(i))return;let s=yr(e,n,i,t,r);return o.map((u,c)=>c).filter(u=>{let c=o[u];return c!==void 0&&a(c)&&hn(c)&&Lo(yr(e,n,c,t,r),s)}).sort((u,c)=>kf(o,u,c))[0]}l(RA,"findRootMoveRepresentative");function PA(e,n){let o=e[0];if(!(o===void 0||!_(n)||!L(o)||!hn(o)))return e.map((t,r)=>r).filter(t=>{let r=e[t];return r!==void 0&&O(r)===h.SpiritImpact&&!L(r)&&ye(r.inputs,o.inputs)&&r.efficiency===o.efficiency&&hn(r)&&!r.winsImmediately&&!r.attacksOpponentDrainer&&!r.scoresSupermanaThisTurn&&!r.scoresOpponentManaThisTurn&&!r.safeSupermanaPickupNow&&!r.safeOpponentManaPickupNow&&r.sameTurnScoreWindowValue===0}).sort((t,r)=>kf(e,t,r))[0]}l(PA,"sameOpeningSetupRepresentative");function gk(e,n,o,t){return _(t)&&e.activeColor===w.Black&&e.turnNumber===6&&e.monsMovesCount===0&&e.playerCanUseAction()&&e.playerCanMoveMana()&&O(n)===h.SpiritImpact&&O(o)===h.SpiritImpact&&L(n)&&o.spiritOwnManaSetupNow&&!o.spiritSameTurnScoreSetupNow&&ye(n.inputs,o.inputs)&&n.ownDrainerVulnerable===o.ownDrainerVulnerable&&n.ownDrainerWalkVulnerable===o.ownDrainerWalkVulnerable&&!n.manaHandoffToOpponent&&!o.manaHandoffToOpponent&&!n.hasRoundtrip&&!o.hasRoundtrip&&!oe(n)&&!oe(o)&&!n.attacksOpponentDrainer&&!o.attacksOpponentDrainer&&n.sameTurnScoreWindowValue===0&&o.sameTurnScoreWindowValue===0&&!n.supermanaProgress&&!o.supermanaProgress&&!n.opponentManaProgress&&!o.opponentManaProgress}l(gk,"isBlackTurnSixPlainSpiritSetupPair");function TA(e,n){let o=e.fork(),t=[];for(let r of n.compiledChunks){let a=Sn(o,r);if(a===void 0)return;o=a.game,t.push(...a.events)}return{game:o,events:t}}l(TA,"projectedPlanState");function wA(e,n,o,t,r,a,i,s){let u=o[0];if(u===void 0||u.winsImmediately&&!t.winsImmediately)return!1;let c=D(u),p=D(t),m=yr(e,n,u,a,i),d=TA(n,s),f=d!==void 0&&(d.game.winnerColor()!==void 0||d.game.activeColor!==a||!d.game.playerCanMoveMon()&&!d.game.playerCanUseAction()&&!d.game.playerCanMoveMana()),y=d!==void 0&&(f||s.compiledChunks.length>=4||!d.game.playerCanMoveMon()||!d.game.playerCanUseAction()&&!d.game.playerCanMoveMana()),S=d!==void 0&&Xa(d.events,a,Math.max(i.evaluation.rootManaHandoffPenalty,1))>0,C=d!==void 0&&$a(d.events),b=d!==void 0&&d.game.winnerColor()!==a&&lo(e,d.game,a),k=y&&!S&&!C&&!b&&s.compiledChunks.length>1&&s.goalFamily!==h.ManaTempo&&(te(s.utility,m)>=0||No(s.utility,m)||ot(s.utility,m,160)||s.goalFamily===h.ImmediateScore&&ar(s.utility,m)),M=s.headFamily===h.SafeSupermanaProgress||s.headFamily===h.SafeOpponentManaProgress,P=M&&s.goalFamily===h.ImmediateScore&&s.compiledChunks.length>1,T=!r&&P&&!p&&o.slice(0,3).some(U=>{let ce=U.spiritDevelopment||U.spiritSameTurnScoreSetupNow||U.spiritOwnManaSetupNow||U.safeSupermanaPickupNow||U.safeOpponentManaPickupNow||U.winsImmediately||U.scoresSupermanaThisTurn||U.scoresOpponentManaThisTurn;return!D(U)&&ce&&te(s.headUtility,yr(e,n,U,a,i))<0}),v=!r&&P&&o.slice(0,3).some(U=>U.spiritSameTurnScoreSetupNow||U.spiritOwnManaSetupNow||U.sameTurnScoreWindowValue>0),I=!r&&P&&o.slice(0,3).some(U=>!D(U)&&Z(U)),E=!r&&P&&!c&&!oe(u)&&!u.attacksOpponentDrainer&&!u.spiritDevelopment&&!u.spiritSameTurnScoreSetupNow&&!u.spiritOwnManaSetupNow&&!Z(u),x=!r&&P&&!t.winsImmediately&&!t.attacksOpponentDrainer&&!t.safeSupermanaPickupNow&&!t.safeOpponentManaPickupNow&&!t.spiritDevelopment&&!t.spiritSameTurnScoreSetupNow&&!t.spiritOwnManaSetupNow&&t.sameTurnScoreWindowValue>0&&!t.supermanaProgress&&!t.opponentManaProgress&&o.slice(0,6).filter(U=>Z(U)&&U.sameTurnScoreWindowValue===0&&!U.spiritSameTurnScoreSetupNow&&!U.spiritOwnManaSetupNow).length>=3,N=r&&s.headFamily===h.SpiritImpact&&s.goalFamily===h.ImmediateScore&&L(t)&&!t.attacksOpponentDrainer&&!oe(t)&&o.slice(0,3).some(U=>me(U.inputs,t.inputs)||!L(U)||U.attacksOpponentDrainer||oe(U)?!1:U.spiritSetupGain>=t.spiritSetupGain&&U.safeSupermanaProgressSteps<=t.safeSupermanaProgressSteps&&U.safeOpponentManaProgressSteps<=t.safeOpponentManaProgressSteps&&te(yr(e,n,U,a,i),s.headUtility)>=0);k=k&&!T&&!v&&!I&&!E;let B=o.slice(0,3).every(U=>{let ce=yr(e,n,U,a,i);return No(s.utility,ce)&&(!p||D(U))})||k,W=t.spiritSameTurnScoreSetupNow||t.sameTurnScoreWindowValue>0||t.attacksOpponentDrainer||oe(t),V=s.headFamily===h.SpiritImpact&&o.slice(0,4).filter(U=>gk(n,t,U,i)).length>=2;if(x||N||s.headFamily===h.DrainerKill&&!t.attacksOpponentDrainer||M&&!Z(t)&&!k||!B&&s.headFamily===h.SpiritImpact&&!W&&!t.spiritOwnManaSetupNow&&!V)return!1;let Q=o.slice(0,3).some(U=>U.spiritDevelopment||U.spiritSameTurnScoreSetupNow||U.spiritOwnManaSetupNow);return s.headFamily===h.SpiritImpact&&!Q&&!W&&!t.spiritOwnManaSetupNow&&!B&&!V?!1:!p||c||B}l(wA,"injectedCandidatePassesRootGate");function vA(e,n,o,t,r,a,i){let s=a.compiledChunks[0];if(s===void 0)return;let u=[...s],c=r.find(b=>me(b.inputs,u)),p=c??i.buildInjectedRootCandidate?.(n,o,t,u,a),m=l(()=>({inputs:u,family:a.headFamily,admitted:!1,reason:Qe.RejectInjectedMacroRoot}),"rejected");if(p===void 0||!wA(e,n,r,p,c!==void 0,o,t,a))return m();let d=c===void 0?[...r,p]:[...r];c===void 0&&d.sort(RM);let f=r[0],y=d.findIndex(b=>me(b.inputs,u)),S=d[y];if(f===void 0||S===void 0)return m();let C=me(S.inputs,f.inputs);if(!C){let b=yr(e,n,f,o,t),k=yr(e,n,S,o,t),M=te(a.utility,b)>0||te(a.headUtility,b)>0||te(k,b)>0||so(a.utility,b)||so(k,b),P=S.winsImmediately&&!f.winsImmediately||S.attacksOpponentDrainer&&!f.attacksOpponentDrainer||(S.scoresSupermanaThisTurn||S.scoresOpponentManaThisTurn)&&!(f.scoresSupermanaThisTurn||f.scoresOpponentManaThisTurn)||S.sameTurnScoreWindowValue>f.sameTurnScoreWindowValue&&S.sameTurnScoreWindowValue>0||!D(S)&&D(f)||S.classes.drainerSafetyRecover&&f.ownDrainerVulnerable&&!f.classes.drainerSafetyRecover||Z(S)&&!Z(f)&&!D(S),T=a.headFamily===h.SpiritImpact&&a.goalFamily===h.SpiritImpact&&r.slice(0,4).filter(v=>gk(n,S,v,t)).length>=2&&te(k,b)>=0&&j(f.heuristic,S.heuristic)<=8;C=M||P||T}return C&&c===void 0&&r.splice(0,r.length,...d),{inputs:u,family:O(S),admitted:C,reason:C?Qe.AdmitInjectedMacroRoot:Qe.RejectInjectedMacroRoot}}l(vA,"evaluateInjectedRoot");function Nf(e,n,o,t,r,a,i={}){if(!_(t)||r.length===0||e.session.checkpoint()||n.activeColor===w.Black&&n.turnNumber===2&&n.monsMovesCount<=1&&n.playerCanUseAction()&&n.playerCanMoveMana())return;let s=[],u=[],c=r[0];if(c===void 0)return;Go(s,jt(c,Qe.RankedRoot));let p=[[Qe.PreserveSpiritRepresentative,y=>y.spiritSameTurnScoreSetupNow||y.spiritOwnManaSetupNow],[Qe.PreserveSpiritRepresentative,y=>L(y)],[Qe.PreserveSafeProgressRepresentative,y=>O(y)===h.SafeSupermanaProgress],[Qe.PreserveSafeProgressRepresentative,y=>O(y)===h.SafeOpponentManaProgress],[Qe.PreserveManaTempoRepresentative,y=>O(y)===h.ManaTempo]];for(let[y,S]of p){if(e.session.checkpoint())return;let C=RA(e,n,r,o,t,S),b=C===void 0?void 0:r[C];if(b===void 0)continue;let k=jt(b,y);Go(u,k),Go(s,k)}let m=PA(r,t),d=m===void 0?void 0:r[m];if(d!==void 0){let y=jt(d,Qe.PreserveSpiritRepresentative);Go(u,y),Go(s,y)}let f=a===void 0?void 0:vA(e,n,o,t,r,a,i);if(f?.admitted){let y=r.find(S=>me(S.inputs,f.inputs));y!==void 0&&Go(s,jt(y,Qe.AdmitInjectedMacroRoot))}return e.session.checkpoint()?void 0:{orderedShortlist:s,preservedFamilyRepresentatives:u,approvedRoot:void 0,injectedRoot:f}}l(Nf,"productionRootAdvisorPresearch");function ei(e){let n=[];e.injectedRoot?.admitted&&n.push([...e.injectedRoot.inputs]);for(let o of e.preservedFamilyRepresentatives)n.some(t=>me(t,o.inputs))||n.push([...o.inputs]);return n}l(ei,"productionRootAdvisorPriorityInputs");function Ak(e,n){let o=Object.freeze({id:"root-picker.advisor-postsearch",select(t){let r=vk(e,t.game,t.roots,t.perspective,n)?.index;return r===void 0?{kind:"continue"}:{kind:"select",index:r}}});return Object.freeze({...op(e),rootPicker:o})}l(Ak,"productionRootPolicy");function gA(e,n){let o;return e.forEach((t,r)=>{n(t)&&(o===void 0||dC(t,fr(e,o))<0)&&(o=r)}),o}l(gA,"bestTacticalRootIndex");function Df(e,n,o,t,r){if(!r.policy.forcedTacticalPrepass||t.length===0)return;let a=l(d=>{let f=gA(t,d);return f===void 0?void 0:[...fr(t,f).inputs]},"choose"),i=a(d=>d.winsImmediately);if(i!==void 0)return i;let s=r.policy.supermanaPrepassException&&t.some(d=>d.scoresSupermanaThisTurn),u=l(d=>d.safeSupermanaPickupNow&&!d.ownDrainerVulnerable&&!d.manaHandoffToOpponent&&!d.winsImmediately&&!d.attacksOpponentDrainer,"safeSupermanaPickup"),c=r.policy.supermanaPrepassException&&t.some(u),p=s||c;if(r.policy.supermanaPrepassException&&(i=a(d=>d.scoresSupermanaThisTurn),i!==void 0||(i=a(u),i!==void 0))||!p&&(i=a(d=>d.attacksOpponentDrainer),i!==void 0)||!p&&ep(e,n,o)&&(i=a(d=>!d.ownDrainerVulnerable),i!==void 0))return i;let m=o===w.White?n.blackScore:n.whiteScore;if(xe-m<=1)return a(d=>d.classes.immediateScore)}l(Df,"forcedTacticalPrepassChoice");function _f(e,n,o){let t=e.findIndex(c=>me(c.inputs,n));if(t<0)return!1;if(t===0)return!0;let r=e[0];if(r===void 0||r.winsImmediately)return!1;let a=fr(e,t),i=j(r.heuristic,a.heuristic);if(o===Xe.Baseline)return t<=2&&i<=96&&!D(a);let s=a.winsImmediately||a.attacksOpponentDrainer||a.classes.drainerSafetyRecover||a.spiritSameTurnScoreSetupNow||a.spiritOwnManaSetupNow||a.spiritDevelopment||a.scoresSupermanaThisTurn||a.scoresOpponentManaThisTurn||a.safeSupermanaPickupNow||a.safeOpponentManaPickupNow||an(a.safeSupermanaProgressSteps,r.safeSupermanaProgressSteps)||an(a.safeOpponentManaProgressSteps,r.safeOpponentManaProgressSteps),u=D(a);return!u&&t<=4&&i<=128||!u&&s&&t<=8&&i<=224||!u&&D(r)&&t<=10&&i<=256}l(_f,"acceptTurnEngineCachedStep");function rp(e,n,o){return Ga(o)&&_f(e,n,o)&&me(e[0]?.inputs??[],n)}l(rp,"shouldResumeTurnEngineCachedStep");function Ek(e,n,o){return o.planner.mode!==$e.Production||!o.planner.lowBudgetGuard||n.length===0||Co(e)?!1:!e.playerCanUseAction()&&!e.playerCanMoveMana()&&e.monsMovesCount>=4?!0:e.activeColor===w.Black&&e.turnNumber===2&&e.monsMovesCount<=1}l(Ek,"shouldSkipProductionHeadPlanForRootContext");function Ok(e,n,o,t,r){if(r.planner.mode!==$e.Production||!r.planner.lowBudgetGuard||o.length===0||!(Co(n)||ds(e,n)))return;let i=t.compiledChunks[0];if(i===void 0)return;let s=o.findIndex(y=>me(y.inputs,i));if(s<0)return;let u=fr(o,s);if(D(u))return;let c=o[0];if(c===void 0||c.winsImmediately||c.attacksOpponentDrainer||c.classes.drainerSafetyRecover)return;let p=j(c.heuristic,u.heuristic),m=t.headFamily===h.SafeSupermanaProgress||t.headFamily===h.SafeOpponentManaProgress||t.headFamily===h.DrainerSafetyRecovery,d=L(c),f=bc(u);if(s===0&&m)return[...u.inputs];if(Co(n)&&d&&!D(c)&&f&&s<=2&&p<=96)return[...u.inputs];if(ds(e,n)&&s<=1&&p<=96&&(f||u.spiritDevelopment))return[...u.inputs]}l(Ok,"forcedLowBudgetTurnEnginePrepassChoice");function ap(e){let n=l(o=>o.winsImmediately||o.attacksOpponentDrainer||o.sameTurnScoreWindowValue>=2||o.scoresSupermanaThisTurn||o.scoresOpponentManaThisTurn||o.safeSupermanaPickupNow||o.safeOpponentManaPickupNow||o.supermanaProgress||o.opponentManaProgress||o.spiritSameTurnScoreSetupNow||o.spiritDevelopment||o.classes.drainerSafetyRecover,"tactical");return e[0]!==void 0&&(n(e[0])||e.slice(0,3).some(n))}l(ap,"shouldInvokeTurnHeadRerank");function ip(e,n){let o=e.findIndex(S=>me(S.inputs,n)),t=e[0];if(o<0||t===void 0)return!1;let r=D(t);if(o===0)return(t.winsImmediately||t.attacksOpponentDrainer||t.scoresSupermanaThisTurn||t.scoresOpponentManaThisTurn||t.safeSupermanaPickupNow||t.safeOpponentManaPickupNow||t.supermanaProgress||t.opponentManaProgress||t.sameTurnScoreWindowValue>0||t.spiritSameTurnScoreSetupNow||t.spiritDevelopment||t.classes.drainerSafetyRecover)&&!r;let a=fr(e,o);if(a.winsImmediately)return!0;if(t.winsImmediately||D(a))return!1;let i=a.attacksOpponentDrainer||a.scoresSupermanaThisTurn||a.scoresOpponentManaThisTurn||a.safeSupermanaPickupNow||a.safeOpponentManaPickupNow,s=a.sameTurnScoreWindowValue>0||a.spiritSameTurnScoreSetupNow,u=j(t.heuristic,a.heuristic),c=a.attacksOpponentDrainer&&!t.attacksOpponentDrainer||(a.scoresSupermanaThisTurn||a.scoresOpponentManaThisTurn)&&!(t.scoresSupermanaThisTurn||t.scoresOpponentManaThisTurn)||(a.safeSupermanaPickupNow||a.safeOpponentManaPickupNow)&&!(t.safeSupermanaPickupNow||t.safeOpponentManaPickupNow)||a.classes.drainerSafetyRecover&&!t.classes.drainerSafetyRecover&&t.ownDrainerVulnerable&&!a.ownDrainerVulnerable||a.sameTurnScoreWindowValue>g(t.sameTurnScoreWindowValue,1),p=a.safeSupermanaProgressSteps<t.safeSupermanaProgressSteps||a.safeOpponentManaProgressSteps<t.safeOpponentManaProgressSteps,m=!a.ownDrainerVulnerable&&t.ownDrainerVulnerable||!a.manaHandoffToOpponent&&t.manaHandoffToOpponent,d=a.supermanaProgress||a.opponentManaProgress||p;if(d&&!i&&!s&&!a.classes.drainerSafetyRecover&&!a.spiritSameTurnScoreSetupNow)return(m||r)&&o<=4&&u<=180;let y=m&&p&&o<=5&&u<=220;return i||s||a.classes.drainerSafetyRecover||d?a.ownDrainerVulnerable&&!a.classes.drainerSafetyRecover?!1:(c||p&&(m||r)||a.classes.drainerSafetyRecover&&t.ownDrainerVulnerable&&!a.ownDrainerVulnerable||a.spiritSameTurnScoreSetupNow&&a.sameTurnScoreWindowValue>t.sameTurnScoreWindowValue)&&o<=6&&u<=520||c&&o<=8&&u<=640:y}l(ip,"classifyTurnEngineRerankOverride");function sp(e,n){let o=e.find(t=>me(t.inputs,n));return o!==void 0&&(o.winsImmediately||o.attacksOpponentDrainer||o.scoresSupermanaThisTurn||o.scoresOpponentManaThisTurn||o.safeSupermanaPickupNow||o.safeOpponentManaPickupNow||o.classes.drainerSafetyRecover||o.sameTurnScoreWindowValue>0||o.spiritSameTurnScoreSetupNow)}l(sp,"allowedRerankOverrideCandidate");function ni(e,n,o,t,r,a){return Nf(e,n,o,t,r,a,{buildInjectedRootCandidate:l((i,s,u,c)=>oM(e,i,s,t,c),"buildInjectedRootCandidate")})}l(ni,"productionRootAdvisorPresearch");function up(e,n,o,t,r,a,i){let u=ni(e,n,o,t,[...r],a)?.approvedRoot?.inputs;return u!==void 0&&!me(u,i)}l(up,"advisorConflictsWithChoice");function AA(e,n,o,t,r,a){if(!Ga(r)||a.compiledChunks.length<2)return;let i=a.compiledChunks[0],s=a.compiledChunks[1];if(i===void 0||s===void 0)return;let u=va(n,i);if(u?.activeColor!==o)return;let c=ur(u,t),p=ko(e,u,o,t);rp(p,s,r)&&Tm(e,u,r,c,s)}l(AA,"seedTurnEngineFollowupCacheIfSafe");function Rs(e,n,o,t,r,a,i){Am(e,n,o,r,a,i),AA(e,n,o,t,r,a)}l(Rs,"commitPlanAndSeedFollowup");function Ff(e,n,o,t,r,a){return lc(e,n,o,t,r,O(o),a)}l(Ff,"turnEngineSelectedUtility");function Ik(e,n,o,t,r){let a=n.fork(),i=[];for(let m of r.compiledChunks){let d=Sn(a,m);if(d===void 0)return!1;i.push(...d.events),a=d.game}let u=a.winnerColor()!==void 0||a.activeColor!==o||!a.playerCanMoveMon()&&!a.playerCanUseAction()&&!a.playerCanMoveMana()||r.compiledChunks.length>=4||!a.playerCanMoveMon()||!a.playerCanUseAction()&&!a.playerCanMoveMana(),c=Xa(i,o,Math.max(t.evaluation.rootManaHandoffPenalty,1))>0,p=a.winnerColor()!==o&&ep(e,a,o);return u&&!c&&!$a(i)&&!p}l(Ik,"projectedPlanIsSafelyCompleted");function xk(e,n,o){let{game:t,perspective:r,config:a,plan:i,candidateIndex:s,candidate:u,selected:c,macroMode:p,candidateUnsafe:m,selectedUnsafe:d,candidateProgress:f,selectedProgress:y,scoreGap:S,sameTurnWindowBetter:C,drainerAttackBetter:b,scoresNowBetter:k,candidateSpiritTactical:M,progressBetter:P,selectedSpiritPhase:T,selectedFamily:v,whiteSpiritSetupGain:I}=n,{narrowUnsafeBlackManaScore:E,pickupUpgrade:x,nearTieProgress:N,primaryAxesOrder:B,strategicAxesBetter:W,selectedUtility:V}=o,Q=p&&Ik(e,t,r,a,i),U=te(i.utility,V)>=0,ce=te(i.headUtility,V)>=0,Ae=p&&(i.headFamily===h.SafeSupermanaProgress||i.headFamily===h.SafeOpponentManaProgress)&&t.activeColor===w.White&&t.turnNumber>=5&&t.monsMovesCount<=1&&!t.playerCanUseAction()&&t.playerCanMoveMana()&&!m&&!d&&f&&y&&!T&&N&&S>48&&B===0&&!x&&!W,ln=!d&&(c.safeSupermanaPickupNow||c.safeOpponentManaPickupNow)&&(i.headFamily===h.SafeSupermanaProgress||i.headFamily===h.SafeOpponentManaProgress)&&!x&&!ce,pn=d&&m&&!T&&!y&&f&&(i.headFamily===h.SafeSupermanaProgress||i.headFamily===h.SafeOpponentManaProgress)&&i.goalFamily===h.DrainerSafetyRecovery&&!u.classes.drainerSafetyRecover&&u.ownDrainerVulnerable&&!x&&!k&&!b&&!C&&S>48,dn=t.activeColor===w.Black&&i.headFamily===h.SpiritImpact&&!d&&!m&&!y&&!T&&!f&&!M&&!u.spiritOwnManaSetupNow&&S>96&&!W,Ge=t.activeColor===w.Black&&i.headFamily===h.SpiritImpact&&!d&&!m&&!y&&!T&&L(u)&&f&&!M&&!P&&u.safeSupermanaProgressSteps>=c.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps>=c.safeOpponentManaProgressSteps&&u.ownDrainerVulnerable===c.ownDrainerVulnerable&&u.manaHandoffToOpponent===c.manaHandoffToOpponent&&u.hasRoundtrip===c.hasRoundtrip&&!k&&!b&&S>64&&!W,_n=i.headFamily===h.SpiritImpact&&!d&&!m&&L(c)&&L(u)&&S>=0&&!P&&u.spiritSetupGain<=c.spiritSetupGain&&u.safeSupermanaProgressSteps>=c.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps>=c.safeOpponentManaProgressSteps&&u.ownDrainerVulnerable===c.ownDrainerVulnerable&&u.manaHandoffToOpponent===c.manaHandoffToOpponent&&u.hasRoundtrip===c.hasRoundtrip&&!k&&!b&&!M,Fe=Q&&!c.winsImmediately&&i.goalFamily!==h.ManaTempo&&s<=(i.compiledChunks.length>1?16:10)&&U&&(No(i.utility,V)||ot(i.utility,V,96))&&(m||i.compiledChunks.length>1||ar(i.utility,V))&&!dn&&!Ge&&!_n&&!ln&&!pn&&!E&&!Ae;if(m&&!d&&!Fe)return{kind:"reject"};if(p&&te(V,i.utility)>0&&!I)return{kind:"reject"};let Ho=p&&(i.headFamily===h.SafeSupermanaProgress||i.headFamily===h.SafeOpponentManaProgress)&&!f&&Co(t)&&L(c)&&!d&&(!m||Fe)&&s<=3&&u.score>=c.score&&ot(i.utility,V,64);if(I)return{kind:"accept"};if(p&&(i.headFamily===h.SafeSupermanaProgress||i.headFamily===h.SafeOpponentManaProgress)&&!f&&!Fe&&!Ho)return{kind:"reject"};if(p&&i.headFamily===h.DrainerKill&&!u.attacksOpponentDrainer)return{kind:"reject"};let st=p&&t.activeColor===w.White&&i.headFamily===h.DrainerSafetyRecovery&&c.spiritOwnManaSetupNow&&!u.spiritOwnManaSetupNow&&!d&&!m&&c.sameTurnScoreWindowValue===0&&u.sameTurnScoreWindowValue===0&&c.spiritSetupGain>=g(u.spiritSetupGain,48)&&!k&&!b&&!C;if(p&&t.activeColor===w.White&&(i.headFamily===h.SafeSupermanaProgress||i.headFamily===h.SafeOpponentManaProgress)&&i.goalFamily===h.ImmediateScore&&v===h.ManaTempo&&!y&&f&&c.ownDrainerVulnerable&&u.ownDrainerVulnerable&&c.ownDrainerWalkVulnerable===u.ownDrainerWalkVulnerable&&c.manaHandoffToOpponent===u.manaHandoffToOpponent&&c.hasRoundtrip===u.hasRoundtrip&&!c.spiritDevelopment&&!u.spiritDevelopment&&!c.spiritSameTurnScoreSetupNow&&!u.spiritSameTurnScoreSetupNow&&!c.spiritOwnManaSetupNow&&!u.spiritOwnManaSetupNow&&!k&&!b&&!C&&!x&&!u.classes.drainerSafetyRecover&&u.safeSupermanaProgressSteps+1>=c.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps+1>=c.safeOpponentManaProgressSteps&&u.score<=g(c.score,16)&&!W)return{kind:"reject"};let Qr=i.headFamily===h.ImmediateScore||i.headFamily===h.DenyOpponentWindow||i.headFamily===h.DrainerKill||i.headFamily===h.DrainerSafetyRecovery&&Gn(a);return p&&!c.winsImmediately&&Qr&&No(i.utility,V)&&!st&&(!m||d)?{kind:"accept"}:i.headFamily===h.SpiritImpact&&!M&&!u.spiritDevelopment&&!u.spiritOwnManaSetupNow&&!Fe?{kind:"reject"}:Fe?{kind:"accept"}:{kind:"delegate",policy:{selectedUtility:V,pickupUpgrade:x,strategicAxesBetter:W,projectedDeferredRecoveryWithoutConcreteGain:pn,safeRootBlocksPlainSpirit:dn,safeRootBlocksPlainSpiritProgress:Ge,plainSpiritSiblingRegresses:_n,allowNonConcreteWhiteProgress:Ho,whiteSetupRecoveryBlocksUtilityOverride:st}}}l(xk,"evaluateProjectedHeadGuards");function EA(e,n){let{candidate:o,selected:t,plan:r,selectedUtilityValue:a}=e,i=o.safeSupermanaProgressSteps===t.safeSupermanaProgressSteps&&o.safeOpponentManaProgressSteps===t.safeOpponentManaProgressSteps&&o.ownDrainerVulnerable===t.ownDrainerVulnerable&&o.efficiency===t.efficiency&&o.supermanaProgress===t.supermanaProgress&&o.opponentManaProgress===t.opponentManaProgress,s=te(r.utility,a()),u=ar(r.utility,a()),c=a();return{...n,nearTieProgress:i,primaryAxesOrder:s,strategicAxesBetter:u,selectedUtility:c}}l(EA,"deriveOrderedHeadFacts");function Nk(e,n){let o=CM(n);if(o.kind==="reject")return!1;let t=EA(n,o.facts);if(MM(n,t))return!1;let r=xk(e,n,t);return r.kind==="accept"?!0:r.kind==="reject"?!1:bM(n,r.policy)}l(Nk,"acceptTurnEngineHeadAfterOrderedGuards");function OA(e){let{game:n,plan:o,candidate:t,macroMode:r,selectedProgress:a,candidateFamily:i,selectedFamily:s,selectedUtilityValue:u,candidateUtilityValue:c,blackTurnSixRouteChangePlainSpirit:p,whiteSpiritSetupGain:m}=e;if(!r)return!0;let d=u(),f=c();if(n.activeColor===w.Black&&n.turnNumber<=6&&(o.headFamily===h.SafeSupermanaProgress||o.headFamily===h.SafeOpponentManaProgress)&&o.goalFamily===h.ImmediateScore&&i===h.ManaTempo&&s===h.SpiritImpact&&Cs(t)&&a&&te(o.headUtility,d)<0)return!1;let S=te(o.utility,d)>0&&(so(o.utility,d)||so(o.headUtility,d)),C=te(f,d)>0&&so(f,d);return p||m||S||C}l(OA,"passesTurnEngineMacroDominanceGuard");function Dk(e,n,o,t,r,a,i,s){let u=i.compiledChunks[0];if(u===void 0)return!1;let c=r.findIndex(Fe=>me(Fe.inputs,u)),p=r.findIndex(Fe=>me(Fe.inputs,a));if(c<0||p<0)return!1;if(c===p)return!0;let m=fr(r,c),d=fr(r,p);if(d.winsImmediately&&!m.winsImmediately)return!1;let f=Ga(sr(t)),y=D(m),S=D(d),C=bc(m),b=bc(d),k=he(e,n,n.activeColor),M=j(d.score,m.score),P=m.sameTurnScoreWindowValue>d.sameTurnScoreWindowValue,T=m.attacksOpponentDrainer&&!d.attacksOpponentDrainer,v=(m.scoresSupermanaThisTurn||m.scoresOpponentManaThisTurn)&&!(d.scoresSupermanaThisTurn||d.scoresOpponentManaThisTurn),I=m.classes.drainerSafetyRecover&&!d.classes.drainerSafetyRecover&&d.ownDrainerVulnerable&&!m.ownDrainerVulnerable,E=m.spiritSameTurnScoreSetupNow&&!d.spiritSameTurnScoreSetupNow&&m.sameTurnScoreWindowValue>=d.sameTurnScoreWindowValue,x=m.spiritDevelopment&&!d.spiritDevelopment,N=m.spiritSameTurnScoreSetupNow||m.sameTurnScoreWindowValue>0||m.attacksOpponentDrainer||m.scoresSupermanaThisTurn||m.scoresOpponentManaThisTurn||m.safeSupermanaPickupNow||m.safeOpponentManaPickupNow,B=(an(m.safeSupermanaProgressSteps,d.safeSupermanaProgressSteps)||an(m.safeOpponentManaProgressSteps,d.safeOpponentManaProgressSteps))&&!d.winsImmediately&&!d.attacksOpponentDrainer&&!d.spiritSameTurnScoreSetupNow,W=d.spiritDevelopment||d.spiritSameTurnScoreSetupNow||d.spiritOwnManaSetupNow,V=O(m),Q=O(d),U=null,ce=l(()=>(U??(U=Ff(e,n,d,o,t,s)),U),"selectedUtilityValue"),Ae=null,ln=l(()=>(Ae??(Ae=Ff(e,n,m,o,t,s)),Ae),"candidateUtilityValue"),pn=f&&i.headFamily===h.SpiritImpact&&za(n,m,d,t)&&m.score>d.score,dn=f&&n.activeColor===w.White&&i.headFamily===h.SpiritImpact&&!S&&!y&&m.spiritOwnManaSetupNow&&!m.spiritSameTurnScoreSetupNow&&!d.spiritOwnManaSetupNow&&!d.spiritSameTurnScoreSetupNow&&d.spiritDevelopment&&m.spiritDevelopment&&m.spiritSetupGain>=g(d.spiritSetupGain,32)&&m.safeSupermanaProgressSteps<=d.safeSupermanaProgressSteps&&m.safeOpponentManaProgressSteps<=d.safeOpponentManaProgressSteps&&m.ownDrainerVulnerable===d.ownDrainerVulnerable&&m.manaHandoffToOpponent===d.manaHandoffToOpponent&&m.hasRoundtrip===d.hasRoundtrip&&!v&&!T&&M<=96,Ge=f&&n.activeColor===w.Black&&n.turnNumber===6&&n.monsMovesCount===0&&n.playerCanUseAction()&&n.playerCanMoveMana()&&i.headFamily===h.SpiritImpact&&i.goalFamily===h.SpiritImpact&&c<=1&&y===S&&L(m)&&!C&&!N&&Q===h.ManaTempo&&S&&!d.spiritDevelopment&&!d.spiritSameTurnScoreSetupNow&&!d.spiritOwnManaSetupNow&&!b&&!oe(d)&&d.sameTurnScoreWindowValue===0&&!ye(m.inputs,d.inputs)&&m.ownDrainerVulnerable===d.ownDrainerVulnerable&&m.ownDrainerWalkVulnerable===d.ownDrainerWalkVulnerable&&m.manaHandoffToOpponent===d.manaHandoffToOpponent&&m.hasRoundtrip===d.hasRoundtrip&&M<=1024&&ot(ln(),ce(),64),_n={game:n,perspective:o,config:t,plan:i,candidateIndex:c,candidate:m,selected:d,macroMode:f,candidateUnsafe:y,selectedUnsafe:S,candidateProgress:C,selectedProgress:b,exactContext:k,scoreGap:M,sameTurnWindowBetter:P,drainerAttackBetter:T,scoresNowBetter:v,safetyRecoverBetter:I,spiritWindowBetter:E,spiritDevelopmentBetter:x,candidateSpiritTactical:N,progressBetter:B,selectedSpiritPhase:W,candidateFamily:V,selectedFamily:Q,selectedUtilityValue:ce,candidateUtilityValue:ln,blackSpiritPair:pn,whiteSpiritSetupGain:dn,blackTurnSixRouteChangePlainSpirit:Ge};return OA(_n)?Nk(e,_n):!1}l(Dk,"acceptTurnEngineHeadAfterSearch");function Wf(e,n,o,t){let r=t.length===0?{}:{priorityInputs:t};if(!oc(o))return r;let a=Mt(o),i=bo(o);return{...r,qualifiesPlainSpiritPlan:l(s=>{let u=Wo(e,s.game,n,a);return u?.headFamily===h.SpiritImpact&&Ct(u.utility)},"qualifiesPlainSpiritPlan"),qualifiesDrainerSafetyRecoveryPlan:l(s=>Wo(e,s.game,n,i)?.headFamily===h.DrainerSafetyRecovery,"qualifiesDrainerSafetyRecoveryPlan")}}l(Wf,"searchRootOptions");function Bf(e,n,o,t=!0){let r=n.fen(),a=we(o,{search:{transpositionTable:t}}),i=n.activeColor,s=ko(e,n,i,a);if(e.session.cancelled||s.length===0)return[];let u=a.planner.enabled?Wo(e,n,i,ur(n,a)):void 0,c=ni(e,n,i,a,s,u),p=c===void 0?[]:ei(c),m=hf(e,n,i,a,s,Wf(e,i,a,p));if(n.fen()!==r)throw new Error("runtime root focus mutated its source game");return[...m.evaluations]}l(Bf,"focusedScoredRootsForRuntime");function Lf(e,n,o,t){let r=n.fen(),a=n.activeColor,i=ko(e,n,a,o),s=o.planner.enabled?Wo(e,n,a,ur(n,o)):void 0,u=ni(e,n,a,o,i,s),c=u===void 0?[]:ei(u),p=Sf(e,n,a,o,i,Wf(e,a,o,c),!0);if(n.fen()!==r)throw new Error("runtime root-rank focus mutated its source game");let m=p.candidates.findIndex(d=>me(d.inputs,t));return m<0?void 0:m}l(Lf,"focusedCandidateRankForRuntimeInputs");function cp(e,n){return{checkpoint:l(()=>e.session.checkpoint(),"checkpoint"),cancelled:l(()=>e.session.cancelled,"cancelled"),rootReplyRiskSnapshot:l((o,t,r,a)=>kn(e,o,t,n,a),"rootReplyRiskSnapshot"),pickReplyRiskGuardedIndex:l(o=>Qa(e,o.game,o.roots,o.candidateIndices,o.perspective,n),"pickReplyRiskGuardedIndex"),productionPolicy:Ak(e,n)}}l(cp,"rootSelectorOptions");function Gf(e,n,o,t,r,a){let i=hf(e,n,o,t,r,Wf(e,o,t,a));if(e.session.cancelled)return{inputs:[],evaluations:[]};let s=[...i.evaluations];return s.length===0?{inputs:[],evaluations:s}:{inputs:CC(n,s,o,t,cp(e,t)),evaluations:s}}l(Gf,"searchAndSelectRoot");function _k(e,n,o,t,r,a){if(r.length<=1||!t.planner.rerankHeads||!ap(r))return;let i=r.map(u=>u.inputs),s=a?.compiledChunks[0];return a!==void 0&&s!==void 0&&i.some(u=>me(u,s))?a:Fl(e,n,o,Mt(t),i)}l(_k,"tryTurnHeadRerank");function Fk(e,n,o,t,r,a,i){let s=a?.compiledChunks[0];if(!(s===void 0||!ip(r,s)||!sp(r,s)||up(e,n,o,t,r,i,s)))return[...s]}l(Fk,"acceptedRerankInputs");function Wk(e,n,o,t){if(e.session.checkpoint())return[];bf(e),Ll(e);let r=we(o,{search:{transpositionTable:t}}),a=n.activeColor,i=ur(n,r),s;if(Wl(r)&&(s=Ju(e,n,i),s===void 0&&Em(e,n)&&(r=we(r,{planner:{enabled:!1}}))),Qb(r)&&Om(e,n)&&(s=void 0,r=we(r,{planner:{enabled:!1}})),Wl(r)&&ds(e,n)&&(r=we(r,{planner:{secondaryAnalysis:!1,selectedFollowupProjection:!1}})),r=eC(n,r),!r.planner.enabled&&r.planner.mode===$e.Production&&Zb(n))return Wk(e,n,we(r,{planner:{mode:$e.Baseline}}),t);let u=ko(e,n,a,r);if(e.session.cancelled||u.length===0)return[];if(r.planner.enabled){let d=sr(r),f=s??Ju(e,n,i),y=f!==void 0&&_f(u,f,d)?f:void 0,S=ur(n,r),b=Ek(n,u,r)?void 0:Jb(n,r)?wm(e,n,a,S):Wo(e,n,a,S);if(e.session.checkpoint())return[];if(d===Xe.Production&&y!==void 0){if(rp(u,y,d))return[...y];if(b?.compiledChunks[0]!==void 0&&me(b.compiledChunks[0],y))return Rs(e,n,a,r,d,b,S),[...y]}let k=_k(e,n,a,r,u,b),M=Fk(e,n,a,r,u,k,b);if(M!==void 0&&k!==void 0)return Rs(e,n,a,r,d,k,S),M;let P=Df(e,n,a,u,r);if(P!==void 0)return b?.compiledChunks[0]!==void 0&&me(b.compiledChunks[0],P)&&Rs(e,n,a,r,d,b,S),P;if(b!==void 0){let x=Ok(e,n,u,b,r);if(x!==void 0)return Rs(e,n,a,r,d,b,S),x}let T=ni(e,n,a,r,u,b),v=T===void 0?[]:ei(T),I=Gf(e,n,a,r,u,v);if(I.inputs.length===0)return[];let E=I.inputs;return b!==void 0&&Dk(e,n,a,r,I.evaluations,E,b)&&(E=[...b.compiledChunks[0]??E]),y!==void 0&&me(y,E)?[...E]:(b?.compiledChunks[0]!==void 0&&me(b.compiledChunks[0],E)&&Rs(e,n,a,r,d,b,S),[...E])}if(u.length>1&&r.planner.rerankHeads&&ap(u)){let d=u.map(y=>y.inputs),f=gm(e,n,a,sr(r),Mt(r),d);if(f!==void 0&&ip(u,f)&&sp(u,f)&&!up(e,n,a,r,u,void 0,f))return[...f]}let c=Df(e,n,a,u,r);if(c!==void 0)return c;let p=ni(e,n,a,r,u,void 0),m=p===void 0?[]:ei(p);return Gf(e,n,a,r,u,m).inputs}l(Wk,"smartSearchBestInputsInternal");function Vf(e){qs(e),bf(e),Ll(e),qu(e)}l(Vf,"clearProductionSelectorCaches");function Mc(e,n,o,t=!0){let r=n.fen(),a=Wk(e,n,o,t);if(n.fen()!==r)throw new Error("smart search mutated its source game");return[...a]}l(Mc,"smartSearchBestInputs");function IA(e,n){if(!Number.isSafeInteger(n)||n<=0||n>4294967296)throw new RangeError("random index requires a non-empty uint32-sized collection");let o=4294967296,t=o-o%n;for(;;){let r=e.random.nextUint32();if(!Number.isInteger(r)||r<0||r>=o)throw new RangeError("automove random source must return a uint32");if(r<t)return r%n}}l(IA,"randomIndex");function Bk(e){switch(e.kind){case"invalid-input":case"events":return;case"locations-to-start-from":return e.locations.map(n=>({kind:"location",location:{i:n.i,j:n.j}}));case"next-input-options":return e.nextInputs.map(n=>n.input)}}l(Bk,"nextInputsForPrompt");function lp(e,n){let o=[];for(;;){let t=n.processInputWithStartOptions(o,!1,!1,Yn);if(t.kind==="invalid-input")return{output:t,inputFen:""};if(t.kind==="events")return{output:t,inputFen:Rr(o)};let r=Bk(t);if(r===void 0||r.length===0)return{output:{kind:"invalid-input"},inputFen:""};if(o.length===Tt)return{output:{kind:"invalid-input"},inputFen:""};let a=r[IA(e,r.length)];if(a===void 0)return{output:{kind:"invalid-input"},inputFen:""};o.push(a)}}l(lp,"randomAutomove");function Ps(e){let n=e.fork(),o=[],t=l(()=>{let r=o.length===0?n.processInputWithStartOptions(o,!0,!1,Yn):n.inspectInputGrammar(o,Yn);if(r.kind==="invalid-input")return!1;if(r.kind==="events")return o.length!==0&&Sn(n,o)!==void 0;if(o.length===Tt)return!1;let a=Bk(r);if(a===void 0||a.length===0)return!1;a.sort(ol);for(let i of a){if(o.push(i),t())return!0;o.pop()}return!1},"findFirstApplicableCompletion");return t()?o:[]}l(Ps,"deterministicLegalFallbackInputs");function Lk(e){Vf(e)}l(Lk,"clearTimedOutSelectionCaches");function Vo(e,n,o){if(e.session.checkpoint())return[];let t=[...Mc(e,n,o,!0)];if(t.length>0)return t;if(e.session.checkpoint())return[];let r=lp(e,n.fork());return r.output.kind==="events"?Pr(r.inputFen)??[]:[]}l(Vo,"selectSearchInputs");function Hf(e,n,o){return e.session.checkpoint()?[]:(o.planner.enabled&&qu(e),Vo(e,n,o))}l(Hf,"selectSearchInputsWithFreshPlanCache");var Gk=Object.freeze({kind:"continue"});function Vk(e){return{kind:"select",inputs:e}}l(Vk,"selectProductionGuard");function xA(e,n){return lo(e,n,n.activeColor)||YC(e,n,n.activeColor)}l(xA,"ownDrainerUnsafe");function Hk(e,n,o,t){let r=bo(t),a=ss(e,o.game,n,n.activeColor,r),i=O(o),s={actions:[],compiledChunks:[o.inputs],endGame:o.game.fork(),utility:a,headUtility:a,headFamily:i,goalFamily:i,packageMeta:{scoreGain:0,denyGain:0,drainerSafetyDelta:0,spiritOnlySetup:!1,endsNonnegativeDrainerSafety:!0,opponentImmediateWindowAfter:0}};return ec(e,n,s,n.activeColor,r)}l(Hk,"evaluateSelectedUtility");function NA(e,n){if(n.activeColor===w.White&&n.turnNumber<=3&&!n.playerCanUseAction()&&!n.playerCanMoveMana()&&(n.monsMovesCount===0||n.monsMovesCount===3)||n.activeColor===w.White&&n.turnNumber===1&&n.monsMovesCount===2&&!n.playerCanUseAction()&&!n.playerCanMoveMana()||n.activeColor===w.White&&n.turnNumber===3&&n.monsMovesCount===0&&n.playerCanUseAction()&&n.playerCanMoveMana()||n.activeColor===w.White&&n.turnNumber===3&&n.monsMovesCount>=3&&n.playerCanUseAction()&&n.playerCanMoveMana())return Vo(e,n,Zo(n,"pro"));let t=n.activeColor===w.White&&n.turnNumber===3&&n.monsMovesCount===1&&!n.playerCanUseAction()&&n.playerCanMoveMana();if(!(!(n.activeColor===w.White&&n.turnNumber===3&&n.monsMovesCount>0&&!t&&(n.playerCanUseAction()||n.playerCanMoveMana()))||!xA(e,n)))return Vo(e,n,Zo(n,"fast"))}l(NA,"selectEarlyWhiteFallbackInputs");function DA(e,n,o){if(!(!(n.activeColor===w.White&&n.turnNumber===3&&(n.monsMovesCount===1||n.monsMovesCount===2)&&n.playerCanUseAction()&&n.playerCanMoveMana())||he(e,n,n.activeColor).delta.sameTurnScoreWindowValue<=0))return Hf(e,n,_r(o))}l(DA,"selectScoreWindowTacticalFallbackInputs");function pp(e,n){return e.find(o=>me(o.inputs,n))}l(pp,"findRoot");function Uf(e){return!e.opponentCanWinImmediately&&e.delta.sameTurnScoreWindowValue===1&&e.delta.opponentWindowDenyGain===1&&!e.delta.drainerAttackAvailable&&e.delta.drainerSafety<0}l(Uf,"whiteDenyFallbackContextEligible");function _A(e,n,o,t){if(!(n.activeColor===w.White&&n.turnNumber===5&&n.monsMovesCount===0&&n.playerCanUseAction()&&n.playerCanMoveMana()&&t.length>0))return;let a=he(e,n,n.activeColor);if(!Uf(a))return;let i=_r(o),s=pp(ko(e,n,n.activeColor,i),t);if(s===void 0||s.winsImmediately||s.attacksOpponentDrainer||s.spiritDevelopment||s.spiritSameTurnScoreSetupNow||s.spiritOwnManaSetupNow||s.scoresSupermanaThisTurn||s.scoresOpponentManaThisTurn||s.safeSupermanaPickupNow||s.safeOpponentManaPickupNow||s.supermanaProgress||s.opponentManaProgress||!s.ownDrainerVulnerable||s.ownDrainerWalkVulnerable||s.manaHandoffToOpponent||s.hasRoundtrip||s.sameTurnScoreWindowValue!==1)return;let u=Zo(n,"pro"),c=Vo(e,n,u);if(c.length===0||me(c,t))return;let p=pp(ko(e,n,n.activeColor,u),c);if(!(p===void 0||!p.spiritDevelopment||p.spiritSameTurnScoreSetupNow||!Z(p)||p.winsImmediately||p.attacksOpponentDrainer||p.scoresSupermanaThisTurn||p.scoresOpponentManaThisTurn||p.safeSupermanaPickupNow||p.safeOpponentManaPickupNow||p.manaHandoffToOpponent||p.hasRoundtrip||!p.ownDrainerVulnerable||p.ownDrainerWalkVulnerable||p.sameTurnScoreWindowValue!==0))return c}l(_A,"selectWhiteEarlyBaselineFallbackInputs");function FA(e,n,o,t){if(!(n.activeColor===w.White&&n.turnNumber===3&&n.monsMovesCount===1&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&t.length>0))return;let a=he(e,n,n.activeColor);if(!Uf(a))return;let i=_r(o),s=pp(ko(e,n,n.activeColor,i),t);if(s===void 0||!Ct(Hk(e,n,s,i)))return;let u=we(i,{planner:{enabled:!1,rerankHeads:!0,mode:$e.Baseline}}),c=Vo(e,n,u);return c.length===0||me(c,t)?void 0:c}l(FA,"selectWhiteNonnegativeDenyFallbackInputs");function WA(e,n,o,t){if(!(n.activeColor===w.White&&n.turnNumber===3&&n.monsMovesCount===1&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&t.length>0))return;let a=he(e,n,n.activeColor);if(!Uf(a))return;let i=_r(o),s=pp(ko(e,n,n.activeColor,i),t);if(s===void 0||Ct(Hk(e,n,s,i)))return;let u=Zo(n,"pro"),c=we(i,{planner:{enabled:!1,rerankHeads:!0,ownSeedCap:u.planner.ownSeedCap,ownBeam:u.planner.ownBeam,perNodeFamilyCap:u.planner.perNodeFamilyCap,stepCap:u.planner.stepCap}}),p=Vo(e,n,c);if(!(p.length===0||me(p,t)))return Lf(e,n,c,p)===0?p:void 0}l(WA,"selectWhiteNegativeDenyFallbackInputs");function dp(e){return!e.winsImmediately&&!e.attacksOpponentDrainer&&!e.ownDrainerVulnerable&&!e.ownDrainerWalkVulnerable&&!e.spiritDevelopment&&!e.spiritSameTurnScoreSetupNow&&!e.spiritOwnManaSetupNow&&!e.manaHandoffToOpponent&&!e.hasRoundtrip&&!e.scoresSupermanaThisTurn&&!e.scoresOpponentManaThisTurn&&!e.safeSupermanaPickupNow&&!e.safeOpponentManaPickupNow&&e.sameTurnScoreWindowValue===0&&!e.supermanaProgress&&!e.opponentManaProgress&&!e.classes.immediateScore&&!e.classes.drainerAttack&&!e.classes.drainerSafetyRecover&&!e.classes.carrierProgress&&!e.classes.material&&e.classes.quiet&&O(e)===h.ManaTempo}l(dp,"safeQuietManaTempoRoot");function Uk(e){return!e.opponentCanWinImmediately&&e.delta.sameTurnScoreWindowValue===0&&e.delta.spiritGain===0&&e.delta.opponentWindowDenyGain===0&&!e.delta.drainerAttackAvailable&&e.delta.safeSupermanaProgressSteps===void 0&&e.delta.safeOpponentManaProgressSteps===void 0&&e.delta.drainerSafety>=0}l(Uk,"confirmBaselineContextEligible");function jk(e,n,o,t){let r=_r(o),a=Bf(e,n,r,!0),i=a.findIndex(c=>me(c.inputs,t));if(i<0)return;let s=ac(n,a,n.activeColor,r,cp(e,r));if(!s.includes(i))return;let u=Ka(e,a,s,r);if(u.includes(i))return{config:r,roots:a,productionIndex:i,candidateIndices:s,shortlist:u}}l(jk,"productionRuntimeCompetition");function Kk(e){return we(e,{planner:{enabled:!1,rerankHeads:!0,mode:$e.Baseline}})}l(Kk,"searchOnlyBaselineConfig");function BA(e,n,o,t){if(!(n.activeColor===w.White&&n.turnNumber===3&&n.monsMovesCount===2&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&t.length>0)||!Uk(he(e,n,n.activeColor)))return;let a=jk(e,n,o,t);if(a?.candidateIndices.length!==2||a.shortlist.length!==a.candidateIndices.length)return;let i=Vo(e,n,Kk(a.config));if(i.length===0||me(i,t))return;let s=a.roots.findIndex(p=>me(p.inputs,i));if(!a.candidateIndices.includes(s)||!a.shortlist.includes(s))return;let u=a.roots[a.productionIndex],c=a.roots[s];if(!(u===void 0||c===void 0))return u.score===c.score&&u.spiritSetupGain===c.spiritSetupGain&&u.safeSupermanaProgressSteps===c.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps===c.safeOpponentManaProgressSteps&&u.scorePathBestSteps===c.scorePathBestSteps&&dp(u)&&dp(c)?i:void 0}l(BA,"selectWhiteConfirmBaselineTiebreakInputs");function LA(e,n,o,t){if(!(n.activeColor===w.White&&n.turnNumber===3&&n.monsMovesCount>=3&&!n.playerCanUseAction()&&n.playerCanMoveMana()&&t.length>0)||!Uk(he(e,n,n.activeColor)))return;let a=jk(e,n,o,t);if(a===void 0)return;let i=Vo(e,n,Kk(a.config));if(i.length===0||me(i,t))return;let s=a.roots.findIndex(p=>me(p.inputs,i));if(!a.candidateIndices.includes(s)||!a.shortlist.includes(s))return;let u=a.roots[a.productionIndex],c=a.roots[s];if(!(u===void 0||c===void 0))return c.score>=u.score&&c.rootRank<u.rootRank&&u.spiritSetupGain===c.spiritSetupGain&&u.safeSupermanaProgressSteps===c.safeSupermanaProgressSteps&&u.safeOpponentManaProgressSteps===c.safeOpponentManaProgressSteps&&u.scorePathBestSteps===c.scorePathBestSteps&&dp(u)&&dp(c)?i:void 0}l(LA,"selectWhiteConfirmBaselineBetterInputs");function GA(e,n){return n.activeColor===w.Black&&n.turnNumber===2&&n.monsMovesCount===0&&n.playerCanUseAction()&&n.playerCanMoveMana()||n.activeColor===w.Black&&n.turnNumber===2&&n.monsMovesCount>0&&!n.playerCanUseAction()&&n.playerCanMoveMana()||n.activeColor===w.Black&&n.turnNumber===4&&n.monsMovesCount===0&&n.playerCanUseAction()&&n.playerCanMoveMana()?Vo(e,n,Zo(n,"pro")):void 0}l(GA,"selectUnconditionalBlackFallbackInputs");function VA(e,n,o){if(o.length===0)return;let t=n.activeColor===w.Black&&n.turnNumber===4&&n.monsMovesCount===2&&n.playerCanUseAction()&&n.playerCanMoveMana(),r=n.activeColor===w.Black&&n.turnNumber>=4&&n.monsMovesCount>=3&&n.playerCanUseAction()&&n.playerCanMoveMana();if(!t&&!r)return;let a=Vo(e,n,Zo(n,"pro"));if(!(a.length===0||me(a,o)))return t&&a.length===3&&a[2]?.kind==="modifier"&&a[2].modifier===Ze.SelectBomb||r?a:void 0}l(VA,"selectLateBlackFallbackInputs");function Sr(e){return e===void 0?Gk:Vk(e)}l(Sr,"guardResult");var HA=Object.freeze([Object.freeze({id:"early-white-fallback",evaluate:l((e,n)=>Sr(NA(e,n)),"evaluate")}),Object.freeze({id:"score-window-tactical-fallback",evaluate:l((e,n,o)=>Sr(DA(e,n,o)),"evaluate")}),Object.freeze({id:"unconditional-black-fallback",evaluate:l((e,n)=>Sr(GA(e,n)),"evaluate")})]),UA=Object.freeze([Object.freeze({id:"white-early-baseline-fallback",evaluate:l((e,n,o,t)=>Sr(_A(e,n,o,t)),"evaluate")}),Object.freeze({id:"white-nonnegative-deny-fallback",evaluate:l((e,n,o,t)=>Sr(FA(e,n,o,t)),"evaluate")}),Object.freeze({id:"white-negative-deny-fallback",evaluate:l((e,n,o,t)=>Sr(WA(e,n,o,t)),"evaluate")}),Object.freeze({id:"white-confirm-baseline-tiebreak",evaluate:l((e,n,o,t)=>Sr(BA(e,n,o,t)),"evaluate")}),Object.freeze({id:"white-confirm-baseline-better",evaluate:l((e,n,o,t)=>Sr(LA(e,n,o,t)),"evaluate")}),Object.freeze({id:"late-black-fallback",evaluate:l((e,n,o,t)=>Sr(VA(e,n,t)),"evaluate")})]);function qk(e,n,o,t){for(let a of HA){if(e.session.checkpoint())return[];let i=a.evaluate(e,n,o);if(i.kind==="select")return[...i.inputs]}let r=Hf(e,n,t);if(e.session.checkpoint())return[];for(let a of UA){if(e.session.checkpoint())return[];let i=a.evaluate(e,n,o,r);if(i.kind==="select")return[...i.inputs]}return r}l(qk,"selectProductionPolicyInputs");var jA=200,KA=100,qA=550;function zk(e,n,o){return e.session.withDeadlineIfAbsent(Yf,()=>{let t=Ps(n);if(e.session.checkpoint())return t;let r=Vo(e,n,o);return r.length===0||e.session.checkpoint()?t:r})}l(zk,"selectStrategicSearchInputsWithDeadline");function zA(e,n){let o=Zo(n,"fast"),t=e.session.withCooperativeSubdeadline(jA,()=>[...Mc(e,n,o,!0)]);return t===void 0&&Lk(e),t}l(zA,"selectFastPreferenceBankInputs");function $A(e,n,o){let t=o.length>0?o:Ps(n);if(e.session.checkpoint())return t;let r=zA(e,n);if(r!==void 0&&r.length>0){if(e.session.checkpoint())return t;t=r}if(e.session.checkpointWithReserve(KA))return t;let a=Zo(n,"pro"),i=_r(a),s=qk(e,n,a,i);return s.length===0||e.session.checkpoint()?t:s}l($A,"selectCanonicalProductionInputs");function $k(e,n,o=Zh){return e.session.withDeadlineIfAbsent(qA,()=>{let t=o(e,n);return t.kind==="supported"?t.inputs:$A(e,n,t.fallbackInputs)})}l($k,"selectProductionInputsWithDeadline");function XA(e,n,o){let t=n.fen(),r=o==="pro"?$k(e,n):zk(e,n,Zo(n,o)),a=r.length===0?Ps(n):r,i=Sn(n,a),s=a;if(i===void 0&&(s=Ps(n),i=Sn(n,s)),n.fen()!==t)throw new Error("automove suggestion mutated its source game");return i===void 0?{output:{kind:"invalid-input"},inputFen:""}:{output:{kind:"events",events:i.events},inputFen:Rr(s)}}l(XA,"suggestStrategicMove");function Xk(e,n,o){return o==="random"?lp(e,n.fork()):XA(e,n,o)}l(Xk,"suggestMove");function mp(e){let n={i:e.row,j:e.column};if(!Number.isInteger(e.row)||!Number.isInteger(e.column)||!ut(n))throw new RangeError(`position must contain integer row and column values from 0 through ${10}`);return n}l(mp,"toEnginePosition");function cn(e){return{row:e.i,column:e.j}}l(cn,"fromEnginePosition");function qt(e){return{kind:e.kind,color:e.color,cooldown:e.cooldown}}l(qt,"fromEngineMon");function kc(e){return e.kind==="supermana"?{kind:"supermana"}:{kind:"regular",color:e.color}}l(kc,"fromEngineMana");function Ts(e){switch(e.kind){case"mon":return{kind:"mon",mon:qt(e.mon)};case"mana":return{kind:"mana",mana:kc(e.mana)};case"mon-with-mana":return{kind:"mon",mon:qt(e.mon),carrying:{kind:"mana",mana:kc(e.mana)}};case"mon-with-consumable":return{kind:"mon",mon:qt(e.mon),carrying:{kind:"consumable",consumable:e.consumable}};case"consumable":return{kind:"consumable",consumable:e.consumable}}}l(Ts,"fromEngineItem");function Yk(e){switch(e.kind){case"regular":case"consumable-base":case"supermana-base":return{kind:e.kind};case"mana-base":case"mana-pool":return{kind:e.kind,color:e.color};case"mon-base":return{kind:e.kind,color:e.color,monKind:e.monKind}}}l(Yk,"fromEngineSquare");function jf(e){switch(e.kind){case"takeback":return{kind:"takeback"};case"position":return{kind:"location",location:mp(e.position)};case"modifier":return{kind:"modifier",modifier:e.modifier}}}l(jf,"toEngineInput");function fp(e){switch(e.kind){case"takeback":return{kind:"takeback"};case"location":return{kind:"position",position:cn(e.location)};case"modifier":return{kind:"modifier",modifier:e.modifier}}}l(fp,"fromEngineInput");function YA(e){let n=fp(e.input),o=e.actorMonItem===void 0?{}:{actor:Ts(e.actorMonItem)};if(e.kind==="select-consumable"){if(n.kind!=="modifier")throw new Error("consumable selection requires a modifier input");return{action:e.kind,input:n,...o}}if(n.kind!=="position")throw new Error(`${e.kind} requires a position input`);switch(e.kind){case"mon-move":case"mana-move":case"mystic-action":case"demon-action":case"demon-additional-step":case"spirit-target-capture":case"spirit-target-move":case"bomb-attack":return{action:e.kind,input:n,...o}}}l(YA,"fromEngineInputOption");function yp(e){switch(e.kind){case"mon-move":return{kind:e.kind,item:Ts(e.item),from:cn(e.from),to:cn(e.to)};case"mana-move":return{kind:e.kind,mana:kc(e.mana),from:cn(e.from),to:cn(e.to)};case"mana-scored":case"mana-dropped":return{kind:e.kind,mana:kc(e.mana),at:cn(e.at)};case"mystic-action":return{kind:e.kind,mystic:qt(e.mystic),from:cn(e.from),to:cn(e.to)};case"demon-action":case"demon-additional-step":return{kind:e.kind,demon:qt(e.demon),from:cn(e.from),to:cn(e.to)};case"spirit-target-move":return{kind:e.kind,item:Ts(e.item),from:cn(e.from),to:cn(e.to),by:cn(e.by)};case"pickup-bomb":return{kind:e.kind,by:qt(e.by),at:cn(e.at)};case"pickup-potion":return{kind:e.kind,by:Ts(e.by),at:cn(e.at)};case"use-potion":case"supermana-back-to-base":return{kind:e.kind,from:cn(e.from),to:cn(e.to)};case"pickup-mana":return{kind:e.kind,mana:kc(e.mana),by:qt(e.by),at:cn(e.at)};case"mon-fainted":return{kind:e.kind,mon:qt(e.mon),from:cn(e.from),to:cn(e.to)};case"bomb-attack":return{kind:e.kind,by:qt(e.by),from:cn(e.from),to:cn(e.to)};case"mon-awake":return{kind:e.kind,mon:qt(e.mon),at:cn(e.at)};case"bomb-explosion":return{kind:e.kind,at:cn(e.at)};case"next-turn":return{kind:e.kind,color:e.color};case"game-over":return{kind:e.kind,winner:e.winner};case"takeback":return{kind:e.kind}}}l(yp,"fromEngineEvent");function Kf(e,n){switch(e.kind){case"invalid-input":return{kind:"invalid",inputFen:n};case"locations-to-start-from":return{kind:"awaiting-start",inputFen:n,positions:e.locations.map(cn)};case"next-input-options":return{kind:"awaiting-input",inputFen:n,options:e.nextInputs.map(YA)};case"events":return{kind:"complete",inputFen:n,events:e.events.map(yp)}}}l(Kf,"fromEngineOutput");function Qk(e){return{monMoves:e.get(Ro.MonMove)??0,manaMoves:e.get(Ro.ManaMove)??0,actions:e.get(Ro.Action)??0,potions:e.get(Ro.Potion)??0}}l(Qk,"availableMoveCountsFromEngine");function QA(e){if(e!=="")return Pr(e)}l(QA,"parseReplayMove");function Sp(e,n,o,t){let r=0,a=0;for(;r<n.length||a<o.length;){let i=e.activeColor===w.White,c=(i?n:o)[i?r:a];if(c===void 0)return{status:"missing-move",whiteMovesProcessed:r,blackMovesProcessed:a};let p=QA(c);if(p===void 0)return{status:"invalid-move",whiteMovesProcessed:r,blackMovesProcessed:a};let m=e.processInput(p,!1,!1);if(m.kind!=="events"||m.events.length===0)return{status:"invalid-move",whiteMovesProcessed:r,blackMovesProcessed:a};i?r+=1:a+=1;let d={whiteMovesProcessed:r,blackMovesProcessed:a};if(t?.(e,d)===!1)return{status:"stopped",...d}}return{status:"complete",whiteMovesProcessed:r,blackMovesProcessed:a}}l(Sp,"replayInterleavedMoves");var ke,hp,Rc,zf,oi=class oi{constructor(n={}){H(this,ke);H(this,hp,new vc);let{variant:o=fe.Classic}=n;if(!JA(o))throw new TypeError(`unsupported game variant: ${String(o)}`);F(this,ke,new To(!0,o))}static fromFen(n){var t;let o=To.fromFen(n,!0);if(o?.fen()===n)return K(t=oi,Rc,zf).call(t,o)}get variant(){return R(this,ke).variant()}get activeColor(){return R(this,ke).activeColor}get turnNumber(){return R(this,ke).turnNumber}get scores(){return{[w.White]:R(this,ke).whiteScore,[w.Black]:R(this,ke).blackScore}}get potions(){return{[w.White]:R(this,ke).whitePotionsCount,[w.Black]:R(this,ke).blackPotionsCount}}get moveUsage(){return{monMoves:R(this,ke).monsMovesCount,manaMoves:R(this,ke).manaMovesCount,actions:R(this,ke).actionsUsedCount}}get winner(){return R(this,ke).winnerColor()}get historyVerified(){return R(this,ke).isMovesVerified}get takebackFens(){return[...R(this,ke).takebackFens]}get trackingEntries(){return R(this,ke).verboseTrackingEntities.map(n=>({fen:n.fen,color:n.color,events:n.events.map(yp),eventsFen:Bp(n.events)}))}toFen(){return R(this,ke).fen()}preview(n){let o=n.map(jf),t=Rr(o),r=o.length===1&&o[0]?.kind==="takeback"?R(this,ke).copy():R(this,ke).fork();return Kf(r.processInput(o,!1,!1),t)}previewFen(n){let o=Zk(n);return o===void 0?{kind:"invalid",inputFen:n}:this.preview(o)}play(n){let o=n.map(jf),t=Rr(o),r=Kf(R(this,ke).processInput(o,!1,!1),t);return r.kind==="complete"?r:{kind:"invalid",inputFen:t}}playFen(n){let o=Zk(n);return o===void 0?{kind:"invalid",inputFen:n}:this.play(o)}itemAt(n){let o=R(this,ke).board.get(mp(n));return o===void 0?void 0:Ts(o)}squareAt(n){return Yk(R(this,ke).board.squareAt(mp(n)))}contentPositions(){let n=new Map;for(let[o]of R(this,ke).board.entries())n.set(Jk(o.i,o.j),{row:o.i,column:o.j});for(let o of R(this,ke).board.allMonsBases())n.set(Jk(o.i,o.j),{row:o.i,column:o.j});return[...n.values()].sort((o,t)=>o.row-t.row||o.column-t.column)}canTakeback(n){if(!ZA(n))throw new TypeError(`unsupported color: ${String(n)}`);return R(this,ke).canTakeback(n)}takeback(){return this.play([{kind:"takeback"}])}previousTurn(n){var u;let o=R(this,ke).verboseTrackingEntities;if(o.length<=1)return;let t=o.slice(0,-1),r=t[t.length-1],a=To.fromFen(r?.fen??R(this,ke).fen(),!0);if(a===void 0)return;let i=n.lastIndexOf(a.fen());if(n.length>0&&i<0)return;let s=i<0?[]:n.slice(0,i+1);if(!s.some(c=>{let p=To.fromFen(c,!1);return p?.fen()!==c||p.variant()!==a.variant()}))return a.replaceHistory({takebackFens:s,trackingEntries:t,verboseTrackingEnabled:!0,movesVerified:R(this,ke).isMovesVerified}),K(u=oi,Rc,zf).call(u,a)}verifyHistory(n){let o=new To(!0,R(this,ke).variant());return Sp(o,n.white,n.black).status!=="complete"||o.fen()!==R(this,ke).fen()?!1:(R(this,ke).replaceHistory({takebackFens:o.takebackFens,trackingEntries:o.verboseTrackingEntities,movesVerified:!0}),!0)}isLaterThan(n){return R(this,ke).isLaterThan(R(n,ke))}availableMoveCounts(){return Qk(R(this,ke).availableMoveKinds())}suggestMove(n){if(!e0(n))throw new TypeError(`unsupported automove preference: ${String(n)}`);let o=R(this,hp).run(r=>Xk(r,R(this,ke),n));if(o.output.kind!=="events")return;let t=Pr(o.inputFen);if(t!==void 0)return{inputs:t.map(fp),inputFen:o.inputFen,events:o.output.events.map(yp)}}clearTracking(){R(this,ke).clearTracking()}};ke=new WeakMap,hp=new WeakMap,Rc=new WeakSet,zf=l(function(n){let o=new oi({variant:n.variant()});return F(o,ke,n),o},"#fromEngine"),H(oi,Rc),l(oi,"Game");var qf=oi;function Zk(e){return Pr(e)?.map(fp)}l(Zk,"parseStrictInputArrayFen");function ZA(e){return e===w.White||e===w.Black}l(ZA,"isColor");function JA(e){return Object.values(fe).includes(e)}l(JA,"isGameVariant");function e0(e){return Object.values(vp).includes(e)}l(e0,"isAutomovePreference");function Jk(e,n){return`${e},${n}`}l(Jk,"positionKey");function n0(e){let n=eR(e.white.fen),o=eR(e.black.fen);if(n===void 0||o===void 0)return n===void 0&&o===void 0?{kind:"invalid"}:{kind:"winner",winner:n===void 0?w.Black:w.White};if(n.variant()!==o.variant())return{kind:"invalid"};let t=n.fen(),r=o.fen();if(n.winnerColor()===void 0&&o.winnerColor()===void 0)return{kind:"ongoing"};let a=new To(!1,n.variant()),i;return Sp(a,e.white.moves,e.black.moves,(s,{whiteMovesProcessed:u,blackMovesProcessed:c})=>{let p=s.winnerColor();if(p===void 0)return!0;let m=p===w.White?u===e.white.moves.length:c===e.black.moves.length,d=p===w.White?t:r;return i=m&&d===s.fen()?{kind:"winner",winner:p}:{kind:"invalid"},!1}),i??{kind:"invalid"}}l(n0,"resolveMatch");function eR(e){let n=To.fromFen(e,!1);return n?.fen()===e?n:void 0}l(eR,"submittedGame");export{vp as AutomovePreference,w as Color,q as Consumable,qf as Game,fe as GameVariant,Ze as Modifier,A as MonKind,n0 as resolveMatch};
|